ZGlmZiAtLWdpdCBhL3BhZ2VzL3RyYW5zY3JpcHRzLzIwMTNfRWNsaXBzZUNvbkZyYW5jZS9JbnRlbnRfRUNvbkZyYW5jZTIwMTMuaHRtbCBiL3BhZ2VzL3RyYW5zY3JpcHRzLzIwMTNfRWNsaXBzZUNvbkZyYW5jZS9JbnRlbnRfRUNvbkZyYW5jZTIwMTMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YzhjZjI0Ci0tLSAvZGV2L251bGwKKysrIGIvcGFnZXMvdHJhbnNjcmlwdHMvMjAxM19FY2xpcHNlQ29uRnJhbmNlL0ludGVudF9FQ29uRnJhbmNlMjAxMy5odG1sCkBAIC0wLDAgKzEsNTg5IEBACis8IS0tCitHb29nbGUgSU8gMjAxMiBIVE1MNSBTbGlkZSBUZW1wbGF0ZQorCitBdXRob3JzOiBFcmljIEJpZGVsbWFuIDxlYmlkZWxAZ21haWwuY29tPgorICAgICAgICAgTHVrZSBNYWjDqSA8bHVrZW1AZ29vZ2xlLmNvbT4KKworVVJMOiBodHRwczovL2NvZGUuZ29vZ2xlLmNvbS9wL2lvLTIwMTItc2xpZGVzCistLT4KKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8aGVhZD4KKyAgPG1ldGEgY2hhcnNldD0idXRmLTgiPgorICA8bWV0YSBodHRwLWVxdWl2PSJYLVVBLUNvbXBhdGlibGUiIGNvbnRlbnQ9ImNocm9tZT0xIj4KKyAgPCEtLTxtZXRhIG5hbWU9InZpZXdwb3J0IiBjb250ZW50PSJ3aWR0aD1kZXZpY2Utd2lkdGgsIGluaXRpYWwtc2NhbGU9MS4wLCBtaW5pbXVtLXNjYWxlPTEuMCI+LS0+CisgIDwhLS08bWV0YSBuYW1lPSJ2aWV3cG9ydCIgY29udGVudD0id2lkdGg9ZGV2aWNlLXdpZHRoLCBpbml0aWFsLXNjYWxlPTEuMCI+LS0+CisgIDwhLS1UaGlzIG9uZSBzZWVtcyB0byB3b3JrIGFsbCB0aGUgdGltZSwgYnV0IHJlYWxseSBzbWFsbCBvbiBpcGFkLS0+CisgIDwhLS08bWV0YSBuYW1lPSJ2aWV3cG9ydCIgY29udGVudD0iaW5pdGlhbC1zY2FsZT0wLjQiPi0tPgorICA8bWV0YSBuYW1lPSJhcHBsZS1tb2JpbGUtd2ViLWFwcC1jYXBhYmxlIiBjb250ZW50PSJ5ZXMiPgorICA8bGluayByZWw9InN0eWxlc2hlZXQiIG1lZGlhPSJhbGwiIGhyZWY9InRoZW1lL2Nzcy9kZWZhdWx0LmNzcyI+CisgICA8bGluayByZWw9InN0eWxlc2hlZXQiIG1lZGlhPSJhbGwiIGhyZWY9InRoZW1lL2Nzcy9jdXN0by5jc3MiPgorICA8bGluayByZWw9InN0eWxlc2hlZXQiIG1lZGlhPSJvbmx5IHNjcmVlbiBhbmQgKG1heC1kZXZpY2Utd2lkdGg6IDQ4MHB4KSIgaHJlZj0idGhlbWUvY3NzL3Bob25lLmNzcyI+ICAKKyAgPGJhc2UgdGFyZ2V0PSJfYmxhbmsiPiA8IS0tIFRoaXMgYW1hemluZ25lc3Mgb3BlbnMgYWxsIGxpbmtzIGluIGEgbmV3IHRhYi4gLS0+CisgIDxzY3JpcHQgZGF0YS1tYWluPSJqcy9zbGlkZXMiIHNyYz0ianMvcmVxdWlyZS0xLjAuOC5taW4uanMiPjwvc2NyaXB0PgorICA8dGl0bGU+V1RGTSEgV3JpdGUgVGhlIEZyaWVuZGx5IE1hbnVhbCB3aXRoIE15bHluIEludGVudDwvdGl0bGU+Cis8L2hlYWQ+Cis8Ym9keSBzdHlsZT0ib3BhY2l0eTogMCI+CisKKzxzbGlkZXMgY2xhc3M9ImxheW91dC13aWRlc2NyZWVuIj4KKworICA8c2xpZGUgY2xhc3M9InRpdGxlLXNsaWRlIHNlZ3VlIG5vYmFja2dyb3VuZCIgc3R5bGU9ImJhY2tncm91bmQ6IHVybChpbWFnZXMvSW50ZW50L2RvYy93dGZtMi5qcGcpOyBiYWNrZ3JvdW5kLXNpemU6IDEwMCU7Ij4KKwk8YXNpZGUgY2xhc3M9ImdkYmFyIiBzdHlsZT0id2lkdGg6IDM1MHB4OyI+CQorCQk8aW1nIHN0eWxlPSIgd2lkdGg6IDI2MXB4O2hlaWdodDogODVweDtwb3NpdGlvbjogYWJzb2x1dGU7cmlnaHQ6IDA7bWFyZ2luOiA4cHggMTVweDsiIAorCXNyYz0iaW1hZ2VzL0ludGVudC9JbWFnZS1JbnRlbnRfbG9nby5wbmciPgorCTwvYXNpZGU+CisgICAgPCEtLSBUaGUgY29udGVudCBvZiB0aGlzIGhncm91cCBpcyByZXBsYWNlZCBwcm9ncmFtbWF0aWNhbGx5IHRocm91Z2ggdGhlIHNsaWRlX2NvbmZpZy5qc29uLiAtLT4KKyAgICA8aGdyb3VwIHN0eWxlPSJwb3NpdGlvbjpyZWxhdGl2ZTtsZWZ0Oi0zMHB4O3RvcDoyMDBweDtwYWRkaW5nOiAwcHggMHB4IDBweCAwcHg7bWFyZ2luOjBweCAwcHggMHB4IDBweDsiPgorCQk8ZGl2PgorICAgICAgPGgxIGRhdGEtY29uZmlnLXRpdGxlIGNsYXNzPSJzdHJva2Ugd2hpdGUiIHN0eWxlPSJmb250LXNpemU6NTJweCI+PCEtLSBwb3B1bGF0ZWQgZnJvbSBzbGlkZV9jb25maWcuanNvbiAtLT48L2gxPgorICAgICAgPGgyIGRhdGEtY29uZmlnLXN1YnRpdGxlIGNsYXNzPSJzdHJva2Ugd2hpdGUiPjwhLS0gcG9wdWxhdGVkIGZyb20gc2xpZGVfY29uZmlnLmpzb24gLS0+PC9oMj4KKwkgIDxici8+PGJyLz48YnIvPjxici8+PGJyLz4KKwkgIDxwIHN0eWxlPSJmb250LXNpemU6MjdweCIgZGF0YS1jb25maWctcHJlc2VudGVyIGNsYXNzPSJzdHJva2Ugd2hpdGUiPjwhLS0gcG9wdWxhdGVkIGZyb20gc2xpZGVfY29uZmlnLmpzb24gLS0+PC9wPgorCSAJPHAgc3R5bGU9ImZvbnQtc2l6ZToyN3B4O3dpZHRoOjMwMHB4O21hcmdpbi10b3A6LTcwcHg7IG1hcmdpbi1sZWZ0OjczMHB4Ij48aW1nIHNyYz0iaW1hZ2VzL0ludGVudC9lY29uZnJhbmNlLnBuZyIgc3R5bGU9IndpZHRoOjcwJSIgLz48L3A+CisJICA8L2Rpdj4KKwkgIDwvZGl2PgorICAgIDwvaGdyb3VwPgkKKworICA8L3NsaWRlPgorCisgIDxzbGlkZSBjbGFzcz0ibnV0c2hlbGwiPgorICAgIDxoZ3JvdXA+CisgICAgICA8aDI+CisJICA8aW1nIHN0eWxlPSJ3aWR0aDogMjYxcHg7aGVpZ2h0OiA4NXB4O2Zsb2F0OmxlZnQ7IiBzcmM9ImltYWdlcy9JbnRlbnQvSW1hZ2UtSW50ZW50X2xvZ28ucG5nIj4KKwkgIDxkaXYgc3R5bGU9InBhZGRpbmctdG9wOjIwcHg7Ij4mbmJzcDsmbmJzcDtpbiBhIE51dHNoZWxsPC9kaXY+CisJICA8L2gyPjxoci8+CisgICAgPC9oZ3JvdXA+CisgICAgPGFydGljbGUgY2xhc3M9ImF1dG8tZmFkZWluIG5vQnVsbGV0cyI+CisgICAgICA8dWwgPgorICAgICAgICA8bGk+QSA8Yj5kb2N1bWVudGF0aW9uPC9iPiBlbnZpcm9ubWVudDwvbGk+CisJCTx1bCBjbGFzcz0iYnVpbGQiPgorCQkJPGxpPjxiPnN5bmNocm9uaXplZDwvYj4gd2l0aCBkZXZlbG9wbWVudCBhcnRpZmFjdHM8L2xpPgorCQkJPGxpPjxiPmN1c3RvbWl6YWJsZTwvYj4gZm9yIHlvdXIgZGV2ZWxvcG1lbnQgcHJvY2Vzc2VzPC9saT4KKwkJPC91bD4KKyAgICA8L2FydGljbGU+CisJPGFydGljbGUgY2xhc3M9ImJ1aWxkIHJpZ2h0YWxpZ25lZCIgc3R5bGU9InBhZGRpbmctdG9wOjEwMHB4O3BhZGRpbmctcmlnaHQ6MjBweDsiPgorICAgICAgPHVsPgorICAgICAgICA8aW1nIHN0eWxlPSJmbG9hdDpsZWZ0O3Bvc2l0aW9uOmFic29sdXRlO2xlZnQ6NTgwcHgiIHNyYz0iaW1hZ2VzL0ludGVudC9lZ2ctaW5jdWJhdGlvbi5wbmciLz4KKwkJPGJyLz48c3BhbiBzdHlsZT0icGFkZGluZy10b3A6MTBweCI+UGFyZiBvZiA8Yj5NeWx5bjwvYj4gZG9jczxici8+PGJyLz4KKwkJSW4gaW5jdWJhdGlvbiBwaGFzZTxici8+PGJyLz48L3NwYW4+CisJCTxkaXYgc3R5bGU9ImNsZWFyOmJvdGgiLz4KKwkgICAgUGFyZiBvZiBSZWxlYXNlIHRyYWluIHNpbmNlIEp1bm88YnIvPgorCSAgPC91bD4KKyAgICA8L2FydGljbGU+CisgIDwvc2xpZGU+CisgIAorICA8c2xpZGUgY2xhc3M9InNlZ3VlIG5vYmFja2dyb3VuZCBwYXJ0VGl0bGUiIHN0eWxlPSJiYWNrZ3JvdW5kOiB1cmwoaW1hZ2VzL0ludGVudC9kb2Mvd2FzdGVkX3BhcGVyLmpwZyk7IGJhY2tncm91bmQtc2l6ZTogMTAwJTsiPgorCSAgPGgyIHN0eWxlPSJ0b3A6LTIwcHgiPjEuIERvY3VtZW50YXRpb24gU3Vja3MgPHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTowcHg7Ij5fPC9zcGFuPjwvaDI+CisJICA8YXNpZGUgc3R5bGU9InRvcDoyMHB4OyB3aWR0aDo2NTBweCIgY2xhc3M9ImdkYmFyIiA+PC9hc2lkZT4KKyAgPC9zbGlkZT4KKworICA8c2xpZGUgY2xhc3M9InBhcnQxIj4KKyAgICA8aGdyb3VwPgorICAgICAgPGgyPgorCQlXaHkgZG9lcyBEb2N1bWVudGF0aW9uIDxiPlN1Y2s8L2I+PworCSAgPC9oMj48aHIvPgorICAgIDwvaGdyb3VwPgorICAgIDxhcnRpY2xlIGNsYXNzPSJhdXRvLWZhZGVpbiBub0J1bGxldHMiPgorCQk8cD4KKwkJICAxLiBCZWNhdXNlIG1vc3Qgb2YgdGhlIHRpbWUgaXQgZG9lcyBub3QgZXhpc3QvY29udGFpbiB0aGUgaW5mb3MgeW91IG5lZWQKKwkJIDwvcD4KKwkJPC9hcnRpY2xlPgorCTwvc2xpZGU+CisJCisJPHNsaWRlIGNsYXNzPSJwYXJ0MSI+CisgICAgPGhncm91cD4KKyAgICAgIDxoMj4KKwkJV2h5IGRvZXMgRG9jdW1lbnRhdGlvbiA8Yj5TdWNrPC9iPj8KKwkgIDwvaDI+PGhyLz4KKyAgICA8L2hncm91cD4KKyAgICA8YXJ0aWNsZSBjbGFzcz0ibm9CdWxsZXRzIj4KKwkJPHA+CisJCSAgMS4gQmVjYXVzZSBtb3N0IG9mIHRoZSB0aW1lIGl0IGRvZXMgbm90IGV4aXN0L2NvbnRhaW4gdGhlIGluZm9zIHlvdSBuZWVkCisJCSA8L3A+CisJCTxkaXYgY2xhc3M9InBhZGRpbmdlciI+CisJCQkgPGhncm91cD4KKwkJCQkgIDxoMz4KKwkJCQkJV2h5IGRvZXMgbm9ib2R5IHdyaXRlIGRvYz8gPGJyLz48aHIvPgorCQkJCSAgPC9oMz4KKwkJCSAgIDwvaGdyb3VwPgorCQkJICA8aW1nIGNsYXNzPSJyZWZsZWN0IiBzcmM9ImltYWdlcy9JbnRlbnQvZG9jL2JsYW5rX2RvYy5qcGciICBzdHlsZT0iZmxvYXQ6bGVmdDtwYWRkaW5nLXJpZ2h0OjEwcHg7d2lkdGg6MzUlIi8+CisJCQkgICAgPHA+Q29tcGFyYWJsZSB0byBtYXNzaXZlIHJlamVjdGlvbiBvZiBVbml0IFRlc3Rpbmc8YnIvPjxici8+PC9wPgorCQkJCTxwPiJXb3JraW5nIHNvZnR3YXJlIDxiPm92ZXIgY29tcHJlaGVuc2l2ZSBkb2N1bWVudGF0aW9uPC9iPiI8YnIvPgorCQkJCQk8c3BhbiBzdHlsZT0icGFkZGluZy1sZWZ0OjM3NXB4Ij5BZ2lsZSBNYW5pZmVzdG88L3NwYW4+CisJCQkJPC9wPgorCQkJCTxwPgorCQkJCQk8YnIvPgorCQkJRG9uJ3QgYmUgc2hvcnQtc2lnaHRlZDogRW5hYmxlIHlvdXIgPGI+bmV4dCBlZmZvcnQ8L2I+PGJyLz4KKwkJCQk8YnIvPgk8YnIvPglBcyBhIGRldmVsb3BwZXIsIHlvdSBzcGVuZCBtb3N0IG9mIHlvdXIgdGltZSA8Yj51bmRlcnN0YW5kaW5nIG90aGVyIHBlb3BsZSdzIGNvZGU8L2I+Ljxici8+CisJCQkJPC9wPgorCQkgPC9kaXY+CisJCTwvYXJ0aWNsZT4KKwk8L3NsaWRlPgorCQorCTxzbGlkZSBjbGFzcz0icGFydDEiPgorICAgIDxoZ3JvdXA+CisgICAgICA8aDI+CisJCVdoeSBkb2VzIERvY3VtZW50YXRpb24gPGI+U3VjazwvYj4/CisJICA8L2gyPjxoci8+CisgICAgPC9oZ3JvdXA+CisgICAgPGFydGljbGUgY2xhc3M9Im5vQnVsbGV0cyI+CisJCSA8cD4KKwkJICAxLiBCZWNhdXNlIG1vc3Qgb2YgdGhlIHRpbWUgaXQgZG9lcyBub3QgY29udGFpbiB3aGF0IHlvdSBhcmUgbG9va2luZyBmb3IuCisJCSA8L3A+CisJCSA8cD4KKwkJCTIuIEJlY2F1c2UgbW9zdCBvZiB0aGUgdGltZSBpdCdzIDxiPm91dGRhdGVkPC9iPiAtPiBubyBvbmUgdHJ1c3RzIGl0IGFueW1vcmUJCQkJIAorCQk8L3A+CisgICAgPC9hcnRpY2xlPgkKKyAgPC9zbGlkZT4KKyAgCisgIDxzbGlkZSBjbGFzcz0icGFydDEiPgorICAgIDxoZ3JvdXA+CisgICAgICA8aDI+CisJCVdoeSBkb2VzIERvY3VtZW50YXRpb24gPGI+U3VjazwvYj4/CisJICA8L2gyPjxoci8+CisgICAgPC9oZ3JvdXA+CisgICAgPGFydGljbGUgY2xhc3M9Im5vQnVsbGV0cyI+CisJCSA8cD4KKwkJICAxLiBCZWNhdXNlIG1vc3Qgb2YgdGhlIHRpbWUgaXQgZG9lcyBub3QgY29udGFpbiB3aGF0IHlvdSBhcmUgbG9va2luZyBmb3IuCisJCSA8L3A+CisJCSA8cD4KKwkJCTIuIEJlY2F1c2UgbW9zdCBvZiB0aGUgdGltZSBpdCdzIDxiPm91dGRhdGVkPC9iPiAtPiBubyBvbmUgdHJ1c3RzIGl0IGFueW1vcmUJCQkJIAorCQk8L3A+CisJCTxkaXYgY2xhc3M9InBhZGRpbmdlciI+CisJCQk8aGdyb3VwPgorCQkJCSA8aDM+CisJCQkJCVdoeSBpcyBEb2N1bWVudGF0aW9uIDxiPm91dGRhdGVkPC9iPj88YnIvPjxoci8+CisJCQkJPC9oMz4KKwkJCTwvaGdyb3VwPgorCQkJPGltZyBjbGFzcz0iYnVpbGQiIHNyYz0iaW1hZ2VzL0ludGVudC9kb2MvZG9jX21vbnN0ZXIucG5nIiAgc3R5bGU9ImZsb2F0OmxlZnQ7cGFkZGluZy1yaWdodDoxMHB4O3dpZHRoOjM1JSIvPgorCQkJPHA+CisJCQkJQmVjYXVzZSA8Yj5rZWVwaW5nIHlvdXIgZG9jIHN5bmNocm9uaXplZDwvYj4gaXMgYSBidXJkZW4gPGJyLz4KKwkJCQk8YnIvPgorCQkJCTxici8+CisJCQkJVGhhdCdzIGV4YWN0bHkgd2hhdCBJbnRlbnQgaXMgYWJvdXQKKwkJCTwvcD4KKwkJCTxkaXYgc3R5bGU9ImNsZWFyOmJvdGgiLz4KKwkJPC9kaXY+CisgICAgPC9hcnRpY2xlPgkKKyAgPC9zbGlkZT4KKyAgCisKKyAgPHNsaWRlIGNsYXNzPSJzZWd1ZSBub2JhY2tncm91bmQgcGFydFRpdGxlIiBzdHlsZT0iYmFja2dyb3VuZDogdXJsKGltYWdlcy9JbnRlbnQvcGFydDIuanBnKTsgYmFja2dyb3VuZC1zaXplOiAxMDAlOyI+CisJICA8aDI+Mi4gU3luY2hyb25pemUgeW91ciBEb2Mgd2l0aCBJbnRlbnQgPHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTowcHg7Ij5fPC9zcGFuPjwvaDI+CisJICA8YXNpZGUgc3R5bGU9IndpZHRoOjg3NXB4IiBjbGFzcz0iZ2RiYXIiID48L2FzaWRlPgorICA8L3NsaWRlPgorICAKKyAgICAKKyAgPHNsaWRlIGNsYXNzPSJwYXJ0MiIgc3R5bGU9ImJhY2tncm91bmQ6IHVybChpbWFnZXMvSW50ZW50L2xpbmtlZF9kb2MucG5nKTsgYmFja2dyb3VuZC1zaXplOiA5MCU7YmFja2dyb3VuZC1wb3NpdGlvbjo2MHB4IDBweDtiYWNrZ3JvdW5kLWNvbG9yOndoaXRlOyBiYWNrZ3JvdW5kLXJlcGVhdCA6IG5vLXJlcGVhdDsiPgorCTxkaXYgY2xhc3M9ImF1dG8tZmFkZWluIHBhZGRpbmdlciIgc3R5bGU9InBvc2l0aW9uOnJlbGF0aXZlO3RvcDoxMDBweDt0ZXh0LWFsaWduOmNlbnRlcjt3aWR0aDo2MiUiPgorCQk8aDI+V2hhdCBkbyB3ZSB3YW50ID88L2gyPgorCQk8aHIvPgorCQlBIG1lY2hhbmlzbSB0byA8Yj5saW5rPC9iPiBkb2N1bWVudGF0aW9uIHBhcnRzIHdpdGggdGVjaG5pY2FsPGJyLz4gYXJ0aWZhY3RzIChKYXZhIGNvZGUsIG1vZGVscywgcGx1Zy1pbiBkZXBlbmRlbmNpZXMuLi4pCisJCTwvZGl2PgorICA8L3NsaWRlPgorICAKKyAgPHNsaWRlIGNsYXNzPSJwYXJ0MiIgc3R5bGU9ImJhY2tncm91bmQ6IHVybChpbWFnZXMvSW50ZW50L2xpbmtlZF9kb2Nfc3RlcDJhLnBuZyk7IGJhY2tncm91bmQtc2l6ZTogOTAlO2JhY2tncm91bmQtcG9zaXRpb246NjBweCAwcHg7YmFja2dyb3VuZC1jb2xvcjp3aGl0ZTsgYmFja2dyb3VuZC1yZXBlYXQgOiBuby1yZXBlYXQ7Ij4KKyAgPC9zbGlkZT4KKyAgCisgIDxzbGlkZSBjbGFzcz0icGFydDIiIHN0eWxlPSJiYWNrZ3JvdW5kOiB1cmwoaW1hZ2VzL0ludGVudC9saW5rZWRfZG9jX3N0ZXA1Yi5wbmcpOyBiYWNrZ3JvdW5kLXNpemU6IDkwJTtiYWNrZ3JvdW5kLXBvc2l0aW9uOjYwcHggMHB4O2JhY2tncm91bmQtY29sb3I6d2hpdGU7IGJhY2tncm91bmQtcmVwZWF0IDogbm8tcmVwZWF0OyI+CisgIDwvc2xpZGU+CisgIAorICAgPHNsaWRlIGNsYXNzPSJwYXJ0Tk9ORSIgc3R5bGU9ImJhY2tncm91bmQ6IHVybChpbWFnZXMvSW50ZW50L3NtYXJ0RUEvaW5zdGVhZF9vZl92Mi5wbmcpOyBiYWNrZ3JvdW5kLXNpemU6IDkwJTtiYWNrZ3JvdW5kLXBvc2l0aW9uOjMwcHggMzBweDtiYWNrZ3JvdW5kLWNvbG9yOndoaXRlOyBiYWNrZ3JvdW5kLXJlcGVhdCA6IG5vLXJlcGVhdDsiPgorICA8L3NsaWRlPgorICAKKyAgPHNsaWRlIGNsYXNzPSJwYXJ0MiI+CisgICAgPGhncm91cD4KKyAgICAgIDxoMj4KKwkJT25lIDxiPkludGVudCBEb2N1bWVudDwvYj4gbWl4aW5nIGJvdGgKKwkgIDwvaDI+PGhyLz4KKyAgICA8L2hncm91cD4KKwkJCTxwIHN0eWxlPSJwYWRkaW5nLWxlZnQ6NTBweDtwYWRkaW5nLXRvcDo1MHB4O2NvbG9yOmJsYWNrIj4KKwkJCQk8c3BhbiBzdHlsZT0iIj4tIFB1cmUgZG9jdW1lbnRhdGlvbiB6b25lczxici8+PC9zcGFuPgorCQkJCTxici8+CisJCQkJPHNwYW4gc3R5bGUiPi0gRm9ybWFsIGxpbmtzIHpvbmVzPGJyLz48L3NwYW4+CisJCQkJPGJyLz4KKwkJCTwvcD4KKwkJPGRpdiBjbGFzcz0iaW50ZW50X2NvbnRlbnQiPgorCQkJPGIgY2xhc3M9Imt3Ij5DaGFwdGVyPC9iPiA8Yj5TaWduaWZpY2FudCBTY2VuYXJpb3M8L2I+IHsKKwkJCQk8ZGl2IGNsYXNzPSJpbnRlbnRfc3Vic2VjdGlvbmNvbnRhaW5lciI+CisJCQkJPGRpdiBjbGFzcz0iZHUiPjxici8+CisJCQkJCVRoaXMgY2hhcHRlciBzcGVjaWZpZXMgdGhlIGJlaGF2aW9yIG9mIHRoZSA8Yj4qY29tLmV4YW1wbGUub2ZmZXIqPC9iPiBwbGF0Zm9ybSBieSBsaXN0aW5nIHJlbGV2YW50IHNjZW5hcmlvcy48YnIvPgorCQkJCQlUaGVzZSBzY2VuYXJpb3MgY2FuIGludm9sdmUgYm90aCBodW1hbiBhY3RvcnMgb3IgY29tcHV0ZXIvc3lzdGVtIGFjdG9ycywgYXMgZGVmaW5lZCBpbiBjaGFwdGVyIDEuNS4KKwkJCQk8L2Rpdj4KKwkJCQkJPGJyLz48YiBjbGFzcz0ia3ciPlNlY3Rpb248L2I+IDxiPlNjZW5hcmlvIFMtMDE6IGZpbHRlciBvZmZlcnMgYWNjb3JkaW5nIHRvIGEgQ2F0ZWdvcnk8L2I+IHsKKwkJCQkJCTxkaXYgY2xhc3M9ImludGVudF9zdWJzZWN0aW9uY29udGFpbmVyIj4KKwkJCQkJCQkJPGRpdiBjbGFzcz0iZHUiPjxici8+CisJCQkJCQkJCQkJPGI+KkFzIGEqPC9iPiBlbmQtdXNlcjxici8+CisJCQkJCQkJCQkJPGI+Kkkgd2FudCB0byo8L2I+IGJlIGFibGUgdG8gPGk+X2ZpbHRlcl88L2k+IG9mZmVycyBhY2NvcmRpbmcgdG8gdGhlaXIgYXNzb2NpYXRlZCBDYXRlZ29yeTxici8+CisJCQkJCQkJCQkJPGI+KkdpdmVuKjwvYj4gQSBzZXQgb2Ygb2ZmZXJzPGJyLz4KKwkJCQkJCQkJCQk8Yj4qV2hlbio8L2I+IEkgc2VsZWN0IHRoZSBjYXRlZ29yeSBlbnRpdGxlZCA8aSBzdHlsZT0iY29sb3I6Ymx1ZSI+IkJvb2tzIjwvaT4gaW4gdGhlIENhdGVnb3J5IFBhZ2U8YnIvPgorCQkJCQkJCQkJCTxiPipUaGVuPC9iPiBJIHNob3VsZCBvbmx5IHNlZSB0aGUgb2ZmZXJzIGFzc29jaWF0ZWQgdG8gdGhpcyBjYXRlZ29yeQorCQkJCQkJCQk8L2Rpdj4KKwkJCQkJCQkJPGRpdiBjbGFzcz0iaW50ZW50X21vZGVsaW5ndW5pdCI+CisJCQkJCQkJCTxiIGNsYXNzPSJrdyI+QE08L2I+PGJyLz4KKwkJCQkJCQkJPGRpdiBjbGFzcz0iaW50ZW50X3N1YnNlY3Rpb25jb250YWluZXIiPgorCQkJCQkJCQk8YiBjbGFzcz0ia3ciPkByZWY8L2I+PHNwYW4gc3R5bGU9ImNvbG9yOmJsdWUiPiAiY29tLmV4YW1wbGUub2ZmZXIudGVzdC9zcmMvY29tL2V4YW1wbGUvb2ZmZXIvdGVzdC9TY2VuYXJpbzAxVGVzdC5qYXZhIjwvc3Bhbj4KKwkJCQkJCQkJCTxici8+CisJCQkJCQkJCTwvZGl2PgorCQkJCQkJCQk8YiBjbGFzcz0ia3ciPk1APC9iPgorCQkJCQkJCQk8L2Rpdj48L2Rpdj4KKwkJCQkJCQl9CQorCQkJCTwvZGl2PgorCQkJCX0KKwkJCQkKKwkJCTwvZGl2PgorCQkJPGJyLz4KKworICA8L3NsaWRlPgorICAKKyAgIDxzbGlkZSBjbGFzcz0icGFydDIiPgorICAgIDxoZ3JvdXA+CisgICAgICA8aDI+CisJCU9uZSA8Yj5JbnRlbnQgRG9jdW1lbnQ8L2I+IG1peGluZyBib3RoCisJICA8L2gyPjxoci8+CisgICAgPC9oZ3JvdXA+CisJCTxwIHN0eWxlPSJwYWRkaW5nLWxlZnQ6NTBweDtwYWRkaW5nLXRvcDo1MHB4O2NvbG9yOmJsYWNrIj4KKwkJCTxzcGFuIHN0eWxlPSIiPi0gUHVyZSBkb2N1bWVudGF0aW9uIHpvbmVzPGJyLz4KKwkJCQk8c3BhbiBzdHlsZT0icGFkZGluZy1sZWZ0OjMwcHg7Ij5FeHBsYW5hdGlvbnMgaW4gTmF0dXJhbCBsYW5ndWFnZTxici8+PC9zcGFuPgorCQkJCTxzcGFuIHN0eWxlPSJwYWRkaW5nLWxlZnQ6MzBweDsiPlVzZSB0aGUgPGI+VGV4dGlsZTwvYj4gc3ludGF4PGJyLz48YnIvPjwvc3Bhbj4KKwkJCTwvc3Bhbj4KKwkJPC9wPgorCQk8ZGl2IGNsYXNzPSJpbnRlbnRfY29udGVudCI+CisJCQk8YiBjbGFzcz0ia3ciPkNoYXB0ZXI8L2I+IDxiPlNpZ25pZmljYW50IFNjZW5hcmlvczwvYj4geworCQkJCTxkaXYgY2xhc3M9ImludGVudF9zdWJzZWN0aW9uY29udGFpbmVyIj4KKwkJCQk8ZGl2IGNsYXNzPSJkdSI+PGJyLz4KKwkJCQkJVGhpcyBjaGFwdGVyIHNwZWNpZmllcyB0aGUgYmVoYXZpb3Igb2YgdGhlIDxiPipjb20uZXhhbXBsZS5vZmZlcio8L2I+IHBsYXRmb3JtIGJ5IGxpc3RpbmcgcmVsZXZhbnQgc2NlbmFyaW9zLjxici8+CisJCQkJCVRoZXNlIHNjZW5hcmlvcyBjYW4gaW52b2x2ZSBib3RoIGh1bWFuIGFjdG9ycyBvciBjb21wdXRlci9zeXN0ZW0gYWN0b3JzLCBhcyBkZWZpbmVkIGluIGNoYXB0ZXIgMS41LgorCQkJCTwvZGl2PgorCQkJCQk8YnIvPjxiIGNsYXNzPSJrdyI+U2VjdGlvbjwvYj4gPGI+U2NlbmFyaW8gUy0wMTogZmlsdGVyIG9mZmVycyBhY2NvcmRpbmcgdG8gYSBDYXRlZ29yeTwvYj4geworCQkJCQkJPGRpdiBjbGFzcz0iaW50ZW50X3N1YnNlY3Rpb25jb250YWluZXIiPgorCQkJCQkJCQk8ZGl2IGNsYXNzPSJkdSI+PGJyLz4KKwkJCQkJCQkJCQk8Yj4qQXMgYSo8L2I+IGVuZC11c2VyPGJyLz4KKwkJCQkJCQkJCQk8Yj4qSSB3YW50IHRvKjwvYj4gYmUgYWJsZSB0byA8aT5fZmlsdGVyXzwvaT4gb2ZmZXJzIGFjY29yZGluZyB0byB0aGVpciBhc3NvY2lhdGVkIENhdGVnb3J5PGJyLz4KKwkJCQkJCQkJCQk8Yj4qR2l2ZW4qPC9iPiBBIHNldCBvZiBvZmZlcnM8YnIvPgorCQkJCQkJCQkJCTxiPipXaGVuKjwvYj4gSSBzZWxlY3QgdGhlIGNhdGVnb3J5IGVudGl0bGVkIDxpIHN0eWxlPSJjb2xvcjpibHVlIj4iQm9va3MiPC9pPiBpbiB0aGUgQ2F0ZWdvcnkgUGFnZTxici8+CisJCQkJCQkJCQkJPGI+KlRoZW48L2I+IEkgc2hvdWxkIG9ubHkgc2VlIHRoZSBvZmZlcnMgYXNzb2NpYXRlZCB0byB0aGlzIGNhdGVnb3J5CisJCQkJCQkJCQkJPGJyLz48YnIvPgorCQkJCQkJCQk8L2Rpdj4KKwkJCQkJCQkJPGRpdiBjbGFzcz0iZ3JleWVkIj4KKwkJCQkJCQkJPGRpdiBjbGFzcz0iaW50ZW50X21vZGVsaW5ndW5pdCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6I0Y4RjhGODtjb2xvcjpncmV5O2ZvbnQtc2l6ZTogMTRweDsiPgorCQkJCQkJCQlATTxici8+CisJCQkJCQkJCTxkaXYgY2xhc3M9ImludGVudF9zdWJzZWN0aW9uY29udGFpbmVyIj4KKwkJCQkJCQkJQHJlZiAiY29tLmV4YW1wbGUub2ZmZXIudGVzdC9zcmMvY29tL2V4YW1wbGUvb2ZmZXIvdGVzdC9TY2VuYXJpbzAxVGVzdC5qYXZhIgorCQkJCQkJCQkJPC9kaXY+CisJCQkJCQkJCU1ACisJCQkJCQkJCTwvZGl2PgorCQkJCQkJCQk8L2Rpdj4KKwkJCQkJCQkJCQkJCQkKKwkJCQkJCTwvZGl2Pn0JCQkJCisJCQkJPC9kaXY+CisJCQkJfQorCQkJCQorCQk8L2Rpdj4KKyAgPC9zbGlkZT4KKyAgCisgICAgCisgIDxzbGlkZSBjbGFzcz0icGFydDIiPgorICAgIDxoZ3JvdXA+CisgICAgICA8aDI+CisJCU9uZSA8Yj5JbnRlbnQgRG9jdW1lbnQ8L2I+IG1peGluZyBib3RoCisJICA8L2gyPjxoci8+CisgICAgPC9oZ3JvdXA+CisJCTxwIHN0eWxlPSJwYWRkaW5nLWxlZnQ6NTBweDtwYWRkaW5nLXRvcDo1MHB4O2NvbG9yOmJsYWNrIj4KKwkJCTxzcGFuIHN0eWxlPSIiPi0gRm9ybWFsIGxpbmtzIHpvbmVzPGJyLz4KKwkJCQk8c3BhbiBzdHlsZT0icGFkZGluZy1sZWZ0OjMwcHg7Ij5SZWZlcmVuY2UgdG8gdGVjaG5pY2FsIGFydGlmYWN0cyAoSmF2YSwgbW9kZWxzLCBNYW5pZmVzdHMuLi4pPGJyLz48L3NwYW4+CisJCQkJPHNwYW4gc3R5bGU9InBhZGRpbmctbGVmdDozMHB4OyI+RXh0ZW5zaWJsZSBiZWhhdmlvciAoZGlzcGxheSwgaHlwZXJsaW5rcywgZXhwb3J0LCB2YWxpZGF0aW9uLi4uKTxici8+PGJyLz48L3NwYW4+CisJCQk8L3NwYW4+CisJCTwvcD4KKwkJPGRpdiBjbGFzcz0iaW50ZW50X2NvbnRlbnQgZ3JleWVkIj4KKwkJCUNoYXB0ZXIgU2lnbmlmaWNhbnQgU2NlbmFyaW9zIHsKKwkJCQk8ZGl2IGNsYXNzPSJpbnRlbnRfc3Vic2VjdGlvbmNvbnRhaW5lciI+CisJCQkJPGRpdiBjbGFzcz0iZHUiPgorCQkJCQlUaGlzIGNoYXB0ZXIgc3BlY2lmaWVzIHRoZSBiZWhhdmlvciBvZiB0aGUgKmNvbS5leGFtcGxlLm9mZmVyKiBwbGF0Zm9ybSBieSBsaXN0aW5nIHJlbGV2YW50IHNjZW5hcmlvcy48YnIvPgorCQkJCQlUaGVzZSBzY2VuYXJpb3MgY2FuIGludm9sdmUgYm90aCBodW1hbiBhY3RvcnMgb3IgY29tcHV0ZXIvc3lzdGVtIGFjdG9ycywgYXMgZGVmaW5lZCBpbiBjaGFwdGVyIDEuNS4KKwkJCQk8L2Rpdj4KKwkJCQkJPGJyLz5TZWN0aW9uIFNjZW5hcmlvIFMtMDE6IGZpbHRlciBvZmZlcnMgYWNjb3JkaW5nIHRvIGEgQ2F0ZWdvcnkgeworCQkJCQkJPGRpdiBjbGFzcz0iaW50ZW50X3N1YnNlY3Rpb25jb250YWluZXIiPgorCQkJCQkJCQk8ZGl2IGNsYXNzPSJkdSI+CisJCQkJCQkJCQkJKkFzIGEqIGVuZC11c2VyPGJyLz4KKwkJCQkJCQkJCQkqSSB3YW50IHRvKiBiZSBhYmxlIHRvIF9maWx0ZXJfIG9mZmVycyBhY2NvcmRpbmcgdG8gdGhlaXIgYXNzb2NpYXRlZCBDYXRlZ29yeTxici8+CisJCQkJCQkJCQkJKkdpdmVuKiBBIHNldCBvZiBvZmZlcnM8YnIvPgorCQkJCQkJCQkJCSpXaGVuKiBJIHNlbGVjdCB0aGUgY2F0ZWdvcnkgZW50aXRsZWQgIkJvb2tzIiBpbiB0aGUgQ2F0ZWdvcnkgUGFnZTxici8+CisJCQkJCQkJCQkJKlRoZW4gSSBzaG91bGQgb25seSBzZWUgdGhlIG9mZmVycyBhc3NvY2lhdGVkIHRvIHRoaXMgY2F0ZWdvcnkKKwkJCQkJCQkJPC9kaXY+CisJCQkJCQkJCTxkaXYgY2xhc3M9ImludGVudF9tb2RlbGluZ3VuaXQiPgorCQkJCQkJCQk8YiBjbGFzcz0ia3ciPkBNPC9iPjxici8+CisJCQkJCQkJCTxkaXYgY2xhc3M9ImludGVudF9zdWJzZWN0aW9uY29udGFpbmVyIj4KKwkJCQkJCQkJPGIgY2xhc3M9Imt3Ij5AcmVmPC9iPiA8c3BhbiBzdHlsZT0iY29sb3I6Ymx1ZSI+IAorCQkJCQkJCQkiY29tLmV4YW1wbGUub2ZmZXIudGVzdC9zcmMvY29tL2V4YW1wbGUvb2ZmZXIvdGVzdC9TY2VuYXJpbzAxVGVzdC5qYXZhIjwvc3Bhbj4KKwkJCQkJCQkJCTxici8+CisJCQkJCQkJCTwvZGl2PgorCQkJCQkJCQk8YiBjbGFzcz0ia3ciPk1APC9iPgorCQkJCQkJCQk8L2Rpdj48L2Rpdj4KKwkJCQkJCX08YnIvPgorCQkJCTwvZGl2PgorCQkJCX0KKwkJCQkKKwkJCQkJCQk8L2Rpdj4KKwk8L2Rpdj4KKyAgPC9zbGlkZT4KKyAgCisgIDxzbGlkZSBjbGFzcz0ic2VndWUgbm9iYWNrZ3JvdW5kIHBhcnRUaXRsZSIgc3R5bGU9ImJhY2tncm91bmQ6IHVybChpbWFnZXMvSW50ZW50L2luQWN0aW9uLmpwZyk7IGJhY2tncm91bmQtc2l6ZTogMTAwJTsiPgorCSAgPGgyIHN0eWxlPSJsZWZ0OjU1MHB4O3RvcDowcHg7Ij4zLiBJbnRlbnQgaW4gQWN0aW9uIDxzcGFuIHN0eWxlPSJmb250LXNpemU6MHB4OyI+Xzwvc3Bhbj48L2gyPgorCSAgPGFzaWRlIHN0eWxlPSJ3aWR0aDo0NjBweDt0b3A6MzVweDsiIGNsYXNzPSJnZGJhciByaWdodCIgPjwvYXNpZGU+CisgIDwvc2xpZGU+CisgICA8c2xpZGUgY2xhc3M9InBhcnQzIj4KKwkJPGgyPkRlbW8gY29udGV4dDwvaDI+CisJCTxoci8+CisJCQkKKwkJPGgzIHN0eWxlPSJjb2xvcjojNTE1MTUxIj4gRW52aXJvbm1lbnQ8L2gzPgorCQk8dWwgc3R5bGU9InBhZGRpbmctbGVmdDo1MHB4Ij4KKwkJCTxsaT4gRWNsaXBzZSAoS2VwbGVyIFJDMikgKyBNeWx5biBJbnRlbnQgMC44IGluc3RhbGxlZDwvYT48L2xpPgorCQkJPGxpPiBBbmQgbm90aGluZyBtb3JlLi4uIEV4Y2VwdDo8L2xpPgorCQkJCTx1bD48bGk+IEEgIm1hZ2ljIGZpbGxlciIgKGJlY2F1c2UgSSdtIGxhenkpPC9saT4KKwkJCQk8bGk+IEEgcGx1Z2luIGN1c3RvbWl6aW5nIEludGVudCBiZWhhdmlvciAoYnV0IG1vcmUgb24gdGhhdCBsYXRlcik8L2xpPjwvdWw+CisJCQk8L2xpPgorCQk8L3VsPgorCQkKKwkJPGgzIHN0eWxlPSJjb2xvcjojNTE1MTUxIj4gU2NlbmFyaW88L2gzPgorCQk8dWwgc3R5bGU9InBhZGRpbmctbGVmdDo1MHB4Ij4KKwkJCTxsaT5EZXZlbG9wcGluZyBhIDxiPldlYiBwb3J0YWw8L2I+IGNhbGxlZCBPZmZlcnMuY29tPC9saT4KKwkJCTxsaT5QdXJjaGFzZSBpdGVtcyBzb3J0ZWQgYnkgY2F0ZWdvcmllczwvbGk+CisJCQk8bGk+QkREICg8Yj5CZWhhdmlvciBEcml2ZW4gRGV2ZWxvcG1lbnQ8L2I+KSBhcHByb2FjaDwvbGk+CisJCTwvdWw+CisJCisgIDwvc2xpZGU+CisgCisgIDxzbGlkZSBjbGFzcz0icGFydDMiIHN0eWxlPSJiYWNrZ3JvdW5kOiB1cmwoaW1hZ2VzL0ludGVudC9zeW5jMDEucG5nKTsgYmFja2dyb3VuZC1zaXplOiA5MCU7YmFja2dyb3VuZC1wb3NpdGlvbjo2MHB4IDBweDtiYWNrZ3JvdW5kLWNvbG9yOndoaXRlOyBiYWNrZ3JvdW5kLXJlcGVhdCA6IG5vLXJlcGVhdDsiPgorICA8ZGl2IGNsYXNzPSJwYWRkaW5nZXIiIHN0eWxlPSJwb3NpdGlvbjpyZWxhdGl2ZTt0b3A6MjMwcHg7bGVmdDoxNzBweDt0ZXh0LWFsaWduOmNlbnRlcjt3aWR0aDoyNjBweCI+CisJCTxoMyBzdHlsZT0icGFkZGluZzowcHggMHB4IDBweCAwcHg7Ij5JbnRlbnQgPGI+U3luY2hyb25pemVyPC9iPjwvaDM+CisJCTxoci8+CisJCTxzcGFuIHN0eWxlPSJmb250LXNpemU6MjRweDtjb2xvcjpibGFjayI+CisJCUNvbXBhcmVzIERvYyAoRm9ybWFsIGxpbmtzKSAgd2l0aCBBcnRpZmFjdHMgKGFzIE1vZGVscyk8L3NwYW4+CisgIDwvZGl2PgorCisgIDwvc2xpZGU+CisgIAorICAKKyAgPHNsaWRlIGNsYXNzPSJwYXJ0MyIgc3R5bGU9ImJhY2tncm91bmQ6IHVybChpbWFnZXMvSW50ZW50L3N5bmMwMi5wbmcpOyBiYWNrZ3JvdW5kLXNpemU6IDkwJTtiYWNrZ3JvdW5kLXBvc2l0aW9uOjYwcHggMHB4O2JhY2tncm91bmQtY29sb3I6d2hpdGU7IGJhY2tncm91bmQtcmVwZWF0IDogbm8tcmVwZWF0OyI+CisgPGRpdiBjbGFzcz0icGFkZGluZ2VyIiBzdHlsZT0icG9zaXRpb246cmVsYXRpdmU7dG9wOjIzMHB4O2xlZnQ6MTcwcHg7dGV4dC1hbGlnbjpjZW50ZXI7d2lkdGg6MjUwcHgiPgorCQk8aDMgc3R5bGU9InBhZGRpbmc6MHB4IDBweCAwcHggMHB4OyI+SW50ZW50IDxiPlN5bmNocm9uaXplcjwvYj48L2gzPgorCQk8aHIvPgorCQk8c3BhbiBzdHlsZT0iZm9udC1zaXplOjE4cHgiPgorCQlDb21wYXJlcyBEb2MgKEZvcm1hbCBsaW5rcykgIHdpdGggQXJ0aWZhY3RzIChhcyBNb2RlbHMpPC9zcGFuPgorICA8L2Rpdj4KKyAgICAgIDxkaXYgY2xhc3M9InBhZGRpbmdlciIgc3R5bGU9InBvc2l0aW9uOnJlbGF0aXZlO3RvcDotMTQwcHg7bGVmdDoxNzBweDt0ZXh0LWFsaWduOmNlbnRlcjt3aWR0aDoyNTVweCI+CisJCTxoMyBzdHlsZT0icGFkZGluZzowcHggMHB4IDBweCAwcHg7Ij5TeW5jaHJvbml6YXRpb24gPGI+QnJpZGdlPC9iPjwvYj48L2gzPgorCQk8aHIvPgorCQk8c3BhbiBzdHlsZT0iZm9udC1zaXplOjI0cHg7Y29sb3I6YmxhY2siPgorCQlSZXByZXNlbnRzIGEgdGVjaG5pY2FsIGFydGlmYWN0IGFzIGEgTW9kZWw8L3NwYW4+CisgIDwvZGl2PgorICA8L3NsaWRlPgorICAKKyAgIDxzbGlkZSBjbGFzcz0icGFydDMiIHN0eWxlPSJiYWNrZ3JvdW5kOiB1cmwoaW1hZ2VzL0ludGVudC9zeW5jMDMucG5nKTsgYmFja2dyb3VuZC1zaXplOiA5MCU7YmFja2dyb3VuZC1wb3NpdGlvbjo2MHB4IDBweDtiYWNrZ3JvdW5kLWNvbG9yOndoaXRlOyBiYWNrZ3JvdW5kLXJlcGVhdCA6IG5vLXJlcGVhdDsiPgorIDxkaXYgY2xhc3M9InBhZGRpbmdlciIgc3R5bGU9InBvc2l0aW9uOnJlbGF0aXZlO3RvcDoyMzBweDtsZWZ0OjE3MHB4O3RleHQtYWxpZ246Y2VudGVyO3dpZHRoOjI1MHB4Ij4KKwkJPGgzIHN0eWxlPSJwYWRkaW5nOjBweCAwcHggMHB4IDBweDsiPkludGVudCA8Yj5TeW5jaHJvbml6ZXI8L2I+PC9oMz4KKwkJPGhyLz4KKwkJPHNwYW4gc3R5bGU9ImZvbnQtc2l6ZToxOHB4Ij4KKwkJQ29tcGFyZXMgRG9jIChGb3JtYWwgbGlua3MpICB3aXRoIEFydGlmYWN0cyAoYXMgTW9kZWxzKTwvc3Bhbj4KKyAgPC9kaXY+CisgICAgICA8ZGl2IGNsYXNzPSJwYWRkaW5nZXIiIHN0eWxlPSJwb3NpdGlvbjpyZWxhdGl2ZTt0b3A6LTE0MHB4O2xlZnQ6MTcwcHg7dGV4dC1hbGlnbjpjZW50ZXI7d2lkdGg6MjU1cHgiPgorCQk8aDMgc3R5bGU9InBhZGRpbmc6MHB4IDBweCAwcHggMHB4OyI+U3luY2hyb25pemF0aW9uIDxiPkJyaWRnZTwvYj48L2I+PC9oMz4KKwkJPGhyLz4KKwkJPHNwYW4gc3R5bGU9ImZvbnQtc2l6ZToyNHB4O2NvbG9yOmJsYWNrIj4KKwkJUmVwcmVzZW50cyBhIHRlY2huaWNhbCBhcnRpZmFjdCBhcyBhIE1vZGVsPC9zcGFuPgorICA8L2Rpdj4KKyAgPC9zbGlkZT4KKworICA8c2xpZGUgY2xhc3M9InNlZ3VlIG5vYmFja2dyb3VuZCBwYXJ0VGl0bGUiIHN0eWxlPSJiYWNrZ3JvdW5kOiB1cmwoaW1hZ2VzL0ludGVudC9jb25zdHJhaW50LnBuZyk7IGJhY2tncm91bmQtc2l6ZTogMTAwJTsiPgorCSAgIDxoMiBzdHlsZT0idG9wOjUwcHg7bGVmdDotNjBweDsiOz40LiBDaGVja2luZyBDb25zdHJhaW50cyBTdWNrcyA8c3BhbiBzdHlsZT0iZm9udC1zaXplOjBweDsiPl88L3NwYW4+PC9oMj4KKwkgIDxhc2lkZSBzdHlsZT0id2lkdGg6NjkwcHg7dG9wOjg1cHg7IiBjbGFzcz0iZ2RiYXIiID48L2FzaWRlPgorICA8L3NsaWRlPgorICAKKyAgIAorICAgPHNsaWRlIGNsYXNzPSJwYXJ0NCI+CisgICAgPGhncm91cD4KKyAgICAgIDxoMj4KKwkJPGI+QXV0b21hdGU8L2I+IGhpZ2gtbGV2ZWwgY29uc3RyYWludHMgY2hlY2tpbmcKKwkgIDwvaDI+PGhyLz4KKwkgPGFydGljbGUgY2xhc3M9Im5vQnVsbGV0cyI+CisJCQk8ZGl2IHN0eWxlPSJwYWRkaW5nLWxlZnQ6MzBweDtwYWRkaW5nLXRvcDoyMHB4Ij4KKwkJCTxoMyBzdHlsZT0iZm9udC1zaXplOjEyMCU7Y29sb3I6YmxhY2siPllvdSA8Yj5hbHJlYWR5PC9iPiBjb25zdHJhaW50IERldmVsb3BtZW50PC9oMz4KKwkJCTxwIHN0eWxlPSJwYWRkaW5nLWxlZnQ6MTVweCI+V2l0aCA8Yj5pbmZvcm1hbDwvYj4gcHJvY2Vzc2VzLCBkZXYgZ3VpZGVsaW5lcywgZ29vZCBwcmFjdGljZXMuLi4KKwkJCTxpbWcgc3JjPSJpbWFnZXMvSW50ZW50L2NvbXBhcmVfcGxhbi5wbmciIHN0eWxlPSJ3aWR0aDoxMDAlIiAvPjxici8+CisJCQkKKwkJCTwvcD4KKwkJCTwvZGl2PgorCQkJPCEtLXN0eWxlPSJwYWRkaW5nLWxlZnQ6IDUyMHB4OyBwYWRkaW5nLXRvcDoxMHB4OyItLT4gCisJCQk8ZGl2IHN0eWxlPSJwYWRkaW5nLWxlZnQ6IDMwcHg7IHBhZGRpbmctdG9wOjcwcHg7Ij4KKwkJCTxoMyBzdHlsZT0iZm9udC1zaXplOjEyMCU7Y29sb3I6YmxhY2siPkJ1dCBoaWdoLWxldmVsIGNvbnN0cmFpbnRzIGFyZSA8Yj5oYXJkIHRvIGNoZWNrPC9iPjwvaDM+CisJCQk8cCBzdHlsZT0icGFkZGluZy1sZWZ0OjE1cHgiPk1hbnVhbCByZXZpZXdzOiBwYWluZnVsLCBsb25nLCBlcnJvci1wcm9uZTxici8+CisJCQkKKwkJCTxkaXY+CisJCTwvYXJ0aWNsZT4KKyAgICA8L2hncm91cD4KKyAgPC9zbGlkZT4KKyAgCisgICAgIDxzbGlkZSBjbGFzcz0icGFydDQiPgorICAgIDxoZ3JvdXA+CisgICAgICA8aDI+CisJCTxiPkF1dG9tYXRlPC9iPiBoaWdoLWxldmVsIGNvbnN0cmFpbnRzIGNoZWNraW5nCisJICA8L2gyPjxoci8+CisJIDxhcnRpY2xlIGNsYXNzPSIiPgorCSAJPGRpdiBzdHlsZT0icGFkZGluZy10b3A6NDBweCI+CisJCQk8aW1nIHNyYz0iaW1hZ2VzL0ludGVudC9hdXRvbWF0ZS5qcGciIHN0eWxlPSJmbG9hdDpsZWZ0O3BhZGRpbmctbGVmdDoxNXB4O3BhZGRpbmctcmlnaHQ6NXB4IiAvPjxici8+CisJCQk8aDMgc3R5bGU9ImZvbnQtc2l6ZToxMjAlO2NvbG9yOmJsYWNrIj5QbHVnIDxiPmN1c3RvbTwvYj4gY29uc3RyYWludHMgaW4gSW50ZW50PC9oMz4KKwkJCTxoNCBzdHlsZT0icGFkZGluZy1sZWZ0OjQwcHgiPgorCQkJCTxiIHN0eWxlPSJwYWRkaW5nLXJpZ2h0OjUwcHgiPjwvYj4tIExpdmUgJiBmb3JtYWwgdmFsaWRhdGlvbjxici8+CisJCQkJPGIgc3R5bGU9InBhZGRpbmctcmlnaHQ6NTBweCI+PC9iPi0gUHJvYmxlbSB2aWV3IGludGVncmF0aW9uPGJyLz4KKwkJCQk8YiBzdHlsZT0icGFkZGluZy1yaWdodDo1MHB4Ij48L2I+LSBFeHRlbnNpYmxlIHF1aWNrLWZpeGVzPGJyLz4JCQkJCisJCQk8L2g0PgorCQk8L2Rpdj4JCQkKKwkJPC9hcnRpY2xlPgorICAgIDwvaGdyb3VwPgorICA8L3NsaWRlPgorICAgIDxzbGlkZSBjbGFzcz0ic2VndWUgbm9iYWNrZ3JvdW5kIHBhcnRUaXRsZSIgc3R5bGU9ImJhY2tncm91bmQ6IHVybChpbWFnZXMvSW50ZW50L2Nvb2tpbmcuanBnKTtiYWNrZ3JvdW5kLWNvbG9yOmJsYWNrO2JhY2tncm91bmQtc2l6ZTogMTAwJTsiPgorCSAgPGgyIHN0eWxlPSJ0b3A6NTUwcHg7bGVmdDoxMDBweDsiOz41LiBXaGF0J3MgY29va2luZz8gPHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTowcHg7Ij5fPC9zcGFuPjwvaDI+CisJICA8YXNpZGUgc3R5bGU9IndpZHRoOjkyMHB4O3RvcDo1ODVweDsiIGNsYXNzPSJnZGJhciIgPjwvYXNpZGU+CisgIDwvc2xpZGU+CisgIAorICAgPHNsaWRlIGNsYXNzPSJjb29raW5nIj4KKyAgICA8aGdyb3VwPgorICAgICAgPGgyPgorCQlJbnRlbnQ6IHdoYXQncyBDb29raW5nPworCSAgPC9oMj4KKwkKKwkgIDxhcnRpY2xlIHN0eWxlPSJwYWRkaW5nLXRvcDoxMHB4O3RleHQtYWxpZ246Y2VudGVyIj4JCisJICA8aWZyYW1lIHN0eWxlPSJtYXJnaW4tbGVmdDotNDVweDtwYWRkaW5nLXRvcDo1MHB4O3dpZHRoOjExMDBweDtoZWlnaHQ6NDQycHgiIGRhdGEtc3JjPSJkZW1vcy9jZG8vY2RvL2Nkb19wbGF5ZXIuaHRtbCI+PC9pZnJhbWU+CisJICAKKwkgIDxiPkNETyBJbnRlZ3JhdGlvbjwvYj46IFNoYXJlIHlvdXIgZG9jIGluIHJlYWwtdGltZQorCSAgIDwvYXJ0aWNsZT4KKyAgICA8L2hncm91cD4KKyAgPC9zbGlkZT4KKyAgCisgICA8c2xpZGUgY2xhc3M9ImNvb2tpbmciPgorICAgIDxoZ3JvdXA+CisgICAgICA8aDI+CisJCUludGVudDogd2hhdCdzIENvb2tpbmc/CisJICA8L2gyPjxoci8+CisJICA8YXJ0aWNsZSBzdHlsZT0icGFkZGluZy10b3A6MTBweDtwYWRkaW5nLWxlZnQ6MTIwcHg7Ij4KKwkgIDxpbWcgIHNyYz0iaW1hZ2VzL0ludGVudC93ZWJfZXhwb3J0LnBuZyIgc3R5bGU9IndpZHRoOjc1JTsiLz48YnIvPgorCSAgICAtIEhUTUwgQm9vdHN0cmFwIC8gTGF0ZXggLyBQREYgZXhwb3J0PGJyLz48YnIvPgorCQktIG5ldyBCcmlkZ2VzIChNYW5pZmVzdC5NRiwgcGx1Z2luLnhtbCwgWHRleHQuLi4pPGJyLz48YnIvPgkJCisJCS0gUGVyZm9ybWFuY2VzICYgU3RhYmlsaXR5PGJyLz4KKwkgICA8L2FydGljbGU+CisgICAgPC9oZ3JvdXA+CisgIDwvc2xpZGU+CisgIAorICAKKwk8c2xpZGUgY2xhc3M9ImNvb2tpbmciPgorICAgICAgPGgyIHN0eWxlPSJtYXJpbmctdG9wOi0xNTBweDsiPgorCQlBbmQgaW4gdGhlIGZ1dHVyZT8KKwkgIDwvaDI+PGhyLz4KKzxhcnRpY2xlPgkgIAorCSAgPGJyLz48YnIvPgorCisJCTxiPk15bHluIDQuMDwvYj4gd2lsbCBzdG9yZSB0YXNrcywgYnVnemlsbGFzLCBnaXQgcmVwb3MuLi4gPGI+YXMgbW9kZWxzPC9iPjxici8+PGJyLz4KKzxici8+CisJCUltYWdpbmUgd2hhdCBJbnRlbnQgY291bGQgZG8hPGJyLz48YnIvPjxici8+CisJCQkgIDxpbWcgc3JjPSJpbWFnZXMvSW50ZW50L2Z1dHVyZS5qcGciIHN0eWxlPSJmbG9hdDpsZWZ0O3dpZHRoOjMwJTtwYWRkaW5nLXJpZ2h0OjE1cHgiLz4KKwkJPHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTo5MCUiPgorCQkJPGk+QWxpY2UgaXMgd3JpdGluZyBhIGNvbnRyaWJ1dGlvbiBndWlkZSBzaG93aW5nIHRoZSBnaXQgcmVwbyBVUkw8L2k+PGJyLz4KKwkJCSZyYXJyOyBBbmQgaWYgVVJMIGNoYW5nZXMsIHN5bmMuIGlzc3VlcyB3aWxsIGJlIHJhaXNlZDxici8+PGJyLz48YnIvPgorCQkJPGk+Sm9obiBpcyBjbG9zaW5nIGEgYnVnemlsbGEgaXNzdWUgd2l0aG91dCB3cml0aW5nIEp1bml0IHRlc3Q8L2k+PGJyLz4KKwkJCSZyYXJyOyBJbnRlbnQgd2lsbCByYWlzZSBhIHZhbGlkYXRpb24gaXNzdWUgYXMgdGVhbSBkZWZpbmVkIGN1c3RvbSBydWxlCisJCTwvc3Bhbj4KKwkgICA8L2FydGljbGU+CisgIDwvc2xpZGU+CisgIAorICAgIDxzbGlkZSBjbGFzcz0idGhyZWVfdGhpbmdzIj4KKyAgICA8aGdyb3VwPgorICAgICAgPGgyPgorCQlUaGUgMyB0aGluZ3MgdG8gcmVtZW1iZXIgYWJvdXQgSW50ZW50CisJICA8L2gyPjxoci8+CisJICA8YXJ0aWNsZSBzdHlsZT0icGFkZGluZy10b3A6MTAwcHg7cGFkZGluZy1yaWdodDozMHB4O3RleHQtYWxpZ246Y2VudGVyIj4KKwkgIDxici8+MS4gSW50ZW50IGtlZXBzIHlvdXIgPGI+ZG9jIHVwLXRvLWRhdGU8L2I+IHdpdGggY29uY3JldGUgd29ybGQ8YnIvPjxici8+CisJICA8YnIvPjIuIEludGVudCBhbGxvd3MgeW91IDxiPmZvcm1hbGl6ZTwvYj4geW91ciBkZXYgPGI+Y29uc3RyYWludHM8L2I+PGJyLz48YnIvPgorCSAgIDwvYXJ0aWNsZT4JICAgCisgICAgPC9oZ3JvdXA+CisgIDwvc2xpZGU+CisgIAorICA8c2xpZGUgY2xhc3M9InRocmVlX3RoaW5ncyI+CisgICAgPGhncm91cD4KKyAgICAgIDxoMj4KKwkJVGhlIDMgdGhpbmdzIHRvIHJlbWVtYmVyIGFib3V0IEludGVudAorCSAgPC9oMj48aHIvPgorCSAgPGFydGljbGUgc3R5bGU9InBhZGRpbmctdG9wOjEwMHB4O3BhZGRpbmctcmlnaHQ6MzBweDt0ZXh0LWFsaWduOmNlbnRlciI+CisJICA8YnIvPjEuIEludGVudCBrZWVwcyB5b3VyIDxiPmRvYyB1cC10by1kYXRlPC9iPiB3aXRoIGNvbmNyZXRlIHdvcmxkPGJyLz48YnIvPgorCSAgPGJyLz4yLiBJbnRlbnQgYWxsb3dzIHlvdSA8Yj5mb3JtYWxpemU8L2I+IHlvdXIgZGV2IDxiPmNvbnN0cmFpbnRzPC9iPjxici8+PGJyLz4KKwkgIDxici8+PGIgc3R5bGU9ImZvbnQtc2l6ZTo2MHB4OyI+IDMuIERFTU8gV0FTIEpVU1QgQU4gRVhBTVBMRSA8L2I+CisJICAgPC9hcnRpY2xlPgorCSAgIAorICAgIDwvaGdyb3VwPgorICA8L3NsaWRlPgorICAKKyAgICAgPHNsaWRlIGNsYXNzPSJuZWVkeW91Ij4KKyAgICA8aGdyb3VwPgorICAgICAgPGgyPgorCQlJbnRlbnQgTmVlZHMgPGI+WW91PC9iPgorCSAgPC9oMj48aHIvPgorCSAgPGFydGljbGUgc3R5bGU9InBhZGRpbmctdG9wOjBweDsiPgorCSAgPHRhYmxlIHN0eWxlPSJiYWNrZ3JvdW5kLWNvbG9yOm5vbmU7IGJvcmRlcjowcHggc29saWQgYmxhY2s7d2lkdGg6MTAwJSI+PHRyIHN0eWxlPSJiYWNrZ3JvdW5kLWNvbG9yOndoaXRlOyBib3JkZXI6MHB4IHNvbGlkIGJsYWNrOyI+PHRkPgorCSAgPGltZyAgc3JjPSJpbWFnZXMvSW50ZW50L25lZWRfeW91LmpwZyIgc3R5bGU9ImZsb2F0OmxlZnQiLz4KKwkgIDwvdGQ+PHRkPgorCQk8aDMgc3R5bGU9ImNvbG9yOmJsYWNrO2ZvbnQtc2l6ZTozN3B4OyI+R2l2ZSB1cyBmZWVkYmFjazwvaDM+CisJCTxkaXYgc3R5bGU9InBhZGRpbmctbGVmdDozMHB4O2ZvbnQtc2l6ZToyNnB4OyI+CisJCVdlIGRvIHRha2UgY29tbXVuaXR5IGZlZWRiYWNrcyBpbiBhY2NvdW50IDxici8+PGJyLz4KKwkJPGI+WW91J3JlIGRyaXZpbmcgdGhpcyBzaGlwITwvYj48YnIvPgorCQktIFN5bnRheCBzaW1wbGlmaWNhdGlvbjxici8+CQorCQktIEphdmEgYnJpZGdlLi4uPGJyLz48YnIvPjxici8+CisJCTwvZGl2PgorCQk8aDMgc3R5bGU9ImNvbG9yOmJsYWNrO2ZvbnQtc2l6ZTozN3B4OyI+VGVjaG5pY2FsIGNvbnRyaWJ1dGlvbnM8L2gzPgorCQk8ZGl2IHN0eWxlPSJwYWRkaW5nLWxlZnQ6MzBweDtmb250LXNpemU6MjZweDsiPgorCQktIFN5bmMuIGJyaWRnZXMsIHZhbGlkYXRpb24gcnVsZXMsIG5ldyByZXBvc2l0b3J5IGJhY2stZW5kcy4uLjxici8+CisJCS0gQmVjb21lIGFuIEludGVudCBjb21taXR0ZXIhCisJCTwvZGl2Pjxici8+PGJyLz48YnIvPjxici8+PGJyLz48YnIvPjxici8+PGJyLz48YnIvPjxici8+CisJCTwvdGQ+PC90cj48L3RhYmxlPgorCSAgIDwvYXJ0aWNsZT4KKyAgICA8L2hncm91cD4KKyAgPC9zbGlkZT4KKyAgIDxzbGlkZSBjbGFzcz0idGhhbmtzIj4KKyAgICA8aGdyb3VwPgorICAgICAgPGgyPgorCQlUaGFuayBZb3UhCisJICA8L2gyPjxoci8+CisgICAgPC9oZ3JvdXA+CisJCTxhcnRpY2xlIHN0eWxlPSJwYWRkaW5nLWxlZnQ6NTBweCI+CisJCTxpbWcgY2xhc3M9InJlZmxlY3QiIHNyYz0iaW1hZ2VzL2NvbnRhY3Qvd2Vic2l0ZS5wbmciICBzdHlsZT0id2lkdGg6NTBweCIvPiA8YSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2ludGVudCI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy9pbnRlbnQ8L2E+CisJCTxici8+PGJyLz4gPGltZyBjbGFzcz0icmVmbGVjdCIgc3JjPSJpbWFnZXMvSW50ZW50L0ltYWdlLUludGVudF9sb2dvX2Nyb3BwZWQucG5nIiAgc3R5bGU9IndpZHRoOjUwcHgiLz4gPGEgaHJlZj0iaHR0cDovL3dpa2kuZWNsaXBzZS5vcmcvSW50ZW50Ij5odHRwOi8vd2lraS5lY2xpcHNlLm9yZy9JbnRlbnQ8L2E+CisJCTxici8+PGJyLz4gPGltZyBjbGFzcz0icmVmbGVjdCIgc3JjPSJpbWFnZXMvY29udGFjdC90d2l0dGVyLmpwZyIgc3R5bGU9IndpZHRoOjUwcHgiLz4gQEludGVudF9wcm9qZWN0PGJyLz4gPHNwYW4gc3R5bGU9InBhZGRpbmctbGVmdDo1NXB4Ij5AYWxleF9sYWdhcmRlPC9zcGFuPgorCQkKKwkJPGgyIHN0eWxlPSJ0ZXh0LWFsaWduOnJpZ2h0O3BhZGRpbmctcmlnaHQ6ODBweCI+PGJyLz48YnIvPgorCQlEb24ndCBmb3JnZXQgdG8gZ2l2ZSBGZWVkYmFjayA8YnIvPgorCQkgPGltZyBjbGFzcz0icmVmbGVjdCIgc3R5bGU9InBhZGRpbmctdG9wOjIwcHgiIHNyYz0iaW1hZ2VzL0ludGVudC9mZWVkYmFjay5wbmciLz4gCisJCTwvaDI+CisJICAgPC9hcnRpY2xlPgorICA8L3NsaWRlPgorICAKKyAgPHNsaWRlIGNsYXNzPSJiYWNrZHJvcCI+PC9zbGlkZT4KKworPC9zbGlkZXM+CisKKzxzY3JpcHQ+Cit2YXIgX2dhcSA9IF9nYXEgfHwgW107CitfZ2FxLnB1c2goWydfc2V0QWNjb3VudCcsICdVQS1YWFhYWFhYWC0xJ10pOworX2dhcS5wdXNoKFsnX3RyYWNrUGFnZXZpZXcnXSk7CisKKyhmdW5jdGlvbigpIHsKKyAgdmFyIGdhID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc2NyaXB0Jyk7IGdhLnR5cGUgPSAndGV4dC9qYXZhc2NyaXB0JzsgZ2EuYXN5bmMgPSB0cnVlOworICBnYS5zcmMgPSAoJ2h0dHBzOicgPT0gZG9jdW1lbnQubG9jYXRpb24ucHJvdG9jb2wgPyAnaHR0cHM6Ly9zc2wnIDogJ2h0dHA6Ly93d3cnKSArICcuZ29vZ2xlLWFuYWx5dGljcy5jb20vZ2EuanMnOworICB2YXIgcyA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdzY3JpcHQnKVswXTsgcy5wYXJlbnROb2RlLmluc2VydEJlZm9yZShnYSwgcyk7Cit9KSgpOworPC9zY3JpcHQ+CisKKzwhLS1baWYgSUVdPgorICA8c2NyaXB0IHNyYz0iaHR0cDovL2FqYXguZ29vZ2xlYXBpcy5jb20vYWpheC9saWJzL2Nocm9tZS1mcmFtZS8xL0NGSW5zdGFsbC5taW4uanMiPjwvc2NyaXB0PgorICA8c2NyaXB0PkNGSW5zdGFsbC5jaGVjayh7bW9kZTogJ292ZXJsYXknfSk7PC9zY3JpcHQ+Cis8IVtlbmRpZl0tLT4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL3BhZ2VzL3RyYW5zY3JpcHRzLzIwMTNfRWNsaXBzZUNvbkZyYW5jZS9hcHAueWFtbCBiL3BhZ2VzL3RyYW5zY3JpcHRzLzIwMTNfRWNsaXBzZUNvbkZyYW5jZS9hcHAueWFtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NjkyYWIyCi0tLSAvZGV2L251bGwKKysrIGIvcGFnZXMvdHJhbnNjcmlwdHMvMjAxM19FY2xpcHNlQ29uRnJhbmNlL2FwcC55YW1sCkBAIC0wLDAgKzEsMjMgQEAKK2FwcGxpY2F0aW9uOiBteS1pby10YWxrCit2ZXJzaW9uOiAxCitydW50aW1lOiBweXRob24yNworYXBpX3ZlcnNpb246IDEKK3RocmVhZHNhZmU6IHllcworCitoYW5kbGVyczoKKy0gdXJsOiAvCisgIHN0YXRpY19maWxlczogdGVtcGxhdGUuaHRtbAorICB1cGxvYWQ6IHRlbXBsYXRlXC5odG1sCisKKy0gdXJsOiAvc2xpZGVfY29uZmlnXC5qcworICBzdGF0aWNfZmlsZXM6IHNsaWRlX2NvbmZpZy5qcworICB1cGxvYWQ6IHNsaWRlX2NvbmZpZ1wuanMKKworLSB1cmw6IC9qcworICBzdGF0aWNfZGlyOiBqcworCistIHVybDogL3RoZW1lCisgIHN0YXRpY19kaXI6IHRoZW1lCisKKy0gdXJsOiAvaW1hZ2VzCisgIHN0YXRpY19kaXI6IGltYWdlcwpkaWZmIC0tZ2l0IGEvcGFnZXMvdHJhbnNjcmlwdHMvMjAxM19FY2xpcHNlQ29uRnJhbmNlL2NvbmZpZy5yYiBiL3BhZ2VzL3RyYW5zY3JpcHRzLzIwMTNfRWNsaXBzZUNvbkZyYW5jZS9jb25maWcucmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjJjNjc1MQotLS0gL2Rldi9udWxsCisrKyBiL3BhZ2VzL3RyYW5zY3JpcHRzLzIwMTNfRWNsaXBzZUNvbkZyYW5jZS9jb25maWcucmIKQEAgLTAsMCArMSwyNCBAQAorIyBSZXF1aXJlIGFueSBhZGRpdGlvbmFsIGNvbXBhc3MgcGx1Z2lucyBoZXJlLgorCisjIFNldCB0aGlzIHRvIHRoZSByb290IG9mIHlvdXIgcHJvamVjdCB3aGVuIGRlcGxveWVkOgoraHR0cF9wYXRoID0gIi8iCitjc3NfZGlyID0gInRoZW1lL2NzcyIKK3Nhc3NfZGlyID0gInRoZW1lL3Njc3MiCitpbWFnZXNfZGlyID0gImltYWdlcyIKK2phdmFzY3JpcHRzX2RpciA9ICJqcyIKKworIyBZb3UgY2FuIHNlbGVjdCB5b3VyIHByZWZlcnJlZCBvdXRwdXQgc3R5bGUgaGVyZSAoY2FuIGJlIG92ZXJyaWRkZW4gdmlhIHRoZSBjb21tYW5kIGxpbmUpOgorb3V0cHV0X3N0eWxlID0gOmNvbXByZXNzZWQgIzpleHBhbmRlZCBvciA6bmVzdGVkIG9yIDpjb21wYWN0IG9yIDpjb21wcmVzc2VkCisKKyMgVG8gZW5hYmxlIHJlbGF0aXZlIHBhdGhzIHRvIGFzc2V0cyB2aWEgY29tcGFzcyBoZWxwZXIgZnVuY3Rpb25zLiBVbmNvbW1lbnQ6CisjIHJlbGF0aXZlX2Fzc2V0cyA9IHRydWUKKworIyBUbyBkaXNhYmxlIGRlYnVnZ2luZyBjb21tZW50cyB0aGF0IGRpc3BsYXkgdGhlIG9yaWdpbmFsIGxvY2F0aW9uIG9mIHlvdXIgc2VsZWN0b3JzLiBVbmNvbW1lbnQ6CisjIGxpbmVfY29tbWVudHMgPSBmYWxzZQorCisKKyMgSWYgeW91IHByZWZlciB0aGUgaW5kZW50ZWQgc3ludGF4LCB5b3UgbWlnaHQgd2FudCB0byByZWdlbmVyYXRlIHRoaXMKKyMgcHJvamVjdCBhZ2FpbiBwYXNzaW5nIC0tc3ludGF4IHNhc3MsIG9yIHlvdSBjYW4gdW5jb21tZW50IHRoaXM6CisjIHByZWZlcnJlZF9zeW50YXggPSA6c2FzcworIyBhbmQgdGhlbiBydW46CisjIHNhc3MtY29udmVydCAtUiAtLWZyb20gc2NzcyAtLXRvIHNhc3Mgc2FzcyBzY3NzICYmIHJtIC1yZiBzYXNzICYmIG12IHNjc3Mgc2FzcwpkaWZmIC0tZ2l0IGEvcGFnZXMvdHJhbnNjcmlwdHMvMjAxM19FY2xpcHNlQ29uRnJhbmNlL2RlbW9zL2Nkby9jZG8vY2RvLmh0bWwgYi9wYWdlcy90cmFuc2NyaXB0cy8yMDEzX0VjbGlwc2VDb25GcmFuY2UvZGVtb3MvY2RvL2Nkby9jZG8uaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMTVhYjEzCi0tLSAvZGV2L251bGwKKysrIGIvcGFnZXMvdHJhbnNjcmlwdHMvMjAxM19FY2xpcHNlQ29uRnJhbmNlL2RlbW9zL2Nkby9jZG8vY2RvLmh0bWwKQEAgLTAsMCArMSwyOSBAQAorPCFET0NUWVBFIEhUTUw+Cis8aHRtbD4KKzxoZWFkPgorPG1ldGEgbmFtZT0iREMudGl0bGUiIGNvbnRlbnQ9IlVudGl0bGVkIiAvPgorICAgICAgICA8bWV0YSBuYW1lPSJEQy5kYXRlIiBjb250ZW50PSIyMDEyLTEwLTIxIDA1OjI0OjEyICIgLz4KKyAgICAgICAgPG1ldGEgbmFtZT0iREMubGFuZ3VhZ2UiIGNvbnRlbnQ9IkVOVSIgLz4KKworPG1ldGEgbmFtZT0iZ29vZ2xlIiB2YWx1ZT0ibm90cmFuc2xhdGUiIC8+IAorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXRmLTgiIC8+Cis8bWV0YSBodHRwLWVxdWl2PSJYLVVBLUNvbXBhdGlibGUiIGNvbnRlbnQ9IklFPWVkZ2UsY2hyb21lPTEiPgorPHRpdGxlPkNyZWF0ZWQgYnkgQ2FtdGFzaWEgU3R1ZGlvIDg8L3RpdGxlPgorCis8c3R5bGU+CitodG1sLCBib2R5IHsKKwltYXJnaW46IDBweDsKKwlwYWRkaW5nOiAwcHg7CisJZm9udC1mYW1pbHk6VmVyZGFuYSwgR2VuZXZhLCBzYW5zLXNlcmlmOworCWJhY2tncm91bmQtY29sb3I6ICMxYTFhMWE7CisJdGV4dC1hbGlnbjogY2VudGVyOworfQorCis8L3N0eWxlPgorCis8bGluayBocmVmPSJjZG9fZW1iZWQuY3NzIiByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIj4KKzwvaGVhZD4KKzxib2R5PgorPGlmcmFtZSBjbGFzcz0idHNjcGxheWVyX2lubGluZSIgbmFtZT0idHNjX3BsYXllciIgc3JjPSJjZG9fcGxheWVyLmh0bWwiIHNjcm9sbGluZz0ibm8iIGZyYW1lYm9yZGVyPSIwIiB3ZWJraXRhbGxvd2Z1bGxzY3JlZW4gbW96YWxsb3dmdWxsc2NyZWVuIGFsbG93ZnVsbHNjcmVlbj48L2lmcmFtZT4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL3BhZ2VzL3RyYW5zY3JpcHRzLzIwMTNfRWNsaXBzZUNvbkZyYW5jZS9kZW1vcy9jZG8vY2RvL2Nkby5tcDQgYi9wYWdlcy90cmFuc2NyaXB0cy8yMDEzX0VjbGlwc2VDb25GcmFuY2UvZGVtb3MvY2RvL2Nkby9jZG8ubXA0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFiYjgyMzgKLS0tIC9kZXYvbnVsbAorKysgYi9wYWdlcy90cmFuc2NyaXB0cy8yMDEzX0VjbGlwc2VDb25GcmFuY2UvZGVtb3MvY2RvL2Nkby9jZG8ubXA0CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3BhZ2VzL3RyYW5zY3JpcHRzLzIwMTNfRWNsaXBzZUNvbkZyYW5jZS9kZW1vcy9jZG8vY2RvL2Nkb19jb25maWcueG1sIGIvcGFnZXMvdHJhbnNjcmlwdHMvMjAxM19FY2xpcHNlQ29uRnJhbmNlL2RlbW9zL2Nkby9jZG8vY2RvX2NvbmZpZy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzY5N2QwMQotLS0gL2Rldi9udWxsCisrKyBiL3BhZ2VzL3RyYW5zY3JpcHRzLzIwMTNfRWNsaXBzZUNvbkZyYW5jZS9kZW1vcy9jZG8vY2RvL2Nkb19jb25maWcueG1sCkBAIC0wLDAgKzEsMzYgQEAKKzx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iPgorICAgPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtbG5zOnhtcERNPSJodHRwOi8vbnMuYWRvYmUuY29tL3htcC8xLjAvRHluYW1pY01lZGlhLyIgeG1sbnM6eG1wRz0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL2cvIiB4bWxuczp0c2M9Imh0dHA6Ly93d3cudGVjaHNtaXRoLmNvbS94bXAvdHNjLyIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnRzY0RNPSJodHRwOi8vd3d3LnRlY2hzbWl0aC5jb20veG1wL3RzY0RNLyIgeG1sbnM6dHNjSVE9Imh0dHA6Ly93d3cudGVjaHNtaXRoLmNvbS94bXAvdHNjSVEvIiB4bWxuczp0c2NIUz0iaHR0cDovL3d3dy50ZWNoc21pdGguY29tL3htcC90c2NIUy8iIHhtbG5zOnN0RGltPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvRGltZW5zaW9ucyMiIHhtbG5zOnN0Rm50PSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvRm9udCMiIHhtbG5zOmV4aWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20vZXhpZi8xLjAiIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyI+CisgICAgICA8cmRmOkRlc2NyaXB0aW9uIHRzYzp2ZXJzaW9uPSIyLjAuMCIgZGM6ZGF0ZT0iMjAxMi0xMC0yMSAwNjowMDo0MSAiIGRjOnNvdXJjZT0iQ2FtdGFzaWEgU3R1ZGlvLDguMC4yLGVudSIgZGM6dGl0bGU9ImNkbyIgdHNjRE06b3JpZ2luSWQ9Ijk3Mjg4RkRFLUU3QkQtNDc2RS1BQUM3LTQ4RTIxMUNFRkMzMCIgdHNjRE06cHJvamVjdD0iY2RvcGFydCI+CisgICAgICAgICA8eG1wRE06ZHVyYXRpb24geG1wRE06c2NhbGU9IjEvMTAwMCIgeG1wRE06dmFsdWU9IjM5NDMzIi8+CisgICAgICAgICA8eG1wRE06dmlkZW9GcmFtZVNpemUgc3REaW06dW5pdD0icGl4ZWwiIHN0RGltOmg9IjYyNCIgc3REaW06dz0iMTc0MiIvPgorICAgICAgICAgPHRzYzpsYW5nTmFtZT4KKyAgICAgICAgICAgIDxyZGY6QmFnPgorICAgICAgICAgICAgICAgPHJkZjpsaSB4bWw6bGFuZz0iZW4tVVMiPkVuZ2xpc2g8L3JkZjpsaT48L3JkZjpCYWc+CisgICAgICAgICA8L3RzYzpsYW5nTmFtZT4KKyAgICAgICAgIDx4bXBETTpUcmFja3M+CisgICAgICAgICAgICA8cmRmOkJhZz4KKyAgICAgICAgICAgIDwvcmRmOkJhZz4KKyAgICAgICAgIDwveG1wRE06VHJhY2tzPgorICAgICAgICAgPHRzY0RNOmNvbnRyb2xsZXI+CisgICAgICAgICAgICA8cmRmOkRlc2NyaXB0aW9uIHhtcERNOm5hbWU9InRzY3BsYXllciI+CisgICAgICAgICAgICAgICA8dHNjRE06cGFyYW1ldGVycz4KKyAgICAgICAgICAgICAgICAgIDxyZGY6QmFnPgorICAgICAgICAgICAgICAgICAgICAgPHJkZjpsaSB4bXBETTpuYW1lPSJhdXRvaGlkZSIgeG1wRE06dmFsdWU9InRydWUiLz48cmRmOmxpIHhtcERNOm5hbWU9ImF1dG9wbGF5IiB4bXBETTp2YWx1ZT0idHJ1ZSIvPjxyZGY6bGkgeG1wRE06bmFtZT0ibG9vcCIgeG1wRE06dmFsdWU9ImZhbHNlIi8+PHJkZjpsaSB4bXBETTpuYW1lPSJzZWFyY2hhYmxlIiB4bXBETTp2YWx1ZT0iZmFsc2UiLz48cmRmOmxpIHhtcERNOm5hbWU9ImNhcHRpb25zZW5hYmxlZCIgeG1wRE06dmFsdWU9ImZhbHNlIi8+PHJkZjpsaSB4bXBETTpuYW1lPSJzaWRlYmFyZW5hYmxlZCIgeG1wRE06dmFsdWU9ImZhbHNlIi8+PHJkZjpsaSB4bXBETTpuYW1lPSJ1bmljb2RlZW5hYmxlZCIgeG1wRE06dmFsdWU9ImZhbHNlIi8+PHJkZjpsaSB4bXBETTpuYW1lPSJiYWNrZ3JvdW5kY29sb3IiIHhtcERNOnZhbHVlPSIwMDAwMDAiLz48cmRmOmxpIHhtcERNOm5hbWU9InNpZGViYXJsb2NhdGlvbiIgeG1wRE06dmFsdWU9ImxlZnQiLz48cmRmOmxpIHhtcERNOm5hbWU9ImVuZGFjdGlvbiIgeG1wRE06dmFsdWU9InN0b3AiLz48cmRmOmxpIHhtcERNOm5hbWU9ImVuZGFjdGlvbnBhcmFtIiB4bXBETTp2YWx1ZT0iZmFsc2UiLz48L3JkZjpCYWc+CisgICAgICAgICAgICAgICA8L3RzY0RNOnBhcmFtZXRlcnM+CisgICAgICAgICAgICAgICA8dHNjRE06Y29udHJvbGxlclRleHQ+CisgICAgICAgICAgICAgICAgICA8cmRmOkJhZz4KKyAgICAgICAgICAgICAgICAgICAgIDxyZGY6bGk+PHJkZjpEZXNjcmlwdGlvbiB4bXA6bGFiZWw9InNlYXJjaFRleHQiPjx0c2NETTpsb2NhbGl6ZWRUZXh0PjxyZGY6QWx0PjxyZGY6bGkgeG1sOmxhbmc9ImVuLVVTIj5TZWFyY2g8L3JkZjpsaT48L3JkZjpBbHQ+PC90c2NETTpsb2NhbGl6ZWRUZXh0PjwvcmRmOkRlc2NyaXB0aW9uPjwvcmRmOmxpPjxyZGY6bGk+PHJkZjpEZXNjcmlwdGlvbiB4bXA6bGFiZWw9InJlc3VsdFRleHQiPjx0c2NETTpsb2NhbGl6ZWRUZXh0PjxyZGY6QWx0PjxyZGY6bGkgeG1sOmxhbmc9ImVuLVVTIj5SZXN1bHRzIEZvdW5kPC9yZGY6bGk+PC9yZGY6QWx0PjwvdHNjRE06bG9jYWxpemVkVGV4dD48L3JkZjpEZXNjcmlwdGlvbj48L3JkZjpsaT48cmRmOmxpPjxyZGY6RGVzY3JpcHRpb24geG1wOmxhYmVsPSJzZWFyY2hGdWxsc2NyZWVuVGV4dCI+PHRzY0RNOmxvY2FsaXplZFRleHQ+PHJkZjpBbHQ+PHJkZjpsaSB4bWw6bGFuZz0iZW4tVVMiPlNlYXJjaCBkaXNhYmxlZCBpbiBmdWxsIHNjcmVlbiBtb2RlPC9yZGY6bGk+PC9yZGY6QWx0PjwvdHNjRE06bG9jYWxpemVkVGV4dD48L3JkZjpEZXNjcmlwdGlvbj48L3JkZjpsaT48cmRmOmxpPjxyZGY6RGVzY3JpcHRpb24geG1wOmxhYmVsPSJyZXBsYXlCdXR0b25UZXh0Ij48dHNjRE06bG9jYWxpemVkVGV4dD48cmRmOkFsdD48cmRmOmxpIHhtbDpsYW5nPSJlbi1VUyI+UmVwbGF5PC9yZGY6bGk+PC9yZGY6QWx0PjwvdHNjRE06bG9jYWxpemVkVGV4dD48L3JkZjpEZXNjcmlwdGlvbj48L3JkZjpsaT48cmRmOmxpPjxyZGY6RGVzY3JpcHRpb24geG1wOmxhYmVsPSJsb2NhbFNlY3VyaXR5RXJyb3IiPjx0c2NETTpsb2NhbGl6ZWRUZXh0PjxyZGY6QWx0PjxyZGY6bGkgeG1sOmxhbmc9ImVuLVVTIj5DZXJ0YWluIGZlYXR1cmVzIGluIHlvdXIgdmlkZW8gYXJlIGN1cnJlbnRseSBkaXNhYmxlZCBkdWUgdG8gTG9jYWwgTmV0d29yayBTZWN1cml0eS4gVGhlc2UgZmVhdHVyZXMgd29yayBjb3JyZWN0bHkgd2hlbiB0aGUgdmlkZW8gaXMgcGxheWVkIGZyb20gYSBXZWJzaXRlIG9yIFNlcnZlci48L3JkZjpsaT48L3JkZjpBbHQ+PC90c2NETTpsb2NhbGl6ZWRUZXh0PjwvcmRmOkRlc2NyaXB0aW9uPjwvcmRmOmxpPjwvcmRmOkJhZz4KKyAgICAgICAgICAgICAgIDwvdHNjRE06Y29udHJvbGxlclRleHQ+CisgICAgICAgICAgICA8L3JkZjpEZXNjcmlwdGlvbj4KKyAgICAgICAgIDwvdHNjRE06Y29udHJvbGxlcj4KKyAgICAgICAgIDx0c2NETTpjb250ZW50TGlzdD4KKyAgICAgICAgICAgIDxyZGY6RGVzY3JpcHRpb24+CisgICAgICAgICAgICAgICA8dHNjRE06ZmlsZXM+CisgICAgICAgICAgICAgICAgICA8cmRmOlNlcT4KKyAgICAgICAgICAgICAgICAgICAgIDxyZGY6bGkgeG1wRE06bmFtZT0iMCIgeG1wRE06dmFsdWU9ImNkby5tcDQiLz48L3JkZjpTZXE+CisgICAgICAgICAgICAgICA8L3RzY0RNOmZpbGVzPgorICAgICAgICAgICAgPC9yZGY6RGVzY3JpcHRpb24+CisgICAgICAgICA8L3RzY0RNOmNvbnRlbnRMaXN0PgorICAgICAgPC9yZGY6RGVzY3JpcHRpb24+CisgICA8L3JkZjpSREY+Cis8L3g6eG1wbWV0YT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9wYWdlcy90cmFuc2NyaXB0cy8yMDEzX0VjbGlwc2VDb25GcmFuY2UvZGVtb3MvY2RvL2Nkby9jZG9fY29udHJvbGxlci5zd2YgYi9wYWdlcy90cmFuc2NyaXB0cy8yMDEzX0VjbGlwc2VDb25GcmFuY2UvZGVtb3MvY2RvL2Nkby9jZG9fY29udHJvbGxlci5zd2YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzJiMTkzNQotLS0gL2Rldi9udWxsCisrKyBiL3BhZ2VzL3RyYW5zY3JpcHRzLzIwMTNfRWNsaXBzZUNvbkZyYW5jZS9kZW1vcy9jZG8vY2RvL2Nkb19jb250cm9sbGVyLnN3ZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9wYWdlcy90cmFuc2NyaXB0cy8yMDEzX0VjbGlwc2VDb25GcmFuY2UvZGVtb3MvY2RvL2Nkby9jZG9fZW1iZWQuY3NzIGIvcGFnZXMvdHJhbnNjcmlwdHMvMjAxM19FY2xpcHNlQ29uRnJhbmNlL2RlbW9zL2Nkby9jZG8vY2RvX2VtYmVkLmNzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NTgyODUxCi0tLSAvZGV2L251bGwKKysrIGIvcGFnZXMvdHJhbnNjcmlwdHMvMjAxM19FY2xpcHNlQ29uRnJhbmNlL2RlbW9zL2Nkby9jZG8vY2RvX2VtYmVkLmNzcwpAQCAtMCwwICsxLDIyIEBACitAY2hhcnNldCAidXRmLTgiOworCisjdHNjX3BsYXllciB7CisgICB6LWluZGV4OiA5OTk5OwkKK30KKworLnRzY3BsYXllcl9pbmxpbmUgeworCXBvc2l0aW9uOnN0YXRpYzsKKwltYXJnaW46IDBweDsKKwl3aWR0aDogMTIwMHB4OworCWhlaWdodDogNDAwcHg7CisJei1pbmRleDphdXRvOworfQorCisudHNjcGxheWVyX2Z1bGxmcmFtZSB7CisJcG9zaXRpb246YWJzb2x1dGU7CisJdG9wOiAwcHg7CisJbGVmdDogMHB4OworCW1hcmdpbjogMHB4OworCXBhZGRpbmc6IDBweDsKKwl6LWluZGV4OiA5OTk5OwkKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9wYWdlcy90cmFuc2NyaXB0cy8yMDEzX0VjbGlwc2VDb25GcmFuY2UvZGVtb3MvY2RvL2Nkby9jZG9fcGxheWVyLmh0bWwgYi9wYWdlcy90cmFuc2NyaXB0cy8yMDEzX0VjbGlwc2VDb25GcmFuY2UvZGVtb3MvY2RvL2Nkby9jZG9fcGxheWVyLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWNhMGVhNgotLS0gL2Rldi9udWxsCisrKyBiL3BhZ2VzL3RyYW5zY3JpcHRzLzIwMTNfRWNsaXBzZUNvbkZyYW5jZS9kZW1vcy9jZG8vY2RvL2Nkb19wbGF5ZXIuaHRtbApAQCAtMCwwICsxLDU2IEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+Cis8bWV0YSBuYW1lPSJnb29nbGUiIHZhbHVlPSJub3RyYW5zbGF0ZSIgLz4gCis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD11dGYtOCIgLz4KKzxtZXRhIG5hbWU9InZpZXdwb3J0IiBjb250ZW50PSJ3aWR0aD1kZXZpY2Utd2lkdGgsIGluaXRpYWwtc2NhbGU9MSIgLz4KKzxtZXRhIGh0dHAtZXF1aXY9IlgtVUEtQ29tcGF0aWJsZSIgY29udGVudD0iSUU9ZWRnZSxjaHJvbWU9MSI+Cis8dGl0bGU+PC90aXRsZT4KKzxsaW5rIGhyZWY9InNraW5zL292ZXJsYXkvcGxheWVyLW1pbi5jc3MiIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIC8+CisKKworCis8c3R5bGU+CitodG1sLCBib2R5IHsKKwliYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTsKK30KKzwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKworPGRpdiBpZD0idHNjVmlkZW9Db250ZW50IiBzdHlsZT0id2lkdGg6MTAwMHB4O2JhY2tncm91bmQtY29sb3I6d2hpdGU7aGVpZ2h0OjQwMHB4O3BhZGRpbmc6MHB4O21hcmdpbjowcHg7Ij48L2Rpdj4KKworPHNjcmlwdCBzcmM9InNjcmlwdHMvanF1ZXJ5LTEuNy4xLm1pbi5qcyIgPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9InNjcmlwdHMvanF1ZXJ5LXVpLTEuOC4xNS5jdXN0b20ubWluLmpzIiA+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0ic2NyaXB0cy9zd2ZvYmplY3QuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9InNjcmlwdHMvbW9kZXJuaXpyLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJzY3JpcHRzL2hhbmRsZWJhcnMuanMiPjwvc2NyaXB0PgorCis8c2NyaXB0IHNyYz0ic2NyaXB0cy9wbGF5ZXItbWluLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KKyAgICBUU0MucGxheWVyQ29uZmlndXJhdGlvbi5zZXRGbGFzaFBsYXllclN3ZigiY2RvX2NvbnRyb2xsZXIuc3dmIik7CisgICAgVFNDLnBsYXllckNvbmZpZ3VyYXRpb24uc2V0TWVkaWFTcmMoImNkby5tcDQiKTsKKyAgICBUU0MucGxheWVyQ29uZmlndXJhdGlvbi5zZXRYTVBTcmMoImNkb19jb25maWcueG1sIik7CisgICAgCisgICAgVFNDLnBsYXllckNvbmZpZ3VyYXRpb24uc2V0QXV0b0hpZGVDb250cm9scyh0cnVlKTsKKyAgICBUU0MucGxheWVyQ29uZmlndXJhdGlvbi5zZXRCYWNrZ3JvdW5kQ29sb3IoIndoaXRlIik7CisgICAgVFNDLnBsYXllckNvbmZpZ3VyYXRpb24uc2V0Q2FwdGlvbnNFbmFibGVkKGZhbHNlKTsKKyAgICBUU0MucGxheWVyQ29uZmlndXJhdGlvbi5zZXRTaWRlYmFyRW5hYmxlZChmYWxzZSk7CisgICAgCisgICAgVFNDLnBsYXllckNvbmZpZ3VyYXRpb24uc2V0QXV0b1BsYXlNZWRpYSh0cnVlKTsKKyAgICAKKyAgICBUU0MucGxheWVyQ29uZmlndXJhdGlvbi5zZXRJc1NlYXJjaGFibGUoZmFsc2UpOworICAgIFRTQy5wbGF5ZXJDb25maWd1cmF0aW9uLnNldEVuZEFjdGlvblR5cGUoInN0b3AiKTsKKyAgICBUU0MucGxheWVyQ29uZmlndXJhdGlvbi5zZXRFbmRBY3Rpb25QYXJhbSgiZmFsc2UiKTsKKyAgICBUU0MucGxheWVyQ29uZmlndXJhdGlvbi5zZXRBbGxvd1Jld2luZCgtMSk7CisgICAgCisKKyAgICAkKGRvY3VtZW50KS5yZWFkeShmdW5jdGlvbiAoZSkgeworICAgICAgICBUU0MubWVkaWFQbGF5ZXIuaW5pdCgiI3RzY1ZpZGVvQ29udGVudCIpOworICAgIH0pOworPC9zY3JpcHQ+CisKKworCis8L2JvZHk+Cis8L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvcGFnZXMvdHJhbnNjcmlwdHMvMjAxM19FY2xpcHNlQ29uRnJhbmNlL2RlbW9zL2Nkby9jZG8vcGxheWVyUHJvZHVjdEluc3RhbGwuc3dmIGIvcGFnZXMvdHJhbnNjcmlwdHMvMjAxM19FY2xpcHNlQ29uRnJhbmNlL2RlbW9zL2Nkby9jZG8vcGxheWVyUHJvZHVjdEluc3RhbGwuc3dmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJkYzM0MzcKLS0tIC9kZXYvbnVsbAorKysgYi9wYWdlcy90cmFuc2NyaXB0cy8yMDEzX0VjbGlwc2VDb25GcmFuY2UvZGVtb3MvY2RvL2Nkby9wbGF5ZXJQcm9kdWN0SW5zdGFsbC5zd2YKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcGFnZXMvdHJhbnNjcmlwdHMvMjAxM19FY2xpcHNlQ29uRnJhbmNlL2RlbW9zL2Nkby9jZG8vc2NyaXB0cy9oYW5kbGViYXJzLmpzIGIvcGFnZXMvdHJhbnNjcmlwdHMvMjAxM19FY2xpcHNlQ29uRnJhbmNlL2RlbW9zL2Nkby9jZG8vc2NyaXB0cy9oYW5kbGViYXJzLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg2YjdkYjEKLS0tIC9kZXYvbnVsbAorKysgYi9wYWdlcy90cmFuc2NyaXB0cy8yMDEzX0VjbGlwc2VDb25GcmFuY2UvZGVtb3MvY2RvL2Nkby9zY3JpcHRzL2hhbmRsZWJhcnMuanMKQEAgLTAsMCArMSwyIEBACisvL0hhbmRsZWJhci5qcwordmFyIEhhbmRsZWJhcnMgPSB7fTsgSGFuZGxlYmFycy5WRVJTSU9OID0gIjEuMC5iZXRhLjYiOyBIYW5kbGViYXJzLmhlbHBlcnMgPSB7fTsgSGFuZGxlYmFycy5wYXJ0aWFscyA9IHt9OyBIYW5kbGViYXJzLnJlZ2lzdGVySGVscGVyID0gZnVuY3Rpb24gKGIsIGMsIGEpIHsgaWYgKGEpIHsgYy5ub3QgPSBhOyB9IHRoaXMuaGVscGVyc1tiXSA9IGM7IH07IEhhbmRsZWJhcnMucmVnaXN0ZXJQYXJ0aWFsID0gZnVuY3Rpb24gKGEsIGIpIHsgdGhpcy5wYXJ0aWFsc1thXSA9IGI7IH07IEhhbmRsZWJhcnMucmVnaXN0ZXJIZWxwZXIoImhlbHBlck1pc3NpbmciLCBmdW5jdGlvbiAoYSkgeyBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMikgeyByZXR1cm4gdW5kZWZpbmVkOyB9IGVsc2UgeyB0aHJvdyBuZXcgRXJyb3IoIkNvdWxkIG5vdCBmaW5kIHByb3BlcnR5ICciICsgYSArICInIik7IH0gfSk7IHZhciB0b1N0cmluZyA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcsIGZ1bmN0aW9uVHlwZSA9ICJbb2JqZWN0IEZ1bmN0aW9uXSI7IEhhbmRsZWJhcnMucmVnaXN0ZXJIZWxwZXIoImJsb2NrSGVscGVyTWlzc2luZyIsIGZ1bmN0aW9uIChmLCBkKSB7IHZhciBhID0gZC5pbnZlcnNlIHx8IGZ1bmN0aW9uICgpIHsgfSwgaCA9IGQuZm47IHZhciBjID0gIiI7IHZhciBnID0gdG9TdHJpbmcuY2FsbChmKTsgaWYgKGcgPT09IGZ1bmN0aW9uVHlwZSkgeyBmID0gZi5jYWxsKHRoaXMpOyB9IGlmIChmID09PSB0cnVlKSB7IHJldHVybiBoKHRoaXMpOyB9IGVsc2UgeyBpZiAoZiA9PT0gZmFsc2UgfHwgZiA9PSBudWxsKSB7IHJldHVybiBhKHRoaXMpOyB9IGVsc2UgeyBpZiAoZyA9PT0gIltvYmplY3QgQXJyYXldIikgeyBpZiAoZi5sZW5ndGggPiAwKSB7IGZvciAodmFyIGUgPSAwLCBiID0gZi5sZW5ndGg7IGUgPCBiOyBlKyspIHsgYyA9IGMgKyBoKGZbZV0pOyB9IH0gZWxzZSB7IGMgPSBhKHRoaXMpOyB9IHJldHVybiBjOyB9IGVsc2UgeyByZXR1cm4gaChmKTsgfSB9IH0gfSk7IEhhbmRsZWJhcnMucmVnaXN0ZXJIZWxwZXIoImVhY2giLCBmdW5jdGlvbiAoZiwgZCkgeyB2YXIgZyA9IGQuZm4sIGEgPSBkLmludmVyc2U7IHZhciBjID0gIiI7IGlmIChmICYmIGYubGVuZ3RoID4gMCkgeyBmb3IgKHZhciBlID0gMCwgYiA9IGYubGVuZ3RoOyBlIDwgYjsgZSsrKSB7IGMgPSBjICsgZyhmW2VdKTsgfSB9IGVsc2UgeyBjID0gYSh0aGlzKTsgfSByZXR1cm4gYzsgfSk7IEhhbmRsZWJhcnMucmVnaXN0ZXJIZWxwZXIoImlmIiwgZnVuY3Rpb24gKGIsIGEpIHsgdmFyIGMgPSB0b1N0cmluZy5jYWxsKGIpOyBpZiAoYyA9PT0gZnVuY3Rpb25UeXBlKSB7IGIgPSBiLmNhbGwodGhpcyk7IH0gaWYgKCFiIHx8IEhhbmRsZWJhcnMuVXRpbHMuaXNFbXB0eShiKSkgeyByZXR1cm4gYS5pbnZlcnNlKHRoaXMpOyB9IGVsc2UgeyByZXR1cm4gYS5mbih0aGlzKTsgfSB9KTsgSGFuZGxlYmFycy5yZWdpc3RlckhlbHBlcigidW5sZXNzIiwgZnVuY3Rpb24gKGMsIGIpIHsgdmFyIGQgPSBiLmZuLCBhID0gYi5pbnZlcnNlOyBiLmZuID0gYTsgYi5pbnZlcnNlID0gZDsgcmV0dXJuIEhhbmRsZWJhcnMuaGVscGVyc1siaWYiXS5jYWxsKHRoaXMsIGMsIGIpOyB9KTsgSGFuZGxlYmFycy5yZWdpc3RlckhlbHBlcigid2l0aCIsIGZ1bmN0aW9uIChiLCBhKSB7IHJldHVybiBhLmZuKGIpOyB9KTsgSGFuZGxlYmFycy5yZWdpc3RlckhlbHBlcigibG9nIiwgZnVuY3Rpb24gKGEpIHsgSGFuZGxlYmFycy5sb2coYSk7IH0pOyB2YXIgaGFuZGxlYmFycyA9IChmdW5jdGlvbiAoKSB7IHZhciBmID0geyB0cmFjZTogZnVuY3Rpb24gYygpIHsgfSwgeXk6IHt9LCBzeW1ib2xzXzogeyBlcnJvcjogMiwgcm9vdDogMywgcHJvZ3JhbTogNCwgRU9GOiA1LCBzdGF0ZW1lbnRzOiA2LCBzaW1wbGVJbnZlcnNlOiA3LCBzdGF0ZW1lbnQ6IDgsIG9wZW5JbnZlcnNlOiA5LCBjbG9zZUJsb2NrOiAxMCwgb3BlbkJsb2NrOiAxMSwgbXVzdGFjaGU6IDEyLCBwYXJ0aWFsOiAxMywgQ09OVEVOVDogMTQsIENPTU1FTlQ6IDE1LCBPUEVOX0JMT0NLOiAxNiwgaW5NdXN0YWNoZTogMTcsIENMT1NFOiAxOCwgT1BFTl9JTlZFUlNFOiAxOSwgT1BFTl9FTkRCTE9DSzogMjAsIHBhdGg6IDIxLCBPUEVOOiAyMiwgT1BFTl9VTkVTQ0FQRUQ6IDIzLCBPUEVOX1BBUlRJQUw6IDI0LCBwYXJhbXM6IDI1LCBoYXNoOiAyNiwgcGFyYW06IDI3LCBTVFJJTkc6IDI4LCBJTlRFR0VSOiAyOSwgQk9PTEVBTjogMzAsIGhhc2hTZWdtZW50czogMzEsIGhhc2hTZWdtZW50OiAzMiwgSUQ6IDMzLCBFUVVBTFM6IDM0LCBwYXRoU2VnbWVudHM6IDM1LCBTRVA6IDM2LCAiJGFjY2VwdCI6IDAsICIkZW5kIjogMSB9LCB0ZXJtaW5hbHNfOiB7IDI6ICJlcnJvciIsIDU6ICJFT0YiLCAxNDogIkNPTlRFTlQiLCAxNTogIkNPTU1FTlQiLCAxNjogIk9QRU5fQkxPQ0siLCAxODogIkNMT1NFIiwgMTk6ICJPUEVOX0lOVkVSU0UiLCAyMDogIk9QRU5fRU5EQkxPQ0siLCAyMjogIk9QRU4iLCAyMzogIk9QRU5fVU5FU0NBUEVEIiwgMjQ6ICJPUEVOX1BBUlRJQUwiLCAyODogIlNUUklORyIsIDI5OiAiSU5URUdFUiIsIDMwOiAiQk9PTEVBTiIsIDMzOiAiSUQiLCAzNDogIkVRVUFMUyIsIDM2OiAiU0VQIiB9LCBwcm9kdWN0aW9uc186IFswLCBbMywgMl0sIFs0LCAzXSwgWzQsIDFdLCBbNCwgMF0sIFs2LCAxXSwgWzYsIDJdLCBbOCwgM10sIFs4LCAzXSwgWzgsIDFdLCBbOCwgMV0sIFs4LCAxXSwgWzgsIDFdLCBbMTEsIDNdLCBbOSwgM10sIFsxMCwgM10sIFsxMiwgM10sIFsxMiwgM10sIFsxMywgM10sIFsxMywgNF0sIFs3LCAyXSwgWzE3LCAzXSwgWzE3LCAyXSwgWzE3LCAyXSwgWzE3LCAxXSwgWzI1LCAyXSwgWzI1LCAxXSwgWzI3LCAxXSwgWzI3LCAxXSwgWzI3LCAxXSwgWzI3LCAxXSwgWzI2LCAxXSwgWzMxLCAyXSwgWzMxLCAxXSwgWzMyLCAzXSwgWzMyLCAzXSwgWzMyLCAzXSwgWzMyLCAzXSwgWzIxLCAxXSwgWzM1LCAzXSwgWzM1LCAxXV0sIHBlcmZvcm1BY3Rpb246IGZ1bmN0aW9uIGIoZywgaiwgaywgbiwgbSwgaSwgbCkgeyB2YXIgaCA9IGkubGVuZ3RoIC0gMTsgc3dpdGNoIChtKSB7IGNhc2UgMTogcmV0dXJuIGlbaCAtIDFdOyBicmVhazsgY2FzZSAyOiB0aGlzLiQgPSBuZXcgbi5Qcm9ncmFtTm9kZShpW2ggLSAyXSwgaVtoXSk7IGJyZWFrOyBjYXNlIDM6IHRoaXMuJCA9IG5ldyBuLlByb2dyYW1Ob2RlKGlbaF0pOyBicmVhazsgY2FzZSA0OiB0aGlzLiQgPSBuZXcgbi5Qcm9ncmFtTm9kZShbXSk7IGJyZWFrOyBjYXNlIDU6IHRoaXMuJCA9IFtpW2hdXTsgYnJlYWs7IGNhc2UgNjogaVtoIC0gMV0ucHVzaChpW2hdKTsgdGhpcy4kID0gaVtoIC0gMV07IGJyZWFrOyBjYXNlIDc6IHRoaXMuJCA9IG5ldyBuLkludmVyc2VOb2RlKGlbaCAtIDJdLCBpW2ggLSAxXSwgaVtoXSk7IGJyZWFrOyBjYXNlIDg6IHRoaXMuJCA9IG5ldyBuLkJsb2NrTm9kZShpW2ggLSAyXSwgaVtoIC0gMV0sIGlbaF0pOyBicmVhazsgY2FzZSA5OiB0aGlzLiQgPSBpW2hdOyBicmVhazsgY2FzZSAxMDogdGhpcy4kID0gaVtoXTsgYnJlYWs7IGNhc2UgMTE6IHRoaXMuJCA9IG5ldyBuLkNvbnRlbnROb2RlKGlbaF0pOyBicmVhazsgY2FzZSAxMjogdGhpcy4kID0gbmV3IG4uQ29tbWVudE5vZGUoaVtoXSk7IGJyZWFrOyBjYXNlIDEzOiB0aGlzLiQgPSBuZXcgbi5NdXN0YWNoZU5vZGUoaVtoIC0gMV1bMF0sIGlbaCAtIDFdWzFdKTsgYnJlYWs7IGNhc2UgMTQ6IHRoaXMuJCA9IG5ldyBuLk11c3RhY2hlTm9kZShpW2ggLSAxXVswXSwgaVtoIC0gMV1bMV0pOyBicmVhazsgY2FzZSAxNTogdGhpcy4kID0gaVtoIC0gMV07IGJyZWFrOyBjYXNlIDE2OiB0aGlzLiQgPSBuZXcgbi5NdXN0YWNoZU5vZGUoaVtoIC0gMV1bMF0sIGlbaCAtIDFdWzFdKTsgYnJlYWs7IGNhc2UgMTc6IHRoaXMuJCA9IG5ldyBuLk11c3RhY2hlTm9kZShpW2ggLSAxXVswXSwgaVtoIC0gMV1bMV0sIHRydWUpOyBicmVhazsgY2FzZSAxODogdGhpcy4kID0gbmV3IG4uUGFydGlhbE5vZGUoaVtoIC0gMV0pOyBicmVhazsgY2FzZSAxOTogdGhpcy4kID0gbmV3IG4uUGFydGlhbE5vZGUoaVtoIC0gMl0sIGlbaCAtIDFdKTsgYnJlYWs7IGNhc2UgMjA6IGJyZWFrOyBjYXNlIDIxOiB0aGlzLiQgPSBbW2lbaCAtIDJdXS5jb25jYXQoaVtoIC0gMV0pLCBpW2hdXTsgYnJlYWs7IGNhc2UgMjI6IHRoaXMuJCA9IFtbaVtoIC0gMV1dLmNvbmNhdChpW2hdKSwgbnVsbF07IGJyZWFrOyBjYXNlIDIzOiB0aGlzLiQgPSBbW2lbaCAtIDFdXSwgaVtoXV07IGJyZWFrOyBjYXNlIDI0OiB0aGlzLiQgPSBbW2lbaF1dLCBudWxsXTsgYnJlYWs7IGNhc2UgMjU6IGlbaCAtIDFdLnB1c2goaVtoXSk7IHRoaXMuJCA9IGlbaCAtIDFdOyBicmVhazsgY2FzZSAyNjogdGhpcy4kID0gW2lbaF1dOyBicmVhazsgY2FzZSAyNzogdGhpcy4kID0gaVtoXTsgYnJlYWs7IGNhc2UgMjg6IHRoaXMuJCA9IG5ldyBuLlN0cmluZ05vZGUoaVtoXSk7IGJyZWFrOyBjYXNlIDI5OiB0aGlzLiQgPSBuZXcgbi5JbnRlZ2VyTm9kZShpW2hdKTsgYnJlYWs7IGNhc2UgMzA6IHRoaXMuJCA9IG5ldyBuLkJvb2xlYW5Ob2RlKGlbaF0pOyBicmVhazsgY2FzZSAzMTogdGhpcy4kID0gbmV3IG4uSGFzaE5vZGUoaVtoXSk7IGJyZWFrOyBjYXNlIDMyOiBpW2ggLSAxXS5wdXNoKGlbaF0pOyB0aGlzLiQgPSBpW2ggLSAxXTsgYnJlYWs7IGNhc2UgMzM6IHRoaXMuJCA9IFtpW2hdXTsgYnJlYWs7IGNhc2UgMzQ6IHRoaXMuJCA9IFtpW2ggLSAyXSwgaVtoXV07IGJyZWFrOyBjYXNlIDM1OiB0aGlzLiQgPSBbaVtoIC0gMl0sIG5ldyBuLlN0cmluZ05vZGUoaVtoXSldOyBicmVhazsgY2FzZSAzNjogdGhpcy4kID0gW2lbaCAtIDJdLCBuZXcgbi5JbnRlZ2VyTm9kZShpW2hdKV07IGJyZWFrOyBjYXNlIDM3OiB0aGlzLiQgPSBbaVtoIC0gMl0sIG5ldyBuLkJvb2xlYW5Ob2RlKGlbaF0pXTsgYnJlYWs7IGNhc2UgMzg6IHRoaXMuJCA9IG5ldyBuLklkTm9kZShpW2hdKTsgYnJlYWs7IGNhc2UgMzk6IGlbaCAtIDJdLnB1c2goaVtoXSk7IHRoaXMuJCA9IGlbaCAtIDJdOyBicmVhazsgY2FzZSA0MDogdGhpcy4kID0gW2lbaF1dOyBicmVhazsgfSB9LCB0YWJsZTogW3sgMzogMSwgNDogMiwgNTogWzIsIDRdLCA2OiAzLCA4OiA0LCA5OiA1LCAxMTogNiwgMTI6IDcsIDEzOiA4LCAxNDogWzEsIDldLCAxNTogWzEsIDEwXSwgMTY6IFsxLCAxMl0sIDE5OiBbMSwgMTFdLCAyMjogWzEsIDEzXSwgMjM6IFsxLCAxNF0sIDI0OiBbMSwgMTVdIH0sIHsgMTogWzNdIH0sIHsgNTogWzEsIDE2XSB9LCB7IDU6IFsyLCAzXSwgNzogMTcsIDg6IDE4LCA5OiA1LCAxMTogNiwgMTI6IDcsIDEzOiA4LCAxNDogWzEsIDldLCAxNTogWzEsIDEwXSwgMTY6IFsxLCAxMl0sIDE5OiBbMSwgMTldLCAyMDogWzIsIDNdLCAyMjogWzEsIDEzXSwgMjM6IFsxLCAxNF0sIDI0OiBbMSwgMTVdIH0sIHsgNTogWzIsIDVdLCAxNDogWzIsIDVdLCAxNTogWzIsIDVdLCAxNjogWzIsIDVdLCAxOTogWzIsIDVdLCAyMDogWzIsIDVdLCAyMjogWzIsIDVdLCAyMzogWzIsIDVdLCAyNDogWzIsIDVdIH0sIHsgNDogMjAsIDY6IDMsIDg6IDQsIDk6IDUsIDExOiA2LCAxMjogNywgMTM6IDgsIDE0OiBbMSwgOV0sIDE1OiBbMSwgMTBdLCAxNjogWzEsIDEyXSwgMTk6IFsxLCAxMV0sIDIwOiBbMiwgNF0sIDIyOiBbMSwgMTNdLCAyMzogWzEsIDE0XSwgMjQ6IFsxLCAxNV0gfSwgeyA0OiAyMSwgNjogMywgODogNCwgOTogNSwgMTE6IDYsIDEyOiA3LCAxMzogOCwgMTQ6IFsxLCA5XSwgMTU6IFsxLCAxMF0sIDE2OiBbMSwgMTJdLCAxOTogWzEsIDExXSwgMjA6IFsyLCA0XSwgMjI6IFsxLCAxM10sIDIzOiBbMSwgMTRdLCAyNDogWzEsIDE1XSB9LCB7IDU6IFsyLCA5XSwgMTQ6IFsyLCA5XSwgMTU6IFsyLCA5XSwgMTY6IFsyLCA5XSwgMTk6IFsyLCA5XSwgMjA6IFsyLCA5XSwgMjI6IFsyLCA5XSwgMjM6IFsyLCA5XSwgMjQ6IFsyLCA5XSB9LCB7IDU6IFsyLCAxMF0sIDE0OiBbMiwgMTBdLCAxNTogWzIsIDEwXSwgMTY6IFsyLCAxMF0sIDE5OiBbMiwgMTBdLCAyMDogWzIsIDEwXSwgMjI6IFsyLCAxMF0sIDIzOiBbMiwgMTBdLCAyNDogWzIsIDEwXSB9LCB7IDU6IFsyLCAxMV0sIDE0OiBbMiwgMTFdLCAxNTogWzIsIDExXSwgMTY6IFsyLCAxMV0sIDE5OiBbMiwgMTFdLCAyMDogWzIsIDExXSwgMjI6IFsyLCAxMV0sIDIzOiBbMiwgMTFdLCAyNDogWzIsIDExXSB9LCB7IDU6IFsyLCAxMl0sIDE0OiBbMiwgMTJdLCAxNTogWzIsIDEyXSwgMTY6IFsyLCAxMl0sIDE5OiBbMiwgMTJdLCAyMDogWzIsIDEyXSwgMjI6IFsyLCAxMl0sIDIzOiBbMiwgMTJdLCAyNDogWzIsIDEyXSB9LCB7IDE3OiAyMiwgMjE6IDIzLCAzMzogWzEsIDI1XSwgMzU6IDI0IH0sIHsgMTc6IDI2LCAyMTogMjMsIDMzOiBbMSwgMjVdLCAzNTogMjQgfSwgeyAxNzogMjcsIDIxOiAyMywgMzM6IFsxLCAyNV0sIDM1OiAyNCB9LCB7IDE3OiAyOCwgMjE6IDIzLCAzMzogWzEsIDI1XSwgMzU6IDI0IH0sIHsgMjE6IDI5LCAzMzogWzEsIDI1XSwgMzU6IDI0IH0sIHsgMTogWzIsIDFdIH0sIHsgNjogMzAsIDg6IDQsIDk6IDUsIDExOiA2LCAxMjogNywgMTM6IDgsIDE0OiBbMSwgOV0sIDE1OiBbMSwgMTBdLCAxNjogWzEsIDEyXSwgMTk6IFsxLCAxMV0sIDIyOiBbMSwgMTNdLCAyMzogWzEsIDE0XSwgMjQ6IFsxLCAxNV0gfSwgeyA1OiBbMiwgNl0sIDE0OiBbMiwgNl0sIDE1OiBbMiwgNl0sIDE2OiBbMiwgNl0sIDE5OiBbMiwgNl0sIDIwOiBbMiwgNl0sIDIyOiBbMiwgNl0sIDIzOiBbMiwgNl0sIDI0OiBbMiwgNl0gfSwgeyAxNzogMjIsIDE4OiBbMSwgMzFdLCAyMTogMjMsIDMzOiBbMSwgMjVdLCAzNTogMjQgfSwgeyAxMDogMzIsIDIwOiBbMSwgMzNdIH0sIHsgMTA6IDM0LCAyMDogWzEsIDMzXSB9LCB7IDE4OiBbMSwgMzVdIH0sIHsgMTg6IFsyLCAyNF0sIDIxOiA0MCwgMjU6IDM2LCAyNjogMzcsIDI3OiAzOCwgMjg6IFsxLCA0MV0sIDI5OiBbMSwgNDJdLCAzMDogWzEsIDQzXSwgMzE6IDM5LCAzMjogNDQsIDMzOiBbMSwgNDVdLCAzNTogMjQgfSwgeyAxODogWzIsIDM4XSwgMjg6IFsyLCAzOF0sIDI5OiBbMiwgMzhdLCAzMDogWzIsIDM4XSwgMzM6IFsyLCAzOF0sIDM2OiBbMSwgNDZdIH0sIHsgMTg6IFsyLCA0MF0sIDI4OiBbMiwgNDBdLCAyOTogWzIsIDQwXSwgMzA6IFsyLCA0MF0sIDMzOiBbMiwgNDBdLCAzNjogWzIsIDQwXSB9LCB7IDE4OiBbMSwgNDddIH0sIHsgMTg6IFsxLCA0OF0gfSwgeyAxODogWzEsIDQ5XSB9LCB7IDE4OiBbMSwgNTBdLCAyMTogNTEsIDMzOiBbMSwgMjVdLCAzNTogMjQgfSwgeyA1OiBbMiwgMl0sIDg6IDE4LCA5OiA1LCAxMTogNiwgMTI6IDcsIDEzOiA4LCAxNDogWzEsIDldLCAxNTogWzEsIDEwXSwgMTY6IFsxLCAxMl0sIDE5OiBbMSwgMTFdLCAyMDogWzIsIDJdLCAyMjogWzEsIDEzXSwgMjM6IFsxLCAxNF0sIDI0OiBbMSwgMTVdIH0sIHsgMTQ6IFsyLCAyMF0sIDE1OiBbMiwgMjBdLCAxNjogWzIsIDIwXSwgMTk6IFsyLCAyMF0sIDIyOiBbMiwgMjBdLCAyMzogWzIsIDIwXSwgMjQ6IFsyLCAyMF0gfSwgeyA1OiBbMiwgN10sIDE0OiBbMiwgN10sIDE1OiBbMiwgN10sIDE2OiBbMiwgN10sIDE5OiBbMiwgN10sIDIwOiBbMiwgN10sIDIyOiBbMiwgN10sIDIzOiBbMiwgN10sIDI0OiBbMiwgN10gfSwgeyAyMTogNTIsIDMzOiBbMSwgMjVdLCAzNTogMjQgfSwgeyA1OiBbMiwgOF0sIDE0OiBbMiwgOF0sIDE1OiBbMiwgOF0sIDE2OiBbMiwgOF0sIDE5OiBbMiwgOF0sIDIwOiBbMiwgOF0sIDIyOiBbMiwgOF0sIDIzOiBbMiwgOF0sIDI0OiBbMiwgOF0gfSwgeyAxNDogWzIsIDE0XSwgMTU6IFsyLCAxNF0sIDE2OiBbMiwgMTRdLCAxOTogWzIsIDE0XSwgMjA6IFsyLCAxNF0sIDIyOiBbMiwgMTRdLCAyMzogWzIsIDE0XSwgMjQ6IFsyLCAxNF0gfSwgeyAxODogWzIsIDIyXSwgMjE6IDQwLCAyNjogNTMsIDI3OiA1NCwgMjg6IFsxLCA0MV0sIDI5OiBbMSwgNDJdLCAzMDogWzEsIDQzXSwgMzE6IDM5LCAzMjogNDQsIDMzOiBbMSwgNDVdLCAzNTogMjQgfSwgeyAxODogWzIsIDIzXSB9LCB7IDE4OiBbMiwgMjZdLCAyODogWzIsIDI2XSwgMjk6IFsyLCAyNl0sIDMwOiBbMiwgMjZdLCAzMzogWzIsIDI2XSB9LCB7IDE4OiBbMiwgMzFdLCAzMjogNTUsIDMzOiBbMSwgNTZdIH0sIHsgMTg6IFsyLCAyN10sIDI4OiBbMiwgMjddLCAyOTogWzIsIDI3XSwgMzA6IFsyLCAyN10sIDMzOiBbMiwgMjddIH0sIHsgMTg6IFsyLCAyOF0sIDI4OiBbMiwgMjhdLCAyOTogWzIsIDI4XSwgMzA6IFsyLCAyOF0sIDMzOiBbMiwgMjhdIH0sIHsgMTg6IFsyLCAyOV0sIDI4OiBbMiwgMjldLCAyOTogWzIsIDI5XSwgMzA6IFsyLCAyOV0sIDMzOiBbMiwgMjldIH0sIHsgMTg6IFsyLCAzMF0sIDI4OiBbMiwgMzBdLCAyOTogWzIsIDMwXSwgMzA6IFsyLCAzMF0sIDMzOiBbMiwgMzBdIH0sIHsgMTg6IFsyLCAzM10sIDMzOiBbMiwgMzNdIH0sIHsgMTg6IFsyLCA0MF0sIDI4OiBbMiwgNDBdLCAyOTogWzIsIDQwXSwgMzA6IFsyLCA0MF0sIDMzOiBbMiwgNDBdLCAzNDogWzEsIDU3XSwgMzY6IFsyLCA0MF0gfSwgeyAzMzogWzEsIDU4XSB9LCB7IDE0OiBbMiwgMTNdLCAxNTogWzIsIDEzXSwgMTY6IFsyLCAxM10sIDE5OiBbMiwgMTNdLCAyMDogWzIsIDEzXSwgMjI6IFsyLCAxM10sIDIzOiBbMiwgMTNdLCAyNDogWzIsIDEzXSB9LCB7IDU6IFsyLCAxNl0sIDE0OiBbMiwgMTZdLCAxNTogWzIsIDE2XSwgMTY6IFsyLCAxNl0sIDE5OiBbMiwgMTZdLCAyMDogWzIsIDE2XSwgMjI6IFsyLCAxNl0sIDIzOiBbMiwgMTZdLCAyNDogWzIsIDE2XSB9LCB7IDU6IFsyLCAxN10sIDE0OiBbMiwgMTddLCAxNTogWzIsIDE3XSwgMTY6IFsyLCAxN10sIDE5OiBbMiwgMTddLCAyMDogWzIsIDE3XSwgMjI6IFsyLCAxN10sIDIzOiBbMiwgMTddLCAyNDogWzIsIDE3XSB9LCB7IDU6IFsyLCAxOF0sIDE0OiBbMiwgMThdLCAxNTogWzIsIDE4XSwgMTY6IFsyLCAxOF0sIDE5OiBbMiwgMThdLCAyMDogWzIsIDE4XSwgMjI6IFsyLCAxOF0sIDIzOiBbMiwgMThdLCAyNDogWzIsIDE4XSB9LCB7IDE4OiBbMSwgNTldIH0sIHsgMTg6IFsxLCA2MF0gfSwgeyAxODogWzIsIDIxXSB9LCB7IDE4OiBbMiwgMjVdLCAyODogWzIsIDI1XSwgMjk6IFsyLCAyNV0sIDMwOiBbMiwgMjVdLCAzMzogWzIsIDI1XSB9LCB7IDE4OiBbMiwgMzJdLCAzMzogWzIsIDMyXSB9LCB7IDM0OiBbMSwgNTddIH0sIHsgMjE6IDYxLCAyODogWzEsIDYyXSwgMjk6IFsxLCA2M10sIDMwOiBbMSwgNjRdLCAzMzogWzEsIDI1XSwgMzU6IDI0IH0sIHsgMTg6IFsyLCAzOV0sIDI4OiBbMiwgMzldLCAyOTogWzIsIDM5XSwgMzA6IFsyLCAzOV0sIDMzOiBbMiwgMzldLCAzNjogWzIsIDM5XSB9LCB7IDU6IFsyLCAxOV0sIDE0OiBbMiwgMTldLCAxNTogWzIsIDE5XSwgMTY6IFsyLCAxOV0sIDE5OiBbMiwgMTldLCAyMDogWzIsIDE5XSwgMjI6IFsyLCAxOV0sIDIzOiBbMiwgMTldLCAyNDogWzIsIDE5XSB9LCB7IDU6IFsyLCAxNV0sIDE0OiBbMiwgMTVdLCAxNTogWzIsIDE1XSwgMTY6IFsyLCAxNV0sIDE5OiBbMiwgMTVdLCAyMDogWzIsIDE1XSwgMjI6IFsyLCAxNV0sIDIzOiBbMiwgMTVdLCAyNDogWzIsIDE1XSB9LCB7IDE4OiBbMiwgMzRdLCAzMzogWzIsIDM0XSB9LCB7IDE4OiBbMiwgMzVdLCAzMzogWzIsIDM1XSB9LCB7IDE4OiBbMiwgMzZdLCAzMzogWzIsIDM2XSB9LCB7IDE4OiBbMiwgMzddLCAzMzogWzIsIDM3XX1dLCBkZWZhdWx0QWN0aW9uczogeyAxNjogWzIsIDFdLCAzNzogWzIsIDIzXSwgNTM6IFsyLCAyMV0gfSwgcGFyc2VFcnJvcjogZnVuY3Rpb24gZChoLCBnKSB7IHRocm93IG5ldyBFcnJvcihoKTsgfSwgcGFyc2U6IGZ1bmN0aW9uIGUobykgeyB2YXIgeCA9IHRoaXMsIGwgPSBbMF0sIEcgPSBbbnVsbF0sIHMgPSBbXSwgSCA9IHRoaXMudGFibGUsIGggPSAiIiwgcSA9IDAsIEUgPSAwLCBqID0gMCwgbiA9IDIsIHUgPSAxOyB0aGlzLmxleGVyLnNldElucHV0KG8pOyB0aGlzLmxleGVyLnl5ID0gdGhpcy55eTsgdGhpcy55eS5sZXhlciA9IHRoaXMubGV4ZXI7IGlmICh0eXBlb2YgdGhpcy5sZXhlci55eWxsb2MgPT0gInVuZGVmaW5lZCIpIHsgdGhpcy5sZXhlci55eWxsb2MgPSB7fTsgfSB2YXIgaSA9IHRoaXMubGV4ZXIueXlsbG9jOyBzLnB1c2goaSk7IGlmICh0eXBlb2YgdGhpcy55eS5wYXJzZUVycm9yID09PSAiZnVuY3Rpb24iKSB7IHRoaXMucGFyc2VFcnJvciA9IHRoaXMueXkucGFyc2VFcnJvcjsgfSBmdW5jdGlvbiB3KHApIHsgbC5sZW5ndGggPSBsLmxlbmd0aCAtIDIgKiBwOyBHLmxlbmd0aCA9IEcubGVuZ3RoIC0gcDsgcy5sZW5ndGggPSBzLmxlbmd0aCAtIHA7IH0gZnVuY3Rpb24gdigpIHsgdmFyIHA7IHAgPSB4LmxleGVyLmxleCgpIHx8IDE7IGlmICh0eXBlb2YgcCAhPT0gIm51bWJlciIpIHsgcCA9IHguc3ltYm9sc19bcF0gfHwgcDsgfSByZXR1cm4gcDsgfSB2YXIgRCwgeiwgaywgQywgSSwgdCwgQiA9IHt9LCB5LCBGLCBnLCBtOyB3aGlsZSAodHJ1ZSkgeyBrID0gbFtsLmxlbmd0aCAtIDFdOyBpZiAodGhpcy5kZWZhdWx0QWN0aW9uc1trXSkgeyBDID0gdGhpcy5kZWZhdWx0QWN0aW9uc1trXTsgfSBlbHNlIHsgaWYgKEQgPT0gbnVsbCkgeyBEID0gdigpOyB9IEMgPSBIW2tdICYmIEhba11bRF07IH0gaWYgKHR5cGVvZiBDID09PSAidW5kZWZpbmVkIiB8fCAhQy5sZW5ndGggfHwgIUNbMF0pIHsgaWYgKCFqKSB7IG0gPSBbXTsgZm9yICh5IGluIEhba10pIHsgaWYgKHRoaXMudGVybWluYWxzX1t5XSAmJiB5ID4gMikgeyBtLnB1c2goIiciICsgdGhpcy50ZXJtaW5hbHNfW3ldICsgIiciKTsgfSB9IHZhciBBID0gIiI7IGlmICh0aGlzLmxleGVyLnNob3dQb3NpdGlvbikgeyBBID0gIlBhcnNlIGVycm9yIG9uIGxpbmUgIiArIChxICsgMSkgKyAiOlxuIiArIHRoaXMubGV4ZXIuc2hvd1Bvc2l0aW9uKCkgKyAiXG5FeHBlY3RpbmcgIiArIG0uam9pbigiLCAiKSArICIsIGdvdCAnIiArIHRoaXMudGVybWluYWxzX1tEXSArICInIjsgfSBlbHNlIHsgQSA9ICJQYXJzZSBlcnJvciBvbiBsaW5lICIgKyAocSArIDEpICsgIjogVW5leHBlY3RlZCAiICsgKEQgPT0gMSA/ICJlbmQgb2YgaW5wdXQiIDogIiciICsgKHRoaXMudGVybWluYWxzX1tEXSB8fCBEKSArICInIik7IH0gdGhpcy5wYXJzZUVycm9yKEEsIHsgdGV4dDogdGhpcy5sZXhlci5tYXRjaCwgdG9rZW46IHRoaXMudGVybWluYWxzX1tEXSB8fCBELCBsaW5lOiB0aGlzLmxleGVyLnl5bGluZW5vLCBsb2M6IGksIGV4cGVjdGVkOiBtIH0pOyB9IH0gaWYgKENbMF0gaW5zdGFuY2VvZiBBcnJheSAmJiBDLmxlbmd0aCA+IDEpIHsgdGhyb3cgbmV3IEVycm9yKCJQYXJzZSBFcnJvcjogbXVsdGlwbGUgYWN0aW9ucyBwb3NzaWJsZSBhdCBzdGF0ZTogIiArIGsgKyAiLCB0b2tlbjogIiArIEQpOyB9IHN3aXRjaCAoQ1swXSkgeyBjYXNlIDE6IGwucHVzaChEKTsgRy5wdXNoKHRoaXMubGV4ZXIueXl0ZXh0KTsgcy5wdXNoKHRoaXMubGV4ZXIueXlsbG9jKTsgbC5wdXNoKENbMV0pOyBEID0gbnVsbDsgaWYgKCF6KSB7IEUgPSB0aGlzLmxleGVyLnl5bGVuZzsgaCA9IHRoaXMubGV4ZXIueXl0ZXh0OyBxID0gdGhpcy5sZXhlci55eWxpbmVubzsgaSA9IHRoaXMubGV4ZXIueXlsbG9jOyBpZiAoaiA+IDApIHsgai0tOyB9IH0gZWxzZSB7IEQgPSB6OyB6ID0gbnVsbDsgfSBicmVhazsgY2FzZSAyOiBGID0gdGhpcy5wcm9kdWN0aW9uc19bQ1sxXV1bMV07IEIuJCA9IEdbRy5sZW5ndGggLSBGXTsgQi5fJCA9IHsgZmlyc3RfbGluZTogc1tzLmxlbmd0aCAtIChGIHx8IDEpXS5maXJzdF9saW5lLCBsYXN0X2xpbmU6IHNbcy5sZW5ndGggLSAxXS5sYXN0X2xpbmUsIGZpcnN0X2NvbHVtbjogc1tzLmxlbmd0aCAtIChGIHx8IDEpXS5maXJzdF9jb2x1bW4sIGxhc3RfY29sdW1uOiBzW3MubGVuZ3RoIC0gMV0ubGFzdF9jb2x1bW4gfTsgdCA9IHRoaXMucGVyZm9ybUFjdGlvbi5jYWxsKEIsIGgsIEUsIHEsIHRoaXMueXksIENbMV0sIEcsIHMpOyBpZiAodHlwZW9mIHQgIT09ICJ1bmRlZmluZWQiKSB7IHJldHVybiB0OyB9IGlmIChGKSB7IGwgPSBsLnNsaWNlKDAsIC0xICogRiAqIDIpOyBHID0gRy5zbGljZSgwLCAtMSAqIEYpOyBzID0gcy5zbGljZSgwLCAtMSAqIEYpOyB9IGwucHVzaCh0aGlzLnByb2R1Y3Rpb25zX1tDWzFdXVswXSk7IEcucHVzaChCLiQpOyBzLnB1c2goQi5fJCk7IGcgPSBIW2xbbC5sZW5ndGggLSAyXV1bbFtsLmxlbmd0aCAtIDFdXTsgbC5wdXNoKGcpOyBicmVhazsgY2FzZSAzOiByZXR1cm4gdHJ1ZTsgfSB9IHJldHVybiB0cnVlOyB9IH07IHZhciBhID0gKGZ1bmN0aW9uICgpIHsgdmFyIGogPSAoeyBFT0Y6IDEsIHBhcnNlRXJyb3I6IGZ1bmN0aW9uIGwobywgbikgeyBpZiAodGhpcy55eS5wYXJzZUVycm9yKSB7IHRoaXMueXkucGFyc2VFcnJvcihvLCBuKTsgfSBlbHNlIHsgdGhyb3cgbmV3IEVycm9yKG8pOyB9IH0sIHNldElucHV0OiBmdW5jdGlvbiAobikgeyB0aGlzLl9pbnB1dCA9IG47IHRoaXMuX21vcmUgPSB0aGlzLl9sZXNzID0gdGhpcy5kb25lID0gZmFsc2U7IHRoaXMueXlsaW5lbm8gPSB0aGlzLnl5bGVuZyA9IDA7IHRoaXMueXl0ZXh0ID0gdGhpcy5tYXRjaGVkID0gdGhpcy5tYXRjaCA9ICIiOyB0aGlzLmNvbmRpdGlvblN0YWNrID0gWyJJTklUSUFMIl07IHRoaXMueXlsbG9jID0geyBmaXJzdF9saW5lOiAxLCBmaXJzdF9jb2x1bW46IDAsIGxhc3RfbGluZTogMSwgbGFzdF9jb2x1bW46IDAgfTsgcmV0dXJuIHRoaXM7IH0sIGlucHV0OiBmdW5jdGlvbiAoKSB7IHZhciBvID0gdGhpcy5faW5wdXRbMF07IHRoaXMueXl0ZXh0ICs9IG87IHRoaXMueXlsZW5nKys7IHRoaXMubWF0Y2ggKz0gbzsgdGhpcy5tYXRjaGVkICs9IG87IHZhciBuID0gby5tYXRjaCgvXG4vKTsgaWYgKG4pIHsgdGhpcy55eWxpbmVubysrOyB9IHRoaXMuX2lucHV0ID0gdGhpcy5faW5wdXQuc2xpY2UoMSk7IHJldHVybiBvOyB9LCB1bnB1dDogZnVuY3Rpb24gKG4pIHsgdGhpcy5faW5wdXQgPSBuICsgdGhpcy5faW5wdXQ7IHJldHVybiB0aGlzOyB9LCBtb3JlOiBmdW5jdGlvbiAoKSB7IHRoaXMuX21vcmUgPSB0cnVlOyByZXR1cm4gdGhpczsgfSwgcGFzdElucHV0OiBmdW5jdGlvbiAoKSB7IHZhciBuID0gdGhpcy5tYXRjaGVkLnN1YnN0cigwLCB0aGlzLm1hdGNoZWQubGVuZ3RoIC0gdGhpcy5tYXRjaC5sZW5ndGgpOyByZXR1cm4gKG4ubGVuZ3RoID4gMjAgPyAiLi4uIiA6ICIiKSArIG4uc3Vic3RyKC0yMCkucmVwbGFjZSgvXG4vZywgIiIpOyB9LCB1cGNvbWluZ0lucHV0OiBmdW5jdGlvbiAoKSB7IHZhciBuID0gdGhpcy5tYXRjaDsgaWYgKG4ubGVuZ3RoIDwgMjApIHsgbiArPSB0aGlzLl9pbnB1dC5zdWJzdHIoMCwgMjAgLSBuLmxlbmd0aCk7IH0gcmV0dXJuIChuLnN1YnN0cigwLCAyMCkgKyAobi5sZW5ndGggPiAyMCA/ICIuLi4iIDogIiIpKS5yZXBsYWNlKC9cbi9nLCAiIik7IH0sIHNob3dQb3NpdGlvbjogZnVuY3Rpb24gKCkgeyB2YXIgbiA9IHRoaXMucGFzdElucHV0KCk7IHZhciBvID0gbmV3IEFycmF5KG4ubGVuZ3RoICsgMSkuam9pbigiLSIpOyByZXR1cm4gbiArIHRoaXMudXBjb21pbmdJbnB1dCgpICsgIlxuIiArIG8gKyAiXiI7IH0sIG5leHQ6IGZ1bmN0aW9uICgpIHsgaWYgKHRoaXMuZG9uZSkgeyByZXR1cm4gdGhpcy5FT0Y7IH0gaWYgKCF0aGlzLl9pbnB1dCkgeyB0aGlzLmRvbmUgPSB0cnVlOyB9IHZhciByLCBwLCBvLCBuOyBpZiAoIXRoaXMuX21vcmUpIHsgdGhpcy55eXRleHQgPSAiIjsgdGhpcy5tYXRjaCA9ICIiOyB9IHZhciBzID0gdGhpcy5fY3VycmVudFJ1bGVzKCk7IGZvciAodmFyIHEgPSAwOyBxIDwgcy5sZW5ndGg7IHErKykgeyBwID0gdGhpcy5faW5wdXQubWF0Y2godGhpcy5ydWxlc1tzW3FdXSk7IGlmIChwKSB7IG4gPSBwWzBdLm1hdGNoKC9cbi4qL2cpOyBpZiAobikgeyB0aGlzLnl5bGluZW5vICs9IG4ubGVuZ3RoOyB9IHRoaXMueXlsbG9jID0geyBmaXJzdF9saW5lOiB0aGlzLnl5bGxvYy5sYXN0X2xpbmUsIGxhc3RfbGluZTogdGhpcy55eWxpbmVubyArIDEsIGZpcnN0X2NvbHVtbjogdGhpcy55eWxsb2MubGFzdF9jb2x1bW4sIGxhc3RfY29sdW1uOiBuID8gbltuLmxlbmd0aCAtIDFdLmxlbmd0aCAtIDEgOiB0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbiArIHBbMF0ubGVuZ3RoIH07IHRoaXMueXl0ZXh0ICs9IHBbMF07IHRoaXMubWF0Y2ggKz0gcFswXTsgdGhpcy5tYXRjaGVzID0gcDsgdGhpcy55eWxlbmcgPSB0aGlzLnl5dGV4dC5sZW5ndGg7IHRoaXMuX21vcmUgPSBmYWxzZTsgdGhpcy5faW5wdXQgPSB0aGlzLl9pbnB1dC5zbGljZShwWzBdLmxlbmd0aCk7IHRoaXMubWF0Y2hlZCArPSBwWzBdOyByID0gdGhpcy5wZXJmb3JtQWN0aW9uLmNhbGwodGhpcywgdGhpcy55eSwgdGhpcywgc1txXSwgdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aCAtIDFdKTsgaWYgKHIpIHsgcmV0dXJuIHI7IH0gZWxzZSB7IHJldHVybjsgfSB9IH0gaWYgKHRoaXMuX2lucHV0ID09PSAiIikgeyByZXR1cm4gdGhpcy5FT0Y7IH0gZWxzZSB7IHRoaXMucGFyc2VFcnJvcigiTGV4aWNhbCBlcnJvciBvbiBsaW5lICIgKyAodGhpcy55eWxpbmVubyArIDEpICsgIi4gVW5yZWNvZ25pemVkIHRleHQuXG4iICsgdGhpcy5zaG93UG9zaXRpb24oKSwgeyB0ZXh0OiAiIiwgdG9rZW46IG51bGwsIGxpbmU6IHRoaXMueXlsaW5lbm8gfSk7IH0gfSwgbGV4OiBmdW5jdGlvbiBnKCkgeyB2YXIgbiA9IHRoaXMubmV4dCgpOyBpZiAodHlwZW9mIG4gIT09ICJ1bmRlZmluZWQiKSB7IHJldHVybiBuOyB9IGVsc2UgeyByZXR1cm4gdGhpcy5sZXgoKTsgfSB9LCBiZWdpbjogZnVuY3Rpb24gaChuKSB7IHRoaXMuY29uZGl0aW9uU3RhY2sucHVzaChuKTsgfSwgcG9wU3RhdGU6IGZ1bmN0aW9uIG0oKSB7IHJldHVybiB0aGlzLmNvbmRpdGlvblN0YWNrLnBvcCgpOyB9LCBfY3VycmVudFJ1bGVzOiBmdW5jdGlvbiBrKCkgeyByZXR1cm4gdGhpcy5jb25kaXRpb25zW3RoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGggLSAxXV0ucnVsZXM7IH0sIHRvcFN0YXRlOiBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzLmNvbmRpdGlvblN0YWNrW3RoaXMuY29uZGl0aW9uU3RhY2subGVuZ3RoIC0gMl07IH0sIHB1c2hTdGF0ZTogZnVuY3Rpb24gaChuKSB7IHRoaXMuYmVnaW4obik7IH0gfSk7IGoucGVyZm9ybUFjdGlvbiA9IGZ1bmN0aW9uIGkociwgbywgcSwgbikgeyB2YXIgcCA9IG47IHN3aXRjaCAocSkgeyBjYXNlIDA6IGlmIChvLnl5dGV4dC5zbGljZSgtMSkgIT09ICJcXCIpIHsgdGhpcy5iZWdpbigibXUiKTsgfSBpZiAoby55eXRleHQuc2xpY2UoLTEpID09PSAiXFwiKSB7IG8ueXl0ZXh0ID0gby55eXRleHQuc3Vic3RyKDAsIG8ueXlsZW5nIC0gMSksIHRoaXMuYmVnaW4oImVtdSIpOyB9IGlmIChvLnl5dGV4dCkgeyByZXR1cm4gMTQ7IH0gYnJlYWs7IGNhc2UgMTogcmV0dXJuIDE0OyBicmVhazsgY2FzZSAyOiB0aGlzLnBvcFN0YXRlKCk7IHJldHVybiAxNDsgYnJlYWs7IGNhc2UgMzogcmV0dXJuIDI0OyBicmVhazsgY2FzZSA0OiByZXR1cm4gMTY7IGJyZWFrOyBjYXNlIDU6IHJldHVybiAyMDsgYnJlYWs7IGNhc2UgNjogcmV0dXJuIDE5OyBicmVhazsgY2FzZSA3OiByZXR1cm4gMTk7IGJyZWFrOyBjYXNlIDg6IHJldHVybiAyMzsgYnJlYWs7IGNhc2UgOTogcmV0dXJuIDIzOyBicmVhazsgY2FzZSAxMDogby55eXRleHQgPSBvLnl5dGV4dC5zdWJzdHIoMywgby55eWxlbmcgLSA1KTsgdGhpcy5wb3BTdGF0ZSgpOyByZXR1cm4gMTU7IGJyZWFrOyBjYXNlIDExOiByZXR1cm4gMjI7IGJyZWFrOyBjYXNlIDEyOiByZXR1cm4gMzQ7IGJyZWFrOyBjYXNlIDEzOiByZXR1cm4gMzM7IGJyZWFrOyBjYXNlIDE0OiByZXR1cm4gMzM7IGJyZWFrOyBjYXNlIDE1OiByZXR1cm4gMzY7IGJyZWFrOyBjYXNlIDE2OiBicmVhazsgY2FzZSAxNzogdGhpcy5wb3BTdGF0ZSgpOyByZXR1cm4gMTg7IGJyZWFrOyBjYXNlIDE4OiB0aGlzLnBvcFN0YXRlKCk7IHJldHVybiAxODsgYnJlYWs7IGNhc2UgMTk6IG8ueXl0ZXh0ID0gby55eXRleHQuc3Vic3RyKDEsIG8ueXlsZW5nIC0gMikucmVwbGFjZSgvXFwiL2csICciJyk7IHJldHVybiAyODsgYnJlYWs7IGNhc2UgMjA6IHJldHVybiAzMDsgYnJlYWs7IGNhc2UgMjE6IHJldHVybiAzMDsgYnJlYWs7IGNhc2UgMjI6IHJldHVybiAyOTsgYnJlYWs7IGNhc2UgMjM6IHJldHVybiAzMzsgYnJlYWs7IGNhc2UgMjQ6IG8ueXl0ZXh0ID0gby55eXRleHQuc3Vic3RyKDEsIG8ueXlsZW5nIC0gMik7IHJldHVybiAzMzsgYnJlYWs7IGNhc2UgMjU6IHJldHVybiAiSU5WQUxJRCI7IGJyZWFrOyBjYXNlIDI2OiByZXR1cm4gNTsgYnJlYWs7IH0gfTsgai5ydWxlcyA9IFsvXlteXHgwMF0qPyg/PShce1x7KSkvLCAvXlteXHgwMF0rLywgL15bXlx4MDBdezIsfT8oPz0oXHtceykpLywgL15ce1x7Pi8sIC9eXHtceyMvLCAvXlx7XHtcLy8sIC9eXHtce1xeLywgL15ce1x7XHMqZWxzZVxiLywgL15ce1x7XHsvLCAvXlx7XHsmLywgL15ce1x7IVtcc1xTXSo/XH1cfS8sIC9eXHtcey8sIC9ePS8sIC9eXC4oPz1bfSBdKS8sIC9eXC5cLi8sIC9eW1wvLl0vLCAvXlxzKy8sIC9eXH1cfVx9LywgL15cfVx9LywgL14iKFxcWyJdfFteIl0pKiIvLCAvXnRydWUoPz1bfVxzXSkvLCAvXmZhbHNlKD89W31cc10pLywgL15bMC05XSsoPz1bfVxzXSkvLCAvXlthLXpBLVowLTlfJC1dKyg/PVs9fVxzXC8uXSkvLCAvXlxbW15cXV0qXF0vLCAvXi4vLCAvXiQvXTsgai5jb25kaXRpb25zID0geyBtdTogeyBydWxlczogWzMsIDQsIDUsIDYsIDcsIDgsIDksIDEwLCAxMSwgMTIsIDEzLCAxNCwgMTUsIDE2LCAxNywgMTgsIDE5LCAyMCwgMjEsIDIyLCAyMywgMjQsIDI1LCAyNl0sIGluY2x1c2l2ZTogZmFsc2UgfSwgZW11OiB7IHJ1bGVzOiBbMl0sIGluY2x1c2l2ZTogZmFsc2UgfSwgSU5JVElBTDogeyBydWxlczogWzAsIDEsIDI2XSwgaW5jbHVzaXZlOiB0cnVlfSB9OyByZXR1cm4gajsgfSkoKTsgZi5sZXhlciA9IGE7IHJldHVybiBmOyB9KSgpOyBpZiAodHlwZW9mIHJlcXVpcmUgIT09ICJ1bmRlZmluZWQiICYmIHR5cGVvZiBleHBvcnRzICE9PSAidW5kZWZpbmVkIikgeyBleHBvcnRzLnBhcnNlciA9IGhhbmRsZWJhcnM7IGV4cG9ydHMucGFyc2UgPSBmdW5jdGlvbiAoKSB7IHJldHVybiBoYW5kbGViYXJzLnBhcnNlLmFwcGx5KGhhbmRsZWJhcnMsIGFyZ3VtZW50cyk7IH07IGV4cG9ydHMubWFpbiA9IGZ1bmN0aW9uIGNvbW1vbmpzTWFpbihhKSB7IGlmICghYVsxXSkgeyB0aHJvdyBuZXcgRXJyb3IoIlVzYWdlOiAiICsgYVswXSArICIgRklMRSIpOyB9IGlmICh0eXBlb2YgcHJvY2VzcyAhPT0gInVuZGVmaW5lZCIpIHsgdmFyIGMgPSByZXF1aXJlKCJmcyIpLnJlYWRGaWxlU3luYyhyZXF1aXJlKCJwYXRoIikuam9pbihwcm9jZXNzLmN3ZCgpLCBhWzFdKSwgInV0ZjgiKTsgfSBlbHNlIHsgdmFyIGIgPSByZXF1aXJlKCJmaWxlIikucGF0aChyZXF1aXJlKCJmaWxlIikuY3dkKCkpOyB2YXIgYyA9IGIuam9pbihhWzFdKS5yZWFkKHsgY2hhcnNldDogInV0Zi04IiB9KTsgfSByZXR1cm4gZXhwb3J0cy5wYXJzZXIucGFyc2UoYyk7IH07IGlmICh0eXBlb2YgbW9kdWxlICE9PSAidW5kZWZpbmVkIiAmJiByZXF1aXJlLm1haW4gPT09IG1vZHVsZSkgeyBleHBvcnRzLm1haW4odHlwZW9mIHByb2Nlc3MgIT09ICJ1bmRlZmluZWQiID8gcHJvY2Vzcy5hcmd2LnNsaWNlKDEpIDogcmVxdWlyZSgic3lzdGVtIikuYXJncyk7IH0gfSBIYW5kbGViYXJzLlBhcnNlciA9IGhhbmRsZWJhcnM7IEhhbmRsZWJhcnMucGFyc2UgPSBmdW5jdGlvbiAoYSkgeyBIYW5kbGViYXJzLlBhcnNlci55eSA9IEhhbmRsZWJhcnMuQVNUOyByZXR1cm4gSGFuZGxlYmFycy5QYXJzZXIucGFyc2UoYSk7IH07IEhhbmRsZWJhcnMucHJpbnQgPSBmdW5jdGlvbiAoYSkgeyByZXR1cm4gbmV3IEhhbmRsZWJhcnMuUHJpbnRWaXNpdG9yKCkuYWNjZXB0KGEpOyB9OyBIYW5kbGViYXJzLmxvZ2dlciA9IHsgREVCVUc6IDAsIElORk86IDEsIFdBUk46IDIsIEVSUk9SOiAzLCBsZXZlbDogMywgbG9nOiBmdW5jdGlvbiAoYiwgYSkgeyB9IH07IEhhbmRsZWJhcnMubG9nID0gZnVuY3Rpb24gKGIsIGEpIHsgSGFuZGxlYmFycy5sb2dnZXIubG9nKGIsIGEpOyB9OyAoZnVuY3Rpb24gKCkgeyBIYW5kbGViYXJzLkFTVCA9IHt9OyBIYW5kbGViYXJzLkFTVC5Qcm9ncmFtTm9kZSA9IGZ1bmN0aW9uIChjLCBiKSB7IHRoaXMudHlwZSA9ICJwcm9ncmFtIjsgdGhpcy5zdGF0ZW1lbnRzID0gYzsgaWYgKGIpIHsgdGhpcy5pbnZlcnNlID0gbmV3IEhhbmRsZWJhcnMuQVNULlByb2dyYW1Ob2RlKGIpOyB9IH07IEhhbmRsZWJhcnMuQVNULk11c3RhY2hlTm9kZSA9IGZ1bmN0aW9uIChkLCBjLCBiKSB7IHRoaXMudHlwZSA9ICJtdXN0YWNoZSI7IHRoaXMuaWQgPSBkWzBdOyB0aGlzLnBhcmFtcyA9IGQuc2xpY2UoMSk7IHRoaXMuaGFzaCA9IGM7IHRoaXMuZXNjYXBlZCA9ICFiOyB9OyBIYW5kbGViYXJzLkFTVC5QYXJ0aWFsTm9kZSA9IGZ1bmN0aW9uIChjLCBiKSB7IHRoaXMudHlwZSA9ICJwYXJ0aWFsIjsgdGhpcy5pZCA9IGM7IHRoaXMuY29udGV4dCA9IGI7IH07IHZhciBhID0gZnVuY3Rpb24gKGIsIGMpIHsgaWYgKGIub3JpZ2luYWwgIT09IGMub3JpZ2luYWwpIHsgdGhyb3cgbmV3IEhhbmRsZWJhcnMuRXhjZXB0aW9uKGIub3JpZ2luYWwgKyAiIGRvZXNuJ3QgbWF0Y2ggIiArIGMub3JpZ2luYWwpOyB9IH07IEhhbmRsZWJhcnMuQVNULkJsb2NrTm9kZSA9IGZ1bmN0aW9uIChjLCBiLCBkKSB7IGEoYy5pZCwgZCk7IHRoaXMudHlwZSA9ICJibG9jayI7IHRoaXMubXVzdGFjaGUgPSBjOyB0aGlzLnByb2dyYW0gPSBiOyB9OyBIYW5kbGViYXJzLkFTVC5JbnZlcnNlTm9kZSA9IGZ1bmN0aW9uIChjLCBiLCBkKSB7IGEoYy5pZCwgZCk7IHRoaXMudHlwZSA9ICJpbnZlcnNlIjsgdGhpcy5tdXN0YWNoZSA9IGM7IHRoaXMucHJvZ3JhbSA9IGI7IH07IEhhbmRsZWJhcnMuQVNULkNvbnRlbnROb2RlID0gZnVuY3Rpb24gKGIpIHsgdGhpcy50eXBlID0gImNvbnRlbnQiOyB0aGlzLnN0cmluZyA9IGI7IH07IEhhbmRsZWJhcnMuQVNULkhhc2hOb2RlID0gZnVuY3Rpb24gKGIpIHsgdGhpcy50eXBlID0gImhhc2giOyB0aGlzLnBhaXJzID0gYjsgfTsgSGFuZGxlYmFycy5BU1QuSWROb2RlID0gZnVuY3Rpb24gKGYpIHsgdGhpcy50eXBlID0gIklEIjsgdGhpcy5vcmlnaW5hbCA9IGYuam9pbigiLiIpOyB2YXIgZCA9IFtdLCBnID0gMDsgZm9yICh2YXIgZSA9IDAsIGIgPSBmLmxlbmd0aDsgZSA8IGI7IGUrKykgeyB2YXIgYyA9IGZbZV07IGlmIChjID09PSAiLi4iKSB7IGcrKzsgfSBlbHNlIHsgaWYgKGMgPT09ICIuIiB8fCBjID09PSAidGhpcyIpIHsgdGhpcy5pc1Njb3BlZCA9IHRydWU7IH0gZWxzZSB7IGQucHVzaChjKTsgfSB9IH0gdGhpcy5wYXJ0cyA9IGQ7IHRoaXMuc3RyaW5nID0gZC5qb2luKCIuIik7IHRoaXMuZGVwdGggPSBnOyB0aGlzLmlzU2ltcGxlID0gKGQubGVuZ3RoID09PSAxKSAmJiAoZyA9PT0gMCk7IH07IEhhbmRsZWJhcnMuQVNULlN0cmluZ05vZGUgPSBmdW5jdGlvbiAoYikgeyB0aGlzLnR5cGUgPSAiU1RSSU5HIjsgdGhpcy5zdHJpbmcgPSBiOyB9OyBIYW5kbGViYXJzLkFTVC5JbnRlZ2VyTm9kZSA9IGZ1bmN0aW9uIChiKSB7IHRoaXMudHlwZSA9ICJJTlRFR0VSIjsgdGhpcy5pbnRlZ2VyID0gYjsgfTsgSGFuZGxlYmFycy5BU1QuQm9vbGVhbk5vZGUgPSBmdW5jdGlvbiAoYikgeyB0aGlzLnR5cGUgPSAiQk9PTEVBTiI7IHRoaXMuYm9vbCA9IGI7IH07IEhhbmRsZWJhcnMuQVNULkNvbW1lbnROb2RlID0gZnVuY3Rpb24gKGIpIHsgdGhpcy50eXBlID0gImNvbW1lbnQiOyB0aGlzLmNvbW1lbnQgPSBiOyB9OyB9KSgpOyBIYW5kbGViYXJzLkV4Y2VwdGlvbiA9IGZ1bmN0aW9uIChiKSB7IHZhciBhID0gRXJyb3IucHJvdG90eXBlLmNvbnN0cnVjdG9yLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IGZvciAodmFyIGMgaW4gYSkgeyBpZiAoYS5oYXNPd25Qcm9wZXJ0eShjKSkgeyB0aGlzW2NdID0gYVtjXTsgfSB9IHRoaXMubWVzc2FnZSA9IGEubWVzc2FnZTsgfTsgSGFuZGxlYmFycy5FeGNlcHRpb24ucHJvdG90eXBlID0gbmV3IEVycm9yOyBIYW5kbGViYXJzLlNhZmVTdHJpbmcgPSBmdW5jdGlvbiAoYSkgeyB0aGlzLnN0cmluZyA9IGE7IH07IEhhbmRsZWJhcnMuU2FmZVN0cmluZy5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzLnN0cmluZy50b1N0cmluZygpOyB9OyAoZnVuY3Rpb24gKCkgeyB2YXIgYyA9IHsgIjwiOiAiJmx0OyIsICI+IjogIiZndDsiLCAnIic6ICImcXVvdDsiLCAiJyI6ICImI3gyNzsiLCAiYCI6ICImI3g2MDsiIH07IHZhciBkID0gLyYoPyFcdys7KXxbPD4iJ2BdL2c7IHZhciBiID0gL1smPD4iJ2BdLzsgdmFyIGEgPSBmdW5jdGlvbiAoZSkgeyByZXR1cm4gY1tlXSB8fCAiJmFtcDsiOyB9OyBIYW5kbGViYXJzLlV0aWxzID0geyBlc2NhcGVFeHByZXNzaW9uOiBmdW5jdGlvbiAoZSkgeyBpZiAoZSBpbnN0YW5jZW9mIEhhbmRsZWJhcnMuU2FmZVN0cmluZykgeyByZXR1cm4gZS50b1N0cmluZygpOyB9IGVsc2UgeyBpZiAoZSA9PSBudWxsIHx8IGUgPT09IGZhbHNlKSB7IHJldHVybiAiIjsgfSB9IGlmICghYi50ZXN0KGUpKSB7IHJldHVybiBlOyB9IHJldHVybiBlLnJlcGxhY2UoZCwgYSk7IH0sIGlzRW1wdHk6IGZ1bmN0aW9uIChlKSB7IGlmICh0eXBlb2YgZSA9PT0gInVuZGVmaW5lZCIpIHsgcmV0dXJuIHRydWU7IH0gZWxzZSB7IGlmIChlID09PSBudWxsKSB7IHJldHVybiB0cnVlOyB9IGVsc2UgeyBpZiAoZSA9PT0gZmFsc2UpIHsgcmV0dXJuIHRydWU7IH0gZWxzZSB7IGlmIChPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZSkgPT09ICJbb2JqZWN0IEFycmF5XSIgJiYgZS5sZW5ndGggPT09IDApIHsgcmV0dXJuIHRydWU7IH0gZWxzZSB7IHJldHVybiBmYWxzZTsgfSB9IH0gfSB9IH07IH0pKCk7IEhhbmRsZWJhcnMuQ29tcGlsZXIgPSBmdW5jdGlvbiAoKSB7IH07IEhhbmRsZWJhcnMuSmF2YVNjcmlwdENvbXBpbGVyID0gZnVuY3Rpb24gKCkgeyB9OyAoZnVuY3Rpb24gKGYsIGUpIHsgZi5PUENPREVfTUFQID0geyBhcHBlbmRDb250ZW50OiAxLCBnZXRDb250ZXh0OiAyLCBsb29rdXBXaXRoSGVscGVyczogMywgbG9va3VwOiA0LCBhcHBlbmQ6IDUsIGludm9rZU11c3RhY2hlOiA2LCBhcHBlbmRFc2NhcGVkOiA3LCBwdXNoU3RyaW5nOiA4LCB0cnV0aHlPckZhbGxiYWNrOiA5LCBmdW5jdGlvbk9yRmFsbGJhY2s6IDEwLCBpbnZva2VQcm9ncmFtOiAxMSwgaW52b2tlUGFydGlhbDogMTIsIHB1c2g6IDEzLCBhc3NpZ25Ub0hhc2g6IDE1LCBwdXNoU3RyaW5nUGFyYW06IDE2IH07IGYuTVVMVElfUEFSQU1fT1BDT0RFUyA9IHsgYXBwZW5kQ29udGVudDogMSwgZ2V0Q29udGV4dDogMSwgbG9va3VwV2l0aEhlbHBlcnM6IDIsIGxvb2t1cDogMSwgaW52b2tlTXVzdGFjaGU6IDMsIHB1c2hTdHJpbmc6IDEsIHRydXRoeU9yRmFsbGJhY2s6IDEsIGZ1bmN0aW9uT3JGYWxsYmFjazogMSwgaW52b2tlUHJvZ3JhbTogMywgaW52b2tlUGFydGlhbDogMSwgcHVzaDogMSwgYXNzaWduVG9IYXNoOiAxLCBwdXNoU3RyaW5nUGFyYW06IDEgfTsgZi5ESVNBU1NFTUJMRV9NQVAgPSB7fTsgZm9yICh2YXIgaCBpbiBmLk9QQ09ERV9NQVApIHsgdmFyIGcgPSBmLk9QQ09ERV9NQVBbaF07IGYuRElTQVNTRU1CTEVfTUFQW2ddID0gaDsgfSBmLm11bHRpUGFyYW1TaXplID0gZnVuY3Rpb24gKGkpIHsgcmV0dXJuIGYuTVVMVElfUEFSQU1fT1BDT0RFU1tmLkRJU0FTU0VNQkxFX01BUFtpXV07IH07IGYucHJvdG90eXBlID0geyBjb21waWxlcjogZiwgZGlzYXNzZW1ibGU6IGZ1bmN0aW9uICgpIHsgdmFyIHQgPSB0aGlzLm9wY29kZXMsIHIsIG47IHZhciBxID0gW10sIHYsIG0sIHc7IGZvciAodmFyIHMgPSAwLCBvID0gdC5sZW5ndGg7IHMgPCBvOyBzKyspIHsgciA9IHRbc107IGlmIChyID09PSAiREVDTEFSRSIpIHsgbSA9IHRbKytzXTsgdyA9IHRbKytzXTsgcS5wdXNoKCJERUNMQVJFICIgKyBtICsgIiA9ICIgKyB3KTsgfSBlbHNlIHsgdiA9IGYuRElTQVNTRU1CTEVfTUFQW3JdOyB2YXIgdSA9IGYubXVsdGlQYXJhbVNpemUocik7IHZhciBrID0gW107IGZvciAodmFyIHAgPSAwOyBwIDwgdTsgcCsrKSB7IG4gPSB0Wysrc107IGlmICh0eXBlb2YgbiA9PT0gInN0cmluZyIpIHsgbiA9ICciJyArIG4ucmVwbGFjZSgiXG4iLCAiXFxuIikgKyAnIic7IH0gay5wdXNoKG4pOyB9IHYgPSB2ICsgIiAiICsgay5qb2luKCIgIik7IHEucHVzaCh2KTsgfSB9IHJldHVybiBxLmpvaW4oIlxuIik7IH0sIGd1aWQ6IDAsIGNvbXBpbGU6IGZ1bmN0aW9uIChpLCBrKSB7IHRoaXMuY2hpbGRyZW4gPSBbXTsgdGhpcy5kZXB0aHMgPSB7IGxpc3Q6IFtdIH07IHRoaXMub3B0aW9ucyA9IGs7IHZhciBsID0gdGhpcy5vcHRpb25zLmtub3duSGVscGVyczsgdGhpcy5vcHRpb25zLmtub3duSGVscGVycyA9IHsgaGVscGVyTWlzc2luZzogdHJ1ZSwgYmxvY2tIZWxwZXJNaXNzaW5nOiB0cnVlLCBlYWNoOiB0cnVlLCAiaWYiOiB0cnVlLCB1bmxlc3M6IHRydWUsICJ3aXRoIjogdHJ1ZSwgbG9nOiB0cnVlIH07IGlmIChsKSB7IGZvciAodmFyIGogaW4gbCkgeyB0aGlzLm9wdGlvbnMua25vd25IZWxwZXJzW2pdID0gbFtqXTsgfSB9IHJldHVybiB0aGlzLnByb2dyYW0oaSk7IH0sIGFjY2VwdDogZnVuY3Rpb24gKGkpIHsgcmV0dXJuIHRoaXNbaS50eXBlXShpKTsgfSwgcHJvZ3JhbTogZnVuY3Rpb24gKG0pIHsgdmFyIGsgPSBtLnN0YXRlbWVudHMsIG87IHRoaXMub3Bjb2RlcyA9IFtdOyBmb3IgKHZhciBuID0gMCwgaiA9IGsubGVuZ3RoOyBuIDwgajsgbisrKSB7IG8gPSBrW25dOyB0aGlzW28udHlwZV0obyk7IH0gdGhpcy5pc1NpbXBsZSA9IGogPT09IDE7IHRoaXMuZGVwdGhzLmxpc3QgPSB0aGlzLmRlcHRocy5saXN0LnNvcnQoZnVuY3Rpb24gKGwsIGkpIHsgcmV0dXJuIGwgLSBpOyB9KTsgcmV0dXJuIHRoaXM7IH0sIGNvbXBpbGVQcm9ncmFtOiBmdW5jdGlvbiAobSkgeyB2YXIgaiA9IG5ldyB0aGlzLmNvbXBpbGVyKCkuY29tcGlsZShtLCB0aGlzLm9wdGlvbnMpOyB2YXIgbiA9IHRoaXMuZ3VpZCsrOyB0aGlzLnVzZVBhcnRpYWwgPSB0aGlzLnVzZVBhcnRpYWwgfHwgai51c2VQYXJ0aWFsOyB0aGlzLmNoaWxkcmVuW25dID0gajsgZm9yICh2YXIgbyA9IDAsIGsgPSBqLmRlcHRocy5saXN0Lmxlbmd0aDsgbyA8IGs7IG8rKykgeyBkZXB0aCA9IGouZGVwdGhzLmxpc3Rbb107IGlmIChkZXB0aCA8IDIpIHsgY29udGludWU7IH0gZWxzZSB7IHRoaXMuYWRkRGVwdGgoZGVwdGggLSAxKTsgfSB9IHJldHVybiBuOyB9LCBibG9jazogZnVuY3Rpb24gKG8pIHsgdmFyIGwgPSBvLm11c3RhY2hlOyB2YXIgbiwgcCwgaiwgazsgdmFyIG0gPSB0aGlzLnNldHVwU3RhY2tGb3JNdXN0YWNoZShsKTsgdmFyIGkgPSB0aGlzLmNvbXBpbGVQcm9ncmFtKG8ucHJvZ3JhbSk7IGlmIChvLnByb2dyYW0uaW52ZXJzZSkgeyBrID0gdGhpcy5jb21waWxlUHJvZ3JhbShvLnByb2dyYW0uaW52ZXJzZSk7IHRoaXMuZGVjbGFyZSgiaW52ZXJzZSIsIGspOyB9IHRoaXMub3Bjb2RlKCJpbnZva2VQcm9ncmFtIiwgaSwgbS5sZW5ndGgsICEhbC5oYXNoKTsgdGhpcy5kZWNsYXJlKCJpbnZlcnNlIiwgbnVsbCk7IHRoaXMub3Bjb2RlKCJhcHBlbmQiKTsgfSwgaW52ZXJzZTogZnVuY3Rpb24gKGspIHsgdmFyIGogPSB0aGlzLnNldHVwU3RhY2tGb3JNdXN0YWNoZShrLm11c3RhY2hlKTsgdmFyIGkgPSB0aGlzLmNvbXBpbGVQcm9ncmFtKGsucHJvZ3JhbSk7IHRoaXMuZGVjbGFyZSgiaW52ZXJzZSIsIGkpOyB0aGlzLm9wY29kZSgiaW52b2tlUHJvZ3JhbSIsIG51bGwsIGoubGVuZ3RoLCAhIWsubXVzdGFjaGUuaGFzaCk7IHRoaXMuZGVjbGFyZSgiaW52ZXJzZSIsIG51bGwpOyB0aGlzLm9wY29kZSgiYXBwZW5kIik7IH0sIGhhc2g6IGZ1bmN0aW9uIChuKSB7IHZhciBtID0gbi5wYWlycywgcCwgbzsgdGhpcy5vcGNvZGUoInB1c2giLCAie30iKTsgZm9yICh2YXIgayA9IDAsIGogPSBtLmxlbmd0aDsgayA8IGo7IGsrKykgeyBwID0gbVtrXTsgbyA9IHBbMV07IHRoaXMuYWNjZXB0KG8pOyB0aGlzLm9wY29kZSgiYXNzaWduVG9IYXNoIiwgcFswXSk7IH0gfSwgcGFydGlhbDogZnVuY3Rpb24gKGkpIHsgdmFyIGogPSBpLmlkOyB0aGlzLnVzZVBhcnRpYWwgPSB0cnVlOyBpZiAoaS5jb250ZXh0KSB7IHRoaXMuSUQoaS5jb250ZXh0KTsgfSBlbHNlIHsgdGhpcy5vcGNvZGUoInB1c2giLCAiZGVwdGgwIik7IH0gdGhpcy5vcGNvZGUoImludm9rZVBhcnRpYWwiLCBqLm9yaWdpbmFsKTsgdGhpcy5vcGNvZGUoImFwcGVuZCIpOyB9LCBjb250ZW50OiBmdW5jdGlvbiAoaSkgeyB0aGlzLm9wY29kZSgiYXBwZW5kQ29udGVudCIsIGkuc3RyaW5nKTsgfSwgbXVzdGFjaGU6IGZ1bmN0aW9uIChpKSB7IHZhciBqID0gdGhpcy5zZXR1cFN0YWNrRm9yTXVzdGFjaGUoaSk7IHRoaXMub3Bjb2RlKCJpbnZva2VNdXN0YWNoZSIsIGoubGVuZ3RoLCBpLmlkLm9yaWdpbmFsLCAhIWkuaGFzaCk7IGlmIChpLmVzY2FwZWQgJiYgIXRoaXMub3B0aW9ucy5ub0VzY2FwZSkgeyB0aGlzLm9wY29kZSgiYXBwZW5kRXNjYXBlZCIpOyB9IGVsc2UgeyB0aGlzLm9wY29kZSgiYXBwZW5kIik7IH0gfSwgSUQ6IGZ1bmN0aW9uIChtKSB7IHRoaXMuYWRkRGVwdGgobS5kZXB0aCk7IHRoaXMub3Bjb2RlKCJnZXRDb250ZXh0IiwgbS5kZXB0aCk7IHRoaXMub3Bjb2RlKCJsb29rdXBXaXRoSGVscGVycyIsIG0ucGFydHNbMF0gfHwgbnVsbCwgbS5pc1Njb3BlZCB8fCBmYWxzZSk7IGZvciAodmFyIGsgPSAxLCBqID0gbS5wYXJ0cy5sZW5ndGg7IGsgPCBqOyBrKyspIHsgdGhpcy5vcGNvZGUoImxvb2t1cCIsIG0ucGFydHNba10pOyB9IH0sIFNUUklORzogZnVuY3Rpb24gKGkpIHsgdGhpcy5vcGNvZGUoInB1c2hTdHJpbmciLCBpLnN0cmluZyk7IH0sIElOVEVHRVI6IGZ1bmN0aW9uIChpKSB7IHRoaXMub3Bjb2RlKCJwdXNoIiwgaS5pbnRlZ2VyKTsgfSwgQk9PTEVBTjogZnVuY3Rpb24gKGkpIHsgdGhpcy5vcGNvZGUoInB1c2giLCBpLmJvb2wpOyB9LCBjb21tZW50OiBmdW5jdGlvbiAoKSB7IH0sIHB1c2hQYXJhbXM6IGZ1bmN0aW9uIChsKSB7IHZhciBqID0gbC5sZW5ndGgsIGs7IHdoaWxlIChqLS0pIHsgayA9IGxbal07IGlmICh0aGlzLm9wdGlvbnMuc3RyaW5nUGFyYW1zKSB7IGlmIChrLmRlcHRoKSB7IHRoaXMuYWRkRGVwdGgoay5kZXB0aCk7IH0gdGhpcy5vcGNvZGUoImdldENvbnRleHQiLCBrLmRlcHRoIHx8IDApOyB0aGlzLm9wY29kZSgicHVzaFN0cmluZ1BhcmFtIiwgay5zdHJpbmcpOyB9IGVsc2UgeyB0aGlzW2sudHlwZV0oayk7IH0gfSB9LCBvcGNvZGU6IGZ1bmN0aW9uIChpLCBsLCBrLCBqKSB7IHRoaXMub3Bjb2Rlcy5wdXNoKGYuT1BDT0RFX01BUFtpXSk7IGlmIChsICE9PSB1bmRlZmluZWQpIHsgdGhpcy5vcGNvZGVzLnB1c2gobCk7IH0gaWYgKGsgIT09IHVuZGVmaW5lZCkgeyB0aGlzLm9wY29kZXMucHVzaChrKTsgfSBpZiAoaiAhPT0gdW5kZWZpbmVkKSB7IHRoaXMub3Bjb2Rlcy5wdXNoKGopOyB9IH0sIGRlY2xhcmU6IGZ1bmN0aW9uIChpLCBqKSB7IHRoaXMub3Bjb2Rlcy5wdXNoKCJERUNMQVJFIik7IHRoaXMub3Bjb2Rlcy5wdXNoKGkpOyB0aGlzLm9wY29kZXMucHVzaChqKTsgfSwgYWRkRGVwdGg6IGZ1bmN0aW9uIChpKSB7IGlmIChpID09PSAwKSB7IHJldHVybjsgfSBpZiAoIXRoaXMuZGVwdGhzW2ldKSB7IHRoaXMuZGVwdGhzW2ldID0gdHJ1ZTsgdGhpcy5kZXB0aHMubGlzdC5wdXNoKGkpOyB9IH0sIHNldHVwU3RhY2tGb3JNdXN0YWNoZTogZnVuY3Rpb24gKGkpIHsgdmFyIGogPSBpLnBhcmFtczsgdGhpcy5wdXNoUGFyYW1zKGopOyBpZiAoaS5oYXNoKSB7IHRoaXMuaGFzaChpLmhhc2gpOyB9IHRoaXMuSUQoaS5pZCk7IHJldHVybiBqOyB9IH07IGUucHJvdG90eXBlID0geyBuYW1lTG9va3VwOiBmdW5jdGlvbiAoaywgaSwgaikgeyBpZiAoL15bMC05XSskLy50ZXN0KGkpKSB7IHJldHVybiBrICsgIlsiICsgaSArICJdIjsgfSBlbHNlIHsgaWYgKGUuaXNWYWxpZEphdmFTY3JpcHRWYXJpYWJsZU5hbWUoaSkpIHsgcmV0dXJuIGsgKyAiLiIgKyBpOyB9IGVsc2UgeyByZXR1cm4gayArICJbJyIgKyBpICsgIiddIjsgfSB9IH0sIGFwcGVuZFRvQnVmZmVyOiBmdW5jdGlvbiAoaSkgeyBpZiAodGhpcy5lbnZpcm9ubWVudC5pc1NpbXBsZSkgeyByZXR1cm4gInJldHVybiAiICsgaSArICI7IjsgfSBlbHNlIHsgcmV0dXJuICJidWZmZXIgKz0gIiArIGkgKyAiOyI7IH0gfSwgaW5pdGlhbGl6ZUJ1ZmZlcjogZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpcy5xdW90ZWRTdHJpbmcoIiIpOyB9LCBuYW1lc3BhY2U6ICJIYW5kbGViYXJzIiwgY29tcGlsZTogZnVuY3Rpb24gKGksIGosIGwsIGspIHsgdGhpcy5lbnZpcm9ubWVudCA9IGk7IHRoaXMub3B0aW9ucyA9IGogfHwge307IHRoaXMubmFtZSA9IHRoaXMuZW52aXJvbm1lbnQubmFtZTsgdGhpcy5pc0NoaWxkID0gISFsOyB0aGlzLmNvbnRleHQgPSBsIHx8IHsgcHJvZ3JhbXM6IFtdLCBhbGlhc2VzOiB7IHNlbGY6ICJ0aGlzIiB9LCByZWdpc3RlcnM6IHsgbGlzdDogW119IH07IHRoaXMucHJlYW1ibGUoKTsgdGhpcy5zdGFja1Nsb3QgPSAwOyB0aGlzLnN0YWNrVmFycyA9IFtdOyB0aGlzLmNvbXBpbGVDaGlsZHJlbihpLCBqKTsgdmFyIG4gPSBpLm9wY29kZXMsIG07IHRoaXMuaSA9IDA7IGZvciAoYiA9IG4ubGVuZ3RoOyB0aGlzLmkgPCBiOyB0aGlzLmkrKykgeyBtID0gdGhpcy5uZXh0T3Bjb2RlKDApOyBpZiAobVswXSA9PT0gIkRFQ0xBUkUiKSB7IHRoaXMuaSA9IHRoaXMuaSArIDI7IHRoaXNbbVsxXV0gPSBtWzJdOyB9IGVsc2UgeyB0aGlzLmkgPSB0aGlzLmkgKyBtWzFdLmxlbmd0aDsgdGhpc1ttWzBdXS5hcHBseSh0aGlzLCBtWzFdKTsgfSB9IHJldHVybiB0aGlzLmNyZWF0ZUZ1bmN0aW9uQ29udGV4dChrKTsgfSwgbmV4dE9wY29kZTogZnVuY3Rpb24gKHIpIHsgdmFyIG8gPSB0aGlzLmVudmlyb25tZW50Lm9wY29kZXMsIG0gPSBvW3RoaXMuaSArIHJdLCBsLCBwOyB2YXIgcSwgaTsgaWYgKG0gPT09ICJERUNMQVJFIikgeyBsID0gb1t0aGlzLmkgKyAxXTsgcCA9IG9bdGhpcy5pICsgMl07IHJldHVybiBbIkRFQ0xBUkUiLCBsLCBwXTsgfSBlbHNlIHsgbCA9IGYuRElTQVNTRU1CTEVfTUFQW21dOyBxID0gZi5tdWx0aVBhcmFtU2l6ZShtKTsgaSA9IFtdOyBmb3IgKHZhciBrID0gMDsgayA8IHE7IGsrKykgeyBpLnB1c2gob1t0aGlzLmkgKyBrICsgMSArIHJdKTsgfSByZXR1cm4gW2wsIGldOyB9IH0sIGVhdDogZnVuY3Rpb24gKGkpIHsgdGhpcy5pID0gdGhpcy5pICsgaS5sZW5ndGg7IH0sIHByZWFtYmxlOiBmdW5jdGlvbiAoKSB7IHZhciBpID0gW107IHRoaXMudXNlUmVnaXN0ZXIoImZvdW5kSGVscGVyIik7IGlmICghdGhpcy5pc0NoaWxkKSB7IHZhciBqID0gdGhpcy5uYW1lc3BhY2U7IHZhciBrID0gImhlbHBlcnMgPSBoZWxwZXJzIHx8ICIgKyBqICsgIi5oZWxwZXJzOyI7IGlmICh0aGlzLmVudmlyb25tZW50LnVzZVBhcnRpYWwpIHsgayA9IGsgKyAiIHBhcnRpYWxzID0gcGFydGlhbHMgfHwgIiArIGogKyAiLnBhcnRpYWxzOyI7IH0gaS5wdXNoKGspOyB9IGVsc2UgeyBpLnB1c2goIiIpOyB9IGlmICghdGhpcy5lbnZpcm9ubWVudC5pc1NpbXBsZSkgeyBpLnB1c2goIiwgYnVmZmVyID0gIiArIHRoaXMuaW5pdGlhbGl6ZUJ1ZmZlcigpKTsgfSBlbHNlIHsgaS5wdXNoKCIiKTsgfSB0aGlzLmxhc3RDb250ZXh0ID0gMDsgdGhpcy5zb3VyY2UgPSBpOyB9LCBjcmVhdGVGdW5jdGlvbkNvbnRleHQ6IGZ1bmN0aW9uIChwKSB7IHZhciBxID0gdGhpcy5zdGFja1ZhcnM7IGlmICghdGhpcy5pc0NoaWxkKSB7IHEgPSBxLmNvbmNhdCh0aGlzLmNvbnRleHQucmVnaXN0ZXJzLmxpc3QpOyB9IGlmIChxLmxlbmd0aCA+IDApIHsgdGhpcy5zb3VyY2VbMV0gPSB0aGlzLnNvdXJjZVsxXSArICIsICIgKyBxLmpvaW4oIiwgIik7IH0gaWYgKCF0aGlzLmlzQ2hpbGQpIHsgdmFyIGsgPSBbXTsgZm9yICh2YXIgbyBpbiB0aGlzLmNvbnRleHQuYWxpYXNlcykgeyB0aGlzLnNvdXJjZVsxXSA9IHRoaXMuc291cmNlWzFdICsgIiwgIiArIG8gKyAiPSIgKyB0aGlzLmNvbnRleHQuYWxpYXNlc1tvXTsgfSB9IGlmICh0aGlzLnNvdXJjZVsxXSkgeyB0aGlzLnNvdXJjZVsxXSA9ICJ2YXIgIiArIHRoaXMuc291cmNlWzFdLnN1YnN0cmluZygyKSArICI7IjsgfSBpZiAoIXRoaXMuaXNDaGlsZCkgeyB0aGlzLnNvdXJjZVsxXSArPSAiXG4iICsgdGhpcy5jb250ZXh0LnByb2dyYW1zLmpvaW4oIlxuIikgKyAiXG4iOyB9IGlmICghdGhpcy5lbnZpcm9ubWVudC5pc1NpbXBsZSkgeyB0aGlzLnNvdXJjZS5wdXNoKCJyZXR1cm4gYnVmZmVyOyIpOyB9IHZhciByID0gdGhpcy5pc0NoaWxkID8gWyJkZXB0aDAiLCAiZGF0YSJdIDogWyJIYW5kbGViYXJzIiwgImRlcHRoMCIsICJoZWxwZXJzIiwgInBhcnRpYWxzIiwgImRhdGEiXTsgZm9yICh2YXIgbiA9IDAsIGogPSB0aGlzLmVudmlyb25tZW50LmRlcHRocy5saXN0Lmxlbmd0aDsgbiA8IGo7IG4rKykgeyByLnB1c2goImRlcHRoIiArIHRoaXMuZW52aXJvbm1lbnQuZGVwdGhzLmxpc3Rbbl0pOyB9IGlmIChwKSB7IHIucHVzaCh0aGlzLnNvdXJjZS5qb2luKCJcbiAgIikpOyByZXR1cm4gRnVuY3Rpb24uYXBwbHkodGhpcywgcik7IH0gZWxzZSB7IHZhciBtID0gImZ1bmN0aW9uICIgKyAodGhpcy5uYW1lIHx8ICIiKSArICIoIiArIHIuam9pbigiLCIpICsgIikge1xuICAiICsgdGhpcy5zb3VyY2Uuam9pbigiXG4gICIpICsgIn0iOyBIYW5kbGViYXJzLmxvZyhIYW5kbGViYXJzLmxvZ2dlci5ERUJVRywgbSArICJcblxuIik7IHJldHVybiBtOyB9IH0sIGFwcGVuZENvbnRlbnQ6IGZ1bmN0aW9uIChpKSB7IHRoaXMuc291cmNlLnB1c2godGhpcy5hcHBlbmRUb0J1ZmZlcih0aGlzLnF1b3RlZFN0cmluZyhpKSkpOyB9LCBhcHBlbmQ6IGZ1bmN0aW9uICgpIHsgdmFyIGkgPSB0aGlzLnBvcFN0YWNrKCk7IHRoaXMuc291cmNlLnB1c2goImlmKCIgKyBpICsgIiB8fCAiICsgaSArICIgPT09IDApIHsgIiArIHRoaXMuYXBwZW5kVG9CdWZmZXIoaSkgKyAiIH0iKTsgaWYgKHRoaXMuZW52aXJvbm1lbnQuaXNTaW1wbGUpIHsgdGhpcy5zb3VyY2UucHVzaCgiZWxzZSB7ICIgKyB0aGlzLmFwcGVuZFRvQnVmZmVyKCInJyIpICsgIiB9Iik7IH0gfSwgYXBwZW5kRXNjYXBlZDogZnVuY3Rpb24gKCkgeyB2YXIgaiA9IHRoaXMubmV4dE9wY29kZSgxKSwgaSA9ICIiOyB0aGlzLmNvbnRleHQuYWxpYXNlcy5lc2NhcGVFeHByZXNzaW9uID0gInRoaXMuZXNjYXBlRXhwcmVzc2lvbiI7IGlmIChqWzBdID09PSAiYXBwZW5kQ29udGVudCIpIHsgaSA9ICIgKyAiICsgdGhpcy5xdW90ZWRTdHJpbmcoalsxXVswXSk7IHRoaXMuZWF0KGopOyB9IHRoaXMuc291cmNlLnB1c2godGhpcy5hcHBlbmRUb0J1ZmZlcigiZXNjYXBlRXhwcmVzc2lvbigiICsgdGhpcy5wb3BTdGFjaygpICsgIikiICsgaSkpOyB9LCBnZXRDb250ZXh0OiBmdW5jdGlvbiAoaSkgeyBpZiAodGhpcy5sYXN0Q29udGV4dCAhPT0gaSkgeyB0aGlzLmxhc3RDb250ZXh0ID0gaTsgfSB9LCBsb29rdXBXaXRoSGVscGVyczogZnVuY3Rpb24gKGssIGwpIHsgaWYgKGspIHsgdmFyIGkgPSB0aGlzLm5leHRTdGFjaygpOyB0aGlzLnVzaW5nS25vd25IZWxwZXIgPSBmYWxzZTsgdmFyIGo7IGlmICghbCAmJiB0aGlzLm9wdGlvbnMua25vd25IZWxwZXJzW2tdKSB7IGogPSBpICsgIiA9ICIgKyB0aGlzLm5hbWVMb29rdXAoImhlbHBlcnMiLCBrLCAiaGVscGVyIik7IHRoaXMudXNpbmdLbm93bkhlbHBlciA9IHRydWU7IH0gZWxzZSB7IGlmIChsIHx8IHRoaXMub3B0aW9ucy5rbm93bkhlbHBlcnNPbmx5KSB7IGogPSBpICsgIiA9ICIgKyB0aGlzLm5hbWVMb29rdXAoImRlcHRoIiArIHRoaXMubGFzdENvbnRleHQsIGssICJjb250ZXh0Iik7IH0gZWxzZSB7IHRoaXMucmVnaXN0ZXIoImZvdW5kSGVscGVyIiwgdGhpcy5uYW1lTG9va3VwKCJoZWxwZXJzIiwgaywgImhlbHBlciIpKTsgaiA9IGkgKyAiID0gZm91bmRIZWxwZXIgfHwgIiArIHRoaXMubmFtZUxvb2t1cCgiZGVwdGgiICsgdGhpcy5sYXN0Q29udGV4dCwgaywgImNvbnRleHQiKTsgfSB9IGogKz0gIjsiOyB0aGlzLnNvdXJjZS5wdXNoKGopOyB9IGVsc2UgeyB0aGlzLnB1c2hTdGFjaygiZGVwdGgiICsgdGhpcy5sYXN0Q29udGV4dCk7IH0gfSwgbG9va3VwOiBmdW5jdGlvbiAoaikgeyB2YXIgaSA9IHRoaXMudG9wU3RhY2soKTsgdGhpcy5zb3VyY2UucHVzaChpICsgIiA9ICgiICsgaSArICIgPT09IG51bGwgfHwgIiArIGkgKyAiID09PSB1bmRlZmluZWQgfHwgIiArIGkgKyAiID09PSBmYWxzZSA/ICIgKyBpICsgIiA6ICIgKyB0aGlzLm5hbWVMb29rdXAoaSwgaiwgImNvbnRleHQiKSArICIpOyIpOyB9LCBwdXNoU3RyaW5nUGFyYW06IGZ1bmN0aW9uIChpKSB7IHRoaXMucHVzaFN0YWNrKCJkZXB0aCIgKyB0aGlzLmxhc3RDb250ZXh0KTsgdGhpcy5wdXNoU3RyaW5nKGkpOyB9LCBwdXNoU3RyaW5nOiBmdW5jdGlvbiAoaSkgeyB0aGlzLnB1c2hTdGFjayh0aGlzLnF1b3RlZFN0cmluZyhpKSk7IH0sIHB1c2g6IGZ1bmN0aW9uIChpKSB7IHRoaXMucHVzaFN0YWNrKGkpOyB9LCBpbnZva2VNdXN0YWNoZTogZnVuY3Rpb24gKGssIGosIGkpIHsgdGhpcy5wb3B1bGF0ZVBhcmFtcyhrLCB0aGlzLnF1b3RlZFN0cmluZyhqKSwgInt9IiwgbnVsbCwgaSwgZnVuY3Rpb24gKGwsIG4sIG0pIHsgaWYgKCF0aGlzLnVzaW5nS25vd25IZWxwZXIpIHsgdGhpcy5jb250ZXh0LmFsaWFzZXMuaGVscGVyTWlzc2luZyA9ICJoZWxwZXJzLmhlbHBlck1pc3NpbmciOyB0aGlzLmNvbnRleHQuYWxpYXNlcy51bmRlZiA9ICJ2b2lkIDAiOyB0aGlzLnNvdXJjZS5wdXNoKCJlbHNlIGlmKCIgKyBtICsgIj09PSB1bmRlZikgeyAiICsgbCArICIgPSBoZWxwZXJNaXNzaW5nLmNhbGwoIiArIG4gKyAiKTsgfSIpOyBpZiAobCAhPT0gbSkgeyB0aGlzLnNvdXJjZS5wdXNoKCJlbHNlIHsgIiArIGwgKyAiID0gIiArIG0gKyAiOyB9Iik7IH0gfSB9KTsgfSwgaW52b2tlUHJvZ3JhbTogZnVuY3Rpb24gKGssIGwsIGopIHsgdmFyIGkgPSB0aGlzLnByb2dyYW1FeHByZXNzaW9uKHRoaXMuaW52ZXJzZSk7IHZhciBtID0gdGhpcy5wcm9ncmFtRXhwcmVzc2lvbihrKTsgdGhpcy5wb3B1bGF0ZVBhcmFtcyhsLCBudWxsLCBtLCBpLCBqLCBmdW5jdGlvbiAobiwgcCwgbykgeyBpZiAoIXRoaXMudXNpbmdLbm93bkhlbHBlcikgeyB0aGlzLmNvbnRleHQuYWxpYXNlcy5ibG9ja0hlbHBlck1pc3NpbmcgPSAiaGVscGVycy5ibG9ja0hlbHBlck1pc3NpbmciOyB0aGlzLnNvdXJjZS5wdXNoKCJlbHNlIHsgIiArIG4gKyAiID0gYmxvY2tIZWxwZXJNaXNzaW5nLmNhbGwoIiArIHAgKyAiKTsgfSIpOyB9IH0pOyB9LCBwb3B1bGF0ZVBhcmFtczogZnVuY3Rpb24gKHAsIGssIHQsIHEsIHgsIHcpIHsgdmFyIGwgPSB4IHx8IHRoaXMub3B0aW9ucy5zdHJpbmdQYXJhbXMgfHwgcSB8fCB0aGlzLm9wdGlvbnMuZGF0YTsgdmFyIGogPSB0aGlzLnBvcFN0YWNrKCksIHY7IHZhciBuID0gW10sIG0sIG8sIHU7IGlmIChsKSB7IHRoaXMucmVnaXN0ZXIoInRtcDEiLCB0KTsgdSA9ICJ0bXAxIjsgfSBlbHNlIHsgdSA9ICJ7IGhhc2g6IHt9IH0iOyB9IGlmIChsKSB7IHZhciBzID0gKHggPyB0aGlzLnBvcFN0YWNrKCkgOiAie30iKTsgdGhpcy5zb3VyY2UucHVzaCgidG1wMS5oYXNoID0gIiArIHMgKyAiOyIpOyB9IGlmICh0aGlzLm9wdGlvbnMuc3RyaW5nUGFyYW1zKSB7IHRoaXMuc291cmNlLnB1c2goInRtcDEuY29udGV4dHMgPSBbXTsiKTsgfSBmb3IgKHZhciByID0gMDsgciA8IHA7IHIrKykgeyBtID0gdGhpcy5wb3BTdGFjaygpOyBuLnB1c2gobSk7IGlmICh0aGlzLm9wdGlvbnMuc3RyaW5nUGFyYW1zKSB7IHRoaXMuc291cmNlLnB1c2goInRtcDEuY29udGV4dHMucHVzaCgiICsgdGhpcy5wb3BTdGFjaygpICsgIik7Iik7IH0gfSBpZiAocSkgeyB0aGlzLnNvdXJjZS5wdXNoKCJ0bXAxLmZuID0gdG1wMTsiKTsgdGhpcy5zb3VyY2UucHVzaCgidG1wMS5pbnZlcnNlID0gIiArIHEgKyAiOyIpOyB9IGlmICh0aGlzLm9wdGlvbnMuZGF0YSkgeyB0aGlzLnNvdXJjZS5wdXNoKCJ0bXAxLmRhdGEgPSBkYXRhOyIpOyB9IG4ucHVzaCh1KTsgdGhpcy5wb3B1bGF0ZUNhbGwobiwgaiwgayB8fCBqLCB3LCB0ICE9PSAie30iKTsgfSwgcG9wdWxhdGVDYWxsOiBmdW5jdGlvbiAobiwgaiwgaywgcSwgbykgeyB2YXIgbSA9IFsiZGVwdGgwIl0uY29uY2F0KG4pLmpvaW4oIiwgIik7IHZhciBpID0gWyJkZXB0aDAiXS5jb25jYXQoaykuY29uY2F0KG4pLmpvaW4oIiwgIik7IHZhciBwID0gdGhpcy5uZXh0U3RhY2soKTsgaWYgKHRoaXMudXNpbmdLbm93bkhlbHBlcikgeyB0aGlzLnNvdXJjZS5wdXNoKHAgKyAiID0gIiArIGogKyAiLmNhbGwoIiArIG0gKyAiKTsiKTsgfSBlbHNlIHsgdGhpcy5jb250ZXh0LmFsaWFzZXMuZnVuY3Rpb25UeXBlID0gJyJmdW5jdGlvbiInOyB2YXIgbCA9IG8gPyAiZm91bmRIZWxwZXIgJiYgIiA6ICIiOyB0aGlzLnNvdXJjZS5wdXNoKCJpZigiICsgbCArICJ0eXBlb2YgIiArIGogKyAiID09PSBmdW5jdGlvblR5cGUpIHsgIiArIHAgKyAiID0gIiArIGogKyAiLmNhbGwoIiArIG0gKyAiKTsgfSIpOyB9IHEuY2FsbCh0aGlzLCBwLCBpLCBqKTsgdGhpcy51c2luZ0tub3duSGVscGVyID0gZmFsc2U7IH0sIGludm9rZVBhcnRpYWw6IGZ1bmN0aW9uIChpKSB7IHBhcmFtcyA9IFt0aGlzLm5hbWVMb29rdXAoInBhcnRpYWxzIiwgaSwgInBhcnRpYWwiKSwgIiciICsgaSArICInIiwgdGhpcy5wb3BTdGFjaygpLCAiaGVscGVycyIsICJwYXJ0aWFscyJdOyBpZiAodGhpcy5vcHRpb25zLmRhdGEpIHsgcGFyYW1zLnB1c2goImRhdGEiKTsgfSB0aGlzLnB1c2hTdGFjaygic2VsZi5pbnZva2VQYXJ0aWFsKCIgKyBwYXJhbXMuam9pbigiLCAiKSArICIpOyIpOyB9LCBhc3NpZ25Ub0hhc2g6IGZ1bmN0aW9uIChpKSB7IHZhciBqID0gdGhpcy5wb3BTdGFjaygpOyB2YXIgayA9IHRoaXMudG9wU3RhY2soKTsgdGhpcy5zb3VyY2UucHVzaChrICsgIlsnIiArIGkgKyAiJ10gPSAiICsgaiArICI7Iik7IH0sIGNvbXBpbGVyOiBlLCBjb21waWxlQ2hpbGRyZW46IGZ1bmN0aW9uIChqLCBuKSB7IHZhciBwID0gai5jaGlsZHJlbiwgciwgcTsgZm9yICh2YXIgbyA9IDAsIGsgPSBwLmxlbmd0aDsgbyA8IGs7IG8rKykgeyByID0gcFtvXTsgcSA9IG5ldyB0aGlzLmNvbXBpbGVyKCk7IHRoaXMuY29udGV4dC5wcm9ncmFtcy5wdXNoKCIiKTsgdmFyIG0gPSB0aGlzLmNvbnRleHQucHJvZ3JhbXMubGVuZ3RoOyByLmluZGV4ID0gbTsgci5uYW1lID0gInByb2dyYW0iICsgbTsgdGhpcy5jb250ZXh0LnByb2dyYW1zW21dID0gcS5jb21waWxlKHIsIG4sIHRoaXMuY29udGV4dCk7IH0gfSwgcHJvZ3JhbUV4cHJlc3Npb246IGZ1bmN0aW9uIChrKSB7IGlmIChrID09IG51bGwpIHsgcmV0dXJuICJzZWxmLm5vb3AiOyB9IHZhciBwID0gdGhpcy5lbnZpcm9ubWVudC5jaGlsZHJlbltrXSwgbyA9IHAuZGVwdGhzLmxpc3Q7IHZhciBuID0gW3AuaW5kZXgsIHAubmFtZSwgImRhdGEiXTsgZm9yICh2YXIgbSA9IDAsIGogPSBvLmxlbmd0aDsgbSA8IGo7IG0rKykgeyBkZXB0aCA9IG9bbV07IGlmIChkZXB0aCA9PT0gMSkgeyBuLnB1c2goImRlcHRoMCIpOyB9IGVsc2UgeyBuLnB1c2goImRlcHRoIiArIChkZXB0aCAtIDEpKTsgfSB9IGlmIChvLmxlbmd0aCA9PT0gMCkgeyByZXR1cm4gInNlbGYucHJvZ3JhbSgiICsgbi5qb2luKCIsICIpICsgIikiOyB9IGVsc2UgeyBuLnNoaWZ0KCk7IHJldHVybiAic2VsZi5wcm9ncmFtV2l0aERlcHRoKCIgKyBuLmpvaW4oIiwgIikgKyAiKSI7IH0gfSwgcmVnaXN0ZXI6IGZ1bmN0aW9uIChpLCBqKSB7IHRoaXMudXNlUmVnaXN0ZXIoaSk7IHRoaXMuc291cmNlLnB1c2goaSArICIgPSAiICsgaiArICI7Iik7IH0sIHVzZVJlZ2lzdGVyOiBmdW5jdGlvbiAoaSkgeyBpZiAoIXRoaXMuY29udGV4dC5yZWdpc3RlcnNbaV0pIHsgdGhpcy5jb250ZXh0LnJlZ2lzdGVyc1tpXSA9IHRydWU7IHRoaXMuY29udGV4dC5yZWdpc3RlcnMubGlzdC5wdXNoKGkpOyB9IH0sIHB1c2hTdGFjazogZnVuY3Rpb24gKGkpIHsgdGhpcy5zb3VyY2UucHVzaCh0aGlzLm5leHRTdGFjaygpICsgIiA9ICIgKyBpICsgIjsiKTsgcmV0dXJuICJzdGFjayIgKyB0aGlzLnN0YWNrU2xvdDsgfSwgbmV4dFN0YWNrOiBmdW5jdGlvbiAoKSB7IHRoaXMuc3RhY2tTbG90Kys7IGlmICh0aGlzLnN0YWNrU2xvdCA+IHRoaXMuc3RhY2tWYXJzLmxlbmd0aCkgeyB0aGlzLnN0YWNrVmFycy5wdXNoKCJzdGFjayIgKyB0aGlzLnN0YWNrU2xvdCk7IH0gcmV0dXJuICJzdGFjayIgKyB0aGlzLnN0YWNrU2xvdDsgfSwgcG9wU3RhY2s6IGZ1bmN0aW9uICgpIHsgcmV0dXJuICJzdGFjayIgKyB0aGlzLnN0YWNrU2xvdC0tOyB9LCB0b3BTdGFjazogZnVuY3Rpb24gKCkgeyByZXR1cm4gInN0YWNrIiArIHRoaXMuc3RhY2tTbG90OyB9LCBxdW90ZWRTdHJpbmc6IGZ1bmN0aW9uIChpKSB7IHJldHVybiAnIicgKyBpLnJlcGxhY2UoL1xcL2csICJcXFxcIikucmVwbGFjZSgvIi9nLCAnXFwiJykucmVwbGFjZSgvXG4vZywgIlxcbiIpLnJlcGxhY2UoL1xyL2csICJcXHIiKSArICciJzsgfSB9OyB2YXIgYSA9ICgiYnJlYWsgZWxzZSBuZXcgdmFyIGNhc2UgZmluYWxseSByZXR1cm4gdm9pZCBjYXRjaCBmb3Igc3dpdGNoIHdoaWxlIGNvbnRpbnVlIGZ1bmN0aW9uIHRoaXMgd2l0aCBkZWZhdWx0IGlmIHRocm93IGRlbGV0ZSBpbiB0cnkgZG8gaW5zdGFuY2VvZiB0eXBlb2YgYWJzdHJhY3QgZW51bSBpbnQgc2hvcnQgYm9vbGVhbiBleHBvcnQgaW50ZXJmYWNlIHN0YXRpYyBieXRlIGV4dGVuZHMgbG9uZyBzdXBlciBjaGFyIGZpbmFsIG5hdGl2ZSBzeW5jaHJvbml6ZWQgY2xhc3MgZmxvYXQgcGFja2FnZSB0aHJvd3MgY29uc3QgZ290byBwcml2YXRlIHRyYW5zaWVudCBkZWJ1Z2dlciBpbXBsZW1lbnRzIHByb3RlY3RlZCB2b2xhdGlsZSBkb3VibGUgaW1wb3J0IHB1YmxpYyBsZXQgeWllbGQiKS5zcGxpdCgiICIpOyB2YXIgZCA9IGUuUkVTRVJWRURfV09SRFMgPSB7fTsgZm9yICh2YXIgYyA9IDAsIGIgPSBhLmxlbmd0aDsgYyA8IGI7IGMrKykgeyBkW2FbY11dID0gdHJ1ZTsgfSBlLmlzVmFsaWRKYXZhU2NyaXB0VmFyaWFibGVOYW1lID0gZnVuY3Rpb24gKGkpIHsgaWYgKCFlLlJFU0VSVkVEX1dPUkRTW2ldICYmIC9eW2EtekEtWl8kXVswLTlhLXpBLVpfJF0rJC8udGVzdChpKSkgeyByZXR1cm4gdHJ1ZTsgfSByZXR1cm4gZmFsc2U7IH07IH0pKEhhbmRsZWJhcnMuQ29tcGlsZXIsIEhhbmRsZWJhcnMuSmF2YVNjcmlwdENvbXBpbGVyKTsgSGFuZGxlYmFycy5wcmVjb21waWxlID0gZnVuY3Rpb24gKGQsIGMpIHsgYyA9IGMgfHwge307IHZhciBiID0gSGFuZGxlYmFycy5wYXJzZShkKTsgdmFyIGEgPSBuZXcgSGFuZGxlYmFycy5Db21waWxlcigpLmNvbXBpbGUoYiwgYyk7IHJldHVybiBuZXcgSGFuZGxlYmFycy5KYXZhU2NyaXB0Q29tcGlsZXIoKS5jb21waWxlKGEsIGMpOyB9OyBIYW5kbGViYXJzLmNvbXBpbGUgPSBmdW5jdGlvbiAoYiwgYSkgeyBhID0gYSB8fCB7fTsgdmFyIGQ7IGZ1bmN0aW9uIGMoKSB7IHZhciBnID0gSGFuZGxlYmFycy5wYXJzZShiKTsgdmFyIGYgPSBuZXcgSGFuZGxlYmFycy5Db21waWxlcigpLmNvbXBpbGUoZywgYSk7IHZhciBlID0gbmV3IEhhbmRsZWJhcnMuSmF2YVNjcmlwdENvbXBpbGVyKCkuY29tcGlsZShmLCBhLCB1bmRlZmluZWQsIHRydWUpOyByZXR1cm4gSGFuZGxlYmFycy50ZW1wbGF0ZShlKTsgfSByZXR1cm4gZnVuY3Rpb24gKGYsIGUpIHsgaWYgKCFkKSB7IGQgPSBjKCk7IH0gcmV0dXJuIGQuY2FsbCh0aGlzLCBmLCBlKTsgfTsgfTsgSGFuZGxlYmFycy5WTSA9IHsgdGVtcGxhdGU6IGZ1bmN0aW9uIChhKSB7IHZhciBiID0geyBlc2NhcGVFeHByZXNzaW9uOiBIYW5kbGViYXJzLlV0aWxzLmVzY2FwZUV4cHJlc3Npb24sIGludm9rZVBhcnRpYWw6IEhhbmRsZWJhcnMuVk0uaW52b2tlUGFydGlhbCwgcHJvZ3JhbXM6IFtdLCBwcm9ncmFtOiBmdW5jdGlvbiAoZCwgZSwgZikgeyB2YXIgYyA9IHRoaXMucHJvZ3JhbXNbZF07IGlmIChmKSB7IHJldHVybiBIYW5kbGViYXJzLlZNLnByb2dyYW0oZSwgZik7IH0gZWxzZSB7IGlmIChjKSB7IHJldHVybiBjOyB9IGVsc2UgeyBjID0gdGhpcy5wcm9ncmFtc1tkXSA9IEhhbmRsZWJhcnMuVk0ucHJvZ3JhbShlKTsgcmV0dXJuIGM7IH0gfSB9LCBwcm9ncmFtV2l0aERlcHRoOiBIYW5kbGViYXJzLlZNLnByb2dyYW1XaXRoRGVwdGgsIG5vb3A6IEhhbmRsZWJhcnMuVk0ubm9vcCB9OyByZXR1cm4gZnVuY3Rpb24gKGQsIGMpIHsgYyA9IGMgfHwge307IHJldHVybiBhLmNhbGwoYiwgSGFuZGxlYmFycywgZCwgYy5oZWxwZXJzLCBjLnBhcnRpYWxzLCBjLmRhdGEpOyB9OyB9LCBwcm9ncmFtV2l0aERlcHRoOiBmdW5jdGlvbiAoYiwgZCwgYykgeyB2YXIgYSA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMik7IHJldHVybiBmdW5jdGlvbiAoZiwgZSkgeyBlID0gZSB8fCB7fTsgcmV0dXJuIGIuYXBwbHkodGhpcywgW2YsIGUuZGF0YSB8fCBkXS5jb25jYXQoYSkpOyB9OyB9LCBwcm9ncmFtOiBmdW5jdGlvbiAoYSwgYikgeyByZXR1cm4gZnVuY3Rpb24gKGQsIGMpIHsgYyA9IGMgfHwge307IHJldHVybiBhKGQsIGMuZGF0YSB8fCBiKTsgfTsgfSwgbm9vcDogZnVuY3Rpb24gKCkgeyByZXR1cm4gIiI7IH0sIGludm9rZVBhcnRpYWw6IGZ1bmN0aW9uIChhLCBiLCBkLCBlLCBjLCBmKSB7IG9wdGlvbnMgPSB7IGhlbHBlcnM6IGUsIHBhcnRpYWxzOiBjLCBkYXRhOiBmIH07IGlmIChhID09PSB1bmRlZmluZWQpIHsgdGhyb3cgbmV3IEhhbmRsZWJhcnMuRXhjZXB0aW9uKCJUaGUgcGFydGlhbCAiICsgYiArICIgY291bGQgbm90IGJlIGZvdW5kIik7IH0gZWxzZSB7IGlmIChhIGluc3RhbmNlb2YgRnVuY3Rpb24pIHsgcmV0dXJuIGEoZCwgb3B0aW9ucyk7IH0gZWxzZSB7IGlmICghSGFuZGxlYmFycy5jb21waWxlKSB7IHRocm93IG5ldyBIYW5kbGViYXJzLkV4Y2VwdGlvbigiVGhlIHBhcnRpYWwgIiArIGIgKyAiIGNvdWxkIG5vdCBiZSBjb21waWxlZCB3aGVuIHJ1bm5pbmcgaW4gcnVudGltZS1vbmx5IG1vZGUiKTsgfSBlbHNlIHsgY1tiXSA9IEhhbmRsZWJhcnMuY29tcGlsZShhKTsgcmV0dXJuIGNbYl0oZCwgb3B0aW9ucyk7IH0gfSB9IH0gfTsgSGFuZGxlYmFycy50ZW1wbGF0ZSA9IEhhbmRsZWJhcnMuVk0udGVtcGxhdGU7CmRpZmYgLS1naXQgYS9wYWdlcy90cmFuc2NyaXB0cy8yMDEzX0VjbGlwc2VDb25GcmFuY2UvZGVtb3MvY2RvL2Nkby9zY3JpcHRzL2pxdWVyeS0xLjcuMS5taW4uanMgYi9wYWdlcy90cmFuc2NyaXB0cy8yMDEzX0VjbGlwc2VDb25GcmFuY2UvZGVtb3MvY2RvL2Nkby9zY3JpcHRzL2pxdWVyeS0xLjcuMS5taW4uanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWUwMjMzNwotLS0gL2Rldi9udWxsCisrKyBiL3BhZ2VzL3RyYW5zY3JpcHRzLzIwMTNfRWNsaXBzZUNvbkZyYW5jZS9kZW1vcy9jZG8vY2RvL3NjcmlwdHMvanF1ZXJ5LTEuNy4xLm1pbi5qcwpAQCAtMCwwICsxLDQgQEAKKy8qISBqUXVlcnkgdjEuNy4xIGpxdWVyeS5jb20gfCBqcXVlcnkub3JnL2xpY2Vuc2UgKi8KKyhmdW5jdGlvbihhLGIpe2Z1bmN0aW9uIGN5KGEpe3JldHVybiBmLmlzV2luZG93KGEpP2E6YS5ub2RlVHlwZT09PTk/YS5kZWZhdWx0Vmlld3x8YS5wYXJlbnRXaW5kb3c6ITF9ZnVuY3Rpb24gY3YoYSl7aWYoIWNrW2FdKXt2YXIgYj1jLmJvZHksZD1mKCI8IithKyI+IikuYXBwZW5kVG8oYiksZT1kLmNzcygiZGlzcGxheSIpO2QucmVtb3ZlKCk7aWYoZT09PSJub25lInx8ZT09PSIiKXtjbHx8KGNsPWMuY3JlYXRlRWxlbWVudCgiaWZyYW1lIiksY2wuZnJhbWVCb3JkZXI9Y2wud2lkdGg9Y2wuaGVpZ2h0PTApLGIuYXBwZW5kQ2hpbGQoY2wpO2lmKCFjbXx8IWNsLmNyZWF0ZUVsZW1lbnQpY209KGNsLmNvbnRlbnRXaW5kb3d8fGNsLmNvbnRlbnREb2N1bWVudCkuZG9jdW1lbnQsY20ud3JpdGUoKGMuY29tcGF0TW9kZT09PSJDU1MxQ29tcGF0Ij8iPCFkb2N0eXBlIGh0bWw+IjoiIikrIjxodG1sPjxib2R5PiIpLGNtLmNsb3NlKCk7ZD1jbS5jcmVhdGVFbGVtZW50KGEpLGNtLmJvZHkuYXBwZW5kQ2hpbGQoZCksZT1mLmNzcyhkLCJkaXNwbGF5IiksYi5yZW1vdmVDaGlsZChjbCl9Y2tbYV09ZX1yZXR1cm4gY2tbYV19ZnVuY3Rpb24gY3UoYSxiKXt2YXIgYz17fTtmLmVhY2goY3EuY29uY2F0LmFwcGx5KFtdLGNxLnNsaWNlKDAsYikpLGZ1bmN0aW9uKCl7Y1t0aGlzXT1hfSk7cmV0dXJuIGN9ZnVuY3Rpb24gY3QoKXtjcj1ifWZ1bmN0aW9uIGNzKCl7c2V0VGltZW91dChjdCwwKTtyZXR1cm4gY3I9Zi5ub3coKX1mdW5jdGlvbiBjaigpe3RyeXtyZXR1cm4gbmV3IGEuQWN0aXZlWE9iamVjdCgiTWljcm9zb2Z0LlhNTEhUVFAiKX1jYXRjaChiKXt9fWZ1bmN0aW9uIGNpKCl7dHJ5e3JldHVybiBuZXcgYS5YTUxIdHRwUmVxdWVzdH1jYXRjaChiKXt9fWZ1bmN0aW9uIGNjKGEsYyl7YS5kYXRhRmlsdGVyJiYoYz1hLmRhdGFGaWx0ZXIoYyxhLmRhdGFUeXBlKSk7dmFyIGQ9YS5kYXRhVHlwZXMsZT17fSxnLGgsaT1kLmxlbmd0aCxqLGs9ZFswXSxsLG0sbixvLHA7Zm9yKGc9MTtnPGk7ZysrKXtpZihnPT09MSlmb3IoaCBpbiBhLmNvbnZlcnRlcnMpdHlwZW9mIGg9PSJzdHJpbmciJiYoZVtoLnRvTG93ZXJDYXNlKCldPWEuY29udmVydGVyc1toXSk7bD1rLGs9ZFtnXTtpZihrPT09IioiKWs9bDtlbHNlIGlmKGwhPT0iKiImJmwhPT1rKXttPWwrIiAiK2ssbj1lW21dfHxlWyIqICIra107aWYoIW4pe3A9Yjtmb3IobyBpbiBlKXtqPW8uc3BsaXQoIiAiKTtpZihqWzBdPT09bHx8alswXT09PSIqIil7cD1lW2pbMV0rIiAiK2tdO2lmKHApe289ZVtvXSxvPT09ITA/bj1wOnA9PT0hMCYmKG49byk7YnJlYWt9fX19IW4mJiFwJiZmLmVycm9yKCJObyBjb252ZXJzaW9uIGZyb20gIittLnJlcGxhY2UoIiAiLCIgdG8gIikpLG4hPT0hMCYmKGM9bj9uKGMpOnAobyhjKSkpfX1yZXR1cm4gY31mdW5jdGlvbiBjYihhLGMsZCl7dmFyIGU9YS5jb250ZW50cyxmPWEuZGF0YVR5cGVzLGc9YS5yZXNwb25zZUZpZWxkcyxoLGksaixrO2ZvcihpIGluIGcpaSBpbiBkJiYoY1tnW2ldXT1kW2ldKTt3aGlsZShmWzBdPT09IioiKWYuc2hpZnQoKSxoPT09YiYmKGg9YS5taW1lVHlwZXx8Yy5nZXRSZXNwb25zZUhlYWRlcigiY29udGVudC10eXBlIikpO2lmKGgpZm9yKGkgaW4gZSlpZihlW2ldJiZlW2ldLnRlc3QoaCkpe2YudW5zaGlmdChpKTticmVha31pZihmWzBdaW4gZClqPWZbMF07ZWxzZXtmb3IoaSBpbiBkKXtpZighZlswXXx8YS5jb252ZXJ0ZXJzW2krIiAiK2ZbMF1dKXtqPWk7YnJlYWt9a3x8KGs9aSl9aj1qfHxrfWlmKGope2ohPT1mWzBdJiZmLnVuc2hpZnQoaik7cmV0dXJuIGRbal19fWZ1bmN0aW9uIGNhKGEsYixjLGQpe2lmKGYuaXNBcnJheShiKSlmLmVhY2goYixmdW5jdGlvbihiLGUpe2N8fGJFLnRlc3QoYSk/ZChhLGUpOmNhKGErIlsiKyh0eXBlb2YgZT09Im9iamVjdCJ8fGYuaXNBcnJheShlKT9iOiIiKSsiXSIsZSxjLGQpfSk7ZWxzZSBpZighYyYmYiE9bnVsbCYmdHlwZW9mIGI9PSJvYmplY3QiKWZvcih2YXIgZSBpbiBiKWNhKGErIlsiK2UrIl0iLGJbZV0sYyxkKTtlbHNlIGQoYSxiKX1mdW5jdGlvbiBiXyhhLGMpe3ZhciBkLGUsZz1mLmFqYXhTZXR0aW5ncy5mbGF0T3B0aW9uc3x8e307Zm9yKGQgaW4gYyljW2RdIT09YiYmKChnW2RdP2E6ZXx8KGU9e30pKVtkXT1jW2RdKTtlJiZmLmV4dGVuZCghMCxhLGUpfWZ1bmN0aW9uIGIkKGEsYyxkLGUsZixnKXtmPWZ8fGMuZGF0YVR5cGVzWzBdLGc9Z3x8e30sZ1tmXT0hMDt2YXIgaD1hW2ZdLGk9MCxqPWg/aC5sZW5ndGg6MCxrPWE9PT1iVCxsO2Zvcig7aTxqJiYoa3x8IWwpO2krKylsPWhbaV0oYyxkLGUpLHR5cGVvZiBsPT0ic3RyaW5nIiYmKCFrfHxnW2xdP2w9YjooYy5kYXRhVHlwZXMudW5zaGlmdChsKSxsPWIkKGEsYyxkLGUsbCxnKSkpOyhrfHwhbCkmJiFnWyIqIl0mJihsPWIkKGEsYyxkLGUsIioiLGcpKTtyZXR1cm4gbH1mdW5jdGlvbiBiWihhKXtyZXR1cm4gZnVuY3Rpb24oYixjKXt0eXBlb2YgYiE9InN0cmluZyImJihjPWIsYj0iKiIpO2lmKGYuaXNGdW5jdGlvbihjKSl7dmFyIGQ9Yi50b0xvd2VyQ2FzZSgpLnNwbGl0KGJQKSxlPTAsZz1kLmxlbmd0aCxoLGksajtmb3IoO2U8ZztlKyspaD1kW2VdLGo9L15cKy8udGVzdChoKSxqJiYoaD1oLnN1YnN0cigxKXx8IioiKSxpPWFbaF09YVtoXXx8W10saVtqPyJ1bnNoaWZ0IjoicHVzaCJdKGMpfX19ZnVuY3Rpb24gYkMoYSxiLGMpe3ZhciBkPWI9PT0id2lkdGgiP2Eub2Zmc2V0V2lkdGg6YS5vZmZzZXRIZWlnaHQsZT1iPT09IndpZHRoIj9ieDpieSxnPTAsaD1lLmxlbmd0aDtpZihkPjApe2lmKGMhPT0iYm9yZGVyIilmb3IoO2c8aDtnKyspY3x8KGQtPXBhcnNlRmxvYXQoZi5jc3MoYSwicGFkZGluZyIrZVtnXSkpfHwwKSxjPT09Im1hcmdpbiI/ZCs9cGFyc2VGbG9hdChmLmNzcyhhLGMrZVtnXSkpfHwwOmQtPXBhcnNlRmxvYXQoZi5jc3MoYSwiYm9yZGVyIitlW2ddKyJXaWR0aCIpKXx8MDtyZXR1cm4gZCsicHgifWQ9YnooYSxiLGIpO2lmKGQ8MHx8ZD09bnVsbClkPWEuc3R5bGVbYl18fDA7ZD1wYXJzZUZsb2F0KGQpfHwwO2lmKGMpZm9yKDtnPGg7ZysrKWQrPXBhcnNlRmxvYXQoZi5jc3MoYSwicGFkZGluZyIrZVtnXSkpfHwwLGMhPT0icGFkZGluZyImJihkKz1wYXJzZUZsb2F0KGYuY3NzKGEsImJvcmRlciIrZVtnXSsiV2lkdGgiKSl8fDApLGM9PT0ibWFyZ2luIiYmKGQrPXBhcnNlRmxvYXQoZi5jc3MoYSxjK2VbZ10pKXx8MCk7cmV0dXJuIGQrInB4In1mdW5jdGlvbiBicChhLGIpe2Iuc3JjP2YuYWpheCh7dXJsOmIuc3JjLGFzeW5jOiExLGRhdGFUeXBlOiJzY3JpcHQifSk6Zi5nbG9iYWxFdmFsKChiLnRleHR8fGIudGV4dENvbnRlbnR8fGIuaW5uZXJIVE1MfHwiIikucmVwbGFjZShiZiwiLyokMCovIikpLGIucGFyZW50Tm9kZSYmYi5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGIpfWZ1bmN0aW9uIGJvKGEpe3ZhciBiPWMuY3JlYXRlRWxlbWVudCgiZGl2Iik7YmguYXBwZW5kQ2hpbGQoYiksYi5pbm5lckhUTUw9YS5vdXRlckhUTUw7cmV0dXJuIGIuZmlyc3RDaGlsZH1mdW5jdGlvbiBibihhKXt2YXIgYj0oYS5ub2RlTmFtZXx8IiIpLnRvTG93ZXJDYXNlKCk7Yj09PSJpbnB1dCI/Ym0oYSk6YiE9PSJzY3JpcHQiJiZ0eXBlb2YgYS5nZXRFbGVtZW50c0J5VGFnTmFtZSE9InVuZGVmaW5lZCImJmYuZ3JlcChhLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJpbnB1dCIpLGJtKX1mdW5jdGlvbiBibShhKXtpZihhLnR5cGU9PT0iY2hlY2tib3gifHxhLnR5cGU9PT0icmFkaW8iKWEuZGVmYXVsdENoZWNrZWQ9YS5jaGVja2VkfWZ1bmN0aW9uIGJsKGEpe3JldHVybiB0eXBlb2YgYS5nZXRFbGVtZW50c0J5VGFnTmFtZSE9InVuZGVmaW5lZCI/YS5nZXRFbGVtZW50c0J5VGFnTmFtZSgiKiIpOnR5cGVvZiBhLnF1ZXJ5U2VsZWN0b3JBbGwhPSJ1bmRlZmluZWQiP2EucXVlcnlTZWxlY3RvckFsbCgiKiIpOltdfWZ1bmN0aW9uIGJrKGEsYil7dmFyIGM7aWYoYi5ub2RlVHlwZT09PTEpe2IuY2xlYXJBdHRyaWJ1dGVzJiZiLmNsZWFyQXR0cmlidXRlcygpLGIubWVyZ2VBdHRyaWJ1dGVzJiZiLm1lcmdlQXR0cmlidXRlcyhhKSxjPWIubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtpZihjPT09Im9iamVjdCIpYi5vdXRlckhUTUw9YS5vdXRlckhUTUw7ZWxzZSBpZihjIT09ImlucHV0Inx8YS50eXBlIT09ImNoZWNrYm94IiYmYS50eXBlIT09InJhZGlvIil7aWYoYz09PSJvcHRpb24iKWIuc2VsZWN0ZWQ9YS5kZWZhdWx0U2VsZWN0ZWQ7ZWxzZSBpZihjPT09ImlucHV0Inx8Yz09PSJ0ZXh0YXJlYSIpYi5kZWZhdWx0VmFsdWU9YS5kZWZhdWx0VmFsdWV9ZWxzZSBhLmNoZWNrZWQmJihiLmRlZmF1bHRDaGVja2VkPWIuY2hlY2tlZD1hLmNoZWNrZWQpLGIudmFsdWUhPT1hLnZhbHVlJiYoYi52YWx1ZT1hLnZhbHVlKTtiLnJlbW92ZUF0dHJpYnV0ZShmLmV4cGFuZG8pfX1mdW5jdGlvbiBiaihhLGIpe2lmKGIubm9kZVR5cGU9PT0xJiYhIWYuaGFzRGF0YShhKSl7dmFyIGMsZCxlLGc9Zi5fZGF0YShhKSxoPWYuX2RhdGEoYixnKSxpPWcuZXZlbnRzO2lmKGkpe2RlbGV0ZSBoLmhhbmRsZSxoLmV2ZW50cz17fTtmb3IoYyBpbiBpKWZvcihkPTAsZT1pW2NdLmxlbmd0aDtkPGU7ZCsrKWYuZXZlbnQuYWRkKGIsYysoaVtjXVtkXS5uYW1lc3BhY2U/Ii4iOiIiKStpW2NdW2RdLm5hbWVzcGFjZSxpW2NdW2RdLGlbY11bZF0uZGF0YSl9aC5kYXRhJiYoaC5kYXRhPWYuZXh0ZW5kKHt9LGguZGF0YSkpfX1mdW5jdGlvbiBiaShhLGIpe3JldHVybiBmLm5vZGVOYW1lKGEsInRhYmxlIik/YS5nZXRFbGVtZW50c0J5VGFnTmFtZSgidGJvZHkiKVswXXx8YS5hcHBlbmRDaGlsZChhLm93bmVyRG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGJvZHkiKSk6YX1mdW5jdGlvbiBVKGEpe3ZhciBiPVYuc3BsaXQoInwiKSxjPWEuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpO2lmKGMuY3JlYXRlRWxlbWVudCl3aGlsZShiLmxlbmd0aCljLmNyZWF0ZUVsZW1lbnQoYi5wb3AoKSk7cmV0dXJuIGN9ZnVuY3Rpb24gVChhLGIsYyl7Yj1ifHwwO2lmKGYuaXNGdW5jdGlvbihiKSlyZXR1cm4gZi5ncmVwKGEsZnVuY3Rpb24oYSxkKXt2YXIgZT0hIWIuY2FsbChhLGQsYSk7cmV0dXJuIGU9PT1jfSk7aWYoYi5ub2RlVHlwZSlyZXR1cm4gZi5ncmVwKGEsZnVuY3Rpb24oYSxkKXtyZXR1cm4gYT09PWI9PT1jfSk7aWYodHlwZW9mIGI9PSJzdHJpbmciKXt2YXIgZD1mLmdyZXAoYSxmdW5jdGlvbihhKXtyZXR1cm4gYS5ub2RlVHlwZT09PTF9KTtpZihPLnRlc3QoYikpcmV0dXJuIGYuZmlsdGVyKGIsZCwhYyk7Yj1mLmZpbHRlcihiLGQpfXJldHVybiBmLmdyZXAoYSxmdW5jdGlvbihhLGQpe3JldHVybiBmLmluQXJyYXkoYSxiKT49MD09PWN9KX1mdW5jdGlvbiBTKGEpe3JldHVybiFhfHwhYS5wYXJlbnROb2RlfHxhLnBhcmVudE5vZGUubm9kZVR5cGU9PT0xMX1mdW5jdGlvbiBLKCl7cmV0dXJuITB9ZnVuY3Rpb24gSigpe3JldHVybiExfWZ1bmN0aW9uIG4oYSxiLGMpe3ZhciBkPWIrImRlZmVyIixlPWIrInF1ZXVlIixnPWIrIm1hcmsiLGg9Zi5fZGF0YShhLGQpO2gmJihjPT09InF1ZXVlInx8IWYuX2RhdGEoYSxlKSkmJihjPT09Im1hcmsifHwhZi5fZGF0YShhLGcpKSYmc2V0VGltZW91dChmdW5jdGlvbigpeyFmLl9kYXRhKGEsZSkmJiFmLl9kYXRhKGEsZykmJihmLnJlbW92ZURhdGEoYSxkLCEwKSxoLmZpcmUoKSl9LDApfWZ1bmN0aW9uIG0oYSl7Zm9yKHZhciBiIGluIGEpe2lmKGI9PT0iZGF0YSImJmYuaXNFbXB0eU9iamVjdChhW2JdKSljb250aW51ZTtpZihiIT09InRvSlNPTiIpcmV0dXJuITF9cmV0dXJuITB9ZnVuY3Rpb24gbChhLGMsZCl7aWYoZD09PWImJmEubm9kZVR5cGU9PT0xKXt2YXIgZT0iZGF0YS0iK2MucmVwbGFjZShrLCItJDEiKS50b0xvd2VyQ2FzZSgpO2Q9YS5nZXRBdHRyaWJ1dGUoZSk7aWYodHlwZW9mIGQ9PSJzdHJpbmciKXt0cnl7ZD1kPT09InRydWUiPyEwOmQ9PT0iZmFsc2UiPyExOmQ9PT0ibnVsbCI/bnVsbDpmLmlzTnVtZXJpYyhkKT9wYXJzZUZsb2F0KGQpOmoudGVzdChkKT9mLnBhcnNlSlNPTihkKTpkfWNhdGNoKGcpe31mLmRhdGEoYSxjLGQpfWVsc2UgZD1ifXJldHVybiBkfWZ1bmN0aW9uIGgoYSl7dmFyIGI9Z1thXT17fSxjLGQ7YT1hLnNwbGl0KC9ccysvKTtmb3IoYz0wLGQ9YS5sZW5ndGg7YzxkO2MrKyliW2FbY11dPSEwO3JldHVybiBifXZhciBjPWEuZG9jdW1lbnQsZD1hLm5hdmlnYXRvcixlPWEubG9jYXRpb24sZj1mdW5jdGlvbigpe2Z1bmN0aW9uIEooKXtpZighZS5pc1JlYWR5KXt0cnl7Yy5kb2N1bWVudEVsZW1lbnQuZG9TY3JvbGwoImxlZnQiKX1jYXRjaChhKXtzZXRUaW1lb3V0KEosMSk7cmV0dXJufWUucmVhZHkoKX19dmFyIGU9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gbmV3IGUuZm4uaW5pdChhLGIsaCl9LGY9YS5qUXVlcnksZz1hLiQsaCxpPS9eKD86W14jPF0qKDxbXHdcV10rPilbXj5dKiR8IyhbXHdcLV0qKSQpLyxqPS9cUy8saz0vXlxzKy8sbD0vXHMrJC8sbT0vXjwoXHcrKVxzKlwvPz4oPzo8XC9cMT4pPyQvLG49L15bXF0sOnt9XHNdKiQvLG89L1xcKD86WyJcXFwvYmZucnRdfHVbMC05YS1mQS1GXXs0fSkvZyxwPS8iW14iXFxcblxyXSoifHRydWV8ZmFsc2V8bnVsbHwtP1xkKyg/OlwuXGQqKT8oPzpbZUVdWytcLV0/XGQrKT8vZyxxPS8oPzpefDp8LCkoPzpccypcWykrL2cscj0vKHdlYmtpdClbIFwvXShbXHcuXSspLyxzPS8ob3BlcmEpKD86Lip2ZXJzaW9uKT9bIFwvXShbXHcuXSspLyx0PS8obXNpZSkgKFtcdy5dKykvLHU9Lyhtb3ppbGxhKSg/Oi4qPyBydjooW1x3Ll0rKSk/Lyx2PS8tKFthLXpdfFswLTldKS9pZyx3PS9eLW1zLS8seD1mdW5jdGlvbihhLGIpe3JldHVybihiKyIiKS50b1VwcGVyQ2FzZSgpfSx5PWQudXNlckFnZW50LHosQSxCLEM9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZyxEPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHksRT1BcnJheS5wcm90b3R5cGUucHVzaCxGPUFycmF5LnByb3RvdHlwZS5zbGljZSxHPVN0cmluZy5wcm90b3R5cGUudHJpbSxIPUFycmF5LnByb3RvdHlwZS5pbmRleE9mLEk9e307ZS5mbj1lLnByb3RvdHlwZT17Y29uc3RydWN0b3I6ZSxpbml0OmZ1bmN0aW9uKGEsZCxmKXt2YXIgZyxoLGosaztpZighYSlyZXR1cm4gdGhpcztpZihhLm5vZGVUeXBlKXt0aGlzLmNvbnRleHQ9dGhpc1swXT1hLHRoaXMubGVuZ3RoPTE7cmV0dXJuIHRoaXN9aWYoYT09PSJib2R5IiYmIWQmJmMuYm9keSl7dGhpcy5jb250ZXh0PWMsdGhpc1swXT1jLmJvZHksdGhpcy5zZWxlY3Rvcj1hLHRoaXMubGVuZ3RoPTE7cmV0dXJuIHRoaXN9aWYodHlwZW9mIGE9PSJzdHJpbmciKXthLmNoYXJBdCgwKSE9PSI8Inx8YS5jaGFyQXQoYS5sZW5ndGgtMSkhPT0iPiJ8fGEubGVuZ3RoPDM/Zz1pLmV4ZWMoYSk6Zz1bbnVsbCxhLG51bGxdO2lmKGcmJihnWzFdfHwhZCkpe2lmKGdbMV0pe2Q9ZCBpbnN0YW5jZW9mIGU/ZFswXTpkLGs9ZD9kLm93bmVyRG9jdW1lbnR8fGQ6YyxqPW0uZXhlYyhhKSxqP2UuaXNQbGFpbk9iamVjdChkKT8oYT1bYy5jcmVhdGVFbGVtZW50KGpbMV0pXSxlLmZuLmF0dHIuY2FsbChhLGQsITApKTphPVtrLmNyZWF0ZUVsZW1lbnQoalsxXSldOihqPWUuYnVpbGRGcmFnbWVudChbZ1sxXV0sW2tdKSxhPShqLmNhY2hlYWJsZT9lLmNsb25lKGouZnJhZ21lbnQpOmouZnJhZ21lbnQpLmNoaWxkTm9kZXMpO3JldHVybiBlLm1lcmdlKHRoaXMsYSl9aD1jLmdldEVsZW1lbnRCeUlkKGdbMl0pO2lmKGgmJmgucGFyZW50Tm9kZSl7aWYoaC5pZCE9PWdbMl0pcmV0dXJuIGYuZmluZChhKTt0aGlzLmxlbmd0aD0xLHRoaXNbMF09aH10aGlzLmNvbnRleHQ9Yyx0aGlzLnNlbGVjdG9yPWE7cmV0dXJuIHRoaXN9cmV0dXJuIWR8fGQuanF1ZXJ5PyhkfHxmKS5maW5kKGEpOnRoaXMuY29uc3RydWN0b3IoZCkuZmluZChhKX1pZihlLmlzRnVuY3Rpb24oYSkpcmV0dXJuIGYucmVhZHkoYSk7YS5zZWxlY3RvciE9PWImJih0aGlzLnNlbGVjdG9yPWEuc2VsZWN0b3IsdGhpcy5jb250ZXh0PWEuY29udGV4dCk7cmV0dXJuIGUubWFrZUFycmF5KGEsdGhpcyl9LHNlbGVjdG9yOiIiLGpxdWVyeToiMS43LjEiLGxlbmd0aDowLHNpemU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5sZW5ndGh9LHRvQXJyYXk6ZnVuY3Rpb24oKXtyZXR1cm4gRi5jYWxsKHRoaXMsMCl9LGdldDpmdW5jdGlvbihhKXtyZXR1cm4gYT09bnVsbD90aGlzLnRvQXJyYXkoKTphPDA/dGhpc1t0aGlzLmxlbmd0aCthXTp0aGlzW2FdfSxwdXNoU3RhY2s6ZnVuY3Rpb24oYSxiLGMpe3ZhciBkPXRoaXMuY29uc3RydWN0b3IoKTtlLmlzQXJyYXkoYSk/RS5hcHBseShkLGEpOmUubWVyZ2UoZCxhKSxkLnByZXZPYmplY3Q9dGhpcyxkLmNvbnRleHQ9dGhpcy5jb250ZXh0LGI9PT0iZmluZCI/ZC5zZWxlY3Rvcj10aGlzLnNlbGVjdG9yKyh0aGlzLnNlbGVjdG9yPyIgIjoiIikrYzpiJiYoZC5zZWxlY3Rvcj10aGlzLnNlbGVjdG9yKyIuIitiKyIoIitjKyIpIik7cmV0dXJuIGR9LGVhY2g6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gZS5lYWNoKHRoaXMsYSxiKX0scmVhZHk6ZnVuY3Rpb24oYSl7ZS5iaW5kUmVhZHkoKSxBLmFkZChhKTtyZXR1cm4gdGhpc30sZXE6ZnVuY3Rpb24oYSl7YT0rYTtyZXR1cm4gYT09PS0xP3RoaXMuc2xpY2UoYSk6dGhpcy5zbGljZShhLGErMSl9LGZpcnN0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZXEoMCl9LGxhc3Q6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lcSgtMSl9LHNsaWNlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucHVzaFN0YWNrKEYuYXBwbHkodGhpcyxhcmd1bWVudHMpLCJzbGljZSIsRi5jYWxsKGFyZ3VtZW50cykuam9pbigiLCIpKX0sbWFwOmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLnB1c2hTdGFjayhlLm1hcCh0aGlzLGZ1bmN0aW9uKGIsYyl7cmV0dXJuIGEuY2FsbChiLGMsYil9KSl9LGVuZDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnByZXZPYmplY3R8fHRoaXMuY29uc3RydWN0b3IobnVsbCl9LHB1c2g6RSxzb3J0OltdLnNvcnQsc3BsaWNlOltdLnNwbGljZX0sZS5mbi5pbml0LnByb3RvdHlwZT1lLmZuLGUuZXh0ZW5kPWUuZm4uZXh0ZW5kPWZ1bmN0aW9uKCl7dmFyIGEsYyxkLGYsZyxoLGk9YXJndW1lbnRzWzBdfHx7fSxqPTEsaz1hcmd1bWVudHMubGVuZ3RoLGw9ITE7dHlwZW9mIGk9PSJib29sZWFuIiYmKGw9aSxpPWFyZ3VtZW50c1sxXXx8e30saj0yKSx0eXBlb2YgaSE9Im9iamVjdCImJiFlLmlzRnVuY3Rpb24oaSkmJihpPXt9KSxrPT09aiYmKGk9dGhpcywtLWopO2Zvcig7ajxrO2orKylpZigoYT1hcmd1bWVudHNbal0pIT1udWxsKWZvcihjIGluIGEpe2Q9aVtjXSxmPWFbY107aWYoaT09PWYpY29udGludWU7bCYmZiYmKGUuaXNQbGFpbk9iamVjdChmKXx8KGc9ZS5pc0FycmF5KGYpKSk/KGc/KGc9ITEsaD1kJiZlLmlzQXJyYXkoZCk/ZDpbXSk6aD1kJiZlLmlzUGxhaW5PYmplY3QoZCk/ZDp7fSxpW2NdPWUuZXh0ZW5kKGwsaCxmKSk6ZiE9PWImJihpW2NdPWYpfXJldHVybiBpfSxlLmV4dGVuZCh7bm9Db25mbGljdDpmdW5jdGlvbihiKXthLiQ9PT1lJiYoYS4kPWcpLGImJmEualF1ZXJ5PT09ZSYmKGEualF1ZXJ5PWYpO3JldHVybiBlfSxpc1JlYWR5OiExLHJlYWR5V2FpdDoxLGhvbGRSZWFkeTpmdW5jdGlvbihhKXthP2UucmVhZHlXYWl0Kys6ZS5yZWFkeSghMCl9LHJlYWR5OmZ1bmN0aW9uKGEpe2lmKGE9PT0hMCYmIS0tZS5yZWFkeVdhaXR8fGEhPT0hMCYmIWUuaXNSZWFkeSl7aWYoIWMuYm9keSlyZXR1cm4gc2V0VGltZW91dChlLnJlYWR5LDEpO2UuaXNSZWFkeT0hMDtpZihhIT09ITAmJi0tZS5yZWFkeVdhaXQ+MClyZXR1cm47QS5maXJlV2l0aChjLFtlXSksZS5mbi50cmlnZ2VyJiZlKGMpLnRyaWdnZXIoInJlYWR5Iikub2ZmKCJyZWFkeSIpfX0sYmluZFJlYWR5OmZ1bmN0aW9uKCl7aWYoIUEpe0E9ZS5DYWxsYmFja3MoIm9uY2UgbWVtb3J5Iik7aWYoYy5yZWFkeVN0YXRlPT09ImNvbXBsZXRlIilyZXR1cm4gc2V0VGltZW91dChlLnJlYWR5LDEpO2lmKGMuYWRkRXZlbnRMaXN0ZW5lciljLmFkZEV2ZW50TGlzdGVuZXIoIkRPTUNvbnRlbnRMb2FkZWQiLEIsITEpLGEuYWRkRXZlbnRMaXN0ZW5lcigibG9hZCIsZS5yZWFkeSwhMSk7ZWxzZSBpZihjLmF0dGFjaEV2ZW50KXtjLmF0dGFjaEV2ZW50KCJvbnJlYWR5c3RhdGVjaGFuZ2UiLEIpLGEuYXR0YWNoRXZlbnQoIm9ubG9hZCIsZS5yZWFkeSk7dmFyIGI9ITE7dHJ5e2I9YS5mcmFtZUVsZW1lbnQ9PW51bGx9Y2F0Y2goZCl7fWMuZG9jdW1lbnRFbGVtZW50LmRvU2Nyb2xsJiZiJiZKKCl9fX0saXNGdW5jdGlvbjpmdW5jdGlvbihhKXtyZXR1cm4gZS50eXBlKGEpPT09ImZ1bmN0aW9uIn0saXNBcnJheTpBcnJheS5pc0FycmF5fHxmdW5jdGlvbihhKXtyZXR1cm4gZS50eXBlKGEpPT09ImFycmF5In0saXNXaW5kb3c6ZnVuY3Rpb24oYSl7cmV0dXJuIGEmJnR5cGVvZiBhPT0ib2JqZWN0IiYmInNldEludGVydmFsImluIGF9LGlzTnVtZXJpYzpmdW5jdGlvbihhKXtyZXR1cm4haXNOYU4ocGFyc2VGbG9hdChhKSkmJmlzRmluaXRlKGEpfSx0eXBlOmZ1bmN0aW9uKGEpe3JldHVybiBhPT1udWxsP1N0cmluZyhhKTpJW0MuY2FsbChhKV18fCJvYmplY3QifSxpc1BsYWluT2JqZWN0OmZ1bmN0aW9uKGEpe2lmKCFhfHxlLnR5cGUoYSkhPT0ib2JqZWN0Inx8YS5ub2RlVHlwZXx8ZS5pc1dpbmRvdyhhKSlyZXR1cm4hMTt0cnl7aWYoYS5jb25zdHJ1Y3RvciYmIUQuY2FsbChhLCJjb25zdHJ1Y3RvciIpJiYhRC5jYWxsKGEuY29uc3RydWN0b3IucHJvdG90eXBlLCJpc1Byb3RvdHlwZU9mIikpcmV0dXJuITF9Y2F0Y2goYyl7cmV0dXJuITF9dmFyIGQ7Zm9yKGQgaW4gYSk7cmV0dXJuIGQ9PT1ifHxELmNhbGwoYSxkKX0saXNFbXB0eU9iamVjdDpmdW5jdGlvbihhKXtmb3IodmFyIGIgaW4gYSlyZXR1cm4hMTtyZXR1cm4hMH0sZXJyb3I6ZnVuY3Rpb24oYSl7dGhyb3cgbmV3IEVycm9yKGEpfSxwYXJzZUpTT046ZnVuY3Rpb24oYil7aWYodHlwZW9mIGIhPSJzdHJpbmcifHwhYilyZXR1cm4gbnVsbDtiPWUudHJpbShiKTtpZihhLkpTT04mJmEuSlNPTi5wYXJzZSlyZXR1cm4gYS5KU09OLnBhcnNlKGIpO2lmKG4udGVzdChiLnJlcGxhY2UobywiQCIpLnJlcGxhY2UocCwiXSIpLnJlcGxhY2UocSwiIikpKXJldHVybihuZXcgRnVuY3Rpb24oInJldHVybiAiK2IpKSgpO2UuZXJyb3IoIkludmFsaWQgSlNPTjogIitiKX0scGFyc2VYTUw6ZnVuY3Rpb24oYyl7dmFyIGQsZjt0cnl7YS5ET01QYXJzZXI/KGY9bmV3IERPTVBhcnNlcixkPWYucGFyc2VGcm9tU3RyaW5nKGMsInRleHQveG1sIikpOihkPW5ldyBBY3RpdmVYT2JqZWN0KCJNaWNyb3NvZnQuWE1MRE9NIiksZC5hc3luYz0iZmFsc2UiLGQubG9hZFhNTChjKSl9Y2F0Y2goZyl7ZD1ifSghZHx8IWQuZG9jdW1lbnRFbGVtZW50fHxkLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJwYXJzZXJlcnJvciIpLmxlbmd0aCkmJmUuZXJyb3IoIkludmFsaWQgWE1MOiAiK2MpO3JldHVybiBkfSxub29wOmZ1bmN0aW9uKCl7fSxnbG9iYWxFdmFsOmZ1bmN0aW9uKGIpe2ImJmoudGVzdChiKSYmKGEuZXhlY1NjcmlwdHx8ZnVuY3Rpb24oYil7YS5ldmFsLmNhbGwoYSxiKX0pKGIpfSxjYW1lbENhc2U6ZnVuY3Rpb24oYSl7cmV0dXJuIGEucmVwbGFjZSh3LCJtcy0iKS5yZXBsYWNlKHYseCl9LG5vZGVOYW1lOmZ1bmN0aW9uKGEsYil7cmV0dXJuIGEubm9kZU5hbWUmJmEubm9kZU5hbWUudG9VcHBlckNhc2UoKT09PWIudG9VcHBlckNhc2UoKX0sZWFjaDpmdW5jdGlvbihhLGMsZCl7dmFyIGYsZz0wLGg9YS5sZW5ndGgsaT1oPT09Ynx8ZS5pc0Z1bmN0aW9uKGEpO2lmKGQpe2lmKGkpe2ZvcihmIGluIGEpaWYoYy5hcHBseShhW2ZdLGQpPT09ITEpYnJlYWt9ZWxzZSBmb3IoO2c8aDspaWYoYy5hcHBseShhW2crK10sZCk9PT0hMSlicmVha31lbHNlIGlmKGkpe2ZvcihmIGluIGEpaWYoYy5jYWxsKGFbZl0sZixhW2ZdKT09PSExKWJyZWFrfWVsc2UgZm9yKDtnPGg7KWlmKGMuY2FsbChhW2ddLGcsYVtnKytdKT09PSExKWJyZWFrO3JldHVybiBhfSx0cmltOkc/ZnVuY3Rpb24oYSl7cmV0dXJuIGE9PW51bGw/IiI6Ry5jYWxsKGEpfTpmdW5jdGlvbihhKXtyZXR1cm4gYT09bnVsbD8iIjooYSsiIikucmVwbGFjZShrLCIiKS5yZXBsYWNlKGwsIiIpfSxtYWtlQXJyYXk6ZnVuY3Rpb24oYSxiKXt2YXIgYz1ifHxbXTtpZihhIT1udWxsKXt2YXIgZD1lLnR5cGUoYSk7YS5sZW5ndGg9PW51bGx8fGQ9PT0ic3RyaW5nInx8ZD09PSJmdW5jdGlvbiJ8fGQ9PT0icmVnZXhwInx8ZS5pc1dpbmRvdyhhKT9FLmNhbGwoYyxhKTplLm1lcmdlKGMsYSl9cmV0dXJuIGN9LGluQXJyYXk6ZnVuY3Rpb24oYSxiLGMpe3ZhciBkO2lmKGIpe2lmKEgpcmV0dXJuIEguY2FsbChiLGEsYyk7ZD1iLmxlbmd0aCxjPWM/YzwwP01hdGgubWF4KDAsZCtjKTpjOjA7Zm9yKDtjPGQ7YysrKWlmKGMgaW4gYiYmYltjXT09PWEpcmV0dXJuIGN9cmV0dXJuLTF9LG1lcmdlOmZ1bmN0aW9uKGEsYyl7dmFyIGQ9YS5sZW5ndGgsZT0wO2lmKHR5cGVvZiBjLmxlbmd0aD09Im51bWJlciIpZm9yKHZhciBmPWMubGVuZ3RoO2U8ZjtlKyspYVtkKytdPWNbZV07ZWxzZSB3aGlsZShjW2VdIT09YilhW2QrK109Y1tlKytdO2EubGVuZ3RoPWQ7cmV0dXJuIGF9LGdyZXA6ZnVuY3Rpb24oYSxiLGMpe3ZhciBkPVtdLGU7Yz0hIWM7Zm9yKHZhciBmPTAsZz1hLmxlbmd0aDtmPGc7ZisrKWU9ISFiKGFbZl0sZiksYyE9PWUmJmQucHVzaChhW2ZdKTtyZXR1cm4gZH0sbWFwOmZ1bmN0aW9uKGEsYyxkKXt2YXIgZixnLGg9W10saT0wLGo9YS5sZW5ndGgsaz1hIGluc3RhbmNlb2YgZXx8aiE9PWImJnR5cGVvZiBqPT0ibnVtYmVyIiYmKGo+MCYmYVswXSYmYVtqLTFdfHxqPT09MHx8ZS5pc0FycmF5KGEpKTtpZihrKWZvcig7aTxqO2krKylmPWMoYVtpXSxpLGQpLGYhPW51bGwmJihoW2gubGVuZ3RoXT1mKTtlbHNlIGZvcihnIGluIGEpZj1jKGFbZ10sZyxkKSxmIT1udWxsJiYoaFtoLmxlbmd0aF09Zik7cmV0dXJuIGguY29uY2F0LmFwcGx5KFtdLGgpfSxndWlkOjEscHJveHk6ZnVuY3Rpb24oYSxjKXtpZih0eXBlb2YgYz09InN0cmluZyIpe3ZhciBkPWFbY107Yz1hLGE9ZH1pZighZS5pc0Z1bmN0aW9uKGEpKXJldHVybiBiO3ZhciBmPUYuY2FsbChhcmd1bWVudHMsMiksZz1mdW5jdGlvbigpe3JldHVybiBhLmFwcGx5KGMsZi5jb25jYXQoRi5jYWxsKGFyZ3VtZW50cykpKX07Zy5ndWlkPWEuZ3VpZD1hLmd1aWR8fGcuZ3VpZHx8ZS5ndWlkKys7cmV0dXJuIGd9LGFjY2VzczpmdW5jdGlvbihhLGMsZCxmLGcsaCl7dmFyIGk9YS5sZW5ndGg7aWYodHlwZW9mIGM9PSJvYmplY3QiKXtmb3IodmFyIGogaW4gYyllLmFjY2VzcyhhLGosY1tqXSxmLGcsZCk7cmV0dXJuIGF9aWYoZCE9PWIpe2Y9IWgmJmYmJmUuaXNGdW5jdGlvbihkKTtmb3IodmFyIGs9MDtrPGk7aysrKWcoYVtrXSxjLGY/ZC5jYWxsKGFba10sayxnKGFba10sYykpOmQsaCk7cmV0dXJuIGF9cmV0dXJuIGk/ZyhhWzBdLGMpOmJ9LG5vdzpmdW5jdGlvbigpe3JldHVybihuZXcgRGF0ZSkuZ2V0VGltZSgpfSx1YU1hdGNoOmZ1bmN0aW9uKGEpe2E9YS50b0xvd2VyQ2FzZSgpO3ZhciBiPXIuZXhlYyhhKXx8cy5leGVjKGEpfHx0LmV4ZWMoYSl8fGEuaW5kZXhPZigiY29tcGF0aWJsZSIpPDAmJnUuZXhlYyhhKXx8W107cmV0dXJue2Jyb3dzZXI6YlsxXXx8IiIsdmVyc2lvbjpiWzJdfHwiMCJ9fSxzdWI6ZnVuY3Rpb24oKXtmdW5jdGlvbiBhKGIsYyl7cmV0dXJuIG5ldyBhLmZuLmluaXQoYixjKX1lLmV4dGVuZCghMCxhLHRoaXMpLGEuc3VwZXJjbGFzcz10aGlzLGEuZm49YS5wcm90b3R5cGU9dGhpcygpLGEuZm4uY29uc3RydWN0b3I9YSxhLnN1Yj10aGlzLnN1YixhLmZuLmluaXQ9ZnVuY3Rpb24oZCxmKXtmJiZmIGluc3RhbmNlb2YgZSYmIShmIGluc3RhbmNlb2YgYSkmJihmPWEoZikpO3JldHVybiBlLmZuLmluaXQuY2FsbCh0aGlzLGQsZixiKX0sYS5mbi5pbml0LnByb3RvdHlwZT1hLmZuO3ZhciBiPWEoYyk7cmV0dXJuIGF9LGJyb3dzZXI6e319KSxlLmVhY2goIkJvb2xlYW4gTnVtYmVyIFN0cmluZyBGdW5jdGlvbiBBcnJheSBEYXRlIFJlZ0V4cCBPYmplY3QiLnNwbGl0KCIgIiksZnVuY3Rpb24oYSxiKXtJWyJbb2JqZWN0ICIrYisiXSJdPWIudG9Mb3dlckNhc2UoKX0pLHo9ZS51YU1hdGNoKHkpLHouYnJvd3NlciYmKGUuYnJvd3Nlclt6LmJyb3dzZXJdPSEwLGUuYnJvd3Nlci52ZXJzaW9uPXoudmVyc2lvbiksZS5icm93c2VyLndlYmtpdCYmKGUuYnJvd3Nlci5zYWZhcmk9ITApLGoudGVzdCgiICIpJiYoaz0vXltcc1x4QTBdKy8sbD0vW1xzXHhBMF0rJC8pLGg9ZShjKSxjLmFkZEV2ZW50TGlzdGVuZXI/Qj1mdW5jdGlvbigpe2MucmVtb3ZlRXZlbnRMaXN0ZW5lcigiRE9NQ29udGVudExvYWRlZCIsQiwhMSksZS5yZWFkeSgpfTpjLmF0dGFjaEV2ZW50JiYoQj1mdW5jdGlvbigpe2MucmVhZHlTdGF0ZT09PSJjb21wbGV0ZSImJihjLmRldGFjaEV2ZW50KCJvbnJlYWR5c3RhdGVjaGFuZ2UiLEIpLGUucmVhZHkoKSl9KTtyZXR1cm4gZX0oKSxnPXt9O2YuQ2FsbGJhY2tzPWZ1bmN0aW9uKGEpe2E9YT9nW2FdfHxoKGEpOnt9O3ZhciBjPVtdLGQ9W10sZSxpLGosayxsLG09ZnVuY3Rpb24oYil7dmFyIGQsZSxnLGgsaTtmb3IoZD0wLGU9Yi5sZW5ndGg7ZDxlO2QrKylnPWJbZF0saD1mLnR5cGUoZyksaD09PSJhcnJheSI/bShnKTpoPT09ImZ1bmN0aW9uIiYmKCFhLnVuaXF1ZXx8IW8uaGFzKGcpKSYmYy5wdXNoKGcpfSxuPWZ1bmN0aW9uKGIsZil7Zj1mfHxbXSxlPSFhLm1lbW9yeXx8W2IsZl0saT0hMCxsPWp8fDAsaj0wLGs9Yy5sZW5ndGg7Zm9yKDtjJiZsPGs7bCsrKWlmKGNbbF0uYXBwbHkoYixmKT09PSExJiZhLnN0b3BPbkZhbHNlKXtlPSEwO2JyZWFrfWk9ITEsYyYmKGEub25jZT9lPT09ITA/by5kaXNhYmxlKCk6Yz1bXTpkJiZkLmxlbmd0aCYmKGU9ZC5zaGlmdCgpLG8uZmlyZVdpdGgoZVswXSxlWzFdKSkpfSxvPXthZGQ6ZnVuY3Rpb24oKXtpZihjKXt2YXIgYT1jLmxlbmd0aDttKGFyZ3VtZW50cyksaT9rPWMubGVuZ3RoOmUmJmUhPT0hMCYmKGo9YSxuKGVbMF0sZVsxXSkpfXJldHVybiB0aGlzfSxyZW1vdmU6ZnVuY3Rpb24oKXtpZihjKXt2YXIgYj1hcmd1bWVudHMsZD0wLGU9Yi5sZW5ndGg7Zm9yKDtkPGU7ZCsrKWZvcih2YXIgZj0wO2Y8Yy5sZW5ndGg7ZisrKWlmKGJbZF09PT1jW2ZdKXtpJiZmPD1rJiYoay0tLGY8PWwmJmwtLSksYy5zcGxpY2UoZi0tLDEpO2lmKGEudW5pcXVlKWJyZWFrfX1yZXR1cm4gdGhpc30saGFzOmZ1bmN0aW9uKGEpe2lmKGMpe3ZhciBiPTAsZD1jLmxlbmd0aDtmb3IoO2I8ZDtiKyspaWYoYT09PWNbYl0pcmV0dXJuITB9cmV0dXJuITF9LGVtcHR5OmZ1bmN0aW9uKCl7Yz1bXTtyZXR1cm4gdGhpc30sZGlzYWJsZTpmdW5jdGlvbigpe2M9ZD1lPWI7cmV0dXJuIHRoaXN9LGRpc2FibGVkOmZ1bmN0aW9uKCl7cmV0dXJuIWN9LGxvY2s6ZnVuY3Rpb24oKXtkPWIsKCFlfHxlPT09ITApJiZvLmRpc2FibGUoKTtyZXR1cm4gdGhpc30sbG9ja2VkOmZ1bmN0aW9uKCl7cmV0dXJuIWR9LGZpcmVXaXRoOmZ1bmN0aW9uKGIsYyl7ZCYmKGk/YS5vbmNlfHxkLnB1c2goW2IsY10pOighYS5vbmNlfHwhZSkmJm4oYixjKSk7cmV0dXJuIHRoaXN9LGZpcmU6ZnVuY3Rpb24oKXtvLmZpcmVXaXRoKHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gdGhpc30sZmlyZWQ6ZnVuY3Rpb24oKXtyZXR1cm4hIWV9fTtyZXR1cm4gb307dmFyIGk9W10uc2xpY2U7Zi5leHRlbmQoe0RlZmVycmVkOmZ1bmN0aW9uKGEpe3ZhciBiPWYuQ2FsbGJhY2tzKCJvbmNlIG1lbW9yeSIpLGM9Zi5DYWxsYmFja3MoIm9uY2UgbWVtb3J5IiksZD1mLkNhbGxiYWNrcygibWVtb3J5IiksZT0icGVuZGluZyIsZz17cmVzb2x2ZTpiLHJlamVjdDpjLG5vdGlmeTpkfSxoPXtkb25lOmIuYWRkLGZhaWw6Yy5hZGQscHJvZ3Jlc3M6ZC5hZGQsc3RhdGU6ZnVuY3Rpb24oKXtyZXR1cm4gZX0saXNSZXNvbHZlZDpiLmZpcmVkLGlzUmVqZWN0ZWQ6Yy5maXJlZCx0aGVuOmZ1bmN0aW9uKGEsYixjKXtpLmRvbmUoYSkuZmFpbChiKS5wcm9ncmVzcyhjKTtyZXR1cm4gdGhpc30sYWx3YXlzOmZ1bmN0aW9uKCl7aS5kb25lLmFwcGx5KGksYXJndW1lbnRzKS5mYWlsLmFwcGx5KGksYXJndW1lbnRzKTtyZXR1cm4gdGhpc30scGlwZTpmdW5jdGlvbihhLGIsYyl7cmV0dXJuIGYuRGVmZXJyZWQoZnVuY3Rpb24oZCl7Zi5lYWNoKHtkb25lOlthLCJyZXNvbHZlIl0sZmFpbDpbYiwicmVqZWN0Il0scHJvZ3Jlc3M6W2MsIm5vdGlmeSJdfSxmdW5jdGlvbihhLGIpe3ZhciBjPWJbMF0sZT1iWzFdLGc7Zi5pc0Z1bmN0aW9uKGMpP2lbYV0oZnVuY3Rpb24oKXtnPWMuYXBwbHkodGhpcyxhcmd1bWVudHMpLGcmJmYuaXNGdW5jdGlvbihnLnByb21pc2UpP2cucHJvbWlzZSgpLnRoZW4oZC5yZXNvbHZlLGQucmVqZWN0LGQubm90aWZ5KTpkW2UrIldpdGgiXSh0aGlzPT09aT9kOnRoaXMsW2ddKX0pOmlbYV0oZFtlXSl9KX0pLnByb21pc2UoKX0scHJvbWlzZTpmdW5jdGlvbihhKXtpZihhPT1udWxsKWE9aDtlbHNlIGZvcih2YXIgYiBpbiBoKWFbYl09aFtiXTtyZXR1cm4gYX19LGk9aC5wcm9taXNlKHt9KSxqO2ZvcihqIGluIGcpaVtqXT1nW2pdLmZpcmUsaVtqKyJXaXRoIl09Z1tqXS5maXJlV2l0aDtpLmRvbmUoZnVuY3Rpb24oKXtlPSJyZXNvbHZlZCJ9LGMuZGlzYWJsZSxkLmxvY2spLmZhaWwoZnVuY3Rpb24oKXtlPSJyZWplY3RlZCJ9LGIuZGlzYWJsZSxkLmxvY2spLGEmJmEuY2FsbChpLGkpO3JldHVybiBpfSx3aGVuOmZ1bmN0aW9uKGEpe2Z1bmN0aW9uIG0oYSl7cmV0dXJuIGZ1bmN0aW9uKGIpe2VbYV09YXJndW1lbnRzLmxlbmd0aD4xP2kuY2FsbChhcmd1bWVudHMsMCk6YixqLm5vdGlmeVdpdGgoayxlKX19ZnVuY3Rpb24gbChhKXtyZXR1cm4gZnVuY3Rpb24oYyl7YlthXT1hcmd1bWVudHMubGVuZ3RoPjE/aS5jYWxsKGFyZ3VtZW50cywwKTpjLC0tZ3x8ai5yZXNvbHZlV2l0aChqLGIpfX12YXIgYj1pLmNhbGwoYXJndW1lbnRzLDApLGM9MCxkPWIubGVuZ3RoLGU9QXJyYXkoZCksZz1kLGg9ZCxqPWQ8PTEmJmEmJmYuaXNGdW5jdGlvbihhLnByb21pc2UpP2E6Zi5EZWZlcnJlZCgpLGs9ai5wcm9taXNlKCk7aWYoZD4xKXtmb3IoO2M8ZDtjKyspYltjXSYmYltjXS5wcm9taXNlJiZmLmlzRnVuY3Rpb24oYltjXS5wcm9taXNlKT9iW2NdLnByb21pc2UoKS50aGVuKGwoYyksai5yZWplY3QsbShjKSk6LS1nO2d8fGoucmVzb2x2ZVdpdGgoaixiKX1lbHNlIGohPT1hJiZqLnJlc29sdmVXaXRoKGosZD9bYV06W10pO3JldHVybiBrfX0pLGYuc3VwcG9ydD1mdW5jdGlvbigpe3ZhciBiLGQsZSxnLGgsaSxqLGssbCxtLG4sbyxwLHE9Yy5jcmVhdGVFbGVtZW50KCJkaXYiKSxyPWMuZG9jdW1lbnRFbGVtZW50O3Euc2V0QXR0cmlidXRlKCJjbGFzc05hbWUiLCJ0IikscS5pbm5lckhUTUw9IiAgIDxsaW5rLz48dGFibGU+PC90YWJsZT48YSBocmVmPScvYScgc3R5bGU9J3RvcDoxcHg7ZmxvYXQ6bGVmdDtvcGFjaXR5Oi41NTsnPmE8L2E+PGlucHV0IHR5cGU9J2NoZWNrYm94Jy8+IixkPXEuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIioiKSxlPXEuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImEiKVswXTtpZighZHx8IWQubGVuZ3RofHwhZSlyZXR1cm57fTtnPWMuY3JlYXRlRWxlbWVudCgic2VsZWN0IiksaD1nLmFwcGVuZENoaWxkKGMuY3JlYXRlRWxlbWVudCgib3B0aW9uIikpLGk9cS5nZXRFbGVtZW50c0J5VGFnTmFtZSgiaW5wdXQiKVswXSxiPXtsZWFkaW5nV2hpdGVzcGFjZTpxLmZpcnN0Q2hpbGQubm9kZVR5cGU9PT0zLHRib2R5OiFxLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJ0Ym9keSIpLmxlbmd0aCxodG1sU2VyaWFsaXplOiEhcS5nZXRFbGVtZW50c0J5VGFnTmFtZSgibGluayIpLmxlbmd0aCxzdHlsZTovdG9wLy50ZXN0KGUuZ2V0QXR0cmlidXRlKCJzdHlsZSIpKSxocmVmTm9ybWFsaXplZDplLmdldEF0dHJpYnV0ZSgiaHJlZiIpPT09Ii9hIixvcGFjaXR5Oi9eMC41NS8udGVzdChlLnN0eWxlLm9wYWNpdHkpLGNzc0Zsb2F0OiEhZS5zdHlsZS5jc3NGbG9hdCxjaGVja09uOmkudmFsdWU9PT0ib24iLG9wdFNlbGVjdGVkOmguc2VsZWN0ZWQsZ2V0U2V0QXR0cmlidXRlOnEuY2xhc3NOYW1lIT09InQiLGVuY3R5cGU6ISFjLmNyZWF0ZUVsZW1lbnQoImZvcm0iKS5lbmN0eXBlLGh0bWw1Q2xvbmU6Yy5jcmVhdGVFbGVtZW50KCJuYXYiKS5jbG9uZU5vZGUoITApLm91dGVySFRNTCE9PSI8Om5hdj48LzpuYXY+IixzdWJtaXRCdWJibGVzOiEwLGNoYW5nZUJ1YmJsZXM6ITAsZm9jdXNpbkJ1YmJsZXM6ITEsZGVsZXRlRXhwYW5kbzohMCxub0Nsb25lRXZlbnQ6ITAsaW5saW5lQmxvY2tOZWVkc0xheW91dDohMSxzaHJpbmtXcmFwQmxvY2tzOiExLHJlbGlhYmxlTWFyZ2luUmlnaHQ6ITB9LGkuY2hlY2tlZD0hMCxiLm5vQ2xvbmVDaGVja2VkPWkuY2xvbmVOb2RlKCEwKS5jaGVja2VkLGcuZGlzYWJsZWQ9ITAsYi5vcHREaXNhYmxlZD0haC5kaXNhYmxlZDt0cnl7ZGVsZXRlIHEudGVzdH1jYXRjaChzKXtiLmRlbGV0ZUV4cGFuZG89ITF9IXEuYWRkRXZlbnRMaXN0ZW5lciYmcS5hdHRhY2hFdmVudCYmcS5maXJlRXZlbnQmJihxLmF0dGFjaEV2ZW50KCJvbmNsaWNrIixmdW5jdGlvbigpe2Iubm9DbG9uZUV2ZW50PSExfSkscS5jbG9uZU5vZGUoITApLmZpcmVFdmVudCgib25jbGljayIpKSxpPWMuY3JlYXRlRWxlbWVudCgiaW5wdXQiKSxpLnZhbHVlPSJ0IixpLnNldEF0dHJpYnV0ZSgidHlwZSIsInJhZGlvIiksYi5yYWRpb1ZhbHVlPWkudmFsdWU9PT0idCIsaS5zZXRBdHRyaWJ1dGUoImNoZWNrZWQiLCJjaGVja2VkIikscS5hcHBlbmRDaGlsZChpKSxrPWMuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpLGsuYXBwZW5kQ2hpbGQocS5sYXN0Q2hpbGQpLGIuY2hlY2tDbG9uZT1rLmNsb25lTm9kZSghMCkuY2xvbmVOb2RlKCEwKS5sYXN0Q2hpbGQuY2hlY2tlZCxiLmFwcGVuZENoZWNrZWQ9aS5jaGVja2VkLGsucmVtb3ZlQ2hpbGQoaSksay5hcHBlbmRDaGlsZChxKSxxLmlubmVySFRNTD0iIixhLmdldENvbXB1dGVkU3R5bGUmJihqPWMuY3JlYXRlRWxlbWVudCgiZGl2Iiksai5zdHlsZS53aWR0aD0iMCIsai5zdHlsZS5tYXJnaW5SaWdodD0iMCIscS5zdHlsZS53aWR0aD0iMnB4IixxLmFwcGVuZENoaWxkKGopLGIucmVsaWFibGVNYXJnaW5SaWdodD0ocGFyc2VJbnQoKGEuZ2V0Q29tcHV0ZWRTdHlsZShqLG51bGwpfHx7bWFyZ2luUmlnaHQ6MH0pLm1hcmdpblJpZ2h0LDEwKXx8MCk9PT0wKTtpZihxLmF0dGFjaEV2ZW50KWZvcihvIGlue3N1Ym1pdDoxLGNoYW5nZToxLGZvY3VzaW46MX0pbj0ib24iK28scD1uIGluIHEscHx8KHEuc2V0QXR0cmlidXRlKG4sInJldHVybjsiKSxwPXR5cGVvZiBxW25dPT0iZnVuY3Rpb24iKSxiW28rIkJ1YmJsZXMiXT1wO2sucmVtb3ZlQ2hpbGQocSksaz1nPWg9aj1xPWk9bnVsbCxmKGZ1bmN0aW9uKCl7dmFyIGEsZCxlLGcsaCxpLGosayxtLG4sbyxyPWMuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImJvZHkiKVswXTshcnx8KGo9MSxrPSJwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtsZWZ0OjA7d2lkdGg6MXB4O2hlaWdodDoxcHg7bWFyZ2luOjA7IixtPSJ2aXNpYmlsaXR5OmhpZGRlbjtib3JkZXI6MDsiLG49InN0eWxlPSciK2srImJvcmRlcjo1cHggc29saWQgIzAwMDtwYWRkaW5nOjA7JyIsbz0iPGRpdiAiK24rIj48ZGl2PjwvZGl2PjwvZGl2PiIrIjx0YWJsZSAiK24rIiBjZWxscGFkZGluZz0nMCcgY2VsbHNwYWNpbmc9JzAnPiIrIjx0cj48dGQ+PC90ZD48L3RyPjwvdGFibGU+IixhPWMuY3JlYXRlRWxlbWVudCgiZGl2IiksYS5zdHlsZS5jc3NUZXh0PW0rIndpZHRoOjA7aGVpZ2h0OjA7cG9zaXRpb246c3RhdGljO3RvcDowO21hcmdpbi10b3A6IitqKyJweCIsci5pbnNlcnRCZWZvcmUoYSxyLmZpcnN0Q2hpbGQpLHE9Yy5jcmVhdGVFbGVtZW50KCJkaXYiKSxhLmFwcGVuZENoaWxkKHEpLHEuaW5uZXJIVE1MPSI8dGFibGU+PHRyPjx0ZCBzdHlsZT0ncGFkZGluZzowO2JvcmRlcjowO2Rpc3BsYXk6bm9uZSc+PC90ZD48dGQ+dDwvdGQ+PC90cj48L3RhYmxlPiIsbD1xLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJ0ZCIpLHA9bFswXS5vZmZzZXRIZWlnaHQ9PT0wLGxbMF0uc3R5bGUuZGlzcGxheT0iIixsWzFdLnN0eWxlLmRpc3BsYXk9Im5vbmUiLGIucmVsaWFibGVIaWRkZW5PZmZzZXRzPXAmJmxbMF0ub2Zmc2V0SGVpZ2h0PT09MCxxLmlubmVySFRNTD0iIixxLnN0eWxlLndpZHRoPXEuc3R5bGUucGFkZGluZ0xlZnQ9IjFweCIsZi5ib3hNb2RlbD1iLmJveE1vZGVsPXEub2Zmc2V0V2lkdGg9PT0yLHR5cGVvZiBxLnN0eWxlLnpvb20hPSJ1bmRlZmluZWQiJiYocS5zdHlsZS5kaXNwbGF5PSJpbmxpbmUiLHEuc3R5bGUuem9vbT0xLGIuaW5saW5lQmxvY2tOZWVkc0xheW91dD1xLm9mZnNldFdpZHRoPT09MixxLnN0eWxlLmRpc3BsYXk9IiIscS5pbm5lckhUTUw9IjxkaXYgc3R5bGU9J3dpZHRoOjRweDsnPjwvZGl2PiIsYi5zaHJpbmtXcmFwQmxvY2tzPXEub2Zmc2V0V2lkdGghPT0yKSxxLnN0eWxlLmNzc1RleHQ9ayttLHEuaW5uZXJIVE1MPW8sZD1xLmZpcnN0Q2hpbGQsZT1kLmZpcnN0Q2hpbGQsaD1kLm5leHRTaWJsaW5nLmZpcnN0Q2hpbGQuZmlyc3RDaGlsZCxpPXtkb2VzTm90QWRkQm9yZGVyOmUub2Zmc2V0VG9wIT09NSxkb2VzQWRkQm9yZGVyRm9yVGFibGVBbmRDZWxsczpoLm9mZnNldFRvcD09PTV9LGUuc3R5bGUucG9zaXRpb249ImZpeGVkIixlLnN0eWxlLnRvcD0iMjBweCIsaS5maXhlZFBvc2l0aW9uPWUub2Zmc2V0VG9wPT09MjB8fGUub2Zmc2V0VG9wPT09MTUsZS5zdHlsZS5wb3NpdGlvbj1lLnN0eWxlLnRvcD0iIixkLnN0eWxlLm92ZXJmbG93PSJoaWRkZW4iLGQuc3R5bGUucG9zaXRpb249InJlbGF0aXZlIixpLnN1YnRyYWN0c0JvcmRlckZvck92ZXJmbG93Tm90VmlzaWJsZT1lLm9mZnNldFRvcD09PS01LGkuZG9lc05vdEluY2x1ZGVNYXJnaW5JbkJvZHlPZmZzZXQ9ci5vZmZzZXRUb3AhPT1qLHIucmVtb3ZlQ2hpbGQoYSkscT1hPW51bGwsZi5leHRlbmQoYixpKSl9KTtyZXR1cm4gYn0oKTt2YXIgaj0vXig/Olx7LipcfXxcWy4qXF0pJC8saz0vKFtBLVpdKS9nO2YuZXh0ZW5kKHtjYWNoZTp7fSx1dWlkOjAsZXhwYW5kbzoialF1ZXJ5IisoZi5mbi5qcXVlcnkrTWF0aC5yYW5kb20oKSkucmVwbGFjZSgvXEQvZywiIiksbm9EYXRhOntlbWJlZDohMCxvYmplY3Q6ImNsc2lkOkQyN0NEQjZFLUFFNkQtMTFjZi05NkI4LTQ0NDU1MzU0MDAwMCIsYXBwbGV0OiEwfSxoYXNEYXRhOmZ1bmN0aW9uKGEpe2E9YS5ub2RlVHlwZT9mLmNhY2hlW2FbZi5leHBhbmRvXV06YVtmLmV4cGFuZG9dO3JldHVybiEhYSYmIW0oYSl9LGRhdGE6ZnVuY3Rpb24oYSxjLGQsZSl7aWYoISFmLmFjY2VwdERhdGEoYSkpe3ZhciBnLGgsaSxqPWYuZXhwYW5kbyxrPXR5cGVvZiBjPT0ic3RyaW5nIixsPWEubm9kZVR5cGUsbT1sP2YuY2FjaGU6YSxuPWw/YVtqXTphW2pdJiZqLG89Yz09PSJldmVudHMiO2lmKCghbnx8IW1bbl18fCFvJiYhZSYmIW1bbl0uZGF0YSkmJmsmJmQ9PT1iKXJldHVybjtufHwobD9hW2pdPW49KytmLnV1aWQ6bj1qKSxtW25dfHwobVtuXT17fSxsfHwobVtuXS50b0pTT049Zi5ub29wKSk7aWYodHlwZW9mIGM9PSJvYmplY3QifHx0eXBlb2YgYz09ImZ1bmN0aW9uIillP21bbl09Zi5leHRlbmQobVtuXSxjKTptW25dLmRhdGE9Zi5leHRlbmQobVtuXS5kYXRhLGMpO2c9aD1tW25dLGV8fChoLmRhdGF8fChoLmRhdGE9e30pLGg9aC5kYXRhKSxkIT09YiYmKGhbZi5jYW1lbENhc2UoYyldPWQpO2lmKG8mJiFoW2NdKXJldHVybiBnLmV2ZW50cztrPyhpPWhbY10saT09bnVsbCYmKGk9aFtmLmNhbWVsQ2FzZShjKV0pKTppPWg7cmV0dXJuIGl9fSxyZW1vdmVEYXRhOmZ1bmN0aW9uKGEsYixjKXtpZighIWYuYWNjZXB0RGF0YShhKSl7dmFyIGQsZSxnLGg9Zi5leHBhbmRvLGk9YS5ub2RlVHlwZSxqPWk/Zi5jYWNoZTphLGs9aT9hW2hdOmg7aWYoIWpba10pcmV0dXJuO2lmKGIpe2Q9Yz9qW2tdOmpba10uZGF0YTtpZihkKXtmLmlzQXJyYXkoYil8fChiIGluIGQ/Yj1bYl06KGI9Zi5jYW1lbENhc2UoYiksYiBpbiBkP2I9W2JdOmI9Yi5zcGxpdCgiICIpKSk7Zm9yKGU9MCxnPWIubGVuZ3RoO2U8ZztlKyspZGVsZXRlIGRbYltlXV07aWYoIShjP206Zi5pc0VtcHR5T2JqZWN0KShkKSlyZXR1cm59fWlmKCFjKXtkZWxldGUgaltrXS5kYXRhO2lmKCFtKGpba10pKXJldHVybn1mLnN1cHBvcnQuZGVsZXRlRXhwYW5kb3x8IWouc2V0SW50ZXJ2YWw/ZGVsZXRlIGpba106altrXT1udWxsLGkmJihmLnN1cHBvcnQuZGVsZXRlRXhwYW5kbz9kZWxldGUgYVtoXTphLnJlbW92ZUF0dHJpYnV0ZT9hLnJlbW92ZUF0dHJpYnV0ZShoKTphW2hdPW51bGwpfX0sX2RhdGE6ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBmLmRhdGEoYSxiLGMsITApfSxhY2NlcHREYXRhOmZ1bmN0aW9uKGEpe2lmKGEubm9kZU5hbWUpe3ZhciBiPWYubm9EYXRhW2Eubm9kZU5hbWUudG9Mb3dlckNhc2UoKV07aWYoYilyZXR1cm4gYiE9PSEwJiZhLmdldEF0dHJpYnV0ZSgiY2xhc3NpZCIpPT09Yn1yZXR1cm4hMH19KSxmLmZuLmV4dGVuZCh7ZGF0YTpmdW5jdGlvbihhLGMpe3ZhciBkLGUsZyxoPW51bGw7aWYodHlwZW9mIGE9PSJ1bmRlZmluZWQiKXtpZih0aGlzLmxlbmd0aCl7aD1mLmRhdGEodGhpc1swXSk7aWYodGhpc1swXS5ub2RlVHlwZT09PTEmJiFmLl9kYXRhKHRoaXNbMF0sInBhcnNlZEF0dHJzIikpe2U9dGhpc1swXS5hdHRyaWJ1dGVzO2Zvcih2YXIgaT0wLGo9ZS5sZW5ndGg7aTxqO2krKylnPWVbaV0ubmFtZSxnLmluZGV4T2YoImRhdGEtIik9PT0wJiYoZz1mLmNhbWVsQ2FzZShnLnN1YnN0cmluZyg1KSksbCh0aGlzWzBdLGcsaFtnXSkpO2YuX2RhdGEodGhpc1swXSwicGFyc2VkQXR0cnMiLCEwKX19cmV0dXJuIGh9aWYodHlwZW9mIGE9PSJvYmplY3QiKXJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXtmLmRhdGEodGhpcyxhKX0pO2Q9YS5zcGxpdCgiLiIpLGRbMV09ZFsxXT8iLiIrZFsxXToiIjtpZihjPT09Yil7aD10aGlzLnRyaWdnZXJIYW5kbGVyKCJnZXREYXRhIitkWzFdKyIhIixbZFswXV0pLGg9PT1iJiZ0aGlzLmxlbmd0aCYmKGg9Zi5kYXRhKHRoaXNbMF0sYSksaD1sKHRoaXNbMF0sYSxoKSk7cmV0dXJuIGg9PT1iJiZkWzFdP3RoaXMuZGF0YShkWzBdKTpofXJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgYj1mKHRoaXMpLGU9W2RbMF0sY107Yi50cmlnZ2VySGFuZGxlcigic2V0RGF0YSIrZFsxXSsiISIsZSksZi5kYXRhKHRoaXMsYSxjKSxiLnRyaWdnZXJIYW5kbGVyKCJjaGFuZ2VEYXRhIitkWzFdKyIhIixlKX0pfSxyZW1vdmVEYXRhOmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXtmLnJlbW92ZURhdGEodGhpcyxhKX0pfX0pLGYuZXh0ZW5kKHtfbWFyazpmdW5jdGlvbihhLGIpe2EmJihiPShifHwiZngiKSsibWFyayIsZi5fZGF0YShhLGIsKGYuX2RhdGEoYSxiKXx8MCkrMSkpfSxfdW5tYXJrOmZ1bmN0aW9uKGEsYixjKXthIT09ITAmJihjPWIsYj1hLGE9ITEpO2lmKGIpe2M9Y3x8ImZ4Ijt2YXIgZD1jKyJtYXJrIixlPWE/MDooZi5fZGF0YShiLGQpfHwxKS0xO2U/Zi5fZGF0YShiLGQsZSk6KGYucmVtb3ZlRGF0YShiLGQsITApLG4oYixjLCJtYXJrIikpfX0scXVldWU6ZnVuY3Rpb24oYSxiLGMpe3ZhciBkO2lmKGEpe2I9KGJ8fCJmeCIpKyJxdWV1ZSIsZD1mLl9kYXRhKGEsYiksYyYmKCFkfHxmLmlzQXJyYXkoYyk/ZD1mLl9kYXRhKGEsYixmLm1ha2VBcnJheShjKSk6ZC5wdXNoKGMpKTtyZXR1cm4gZHx8W119fSxkZXF1ZXVlOmZ1bmN0aW9uKGEsYil7Yj1ifHwiZngiO3ZhciBjPWYucXVldWUoYSxiKSxkPWMuc2hpZnQoKSxlPXt9O2Q9PT0iaW5wcm9ncmVzcyImJihkPWMuc2hpZnQoKSksZCYmKGI9PT0iZngiJiZjLnVuc2hpZnQoImlucHJvZ3Jlc3MiKSxmLl9kYXRhKGEsYisiLnJ1biIsZSksZC5jYWxsKGEsZnVuY3Rpb24oKXtmLmRlcXVldWUoYSxiKX0sZSkpLGMubGVuZ3RofHwoZi5yZW1vdmVEYXRhKGEsYisicXVldWUgIitiKyIucnVuIiwhMCksbihhLGIsInF1ZXVlIikpfX0pLGYuZm4uZXh0ZW5kKHtxdWV1ZTpmdW5jdGlvbihhLGMpe3R5cGVvZiBhIT0ic3RyaW5nIiYmKGM9YSxhPSJmeCIpO2lmKGM9PT1iKXJldHVybiBmLnF1ZXVlKHRoaXNbMF0sYSk7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe3ZhciBiPWYucXVldWUodGhpcyxhLGMpO2E9PT0iZngiJiZiWzBdIT09ImlucHJvZ3Jlc3MiJiZmLmRlcXVldWUodGhpcyxhKX0pfSxkZXF1ZXVlOmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXtmLmRlcXVldWUodGhpcyxhKX0pfSxkZWxheTpmdW5jdGlvbihhLGIpe2E9Zi5meD9mLmZ4LnNwZWVkc1thXXx8YTphLGI9Ynx8ImZ4IjtyZXR1cm4gdGhpcy5xdWV1ZShiLGZ1bmN0aW9uKGIsYyl7dmFyIGQ9c2V0VGltZW91dChiLGEpO2Muc3RvcD1mdW5jdGlvbigpe2NsZWFyVGltZW91dChkKX19KX0sY2xlYXJRdWV1ZTpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5xdWV1ZShhfHwiZngiLFtdKX0scHJvbWlzZTpmdW5jdGlvbihhLGMpe2Z1bmN0aW9uIG0oKXstLWh8fGQucmVzb2x2ZVdpdGgoZSxbZV0pfXR5cGVvZiBhIT0ic3RyaW5nIiYmKGM9YSxhPWIpLGE9YXx8ImZ4Ijt2YXIgZD1mLkRlZmVycmVkKCksZT10aGlzLGc9ZS5sZW5ndGgsaD0xLGk9YSsiZGVmZXIiLGo9YSsicXVldWUiLGs9YSsibWFyayIsbDt3aGlsZShnLS0paWYobD1mLmRhdGEoZVtnXSxpLGIsITApfHwoZi5kYXRhKGVbZ10saixiLCEwKXx8Zi5kYXRhKGVbZ10sayxiLCEwKSkmJmYuZGF0YShlW2ddLGksZi5DYWxsYmFja3MoIm9uY2UgbWVtb3J5IiksITApKWgrKyxsLmFkZChtKTttKCk7cmV0dXJuIGQucHJvbWlzZSgpfX0pO3ZhciBvPS9bXG5cdFxyXS9nLHA9L1xzKy8scT0vXHIvZyxyPS9eKD86YnV0dG9ufGlucHV0KSQvaSxzPS9eKD86YnV0dG9ufGlucHV0fG9iamVjdHxzZWxlY3R8dGV4dGFyZWEpJC9pLHQ9L15hKD86cmVhKT8kL2ksdT0vXig/OmF1dG9mb2N1c3xhdXRvcGxheXxhc3luY3xjaGVja2VkfGNvbnRyb2xzfGRlZmVyfGRpc2FibGVkfGhpZGRlbnxsb29wfG11bHRpcGxlfG9wZW58cmVhZG9ubHl8cmVxdWlyZWR8c2NvcGVkfHNlbGVjdGVkKSQvaSx2PWYuc3VwcG9ydC5nZXRTZXRBdHRyaWJ1dGUsdyx4LHk7Zi5mbi5leHRlbmQoe2F0dHI6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gZi5hY2Nlc3ModGhpcyxhLGIsITAsZi5hdHRyKX0scmVtb3ZlQXR0cjpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7Zi5yZW1vdmVBdHRyKHRoaXMsYSl9KX0scHJvcDpmdW5jdGlvbihhLGIpe3JldHVybiBmLmFjY2Vzcyh0aGlzLGEsYiwhMCxmLnByb3ApfSxyZW1vdmVQcm9wOmZ1bmN0aW9uKGEpe2E9Zi5wcm9wRml4W2FdfHxhO3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXt0cnl7dGhpc1thXT1iLGRlbGV0ZSB0aGlzW2FdfWNhdGNoKGMpe319KX0sYWRkQ2xhc3M6ZnVuY3Rpb24oYSl7dmFyIGIsYyxkLGUsZyxoLGk7aWYoZi5pc0Z1bmN0aW9uKGEpKXJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oYil7Zih0aGlzKS5hZGRDbGFzcyhhLmNhbGwodGhpcyxiLHRoaXMuY2xhc3NOYW1lKSl9KTtpZihhJiZ0eXBlb2YgYT09InN0cmluZyIpe2I9YS5zcGxpdChwKTtmb3IoYz0wLGQ9dGhpcy5sZW5ndGg7YzxkO2MrKyl7ZT10aGlzW2NdO2lmKGUubm9kZVR5cGU9PT0xKWlmKCFlLmNsYXNzTmFtZSYmYi5sZW5ndGg9PT0xKWUuY2xhc3NOYW1lPWE7ZWxzZXtnPSIgIitlLmNsYXNzTmFtZSsiICI7Zm9yKGg9MCxpPWIubGVuZ3RoO2g8aTtoKyspfmcuaW5kZXhPZigiICIrYltoXSsiICIpfHwoZys9YltoXSsiICIpO2UuY2xhc3NOYW1lPWYudHJpbShnKX19fXJldHVybiB0aGlzfSxyZW1vdmVDbGFzczpmdW5jdGlvbihhKXt2YXIgYyxkLGUsZyxoLGksajtpZihmLmlzRnVuY3Rpb24oYSkpcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbihiKXtmKHRoaXMpLnJlbW92ZUNsYXNzKGEuY2FsbCh0aGlzLGIsdGhpcy5jbGFzc05hbWUpKX0pO2lmKGEmJnR5cGVvZiBhPT0ic3RyaW5nInx8YT09PWIpe2M9KGF8fCIiKS5zcGxpdChwKTtmb3IoZD0wLGU9dGhpcy5sZW5ndGg7ZDxlO2QrKyl7Zz10aGlzW2RdO2lmKGcubm9kZVR5cGU9PT0xJiZnLmNsYXNzTmFtZSlpZihhKXtoPSgiICIrZy5jbGFzc05hbWUrIiAiKS5yZXBsYWNlKG8sIiAiKTtmb3IoaT0wLGo9Yy5sZW5ndGg7aTxqO2krKyloPWgucmVwbGFjZSgiICIrY1tpXSsiICIsIiAiKTtnLmNsYXNzTmFtZT1mLnRyaW0oaCl9ZWxzZSBnLmNsYXNzTmFtZT0iIn19cmV0dXJuIHRoaXN9LHRvZ2dsZUNsYXNzOmZ1bmN0aW9uKGEsYil7dmFyIGM9dHlwZW9mIGEsZD10eXBlb2YgYj09ImJvb2xlYW4iO2lmKGYuaXNGdW5jdGlvbihhKSlyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKGMpe2YodGhpcykudG9nZ2xlQ2xhc3MoYS5jYWxsKHRoaXMsYyx0aGlzLmNsYXNzTmFtZSxiKSxiKX0pO3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXtpZihjPT09InN0cmluZyIpe3ZhciBlLGc9MCxoPWYodGhpcyksaT1iLGo9YS5zcGxpdChwKTt3aGlsZShlPWpbZysrXSlpPWQ/aTohaC5oYXNDbGFzcyhlKSxoW2k/ImFkZENsYXNzIjoicmVtb3ZlQ2xhc3MiXShlKX1lbHNlIGlmKGM9PT0idW5kZWZpbmVkInx8Yz09PSJib29sZWFuIil0aGlzLmNsYXNzTmFtZSYmZi5fZGF0YSh0aGlzLCJfX2NsYXNzTmFtZV9fIix0aGlzLmNsYXNzTmFtZSksdGhpcy5jbGFzc05hbWU9dGhpcy5jbGFzc05hbWV8fGE9PT0hMT8iIjpmLl9kYXRhKHRoaXMsIl9fY2xhc3NOYW1lX18iKXx8IiJ9KX0saGFzQ2xhc3M6ZnVuY3Rpb24oYSl7dmFyIGI9IiAiK2ErIiAiLGM9MCxkPXRoaXMubGVuZ3RoO2Zvcig7YzxkO2MrKylpZih0aGlzW2NdLm5vZGVUeXBlPT09MSYmKCIgIit0aGlzW2NdLmNsYXNzTmFtZSsiICIpLnJlcGxhY2UobywiICIpLmluZGV4T2YoYik+LTEpcmV0dXJuITA7cmV0dXJuITF9LHZhbDpmdW5jdGlvbihhKXt2YXIgYyxkLGUsZz10aGlzWzBdO3tpZighIWFyZ3VtZW50cy5sZW5ndGgpe2U9Zi5pc0Z1bmN0aW9uKGEpO3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oZCl7dmFyIGc9Zih0aGlzKSxoO2lmKHRoaXMubm9kZVR5cGU9PT0xKXtlP2g9YS5jYWxsKHRoaXMsZCxnLnZhbCgpKTpoPWEsaD09bnVsbD9oPSIiOnR5cGVvZiBoPT0ibnVtYmVyIj9oKz0iIjpmLmlzQXJyYXkoaCkmJihoPWYubWFwKGgsZnVuY3Rpb24oYSl7cmV0dXJuIGE9PW51bGw/IiI6YSsiIn0pKSxjPWYudmFsSG9va3NbdGhpcy5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpXXx8Zi52YWxIb29rc1t0aGlzLnR5cGVdO2lmKCFjfHwhKCJzZXQiaW4gYyl8fGMuc2V0KHRoaXMsaCwidmFsdWUiKT09PWIpdGhpcy52YWx1ZT1ofX0pfWlmKGcpe2M9Zi52YWxIb29rc1tnLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCldfHxmLnZhbEhvb2tzW2cudHlwZV07aWYoYyYmImdldCJpbiBjJiYoZD1jLmdldChnLCJ2YWx1ZSIpKSE9PWIpcmV0dXJuIGQ7ZD1nLnZhbHVlO3JldHVybiB0eXBlb2YgZD09InN0cmluZyI/ZC5yZXBsYWNlKHEsIiIpOmQ9PW51bGw/IiI6ZH19fX0pLGYuZXh0ZW5kKHt2YWxIb29rczp7b3B0aW9uOntnZXQ6ZnVuY3Rpb24oYSl7dmFyIGI9YS5hdHRyaWJ1dGVzLnZhbHVlO3JldHVybiFifHxiLnNwZWNpZmllZD9hLnZhbHVlOmEudGV4dH19LHNlbGVjdDp7Z2V0OmZ1bmN0aW9uKGEpe3ZhciBiLGMsZCxlLGc9YS5zZWxlY3RlZEluZGV4LGg9W10saT1hLm9wdGlvbnMsaj1hLnR5cGU9PT0ic2VsZWN0LW9uZSI7aWYoZzwwKXJldHVybiBudWxsO2M9aj9nOjAsZD1qP2crMTppLmxlbmd0aDtmb3IoO2M8ZDtjKyspe2U9aVtjXTtpZihlLnNlbGVjdGVkJiYoZi5zdXBwb3J0Lm9wdERpc2FibGVkPyFlLmRpc2FibGVkOmUuZ2V0QXR0cmlidXRlKCJkaXNhYmxlZCIpPT09bnVsbCkmJighZS5wYXJlbnROb2RlLmRpc2FibGVkfHwhZi5ub2RlTmFtZShlLnBhcmVudE5vZGUsIm9wdGdyb3VwIikpKXtiPWYoZSkudmFsKCk7aWYoailyZXR1cm4gYjtoLnB1c2goYil9fWlmKGomJiFoLmxlbmd0aCYmaS5sZW5ndGgpcmV0dXJuIGYoaVtnXSkudmFsKCk7cmV0dXJuIGh9LHNldDpmdW5jdGlvbihhLGIpe3ZhciBjPWYubWFrZUFycmF5KGIpO2YoYSkuZmluZCgib3B0aW9uIikuZWFjaChmdW5jdGlvbigpe3RoaXMuc2VsZWN0ZWQ9Zi5pbkFycmF5KGYodGhpcykudmFsKCksYyk+PTB9KSxjLmxlbmd0aHx8KGEuc2VsZWN0ZWRJbmRleD0tMSk7cmV0dXJuIGN9fX0sYXR0ckZuOnt2YWw6ITAsY3NzOiEwLGh0bWw6ITAsdGV4dDohMCxkYXRhOiEwLHdpZHRoOiEwLGhlaWdodDohMCxvZmZzZXQ6ITB9LGF0dHI6ZnVuY3Rpb24oYSxjLGQsZSl7dmFyIGcsaCxpLGo9YS5ub2RlVHlwZTtpZighIWEmJmohPT0zJiZqIT09OCYmaiE9PTIpe2lmKGUmJmMgaW4gZi5hdHRyRm4pcmV0dXJuIGYoYSlbY10oZCk7aWYodHlwZW9mIGEuZ2V0QXR0cmlidXRlPT0idW5kZWZpbmVkIilyZXR1cm4gZi5wcm9wKGEsYyxkKTtpPWohPT0xfHwhZi5pc1hNTERvYyhhKSxpJiYoYz1jLnRvTG93ZXJDYXNlKCksaD1mLmF0dHJIb29rc1tjXXx8KHUudGVzdChjKT94OncpKTtpZihkIT09Yil7aWYoZD09PW51bGwpe2YucmVtb3ZlQXR0cihhLGMpO3JldHVybn1pZihoJiYic2V0ImluIGgmJmkmJihnPWguc2V0KGEsZCxjKSkhPT1iKXJldHVybiBnO2Euc2V0QXR0cmlidXRlKGMsIiIrZCk7cmV0dXJuIGR9aWYoaCYmImdldCJpbiBoJiZpJiYoZz1oLmdldChhLGMpKSE9PW51bGwpcmV0dXJuIGc7Zz1hLmdldEF0dHJpYnV0ZShjKTtyZXR1cm4gZz09PW51bGw/YjpnfX0scmVtb3ZlQXR0cjpmdW5jdGlvbihhLGIpe3ZhciBjLGQsZSxnLGg9MDtpZihiJiZhLm5vZGVUeXBlPT09MSl7ZD1iLnRvTG93ZXJDYXNlKCkuc3BsaXQocCksZz1kLmxlbmd0aDtmb3IoO2g8ZztoKyspZT1kW2hdLGUmJihjPWYucHJvcEZpeFtlXXx8ZSxmLmF0dHIoYSxlLCIiKSxhLnJlbW92ZUF0dHJpYnV0ZSh2P2U6YyksdS50ZXN0KGUpJiZjIGluIGEmJihhW2NdPSExKSl9fSxhdHRySG9va3M6e3R5cGU6e3NldDpmdW5jdGlvbihhLGIpe2lmKHIudGVzdChhLm5vZGVOYW1lKSYmYS5wYXJlbnROb2RlKWYuZXJyb3IoInR5cGUgcHJvcGVydHkgY2FuJ3QgYmUgY2hhbmdlZCIpO2Vsc2UgaWYoIWYuc3VwcG9ydC5yYWRpb1ZhbHVlJiZiPT09InJhZGlvIiYmZi5ub2RlTmFtZShhLCJpbnB1dCIpKXt2YXIgYz1hLnZhbHVlO2Euc2V0QXR0cmlidXRlKCJ0eXBlIixiKSxjJiYoYS52YWx1ZT1jKTtyZXR1cm4gYn19fSx2YWx1ZTp7Z2V0OmZ1bmN0aW9uKGEsYil7aWYodyYmZi5ub2RlTmFtZShhLCJidXR0b24iKSlyZXR1cm4gdy5nZXQoYSxiKTtyZXR1cm4gYiBpbiBhP2EudmFsdWU6bnVsbH0sc2V0OmZ1bmN0aW9uKGEsYixjKXtpZih3JiZmLm5vZGVOYW1lKGEsImJ1dHRvbiIpKXJldHVybiB3LnNldChhLGIsYyk7YS52YWx1ZT1ifX19LHByb3BGaXg6e3RhYmluZGV4OiJ0YWJJbmRleCIscmVhZG9ubHk6InJlYWRPbmx5IiwiZm9yIjoiaHRtbEZvciIsImNsYXNzIjoiY2xhc3NOYW1lIixtYXhsZW5ndGg6Im1heExlbmd0aCIsY2VsbHNwYWNpbmc6ImNlbGxTcGFjaW5nIixjZWxscGFkZGluZzoiY2VsbFBhZGRpbmciLHJvd3NwYW46InJvd1NwYW4iLGNvbHNwYW46ImNvbFNwYW4iLHVzZW1hcDoidXNlTWFwIixmcmFtZWJvcmRlcjoiZnJhbWVCb3JkZXIiLGNvbnRlbnRlZGl0YWJsZToiY29udGVudEVkaXRhYmxlIn0scHJvcDpmdW5jdGlvbihhLGMsZCl7dmFyIGUsZyxoLGk9YS5ub2RlVHlwZTtpZighIWEmJmkhPT0zJiZpIT09OCYmaSE9PTIpe2g9aSE9PTF8fCFmLmlzWE1MRG9jKGEpLGgmJihjPWYucHJvcEZpeFtjXXx8YyxnPWYucHJvcEhvb2tzW2NdKTtyZXR1cm4gZCE9PWI/ZyYmInNldCJpbiBnJiYoZT1nLnNldChhLGQsYykpIT09Yj9lOmFbY109ZDpnJiYiZ2V0ImluIGcmJihlPWcuZ2V0KGEsYykpIT09bnVsbD9lOmFbY119fSxwcm9wSG9va3M6e3RhYkluZGV4OntnZXQ6ZnVuY3Rpb24oYSl7dmFyIGM9YS5nZXRBdHRyaWJ1dGVOb2RlKCJ0YWJpbmRleCIpO3JldHVybiBjJiZjLnNwZWNpZmllZD9wYXJzZUludChjLnZhbHVlLDEwKTpzLnRlc3QoYS5ub2RlTmFtZSl8fHQudGVzdChhLm5vZGVOYW1lKSYmYS5ocmVmPzA6Yn19fX0pLGYuYXR0ckhvb2tzLnRhYmluZGV4PWYucHJvcEhvb2tzLnRhYkluZGV4LHg9e2dldDpmdW5jdGlvbihhLGMpe3ZhciBkLGU9Zi5wcm9wKGEsYyk7cmV0dXJuIGU9PT0hMHx8dHlwZW9mIGUhPSJib29sZWFuIiYmKGQ9YS5nZXRBdHRyaWJ1dGVOb2RlKGMpKSYmZC5ub2RlVmFsdWUhPT0hMT9jLnRvTG93ZXJDYXNlKCk6Yn0sc2V0OmZ1bmN0aW9uKGEsYixjKXt2YXIgZDtiPT09ITE/Zi5yZW1vdmVBdHRyKGEsYyk6KGQ9Zi5wcm9wRml4W2NdfHxjLGQgaW4gYSYmKGFbZF09ITApLGEuc2V0QXR0cmlidXRlKGMsYy50b0xvd2VyQ2FzZSgpKSk7cmV0dXJuIGN9fSx2fHwoeT17bmFtZTohMCxpZDohMH0sdz1mLnZhbEhvb2tzLmJ1dHRvbj17Z2V0OmZ1bmN0aW9uKGEsYyl7dmFyIGQ7ZD1hLmdldEF0dHJpYnV0ZU5vZGUoYyk7cmV0dXJuIGQmJih5W2NdP2Qubm9kZVZhbHVlIT09IiI6ZC5zcGVjaWZpZWQpP2Qubm9kZVZhbHVlOmJ9LHNldDpmdW5jdGlvbihhLGIsZCl7dmFyIGU9YS5nZXRBdHRyaWJ1dGVOb2RlKGQpO2V8fChlPWMuY3JlYXRlQXR0cmlidXRlKGQpLGEuc2V0QXR0cmlidXRlTm9kZShlKSk7cmV0dXJuIGUubm9kZVZhbHVlPWIrIiJ9fSxmLmF0dHJIb29rcy50YWJpbmRleC5zZXQ9dy5zZXQsZi5lYWNoKFsid2lkdGgiLCJoZWlnaHQiXSxmdW5jdGlvbihhLGIpe2YuYXR0ckhvb2tzW2JdPWYuZXh0ZW5kKGYuYXR0ckhvb2tzW2JdLHtzZXQ6ZnVuY3Rpb24oYSxjKXtpZihjPT09IiIpe2Euc2V0QXR0cmlidXRlKGIsImF1dG8iKTtyZXR1cm4gY319fSl9KSxmLmF0dHJIb29rcy5jb250ZW50ZWRpdGFibGU9e2dldDp3LmdldCxzZXQ6ZnVuY3Rpb24oYSxiLGMpe2I9PT0iIiYmKGI9ImZhbHNlIiksdy5zZXQoYSxiLGMpfX0pLGYuc3VwcG9ydC5ocmVmTm9ybWFsaXplZHx8Zi5lYWNoKFsiaHJlZiIsInNyYyIsIndpZHRoIiwiaGVpZ2h0Il0sZnVuY3Rpb24oYSxjKXtmLmF0dHJIb29rc1tjXT1mLmV4dGVuZChmLmF0dHJIb29rc1tjXSx7Z2V0OmZ1bmN0aW9uKGEpe3ZhciBkPWEuZ2V0QXR0cmlidXRlKGMsMik7cmV0dXJuIGQ9PT1udWxsP2I6ZH19KX0pLGYuc3VwcG9ydC5zdHlsZXx8KGYuYXR0ckhvb2tzLnN0eWxlPXtnZXQ6ZnVuY3Rpb24oYSl7cmV0dXJuIGEuc3R5bGUuY3NzVGV4dC50b0xvd2VyQ2FzZSgpfHxifSxzZXQ6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gYS5zdHlsZS5jc3NUZXh0PSIiK2J9fSksZi5zdXBwb3J0Lm9wdFNlbGVjdGVkfHwoZi5wcm9wSG9va3Muc2VsZWN0ZWQ9Zi5leHRlbmQoZi5wcm9wSG9va3Muc2VsZWN0ZWQse2dldDpmdW5jdGlvbihhKXt2YXIgYj1hLnBhcmVudE5vZGU7YiYmKGIuc2VsZWN0ZWRJbmRleCxiLnBhcmVudE5vZGUmJmIucGFyZW50Tm9kZS5zZWxlY3RlZEluZGV4KTtyZXR1cm4gbnVsbH19KSksZi5zdXBwb3J0LmVuY3R5cGV8fChmLnByb3BGaXguZW5jdHlwZT0iZW5jb2RpbmciKSxmLnN1cHBvcnQuY2hlY2tPbnx8Zi5lYWNoKFsicmFkaW8iLCJjaGVja2JveCJdLGZ1bmN0aW9uKCl7Zi52YWxIb29rc1t0aGlzXT17Z2V0OmZ1bmN0aW9uKGEpe3JldHVybiBhLmdldEF0dHJpYnV0ZSgidmFsdWUiKT09PW51bGw/Im9uIjphLnZhbHVlfX19KSxmLmVhY2goWyJyYWRpbyIsImNoZWNrYm94Il0sZnVuY3Rpb24oKXtmLnZhbEhvb2tzW3RoaXNdPWYuZXh0ZW5kKGYudmFsSG9va3NbdGhpc10se3NldDpmdW5jdGlvbihhLGIpe2lmKGYuaXNBcnJheShiKSlyZXR1cm4gYS5jaGVja2VkPWYuaW5BcnJheShmKGEpLnZhbCgpLGIpPj0wfX0pfSk7dmFyIHo9L14oPzp0ZXh0YXJlYXxpbnB1dHxzZWxlY3QpJC9pLEE9L14oW15cLl0qKT8oPzpcLiguKykpPyQvLEI9L1xiaG92ZXIoXC5cUyspP1xiLyxDPS9ea2V5LyxEPS9eKD86bW91c2V8Y29udGV4dG1lbnUpfGNsaWNrLyxFPS9eKD86Zm9jdXNpbmZvY3VzfGZvY3Vzb3V0Ymx1cikkLyxGPS9eKFx3KikoPzojKFtcd1wtXSspKT8oPzpcLihbXHdcLV0rKSk/JC8sRz1mdW5jdGlvbihhKXt2YXIgYj1GLmV4ZWMoYSk7YiYmKGJbMV09KGJbMV18fCIiKS50b0xvd2VyQ2FzZSgpLGJbM109YlszXSYmbmV3IFJlZ0V4cCgiKD86XnxcXHMpIitiWzNdKyIoPzpcXHN8JCkiKSk7cmV0dXJuIGJ9LEg9ZnVuY3Rpb24oYSxiKXt2YXIgYz1hLmF0dHJpYnV0ZXN8fHt9O3JldHVybighYlsxXXx8YS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpPT09YlsxXSkmJighYlsyXXx8KGMuaWR8fHt9KS52YWx1ZT09PWJbMl0pJiYoIWJbM118fGJbM10udGVzdCgoY1siY2xhc3MiXXx8e30pLnZhbHVlKSl9LEk9ZnVuY3Rpb24oYSl7cmV0dXJuIGYuZXZlbnQuc3BlY2lhbC5ob3Zlcj9hOmEucmVwbGFjZShCLCJtb3VzZWVudGVyJDEgbW91c2VsZWF2ZSQxIil9OworZi5ldmVudD17YWRkOmZ1bmN0aW9uKGEsYyxkLGUsZyl7dmFyIGgsaSxqLGssbCxtLG4sbyxwLHEscixzO2lmKCEoYS5ub2RlVHlwZT09PTN8fGEubm9kZVR5cGU9PT04fHwhY3x8IWR8fCEoaD1mLl9kYXRhKGEpKSkpe2QuaGFuZGxlciYmKHA9ZCxkPXAuaGFuZGxlciksZC5ndWlkfHwoZC5ndWlkPWYuZ3VpZCsrKSxqPWguZXZlbnRzLGp8fChoLmV2ZW50cz1qPXt9KSxpPWguaGFuZGxlLGl8fChoLmhhbmRsZT1pPWZ1bmN0aW9uKGEpe3JldHVybiB0eXBlb2YgZiE9InVuZGVmaW5lZCImJighYXx8Zi5ldmVudC50cmlnZ2VyZWQhPT1hLnR5cGUpP2YuZXZlbnQuZGlzcGF0Y2guYXBwbHkoaS5lbGVtLGFyZ3VtZW50cyk6Yn0saS5lbGVtPWEpLGM9Zi50cmltKEkoYykpLnNwbGl0KCIgIik7Zm9yKGs9MDtrPGMubGVuZ3RoO2srKyl7bD1BLmV4ZWMoY1trXSl8fFtdLG09bFsxXSxuPShsWzJdfHwiIikuc3BsaXQoIi4iKS5zb3J0KCkscz1mLmV2ZW50LnNwZWNpYWxbbV18fHt9LG09KGc/cy5kZWxlZ2F0ZVR5cGU6cy5iaW5kVHlwZSl8fG0scz1mLmV2ZW50LnNwZWNpYWxbbV18fHt9LG89Zi5leHRlbmQoe3R5cGU6bSxvcmlnVHlwZTpsWzFdLGRhdGE6ZSxoYW5kbGVyOmQsZ3VpZDpkLmd1aWQsc2VsZWN0b3I6ZyxxdWljazpHKGcpLG5hbWVzcGFjZTpuLmpvaW4oIi4iKX0scCkscj1qW21dO2lmKCFyKXtyPWpbbV09W10sci5kZWxlZ2F0ZUNvdW50PTA7aWYoIXMuc2V0dXB8fHMuc2V0dXAuY2FsbChhLGUsbixpKT09PSExKWEuYWRkRXZlbnRMaXN0ZW5lcj9hLmFkZEV2ZW50TGlzdGVuZXIobSxpLCExKTphLmF0dGFjaEV2ZW50JiZhLmF0dGFjaEV2ZW50KCJvbiIrbSxpKX1zLmFkZCYmKHMuYWRkLmNhbGwoYSxvKSxvLmhhbmRsZXIuZ3VpZHx8KG8uaGFuZGxlci5ndWlkPWQuZ3VpZCkpLGc/ci5zcGxpY2Uoci5kZWxlZ2F0ZUNvdW50KyssMCxvKTpyLnB1c2gobyksZi5ldmVudC5nbG9iYWxbbV09ITB9YT1udWxsfX0sZ2xvYmFsOnt9LHJlbW92ZTpmdW5jdGlvbihhLGIsYyxkLGUpe3ZhciBnPWYuaGFzRGF0YShhKSYmZi5fZGF0YShhKSxoLGksaixrLGwsbSxuLG8scCxxLHIscztpZighIWcmJiEhKG89Zy5ldmVudHMpKXtiPWYudHJpbShJKGJ8fCIiKSkuc3BsaXQoIiAiKTtmb3IoaD0wO2g8Yi5sZW5ndGg7aCsrKXtpPUEuZXhlYyhiW2hdKXx8W10saj1rPWlbMV0sbD1pWzJdO2lmKCFqKXtmb3IoaiBpbiBvKWYuZXZlbnQucmVtb3ZlKGEsaitiW2hdLGMsZCwhMCk7Y29udGludWV9cD1mLmV2ZW50LnNwZWNpYWxbal18fHt9LGo9KGQ/cC5kZWxlZ2F0ZVR5cGU6cC5iaW5kVHlwZSl8fGoscj1vW2pdfHxbXSxtPXIubGVuZ3RoLGw9bD9uZXcgUmVnRXhwKCIoXnxcXC4pIitsLnNwbGl0KCIuIikuc29ydCgpLmpvaW4oIlxcLig/Oi4qXFwuKT8iKSsiKFxcLnwkKSIpOm51bGw7Zm9yKG49MDtuPHIubGVuZ3RoO24rKylzPXJbbl0sKGV8fGs9PT1zLm9yaWdUeXBlKSYmKCFjfHxjLmd1aWQ9PT1zLmd1aWQpJiYoIWx8fGwudGVzdChzLm5hbWVzcGFjZSkpJiYoIWR8fGQ9PT1zLnNlbGVjdG9yfHxkPT09IioqIiYmcy5zZWxlY3RvcikmJihyLnNwbGljZShuLS0sMSkscy5zZWxlY3RvciYmci5kZWxlZ2F0ZUNvdW50LS0scC5yZW1vdmUmJnAucmVtb3ZlLmNhbGwoYSxzKSk7ci5sZW5ndGg9PT0wJiZtIT09ci5sZW5ndGgmJigoIXAudGVhcmRvd258fHAudGVhcmRvd24uY2FsbChhLGwpPT09ITEpJiZmLnJlbW92ZUV2ZW50KGEsaixnLmhhbmRsZSksZGVsZXRlIG9bal0pfWYuaXNFbXB0eU9iamVjdChvKSYmKHE9Zy5oYW5kbGUscSYmKHEuZWxlbT1udWxsKSxmLnJlbW92ZURhdGEoYSxbImV2ZW50cyIsImhhbmRsZSJdLCEwKSl9fSxjdXN0b21FdmVudDp7Z2V0RGF0YTohMCxzZXREYXRhOiEwLGNoYW5nZURhdGE6ITB9LHRyaWdnZXI6ZnVuY3Rpb24oYyxkLGUsZyl7aWYoIWV8fGUubm9kZVR5cGUhPT0zJiZlLm5vZGVUeXBlIT09OCl7dmFyIGg9Yy50eXBlfHxjLGk9W10saixrLGwsbSxuLG8scCxxLHIscztpZihFLnRlc3QoaCtmLmV2ZW50LnRyaWdnZXJlZCkpcmV0dXJuO2guaW5kZXhPZigiISIpPj0wJiYoaD1oLnNsaWNlKDAsLTEpLGs9ITApLGguaW5kZXhPZigiLiIpPj0wJiYoaT1oLnNwbGl0KCIuIiksaD1pLnNoaWZ0KCksaS5zb3J0KCkpO2lmKCghZXx8Zi5ldmVudC5jdXN0b21FdmVudFtoXSkmJiFmLmV2ZW50Lmdsb2JhbFtoXSlyZXR1cm47Yz10eXBlb2YgYz09Im9iamVjdCI/Y1tmLmV4cGFuZG9dP2M6bmV3IGYuRXZlbnQoaCxjKTpuZXcgZi5FdmVudChoKSxjLnR5cGU9aCxjLmlzVHJpZ2dlcj0hMCxjLmV4Y2x1c2l2ZT1rLGMubmFtZXNwYWNlPWkuam9pbigiLiIpLGMubmFtZXNwYWNlX3JlPWMubmFtZXNwYWNlP25ldyBSZWdFeHAoIihefFxcLikiK2kuam9pbigiXFwuKD86LipcXC4pPyIpKyIoXFwufCQpIik6bnVsbCxvPWguaW5kZXhPZigiOiIpPDA/Im9uIitoOiIiO2lmKCFlKXtqPWYuY2FjaGU7Zm9yKGwgaW4gailqW2xdLmV2ZW50cyYmaltsXS5ldmVudHNbaF0mJmYuZXZlbnQudHJpZ2dlcihjLGQsaltsXS5oYW5kbGUuZWxlbSwhMCk7cmV0dXJufWMucmVzdWx0PWIsYy50YXJnZXR8fChjLnRhcmdldD1lKSxkPWQhPW51bGw/Zi5tYWtlQXJyYXkoZCk6W10sZC51bnNoaWZ0KGMpLHA9Zi5ldmVudC5zcGVjaWFsW2hdfHx7fTtpZihwLnRyaWdnZXImJnAudHJpZ2dlci5hcHBseShlLGQpPT09ITEpcmV0dXJuO3I9W1tlLHAuYmluZFR5cGV8fGhdXTtpZighZyYmIXAubm9CdWJibGUmJiFmLmlzV2luZG93KGUpKXtzPXAuZGVsZWdhdGVUeXBlfHxoLG09RS50ZXN0KHMraCk/ZTplLnBhcmVudE5vZGUsbj1udWxsO2Zvcig7bTttPW0ucGFyZW50Tm9kZSlyLnB1c2goW20sc10pLG49bTtuJiZuPT09ZS5vd25lckRvY3VtZW50JiZyLnB1c2goW24uZGVmYXVsdFZpZXd8fG4ucGFyZW50V2luZG93fHxhLHNdKX1mb3IobD0wO2w8ci5sZW5ndGgmJiFjLmlzUHJvcGFnYXRpb25TdG9wcGVkKCk7bCsrKW09cltsXVswXSxjLnR5cGU9cltsXVsxXSxxPShmLl9kYXRhKG0sImV2ZW50cyIpfHx7fSlbYy50eXBlXSYmZi5fZGF0YShtLCJoYW5kbGUiKSxxJiZxLmFwcGx5KG0sZCkscT1vJiZtW29dLHEmJmYuYWNjZXB0RGF0YShtKSYmcS5hcHBseShtLGQpPT09ITEmJmMucHJldmVudERlZmF1bHQoKTtjLnR5cGU9aCwhZyYmIWMuaXNEZWZhdWx0UHJldmVudGVkKCkmJighcC5fZGVmYXVsdHx8cC5fZGVmYXVsdC5hcHBseShlLm93bmVyRG9jdW1lbnQsZCk9PT0hMSkmJihoIT09ImNsaWNrInx8IWYubm9kZU5hbWUoZSwiYSIpKSYmZi5hY2NlcHREYXRhKGUpJiZvJiZlW2hdJiYoaCE9PSJmb2N1cyImJmghPT0iYmx1ciJ8fGMudGFyZ2V0Lm9mZnNldFdpZHRoIT09MCkmJiFmLmlzV2luZG93KGUpJiYobj1lW29dLG4mJihlW29dPW51bGwpLGYuZXZlbnQudHJpZ2dlcmVkPWgsZVtoXSgpLGYuZXZlbnQudHJpZ2dlcmVkPWIsbiYmKGVbb109bikpO3JldHVybiBjLnJlc3VsdH19LGRpc3BhdGNoOmZ1bmN0aW9uKGMpe2M9Zi5ldmVudC5maXgoY3x8YS5ldmVudCk7dmFyIGQ9KGYuX2RhdGEodGhpcywiZXZlbnRzIil8fHt9KVtjLnR5cGVdfHxbXSxlPWQuZGVsZWdhdGVDb3VudCxnPVtdLnNsaWNlLmNhbGwoYXJndW1lbnRzLDApLGg9IWMuZXhjbHVzaXZlJiYhYy5uYW1lc3BhY2UsaT1bXSxqLGssbCxtLG4sbyxwLHEscixzLHQ7Z1swXT1jLGMuZGVsZWdhdGVUYXJnZXQ9dGhpcztpZihlJiYhYy50YXJnZXQuZGlzYWJsZWQmJighYy5idXR0b258fGMudHlwZSE9PSJjbGljayIpKXttPWYodGhpcyksbS5jb250ZXh0PXRoaXMub3duZXJEb2N1bWVudHx8dGhpcztmb3IobD1jLnRhcmdldDtsIT10aGlzO2w9bC5wYXJlbnROb2RlfHx0aGlzKXtvPXt9LHE9W10sbVswXT1sO2ZvcihqPTA7ajxlO2orKylyPWRbal0scz1yLnNlbGVjdG9yLG9bc109PT1iJiYob1tzXT1yLnF1aWNrP0gobCxyLnF1aWNrKTptLmlzKHMpKSxvW3NdJiZxLnB1c2gocik7cS5sZW5ndGgmJmkucHVzaCh7ZWxlbTpsLG1hdGNoZXM6cX0pfX1kLmxlbmd0aD5lJiZpLnB1c2goe2VsZW06dGhpcyxtYXRjaGVzOmQuc2xpY2UoZSl9KTtmb3Ioaj0wO2o8aS5sZW5ndGgmJiFjLmlzUHJvcGFnYXRpb25TdG9wcGVkKCk7aisrKXtwPWlbal0sYy5jdXJyZW50VGFyZ2V0PXAuZWxlbTtmb3Ioaz0wO2s8cC5tYXRjaGVzLmxlbmd0aCYmIWMuaXNJbW1lZGlhdGVQcm9wYWdhdGlvblN0b3BwZWQoKTtrKyspe3I9cC5tYXRjaGVzW2tdO2lmKGh8fCFjLm5hbWVzcGFjZSYmIXIubmFtZXNwYWNlfHxjLm5hbWVzcGFjZV9yZSYmYy5uYW1lc3BhY2VfcmUudGVzdChyLm5hbWVzcGFjZSkpYy5kYXRhPXIuZGF0YSxjLmhhbmRsZU9iaj1yLG49KChmLmV2ZW50LnNwZWNpYWxbci5vcmlnVHlwZV18fHt9KS5oYW5kbGV8fHIuaGFuZGxlcikuYXBwbHkocC5lbGVtLGcpLG4hPT1iJiYoYy5yZXN1bHQ9bixuPT09ITEmJihjLnByZXZlbnREZWZhdWx0KCksYy5zdG9wUHJvcGFnYXRpb24oKSkpfX1yZXR1cm4gYy5yZXN1bHR9LHByb3BzOiJhdHRyQ2hhbmdlIGF0dHJOYW1lIHJlbGF0ZWROb2RlIHNyY0VsZW1lbnQgYWx0S2V5IGJ1YmJsZXMgY2FuY2VsYWJsZSBjdHJsS2V5IGN1cnJlbnRUYXJnZXQgZXZlbnRQaGFzZSBtZXRhS2V5IHJlbGF0ZWRUYXJnZXQgc2hpZnRLZXkgdGFyZ2V0IHRpbWVTdGFtcCB2aWV3IHdoaWNoIi5zcGxpdCgiICIpLGZpeEhvb2tzOnt9LGtleUhvb2tzOntwcm9wczoiY2hhciBjaGFyQ29kZSBrZXkga2V5Q29kZSIuc3BsaXQoIiAiKSxmaWx0ZXI6ZnVuY3Rpb24oYSxiKXthLndoaWNoPT1udWxsJiYoYS53aGljaD1iLmNoYXJDb2RlIT1udWxsP2IuY2hhckNvZGU6Yi5rZXlDb2RlKTtyZXR1cm4gYX19LG1vdXNlSG9va3M6e3Byb3BzOiJidXR0b24gYnV0dG9ucyBjbGllbnRYIGNsaWVudFkgZnJvbUVsZW1lbnQgb2Zmc2V0WCBvZmZzZXRZIHBhZ2VYIHBhZ2VZIHNjcmVlblggc2NyZWVuWSB0b0VsZW1lbnQiLnNwbGl0KCIgIiksZmlsdGVyOmZ1bmN0aW9uKGEsZCl7dmFyIGUsZixnLGg9ZC5idXR0b24saT1kLmZyb21FbGVtZW50O2EucGFnZVg9PW51bGwmJmQuY2xpZW50WCE9bnVsbCYmKGU9YS50YXJnZXQub3duZXJEb2N1bWVudHx8YyxmPWUuZG9jdW1lbnRFbGVtZW50LGc9ZS5ib2R5LGEucGFnZVg9ZC5jbGllbnRYKyhmJiZmLnNjcm9sbExlZnR8fGcmJmcuc2Nyb2xsTGVmdHx8MCktKGYmJmYuY2xpZW50TGVmdHx8ZyYmZy5jbGllbnRMZWZ0fHwwKSxhLnBhZ2VZPWQuY2xpZW50WSsoZiYmZi5zY3JvbGxUb3B8fGcmJmcuc2Nyb2xsVG9wfHwwKS0oZiYmZi5jbGllbnRUb3B8fGcmJmcuY2xpZW50VG9wfHwwKSksIWEucmVsYXRlZFRhcmdldCYmaSYmKGEucmVsYXRlZFRhcmdldD1pPT09YS50YXJnZXQ/ZC50b0VsZW1lbnQ6aSksIWEud2hpY2gmJmghPT1iJiYoYS53aGljaD1oJjE/MTpoJjI/MzpoJjQ/MjowKTtyZXR1cm4gYX19LGZpeDpmdW5jdGlvbihhKXtpZihhW2YuZXhwYW5kb10pcmV0dXJuIGE7dmFyIGQsZSxnPWEsaD1mLmV2ZW50LmZpeEhvb2tzW2EudHlwZV18fHt9LGk9aC5wcm9wcz90aGlzLnByb3BzLmNvbmNhdChoLnByb3BzKTp0aGlzLnByb3BzO2E9Zi5FdmVudChnKTtmb3IoZD1pLmxlbmd0aDtkOyllPWlbLS1kXSxhW2VdPWdbZV07YS50YXJnZXR8fChhLnRhcmdldD1nLnNyY0VsZW1lbnR8fGMpLGEudGFyZ2V0Lm5vZGVUeXBlPT09MyYmKGEudGFyZ2V0PWEudGFyZ2V0LnBhcmVudE5vZGUpLGEubWV0YUtleT09PWImJihhLm1ldGFLZXk9YS5jdHJsS2V5KTtyZXR1cm4gaC5maWx0ZXI/aC5maWx0ZXIoYSxnKTphfSxzcGVjaWFsOntyZWFkeTp7c2V0dXA6Zi5iaW5kUmVhZHl9LGxvYWQ6e25vQnViYmxlOiEwfSxmb2N1czp7ZGVsZWdhdGVUeXBlOiJmb2N1c2luIn0sYmx1cjp7ZGVsZWdhdGVUeXBlOiJmb2N1c291dCJ9LGJlZm9yZXVubG9hZDp7c2V0dXA6ZnVuY3Rpb24oYSxiLGMpe2YuaXNXaW5kb3codGhpcykmJih0aGlzLm9uYmVmb3JldW5sb2FkPWMpfSx0ZWFyZG93bjpmdW5jdGlvbihhLGIpe3RoaXMub25iZWZvcmV1bmxvYWQ9PT1iJiYodGhpcy5vbmJlZm9yZXVubG9hZD1udWxsKX19fSxzaW11bGF0ZTpmdW5jdGlvbihhLGIsYyxkKXt2YXIgZT1mLmV4dGVuZChuZXcgZi5FdmVudCxjLHt0eXBlOmEsaXNTaW11bGF0ZWQ6ITAsb3JpZ2luYWxFdmVudDp7fX0pO2Q/Zi5ldmVudC50cmlnZ2VyKGUsbnVsbCxiKTpmLmV2ZW50LmRpc3BhdGNoLmNhbGwoYixlKSxlLmlzRGVmYXVsdFByZXZlbnRlZCgpJiZjLnByZXZlbnREZWZhdWx0KCl9fSxmLmV2ZW50LmhhbmRsZT1mLmV2ZW50LmRpc3BhdGNoLGYucmVtb3ZlRXZlbnQ9Yy5yZW1vdmVFdmVudExpc3RlbmVyP2Z1bmN0aW9uKGEsYixjKXthLnJlbW92ZUV2ZW50TGlzdGVuZXImJmEucmVtb3ZlRXZlbnRMaXN0ZW5lcihiLGMsITEpfTpmdW5jdGlvbihhLGIsYyl7YS5kZXRhY2hFdmVudCYmYS5kZXRhY2hFdmVudCgib24iK2IsYyl9LGYuRXZlbnQ9ZnVuY3Rpb24oYSxiKXtpZighKHRoaXMgaW5zdGFuY2VvZiBmLkV2ZW50KSlyZXR1cm4gbmV3IGYuRXZlbnQoYSxiKTthJiZhLnR5cGU/KHRoaXMub3JpZ2luYWxFdmVudD1hLHRoaXMudHlwZT1hLnR5cGUsdGhpcy5pc0RlZmF1bHRQcmV2ZW50ZWQ9YS5kZWZhdWx0UHJldmVudGVkfHxhLnJldHVyblZhbHVlPT09ITF8fGEuZ2V0UHJldmVudERlZmF1bHQmJmEuZ2V0UHJldmVudERlZmF1bHQoKT9LOkopOnRoaXMudHlwZT1hLGImJmYuZXh0ZW5kKHRoaXMsYiksdGhpcy50aW1lU3RhbXA9YSYmYS50aW1lU3RhbXB8fGYubm93KCksdGhpc1tmLmV4cGFuZG9dPSEwfSxmLkV2ZW50LnByb3RvdHlwZT17cHJldmVudERlZmF1bHQ6ZnVuY3Rpb24oKXt0aGlzLmlzRGVmYXVsdFByZXZlbnRlZD1LO3ZhciBhPXRoaXMub3JpZ2luYWxFdmVudDshYXx8KGEucHJldmVudERlZmF1bHQ/YS5wcmV2ZW50RGVmYXVsdCgpOmEucmV0dXJuVmFsdWU9ITEpfSxzdG9wUHJvcGFnYXRpb246ZnVuY3Rpb24oKXt0aGlzLmlzUHJvcGFnYXRpb25TdG9wcGVkPUs7dmFyIGE9dGhpcy5vcmlnaW5hbEV2ZW50OyFhfHwoYS5zdG9wUHJvcGFnYXRpb24mJmEuc3RvcFByb3BhZ2F0aW9uKCksYS5jYW5jZWxCdWJibGU9ITApfSxzdG9wSW1tZWRpYXRlUHJvcGFnYXRpb246ZnVuY3Rpb24oKXt0aGlzLmlzSW1tZWRpYXRlUHJvcGFnYXRpb25TdG9wcGVkPUssdGhpcy5zdG9wUHJvcGFnYXRpb24oKX0saXNEZWZhdWx0UHJldmVudGVkOkosaXNQcm9wYWdhdGlvblN0b3BwZWQ6Sixpc0ltbWVkaWF0ZVByb3BhZ2F0aW9uU3RvcHBlZDpKfSxmLmVhY2goe21vdXNlZW50ZXI6Im1vdXNlb3ZlciIsbW91c2VsZWF2ZToibW91c2VvdXQifSxmdW5jdGlvbihhLGIpe2YuZXZlbnQuc3BlY2lhbFthXT17ZGVsZWdhdGVUeXBlOmIsYmluZFR5cGU6YixoYW5kbGU6ZnVuY3Rpb24oYSl7dmFyIGM9dGhpcyxkPWEucmVsYXRlZFRhcmdldCxlPWEuaGFuZGxlT2JqLGc9ZS5zZWxlY3RvcixoO2lmKCFkfHxkIT09YyYmIWYuY29udGFpbnMoYyxkKSlhLnR5cGU9ZS5vcmlnVHlwZSxoPWUuaGFuZGxlci5hcHBseSh0aGlzLGFyZ3VtZW50cyksYS50eXBlPWI7cmV0dXJuIGh9fX0pLGYuc3VwcG9ydC5zdWJtaXRCdWJibGVzfHwoZi5ldmVudC5zcGVjaWFsLnN1Ym1pdD17c2V0dXA6ZnVuY3Rpb24oKXtpZihmLm5vZGVOYW1lKHRoaXMsImZvcm0iKSlyZXR1cm4hMTtmLmV2ZW50LmFkZCh0aGlzLCJjbGljay5fc3VibWl0IGtleXByZXNzLl9zdWJtaXQiLGZ1bmN0aW9uKGEpe3ZhciBjPWEudGFyZ2V0LGQ9Zi5ub2RlTmFtZShjLCJpbnB1dCIpfHxmLm5vZGVOYW1lKGMsImJ1dHRvbiIpP2MuZm9ybTpiO2QmJiFkLl9zdWJtaXRfYXR0YWNoZWQmJihmLmV2ZW50LmFkZChkLCJzdWJtaXQuX3N1Ym1pdCIsZnVuY3Rpb24oYSl7dGhpcy5wYXJlbnROb2RlJiYhYS5pc1RyaWdnZXImJmYuZXZlbnQuc2ltdWxhdGUoInN1Ym1pdCIsdGhpcy5wYXJlbnROb2RlLGEsITApfSksZC5fc3VibWl0X2F0dGFjaGVkPSEwKX0pfSx0ZWFyZG93bjpmdW5jdGlvbigpe2lmKGYubm9kZU5hbWUodGhpcywiZm9ybSIpKXJldHVybiExO2YuZXZlbnQucmVtb3ZlKHRoaXMsIi5fc3VibWl0Iil9fSksZi5zdXBwb3J0LmNoYW5nZUJ1YmJsZXN8fChmLmV2ZW50LnNwZWNpYWwuY2hhbmdlPXtzZXR1cDpmdW5jdGlvbigpe2lmKHoudGVzdCh0aGlzLm5vZGVOYW1lKSl7aWYodGhpcy50eXBlPT09ImNoZWNrYm94Inx8dGhpcy50eXBlPT09InJhZGlvIilmLmV2ZW50LmFkZCh0aGlzLCJwcm9wZXJ0eWNoYW5nZS5fY2hhbmdlIixmdW5jdGlvbihhKXthLm9yaWdpbmFsRXZlbnQucHJvcGVydHlOYW1lPT09ImNoZWNrZWQiJiYodGhpcy5fanVzdF9jaGFuZ2VkPSEwKX0pLGYuZXZlbnQuYWRkKHRoaXMsImNsaWNrLl9jaGFuZ2UiLGZ1bmN0aW9uKGEpe3RoaXMuX2p1c3RfY2hhbmdlZCYmIWEuaXNUcmlnZ2VyJiYodGhpcy5fanVzdF9jaGFuZ2VkPSExLGYuZXZlbnQuc2ltdWxhdGUoImNoYW5nZSIsdGhpcyxhLCEwKSl9KTtyZXR1cm4hMX1mLmV2ZW50LmFkZCh0aGlzLCJiZWZvcmVhY3RpdmF0ZS5fY2hhbmdlIixmdW5jdGlvbihhKXt2YXIgYj1hLnRhcmdldDt6LnRlc3QoYi5ub2RlTmFtZSkmJiFiLl9jaGFuZ2VfYXR0YWNoZWQmJihmLmV2ZW50LmFkZChiLCJjaGFuZ2UuX2NoYW5nZSIsZnVuY3Rpb24oYSl7dGhpcy5wYXJlbnROb2RlJiYhYS5pc1NpbXVsYXRlZCYmIWEuaXNUcmlnZ2VyJiZmLmV2ZW50LnNpbXVsYXRlKCJjaGFuZ2UiLHRoaXMucGFyZW50Tm9kZSxhLCEwKX0pLGIuX2NoYW5nZV9hdHRhY2hlZD0hMCl9KX0saGFuZGxlOmZ1bmN0aW9uKGEpe3ZhciBiPWEudGFyZ2V0O2lmKHRoaXMhPT1ifHxhLmlzU2ltdWxhdGVkfHxhLmlzVHJpZ2dlcnx8Yi50eXBlIT09InJhZGlvIiYmYi50eXBlIT09ImNoZWNrYm94IilyZXR1cm4gYS5oYW5kbGVPYmouaGFuZGxlci5hcHBseSh0aGlzLGFyZ3VtZW50cyl9LHRlYXJkb3duOmZ1bmN0aW9uKCl7Zi5ldmVudC5yZW1vdmUodGhpcywiLl9jaGFuZ2UiKTtyZXR1cm4gei50ZXN0KHRoaXMubm9kZU5hbWUpfX0pLGYuc3VwcG9ydC5mb2N1c2luQnViYmxlc3x8Zi5lYWNoKHtmb2N1czoiZm9jdXNpbiIsYmx1cjoiZm9jdXNvdXQifSxmdW5jdGlvbihhLGIpe3ZhciBkPTAsZT1mdW5jdGlvbihhKXtmLmV2ZW50LnNpbXVsYXRlKGIsYS50YXJnZXQsZi5ldmVudC5maXgoYSksITApfTtmLmV2ZW50LnNwZWNpYWxbYl09e3NldHVwOmZ1bmN0aW9uKCl7ZCsrPT09MCYmYy5hZGRFdmVudExpc3RlbmVyKGEsZSwhMCl9LHRlYXJkb3duOmZ1bmN0aW9uKCl7LS1kPT09MCYmYy5yZW1vdmVFdmVudExpc3RlbmVyKGEsZSwhMCl9fX0pLGYuZm4uZXh0ZW5kKHtvbjpmdW5jdGlvbihhLGMsZCxlLGcpe3ZhciBoLGk7aWYodHlwZW9mIGE9PSJvYmplY3QiKXt0eXBlb2YgYyE9InN0cmluZyImJihkPWMsYz1iKTtmb3IoaSBpbiBhKXRoaXMub24oaSxjLGQsYVtpXSxnKTtyZXR1cm4gdGhpc31kPT1udWxsJiZlPT1udWxsPyhlPWMsZD1jPWIpOmU9PW51bGwmJih0eXBlb2YgYz09InN0cmluZyI/KGU9ZCxkPWIpOihlPWQsZD1jLGM9YikpO2lmKGU9PT0hMSllPUo7ZWxzZSBpZighZSlyZXR1cm4gdGhpcztnPT09MSYmKGg9ZSxlPWZ1bmN0aW9uKGEpe2YoKS5vZmYoYSk7cmV0dXJuIGguYXBwbHkodGhpcyxhcmd1bWVudHMpfSxlLmd1aWQ9aC5ndWlkfHwoaC5ndWlkPWYuZ3VpZCsrKSk7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe2YuZXZlbnQuYWRkKHRoaXMsYSxlLGQsYyl9KX0sb25lOmZ1bmN0aW9uKGEsYixjLGQpe3JldHVybiB0aGlzLm9uLmNhbGwodGhpcyxhLGIsYyxkLDEpfSxvZmY6ZnVuY3Rpb24oYSxjLGQpe2lmKGEmJmEucHJldmVudERlZmF1bHQmJmEuaGFuZGxlT2JqKXt2YXIgZT1hLmhhbmRsZU9iajtmKGEuZGVsZWdhdGVUYXJnZXQpLm9mZihlLm5hbWVzcGFjZT9lLnR5cGUrIi4iK2UubmFtZXNwYWNlOmUudHlwZSxlLnNlbGVjdG9yLGUuaGFuZGxlcik7cmV0dXJuIHRoaXN9aWYodHlwZW9mIGE9PSJvYmplY3QiKXtmb3IodmFyIGcgaW4gYSl0aGlzLm9mZihnLGMsYVtnXSk7cmV0dXJuIHRoaXN9aWYoYz09PSExfHx0eXBlb2YgYz09ImZ1bmN0aW9uIilkPWMsYz1iO2Q9PT0hMSYmKGQ9Sik7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe2YuZXZlbnQucmVtb3ZlKHRoaXMsYSxkLGMpfSl9LGJpbmQ6ZnVuY3Rpb24oYSxiLGMpe3JldHVybiB0aGlzLm9uKGEsbnVsbCxiLGMpfSx1bmJpbmQ6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gdGhpcy5vZmYoYSxudWxsLGIpfSxsaXZlOmZ1bmN0aW9uKGEsYixjKXtmKHRoaXMuY29udGV4dCkub24oYSx0aGlzLnNlbGVjdG9yLGIsYyk7cmV0dXJuIHRoaXN9LGRpZTpmdW5jdGlvbihhLGIpe2YodGhpcy5jb250ZXh0KS5vZmYoYSx0aGlzLnNlbGVjdG9yfHwiKioiLGIpO3JldHVybiB0aGlzfSxkZWxlZ2F0ZTpmdW5jdGlvbihhLGIsYyxkKXtyZXR1cm4gdGhpcy5vbihiLGEsYyxkKX0sdW5kZWxlZ2F0ZTpmdW5jdGlvbihhLGIsYyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg9PTE/dGhpcy5vZmYoYSwiKioiKTp0aGlzLm9mZihiLGEsYyl9LHRyaWdnZXI6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7Zi5ldmVudC50cmlnZ2VyKGEsYix0aGlzKX0pfSx0cmlnZ2VySGFuZGxlcjpmdW5jdGlvbihhLGIpe2lmKHRoaXNbMF0pcmV0dXJuIGYuZXZlbnQudHJpZ2dlcihhLGIsdGhpc1swXSwhMCl9LHRvZ2dsZTpmdW5jdGlvbihhKXt2YXIgYj1hcmd1bWVudHMsYz1hLmd1aWR8fGYuZ3VpZCsrLGQ9MCxlPWZ1bmN0aW9uKGMpe3ZhciBlPShmLl9kYXRhKHRoaXMsImxhc3RUb2dnbGUiK2EuZ3VpZCl8fDApJWQ7Zi5fZGF0YSh0aGlzLCJsYXN0VG9nZ2xlIithLmd1aWQsZSsxKSxjLnByZXZlbnREZWZhdWx0KCk7cmV0dXJuIGJbZV0uYXBwbHkodGhpcyxhcmd1bWVudHMpfHwhMX07ZS5ndWlkPWM7d2hpbGUoZDxiLmxlbmd0aCliW2QrK10uZ3VpZD1jO3JldHVybiB0aGlzLmNsaWNrKGUpfSxob3ZlcjpmdW5jdGlvbihhLGIpe3JldHVybiB0aGlzLm1vdXNlZW50ZXIoYSkubW91c2VsZWF2ZShifHxhKX19KSxmLmVhY2goImJsdXIgZm9jdXMgZm9jdXNpbiBmb2N1c291dCBsb2FkIHJlc2l6ZSBzY3JvbGwgdW5sb2FkIGNsaWNrIGRibGNsaWNrIG1vdXNlZG93biBtb3VzZXVwIG1vdXNlbW92ZSBtb3VzZW92ZXIgbW91c2VvdXQgbW91c2VlbnRlciBtb3VzZWxlYXZlIGNoYW5nZSBzZWxlY3Qgc3VibWl0IGtleWRvd24ga2V5cHJlc3Mga2V5dXAgZXJyb3IgY29udGV4dG1lbnUiLnNwbGl0KCIgIiksZnVuY3Rpb24oYSxiKXtmLmZuW2JdPWZ1bmN0aW9uKGEsYyl7Yz09bnVsbCYmKGM9YSxhPW51bGwpO3JldHVybiBhcmd1bWVudHMubGVuZ3RoPjA/dGhpcy5vbihiLG51bGwsYSxjKTp0aGlzLnRyaWdnZXIoYil9LGYuYXR0ckZuJiYoZi5hdHRyRm5bYl09ITApLEMudGVzdChiKSYmKGYuZXZlbnQuZml4SG9va3NbYl09Zi5ldmVudC5rZXlIb29rcyksRC50ZXN0KGIpJiYoZi5ldmVudC5maXhIb29rc1tiXT1mLmV2ZW50Lm1vdXNlSG9va3MpfSksZnVuY3Rpb24oKXtmdW5jdGlvbiB4KGEsYixjLGUsZixnKXtmb3IodmFyIGg9MCxpPWUubGVuZ3RoO2g8aTtoKyspe3ZhciBqPWVbaF07aWYoail7dmFyIGs9ITE7aj1qW2FdO3doaWxlKGope2lmKGpbZF09PT1jKXtrPWVbai5zaXpzZXRdO2JyZWFrfWlmKGoubm9kZVR5cGU9PT0xKXtnfHwoaltkXT1jLGouc2l6c2V0PWgpO2lmKHR5cGVvZiBiIT0ic3RyaW5nIil7aWYoaj09PWIpe2s9ITA7YnJlYWt9fWVsc2UgaWYobS5maWx0ZXIoYixbal0pLmxlbmd0aD4wKXtrPWo7YnJlYWt9fWo9althXX1lW2hdPWt9fX1mdW5jdGlvbiB3KGEsYixjLGUsZixnKXtmb3IodmFyIGg9MCxpPWUubGVuZ3RoO2g8aTtoKyspe3ZhciBqPWVbaF07aWYoail7dmFyIGs9ITE7aj1qW2FdO3doaWxlKGope2lmKGpbZF09PT1jKXtrPWVbai5zaXpzZXRdO2JyZWFrfWoubm9kZVR5cGU9PT0xJiYhZyYmKGpbZF09YyxqLnNpenNldD1oKTtpZihqLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk9PT1iKXtrPWo7YnJlYWt9aj1qW2FdfWVbaF09a319fXZhciBhPS8oKD86XCgoPzpcKFteKCldK1wpfFteKCldKykrXCl8XFsoPzpcW1teXFtcXV0qXF18WyciXVteJyJdKlsnIl18W15cW1xdJyJdKykrXF18XFwufFteID4rfiwoXFtcXF0rKSt8Wz4rfl0pKFxzKixccyopPygoPzoufFxyfFxuKSopL2csZD0ic2l6Y2FjaGUiKyhNYXRoLnJhbmRvbSgpKyIiKS5yZXBsYWNlKCIuIiwiIiksZT0wLGc9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZyxoPSExLGk9ITAsaj0vXFwvZyxrPS9cclxuL2csbD0vXFcvO1swLDBdLnNvcnQoZnVuY3Rpb24oKXtpPSExO3JldHVybiAwfSk7dmFyIG09ZnVuY3Rpb24oYixkLGUsZil7ZT1lfHxbXSxkPWR8fGM7dmFyIGg9ZDtpZihkLm5vZGVUeXBlIT09MSYmZC5ub2RlVHlwZSE9PTkpcmV0dXJuW107aWYoIWJ8fHR5cGVvZiBiIT0ic3RyaW5nIilyZXR1cm4gZTt2YXIgaSxqLGssbCxuLHEscix0LHU9ITAsdj1tLmlzWE1MKGQpLHc9W10seD1iO2Rve2EuZXhlYygiIiksaT1hLmV4ZWMoeCk7aWYoaSl7eD1pWzNdLHcucHVzaChpWzFdKTtpZihpWzJdKXtsPWlbM107YnJlYWt9fX13aGlsZShpKTtpZih3Lmxlbmd0aD4xJiZwLmV4ZWMoYikpaWYody5sZW5ndGg9PT0yJiZvLnJlbGF0aXZlW3dbMF1dKWo9eSh3WzBdK3dbMV0sZCxmKTtlbHNle2o9by5yZWxhdGl2ZVt3WzBdXT9bZF06bSh3LnNoaWZ0KCksZCk7d2hpbGUody5sZW5ndGgpYj13LnNoaWZ0KCksby5yZWxhdGl2ZVtiXSYmKGIrPXcuc2hpZnQoKSksaj15KGIsaixmKX1lbHNleyFmJiZ3Lmxlbmd0aD4xJiZkLm5vZGVUeXBlPT09OSYmIXYmJm8ubWF0Y2guSUQudGVzdCh3WzBdKSYmIW8ubWF0Y2guSUQudGVzdCh3W3cubGVuZ3RoLTFdKSYmKG49bS5maW5kKHcuc2hpZnQoKSxkLHYpLGQ9bi5leHByP20uZmlsdGVyKG4uZXhwcixuLnNldClbMF06bi5zZXRbMF0pO2lmKGQpe249Zj97ZXhwcjp3LnBvcCgpLHNldDpzKGYpfTptLmZpbmQody5wb3AoKSx3Lmxlbmd0aD09PTEmJih3WzBdPT09In4ifHx3WzBdPT09IisiKSYmZC5wYXJlbnROb2RlP2QucGFyZW50Tm9kZTpkLHYpLGo9bi5leHByP20uZmlsdGVyKG4uZXhwcixuLnNldCk6bi5zZXQsdy5sZW5ndGg+MD9rPXMoaik6dT0hMTt3aGlsZSh3Lmxlbmd0aClxPXcucG9wKCkscj1xLG8ucmVsYXRpdmVbcV0/cj13LnBvcCgpOnE9IiIscj09bnVsbCYmKHI9ZCksby5yZWxhdGl2ZVtxXShrLHIsdil9ZWxzZSBrPXc9W119a3x8KGs9aiksa3x8bS5lcnJvcihxfHxiKTtpZihnLmNhbGwoayk9PT0iW29iamVjdCBBcnJheV0iKWlmKCF1KWUucHVzaC5hcHBseShlLGspO2Vsc2UgaWYoZCYmZC5ub2RlVHlwZT09PTEpZm9yKHQ9MDtrW3RdIT1udWxsO3QrKylrW3RdJiYoa1t0XT09PSEwfHxrW3RdLm5vZGVUeXBlPT09MSYmbS5jb250YWlucyhkLGtbdF0pKSYmZS5wdXNoKGpbdF0pO2Vsc2UgZm9yKHQ9MDtrW3RdIT1udWxsO3QrKylrW3RdJiZrW3RdLm5vZGVUeXBlPT09MSYmZS5wdXNoKGpbdF0pO2Vsc2UgcyhrLGUpO2wmJihtKGwsaCxlLGYpLG0udW5pcXVlU29ydChlKSk7cmV0dXJuIGV9O20udW5pcXVlU29ydD1mdW5jdGlvbihhKXtpZih1KXtoPWksYS5zb3J0KHUpO2lmKGgpZm9yKHZhciBiPTE7YjxhLmxlbmd0aDtiKyspYVtiXT09PWFbYi0xXSYmYS5zcGxpY2UoYi0tLDEpfXJldHVybiBhfSxtLm1hdGNoZXM9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gbShhLG51bGwsbnVsbCxiKX0sbS5tYXRjaGVzU2VsZWN0b3I9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gbShiLG51bGwsbnVsbCxbYV0pLmxlbmd0aD4wfSxtLmZpbmQ9ZnVuY3Rpb24oYSxiLGMpe3ZhciBkLGUsZixnLGgsaTtpZighYSlyZXR1cm5bXTtmb3IoZT0wLGY9by5vcmRlci5sZW5ndGg7ZTxmO2UrKyl7aD1vLm9yZGVyW2VdO2lmKGc9by5sZWZ0TWF0Y2hbaF0uZXhlYyhhKSl7aT1nWzFdLGcuc3BsaWNlKDEsMSk7aWYoaS5zdWJzdHIoaS5sZW5ndGgtMSkhPT0iXFwiKXtnWzFdPShnWzFdfHwiIikucmVwbGFjZShqLCIiKSxkPW8uZmluZFtoXShnLGIsYyk7aWYoZCE9bnVsbCl7YT1hLnJlcGxhY2Uoby5tYXRjaFtoXSwiIik7YnJlYWt9fX19ZHx8KGQ9dHlwZW9mIGIuZ2V0RWxlbWVudHNCeVRhZ05hbWUhPSJ1bmRlZmluZWQiP2IuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIioiKTpbXSk7cmV0dXJue3NldDpkLGV4cHI6YX19LG0uZmlsdGVyPWZ1bmN0aW9uKGEsYyxkLGUpe3ZhciBmLGcsaCxpLGosayxsLG4scCxxPWEscj1bXSxzPWMsdD1jJiZjWzBdJiZtLmlzWE1MKGNbMF0pO3doaWxlKGEmJmMubGVuZ3RoKXtmb3IoaCBpbiBvLmZpbHRlcilpZigoZj1vLmxlZnRNYXRjaFtoXS5leGVjKGEpKSE9bnVsbCYmZlsyXSl7az1vLmZpbHRlcltoXSxsPWZbMV0sZz0hMSxmLnNwbGljZSgxLDEpO2lmKGwuc3Vic3RyKGwubGVuZ3RoLTEpPT09IlxcIiljb250aW51ZTtzPT09ciYmKHI9W10pO2lmKG8ucHJlRmlsdGVyW2hdKXtmPW8ucHJlRmlsdGVyW2hdKGYscyxkLHIsZSx0KTtpZighZilnPWk9ITA7ZWxzZSBpZihmPT09ITApY29udGludWV9aWYoZilmb3Iobj0wOyhqPXNbbl0pIT1udWxsO24rKylqJiYoaT1rKGosZixuLHMpLHA9ZV5pLGQmJmkhPW51bGw/cD9nPSEwOnNbbl09ITE6cCYmKHIucHVzaChqKSxnPSEwKSk7aWYoaSE9PWIpe2R8fChzPXIpLGE9YS5yZXBsYWNlKG8ubWF0Y2hbaF0sIiIpO2lmKCFnKXJldHVybltdO2JyZWFrfX1pZihhPT09cSlpZihnPT1udWxsKW0uZXJyb3IoYSk7ZWxzZSBicmVhaztxPWF9cmV0dXJuIHN9LG0uZXJyb3I9ZnVuY3Rpb24oYSl7dGhyb3cgbmV3IEVycm9yKCJTeW50YXggZXJyb3IsIHVucmVjb2duaXplZCBleHByZXNzaW9uOiAiK2EpfTt2YXIgbj1tLmdldFRleHQ9ZnVuY3Rpb24oYSl7dmFyIGIsYyxkPWEubm9kZVR5cGUsZT0iIjtpZihkKXtpZihkPT09MXx8ZD09PTkpe2lmKHR5cGVvZiBhLnRleHRDb250ZW50PT0ic3RyaW5nIilyZXR1cm4gYS50ZXh0Q29udGVudDtpZih0eXBlb2YgYS5pbm5lclRleHQ9PSJzdHJpbmciKXJldHVybiBhLmlubmVyVGV4dC5yZXBsYWNlKGssIiIpO2ZvcihhPWEuZmlyc3RDaGlsZDthO2E9YS5uZXh0U2libGluZyllKz1uKGEpfWVsc2UgaWYoZD09PTN8fGQ9PT00KXJldHVybiBhLm5vZGVWYWx1ZX1lbHNlIGZvcihiPTA7Yz1hW2JdO2IrKyljLm5vZGVUeXBlIT09OCYmKGUrPW4oYykpO3JldHVybiBlfSxvPW0uc2VsZWN0b3JzPXtvcmRlcjpbIklEIiwiTkFNRSIsIlRBRyJdLG1hdGNoOntJRDovIygoPzpbXHdcdTAwYzAtXHVGRkZGXC1dfFxcLikrKS8sQ0xBU1M6L1wuKCg/Oltcd1x1MDBjMC1cdUZGRkZcLV18XFwuKSspLyxOQU1FOi9cW25hbWU9WyciXSooKD86W1x3XHUwMGMwLVx1RkZGRlwtXXxcXC4pKylbJyJdKlxdLyxBVFRSOi9cW1xzKigoPzpbXHdcdTAwYzAtXHVGRkZGXC1dfFxcLikrKVxzKig/OihcUz89KVxzKig/OihbJyJdKSguKj8pXDN8KCM/KD86W1x3XHUwMGMwLVx1RkZGRlwtXXxcXC4pKil8KXwpXHMqXF0vLFRBRzovXigoPzpbXHdcdTAwYzAtXHVGRkZGXCpcLV18XFwuKSspLyxDSElMRDovOihvbmx5fG50aHxsYXN0fGZpcnN0KS1jaGlsZCg/OlwoXHMqKGV2ZW58b2RkfCg/OlsrXC1dP1xkK3woPzpbK1wtXT9cZCopP25ccyooPzpbK1wtXVxzKlxkKyk/KSlccypcKSk/LyxQT1M6LzoobnRofGVxfGd0fGx0fGZpcnN0fGxhc3R8ZXZlbnxvZGQpKD86XCgoXGQqKVwpKT8oPz1bXlwtXXwkKS8sUFNFVURPOi86KCg/Oltcd1x1MDBjMC1cdUZGRkZcLV18XFwuKSspKD86XCgoWyciXT8pKCg/OlwoW15cKV0rXCl8W15cKFwpXSopKylcMlwpKT8vfSxsZWZ0TWF0Y2g6e30sYXR0ck1hcDp7ImNsYXNzIjoiY2xhc3NOYW1lIiwiZm9yIjoiaHRtbEZvciJ9LGF0dHJIYW5kbGU6e2hyZWY6ZnVuY3Rpb24oYSl7cmV0dXJuIGEuZ2V0QXR0cmlidXRlKCJocmVmIil9LHR5cGU6ZnVuY3Rpb24oYSl7cmV0dXJuIGEuZ2V0QXR0cmlidXRlKCJ0eXBlIil9fSxyZWxhdGl2ZTp7IisiOmZ1bmN0aW9uKGEsYil7dmFyIGM9dHlwZW9mIGI9PSJzdHJpbmciLGQ9YyYmIWwudGVzdChiKSxlPWMmJiFkO2QmJihiPWIudG9Mb3dlckNhc2UoKSk7Zm9yKHZhciBmPTAsZz1hLmxlbmd0aCxoO2Y8ZztmKyspaWYoaD1hW2ZdKXt3aGlsZSgoaD1oLnByZXZpb3VzU2libGluZykmJmgubm9kZVR5cGUhPT0xKTthW2ZdPWV8fGgmJmgubm9kZU5hbWUudG9Mb3dlckNhc2UoKT09PWI/aHx8ITE6aD09PWJ9ZSYmbS5maWx0ZXIoYixhLCEwKX0sIj4iOmZ1bmN0aW9uKGEsYil7dmFyIGMsZD10eXBlb2YgYj09InN0cmluZyIsZT0wLGY9YS5sZW5ndGg7aWYoZCYmIWwudGVzdChiKSl7Yj1iLnRvTG93ZXJDYXNlKCk7Zm9yKDtlPGY7ZSsrKXtjPWFbZV07aWYoYyl7dmFyIGc9Yy5wYXJlbnROb2RlO2FbZV09Zy5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpPT09Yj9nOiExfX19ZWxzZXtmb3IoO2U8ZjtlKyspYz1hW2VdLGMmJihhW2VdPWQ/Yy5wYXJlbnROb2RlOmMucGFyZW50Tm9kZT09PWIpO2QmJm0uZmlsdGVyKGIsYSwhMCl9fSwiIjpmdW5jdGlvbihhLGIsYyl7dmFyIGQsZj1lKyssZz14O3R5cGVvZiBiPT0ic3RyaW5nIiYmIWwudGVzdChiKSYmKGI9Yi50b0xvd2VyQ2FzZSgpLGQ9YixnPXcpLGcoInBhcmVudE5vZGUiLGIsZixhLGQsYyl9LCJ+IjpmdW5jdGlvbihhLGIsYyl7dmFyIGQsZj1lKyssZz14O3R5cGVvZiBiPT0ic3RyaW5nIiYmIWwudGVzdChiKSYmKGI9Yi50b0xvd2VyQ2FzZSgpLGQ9YixnPXcpLGcoInByZXZpb3VzU2libGluZyIsYixmLGEsZCxjKX19LGZpbmQ6e0lEOmZ1bmN0aW9uKGEsYixjKXtpZih0eXBlb2YgYi5nZXRFbGVtZW50QnlJZCE9InVuZGVmaW5lZCImJiFjKXt2YXIgZD1iLmdldEVsZW1lbnRCeUlkKGFbMV0pO3JldHVybiBkJiZkLnBhcmVudE5vZGU/W2RdOltdfX0sTkFNRTpmdW5jdGlvbihhLGIpe2lmKHR5cGVvZiBiLmdldEVsZW1lbnRzQnlOYW1lIT0idW5kZWZpbmVkIil7dmFyIGM9W10sZD1iLmdldEVsZW1lbnRzQnlOYW1lKGFbMV0pO2Zvcih2YXIgZT0wLGY9ZC5sZW5ndGg7ZTxmO2UrKylkW2VdLmdldEF0dHJpYnV0ZSgibmFtZSIpPT09YVsxXSYmYy5wdXNoKGRbZV0pO3JldHVybiBjLmxlbmd0aD09PTA/bnVsbDpjfX0sVEFHOmZ1bmN0aW9uKGEsYil7aWYodHlwZW9mIGIuZ2V0RWxlbWVudHNCeVRhZ05hbWUhPSJ1bmRlZmluZWQiKXJldHVybiBiLmdldEVsZW1lbnRzQnlUYWdOYW1lKGFbMV0pfX0scHJlRmlsdGVyOntDTEFTUzpmdW5jdGlvbihhLGIsYyxkLGUsZil7YT0iICIrYVsxXS5yZXBsYWNlKGosIiIpKyIgIjtpZihmKXJldHVybiBhO2Zvcih2YXIgZz0wLGg7KGg9YltnXSkhPW51bGw7ZysrKWgmJihlXihoLmNsYXNzTmFtZSYmKCIgIitoLmNsYXNzTmFtZSsiICIpLnJlcGxhY2UoL1tcdFxuXHJdL2csIiAiKS5pbmRleE9mKGEpPj0wKT9jfHxkLnB1c2goaCk6YyYmKGJbZ109ITEpKTtyZXR1cm4hMX0sSUQ6ZnVuY3Rpb24oYSl7cmV0dXJuIGFbMV0ucmVwbGFjZShqLCIiKX0sVEFHOmZ1bmN0aW9uKGEsYil7cmV0dXJuIGFbMV0ucmVwbGFjZShqLCIiKS50b0xvd2VyQ2FzZSgpfSxDSElMRDpmdW5jdGlvbihhKXtpZihhWzFdPT09Im50aCIpe2FbMl18fG0uZXJyb3IoYVswXSksYVsyXT1hWzJdLnJlcGxhY2UoL15cK3xccyovZywiIik7dmFyIGI9LygtPykoXGQqKSg/Om4oWytcLV0/XGQqKSk/Ly5leGVjKGFbMl09PT0iZXZlbiImJiIybiJ8fGFbMl09PT0ib2RkIiYmIjJuKzEifHwhL1xELy50ZXN0KGFbMl0pJiYiMG4rIithWzJdfHxhWzJdKTthWzJdPWJbMV0rKGJbMl18fDEpLTAsYVszXT1iWzNdLTB9ZWxzZSBhWzJdJiZtLmVycm9yKGFbMF0pO2FbMF09ZSsrO3JldHVybiBhfSxBVFRSOmZ1bmN0aW9uKGEsYixjLGQsZSxmKXt2YXIgZz1hWzFdPWFbMV0ucmVwbGFjZShqLCIiKTshZiYmby5hdHRyTWFwW2ddJiYoYVsxXT1vLmF0dHJNYXBbZ10pLGFbNF09KGFbNF18fGFbNV18fCIiKS5yZXBsYWNlKGosIiIpLGFbMl09PT0ifj0iJiYoYVs0XT0iICIrYVs0XSsiICIpO3JldHVybiBhfSxQU0VVRE86ZnVuY3Rpb24oYixjLGQsZSxmKXtpZihiWzFdPT09Im5vdCIpaWYoKGEuZXhlYyhiWzNdKXx8IiIpLmxlbmd0aD4xfHwvXlx3Ly50ZXN0KGJbM10pKWJbM109bShiWzNdLG51bGwsbnVsbCxjKTtlbHNle3ZhciBnPW0uZmlsdGVyKGJbM10sYyxkLCEwXmYpO2R8fGUucHVzaC5hcHBseShlLGcpO3JldHVybiExfWVsc2UgaWYoby5tYXRjaC5QT1MudGVzdChiWzBdKXx8by5tYXRjaC5DSElMRC50ZXN0KGJbMF0pKXJldHVybiEwO3JldHVybiBifSxQT1M6ZnVuY3Rpb24oYSl7YS51bnNoaWZ0KCEwKTtyZXR1cm4gYX19LGZpbHRlcnM6e2VuYWJsZWQ6ZnVuY3Rpb24oYSl7cmV0dXJuIGEuZGlzYWJsZWQ9PT0hMSYmYS50eXBlIT09ImhpZGRlbiJ9LGRpc2FibGVkOmZ1bmN0aW9uKGEpe3JldHVybiBhLmRpc2FibGVkPT09ITB9LGNoZWNrZWQ6ZnVuY3Rpb24oYSl7cmV0dXJuIGEuY2hlY2tlZD09PSEwfSxzZWxlY3RlZDpmdW5jdGlvbihhKXthLnBhcmVudE5vZGUmJmEucGFyZW50Tm9kZS5zZWxlY3RlZEluZGV4O3JldHVybiBhLnNlbGVjdGVkPT09ITB9LHBhcmVudDpmdW5jdGlvbihhKXtyZXR1cm4hIWEuZmlyc3RDaGlsZH0sZW1wdHk6ZnVuY3Rpb24oYSl7cmV0dXJuIWEuZmlyc3RDaGlsZH0saGFzOmZ1bmN0aW9uKGEsYixjKXtyZXR1cm4hIW0oY1szXSxhKS5sZW5ndGh9LGhlYWRlcjpmdW5jdGlvbihhKXtyZXR1cm4vaFxkL2kudGVzdChhLm5vZGVOYW1lKX0sdGV4dDpmdW5jdGlvbihhKXt2YXIgYj1hLmdldEF0dHJpYnV0ZSgidHlwZSIpLGM9YS50eXBlO3JldHVybiBhLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk9PT0iaW5wdXQiJiYidGV4dCI9PT1jJiYoYj09PWN8fGI9PT1udWxsKX0scmFkaW86ZnVuY3Rpb24oYSl7cmV0dXJuIGEubm9kZU5hbWUudG9Mb3dlckNhc2UoKT09PSJpbnB1dCImJiJyYWRpbyI9PT1hLnR5cGV9LGNoZWNrYm94OmZ1bmN0aW9uKGEpe3JldHVybiBhLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk9PT0iaW5wdXQiJiYiY2hlY2tib3giPT09YS50eXBlfSxmaWxlOmZ1bmN0aW9uKGEpe3JldHVybiBhLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk9PT0iaW5wdXQiJiYiZmlsZSI9PT1hLnR5cGV9LHBhc3N3b3JkOmZ1bmN0aW9uKGEpe3JldHVybiBhLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk9PT0iaW5wdXQiJiYicGFzc3dvcmQiPT09YS50eXBlfSxzdWJtaXQ6ZnVuY3Rpb24oYSl7dmFyIGI9YS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO3JldHVybihiPT09ImlucHV0Inx8Yj09PSJidXR0b24iKSYmInN1Ym1pdCI9PT1hLnR5cGV9LGltYWdlOmZ1bmN0aW9uKGEpe3JldHVybiBhLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk9PT0iaW5wdXQiJiYiaW1hZ2UiPT09YS50eXBlfSxyZXNldDpmdW5jdGlvbihhKXt2YXIgYj1hLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7cmV0dXJuKGI9PT0iaW5wdXQifHxiPT09ImJ1dHRvbiIpJiYicmVzZXQiPT09YS50eXBlfSxidXR0b246ZnVuY3Rpb24oYSl7dmFyIGI9YS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO3JldHVybiBiPT09ImlucHV0IiYmImJ1dHRvbiI9PT1hLnR5cGV8fGI9PT0iYnV0dG9uIn0saW5wdXQ6ZnVuY3Rpb24oYSl7cmV0dXJuL2lucHV0fHNlbGVjdHx0ZXh0YXJlYXxidXR0b24vaS50ZXN0KGEubm9kZU5hbWUpfSxmb2N1czpmdW5jdGlvbihhKXtyZXR1cm4gYT09PWEub3duZXJEb2N1bWVudC5hY3RpdmVFbGVtZW50fX0sc2V0RmlsdGVyczp7Zmlyc3Q6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gYj09PTB9LGxhc3Q6ZnVuY3Rpb24oYSxiLGMsZCl7cmV0dXJuIGI9PT1kLmxlbmd0aC0xfSxldmVuOmZ1bmN0aW9uKGEsYil7cmV0dXJuIGIlMj09PTB9LG9kZDpmdW5jdGlvbihhLGIpe3JldHVybiBiJTI9PT0xfSxsdDpmdW5jdGlvbihhLGIsYyl7cmV0dXJuIGI8Y1szXS0wfSxndDpmdW5jdGlvbihhLGIsYyl7cmV0dXJuIGI+Y1szXS0wfSxudGg6ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBjWzNdLTA9PT1ifSxlcTpmdW5jdGlvbihhLGIsYyl7cmV0dXJuIGNbM10tMD09PWJ9fSxmaWx0ZXI6e1BTRVVETzpmdW5jdGlvbihhLGIsYyxkKXt2YXIgZT1iWzFdLGY9by5maWx0ZXJzW2VdO2lmKGYpcmV0dXJuIGYoYSxjLGIsZCk7aWYoZT09PSJjb250YWlucyIpcmV0dXJuKGEudGV4dENvbnRlbnR8fGEuaW5uZXJUZXh0fHxuKFthXSl8fCIiKS5pbmRleE9mKGJbM10pPj0wO2lmKGU9PT0ibm90Iil7dmFyIGc9YlszXTtmb3IodmFyIGg9MCxpPWcubGVuZ3RoO2g8aTtoKyspaWYoZ1toXT09PWEpcmV0dXJuITE7cmV0dXJuITB9bS5lcnJvcihlKX0sQ0hJTEQ6ZnVuY3Rpb24oYSxiKXt2YXIgYyxlLGYsZyxoLGksaixrPWJbMV0sbD1hO3N3aXRjaChrKXtjYXNlIm9ubHkiOmNhc2UiZmlyc3QiOndoaWxlKGw9bC5wcmV2aW91c1NpYmxpbmcpaWYobC5ub2RlVHlwZT09PTEpcmV0dXJuITE7aWYoaz09PSJmaXJzdCIpcmV0dXJuITA7bD1hO2Nhc2UibGFzdCI6d2hpbGUobD1sLm5leHRTaWJsaW5nKWlmKGwubm9kZVR5cGU9PT0xKXJldHVybiExO3JldHVybiEwO2Nhc2UibnRoIjpjPWJbMl0sZT1iWzNdO2lmKGM9PT0xJiZlPT09MClyZXR1cm4hMDtmPWJbMF0sZz1hLnBhcmVudE5vZGU7aWYoZyYmKGdbZF0hPT1mfHwhYS5ub2RlSW5kZXgpKXtpPTA7Zm9yKGw9Zy5maXJzdENoaWxkO2w7bD1sLm5leHRTaWJsaW5nKWwubm9kZVR5cGU9PT0xJiYobC5ub2RlSW5kZXg9KytpKTtnW2RdPWZ9aj1hLm5vZGVJbmRleC1lO3JldHVybiBjPT09MD9qPT09MDpqJWM9PT0wJiZqL2M+PTB9fSxJRDpmdW5jdGlvbihhLGIpe3JldHVybiBhLm5vZGVUeXBlPT09MSYmYS5nZXRBdHRyaWJ1dGUoImlkIik9PT1ifSxUQUc6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gYj09PSIqIiYmYS5ub2RlVHlwZT09PTF8fCEhYS5ub2RlTmFtZSYmYS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpPT09Yn0sQ0xBU1M6ZnVuY3Rpb24oYSxiKXtyZXR1cm4oIiAiKyhhLmNsYXNzTmFtZXx8YS5nZXRBdHRyaWJ1dGUoImNsYXNzIikpKyIgIikuaW5kZXhPZihiKT4tMX0sQVRUUjpmdW5jdGlvbihhLGIpe3ZhciBjPWJbMV0sZD1tLmF0dHI/bS5hdHRyKGEsYyk6by5hdHRySGFuZGxlW2NdP28uYXR0ckhhbmRsZVtjXShhKTphW2NdIT1udWxsP2FbY106YS5nZXRBdHRyaWJ1dGUoYyksZT1kKyIiLGY9YlsyXSxnPWJbNF07cmV0dXJuIGQ9PW51bGw/Zj09PSIhPSI6IWYmJm0uYXR0cj9kIT1udWxsOmY9PT0iPSI/ZT09PWc6Zj09PSIqPSI/ZS5pbmRleE9mKGcpPj0wOmY9PT0ifj0iPygiICIrZSsiICIpLmluZGV4T2YoZyk+PTA6Zz9mPT09IiE9Ij9lIT09ZzpmPT09Il49Ij9lLmluZGV4T2YoZyk9PT0wOmY9PT0iJD0iP2Uuc3Vic3RyKGUubGVuZ3RoLWcubGVuZ3RoKT09PWc6Zj09PSJ8PSI/ZT09PWd8fGUuc3Vic3RyKDAsZy5sZW5ndGgrMSk9PT1nKyItIjohMTplJiZkIT09ITF9LFBPUzpmdW5jdGlvbihhLGIsYyxkKXt2YXIgZT1iWzJdLGY9by5zZXRGaWx0ZXJzW2VdO2lmKGYpcmV0dXJuIGYoYSxjLGIsZCl9fX0scD1vLm1hdGNoLlBPUyxxPWZ1bmN0aW9uKGEsYil7cmV0dXJuIlxcIisoYi0wKzEpfTtmb3IodmFyIHIgaW4gby5tYXRjaClvLm1hdGNoW3JdPW5ldyBSZWdFeHAoby5tYXRjaFtyXS5zb3VyY2UrLyg/IVteXFtdKlxdKSg/IVteXChdKlwpKS8uc291cmNlKSxvLmxlZnRNYXRjaFtyXT1uZXcgUmVnRXhwKC8oXig/Oi58XHJ8XG4pKj8pLy5zb3VyY2Urby5tYXRjaFtyXS5zb3VyY2UucmVwbGFjZSgvXFwoXGQrKS9nLHEpKTt2YXIgcz1mdW5jdGlvbihhLGIpe2E9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYSwwKTtpZihiKXtiLnB1c2guYXBwbHkoYixhKTtyZXR1cm4gYn1yZXR1cm4gYX07dHJ5e0FycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGMuZG9jdW1lbnRFbGVtZW50LmNoaWxkTm9kZXMsMClbMF0ubm9kZVR5cGV9Y2F0Y2godCl7cz1mdW5jdGlvbihhLGIpe3ZhciBjPTAsZD1ifHxbXTtpZihnLmNhbGwoYSk9PT0iW29iamVjdCBBcnJheV0iKUFycmF5LnByb3RvdHlwZS5wdXNoLmFwcGx5KGQsYSk7ZWxzZSBpZih0eXBlb2YgYS5sZW5ndGg9PSJudW1iZXIiKWZvcih2YXIgZT1hLmxlbmd0aDtjPGU7YysrKWQucHVzaChhW2NdKTtlbHNlIGZvcig7YVtjXTtjKyspZC5wdXNoKGFbY10pO3JldHVybiBkfX12YXIgdSx2O2MuZG9jdW1lbnRFbGVtZW50LmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uP3U9ZnVuY3Rpb24oYSxiKXtpZihhPT09Yil7aD0hMDtyZXR1cm4gMH1pZighYS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbnx8IWIuY29tcGFyZURvY3VtZW50UG9zaXRpb24pcmV0dXJuIGEuY29tcGFyZURvY3VtZW50UG9zaXRpb24/LTE6MTtyZXR1cm4gYS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbihiKSY0Py0xOjF9Oih1PWZ1bmN0aW9uKGEsYil7aWYoYT09PWIpe2g9ITA7cmV0dXJuIDB9aWYoYS5zb3VyY2VJbmRleCYmYi5zb3VyY2VJbmRleClyZXR1cm4gYS5zb3VyY2VJbmRleC1iLnNvdXJjZUluZGV4O3ZhciBjLGQsZT1bXSxmPVtdLGc9YS5wYXJlbnROb2RlLGk9Yi5wYXJlbnROb2RlLGo9ZztpZihnPT09aSlyZXR1cm4gdihhLGIpO2lmKCFnKXJldHVybi0xO2lmKCFpKXJldHVybiAxO3doaWxlKGopZS51bnNoaWZ0KGopLGo9ai5wYXJlbnROb2RlO2o9aTt3aGlsZShqKWYudW5zaGlmdChqKSxqPWoucGFyZW50Tm9kZTtjPWUubGVuZ3RoLGQ9Zi5sZW5ndGg7Zm9yKHZhciBrPTA7azxjJiZrPGQ7aysrKWlmKGVba10hPT1mW2tdKXJldHVybiB2KGVba10sZltrXSk7cmV0dXJuIGs9PT1jP3YoYSxmW2tdLC0xKTp2KGVba10sYiwxKX0sdj1mdW5jdGlvbihhLGIsYyl7aWYoYT09PWIpcmV0dXJuIGM7dmFyIGQ9YS5uZXh0U2libGluZzt3aGlsZShkKXtpZihkPT09YilyZXR1cm4tMTtkPWQubmV4dFNpYmxpbmd9cmV0dXJuIDF9KSxmdW5jdGlvbigpe3ZhciBhPWMuY3JlYXRlRWxlbWVudCgiZGl2IiksZD0ic2NyaXB0IisobmV3IERhdGUpLmdldFRpbWUoKSxlPWMuZG9jdW1lbnRFbGVtZW50O2EuaW5uZXJIVE1MPSI8YSBuYW1lPSciK2QrIicvPiIsZS5pbnNlcnRCZWZvcmUoYSxlLmZpcnN0Q2hpbGQpLGMuZ2V0RWxlbWVudEJ5SWQoZCkmJihvLmZpbmQuSUQ9ZnVuY3Rpb24oYSxjLGQpe2lmKHR5cGVvZiBjLmdldEVsZW1lbnRCeUlkIT0idW5kZWZpbmVkIiYmIWQpe3ZhciBlPWMuZ2V0RWxlbWVudEJ5SWQoYVsxXSk7cmV0dXJuIGU/ZS5pZD09PWFbMV18fHR5cGVvZiBlLmdldEF0dHJpYnV0ZU5vZGUhPSJ1bmRlZmluZWQiJiZlLmdldEF0dHJpYnV0ZU5vZGUoImlkIikubm9kZVZhbHVlPT09YVsxXT9bZV06YjpbXX19LG8uZmlsdGVyLklEPWZ1bmN0aW9uKGEsYil7dmFyIGM9dHlwZW9mIGEuZ2V0QXR0cmlidXRlTm9kZSE9InVuZGVmaW5lZCImJmEuZ2V0QXR0cmlidXRlTm9kZSgiaWQiKTtyZXR1cm4gYS5ub2RlVHlwZT09PTEmJmMmJmMubm9kZVZhbHVlPT09Yn0pLGUucmVtb3ZlQ2hpbGQoYSksZT1hPW51bGx9KCksZnVuY3Rpb24oKXt2YXIgYT1jLmNyZWF0ZUVsZW1lbnQoImRpdiIpO2EuYXBwZW5kQ2hpbGQoYy5jcmVhdGVDb21tZW50KCIiKSksYS5nZXRFbGVtZW50c0J5VGFnTmFtZSgiKiIpLmxlbmd0aD4wJiYoby5maW5kLlRBRz1mdW5jdGlvbihhLGIpe3ZhciBjPWIuZ2V0RWxlbWVudHNCeVRhZ05hbWUoYVsxXSk7aWYoYVsxXT09PSIqIil7dmFyIGQ9W107Zm9yKHZhciBlPTA7Y1tlXTtlKyspY1tlXS5ub2RlVHlwZT09PTEmJmQucHVzaChjW2VdKTtjPWR9cmV0dXJuIGN9KSxhLmlubmVySFRNTD0iPGEgaHJlZj0nIyc+PC9hPiIsYS5maXJzdENoaWxkJiZ0eXBlb2YgYS5maXJzdENoaWxkLmdldEF0dHJpYnV0ZSE9InVuZGVmaW5lZCImJmEuZmlyc3RDaGlsZC5nZXRBdHRyaWJ1dGUoImhyZWYiKSE9PSIjIiYmKG8uYXR0ckhhbmRsZS5ocmVmPWZ1bmN0aW9uKGEpe3JldHVybiBhLmdldEF0dHJpYnV0ZSgiaHJlZiIsMil9KSxhPW51bGx9KCksYy5xdWVyeVNlbGVjdG9yQWxsJiZmdW5jdGlvbigpe3ZhciBhPW0sYj1jLmNyZWF0ZUVsZW1lbnQoImRpdiIpLGQ9Il9fc2l6emxlX18iO2IuaW5uZXJIVE1MPSI8cCBjbGFzcz0nVEVTVCc+PC9wPiI7aWYoIWIucXVlcnlTZWxlY3RvckFsbHx8Yi5xdWVyeVNlbGVjdG9yQWxsKCIuVEVTVCIpLmxlbmd0aCE9PTApe209ZnVuY3Rpb24oYixlLGYsZyl7ZT1lfHxjO2lmKCFnJiYhbS5pc1hNTChlKSl7dmFyIGg9L14oXHcrJCl8XlwuKFtcd1wtXSskKXxeIyhbXHdcLV0rJCkvLmV4ZWMoYik7aWYoaCYmKGUubm9kZVR5cGU9PT0xfHxlLm5vZGVUeXBlPT09OSkpe2lmKGhbMV0pcmV0dXJuIHMoZS5nZXRFbGVtZW50c0J5VGFnTmFtZShiKSxmKTtpZihoWzJdJiZvLmZpbmQuQ0xBU1MmJmUuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSlyZXR1cm4gcyhlLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoaFsyXSksZil9aWYoZS5ub2RlVHlwZT09PTkpe2lmKGI9PT0iYm9keSImJmUuYm9keSlyZXR1cm4gcyhbZS5ib2R5XSxmKTtpZihoJiZoWzNdKXt2YXIgaT1lLmdldEVsZW1lbnRCeUlkKGhbM10pO2lmKCFpfHwhaS5wYXJlbnROb2RlKXJldHVybiBzKFtdLGYpO2lmKGkuaWQ9PT1oWzNdKXJldHVybiBzKFtpXSxmKX10cnl7cmV0dXJuIHMoZS5xdWVyeVNlbGVjdG9yQWxsKGIpLGYpfWNhdGNoKGope319ZWxzZSBpZihlLm5vZGVUeXBlPT09MSYmZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpIT09Im9iamVjdCIpe3ZhciBrPWUsbD1lLmdldEF0dHJpYnV0ZSgiaWQiKSxuPWx8fGQscD1lLnBhcmVudE5vZGUscT0vXlxzKlsrfl0vLnRlc3QoYik7bD9uPW4ucmVwbGFjZSgvJy9nLCJcXCQmIik6ZS5zZXRBdHRyaWJ1dGUoImlkIixuKSxxJiZwJiYoZT1lLnBhcmVudE5vZGUpO3RyeXtpZighcXx8cClyZXR1cm4gcyhlLnF1ZXJ5U2VsZWN0b3JBbGwoIltpZD0nIituKyInXSAiK2IpLGYpfWNhdGNoKHIpe31maW5hbGx5e2x8fGsucmVtb3ZlQXR0cmlidXRlKCJpZCIpfX19cmV0dXJuIGEoYixlLGYsZyl9O2Zvcih2YXIgZSBpbiBhKW1bZV09YVtlXTtiPW51bGx9fSgpLGZ1bmN0aW9uKCl7dmFyIGE9Yy5kb2N1bWVudEVsZW1lbnQsYj1hLm1hdGNoZXNTZWxlY3Rvcnx8YS5tb3pNYXRjaGVzU2VsZWN0b3J8fGEud2Via2l0TWF0Y2hlc1NlbGVjdG9yfHxhLm1zTWF0Y2hlc1NlbGVjdG9yO2lmKGIpe3ZhciBkPSFiLmNhbGwoYy5jcmVhdGVFbGVtZW50KCJkaXYiKSwiZGl2IiksZT0hMTt0cnl7Yi5jYWxsKGMuZG9jdW1lbnRFbGVtZW50LCJbdGVzdCE9JyddOnNpenpsZSIpfWNhdGNoKGYpe2U9ITB9bS5tYXRjaGVzU2VsZWN0b3I9ZnVuY3Rpb24oYSxjKXtjPWMucmVwbGFjZSgvXD1ccyooW14nIlxdXSopXHMqXF0vZywiPSckMSddIik7aWYoIW0uaXNYTUwoYSkpdHJ5e2lmKGV8fCFvLm1hdGNoLlBTRVVETy50ZXN0KGMpJiYhLyE9Ly50ZXN0KGMpKXt2YXIgZj1iLmNhbGwoYSxjKTtpZihmfHwhZHx8YS5kb2N1bWVudCYmYS5kb2N1bWVudC5ub2RlVHlwZSE9PTExKXJldHVybiBmfX1jYXRjaChnKXt9cmV0dXJuIG0oYyxudWxsLG51bGwsW2FdKS5sZW5ndGg+MH19fSgpLGZ1bmN0aW9uKCl7dmFyIGE9Yy5jcmVhdGVFbGVtZW50KCJkaXYiKTthLmlubmVySFRNTD0iPGRpdiBjbGFzcz0ndGVzdCBlJz48L2Rpdj48ZGl2IGNsYXNzPSd0ZXN0Jz48L2Rpdj4iO2lmKCEhYS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lJiZhLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoImUiKS5sZW5ndGghPT0wKXthLmxhc3RDaGlsZC5jbGFzc05hbWU9ImUiO2lmKGEuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgiZSIpLmxlbmd0aD09PTEpcmV0dXJuO28ub3JkZXIuc3BsaWNlKDEsMCwiQ0xBU1MiKSxvLmZpbmQuQ0xBU1M9ZnVuY3Rpb24oYSxiLGMpe2lmKHR5cGVvZiBiLmdldEVsZW1lbnRzQnlDbGFzc05hbWUhPSJ1bmRlZmluZWQiJiYhYylyZXR1cm4gYi5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKGFbMV0pfSxhPW51bGx9fSgpLGMuZG9jdW1lbnRFbGVtZW50LmNvbnRhaW5zP20uY29udGFpbnM9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gYSE9PWImJihhLmNvbnRhaW5zP2EuY29udGFpbnMoYik6ITApfTpjLmRvY3VtZW50RWxlbWVudC5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbj9tLmNvbnRhaW5zPWZ1bmN0aW9uKGEsYil7cmV0dXJuISEoYS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbihiKSYxNil9Om0uY29udGFpbnM9ZnVuY3Rpb24oKXtyZXR1cm4hMX0sbS5pc1hNTD1mdW5jdGlvbihhKXt2YXIgYj0oYT9hLm93bmVyRG9jdW1lbnR8fGE6MCkuZG9jdW1lbnRFbGVtZW50O3JldHVybiBiP2Iubm9kZU5hbWUhPT0iSFRNTCI6ITF9O3ZhciB5PWZ1bmN0aW9uKGEsYixjKXt2YXIgZCxlPVtdLGY9IiIsZz1iLm5vZGVUeXBlP1tiXTpiO3doaWxlKGQ9by5tYXRjaC5QU0VVRE8uZXhlYyhhKSlmKz1kWzBdLGE9YS5yZXBsYWNlKG8ubWF0Y2guUFNFVURPLCIiKTthPW8ucmVsYXRpdmVbYV0/YSsiKiI6YTtmb3IodmFyIGg9MCxpPWcubGVuZ3RoO2g8aTtoKyspbShhLGdbaF0sZSxjKTtyZXR1cm4gbS5maWx0ZXIoZixlKX07bS5hdHRyPWYuYXR0cixtLnNlbGVjdG9ycy5hdHRyTWFwPXt9LGYuZmluZD1tLGYuZXhwcj1tLnNlbGVjdG9ycyxmLmV4cHJbIjoiXT1mLmV4cHIuZmlsdGVycyxmLnVuaXF1ZT1tLnVuaXF1ZVNvcnQsZi50ZXh0PW0uZ2V0VGV4dCxmLmlzWE1MRG9jPW0uaXNYTUwsZi5jb250YWlucz1tLmNvbnRhaW5zfSgpO3ZhciBMPS9VbnRpbCQvLE09L14oPzpwYXJlbnRzfHByZXZVbnRpbHxwcmV2QWxsKS8sTj0vLC8sTz0vXi5bXjojXFtcLixdKiQvLFA9QXJyYXkucHJvdG90eXBlLnNsaWNlLFE9Zi5leHByLm1hdGNoLlBPUyxSPXtjaGlsZHJlbjohMCxjb250ZW50czohMCxuZXh0OiEwLHByZXY6ITB9O2YuZm4uZXh0ZW5kKHtmaW5kOmZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMsYyxkO2lmKHR5cGVvZiBhIT0ic3RyaW5nIilyZXR1cm4gZihhKS5maWx0ZXIoZnVuY3Rpb24oKXtmb3IoYz0wLGQ9Yi5sZW5ndGg7YzxkO2MrKylpZihmLmNvbnRhaW5zKGJbY10sdGhpcykpcmV0dXJuITB9KTt2YXIgZT10aGlzLnB1c2hTdGFjaygiIiwiZmluZCIsYSksZyxoLGk7Zm9yKGM9MCxkPXRoaXMubGVuZ3RoO2M8ZDtjKyspe2c9ZS5sZW5ndGgsZi5maW5kKGEsdGhpc1tjXSxlKTtpZihjPjApZm9yKGg9ZztoPGUubGVuZ3RoO2grKylmb3IoaT0wO2k8ZztpKyspaWYoZVtpXT09PWVbaF0pe2Uuc3BsaWNlKGgtLSwxKTticmVha319cmV0dXJuIGV9LGhhczpmdW5jdGlvbihhKXt2YXIgYj1mKGEpO3JldHVybiB0aGlzLmZpbHRlcihmdW5jdGlvbigpe2Zvcih2YXIgYT0wLGM9Yi5sZW5ndGg7YTxjO2ErKylpZihmLmNvbnRhaW5zKHRoaXMsYlthXSkpcmV0dXJuITB9KX0sbm90OmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLnB1c2hTdGFjayhUKHRoaXMsYSwhMSksIm5vdCIsYSl9LGZpbHRlcjpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5wdXNoU3RhY2soVCh0aGlzLGEsITApLCJmaWx0ZXIiLGEpfSxpczpmdW5jdGlvbihhKXtyZXR1cm4hIWEmJih0eXBlb2YgYT09InN0cmluZyI/US50ZXN0KGEpP2YoYSx0aGlzLmNvbnRleHQpLmluZGV4KHRoaXNbMF0pPj0wOmYuZmlsdGVyKGEsdGhpcykubGVuZ3RoPjA6dGhpcy5maWx0ZXIoYSkubGVuZ3RoPjApfSxjbG9zZXN0OmZ1bmN0aW9uKGEsYil7dmFyIGM9W10sZCxlLGc9dGhpc1swXTtpZihmLmlzQXJyYXkoYSkpe3ZhciBoPTE7d2hpbGUoZyYmZy5vd25lckRvY3VtZW50JiZnIT09Yil7Zm9yKGQ9MDtkPGEubGVuZ3RoO2QrKylmKGcpLmlzKGFbZF0pJiZjLnB1c2goe3NlbGVjdG9yOmFbZF0sZWxlbTpnLGxldmVsOmh9KTtnPWcucGFyZW50Tm9kZSxoKyt9cmV0dXJuIGN9dmFyIGk9US50ZXN0KGEpfHx0eXBlb2YgYSE9InN0cmluZyI/ZihhLGJ8fHRoaXMuY29udGV4dCk6MDtmb3IoZD0wLGU9dGhpcy5sZW5ndGg7ZDxlO2QrKyl7Zz10aGlzW2RdO3doaWxlKGcpe2lmKGk/aS5pbmRleChnKT4tMTpmLmZpbmQubWF0Y2hlc1NlbGVjdG9yKGcsYSkpe2MucHVzaChnKTticmVha31nPWcucGFyZW50Tm9kZTtpZighZ3x8IWcub3duZXJEb2N1bWVudHx8Zz09PWJ8fGcubm9kZVR5cGU9PT0xMSlicmVha319Yz1jLmxlbmd0aD4xP2YudW5pcXVlKGMpOmM7cmV0dXJuIHRoaXMucHVzaFN0YWNrKGMsImNsb3Nlc3QiLGEpfSxpbmRleDpmdW5jdGlvbihhKXtpZighYSlyZXR1cm4gdGhpc1swXSYmdGhpc1swXS5wYXJlbnROb2RlP3RoaXMucHJldkFsbCgpLmxlbmd0aDotMTtpZih0eXBlb2YgYT09InN0cmluZyIpcmV0dXJuIGYuaW5BcnJheSh0aGlzWzBdLGYoYSkpO3JldHVybiBmLmluQXJyYXkoYS5qcXVlcnk/YVswXTphLHRoaXMpfSxhZGQ6ZnVuY3Rpb24oYSxiKXt2YXIgYz10eXBlb2YgYT09InN0cmluZyI/ZihhLGIpOmYubWFrZUFycmF5KGEmJmEubm9kZVR5cGU/W2FdOmEpLGQ9Zi5tZXJnZSh0aGlzLmdldCgpLGMpO3JldHVybiB0aGlzLnB1c2hTdGFjayhTKGNbMF0pfHxTKGRbMF0pP2Q6Zi51bmlxdWUoZCkpfSxhbmRTZWxmOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYWRkKHRoaXMucHJldk9iamVjdCl9fSksZi5lYWNoKHtwYXJlbnQ6ZnVuY3Rpb24oYSl7dmFyIGI9YS5wYXJlbnROb2RlO3JldHVybiBiJiZiLm5vZGVUeXBlIT09MTE/YjpudWxsfSxwYXJlbnRzOmZ1bmN0aW9uKGEpe3JldHVybiBmLmRpcihhLCJwYXJlbnROb2RlIil9LHBhcmVudHNVbnRpbDpmdW5jdGlvbihhLGIsYyl7cmV0dXJuIGYuZGlyKGEsInBhcmVudE5vZGUiLGMpfSxuZXh0OmZ1bmN0aW9uKGEpe3JldHVybiBmLm50aChhLDIsIm5leHRTaWJsaW5nIil9LHByZXY6ZnVuY3Rpb24oYSl7cmV0dXJuIGYubnRoKGEsMiwicHJldmlvdXNTaWJsaW5nIil9LG5leHRBbGw6ZnVuY3Rpb24oYSl7cmV0dXJuIGYuZGlyKGEsIm5leHRTaWJsaW5nIil9LHByZXZBbGw6ZnVuY3Rpb24oYSl7cmV0dXJuIGYuZGlyKGEsInByZXZpb3VzU2libGluZyIpfSxuZXh0VW50aWw6ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBmLmRpcihhLCJuZXh0U2libGluZyIsYyl9LHByZXZVbnRpbDpmdW5jdGlvbihhLGIsYyl7cmV0dXJuIGYuZGlyKGEsInByZXZpb3VzU2libGluZyIsYyl9LHNpYmxpbmdzOmZ1bmN0aW9uKGEpe3JldHVybiBmLnNpYmxpbmcoYS5wYXJlbnROb2RlLmZpcnN0Q2hpbGQsYSl9LGNoaWxkcmVuOmZ1bmN0aW9uKGEpe3JldHVybiBmLnNpYmxpbmcoYS5maXJzdENoaWxkKX0sY29udGVudHM6ZnVuY3Rpb24oYSl7cmV0dXJuIGYubm9kZU5hbWUoYSwiaWZyYW1lIik/YS5jb250ZW50RG9jdW1lbnR8fGEuY29udGVudFdpbmRvdy5kb2N1bWVudDpmLm1ha2VBcnJheShhLmNoaWxkTm9kZXMpfX0sZnVuY3Rpb24oYSxiKXtmLmZuW2FdPWZ1bmN0aW9uKGMsZCl7dmFyIGU9Zi5tYXAodGhpcyxiLGMpO0wudGVzdChhKXx8KGQ9YyksZCYmdHlwZW9mIGQ9PSJzdHJpbmciJiYoZT1mLmZpbHRlcihkLGUpKSxlPXRoaXMubGVuZ3RoPjEmJiFSW2FdP2YudW5pcXVlKGUpOmUsKHRoaXMubGVuZ3RoPjF8fE4udGVzdChkKSkmJk0udGVzdChhKSYmKGU9ZS5yZXZlcnNlKCkpO3JldHVybiB0aGlzLnB1c2hTdGFjayhlLGEsUC5jYWxsKGFyZ3VtZW50cykuam9pbigiLCIpKX19KSxmLmV4dGVuZCh7ZmlsdGVyOmZ1bmN0aW9uKGEsYixjKXtjJiYoYT0iOm5vdCgiK2ErIikiKTtyZXR1cm4gYi5sZW5ndGg9PT0xP2YuZmluZC5tYXRjaGVzU2VsZWN0b3IoYlswXSxhKT9bYlswXV06W106Zi5maW5kLm1hdGNoZXMoYSxiKX0sZGlyOmZ1bmN0aW9uKGEsYyxkKXt2YXIgZT1bXSxnPWFbY107d2hpbGUoZyYmZy5ub2RlVHlwZSE9PTkmJihkPT09Ynx8Zy5ub2RlVHlwZSE9PTF8fCFmKGcpLmlzKGQpKSlnLm5vZGVUeXBlPT09MSYmZS5wdXNoKGcpLGc9Z1tjXTtyZXR1cm4gZX0sbnRoOmZ1bmN0aW9uKGEsYixjLGQpe2I9Ynx8MTt2YXIgZT0wO2Zvcig7YTthPWFbY10paWYoYS5ub2RlVHlwZT09PTEmJisrZT09PWIpYnJlYWs7cmV0dXJuIGF9LHNpYmxpbmc6ZnVuY3Rpb24oYSxiKXt2YXIgYz1bXTtmb3IoO2E7YT1hLm5leHRTaWJsaW5nKWEubm9kZVR5cGU9PT0xJiZhIT09YiYmYy5wdXNoKGEpO3JldHVybiBjfX0pO3ZhciBWPSJhYmJyfGFydGljbGV8YXNpZGV8YXVkaW98Y2FudmFzfGRhdGFsaXN0fGRldGFpbHN8ZmlnY2FwdGlvbnxmaWd1cmV8Zm9vdGVyfGhlYWRlcnxoZ3JvdXB8bWFya3xtZXRlcnxuYXZ8b3V0cHV0fHByb2dyZXNzfHNlY3Rpb258c3VtbWFyeXx0aW1lfHZpZGVvIixXPS8galF1ZXJ5XGQrPSIoPzpcZCt8bnVsbCkiL2csWD0vXlxzKy8sWT0vPCg/IWFyZWF8YnJ8Y29sfGVtYmVkfGhyfGltZ3xpbnB1dHxsaW5rfG1ldGF8cGFyYW0pKChbXHc6XSspW14+XSopXC8+L2lnLFo9LzwoW1x3Ol0rKS8sJD0vPHRib2R5L2ksXz0vPHwmIz9cdys7LyxiYT0vPCg/OnNjcmlwdHxzdHlsZSkvaSxiYj0vPCg/OnNjcmlwdHxvYmplY3R8ZW1iZWR8b3B0aW9ufHN0eWxlKS9pLGJjPW5ldyBSZWdFeHAoIjwoPzoiK1YrIikiLCJpIiksYmQ9L2NoZWNrZWRccyooPzpbXj1dfD1ccyouY2hlY2tlZC4pL2ksYmU9L1wvKGphdmF8ZWNtYSlzY3JpcHQvaSxiZj0vXlxzKjwhKD86XFtDREFUQVxbfFwtXC0pLyxiZz17b3B0aW9uOlsxLCI8c2VsZWN0IG11bHRpcGxlPSdtdWx0aXBsZSc+IiwiPC9zZWxlY3Q+Il0sbGVnZW5kOlsxLCI8ZmllbGRzZXQ+IiwiPC9maWVsZHNldD4iXSx0aGVhZDpbMSwiPHRhYmxlPiIsIjwvdGFibGU+Il0sdHI6WzIsIjx0YWJsZT48dGJvZHk+IiwiPC90Ym9keT48L3RhYmxlPiJdLHRkOlszLCI8dGFibGU+PHRib2R5Pjx0cj4iLCI8L3RyPjwvdGJvZHk+PC90YWJsZT4iXSxjb2w6WzIsIjx0YWJsZT48dGJvZHk+PC90Ym9keT48Y29sZ3JvdXA+IiwiPC9jb2xncm91cD48L3RhYmxlPiJdLGFyZWE6WzEsIjxtYXA+IiwiPC9tYXA+Il0sX2RlZmF1bHQ6WzAsIiIsIiJdfSxiaD1VKGMpO2JnLm9wdGdyb3VwPWJnLm9wdGlvbixiZy50Ym9keT1iZy50Zm9vdD1iZy5jb2xncm91cD1iZy5jYXB0aW9uPWJnLnRoZWFkLGJnLnRoPWJnLnRkLGYuc3VwcG9ydC5odG1sU2VyaWFsaXplfHwoYmcuX2RlZmF1bHQ9WzEsImRpdjxkaXY+IiwiPC9kaXY+Il0pLGYuZm4uZXh0ZW5kKHt0ZXh0OmZ1bmN0aW9uKGEpe2lmKGYuaXNGdW5jdGlvbihhKSlyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKGIpe3ZhciBjPWYodGhpcyk7Yy50ZXh0KGEuY2FsbCh0aGlzLGIsYy50ZXh0KCkpKX0pO2lmKHR5cGVvZiBhIT0ib2JqZWN0IiYmYSE9PWIpcmV0dXJuIHRoaXMuZW1wdHkoKS5hcHBlbmQoKHRoaXNbMF0mJnRoaXNbMF0ub3duZXJEb2N1bWVudHx8YykuY3JlYXRlVGV4dE5vZGUoYSkpO3JldHVybiBmLnRleHQodGhpcyl9LHdyYXBBbGw6ZnVuY3Rpb24oYSl7aWYoZi5pc0Z1bmN0aW9uKGEpKXJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oYil7Zih0aGlzKS53cmFwQWxsKGEuY2FsbCh0aGlzLGIpKX0pO2lmKHRoaXNbMF0pe3ZhciBiPWYoYSx0aGlzWzBdLm93bmVyRG9jdW1lbnQpLmVxKDApLmNsb25lKCEwKTt0aGlzWzBdLnBhcmVudE5vZGUmJmIuaW5zZXJ0QmVmb3JlKHRoaXNbMF0pLGIubWFwKGZ1bmN0aW9uKCl7dmFyIGE9dGhpczt3aGlsZShhLmZpcnN0Q2hpbGQmJmEuZmlyc3RDaGlsZC5ub2RlVHlwZT09PTEpYT1hLmZpcnN0Q2hpbGQ7cmV0dXJuIGF9KS5hcHBlbmQodGhpcyl9cmV0dXJuIHRoaXN9LHdyYXBJbm5lcjpmdW5jdGlvbihhKXtpZihmLmlzRnVuY3Rpb24oYSkpcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbihiKXtmKHRoaXMpLndyYXBJbm5lcihhLmNhbGwodGhpcyxiKSl9KTtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIGI9Zih0aGlzKSxjPWIuY29udGVudHMoKTtjLmxlbmd0aD9jLndyYXBBbGwoYSk6Yi5hcHBlbmQoYSl9KX0sd3JhcDpmdW5jdGlvbihhKXt2YXIgYj1mLmlzRnVuY3Rpb24oYSk7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbihjKXtmKHRoaXMpLndyYXBBbGwoYj9hLmNhbGwodGhpcyxjKTphKX0pfSx1bndyYXA6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wYXJlbnQoKS5lYWNoKGZ1bmN0aW9uKCl7Zi5ub2RlTmFtZSh0aGlzLCJib2R5Iil8fGYodGhpcykucmVwbGFjZVdpdGgodGhpcy5jaGlsZE5vZGVzKX0pLmVuZCgpfSxhcHBlbmQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kb21NYW5pcChhcmd1bWVudHMsITAsZnVuY3Rpb24oYSl7dGhpcy5ub2RlVHlwZT09PTEmJnRoaXMuYXBwZW5kQ2hpbGQoYSl9KX0scHJlcGVuZDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmRvbU1hbmlwKGFyZ3VtZW50cywhMCxmdW5jdGlvbihhKXt0aGlzLm5vZGVUeXBlPT09MSYmdGhpcy5pbnNlcnRCZWZvcmUoYSx0aGlzLmZpcnN0Q2hpbGQpfSl9LGJlZm9yZTpmdW5jdGlvbigpe2lmKHRoaXNbMF0mJnRoaXNbMF0ucGFyZW50Tm9kZSlyZXR1cm4gdGhpcy5kb21NYW5pcChhcmd1bWVudHMsITEsZnVuY3Rpb24oYSl7dGhpcy5wYXJlbnROb2RlLmluc2VydEJlZm9yZShhLHRoaXMpfSk7aWYoYXJndW1lbnRzLmxlbmd0aCl7dmFyIGE9Zi5jbGVhbihhcmd1bWVudHMpO2EucHVzaC5hcHBseShhLHRoaXMudG9BcnJheSgpKTtyZXR1cm4gdGhpcy5wdXNoU3RhY2soYSwiYmVmb3JlIixhcmd1bWVudHMpfX0sYWZ0ZXI6ZnVuY3Rpb24oKXtpZih0aGlzWzBdJiZ0aGlzWzBdLnBhcmVudE5vZGUpcmV0dXJuIHRoaXMuZG9tTWFuaXAoYXJndW1lbnRzLCExLGZ1bmN0aW9uKGEpe3RoaXMucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoYSx0aGlzLm5leHRTaWJsaW5nKX0pO2lmKGFyZ3VtZW50cy5sZW5ndGgpe3ZhciBhPXRoaXMucHVzaFN0YWNrKHRoaXMsImFmdGVyIixhcmd1bWVudHMpO2EucHVzaC5hcHBseShhLGYuY2xlYW4oYXJndW1lbnRzKSk7cmV0dXJuIGF9fSxyZW1vdmU6ZnVuY3Rpb24oYSxiKXtmb3IodmFyIGM9MCxkOyhkPXRoaXNbY10pIT1udWxsO2MrKylpZighYXx8Zi5maWx0ZXIoYSxbZF0pLmxlbmd0aCkhYiYmZC5ub2RlVHlwZT09PTEmJihmLmNsZWFuRGF0YShkLmdldEVsZW1lbnRzQnlUYWdOYW1lKCIqIikpLGYuY2xlYW5EYXRhKFtkXSkpLGQucGFyZW50Tm9kZSYmZC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGQpO3JldHVybiB0aGlzfSxlbXB0eTpmdW5jdGlvbigpCit7Zm9yKHZhciBhPTAsYjsoYj10aGlzW2FdKSE9bnVsbDthKyspe2Iubm9kZVR5cGU9PT0xJiZmLmNsZWFuRGF0YShiLmdldEVsZW1lbnRzQnlUYWdOYW1lKCIqIikpO3doaWxlKGIuZmlyc3RDaGlsZCliLnJlbW92ZUNoaWxkKGIuZmlyc3RDaGlsZCl9cmV0dXJuIHRoaXN9LGNsb25lOmZ1bmN0aW9uKGEsYil7YT1hPT1udWxsPyExOmEsYj1iPT1udWxsP2E6YjtyZXR1cm4gdGhpcy5tYXAoZnVuY3Rpb24oKXtyZXR1cm4gZi5jbG9uZSh0aGlzLGEsYil9KX0saHRtbDpmdW5jdGlvbihhKXtpZihhPT09YilyZXR1cm4gdGhpc1swXSYmdGhpc1swXS5ub2RlVHlwZT09PTE/dGhpc1swXS5pbm5lckhUTUwucmVwbGFjZShXLCIiKTpudWxsO2lmKHR5cGVvZiBhPT0ic3RyaW5nIiYmIWJhLnRlc3QoYSkmJihmLnN1cHBvcnQubGVhZGluZ1doaXRlc3BhY2V8fCFYLnRlc3QoYSkpJiYhYmdbKFouZXhlYyhhKXx8WyIiLCIiXSlbMV0udG9Mb3dlckNhc2UoKV0pe2E9YS5yZXBsYWNlKFksIjwkMT48LyQyPiIpO3RyeXtmb3IodmFyIGM9MCxkPXRoaXMubGVuZ3RoO2M8ZDtjKyspdGhpc1tjXS5ub2RlVHlwZT09PTEmJihmLmNsZWFuRGF0YSh0aGlzW2NdLmdldEVsZW1lbnRzQnlUYWdOYW1lKCIqIikpLHRoaXNbY10uaW5uZXJIVE1MPWEpfWNhdGNoKGUpe3RoaXMuZW1wdHkoKS5hcHBlbmQoYSl9fWVsc2UgZi5pc0Z1bmN0aW9uKGEpP3RoaXMuZWFjaChmdW5jdGlvbihiKXt2YXIgYz1mKHRoaXMpO2MuaHRtbChhLmNhbGwodGhpcyxiLGMuaHRtbCgpKSl9KTp0aGlzLmVtcHR5KCkuYXBwZW5kKGEpO3JldHVybiB0aGlzfSxyZXBsYWNlV2l0aDpmdW5jdGlvbihhKXtpZih0aGlzWzBdJiZ0aGlzWzBdLnBhcmVudE5vZGUpe2lmKGYuaXNGdW5jdGlvbihhKSlyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKGIpe3ZhciBjPWYodGhpcyksZD1jLmh0bWwoKTtjLnJlcGxhY2VXaXRoKGEuY2FsbCh0aGlzLGIsZCkpfSk7dHlwZW9mIGEhPSJzdHJpbmciJiYoYT1mKGEpLmRldGFjaCgpKTtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIGI9dGhpcy5uZXh0U2libGluZyxjPXRoaXMucGFyZW50Tm9kZTtmKHRoaXMpLnJlbW92ZSgpLGI/ZihiKS5iZWZvcmUoYSk6ZihjKS5hcHBlbmQoYSl9KX1yZXR1cm4gdGhpcy5sZW5ndGg/dGhpcy5wdXNoU3RhY2soZihmLmlzRnVuY3Rpb24oYSk/YSgpOmEpLCJyZXBsYWNlV2l0aCIsYSk6dGhpc30sZGV0YWNoOmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLnJlbW92ZShhLCEwKX0sZG9tTWFuaXA6ZnVuY3Rpb24oYSxjLGQpe3ZhciBlLGcsaCxpLGo9YVswXSxrPVtdO2lmKCFmLnN1cHBvcnQuY2hlY2tDbG9uZSYmYXJndW1lbnRzLmxlbmd0aD09PTMmJnR5cGVvZiBqPT0ic3RyaW5nIiYmYmQudGVzdChqKSlyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7Zih0aGlzKS5kb21NYW5pcChhLGMsZCwhMCl9KTtpZihmLmlzRnVuY3Rpb24oaikpcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbihlKXt2YXIgZz1mKHRoaXMpO2FbMF09ai5jYWxsKHRoaXMsZSxjP2cuaHRtbCgpOmIpLGcuZG9tTWFuaXAoYSxjLGQpfSk7aWYodGhpc1swXSl7aT1qJiZqLnBhcmVudE5vZGUsZi5zdXBwb3J0LnBhcmVudE5vZGUmJmkmJmkubm9kZVR5cGU9PT0xMSYmaS5jaGlsZE5vZGVzLmxlbmd0aD09PXRoaXMubGVuZ3RoP2U9e2ZyYWdtZW50Oml9OmU9Zi5idWlsZEZyYWdtZW50KGEsdGhpcyxrKSxoPWUuZnJhZ21lbnQsaC5jaGlsZE5vZGVzLmxlbmd0aD09PTE/Zz1oPWguZmlyc3RDaGlsZDpnPWguZmlyc3RDaGlsZDtpZihnKXtjPWMmJmYubm9kZU5hbWUoZywidHIiKTtmb3IodmFyIGw9MCxtPXRoaXMubGVuZ3RoLG49bS0xO2w8bTtsKyspZC5jYWxsKGM/YmkodGhpc1tsXSxnKTp0aGlzW2xdLGUuY2FjaGVhYmxlfHxtPjEmJmw8bj9mLmNsb25lKGgsITAsITApOmgpfWsubGVuZ3RoJiZmLmVhY2goayxicCl9cmV0dXJuIHRoaXN9fSksZi5idWlsZEZyYWdtZW50PWZ1bmN0aW9uKGEsYixkKXt2YXIgZSxnLGgsaSxqPWFbMF07YiYmYlswXSYmKGk9YlswXS5vd25lckRvY3VtZW50fHxiWzBdKSxpLmNyZWF0ZURvY3VtZW50RnJhZ21lbnR8fChpPWMpLGEubGVuZ3RoPT09MSYmdHlwZW9mIGo9PSJzdHJpbmciJiZqLmxlbmd0aDw1MTImJmk9PT1jJiZqLmNoYXJBdCgwKT09PSI8IiYmIWJiLnRlc3QoaikmJihmLnN1cHBvcnQuY2hlY2tDbG9uZXx8IWJkLnRlc3QoaikpJiYoZi5zdXBwb3J0Lmh0bWw1Q2xvbmV8fCFiYy50ZXN0KGopKSYmKGc9ITAsaD1mLmZyYWdtZW50c1tqXSxoJiZoIT09MSYmKGU9aCkpLGV8fChlPWkuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpLGYuY2xlYW4oYSxpLGUsZCkpLGcmJihmLmZyYWdtZW50c1tqXT1oP2U6MSk7cmV0dXJue2ZyYWdtZW50OmUsY2FjaGVhYmxlOmd9fSxmLmZyYWdtZW50cz17fSxmLmVhY2goe2FwcGVuZFRvOiJhcHBlbmQiLHByZXBlbmRUbzoicHJlcGVuZCIsaW5zZXJ0QmVmb3JlOiJiZWZvcmUiLGluc2VydEFmdGVyOiJhZnRlciIscmVwbGFjZUFsbDoicmVwbGFjZVdpdGgifSxmdW5jdGlvbihhLGIpe2YuZm5bYV09ZnVuY3Rpb24oYyl7dmFyIGQ9W10sZT1mKGMpLGc9dGhpcy5sZW5ndGg9PT0xJiZ0aGlzWzBdLnBhcmVudE5vZGU7aWYoZyYmZy5ub2RlVHlwZT09PTExJiZnLmNoaWxkTm9kZXMubGVuZ3RoPT09MSYmZS5sZW5ndGg9PT0xKXtlW2JdKHRoaXNbMF0pO3JldHVybiB0aGlzfWZvcih2YXIgaD0wLGk9ZS5sZW5ndGg7aDxpO2grKyl7dmFyIGo9KGg+MD90aGlzLmNsb25lKCEwKTp0aGlzKS5nZXQoKTtmKGVbaF0pW2JdKGopLGQ9ZC5jb25jYXQoail9cmV0dXJuIHRoaXMucHVzaFN0YWNrKGQsYSxlLnNlbGVjdG9yKX19KSxmLmV4dGVuZCh7Y2xvbmU6ZnVuY3Rpb24oYSxiLGMpe3ZhciBkLGUsZyxoPWYuc3VwcG9ydC5odG1sNUNsb25lfHwhYmMudGVzdCgiPCIrYS5ub2RlTmFtZSk/YS5jbG9uZU5vZGUoITApOmJvKGEpO2lmKCghZi5zdXBwb3J0Lm5vQ2xvbmVFdmVudHx8IWYuc3VwcG9ydC5ub0Nsb25lQ2hlY2tlZCkmJihhLm5vZGVUeXBlPT09MXx8YS5ub2RlVHlwZT09PTExKSYmIWYuaXNYTUxEb2MoYSkpe2JrKGEsaCksZD1ibChhKSxlPWJsKGgpO2ZvcihnPTA7ZFtnXTsrK2cpZVtnXSYmYmsoZFtnXSxlW2ddKX1pZihiKXtiaihhLGgpO2lmKGMpe2Q9YmwoYSksZT1ibChoKTtmb3IoZz0wO2RbZ107KytnKWJqKGRbZ10sZVtnXSl9fWQ9ZT1udWxsO3JldHVybiBofSxjbGVhbjpmdW5jdGlvbihhLGIsZCxlKXt2YXIgZztiPWJ8fGMsdHlwZW9mIGIuY3JlYXRlRWxlbWVudD09InVuZGVmaW5lZCImJihiPWIub3duZXJEb2N1bWVudHx8YlswXSYmYlswXS5vd25lckRvY3VtZW50fHxjKTt2YXIgaD1bXSxpO2Zvcih2YXIgaj0wLGs7KGs9YVtqXSkhPW51bGw7aisrKXt0eXBlb2Ygaz09Im51bWJlciImJihrKz0iIik7aWYoIWspY29udGludWU7aWYodHlwZW9mIGs9PSJzdHJpbmciKWlmKCFfLnRlc3Qoaykpaz1iLmNyZWF0ZVRleHROb2RlKGspO2Vsc2V7az1rLnJlcGxhY2UoWSwiPCQxPjwvJDI+Iik7dmFyIGw9KFouZXhlYyhrKXx8WyIiLCIiXSlbMV0udG9Mb3dlckNhc2UoKSxtPWJnW2xdfHxiZy5fZGVmYXVsdCxuPW1bMF0sbz1iLmNyZWF0ZUVsZW1lbnQoImRpdiIpO2I9PT1jP2JoLmFwcGVuZENoaWxkKG8pOlUoYikuYXBwZW5kQ2hpbGQobyksby5pbm5lckhUTUw9bVsxXStrK21bMl07d2hpbGUobi0tKW89by5sYXN0Q2hpbGQ7aWYoIWYuc3VwcG9ydC50Ym9keSl7dmFyIHA9JC50ZXN0KGspLHE9bD09PSJ0YWJsZSImJiFwP28uZmlyc3RDaGlsZCYmby5maXJzdENoaWxkLmNoaWxkTm9kZXM6bVsxXT09PSI8dGFibGU+IiYmIXA/by5jaGlsZE5vZGVzOltdO2ZvcihpPXEubGVuZ3RoLTE7aT49MDstLWkpZi5ub2RlTmFtZShxW2ldLCJ0Ym9keSIpJiYhcVtpXS5jaGlsZE5vZGVzLmxlbmd0aCYmcVtpXS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHFbaV0pfSFmLnN1cHBvcnQubGVhZGluZ1doaXRlc3BhY2UmJlgudGVzdChrKSYmby5pbnNlcnRCZWZvcmUoYi5jcmVhdGVUZXh0Tm9kZShYLmV4ZWMoaylbMF0pLG8uZmlyc3RDaGlsZCksaz1vLmNoaWxkTm9kZXN9dmFyIHI7aWYoIWYuc3VwcG9ydC5hcHBlbmRDaGVja2VkKWlmKGtbMF0mJnR5cGVvZiAocj1rLmxlbmd0aCk9PSJudW1iZXIiKWZvcihpPTA7aTxyO2krKylibihrW2ldKTtlbHNlIGJuKGspO2subm9kZVR5cGU/aC5wdXNoKGspOmg9Zi5tZXJnZShoLGspfWlmKGQpe2c9ZnVuY3Rpb24oYSl7cmV0dXJuIWEudHlwZXx8YmUudGVzdChhLnR5cGUpfTtmb3Ioaj0wO2hbal07aisrKWlmKGUmJmYubm9kZU5hbWUoaFtqXSwic2NyaXB0IikmJighaFtqXS50eXBlfHxoW2pdLnR5cGUudG9Mb3dlckNhc2UoKT09PSJ0ZXh0L2phdmFzY3JpcHQiKSllLnB1c2goaFtqXS5wYXJlbnROb2RlP2hbal0ucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChoW2pdKTpoW2pdKTtlbHNle2lmKGhbal0ubm9kZVR5cGU9PT0xKXt2YXIgcz1mLmdyZXAoaFtqXS5nZXRFbGVtZW50c0J5VGFnTmFtZSgic2NyaXB0IiksZyk7aC5zcGxpY2UuYXBwbHkoaCxbaisxLDBdLmNvbmNhdChzKSl9ZC5hcHBlbmRDaGlsZChoW2pdKX19cmV0dXJuIGh9LGNsZWFuRGF0YTpmdW5jdGlvbihhKXt2YXIgYixjLGQ9Zi5jYWNoZSxlPWYuZXZlbnQuc3BlY2lhbCxnPWYuc3VwcG9ydC5kZWxldGVFeHBhbmRvO2Zvcih2YXIgaD0wLGk7KGk9YVtoXSkhPW51bGw7aCsrKXtpZihpLm5vZGVOYW1lJiZmLm5vRGF0YVtpLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCldKWNvbnRpbnVlO2M9aVtmLmV4cGFuZG9dO2lmKGMpe2I9ZFtjXTtpZihiJiZiLmV2ZW50cyl7Zm9yKHZhciBqIGluIGIuZXZlbnRzKWVbal0/Zi5ldmVudC5yZW1vdmUoaSxqKTpmLnJlbW92ZUV2ZW50KGksaixiLmhhbmRsZSk7Yi5oYW5kbGUmJihiLmhhbmRsZS5lbGVtPW51bGwpfWc/ZGVsZXRlIGlbZi5leHBhbmRvXTppLnJlbW92ZUF0dHJpYnV0ZSYmaS5yZW1vdmVBdHRyaWJ1dGUoZi5leHBhbmRvKSxkZWxldGUgZFtjXX19fX0pO3ZhciBicT0vYWxwaGFcKFteKV0qXCkvaSxicj0vb3BhY2l0eT0oW14pXSopLyxicz0vKFtBLVpdfF5tcykvZyxidD0vXi0/XGQrKD86cHgpPyQvaSxidT0vXi0/XGQvLGJ2PS9eKFtcLStdKT0oW1wtKy5cZGVdKykvLGJ3PXtwb3NpdGlvbjoiYWJzb2x1dGUiLHZpc2liaWxpdHk6ImhpZGRlbiIsZGlzcGxheToiYmxvY2sifSxieD1bIkxlZnQiLCJSaWdodCJdLGJ5PVsiVG9wIiwiQm90dG9tIl0sYnosYkEsYkI7Zi5mbi5jc3M9ZnVuY3Rpb24oYSxjKXtpZihhcmd1bWVudHMubGVuZ3RoPT09MiYmYz09PWIpcmV0dXJuIHRoaXM7cmV0dXJuIGYuYWNjZXNzKHRoaXMsYSxjLCEwLGZ1bmN0aW9uKGEsYyxkKXtyZXR1cm4gZCE9PWI/Zi5zdHlsZShhLGMsZCk6Zi5jc3MoYSxjKX0pfSxmLmV4dGVuZCh7Y3NzSG9va3M6e29wYWNpdHk6e2dldDpmdW5jdGlvbihhLGIpe2lmKGIpe3ZhciBjPWJ6KGEsIm9wYWNpdHkiLCJvcGFjaXR5Iik7cmV0dXJuIGM9PT0iIj8iMSI6Y31yZXR1cm4gYS5zdHlsZS5vcGFjaXR5fX19LGNzc051bWJlcjp7ZmlsbE9wYWNpdHk6ITAsZm9udFdlaWdodDohMCxsaW5lSGVpZ2h0OiEwLG9wYWNpdHk6ITAsb3JwaGFuczohMCx3aWRvd3M6ITAsekluZGV4OiEwLHpvb206ITB9LGNzc1Byb3BzOnsiZmxvYXQiOmYuc3VwcG9ydC5jc3NGbG9hdD8iY3NzRmxvYXQiOiJzdHlsZUZsb2F0In0sc3R5bGU6ZnVuY3Rpb24oYSxjLGQsZSl7aWYoISFhJiZhLm5vZGVUeXBlIT09MyYmYS5ub2RlVHlwZSE9PTgmJiEhYS5zdHlsZSl7dmFyIGcsaCxpPWYuY2FtZWxDYXNlKGMpLGo9YS5zdHlsZSxrPWYuY3NzSG9va3NbaV07Yz1mLmNzc1Byb3BzW2ldfHxpO2lmKGQ9PT1iKXtpZihrJiYiZ2V0ImluIGsmJihnPWsuZ2V0KGEsITEsZSkpIT09YilyZXR1cm4gZztyZXR1cm4galtjXX1oPXR5cGVvZiBkLGg9PT0ic3RyaW5nIiYmKGc9YnYuZXhlYyhkKSkmJihkPSsoZ1sxXSsxKSorZ1syXStwYXJzZUZsb2F0KGYuY3NzKGEsYykpLGg9Im51bWJlciIpO2lmKGQ9PW51bGx8fGg9PT0ibnVtYmVyIiYmaXNOYU4oZCkpcmV0dXJuO2g9PT0ibnVtYmVyIiYmIWYuY3NzTnVtYmVyW2ldJiYoZCs9InB4Iik7aWYoIWt8fCEoInNldCJpbiBrKXx8KGQ9ay5zZXQoYSxkKSkhPT1iKXRyeXtqW2NdPWR9Y2F0Y2gobCl7fX19LGNzczpmdW5jdGlvbihhLGMsZCl7dmFyIGUsZztjPWYuY2FtZWxDYXNlKGMpLGc9Zi5jc3NIb29rc1tjXSxjPWYuY3NzUHJvcHNbY118fGMsYz09PSJjc3NGbG9hdCImJihjPSJmbG9hdCIpO2lmKGcmJiJnZXQiaW4gZyYmKGU9Zy5nZXQoYSwhMCxkKSkhPT1iKXJldHVybiBlO2lmKGJ6KXJldHVybiBieihhLGMpfSxzd2FwOmZ1bmN0aW9uKGEsYixjKXt2YXIgZD17fTtmb3IodmFyIGUgaW4gYilkW2VdPWEuc3R5bGVbZV0sYS5zdHlsZVtlXT1iW2VdO2MuY2FsbChhKTtmb3IoZSBpbiBiKWEuc3R5bGVbZV09ZFtlXX19KSxmLmN1ckNTUz1mLmNzcyxmLmVhY2goWyJoZWlnaHQiLCJ3aWR0aCJdLGZ1bmN0aW9uKGEsYil7Zi5jc3NIb29rc1tiXT17Z2V0OmZ1bmN0aW9uKGEsYyxkKXt2YXIgZTtpZihjKXtpZihhLm9mZnNldFdpZHRoIT09MClyZXR1cm4gYkMoYSxiLGQpO2Yuc3dhcChhLGJ3LGZ1bmN0aW9uKCl7ZT1iQyhhLGIsZCl9KTtyZXR1cm4gZX19LHNldDpmdW5jdGlvbihhLGIpe2lmKCFidC50ZXN0KGIpKXJldHVybiBiO2I9cGFyc2VGbG9hdChiKTtpZihiPj0wKXJldHVybiBiKyJweCJ9fX0pLGYuc3VwcG9ydC5vcGFjaXR5fHwoZi5jc3NIb29rcy5vcGFjaXR5PXtnZXQ6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gYnIudGVzdCgoYiYmYS5jdXJyZW50U3R5bGU/YS5jdXJyZW50U3R5bGUuZmlsdGVyOmEuc3R5bGUuZmlsdGVyKXx8IiIpP3BhcnNlRmxvYXQoUmVnRXhwLiQxKS8xMDArIiI6Yj8iMSI6IiJ9LHNldDpmdW5jdGlvbihhLGIpe3ZhciBjPWEuc3R5bGUsZD1hLmN1cnJlbnRTdHlsZSxlPWYuaXNOdW1lcmljKGIpPyJhbHBoYShvcGFjaXR5PSIrYioxMDArIikiOiIiLGc9ZCYmZC5maWx0ZXJ8fGMuZmlsdGVyfHwiIjtjLnpvb209MTtpZihiPj0xJiZmLnRyaW0oZy5yZXBsYWNlKGJxLCIiKSk9PT0iIil7Yy5yZW1vdmVBdHRyaWJ1dGUoImZpbHRlciIpO2lmKGQmJiFkLmZpbHRlcilyZXR1cm59Yy5maWx0ZXI9YnEudGVzdChnKT9nLnJlcGxhY2UoYnEsZSk6ZysiICIrZX19KSxmKGZ1bmN0aW9uKCl7Zi5zdXBwb3J0LnJlbGlhYmxlTWFyZ2luUmlnaHR8fChmLmNzc0hvb2tzLm1hcmdpblJpZ2h0PXtnZXQ6ZnVuY3Rpb24oYSxiKXt2YXIgYztmLnN3YXAoYSx7ZGlzcGxheToiaW5saW5lLWJsb2NrIn0sZnVuY3Rpb24oKXtiP2M9YnooYSwibWFyZ2luLXJpZ2h0IiwibWFyZ2luUmlnaHQiKTpjPWEuc3R5bGUubWFyZ2luUmlnaHR9KTtyZXR1cm4gY319KX0pLGMuZGVmYXVsdFZpZXcmJmMuZGVmYXVsdFZpZXcuZ2V0Q29tcHV0ZWRTdHlsZSYmKGJBPWZ1bmN0aW9uKGEsYil7dmFyIGMsZCxlO2I9Yi5yZXBsYWNlKGJzLCItJDEiKS50b0xvd2VyQ2FzZSgpLChkPWEub3duZXJEb2N1bWVudC5kZWZhdWx0VmlldykmJihlPWQuZ2V0Q29tcHV0ZWRTdHlsZShhLG51bGwpKSYmKGM9ZS5nZXRQcm9wZXJ0eVZhbHVlKGIpLGM9PT0iIiYmIWYuY29udGFpbnMoYS5vd25lckRvY3VtZW50LmRvY3VtZW50RWxlbWVudCxhKSYmKGM9Zi5zdHlsZShhLGIpKSk7cmV0dXJuIGN9KSxjLmRvY3VtZW50RWxlbWVudC5jdXJyZW50U3R5bGUmJihiQj1mdW5jdGlvbihhLGIpe3ZhciBjLGQsZSxmPWEuY3VycmVudFN0eWxlJiZhLmN1cnJlbnRTdHlsZVtiXSxnPWEuc3R5bGU7Zj09PW51bGwmJmcmJihlPWdbYl0pJiYoZj1lKSwhYnQudGVzdChmKSYmYnUudGVzdChmKSYmKGM9Zy5sZWZ0LGQ9YS5ydW50aW1lU3R5bGUmJmEucnVudGltZVN0eWxlLmxlZnQsZCYmKGEucnVudGltZVN0eWxlLmxlZnQ9YS5jdXJyZW50U3R5bGUubGVmdCksZy5sZWZ0PWI9PT0iZm9udFNpemUiPyIxZW0iOmZ8fDAsZj1nLnBpeGVsTGVmdCsicHgiLGcubGVmdD1jLGQmJihhLnJ1bnRpbWVTdHlsZS5sZWZ0PWQpKTtyZXR1cm4gZj09PSIiPyJhdXRvIjpmfSksYno9YkF8fGJCLGYuZXhwciYmZi5leHByLmZpbHRlcnMmJihmLmV4cHIuZmlsdGVycy5oaWRkZW49ZnVuY3Rpb24oYSl7dmFyIGI9YS5vZmZzZXRXaWR0aCxjPWEub2Zmc2V0SGVpZ2h0O3JldHVybiBiPT09MCYmYz09PTB8fCFmLnN1cHBvcnQucmVsaWFibGVIaWRkZW5PZmZzZXRzJiYoYS5zdHlsZSYmYS5zdHlsZS5kaXNwbGF5fHxmLmNzcyhhLCJkaXNwbGF5IikpPT09Im5vbmUifSxmLmV4cHIuZmlsdGVycy52aXNpYmxlPWZ1bmN0aW9uKGEpe3JldHVybiFmLmV4cHIuZmlsdGVycy5oaWRkZW4oYSl9KTt2YXIgYkQ9LyUyMC9nLGJFPS9cW1xdJC8sYkY9L1xyP1xuL2csYkc9LyMuKiQvLGJIPS9eKC4qPyk6WyBcdF0qKFteXHJcbl0qKVxyPyQvbWcsYkk9L14oPzpjb2xvcnxkYXRlfGRhdGV0aW1lfGRhdGV0aW1lLWxvY2FsfGVtYWlsfGhpZGRlbnxtb250aHxudW1iZXJ8cGFzc3dvcmR8cmFuZ2V8c2VhcmNofHRlbHx0ZXh0fHRpbWV8dXJsfHdlZWspJC9pLGJKPS9eKD86YWJvdXR8YXBwfGFwcFwtc3RvcmFnZXwuK1wtZXh0ZW5zaW9ufGZpbGV8cmVzfHdpZGdldCk6JC8sYks9L14oPzpHRVR8SEVBRCkkLyxiTD0vXlwvXC8vLGJNPS9cPy8sYk49LzxzY3JpcHRcYltePF0qKD86KD8hPFwvc2NyaXB0Pik8W148XSopKjxcL3NjcmlwdD4vZ2ksYk89L14oPzpzZWxlY3R8dGV4dGFyZWEpL2ksYlA9L1xzKy8sYlE9LyhbPyZdKV89W14mXSovLGJSPS9eKFtcd1wrXC5cLV0rOikoPzpcL1wvKFteXC8/IzpdKikoPzo6KFxkKykpPyk/LyxiUz1mLmZuLmxvYWQsYlQ9e30sYlU9e30sYlYsYlcsYlg9WyIqLyJdK1siKiJdO3RyeXtiVj1lLmhyZWZ9Y2F0Y2goYlkpe2JWPWMuY3JlYXRlRWxlbWVudCgiYSIpLGJWLmhyZWY9IiIsYlY9YlYuaHJlZn1iVz1iUi5leGVjKGJWLnRvTG93ZXJDYXNlKCkpfHxbXSxmLmZuLmV4dGVuZCh7bG9hZDpmdW5jdGlvbihhLGMsZCl7aWYodHlwZW9mIGEhPSJzdHJpbmciJiZiUylyZXR1cm4gYlMuYXBwbHkodGhpcyxhcmd1bWVudHMpO2lmKCF0aGlzLmxlbmd0aClyZXR1cm4gdGhpczt2YXIgZT1hLmluZGV4T2YoIiAiKTtpZihlPj0wKXt2YXIgZz1hLnNsaWNlKGUsYS5sZW5ndGgpO2E9YS5zbGljZSgwLGUpfXZhciBoPSJHRVQiO2MmJihmLmlzRnVuY3Rpb24oYyk/KGQ9YyxjPWIpOnR5cGVvZiBjPT0ib2JqZWN0IiYmKGM9Zi5wYXJhbShjLGYuYWpheFNldHRpbmdzLnRyYWRpdGlvbmFsKSxoPSJQT1NUIikpO3ZhciBpPXRoaXM7Zi5hamF4KHt1cmw6YSx0eXBlOmgsZGF0YVR5cGU6Imh0bWwiLGRhdGE6Yyxjb21wbGV0ZTpmdW5jdGlvbihhLGIsYyl7Yz1hLnJlc3BvbnNlVGV4dCxhLmlzUmVzb2x2ZWQoKSYmKGEuZG9uZShmdW5jdGlvbihhKXtjPWF9KSxpLmh0bWwoZz9mKCI8ZGl2PiIpLmFwcGVuZChjLnJlcGxhY2UoYk4sIiIpKS5maW5kKGcpOmMpKSxkJiZpLmVhY2goZCxbYyxiLGFdKX19KTtyZXR1cm4gdGhpc30sc2VyaWFsaXplOmZ1bmN0aW9uKCl7cmV0dXJuIGYucGFyYW0odGhpcy5zZXJpYWxpemVBcnJheSgpKX0sc2VyaWFsaXplQXJyYXk6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tYXAoZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lbGVtZW50cz9mLm1ha2VBcnJheSh0aGlzLmVsZW1lbnRzKTp0aGlzfSkuZmlsdGVyKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubmFtZSYmIXRoaXMuZGlzYWJsZWQmJih0aGlzLmNoZWNrZWR8fGJPLnRlc3QodGhpcy5ub2RlTmFtZSl8fGJJLnRlc3QodGhpcy50eXBlKSl9KS5tYXAoZnVuY3Rpb24oYSxiKXt2YXIgYz1mKHRoaXMpLnZhbCgpO3JldHVybiBjPT1udWxsP251bGw6Zi5pc0FycmF5KGMpP2YubWFwKGMsZnVuY3Rpb24oYSxjKXtyZXR1cm57bmFtZTpiLm5hbWUsdmFsdWU6YS5yZXBsYWNlKGJGLCJcclxuIil9fSk6e25hbWU6Yi5uYW1lLHZhbHVlOmMucmVwbGFjZShiRiwiXHJcbiIpfX0pLmdldCgpfX0pLGYuZWFjaCgiYWpheFN0YXJ0IGFqYXhTdG9wIGFqYXhDb21wbGV0ZSBhamF4RXJyb3IgYWpheFN1Y2Nlc3MgYWpheFNlbmQiLnNwbGl0KCIgIiksZnVuY3Rpb24oYSxiKXtmLmZuW2JdPWZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLm9uKGIsYSl9fSksZi5lYWNoKFsiZ2V0IiwicG9zdCJdLGZ1bmN0aW9uKGEsYyl7ZltjXT1mdW5jdGlvbihhLGQsZSxnKXtmLmlzRnVuY3Rpb24oZCkmJihnPWd8fGUsZT1kLGQ9Yik7cmV0dXJuIGYuYWpheCh7dHlwZTpjLHVybDphLGRhdGE6ZCxzdWNjZXNzOmUsZGF0YVR5cGU6Z30pfX0pLGYuZXh0ZW5kKHtnZXRTY3JpcHQ6ZnVuY3Rpb24oYSxjKXtyZXR1cm4gZi5nZXQoYSxiLGMsInNjcmlwdCIpfSxnZXRKU09OOmZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gZi5nZXQoYSxiLGMsImpzb24iKX0sYWpheFNldHVwOmZ1bmN0aW9uKGEsYil7Yj9iXyhhLGYuYWpheFNldHRpbmdzKTooYj1hLGE9Zi5hamF4U2V0dGluZ3MpLGJfKGEsYik7cmV0dXJuIGF9LGFqYXhTZXR0aW5nczp7dXJsOmJWLGlzTG9jYWw6YkoudGVzdChiV1sxXSksZ2xvYmFsOiEwLHR5cGU6IkdFVCIsY29udGVudFR5cGU6ImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCIscHJvY2Vzc0RhdGE6ITAsYXN5bmM6ITAsYWNjZXB0czp7eG1sOiJhcHBsaWNhdGlvbi94bWwsIHRleHQveG1sIixodG1sOiJ0ZXh0L2h0bWwiLHRleHQ6InRleHQvcGxhaW4iLGpzb246ImFwcGxpY2F0aW9uL2pzb24sIHRleHQvamF2YXNjcmlwdCIsIioiOmJYfSxjb250ZW50czp7eG1sOi94bWwvLGh0bWw6L2h0bWwvLGpzb246L2pzb24vfSxyZXNwb25zZUZpZWxkczp7eG1sOiJyZXNwb25zZVhNTCIsdGV4dDoicmVzcG9uc2VUZXh0In0sY29udmVydGVyczp7IiogdGV4dCI6YS5TdHJpbmcsInRleHQgaHRtbCI6ITAsInRleHQganNvbiI6Zi5wYXJzZUpTT04sInRleHQgeG1sIjpmLnBhcnNlWE1MfSxmbGF0T3B0aW9uczp7Y29udGV4dDohMCx1cmw6ITB9fSxhamF4UHJlZmlsdGVyOmJaKGJUKSxhamF4VHJhbnNwb3J0OmJaKGJVKSxhamF4OmZ1bmN0aW9uKGEsYyl7ZnVuY3Rpb24gdyhhLGMsbCxtKXtpZihzIT09Mil7cz0yLHEmJmNsZWFyVGltZW91dChxKSxwPWIsbj1tfHwiIix2LnJlYWR5U3RhdGU9YT4wPzQ6MDt2YXIgbyxyLHUsdz1jLHg9bD9jYihkLHYsbCk6Yix5LHo7aWYoYT49MjAwJiZhPDMwMHx8YT09PTMwNCl7aWYoZC5pZk1vZGlmaWVkKXtpZih5PXYuZ2V0UmVzcG9uc2VIZWFkZXIoIkxhc3QtTW9kaWZpZWQiKSlmLmxhc3RNb2RpZmllZFtrXT15O2lmKHo9di5nZXRSZXNwb25zZUhlYWRlcigiRXRhZyIpKWYuZXRhZ1trXT16fWlmKGE9PT0zMDQpdz0ibm90bW9kaWZpZWQiLG89ITA7ZWxzZSB0cnl7cj1jYyhkLHgpLHc9InN1Y2Nlc3MiLG89ITB9Y2F0Y2goQSl7dz0icGFyc2VyZXJyb3IiLHU9QX19ZWxzZXt1PXc7aWYoIXd8fGEpdz0iZXJyb3IiLGE8MCYmKGE9MCl9di5zdGF0dXM9YSx2LnN0YXR1c1RleHQ9IiIrKGN8fHcpLG8/aC5yZXNvbHZlV2l0aChlLFtyLHcsdl0pOmgucmVqZWN0V2l0aChlLFt2LHcsdV0pLHYuc3RhdHVzQ29kZShqKSxqPWIsdCYmZy50cmlnZ2VyKCJhamF4Iisobz8iU3VjY2VzcyI6IkVycm9yIiksW3YsZCxvP3I6dV0pLGkuZmlyZVdpdGgoZSxbdix3XSksdCYmKGcudHJpZ2dlcigiYWpheENvbXBsZXRlIixbdixkXSksLS1mLmFjdGl2ZXx8Zi5ldmVudC50cmlnZ2VyKCJhamF4U3RvcCIpKX19dHlwZW9mIGE9PSJvYmplY3QiJiYoYz1hLGE9YiksYz1jfHx7fTt2YXIgZD1mLmFqYXhTZXR1cCh7fSxjKSxlPWQuY29udGV4dHx8ZCxnPWUhPT1kJiYoZS5ub2RlVHlwZXx8ZSBpbnN0YW5jZW9mIGYpP2YoZSk6Zi5ldmVudCxoPWYuRGVmZXJyZWQoKSxpPWYuQ2FsbGJhY2tzKCJvbmNlIG1lbW9yeSIpLGo9ZC5zdGF0dXNDb2RlfHx7fSxrLGw9e30sbT17fSxuLG8scCxxLHIscz0wLHQsdSx2PXtyZWFkeVN0YXRlOjAsc2V0UmVxdWVzdEhlYWRlcjpmdW5jdGlvbihhLGIpe2lmKCFzKXt2YXIgYz1hLnRvTG93ZXJDYXNlKCk7YT1tW2NdPW1bY118fGEsbFthXT1ifXJldHVybiB0aGlzfSxnZXRBbGxSZXNwb25zZUhlYWRlcnM6ZnVuY3Rpb24oKXtyZXR1cm4gcz09PTI/bjpudWxsfSxnZXRSZXNwb25zZUhlYWRlcjpmdW5jdGlvbihhKXt2YXIgYztpZihzPT09Mil7aWYoIW8pe289e307d2hpbGUoYz1iSC5leGVjKG4pKW9bY1sxXS50b0xvd2VyQ2FzZSgpXT1jWzJdfWM9b1thLnRvTG93ZXJDYXNlKCldfXJldHVybiBjPT09Yj9udWxsOmN9LG92ZXJyaWRlTWltZVR5cGU6ZnVuY3Rpb24oYSl7c3x8KGQubWltZVR5cGU9YSk7cmV0dXJuIHRoaXN9LGFib3J0OmZ1bmN0aW9uKGEpe2E9YXx8ImFib3J0IixwJiZwLmFib3J0KGEpLHcoMCxhKTtyZXR1cm4gdGhpc319O2gucHJvbWlzZSh2KSx2LnN1Y2Nlc3M9di5kb25lLHYuZXJyb3I9di5mYWlsLHYuY29tcGxldGU9aS5hZGQsdi5zdGF0dXNDb2RlPWZ1bmN0aW9uKGEpe2lmKGEpe3ZhciBiO2lmKHM8Milmb3IoYiBpbiBhKWpbYl09W2pbYl0sYVtiXV07ZWxzZSBiPWFbdi5zdGF0dXNdLHYudGhlbihiLGIpfXJldHVybiB0aGlzfSxkLnVybD0oKGF8fGQudXJsKSsiIikucmVwbGFjZShiRywiIikucmVwbGFjZShiTCxiV1sxXSsiLy8iKSxkLmRhdGFUeXBlcz1mLnRyaW0oZC5kYXRhVHlwZXx8IioiKS50b0xvd2VyQ2FzZSgpLnNwbGl0KGJQKSxkLmNyb3NzRG9tYWluPT1udWxsJiYocj1iUi5leGVjKGQudXJsLnRvTG93ZXJDYXNlKCkpLGQuY3Jvc3NEb21haW49ISghcnx8clsxXT09YldbMV0mJnJbMl09PWJXWzJdJiYoclszXXx8KHJbMV09PT0iaHR0cDoiPzgwOjQ0MykpPT0oYldbM118fChiV1sxXT09PSJodHRwOiI/ODA6NDQzKSkpKSxkLmRhdGEmJmQucHJvY2Vzc0RhdGEmJnR5cGVvZiBkLmRhdGEhPSJzdHJpbmciJiYoZC5kYXRhPWYucGFyYW0oZC5kYXRhLGQudHJhZGl0aW9uYWwpKSxiJChiVCxkLGMsdik7aWYocz09PTIpcmV0dXJuITE7dD1kLmdsb2JhbCxkLnR5cGU9ZC50eXBlLnRvVXBwZXJDYXNlKCksZC5oYXNDb250ZW50PSFiSy50ZXN0KGQudHlwZSksdCYmZi5hY3RpdmUrKz09PTAmJmYuZXZlbnQudHJpZ2dlcigiYWpheFN0YXJ0Iik7aWYoIWQuaGFzQ29udGVudCl7ZC5kYXRhJiYoZC51cmwrPShiTS50ZXN0KGQudXJsKT8iJiI6Ij8iKStkLmRhdGEsZGVsZXRlIGQuZGF0YSksaz1kLnVybDtpZihkLmNhY2hlPT09ITEpe3ZhciB4PWYubm93KCkseT1kLnVybC5yZXBsYWNlKGJRLCIkMV89Iit4KTtkLnVybD15Kyh5PT09ZC51cmw/KGJNLnRlc3QoZC51cmwpPyImIjoiPyIpKyJfPSIreDoiIil9fShkLmRhdGEmJmQuaGFzQ29udGVudCYmZC5jb250ZW50VHlwZSE9PSExfHxjLmNvbnRlbnRUeXBlKSYmdi5zZXRSZXF1ZXN0SGVhZGVyKCJDb250ZW50LVR5cGUiLGQuY29udGVudFR5cGUpLGQuaWZNb2RpZmllZCYmKGs9a3x8ZC51cmwsZi5sYXN0TW9kaWZpZWRba10mJnYuc2V0UmVxdWVzdEhlYWRlcigiSWYtTW9kaWZpZWQtU2luY2UiLGYubGFzdE1vZGlmaWVkW2tdKSxmLmV0YWdba10mJnYuc2V0UmVxdWVzdEhlYWRlcigiSWYtTm9uZS1NYXRjaCIsZi5ldGFnW2tdKSksdi5zZXRSZXF1ZXN0SGVhZGVyKCJBY2NlcHQiLGQuZGF0YVR5cGVzWzBdJiZkLmFjY2VwdHNbZC5kYXRhVHlwZXNbMF1dP2QuYWNjZXB0c1tkLmRhdGFUeXBlc1swXV0rKGQuZGF0YVR5cGVzWzBdIT09IioiPyIsICIrYlgrIjsgcT0wLjAxIjoiIik6ZC5hY2NlcHRzWyIqIl0pO2Zvcih1IGluIGQuaGVhZGVycyl2LnNldFJlcXVlc3RIZWFkZXIodSxkLmhlYWRlcnNbdV0pO2lmKGQuYmVmb3JlU2VuZCYmKGQuYmVmb3JlU2VuZC5jYWxsKGUsdixkKT09PSExfHxzPT09Mikpe3YuYWJvcnQoKTtyZXR1cm4hMX1mb3IodSBpbntzdWNjZXNzOjEsZXJyb3I6MSxjb21wbGV0ZToxfSl2W3VdKGRbdV0pO3A9YiQoYlUsZCxjLHYpO2lmKCFwKXcoLTEsIk5vIFRyYW5zcG9ydCIpO2Vsc2V7di5yZWFkeVN0YXRlPTEsdCYmZy50cmlnZ2VyKCJhamF4U2VuZCIsW3YsZF0pLGQuYXN5bmMmJmQudGltZW91dD4wJiYocT1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7di5hYm9ydCgidGltZW91dCIpfSxkLnRpbWVvdXQpKTt0cnl7cz0xLHAuc2VuZChsLHcpfWNhdGNoKHope2lmKHM8Mil3KC0xLHopO2Vsc2UgdGhyb3cgen19cmV0dXJuIHZ9LHBhcmFtOmZ1bmN0aW9uKGEsYyl7dmFyIGQ9W10sZT1mdW5jdGlvbihhLGIpe2I9Zi5pc0Z1bmN0aW9uKGIpP2IoKTpiLGRbZC5sZW5ndGhdPWVuY29kZVVSSUNvbXBvbmVudChhKSsiPSIrZW5jb2RlVVJJQ29tcG9uZW50KGIpfTtjPT09YiYmKGM9Zi5hamF4U2V0dGluZ3MudHJhZGl0aW9uYWwpO2lmKGYuaXNBcnJheShhKXx8YS5qcXVlcnkmJiFmLmlzUGxhaW5PYmplY3QoYSkpZi5lYWNoKGEsZnVuY3Rpb24oKXtlKHRoaXMubmFtZSx0aGlzLnZhbHVlKX0pO2Vsc2UgZm9yKHZhciBnIGluIGEpY2EoZyxhW2ddLGMsZSk7cmV0dXJuIGQuam9pbigiJiIpLnJlcGxhY2UoYkQsIisiKX19KSxmLmV4dGVuZCh7YWN0aXZlOjAsbGFzdE1vZGlmaWVkOnt9LGV0YWc6e319KTt2YXIgY2Q9Zi5ub3coKSxjZT0vKFw9KVw/KCZ8JCl8XD9cPy9pO2YuYWpheFNldHVwKHtqc29ucDoiY2FsbGJhY2siLGpzb25wQ2FsbGJhY2s6ZnVuY3Rpb24oKXtyZXR1cm4gZi5leHBhbmRvKyJfIitjZCsrfX0pLGYuYWpheFByZWZpbHRlcigianNvbiBqc29ucCIsZnVuY3Rpb24oYixjLGQpe3ZhciBlPWIuY29udGVudFR5cGU9PT0iYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkIiYmdHlwZW9mIGIuZGF0YT09InN0cmluZyI7aWYoYi5kYXRhVHlwZXNbMF09PT0ianNvbnAifHxiLmpzb25wIT09ITEmJihjZS50ZXN0KGIudXJsKXx8ZSYmY2UudGVzdChiLmRhdGEpKSl7dmFyIGcsaD1iLmpzb25wQ2FsbGJhY2s9Zi5pc0Z1bmN0aW9uKGIuanNvbnBDYWxsYmFjayk/Yi5qc29ucENhbGxiYWNrKCk6Yi5qc29ucENhbGxiYWNrLGk9YVtoXSxqPWIudXJsLGs9Yi5kYXRhLGw9IiQxIitoKyIkMiI7Yi5qc29ucCE9PSExJiYoaj1qLnJlcGxhY2UoY2UsbCksYi51cmw9PT1qJiYoZSYmKGs9ay5yZXBsYWNlKGNlLGwpKSxiLmRhdGE9PT1rJiYoais9KC9cPy8udGVzdChqKT8iJiI6Ij8iKStiLmpzb25wKyI9IitoKSkpLGIudXJsPWosYi5kYXRhPWssYVtoXT1mdW5jdGlvbihhKXtnPVthXX0sZC5hbHdheXMoZnVuY3Rpb24oKXthW2hdPWksZyYmZi5pc0Z1bmN0aW9uKGkpJiZhW2hdKGdbMF0pfSksYi5jb252ZXJ0ZXJzWyJzY3JpcHQganNvbiJdPWZ1bmN0aW9uKCl7Z3x8Zi5lcnJvcihoKyIgd2FzIG5vdCBjYWxsZWQiKTtyZXR1cm4gZ1swXX0sYi5kYXRhVHlwZXNbMF09Impzb24iO3JldHVybiJzY3JpcHQifX0pLGYuYWpheFNldHVwKHthY2NlcHRzOntzY3JpcHQ6InRleHQvamF2YXNjcmlwdCwgYXBwbGljYXRpb24vamF2YXNjcmlwdCwgYXBwbGljYXRpb24vZWNtYXNjcmlwdCwgYXBwbGljYXRpb24veC1lY21hc2NyaXB0In0sY29udGVudHM6e3NjcmlwdDovamF2YXNjcmlwdHxlY21hc2NyaXB0L30sY29udmVydGVyczp7InRleHQgc2NyaXB0IjpmdW5jdGlvbihhKXtmLmdsb2JhbEV2YWwoYSk7cmV0dXJuIGF9fX0pLGYuYWpheFByZWZpbHRlcigic2NyaXB0IixmdW5jdGlvbihhKXthLmNhY2hlPT09YiYmKGEuY2FjaGU9ITEpLGEuY3Jvc3NEb21haW4mJihhLnR5cGU9IkdFVCIsYS5nbG9iYWw9ITEpfSksZi5hamF4VHJhbnNwb3J0KCJzY3JpcHQiLGZ1bmN0aW9uKGEpe2lmKGEuY3Jvc3NEb21haW4pe3ZhciBkLGU9Yy5oZWFkfHxjLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJoZWFkIilbMF18fGMuZG9jdW1lbnRFbGVtZW50O3JldHVybntzZW5kOmZ1bmN0aW9uKGYsZyl7ZD1jLmNyZWF0ZUVsZW1lbnQoInNjcmlwdCIpLGQuYXN5bmM9ImFzeW5jIixhLnNjcmlwdENoYXJzZXQmJihkLmNoYXJzZXQ9YS5zY3JpcHRDaGFyc2V0KSxkLnNyYz1hLnVybCxkLm9ubG9hZD1kLm9ucmVhZHlzdGF0ZWNoYW5nZT1mdW5jdGlvbihhLGMpe2lmKGN8fCFkLnJlYWR5U3RhdGV8fC9sb2FkZWR8Y29tcGxldGUvLnRlc3QoZC5yZWFkeVN0YXRlKSlkLm9ubG9hZD1kLm9ucmVhZHlzdGF0ZWNoYW5nZT1udWxsLGUmJmQucGFyZW50Tm9kZSYmZS5yZW1vdmVDaGlsZChkKSxkPWIsY3x8ZygyMDAsInN1Y2Nlc3MiKX0sZS5pbnNlcnRCZWZvcmUoZCxlLmZpcnN0Q2hpbGQpfSxhYm9ydDpmdW5jdGlvbigpe2QmJmQub25sb2FkKDAsMSl9fX19KTt2YXIgY2Y9YS5BY3RpdmVYT2JqZWN0P2Z1bmN0aW9uKCl7Zm9yKHZhciBhIGluIGNoKWNoW2FdKDAsMSl9OiExLGNnPTAsY2g7Zi5hamF4U2V0dGluZ3MueGhyPWEuQWN0aXZlWE9iamVjdD9mdW5jdGlvbigpe3JldHVybiF0aGlzLmlzTG9jYWwmJmNpKCl8fGNqKCl9OmNpLGZ1bmN0aW9uKGEpe2YuZXh0ZW5kKGYuc3VwcG9ydCx7YWpheDohIWEsY29yczohIWEmJiJ3aXRoQ3JlZGVudGlhbHMiaW4gYX0pfShmLmFqYXhTZXR0aW5ncy54aHIoKSksZi5zdXBwb3J0LmFqYXgmJmYuYWpheFRyYW5zcG9ydChmdW5jdGlvbihjKXtpZighYy5jcm9zc0RvbWFpbnx8Zi5zdXBwb3J0LmNvcnMpe3ZhciBkO3JldHVybntzZW5kOmZ1bmN0aW9uKGUsZyl7dmFyIGg9Yy54aHIoKSxpLGo7Yy51c2VybmFtZT9oLm9wZW4oYy50eXBlLGMudXJsLGMuYXN5bmMsYy51c2VybmFtZSxjLnBhc3N3b3JkKTpoLm9wZW4oYy50eXBlLGMudXJsLGMuYXN5bmMpO2lmKGMueGhyRmllbGRzKWZvcihqIGluIGMueGhyRmllbGRzKWhbal09Yy54aHJGaWVsZHNbal07Yy5taW1lVHlwZSYmaC5vdmVycmlkZU1pbWVUeXBlJiZoLm92ZXJyaWRlTWltZVR5cGUoYy5taW1lVHlwZSksIWMuY3Jvc3NEb21haW4mJiFlWyJYLVJlcXVlc3RlZC1XaXRoIl0mJihlWyJYLVJlcXVlc3RlZC1XaXRoIl09IlhNTEh0dHBSZXF1ZXN0Iik7dHJ5e2ZvcihqIGluIGUpaC5zZXRSZXF1ZXN0SGVhZGVyKGosZVtqXSl9Y2F0Y2goayl7fWguc2VuZChjLmhhc0NvbnRlbnQmJmMuZGF0YXx8bnVsbCksZD1mdW5jdGlvbihhLGUpe3ZhciBqLGssbCxtLG47dHJ5e2lmKGQmJihlfHxoLnJlYWR5U3RhdGU9PT00KSl7ZD1iLGkmJihoLm9ucmVhZHlzdGF0ZWNoYW5nZT1mLm5vb3AsY2YmJmRlbGV0ZSBjaFtpXSk7aWYoZSloLnJlYWR5U3RhdGUhPT00JiZoLmFib3J0KCk7ZWxzZXtqPWguc3RhdHVzLGw9aC5nZXRBbGxSZXNwb25zZUhlYWRlcnMoKSxtPXt9LG49aC5yZXNwb25zZVhNTCxuJiZuLmRvY3VtZW50RWxlbWVudCYmKG0ueG1sPW4pLG0udGV4dD1oLnJlc3BvbnNlVGV4dDt0cnl7az1oLnN0YXR1c1RleHR9Y2F0Y2gobyl7az0iIn0haiYmYy5pc0xvY2FsJiYhYy5jcm9zc0RvbWFpbj9qPW0udGV4dD8yMDA6NDA0Omo9PT0xMjIzJiYoaj0yMDQpfX19Y2F0Y2gocCl7ZXx8ZygtMSxwKX1tJiZnKGosayxtLGwpfSwhYy5hc3luY3x8aC5yZWFkeVN0YXRlPT09ND9kKCk6KGk9KytjZyxjZiYmKGNofHwoY2g9e30sZihhKS51bmxvYWQoY2YpKSxjaFtpXT1kKSxoLm9ucmVhZHlzdGF0ZWNoYW5nZT1kKX0sYWJvcnQ6ZnVuY3Rpb24oKXtkJiZkKDAsMSl9fX19KTt2YXIgY2s9e30sY2wsY20sY249L14oPzp0b2dnbGV8c2hvd3xoaWRlKSQvLGNvPS9eKFsrXC1dPSk/KFtcZCsuXC1dKykoW2EteiVdKikkL2ksY3AsY3E9W1siaGVpZ2h0IiwibWFyZ2luVG9wIiwibWFyZ2luQm90dG9tIiwicGFkZGluZ1RvcCIsInBhZGRpbmdCb3R0b20iXSxbIndpZHRoIiwibWFyZ2luTGVmdCIsIm1hcmdpblJpZ2h0IiwicGFkZGluZ0xlZnQiLCJwYWRkaW5nUmlnaHQiXSxbIm9wYWNpdHkiXV0sY3I7Zi5mbi5leHRlbmQoe3Nob3c6ZnVuY3Rpb24oYSxiLGMpe3ZhciBkLGU7aWYoYXx8YT09PTApcmV0dXJuIHRoaXMuYW5pbWF0ZShjdSgic2hvdyIsMyksYSxiLGMpO2Zvcih2YXIgZz0wLGg9dGhpcy5sZW5ndGg7ZzxoO2crKylkPXRoaXNbZ10sZC5zdHlsZSYmKGU9ZC5zdHlsZS5kaXNwbGF5LCFmLl9kYXRhKGQsIm9sZGRpc3BsYXkiKSYmZT09PSJub25lIiYmKGU9ZC5zdHlsZS5kaXNwbGF5PSIiKSxlPT09IiImJmYuY3NzKGQsImRpc3BsYXkiKT09PSJub25lIiYmZi5fZGF0YShkLCJvbGRkaXNwbGF5IixjdihkLm5vZGVOYW1lKSkpO2ZvcihnPTA7ZzxoO2crKyl7ZD10aGlzW2ddO2lmKGQuc3R5bGUpe2U9ZC5zdHlsZS5kaXNwbGF5O2lmKGU9PT0iInx8ZT09PSJub25lIilkLnN0eWxlLmRpc3BsYXk9Zi5fZGF0YShkLCJvbGRkaXNwbGF5Iil8fCIifX1yZXR1cm4gdGhpc30saGlkZTpmdW5jdGlvbihhLGIsYyl7aWYoYXx8YT09PTApcmV0dXJuIHRoaXMuYW5pbWF0ZShjdSgiaGlkZSIsMyksYSxiLGMpO3ZhciBkLGUsZz0wLGg9dGhpcy5sZW5ndGg7Zm9yKDtnPGg7ZysrKWQ9dGhpc1tnXSxkLnN0eWxlJiYoZT1mLmNzcyhkLCJkaXNwbGF5IiksZSE9PSJub25lIiYmIWYuX2RhdGEoZCwib2xkZGlzcGxheSIpJiZmLl9kYXRhKGQsIm9sZGRpc3BsYXkiLGUpKTtmb3IoZz0wO2c8aDtnKyspdGhpc1tnXS5zdHlsZSYmKHRoaXNbZ10uc3R5bGUuZGlzcGxheT0ibm9uZSIpO3JldHVybiB0aGlzfSxfdG9nZ2xlOmYuZm4udG9nZ2xlLHRvZ2dsZTpmdW5jdGlvbihhLGIsYyl7dmFyIGQ9dHlwZW9mIGE9PSJib29sZWFuIjtmLmlzRnVuY3Rpb24oYSkmJmYuaXNGdW5jdGlvbihiKT90aGlzLl90b2dnbGUuYXBwbHkodGhpcyxhcmd1bWVudHMpOmE9PW51bGx8fGQ/dGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIGI9ZD9hOmYodGhpcykuaXMoIjpoaWRkZW4iKTtmKHRoaXMpW2I/InNob3ciOiJoaWRlIl0oKX0pOnRoaXMuYW5pbWF0ZShjdSgidG9nZ2xlIiwzKSxhLGIsYyk7cmV0dXJuIHRoaXN9LGZhZGVUbzpmdW5jdGlvbihhLGIsYyxkKXtyZXR1cm4gdGhpcy5maWx0ZXIoIjpoaWRkZW4iKS5jc3MoIm9wYWNpdHkiLDApLnNob3coKS5lbmQoKS5hbmltYXRlKHtvcGFjaXR5OmJ9LGEsYyxkKX0sYW5pbWF0ZTpmdW5jdGlvbihhLGIsYyxkKXtmdW5jdGlvbiBnKCl7ZS5xdWV1ZT09PSExJiZmLl9tYXJrKHRoaXMpO3ZhciBiPWYuZXh0ZW5kKHt9LGUpLGM9dGhpcy5ub2RlVHlwZT09PTEsZD1jJiZmKHRoaXMpLmlzKCI6aGlkZGVuIiksZyxoLGksaixrLGwsbSxuLG87Yi5hbmltYXRlZFByb3BlcnRpZXM9e307Zm9yKGkgaW4gYSl7Zz1mLmNhbWVsQ2FzZShpKSxpIT09ZyYmKGFbZ109YVtpXSxkZWxldGUgYVtpXSksaD1hW2ddLGYuaXNBcnJheShoKT8oYi5hbmltYXRlZFByb3BlcnRpZXNbZ109aFsxXSxoPWFbZ109aFswXSk6Yi5hbmltYXRlZFByb3BlcnRpZXNbZ109Yi5zcGVjaWFsRWFzaW5nJiZiLnNwZWNpYWxFYXNpbmdbZ118fGIuZWFzaW5nfHwic3dpbmciO2lmKGg9PT0iaGlkZSImJmR8fGg9PT0ic2hvdyImJiFkKXJldHVybiBiLmNvbXBsZXRlLmNhbGwodGhpcyk7YyYmKGc9PT0iaGVpZ2h0Inx8Zz09PSJ3aWR0aCIpJiYoYi5vdmVyZmxvdz1bdGhpcy5zdHlsZS5vdmVyZmxvdyx0aGlzLnN0eWxlLm92ZXJmbG93WCx0aGlzLnN0eWxlLm92ZXJmbG93WV0sZi5jc3ModGhpcywiZGlzcGxheSIpPT09ImlubGluZSImJmYuY3NzKHRoaXMsImZsb2F0Iik9PT0ibm9uZSImJighZi5zdXBwb3J0LmlubGluZUJsb2NrTmVlZHNMYXlvdXR8fGN2KHRoaXMubm9kZU5hbWUpPT09ImlubGluZSI/dGhpcy5zdHlsZS5kaXNwbGF5PSJpbmxpbmUtYmxvY2siOnRoaXMuc3R5bGUuem9vbT0xKSl9Yi5vdmVyZmxvdyE9bnVsbCYmKHRoaXMuc3R5bGUub3ZlcmZsb3c9ImhpZGRlbiIpO2ZvcihpIGluIGEpaj1uZXcgZi5meCh0aGlzLGIsaSksaD1hW2ldLGNuLnRlc3QoaCk/KG89Zi5fZGF0YSh0aGlzLCJ0b2dnbGUiK2kpfHwoaD09PSJ0b2dnbGUiP2Q/InNob3ciOiJoaWRlIjowKSxvPyhmLl9kYXRhKHRoaXMsInRvZ2dsZSIraSxvPT09InNob3ciPyJoaWRlIjoic2hvdyIpLGpbb10oKSk6altoXSgpKTooaz1jby5leGVjKGgpLGw9ai5jdXIoKSxrPyhtPXBhcnNlRmxvYXQoa1syXSksbj1rWzNdfHwoZi5jc3NOdW1iZXJbaV0/IiI6InB4IiksbiE9PSJweCImJihmLnN0eWxlKHRoaXMsaSwobXx8MSkrbiksbD0obXx8MSkvai5jdXIoKSpsLGYuc3R5bGUodGhpcyxpLGwrbikpLGtbMV0mJihtPShrWzFdPT09Ii09Ij8tMToxKSptK2wpLGouY3VzdG9tKGwsbSxuKSk6ai5jdXN0b20obCxoLCIiKSk7cmV0dXJuITB9dmFyIGU9Zi5zcGVlZChiLGMsZCk7aWYoZi5pc0VtcHR5T2JqZWN0KGEpKXJldHVybiB0aGlzLmVhY2goZS5jb21wbGV0ZSxbITFdKTthPWYuZXh0ZW5kKHt9LGEpO3JldHVybiBlLnF1ZXVlPT09ITE/dGhpcy5lYWNoKGcpOnRoaXMucXVldWUoZS5xdWV1ZSxnKX0sc3RvcDpmdW5jdGlvbihhLGMsZCl7dHlwZW9mIGEhPSJzdHJpbmciJiYoZD1jLGM9YSxhPWIpLGMmJmEhPT0hMSYmdGhpcy5xdWV1ZShhfHwiZngiLFtdKTtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7ZnVuY3Rpb24gaChhLGIsYyl7dmFyIGU9YltjXTtmLnJlbW92ZURhdGEoYSxjLCEwKSxlLnN0b3AoZCl9dmFyIGIsYz0hMSxlPWYudGltZXJzLGc9Zi5fZGF0YSh0aGlzKTtkfHxmLl91bm1hcmsoITAsdGhpcyk7aWYoYT09bnVsbClmb3IoYiBpbiBnKWdbYl0mJmdbYl0uc3RvcCYmYi5pbmRleE9mKCIucnVuIik9PT1iLmxlbmd0aC00JiZoKHRoaXMsZyxiKTtlbHNlIGdbYj1hKyIucnVuIl0mJmdbYl0uc3RvcCYmaCh0aGlzLGcsYik7Zm9yKGI9ZS5sZW5ndGg7Yi0tOyllW2JdLmVsZW09PT10aGlzJiYoYT09bnVsbHx8ZVtiXS5xdWV1ZT09PWEpJiYoZD9lW2JdKCEwKTplW2JdLnNhdmVTdGF0ZSgpLGM9ITAsZS5zcGxpY2UoYiwxKSk7KCFkfHwhYykmJmYuZGVxdWV1ZSh0aGlzLGEpfSl9fSksZi5lYWNoKHtzbGlkZURvd246Y3UoInNob3ciLDEpLHNsaWRlVXA6Y3UoImhpZGUiLDEpLHNsaWRlVG9nZ2xlOmN1KCJ0b2dnbGUiLDEpLGZhZGVJbjp7b3BhY2l0eToic2hvdyJ9LGZhZGVPdXQ6e29wYWNpdHk6ImhpZGUifSxmYWRlVG9nZ2xlOntvcGFjaXR5OiJ0b2dnbGUifX0sZnVuY3Rpb24oYSxiKXtmLmZuW2FdPWZ1bmN0aW9uKGEsYyxkKXtyZXR1cm4gdGhpcy5hbmltYXRlKGIsYSxjLGQpfX0pLGYuZXh0ZW5kKHtzcGVlZDpmdW5jdGlvbihhLGIsYyl7dmFyIGQ9YSYmdHlwZW9mIGE9PSJvYmplY3QiP2YuZXh0ZW5kKHt9LGEpOntjb21wbGV0ZTpjfHwhYyYmYnx8Zi5pc0Z1bmN0aW9uKGEpJiZhLGR1cmF0aW9uOmEsZWFzaW5nOmMmJmJ8fGImJiFmLmlzRnVuY3Rpb24oYikmJmJ9O2QuZHVyYXRpb249Zi5meC5vZmY/MDp0eXBlb2YgZC5kdXJhdGlvbj09Im51bWJlciI/ZC5kdXJhdGlvbjpkLmR1cmF0aW9uIGluIGYuZnguc3BlZWRzP2YuZnguc3BlZWRzW2QuZHVyYXRpb25dOmYuZnguc3BlZWRzLl9kZWZhdWx0O2lmKGQucXVldWU9PW51bGx8fGQucXVldWU9PT0hMClkLnF1ZXVlPSJmeCI7ZC5vbGQ9ZC5jb21wbGV0ZSxkLmNvbXBsZXRlPWZ1bmN0aW9uKGEpe2YuaXNGdW5jdGlvbihkLm9sZCkmJmQub2xkLmNhbGwodGhpcyksZC5xdWV1ZT9mLmRlcXVldWUodGhpcyxkLnF1ZXVlKTphIT09ITEmJmYuX3VubWFyayh0aGlzKX07cmV0dXJuIGR9LGVhc2luZzp7bGluZWFyOmZ1bmN0aW9uKGEsYixjLGQpe3JldHVybiBjK2QqYX0sc3dpbmc6ZnVuY3Rpb24oYSxiLGMsZCl7cmV0dXJuKC1NYXRoLmNvcyhhKk1hdGguUEkpLzIrLjUpKmQrY319LHRpbWVyczpbXSxmeDpmdW5jdGlvbihhLGIsYyl7dGhpcy5vcHRpb25zPWIsdGhpcy5lbGVtPWEsdGhpcy5wcm9wPWMsYi5vcmlnPWIub3JpZ3x8e319fSksZi5meC5wcm90b3R5cGU9e3VwZGF0ZTpmdW5jdGlvbigpe3RoaXMub3B0aW9ucy5zdGVwJiZ0aGlzLm9wdGlvbnMuc3RlcC5jYWxsKHRoaXMuZWxlbSx0aGlzLm5vdyx0aGlzKSwoZi5meC5zdGVwW3RoaXMucHJvcF18fGYuZnguc3RlcC5fZGVmYXVsdCkodGhpcyl9LGN1cjpmdW5jdGlvbigpe2lmKHRoaXMuZWxlbVt0aGlzLnByb3BdIT1udWxsJiYoIXRoaXMuZWxlbS5zdHlsZXx8dGhpcy5lbGVtLnN0eWxlW3RoaXMucHJvcF09PW51bGwpKXJldHVybiB0aGlzLmVsZW1bdGhpcy5wcm9wXTt2YXIgYSxiPWYuY3NzKHRoaXMuZWxlbSx0aGlzLnByb3ApO3JldHVybiBpc05hTihhPXBhcnNlRmxvYXQoYikpPyFifHxiPT09ImF1dG8iPzA6YjphfSxjdXN0b206ZnVuY3Rpb24oYSxjLGQpe2Z1bmN0aW9uIGgoYSl7cmV0dXJuIGUuc3RlcChhKX12YXIgZT10aGlzLGc9Zi5meDt0aGlzLnN0YXJ0VGltZT1jcnx8Y3MoKSx0aGlzLmVuZD1jLHRoaXMubm93PXRoaXMuc3RhcnQ9YSx0aGlzLnBvcz10aGlzLnN0YXRlPTAsdGhpcy51bml0PWR8fHRoaXMudW5pdHx8KGYuY3NzTnVtYmVyW3RoaXMucHJvcF0/IiI6InB4IiksaC5xdWV1ZT10aGlzLm9wdGlvbnMucXVldWUsaC5lbGVtPXRoaXMuZWxlbSxoLnNhdmVTdGF0ZT1mdW5jdGlvbigpe2Uub3B0aW9ucy5oaWRlJiZmLl9kYXRhKGUuZWxlbSwiZnhzaG93IitlLnByb3ApPT09YiYmZi5fZGF0YShlLmVsZW0sImZ4c2hvdyIrZS5wcm9wLGUuc3RhcnQpfSxoKCkmJmYudGltZXJzLnB1c2goaCkmJiFjcCYmKGNwPXNldEludGVydmFsKGcudGljayxnLmludGVydmFsKSl9LHNob3c6ZnVuY3Rpb24oKXt2YXIgYT1mLl9kYXRhKHRoaXMuZWxlbSwiZnhzaG93Iit0aGlzLnByb3ApO3RoaXMub3B0aW9ucy5vcmlnW3RoaXMucHJvcF09YXx8Zi5zdHlsZSh0aGlzLmVsZW0sdGhpcy5wcm9wKSx0aGlzLm9wdGlvbnMuc2hvdz0hMCxhIT09Yj90aGlzLmN1c3RvbSh0aGlzLmN1cigpLGEpOnRoaXMuY3VzdG9tKHRoaXMucHJvcD09PSJ3aWR0aCJ8fHRoaXMucHJvcD09PSJoZWlnaHQiPzE6MCx0aGlzLmN1cigpKSxmKHRoaXMuZWxlbSkuc2hvdygpfSxoaWRlOmZ1bmN0aW9uKCl7dGhpcy5vcHRpb25zLm9yaWdbdGhpcy5wcm9wXT1mLl9kYXRhKHRoaXMuZWxlbSwiZnhzaG93Iit0aGlzLnByb3ApfHxmLnN0eWxlKHRoaXMuZWxlbSx0aGlzLnByb3ApLHRoaXMub3B0aW9ucy5oaWRlPSEwLHRoaXMuY3VzdG9tKHRoaXMuY3VyKCksMCl9LHN0ZXA6ZnVuY3Rpb24oYSl7dmFyIGIsYyxkLGU9Y3J8fGNzKCksZz0hMCxoPXRoaXMuZWxlbSxpPXRoaXMub3B0aW9ucztpZihhfHxlPj1pLmR1cmF0aW9uK3RoaXMuc3RhcnRUaW1lKXt0aGlzLm5vdz10aGlzLmVuZCx0aGlzLnBvcz10aGlzLnN0YXRlPTEsdGhpcy51cGRhdGUoKSxpLmFuaW1hdGVkUHJvcGVydGllc1t0aGlzLnByb3BdPSEwO2ZvcihiIGluIGkuYW5pbWF0ZWRQcm9wZXJ0aWVzKWkuYW5pbWF0ZWRQcm9wZXJ0aWVzW2JdIT09ITAmJihnPSExKTtpZihnKXtpLm92ZXJmbG93IT1udWxsJiYhZi5zdXBwb3J0LnNocmlua1dyYXBCbG9ja3MmJmYuZWFjaChbIiIsIlgiLCJZIl0sZnVuY3Rpb24oYSxiKXtoLnN0eWxlWyJvdmVyZmxvdyIrYl09aS5vdmVyZmxvd1thXX0pLGkuaGlkZSYmZihoKS5oaWRlKCk7aWYoaS5oaWRlfHxpLnNob3cpZm9yKGIgaW4gaS5hbmltYXRlZFByb3BlcnRpZXMpZi5zdHlsZShoLGIsaS5vcmlnW2JdKSxmLnJlbW92ZURhdGEoaCwiZnhzaG93IitiLCEwKSxmLnJlbW92ZURhdGEoaCwidG9nZ2xlIitiLCEwKTtkPWkuY29tcGxldGUsZCYmKGkuY29tcGxldGU9ITEsZC5jYWxsKGgpKX1yZXR1cm4hMX1pLmR1cmF0aW9uPT1JbmZpbml0eT90aGlzLm5vdz1lOihjPWUtdGhpcy5zdGFydFRpbWUsdGhpcy5zdGF0ZT1jL2kuZHVyYXRpb24sdGhpcy5wb3M9Zi5lYXNpbmdbaS5hbmltYXRlZFByb3BlcnRpZXNbdGhpcy5wcm9wXV0odGhpcy5zdGF0ZSxjLDAsMSxpLmR1cmF0aW9uKSx0aGlzLm5vdz10aGlzLnN0YXJ0Kyh0aGlzLmVuZC10aGlzLnN0YXJ0KSp0aGlzLnBvcyksdGhpcy51cGRhdGUoKTtyZXR1cm4hMH19LGYuZXh0ZW5kKGYuZngse3RpY2s6ZnVuY3Rpb24oKXt2YXIgYSxiPWYudGltZXJzLGM9MDtmb3IoO2M8Yi5sZW5ndGg7YysrKWE9YltjXSwhYSgpJiZiW2NdPT09YSYmYi5zcGxpY2UoYy0tLDEpO2IubGVuZ3RofHxmLmZ4LnN0b3AoKX0saW50ZXJ2YWw6MTMsc3RvcDpmdW5jdGlvbigpe2NsZWFySW50ZXJ2YWwoY3ApLGNwPW51bGx9LHNwZWVkczp7c2xvdzo2MDAsZmFzdDoyMDAsX2RlZmF1bHQ6NDAwfSxzdGVwOntvcGFjaXR5OmZ1bmN0aW9uKGEpe2Yuc3R5bGUoYS5lbGVtLCJvcGFjaXR5IixhLm5vdyl9LF9kZWZhdWx0OmZ1bmN0aW9uKGEpe2EuZWxlbS5zdHlsZSYmYS5lbGVtLnN0eWxlW2EucHJvcF0hPW51bGw/YS5lbGVtLnN0eWxlW2EucHJvcF09YS5ub3crYS51bml0OmEuZWxlbVthLnByb3BdPWEubm93fX19KSxmLmVhY2goWyJ3aWR0aCIsImhlaWdodCJdLGZ1bmN0aW9uKGEsYil7Zi5meC5zdGVwW2JdPWZ1bmN0aW9uKGEpe2Yuc3R5bGUoYS5lbGVtLGIsTWF0aC5tYXgoMCxhLm5vdykrYS51bml0KX19KSxmLmV4cHImJmYuZXhwci5maWx0ZXJzJiYoZi5leHByLmZpbHRlcnMuYW5pbWF0ZWQ9ZnVuY3Rpb24oYSl7cmV0dXJuIGYuZ3JlcChmLnRpbWVycyxmdW5jdGlvbihiKXtyZXR1cm4gYT09PWIuZWxlbX0pLmxlbmd0aH0pO3ZhciBjdz0vXnQoPzphYmxlfGR8aCkkL2ksY3g9L14oPzpib2R5fGh0bWwpJC9pOyJnZXRCb3VuZGluZ0NsaWVudFJlY3QiaW4gYy5kb2N1bWVudEVsZW1lbnQ/Zi5mbi5vZmZzZXQ9ZnVuY3Rpb24oYSl7dmFyIGI9dGhpc1swXSxjO2lmKGEpcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbihiKXtmLm9mZnNldC5zZXRPZmZzZXQodGhpcyxhLGIpfSk7aWYoIWJ8fCFiLm93bmVyRG9jdW1lbnQpcmV0dXJuIG51bGw7aWYoYj09PWIub3duZXJEb2N1bWVudC5ib2R5KXJldHVybiBmLm9mZnNldC5ib2R5T2Zmc2V0KGIpO3RyeXtjPWIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCl9Y2F0Y2goZCl7fXZhciBlPWIub3duZXJEb2N1bWVudCxnPWUuZG9jdW1lbnRFbGVtZW50O2lmKCFjfHwhZi5jb250YWlucyhnLGIpKXJldHVybiBjP3t0b3A6Yy50b3AsbGVmdDpjLmxlZnR9Ont0b3A6MCxsZWZ0OjB9O3ZhciBoPWUuYm9keSxpPWN5KGUpLGo9Zy5jbGllbnRUb3B8fGguY2xpZW50VG9wfHwwLGs9Zy5jbGllbnRMZWZ0fHxoLmNsaWVudExlZnR8fDAsbD1pLnBhZ2VZT2Zmc2V0fHxmLnN1cHBvcnQuYm94TW9kZWwmJmcuc2Nyb2xsVG9wfHxoLnNjcm9sbFRvcCxtPWkucGFnZVhPZmZzZXR8fGYuc3VwcG9ydC5ib3hNb2RlbCYmZy5zY3JvbGxMZWZ0fHxoLnNjcm9sbExlZnQsbj1jLnRvcCtsLWosbz1jLmxlZnQrbS1rO3JldHVybnt0b3A6bixsZWZ0Om99fTpmLmZuLm9mZnNldD1mdW5jdGlvbihhKXt2YXIgYj10aGlzWzBdO2lmKGEpcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbihiKXtmLm9mZnNldC5zZXRPZmZzZXQodGhpcyxhLGIpfSk7aWYoIWJ8fCFiLm93bmVyRG9jdW1lbnQpcmV0dXJuIG51bGw7aWYoYj09PWIub3duZXJEb2N1bWVudC5ib2R5KXJldHVybiBmLm9mZnNldC5ib2R5T2Zmc2V0KGIpO3ZhciBjLGQ9Yi5vZmZzZXRQYXJlbnQsZT1iLGc9Yi5vd25lckRvY3VtZW50LGg9Zy5kb2N1bWVudEVsZW1lbnQsaT1nLmJvZHksaj1nLmRlZmF1bHRWaWV3LGs9aj9qLmdldENvbXB1dGVkU3R5bGUoYixudWxsKTpiLmN1cnJlbnRTdHlsZSxsPWIub2Zmc2V0VG9wLG09Yi5vZmZzZXRMZWZ0O3doaWxlKChiPWIucGFyZW50Tm9kZSkmJmIhPT1pJiZiIT09aCl7aWYoZi5zdXBwb3J0LmZpeGVkUG9zaXRpb24mJmsucG9zaXRpb249PT0iZml4ZWQiKWJyZWFrO2M9aj9qLmdldENvbXB1dGVkU3R5bGUoYixudWxsKTpiLmN1cnJlbnRTdHlsZSxsLT1iLnNjcm9sbFRvcCxtLT1iLnNjcm9sbExlZnQsYj09PWQmJihsKz1iLm9mZnNldFRvcCxtKz1iLm9mZnNldExlZnQsZi5zdXBwb3J0LmRvZXNOb3RBZGRCb3JkZXImJighZi5zdXBwb3J0LmRvZXNBZGRCb3JkZXJGb3JUYWJsZUFuZENlbGxzfHwhY3cudGVzdChiLm5vZGVOYW1lKSkmJihsKz1wYXJzZUZsb2F0KGMuYm9yZGVyVG9wV2lkdGgpfHwwLG0rPXBhcnNlRmxvYXQoYy5ib3JkZXJMZWZ0V2lkdGgpfHwwKSxlPWQsZD1iLm9mZnNldFBhcmVudCksZi5zdXBwb3J0LnN1YnRyYWN0c0JvcmRlckZvck92ZXJmbG93Tm90VmlzaWJsZSYmYy5vdmVyZmxvdyE9PSJ2aXNpYmxlIiYmKGwrPXBhcnNlRmxvYXQoYy5ib3JkZXJUb3BXaWR0aCl8fDAsbSs9cGFyc2VGbG9hdChjLmJvcmRlckxlZnRXaWR0aCl8fDApLGs9Y31pZihrLnBvc2l0aW9uPT09InJlbGF0aXZlInx8ay5wb3NpdGlvbj09PSJzdGF0aWMiKWwrPWkub2Zmc2V0VG9wLG0rPWkub2Zmc2V0TGVmdDtmLnN1cHBvcnQuZml4ZWRQb3NpdGlvbiYmay5wb3NpdGlvbj09PSJmaXhlZCImJihsKz1NYXRoLm1heChoLnNjcm9sbFRvcCxpLnNjcm9sbFRvcCksbSs9TWF0aC5tYXgoaC5zY3JvbGxMZWZ0LGkuc2Nyb2xsTGVmdCkpO3JldHVybnt0b3A6bCxsZWZ0Om19fSxmLm9mZnNldD17Ym9keU9mZnNldDpmdW5jdGlvbihhKXt2YXIgYj1hLm9mZnNldFRvcCxjPWEub2Zmc2V0TGVmdDtmLnN1cHBvcnQuZG9lc05vdEluY2x1ZGVNYXJnaW5JbkJvZHlPZmZzZXQmJihiKz1wYXJzZUZsb2F0KGYuY3NzKGEsIm1hcmdpblRvcCIpKXx8MCxjKz1wYXJzZUZsb2F0KGYuY3NzKGEsIm1hcmdpbkxlZnQiKSl8fDApO3JldHVybnt0b3A6YixsZWZ0OmN9fSxzZXRPZmZzZXQ6ZnVuY3Rpb24oYSxiLGMpe3ZhciBkPWYuY3NzKGEsInBvc2l0aW9uIik7ZD09PSJzdGF0aWMiJiYoYS5zdHlsZS5wb3NpdGlvbj0icmVsYXRpdmUiKTt2YXIgZT1mKGEpLGc9ZS5vZmZzZXQoKSxoPWYuY3NzKGEsInRvcCIpLGk9Zi5jc3MoYSwibGVmdCIpLGo9KGQ9PT0iYWJzb2x1dGUifHxkPT09ImZpeGVkIikmJmYuaW5BcnJheSgiYXV0byIsW2gsaV0pPi0xLGs9e30sbD17fSxtLG47aj8obD1lLnBvc2l0aW9uKCksbT1sLnRvcCxuPWwubGVmdCk6KG09cGFyc2VGbG9hdChoKXx8MCxuPXBhcnNlRmxvYXQoaSl8fDApLGYuaXNGdW5jdGlvbihiKSYmKGI9Yi5jYWxsKGEsYyxnKSksYi50b3AhPW51bGwmJihrLnRvcD1iLnRvcC1nLnRvcCttKSxiLmxlZnQhPW51bGwmJihrLmxlZnQ9Yi5sZWZ0LWcubGVmdCtuKSwidXNpbmciaW4gYj9iLnVzaW5nLmNhbGwoYSxrKTplLmNzcyhrKX19LGYuZm4uZXh0ZW5kKHtwb3NpdGlvbjpmdW5jdGlvbigpe2lmKCF0aGlzWzBdKXJldHVybiBudWxsO3ZhciBhPXRoaXNbMF0sYj10aGlzLm9mZnNldFBhcmVudCgpLGM9dGhpcy5vZmZzZXQoKSxkPWN4LnRlc3QoYlswXS5ub2RlTmFtZSk/e3RvcDowLGxlZnQ6MH06Yi5vZmZzZXQoKTtjLnRvcC09cGFyc2VGbG9hdChmLmNzcyhhLCJtYXJnaW5Ub3AiKSl8fDAsYy5sZWZ0LT1wYXJzZUZsb2F0KGYuY3NzKGEsIm1hcmdpbkxlZnQiKSl8fDAsZC50b3ArPXBhcnNlRmxvYXQoZi5jc3MoYlswXSwiYm9yZGVyVG9wV2lkdGgiKSl8fDAsZC5sZWZ0Kz1wYXJzZUZsb2F0KGYuY3NzKGJbMF0sImJvcmRlckxlZnRXaWR0aCIpKXx8MDtyZXR1cm57dG9wOmMudG9wLWQudG9wLGxlZnQ6Yy5sZWZ0LWQubGVmdH19LG9mZnNldFBhcmVudDpmdW5jdGlvbigpe3JldHVybiB0aGlzLm1hcChmdW5jdGlvbigpe3ZhciBhPXRoaXMub2Zmc2V0UGFyZW50fHxjLmJvZHk7d2hpbGUoYSYmIWN4LnRlc3QoYS5ub2RlTmFtZSkmJmYuY3NzKGEsInBvc2l0aW9uIik9PT0ic3RhdGljIilhPWEub2Zmc2V0UGFyZW50O3JldHVybiBhfSl9fSksZi5lYWNoKFsiTGVmdCIsIlRvcCJdLGZ1bmN0aW9uKGEsYyl7dmFyIGQ9InNjcm9sbCIrYztmLmZuW2RdPWZ1bmN0aW9uKGMpe3ZhciBlLGc7aWYoYz09PWIpe2U9dGhpc1swXTtpZighZSlyZXR1cm4gbnVsbDtnPWN5KGUpO3JldHVybiBnPyJwYWdlWE9mZnNldCJpbiBnP2dbYT8icGFnZVlPZmZzZXQiOiJwYWdlWE9mZnNldCJdOmYuc3VwcG9ydC5ib3hNb2RlbCYmZy5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnRbZF18fGcuZG9jdW1lbnQuYm9keVtkXTplW2RdfXJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXtnPWN5KHRoaXMpLGc/Zy5zY3JvbGxUbyhhP2YoZykuc2Nyb2xsTGVmdCgpOmMsYT9jOmYoZykuc2Nyb2xsVG9wKCkpOnRoaXNbZF09Y30pfX0pLGYuZWFjaChbIkhlaWdodCIsIldpZHRoIl0sZnVuY3Rpb24oYSxjKXt2YXIgZD1jLnRvTG93ZXJDYXNlKCk7Zi5mblsiaW5uZXIiK2NdPWZ1bmN0aW9uKCl7dmFyIGE9dGhpc1swXTtyZXR1cm4gYT9hLnN0eWxlP3BhcnNlRmxvYXQoZi5jc3MoYSxkLCJwYWRkaW5nIikpOnRoaXNbZF0oKTpudWxsfSxmLmZuWyJvdXRlciIrY109ZnVuY3Rpb24oYSl7dmFyIGI9dGhpc1swXTtyZXR1cm4gYj9iLnN0eWxlP3BhcnNlRmxvYXQoZi5jc3MoYixkLGE/Im1hcmdpbiI6ImJvcmRlciIpKTp0aGlzW2RdKCk6bnVsbH0sZi5mbltkXT1mdW5jdGlvbihhKXt2YXIgZT10aGlzWzBdO2lmKCFlKXJldHVybiBhPT1udWxsP251bGw6dGhpcztpZihmLmlzRnVuY3Rpb24oYSkpcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbihiKXt2YXIgYz1mKHRoaXMpO2NbZF0oYS5jYWxsKHRoaXMsYixjW2RdKCkpKX0pO2lmKGYuaXNXaW5kb3coZSkpe3ZhciBnPWUuZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50WyJjbGllbnQiK2NdLGg9ZS5kb2N1bWVudC5ib2R5O3JldHVybiBlLmRvY3VtZW50LmNvbXBhdE1vZGU9PT0iQ1NTMUNvbXBhdCImJmd8fGgmJmhbImNsaWVudCIrY118fGd9aWYoZS5ub2RlVHlwZT09PTkpcmV0dXJuIE1hdGgubWF4KGUuZG9jdW1lbnRFbGVtZW50WyJjbGllbnQiK2NdLGUuYm9keVsic2Nyb2xsIitjXSxlLmRvY3VtZW50RWxlbWVudFsic2Nyb2xsIitjXSxlLmJvZHlbIm9mZnNldCIrY10sZS5kb2N1bWVudEVsZW1lbnRbIm9mZnNldCIrY10pO2lmKGE9PT1iKXt2YXIgaT1mLmNzcyhlLGQpLGo9cGFyc2VGbG9hdChpKTtyZXR1cm4gZi5pc051bWVyaWMoaik/ajppfXJldHVybiB0aGlzLmNzcyhkLHR5cGVvZiBhPT0ic3RyaW5nIj9hOmErInB4Iil9fSksYS5qUXVlcnk9YS4kPWYsdHlwZW9mIGRlZmluZT09ImZ1bmN0aW9uIiYmZGVmaW5lLmFtZCYmZGVmaW5lLmFtZC5qUXVlcnkmJmRlZmluZSgianF1ZXJ5IixbXSxmdW5jdGlvbigpe3JldHVybiBmfSl9KSh3aW5kb3cpOwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3BhZ2VzL3RyYW5zY3JpcHRzLzIwMTNfRWNsaXBzZUNvbkZyYW5jZS9kZW1vcy9jZG8vY2RvL3NjcmlwdHMvanF1ZXJ5LXVpLTEuOC4xNS5jdXN0b20ubWluLmpzIGIvcGFnZXMvdHJhbnNjcmlwdHMvMjAxM19FY2xpcHNlQ29uRnJhbmNlL2RlbW9zL2Nkby9jZG8vc2NyaXB0cy9qcXVlcnktdWktMS44LjE1LmN1c3RvbS5taW4uanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2IyY2E3YwotLS0gL2Rldi9udWxsCisrKyBiL3BhZ2VzL3RyYW5zY3JpcHRzLzIwMTNfRWNsaXBzZUNvbkZyYW5jZS9kZW1vcy9jZG8vY2RvL3NjcmlwdHMvanF1ZXJ5LXVpLTEuOC4xNS5jdXN0b20ubWluLmpzCkBAIC0wLDAgKzEsMTAwIEBACisvKiEKKyAqIGpRdWVyeSBVSSAxLjguMTUKKyAqCisgKiBDb3B5cmlnaHQgMjAxMSwgQVVUSE9SUy50eHQgKGh0dHA6Ly9qcXVlcnl1aS5jb20vYWJvdXQpCisgKiBEdWFsIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgb3IgR1BMIFZlcnNpb24gMiBsaWNlbnNlcy4KKyAqIGh0dHA6Ly9qcXVlcnkub3JnL2xpY2Vuc2UKKyAqCisgKiBodHRwOi8vZG9jcy5qcXVlcnkuY29tL1VJCisgKi8KKyhmdW5jdGlvbihjLGope2Z1bmN0aW9uIGsoYSxiKXt2YXIgZD1hLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7aWYoImFyZWEiPT09ZCl7Yj1hLnBhcmVudE5vZGU7ZD1iLm5hbWU7aWYoIWEuaHJlZnx8IWR8fGIubm9kZU5hbWUudG9Mb3dlckNhc2UoKSE9PSJtYXAiKXJldHVybiBmYWxzZTthPWMoImltZ1t1c2VtYXA9IyIrZCsiXSIpWzBdO3JldHVybiEhYSYmbChhKX1yZXR1cm4oL2lucHV0fHNlbGVjdHx0ZXh0YXJlYXxidXR0b258b2JqZWN0Ly50ZXN0KGQpPyFhLmRpc2FibGVkOiJhIj09ZD9hLmhyZWZ8fGI6YikmJmwoYSl9ZnVuY3Rpb24gbChhKXtyZXR1cm4hYyhhKS5wYXJlbnRzKCkuYW5kU2VsZigpLmZpbHRlcihmdW5jdGlvbigpe3JldHVybiBjLmN1ckNTUyh0aGlzLCJ2aXNpYmlsaXR5Iik9PT0iaGlkZGVuInx8Yy5leHByLmZpbHRlcnMuaGlkZGVuKHRoaXMpfSkubGVuZ3RofWMudWk9Yy51aXx8e307aWYoIWMudWkudmVyc2lvbil7Yy5leHRlbmQoYy51aSx7dmVyc2lvbjoiMS44LjE1IiwKK2tleUNvZGU6e0FMVDoxOCxCQUNLU1BBQ0U6OCxDQVBTX0xPQ0s6MjAsQ09NTUE6MTg4LENPTU1BTkQ6OTEsQ09NTUFORF9MRUZUOjkxLENPTU1BTkRfUklHSFQ6OTMsQ09OVFJPTDoxNyxERUxFVEU6NDYsRE9XTjo0MCxFTkQ6MzUsRU5URVI6MTMsRVNDQVBFOjI3LEhPTUU6MzYsSU5TRVJUOjQ1LExFRlQ6MzcsTUVOVTo5MyxOVU1QQURfQUREOjEwNyxOVU1QQURfREVDSU1BTDoxMTAsTlVNUEFEX0RJVklERToxMTEsTlVNUEFEX0VOVEVSOjEwOCxOVU1QQURfTVVMVElQTFk6MTA2LE5VTVBBRF9TVUJUUkFDVDoxMDksUEFHRV9ET1dOOjM0LFBBR0VfVVA6MzMsUEVSSU9EOjE5MCxSSUdIVDozOSxTSElGVDoxNixTUEFDRTozMixUQUI6OSxVUDozOCxXSU5ET1dTOjkxfX0pO2MuZm4uZXh0ZW5kKHtwcm9wQXR0cjpjLmZuLnByb3B8fGMuZm4uYXR0cixfZm9jdXM6Yy5mbi5mb2N1cyxmb2N1czpmdW5jdGlvbihhLGIpe3JldHVybiB0eXBlb2YgYT09PSJudW1iZXIiP3RoaXMuZWFjaChmdW5jdGlvbigpe3ZhciBkPQordGhpcztzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7YyhkKS5mb2N1cygpO2ImJmIuY2FsbChkKX0sYSl9KTp0aGlzLl9mb2N1cy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9LHNjcm9sbFBhcmVudDpmdW5jdGlvbigpe3ZhciBhO2E9Yy5icm93c2VyLm1zaWUmJi8oc3RhdGljfHJlbGF0aXZlKS8udGVzdCh0aGlzLmNzcygicG9zaXRpb24iKSl8fC9hYnNvbHV0ZS8udGVzdCh0aGlzLmNzcygicG9zaXRpb24iKSk/dGhpcy5wYXJlbnRzKCkuZmlsdGVyKGZ1bmN0aW9uKCl7cmV0dXJuLyhyZWxhdGl2ZXxhYnNvbHV0ZXxmaXhlZCkvLnRlc3QoYy5jdXJDU1ModGhpcywicG9zaXRpb24iLDEpKSYmLyhhdXRvfHNjcm9sbCkvLnRlc3QoYy5jdXJDU1ModGhpcywib3ZlcmZsb3ciLDEpK2MuY3VyQ1NTKHRoaXMsIm92ZXJmbG93LXkiLDEpK2MuY3VyQ1NTKHRoaXMsIm92ZXJmbG93LXgiLDEpKX0pLmVxKDApOnRoaXMucGFyZW50cygpLmZpbHRlcihmdW5jdGlvbigpe3JldHVybi8oYXV0b3xzY3JvbGwpLy50ZXN0KGMuY3VyQ1NTKHRoaXMsCisib3ZlcmZsb3ciLDEpK2MuY3VyQ1NTKHRoaXMsIm92ZXJmbG93LXkiLDEpK2MuY3VyQ1NTKHRoaXMsIm92ZXJmbG93LXgiLDEpKX0pLmVxKDApO3JldHVybi9maXhlZC8udGVzdCh0aGlzLmNzcygicG9zaXRpb24iKSl8fCFhLmxlbmd0aD9jKGRvY3VtZW50KTphfSx6SW5kZXg6ZnVuY3Rpb24oYSl7aWYoYSE9PWopcmV0dXJuIHRoaXMuY3NzKCJ6SW5kZXgiLGEpO2lmKHRoaXMubGVuZ3RoKXthPWModGhpc1swXSk7Zm9yKHZhciBiO2EubGVuZ3RoJiZhWzBdIT09ZG9jdW1lbnQ7KXtiPWEuY3NzKCJwb3NpdGlvbiIpO2lmKGI9PT0iYWJzb2x1dGUifHxiPT09InJlbGF0aXZlInx8Yj09PSJmaXhlZCIpe2I9cGFyc2VJbnQoYS5jc3MoInpJbmRleCIpLDEwKTtpZighaXNOYU4oYikmJmIhPT0wKXJldHVybiBifWE9YS5wYXJlbnQoKX19cmV0dXJuIDB9LGRpc2FibGVTZWxlY3Rpb246ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5iaW5kKChjLnN1cHBvcnQuc2VsZWN0c3RhcnQ/InNlbGVjdHN0YXJ0IjoKKyJtb3VzZWRvd24iKSsiLnVpLWRpc2FibGVTZWxlY3Rpb24iLGZ1bmN0aW9uKGEpe2EucHJldmVudERlZmF1bHQoKX0pfSxlbmFibGVTZWxlY3Rpb246ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy51bmJpbmQoIi51aS1kaXNhYmxlU2VsZWN0aW9uIil9fSk7Yy5lYWNoKFsiV2lkdGgiLCJIZWlnaHQiXSxmdW5jdGlvbihhLGIpe2Z1bmN0aW9uIGQoZixnLG0sbil7Yy5lYWNoKGUsZnVuY3Rpb24oKXtnLT1wYXJzZUZsb2F0KGMuY3VyQ1NTKGYsInBhZGRpbmciK3RoaXMsdHJ1ZSkpfHwwO2lmKG0pZy09cGFyc2VGbG9hdChjLmN1ckNTUyhmLCJib3JkZXIiK3RoaXMrIldpZHRoIix0cnVlKSl8fDA7aWYobilnLT1wYXJzZUZsb2F0KGMuY3VyQ1NTKGYsIm1hcmdpbiIrdGhpcyx0cnVlKSl8fDB9KTtyZXR1cm4gZ312YXIgZT1iPT09IldpZHRoIj9bIkxlZnQiLCJSaWdodCJdOlsiVG9wIiwiQm90dG9tIl0saD1iLnRvTG93ZXJDYXNlKCksaT17aW5uZXJXaWR0aDpjLmZuLmlubmVyV2lkdGgsaW5uZXJIZWlnaHQ6Yy5mbi5pbm5lckhlaWdodCwKK291dGVyV2lkdGg6Yy5mbi5vdXRlcldpZHRoLG91dGVySGVpZ2h0OmMuZm4ub3V0ZXJIZWlnaHR9O2MuZm5bImlubmVyIitiXT1mdW5jdGlvbihmKXtpZihmPT09ailyZXR1cm4gaVsiaW5uZXIiK2JdLmNhbGwodGhpcyk7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe2ModGhpcykuY3NzKGgsZCh0aGlzLGYpKyJweCIpfSl9O2MuZm5bIm91dGVyIitiXT1mdW5jdGlvbihmLGcpe2lmKHR5cGVvZiBmIT09Im51bWJlciIpcmV0dXJuIGlbIm91dGVyIitiXS5jYWxsKHRoaXMsZik7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe2ModGhpcykuY3NzKGgsZCh0aGlzLGYsdHJ1ZSxnKSsicHgiKX0pfX0pO2MuZXh0ZW5kKGMuZXhwclsiOiJdLHtkYXRhOmZ1bmN0aW9uKGEsYixkKXtyZXR1cm4hIWMuZGF0YShhLGRbM10pfSxmb2N1c2FibGU6ZnVuY3Rpb24oYSl7cmV0dXJuIGsoYSwhaXNOYU4oYy5hdHRyKGEsInRhYmluZGV4IikpKX0sdGFiYmFibGU6ZnVuY3Rpb24oYSl7dmFyIGI9Yy5hdHRyKGEsCisidGFiaW5kZXgiKSxkPWlzTmFOKGIpO3JldHVybihkfHxiPj0wKSYmayhhLCFkKX19KTtjKGZ1bmN0aW9uKCl7dmFyIGE9ZG9jdW1lbnQuYm9keSxiPWEuYXBwZW5kQ2hpbGQoYj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSk7Yy5leHRlbmQoYi5zdHlsZSx7bWluSGVpZ2h0OiIxMDBweCIsaGVpZ2h0OiJhdXRvIixwYWRkaW5nOjAsYm9yZGVyV2lkdGg6MH0pO2Muc3VwcG9ydC5taW5IZWlnaHQ9Yi5vZmZzZXRIZWlnaHQ9PT0xMDA7Yy5zdXBwb3J0LnNlbGVjdHN0YXJ0PSJvbnNlbGVjdHN0YXJ0ImluIGI7YS5yZW1vdmVDaGlsZChiKS5zdHlsZS5kaXNwbGF5PSJub25lIn0pO2MuZXh0ZW5kKGMudWkse3BsdWdpbjp7YWRkOmZ1bmN0aW9uKGEsYixkKXthPWMudWlbYV0ucHJvdG90eXBlO2Zvcih2YXIgZSBpbiBkKXthLnBsdWdpbnNbZV09YS5wbHVnaW5zW2VdfHxbXTthLnBsdWdpbnNbZV0ucHVzaChbYixkW2VdXSl9fSxjYWxsOmZ1bmN0aW9uKGEsYixkKXtpZigoYj1hLnBsdWdpbnNbYl0pJiYKK2EuZWxlbWVudFswXS5wYXJlbnROb2RlKWZvcih2YXIgZT0wO2U8Yi5sZW5ndGg7ZSsrKWEub3B0aW9uc1tiW2VdWzBdXSYmYltlXVsxXS5hcHBseShhLmVsZW1lbnQsZCl9fSxjb250YWluczpmdW5jdGlvbihhLGIpe3JldHVybiBkb2N1bWVudC5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbj9hLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKGIpJjE2OmEhPT1iJiZhLmNvbnRhaW5zKGIpfSxoYXNTY3JvbGw6ZnVuY3Rpb24oYSxiKXtpZihjKGEpLmNzcygib3ZlcmZsb3ciKT09PSJoaWRkZW4iKXJldHVybiBmYWxzZTtiPWImJmI9PT0ibGVmdCI/InNjcm9sbExlZnQiOiJzY3JvbGxUb3AiO3ZhciBkPWZhbHNlO2lmKGFbYl0+MClyZXR1cm4gdHJ1ZTthW2JdPTE7ZD1hW2JdPjA7YVtiXT0wO3JldHVybiBkfSxpc092ZXJBeGlzOmZ1bmN0aW9uKGEsYixkKXtyZXR1cm4gYT5iJiZhPGIrZH0saXNPdmVyOmZ1bmN0aW9uKGEsYixkLGUsaCxpKXtyZXR1cm4gYy51aS5pc092ZXJBeGlzKGEsZCxoKSYmCitjLnVpLmlzT3ZlckF4aXMoYixlLGkpfX0pfX0pKGpRdWVyeSk7Cis7LyohCisgKiBqUXVlcnkgVUkgV2lkZ2V0IDEuOC4xNQorICoKKyAqIENvcHlyaWdodCAyMDExLCBBVVRIT1JTLnR4dCAoaHR0cDovL2pxdWVyeXVpLmNvbS9hYm91dCkKKyAqIER1YWwgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBvciBHUEwgVmVyc2lvbiAyIGxpY2Vuc2VzLgorICogaHR0cDovL2pxdWVyeS5vcmcvbGljZW5zZQorICoKKyAqIGh0dHA6Ly9kb2NzLmpxdWVyeS5jb20vVUkvV2lkZ2V0CisgKi8KKyhmdW5jdGlvbihiLGope2lmKGIuY2xlYW5EYXRhKXt2YXIgaz1iLmNsZWFuRGF0YTtiLmNsZWFuRGF0YT1mdW5jdGlvbihhKXtmb3IodmFyIGM9MCxkOyhkPWFbY10pIT1udWxsO2MrKyliKGQpLnRyaWdnZXJIYW5kbGVyKCJyZW1vdmUiKTtrKGEpfX1lbHNle3ZhciBsPWIuZm4ucmVtb3ZlO2IuZm4ucmVtb3ZlPWZ1bmN0aW9uKGEsYyl7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe2lmKCFjKWlmKCFhfHxiLmZpbHRlcihhLFt0aGlzXSkubGVuZ3RoKWIoIioiLHRoaXMpLmFkZChbdGhpc10pLmVhY2goZnVuY3Rpb24oKXtiKHRoaXMpLnRyaWdnZXJIYW5kbGVyKCJyZW1vdmUiKX0pO3JldHVybiBsLmNhbGwoYih0aGlzKSxhLGMpfSl9fWIud2lkZ2V0PWZ1bmN0aW9uKGEsYyxkKXt2YXIgZT1hLnNwbGl0KCIuIilbMF0sZjthPWEuc3BsaXQoIi4iKVsxXTtmPWUrIi0iK2E7aWYoIWQpe2Q9YztjPWIuV2lkZ2V0fWIuZXhwclsiOiJdW2ZdPWZ1bmN0aW9uKGgpe3JldHVybiEhYi5kYXRhKGgsCithKX07YltlXT1iW2VdfHx7fTtiW2VdW2FdPWZ1bmN0aW9uKGgsZyl7YXJndW1lbnRzLmxlbmd0aCYmdGhpcy5fY3JlYXRlV2lkZ2V0KGgsZyl9O2M9bmV3IGM7Yy5vcHRpb25zPWIuZXh0ZW5kKHRydWUse30sYy5vcHRpb25zKTtiW2VdW2FdLnByb3RvdHlwZT1iLmV4dGVuZCh0cnVlLGMse25hbWVzcGFjZTplLHdpZGdldE5hbWU6YSx3aWRnZXRFdmVudFByZWZpeDpiW2VdW2FdLnByb3RvdHlwZS53aWRnZXRFdmVudFByZWZpeHx8YSx3aWRnZXRCYXNlQ2xhc3M6Zn0sZCk7Yi53aWRnZXQuYnJpZGdlKGEsYltlXVthXSl9O2Iud2lkZ2V0LmJyaWRnZT1mdW5jdGlvbihhLGMpe2IuZm5bYV09ZnVuY3Rpb24oZCl7dmFyIGU9dHlwZW9mIGQ9PT0ic3RyaW5nIixmPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywxKSxoPXRoaXM7ZD0hZSYmZi5sZW5ndGg/Yi5leHRlbmQuYXBwbHkobnVsbCxbdHJ1ZSxkXS5jb25jYXQoZikpOmQ7aWYoZSYmZC5jaGFyQXQoMCk9PT0iXyIpcmV0dXJuIGg7CitlP3RoaXMuZWFjaChmdW5jdGlvbigpe3ZhciBnPWIuZGF0YSh0aGlzLGEpLGk9ZyYmYi5pc0Z1bmN0aW9uKGdbZF0pP2dbZF0uYXBwbHkoZyxmKTpnO2lmKGkhPT1nJiZpIT09ail7aD1pO3JldHVybiBmYWxzZX19KTp0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgZz1iLmRhdGEodGhpcyxhKTtnP2cub3B0aW9uKGR8fHt9KS5faW5pdCgpOmIuZGF0YSh0aGlzLGEsbmV3IGMoZCx0aGlzKSl9KTtyZXR1cm4gaH19O2IuV2lkZ2V0PWZ1bmN0aW9uKGEsYyl7YXJndW1lbnRzLmxlbmd0aCYmdGhpcy5fY3JlYXRlV2lkZ2V0KGEsYyl9O2IuV2lkZ2V0LnByb3RvdHlwZT17d2lkZ2V0TmFtZToid2lkZ2V0Iix3aWRnZXRFdmVudFByZWZpeDoiIixvcHRpb25zOntkaXNhYmxlZDpmYWxzZX0sX2NyZWF0ZVdpZGdldDpmdW5jdGlvbihhLGMpe2IuZGF0YShjLHRoaXMud2lkZ2V0TmFtZSx0aGlzKTt0aGlzLmVsZW1lbnQ9YihjKTt0aGlzLm9wdGlvbnM9Yi5leHRlbmQodHJ1ZSx7fSx0aGlzLm9wdGlvbnMsCit0aGlzLl9nZXRDcmVhdGVPcHRpb25zKCksYSk7dmFyIGQ9dGhpczt0aGlzLmVsZW1lbnQuYmluZCgicmVtb3ZlLiIrdGhpcy53aWRnZXROYW1lLGZ1bmN0aW9uKCl7ZC5kZXN0cm95KCl9KTt0aGlzLl9jcmVhdGUoKTt0aGlzLl90cmlnZ2VyKCJjcmVhdGUiKTt0aGlzLl9pbml0KCl9LF9nZXRDcmVhdGVPcHRpb25zOmZ1bmN0aW9uKCl7cmV0dXJuIGIubWV0YWRhdGEmJmIubWV0YWRhdGEuZ2V0KHRoaXMuZWxlbWVudFswXSlbdGhpcy53aWRnZXROYW1lXX0sX2NyZWF0ZTpmdW5jdGlvbigpe30sX2luaXQ6ZnVuY3Rpb24oKXt9LGRlc3Ryb3k6ZnVuY3Rpb24oKXt0aGlzLmVsZW1lbnQudW5iaW5kKCIuIit0aGlzLndpZGdldE5hbWUpLnJlbW92ZURhdGEodGhpcy53aWRnZXROYW1lKTt0aGlzLndpZGdldCgpLnVuYmluZCgiLiIrdGhpcy53aWRnZXROYW1lKS5yZW1vdmVBdHRyKCJhcmlhLWRpc2FibGVkIikucmVtb3ZlQ2xhc3ModGhpcy53aWRnZXRCYXNlQ2xhc3MrIi1kaXNhYmxlZCB1aS1zdGF0ZS1kaXNhYmxlZCIpfSwKK3dpZGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmVsZW1lbnR9LG9wdGlvbjpmdW5jdGlvbihhLGMpe3ZhciBkPWE7aWYoYXJndW1lbnRzLmxlbmd0aD09PTApcmV0dXJuIGIuZXh0ZW5kKHt9LHRoaXMub3B0aW9ucyk7aWYodHlwZW9mIGE9PT0ic3RyaW5nIil7aWYoYz09PWopcmV0dXJuIHRoaXMub3B0aW9uc1thXTtkPXt9O2RbYV09Y310aGlzLl9zZXRPcHRpb25zKGQpO3JldHVybiB0aGlzfSxfc2V0T3B0aW9uczpmdW5jdGlvbihhKXt2YXIgYz10aGlzO2IuZWFjaChhLGZ1bmN0aW9uKGQsZSl7Yy5fc2V0T3B0aW9uKGQsZSl9KTtyZXR1cm4gdGhpc30sX3NldE9wdGlvbjpmdW5jdGlvbihhLGMpe3RoaXMub3B0aW9uc1thXT1jO2lmKGE9PT0iZGlzYWJsZWQiKXRoaXMud2lkZ2V0KClbYz8iYWRkQ2xhc3MiOiJyZW1vdmVDbGFzcyJdKHRoaXMud2lkZ2V0QmFzZUNsYXNzKyItZGlzYWJsZWQgdWktc3RhdGUtZGlzYWJsZWQiKS5hdHRyKCJhcmlhLWRpc2FibGVkIixjKTtyZXR1cm4gdGhpc30sCitlbmFibGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc2V0T3B0aW9uKCJkaXNhYmxlZCIsZmFsc2UpfSxkaXNhYmxlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3NldE9wdGlvbigiZGlzYWJsZWQiLHRydWUpfSxfdHJpZ2dlcjpmdW5jdGlvbihhLGMsZCl7dmFyIGU9dGhpcy5vcHRpb25zW2FdO2M9Yi5FdmVudChjKTtjLnR5cGU9KGE9PT10aGlzLndpZGdldEV2ZW50UHJlZml4P2E6dGhpcy53aWRnZXRFdmVudFByZWZpeCthKS50b0xvd2VyQ2FzZSgpO2Q9ZHx8e307aWYoYy5vcmlnaW5hbEV2ZW50KXthPWIuZXZlbnQucHJvcHMubGVuZ3RoO2Zvcih2YXIgZjthOyl7Zj1iLmV2ZW50LnByb3BzWy0tYV07Y1tmXT1jLm9yaWdpbmFsRXZlbnRbZl19fXRoaXMuZWxlbWVudC50cmlnZ2VyKGMsZCk7cmV0dXJuIShiLmlzRnVuY3Rpb24oZSkmJmUuY2FsbCh0aGlzLmVsZW1lbnRbMF0sYyxkKT09PWZhbHNlfHxjLmlzRGVmYXVsdFByZXZlbnRlZCgpKX19fSkoalF1ZXJ5KTsKKzsvKiEKKyAqIGpRdWVyeSBVSSBNb3VzZSAxLjguMTUKKyAqCisgKiBDb3B5cmlnaHQgMjAxMSwgQVVUSE9SUy50eHQgKGh0dHA6Ly9qcXVlcnl1aS5jb20vYWJvdXQpCisgKiBEdWFsIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgb3IgR1BMIFZlcnNpb24gMiBsaWNlbnNlcy4KKyAqIGh0dHA6Ly9qcXVlcnkub3JnL2xpY2Vuc2UKKyAqCisgKiBodHRwOi8vZG9jcy5qcXVlcnkuY29tL1VJL01vdXNlCisgKgorICogRGVwZW5kczoKKyAqCWpxdWVyeS51aS53aWRnZXQuanMKKyAqLworKGZ1bmN0aW9uKGIpe2Iud2lkZ2V0KCJ1aS5tb3VzZSIse29wdGlvbnM6e2NhbmNlbDoiOmlucHV0LG9wdGlvbiIsZGlzdGFuY2U6MSxkZWxheTowfSxfbW91c2VJbml0OmZ1bmN0aW9uKCl7dmFyIGE9dGhpczt0aGlzLmVsZW1lbnQuYmluZCgibW91c2Vkb3duLiIrdGhpcy53aWRnZXROYW1lLGZ1bmN0aW9uKGMpe3JldHVybiBhLl9tb3VzZURvd24oYyl9KS5iaW5kKCJjbGljay4iK3RoaXMud2lkZ2V0TmFtZSxmdW5jdGlvbihjKXtpZih0cnVlPT09Yi5kYXRhKGMudGFyZ2V0LGEud2lkZ2V0TmFtZSsiLnByZXZlbnRDbGlja0V2ZW50Iikpe2IucmVtb3ZlRGF0YShjLnRhcmdldCxhLndpZGdldE5hbWUrIi5wcmV2ZW50Q2xpY2tFdmVudCIpO2Muc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7cmV0dXJuIGZhbHNlfX0pO3RoaXMuc3RhcnRlZD1mYWxzZX0sX21vdXNlRGVzdHJveTpmdW5jdGlvbigpe3RoaXMuZWxlbWVudC51bmJpbmQoIi4iK3RoaXMud2lkZ2V0TmFtZSl9LF9tb3VzZURvd246ZnVuY3Rpb24oYSl7YS5vcmlnaW5hbEV2ZW50PQorYS5vcmlnaW5hbEV2ZW50fHx7fTtpZighYS5vcmlnaW5hbEV2ZW50Lm1vdXNlSGFuZGxlZCl7dGhpcy5fbW91c2VTdGFydGVkJiZ0aGlzLl9tb3VzZVVwKGEpO3RoaXMuX21vdXNlRG93bkV2ZW50PWE7dmFyIGM9dGhpcyxlPWEud2hpY2g9PTEsZj10eXBlb2YgdGhpcy5vcHRpb25zLmNhbmNlbD09InN0cmluZyI/YihhLnRhcmdldCkuY2xvc2VzdCh0aGlzLm9wdGlvbnMuY2FuY2VsKS5sZW5ndGg6ZmFsc2U7aWYoIWV8fGZ8fCF0aGlzLl9tb3VzZUNhcHR1cmUoYSkpcmV0dXJuIHRydWU7dGhpcy5tb3VzZURlbGF5TWV0PSF0aGlzLm9wdGlvbnMuZGVsYXk7aWYoIXRoaXMubW91c2VEZWxheU1ldCl0aGlzLl9tb3VzZURlbGF5VGltZXI9c2V0VGltZW91dChmdW5jdGlvbigpe2MubW91c2VEZWxheU1ldD10cnVlfSx0aGlzLm9wdGlvbnMuZGVsYXkpO2lmKHRoaXMuX21vdXNlRGlzdGFuY2VNZXQoYSkmJnRoaXMuX21vdXNlRGVsYXlNZXQoYSkpe3RoaXMuX21vdXNlU3RhcnRlZD10aGlzLl9tb3VzZVN0YXJ0KGEpIT09CitmYWxzZTtpZighdGhpcy5fbW91c2VTdGFydGVkKXthLnByZXZlbnREZWZhdWx0KCk7cmV0dXJuIHRydWV9fXRydWU9PT1iLmRhdGEoYS50YXJnZXQsdGhpcy53aWRnZXROYW1lKyIucHJldmVudENsaWNrRXZlbnQiKSYmYi5yZW1vdmVEYXRhKGEudGFyZ2V0LHRoaXMud2lkZ2V0TmFtZSsiLnByZXZlbnRDbGlja0V2ZW50Iik7dGhpcy5fbW91c2VNb3ZlRGVsZWdhdGU9ZnVuY3Rpb24oZCl7cmV0dXJuIGMuX21vdXNlTW92ZShkKX07dGhpcy5fbW91c2VVcERlbGVnYXRlPWZ1bmN0aW9uKGQpe3JldHVybiBjLl9tb3VzZVVwKGQpfTtiKGRvY3VtZW50KS5iaW5kKCJtb3VzZW1vdmUuIit0aGlzLndpZGdldE5hbWUsdGhpcy5fbW91c2VNb3ZlRGVsZWdhdGUpLmJpbmQoIm1vdXNldXAuIit0aGlzLndpZGdldE5hbWUsdGhpcy5fbW91c2VVcERlbGVnYXRlKTthLnByZXZlbnREZWZhdWx0KCk7cmV0dXJuIGEub3JpZ2luYWxFdmVudC5tb3VzZUhhbmRsZWQ9dHJ1ZX19LF9tb3VzZU1vdmU6ZnVuY3Rpb24oYSl7aWYoYi5icm93c2VyLm1zaWUmJgorIShkb2N1bWVudC5kb2N1bWVudE1vZGU+PTkpJiYhYS5idXR0b24pcmV0dXJuIHRoaXMuX21vdXNlVXAoYSk7aWYodGhpcy5fbW91c2VTdGFydGVkKXt0aGlzLl9tb3VzZURyYWcoYSk7cmV0dXJuIGEucHJldmVudERlZmF1bHQoKX1pZih0aGlzLl9tb3VzZURpc3RhbmNlTWV0KGEpJiZ0aGlzLl9tb3VzZURlbGF5TWV0KGEpKSh0aGlzLl9tb3VzZVN0YXJ0ZWQ9dGhpcy5fbW91c2VTdGFydCh0aGlzLl9tb3VzZURvd25FdmVudCxhKSE9PWZhbHNlKT90aGlzLl9tb3VzZURyYWcoYSk6dGhpcy5fbW91c2VVcChhKTtyZXR1cm4hdGhpcy5fbW91c2VTdGFydGVkfSxfbW91c2VVcDpmdW5jdGlvbihhKXtiKGRvY3VtZW50KS51bmJpbmQoIm1vdXNlbW92ZS4iK3RoaXMud2lkZ2V0TmFtZSx0aGlzLl9tb3VzZU1vdmVEZWxlZ2F0ZSkudW5iaW5kKCJtb3VzZXVwLiIrdGhpcy53aWRnZXROYW1lLHRoaXMuX21vdXNlVXBEZWxlZ2F0ZSk7aWYodGhpcy5fbW91c2VTdGFydGVkKXt0aGlzLl9tb3VzZVN0YXJ0ZWQ9CitmYWxzZTthLnRhcmdldD09dGhpcy5fbW91c2VEb3duRXZlbnQudGFyZ2V0JiZiLmRhdGEoYS50YXJnZXQsdGhpcy53aWRnZXROYW1lKyIucHJldmVudENsaWNrRXZlbnQiLHRydWUpO3RoaXMuX21vdXNlU3RvcChhKX1yZXR1cm4gZmFsc2V9LF9tb3VzZURpc3RhbmNlTWV0OmZ1bmN0aW9uKGEpe3JldHVybiBNYXRoLm1heChNYXRoLmFicyh0aGlzLl9tb3VzZURvd25FdmVudC5wYWdlWC1hLnBhZ2VYKSxNYXRoLmFicyh0aGlzLl9tb3VzZURvd25FdmVudC5wYWdlWS1hLnBhZ2VZKSk+PXRoaXMub3B0aW9ucy5kaXN0YW5jZX0sX21vdXNlRGVsYXlNZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tb3VzZURlbGF5TWV0fSxfbW91c2VTdGFydDpmdW5jdGlvbigpe30sX21vdXNlRHJhZzpmdW5jdGlvbigpe30sX21vdXNlU3RvcDpmdW5jdGlvbigpe30sX21vdXNlQ2FwdHVyZTpmdW5jdGlvbigpe3JldHVybiB0cnVlfX0pfSkoalF1ZXJ5KTsKKzsvKgorICogalF1ZXJ5IFVJIFBvc2l0aW9uIDEuOC4xNQorICoKKyAqIENvcHlyaWdodCAyMDExLCBBVVRIT1JTLnR4dCAoaHR0cDovL2pxdWVyeXVpLmNvbS9hYm91dCkKKyAqIER1YWwgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBvciBHUEwgVmVyc2lvbiAyIGxpY2Vuc2VzLgorICogaHR0cDovL2pxdWVyeS5vcmcvbGljZW5zZQorICoKKyAqIGh0dHA6Ly9kb2NzLmpxdWVyeS5jb20vVUkvUG9zaXRpb24KKyAqLworKGZ1bmN0aW9uKGMpe2MudWk9Yy51aXx8e307dmFyIG49L2xlZnR8Y2VudGVyfHJpZ2h0LyxvPS90b3B8Y2VudGVyfGJvdHRvbS8sdD1jLmZuLnBvc2l0aW9uLHU9Yy5mbi5vZmZzZXQ7Yy5mbi5wb3NpdGlvbj1mdW5jdGlvbihiKXtpZighYnx8IWIub2YpcmV0dXJuIHQuYXBwbHkodGhpcyxhcmd1bWVudHMpO2I9Yy5leHRlbmQoe30sYik7dmFyIGE9YyhiLm9mKSxkPWFbMF0sZz0oYi5jb2xsaXNpb258fCJmbGlwIikuc3BsaXQoIiAiKSxlPWIub2Zmc2V0P2Iub2Zmc2V0LnNwbGl0KCIgIik6WzAsMF0saCxrLGo7aWYoZC5ub2RlVHlwZT09PTkpe2g9YS53aWR0aCgpO2s9YS5oZWlnaHQoKTtqPXt0b3A6MCxsZWZ0OjB9fWVsc2UgaWYoZC5zZXRUaW1lb3V0KXtoPWEud2lkdGgoKTtrPWEuaGVpZ2h0KCk7aj17dG9wOmEuc2Nyb2xsVG9wKCksbGVmdDphLnNjcm9sbExlZnQoKX19ZWxzZSBpZihkLnByZXZlbnREZWZhdWx0KXtiLmF0PSJsZWZ0IHRvcCI7aD1rPTA7aj17dG9wOmIub2YucGFnZVksCitsZWZ0OmIub2YucGFnZVh9fWVsc2V7aD1hLm91dGVyV2lkdGgoKTtrPWEub3V0ZXJIZWlnaHQoKTtqPWEub2Zmc2V0KCl9Yy5lYWNoKFsibXkiLCJhdCJdLGZ1bmN0aW9uKCl7dmFyIGY9KGJbdGhpc118fCIiKS5zcGxpdCgiICIpO2lmKGYubGVuZ3RoPT09MSlmPW4udGVzdChmWzBdKT9mLmNvbmNhdChbImNlbnRlciJdKTpvLnRlc3QoZlswXSk/WyJjZW50ZXIiXS5jb25jYXQoZik6WyJjZW50ZXIiLCJjZW50ZXIiXTtmWzBdPW4udGVzdChmWzBdKT9mWzBdOiJjZW50ZXIiO2ZbMV09by50ZXN0KGZbMV0pP2ZbMV06ImNlbnRlciI7Ylt0aGlzXT1mfSk7aWYoZy5sZW5ndGg9PT0xKWdbMV09Z1swXTtlWzBdPXBhcnNlSW50KGVbMF0sMTApfHwwO2lmKGUubGVuZ3RoPT09MSllWzFdPWVbMF07ZVsxXT1wYXJzZUludChlWzFdLDEwKXx8MDtpZihiLmF0WzBdPT09InJpZ2h0IilqLmxlZnQrPWg7ZWxzZSBpZihiLmF0WzBdPT09ImNlbnRlciIpai5sZWZ0Kz1oLzI7aWYoYi5hdFsxXT09PSJib3R0b20iKWoudG9wKz0KK2s7ZWxzZSBpZihiLmF0WzFdPT09ImNlbnRlciIpai50b3ArPWsvMjtqLmxlZnQrPWVbMF07ai50b3ArPWVbMV07cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe3ZhciBmPWModGhpcyksbD1mLm91dGVyV2lkdGgoKSxtPWYub3V0ZXJIZWlnaHQoKSxwPXBhcnNlSW50KGMuY3VyQ1NTKHRoaXMsIm1hcmdpbkxlZnQiLHRydWUpKXx8MCxxPXBhcnNlSW50KGMuY3VyQ1NTKHRoaXMsIm1hcmdpblRvcCIsdHJ1ZSkpfHwwLHY9bCtwKyhwYXJzZUludChjLmN1ckNTUyh0aGlzLCJtYXJnaW5SaWdodCIsdHJ1ZSkpfHwwKSx3PW0rcSsocGFyc2VJbnQoYy5jdXJDU1ModGhpcywibWFyZ2luQm90dG9tIix0cnVlKSl8fDApLGk9Yy5leHRlbmQoe30saikscjtpZihiLm15WzBdPT09InJpZ2h0IilpLmxlZnQtPWw7ZWxzZSBpZihiLm15WzBdPT09ImNlbnRlciIpaS5sZWZ0LT1sLzI7aWYoYi5teVsxXT09PSJib3R0b20iKWkudG9wLT1tO2Vsc2UgaWYoYi5teVsxXT09PSJjZW50ZXIiKWkudG9wLT0KK20vMjtpLmxlZnQ9TWF0aC5yb3VuZChpLmxlZnQpO2kudG9wPU1hdGgucm91bmQoaS50b3ApO3I9e2xlZnQ6aS5sZWZ0LXAsdG9wOmkudG9wLXF9O2MuZWFjaChbImxlZnQiLCJ0b3AiXSxmdW5jdGlvbihzLHgpe2MudWkucG9zaXRpb25bZ1tzXV0mJmMudWkucG9zaXRpb25bZ1tzXV1beF0oaSx7dGFyZ2V0V2lkdGg6aCx0YXJnZXRIZWlnaHQ6ayxlbGVtV2lkdGg6bCxlbGVtSGVpZ2h0Om0sY29sbGlzaW9uUG9zaXRpb246cixjb2xsaXNpb25XaWR0aDp2LGNvbGxpc2lvbkhlaWdodDp3LG9mZnNldDplLG15OmIubXksYXQ6Yi5hdH0pfSk7Yy5mbi5iZ2lmcmFtZSYmZi5iZ2lmcmFtZSgpO2Yub2Zmc2V0KGMuZXh0ZW5kKGkse3VzaW5nOmIudXNpbmd9KSl9KX07Yy51aS5wb3NpdGlvbj17Zml0OntsZWZ0OmZ1bmN0aW9uKGIsYSl7dmFyIGQ9Yyh3aW5kb3cpO2Q9YS5jb2xsaXNpb25Qb3NpdGlvbi5sZWZ0K2EuY29sbGlzaW9uV2lkdGgtZC53aWR0aCgpLWQuc2Nyb2xsTGVmdCgpO2IubGVmdD0KK2Q+MD9iLmxlZnQtZDpNYXRoLm1heChiLmxlZnQtYS5jb2xsaXNpb25Qb3NpdGlvbi5sZWZ0LGIubGVmdCl9LHRvcDpmdW5jdGlvbihiLGEpe3ZhciBkPWMod2luZG93KTtkPWEuY29sbGlzaW9uUG9zaXRpb24udG9wK2EuY29sbGlzaW9uSGVpZ2h0LWQuaGVpZ2h0KCktZC5zY3JvbGxUb3AoKTtiLnRvcD1kPjA/Yi50b3AtZDpNYXRoLm1heChiLnRvcC1hLmNvbGxpc2lvblBvc2l0aW9uLnRvcCxiLnRvcCl9fSxmbGlwOntsZWZ0OmZ1bmN0aW9uKGIsYSl7aWYoYS5hdFswXSE9PSJjZW50ZXIiKXt2YXIgZD1jKHdpbmRvdyk7ZD1hLmNvbGxpc2lvblBvc2l0aW9uLmxlZnQrYS5jb2xsaXNpb25XaWR0aC1kLndpZHRoKCktZC5zY3JvbGxMZWZ0KCk7dmFyIGc9YS5teVswXT09PSJsZWZ0Ij8tYS5lbGVtV2lkdGg6YS5teVswXT09PSJyaWdodCI/YS5lbGVtV2lkdGg6MCxlPWEuYXRbMF09PT0ibGVmdCI/YS50YXJnZXRXaWR0aDotYS50YXJnZXRXaWR0aCxoPS0yKmEub2Zmc2V0WzBdO2IubGVmdCs9CithLmNvbGxpc2lvblBvc2l0aW9uLmxlZnQ8MD9nK2UraDpkPjA/ZytlK2g6MH19LHRvcDpmdW5jdGlvbihiLGEpe2lmKGEuYXRbMV0hPT0iY2VudGVyIil7dmFyIGQ9Yyh3aW5kb3cpO2Q9YS5jb2xsaXNpb25Qb3NpdGlvbi50b3ArYS5jb2xsaXNpb25IZWlnaHQtZC5oZWlnaHQoKS1kLnNjcm9sbFRvcCgpO3ZhciBnPWEubXlbMV09PT0idG9wIj8tYS5lbGVtSGVpZ2h0OmEubXlbMV09PT0iYm90dG9tIj9hLmVsZW1IZWlnaHQ6MCxlPWEuYXRbMV09PT0idG9wIj9hLnRhcmdldEhlaWdodDotYS50YXJnZXRIZWlnaHQsaD0tMiphLm9mZnNldFsxXTtiLnRvcCs9YS5jb2xsaXNpb25Qb3NpdGlvbi50b3A8MD9nK2UraDpkPjA/ZytlK2g6MH19fX07aWYoIWMub2Zmc2V0LnNldE9mZnNldCl7Yy5vZmZzZXQuc2V0T2Zmc2V0PWZ1bmN0aW9uKGIsYSl7aWYoL3N0YXRpYy8udGVzdChjLmN1ckNTUyhiLCJwb3NpdGlvbiIpKSliLnN0eWxlLnBvc2l0aW9uPSJyZWxhdGl2ZSI7dmFyIGQ9YyhiKSwKK2c9ZC5vZmZzZXQoKSxlPXBhcnNlSW50KGMuY3VyQ1NTKGIsInRvcCIsdHJ1ZSksMTApfHwwLGg9cGFyc2VJbnQoYy5jdXJDU1MoYiwibGVmdCIsdHJ1ZSksMTApfHwwO2c9e3RvcDphLnRvcC1nLnRvcCtlLGxlZnQ6YS5sZWZ0LWcubGVmdCtofTsidXNpbmciaW4gYT9hLnVzaW5nLmNhbGwoYixnKTpkLmNzcyhnKX07Yy5mbi5vZmZzZXQ9ZnVuY3Rpb24oYil7dmFyIGE9dGhpc1swXTtpZighYXx8IWEub3duZXJEb2N1bWVudClyZXR1cm4gbnVsbDtpZihiKXJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXtjLm9mZnNldC5zZXRPZmZzZXQodGhpcyxiKX0pO3JldHVybiB1LmNhbGwodGhpcyl9fX0pKGpRdWVyeSk7Cis7LyoKKyAqIGpRdWVyeSBVSSBTbGlkZXIgMS44LjE1CisgKgorICogQ29weXJpZ2h0IDIwMTEsIEFVVEhPUlMudHh0IChodHRwOi8vanF1ZXJ5dWkuY29tL2Fib3V0KQorICogRHVhbCBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIG9yIEdQTCBWZXJzaW9uIDIgbGljZW5zZXMuCisgKiBodHRwOi8vanF1ZXJ5Lm9yZy9saWNlbnNlCisgKgorICogaHR0cDovL2RvY3MuanF1ZXJ5LmNvbS9VSS9TbGlkZXIKKyAqCisgKiBEZXBlbmRzOgorICoJanF1ZXJ5LnVpLmNvcmUuanMKKyAqCWpxdWVyeS51aS5tb3VzZS5qcworICoJanF1ZXJ5LnVpLndpZGdldC5qcworICovCisoZnVuY3Rpb24oZCl7ZC53aWRnZXQoInVpLnNsaWRlciIsZC51aS5tb3VzZSx7d2lkZ2V0RXZlbnRQcmVmaXg6InNsaWRlIixvcHRpb25zOnthbmltYXRlOmZhbHNlLGRpc3RhbmNlOjAsbWF4OjEwMCxtaW46MCxvcmllbnRhdGlvbjoiaG9yaXpvbnRhbCIscmFuZ2U6ZmFsc2Usc3RlcDoxLHZhbHVlOjAsdmFsdWVzOm51bGx9LF9jcmVhdGU6ZnVuY3Rpb24oKXt2YXIgYT10aGlzLGI9dGhpcy5vcHRpb25zLGM9dGhpcy5lbGVtZW50LmZpbmQoIi51aS1zbGlkZXItaGFuZGxlIikuYWRkQ2xhc3MoInVpLXN0YXRlLWRlZmF1bHQgdWktY29ybmVyLWFsbCIpLGY9Yi52YWx1ZXMmJmIudmFsdWVzLmxlbmd0aHx8MSxlPVtdO3RoaXMuX21vdXNlU2xpZGluZz10aGlzLl9rZXlTbGlkaW5nPWZhbHNlO3RoaXMuX2FuaW1hdGVPZmY9dHJ1ZTt0aGlzLl9oYW5kbGVJbmRleD1udWxsO3RoaXMuX2RldGVjdE9yaWVudGF0aW9uKCk7dGhpcy5fbW91c2VJbml0KCk7dGhpcy5lbGVtZW50LmFkZENsYXNzKCJ1aS1zbGlkZXIgdWktc2xpZGVyLSIrCit0aGlzLm9yaWVudGF0aW9uKyIgdWktd2lkZ2V0IHVpLXdpZGdldC1jb250ZW50IHVpLWNvcm5lci1hbGwiKyhiLmRpc2FibGVkPyIgdWktc2xpZGVyLWRpc2FibGVkIHVpLWRpc2FibGVkIjoiIikpO3RoaXMucmFuZ2U9ZChbXSk7aWYoYi5yYW5nZSl7aWYoYi5yYW5nZT09PXRydWUpe2lmKCFiLnZhbHVlcyliLnZhbHVlcz1bdGhpcy5fdmFsdWVNaW4oKSx0aGlzLl92YWx1ZU1pbigpXTtpZihiLnZhbHVlcy5sZW5ndGgmJmIudmFsdWVzLmxlbmd0aCE9PTIpYi52YWx1ZXM9W2IudmFsdWVzWzBdLGIudmFsdWVzWzBdXX10aGlzLnJhbmdlPWQoIjxkaXY+PC9kaXY+IikuYXBwZW5kVG8odGhpcy5lbGVtZW50KS5hZGRDbGFzcygidWktc2xpZGVyLXJhbmdlIHVpLXdpZGdldC1oZWFkZXIiKyhiLnJhbmdlPT09Im1pbiJ8fGIucmFuZ2U9PT0ibWF4Ij8iIHVpLXNsaWRlci1yYW5nZS0iK2IucmFuZ2U6IiIpKX1mb3IodmFyIGo9Yy5sZW5ndGg7ajxmO2orPTEpZS5wdXNoKCI8YSBjbGFzcz0ndWktc2xpZGVyLWhhbmRsZSB1aS1zdGF0ZS1kZWZhdWx0IHVpLWNvcm5lci1hbGwnIGhyZWY9JyMnPjwvYT4iKTsKK3RoaXMuaGFuZGxlcz1jLmFkZChkKGUuam9pbigiIikpLmFwcGVuZFRvKGEuZWxlbWVudCkpO3RoaXMuaGFuZGxlPXRoaXMuaGFuZGxlcy5lcSgwKTt0aGlzLmhhbmRsZXMuYWRkKHRoaXMucmFuZ2UpLmZpbHRlcigiYSIpLmNsaWNrKGZ1bmN0aW9uKGcpe2cucHJldmVudERlZmF1bHQoKX0pLmhvdmVyKGZ1bmN0aW9uKCl7Yi5kaXNhYmxlZHx8ZCh0aGlzKS5hZGRDbGFzcygidWktc3RhdGUtaG92ZXIiKX0sZnVuY3Rpb24oKXtkKHRoaXMpLnJlbW92ZUNsYXNzKCJ1aS1zdGF0ZS1ob3ZlciIpfSkuZm9jdXMoZnVuY3Rpb24oKXtpZihiLmRpc2FibGVkKWQodGhpcykuYmx1cigpO2Vsc2V7ZCgiLnVpLXNsaWRlciAudWktc3RhdGUtZm9jdXMiKS5yZW1vdmVDbGFzcygidWktc3RhdGUtZm9jdXMiKTtkKHRoaXMpLmFkZENsYXNzKCJ1aS1zdGF0ZS1mb2N1cyIpfX0pLmJsdXIoZnVuY3Rpb24oKXtkKHRoaXMpLnJlbW92ZUNsYXNzKCJ1aS1zdGF0ZS1mb2N1cyIpfSk7dGhpcy5oYW5kbGVzLmVhY2goZnVuY3Rpb24oZyl7ZCh0aGlzKS5kYXRhKCJpbmRleC51aS1zbGlkZXItaGFuZGxlIiwKK2cpfSk7dGhpcy5oYW5kbGVzLmtleWRvd24oZnVuY3Rpb24oZyl7dmFyIGs9dHJ1ZSxsPWQodGhpcykuZGF0YSgiaW5kZXgudWktc2xpZGVyLWhhbmRsZSIpLGksaCxtO2lmKCFhLm9wdGlvbnMuZGlzYWJsZWQpe3N3aXRjaChnLmtleUNvZGUpe2Nhc2UgZC51aS5rZXlDb2RlLkhPTUU6Y2FzZSBkLnVpLmtleUNvZGUuRU5EOmNhc2UgZC51aS5rZXlDb2RlLlBBR0VfVVA6Y2FzZSBkLnVpLmtleUNvZGUuUEFHRV9ET1dOOmNhc2UgZC51aS5rZXlDb2RlLlVQOmNhc2UgZC51aS5rZXlDb2RlLlJJR0hUOmNhc2UgZC51aS5rZXlDb2RlLkRPV046Y2FzZSBkLnVpLmtleUNvZGUuTEVGVDprPWZhbHNlO2lmKCFhLl9rZXlTbGlkaW5nKXthLl9rZXlTbGlkaW5nPXRydWU7ZCh0aGlzKS5hZGRDbGFzcygidWktc3RhdGUtYWN0aXZlIik7aT1hLl9zdGFydChnLGwpO2lmKGk9PT1mYWxzZSlyZXR1cm59YnJlYWt9bT1hLm9wdGlvbnMuc3RlcDtpPWEub3B0aW9ucy52YWx1ZXMmJmEub3B0aW9ucy52YWx1ZXMubGVuZ3RoPworKGg9YS52YWx1ZXMobCkpOihoPWEudmFsdWUoKSk7c3dpdGNoKGcua2V5Q29kZSl7Y2FzZSBkLnVpLmtleUNvZGUuSE9NRTpoPWEuX3ZhbHVlTWluKCk7YnJlYWs7Y2FzZSBkLnVpLmtleUNvZGUuRU5EOmg9YS5fdmFsdWVNYXgoKTticmVhaztjYXNlIGQudWkua2V5Q29kZS5QQUdFX1VQOmg9YS5fdHJpbUFsaWduVmFsdWUoaSsoYS5fdmFsdWVNYXgoKS1hLl92YWx1ZU1pbigpKS81KTticmVhaztjYXNlIGQudWkua2V5Q29kZS5QQUdFX0RPV046aD1hLl90cmltQWxpZ25WYWx1ZShpLShhLl92YWx1ZU1heCgpLWEuX3ZhbHVlTWluKCkpLzUpO2JyZWFrO2Nhc2UgZC51aS5rZXlDb2RlLlVQOmNhc2UgZC51aS5rZXlDb2RlLlJJR0hUOmlmKGk9PT1hLl92YWx1ZU1heCgpKXJldHVybjtoPWEuX3RyaW1BbGlnblZhbHVlKGkrbSk7YnJlYWs7Y2FzZSBkLnVpLmtleUNvZGUuRE9XTjpjYXNlIGQudWkua2V5Q29kZS5MRUZUOmlmKGk9PT1hLl92YWx1ZU1pbigpKXJldHVybjtoPWEuX3RyaW1BbGlnblZhbHVlKGktCittKTticmVha31hLl9zbGlkZShnLGwsaCk7cmV0dXJuIGt9fSkua2V5dXAoZnVuY3Rpb24oZyl7dmFyIGs9ZCh0aGlzKS5kYXRhKCJpbmRleC51aS1zbGlkZXItaGFuZGxlIik7aWYoYS5fa2V5U2xpZGluZyl7YS5fa2V5U2xpZGluZz1mYWxzZTthLl9zdG9wKGcsayk7YS5fY2hhbmdlKGcsayk7ZCh0aGlzKS5yZW1vdmVDbGFzcygidWktc3RhdGUtYWN0aXZlIil9fSk7dGhpcy5fcmVmcmVzaFZhbHVlKCk7dGhpcy5fYW5pbWF0ZU9mZj1mYWxzZX0sZGVzdHJveTpmdW5jdGlvbigpe3RoaXMuaGFuZGxlcy5yZW1vdmUoKTt0aGlzLnJhbmdlLnJlbW92ZSgpO3RoaXMuZWxlbWVudC5yZW1vdmVDbGFzcygidWktc2xpZGVyIHVpLXNsaWRlci1ob3Jpem9udGFsIHVpLXNsaWRlci12ZXJ0aWNhbCB1aS1zbGlkZXItZGlzYWJsZWQgdWktd2lkZ2V0IHVpLXdpZGdldC1jb250ZW50IHVpLWNvcm5lci1hbGwiKS5yZW1vdmVEYXRhKCJzbGlkZXIiKS51bmJpbmQoIi5zbGlkZXIiKTt0aGlzLl9tb3VzZURlc3Ryb3koKTsKK3JldHVybiB0aGlzfSxfbW91c2VDYXB0dXJlOmZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMub3B0aW9ucyxjLGYsZSxqLGc7aWYoYi5kaXNhYmxlZClyZXR1cm4gZmFsc2U7dGhpcy5lbGVtZW50U2l6ZT17d2lkdGg6dGhpcy5lbGVtZW50Lm91dGVyV2lkdGgoKSxoZWlnaHQ6dGhpcy5lbGVtZW50Lm91dGVySGVpZ2h0KCl9O3RoaXMuZWxlbWVudE9mZnNldD10aGlzLmVsZW1lbnQub2Zmc2V0KCk7Yz10aGlzLl9ub3JtVmFsdWVGcm9tTW91c2Uoe3g6YS5wYWdlWCx5OmEucGFnZVl9KTtmPXRoaXMuX3ZhbHVlTWF4KCktdGhpcy5fdmFsdWVNaW4oKSsxO2o9dGhpczt0aGlzLmhhbmRsZXMuZWFjaChmdW5jdGlvbihrKXt2YXIgbD1NYXRoLmFicyhjLWoudmFsdWVzKGspKTtpZihmPmwpe2Y9bDtlPWQodGhpcyk7Zz1rfX0pO2lmKGIucmFuZ2U9PT10cnVlJiZ0aGlzLnZhbHVlcygxKT09PWIubWluKXtnKz0xO2U9ZCh0aGlzLmhhbmRsZXNbZ10pfWlmKHRoaXMuX3N0YXJ0KGEsZyk9PT1mYWxzZSlyZXR1cm4gZmFsc2U7Cit0aGlzLl9tb3VzZVNsaWRpbmc9dHJ1ZTtqLl9oYW5kbGVJbmRleD1nO2UuYWRkQ2xhc3MoInVpLXN0YXRlLWFjdGl2ZSIpLmZvY3VzKCk7Yj1lLm9mZnNldCgpO3RoaXMuX2NsaWNrT2Zmc2V0PSFkKGEudGFyZ2V0KS5wYXJlbnRzKCkuYW5kU2VsZigpLmlzKCIudWktc2xpZGVyLWhhbmRsZSIpP3tsZWZ0OjAsdG9wOjB9OntsZWZ0OmEucGFnZVgtYi5sZWZ0LWUud2lkdGgoKS8yLHRvcDphLnBhZ2VZLWIudG9wLWUuaGVpZ2h0KCkvMi0ocGFyc2VJbnQoZS5jc3MoImJvcmRlclRvcFdpZHRoIiksMTApfHwwKS0ocGFyc2VJbnQoZS5jc3MoImJvcmRlckJvdHRvbVdpZHRoIiksMTApfHwwKSsocGFyc2VJbnQoZS5jc3MoIm1hcmdpblRvcCIpLDEwKXx8MCl9O3RoaXMuaGFuZGxlcy5oYXNDbGFzcygidWktc3RhdGUtaG92ZXIiKXx8dGhpcy5fc2xpZGUoYSxnLGMpO3JldHVybiB0aGlzLl9hbmltYXRlT2ZmPXRydWV9LF9tb3VzZVN0YXJ0OmZ1bmN0aW9uKCl7cmV0dXJuIHRydWV9LF9tb3VzZURyYWc6ZnVuY3Rpb24oYSl7dmFyIGI9Cit0aGlzLl9ub3JtVmFsdWVGcm9tTW91c2Uoe3g6YS5wYWdlWCx5OmEucGFnZVl9KTt0aGlzLl9zbGlkZShhLHRoaXMuX2hhbmRsZUluZGV4LGIpO3JldHVybiBmYWxzZX0sX21vdXNlU3RvcDpmdW5jdGlvbihhKXt0aGlzLmhhbmRsZXMucmVtb3ZlQ2xhc3MoInVpLXN0YXRlLWFjdGl2ZSIpO3RoaXMuX21vdXNlU2xpZGluZz1mYWxzZTt0aGlzLl9zdG9wKGEsdGhpcy5faGFuZGxlSW5kZXgpO3RoaXMuX2NoYW5nZShhLHRoaXMuX2hhbmRsZUluZGV4KTt0aGlzLl9jbGlja09mZnNldD10aGlzLl9oYW5kbGVJbmRleD1udWxsO3JldHVybiB0aGlzLl9hbmltYXRlT2ZmPWZhbHNlfSxfZGV0ZWN0T3JpZW50YXRpb246ZnVuY3Rpb24oKXt0aGlzLm9yaWVudGF0aW9uPXRoaXMub3B0aW9ucy5vcmllbnRhdGlvbj09PSJ2ZXJ0aWNhbCI/InZlcnRpY2FsIjoiaG9yaXpvbnRhbCJ9LF9ub3JtVmFsdWVGcm9tTW91c2U6ZnVuY3Rpb24oYSl7dmFyIGI7aWYodGhpcy5vcmllbnRhdGlvbj09PSJob3Jpem9udGFsIil7Yj0KK3RoaXMuZWxlbWVudFNpemUud2lkdGg7YT1hLngtdGhpcy5lbGVtZW50T2Zmc2V0LmxlZnQtKHRoaXMuX2NsaWNrT2Zmc2V0P3RoaXMuX2NsaWNrT2Zmc2V0LmxlZnQ6MCl9ZWxzZXtiPXRoaXMuZWxlbWVudFNpemUuaGVpZ2h0O2E9YS55LXRoaXMuZWxlbWVudE9mZnNldC50b3AtKHRoaXMuX2NsaWNrT2Zmc2V0P3RoaXMuX2NsaWNrT2Zmc2V0LnRvcDowKX1iPWEvYjtpZihiPjEpYj0xO2lmKGI8MCliPTA7aWYodGhpcy5vcmllbnRhdGlvbj09PSJ2ZXJ0aWNhbCIpYj0xLWI7YT10aGlzLl92YWx1ZU1heCgpLXRoaXMuX3ZhbHVlTWluKCk7cmV0dXJuIHRoaXMuX3RyaW1BbGlnblZhbHVlKHRoaXMuX3ZhbHVlTWluKCkrYiphKX0sX3N0YXJ0OmZ1bmN0aW9uKGEsYil7dmFyIGM9e2hhbmRsZTp0aGlzLmhhbmRsZXNbYl0sdmFsdWU6dGhpcy52YWx1ZSgpfTtpZih0aGlzLm9wdGlvbnMudmFsdWVzJiZ0aGlzLm9wdGlvbnMudmFsdWVzLmxlbmd0aCl7Yy52YWx1ZT10aGlzLnZhbHVlcyhiKTsKK2MudmFsdWVzPXRoaXMudmFsdWVzKCl9cmV0dXJuIHRoaXMuX3RyaWdnZXIoInN0YXJ0IixhLGMpfSxfc2xpZGU6ZnVuY3Rpb24oYSxiLGMpe3ZhciBmO2lmKHRoaXMub3B0aW9ucy52YWx1ZXMmJnRoaXMub3B0aW9ucy52YWx1ZXMubGVuZ3RoKXtmPXRoaXMudmFsdWVzKGI/MDoxKTtpZih0aGlzLm9wdGlvbnMudmFsdWVzLmxlbmd0aD09PTImJnRoaXMub3B0aW9ucy5yYW5nZT09PXRydWUmJihiPT09MCYmYz5mfHxiPT09MSYmYzxmKSljPWY7aWYoYyE9PXRoaXMudmFsdWVzKGIpKXtmPXRoaXMudmFsdWVzKCk7ZltiXT1jO2E9dGhpcy5fdHJpZ2dlcigic2xpZGUiLGEse2hhbmRsZTp0aGlzLmhhbmRsZXNbYl0sdmFsdWU6Yyx2YWx1ZXM6Zn0pO3RoaXMudmFsdWVzKGI/MDoxKTthIT09ZmFsc2UmJnRoaXMudmFsdWVzKGIsYyx0cnVlKX19ZWxzZSBpZihjIT09dGhpcy52YWx1ZSgpKXthPXRoaXMuX3RyaWdnZXIoInNsaWRlIixhLHtoYW5kbGU6dGhpcy5oYW5kbGVzW2JdLHZhbHVlOmN9KTsKK2EhPT1mYWxzZSYmdGhpcy52YWx1ZShjKX19LF9zdG9wOmZ1bmN0aW9uKGEsYil7dmFyIGM9e2hhbmRsZTp0aGlzLmhhbmRsZXNbYl0sdmFsdWU6dGhpcy52YWx1ZSgpfTtpZih0aGlzLm9wdGlvbnMudmFsdWVzJiZ0aGlzLm9wdGlvbnMudmFsdWVzLmxlbmd0aCl7Yy52YWx1ZT10aGlzLnZhbHVlcyhiKTtjLnZhbHVlcz10aGlzLnZhbHVlcygpfXRoaXMuX3RyaWdnZXIoInN0b3AiLGEsYyl9LF9jaGFuZ2U6ZnVuY3Rpb24oYSxiKXtpZighdGhpcy5fa2V5U2xpZGluZyYmIXRoaXMuX21vdXNlU2xpZGluZyl7dmFyIGM9e2hhbmRsZTp0aGlzLmhhbmRsZXNbYl0sdmFsdWU6dGhpcy52YWx1ZSgpfTtpZih0aGlzLm9wdGlvbnMudmFsdWVzJiZ0aGlzLm9wdGlvbnMudmFsdWVzLmxlbmd0aCl7Yy52YWx1ZT10aGlzLnZhbHVlcyhiKTtjLnZhbHVlcz10aGlzLnZhbHVlcygpfXRoaXMuX3RyaWdnZXIoImNoYW5nZSIsYSxjKX19LHZhbHVlOmZ1bmN0aW9uKGEpe2lmKGFyZ3VtZW50cy5sZW5ndGgpe3RoaXMub3B0aW9ucy52YWx1ZT0KK3RoaXMuX3RyaW1BbGlnblZhbHVlKGEpO3RoaXMuX3JlZnJlc2hWYWx1ZSgpO3RoaXMuX2NoYW5nZShudWxsLDApfWVsc2UgcmV0dXJuIHRoaXMuX3ZhbHVlKCl9LHZhbHVlczpmdW5jdGlvbihhLGIpe3ZhciBjLGYsZTtpZihhcmd1bWVudHMubGVuZ3RoPjEpe3RoaXMub3B0aW9ucy52YWx1ZXNbYV09dGhpcy5fdHJpbUFsaWduVmFsdWUoYik7dGhpcy5fcmVmcmVzaFZhbHVlKCk7dGhpcy5fY2hhbmdlKG51bGwsYSl9ZWxzZSBpZihhcmd1bWVudHMubGVuZ3RoKWlmKGQuaXNBcnJheShhcmd1bWVudHNbMF0pKXtjPXRoaXMub3B0aW9ucy52YWx1ZXM7Zj1hcmd1bWVudHNbMF07Zm9yKGU9MDtlPGMubGVuZ3RoO2UrPTEpe2NbZV09dGhpcy5fdHJpbUFsaWduVmFsdWUoZltlXSk7dGhpcy5fY2hhbmdlKG51bGwsZSl9dGhpcy5fcmVmcmVzaFZhbHVlKCl9ZWxzZSByZXR1cm4gdGhpcy5vcHRpb25zLnZhbHVlcyYmdGhpcy5vcHRpb25zLnZhbHVlcy5sZW5ndGg/dGhpcy5fdmFsdWVzKGEpOgordGhpcy52YWx1ZSgpO2Vsc2UgcmV0dXJuIHRoaXMuX3ZhbHVlcygpfSxfc2V0T3B0aW9uOmZ1bmN0aW9uKGEsYil7dmFyIGMsZj0wO2lmKGQuaXNBcnJheSh0aGlzLm9wdGlvbnMudmFsdWVzKSlmPXRoaXMub3B0aW9ucy52YWx1ZXMubGVuZ3RoO2QuV2lkZ2V0LnByb3RvdHlwZS5fc2V0T3B0aW9uLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtzd2l0Y2goYSl7Y2FzZSAiZGlzYWJsZWQiOmlmKGIpe3RoaXMuaGFuZGxlcy5maWx0ZXIoIi51aS1zdGF0ZS1mb2N1cyIpLmJsdXIoKTt0aGlzLmhhbmRsZXMucmVtb3ZlQ2xhc3MoInVpLXN0YXRlLWhvdmVyIik7dGhpcy5oYW5kbGVzLnByb3BBdHRyKCJkaXNhYmxlZCIsdHJ1ZSk7dGhpcy5lbGVtZW50LmFkZENsYXNzKCJ1aS1kaXNhYmxlZCIpfWVsc2V7dGhpcy5oYW5kbGVzLnByb3BBdHRyKCJkaXNhYmxlZCIsZmFsc2UpO3RoaXMuZWxlbWVudC5yZW1vdmVDbGFzcygidWktZGlzYWJsZWQiKX1icmVhaztjYXNlICJvcmllbnRhdGlvbiI6dGhpcy5fZGV0ZWN0T3JpZW50YXRpb24oKTsKK3RoaXMuZWxlbWVudC5yZW1vdmVDbGFzcygidWktc2xpZGVyLWhvcml6b250YWwgdWktc2xpZGVyLXZlcnRpY2FsIikuYWRkQ2xhc3MoInVpLXNsaWRlci0iK3RoaXMub3JpZW50YXRpb24pO3RoaXMuX3JlZnJlc2hWYWx1ZSgpO2JyZWFrO2Nhc2UgInZhbHVlIjp0aGlzLl9hbmltYXRlT2ZmPXRydWU7dGhpcy5fcmVmcmVzaFZhbHVlKCk7dGhpcy5fY2hhbmdlKG51bGwsMCk7dGhpcy5fYW5pbWF0ZU9mZj1mYWxzZTticmVhaztjYXNlICJ2YWx1ZXMiOnRoaXMuX2FuaW1hdGVPZmY9dHJ1ZTt0aGlzLl9yZWZyZXNoVmFsdWUoKTtmb3IoYz0wO2M8ZjtjKz0xKXRoaXMuX2NoYW5nZShudWxsLGMpO3RoaXMuX2FuaW1hdGVPZmY9ZmFsc2U7YnJlYWt9fSxfdmFsdWU6ZnVuY3Rpb24oKXt2YXIgYT10aGlzLm9wdGlvbnMudmFsdWU7cmV0dXJuIGE9dGhpcy5fdHJpbUFsaWduVmFsdWUoYSl9LF92YWx1ZXM6ZnVuY3Rpb24oYSl7dmFyIGIsYztpZihhcmd1bWVudHMubGVuZ3RoKXtiPXRoaXMub3B0aW9ucy52YWx1ZXNbYV07CityZXR1cm4gYj10aGlzLl90cmltQWxpZ25WYWx1ZShiKX1lbHNle2I9dGhpcy5vcHRpb25zLnZhbHVlcy5zbGljZSgpO2ZvcihjPTA7YzxiLmxlbmd0aDtjKz0xKWJbY109dGhpcy5fdHJpbUFsaWduVmFsdWUoYltjXSk7cmV0dXJuIGJ9fSxfdHJpbUFsaWduVmFsdWU6ZnVuY3Rpb24oYSl7aWYoYTw9dGhpcy5fdmFsdWVNaW4oKSlyZXR1cm4gdGhpcy5fdmFsdWVNaW4oKTtpZihhPj10aGlzLl92YWx1ZU1heCgpKXJldHVybiB0aGlzLl92YWx1ZU1heCgpO3ZhciBiPXRoaXMub3B0aW9ucy5zdGVwPjA/dGhpcy5vcHRpb25zLnN0ZXA6MSxjPShhLXRoaXMuX3ZhbHVlTWluKCkpJWI7YT1hLWM7aWYoTWF0aC5hYnMoYykqMj49YilhKz1jPjA/YjotYjtyZXR1cm4gcGFyc2VGbG9hdChhLnRvRml4ZWQoNSkpfSxfdmFsdWVNaW46ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vcHRpb25zLm1pbn0sX3ZhbHVlTWF4OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMub3B0aW9ucy5tYXh9LF9yZWZyZXNoVmFsdWU6ZnVuY3Rpb24oKXt2YXIgYT0KK3RoaXMub3B0aW9ucy5yYW5nZSxiPXRoaXMub3B0aW9ucyxjPXRoaXMsZj0hdGhpcy5fYW5pbWF0ZU9mZj9iLmFuaW1hdGU6ZmFsc2UsZSxqPXt9LGcsayxsLGk7aWYodGhpcy5vcHRpb25zLnZhbHVlcyYmdGhpcy5vcHRpb25zLnZhbHVlcy5sZW5ndGgpdGhpcy5oYW5kbGVzLmVhY2goZnVuY3Rpb24oaCl7ZT0oYy52YWx1ZXMoaCktYy5fdmFsdWVNaW4oKSkvKGMuX3ZhbHVlTWF4KCktYy5fdmFsdWVNaW4oKSkqMTAwO2pbYy5vcmllbnRhdGlvbj09PSJob3Jpem9udGFsIj8ibGVmdCI6ImJvdHRvbSJdPWUrIiUiO2QodGhpcykuc3RvcCgxLDEpW2Y/ImFuaW1hdGUiOiJjc3MiXShqLGIuYW5pbWF0ZSk7aWYoYy5vcHRpb25zLnJhbmdlPT09dHJ1ZSlpZihjLm9yaWVudGF0aW9uPT09Imhvcml6b250YWwiKXtpZihoPT09MCljLnJhbmdlLnN0b3AoMSwxKVtmPyJhbmltYXRlIjoiY3NzIl0oe2xlZnQ6ZSsiJSJ9LGIuYW5pbWF0ZSk7aWYoaD09PTEpYy5yYW5nZVtmPyJhbmltYXRlIjoiY3NzIl0oe3dpZHRoOmUtCitnKyIlIn0se3F1ZXVlOmZhbHNlLGR1cmF0aW9uOmIuYW5pbWF0ZX0pfWVsc2V7aWYoaD09PTApYy5yYW5nZS5zdG9wKDEsMSlbZj8iYW5pbWF0ZSI6ImNzcyJdKHtib3R0b206ZSsiJSJ9LGIuYW5pbWF0ZSk7aWYoaD09PTEpYy5yYW5nZVtmPyJhbmltYXRlIjoiY3NzIl0oe2hlaWdodDplLWcrIiUifSx7cXVldWU6ZmFsc2UsZHVyYXRpb246Yi5hbmltYXRlfSl9Zz1lfSk7ZWxzZXtrPXRoaXMudmFsdWUoKTtsPXRoaXMuX3ZhbHVlTWluKCk7aT10aGlzLl92YWx1ZU1heCgpO2U9aSE9PWw/KGstbCkvKGktbCkqMTAwOjA7altjLm9yaWVudGF0aW9uPT09Imhvcml6b250YWwiPyJsZWZ0IjoiYm90dG9tIl09ZSsiJSI7dGhpcy5oYW5kbGUuc3RvcCgxLDEpW2Y/ImFuaW1hdGUiOiJjc3MiXShqLGIuYW5pbWF0ZSk7aWYoYT09PSJtaW4iJiZ0aGlzLm9yaWVudGF0aW9uPT09Imhvcml6b250YWwiKXRoaXMucmFuZ2Uuc3RvcCgxLDEpW2Y/ImFuaW1hdGUiOiJjc3MiXSh7d2lkdGg6ZSsiJSJ9LAorYi5hbmltYXRlKTtpZihhPT09Im1heCImJnRoaXMub3JpZW50YXRpb249PT0iaG9yaXpvbnRhbCIpdGhpcy5yYW5nZVtmPyJhbmltYXRlIjoiY3NzIl0oe3dpZHRoOjEwMC1lKyIlIn0se3F1ZXVlOmZhbHNlLGR1cmF0aW9uOmIuYW5pbWF0ZX0pO2lmKGE9PT0ibWluIiYmdGhpcy5vcmllbnRhdGlvbj09PSJ2ZXJ0aWNhbCIpdGhpcy5yYW5nZS5zdG9wKDEsMSlbZj8iYW5pbWF0ZSI6ImNzcyJdKHtoZWlnaHQ6ZSsiJSJ9LGIuYW5pbWF0ZSk7aWYoYT09PSJtYXgiJiZ0aGlzLm9yaWVudGF0aW9uPT09InZlcnRpY2FsIil0aGlzLnJhbmdlW2Y/ImFuaW1hdGUiOiJjc3MiXSh7aGVpZ2h0OjEwMC1lKyIlIn0se3F1ZXVlOmZhbHNlLGR1cmF0aW9uOmIuYW5pbWF0ZX0pfX19KTtkLmV4dGVuZChkLnVpLnNsaWRlcix7dmVyc2lvbjoiMS44LjE1In0pfSkoalF1ZXJ5KTsKKzsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9wYWdlcy90cmFuc2NyaXB0cy8yMDEzX0VjbGlwc2VDb25GcmFuY2UvZGVtb3MvY2RvL2Nkby9zY3JpcHRzL21vZGVybml6ci5qcyBiL3BhZ2VzL3RyYW5zY3JpcHRzLzIwMTNfRWNsaXBzZUNvbkZyYW5jZS9kZW1vcy9jZG8vY2RvL3NjcmlwdHMvbW9kZXJuaXpyLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk3MWNjMzQKLS0tIC9kZXYvbnVsbAorKysgYi9wYWdlcy90cmFuc2NyaXB0cy8yMDEzX0VjbGlwc2VDb25GcmFuY2UvZGVtb3MvY2RvL2Nkby9zY3JpcHRzL21vZGVybml6ci5qcwpAQCAtMCwwICsxLDQgQEAKKy8qIE1vZGVybml6ciAyLjAuNiAoQ3VzdG9tIEJ1aWxkKSB8IE1JVCAmIEJTRAorICogQnVpbGQ6IGh0dHA6Ly93d3cubW9kZXJuaXpyLmNvbS9kb3dubG9hZC8jLXRvdWNoLWllcHAtY3NzY2xhc3Nlcy10ZXN0c3R5bGVzLXByZWZpeGVzLWxvYWQKKyAqLworO3dpbmRvdy5Nb2Rlcm5penI9ZnVuY3Rpb24oYSxiLGMpe2Z1bmN0aW9uIHooYSxiKXtyZXR1cm4hIX4oIiIrYSkuaW5kZXhPZihiKX1mdW5jdGlvbiB5KGEsYil7cmV0dXJuIHR5cGVvZiBhPT09Yn1mdW5jdGlvbiB4KGEsYil7cmV0dXJuIHcobi5qb2luKGErIjsiKSsoYnx8IiIpKX1mdW5jdGlvbiB3KGEpe2suY3NzVGV4dD1hfXZhciBkPSIyLjAuNiIsZT17fSxmPSEwLGc9Yi5kb2N1bWVudEVsZW1lbnQsaD1iLmhlYWR8fGIuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImhlYWQiKVswXSxpPSJtb2Rlcm5penIiLGo9Yi5jcmVhdGVFbGVtZW50KGkpLGs9ai5zdHlsZSxsLG09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZyxuPSIgLXdlYmtpdC0gLW1vei0gLW8tIC1tcy0gLWtodG1sLSAiLnNwbGl0KCIgIiksbz17fSxwPXt9LHE9e30scj1bXSxzPWZ1bmN0aW9uKGEsYyxkLGUpe3ZhciBmLGgsaixrPWIuY3JlYXRlRWxlbWVudCgiZGl2Iik7aWYocGFyc2VJbnQoZCwxMCkpd2hpbGUoZC0tKWo9Yi5jcmVhdGVFbGVtZW50KCJkaXYiKSxqLmlkPWU/ZVtkXTppKyhkKzEpLGsuYXBwZW5kQ2hpbGQoaik7Zj1bIiZzaHk7IiwiPHN0eWxlPiIsYSwiPC9zdHlsZT4iXS5qb2luKCIiKSxrLmlkPWksay5pbm5lckhUTUwrPWYsZy5hcHBlbmRDaGlsZChrKSxoPWMoayxhKSxrLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoayk7cmV0dXJuISFofSx0LHU9e30uaGFzT3duUHJvcGVydHksdjsheSh1LGMpJiYheSh1LmNhbGwsYyk/dj1mdW5jdGlvbihhLGIpe3JldHVybiB1LmNhbGwoYSxiKX06dj1mdW5jdGlvbihhLGIpe3JldHVybiBiIGluIGEmJnkoYS5jb25zdHJ1Y3Rvci5wcm90b3R5cGVbYl0sYyl9O3ZhciBBPWZ1bmN0aW9uKGMsZCl7dmFyIGY9Yy5qb2luKCIiKSxnPWQubGVuZ3RoO3MoZixmdW5jdGlvbihjLGQpe3ZhciBmPWIuc3R5bGVTaGVldHNbYi5zdHlsZVNoZWV0cy5sZW5ndGgtMV0saD1mLmNzc1J1bGVzJiZmLmNzc1J1bGVzWzBdP2YuY3NzUnVsZXNbMF0uY3NzVGV4dDpmLmNzc1RleHR8fCIiLGk9Yy5jaGlsZE5vZGVzLGo9e307d2hpbGUoZy0tKWpbaVtnXS5pZF09aVtnXTtlLnRvdWNoPSJvbnRvdWNoc3RhcnQiaW4gYXx8ai50b3VjaC5vZmZzZXRUb3A9PT05fSxnLGQpfShbLFsiQG1lZGlhICgiLG4uam9pbigidG91Y2gtZW5hYmxlZCksKCIpLGksIikiLCJ7I3RvdWNoe3RvcDo5cHg7cG9zaXRpb246YWJzb2x1dGV9fSJdLmpvaW4oIiIpXSxbLCJ0b3VjaCJdKTtvLnRvdWNoPWZ1bmN0aW9uKCl7cmV0dXJuIGUudG91Y2h9O2Zvcih2YXIgQiBpbiBvKXYobyxCKSYmKHQ9Qi50b0xvd2VyQ2FzZSgpLGVbdF09b1tCXSgpLHIucHVzaCgoZVt0XT8iIjoibm8tIikrdCkpO3coIiIpLGo9bD1udWxsLGEuYXR0YWNoRXZlbnQmJmZ1bmN0aW9uKCl7dmFyIGE9Yi5jcmVhdGVFbGVtZW50KCJkaXYiKTthLmlubmVySFRNTD0iPGVsZW0+PC9lbGVtPiI7cmV0dXJuIGEuY2hpbGROb2Rlcy5sZW5ndGghPT0xfSgpJiZmdW5jdGlvbihhLGIpe2Z1bmN0aW9uIHMoYSl7dmFyIGI9LTE7d2hpbGUoKytiPGcpYS5jcmVhdGVFbGVtZW50KGZbYl0pfWEuaWVwcD1hLmllcHB8fHt9O3ZhciBkPWEuaWVwcCxlPWQuaHRtbDVlbGVtZW50c3x8ImFiYnJ8YXJ0aWNsZXxhc2lkZXxhdWRpb3xjYW52YXN8ZGF0YWxpc3R8ZGV0YWlsc3xmaWdjYXB0aW9ufGZpZ3VyZXxmb290ZXJ8aGVhZGVyfGhncm91cHxtYXJrfG1ldGVyfG5hdnxvdXRwdXR8cHJvZ3Jlc3N8c2VjdGlvbnxzdW1tYXJ5fHRpbWV8dmlkZW8iLGY9ZS5zcGxpdCgifCIpLGc9Zi5sZW5ndGgsaD1uZXcgUmVnRXhwKCIoXnxcXHMpKCIrZSsiKSIsImdpIiksaT1uZXcgUmVnRXhwKCI8KC8qKSgiK2UrIikiLCJnaSIpLGo9L15ccypbXHtcfV1ccyokLyxrPW5ldyBSZWdFeHAoIihefFteXFxuXSo/XFxzKSgiK2UrIikoW15cXG5dKikoe1tcXG5cXHdcXFddKj99KSIsImdpIiksbD1iLmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKSxtPWIuZG9jdW1lbnRFbGVtZW50LG49bS5maXJzdENoaWxkLG89Yi5jcmVhdGVFbGVtZW50KCJib2R5IikscD1iLmNyZWF0ZUVsZW1lbnQoInN0eWxlIikscT0vcHJpbnR8YWxsLyxyO2QuZ2V0Q1NTPWZ1bmN0aW9uKGEsYil7aWYoYSsiIj09PWMpcmV0dXJuIiI7dmFyIGU9LTEsZj1hLmxlbmd0aCxnLGg9W107d2hpbGUoKytlPGYpe2c9YVtlXTtpZihnLmRpc2FibGVkKWNvbnRpbnVlO2I9Zy5tZWRpYXx8YixxLnRlc3QoYikmJmgucHVzaChkLmdldENTUyhnLmltcG9ydHMsYiksZy5jc3NUZXh0KSxiPSJhbGwifXJldHVybiBoLmpvaW4oIiIpfSxkLnBhcnNlQ1NTPWZ1bmN0aW9uKGEpe3ZhciBiPVtdLGM7d2hpbGUoKGM9ay5leGVjKGEpKSE9bnVsbCliLnB1c2goKChqLmV4ZWMoY1sxXSk/IlxuIjpjWzFdKStjWzJdK2NbM10pLnJlcGxhY2UoaCwiJDEuaWVwcF8kMiIpK2NbNF0pO3JldHVybiBiLmpvaW4oIlxuIil9LGQud3JpdGVIVE1MPWZ1bmN0aW9uKCl7dmFyIGE9LTE7cj1yfHxiLmJvZHk7d2hpbGUoKythPGcpe3ZhciBjPWIuZ2V0RWxlbWVudHNCeVRhZ05hbWUoZlthXSksZD1jLmxlbmd0aCxlPS0xO3doaWxlKCsrZTxkKWNbZV0uY2xhc3NOYW1lLmluZGV4T2YoImllcHBfIik8MCYmKGNbZV0uY2xhc3NOYW1lKz0iIGllcHBfIitmW2FdKX1sLmFwcGVuZENoaWxkKHIpLG0uYXBwZW5kQ2hpbGQobyksby5jbGFzc05hbWU9ci5jbGFzc05hbWUsby5pZD1yLmlkLG8uaW5uZXJIVE1MPXIuaW5uZXJIVE1MLnJlcGxhY2UoaSwiPCQxZm9udCIpfSxkLl9iZWZvcmVQcmludD1mdW5jdGlvbigpe3Auc3R5bGVTaGVldC5jc3NUZXh0PWQucGFyc2VDU1MoZC5nZXRDU1MoYi5zdHlsZVNoZWV0cywiYWxsIikpLGQud3JpdGVIVE1MKCl9LGQucmVzdG9yZUhUTUw9ZnVuY3Rpb24oKXtvLmlubmVySFRNTD0iIixtLnJlbW92ZUNoaWxkKG8pLG0uYXBwZW5kQ2hpbGQocil9LGQuX2FmdGVyUHJpbnQ9ZnVuY3Rpb24oKXtkLnJlc3RvcmVIVE1MKCkscC5zdHlsZVNoZWV0LmNzc1RleHQ9IiJ9LHMoYikscyhsKTtkLmRpc2FibGVQUHx8KG4uaW5zZXJ0QmVmb3JlKHAsbi5maXJzdENoaWxkKSxwLm1lZGlhPSJwcmludCIscC5jbGFzc05hbWU9ImllcHAtcHJpbnRzaGltIixhLmF0dGFjaEV2ZW50KCJvbmJlZm9yZXByaW50IixkLl9iZWZvcmVQcmludCksYS5hdHRhY2hFdmVudCgib25hZnRlcnByaW50IixkLl9hZnRlclByaW50KSl9KGEsYiksZS5fdmVyc2lvbj1kLGUuX3ByZWZpeGVzPW4sZS50ZXN0U3R5bGVzPXMsZy5jbGFzc05hbWU9Zy5jbGFzc05hbWUucmVwbGFjZSgvXGJuby1qc1xiLywiIikrKGY/IiBqcyAiK3Iuam9pbigiICIpOiIiKTtyZXR1cm4gZX0odGhpcyx0aGlzLmRvY3VtZW50KSxmdW5jdGlvbihhLGIsYyl7ZnVuY3Rpb24gayhhKXtyZXR1cm4hYXx8YT09ImxvYWRlZCJ8fGE9PSJjb21wbGV0ZSJ9ZnVuY3Rpb24gaigpe3ZhciBhPTEsYj0tMTt3aGlsZShwLmxlbmd0aC0gKytiKWlmKHBbYl0ucyYmIShhPXBbYl0ucikpYnJlYWs7YSYmZygpfWZ1bmN0aW9uIGkoYSl7dmFyIGM9Yi5jcmVhdGVFbGVtZW50KCJzY3JpcHQiKSxkO2Muc3JjPWEucyxjLm9ucmVhZHlzdGF0ZWNoYW5nZT1jLm9ubG9hZD1mdW5jdGlvbigpeyFkJiZrKGMucmVhZHlTdGF0ZSkmJihkPTEsaigpLGMub25sb2FkPWMub25yZWFkeXN0YXRlY2hhbmdlPW51bGwpfSxtKGZ1bmN0aW9uKCl7ZHx8KGQ9MSxqKCkpfSxILmVycm9yVGltZW91dCksYS5lP2Mub25sb2FkKCk6bi5wYXJlbnROb2RlLmluc2VydEJlZm9yZShjLG4pfWZ1bmN0aW9uIGgoYSl7dmFyIGM9Yi5jcmVhdGVFbGVtZW50KCJsaW5rIiksZDtjLmhyZWY9YS5zLGMucmVsPSJzdHlsZXNoZWV0IixjLnR5cGU9InRleHQvY3NzIjtpZighYS5lJiYod3x8cikpe3ZhciBlPWZ1bmN0aW9uKGEpe20oZnVuY3Rpb24oKXtpZighZCl0cnl7YS5zaGVldC5jc3NSdWxlcy5sZW5ndGg/KGQ9MSxqKCkpOmUoYSl9Y2F0Y2goYil7Yi5jb2RlPT0xZTN8fGIubWVzc2FnZT09InNlY3VyaXR5Inx8Yi5tZXNzYWdlPT0iZGVuaWVkIj8oZD0xLG0oZnVuY3Rpb24oKXtqKCl9LDApKTplKGEpfX0sMCl9O2UoYyl9ZWxzZSBjLm9ubG9hZD1mdW5jdGlvbigpe2R8fChkPTEsbShmdW5jdGlvbigpe2ooKX0sMCkpfSxhLmUmJmMub25sb2FkKCk7bShmdW5jdGlvbigpe2R8fChkPTEsaigpKX0sSC5lcnJvclRpbWVvdXQpLCFhLmUmJm4ucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoYyxuKX1mdW5jdGlvbiBnKCl7dmFyIGE9cC5zaGlmdCgpO3E9MSxhP2EudD9tKGZ1bmN0aW9uKCl7YS50PT0iYyI/aChhKTppKGEpfSwwKTooYSgpLGooKSk6cT0wfWZ1bmN0aW9uIGYoYSxjLGQsZSxmLGgpe2Z1bmN0aW9uIGkoKXshbyYmayhsLnJlYWR5U3RhdGUpJiYoci5yPW89MSwhcSYmaigpLGwub25sb2FkPWwub25yZWFkeXN0YXRlY2hhbmdlPW51bGwsbShmdW5jdGlvbigpe3UucmVtb3ZlQ2hpbGQobCl9LDApKX12YXIgbD1iLmNyZWF0ZUVsZW1lbnQoYSksbz0wLHI9e3Q6ZCxzOmMsZTpofTtsLnNyYz1sLmRhdGE9YywhcyYmKGwuc3R5bGUuZGlzcGxheT0ibm9uZSIpLGwud2lkdGg9bC5oZWlnaHQ9IjAiLGEhPSJvYmplY3QiJiYobC50eXBlPWQpLGwub25sb2FkPWwub25yZWFkeXN0YXRlY2hhbmdlPWksYT09ImltZyI/bC5vbmVycm9yPWk6YT09InNjcmlwdCImJihsLm9uZXJyb3I9ZnVuY3Rpb24oKXtyLmU9ci5yPTEsZygpfSkscC5zcGxpY2UoZSwwLHIpLHUuaW5zZXJ0QmVmb3JlKGwscz9udWxsOm4pLG0oZnVuY3Rpb24oKXtvfHwodS5yZW1vdmVDaGlsZChsKSxyLnI9ci5lPW89MSxqKCkpfSxILmVycm9yVGltZW91dCl9ZnVuY3Rpb24gZShhLGIsYyl7dmFyIGQ9Yj09ImMiP3o6eTtxPTAsYj1ifHwiaiIsQyhhKT9mKGQsYSxiLHRoaXMuaSsrLGwsYyk6KHAuc3BsaWNlKHRoaXMuaSsrLDAsYSkscC5sZW5ndGg9PTEmJmcoKSk7cmV0dXJuIHRoaXN9ZnVuY3Rpb24gZCgpe3ZhciBhPUg7YS5sb2FkZXI9e2xvYWQ6ZSxpOjB9O3JldHVybiBhfXZhciBsPWIuZG9jdW1lbnRFbGVtZW50LG09YS5zZXRUaW1lb3V0LG49Yi5nZXRFbGVtZW50c0J5VGFnTmFtZSgic2NyaXB0IilbMF0sbz17fS50b1N0cmluZyxwPVtdLHE9MCxyPSJNb3pBcHBlYXJhbmNlImluIGwuc3R5bGUscz1yJiYhIWIuY3JlYXRlUmFuZ2UoKS5jb21wYXJlTm9kZSx0PXImJiFzLHU9cz9sOm4ucGFyZW50Tm9kZSx2PWEub3BlcmEmJm8uY2FsbChhLm9wZXJhKT09IltvYmplY3QgT3BlcmFdIix3PSJ3ZWJraXRBcHBlYXJhbmNlImluIGwuc3R5bGUseD13JiYiYXN5bmMiaW4gYi5jcmVhdGVFbGVtZW50KCJzY3JpcHQiKSx5PXI/Im9iamVjdCI6dnx8eD8iaW1nIjoic2NyaXB0Iix6PXc/ImltZyI6eSxBPUFycmF5LmlzQXJyYXl8fGZ1bmN0aW9uKGEpe3JldHVybiBvLmNhbGwoYSk9PSJbb2JqZWN0IEFycmF5XSJ9LEI9ZnVuY3Rpb24oYSl7cmV0dXJuIE9iamVjdChhKT09PWF9LEM9ZnVuY3Rpb24oYSl7cmV0dXJuIHR5cGVvZiBhPT0ic3RyaW5nIn0sRD1mdW5jdGlvbihhKXtyZXR1cm4gby5jYWxsKGEpPT0iW29iamVjdCBGdW5jdGlvbl0ifSxFPVtdLEY9e30sRyxIO0g9ZnVuY3Rpb24oYSl7ZnVuY3Rpb24gZihhKXt2YXIgYj1hLnNwbGl0KCIhIiksYz1FLmxlbmd0aCxkPWIucG9wKCksZT1iLmxlbmd0aCxmPXt1cmw6ZCxvcmlnVXJsOmQscHJlZml4ZXM6Yn0sZyxoO2ZvcihoPTA7aDxlO2grKylnPUZbYltoXV0sZyYmKGY9ZyhmKSk7Zm9yKGg9MDtoPGM7aCsrKWY9RVtoXShmKTtyZXR1cm4gZn1mdW5jdGlvbiBlKGEsYixlLGcsaCl7dmFyIGk9ZihhKSxqPWkuYXV0b0NhbGxiYWNrO2lmKCFpLmJ5cGFzcyl7YiYmKGI9RChiKT9iOmJbYV18fGJbZ118fGJbYS5zcGxpdCgiLyIpLnBvcCgpLnNwbGl0KCI/IilbMF1dKTtpZihpLmluc3RlYWQpcmV0dXJuIGkuaW5zdGVhZChhLGIsZSxnLGgpO2UubG9hZChpLnVybCxpLmZvcmNlQ1NTfHwhaS5mb3JjZUpTJiYvY3NzJC8udGVzdChpLnVybCk/ImMiOmMsaS5ub2V4ZWMpLChEKGIpfHxEKGopKSYmZS5sb2FkKGZ1bmN0aW9uKCl7ZCgpLGImJmIoaS5vcmlnVXJsLGgsZyksaiYmaihpLm9yaWdVcmwsaCxnKX0pfX1mdW5jdGlvbiBiKGEsYil7ZnVuY3Rpb24gYyhhKXtpZihDKGEpKWUoYSxoLGIsMCxkKTtlbHNlIGlmKEIoYSkpZm9yKGkgaW4gYSlhLmhhc093blByb3BlcnR5KGkpJiZlKGFbaV0saCxiLGksZCl9dmFyIGQ9ISFhLnRlc3QsZj1kP2EueWVwOmEubm9wZSxnPWEubG9hZHx8YS5ib3RoLGg9YS5jYWxsYmFjayxpO2MoZiksYyhnKSxhLmNvbXBsZXRlJiZiLmxvYWQoYS5jb21wbGV0ZSl9dmFyIGcsaCxpPXRoaXMueWVwbm9wZS5sb2FkZXI7aWYoQyhhKSllKGEsMCxpLDApO2Vsc2UgaWYoQShhKSlmb3IoZz0wO2c8YS5sZW5ndGg7ZysrKWg9YVtnXSxDKGgpP2UoaCwwLGksMCk6QShoKT9IKGgpOkIoaCkmJmIoaCxpKTtlbHNlIEIoYSkmJmIoYSxpKX0sSC5hZGRQcmVmaXg9ZnVuY3Rpb24oYSxiKXtGW2FdPWJ9LEguYWRkRmlsdGVyPWZ1bmN0aW9uKGEpe0UucHVzaChhKX0sSC5lcnJvclRpbWVvdXQ9MWU0LGIucmVhZHlTdGF0ZT09bnVsbCYmYi5hZGRFdmVudExpc3RlbmVyJiYoYi5yZWFkeVN0YXRlPSJsb2FkaW5nIixiLmFkZEV2ZW50TGlzdGVuZXIoIkRPTUNvbnRlbnRMb2FkZWQiLEc9ZnVuY3Rpb24oKXtiLnJlbW92ZUV2ZW50TGlzdGVuZXIoIkRPTUNvbnRlbnRMb2FkZWQiLEcsMCksYi5yZWFkeVN0YXRlPSJjb21wbGV0ZSJ9LDApKSxhLnllcG5vcGU9ZCgpfSh0aGlzLHRoaXMuZG9jdW1lbnQpLE1vZGVybml6ci5sb2FkPWZ1bmN0aW9uKCl7eWVwbm9wZS5hcHBseSh3aW5kb3csW10uc2xpY2UuY2FsbChhcmd1bWVudHMsMCkpfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9wYWdlcy90cmFuc2NyaXB0cy8yMDEzX0VjbGlwc2VDb25GcmFuY2UvZGVtb3MvY2RvL2Nkby9zY3JpcHRzL3BsYXllci1taW4uanMgYi9wYWdlcy90cmFuc2NyaXB0cy8yMDEzX0VjbGlwc2VDb25GcmFuY2UvZGVtb3MvY2RvL2Nkby9zY3JpcHRzL3BsYXllci1taW4uanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTRlYTJhMQotLS0gL2Rldi9udWxsCisrKyBiL3BhZ2VzL3RyYW5zY3JpcHRzLzIwMTNfRWNsaXBzZUNvbkZyYW5jZS9kZW1vcy9jZG8vY2RvL3NjcmlwdHMvcGxheWVyLW1pbi5qcwpAQCAtMCwwICsxIEBACit2YXIgVFNDPVRTQ3x8e307VFNDLnRleHRTYW5pdGl6ZXI9KGZ1bmN0aW9uKCl7cmV0dXJue2h0bWxFbmNvZGU6ZnVuY3Rpb24oYixhKXtpZihiKXtpZihhKXtyZXR1cm4gYi5yZXBsYWNlKC8mL2csIiZhbXA7IikucmVwbGFjZSgvKDx8JmFtcDtsdDspL2csIiZsdDsiKS5yZXBsYWNlKC8oPnwmYW1wO2d0OykvZywiJmd0OyIpLnJlcGxhY2UoLyZhbXA7YW1wOy9nLCImYW1wOyIpfWVsc2V7cmV0dXJuIGIucmVwbGFjZSgvJi9nLCImYW1wOyIpLnJlcGxhY2UoLygifCZhbXA7cXVvdDspL2csIiZxdW90OyIpLnJlcGxhY2UoLyg8fCZhbXA7bHQ7KS9nLCImbHQ7IikucmVwbGFjZSgvKD58JmFtcDtndDspL2csIiZndDsiKS5yZXBsYWNlKC8mYW1wO2FtcDsvZywiJmFtcDsiKX19ZWxzZXtyZXR1cm4gYn19fX0oKSk7dmFyIFRTQz1UU0N8fHt9O1RTQy52aWRlb0FuYWx5dGljcz0oZnVuY3Rpb24oKXt2YXIgZjt2YXIgaDt2YXIgaj0wO3ZhciBhPVt7ZHVyYXRpb246MzAwMDAwLHNlZ21lbnRMZW5ndGg6MjAwMH0se2R1cmF0aW9uOjE4MDAwMDAsc2VnbWVudExlbmd0aDo1MDAwfV07dmFyIGk9MzAwMDA7dmFyIGc7dmFyIGI7dmFyIGM9MDt2YXIgZTt2YXIgZD1mYWxzZTtyZXR1cm57c2V0VmlkZW9Mb2FkU3RhcnRUaW1lOmZ1bmN0aW9uKGspe2Y9a30sc2V0VmlkZW9Mb2FkRW5kVGltZTpmdW5jdGlvbihrKXtoPWt9LGdldFZpZGVvTG9hZFRpbWU6ZnVuY3Rpb24oKXt2YXIgaz0wO2lmKGYmJmgpe2s9aC1mfXJldHVybiBrfSxnZXROdW1iZXJTZWdtZW50czpmdW5jdGlvbigpe3JldHVybiBnfSxnZXROdW1iZXJXYXRjaGVkU2VnbWVudHM6ZnVuY3Rpb24oKXtyZXR1cm4gY30saXNQZXJjZW50V2F0Y2hlZEluaXRpYWxpemVkOmZ1bmN0aW9uKCl7cmV0dXJuIGo+MH0sY2xlYXJQZXJjZW50V2F0Y2hlZDpmdW5jdGlvbigpe2o9MH0saW5pdFBlcmNlbnRXYXRjaGVkOmZ1bmN0aW9uKGwpe2lmKGw8PTApe3JldHVybn1qPWw7Zm9yKHZhciBrPTA7azxhLmxlbmd0aDtrKyspe2lmKGw8PWFba10uZHVyYXRpb24pe2k9YVtrXS5zZWdtZW50TGVuZ3RoO2JyZWFrfX1iPVtdO2c9TWF0aC5jZWlsKGwvaSk7Zm9yKGs9MDtrPGc7aysrKXtiLnB1c2goZmFsc2UpfWM9MH0sbWFya1RpbWVXYXRjaGVkOmZ1bmN0aW9uKGspe2lmKGs+ail7cmV0dXJufWU9TWF0aC5mbG9vcihrL2kpO2lmKGU8MHx8ZT49Zyl7cmV0dXJufWlmKCFiW2VdKXtjKys7YltlXT10cnVlfX0sZ2V0UGVyY2VudGFnZVdhdGNoZWQ6ZnVuY3Rpb24oKXtpZihnJiZnPjApe3JldHVybiBjL2d9ZWxzZXtyZXR1cm4gMH19LGdldFBlcmNlbnRhZ2VXYXRjaGVkRm9yVmlkZW9TZWdtZW50OmZ1bmN0aW9uKHEscCl7dmFyIHI9MDtpZihqPjAmJihxPD1wKSl7dmFyIG89TWF0aC5mbG9vcihxL2kpO3ZhciBtPU1hdGguZmxvb3IocC9pKTt2YXIgbD0wO3ZhciBrPW0tbysxO2Zvcih2YXIgbj1vO248PW07bisrKXtpZihiW25dKXtsKyt9fXI9bC9rfXJldHVybiByfSxzZXRFbmFibGVkOmZ1bmN0aW9uKGspe2Q9a30saXNFbmFibGVkOmZ1bmN0aW9uKCl7cmV0dXJuIGR9fX0oKSk7dmFyIFRTQz1UU0N8fHt9O1RTQy5tZWRpYVR5cGU9KGZ1bmN0aW9uKCl7cmV0dXJue1dFQk06IndlYm0iLEgyNjQ6ImgyNjQiLE9HRzoib2dnIixVTktOT1dOOiJ1bmtub3duIixOT1RfQVZBSUxBQkxFOiJub3QgYXZhaWxhYmxlIixNVUxUSVBMRV9UWVBFUzoibXVsdGlwbGUgdHlwZXMifX0oKSk7dmFyIFRTQz1UU0N8fHt9O1RTQy5ydGZQYXJzZXI9KGZ1bmN0aW9uKCl7dmFyIGc9IlxcIjt2YXIgYT0iMCI7dmFyIGw9IiAiO3ZhciBvPSIgIjtmdW5jdGlvbiBjKHEpe3ZhciBwPSJwYXIgIjtyZXR1cm4gcS50b0xvd2VyQ2FzZSgpPT1wfWZ1bmN0aW9uIGQodixzKXtpZihzPT09dW5kZWZpbmVkKXtzPTB9dmFyIHE9ImEiO3ZhciB3PSJ6Ijt2YXIgdT1xLmNoYXJDb2RlQXQoKTt2YXIgdD13LmNoYXJDb2RlQXQoKTt2YXIgcD0tMTtpZih2KXtwPXYuaW5kZXhPZihnLHMpO3doaWxlKHAhPS0xKXtpZihwKzE8di5sZW5ndGgpe3ZhciByPXYudG9Mb3dlckNhc2UoKS5jaGFyQ29kZUF0KHArMSk7aWYodTw9ciYmcjw9dCl7YnJlYWt9fXA9di5pbmRleE9mKGcscCsxKX19cmV0dXJuIHB9ZnVuY3Rpb24gaihzLHEpe2lmKHE9PT11bmRlZmluZWQpe3E9MH12YXIgcD1kKHMscSk7d2hpbGUocCE9LTEpe3ZhciByPWkocyxwKTtpZihyJiYhYyhyKSl7YnJlYWt9cD1kKHMscCsxKX1yZXR1cm4gcH1mdW5jdGlvbiBpKHAscil7dmFyIHE7aWYociE9LTEpe3ZhciB0PXAuaW5kZXhPZihsLHIrMSk7aWYodCE9LTEpe3ZhciBzPSh0KzEpLShyKzEpO3E9cC5zdWJzdHIocisxLHMpfWVsc2V7cT1wLnN1YnN0cihyKzEpfX1yZXR1cm4gcX1mdW5jdGlvbiBuKHQscyl7dmFyIHE9IiI7dmFyIHU9W107dmFyIHI9cy5wb3AoKTt3aGlsZShyJiZyIT10JiZzLmxlbmd0aCl7cSs9KGcrcik7dS5wdXNoKGUocikpO2lmKHMubGVuZ3RoKXtyPXMucG9wKCl9fXErPShnK3QpO3doaWxlKHUubGVuZ3RoKXt2YXIgcD11LnBvcCgpO2lmKHApe3ErPShnK3ApO3MucHVzaChlKHApKX19cmV0dXJuIHF9ZnVuY3Rpb24gYihwKXtyZXR1cm4gcC5pbmRleE9mKGEpIT0tMX1mdW5jdGlvbiBlKHEpe3ZhciBwO2lmKHEhPSIiKXtpZihiKHEpKXtwPXEuc3Vic3RyKDAscS5pbmRleE9mKGEpKX1lbHNle2lmKHEuaW5kZXhPZihvKSE9LTEpe3A9cS5zdWJzdHIoMCxxLmluZGV4T2YobykpfXArPWF9cCs9b31yZXR1cm4gcH1mdW5jdGlvbiBtKHMscSl7dmFyIHI9cztpZihxIT0tMSYmciYmcTxyLmxlbmd0aCl7dmFyIHA9ci5pbmRleE9mKGwscSk7aWYocCE9LTEpe3I9ci5zdWJzdHIoMCxxKStyLnN1YnN0cihwKzEpfWVsc2V7cj1yLnN1YnN0cigwLHEpfX1yZXR1cm4gcn1mdW5jdGlvbiBrKHIpe3ZhciBwPSIgIjt2YXIgcT1yO3doaWxlKHEubGVuZ3RoPjEmJnEuY2hhckF0KDApPT1wKXtxPXEuc3Vic3RyKDEpfXdoaWxlKHEubGVuZ3RoPjEmJnEuY2hhckF0KHEubGVuZ3RoLTEpPT1wKXtxPXEuc3Vic3RyKDAscS5sZW5ndGgtMSl9aWYocT09cCl7cT0iIn1yZXR1cm4gcX1mdW5jdGlvbiBmKHcpe3ZhciB2PXc7aWYodil7dmFyIHI9W107dmFyIHE9aih2KTt2YXIgdT0wO3doaWxlKHEhPT0tMSl7dmFyIHQ9aSh2LHEpO2lmKHQmJmIodCkpe3ZhciBwPW4odCxyKTt2YXIgcz12LmluZGV4T2YobCxxKTtpZihzIT09LTEpe3Y9di5zdWJzdHIoMCxxKStwK3Yuc3Vic3RyKHMrMSl9ZWxzZXt2PXYuc3Vic3RyKDAscSkrcH1xKz1wLmxlbmd0aH1lbHNle2lmKHQmJiFjKHQpKXtyLnB1c2goZSh0KSl9cT1OdW1iZXIocSkrMX1xPWQodixxKX19cmV0dXJuIHZ9ZnVuY3Rpb24gaChyKXt2YXIgcT1yO2lmKHEpe3ZhciBwPTE7d2hpbGUocD4wKXtwPTA7dmFyIHY9aihxKTt3aGlsZSh2IT0tMSl7dmFyIHg9aihxLHYrMSk7dmFyIHU9aShxLHYpO2lmKHUpe2lmKHghPS0xKXt2YXIgdD1lKHUpO3ZhciBzPWkocSx4KTtpZihzJiZzPT10KXt2YXIgeT12KzErdS5sZW5ndGg7dmFyIHc9cS5zdWJzdHIoeSx4LXkpO2lmKCFrKHcpLmxlbmd0aCl7cT1tKHEseCk7cT1tKHEsdik7eC09KHUubGVuZ3RoKzEpO3ArK319fX12PXh9fX1yZXR1cm4gcX1yZXR1cm57TmVzdEFuZENsZWFuVXBUYWdzOmZ1bmN0aW9uKHEpe3ZhciBwPXE7aWYocCl7cD1mKHApO3A9aChwKX1yZXR1cm4gcH19fSgpKTt2YXIgVFNDPVRTQ3x8e307VFNDLnRleHRGb3JtYXR0ZXI9KGZ1bmN0aW9uKCl7cmV0dXJue3J0ZlRvVGV4dDpmdW5jdGlvbihiKXt2YXIgYT1mYWxzZTtpZihiLmluZGV4T2YoIntcXHJ0ZjEiKSE9LTEpe2I9Yi5zcGxpdCgie1xccnRmMSAiKS5qb2luKCIiKTthPXRydWV9Yj1iLnNwbGl0KCJcXGkgIikuam9pbigiIik7Yj1iLnNwbGl0KCJcXGkwICIpLmpvaW4oIiIpO2I9Yi5zcGxpdCgiXFxiICIpLmpvaW4oIiIpO2I9Yi5zcGxpdCgiXFxiMCAiKS5qb2luKCIiKTtiPWIuc3BsaXQoIlxcdWwgIikuam9pbigiIik7Yj1iLnNwbGl0KCJcXHVsMCAiKS5qb2luKCIiKTtiPWIuc3BsaXQoIlxccGFyICIpLmpvaW4oIiIpO2I9Yi5zcGxpdCgiXFx7Iikuam9pbigieyIpO2I9Yi5zcGxpdCgiXFx9Iikuam9pbigifSIpO2I9Yi5zcGxpdCgiXFxcXCIpLmpvaW4oIlxcIik7aWYoYSYmKGIuY2hhckF0KGIubGVuZ3RoLTEpPT0ifSIpKXtiPWIuc3Vic3RyKDAsYi5sZW5ndGgtMSl9cmV0dXJuIGJ9LHJ0ZlRvSFRNTDpmdW5jdGlvbihiKXtiPVRTQy5ydGZQYXJzZXIuTmVzdEFuZENsZWFuVXBUYWdzKGIpO2I9Yi5zcGxpdCgiPCIpLmpvaW4oIiZsdDsiKTtiPWIuc3BsaXQoIj4iKS5qb2luKCImZ3Q7Iik7dmFyIGE9ZmFsc2U7aWYoYi5pbmRleE9mKCJ7XFxydGYxIikhPS0xKXtiPWIuc3BsaXQoIntcXHJ0ZjEgIikuam9pbigiIik7YT10cnVlfWI9Yi5zcGxpdCgiXFxpMCAiKS5qb2luKCI8L2k+Iik7Yj1iLnNwbGl0KCJcXGIwICIpLmpvaW4oIjwvYj4iKTtiPWIuc3BsaXQoIlxcdWwwICIpLmpvaW4oIjwvdT4iKTtiPWIuc3BsaXQoIlxcaSAiKS5qb2luKCI8aT4iKTtiPWIuc3BsaXQoIlxcYiAiKS5qb2luKCI8Yj4iKTtiPWIuc3BsaXQoIlxcdWwgIikuam9pbigiPHU+Iik7Yj1iLnNwbGl0KCJcXHBhciAiKS5qb2luKCI8YnIvPiIpO2I9Yi5zcGxpdCgiXFx7Iikuam9pbigieyIpO2I9Yi5zcGxpdCgiXFx9Iikuam9pbigifSIpO2I9Yi5zcGxpdCgiXFxcXCIpLmpvaW4oIlxcIik7aWYoYSYmKGIuY2hhckF0KGIubGVuZ3RoLTEpPT0ifSIpKXtiPWIuc3Vic3RyKDAsYi5sZW5ndGgtMSl9Yj1iLnNwbGl0KCImbHQ7YnImZ3Q7Iikuam9pbigiPGJyLz4iKTtiPWIuc3BsaXQoIiZsdDtCUiZndDsiKS5qb2luKCI8YnIvPiIpO3JldHVybiBifX19KCkpO3ZhciBUU0M9VFNDfHx7fTtUU0MuZGV2aWNlSW5mbz0oZnVuY3Rpb24oKXt2YXIgZj1mYWxzZTt2YXIgbT1mYWxzZTt2YXIgYT1mYWxzZTt2YXIgZT1mYWxzZTt2YXIgbj1mYWxzZTt2YXIgZz1mYWxzZTt2YXIgYz1mYWxzZTt2YXIgaD1mYWxzZTt2YXIgaT1mYWxzZTt2YXIgaz1mYWxzZTt2YXIgbD1mYWxzZTt2YXIgZD1mYWxzZTtmdW5jdGlvbiBqKCl7c3dpdGNoKHdpbmRvdy5sb2NhdGlvbi5wcm90b2NvbCl7Y2FzZSJodHRwOiI6Y2FzZSJodHRwczoiOnJldHVybiBmYWxzZTticmVhaztjYXNlImZpbGU6IjpyZXR1cm4gdHJ1ZTticmVha319ZnVuY3Rpb24gYigpe249bmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaCgvaVBhZC9pKSE9PW51bGw7Zz1uYXZpZ2F0b3IudXNlckFnZW50Lm1hdGNoKC9pUGhvbmUvaSkhPT1udWxsO2M9bmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaCgvaVBvZC9pKSE9PW51bGw7aD1uYXZpZ2F0b3IudXNlckFnZW50LnRvTG93ZXJDYXNlKCkuaW5kZXhPZigiYW5kcm9pZCIpIT09LTE7ZT1uYXZpZ2F0b3IudXNlckFnZW50LnRvTG93ZXJDYXNlKCkuaW5kZXhPZigiY2hyb21lIikhPT0tMTttPW5hdmlnYXRvci5hcHBOYW1lPT0iTWljcm9zb2Z0IEludGVybmV0IEV4cGxvcmVyIjthPW5hdmlnYXRvci51c2VyQWdlbnQudG9Mb3dlckNhc2UoKS5pbmRleE9mKCJmaXJlZm94IikhPT0tMTtpPW5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goL051ZXZvL2kpIT09bnVsbDtrPW5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goL1NhZmFyaS9pKSE9PW51bGw7ZD0oKHNjcmVlbi5hdmFpbFdpZHRoPDY0MCkmJihzY3JlZW4uYXZhaWxIZWlnaHQ8NDgwKXx8KHNjcmVlbi5hdmFpbFdpZHRoPDQ4MCkmJihzY3JlZW4uYXZhaWxIZWlnaHQ8NjQwKSk7bD0oZ3x8Y3x8bikmJih3aW5kb3cuZGV2aWNlUGl4ZWxSYXRpbz49Mik7aWYoKGd8fGMpJiZpJiZsKXtuPXRydWU7Zz1jPWZhbHNlfX1yZXR1cm57aXNTbWFsbFNjcmVlbjpmdW5jdGlvbigpe3JldHVybiBkfSxpc1JldGluYURpc3BsYXk6ZnVuY3Rpb24oKXtyZXR1cm4gbH0saXNOdWV2b0FwcDpmdW5jdGlvbigpe3JldHVybiBpfSxpc0lQYWQ6ZnVuY3Rpb24oKXtyZXR1cm4gbn0saXNJUGhvbmVPcklQb2Q6ZnVuY3Rpb24oKXtyZXR1cm4oZ3x8Yyl9LGlzSUU6ZnVuY3Rpb24oKXtyZXR1cm4gbX0saXNGaXJlZm94OmZ1bmN0aW9uKCl7cmV0dXJuIGF9LGlzQ2hyb21lOmZ1bmN0aW9uKCl7cmV0dXJuIGV9LGlzQW5kcm9pZDpmdW5jdGlvbigpe3JldHVybiBofSxpc1RvdWNoSW50ZXJmYWNlOmZ1bmN0aW9uKCl7cmV0dXJuIE1vZGVybml6ci50b3VjaH0sc3VwcG9ydHNGdWxsU2NyZWVuS2V5Ym9hcmRJbnB1dDpmdW5jdGlvbigpe3ZhciBvPWZhbHNlO2lmKGUmJkVsZW1lbnQuQUxMT1dfS0VZQk9BUkRfSU5QVVQhPT11bmRlZmluZWQpe289dHJ1ZX1yZXR1cm4gb30sbWVkaWFMb2NhdGlvbjpmdW5jdGlvbigpe3ZhciBxPShkb2N1bWVudC5sb2NhdGlvbi5ocmVmKTt2YXIgbz1xLmxhc3RJbmRleE9mKCIvIik7dmFyIHA9cS5zdWJzdHJpbmcoMCxvKzEpO2lmKFRTQy5kZXZpY2VJbmZvLmlzSUUoKT09dHJ1ZSl7cD1lbmNvZGVVUkkocCl9cD1wLnNwbGl0KCIlMjUiKS5qb2luKCIlIik7cmV0dXJuIHB9LGlzTG9jYWw6ZnVuY3Rpb24oKXtyZXR1cm4gaigpfSxsb29rQXREZXZpY2U6ZnVuY3Rpb24oKXtiKCl9fX0oKSk7dmFyIFRTQz1UU0N8fHt9O1RTQy5wbGF5ZXJDb25maWd1cmF0aW9uPShmdW5jdGlvbigpe3ZhciBwPSIxMC4yLjAiO3ZhciByPVtdO3ZhciBEO3ZhciBsO3ZhciBzO3ZhciBkPSI8Yj5Zb3VyIGJyb3dzZXIgY2Fubm90IHBsYXkgdGhpcyB2aWRlby48L2I+Ijt2YXIgQT0iJ3BsYXllclByb2R1Y3RJbnN0YWxsLnN3ZiI7dmFyIEU9InRzY19wbGF5ZXIuc3dmIjt2YXIgYj0iMTAwJSI7dmFyIGs9IjEwMCUiO3ZhciB1PSJzdG9wIjt2YXIgcT10cnVlO3ZhciBlPXRydWU7dmFyIGY9ZmFsc2U7dmFyIG09LTE7dmFyIHo9ZmFsc2U7dmFyIGc9ZmFsc2U7dmFyIGE9ImxlZnQiO3ZhciBDPSIjMDAwIjt2YXIgaT1mYWxzZTt2YXIgaj1mYWxzZTt2YXIgdz10cnVlO3ZhciBGPWZhbHNlO3ZhciB5PXRydWU7dmFyIEc9ZmFsc2U7dmFyIG89ZmFsc2U7dmFyIEk9ZmFsc2U7dmFyIEI9ZmFsc2U7dmFyIG47dmFyIHY9dHJ1ZTt2YXIgaD10cnVlO3ZhciBIPXRydWU7dmFyIGM9Ii4iO2Z1bmN0aW9uIHQoKXt2YXIgSz1mYWxzZTt2YXIgSj0oZG9jdW1lbnQubG9jYXRpb24uaHJlZik7aWYoSi5pbmRleE9mKCJodHRwIik9PTApe0s9dHJ1ZX1yZXR1cm4gS31mdW5jdGlvbiB4KEspe3ZhciBKPUsucmVwbGFjZSgiJiM4MjE3OyIsIiciKTtyZXR1cm4gSn1yZXR1cm57Z2V0VW5pY29kZVNhZmVTdHJpbmc6ZnVuY3Rpb24oSil7aWYoSj09PXVuZGVmaW5lZCl7cmV0dXJuIEp9aWYoVFNDLnBsYXllckNvbmZpZ3VyYXRpb24uZ2V0UHJvY2Vzc1VuaWNvZGVOYW1lcygpKXtpZihUU0MuZGV2aWNlSW5mby5pc0lFKCk9PXRydWUpe2lmKHQoKSl7cmV0dXJuIGVuY29kZVVSSShKKX1lbHNle3JldHVybiBkZWNvZGVVUklDb21wb25lbnQoSil9fWVsc2V7cmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudChKKX19ZWxzZXtyZXR1cm4gSn19LGdldE1lZGlhU3JjOmZ1bmN0aW9uKCl7cmV0dXJuIHIubGVuZ3RoPjA/clswXToiIn0sc2V0TWVkaWFTcmM6ZnVuY3Rpb24oSil7ci5wdXNoKHgoSikpfSxhZGRNZWRpYVNyYzpmdW5jdGlvbihKKXtyLnB1c2goeChKKSl9LGdldE1lZGlhU291cmNlczpmdW5jdGlvbigpe3JldHVybiByfSxnZXRNZWRpYUZpbGVOYW1lOmZ1bmN0aW9uKCl7dmFyIEo9ci5sZW5ndGg+MD9yWzBdOnVuZGVmaW5lZDt2YXIgTDtpZihKKXt2YXIgSz1KLnNwbGl0KCIvIik7TD1LW0subGVuZ3RoLTFdO0w9TC5zcGxpdCgiPyIpWzBdO2lmKEw9PT11bmRlZmluZWR8fEw9PT0iIil7TD0iVW5uYW1lZCBNZWRpYSJ9fWVsc2V7TD0iTm8gTWVkaWEifXJldHVybiBMfSxnZXRYTVBTcmM6ZnVuY3Rpb24oKXtyZXR1cm4gVFNDLnBsYXllckNvbmZpZ3VyYXRpb24uZ2V0VW5pY29kZVNhZmVTdHJpbmcoRCl9LHNldFhNUFNyYzpmdW5jdGlvbihKKXtEPXgoSil9LHNldFN3ZkJhc2U6ZnVuY3Rpb24oSil7Yz14KEopfSxnZXRTd2ZCYXNlOmZ1bmN0aW9uKCl7cmV0dXJuIGN9LGdldENvbmZpZ3VyYXRpb25TcmM6ZnVuY3Rpb24oKXtyZXR1cm4gVFNDLnBsYXllckNvbmZpZ3VyYXRpb24uZ2V0VW5pY29kZVNhZmVTdHJpbmcobCl9LHNldENvbmZpZ3VyYXRpb25TcmM6ZnVuY3Rpb24oSil7bD1KfSxnZXRQb3N0ZXJJbWFnZVNyYzpmdW5jdGlvbigpe3JldHVybiBUU0MucGxheWVyQ29uZmlndXJhdGlvbi5nZXRVbmljb2RlU2FmZVN0cmluZyhzKX0sc2V0UG9zdGVySW1hZ2VTcmM6ZnVuY3Rpb24oSil7cz1KfSxnZXRVbmFibGVUb0Rpc3BsYXlDb250ZW50U3RyaW5nOmZ1bmN0aW9uKCl7cmV0dXJuIGR9LHNldFVuYWJsZVRvRGlzcGxheUNvbnRlbnRTdHJpbmc6ZnVuY3Rpb24oSil7ZD1KfSxnZXRGbGFzaFVwZGF0ZUJvb3RzdHJhcFN3ZjpmdW5jdGlvbigpe3JldHVybiBBfSxzZXRGbGFzaFVwZGF0ZUJvb3RzdHJhcFN3ZjpmdW5jdGlvbihKKXtBPUp9LGdldEZsYXNoUGxheWVyU3dmOmZ1bmN0aW9uKCl7cmV0dXJuIEV9LHNldEZsYXNoUGxheWVyU3dmOmZ1bmN0aW9uKEope0U9eChKKX0sZ2V0UGxheWVyV2lkdGg6ZnVuY3Rpb24oKXtyZXR1cm4gYn0sc2V0UGxheWVyV2lkdGg6ZnVuY3Rpb24oSil7Yj1KfSxnZXRQbGF5ZXJIZWlnaHQ6ZnVuY3Rpb24oKXtyZXR1cm4ga30sc2V0UGxheWVySGVpZ2h0OmZ1bmN0aW9uKEope2s9Sn0sZ2V0RW5kQWN0aW9uVHlwZTpmdW5jdGlvbigpe3JldHVybiB1fSxzZXRFbmRBY3Rpb25UeXBlOmZ1bmN0aW9uKEope3U9Sn0sZ2V0RW5kQWN0aW9uUGFyYW06ZnVuY3Rpb24oKXtyZXR1cm4gcX0sc2V0RW5kQWN0aW9uUGFyYW06ZnVuY3Rpb24oSil7cT1KfSxnZXRJc1NlYXJjaGFibGU6ZnVuY3Rpb24oKXtyZXR1cm4gZX0sc2V0SXNTZWFyY2hhYmxlOmZ1bmN0aW9uKEope2U9Sn0sZ2V0QXV0b1BsYXlNZWRpYTpmdW5jdGlvbigpe3JldHVybiBmfSxzZXRBdXRvUGxheU1lZGlhOmZ1bmN0aW9uKEope2Y9Sn0sZ2V0QWxsb3dSZXdpbmQ6ZnVuY3Rpb24oKXtyZXR1cm4gbX0sc2V0QWxsb3dSZXdpbmQ6ZnVuY3Rpb24oSil7bT1KfSxnZXRDYXB0aW9uc0VuYWJsZWQ6ZnVuY3Rpb24oKXtyZXR1cm4gen0sc2V0Q2FwdGlvbnNFbmFibGVkOmZ1bmN0aW9uKEope3o9Sn0sZ2V0U2lkZWJhckVuYWJsZWQ6ZnVuY3Rpb24oKXtyZXR1cm4gZ30sc2V0U2lkZWJhckVuYWJsZWQ6ZnVuY3Rpb24oSil7Zz1KfSxnZXRTaWRlYmFyTG9jYXRpb246ZnVuY3Rpb24oKXtyZXR1cm4gYX0sc2V0U2lkZWJhckxvY2F0aW9uOmZ1bmN0aW9uKEope2E9Sn0sZ2V0QmFja2dyb3VuZENvbG9yOmZ1bmN0aW9uKCl7cmV0dXJuIEN9LHNldEJhY2tncm91bmRDb2xvcjpmdW5jdGlvbihKKXtDPUp9LGdldE1pbkZsYXNoUGxheWVyVmVyc2lvbjpmdW5jdGlvbigpe3JldHVybiBwfSxzZXREZWJ1Z0hvdHNwb3Q6ZnVuY3Rpb24oSil7aT1KfSxnZXREZWJ1Z0hvdHNwb3Q6ZnVuY3Rpb24oKXtyZXR1cm4gaX0sc2V0QXV0b0hpZGVDb250cm9sczpmdW5jdGlvbihKKXt3PUp9LGdldEF1dG9IaWRlQ29udHJvbHM6ZnVuY3Rpb24oKXtyZXR1cm4gd30sc2V0UHJvY2Vzc1VuaWNvZGVOYW1lczpmdW5jdGlvbihKKXtqPUp9LGdldFByb2Nlc3NVbmljb2RlTmFtZXM6ZnVuY3Rpb24oKXtyZXR1cm4gan0sc2V0UmVwb3J0U2Nvcm1Db21wbGV0ZTpmdW5jdGlvbihKKXtGPUp9LGdldFJlcG9ydFNjb3JtQ29tcGxldGU6ZnVuY3Rpb24oKXtyZXR1cm4gRn0sc2V0RW5mb3JjZUxpbmVhckFzc2Vzc21lbnQ6ZnVuY3Rpb24oSil7eT1KfSxnZXRFbmZvcmNlTGluZWFyQXNzZXNzbWVudDpmdW5jdGlvbigpe3JldHVybiB5fSxzZXREaXNhYmxlRnVsbGZyYW1lTW9kZTpmdW5jdGlvbihKKXtHPUp9LGdldERpc2FibGVGdWxsZnJhbWVNb2RlOmZ1bmN0aW9uKCl7cmV0dXJuIEd9LGdldERpc2FibGVDb250cm9sczpmdW5jdGlvbigpe3JldHVybiBvfSxzZXREaXNhYmxlQ29udHJvbHM6ZnVuY3Rpb24oSil7bz1KfSxnZXRNb2JpbGVXZWJWaWV3Q2FuQXV0b1BsYXk6ZnVuY3Rpb24oKXtyZXR1cm4gSX0sc2V0TW9iaWxlV2ViVmlld0NhbkF1dG9QbGF5OmZ1bmN0aW9uKEope0k9Sn0sc2V0R29vZ2xlQW5hbHl0aWNzSUQ6ZnVuY3Rpb24oSil7bj1KfSxnZXRHb29nbGVBbmFseXRpY3NJRDpmdW5jdGlvbigpe3JldHVybiBufSxzZXRHQVBhZ2VWaWV3VHJhY2tpbmc6ZnVuY3Rpb24oSil7dj1KfSxnZXRHQVBhZ2VWaWV3VHJhY2tpbmc6ZnVuY3Rpb24oKXtyZXR1cm4gdn0sc2V0R0FFdmVudFRyYWNraW5nOmZ1bmN0aW9uKEope2g9Sn0sZ2V0R0FFdmVudFRyYWNraW5nOmZ1bmN0aW9uKCl7cmV0dXJuIGh9LHNldEFkdmFuY2VkU2Vla2luZzpmdW5jdGlvbihKKXtCPUp9LGdldEFkdmFuY2VkU2Vla2luZzpmdW5jdGlvbigpe3JldHVybiBCfSxzZXRJZnJhbWVDb21tdW5pY2F0aW9uc0VuYWJsZWQ6ZnVuY3Rpb24oSil7SD1KfSxnZXRJZnJhbWVDb21tdW5pY2F0aW9uc0VuYWJsZWQ6ZnVuY3Rpb24oKXtyZXR1cm4gSH0sZ2V0RnJhbWVFbGVtZW50OmZ1bmN0aW9uKCl7dHJ5e2lmKHdpbmRvdyE9d2luZG93LnRvcCYmSCl7cmV0dXJuICQod2luZG93LmZyYW1lRWxlbWVudCl9ZWxzZXtyZXR1cm4iIn19Y2F0Y2goSil7VFNDLnBsYXllckNvbmZpZ3VyYXRpb24uc2V0RGlzYWJsZUZ1bGxmcmFtZU1vZGUodHJ1ZSl9fX19KCkpO3ZhciBUU0M9VFNDfHx7fTtUU0MubWVkaWFMaXN0PShmdW5jdGlvbigpe3ZhciBiPSIubTN1Ijt2YXIgaT0iVmlkZW9zIGluIGEgUGxheWxpc3QgY2Fubm90IGJlIHZpZXdlZCBmcm9tIGEgbG9jYWwgZHJpdmUuIFRoZSB2aWRlb3Mgd2lsbCBwbGF5IGNvcnJlY3RseSBmcm9tIGEgUGxheWxpc3QgaG9zdGVkIG9uIGEgV2Vic2l0ZSBvciBTZXJ2ZXIuIjt2YXIgbjt2YXIgaj1bXTt2YXIgaz0wO3ZhciBhO3ZhciBtO3ZhciBkPWZhbHNlO2Z1bmN0aW9uIGUoKXtrPTA7aWYoblswXS50b0xvd2VyQ2FzZSgpLmluZGV4T2YoYikhPS0xKXtkPXRydWU7ZihUU0MucGxheWVyQ29uZmlndXJhdGlvbi5nZXRVbmljb2RlU2FmZVN0cmluZyhuWzBdKSl9ZWxzZXtkPWZhbHNlO2oucHVzaChuKTthLmNhbGwoKX19ZnVuY3Rpb24gZihvKXskLmFqYXgoe3R5cGU6IkdFVCIsdXJsOm8saXNMb2NhbDp0cnVlLGRhdGFUeXBlOiJ0ZXh0IixzdWNjZXNzOmgsZXJyb3I6Z30pfWZ1bmN0aW9uIGgocSl7aj1xLnNwbGl0KC9ccj9cbi9nKTt2YXIgcD1qLmxlbmd0aC0xO2Zvcih2YXIgbz1wO28+PTA7by0tKXtpZihqW29dPT09IiIpe2ouc3BsaWNlKG8sMSl9ZWxzZXtqW29dPVRTQy5wbGF5ZXJDb25maWd1cmF0aW9uLmdldFVuaWNvZGVTYWZlU3RyaW5nKGpbb10pfX1pZihhKXthLmNhbGwoKX19ZnVuY3Rpb24gZyhvKXtpZihtKXttLmNhbGwoKX19ZnVuY3Rpb24gYyhxKXt2YXIgcD0iIjt2YXIgbz1sKHEpO3N3aXRjaChvKXtjYXNlIFRTQy5tZWRpYVR5cGUuV0VCTTpwPSJ2aWRlby93ZWJtIjticmVhaztjYXNlIFRTQy5tZWRpYVR5cGUuSDI2NDpwPSJ2aWRlby9tcDQiO2JyZWFrO2Nhc2UgVFNDLm1lZGlhVHlwZS5PR0c6cD0idmlkZW8vb2dnIjtkZWZhdWx0OmJyZWFrfXJldHVybiBwfWZ1bmN0aW9uIGwocSl7dmFyIG89VFNDLm1lZGlhVHlwZS5VTktOT1dOO3ZhciByPXEuc3BsaXQoIi4iKTtpZihyLmxlbmd0aD4wKXt2YXIgcD1yLnBvcCgpLnRvTG93ZXJDYXNlKCk7c3dpdGNoKHApe2Nhc2Uid2VibSI6bz1UU0MubWVkaWFUeXBlLldFQk07YnJlYWs7Y2FzZSJtcDQiOmNhc2UibTR2IjpjYXNlIm1vdiI6bz1UU0MubWVkaWFUeXBlLkgyNjQ7YnJlYWs7Y2FzZSJvZ3YiOm89VFNDLm1lZGlhVHlwZS5PR0c7YnJlYWs7ZGVmYXVsdDpicmVha319cmV0dXJuIG99cmV0dXJue2luaXQ6ZnVuY3Rpb24obyl7bj1vO2UoKX0sY3VycmVudFZpZGVvU3JjOmZ1bmN0aW9uKCl7aWYoai5sZW5ndGg+MCl7cmV0dXJuIGpba119ZWxzZXtyZXR1cm4gdW5kZWZpbmVkfX0sY3VycmVudFZpZGVvSW5kZXg6ZnVuY3Rpb24oKXtyZXR1cm4ga30sc2V0Q3VycmVudFZpZGVvOmZ1bmN0aW9uKG8pe2lmKG89PT0ibmV4dCIpe2lmKGs8ai5sZW5ndGgtMSl7aysrfX1lbHNle2lmKG89PT0icHJldmlvdXMiKXtpZihrPjApe2stLX19ZWxzZXtpZihOdW1iZXIobyk+PTAmJk51bWJlcihvKTxqLmxlbmd0aCl7az1OdW1iZXIobyl9fX19LGdldE1lZGlhTGlzdDpmdW5jdGlvbigpe3JldHVybiBqfSxnZXRWaWRlb0luZGV4QnlTcmM6ZnVuY3Rpb24ocCl7dmFyIHI9aztmb3IodmFyIHE9MDtxPGoubGVuZ3RoO3ErKyl7aWYoZCl7aWYoaltxXT09PXApe3I9cTticmVha319ZWxzZXtmb3IodmFyIG89MDtvPGpbcV0ubGVuZ3RoO28rKyl7aWYoaltxXVtvXT09PXApe3I9cTticmVha319fX1yZXR1cm4gcn0sZ2V0TWVkaWFUeXBlOmZ1bmN0aW9uKCl7dmFyIG89VFNDLm1lZGlhVHlwZS5OT1RfQVZBSUxBQkxFO2lmKGoubGVuZ3RoPjApe289VFNDLm1lZGlhVHlwZS5VTktOT1dOO2lmKGQpe289bChqW2tdKX1lbHNle3ZhciBwPWpba10ubGVuZ3RoO2lmKHA9PT0xKXtvPWwoaltrXVswXSl9ZWxzZXtvPVRTQy5tZWRpYVR5cGUuTVVMVElQTEVfVFlQRVN9fX1yZXR1cm4gb30sZ2V0TWVkaWFNaW1lVHlwZTpmdW5jdGlvbihvKXtyZXR1cm4gYyhvKX0saXNNZWRpYVR5cGVBdmFpbGFibGU6ZnVuY3Rpb24ocCl7dmFyIG89ZmFsc2U7aWYoai5sZW5ndGg+MCl7aWYoZCl7bz0ocD09PWwoaltrXSkpfWVsc2V7dmFyIHI9altrXS5sZW5ndGg7Zm9yKHZhciBxPTA7cTxyO3ErKyl7bz0ocD09PWwoaltrXVtxXSkpO2lmKG8pe2JyZWFrfX19fXJldHVybiBvfSxpc1BsYXlsaXN0OmZ1bmN0aW9uKCl7cmV0dXJuIGR9LG9uRmlyc3RWaWRlbzpmdW5jdGlvbigpe3JldHVybihrPT09MCl9LG9uTGFzdFZpZGVvOmZ1bmN0aW9uKCl7cmV0dXJuKChrKzEpPT09ai5sZW5ndGgpfSxnZXRFcnJvck1lc3NhZ2U6ZnVuY3Rpb24oKXtyZXR1cm4gaX0sYWRkRXZlbnRMaXN0ZW5lcjpmdW5jdGlvbihvLHApe2lmKG89PT0iUkVBRFkiKXthPXB9ZWxzZXtpZihvPT09IkVSUk9SIil7bT1wfX19LHJlbW92ZUV2ZW50TGlzdGVuZXI6ZnVuY3Rpb24obyxwKXtpZihvPT09IlJFQURZIil7YT11bmRlZmluZWR9ZWxzZXtpZihvPT09IkVSUk9SIil7bT11bmRlZmluZWR9fX19fSgpKTt2YXIgVFNDPVRTQ3x8e307VFNDLmlvT3ZlcmxheVZpZXc9KGZ1bmN0aW9uKCl7dmFyIGQ9IiN0c2NfaW9fY29udGFpbmVyIjt2YXIgYT0iI3RzY19pb19vdmVybGF5Ijt2YXIgYz0nPGRpdiBpZD0idHNjX2lvX2NvbnRhaW5lciI+PGRpdiBpZD0idHNjX2lvX21lc3NhZ2UiPjxzcGFuPnt7aW9NZXNzYWdlfX08L3NwYW4+PGltZyBzcmM9Int7bG9hZGVySW1nfX0iIC8+PC9kaXY+PC9kaXY+PGRpdiBpZD0idHNjX2lvX292ZXJsYXkiPjwvZGl2Pic7dmFyIGI9ImRhdGE6aW1hZ2UvZ2lmO2Jhc2U2NCxSMGxHT0RsaElBQWdBUE1BQUFBQUFQLy8vemc0T0hwNmVraElTR1JrWk1qSXlLaW9xQ1ltSmhvYUdrSkNRdURnNFByNitnQUFBQUFBIEFBQUFBQ0gvQzA1RlZGTkRRVkJGTWk0d0F3RUFBQUFoL2hwRGNtVmhkR1ZrSUhkcGRHZ2dZV3BoZUd4dllXUXVhVzVtYndBaCtRUUogQ2dBQUFDd0FBQUFBSUFBZ0FBQUU1eERJU1dsaHBlck41MkpMaFNTZFJnd1ZvMUlDUVpSVXNpd0hwVEpUNGlvd05TOHZ5VzJpY0NGNiBrOEhNTUJrQ0VEc2t4VEJEQVp3dUFra3FJZnhJUXloQlFCRnZBUVNESVRNNVZEVzZYTkU0S2FnTmg2Qmd3ZTYwc21RVUIzZDRSejFaIEJBcG5GQVNEZDBoaWhoMTJCa0U5a2pBSlZseWNYSWc3Q1FJRkE2U2xuSjg3cGFxYlNLaUtvcXVzbmJNZG1EQzJ0WFFsa1VoemlZdHkgV1R4SWZ5NkJFOFdKdDVZSnZwSml2eE5hR21MSFQwVm5PZ1NZZjBkWlhTN0FQZHBCMzA5Um5IT0c1Z0RxWEdMRGFDNDU3RDF6Wi9WLyBubU9NODJYaUhSTFlLaEtQMW9abUFEZEVBQUFoK1FRSkNnQUFBQ3dBQUFBQUlBQWdBQUFFNmhESVNXbFpwT3JOcDFsR05SU2RScERVIG9sSUd3NVJVWWhoSHVrcUZ1OERzckV5cW5XVGhHdkFtaFZsdGVCdm9qcFREREJVRUlGd01GQlJBbUJrU2dPckJGWm9nQ0FTd0JERVkgL0NaU2c3R1NFMGdTQ2pRQk1WRzAyM3hXQmhrbEFub0VkaFFFZnlOcU1JY0tqaFJzakVkbmV6QitBNGs4Z1R3SmhGdWlXNGRva1hpbCBvVWVwQkFwNXFhS3BwNitIbzdhV1c1NHdsN29idkVlMGtSdW9wbENHZXB3U3gyakp2cUhFbUd0NndoSnBHcGZKQ0htT29OSEthSHg2IDFXaVNSOTJFNGxiRm9xK0I2UUR0dWV0Y2FCUG5XNitPN3dESHBJaUs5U2FWSzVHZ1Y1NDN0empnR2NnaEFnQWgrUVFKQ2dBQUFDd0EgQUFBQUlBQWdBQUFFN2hESVNTa3hwT3JONXpGSE5XUmRoU2lWb1ZMSHNwUlVNb3lVYWt5RWU4UFRQQ0FUVzlBMTRFMFV2dUFLTU5BWiBLWVVaQ2lCTXVCYWtTUUtHOEcyRnpVV294MkFVdEFRRmNCS2xWUW9MZ1FSZVpoUWxDSUplc1FYSTVCMENCblVNT3hNQ2Vub0NmVENFIFdCc0pDb2xUTUFObGR4MTVCR3M4QjV3bENaOVBvNk9Ka3dtUnBucWtxbnVTcmF5cWZLbXFwTGFqb2lXNUhKcTdGTDFHcjJtTU1jS1UgTUlpSmdJZW15N3hadEpzVG1zTTR4SGlLdjVLTUNYcWZ5VUNKRW9uWFBOMnJBT0lBbXNmQjN1UG9BSysrRyt3NDhlZFpQSytNNmhMSiBwUWc0ODRlblhJZFFGU1MxdTZVaGtzRU5FUUFBSWZrRUNRb0FBQUFzQUFBQUFDQUFJQUFBQk9jUXlFbXBHS0xxeldjWlJWVVFuWllnIDFhQlNoMkdVVkVJUTJhUU9FK0crY0Q0bnRwV2taUWoxSklpWklvZ0RGRnlISTBVeFF3RnVnTVNPRklQSmZ0ZlZBRW9aTEJiY0xFRmggbFFpcUdwMVZkMTQwQVVrbFVOM2VDQTUxQzFFV016TUNlekNCQm1reFZJVkhCV2QzSEhsOUpRT0lKU2RTbkowVERLQ2hDd1VKam9XTSBQYUdxREthbm5hc01vNlduTTU2MlI1WWx1WlJ3dXIwd3BncVpFN05LVW0rRk5SUEloakJKeEtadGVXdUlCTU40elJNSVZJaGZmY2dvIGp3Q0YxMTdpNG5sTG5ZNXp0Ukxzbk9rK2FWK29KWTdWN203NlBka1M0dHJLY2RnMFpjMHRUY0trUkFBQUlma0VDUW9BQUFBc0FBQUEgQUNBQUlBQUFCTzRReUVrcEtxanF6U2NwUmFWa1haV1FFeGltdzFCU0NVRUlsRG9ocmZ0NmNwS0NrNXhpZDVNTkpUYUFJa2VrS0dRayBXeUtIa3ZoS3NSN0FSbWl0a0FZRFlSSWJVUVJRaldCd0pSekNoaTlDUmxCY1kxVU40ZzAvVk5CMEFsY3ZjQVlIUnlaUGRFUUZZVjhjIGN3UjVIV3hFSjAyWW1STUxuSjF4Q1lwMFk1aWRwUXVob3BtbUMyS2dvakthc1VRRGs1Qk5Bd3dNT2gyUnRScTV1UXVQWktHSUpRSUcgd0F3R2Y2STBKWE1wQzhDN2tYV0RCSU5GTXhTNERLTUFXVldBR1lzQWROcVc1dWFSeGtTS0pPWkthVTN0UE9CWjREdUsyTEFUZ0poayBQSk1nVHdLQ2RGanlQSEVuS3hGQ0RoRUFBQ0g1QkFrS0FBQUFMQUFBQUFBZ0FDQUFBQVR6RU1oSmFWS3A2czJuSWtvbElKMldrQlNoIHBrVlJXcXFRcmhMU0V1OU1aSktLOXkxWnJxWUs5V2lDbG12b1VhRjhnSVFTTmVGMUVyNE1ORm40U1JTREFSV3JvQUlFVGcxaVZ3dUggallCMWtZYzFtd3J1d1hLQzlnbXNKWGxpR3hjK1hpVUNieTl5ZGgxc09TZE1rcE1UQnBhWEJ6c2Zob2M1bDU4R201eVRvQWFaaGFPVSBxamtEZ0NXTkhBVUxDd09MYVRtenN3YWRFcWdnUXdnSHVRc0hJb1pDSFFNTVFnUUd1YlZFY3hPUEZBY01EQVlVQTg1ZVdBUm1mU1JRIENkY01lMHplUDFBQXlnd0xsSnRQTkFBTDE5REFSZFB6Qk9XU20xYnJKQmk0NXNvUkFXUUFBa3JRSXlrU2hROXdWaEhDd0NRQ0FDSDUgQkFrS0FBQUFMQUFBQUFBZ0FDQUFBQVRyRU1oSmFWS3A2czJuSWtxRlpGMlZJQldoVXNKYVRva3FVQ29CcStFNzFTUlFleXFVVG9MQSA3VnhGMEpEeUlRaC9NVlZQTXQxRUNabGZjalpKOW1JS29hVGwxTVJJbDVvNENVS1hPd215ckNJbkNLcWNXdHZhZEwyU1loeUFTeU5EIEowdUlpUk1EakkwRmQzMC9pSTJVQTVHU1M1VURqMmw2Tm9xZ09nTjRna3NFQmdZRmYwRkRxS2dIbnlaOU9YOEhyZ1lIZEhwY0hRVUwgWEFTMnFLcEVOUmc3ZUFNTEM3a1RCYWl4VVlGa0tBeldBQW5MQzdGTFZ4TFdEQkxLQ3dhS1RVTGdFd2JMQTRoSnRPa1NCTnFJVFQzeCBFZ2ZMcEJ0ekUvaml1TDA0UkdFQmd3V2hTaFJnUUV4SEJBQWgrUVFKQ2dBQUFDd0FBQUFBSUFBZ0FBQUU3eERJU1dsU3Flck5weUpLIGhXUmRsU0FWb1ZMQ1drNkpLbEFxQWF2aE85VWtVSHNxbEU2Q3dPMWNSZENROGlFSWZ6RlZUekxkUkFtWlgzSTJTZlppQ3FHazVkVEUgU0plYU9BbENsenNKc3F3aUp3aXFuRnJiMm5TOWttSWNnRXNqUXlkTGlJbEhlaGhwZWphSWp6aDllb21TalpSK2lwc2xXSVJMQWdNRCBPUjJET3FLb2dUQjlwQ1VKQmFnREJYUjZYQjBFQmtJSXNhUnNHR01NQXhvREJnWUhUS0ppVVlFR0RBekhDOUVBQ2NVR2tJZ0Z6Z3daIDBRc1NCY1hIaVF2T3dnRGRFd2ZGczBzRHp0NFM2Qks0eFlqa0RPem4wdW5GZUJ6T0JpakltMURnbWc1WUZRd3NDTWpwMW9KOEx5SUEgQUNINUJBa0tBQUFBTEFBQUFBQWdBQ0FBQUFUd0VNaEphVktwNnMybklrcUZaRjJWSUJXaFVzSmFUb2txVUNvQnErRTcxU1JRZXlxVSBUb0xBN1Z4RjBKRHlJUWgvTVZWUE10MUVDWmxmY2paSjltSUtvYVRsMU1SSWw1bzRDVUtYT3dteXJDSW5DS3FjV3R2YWRMMlNZaHlBIFN5TkRKMHVJaVVkNkdHbDZOb2lQT0gxNmlaS05sSDZLbXlXRk9nZ0hoRUV2QXd3TUEwTjlHQnNFQzZhbWhuVmNFd2F2REFhekd3SUQgYUgxaXBhWUxCVVRDR2dRREE4TmRIejBGcHFnVEJ3c0xxQWJXQUFuSUE0RldLZE1MR2RZR0VncmFpZ2JUME9JVEJjZzVRd1BUNHhMciBST1pMNkF1UUFQVVM3YnhMcG9XaWRZMEp0eExIS2h3d01KQlRIZ1BLZEVRQUFDSDVCQWtLQUFBQUxBQUFBQUFnQUNBQUFBVHJFTWhKIGFWS3A2czJuSWtxRlpGMlZJQldoVXNKYVRva3FVQ29CcStFNzFTUlFleXFVVG9MQTdWeEYwSkR5SVFoL01WVlBNdDFFQ1psZmNqWkogOW1JS29hVGwxTVJJbDVvNENVS1hPd215ckNJbkNLcWNXdHZhZEwyU1loeUFTeU5ESjB1SWlVZDZHQVVMREpDUmlYbzFDcEdYREpPVSBqWStZaXA5RGhUb0pBNFJCTHdNTEN3VkRmUmdiQkFhcXFvWjFYQk1Ic3dzSHR4dEZhSDFpcWFvR05nQUl4UnBiRkFnZlBRU3FwYmdHIEJxVUQxd0JYZUNZcDFBWVoxOUpKT1lnSDFLd0E0VUJ2UXdYVUJ4UHFWRDlMM3NicDJCTmsyeHZ2RlBKZCtNRkNONkhBQUlLZ05nZ1kgMEt0RUJBQWgrUVFKQ2dBQUFDd0FBQUFBSUFBZ0FBQUU2QkRJU1dsU3Flck5weUpLaFdSZGxTQVZvVkxDV2s2SktsQXFBYXZoTzlVayBVSHNxbEU2Q3dPMWNSZENROGlFSWZ6RlZUekxkUkFtWlgzSTJTZllJRE1hQUZkVEVTSmVhRURBSU14WUZxck9VYU5XNEU0T2JZY0NYIGFpQlZFZ1VMZTBOSmF4eHRZa3NqaDJOTGtaSVNnRGdKaEh0aGtwVTRtVzZibFJpWW1aT2xoNEpXa0RxSUx3VUdCbkU2VFlFYkNnZXYgcjBOMWdINEF0N2dIaVJwRmFMTnJycThITmdBSkE3MEFXeFFJSDErdnNZTURBelpRUEM5VkNOa0RXVWhHa3VFNVB4Sk53aVVLNFVmTCB6T2xENFd2ekFIYW9HOW54UGk1ZCtqWVVxZkFoaHlrT0Z3SldpQUFBSWZrRUNRb0FBQUFzQUFBQUFDQUFJQUFBQlBBUXlFbHBVcW5xIHphY2lTb1ZrWFZVTUZhRlN3bHBPQ2NNWWxFckFhdmhPTW5OTE5vOEtzWnNNWkl0SkVJRElGU2tMR1FvUVROaElzRmVoUnd3MkNRTEsgRjB0WUdLWVNnK3lnc1pJdU5xSmtzS2diZmdJR2VwTm8yY0lVQjNWMUIzSXZOaUJZTlFhRFNUdGZoaHgwQ3dWUEkwVUplMCtibTRnNSBWZ2NHb3FPY25qbWpxRFNkbmhnRW9hbWNzWnVYTzFhV1F5OEtBd09BdVRZWUd3aTd3NWgrS3IwU0o4TUZpaHBOYngrNEVycTdCWUJ1IHpzZGlIMWpDQXpvU2ZsMHJWaXJOYlJYbEJCbExYK0JQMFhKTEFQR3pUa0F1QU9xYjBXVDVBSDdPY2RDbTVCOFRnUndTUktJSFF0YUwgQ3dnMVJBQUFPd0FBQUFBQUFBQUFBQT09Ijt2YXIgZT1mYWxzZTtyZXR1cm57Z2V0Vmlld01hcmt1cDpmdW5jdGlvbihoKXt2YXIgZz1IYW5kbGViYXJzLmNvbXBpbGUoYyk7dmFyIGY9e2lvTWVzc2FnZTpoLGxvYWRlckltZzpifTtyZXR1cm4gZyhmKX0sc2V0Vmlld01lc3NhZ2U6ZnVuY3Rpb24oZil7JChkKyIgc3BhbiIpLmh0bWwoZil9LGhpZGVMb2FkaW5nR3JhcGhpYzpmdW5jdGlvbigpeyQoZCsiIGltZyIpLmhpZGUoKX0sc2hvd0xvYWRpbmdHcmFwaGljOmZ1bmN0aW9uKCl7JChkKyIgaW1nIikuc2hvdygpfSx2aWV3T3BlbjpmdW5jdGlvbigpe3JldHVybiBlfSxzaG93VmlldzpmdW5jdGlvbigpeyQoZCkuY3NzKCJvcGFjaXR5IiwwKTskKGQpLmFuaW1hdGUoe29wYWNpdHk6MX0sMzAwKTtlPXRydWV9LHJlbW92ZVZpZXc6ZnVuY3Rpb24oZil7ZT1mYWxzZTskKGEpLmFuaW1hdGUoe29wYWNpdHk6MH0sMjAwLGZ1bmN0aW9uKCl7JChhKS5yZW1vdmUoKX0pOyQoZCkuYW5pbWF0ZSh7b3BhY2l0eTowfSwyMDAsZnVuY3Rpb24oKXtpZihmIT09dW5kZWZpbmVkKXtmLmNhbGwoKX0kKGQpLnJlbW92ZSgpfSl9fX0oKSk7dmFyIFRTQz1UU0N8fHt9O1RTQy5wbGF5ZXJWaWV3PWZ1bmN0aW9uKCl7dmFyIGJtO3ZhciBiNDt2YXIgYjt2YXIgRT1mYWxzZTt2YXIgYVQ9IiN0c2NwbGF5ZXIiO3ZhciBhbT0iZW1iZWRkZWRPYmplY3QiO3ZhciBhUSx0LGcsYmUsQSxibyxiayxhcixPLGJBLGFqLGksTSxvLGExLGJYLGFWLFIsYXksYlUsayxDLGJZLGFlLGE0LEwsdixiUDt2YXIgcD0zMDAsYko9MTAwLGFpLGFnLHI9LTEsYWw9LTEsYUc9ZmFsc2UsYmQ9ZmFsc2UsYWI9ZmFsc2UsYmc9ZmFsc2UsYlM9NSxicT1mYWxzZSxjPWZhbHNlLGFFPTAsYkw9MCxhQT0wLGF6PTAsYjI9MCxicD0xLGJWPWZhbHNlLGFZPWZhbHNlLGFOPS0xLGJaPTAsYnU9ZmFsc2UsYnQ9ZmFsc2UsYnY9MjUwLGFQLE49IiIsSD0xLFA9ZmFsc2UsYUk9ZmFsc2UsYWg9LTEseD01MDAwLGJ5PWZhbHNlLGJoPSJjbGljayIsYkU9ZmFsc2UsYUs9ZmFsc2UsYXc9MSxhVz0tMSxiVz0wLFE9MCxiYT1mYWxzZSxhNT0tMSxiRD1mYWxzZSxiTj1mYWxzZSxiZj1mYWxzZSxXPXRydWUsYUI9MCxiMT0xMDt2YXIgYnM9MzI7dmFyIGg9VFNDLmlvT3ZlcmxheVZpZXc7dmFyIGFvO3ZhciBiQj0nPGEgaWQ9InZpZGVvQ2xpY2tUb1BsYXlMaW5rIj48dGFibGUgaWQ9InZpZGVvQ2xpY2tUb1BsYXkiIGNsYXNzPSJ2aWRlb0RpbWVuc2lvbnMgY2VudGVyZWRJbWFnZSI+PHRyPjx0ZD48ZGl2IGlkPSJjdG9wbGF5IiBjbGFzcz0ic3ByaXRlc2hlZXQgcGxheV9idXR0b25fb3ZlcmxheV9ub3JtYWwiIC8+PC90ZD48L3RyPjwvdGFibGU+PC9hPjxhIGlkPSJ2aWRlb0NsaWNrVG9SZXBsYXlMaW5rIj48dGFibGUgaWQ9InZpZGVvQ2xpY2tUb1JlcGxheSIgY2xhc3M9InZpZGVvRGltZW5zaW9ucyBjZW50ZXJlZEltYWdlIj48dHI+PHRkPjxkaXYgaWQ9ImN0b3BsYXkiIGNsYXNzPSJzcHJpdGVzaGVldCByZXBsYXlfYnV0dG9uX292ZXJsYXlfbm9ybWFsIiAvPjwvdGQ+PC90cj48L3RhYmxlPjwvYT48ZGl2IGlkPSJ2aWRlb1dyYXBwZXIiIGNsYXNzPSJ2aWRlb0RpbWVuc2lvbnMiPjxjYW52YXMgaWQ9ImhvdHNwb3RDb250YWluZXJEZWJ1ZyIgd2lkdGg9IjEiIGhlaWdodD0iMSIgPjwvY2FudmFzPjxpbWcgc3JjPSJkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUFVQUFBQUZDQVlBQUFDTmJ5YmxBQUFBR1hSRldIUlRiMlowZDJGeVpRQkJaRzlpWlNCSmJXRm5aVkpsWVdSNWNjbGxQQUFBQXlKcFZGaDBXRTFNT21OdmJTNWhaRzlpWlM1NGJYQUFBQUFBQUR3L2VIQmhZMnRsZENCaVpXZHBiajBpNzd1L0lpQnBaRDBpVnpWTk1FMXdRMlZvYVVoNmNtVlRlazVVWTNwcll6bGtJajgrSUR4NE9uaHRjRzFsZEdFZ2VHMXNibk02ZUQwaVlXUnZZbVU2Ym5NNmJXVjBZUzhpSUhnNmVHMXdkR3M5SWtGa2IySmxJRmhOVUNCRGIzSmxJRFV1TUMxak1EWXhJRFkwTGpFME1EazBPU3dnTWpBeE1DOHhNaTh3TnkweE1EbzFOem93TVNBZ0lDQWdJQ0FnSWo0Z1BISmtaanBTUkVZZ2VHMXNibk02Y21SbVBTSm9kSFJ3T2k4dmQzZDNMbmN6TG05eVp5OHhPVGs1THpBeUx6SXlMWEprWmkxemVXNTBZWGd0Ym5NaklqNGdQSEprWmpwRVpYTmpjbWx3ZEdsdmJpQnlaR1k2WVdKdmRYUTlJaUlnZUcxc2JuTTZlRzF3UFNKb2RIUndPaTh2Ym5NdVlXUnZZbVV1WTI5dEwzaGhjQzh4TGpBdklpQjRiV3h1Y3pwNGJYQk5UVDBpYUhSMGNEb3ZMMjV6TG1Ga2IySmxMbU52YlM5NFlYQXZNUzR3TDIxdEx5SWdlRzFzYm5NNmMzUlNaV1k5SW1oMGRIQTZMeTl1Y3k1aFpHOWlaUzVqYjIwdmVHRndMekV1TUM5elZIbHdaUzlTWlhOdmRYSmpaVkpsWmlNaUlIaHRjRHBEY21WaGRHOXlWRzl2YkQwaVFXUnZZbVVnVUdodmRHOXphRzl3SUVOVE5TNHhJRmRwYm1SdmQzTWlJSGh0Y0UxTk9rbHVjM1JoYm1ObFNVUTlJbmh0Y0M1cGFXUTZRVVpGUlRRM1JUZ3pRamxGTVRGRk1VRTFRelU0T0RBMU9ERTROekExUlRJaUlIaHRjRTFOT2tSdlkzVnRaVzUwU1VROUluaHRjQzVrYVdRNlFVWkZSVFEzUlRrelFqbEZNVEZGTVVFMVF6VTRPREExT0RFNE56QTFSVElpUGlBOGVHMXdUVTA2UkdWeWFYWmxaRVp5YjIwZ2MzUlNaV1k2YVc1emRHRnVZMlZKUkQwaWVHMXdMbWxwWkRwQlJrVkZORGRGTmpOQ09VVXhNVVV4UVRWRE5UZzRNRFU0TVRnM01EVkZNaUlnYzNSU1pXWTZaRzlqZFcxbGJuUkpSRDBpZUcxd0xtUnBaRHBCUmtWRk5EZEZOek5DT1VVeE1VVXhRVFZETlRnNE1EVTRNVGczTURWRk1pSXZQaUE4TDNKa1pqcEVaWE5qY21sd2RHbHZiajRnUEM5eVpHWTZVa1JHUGlBOEwzZzZlRzF3YldWMFlUNGdQRDk0Y0dGamEyVjBJR1Z1WkQwaWNpSS9QdVFBSmlRQUFBQVhTVVJCVkhqYVl2ei8vejhET21CaXdBSW9GQVFJTUFBMlVBTUhMSitkVndBQUFBQkpSVTVFcmtKZ2dnJTNEJTNEIiBpZD0iaG90c3BvdENvbnRhaW5lciIgdXNlbWFwPSIjaG90c3BvdE1hcCIgd2lkdGg9IjEiIGhlaWdodD0iMSIgLz48ZGl2IGlkPSJ2aWRlb1NpZGViYXIiPjxkaXYgaWQ9InZpZGVvU2lkZWJhckhlYWQiPjxkaXYgaWQ9InNlYXJjaEFyZWEiPjxpbnB1dCBpZD0ic2VhcmNoQm94IiB2YWx1ZT0iU2VhcmNoLi4uIiAvPjxzcGFuIGlkPSJjbGVhclNlYXJjaEJ1dHRvbiIgPjwvc3Bhbj48L2Rpdj48L2Rpdj48ZGl2IGlkPSJ2aWRlb1NpZGViYXJDb250ZW50V3JhcHBlciI+IDxkaXYgaWQ9InZpZGVvU2lkZWJhckNvbnRlbnQiPiA8b2wgaWQ9InRhYmxlT2ZDb250ZW50c0xpc3QiPiA8L29sPiA8L2Rpdj4gPC9kaXY+IDwvZGl2PiA8ZGl2IGlkPSJ2aWRlb0RpdiI+PC9kaXY+PGRpdiBpZD0idm9sdW1lX3NsaWRlcl9jb250YWluZXIiIGNsYXNzPSJzcHJpdGVzaGVldCB2b2x1bWViYXJfYmFja2Ryb3AiPjxkaXYgaWQ9InZvbHVtZV9zbGlkZXJfdmVydGljYWwiPjwvZGl2PjwvZGl2PjxkaXYgaWQ9ImNvbnRyb2xzIiBjbGFzcz0ic3ByaXRlc2hlZXQgc3ByaXRlX3JlcGVhdCBjb250cm9sX2JhY2tkcm9wIj4gPGRpdiBpZD0icmV3aW5kIiBjbGFzcz0ic3ByaXRlc2hlZXQgcmV3aW5kX2J1dHRvbl9ub3JtYWwgYml0bWFwX2NvbnRyb2wiPjxzcGFuPjwvc3Bhbj4gPC9kaXY+PGRpdiBpZD0icGxheSIgY2xhc3M9InNwcml0ZXNoZWV0IHBsYXlfYnV0dG9uX25vcm1hbCBiaXRtYXBfY29udHJvbCI+PHNwYW4+PC9zcGFuPiA8L2Rpdj48ZGl2IGlkPSJwcmV2aW91cyIgY2xhc3M9InNwcml0ZXNoZWV0IHByZXZpb3VzX2J1dHRvbl9kaXNhYmxlZCBiaXRtYXBfY29udHJvbCI+PHNwYW4+PC9zcGFuPiA8L2Rpdj48ZGl2IGlkPSJuZXh0IiBjbGFzcz0ic3ByaXRlc2hlZXQgbmV4dF9idXR0b25fbm9ybWFsIGJpdG1hcF9jb250cm9sIj48c3Bhbj48L3NwYW4+IDwvZGl2PjxkaXYgaWQ9InByb2dyZXNzIiBjbGFzcz0iYml0bWFwX2NvbnRyb2wiPjxkaXYgaWQ9InByb2dyZXNzX2JveCI+PHNwYW4gaWQ9InByb2dyZXNzX3NjcnViYmFyX3RyYWNrX2xlZnQiIGNsYXNzPSJzcHJpdGVzaGVldCBzY3J1YmJhcl90cmFja19sZWZ0Ij48L3NwYW4+PHNwYW4gaWQ9InByb2dyZXNzX3NjcnViYmFyX3RyYWNrIiBjbGFzcz0ic3ByaXRlc2hlZXQgc3ByaXRlX3JlcGVhdCBzY3J1YmJhcl90cmFjayI+PHNwYW4gaWQ9ImxvYWRfcHJvZ3Jlc3MiIGNsYXNzPSJzcHJpdGVzaGVldCBzcHJpdGVfcmVwZWF0IHNjcnViYmFyX2xvYWRlZF90cmFjayI+PHNwYW4gaWQ9InBsYXlfcHJvZ3Jlc3MiIGNsYXNzPSJzcHJpdGVzaGVldCBzcHJpdGVfcmVwZWF0IHNjcnViYmFyX3BsYXllZF90cmFjayI+PC9zcGFuPjwvc3Bhbj48L3NwYW4+IDxzcGFuIGlkPSJwcm9ncmVzc19zY3J1YmJhcl90cmFja19yaWdodCIgY2xhc3M9InNwcml0ZXNoZWV0IHNjcnViYmFyX3RyYWNrX3JpZ2h0Ij48L3NwYW4+PGNhbnZhcyBpZD0ibWFya2VycyI+PC9jYW52YXM+PHNwYW4gaWQ9InNjcnViYmFyX3NjcnViYmVyIiBjbGFzcz0ic3ByaXRlc2hlZXQgc2NydWJiYXJfc2NydWJiZXJfbm9ybWFsIj48L3NwYW4+IDwvZGl2PjxkaXYgY2xhc3M9InNwcml0ZXNoZWV0IHNlcGVyYXRvciBiaXRtYXBfY29udHJvbCI+PC9kaXY+PGRpdiBpZD0icGxheV90aW1lIj4gPHNwYW4gaWQ9ImN1cnJlbnRfdGltZV9kaXNwbGF5Ij4wMDowMDwvc3Bhbj4gLyA8c3BhbiBpZD0iZHVyYXRpb25fZGlzcGxheSI+MDA6MDA8L3NwYW4+IDwvZGl2PiA8L2Rpdj48ZGl2IGlkPSJ2b2x1bWUiIGNsYXNzPSJzcHJpdGVzaGVldCB2b2x1bWVfYnV0dG9uX25vcm1hbCBiaXRtYXBfY29udHJvbCI+PC9kaXY+PGRpdiBpZD0iY2xvc2VkQ2FwdGlvbkJ1dHRvbiIgY2xhc3M9InNwcml0ZXNoZWV0IGNsb3NlZF9jYXB0aW9uX2J1dHRvbl9ub3JtYWwgYml0bWFwX2NvbnRyb2wiPjwvZGl2PjxkaXYgaWQ9InRvY0J1dHRvbiIgY2xhc3M9InNwcml0ZXNoZWV0IHRvY19idXR0b25fbm9ybWFsIGJpdG1hcF9jb250cm9sIj48L2Rpdj48ZGl2IGlkPSJmdWxsc2NyZWVuX2VudGVyX2J1dHRvbiIgY2xhc3M9ImJpdG1hcF9jb250cm9sIHNwcml0ZXNoZWV0IGZ1bGxzY3JlZW5fZW50ZXJfYnV0dG9uX25vcm1hbCI+PC9kaXY+PC9kaXY+PGRpdiBpZD0iY3VycmVudENhcHRpb24iIGNsYXNzPSJoaWRlIj48L2Rpdj48ZGl2IGlkPSJhbGVydERpYWxvZyI+PC9kaXY+PC9kaXY+PGRpdiBpZD0iY2FwdGlvbnMiPjwvZGl2PjxkaXYgaWQ9InNjcmVlblRleHQiPjwvZGl2PjxkaXYgaWQ9InNwZWVjaFRleHQiPjwvZGl2PjxtYXAgbmFtZT0iaG90c3BvdE1hcCIgaWQ9ImhvdHNwb3RNYXAiPjwvbWFwPic7ZnVuY3Rpb24gYTAoYjYpe2lmKGFRJiZhYiYmYjYua2V5Q29kZT09PWJzKXtiNi5vcmlnaW5hbEV2ZW50LnByZXZlbnREZWZhdWx0KCk7aWYoYVFbMF0ucGF1c2VkKXthUVswXS5wbGF5KCl9ZWxzZXthUVswXS5wYXVzZSgpfX19ZnVuY3Rpb24geigpeyQoZG9jdW1lbnQpLmJpbmQoImtleWRvd24iLGEwKX1mdW5jdGlvbiBxKCl7JChkb2N1bWVudCkudW5iaW5kKCJrZXlkb3duIixhMCl9ZnVuY3Rpb24gZihiNil7YjY9YjYucmVwbGFjZSgvXCkvZ2ksIlxcKSIpO2I2PWI2LnJlcGxhY2UoL1woL2dpLCJcXCgiKTskKCIjdmlkZW9DbGlja1RvUGxheSwgI3ZpZGVvQ2xpY2tUb1JlcGxheSIpLmNzcygiYmFja2dyb3VuZC1pbWFnZSIsInVybCgiK2I2KyIpIil9ZnVuY3Rpb24gYTIoKXskKCIjdmlkZW9DbGlja1RvUGxheSwgI3ZpZGVvQ2xpY2tUb1JlcGxheSIpLmNzcygiYmFja2dyb3VuZC1pbWFnZSIsIm5vbmUiKX1mdW5jdGlvbiBhYyhiNil7aWYoSCE9LTEpeyQoIiN0YWJsZU9mQ29udGVudHNMaXN0IGxpOm50aC1jaGlsZCgiK0grIikgIikucmVtb3ZlQ2xhc3MoInNlbGVjdGVkVG9jSXRlbSIpfUg9YjY7JCgiI3RhYmxlT2ZDb250ZW50c0xpc3QgbGk6bnRoLWNoaWxkKCIrSCsiKSAiKS5hZGRDbGFzcygic2VsZWN0ZWRUb2NJdGVtIil9ZnVuY3Rpb24gZChiNil7Zm9yKHZhciBiNz0wO2I3PGI2Lmxlbmd0aDtiNysrKXt2YXIgYjg7aWYoYjZbYjddLnN0YXJ0IT09dW5kZWZpbmVkKXtiOD1iNltiN10uc3RhcnR9ZWxzZXtiOD1iNltiN10udGltZX1hMyhiNltiN10udGV4dCxiOCxiNltiN10uZmlsZSxiNltiN10uaW1hZ2VSZWYsYjZbYjddLmltYWdlUmVjdCl9fWZ1bmN0aW9uIGJJKGI2KXt2YXIgYjk9W107dmFyIGI4O2ZvcihiOD0wO2I4PGI2Lmxlbmd0aDtiOCsrKXt2YXIgY2I9YjZbYjhdLnRleHQ7aWYoY2IudG9Mb3dlckNhc2UoKS5pbmRleE9mKEMudmFsKCkudG9Mb3dlckNhc2UoKSkhPS0xKXtiOS5wdXNoKGI2W2I4XSl9fXZhciBjYT1iOS5sZW5ndGg7dmFyIGI3O2ZvcihiNz0wO2I3PGNhO2I3Kyspe2JuKGI5W2I3XSl9fWZ1bmN0aW9uIGJuKGNqKXt2YXIgY2k9Y2ouaXRlbXMubGVuZ3RoO3ZhciBjZj0oQy52YWwoKS50b0xvd2VyQ2FzZSgpKS5zcGxpdCgiICIpO2Zvcih2YXIgY2Q9MDtjZDxjaTtjZCsrKXt2YXIgY2I9IiI7dmFyIGI4PWNqLml0ZW1zW2NkXTt2YXIgY2E9Y2ZbMF07aWYoYjgudG9Mb3dlckNhc2UoKS5pbmRleE9mKGNhKTwwKXtjb250aW51ZX1mb3IodmFyIGNjPTA7Y2M8Y2YubGVuZ3RoO2NjKyspe2lmKGNkK2NjPj1jaSl7Y2IrPSIifWVsc2V7aWYoY2Q9PTApe2NiKz1jai5pdGVtc1tjZCtjY119ZWxzZXtjYis9IiAiK2NqLml0ZW1zW2NkK2NjXX19fWlmKGNiLnRvTG93ZXJDYXNlKCkuaW5kZXhPZihDLnZhbCgpLnRvTG93ZXJDYXNlKCkpIT0tMSl7dmFyIGI5O2lmKGNmLmxlbmd0aDw0KXtiOT1NYXRoLmZsb29yKDUtKGNmLmxlbmd0aCkvMil9ZWxzZXtiOT0yfXZhciBiNzt2YXIgY2c9IiI7dmFyIGI2PSIiO2Zvcih2YXIgY2U9MTtjZTw9Yjk7Y2UrKyl7aWYoKGNkLWNlKT49MCl7Y2c9Y2ouaXRlbXNbY2QtY2VdKyIgIn1pZihjZCtjYytjZTxjaSl7YjYrPSIgIitjai5pdGVtc1tjZCtjYysoY2UtMSldfX1jYj1iVChjYixDLnZhbCgpKTtiNz0iLi4uIitjZytjYitiNisiLi4uIjt2YXIgY2s9Y2ouZmlsZTt2YXIgY2g9IiI7aWYoY2shPT11bmRlZmluZWQpe2NoPSJkYXRhLWZpbGU9JyIrY2srIicifWFPKCIjc2VhcmNoTGlzdCIsYjcsY2ouc3RhcnQsY2ssdW5kZWZpbmVkLHVuZGVmaW5lZCxDLnZhbCgpKX19fWZ1bmN0aW9uIGEzKGNhLGI2LGI3LGI4LGI5KXtpZihjYS50b0xvd2VyQ2FzZSgpLmluZGV4T2YoQy52YWwoKS50b0xvd2VyQ2FzZSgpKSE9LTEpe2FPKCIjc2VhcmNoTGlzdCIsY2EsYjYsYjcsYjgsYjksQy52YWwoKSl9fWZ1bmN0aW9uIHUoKXt2YXIgYjY9JCgiI2hvdHNwb3RDb250YWluZXJEZWJ1ZyIpO3ZhciBiNz1iNlswXS5nZXRDb250ZXh0KCIyZCIpO2I3LmNsZWFyUmVjdCgwLDAsJCgiI2hvdHNwb3RDb250YWluZXJEZWJ1ZyIpLndpZHRoKCksJCgiI2hvdHNwb3RDb250YWluZXJEZWJ1ZyIpLmhlaWdodCgpKTtiNy5maWxsU3R5bGU9InJnYmEoMjU1LCAwLCAwLCAwLjUpIjt2YXIgYjg7dmFyIGI5OyQuZWFjaChUU0MueG1wLmdldEhvdHNwb3RJdGVtQXJyYXkoKSxmdW5jdGlvbigpe2I5PSQodGhpcylbMF07aWYoYjkuaXNBY3RpdmUpe2I4PWI5LnNjYWxlZFBvaW50cy5sZW5ndGg7YjcuYmVnaW5QYXRoKCk7Zm9yKHZhciBjYT0wO2NhPGI4O2NhKz0yKXtpZihjYT09PTApe2I3Lm1vdmVUbyhiOS5zY2FsZWRQb2ludHNbY2FdLGI5LnNjYWxlZFBvaW50c1tjYSsxXSl9ZWxzZXtiNy5saW5lVG8oYjkuc2NhbGVkUG9pbnRzW2NhXSxiOS5zY2FsZWRQb2ludHNbY2ErMV0pfX1iNy5saW5lVG8oYjkuc2NhbGVkUG9pbnRzWzBdLGI5LnNjYWxlZFBvaW50c1sxXSk7YjcuY2xvc2VQYXRoKCk7YjcuZmlsbCgpfX0pfWZ1bmN0aW9uIGFMKGI4LGI3LGNjLGI2KXt2YXIgY2I9IiI7dmFyIGNhPWI3LnBvaW50cy5sZW5ndGg7Zm9yKHZhciBiOT0wO2I5PGNhO2I5Kyspe2I3LnNjYWxlZFBvaW50c1tiOV09TWF0aC5yb3VuZChiNy5wb2ludHNbYjldKmNjKTtpZihiNy5zY2FsZWRQb2ludHNbYjldPDApe2I3LnNjYWxlZFBvaW50c1tiOV09MH1pZihiOT09PTApe2NiKz1iNy5zY2FsZWRQb2ludHNbYjldfWVsc2V7Y2IrPSIsIitiNy5zY2FsZWRQb2ludHNbYjldfX1pZihUU0MucGxheWVyQ29uZmlndXJhdGlvbi5nZXREZWJ1Z0hvdHNwb3QoKSl7dSgpfWlmKGI2KXskKGI2KS5hdHRyKCJjb29yZHMiLGNiKX1lbHNleyQoIiNob3RzcG90TWFwIikuYXBwZW5kKCc8YXJlYSBzaGFwZT0icG9seSIgY29vcmRzPSInK2NiKyciIGhvdHNwb3RfaW5kZXg9IicrYjgrJyIgaHJlZj0iIyIgYWx0PSJIb3RzcG90IiAvPicpOyQoIiNob3RzcG90TWFwIGFyZWEiKS5iaW5kKCJjbGljayIsRyl9fWZ1bmN0aW9uIGwoY2gsY2Ipe2lmKHI8MCl7cmV0dXJufXZhciBjYT0oTnVtYmVyKGNoKS0oTnVtYmVyKHIpKmF3KSkvMjt2YXIgY2Q9KE51bWJlcihjYiktKE51bWJlcihhbCkqYXcpKS8yO2lmKGNhPDApe2NhPTB9aWYoY2Q8MCl7Y2Q9MH12YXIgYjc9KHIqYXcpO3ZhciBjZz0oYWwqYXcpOyQoIiNob3RzcG90Q29udGFpbmVyIikuYXR0cigid2lkdGgiLGI3KTskKCIjaG90c3BvdENvbnRhaW5lciIpLmF0dHIoImhlaWdodCIsY2cpOyQoIiNob3RzcG90Q29udGFpbmVyIikuY3NzKCJsZWZ0IixjYSk7JCgiI2hvdHNwb3RDb250YWluZXIiKS5jc3MoInRvcCIsY2QpO2lmKFRTQy5wbGF5ZXJDb25maWd1cmF0aW9uLmdldERlYnVnSG90c3BvdCgpKXskKCIjaG90c3BvdENvbnRhaW5lckRlYnVnIikuYXR0cigid2lkdGgiLGI3KTskKCIjaG90c3BvdENvbnRhaW5lckRlYnVnIikuYXR0cigiaGVpZ2h0IixjZyk7JCgiI2hvdHNwb3RDb250YWluZXJEZWJ1ZyIpLmNzcygibGVmdCIsY2EpOyQoIiNob3RzcG90Q29udGFpbmVyRGVidWciKS5jc3MoInRvcCIsY2QpfXZhciBiNj0kKCIjaG90c3BvdE1hcCBhcmVhIik7dmFyIGI4PWI2Lmxlbmd0aDt2YXIgYjk7dmFyIGNlO2lmKGI4PjApe2Zvcih2YXIgY2M9MDtjYzxiODtjYysrKXtiOT1iNltjY107Y2U9JChiOSkuYXR0cigiaG90c3BvdF9pbmRleCIpO2lmKGNlKXt2YXIgY2Y9VFNDLnhtcC5nZXRIb3RzcG90SXRlbUFycmF5KCk7dmFyIGNpPWNmW051bWJlcihjZSldO2lmKGNpKXthTChOdW1iZXIoY2UpLGNpLGF3LGI5KX19fX19ZnVuY3Rpb24gYWQoKXskKCIjc2VhcmNoTGlzdCIpLnJlbW92ZSgpO2JrLnNob3coKTtiMCgpfWZ1bmN0aW9uIGJLKCl7aWYoYVE9PT11bmRlZmluZWQpe3JldHVybn12YXIgYjc9YVFbMF0ub2Zmc2V0V2lkdGg7dmFyIGI2PWI3LTIwO2lmKGI2IT09Ui53aWR0aCgpKXtSLmNzcygid2lkdGgiLGI2KyJweCIpO1IuY3NzKCJsZWZ0IiwxMCsicHgiKX1SLmNzcygiaGVpZ2h0IiwkKCIjY3VycmVudENhcHRpb24gc3BhbiIpLmlubmVySGVpZ2h0KCkpfWZ1bmN0aW9uIGFrKCl7dmFyIGI3PSQoIiNtYXJrZXJzIik7dmFyIGI2PWI3WzBdLmdldENvbnRleHQoIjJkIik7VFNDLnF1aXpDb250cm9sbGVyLmRyYXdNYXJrZXJzKChhUVswXS5kdXJhdGlvbioxMDAwKSxiNixiVyxRKX1mdW5jdGlvbiBVKCl7YUU9JCgiI3ZpZGVvU2lkZWJhckhlYWQiKVswXS5vZmZzZXRIZWlnaHQrYkw7dmFyIGI2PShhaS1pLmhlaWdodCgpLWFFKTskKCIjdmlkZW9TaWRlYmFyQ29udGVudCIpLmhlaWdodChiNil9ZnVuY3Rpb24gYk0oKXskKCIjdHNjVmlkZW9Db250ZW50IikuY3NzKCJ3aWR0aCIsVFNDLnBsYXllckNvbmZpZ3VyYXRpb24uZ2V0UGxheWVyV2lkdGgoKSk7JCgiI3RzY1ZpZGVvQ29udGVudCIpLmNzcygiaGVpZ2h0IixUU0MucGxheWVyQ29uZmlndXJhdGlvbi5nZXRQbGF5ZXJIZWlnaHQoKSk7YWk9JCgiI3RzY1ZpZGVvQ29udGVudCIpLmlubmVySGVpZ2h0KCk7YWc9JCgiI3RzY1ZpZGVvQ29udGVudCIpLmlubmVyV2lkdGgoKTtpLndpZHRoKGFnKTtpZihUU0MucGxheWVyQ29uZmlndXJhdGlvbi5nZXRTaWRlYmFyTG9jYXRpb24oKT09PSJyaWdodCIpe2JYLmNzcygibGVmdCIsYWctYlgub3V0ZXJXaWR0aCgpKTtiWC5jc3MoInRvcCIsJCgiI3RzY1ZpZGVvQ29udGVudCIpLm9mZnNldCgpLnRvcCl9ZWxzZXtiWC5jc3MoImxlZnQiLCQoIiN0c2NWaWRlb0NvbnRlbnQiKS5vZmZzZXQoKS5sZWZ0KTtiWC5jc3MoInRvcCIsJCgiI3RzY1ZpZGVvQ29udGVudCIpLm9mZnNldCgpLnRvcCl9dmFyIGI2O2I2PW8ub3V0ZXJXaWR0aCh0cnVlKStiUzt2YXIgYjk9JCgiI3BsYXlfdGltZSIpLm91dGVyV2lkdGgodHJ1ZSkrJCgiLnNlcGVyYXRvciIpLm91dGVyV2lkdGgodHJ1ZSkrYlM7aWYoVFNDLmRldmljZUluZm8uaXNJUGFkKCl8fFRTQy5kZXZpY2VJbmZvLmlzQW5kcm9pZCgpKXskKCIjdm9sdW1lIikucmVtb3ZlKCk7aWYoYnUpe2I2PWI2K08ub3V0ZXJXaWR0aCh0cnVlKX1pZihicSl7YjY9YjYrYXIub3V0ZXJXaWR0aCh0cnVlKX1iNj1iNitiU31lbHNle2lmKGJ1KXtiNj1iNithVi5vdXRlcldpZHRoKHRydWUpK08ub3V0ZXJXaWR0aCh0cnVlKStiUztpZihjfHxicSl7YjY9YjYrYXIub3V0ZXJXaWR0aCh0cnVlKX19ZWxzZXtiNj1iNithVi5vdXRlcldpZHRoKHRydWUpK2JTO2lmKGN8fGJxKXtiNj1iNithci5vdXRlcldpZHRoKHRydWUpfX19aWYoVFNDLnhtcC5oYXNDYXB0aW9uSXRlbXMoKSl7YjY9YjYrYXkub3V0ZXJXaWR0aCh0cnVlKX1pZihUU0MucGxheWVyQ29uZmlndXJhdGlvbi5nZXRBbGxvd1Jld2luZCgpIT0tMSl7YjY9YjYrdC5vdXRlcldpZHRoKHRydWUpfWlmKGJlLmlzKCI6dmlzaWJsZSIpKXtiNj1iNitiZS5vdXRlcldpZHRoKHRydWUpK0Eub3V0ZXJXaWR0aCh0cnVlKX1pZihicSl7JCgiI2Z1bGxzY3JlZW5fZW50ZXJfYnV0dG9uIikucmVtb3ZlQ2xhc3MoImZ1bGxzY3JlZW5fZW50ZXJfYnV0dG9uX25vcm1hbCIpOyQoIiNmdWxsc2NyZWVuX2VudGVyX2J1dHRvbiIpLmFkZENsYXNzKCJmdWxsZnJhbWVfZW50ZXJfYnV0dG9uX25vcm1hbCIpfWJBLndpZHRoKGFnLWI2KTthai53aWR0aChhZy1iNi1iOSk7JCgiLnZpZGVvRGltZW5zaW9ucyIpLndpZHRoKGFnKTskKCIudmlkZW9EaW1lbnNpb25zIikuaGVpZ2h0KGFpKTtpZihidSl7VSgpfXZhciBiOD1hUSYmYVEubGVuZ3RoPjA7aWYoYjgpe2FRLmF0dHIoImhlaWdodCIsYWkrInB4Iik7YVEuYXR0cigid2lkdGgiLGFnKyJweCIpfWJ6KCk7aWYoVFNDLnhtcC5oYXNIb3RzcG90SXRlbXMoKSl7bChhZyxhaSl9aWYoVFNDLnhtcC5oYXNDYXB0aW9uSXRlbXMoKSl7RCgpO2JLKCl9aWYoYWUubGVuZ3RoPjApe2E0LmNzcygibGVmdCIsKGFWLm91dGVyV2lkdGgodHJ1ZSkrKGJTKjIpKSsicHgiKX1lbHNle3ZhciBiNz1hVi5vZmZzZXQoKS5sZWZ0KyhhVi53aWR0aCgpLzItYTQud2lkdGgoKS8yKTtpZigoYjcrYTQud2lkdGgoKSk+JCgiI3RzY1ZpZGVvQ29udGVudCIpLm9mZnNldCgpLmxlZnQrJCgiI3RzY1ZpZGVvQ29udGVudCIpLndpZHRoKCkpe2I3PSgkKCIjdHNjVmlkZW9Db250ZW50Iikub2Zmc2V0KCkubGVmdCskKCIjdHNjVmlkZW9Db250ZW50Iikud2lkdGgoKSktKGE0LndpZHRoKCkrNSl9YTQuY3NzKCJsZWZ0IixiNysicHgiKX1pZihhUSYmYVFbMF0uZHVyYXRpb24pe0YoKTtpZihUU0MueG1wLmhhc1F1aXooKSYmVFNDLnF1aXpDb250cm9sbGVyLnF1aXpFbmFibGVkKCkpe2JXPWFnLWI2LWI5O1E9aS5oZWlnaHQoKTskKCIjbWFya2VycyIpLmF0dHIoIndpZHRoIixiVysicHgiKTskKCIjbWFya2VycyIpLmF0dHIoImhlaWdodCIsUSsicHgiKTthaygpO2lmKFRTQy5xdWl6Q29udHJvbGxlci52aWV3T3BlbigpKXtUU0MucXVpekNvbnRyb2xsZXIucG9pbnRWaWV3QXQoYnIoYVFbMF0uY3VycmVudFRpbWUpKX19fX1mdW5jdGlvbiBieigpe2lmKHI+MCYmYWc+MCl7dmFyIGI3PWFnL3I7dmFyIGI2PWFpL2FsO3ZhciBiOD1NYXRoLm1pbihiNyxiNik7YXc9Yjh9fWZ1bmN0aW9uIGF1KCl7aWYoYnUmJiFUU0MuZGV2aWNlSW5mby5zdXBwb3J0c0Z1bGxTY3JlZW5LZXlib2FyZElucHV0KCkpeyQoIiNzZWFyY2hBcmVhIikuc2hvdygpOyQoIiNmc1NlYXJjaEFsZXJ0IikucmVtb3ZlKCk7VSgpfX1mdW5jdGlvbiBCKCl7YmE9dHJ1ZTtpZighVFNDLnhtcC5oYXNRdWl6KCl8fChUU0MueG1wLmhhc1F1aXooKSYmKCFUU0MucXVpekNvbnRyb2xsZXIucXVpekVuYWJsZWQoKXx8VFNDLnF1aXpDb250cm9sbGVyLmdldFF1aXpSZWFkeSgpKSkpe2lmKCFUU0MucGxheWVyQ29uZmlndXJhdGlvbi5nZXREaXNhYmxlQ29udHJvbHMoKSl7aS5zaG93KCl9VCgpfWVsc2V7YVFbMF0ucGF1c2UoKTtiUShUU0MucXVpekNvbnRyb2xsZXIuZ2V0TGFzdFN0YXR1c01lc3NhZ2UoKSl9aWYoVFNDLnZpZGVvQW5hbHl0aWNzLmlzRW5hYmxlZCgpJiYhVFNDLnZpZGVvQW5hbHl0aWNzLmlzUGVyY2VudFdhdGNoZWRJbml0aWFsaXplZCgpKXtUU0MudmlkZW9BbmFseXRpY3MuaW5pdFBlcmNlbnRXYXRjaGVkKGFRWzBdLmR1cmF0aW9uKjEwMDApfWlmKChhUVswXS53ZWJraXRTdXBwb3J0c0Z1bGxzY3JlZW4mJiFUU0MuZGV2aWNlSW5mby5pc0lQYWQoKSYmIVRTQy5kZXZpY2VJbmZvLmlzQW5kcm9pZCgpKSl7ZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigid2Via2l0ZnVsbHNjcmVlbmNoYW5nZSIsZnVuY3Rpb24oKXthRz0hYUc7aWYoYUcpeyQoIiNmdWxsc2NyZWVuX2VudGVyX2J1dHRvbiIpLnJlbW92ZUNsYXNzKCJmdWxsc2NyZWVuX2VudGVyX2J1dHRvbl9ub3JtYWwiKTskKCIjZnVsbHNjcmVlbl9lbnRlcl9idXR0b24iKS5hZGRDbGFzcygiZnVsbHNjcmVlbl9sZWF2ZV9idXR0b25fbm9ybWFsIil9ZWxzZXthdSgpOyQoIiNmdWxsc2NyZWVuX2VudGVyX2J1dHRvbiIpLnJlbW92ZUNsYXNzKCJmdWxsc2NyZWVuX2xlYXZlX2J1dHRvbl9ub3JtYWwiKTskKCIjZnVsbHNjcmVlbl9lbnRlcl9idXR0b24iKS5hZGRDbGFzcygiZnVsbHNjcmVlbl9lbnRlcl9idXR0b25fbm9ybWFsIik7JCgiYm9keSIpLmNzcygibWFyZ2luLWxlZnQiLCIxcHgiKTtiZz10cnVlO2JNKCk7JCgiYm9keSIpLmNzcygibWFyZ2luLWxlZnQiLCIwIik7Ymc9dHJ1ZTtiTSgpfX0pO2M9dHJ1ZX1lbHNle2lmKHdpbmRvdyE9d2luZG93LnRvcCYmIVRTQy5wbGF5ZXJDb25maWd1cmF0aW9uLmdldERpc2FibGVGdWxsZnJhbWVNb2RlKCkpe2FyLnNob3coKTticT10cnVlfWVsc2V7JCgiI2Z1bGxzY3JlZW5fZW50ZXJfYnV0dG9uIikucmVtb3ZlKCl9fWJnPXRydWU7Yk0oKTthUVswXS5yZW1vdmVFdmVudExpc3RlbmVyKCJsb2FkZWRtZXRhZGF0YSIsQixmYWxzZSl9ZnVuY3Rpb24gbSgpe3ZhciBiNjtpZihSLmhhc0NsYXNzKCJjYXB0aW9uVkFsaWduVG9wIikpe2I2PTIwO1IuY3NzKCJib3R0b20iLCIiKTtSLmNzcygidG9wIixiNisicHgiKX1lbHNle2I2PWkuaGVpZ2h0KCkrMTA7Ui5jc3MoInRvcCIsIiIpO1IuY3NzKCJib3R0b20iLGI2KyJweCIpfX1mdW5jdGlvbiBicihiNyl7dmFyIGI4PWFqLnBvc2l0aW9uKCkubGVmdDtpZihhUSYmYVFbMF0uZHVyYXRpb24mJmFRWzBdLmR1cmF0aW9uPjApe2lmKGI3Pj0wJiZiNzw9YVFbMF0uZHVyYXRpb24pe3ZhciBiNj1iNy9hUVswXS5kdXJhdGlvbjtiOCs9YjYqYWpbMF0ub2Zmc2V0V2lkdGh9fXJldHVybiBiOH1mdW5jdGlvbiBYKCl7aWYoIWFifHwoVFNDLnhtcC5oYXNRdWl6KCkmJlRTQy5xdWl6Q29udHJvbGxlci5xdWl6RW5hYmxlZCgpJiYhVFNDLnF1aXpDb250cm9sbGVyLmdldFF1aXpSZWFkeSgpKSl7cmV0dXJufXZhciBiOT1mYWxzZTtpZihyPT09LTF8fHI9PT0wKXtyPWFRWzBdLnZpZGVvV2lkdGg7YWw9YVFbMF0udmlkZW9IZWlnaHQ7YnooKTtpZihUU0MueG1wLmhhc0NhcHRpb25JdGVtcygpKXtEKCl9aWYoVFNDLnhtcC5oYXNIb3RzcG90SXRlbXMoKSl7bChhZyxhaSl9Yjk9dHJ1ZX1iZj1OdW1iZXIoYVFbMF0uY3VycmVudFRpbWUudG9GaXhlZCgyKSk+PU51bWJlcihhUVswXS5kdXJhdGlvbi50b0ZpeGVkKDIpKTthQT0oKGFBKyhhUVswXS5jdXJyZW50VGltZS1heikpLzIpKzAuMzM7aWYoYjkpe2F6PTB9ZWxzZXthej1hUVswXS5jdXJyZW50VGltZT5hUVswXS5kdXJhdGlvbj9hUVswXS5kdXJhdGlvbjphUVswXS5jdXJyZW50VGltZX1iMj1heioxMDAwO2lmKFRTQy52aWRlb0FuYWx5dGljcy5pc0VuYWJsZWQoKSl7VFNDLnZpZGVvQW5hbHl0aWNzLm1hcmtUaW1lV2F0Y2hlZChiMik7aWYoVFNDLnBsYXllckNvbmZpZ3VyYXRpb24uZ2V0R29vZ2xlQW5hbHl0aWNzSUQoKSl7dmFyIGI4PU1hdGgucm91bmQoVFNDLnZpZGVvQW5hbHl0aWNzLmdldFBlcmNlbnRhZ2VXYXRjaGVkKCkqMTAwKTtpZihiOD49KGFCK2IxKSl7YUIrPWIxO2lmKGFCPGI4KXthQj0oYjEqTWF0aC5mbG9vcihiOC9iMSkpK2IxfWlmKGFCPjEwMCl7YUI9MTAwfV9nYXEucHVzaChbIl90cmFja0V2ZW50IiwiSFRNTDUtVmlkZW8iLCJWaWRlb19QZXJjZW50X1ZpZXdlZCIsIlZpZXdlZDogIithQisiIFBlcmNlbnQiXSl9fX12YXIgY2M9IiI7aWYoIWJ5JiZUU0MueG1wLmhhc1F1aXooKSYmVFNDLnF1aXpDb250cm9sbGVyLnF1aXpFbmFibGVkKCkpe3ZhciBiNj1UU0MucXVpekNvbnRyb2xsZXIuZmluZFF1ZXN0aW9uU2V0KGIyKTtpZihiNi5pZD49MCl7aWYoYVchPT1iNi5pZCl7aWYoIVRTQy5kZXZpY2VJbmZvLmlzVG91Y2hJbnRlcmZhY2UoKSl7cSgpfWFGKCk7Yk8oZmFsc2UpO2lmKGJYKXthcShmYWxzZSl9YVc9YjYuaWQ7aWYoIVRTQy5kZXZpY2VJbmZvLmlzSUUoKSYmYVFbMF0uY3VycmVudFRpbWUpe2FRWzBdLmN1cnJlbnRUaW1lPWI2Lm1hcmtlclRpbWUvMTAwMDthUVswXS5wYXVzZSgpfWVsc2V7c2V0VGltZW91dChmdW5jdGlvbigpe2FRWzBdLnBhdXNlKCk7YVFbMF0uY3VycmVudFRpbWU9YjYubWFya2VyVGltZS8xMDAwfSwzMDApfWlmKGFHJiYhVFNDLmRldmljZUluZm8uc3VwcG9ydHNGdWxsU2NyZWVuS2V5Ym9hcmRJbnB1dCgpKXtJKCIjdmlkZW9XcmFwcGVyIixUU0MucXVpelVpU3RyaW5ncy5nZXRRdWl6RnVsbHNjcmVlbk1vZGUoKSx0cnVlKX1UU0MucXVpekNvbnRyb2xsZXIuZGlzcGxheUNvbmZpcm0oYjYuaWQpO1RTQy5xdWl6Q29udHJvbGxlci5wb2ludFZpZXdBdChicihiNi5tYXJrZXJUaW1lLzEwMDApKTtpZihUU0MudmlkZW9BbmFseXRpY3MuaXNFbmFibGVkKCkpe3ZhciBiOD1UU0MudmlkZW9BbmFseXRpY3MuZ2V0UGVyY2VudGFnZVdhdGNoZWRGb3JWaWRlb1NlZ21lbnQoKFRTQy5xdWl6Q29udHJvbGxlci5maW5kUHJldk1hcmtlclRpbWVGb3JNYXJrZXIoYjYuaWQpKSwoYjYubWFya2VyVGltZSkpO1RTQy5xdWl6Q29udHJvbGxlci51cGRhdGVQZXJjZW50V2F0Y2hlZEZvclF1ZXN0aW9uU2V0KGFXLGI4KX13KGZhbHNlKX1lbHNle319ZWxzZXthVz0tMX19dmFyIGI3PTA7JC5lYWNoKFRTQy54bXAuZ2V0SG90c3BvdEl0ZW1BcnJheSgpLGZ1bmN0aW9uKCl7dmFyIGNmPSQodGhpcylbMF07dmFyIGNkO2lmKFRTQy5tZWRpYUxpc3QuaXNQbGF5bGlzdCgpKXtjZD1UU0MubWVkaWFMaXN0LmN1cnJlbnRWaWRlb1NyYygpfXZhciBjZz10cnVlO2lmKGNmLmZpbGUhPT11bmRlZmluZWQmJmNmLmZpbGUhPT1jZCl7Y2c9ZmFsc2V9aWYoY2Yuc3RhcnQ8YXomJmF6PD1jZi5lbmQmJmNnKXtpZihjZi5pc0FjdGl2ZT09PWZhbHNlKXtjZi5pc0FjdGl2ZT10cnVlO2FMKGI3LGNmLGF3KX1pZihjZi5wYXVzZSE9PXVuZGVmaW5lZCYmY2YucGF1c2U9PT10cnVlJiZheithQT5jZi5lbmQmJiFhUVswXS5wYXVzZWQmJiFjZi5oYXNQYXVzZWQpe2lmKGNmLmhhc1BhdXNlZD09PWZhbHNlKXthUVswXS5wYXVzZSgpfWNmLmhhc1BhdXNlZD10cnVlO2F2KGNmLmVuZCl9fWVsc2V7aWYoY2YuaXNBY3RpdmUpe2NmLmlzQWN0aXZlPWZhbHNlO3ZhciBjZT0wOyQoIiNob3RzcG90TWFwIGFyZWEiKS5lYWNoKGZ1bmN0aW9uKCl7dmFyIGNoPSQodGhpcylbMF07Y2UrKztpZihOdW1iZXIoJChjaCkuYXR0cigiaG90c3BvdF9pbmRleCIpKT09PWI3KXtyZXR1cm4gZmFsc2V9fSk7aWYoY2U+MCl7JCgiI2hvdHNwb3RNYXAgYXJlYTpudGgtY2hpbGQoIitjZSsiKSIpLnJlbW92ZSgpfWlmKFRTQy5wbGF5ZXJDb25maWd1cmF0aW9uLmdldERlYnVnSG90c3BvdCgpKXt1KCl9fWlmKCFhUVswXS5wYXVzZWQpe2NmLmhhc1BhdXNlZD1mYWxzZX19YjcrK30pO3ZhciBjYj1mYWxzZTt2YXIgY2E9ZmFsc2U7JC5lYWNoKFRTQy54bXAuZ2V0Q2FwdGlvbkl0ZW1BcnJheSgpLGZ1bmN0aW9uKCl7dmFyIGNlPSQodGhpcylbMF07dmFyIGNkO2lmKFRTQy5tZWRpYUxpc3QuaXNQbGF5bGlzdCgpKXtjZD1UU0MubWVkaWFMaXN0LmN1cnJlbnRWaWRlb1NyYygpfXZhciBjZj10cnVlO2lmKGNlLmZpbGUhPT11bmRlZmluZWQmJmNlLmZpbGUhPT1jZCl7Y2Y9ZmFsc2V9aWYoY2Uuc3RhcnQ8YXomJmF6PD1jZS5lbmQmJmNmKXtjYT10cnVlO2lmKGNlLnRleHQhPT1SLnRleHQoKSl7Ui5yZW1vdmVDbGFzcygiY2FwdGlvbkhBbGlnbkxlZnQiKTtSLnJlbW92ZUNsYXNzKCJjYXB0aW9uSEFsaWduQ2VudGVyIik7Ui5yZW1vdmVDbGFzcygiY2FwdGlvbkhBbGlnblJpZ2h0Iik7Ui5hZGRDbGFzcyhjZS5oQWxpZ25DbGFzcyk7Ui5yZW1vdmVDbGFzcygiY2FwdGlvblZBbGlnblRvcCIpO1IucmVtb3ZlQ2xhc3MoImNhcHRpb25WQWxpZ25Cb3R0b20iKTtSLmFkZENsYXNzKGNlLnZBbGlnbkNsYXNzKTttKCk7Y2M9Y2UuaHRtbFRleHQ7Y2I9dHJ1ZX19fSk7aWYoY2Epe2lmKGNiKXtpZihjYyE9PSIiKXtjYz0iPHNwYW4+IitjYysiPC9zcGFuPiJ9Ui5odG1sKGNjKTtpZihjYyE9PSIiKXskKCIjY3VycmVudENhcHRpb24gc3BhbiIpLmNzcygiYmFja2dyb3VuZCIsVFNDLnhtcC5nZXRDYXB0aW9uQmcoKSl9YksoKTtpZihiKXtiLmNhbGwoY2MpfX19ZWxzZXtSLmh0bWwoIiIpfWlmKGFZKXtheS5yZW1vdmVDbGFzcygiY2xvc2VkX2NhcHRpb25fb2ZmX2J1dHRvbl9ub3JtYWwiKTtheS5hZGRDbGFzcygiY2xvc2VkX2NhcHRpb25fYnV0dG9uX25vcm1hbCIpO1IucmVtb3ZlQ2xhc3MoImhpZGUiKTtiSygpfWVsc2V7YXkucmVtb3ZlQ2xhc3MoImNsb3NlZF9jYXB0aW9uX2J1dHRvbl9ub3JtYWwiKTtheS5hZGRDbGFzcygiY2xvc2VkX2NhcHRpb25fb2ZmX2J1dHRvbl9ub3JtYWwiKTtSLmFkZENsYXNzKCJoaWRlIil9aWYoVFNDLnBsYXllckNvbmZpZ3VyYXRpb24uZ2V0UmVwb3J0U2Nvcm1Db21wbGV0ZSgpJiZUU0MudmlkZW9BbmFseXRpY3MuZ2V0UGVyY2VudGFnZVdhdGNoZWQoKT09PTEpe1RTQy5wbGF5ZXJDb25maWd1cmF0aW9uLnNldFJlcG9ydFNjb3JtQ29tcGxldGUoZmFsc2UpO2lmKHR5cGVvZiB1c2VyU3VibWl0VmlkZW9Db21wbGV0ZWRUb0xNUz09ImZ1bmN0aW9uIil7dXNlclN1Ym1pdFZpZGVvQ29tcGxldGVkVG9MTVMoKX19aWYoIWJ5JiZhVz09PS0xJiZiZiYmIWJOKXtiTj10cnVlO2FRWzBdLnBhdXNlKCk7YXQoKX19ZnVuY3Rpb24gYkYoYjYpe2lmKGI2PjEpe2I2PTF9ZWxzZXtpZihiNjwwKXtiNj0wfX1hUVswXS52b2x1bWU9YjZ9ZnVuY3Rpb24gYXYoYjYpeyQuZWFjaChUU0MueG1wLmdldEhvdHNwb3RJdGVtQXJyYXkoKSxmdW5jdGlvbigpe3ZhciBiNz0kKHRoaXMpWzBdO2lmKGI3LmVuZD09PWI2KXtiNy5oYXNQYXVzZWQ9dHJ1ZX19KX1mdW5jdGlvbiBiYygpeyQuZWFjaChUU0MueG1wLmdldEhvdHNwb3RJdGVtQXJyYXkoKSxmdW5jdGlvbigpe3ZhciBiNj0kKHRoaXMpWzBdO2I2Lmhhc1BhdXNlZD1mYWxzZTtiNi5pc0FjdGl2ZT1mYWxzZX0pOyQoIiNob3RzcG90TWFwIGFyZWEiKS5yZW1vdmUoKTtpZihUU0MucGxheWVyQ29uZmlndXJhdGlvbi5nZXREZWJ1Z0hvdHNwb3QoKSl7dSgpfX1mdW5jdGlvbiBiVChiOCxiNil7dmFyIGI3PW5ldyBSZWdFeHAoYjYsImlnIik7cmV0dXJuIGI4LnJlcGxhY2UoYjcsIjxzcGFuIGNsYXNzPSdmb3VuZFNlYXJjaFRleHQnPiIrYjYrIjwvc3Bhbj4iKX1mdW5jdGlvbiBhTyhjbCxjQixjdyxjZyxjbixjZixjYil7dmFyIGNhPSIiO3ZhciBiOD0iIjt2YXIgY2k7dmFyIGNwPSIiO3ZhciBjcj0iIjt2YXIgY3M9MTt2YXIgY2o7dmFyIGI2O3ZhciBjaD0wO3ZhciBjcT0wO3ZhciBjeT0yMDt2YXIgY3Q9NjU7dmFyIGNkPWZhbHNlO2lmKGNnIT09dW5kZWZpbmVkKXtjcj0iZGF0YS1maWxlPSciK2NnKyInIn1pZihjZil7dmFyIGNBPWNmLnNwbGl0KCIsIik7dmFyIGNvPS1OdW1iZXIoY0FbMF0pO3ZhciBjdT0tTnVtYmVyKGNBWzFdKTt2YXIgY209TnVtYmVyKGNBWzJdKTt2YXIgY3o9TnVtYmVyKGNBWzNdKTt2YXIgY3g9IiI7Y2k9Imhhc1RodW1iSW1hZ2UiO2NwPSJzdHlsZT0naGVpZ2h0OiIrY3orInB4JyI7aWYoY3o8Y3Qpe2NkPXRydWU7Y3A9InN0eWxlPSdoZWlnaHQ6IitjdCsicHgnIn1pZihUU0MueG1wLmdldFRvY0NlbGxMYXlvdXRUeXBlKCkmJlRTQy54bXAuZ2V0VG9jQ2VsbExheW91dFR5cGUoKT09PSJpbWFnZU9ubHkiJiZjYj09PXVuZGVmaW5lZCl7Y2g9KGJ2LWNtLWN5KS8yfWVsc2V7aWYoY20+KGJ2LzItY3kpKXtjcz0oYnYvMi1jeSkvY207Y209YnYvMi1jeTtjcT1NYXRoLmZsb29yKChjQVszXS0oY0FbM10qY3MpKS8yKX1lbHNle2NxPU1hdGguZmxvb3IoKGN0LShjQVszXSpjcykpLzIpfX1iNj17fTtiNi53aWR0aD1OdW1iZXIoYnYtY20tNDApKyJweCI7YjYubGVmdD1OdW1iZXIoY20rNSkrInB4IjtiNi5vdmVyZmxvdz0iaGlkZGVuIjtiNlsibGluZS1oZWlnaHQiXT0iMS4yZW0iO2I2WyJtYXgtaGVpZ2h0Il09IjQuOGVtIjtpZihjYiE9PXVuZGVmaW5lZCl7Y2o9JzxkaXYgY2xhc3M9InRvY0l0ZW1MYWJlbCI+JytiVChjQixjYikrIjwvZGl2PiJ9ZWxzZXtpZihUU0MueG1wLmdldFRvY0NlbGxMYXlvdXRUeXBlKCkmJlRTQy54bXAuZ2V0VG9jQ2VsbExheW91dFR5cGUoKT09PSJpbWFnZU9ubHkiKXtjaj0iIn1lbHNle2NqPSc8ZGl2IGNsYXNzPSJ0b2NJdGVtTGFiZWwiPicrY0IrIjwvZGl2PiJ9fWI4PSI8ZGl2PiIrY2orIjwvZGl2PiJ9ZWxzZXtjcD0iIjtjaT0ibm9UaHVtYkltYWdlIjtpZihjYiE9PXVuZGVmaW5lZCl7Yjg9YlQoY0IsY2IpfWVsc2V7Yjg9Y0J9fXZhciBjZT0iPGxpICIrY3ArIiBjbGFzcz0nIitjaSsiJyBkYXRhLXRpbWU9JyIrY3crIicgIitjcisiID48L2xpPiI7JChjbCkuYXBwZW5kKGNlKTtpZihjbil7dmFyIGN2PWNuLmdldENvbnRleHQoIjJkIik7Y24ud2lkdGg9TnVtYmVyKGNBWzJdKSpjcztjbi5oZWlnaHQ9TnVtYmVyKGNBWzNdKSpjcztjdi5zY2FsZShjcyxjcyk7aWYodil7Y3YuZHJhd0ltYWdlKHYsY0FbMF0sY0FbMV0sY0FbMl0sY0FbM10sMCwwLGNBWzJdLGNBWzNdKX1lbHNle2N2LmZpbGxTdHlsZT0iIzAwMDAwMCI7Y3YuZmlsbFJlY3QoMCwwLGNBWzJdLGNBWzNdKX0kKGNuKS5jc3MoIm1hcmdpbi1sZWZ0IixjaCk7JChjbikuY3NzKCJtYXJnaW4tdG9wIixjcSk7JChjbCsiIGxpOmxhc3QtY2hpbGQiKS5hcHBlbmQoY24pfSQoY2wrIiBsaTpsYXN0LWNoaWxkIikuYXBwZW5kKGI4KTtpZihjbil7JChjbCsiIGxpOmxhc3QtY2hpbGQgLnRvY0l0ZW1MYWJlbCIpLmNzcyhiNik7dmFyIGI5PTA7dmFyIGI3PWN0O2lmKCEkKGJYKS5pcygiOnZpc2libGUiKSl7YXEodHJ1ZSk7Yjk9JChjbCsiIGxpOmxhc3QtY2hpbGQgLnRvY0l0ZW1MYWJlbCIpLmhlaWdodCgpO2lmKCFjZCl7Yjc9JChjbCsiIGxpOmxhc3QtY2hpbGQiKS5oZWlnaHQoKX1hcShmYWxzZSl9ZWxzZXtiOT0kKGNsKyIgbGk6bGFzdC1jaGlsZCAudG9jSXRlbUxhYmVsIikuaGVpZ2h0KCk7aWYoIWNkKXtiNz0kKGNsKyIgbGk6bGFzdC1jaGlsZCIpLmhlaWdodCgpfX12YXIgY2M9LTg7aWYoIWNkJiZjcz09PTEpe2NjPTR9dmFyIGNrPS1OdW1iZXIoYjcrY2MpO2NrKz0oYjctYjkpLzI7Y3E9TWF0aC5mbG9vcigoYjctKGNBWzNdKmNzKSkvMik7JChjbikuY3NzKCJtYXJnaW4tdG9wIixjcSk7JChjbCsiIGxpOmxhc3QtY2hpbGQgLnRvY0l0ZW1MYWJlbCIpLmNzcygidG9wIixjaysicHgiKX1pZihUU0MubWVkaWFMaXN0LmlzUGxheWxpc3QoKSl7YWMoSCl9fWZ1bmN0aW9uIGJ4KGI2KXt2PW5ldyBJbWFnZSgpO3Yub25sb2FkPWZ1bmN0aW9uKCl7YjAoKX07di5zcmM9YjZ9ZnVuY3Rpb24gYjAoKXt2YXIgYjg9VFNDLnhtcC5nZXRUb2NJdGVtQXJyYXkoKTt2YXIgYjY9YjgubGVuZ3RoO3ZhciBiOTskKCIjdGFibGVPZkNvbnRlbnRzTGlzdCBsaSIpLnJlbW92ZSgpO2Zvcih2YXIgYjc9MDtiNzxiNjtiNysrKXtpZihiOFtiN10uaW1hZ2VSZWN0KXtiOFtiN10uaW1hZ2VSZWY9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiY2FudmFzIil9YU8oIiN0YWJsZU9mQ29udGVudHNMaXN0IixiOFtiN10udGV4dCxiOFtiN10udGltZSxiOFtiN10uZmlsZSxiOFtiN10uaW1hZ2VSZWYsYjhbYjddLmltYWdlUmVjdCl9fWZ1bmN0aW9uIGJsKCl7dmFyIGNhPWJQLndpZHRoO3ZhciBiOD1iUC5oZWlnaHQ7dmFyIGNjO3ZhciBiOTt2YXIgYjY7dmFyIGNiPTAuNjtpZihiODw9Y2Epe2lmKGNhPihidi0yMCkpe2NjPShidi0yMCkvY2E7Yjk9KGJ2LTIwKTtiNj1iOCpjY31lbHNle2NjPTE7Yjk9Y2E7YjY9Yjh9fWVsc2V7aWYoYjg+KGJ2LTIwKSl7Y2M9KChjYSpjYiktMjApL2I4O2I2PSgoYnYqY2IpLTIwKTtiOT1jYSpjY31lbHNle2NjPTE7YjY9Yjg7Yjk9Y2F9fXZhciBiNz0nPGRpdiBpZD0icGlwaW1hZ2UiIHN0eWxlPSJiYWNrZ3JvdW5kLWltYWdlOiB1cmwoJytUU0MueG1wLmdldFRvY0ltYWdlU3JjKCkrIik7YmFja2dyb3VuZC1yZXBlYXQ6bm8tcmVwZWF0O2JhY2tncm91bmQtc2l6ZTpjb250YWluO3dpZHRoOiAiK2I5KyJweDtoZWlnaHQ6ICIrYjYrInB4O2JvcmRlcjogMXB4IHNvbGlkICNGRkZGRkY7bWFyZ2luLWxlZnQ6ICIrKChidi1iOSkvMikrInB4O21hcmdpbi1yaWdodDoiKygoYnYtYjkpLzIpKydweDttYXJnaW4tdG9wOiAxMHB4O21hcmdpbi1ib3R0b206ICAxMHB4OyI+PC9kaXY+JzskKGI3KS5wcmVwZW5kVG8oJCgiI3ZpZGVvU2lkZWJhckhlYWQiKSk7JCgiI3ZpZGVvU2lkZWJhckhlYWQiKS5wcmVwZW5kKFRTQy54bXAuZ2V0VG9jVGl0bGUoKSk7VSgpfWZ1bmN0aW9uIGFxKGI2KXtpZihiNil7Ylguc2hvdygpO3coZmFsc2UpfWVsc2V7YlguaGlkZSgpO2lmKCFhSSl7dyh0cnVlKX19fWZ1bmN0aW9uIFMoYjkpe2JFPWZhbHNlO2lmKFRTQy5kZXZpY2VJbmZvLmlzVG91Y2hJbnRlcmZhY2UoKSYmYUspe3JldHVybn1iOS5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTtiOS5wcmV2ZW50RGVmYXVsdCgpO3ZhciBiNj0kKHRoaXMpLmF0dHIoImRhdGEtdGltZSIpO3ZhciBiNz0kKHRoaXMpLmF0dHIoImRhdGEtZmlsZSIpO2lmKGI3IT09dW5kZWZpbmVkKXtiYygpO3ZhciBiOD1UU0MubWVkaWFMaXN0LmdldFZpZGVvSW5kZXhCeVNyYyhiNyk7aWYoYjg9PT1UU0MubWVkaWFMaXN0LmN1cnJlbnRWaWRlb0luZGV4KCkpe2FRWzBdLmN1cnJlbnRUaW1lPWI2fWVsc2V7VFNDLm1lZGlhTGlzdC5zZXRDdXJyZW50VmlkZW8oYjgpO0soKX1hYyhiOCsxKX1lbHNle2JjKCk7YVFbMF0uY3VycmVudFRpbWU9YjZ9fWZ1bmN0aW9uIGE3KCl7aWYoYnQpe2FxKHRydWUpfWVsc2V7YXEoZmFsc2UpfWlmKFRTQy5wbGF5ZXJDb25maWd1cmF0aW9uLmdldElzU2VhcmNoYWJsZSgpKXtDLmtleXVwKGZ1bmN0aW9uKCl7aWYoQy52YWwoKSE9IiIpe2JrLmhpZGUoKTskKCIjc2VhcmNoTGlzdCIpLnJlbW92ZSgpOyQoIiN2aWRlb1NpZGViYXJDb250ZW50IikuYXBwZW5kKCI8b2wgaWQ9J3NlYXJjaExpc3QnID48L29sPiIpO2QoVFNDLnhtcC5nZXRUb2NJdGVtQXJyYXkoKSk7ZChUU0MueG1wLmdldENhcHRpb25JdGVtQXJyYXkoKSk7YkkoVFNDLnhtcC5nZXRTY3JlZW5UZXh0SXRlbUFycmF5KCkpO2lmKFRTQy54bXAuZ2V0Q2FwdGlvbkl0ZW1BcnJheSgpLmxlbmd0aDwxJiZUU0MueG1wLmdldFNjcmVlblRleHRJdGVtQXJyYXkoKS5sZW5ndGg+MCl7YkkoVFNDLnhtcC5nZXRTY3JlZW5UZXh0SXRlbUFycmF5KCkpfSQoIiNzZWFyY2hMaXN0Iikuc2hvdygpfWVsc2V7YWQoKX19KTtiby5jbGljayhmdW5jdGlvbigpe0MudmFsKCIiKTthZCgpfSl9ZWxzZXskKCIjc2VhcmNoQXJlYSIpLnJlbW92ZSgpfWlmKFRTQy54bXAuZ2V0VG9jSW1hZ2VTcmMoKSl7YlA9bmV3IEltYWdlKCk7YlAub25sb2FkPWJsO2JQLnNyYz1UU0MueG1wLmdldFRvY0ltYWdlU3JjKCl9ZWxzZXskKCIjdmlkZW9TaWRlYmFySGVhZCIpLnByZXBlbmQoVFNDLnhtcC5nZXRUb2NUaXRsZSgpKX1pZihUU0MueG1wLnRvY0NvbnRhaW5zVGh1bWJzKCkpe2J4KFRTQy54bXAuZ2V0VG9jVGh1bWJJbWFnZVNyYygpKX1iMCgpO2lmKFRTQy5kZXZpY2VJbmZvLmlzVG91Y2hJbnRlcmZhY2UoKSl7Ymg9InRvdWNoZW5kIjthSz1mYWxzZX1lbHNleyQoIiN2aWRlb1NpZGViYXJDb250ZW50IG9sIGxpIikubGl2ZShiaCxTKX19ZnVuY3Rpb24gYVgoYjgpe3ZhciBiNztieT10cnVlO2lmKCFUU0MuZGV2aWNlSW5mby5pc1RvdWNoSW50ZXJmYWNlKCkpe3dpbmRvdy5jbGVhclRpbWVvdXQoYWgpfWlmKGFRWzBdLnBhdXNlZCl7Yjc9ZmFsc2V9ZWxzZXtiNz10cnVlO2FRWzBdLnBhdXNlKCl9YkMoKTtpZihUU0MuZGV2aWNlSW5mby5pc1RvdWNoSW50ZXJmYWNlKCkpe1koYjgub3JpZ2luYWxFdmVudC50b3VjaGVzWzBdLmNsaWVudFgpO2RvY3VtZW50Lm9udG91Y2htb3ZlPWZ1bmN0aW9uKGI5KXtiOS5wcmV2ZW50RGVmYXVsdCgpO1koYjkucGFnZVgpfTtkb2N1bWVudC5vbnRvdWNoZW5kPWI2fWVsc2V7ZG9jdW1lbnQub25tb3VzZW1vdmU9ZnVuY3Rpb24oYjkpe1koYjkucGFnZVgpfTtkb2N1bWVudC5vbm1vdXNldXA9YjZ9ZnVuY3Rpb24gYjYoYjkpe2lmKGJ5JiYhVFNDLmRldmljZUluZm8uaXNUb3VjaEludGVyZmFjZSgpJiZUU0MucGxheWVyQ29uZmlndXJhdGlvbi5nZXRBdXRvSGlkZUNvbnRyb2xzKCkpe2JpKCl9Ynk9ZmFsc2U7bigpO2lmKFRTQy5kZXZpY2VJbmZvLmlzVG91Y2hJbnRlcmZhY2UoKSl7ZG9jdW1lbnQub250b3VjaG1vdmU9bnVsbDtkb2N1bWVudC5vbnRvdWNoZW5kPW51bGx9ZWxzZXtkb2N1bWVudC5vbm1vdXNlbW92ZT1udWxsO2RvY3VtZW50Lm9ubW91c2V1cD1udWxsfWlmKGI3JiYhYmYpe2FRWzBdLnBsYXkoKX1YKCl9fWZ1bmN0aW9uIGJHKCl7YVEuYmluZCgidGltZXVwZGF0ZSIsZnVuY3Rpb24oKXtGKCl9KTthUS5iaW5kKCJwcm9ncmVzcyIsZnVuY3Rpb24oKXtKKCl9KTthUS5iaW5kKCJkdXJhdGlvbmNoYW5nZSIsZnVuY3Rpb24oKXtKKCk7aWYoYVApe3dpbmRvdy5jbGVhckludGVydmFsKGFQKX1hUD13aW5kb3cuc2V0SW50ZXJ2YWwoSiwxMDAwKX0pO2lmKCFUU0MuZGV2aWNlSW5mby5pc1RvdWNoSW50ZXJmYWNlKCkpe2FqLmJpbmQoIm1vdXNlZG93biIsYVgpO2FqLmJpbmQoIm1vdXNldXAiLGZ1bmN0aW9uKGI2KXtZKGI2Lm9yaWdpbmFsRXZlbnQucGFnZVgpfSl9fWZ1bmN0aW9uIEooKXtpZihhUSYmYVEubGVuZ3RoPjApe3ZhciBiNj0wO2lmKGFRWzBdLmJ1ZmZlcmVkJiZhUVswXS5idWZmZXJlZC5sZW5ndGgpe2I2PU1hdGguY2VpbCgoKGFRWzBdLmJ1ZmZlcmVkLmVuZCgwKS9hUVswXS5kdXJhdGlvbikqMTAwKSl9JCgiI2xvYWRfcHJvZ3Jlc3MiKS5jc3MoIndpZHRoIixiNisiJSIpO2lmKGI2PT09MTAwKXtpZihhUCl7d2luZG93LmNsZWFySW50ZXJ2YWwoYVApfX19fWZ1bmN0aW9uIGJDKCl7ZG9jdW1lbnQuYm9keS5mb2N1cygpO2RvY3VtZW50Lm9uc2VsZWN0c3RhcnQ9ZnVuY3Rpb24oKXtyZXR1cm4gZmFsc2V9fWZ1bmN0aW9uIG4oKXtkb2N1bWVudC5vbnNlbGVjdHN0YXJ0PWZ1bmN0aW9uKCl7cmV0dXJuIHRydWV9fWZ1bmN0aW9uIFkoY2Mpe2JjKCk7dmFyIGI2PU1hdGgubWF4KDAsTWF0aC5taW4oMSwoY2MtYWoucG9zaXRpb24oKS5sZWZ0KS9halswXS5vZmZzZXRXaWR0aCkpO3ZhciBiOT1iNiooYWpbMF0ub2Zmc2V0V2lkdGgtMik7aWYoTC5sZW5ndGg+MCl7dmFyIGNiPU0ub2Zmc2V0KCkubGVmdDt2YXIgYjg9TC53aWR0aCgpO3ZhciBiNz1iOS1NYXRoLmZsb29yKGI4LzIpO0wuY3NzKCJsZWZ0IixiNysxKX1NLndpZHRoKGI5KTtiRT1mYWxzZTt0cnl7YVFbMF0uY3VycmVudFRpbWU9TnVtYmVyKGI2KmFRWzBdLmR1cmF0aW9uKX1jYXRjaChjYSl7aWYoY2EuY29kZT09RE9NRXhjZXB0aW9uLklOREVYX1NJWkVfRVJSKXt9fVooKX1mdW5jdGlvbiBGKCl7TS53aWR0aCgoYVFbMF0uY3VycmVudFRpbWUvYVFbMF0uZHVyYXRpb24pKihhalswXS5vZmZzZXRXaWR0aC0yKSk7dmFyIGI4PU0ub2Zmc2V0KCkubGVmdDt2YXIgYjc9KGFRWzBdLmN1cnJlbnRUaW1lL2FRWzBdLmR1cmF0aW9uKSooYWpbMF0ub2Zmc2V0V2lkdGgtMik7aWYoTC5sZW5ndGg+MCl7dmFyIGI2PUwud2lkdGgoKTtMLmNzcygibGVmdCIsYjctTWF0aC5mbG9vcihiNi8yKSl9WigpfWZ1bmN0aW9uIFooKXtvWzBdLmlubmVySFRNTD1qKGFRWzBdLmN1cnJlbnRUaW1lKTtpZihhUVswXS5kdXJhdGlvbil7YTFbMF0uaW5uZXJIVE1MPWooYVFbMF0uZHVyYXRpb24pfX1mdW5jdGlvbiBqKGI3KXtiNz1NYXRoLnJvdW5kKGI3KTt2YXIgYjY9TWF0aC5mbG9vcihiNy82MCk7YjY9KGI2Pj0xMCk/YjY6IjAiK2I2O2I3PU1hdGguZmxvb3IoYjclNjApO2I3PShiNz49MTApP2I3OiIwIitiNztyZXR1cm4gYjYrIjoiK2I3fWZ1bmN0aW9uIGF4KGI3LGI5KXt2YXIgYjY9MTAwO3RyeXtiNj1sb2NhbFN0b3JhZ2UuZ2V0SXRlbSgidm9sdW1lIik9PXVuZGVmaW5lZD8xMDA6bG9jYWxTdG9yYWdlLmdldEl0ZW0oInZvbHVtZSIpfWNhdGNoKGI4KXt9Yjcuc2xpZGVyKHtvcmllbnRhdGlvbjpiOSxyYW5nZToibWluIixtaW46MCxtYXg6MTAwLHZhbHVlOmI2LHNsaWRlOmZ1bmN0aW9uKGNhLGNiKXthVi5yZW1vdmVDbGFzcygidm9sdW1lX2J1dHRvbl9oaWdoX25vcm1hbCIpO2FWLnJlbW92ZUNsYXNzKCJ2b2x1bWVfYnV0dG9uX21lZF9ub3JtYWwiKTthVi5yZW1vdmVDbGFzcygidm9sdW1lX2J1dHRvbl9sb3dfbm9ybWFsIik7YVYucmVtb3ZlQ2xhc3MoInZvbHVtZV9idXR0b25fbm9ybWFsIik7YVYucmVtb3ZlQ2xhc3MoInVubXV0ZV9idXR0b25fbm9ybWFsIik7aWYoY2IudmFsdWU+NzApe2FWLmFkZENsYXNzKCJ2b2x1bWVfYnV0dG9uX2hpZ2hfbm9ybWFsIil9ZWxzZXtpZihjYi52YWx1ZT4zMCl7YVYuYWRkQ2xhc3MoInZvbHVtZV9idXR0b25fbWVkX25vcm1hbCIpfWVsc2V7aWYoY2IudmFsdWU+MCl7YVYuYWRkQ2xhc3MoInZvbHVtZV9idXR0b25fbG93X25vcm1hbCIpfWVsc2V7YVYuYWRkQ2xhc3MoInVubXV0ZV9idXR0b25fbm9ybWFsIil9fX1iRihjYi52YWx1ZS8xMDApO3RyeXtsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgidm9sdW1lIixjYi52YWx1ZSl9Y2F0Y2goY2Mpe319fSk7dHJ5e2JGKGxvY2FsU3RvcmFnZS5nZXRJdGVtKCJ2b2x1bWUiKT09dW5kZWZpbmVkPzEwMDpsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgidm9sdW1lIikvMTAwKX1jYXRjaChiOCl7fX1mdW5jdGlvbiBhRCgpe2E0LnNob3coYkopfWZ1bmN0aW9uIGIzKCl7aWYoYU4hPT0tMSl7Y2xlYXJUaW1lb3V0KGFOKTthTj0tMX1hNC51bmJpbmQoIm1vdXNlZW50ZXIiKTthNC51bmJpbmQoIm1vdXNlbGVhdmUiKTthNC5oaWRlKGJKKX1mdW5jdGlvbiBhWigpe2lmKGJ1JiZidCl7JCh0aGlzKS5yZW1vdmVDbGFzcygidG9jX29mZl9idXR0b25fbm9ybWFsIik7JCh0aGlzKS5hZGRDbGFzcygidG9jX2J1dHRvbl9ub3JtYWwiKTthcShmYWxzZSl9JCgiI2hvdHNwb3RDb250YWluZXIiKS5oaWRlKCk7aWYoVFNDLnBsYXllckNvbmZpZ3VyYXRpb24uZ2V0RGVidWdIb3RzcG90KCkpeyQoIiNob3RzcG90Q29udGFpbmVyRGVidWciKS5oaWRlKCl9ay5zaG93KCl9ZnVuY3Rpb24gYjUoYjYsYjcpe2JOPWZhbHNlO2JFPWZhbHNlO2suaGlkZSgpO2JVLmNzcygidmlzaWJpbGl0eSIsInZpc2libGUiKTtiYygpO2lmKCFUU0MuZGV2aWNlSW5mby5pc1RvdWNoSW50ZXJmYWNlKCkpe3ooKX1pZighVFNDLm1lZGlhTGlzdC5pc1BsYXlsaXN0KCkpe2FRWzBdLmN1cnJlbnRUaW1lPWI2fWlmKGI3KXtpZihUU0MubWVkaWFMaXN0LmlzUGxheWxpc3QoKSl7VFNDLm1lZGlhTGlzdC5zZXRDdXJyZW50VmlkZW8oMCk7YWMoVFNDLm1lZGlhTGlzdC5jdXJyZW50VmlkZW9JbmRleCgpKzEpO0soKX1lbHNle2FRWzBdLnBsYXkoKX19JCgiI2hvdHNwb3RDb250YWluZXIiKS5zaG93KCk7aWYoVFNDLnBsYXllckNvbmZpZ3VyYXRpb24uZ2V0RGVidWdIb3RzcG90KCkpeyQoIiNob3RzcG90Q29udGFpbmVyRGVidWciKS5zaG93KCl9fWZ1bmN0aW9uIGF0KCl7aWYoTWF0aC5mbG9vcihhUVswXS5jdXJyZW50VGltZSk8TWF0aC5mbG9vcihhUVswXS5kdXJhdGlvbikpe2lmKGFQKXt3aW5kb3cuY2xlYXJJbnRlcnZhbChhUCl9dmFyIGI4PSI6KCBUaGlzIHZpZGVvIGZhaWxlZCB0byBsb2FkIGNvbXBsZXRlbHkuIjtpZighVFNDLmRldmljZUluZm8uaXNJUGFkKCl8fFRTQy5kZXZpY2VJbmZvLmlzQW5kcm9pZCgpKXtiOCs9IiAgWW91IG1heSBuZWVkIHRvIHRyeSBhbm90aGVyIGJyb3dzZXIgb3IgdXNlIHRoZSBGbGFzaCBwbHVnaW4uIn1JKHVuZGVmaW5lZCxiOCxmYWxzZSk7cmV0dXJufWlmKFRTQy5tZWRpYUxpc3QuaXNQbGF5bGlzdCgpJiYhVFNDLm1lZGlhTGlzdC5vbkxhc3RWaWRlbygpKXtiZz10cnVlO1RTQy5tZWRpYUxpc3Quc2V0Q3VycmVudFZpZGVvKCJuZXh0Iik7YWMoVFNDLm1lZGlhTGlzdC5jdXJyZW50VmlkZW9JbmRleCgpKzEpO0soKX1lbHNle2lmKCFUU0MuZGV2aWNlSW5mby5pc1RvdWNoSW50ZXJmYWNlKCkpe3EoKX1hUVswXS5wYXVzZSgpO2cucmVtb3ZlQ2xhc3MoInBhdXNlX25vcm1hbCIpO2cuYWRkQ2xhc3MoInBsYXlfbm9ybWFsIik7c2V0VGltZW91dChhNiwxMDAwKTt2YXIgYjY9ZmFsc2U7dmFyIGI3PXRydWU7dmFyIGI5PWZhbHNlO3ZhciBjYj10cnVlO2lmKFRTQy5wbGF5ZXJDb25maWd1cmF0aW9uLmdldEVuZEFjdGlvblR5cGUoKSE9dW5kZWZpbmVkKXt2YXIgY2E9VFNDLnBsYXllckNvbmZpZ3VyYXRpb24uZ2V0RW5kQWN0aW9uUGFyYW0oKTtzd2l0Y2goVFNDLnBsYXllckNvbmZpZ3VyYXRpb24uZ2V0RW5kQWN0aW9uVHlwZSgpLnRvTG93ZXJDYXNlKCkpe2Nhc2UibG9vcCI6YjY9KGNhPT09InRydWUifHxjYT09PSIxIik/dHJ1ZTpmYWxzZTticmVhaztjYXNlInN0b3AiOmI3PShjYT09PSJmYWxzZSJ8fGNhPT09IjAiKT9mYWxzZTp0cnVlO2JyZWFrO2Nhc2UianVtcHRvdGltZSI6Yjk9dHJ1ZTticmVhaztjYXNlImp1bXB0b3RpbWVhbmRzdG9wIjpjYj1mYWxzZTtiOT10cnVlO2JyZWFrO2Nhc2UianVtcHRvdXJsIjppZihUU0MucGxheWVyQ29uZmlndXJhdGlvbi5nZXRHb29nbGVBbmFseXRpY3NJRCgpKXtfZ2FxLnB1c2goWyJfdHJhY2tFdmVudCIsIkhUTUw1LVZpZGVvIiwiVmlkZW9fRmluaXNoZWRfQWN0aW9uIixjYV0pfWlmKFRTQy5kZXZpY2VJbmZvLmlzTnVldm9BcHAoKSl7c2V0VGltZW91dChmdW5jdGlvbigpe3dpbmRvdy5vcGVuKCIiK2NhLCJfcGFyZW50Iil9LDUwMCl9ZWxzZXt3aW5kb3cub3BlbigiIitjYSwiX3BhcmVudCIpfWJyZWFrO2Nhc2UianVtcHRvdXJsbmV3IjppZihUU0MucGxheWVyQ29uZmlndXJhdGlvbi5nZXRHb29nbGVBbmFseXRpY3NJRCgpKXtfZ2FxLnB1c2goWyJfdHJhY2tFdmVudCIsIkhUTUw1LVZpZGVvIiwiVmlkZW9fRmluaXNoZWRfQWN0aW9uIixjYV0pfXdpbmRvdy5vcGVuKCIiK2NhLCJfYmxhbmsiKTticmVha319aWYoYjYpe2I1KDAsdHJ1ZSl9ZWxzZXtpZihiOSl7YjUoKGNhLzEwMDApLGNiKX1lbHNle2lmKGI3KXtpZihhRyl7ZG9jdW1lbnQud2Via2l0Q2FuY2VsRnVsbFNjcmVlbigpfWlmKCFUU0MuZGV2aWNlSW5mby5pc1RvdWNoSW50ZXJmYWNlKCkpe2FGKCl9YmooKTthWigpfWVsc2V7YkU9dHJ1ZX19fX19ZnVuY3Rpb24gYVMoKXtiZD0hYmQ7aWYoYW8uaGFzQ2xhc3MoInRzY3BsYXllcl9pbmxpbmUiKSl7JCgiI2Z1bGxzY3JlZW5fZW50ZXJfYnV0dG9uIikucmVtb3ZlQ2xhc3MoImZ1bGxmcmFtZV9lbnRlcl9idXR0b25fbm9ybWFsIik7JCgiI2Z1bGxzY3JlZW5fZW50ZXJfYnV0dG9uIikuYWRkQ2xhc3MoImZ1bGxmcmFtZV9sZWF2ZV9idXR0b25fbm9ybWFsIik7Ylo9d2luZG93LnBhcmVudC5zY3JvbGxZfHx3aW5kb3cudG9wLnBhZ2VZT2Zmc2V0O3dpbmRvdy5wYXJlbnQuc2Nyb2xsVG8oMCwwKTskKCJodG1sIix3aW5kb3cucGFyZW50LmRvY3VtZW50KS5jc3MoIm92ZXJmbG93IiwiaGlkZGVuIik7aWYoVFNDLmRldmljZUluZm8uaXNJUGFkKCl8fFRTQy5kZXZpY2VJbmZvLmlzQW5kcm9pZCgpKXtpZihQKXskKCIjc2VhcmNoQm94IikuYmx1cigpO3NldFRpbWVvdXQoYVIsMTAwKX1lbHNle2FSKCl9fWVsc2V7YW8ucmVtb3ZlQ2xhc3MoInRzY3BsYXllcl9pbmxpbmUiKTthby5hdHRyKCJ3aWR0aCIsIjEwMCUiKTthby5hdHRyKCJoZWlnaHQiLCIxMDAlIik7YW8uYWRkQ2xhc3MoInRzY3BsYXllcl9mdWxsZnJhbWUiKX19ZWxzZXskKCIjZnVsbHNjcmVlbl9lbnRlcl9idXR0b24iKS5yZW1vdmVDbGFzcygiZnVsbGZyYW1lX2xlYXZlX2J1dHRvbl9ub3JtYWwiKTskKCIjZnVsbHNjcmVlbl9lbnRlcl9idXR0b24iKS5hZGRDbGFzcygiZnVsbGZyYW1lX2VudGVyX2J1dHRvbl9ub3JtYWwiKTskKCJodG1sIix3aW5kb3cucGFyZW50LmRvY3VtZW50KS5jc3MoIm92ZXJmbG93IiwiYXV0byIpO2FvLnJlbW92ZUNsYXNzKCJ0c2NwbGF5ZXJfZnVsbGZyYW1lIik7YW8ucmVtb3ZlQXR0cigid2lkdGgiKTthby5yZW1vdmVBdHRyKCJoZWlnaHQiKTthby5hZGRDbGFzcygidHNjcGxheWVyX2lubGluZSIpO2lmKFRTQy5kZXZpY2VJbmZvLmlzSVBhZCgpfHxUU0MuZGV2aWNlSW5mby5pc0FuZHJvaWQoKSl7Y2xlYXJUaW1lb3V0KGE1KTthQygpO2JNKCl9d2luZG93LnRvcC5zY3JvbGxUbygwLGJaKX19ZnVuY3Rpb24gYXAoKXskKCIjaG90c3BvdENvbnRhaW5lciIpLnVuYmluZCgidG91Y2hzdGFydCIpOyQoIiNob3RzcG90Q29udGFpbmVyIikudW5iaW5kKCJ0b3VjaG1vdmUiKTskKCIjaG90c3BvdENvbnRhaW5lciIpLnVuYmluZCgidG91Y2hlbmQiKTskKCIjdmlkZW9EaXYiKS51bmJpbmQoInRvdWNoc3RhcnQiKTskKCIjdmlkZW9EaXYiKS51bmJpbmQoInRvdWNobW92ZSIpOyQoIiN2aWRlb0RpdiIpLnVuYmluZCgidG91Y2hlbmQiKTthai51bmJpbmQoInRvdWNoc3RhcnQiKTskKCIjdmlkZW9TaWRlYmFyQ29udGVudCBvbCBsaSIpLmRpZSgidG91Y2hzdGFydCIpOyQoIiN2aWRlb1NpZGViYXJDb250ZW50IG9sIGxpIikuZGllKCJ0b3VjaG1vdmUiKTskKCIjdmlkZW9TaWRlYmFyQ29udGVudCBvbCBsaSIpLmRpZShiaCxTKX1mdW5jdGlvbiBlKCl7dmFyIGI2PWZhbHNlOyQoIiNob3RzcG90Q29udGFpbmVyIikuYmluZCgidG91Y2hzdGFydCIsZnVuY3Rpb24oYjcpe2I2PWZhbHNlfSk7JCgiI2hvdHNwb3RDb250YWluZXIiKS5iaW5kKCJ0b3VjaG1vdmUiLGZ1bmN0aW9uKCl7YjY9dHJ1ZX0pOyQoIiNob3RzcG90Q29udGFpbmVyIikuYmluZCgidG91Y2hlbmQiLGZ1bmN0aW9uKGI3KXtpZighYjYpe2lmKGFJKXtiTygpfWVsc2V7YmooKX19YjY9ZmFsc2V9KTskKCIjdmlkZW9EaXYiKS5iaW5kKCJ0b3VjaHN0YXJ0IixmdW5jdGlvbihiNyl7YjY9ZmFsc2V9KTskKCIjdmlkZW9EaXYiKS5iaW5kKCJ0b3VjaG1vdmUiLGZ1bmN0aW9uKCl7YjY9dHJ1ZX0pOyQoIiN2aWRlb0RpdiIpLmJpbmQoInRvdWNoZW5kIixmdW5jdGlvbigpe2lmKCFiNil7aWYoYUkpe2JPKCl9ZWxzZXtiaigpfX1iNj1mYWxzZX0pO2FqLmJpbmQoInRvdWNoc3RhcnQiLGFYKTskKCIjdmlkZW9TaWRlYmFyQ29udGVudCBvbCBsaSIpLmxpdmUoInRvdWNoc3RhcnQiLGZ1bmN0aW9uKGI3KXthSz1mYWxzZX0pOyQoIiN2aWRlb1NpZGViYXJDb250ZW50IG9sIGxpIikubGl2ZSgidG91Y2htb3ZlIixmdW5jdGlvbihiNyl7YUs9dHJ1ZX0pOyQoIiN2aWRlb1NpZGViYXJDb250ZW50IG9sIGxpIikubGl2ZShiaCxTKX1mdW5jdGlvbiBhSigpe2lmKFRTQy5wbGF5ZXJDb25maWd1cmF0aW9uLmdldEFsbG93UmV3aW5kKCkhPT0tMSl7dC5jbGljayhmdW5jdGlvbigpe2JFPWZhbHNlO3ZhciBiNj1OdW1iZXIoYVFbMF0uY3VycmVudFRpbWUpLVRTQy5wbGF5ZXJDb25maWd1cmF0aW9uLmdldEFsbG93UmV3aW5kKCk7YVFbMF0uY3VycmVudFRpbWU9TnVtYmVyKGI2KX0pfWVsc2V7dC5oaWRlKCl9Zy5jbGljayhmdW5jdGlvbigpe2lmKGFRWzBdLnBhdXNlZCl7aWYoYkUpe2FhKCl9ZWxzZXthUVswXS5wbGF5KCl9fWVsc2V7YVFbMF0ucGF1c2UoKX19KTtiZS5jbGljayhmdW5jdGlvbigpe2lmKCFUU0MubWVkaWFMaXN0Lm9uRmlyc3RWaWRlbygpKXtUU0MubWVkaWFMaXN0LnNldEN1cnJlbnRWaWRlbygicHJldmlvdXMiKTthYyhUU0MubWVkaWFMaXN0LmN1cnJlbnRWaWRlb0luZGV4KCkrMSk7SygpfX0pO0EuY2xpY2soZnVuY3Rpb24oKXtpZighVFNDLm1lZGlhTGlzdC5vbkxhc3RWaWRlbygpKXtUU0MubWVkaWFMaXN0LnNldEN1cnJlbnRWaWRlbygibmV4dCIpO2FjKFRTQy5tZWRpYUxpc3QuY3VycmVudFZpZGVvSW5kZXgoKSsxKTtLKCl9fSk7YVEuYmluZCgicGxheSIsZnVuY3Rpb24oKXtnLnJlbW92ZUNsYXNzKCJwbGF5X2J1dHRvbl9ub3JtYWwiKTtnLmFkZENsYXNzKCJwYXVzZV9idXR0b25fbm9ybWFsIil9KTthUS5iaW5kKCJwYXVzZSIsZnVuY3Rpb24oKXtnLnJlbW92ZUNsYXNzKCJwYXVzZV9idXR0b25fbm9ybWFsIik7Zy5hZGRDbGFzcygicGxheV9idXR0b25fbm9ybWFsIil9KTthUS5iaW5kKCJlbmRlZCIsZnVuY3Rpb24oKXtpZihieSl7cmV0dXJufVgoKTtpZihUU0MucGxheWVyQ29uZmlndXJhdGlvbi5nZXRHb29nbGVBbmFseXRpY3NJRCgpKXtfZ2FxLnB1c2goWyJfdHJhY2tFdmVudCIsIkhUTUw1LVZpZGVvIiwiVmlkZW9fRmluaXNoZWQiLFRTQy5tZWRpYUxpc3QuY3VycmVudFZpZGVvU3JjKCkudG9TdHJpbmcoKV0pfX0pO2suY2xpY2soZnVuY3Rpb24oKXthYSgpfSk7YkcoKTthVi5tb3VzZW92ZXIoZnVuY3Rpb24oKXtpZihhTiE9LTEpe2NsZWFyVGltZW91dChhTik7YU49LTF9YUQoKX0pO2FWLm1vdXNlb3V0KGZ1bmN0aW9uKCl7aWYoYlkubGVuZ3RoPjApe2E0LmJpbmQoIm1vdXNlZW50ZXIiLGZ1bmN0aW9uKCl7aWYoYU4hPS0xKXtjbGVhclRpbWVvdXQoYU4pO2FOPS0xfX0pO2E0LmJpbmQoIm1vdXNlbGVhdmUiLGZ1bmN0aW9uKCl7YU49c2V0VGltZW91dChmdW5jdGlvbigpe2IzKCk7YU49LTF9LDEwMDApfSk7aWYoYU4hPS0xKXtjbGVhclRpbWVvdXQoYU4pO2FOPS0xfWFOPXNldFRpbWVvdXQoZnVuY3Rpb24oKXtiMygpO2FOPS0xfSwxMDAwKX19KTthVi5jbGljayhmdW5jdGlvbigpe3ZhciBiNjtiVj0hYlY7aWYoYlYpe2JwPWFRWzBdLnZvbHVtZTtiNj0wO2JZLnNsaWRlcigidmFsdWUiLFswXSl9ZWxzZXtiNj1icDtiWS5zbGlkZXIoInZhbHVlIixbYnAqMTAwXSl9YVYucmVtb3ZlQ2xhc3MoInZvbHVtZV9idXR0b25faGlnaF9ub3JtYWwiKTthVi5yZW1vdmVDbGFzcygidm9sdW1lX2J1dHRvbl9tZWRfbm9ybWFsIik7YVYucmVtb3ZlQ2xhc3MoInZvbHVtZV9idXR0b25fbG93X25vcm1hbCIpO2FWLnJlbW92ZUNsYXNzKCJ2b2x1bWVfYnV0dG9uX25vcm1hbCIpO2FWLnJlbW92ZUNsYXNzKCJ1bm11dGVfYnV0dG9uX25vcm1hbCIpO2lmKGI2PjAuNyl7YVYuYWRkQ2xhc3MoInZvbHVtZV9idXR0b25faGlnaF9ub3JtYWwiKX1lbHNle2lmKGI2PjAuMyl7YVYuYWRkQ2xhc3MoInZvbHVtZV9idXR0b25fbWVkX25vcm1hbCIpfWVsc2V7aWYoYjY+MCl7YVYuYWRkQ2xhc3MoInZvbHVtZV9idXR0b25fbG93X25vcm1hbCIpfWVsc2V7YVYuYWRkQ2xhc3MoInVubXV0ZV9idXR0b25fbm9ybWFsIil9fX1iRihiNil9KTtpZihhZS5sZW5ndGg+MCl7YXgoYWUsImhvcml6b250YWwiKTthNC5zaG93KCl9ZWxzZXtheChiWSwidmVydGljYWwiKX1pZihUU0MueG1wLmhhc0NhcHRpb25JdGVtcygpKXtheS5jbGljayhmdW5jdGlvbigpe2FZPSFhWTtpZihhWSl7JCh0aGlzKS5yZW1vdmVDbGFzcygiY2xvc2VkX2NhcHRpb25fb2ZmX2J1dHRvbl9ub3JtYWwiKTskKHRoaXMpLmFkZENsYXNzKCJjbG9zZWRfY2FwdGlvbl9idXR0b25fbm9ybWFsIik7Ui5yZW1vdmVDbGFzcygiaGlkZSIpO2JLKCl9ZWxzZXskKHRoaXMpLnJlbW92ZUNsYXNzKCJjbG9zZWRfY2FwdGlvbl9idXR0b25fbm9ybWFsIik7JCh0aGlzKS5hZGRDbGFzcygiY2xvc2VkX2NhcHRpb25fb2ZmX2J1dHRvbl9ub3JtYWwiKTtSLmFkZENsYXNzKCJoaWRlIil9fSl9YXIuY2xpY2soZnVuY3Rpb24oKXtpZihicSl7YVMoKX1lbHNle2lmKCFhRyl7dmFyIGI2PWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJ2aWRlb1dyYXBwZXIiKTtpZihUU0MuZGV2aWNlSW5mby5zdXBwb3J0c0Z1bGxTY3JlZW5LZXlib2FyZElucHV0KCkpe2I2LndlYmtpdFJlcXVlc3RGdWxsU2NyZWVuKEVsZW1lbnQuQUxMT1dfS0VZQk9BUkRfSU5QVVQpfWVsc2V7aWYoYnUmJlRTQy5wbGF5ZXJDb25maWd1cmF0aW9uLmdldElzU2VhcmNoYWJsZSgpKXskKCIjc2VhcmNoQXJlYSIpLmhpZGUoKTskKCIjdmlkZW9TaWRlYmFySGVhZCIpLmFwcGVuZCgiPGRpdiBpZD0nZnNTZWFyY2hBbGVydCc+U2VhcmNoIGlzIGRpc2FibGVkIGluIGZ1bGxzY3JlZW4gbW9kZS48L2Rpdj4iKX1iNi53ZWJraXRSZXF1ZXN0RnVsbFNjcmVlbigpfX1lbHNle2lmKFRTQy5wbGF5ZXJDb25maWd1cmF0aW9uLmdldElzU2VhcmNoYWJsZSgpKXthdSgpfWRvY3VtZW50LndlYmtpdENhbmNlbEZ1bGxTY3JlZW4oKX19fSk7aWYoYnUpe08uY2xpY2soZnVuY3Rpb24oKXtidD0hYnQ7aWYoYnQpeyQodGhpcykucmVtb3ZlQ2xhc3MoInRvY19vZmZfYnV0dG9uX25vcm1hbCIpOyQodGhpcykuYWRkQ2xhc3MoInRvY19idXR0b25fbm9ybWFsIil9ZWxzZXskKHRoaXMpLnJlbW92ZUNsYXNzKCJ0b2NfYnV0dG9uX25vcm1hbCIpOyQodGhpcykuYWRkQ2xhc3MoInRvY19vZmZfYnV0dG9uX25vcm1hbCIpfWlmKGJYLmNzcygiZGlzcGxheSIpPT09Im5vbmUiKXthcSh0cnVlKTtVKCl9ZWxzZXthcShmYWxzZSl9fSk7aWYoVFNDLnBsYXllckNvbmZpZ3VyYXRpb24uZ2V0U2lkZWJhckVuYWJsZWQoKSl7YnQ9dHJ1ZTtPLnJlbW92ZUNsYXNzKCJ0b2Nfb2ZmX2J1dHRvbl9ub3JtYWwiKTtPLmFkZENsYXNzKCJ0b2NfYnV0dG9uX25vcm1hbCIpO2FxKHRydWUpfWVsc2V7Ty5yZW1vdmVDbGFzcygidG9jX2J1dHRvbl9ub3JtYWwiKTtPLmFkZENsYXNzKCJ0b2Nfb2ZmX2J1dHRvbl9ub3JtYWwiKX19aWYoVFNDLmRldmljZUluZm8uaXNJUGFkKCl8fFRTQy5kZXZpY2VJbmZvLmlzQW5kcm9pZCgpKXskKCJ0ZXh0YXJlYSIpLmxpdmUoImJsdXIiLGZ1bmN0aW9uKCl7YkQ9ZmFsc2U7ZSgpO2lmKGJkKXtiYigpfX0pOyQoInRleHRhcmVhIikubGl2ZSgiZm9jdXMiLGZ1bmN0aW9uKCl7YkQ9dHJ1ZTthcCgpO2lmKGJkKXthQygpfX0pOyQoImlucHV0OnRleHQiKS5saXZlKCJibHVyIixmdW5jdGlvbigpe2JEPWZhbHNlO2UoKTtpZihiZCl7YmIoKX19KTskKCJpbnB1dDp0ZXh0IikubGl2ZSgiZm9jdXMiLGZ1bmN0aW9uKCl7YkQ9dHJ1ZTthcCgpO2lmKGJkKXthQygpfX0pO3dpbmRvdy5wYXJlbnQub25vcmllbnRhdGlvbmNoYW5nZT1mdW5jdGlvbigpe2lmKGJkKXtpZihQKXskKCIjc2VhcmNoQm94IikuYmx1cigpO3NldFRpbWVvdXQoYW4sNTAwKX1lbHNle2FuKCl9fX19ZWxzZXt6KCl9aWYoVFNDLnBsYXllckNvbmZpZ3VyYXRpb24uZ2V0RGlzYWJsZUNvbnRyb2xzKCkpe2JqKCl9fWZ1bmN0aW9uIGFhKCl7aWYoIVRTQy5kZXZpY2VJbmZvLmlzVG91Y2hJbnRlcmZhY2UoKSYmVFNDLnBsYXllckNvbmZpZ3VyYXRpb24uZ2V0QXV0b0hpZGVDb250cm9scygpKXthZigpfWVsc2V7Yk8oKX1iNSgwLHRydWUpO2lmKFRTQy5wbGF5ZXJDb25maWd1cmF0aW9uLmdldEdvb2dsZUFuYWx5dGljc0lEKCkpe19nYXEucHVzaChbIl90cmFja0V2ZW50IiwiSFRNTDUtVmlkZW8iLCJWaWRlb19SZXBsYXkiLFRTQy5tZWRpYUxpc3QuY3VycmVudFZpZGVvU3JjKCkudG9TdHJpbmcoKV0pfX1mdW5jdGlvbiB5KCl7aWYod2luZG93LnBhcmVudC5zY3JvbGxYPjB8fHdpbmRvdy5wYXJlbnQuc2Nyb2xsWT4wKXtpZihiRCl7d2luZG93LnBhcmVudC5zY3JvbGxUbygwLHdpbmRvdy5wYXJlbnQuc2Nyb2xsWSl9ZWxzZXt2YXIgYjY9d2luZG93LnBhcmVudC5zY3JvbGxZLTUwO2I2PDA/MDpiNjt3aW5kb3cucGFyZW50LnNjcm9sbFRvKDAsYjYpfX1hNT1zZXRUaW1lb3V0KHksMTApfWZ1bmN0aW9uIGFDKCl7JChkb2N1bWVudCkudW5iaW5kKCJ0b3VjaG1vdmUiKTskKGRvY3VtZW50KS51bmJpbmQoImdlc3R1cmVzdGFydCIpOyQod2luZG93LnBhcmVudCkudW5iaW5kKCJnZXN0dXJlc3RhcnQiKTskKGRvY3VtZW50KS51bmJpbmQoImdlc3R1cmVlbmQiKTskKHdpbmRvdy5wYXJlbnQpLnVuYmluZCgiZ2VzdHVyZWVuZCIpfWZ1bmN0aW9uIGJiKCl7JChkb2N1bWVudCkuYmluZCgidG91Y2htb3ZlIixmdW5jdGlvbihiNil7aWYoISgoJC5jb250YWlucyhia1swXSxiNi50YXJnZXQpKXx8KFRTQy54bXAuaGFzUXVpeigpJiZUU0MucXVpekNvbnRyb2xsZXIucXVpekVuYWJsZWQoKSYmVFNDLnF1aXpDb250cm9sbGVyLnZpZXdPcGVuKCkpKSl7YjYucHJldmVudERlZmF1bHQoKX19KTskKGRvY3VtZW50KS5iaW5kKCJnZXN0dXJlc3RhcnQiLGZ1bmN0aW9uKGI2KXtiNi5wcmV2ZW50RGVmYXVsdCgpfSk7JCh3aW5kb3cucGFyZW50KS5iaW5kKCJnZXN0dXJlc3RhcnQiLGZ1bmN0aW9uKGI2KXtiNi5wcmV2ZW50RGVmYXVsdCgpfSk7JChkb2N1bWVudCkuYmluZCgiZ2VzdHVyZWVuZCIsZnVuY3Rpb24oYjYpe2FTKCl9KTskKHdpbmRvdy5wYXJlbnQpLmJpbmQoImdlc3R1cmVlbmQiLGZ1bmN0aW9uKGI2KXthUygpfSl9ZnVuY3Rpb24gYVIoKXt5KCk7YmIoKTthby5yZW1vdmVDbGFzcygidHNjcGxheWVyX2lubGluZSIpO2FvLmF0dHIoIndpZHRoIix3aW5kb3cucGFyZW50LmlubmVyV2lkdGgpO2FvLmF0dHIoImhlaWdodCIsd2luZG93LnBhcmVudC5pbm5lckhlaWdodCk7YW8uYWRkQ2xhc3MoInRzY3BsYXllcl9mdWxsZnJhbWUiKTtiTSgpfWZ1bmN0aW9uIGFuKCl7aWYod2luZG93IT13aW5kb3cudG9wKXt3aW5kb3cucGFyZW50LnNjcm9sbFRvKDAsMCl9ZWxzZXt3aW5kb3cuc2Nyb2xsVG8oMCwwKX1hby5hdHRyKCJ3aWR0aCIsd2luZG93LnBhcmVudC5pbm5lcldpZHRoKTthby5hdHRyKCJoZWlnaHQiLHdpbmRvdy5wYXJlbnQuaW5uZXJIZWlnaHQpO2JNKCl9ZnVuY3Rpb24gYWYoKXtpZihUU0MuZGV2aWNlSW5mby5pc1RvdWNoSW50ZXJmYWNlKCkpe3JldHVybn0kKGJtKS5ob3ZlcihiTyxiaik7dmFyIGI2PW51bGw7JChibSkuYmluZCgibW91c2Vtb3ZlIixmdW5jdGlvbihiNyl7aWYoYjY9PW51bGx8fChiNi5wYWdlWCE9YjcucGFnZVgmJmI2LnBhZ2VZIT1iNy5wYWdlWSkpe2I2PWI3O2JPKHRydWUpfX0pO2JpKCl9ZnVuY3Rpb24gYUYoKXt3aW5kb3cuY2xlYXJUaW1lb3V0KGFoKTskKGJtKS51bmJpbmQoIm1vdXNlbW92ZSIpOyQoYm0pLnVuYmluZCgibW91c2VlbnRlciBtb3VzZWxlYXZlIil9ZnVuY3Rpb24gYmooKXt3KGZhbHNlKTtpZihQfHxieSl7cmV0dXJufWFJPXRydWU7aS5zdG9wKHRydWUsdHJ1ZSk7aS5mYWRlT3V0KHApO2lmKGJ0KXtiWC5zdG9wKHRydWUsdHJ1ZSk7YlguZmFkZU91dChwKX1pZihhTiE9PS0xKXtiMygpfX1mdW5jdGlvbiBiTyhiNil7aWYoVFNDLnBsYXllckNvbmZpZ3VyYXRpb24uZ2V0RGlzYWJsZUNvbnRyb2xzKCkpe3JldHVybn1pZihhSSl7YUk9ZmFsc2U7aS5zdG9wKHRydWUsdHJ1ZSk7aS5mYWRlSW4ocCk7aWYoYnQpe2JYLnN0b3AodHJ1ZSx0cnVlKTtiWC5mYWRlSW4ocCl9ZWxzZXt3KHRydWUpfWlmKGI2KXtGKCl9aWYoYmcpe2JnPWZhbHNlO2JNKCl9fWlmKGI2KXtiaSgpfX1mdW5jdGlvbiB3KGI2KXtpZihUU0MuZGV2aWNlSW5mby5pc051ZXZvQXBwKCkpe2lmKGI2KXtkb2N1bWVudC5sb2NhdGlvbj0ibnVldm86Ly9zaG93bmF2YmFyIn1lbHNle2RvY3VtZW50LmxvY2F0aW9uPSJudWV2bzovL2hpZGVuYXZiYXIifX19ZnVuY3Rpb24gYTYoKXtpZihUU0MuZGV2aWNlSW5mby5pc051ZXZvQXBwKCkpe3ZhciBiNj1kb2N1bWVudC5sb2NhdGlvbjtkb2N1bWVudC5sb2NhdGlvbj0ibnVldm86Ly9oYXNQbGF5ZWRUb0VuZD91cmw9IitiNn19ZnVuY3Rpb24gYmkoKXt3aW5kb3cuY2xlYXJUaW1lb3V0KGFoKTthaD13aW5kb3cuc2V0VGltZW91dChiaix4KX1mdW5jdGlvbiBHKGI4KXt2YXIgY2E9VFNDLnhtcC5nZXRIb3RzcG90SXRlbUFycmF5KCk7dmFyIGI2PU51bWJlcigkKGI4LnRhcmdldCkuYXR0cigiaG90c3BvdF9pbmRleCIpKTtpZihjYVtiNl0uanVtcEZpbGUhPT11bmRlZmluZWQpe3ZhciBiOT1UU0MubWVkaWFMaXN0LmdldFZpZGVvSW5kZXhCeVNyYyhjYVtiNl0uanVtcEZpbGUpO1RTQy5tZWRpYUxpc3Quc2V0Q3VycmVudFZpZGVvKGI5KTthYyhUU0MubWVkaWFMaXN0LmN1cnJlbnRWaWRlb0luZGV4KCkrMSk7SygpfWVsc2V7aWYoY2FbYjZdLmp1bXBUaW1lIT09IiIpe2JFPWZhbHNlO2JjKCk7YVFbMF0uY3VycmVudFRpbWU9TnVtYmVyKGNhW2I2XS5qdW1wVGltZSk7YVFbMF0ucGxheSgpfWVsc2V7aWYoY2FbYjZdLnRhcmdldFVSTCE9PSIiKXtpZihUU0MucGxheWVyQ29uZmlndXJhdGlvbi5nZXRHb29nbGVBbmFseXRpY3NJRCgpKXtfZ2FxLnB1c2goWyJfdHJhY2tFdmVudCIsIkhUTUw1LVZpZGVvIiwiSG90c3BvdF9BY3Rpb24iLGNhW2I2XS50YXJnZXRVUkxdKX12YXIgYjc9Il9wYXJlbnQiO2lmKGNhW2I2XS5uZXdXaW5kb3chPT11bmRlZmluZWQmJmNhW2I2XS5uZXdXaW5kb3c9PT10cnVlKXtiNz0iX2JsYW5rIn13aW5kb3cub3BlbihjYVtiNl0udGFyZ2V0VVJMLGI3KX1lbHNle2FRWzBdLnBsYXkoKX19fX1mdW5jdGlvbiBEKCl7dmFyIGI2PU1hdGgucm91bmQoTnVtYmVyKFRTQy54bXAuZ2V0Q2FwdGlvbkZvbnRTaXplKCkpKmF3KTtiNj1iNjxUU0MueG1wLmdldE1pbkNhcHRpb25Gb250U2l6ZSgpP1RTQy54bXAuZ2V0TWluQ2FwdGlvbkZvbnRTaXplKCk6YjY7YjY9YjY+VFNDLnhtcC5nZXRNYXhDYXB0aW9uRm9udFNpemUoKT9UU0MueG1wLmdldE1heENhcHRpb25Gb250U2l6ZSgpOmI2OyQoIiNjdXJyZW50Q2FwdGlvbiIpLmNzcygiZm9udC1zaXplIixiNil9ZnVuY3Rpb24gYlIoKXtpZihUU0MudmlkZW9BbmFseXRpY3MuaXNFbmFibGVkKCkpe1RTQy52aWRlb0FuYWx5dGljcy5zZXRWaWRlb0xvYWRFbmRUaW1lKG5ldyBEYXRlKCkuZ2V0VGltZSgpKTtpZihUU0MucGxheWVyQ29uZmlndXJhdGlvbi5nZXRHb29nbGVBbmFseXRpY3NJRCgpKXtfZ2FxLnB1c2goWyJfdHJhY2tFdmVudCIsIkhUTUw1LVZpZGVvIiwiVmlkZW9fTG9hZGluZ19UaW1lIixUU0MubWVkaWFMaXN0LmN1cnJlbnRWaWRlb1NyYygpLnRvU3RyaW5nKCksVFNDLnZpZGVvQW5hbHl0aWNzLmdldFZpZGVvTG9hZFRpbWUoKV0pfX1hYj10cnVlfWZ1bmN0aW9uIHMoKXtpZihUU0MueG1wLmhhc0hvdHNwb3RJdGVtcygpKXtpZihUU0MucGxheWVyQ29uZmlndXJhdGlvbi5nZXREZWJ1Z0hvdHNwb3QoKSl7JCgiI2hvdHNwb3RDb250YWluZXJEZWJ1ZyIpLmNzcygiZGlzcGxheSIsImJsb2NrIil9fWlmKFRTQy54bXAuaGFzQ2FwdGlvbkl0ZW1zKCkpeyQoIiNjdXJyZW50Q2FwdGlvbiIpLmNzcygiZm9udC1mYW1pbHkiLFRTQy54bXAuZ2V0Q2FwdGlvbkZvbnRGYW1pbHkoKSk7JCgiI2N1cnJlbnRDYXB0aW9uIikuY3NzKCJjb2xvciIsVFNDLnhtcC5nZXRDYXB0aW9uVGV4dENvbG9yKCkpO0QoKTthWT1UU0MucGxheWVyQ29uZmlndXJhdGlvbi5nZXRDYXB0aW9uc0VuYWJsZWQoKX1pZihUU0MucGxheWVyQ29uZmlndXJhdGlvbi5nZXRHb29nbGVBbmFseXRpY3NJRCgpfHxUU0MueG1wLmhhc0NhcHRpb25JdGVtcygpfHxUU0MueG1wLmhhc0hvdHNwb3RJdGVtcygpfHwoVFNDLnhtcC5oYXNRdWl6KCkmJlRTQy5xdWl6Q29udHJvbGxlci5xdWl6RW5hYmxlZCgpKXx8VFNDLnBsYXllckNvbmZpZ3VyYXRpb24uZ2V0UmVwb3J0U2Nvcm1Db21wbGV0ZSgpKXthUS5iaW5kKCJ0aW1ldXBkYXRlIixYKX1hUS5iaW5kKCJjYW5wbGF5IixiUil9ZnVuY3Rpb24gYncoYjYsY2IsY2EsY2QsYjkpe2lmKCFjYSl7Y2E9VFNDLnBsYXllckNvbmZpZ3VyYXRpb24uZ2V0UGxheWVyV2lkdGgoKX1pZighY2Qpe2NkPVRTQy5wbGF5ZXJDb25maWd1cmF0aW9uLmdldFBsYXllckhlaWdodCgpfWlmKCFiOSl7Yjk9ZmFsc2V9dmFyIGI4PSc8dmlkZW8gd2lkdGg9IicrY2ErJyIgaGVpZ2h0PSInK2NkKyciJztpZihiOSYmVFNDLnBsYXllckNvbmZpZ3VyYXRpb24uZ2V0UG9zdGVySW1hZ2VTcmMoKSl7YjgrPScgcG9zdGVyPSInK1RTQy5wbGF5ZXJDb25maWd1cmF0aW9uLmdldFBvc3RlckltYWdlU3JjKCkrJyInfWlmKGNiKXtiOCs9IiBjb250cm9scyJ9aWYoVFNDLmRldmljZUluZm8uaXNOdWV2b0FwcCgpKXtiOCs9IiB3ZWJraXQtcGxheXNpbmxpbmUifWI4Kz0iPiI7dmFyIGNjPWI2Lmxlbmd0aDtmb3IodmFyIGI3PTA7Yjc8Y2M7YjcrKyl7YjgrPSc8c291cmNlIHNyYz0iJytiNltiN10rJyIgdHlwZT0iJytUU0MubWVkaWFMaXN0LmdldE1lZGlhTWltZVR5cGUoYjZbYjddKSsnIiAvPid9YjgrPVRTQy5wbGF5ZXJDb25maWd1cmF0aW9uLmdldFVuYWJsZVRvRGlzcGxheUNvbnRlbnRTdHJpbmcoKSsiPC92aWRlbz4iO3JldHVybiBiOH1mdW5jdGlvbiBiUShiNyl7aWYoaC52aWV3T3BlbigpKXtoLnNldFZpZXdNZXNzYWdlKGI3KX1lbHNle3ZhciBiNj1oLmdldFZpZXdNYXJrdXAoYjcpOyQoYm0pLmFwcGVuZChiNik7aC5zaG93VmlldygpfX1mdW5jdGlvbiBUKCl7aWYoaC52aWV3T3BlbigpKXtoLnJlbW92ZVZpZXcoKX19ZnVuY3Rpb24gYVUoKXskKCIjdmlkZW9DbGlja1RvUGxheSIpLmhpZGUoKTtUU0MucXVpekNvbnRyb2xsZXIuaW5pdChUU0MucGxheWVyQ29uZmlndXJhdGlvbi5nZXRFbmZvcmNlTGluZWFyQXNzZXNzbWVudCgpKX1mdW5jdGlvbiBhOSgpe3ZhciBiNz1idyhUU0MubWVkaWFMaXN0LmN1cnJlbnRWaWRlb1NyYygpLGZhbHNlKTskKCIjdmlkZW9EaXYiKS5odG1sKGI3KTthUT0kKCJ2aWRlbyIpO2FRWzBdLmFkZEV2ZW50TGlzdGVuZXIoImxvYWRlZG1ldGFkYXRhIixCLGZhbHNlKTtpZihUU0MucGxheWVyQ29uZmlndXJhdGlvbi5nZXRQb3N0ZXJJbWFnZVNyYygpKXthMigpfSQoIiN2aWRlb0NsaWNrVG9QbGF5IikuaGlkZSgpOyQoIiN2aWRlb1dyYXBwZXIiKS5zaG93KCk7cygpO2FKKCk7aWYoYnUpe2E3KCl9aWYoVFNDLnhtcC5oYXNRdWl6KCkmJlRTQy5xdWl6Q29udHJvbGxlci5xdWl6RW5hYmxlZCgpKXt2YXIgYjY9JCgiPGRpdi8+Iik7YjYuYWRkQ2xhc3MoInF1aXpNYXJrZXIiKTskKGJtKS5hcHBlbmQoYjYpO1RTQy5xdWl6TWFya2VyLnNldFNpemUoJCgiLnF1aXpNYXJrZXIiKS5jc3MoIndpZHRoIikucmVwbGFjZSgvcHgvZywiIikpO1RTQy5xdWl6TWFya2VyLnNldENvbG9yKCQoIi5xdWl6TWFya2VyIikuY3NzKCJjb2xvciIpKTskKCIjbWFya2VycyIpLnNob3coKX1iZz10cnVlO2JNKCk7aWYoYjQpe2I0LmNhbGwoKX1pZihUU0MuZGV2aWNlSW5mby5pc1RvdWNoSW50ZXJmYWNlKCkpe2UoKX1lbHNle2lmKFRTQy5wbGF5ZXJDb25maWd1cmF0aW9uLmdldEF1dG9IaWRlQ29udHJvbHMoKSl7YWYoKX19aS5oaWRlKCk7YlEoIlBsZWFzZSB3YWl0Li4uIHRoZSB2aWRlbyBpcyBsb2FkaW5nLiIpO0soKX1mdW5jdGlvbiBLKCl7Yk49ZmFsc2U7YkU9ZmFsc2U7aWYoVFNDLm1lZGlhTGlzdC5pc1BsYXlsaXN0KCkpe2lmKFRTQy5tZWRpYUxpc3Qub25GaXJzdFZpZGVvKCkpe2JlLnJlbW92ZUNsYXNzKCJwcmV2aW91c19idXR0b25fbm9ybWFsIik7YmUuYWRkQ2xhc3MoInByZXZpb3VzX2J1dHRvbl9kaXNhYmxlZCIpfWVsc2V7YmUuYWRkQ2xhc3MoInByZXZpb3VzX2J1dHRvbl9ub3JtYWwiKTtiZS5yZW1vdmVDbGFzcygicHJldmlvdXNfYnV0dG9uX2Rpc2FibGVkIil9aWYoVFNDLm1lZGlhTGlzdC5vbkxhc3RWaWRlbygpKXtBLnJlbW92ZUNsYXNzKCJuZXh0X2J1dHRvbl9ub3JtYWwiKTtBLmFkZENsYXNzKCJuZXh0X2J1dHRvbl9kaXNhYmxlZCIpfWVsc2V7QS5hZGRDbGFzcygibmV4dF9idXR0b25fbm9ybWFsIik7QS5yZW1vdmVDbGFzcygibmV4dF9idXR0b25fZGlzYWJsZWQiKX1pZihUU0MudmlkZW9BbmFseXRpY3MuaXNFbmFibGVkKCkpe1RTQy52aWRlb0FuYWx5dGljcy5jbGVhclBlcmNlbnRXYXRjaGVkKCk7YUI9MH1hUVswXS5zcmM9VFNDLm1lZGlhTGlzdC5jdXJyZW50VmlkZW9TcmMoKX1pZihUU0MuZGV2aWNlSW5mby5pc0lQYWQoKXx8VFNDLmRldmljZUluZm8uaXNBbmRyb2lkKCkpe2FRWzBdLnBsYXkoKX1lbHNle2FRWzBdLmxvYWQoKTthUVswXS5wbGF5KCl9aWYoVFNDLnZpZGVvQW5hbHl0aWNzLmlzRW5hYmxlZCgpKXtUU0MudmlkZW9BbmFseXRpY3Muc2V0VmlkZW9Mb2FkU3RhcnRUaW1lKG5ldyBEYXRlKCkuZ2V0VGltZSgpKX1pZihUU0MucGxheWVyQ29uZmlndXJhdGlvbi5nZXRHb29nbGVBbmFseXRpY3NJRCgpJiZXKXtXPWZhbHNlO19nYXEucHVzaChbIl90cmFja0V2ZW50IiwiSFRNTDUtVmlkZW8iLCJWaWRlb19TdGFydGVkIixUU0MubWVkaWFMaXN0LmN1cnJlbnRWaWRlb1NyYygpLnRvU3RyaW5nKCldKTtfZ2FxLnB1c2goWyJfdHJhY2tFdmVudCIsIkhUTUw1LVZpZGVvIiwiVmlkZW9fUGVyY2VudF9WaWV3ZWQiLCJWaWV3ZWQ6IDAgUGVyY2VudCJdKX19ZnVuY3Rpb24gYkgoYjcpe3N3aXRjaChiNy50eXBlKXtjYXNlIkNPTVBMRVRFIjpjYXNlIlJFVklFVyI6aWYoYlgmJmJ0KXthcSh0cnVlKX1lbHNle3codHJ1ZSl9aWYoIVRTQy5kZXZpY2VJbmZvLmlzVG91Y2hJbnRlcmZhY2UoKSl7eigpO2lmKFRTQy5wbGF5ZXJDb25maWd1cmF0aW9uLmdldEF1dG9IaWRlQ29udHJvbHMoKSl7YWYoKX19YWsoKTtpZihiNy50eXBlPT09IlJFVklFVyImJlRTQy5wbGF5ZXJDb25maWd1cmF0aW9uLmdldEVuZm9yY2VMaW5lYXJBc3Nlc3NtZW50KCkpe3ZhciBiNj1UU0MucXVpekNvbnRyb2xsZXIuZmluZFByZXZNYXJrZXJUaW1lRm9yTWFya2VyKGFXKTthVz0tMTthUVswXS5jdXJyZW50VGltZT1iNi8xMDAwO2FRWzBdLnBsYXkoKX1lbHNle2FRWzBdLnBsYXkoKX1icmVhaztjYXNlIkJFR0lOIjpjYXNlIlNLSVAiOlRTQy5xdWl6Q29udHJvbGxlci5zZXRWaWV3Q29udGFpbmVyKCIjdmlkZW9XcmFwcGVyIik7JCgiI3ZpZGVvQ2xpY2tUb1BsYXlMaW5rIikudW5iaW5kKCJjbGljayIsYVUpO2lmKCFhUSl7YTkoKX1lbHNle2lmKGJhJiZUU0MucXVpekNvbnRyb2xsZXIuZ2V0UXVpelJlYWR5KCkpe1QoKTthUVswXS5wbGF5KCk7aWYoIVRTQy5wbGF5ZXJDb25maWd1cmF0aW9uLmdldERpc2FibGVDb250cm9scygpKXtpLnNob3coKX1iZz10cnVlO2JNKCl9fWJyZWFrO2Nhc2UiRVJST1IiOmlmKCFhUSl7YTkoKX1JKCIjdmlkZW9XcmFwcGVyIixUU0MucXVpelVpU3RyaW5ncy5nZXRFcnJvck1lc3NhZ2UoKSx0cnVlKTticmVhaztjYXNlIlNUQVRVUyI6YlEoYjcubWVzc2FnZSk7YnJlYWt9fWZ1bmN0aW9uIFYoYjgsYjYpe2JtPWI4O2J1PWI2OyQoYm0pLmh0bWwoYkIpOyQoYm0pLmNzcygiYmFja2dyb3VuZC1jb2xvciIsVFNDLnBsYXllckNvbmZpZ3VyYXRpb24uZ2V0QmFja2dyb3VuZENvbG9yKCkpO2lmKFRTQy5wbGF5ZXJDb25maWd1cmF0aW9uLmdldFBvc3RlckltYWdlU3JjKCkpe2YoVFNDLnBsYXllckNvbmZpZ3VyYXRpb24uZ2V0UG9zdGVySW1hZ2VTcmMoKSl9JChibSkuZmFkZUluKHApOyQoIiN2aWRlb0NsaWNrVG9QbGF5IikuZmFkZUluKHApO3Q9JCgiI3Jld2luZCIpO2c9JCgiI3BsYXkiKTtiZT0kKCIjcHJldmlvdXMiKTtBPSQoIiNuZXh0Iik7YkE9JCgiI3Byb2dyZXNzIik7YWo9JCgiI3Byb2dyZXNzX2JveCIpO2k9JCgiI2NvbnRyb2xzIik7TT0kKCIjcGxheV9wcm9ncmVzcyIpO289JCgiI2N1cnJlbnRfdGltZV9kaXNwbGF5Iik7YTE9JCgiI2R1cmF0aW9uX2Rpc3BsYXkiKTtiWD0kKCIjdmlkZW9TaWRlYmFyIik7YVY9JCgiI3ZvbHVtZSIpO1I9JCgiI2N1cnJlbnRDYXB0aW9uIik7YXk9JCgiI2Nsb3NlZENhcHRpb25CdXR0b24iKTtiVT0kKCIjdmlkZW9XcmFwcGVyIik7az0kKCIjdmlkZW9DbGlja1RvUmVwbGF5Iik7Qz0kKCIjc2VhcmNoQm94Iik7Ym89JCgiI2NsZWFyU2VhcmNoQnV0dG9uIik7Yms9JCgiI3RhYmxlT2ZDb250ZW50c0xpc3QiKTthcj0kKCIjZnVsbHNjcmVlbl9lbnRlcl9idXR0b24iKTtPPSQoIiN0b2NCdXR0b24iKTtiWT0kKCIjdm9sdW1lX3NsaWRlcl92ZXJ0aWNhbCIpO2FlPSQoIiN2b2x1bWVfc2xpZGVyX2hvcml6b250YWwiKTthND0kKCIjdm9sdW1lX3NsaWRlcl9jb250YWluZXIiKTtMPSQoIiNzY3J1YmJhcl9zY3J1YmJlciIpO2lmKFRTQy5kZXZpY2VJbmZvLmlzSVBhZCgpfHxUU0MuZGV2aWNlSW5mby5pc0FuZHJvaWQoKSl7YVYuaGlkZSgpO2FyLmhpZGUoKX1pZihidSl7Ty5zaG93KCl9aWYoVFNDLnhtcC5oYXNDYXB0aW9uSXRlbXMoKSl7YXkuc2hvdygpfWlmKCFUU0MubWVkaWFMaXN0LmlzUGxheWxpc3QoKSl7YmUuaGlkZSgpO0EuaGlkZSgpfWJNKCk7JCh3aW5kb3cpLnJlc2l6ZShmdW5jdGlvbigpe2JnPXRydWU7Yk0oKX0pO0MuZm9jdXMoZnVuY3Rpb24oKXtQPXRydWU7aWYoQy52YWwoKT09IlNlYXJjaC4uLiIpe0MudmFsKCIiKX1pZighVFNDLmRldmljZUluZm8uaXNUb3VjaEludGVyZmFjZSgpKXtxKCk7d2luZG93LmNsZWFyVGltZW91dChhaCl9fSk7Qy5ibHVyKGZ1bmN0aW9uKCl7UD1mYWxzZTtpZihDLnZhbCgpLnJlcGxhY2UoLyAvZywiIik9PT0iIil7Qy52YWwoIlNlYXJjaC4uLiIpfWlmKCFUU0MuZGV2aWNlSW5mby5pc1RvdWNoSW50ZXJmYWNlKCkpe3ooKTtpZihUU0MucGxheWVyQ29uZmlndXJhdGlvbi5nZXRBdXRvSGlkZUNvbnRyb2xzKCkpe2JpKCl9fX0pO3ZhciBiNz1UU0MuZGV2aWNlSW5mby5pc0lQYWQoKSYmIVRTQy5kZXZpY2VJbmZvLmlzTnVldm9BcHAoKTtpZigoYjd8fFRTQy5kZXZpY2VJbmZvLmlzQW5kcm9pZCgpfHwoVFNDLnhtcC5oYXNRdWl6KCkmJlRTQy5xdWl6Q29udHJvbGxlci5xdWl6RW5hYmxlZCgpKSkmJiFUU0MucGxheWVyQ29uZmlndXJhdGlvbi5nZXRNb2JpbGVXZWJWaWV3Q2FuQXV0b1BsYXkoKSl7VFNDLnBsYXllckNvbmZpZ3VyYXRpb24uc2V0QXV0b1BsYXlNZWRpYShmYWxzZSl9aWYoVFNDLnBsYXllckNvbmZpZ3VyYXRpb24uZ2V0QXV0b1BsYXlNZWRpYSgpPT09dHJ1ZSl7c2V0VGltZW91dChhOSw4MCl9ZWxzZXtpZihUU0MueG1wLmhhc1F1aXooKSYmVFNDLnF1aXpDb250cm9sbGVyLnF1aXpFbmFibGVkKCkpeyQoIiN2aWRlb0NsaWNrVG9QbGF5TGluayIpLmJpbmQoImNsaWNrIixhVSl9ZWxzZXskKCIjdmlkZW9DbGlja1RvUGxheUxpbmsiKS5iaW5kKCJjbGljayIsYTkpfX1pZihUU0MueG1wLmhhc1F1aXooKSYmVFNDLnF1aXpDb250cm9sbGVyLnF1aXpFbmFibGVkKCkpe1RTQy5xdWl6Q29udHJvbGxlci5zZXRWaWV3Q29udGFpbmVyKGJtKTtUU0MucXVpekNvbnRyb2xsZXIuc2V0UXVlc3Rpb25EYXRhKFRTQy5xdWl6TW9kZWwpO1RTQy5xdWl6Q29udHJvbGxlci5zZXRWaWV3Q29udHJvbEJhck9mZnNldChpLmhlaWdodCgpKTtUU0MucXVpekNvbnRyb2xsZXIuYWRkRXZlbnRMaXN0ZW5lcigiQ09NUExFVEUiLGJIKTtUU0MucXVpekNvbnRyb2xsZXIuYWRkRXZlbnRMaXN0ZW5lcigiUkVWSUVXIixiSCk7VFNDLnF1aXpDb250cm9sbGVyLmFkZEV2ZW50TGlzdGVuZXIoIkJFR0lOIixiSCk7VFNDLnF1aXpDb250cm9sbGVyLmFkZEV2ZW50TGlzdGVuZXIoIlNLSVAiLGJIKTtUU0MucXVpekNvbnRyb2xsZXIuYWRkRXZlbnRMaXN0ZW5lcigiRVJST1IiLGJIKTtUU0MucXVpekNvbnRyb2xsZXIuYWRkRXZlbnRMaXN0ZW5lcigiU1RBVFVTIixiSCl9aWYoVFNDLnBsYXllckNvbmZpZ3VyYXRpb24uZ2V0R29vZ2xlQW5hbHl0aWNzSUQoKXx8VFNDLnBsYXllckNvbmZpZ3VyYXRpb24uZ2V0UmVwb3J0U2Nvcm1Db21wbGV0ZSgpfHwoVFNDLnhtcC5oYXNRdWl6KCkmJlRTQy5xdWl6Q29udHJvbGxlci5xdWl6RW5hYmxlZCgpKSl7VFNDLnZpZGVvQW5hbHl0aWNzLnNldEVuYWJsZWQodHJ1ZSk7aWYoVFNDLnhtcC54bXBBdmFpbGFibGUoKSl7VFNDLnZpZGVvQW5hbHl0aWNzLmluaXRQZXJjZW50V2F0Y2hlZChUU0MueG1wLmdldE1lZGlhRHVyYXRpb24oKSl9fUU9dHJ1ZX1mdW5jdGlvbiBhTShjYSl7dmFyIGI2PXt9O2I2LnNyYz1UU0MucGxheWVyQ29uZmlndXJhdGlvbi5nZXRVbmljb2RlU2FmZVN0cmluZyhUU0MucGxheWVyQ29uZmlndXJhdGlvbi5nZXRNZWRpYVNyYygpKTtpZihUU0MucGxheWVyQ29uZmlndXJhdGlvbi5nZXRYTVBTcmMoKSl7YjYueG1wPVRTQy5wbGF5ZXJDb25maWd1cmF0aW9uLmdldFhNUFNyYygpfWlmKFRTQy5wbGF5ZXJDb25maWd1cmF0aW9uLmdldEF1dG9QbGF5TWVkaWEoKSl7YjYuYXV0b1BsYXlKUz1UU0MucGxheWVyQ29uZmlndXJhdGlvbi5nZXRBdXRvUGxheU1lZGlhKCl9aWYoVFNDLnBsYXllckNvbmZpZ3VyYXRpb24uZ2V0QWxsb3dSZXdpbmQoKSE9PS0xKXtiNi5hbGxvd1Jld2luZD1UU0MucGxheWVyQ29uZmlndXJhdGlvbi5nZXRBbGxvd1Jld2luZCgpfWlmKFRTQy5wbGF5ZXJDb25maWd1cmF0aW9uLmdldENvbmZpZ3VyYXRpb25TcmMoKSl7YjYuY29uZmlndXJhdGlvbj1UU0MucGxheWVyQ29uZmlndXJhdGlvbi5nZXRDb25maWd1cmF0aW9uU3JjKCl9YjYuZGVidWdIb3RzcG90cz1UU0MucGxheWVyQ29uZmlndXJhdGlvbi5nZXREZWJ1Z0hvdHNwb3QoKTtpZihUU0MucGxheWVyQ29uZmlndXJhdGlvbi5nZXRQb3N0ZXJJbWFnZVNyYygpKXtiNi5wb3N0ZXI9VFNDLnBsYXllckNvbmZpZ3VyYXRpb24uZ2V0UG9zdGVySW1hZ2VTcmMoKX1pZihUU0MucGxheWVyQ29uZmlndXJhdGlvbi5nZXRHb29nbGVBbmFseXRpY3NJRCgpJiZUU0MucGxheWVyQ29uZmlndXJhdGlvbi5nZXRHb29nbGVBbmFseXRpY3NJRCgpIT0iIil7YjYuYW5hbHl0aWNzPVRTQy5wbGF5ZXJDb25maWd1cmF0aW9uLmdldEdvb2dsZUFuYWx5dGljc0lEKCk7aWYoIVRTQy5wbGF5ZXJDb25maWd1cmF0aW9uLmdldEdBRXZlbnRUcmFja2luZygpKXtiNi50cmFja0V2ZW50cz1mYWxzZX1pZighVFNDLnBsYXllckNvbmZpZ3VyYXRpb24uZ2V0R0FQYWdlVmlld1RyYWNraW5nKCkpe2I2LnRyYWNrUGFnZVZpZXdzPWZhbHNlfX1iNi5hZHZhbmNlZFNlZWtpbmc9VFNDLnBsYXllckNvbmZpZ3VyYXRpb24uZ2V0QWR2YW5jZWRTZWVraW5nKCk7YjYuZW5mb3JjZUxpbmVhckFzc2Vzc21lbnRzPVRTQy5wbGF5ZXJDb25maWd1cmF0aW9uLmdldEVuZm9yY2VMaW5lYXJBc3Nlc3NtZW50KCk7YjYuc2Nvcm1Db21wbGV0ZT1UU0MucGxheWVyQ29uZmlndXJhdGlvbi5nZXRSZXBvcnRTY29ybUNvbXBsZXRlKCk7YjYuaG9zdGluZ1BhZ2U9ZG9jdW1lbnQubG9jYXRpb247dmFyIGI4PVRTQy5wbGF5ZXJDb25maWd1cmF0aW9uLmdldE1pbkZsYXNoUGxheWVyVmVyc2lvbigpO3ZhciBiOT17fTtiOS5xdWFsaXR5PSJoaWdoIjtiOS5iZ2NvbG9yPSIjMDAwMDAwIjtiOS5hbGxvd3NjcmlwdGFjY2Vzcz0iYWx3YXlzIjtiOS5hbGxvd2Z1bGxzY3JlZW49InRydWUiO2I5Lndtb2RlPSJkaXJlY3QiO2I5LmFsbG93TmV0d29ya2luZz0iYWxsIjtpZihUU0MucGxheWVyQ29uZmlndXJhdGlvbi5nZXRTd2ZCYXNlKCkhPT0iLiIpe2I5LmJhc2U9VFNDLnBsYXllckNvbmZpZ3VyYXRpb24uZ2V0U3dmQmFzZSgpfXZhciBiNz17fTtiNy5pZD0idHNjcGxheWVyIjtiNy5uYW1lPSJ0c2NwbGF5ZXIiO2I3LmFsaWduPSJtaWRkbGUiO3N3Zm9iamVjdC5lbWJlZFNXRihUU0MucGxheWVyQ29uZmlndXJhdGlvbi5nZXRGbGFzaFBsYXllclN3ZigpLGNhLnJlcGxhY2UoLyMvLCIiKSxUU0MucGxheWVyQ29uZmlndXJhdGlvbi5nZXRQbGF5ZXJXaWR0aCgpLFRTQy5wbGF5ZXJDb25maWd1cmF0aW9uLmdldFBsYXllckhlaWdodCgpLGI4LFRTQy5wbGF5ZXJDb25maWd1cmF0aW9uLmdldEZsYXNoVXBkYXRlQm9vdHN0cmFwU3dmKCksYjYsYjksYjcpO3N3Zm9iamVjdC5jcmVhdGVDU1MoY2EsImRpc3BsYXk6YmxvY2s7dGV4dC1hbGlnbjpsZWZ0OyIpOyQoY2EpLnNob3coKX1mdW5jdGlvbiBJKGI4LGI3LGI2KXtiNz0iPHNwYW4+IitiNysiPC9zcGFuPiI7aWYoYjYpe2I3Kz0iPGg0PkNsaWNrIHRvIENsb3NlPC9oND4ifWlmKEUpeyQoIiNhbGVydERpYWxvZyIpLmh0bWwoYjcpOyQoIiNhbGVydERpYWxvZyIpLmZhZGVJbihwKX1lbHNleyQoYjgpLmNzcygiYmFja2dyb3VuZC1jb2xvciIsVFNDLnBsYXllckNvbmZpZ3VyYXRpb24uZ2V0QmFja2dyb3VuZENvbG9yKCkpOyQoYjgpLmNzcygiaGVpZ2h0IiwiMTAwJSIpOyQoYjgpLmh0bWwoJzxkaXYgaWQ9ImFsZXJ0RGlhbG9nIj4nK2I3KyI8L2Rpdj4iKTskKGI4KS5mYWRlSW4ocCk7JCgiI2FsZXJ0RGlhbG9nIikuc2hvdygpfWlmKGI2KXskKCIjYWxlcnREaWFsb2ciKS5iaW5kKCJjbGljayIsZnVuY3Rpb24oKXskKCIjYWxlcnREaWFsb2ciKS5oaWRlKCk7JCgiI2FsZXJ0RGlhbG9nIikudW5iaW5kKCJjbGljayIpfSl9fWZ1bmN0aW9uIGE4KCl7dmFyIGI2PSIjMDAwIjtpZihUU0MucGxheWVyQ29uZmlndXJhdGlvbi5nZXRQb3N0ZXJJbWFnZVNyYygpKXtiNis9IiB1cmwoIitUU0MucGxheWVyQ29uZmlndXJhdGlvbi5nZXRQb3N0ZXJJbWFnZVNyYygpKyIpIGNlbnRlciBuby1yZXBlYXQifSQoIi5hcHBwbGF5ZXIiKS5jc3Moe2JhY2tncm91bmQ6YjYscG9zaXRpb246InJlbGF0aXZlIiwiYm9yZGVyLXJhZGl1cyI6IjVweCIsImJhY2tncm91bmQtc2l6ZSI6ImNvdmVyIixoZWlnaHQ6IjEwMCUiLCJ6LWluZGV4IjoiMSJ9KX1mdW5jdGlvbiBhSCgpe3ZhciBiNj0nPGRpdiBjbGFzcz0iYXBwcGxheWVyIj4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icG9zdGVyRmFkZSI+ICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0b3BCcmRyIj48ZGl2IGNsYXNzPSJ0b3BCcmRySW5uZXIiPjwvZGl2PjwvZGl2PiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY29udGVudCI+ICAgICAgICAgICAgICAgICAgICAgICAgPGgyPlBsYXkgd2l0aCBUZWNoU21pdGggU21hcnQgUGxheWVyPC9oMj4gICAgICAgICAgICAgICAgICAgICAgICA8YSBjbGFzcz0iYXBwTnVldm9QbGF5QnRuIj48L2E+ICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iIiBjbGFzcz0iYXBwc3RvcmVCdG4iPjwvYT4gICAgICAgICAgICAgICAgICAgIDwvZGl2PiAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9ImFwcE5hdGl2ZVBsYXlCdG4iPiAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iYXBwTmF0aXZlUGxheUJ0blRleHQiPlBsYXkgVmlkZW8gT25seTwvZGl2PiAgICAgICAgICAgICAgICAgICAgPC9hPiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iYnRtQnJkciI+PGRpdiBjbGFzcz0iYnRtQnJkcklubmVyIj48L2Rpdj48L2Rpdj4gICAgICAgICAgICAgICAgPC9kaXY+ICAgICAgICAgICAgPC9kaXY+JztyZXR1cm4gYjZ9ZnVuY3Rpb24gYShiNil7aWYoVFNDLm1lZGlhUGxheWVyLmlzTnVldm9BcHBDYXBhYmxlQW5kQXZhaWxhYmxlKCkpeyQoYjYpLmFmdGVyKGFIKCkpO2E4KCk7JCgiLmFwcHBsYXllciIpLnNob3coKTskKGI2KS5oaWRlKCk7JCgiLmFwcE51ZXZvUGxheUJ0biIpLmNsaWNrKGZ1bmN0aW9uKCl7JCgiLmFwcHBsYXllciIpLmhpZGUoKTskKGI2KS5zaG93KCk7VFNDLm1lZGlhUGxheWVyLnJlZGlyZWN0VG9pUGhvbmVBcHAoKX0pOyQoIi5hcHBOYXRpdmVQbGF5QnRuIikuY2xpY2soZnVuY3Rpb24oKXskKCIuYXBwcGxheWVyIikuaGlkZSgpOyQoYjYpLnNob3coKTthUT0kKCJ2aWRlbyIpO2FRWzBdLnBsYXkoKX0pOyQoIi5hcHBzdG9yZUJ0biIpLmNsaWNrKGZ1bmN0aW9uKCl7VFNDLm1lZGlhUGxheWVyLnJlZGlyZWN0VG9pUGhvbmVBcHBEb3dubG9hZCgpfSk7aWYoYW8mJmFvIT09IiIpe2FvLnJlbW92ZUNsYXNzKGFtKTthby5jc3MoIndpZHRoIiwiNTAwcHgiKTthby5jc3MoImhlaWdodCIsIjMzNHB4Iil9fWVsc2V7JChiNikuZmFkZUluKHApfX1yZXR1cm57aW5pdEh0bWw1VmlldzpmdW5jdGlvbihiNyxiNil7YW89VFNDLnBsYXllckNvbmZpZ3VyYXRpb24uZ2V0RnJhbWVFbGVtZW50KCk7VihiNyxiNil9LGluaXRTaW1wbGVIdG1sNVZpZXc6ZnVuY3Rpb24oY2Qpe2FvPVRTQy5wbGF5ZXJDb25maWd1cmF0aW9uLmdldEZyYW1lRWxlbWVudCgpO2lmKFRTQy5tZWRpYUxpc3QuaXNQbGF5bGlzdCgpKXt2YXIgY2M9JCh3aW5kb3cpLmlubmVyV2lkdGgoKS0yMDtpZihhbyYmYW8hPT0iIil7YW8uYWRkQ2xhc3MoInRzY3BsYXllcl9mdWxsZnJhbWUiKTthby5jc3MoIndpZHRoIiwkKHdpbmRvdy5wYXJlbnQpLmlubmVyV2lkdGgoKSk7YW8uY3NzKCJoZWlnaHQiLCIxMDAlIik7Y2M9JCh3aW5kb3cucGFyZW50KS5pbm5lcldpZHRoKCktMjB9dmFyIGI3PVRTQy5tZWRpYUxpc3QuZ2V0TWVkaWFMaXN0KCk7dmFyIGNiPWI3Lmxlbmd0aDt2YXIgY2E9IjxvbD4iO2Zvcih2YXIgYjg9MDtiODxjYjtiOCsrKXtjYSs9IjxsaT4iK2J3KFtiN1tiOF1dLHRydWUsY2MsNzUsdHJ1ZSkrIjwvbGk+In1jYSs9Ijwvb2w+IjskKGNkKS5odG1sKGNhKTskKGNkKS5jc3MoImJhY2tncm91bmQtY29sb3IiLCIjZmZmZmZmIik7JCgiYm9keSIpLmNzcygib3ZlcmZsb3ciLCJhdXRvIik7JChjZCkuY3NzKCJvdmVyZmxvdyIsImF1dG8iKTskKGNkKyIgb2wiKS5jc3MoImxpc3Qtc3R5bGUiLCJub25lIik7JChjZCsiIG9sIikuY3NzKCJtYXJnaW4iLCIxMHB4Iik7JChjZCsiIG9sIikuY3NzKCJwYWRkaW5nIiwiMCIpfWVsc2V7JChjZCkuaHRtbChidyhUU0MubWVkaWFMaXN0LmN1cnJlbnRWaWRlb1NyYygpLHRydWUsdW5kZWZpbmVkLHVuZGVmaW5lZCx0cnVlKSk7aWYod2luZG93IT13aW5kb3cudG9wJiZUU0MucGxheWVyQ29uZmlndXJhdGlvbi5nZXRJZnJhbWVDb21tdW5pY2F0aW9uc0VuYWJsZWQoKSl7dmFyIGI2PSQod2luZG93LnBhcmVudCkuaW5uZXJXaWR0aCgpLTQwO3ZhciBiOT1iNioxLjMzMzMzMzMzMzMzMzMzO2FvLmNzcygid2lkdGgiLGI2KTthby5jc3MoImhlaWdodCIsYjkpfX1hKGNkKX0saW5pdEZsYXNoVmlldzpmdW5jdGlvbihiNil7YW89VFNDLnBsYXllckNvbmZpZ3VyYXRpb24uZ2V0RnJhbWVFbGVtZW50KCk7YU0oYjYpfSxnZXRGbGFzaElkOmZ1bmN0aW9uKCl7cmV0dXJuIGFUfSxkaXNwbGF5TWVzc2FnZVBhbmVsOmZ1bmN0aW9uKGI3LGI2KXtJKGI3LGI2LHRydWUpfSxhZGRFdmVudExpc3RlbmVyOmZ1bmN0aW9uKGI2LGI3KXtpZihiNj09PSJWSURFT19TVEFSVCIpe2I0PWI3fWVsc2V7aWYoYjY9PT0iQ0FQVElPTl9DSEFOR0UiKXtiPWI3fX19LHJlbW92ZUV2ZW50TGlzdGVuZXI6ZnVuY3Rpb24oYjYpe2lmKGI2PT09IlZJREVPX1NUQVJUIil7YjQ9dW5kZWZpbmVkfWVsc2V7aWYoYjY9PT0iQ0FQVElPTl9DSEFOR0UiKXtiPXVuZGVmaW5lZH19fX19KCk7dmFyIFRTQz1UU0N8fHt9O1RTQy54bXA9KGZ1bmN0aW9uKCl7JC5mbi5maWx0ZXJOb2RlPWZ1bmN0aW9uKFope3JldHVybiB0aGlzLmZpbmQoIioiKS5maWx0ZXIoZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ub2RlTmFtZT09PVp9KX07dmFyIEQ7dmFyIGE7dmFyIEU9IlRoZXJlIHNlZW1zIHRvIGJlIGEgcHJvYmxlbSBhY2Nlc3NpbmcgY2VydGFpbiBmZWF0dXJlcyBvZiB0aGlzIHZpZGVvLiBQbGVhc2UgY29udGFjdCB0aGUgdmlkZW8gQXV0aG9yLiI7dmFyIHo9IkNlcnRhaW4gZmVhdHVyZXMgaW4geW91ciB2aWRlbyBhcmUgY3VycmVudGx5IGRpc2FibGVkIGR1ZSB0byBMb2NhbCBOZXR3b3JrIFNlY3VyaXR5LiBUaGVzZSBmZWF0dXJlcyB3b3JrIGNvcnJlY3RseSB3aGVuIHRoZSB2aWRlbyBpcyBwbGF5ZWQgZnJvbSBhIFdlYnNpdGUgb3IgU2VydmVyLiI7dmFyIFE9ZmFsc2U7dmFyIFY9ZmFsc2U7dmFyIEE9ZmFsc2U7dmFyIGs9ZmFsc2U7dmFyIFU9ZmFsc2U7dmFyIGo9ZmFsc2U7dmFyIGU9ZmFsc2U7dmFyIHI7dmFyIGc7dmFyIFk7dmFyIHY7dmFyIGg7dmFyIGQ7dmFyIFc7dmFyIG07dmFyIHg7dmFyIHE9bnVsbDt2YXIgdzt2YXIgQjt2YXIgTT1mYWxzZTt2YXIgcD0iIjt2YXIgUz0wO3ZhciB5PSIjZmZmZmZmIjt2YXIgRz0iIzAwMDAwMCI7dmFyIG49MC45O3ZhciBPPSJBcmlhbCwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmOyI7dmFyIGw9MTg7dmFyIFQ9e3I6MjU1LGc6MjU1LGI6MjU1fTt2YXIgdD0yO3ZhciBKPTE0NDt2YXIgSz1bXTt2YXIgQz1bXTt2YXIgYz1bXTt2YXIgYj1bXTt2YXIgZj1bXTtmdW5jdGlvbiBGKGFhLFosYWIpe2lmKGEpe2EuY2FsbCgpfX1mdW5jdGlvbiBOKGFlLGFkLFope3ZhciBhYz0oYWU8PDE2fGFkPDw4fFopLnRvU3RyaW5nKDE2KTt2YXIgYWE9Ni1hYy5sZW5ndGg7Zm9yKHZhciBhYj0wO2FiPGFhO2FiKyspe2FjPSIwIithY31yZXR1cm4iIyIrYWN9ZnVuY3Rpb24gcyhaKXskKFopLmZpbmQoIioiKS5maWx0ZXJOb2RlKCJyZGY6RGVzY3JpcHRpb24iKS5lYWNoKGZ1bmN0aW9uKCl7dmFyIGFjPU51bWJlcigkKHRoaXMpLmF0dHIoInhtcERNOnN0YXJ0VGltZSIpKS8xMDAwO3ZhciBhYT1UU0MucGxheWVyQ29uZmlndXJhdGlvbi5nZXRVbmljb2RlU2FmZVN0cmluZygkKHRoaXMpLmF0dHIoInRzY0RNOmZpbGUiKSk7dmFyIGFkPSQodGhpcykuYXR0cigieG1wRE06bmFtZSIpO3ZhciBhYj0kKHRoaXMpLmF0dHIoInRzY0RNOmltYWdlIik7dmFyIGFmPSQodGhpcykuYXR0cigidHNjRE06aW1hZ2VyZWN0Iik7aWYoYWYmJiFNKXtNPXRydWU7aWYoVFNDLnBsYXllckNvbmZpZ3VyYXRpb24uZ2V0U3dmQmFzZSgpIT09Ii4iKXtwPVRTQy5wbGF5ZXJDb25maWd1cmF0aW9uLmdldFN3ZkJhc2UoKStUU0MucGxheWVyQ29uZmlndXJhdGlvbi5nZXRVbmljb2RlU2FmZVN0cmluZyhhYil9ZWxzZXtwPVRTQy5wbGF5ZXJDb25maWd1cmF0aW9uLmdldFVuaWNvZGVTYWZlU3RyaW5nKGFiKX19dmFyIGFlPXt0aW1lOmFjLHRleHQ6YWQsZmlsZTphYSxpbWFnZTphYixpbWFnZVJlY3Q6YWZ9O0sucHVzaChhZSl9KX1mdW5jdGlvbiBpKGFiKXt2YXIgYWE9JChhYikuZmluZCgiKiIpLmxlbmd0aDt2YXIgYWM9YWIuZmluZCgiKiIpLmVxKGFhLTIpO2lmKGFjJiZhYy5sZW5ndGg+MCYmYWNbMF0ubm9kZU5hbWU9PT0idHNjOmZnQ29sb3IiKXt2YXIgYWU9YWMuYXR0cigieG1wRzpyZWQiKTt2YXIgYWQ9YWMuYXR0cigieG1wRzpncmVlbiIpO3ZhciBaPWFjLmF0dHIoInhtcEc6Ymx1ZSIpO3k9TihhZSxhZCxaKX12YXIgYWY9YWIuZmluZCgiKiIpLmVxKGFhLTEpO2lmKGFmJiZhZi5sZW5ndGg+MCYmYWZbMF0ubm9kZU5hbWU9PT0idHNjOmJnQ29sb3IiKXtULnI9YWYuYXR0cigieG1wRzpyZWQiKTtULmc9YWYuYXR0cigieG1wRzpncmVlbiIpO1QuYj1hZi5hdHRyKCJ4bXBHOmJsdWUiKTtHPU4oVC5yLFQuZyxULmIpfSQoYWIpLmZpbmQoIioiKS5maWx0ZXJOb2RlKCJyZGY6RGVzY3JpcHRpb24iKS5lYWNoKGZ1bmN0aW9uKCl7dmFyIGFpPU51bWJlcigkKHRoaXMpLmF0dHIoInhtcERNOnN0YXJ0VGltZSIpKS8xMDAwO3ZhciBhbT1OdW1iZXIoJCh0aGlzKS5hdHRyKCJ4bXBETTpkdXJhdGlvbiIpKS8xMDAwO3ZhciBhcD1haSthbTt2YXIgYWc9JCh0aGlzKS5maW5kKCIqIikuZmlsdGVyTm9kZSgicmRmOmxpIikudGV4dCgpO3ZhciBhaj1UU0MudGV4dEZvcm1hdHRlci5ydGZUb1RleHQoYWcpO3ZhciBhbj0kKHRoaXMpLmF0dHIoInRzY0RNOnZhbGlnbiIpO3ZhciBhaz0kKHRoaXMpLmF0dHIoInRzY0RNOmhhbGlnbiIpO3ZhciBhbDt2YXIgYWg7c3dpdGNoKGFuKXtjYXNlInRvcCI6YWw9ImNhcHRpb25WQWxpZ25Ub3AiO2JyZWFrO2RlZmF1bHQ6YWw9ImNhcHRpb25WQWxpZ25Cb3R0b20iO2JyZWFrfXN3aXRjaChhayl7Y2FzZSJsZWZ0IjphaD0iY2FwdGlvbkhBbGlnbkxlZnQiO2JyZWFrO2Nhc2UicmlnaHQiOmFoPSJjYXB0aW9uSEFsaWduUmlnaHQiO2JyZWFrO2RlZmF1bHQ6YWg9ImNhcHRpb25IQWxpZ25DZW50ZXIiO2JyZWFrfWFnPVRTQy50ZXh0Rm9ybWF0dGVyLnJ0ZlRvSFRNTChhZyk7dmFyIGFxPVRTQy5wbGF5ZXJDb25maWd1cmF0aW9uLmdldFVuaWNvZGVTYWZlU3RyaW5nKCQodGhpcykuYXR0cigidHNjRE06ZmlsZSIpKTtpZihhai5yZXBsYWNlKC8gL2csIiIpIT09IiIpe3ZhciBhbz17c3RhcnQ6YWksZW5kOmFwLHRleHQ6YWosaHRtbFRleHQ6YWcsZmlsZTphcSx2QWxpZ246YW4sdkFsaWduQ2xhc3M6YWwsaEFsaWduQ2xhc3M6YWh9O0MucHVzaChhbyl9fSl9ZnVuY3Rpb24gSShhZCxhYil7dmFyIGFnPVtdO3ZhciBhYT1OdW1iZXIoYWRbNF0pLU51bWJlcihhZFswXSk7dmFyIGFpPU51bWJlcihhZFs1XSktTnVtYmVyKGFkWzFdKTt2YXIgYWU9KGFhLzIpK051bWJlcihhZFswXSk7dmFyIGFjPShhaS8yKStOdW1iZXIoYWRbMV0pO3ZhciBhaD1hZC5sZW5ndGg7Zm9yKHZhciBhZj0wO2FmPGFoO2FmKz0yKXt2YXIgWj1IKE51bWJlcihhZFthZl0pLE51bWJlcihhZFthZisxXSksYWEsYWksYWUsYWMsYWIpO2FnLnB1c2goTnVtYmVyKFpbMF0pKTthZy5wdXNoKE51bWJlcihaWzFdKSl9cmV0dXJuIGFnfWZ1bmN0aW9uIEgoWixhbSxhZixhaCxhZSxhZCxhYyl7YWM9YWMqTWF0aC5QSS8xODA7dmFyIGFuPVotYWU7dmFyIGFsPWFtLWFkO3ZhciBhaj1NYXRoLmF0YW4yKGFsLGFuKTt2YXIgYWk9TWF0aC5zcXJ0KGFuKmFuK2FsKmFsKTt2YXIgYWE9YWorYWM7dmFyIGFrPU1hdGguY29zKGFhKSphaTt2YXIgYWc9TWF0aC5zaW4oYWEpKmFpO3ZhciBhYj1bXTthYlswXT0oYWsrYWUpO2FiWzFdPShhZythZCk7cmV0dXJuIGFifWZ1bmN0aW9uIFAoWil7JChaKS5maW5kKCIqIikuZmlsdGVyTm9kZSgicmRmOkRlc2NyaXB0aW9uIikuZWFjaChmdW5jdGlvbigpe3ZhciBhYj0kKHRoaXMpLmF0dHIoInhtcDpsYWJlbCIpO3ZhciBhaj1OdW1iZXIoJCh0aGlzKS5hdHRyKCJ4bXBETTpzdGFydFRpbWUiKSkvMTAwMDt2YXIgYWc9TnVtYmVyKCQodGhpcykuYXR0cigieG1wRE06ZHVyYXRpb24iKSkvMTAwMDt2YXIgYWY9YWorYWc7dmFyIGFjPSQodGhpcykuYXR0cigidHNjRE06Ym91bmRpbmdQb2x5Iik7dmFyIGFoPSQodGhpcykuYXR0cigidHNjRE06cm90YXRlIik7dmFyIGFlPVRTQy5wbGF5ZXJDb25maWd1cmF0aW9uLmdldFVuaWNvZGVTYWZlU3RyaW5nKCQodGhpcykuYXR0cigidHNjSFM6anVtcEZpbGUiKSk7dmFyIGFrPWFjLnJlcGxhY2UoL1w7L2lnLCIsIik7aWYoYWsubGFzdEluZGV4T2YoIiwiKT09YWsubGVuZ3RoLTEpe2FrPWFrLnN1YnN0cigwLGFrLmxlbmd0aC0xKX12YXIgYW09YWsuc3BsaXQoIiwiKTtpZihhaCE9PTApe2FtPUkoYW0sYWgpfXZhciBhbD1mYWxzZTt2YXIgYWQ9IiI7dmFyIGFpPSIiO3ZhciBhYT0iIjtpZigkKHRoaXMpLmF0dHIoInRzY0hTOnBhdXNlIik9PT0iMSIpe2FsPXRydWV9aWYoJCh0aGlzKS5hdHRyKCJ0c2NIUzpqdW1wVGltZSIpIT09dW5kZWZpbmVkKXthZD1OdW1iZXIoJCh0aGlzKS5hdHRyKCJ0c2NIUzpqdW1wVGltZSIpKS8xMDAwfWlmKCQodGhpcykuYXR0cigidHNjSFM6bmV3V2luZG93IikhPT11bmRlZmluZWQpe2FpPSQodGhpcykuYXR0cigidHNjSFM6bmV3V2luZG93Iik7YWk9KGFpPT09IjAifHxhaS50b0xvd2VyQ2FzZSgpPT09ImZhbHNlIik/ZmFsc2U6dHJ1ZX1pZigkKHRoaXMpLmF0dHIoInhtcERNOmxvY2F0aW9uIikhPT11bmRlZmluZWQpe2FhPSQodGhpcykuYXR0cigieG1wRE06bG9jYXRpb24iKX12YXIgYW89VFNDLnBsYXllckNvbmZpZ3VyYXRpb24uZ2V0VW5pY29kZVNhZmVTdHJpbmcoJCh0aGlzKS5hdHRyKCJ0c2NETTpmaWxlIikpO3ZhciBhbj17aWQ6YWIsc3RhcnQ6YWosZW5kOmFmLHBhdXNlOmFsLGhhc1BhdXNlZDpmYWxzZSxwb2ludHM6YW0sc2NhbGVkUG9pbnRzOmFtLmNvbmNhdChbXSkscm90YXRpb246YWgsZmlsZTphbyxqdW1wVGltZTphZCxqdW1wRmlsZTphZSxuZXdXaW5kb3c6YWksdGFyZ2V0VVJMOmFhLGlzQWN0aXZlOmZhbHNlfTtjLnB1c2goYW4pfSl9ZnVuY3Rpb24gTChhbCl7dmFyIGFkPS0xO3ZhciBhYj1mYWxzZTt2YXIgYWo7dmFyIGFjO3ZhciBhYTt2YXIgYWU7dmFyIGFrO3ZhciBhZz1bXTt2YXIgWjt2YXIgYWY7dmFyIGFpO1RTQy5xdWl6TW9kZWwuY2xlYXJBbGxRdWVzdGlvbnMoKTskKGFsKS5maW5kKCIqIikuZmlsdGVyTm9kZSgicmRmOkRlc2NyaXB0aW9uIikuZWFjaChmdW5jdGlvbigpe3ZhciBhbj0kKHRoaXMpLmF0dHIoInRzY0lROnF1ZXN0aW9uU2V0TmFtZSIpO2lmKGFuKXthbj1UU0MudGV4dFNhbml0aXplci5odG1sRW5jb2RlKGFuKTtpZihhYil7VFNDLnF1aXpNb2RlbC5hZGRRdWVzdGlvbihhZCxhaixhYSxhZSxhZyxaKTthYj1mYWxzZTthZT11bmRlZmluZWQ7YWE9dW5kZWZpbmVkO2FnPVtdO1o9dW5kZWZpbmVkfXZhciBhbz0oJCh0aGlzKS5hdHRyKCJ0c2NJUTpmZWVkYmFjayIpPT09IjEiKTt2YXIgYW09TnVtYmVyKCQodGhpcykuYXR0cigieG1wRE06c3RhcnRUaW1lIikpO2FkPVRTQy5xdWl6TW9kZWwuYWRkUXVlc3Rpb25TZXQoYW4sYW0sYW8pfWVsc2V7YWM9JCh0aGlzKS5hdHRyKCJ0c2NJUTp0eXBlIik7aWYoYWMpe2lmKGFiKXtUU0MucXVpek1vZGVsLmFkZFF1ZXN0aW9uKGFkLGFqLGFhLGFlLGFnLFopO2FiPWZhbHNlO2FiPWZhbHNlO2FlPXVuZGVmaW5lZDthYT11bmRlZmluZWQ7YWc9W107Wj11bmRlZmluZWR9YWE9JCh0aGlzKS5hdHRyKCJ0c2NJUTppZCIpO2FqPWFjO2FmPSQodGhpcykuY2hpbGRyZW4oKTthZT1UU0MudGV4dFNhbml0aXplci5odG1sRW5jb2RlKCQoYWZbMF0pLnRleHQoKSx0cnVlKTtaPVRTQy50ZXh0U2FuaXRpemVyLmh0bWxFbmNvZGUoJChhZlsxXSkudGV4dCgpLHRydWUpO2FiPXRydWV9ZWxzZXthaz0kKHRoaXMpLmF0dHIoInRzY0lROm9yZGVySWQiKTtpZihhayl7YWY9JCh0aGlzKS5jaGlsZHJlbigpO2FpPSQoYWZbMF0pLnRleHQoKTtpZihhaSl7YWcucHVzaChUU0MudGV4dFNhbml0aXplci5odG1sRW5jb2RlKGFpLHRydWUpKX19fX19KTtpZihhYil7VFNDLnF1aXpNb2RlbC5hZGRRdWVzdGlvbihhZCxhaixhYSxhZSxhZyxaKX12YXIgYWg7JChhbCkuZmluZCgiKiIpLmZpbHRlck5vZGUoInJkZjpsaSIpLmVhY2goZnVuY3Rpb24oKXthaD0kKHRoaXMpLmF0dHIoInhtcERNOm5hbWUiKTtpZihhaCl7VFNDLnF1aXpVaVN0cmluZ3Muc2V0VWlTdHJpbmcoYWgsJCh0aGlzKS5hdHRyKCJ4bXBETTp2YWx1ZSIpKX19KX1mdW5jdGlvbiBvKGFlKXt2YXIgYWQ9W107JChhZSkuZmluZCgiKiIpLmZpbHRlck5vZGUoInJkZjpEZXNjcmlwdGlvbiIpLmVhY2goZnVuY3Rpb24oKXt2YXIgYWw9TnVtYmVyKCQodGhpcykuYXR0cigieG1wRE06c3RhcnRUaW1lIikpLzEwMDA7dmFyIGFpPU51bWJlcigkKHRoaXMpLmF0dHIoInhtcERNOmR1cmF0aW9uIikpLzEwMDA7dmFyIGFrPSQodGhpcykuYXR0cigieG1wRE06bmFtZSIpO3ZhciBhaD1UU0MucGxheWVyQ29uZmlndXJhdGlvbi5nZXRVbmljb2RlU2FmZVN0cmluZygkKHRoaXMpLmF0dHIoInRzY0RNOmZpbGUiKSk7dmFyIGFqPXtzdGFydDphbCxlbmQ6U3RyaW5nKE51bWJlcihhbCkrTnVtYmVyKGFpKSksdGV4dDphayxmaWxlOmFofTthZC5wdXNoKGFqKX0pO3ZhciBhYT1hZC5sZW5ndGg7aWYoYWE8MSl7cmV0dXJufXZhciBhYj1hZFswXS5zdGFydDt2YXIgYWc9IiI7dmFyIFo9W107dmFyIGFmO2Zvcih2YXIgYWM9MDthYzxhYTthYysrKXtpZihhZFthY10uc3RhcnQhPT1hYil7YWY9e3N0YXJ0OmFkW2FjLTFdLnN0YXJ0LGVuZDphZFthYy0xXS5lbmQsdGV4dDphZyxpdGVtczpaLGZpbGU6YWRbYWMtMV0uZmlsZX07Yi5wdXNoKGFmKTthZz0iIjtaPVtdfWFnKz1hZFthY10udGV4dCsiICI7Wi5wdXNoKGFkW2FjXS50ZXh0KTthYj1hZFthY10uc3RhcnR9YWY9e3N0YXJ0OmFkW2FjLTFdLnN0YXJ0LGVuZDphZFthYy0xXS5lbmQsdGV4dDphZyxpdGVtczpaLGZpbGU6YWRbYWMtMV0uZmlsZX07Yi5wdXNoKGFmKX1mdW5jdGlvbiB1KGFlKXt2YXIgWj1bXTskKGFlKS5maW5kKCIqIikuZmlsdGVyTm9kZSgicmRmOkRlc2NyaXB0aW9uIikuZWFjaChmdW5jdGlvbigpe3ZhciBhbj1OdW1iZXIoJCh0aGlzKS5hdHRyKCJ4bXBETTpzdGFydFRpbWUiKSkvMTAwMDt2YXIgYWs9TnVtYmVyKCQodGhpcykuYXR0cigieG1wRE06ZHVyYXRpb24iKSkvMTAwMDt2YXIgYW09JCh0aGlzKS5hdHRyKCJ4bXBETTpuYW1lIik7dmFyIGFqPVRTQy5wbGF5ZXJDb25maWd1cmF0aW9uLmdldFVuaWNvZGVTYWZlU3RyaW5nKCQodGhpcykuYXR0cigidHNjRE06ZmlsZSIpKTt2YXIgYWw9e3N0YXJ0OmFuLGVuZDpTdHJpbmcoTnVtYmVyKGFuKStOdW1iZXIoYWspKSx0ZXh0OmFtLGZpbGU6YWp9O1oucHVzaChhbCl9KTt2YXIgYWY9Wi5sZW5ndGg7aWYoYWY8MSl7cmV0dXJufXZhciBhZD1aWzBdLnN0YXJ0O3ZhciBhaD1hZDt2YXIgYWc9IiI7dmFyIGFjPVtdO2Zvcih2YXIgYWI9MDthYjxhZjthYisrKXtpZihaW2FiXS5zdGFydC1hZD4yLjUpe3ZhciBhaT17c3RhcnQ6YWgsZW5kOlpbYWItMV0uZW5kLHRleHQ6YWcsaXRlbXM6YWMsZmlsZTpaW2FiLTFdLmZpbGV9O2FoPVpbYWJdLnN0YXJ0O1oucHVzaChhaSk7YWc9IiI7YWM9W119YWcrPVpbYWJdLnRleHQrIiAiO2FjLnB1c2goWlthYl0udGV4dCk7YWQ9WlthYl0uc3RhcnR9dmFyIGFhPXtzdGFydDphaCxlbmQ6WlthZi0xXS5lbmQsdGV4dDphZyxpdGVtczphYyxmaWxlOlpbYWYtMV0uZmlsZX07Zi5wdXNoKGFhKX1mdW5jdGlvbiBSKCl7aWYoUSl7cyhkKX1pZihWKXtpKFcpfWlmKGspe0woeCl9aWYoQSl7UChtKX1pZihVKXtvKGgpfWlmKGope3Uodil9ZT10cnVlO2lmKEQpe0QuY2FsbCgpfX1mdW5jdGlvbiBYKGFiKXt2YXIgYXU9JChhYikuZmluZCgiKiIpLmVxKDIpO3I9YXUuYXR0cigiZGM6dGl0bGUiKTtZPWF1LmF0dHIoInRzY0RNOm9yaWdpbklkIik7Zz1hdS5hdHRyKCJ0c2NETTpwcm9qZWN0Iik7Uz1OdW1iZXIoJChhYikuZmluZCgiKiIpLmVxKDMpLmF0dHIoInhtcERNOnZhbHVlIikpO3E9cjt2YXIgYWM7dmFyIGFrPSQoYWIpLmZpbmQoIioiKS5sZW5ndGg7dmFyIGFuO3ZhciBhdj0wO2ZvcihhYz00O2FjPGFrO2FjKyspe2lmKCQoYWIpLmZpbmQoIioiKS5lcShhYylbMF0ubm9kZU5hbWU9PT0ieG1wRE06VHJhY2tzIil7YW49JChhYikuZmluZCgiKiIpLmVxKGFjKS5jaGlsZHJlbigpO2JyZWFrfX12YXIgYWc7dmFyIFo9JChhbikuZmluZCgiKiIpLmxlbmd0aDtmb3IodmFyIGFtPTA7YW08WjthbSsrKXt2YXIgYWo9JChhbikuZmluZCgiKiIpLmVxKGFtKTthZz1hai5hdHRyKCJ4bXBETTp0cmFja1R5cGUiKTtpZihhZyE9PXVuZGVmaW5lZCl7c3dpdGNoKGFnLnRvTG93ZXJDYXNlKCkpe2Nhc2UidGFibGVvZmNvbnRlbnRzIjp3PSgkKGFqKSkuYXR0cigidHNjRE06dG9jQ2VsbExheW91dCIpO2lmKFRTQy5wbGF5ZXJDb25maWd1cmF0aW9uLmdldFN3ZkJhc2UoKSE9PSIuIil7Qj1UU0MucGxheWVyQ29uZmlndXJhdGlvbi5nZXRTd2ZCYXNlKCkrVFNDLnBsYXllckNvbmZpZ3VyYXRpb24uZ2V0VW5pY29kZVNhZmVTdHJpbmcoKCQoYWopKS5hdHRyKCJ0c2NETTppbWFnZSIpKX1lbHNle0I9VFNDLnBsYXllckNvbmZpZ3VyYXRpb24uZ2V0VW5pY29kZVNhZmVTdHJpbmcoKCQoYWopKS5hdHRyKCJ0c2NETTppbWFnZSIpKX1RPXRydWU7ZD0kKGFqKTthbSs9ZC5maW5kKCIqIikubGVuZ3RoO2JyZWFrO2Nhc2UicXVpeiI6aWYoVFNDLnF1aXpNb2RlbCl7az10cnVlO3ZhciBhZT0oJChhaikpLmF0dHIoInRzY0lROnF1aXpHdWlkIik7dmFyIGFsPSgkKGFqKSkuYXR0cigidHNjSVE6cmVwb3J0TWV0aG9kIik7dmFyIGFhPSgkKGFqKSkuYXR0cigidHNjSVE6cmVxdWlyZVVzZXJJZCIpPT09IjEiO3ZhciBhdD0oJChhaikpLmF0dHIoInRzY0lROmF1dGhvcmVkRW1haWwiKTt2YXIgYXE9KCQoYWopKS5hdHRyKCJ0c2NJUTpjbGllbnRJZCIpO3ZhciBhcD0oJChhaikpLmF0dHIoInRzY0lROnF1aXpIYXNoIik7VFNDLnF1aXpNb2RlbC5zZXRQcm9kdWN0aW9uTWV0YWRhdGEoZyxyLFkpO1RTQy5xdWl6TW9kZWwuc2V0UXVpelRpdGxlKHIpO1RTQy5xdWl6TW9kZWwuc2V0UXVpeklEKGFlKTtUU0MucXVpek1vZGVsLnNldFJlcG9ydE1ldGhvZChhbCk7VFNDLnF1aXpNb2RlbC5zZXRSZXF1aXJlVXNlcklkKGFhKTtUU0MucXVpek1vZGVsLnNldEF1dGhvcmVkRW1haWwoYXQpO1RTQy5xdWl6TW9kZWwuc2V0Q2xpZW50SWQoYXEpO1RTQy5xdWl6TW9kZWwuc2V0UXVpekhhc2goYXApO1RTQy5xdWl6TW9kZWwuc2V0TWVkaWFEdXJhdGlvbihTKX14PSQoYWopO2FtKz14LmZpbmQoIioiKS5sZW5ndGg7YnJlYWs7Y2FzZSJjYXB0aW9uIjp2YXIgYWk9KCQoYWopKS5hdHRyKCJzdEZudDpmb250RmFtaWx5Iik7aWYoYWkpe089YWl9dmFyIGFyPSgkKGFqKSkuYXR0cigidHNjRE06Zm9udFNpemUiKTtpZihhcil7bD1OdW1iZXIoYXIpfXZhciBhbz0oJChhaikpLmF0dHIoInRzY0RNOmJnT3BhY2l0eSIpO2lmKGFvKXtuPU51bWJlcihhbyl9Vj10cnVlO1c9JChhaik7YW0rPVcuZmluZCgiKiIpLmxlbmd0aDticmVhaztjYXNlImhvdHNwb3QiOkE9dHJ1ZTttPSQoYWopO2FtKz1tLmZpbmQoIioiKS5sZW5ndGg7YnJlYWs7Y2FzZSJzcGVlY2h0ZXh0IjpqPXRydWU7dj0kKGFqKTthbSs9di5maW5kKCIqIikubGVuZ3RoO2JyZWFrO2Nhc2Uic2NyZWVudGV4dCI6VT10cnVlO2g9JChhaik7YW0rPWguZmluZCgiKiIpLmxlbmd0aDticmVha319fWFjKz1hdjt2YXIgYWQ7dmFyIGFmO3ZhciBhaD0wO2ZvcihhYz1hYzthYzxhazthYysrKXtpZigkKGFiKS5maW5kKCIqIikuZXEoYWMpWzBdLm5vZGVOYW1lPT09InRzY0RNOmNvbnRyb2xsZXIiKXthZD0kKGFiKS5maW5kKCIqIikuZXEoYWMpLmNoaWxkcmVuKCk7YWg9JChhZCkuZmluZCgiKiIpLmxlbmd0aDticmVha319JChhZCkuZmluZCgiKiIpLmZpbHRlck5vZGUoInJkZjpsaSIpLmVhY2goZnVuY3Rpb24oKXtpZigkKHRoaXMpLmF0dHIoInhtcERNOm5hbWUiKSE9dW5kZWZpbmVkKXthZj0kKHRoaXMpLmF0dHIoInhtcERNOnZhbHVlIikudG9Mb3dlckNhc2UoKTtzd2l0Y2goKCQodGhpcykuYXR0cigieG1wRE06bmFtZSIpKS50b0xvd2VyQ2FzZSgpKXtjYXNlImF1dG9oaWRlIjp2YXIgYXg9YWY9PT0idHJ1ZSI/dHJ1ZTpmYWxzZTtUU0MucGxheWVyQ29uZmlndXJhdGlvbi5zZXRBdXRvSGlkZUNvbnRyb2xzKGF4KTticmVhaztjYXNlImF1dG9wbGF5Ijp2YXIgYXo9YWY9PT0idHJ1ZSI/dHJ1ZTpmYWxzZTtpZighVFNDLnBsYXllckNvbmZpZ3VyYXRpb24uZ2V0QXV0b1BsYXlNZWRpYSgpKXtUU0MucGxheWVyQ29uZmlndXJhdGlvbi5zZXRBdXRvUGxheU1lZGlhKGF6KX1icmVhaztjYXNlInNlYXJjaGFibGUiOnZhciBheT1hZj09PSJ0cnVlIj90cnVlOmZhbHNlO1RTQy5wbGF5ZXJDb25maWd1cmF0aW9uLnNldElzU2VhcmNoYWJsZShheSk7YnJlYWs7Y2FzZSJjYXB0aW9uc2VuYWJsZWQiOnZhciBhQz1hZj09PSJ0cnVlIj90cnVlOmZhbHNlO1RTQy5wbGF5ZXJDb25maWd1cmF0aW9uLnNldENhcHRpb25zRW5hYmxlZChhQyk7YnJlYWs7Y2FzZSJzaWRlYmFyZW5hYmxlZCI6dmFyIGFCPWFmPT09InRydWUiP3RydWU6ZmFsc2U7VFNDLnBsYXllckNvbmZpZ3VyYXRpb24uc2V0U2lkZWJhckVuYWJsZWQoYUIpO2JyZWFrO2Nhc2UidW5pY29kZWVuYWJsZWQiOnZhciBhdz1hZj09PSJ0cnVlIj90cnVlOmZhbHNlO1RTQy5wbGF5ZXJDb25maWd1cmF0aW9uLnNldFByb2Nlc3NVbmljb2RlTmFtZXMoYXcpO2JyZWFrO2Nhc2UiYmFja2dyb3VuZGNvbG9yIjp2YXIgYUE9YWY7aWYoYUEuaW5kZXhPZigiIyIpPT09LTEpe2FBPSIjIithQX1UU0MucGxheWVyQ29uZmlndXJhdGlvbi5zZXRCYWNrZ3JvdW5kQ29sb3IoYUEpO2JyZWFrO2Nhc2Uic2lkZWJhcmxvY2F0aW9uIjp2YXIgYUQ9KGFmPT09InJpZ2h0Inx8YWY9PT0iciIpPyJyaWdodCI6ImxlZnQiO1RTQy5wbGF5ZXJDb25maWd1cmF0aW9uLnNldFNpZGViYXJMb2NhdGlvbihhRCk7YnJlYWs7Y2FzZSJlbmRhY3Rpb24iOlRTQy5wbGF5ZXJDb25maWd1cmF0aW9uLnNldEVuZEFjdGlvblR5cGUoYWYpO2JyZWFrO2Nhc2UiZW5kYWN0aW9ucGFyYW0iOlRTQy5wbGF5ZXJDb25maWd1cmF0aW9uLnNldEVuZEFjdGlvblBhcmFtKGFmKTticmVha319fSk7c2V0VGltZW91dChSLDUwMCl9cmV0dXJue2xvYWRYTVA6ZnVuY3Rpb24oWil7aWYoWil7dHJ5eyQuYWpheCh7dHlwZToiR0VUIix1cmw6Wixpc0xvY2FsOnRydWUsZGF0YVR5cGU6InhtbCIsc3VjY2VzczpYLGVycm9yOkZ9KX1jYXRjaChhYSl7fX19LHBhcnNlWE1QOmZ1bmN0aW9uKFope1goJC5wYXJzZVhNTChaKSl9LHhtcEF2YWlsYWJsZTpmdW5jdGlvbigpe3JldHVybiBlfSxnZXRNZWRpYUR1cmF0aW9uOmZ1bmN0aW9uKCl7cmV0dXJuIFN9LGdldFRvY1RpdGxlOmZ1bmN0aW9uKCl7cmV0dXJuIHF9LGdldFRvY0ltYWdlU3JjOmZ1bmN0aW9uKCl7cmV0dXJuIEJ9LGdldFRvY0NlbGxMYXlvdXRUeXBlOmZ1bmN0aW9uKCl7cmV0dXJuIHd9LHRvY0NvbnRhaW5zVGh1bWJzOmZ1bmN0aW9uKCl7cmV0dXJuIE19LGdldFRvY1RodW1iSW1hZ2VTcmM6ZnVuY3Rpb24oKXtyZXR1cm4gcH0sZ2V0VG9jSXRlbUFycmF5OmZ1bmN0aW9uKCl7cmV0dXJuIEt9LGdldEhvdHNwb3RJdGVtQXJyYXk6ZnVuY3Rpb24oKXtyZXR1cm4gY30sZ2V0Q2FwdGlvbkl0ZW1BcnJheTpmdW5jdGlvbigpe3JldHVybiBDfSxnZXRDYXB0aW9uRm9udEZhbWlseTpmdW5jdGlvbigpe3JldHVybiBPfSxnZXRDYXB0aW9uRm9udFNpemU6ZnVuY3Rpb24oKXtyZXR1cm4gbH0sZ2V0TWluQ2FwdGlvbkZvbnRTaXplOmZ1bmN0aW9uKCl7cmV0dXJuIHR9LGdldE1heENhcHRpb25Gb250U2l6ZTpmdW5jdGlvbigpe3JldHVybiBKfSxnZXRDYXB0aW9uQmdPcGFjaXR5OmZ1bmN0aW9uKCl7cmV0dXJuIG59LGdldENhcHRpb25UZXh0Q29sb3I6ZnVuY3Rpb24oKXtyZXR1cm4geX0sZ2V0Q2FwdGlvbkJnQ29sb3I6ZnVuY3Rpb24oKXtyZXR1cm4gR30sZ2V0Q2FwdGlvbkJnOmZ1bmN0aW9uKCl7cmV0dXJuInJnYmEoIitULnIrIiwgIitULmcrIiwgIitULmIrIiwgIituKyIpIn0sZ2V0U3BlZWNoVGV4dEl0ZW1BcnJheTpmdW5jdGlvbigpe3JldHVybiBmfSxnZXRTY3JlZW5UZXh0SXRlbUFycmF5OmZ1bmN0aW9uKCl7cmV0dXJuIGJ9LGhhc1RvY0l0ZW1zOmZ1bmN0aW9uKCl7cmV0dXJuIFF9LGhhc0NhcHRpb25JdGVtczpmdW5jdGlvbigpe3JldHVybiBWfSxoYXNIb3RzcG90SXRlbXM6ZnVuY3Rpb24oKXtyZXR1cm4gQX0saGFzUXVpejpmdW5jdGlvbigpe3JldHVybiBrfSxoYXNTY3JlZW5UZXh0SXRlbXM6ZnVuY3Rpb24oKXtyZXR1cm4gVX0saGFzU3BlZWNoVGV4dEl0ZW1zOmZ1bmN0aW9uKCl7cmV0dXJuIGp9LGdldExvY2FsRXJyb3JNZXNzYWdlOmZ1bmN0aW9uKCl7cmV0dXJuIHp9LGdldDQwNEVycm9yTWVzc2FnZTpmdW5jdGlvbigpe3JldHVybiBFfSxhZGRFdmVudExpc3RlbmVyOmZ1bmN0aW9uKFosYWEpe2lmKFo9PT0iUkVBRFkiKXtEPWFhfWVsc2V7aWYoWj09PSJFUlJPUiIpe2E9YWF9fX0scmVtb3ZlRXZlbnRMaXN0ZW5lcjpmdW5jdGlvbihaLGFhKXtpZihaPT09IlJFQURZIil7RD11bmRlZmluZWR9ZWxzZXtpZihaPT09IkVSUk9SIil7YT11bmRlZmluZWR9fX19fSgpKTt2YXIgVFNDPVRTQ3x8e307dmFyIF9nYXE9X2dhcXx8W107VFNDLm1lZGlhUGxheWVyPShmdW5jdGlvbigpe3ZhciB3PSIxLjAuMjUiO3ZhciByPSJodHRwOi8vd3d3LnRlY2hzbWl0aC5jb20vcmVkaXJlY3QuYXNwPyI7dmFyIGk9InRhcmdldD1udWV2b2FwcGRhdGEmcHJvZHVjdD1jYW10YXNpYSZsYW5nPWVudSZ2ZXI9MS4wLjAmb3M9bWFjIjt2YXIgbD0iZmFsc2UiO3ZhciBkPSIiO3ZhciBtO3ZhciB0PVRTQy5wbGF5ZXJDb25maWd1cmF0aW9uO3ZhciBxPVRTQy5tZWRpYUxpc3Q7dmFyIGc9VFNDLnBsYXllclZpZXc7dmFyIGg9VFNDLnhtcDt2YXIgYT1mYWxzZTtmdW5jdGlvbiBvKCl7aWYoVFNDLm1lZGlhTGlzdC5nZXRNZWRpYVR5cGUoKSE9PVRTQy5tZWRpYVR5cGUuV0VCTSYmc3dmb2JqZWN0Lmhhc0ZsYXNoUGxheWVyVmVyc2lvbih0LmdldE1pbkZsYXNoUGxheWVyVmVyc2lvbigpKSl7Zy5pbml0Rmxhc2hWaWV3KG0pfWVsc2V7Zy5kaXNwbGF5TWVzc2FnZVBhbmVsKG0sVFNDLm1lZGlhTGlzdC5nZXRFcnJvck1lc3NhZ2UoKSl9fWZ1bmN0aW9uIGIoKXtBKCk7aWYoVFNDLmRldmljZUluZm8uaXNMb2NhbCgpKXtnLmRpc3BsYXlNZXNzYWdlUGFuZWwobSxUU0MueG1wLmdldExvY2FsRXJyb3JNZXNzYWdlKCkpfWVsc2V7Zy5kaXNwbGF5TWVzc2FnZVBhbmVsKG0sVFNDLnhtcC5nZXQ0MDRFcnJvck1lc3NhZ2UoKSl9fWZ1bmN0aW9uIGUoKXtfZ2FxLnB1c2goWyJfc2V0QWNjb3VudCIsdC5nZXRHb29nbGVBbmFseXRpY3NJRCgpXSk7aWYodC5nZXRHQVBhZ2VWaWV3VHJhY2tpbmcoKSl7X2dhcS5wdXNoKFsiX3RyYWNrUGFnZXZpZXciLHQuZ2V0TWVkaWFGaWxlTmFtZSgpXSl9KGZ1bmN0aW9uKCl7dmFyIEM9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic2NyaXB0Iik7Qy50eXBlPSJ0ZXh0L2phdmFzY3JpcHQiO0MuYXN5bmM9dHJ1ZTtDLnNyYz0oImh0dHBzOiI9PWRvY3VtZW50LmxvY2F0aW9uLnByb3RvY29sPyJodHRwczovL3NzbCI6Imh0dHA6Ly93d3ciKSsiLmdvb2dsZS1hbmFseXRpY3MuY29tL2dhLmpzIjt2YXIgQj1kb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgic2NyaXB0IilbMF07Qi5wYXJlbnROb2RlLmluc2VydEJlZm9yZShDLEIpfSkoKX1mdW5jdGlvbiB2KCl7aWYoVFNDLmRldmljZUluZm8uaXNOdWV2b0FwcCgpKXt2YXIgQj1kb2N1bWVudC5xdWVyeVNlbGVjdG9yKCJtZXRhW25hbWU9dmlld3BvcnRdIik7aWYoQil7Qi5zZXRBdHRyaWJ1dGUoImNvbnRlbnQiLCJ3aWR0aD1kZXZpY2Utd2lkdGg7IGluaXRpYWwtc2NhbGU9MS4wOyBtYXhpbXVtLXNjYWxlPTEuMDsgdXNlci1zY2FsYWJsZT0wOyIpfX19ZnVuY3Rpb24gbigpe1RTQy5kZXZpY2VJbmZvLmxvb2tBdERldmljZSgpO3YoKTtpZigheCgpKXtzKCl9aWYodC5nZXRHb29nbGVBbmFseXRpY3NJRCgpJiYhc3dmb2JqZWN0Lmhhc0ZsYXNoUGxheWVyVmVyc2lvbih0LmdldE1pbkZsYXNoUGxheWVyVmVyc2lvbigpKSl7ZSgpfX1mdW5jdGlvbiBzKCl7cS5hZGRFdmVudExpc3RlbmVyKCJSRUFEWSIsaik7cS5hZGRFdmVudExpc3RlbmVyKCJFUlJPUiIsbyk7cS5pbml0KHQuZ2V0TWVkaWFTb3VyY2VzKCkpfWZ1bmN0aW9uIGYoKXtpZihUU0MuZGV2aWNlSW5mby5pc051ZXZvQXBwKCkmJmgueG1wQXZhaWxhYmxlKCkpe3ZhciBCPWRvY3VtZW50LmxvY2F0aW9uO3ZhciBEPWguZ2V0VG9jVGl0bGUoKTt2YXIgQz1oLmdldE1lZGlhRHVyYXRpb24oKTtkb2N1bWVudC5sb2NhdGlvbj0ibnVldm86Ly9pbmZvP3VybD0iK0IrIj90aXRsZT0iK0QrIj9kdXJhdGlvbj0iK0N9fWZ1bmN0aW9uIHAoKXtpZighYSl7Zy5yZW1vdmVFdmVudExpc3RlbmVyKCJWSURFT19TVEFSVCIpOyQoZG9jdW1lbnQpLnRyaWdnZXIoInRlY2hzbWl0aC5jbG91ZC52aWRlb2ZpcnN0Y2xpY2twbGF5Iik7YT10cnVlfX1mdW5jdGlvbiBqKCl7cS5yZW1vdmVFdmVudExpc3RlbmVyKCJSRUFEWSIsaik7cS5yZW1vdmVFdmVudExpc3RlbmVyKCJFUlJPUiIsbyk7aWYoVFNDLm1lZGlhTGlzdC5nZXRNZWRpYVR5cGUoKT09PVRTQy5tZWRpYVR5cGUuV0VCTSl7aWYoVFNDLmRldmljZUluZm8uaXNGaXJlZm94KCl8fFRTQy5kZXZpY2VJbmZvLmlzQ2hyb21lKCkpe2soKX1lbHNle2cuZGlzcGxheU1lc3NhZ2VQYW5lbChtLCJUaGlzIGJyb3dzZXIgZG9lcyBub3Qgc3VwcG9ydCBXZWJNIHZpZGVvLiIpfX1lbHNle2lmKFRTQy5kZXZpY2VJbmZvLmlzSVBob25lT3JJUG9kKCkpe2cuaW5pdFNpbXBsZUh0bWw1VmlldyhtKX1lbHNle2lmKHN3Zm9iamVjdC5oYXNGbGFzaFBsYXllclZlcnNpb24odC5nZXRNaW5GbGFzaFBsYXllclZlcnNpb24oKSkpe2cuaW5pdEZsYXNoVmlldyhtKX1lbHNle2lmKCFUU0MuZGV2aWNlSW5mby5pc0ZpcmVmb3goKXx8KFRTQy5kZXZpY2VJbmZvLmlzRmlyZWZveCgpJiYoVFNDLm1lZGlhTGlzdC5pc01lZGlhVHlwZUF2YWlsYWJsZShUU0MubWVkaWFUeXBlLldFQk0pfHxUU0MubWVkaWFMaXN0LmlzTWVkaWFUeXBlQXZhaWxhYmxlKFRTQy5tZWRpYVR5cGUuT0dHKSkpKXtrKCl9ZWxzZXtnLmRpc3BsYXlNZXNzYWdlUGFuZWwobSwiVGhpcyBicm93c2VyIGRvZXMgbm90IHN1cHBvcnQgdGhlIHZpZGVvIGZvcm1hdCBuZWVkZWQgZm9yIHBsYXliYWNrLiAgUGxlYXNlIGluc3RhbGwgdGhlIEZsYXNoIFBsYXllciBvciB1c2UgYSBkaWZmZXJlbnQgYnJvd3Nlci4iKX19fX19ZnVuY3Rpb24gaygpe2lmKHQuZ2V0WE1QU3JjKCkpe2guYWRkRXZlbnRMaXN0ZW5lcigiUkVBRFkiLEEpO2guYWRkRXZlbnRMaXN0ZW5lcigiRVJST1IiLGIpO2gubG9hZFhNUCh0LmdldFhNUFNyYygpKX1lbHNle0EoKX19ZnVuY3Rpb24geihCKXtpZih0LmdldElmcmFtZUNvbW11bmljYXRpb25zRW5hYmxlZCgpKXskKHBhcmVudC5kb2N1bWVudCkudHJpZ2dlcigidGVjaHNtaXRoLnNjcmVlbmNhc3QuY2FwdGlvbmNoYW5nZWQiLEIpfX1mdW5jdGlvbiBBKCl7dmFyIEI9ZmFsc2U7dmFyIEM9ZmFsc2U7aWYoaC54bXBBdmFpbGFibGUoKSl7aC5yZW1vdmVFdmVudExpc3RlbmVyKCJSRUFEWSIsQSk7aC5yZW1vdmVFdmVudExpc3RlbmVyKCJFUlJPUiIsYik7aWYoaC5oYXNUb2NJdGVtcygpfHwoKGguaGFzQ2FwdGlvbkl0ZW1zKCl8fGguaGFzU2NyZWVuVGV4dEl0ZW1zKCl8fGguaGFzU3BlZWNoVGV4dEl0ZW1zKCkpJiZ0LmdldElzU2VhcmNoYWJsZSgpKSl7Qj10cnVlfWlmKGguaGFzQ2FwdGlvbkl0ZW1zKCkpe2lmKHQuZ2V0SWZyYW1lQ29tbXVuaWNhdGlvbnNFbmFibGVkKCkpeyQocGFyZW50LmRvY3VtZW50KS50cmlnZ2VyKCJ0ZWNoc21pdGguc2NyZWVuY2FzdC5oYXNjYXB0aW9ucyIpfX1pZihoLmhhc1F1aXooKSl7aWYoVFNDLmRldmljZUluZm8uaXNMb2NhbCgpJiZUU0MucXVpek1vZGVsLmdldFJlcG9ydE1ldGhvZCgpIT09VFNDLnJlcG9ydFR5cGUuTk9ORSl7Qz10cnVlO1RTQy5xdWl6TW9kZWwuc2V0UmVwb3J0TWV0aG9kKFRTQy5yZXBvcnRUeXBlLk5PTkUpfWVsc2V7aWYoVFNDLnF1aXpNb2RlbC5nZXRSZXBvcnRNZXRob2QoKT09PVRTQy5yZXBvcnRUeXBlLlNDT1JNJiZUU0MucXVpek1vZGVsLmdldFRvdGFsTnVtYmVyT2ZHcmFkZWRRdWVzdGlvblNldHMoKT09PTApe3Quc2V0UmVwb3J0U2Nvcm1Db21wbGV0ZSh0cnVlKX19fWYoKX1nLmFkZEV2ZW50TGlzdGVuZXIoIlZJREVPX1NUQVJUIixwKTtnLmFkZEV2ZW50TGlzdGVuZXIoIkNBUFRJT05fQ0hBTkdFIix6KTtnLmluaXRIdG1sNVZpZXcobSxCKTtpZihDKXtnLmRpc3BsYXlNZXNzYWdlUGFuZWwobSxUU0MucXVpelVpU3RyaW5ncy5nZXREaXNhYmxlZExvY2FsUXVpelJlcG9ydGluZygpKX19ZnVuY3Rpb24gYyhCKXt2YXIgQz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzY3JpcHQiKTtDLnNldEF0dHJpYnV0ZSgidHlwZSIsInRleHQvamF2YXNjcmlwdCIpO0Muc2V0QXR0cmlidXRlKCJzcmMiLEIpO0MuYXN5bmM9dHJ1ZTtDLm9ubG9hZD1mdW5jdGlvbigpe3MoKX07aWYodHlwZW9mIEMhPSJ1bmRlZmluZWQiKXtkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgiaGVhZCIpWzBdLmFwcGVuZENoaWxkKEMpfX1mdW5jdGlvbiB4KCl7aWYoeSgpKXtjKHIraSk7cmV0dXJuIHRydWV9cmV0dXJuIGZhbHNlfWZ1bmN0aW9uIHUoKXtyZXR1cm4obD09PSJ0cnVlIil9ZnVuY3Rpb24geSgpe2lmKFRTQy5kZXZpY2VJbmZvLmlzSVBob25lT3JJUG9kKCkmJlRTQy5kZXZpY2VJbmZvLmlzUmV0aW5hRGlzcGxheSgpJiYhVFNDLmRldmljZUluZm8uaXNOdWV2b0FwcCgpKXtyZXR1cm4gdHJ1ZX1yZXR1cm4gZmFsc2V9cmV0dXJue2luaXQ6ZnVuY3Rpb24oQil7bT1CO24oKX0sZ2V0VmVyc2lvbjpmdW5jdGlvbigpe3JldHVybiB3fSxrZXlWYWx1ZURhdGFDYWxsYmFjazpmdW5jdGlvbihCKXtsPUIuaXNBcHBSZWFkeTtkPUIuYXBwRG93bmxvYWRVUkx9LGlzTnVldm9BcHBDYXBhYmxlQW5kQXZhaWxhYmxlOmZ1bmN0aW9uKCl7cmV0dXJuKHkoKSYmdSgpKX0scmVkaXJlY3RUb2lQaG9uZUFwcERvd25sb2FkOmZ1bmN0aW9uKCl7aWYoeSgpKXt3aW5kb3cub3BlbihkLCJfcGFyZW50Iil9fSxqc1NlZWtUaW1lOmZ1bmN0aW9uKEMpe3ZhciBCPSQoVFNDLnBsYXllclZpZXcuZ2V0Rmxhc2hJZCgpKTtpZihCKXtCWzBdLmpzU2Vla1RpbWUoQyl9ZWxzZXtyZXR1cm59fSxyZWRpcmVjdFRvaVBob25lQXBwOmZ1bmN0aW9uKCl7aWYoeSgpJiZ1KCkpe3ZhciBEPVN0cmluZyhkb2N1bWVudC5sb2NhdGlvbik7dmFyIEI9dC5nZXRQb3N0ZXJJbWFnZVNyYygpO3ZhciBFPShuZXcgRGF0ZSgpKS5nZXRUaW1lKCk7c2V0VGltZW91dChmdW5jdGlvbigpe3ZhciBGPShuZXcgRGF0ZSgpKS5nZXRUaW1lKCk7aWYoKEYtRSk8MTAwMCl7d2luZG93Lm9wZW4oZCwiX3BhcmVudCIpfX0sMzAwKTt2YXIgQz0ibnVldm86Ly9pbXBvcnQ/dXJsPSI7aWYoRC5pbmRleE9mKCI/IikhPT0tMSl7Qys9RCsiJnBvc3RlckltYWdlPSIrQn1lbHNle0MrPUQrIj9wb3N0ZXJJbWFnZT0iK0J9d2luZG93Lm9wZW4oQywiX3BhcmVudCIpfX19fSgpKTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9wYWdlcy90cmFuc2NyaXB0cy8yMDEzX0VjbGlwc2VDb25GcmFuY2UvZGVtb3MvY2RvL2Nkby9zY3JpcHRzL3N3Zm9iamVjdC5qcyBiL3BhZ2VzL3RyYW5zY3JpcHRzLzIwMTNfRWNsaXBzZUNvbkZyYW5jZS9kZW1vcy9jZG8vY2RvL3NjcmlwdHMvc3dmb2JqZWN0LmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhlYWZlOWQKLS0tIC9kZXYvbnVsbAorKysgYi9wYWdlcy90cmFuc2NyaXB0cy8yMDEzX0VjbGlwc2VDb25GcmFuY2UvZGVtb3MvY2RvL2Nkby9zY3JpcHRzL3N3Zm9iamVjdC5qcwpAQCAtMCwwICsxLDQgQEAKKy8qCVNXRk9iamVjdCB2Mi4yIDxodHRwOi8vY29kZS5nb29nbGUuY29tL3Avc3dmb2JqZWN0Lz4gCisJaXMgcmVsZWFzZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlIDxodHRwOi8vd3d3Lm9wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL21pdC1saWNlbnNlLnBocD4gCisqLwordmFyIHN3Zm9iamVjdD1mdW5jdGlvbigpe3ZhciBEPSJ1bmRlZmluZWQiLHI9Im9iamVjdCIsUz0iU2hvY2t3YXZlIEZsYXNoIixXPSJTaG9ja3dhdmVGbGFzaC5TaG9ja3dhdmVGbGFzaCIscT0iYXBwbGljYXRpb24veC1zaG9ja3dhdmUtZmxhc2giLFI9IlNXRk9iamVjdEV4cHJJbnN0Iix4PSJvbnJlYWR5c3RhdGVjaGFuZ2UiLE89d2luZG93LGo9ZG9jdW1lbnQsdD1uYXZpZ2F0b3IsVD1mYWxzZSxVPVtoXSxvPVtdLE49W10sST1bXSxsLFEsRSxCLEo9ZmFsc2UsYT1mYWxzZSxuLEcsbT10cnVlLE09ZnVuY3Rpb24oKXt2YXIgYWE9dHlwZW9mIGouZ2V0RWxlbWVudEJ5SWQhPUQmJnR5cGVvZiBqLmdldEVsZW1lbnRzQnlUYWdOYW1lIT1EJiZ0eXBlb2Ygai5jcmVhdGVFbGVtZW50IT1ELGFoPXQudXNlckFnZW50LnRvTG93ZXJDYXNlKCksWT10LnBsYXRmb3JtLnRvTG93ZXJDYXNlKCksYWU9WT8vd2luLy50ZXN0KFkpOi93aW4vLnRlc3QoYWgpLGFjPVk/L21hYy8udGVzdChZKTovbWFjLy50ZXN0KGFoKSxhZj0vd2Via2l0Ly50ZXN0KGFoKT9wYXJzZUZsb2F0KGFoLnJlcGxhY2UoL14uKndlYmtpdFwvKFxkKyhcLlxkKyk/KS4qJC8sIiQxIikpOmZhbHNlLFg9ISsiXHYxIixhZz1bMCwwLDBdLGFiPW51bGw7aWYodHlwZW9mIHQucGx1Z2lucyE9RCYmdHlwZW9mIHQucGx1Z2luc1tTXT09cil7YWI9dC5wbHVnaW5zW1NdLmRlc2NyaXB0aW9uO2lmKGFiJiYhKHR5cGVvZiB0Lm1pbWVUeXBlcyE9RCYmdC5taW1lVHlwZXNbcV0mJiF0Lm1pbWVUeXBlc1txXS5lbmFibGVkUGx1Z2luKSl7VD10cnVlO1g9ZmFsc2U7YWI9YWIucmVwbGFjZSgvXi4qXHMrKFxTK1xzK1xTKyQpLywiJDEiKTthZ1swXT1wYXJzZUludChhYi5yZXBsYWNlKC9eKC4qKVwuLiokLywiJDEiKSwxMCk7YWdbMV09cGFyc2VJbnQoYWIucmVwbGFjZSgvXi4qXC4oLiopXHMuKiQvLCIkMSIpLDEwKTthZ1syXT0vW2EtekEtWl0vLnRlc3QoYWIpP3BhcnNlSW50KGFiLnJlcGxhY2UoL14uKlthLXpBLVpdKyguKikkLywiJDEiKSwxMCk6MH19ZWxzZXtpZih0eXBlb2YgTy5BY3RpdmVYT2JqZWN0IT1EKXt0cnl7dmFyIGFkPW5ldyBBY3RpdmVYT2JqZWN0KFcpO2lmKGFkKXthYj1hZC5HZXRWYXJpYWJsZSgiJHZlcnNpb24iKTtpZihhYil7WD10cnVlO2FiPWFiLnNwbGl0KCIgIilbMV0uc3BsaXQoIiwiKTthZz1bcGFyc2VJbnQoYWJbMF0sMTApLHBhcnNlSW50KGFiWzFdLDEwKSxwYXJzZUludChhYlsyXSwxMCldfX19Y2F0Y2goWil7fX19cmV0dXJue3czOmFhLHB2OmFnLHdrOmFmLGllOlgsd2luOmFlLG1hYzphY319KCksaz1mdW5jdGlvbigpe2lmKCFNLnczKXtyZXR1cm59aWYoKHR5cGVvZiBqLnJlYWR5U3RhdGUhPUQmJmoucmVhZHlTdGF0ZT09ImNvbXBsZXRlIil8fCh0eXBlb2Ygai5yZWFkeVN0YXRlPT1EJiYoai5nZXRFbGVtZW50c0J5VGFnTmFtZSgiYm9keSIpWzBdfHxqLmJvZHkpKSl7ZigpfWlmKCFKKXtpZih0eXBlb2Ygai5hZGRFdmVudExpc3RlbmVyIT1EKXtqLmFkZEV2ZW50TGlzdGVuZXIoIkRPTUNvbnRlbnRMb2FkZWQiLGYsZmFsc2UpfWlmKE0uaWUmJk0ud2luKXtqLmF0dGFjaEV2ZW50KHgsZnVuY3Rpb24oKXtpZihqLnJlYWR5U3RhdGU9PSJjb21wbGV0ZSIpe2ouZGV0YWNoRXZlbnQoeCxhcmd1bWVudHMuY2FsbGVlKTtmKCl9fSk7aWYoTz09dG9wKXsoZnVuY3Rpb24oKXtpZihKKXtyZXR1cm59dHJ5e2ouZG9jdW1lbnRFbGVtZW50LmRvU2Nyb2xsKCJsZWZ0Iil9Y2F0Y2goWCl7c2V0VGltZW91dChhcmd1bWVudHMuY2FsbGVlLDApO3JldHVybn1mKCl9KSgpfX1pZihNLndrKXsoZnVuY3Rpb24oKXtpZihKKXtyZXR1cm59aWYoIS9sb2FkZWR8Y29tcGxldGUvLnRlc3Qoai5yZWFkeVN0YXRlKSl7c2V0VGltZW91dChhcmd1bWVudHMuY2FsbGVlLDApO3JldHVybn1mKCl9KSgpfXMoZil9fSgpO2Z1bmN0aW9uIGYoKXtpZihKKXtyZXR1cm59dHJ5e3ZhciBaPWouZ2V0RWxlbWVudHNCeVRhZ05hbWUoImJvZHkiKVswXS5hcHBlbmRDaGlsZChDKCJzcGFuIikpO1oucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChaKX1jYXRjaChhYSl7cmV0dXJufUo9dHJ1ZTt2YXIgWD1VLmxlbmd0aDtmb3IodmFyIFk9MDtZPFg7WSsrKXtVW1ldKCl9fWZ1bmN0aW9uIEsoWCl7aWYoSil7WCgpfWVsc2V7VVtVLmxlbmd0aF09WH19ZnVuY3Rpb24gcyhZKXtpZih0eXBlb2YgTy5hZGRFdmVudExpc3RlbmVyIT1EKXtPLmFkZEV2ZW50TGlzdGVuZXIoImxvYWQiLFksZmFsc2UpfWVsc2V7aWYodHlwZW9mIGouYWRkRXZlbnRMaXN0ZW5lciE9RCl7ai5hZGRFdmVudExpc3RlbmVyKCJsb2FkIixZLGZhbHNlKX1lbHNle2lmKHR5cGVvZiBPLmF0dGFjaEV2ZW50IT1EKXtpKE8sIm9ubG9hZCIsWSl9ZWxzZXtpZih0eXBlb2YgTy5vbmxvYWQ9PSJmdW5jdGlvbiIpe3ZhciBYPU8ub25sb2FkO08ub25sb2FkPWZ1bmN0aW9uKCl7WCgpO1koKX19ZWxzZXtPLm9ubG9hZD1ZfX19fX1mdW5jdGlvbiBoKCl7aWYoVCl7VigpfWVsc2V7SCgpfX1mdW5jdGlvbiBWKCl7dmFyIFg9ai5nZXRFbGVtZW50c0J5VGFnTmFtZSgiYm9keSIpWzBdO3ZhciBhYT1DKHIpO2FhLnNldEF0dHJpYnV0ZSgidHlwZSIscSk7dmFyIFo9WC5hcHBlbmRDaGlsZChhYSk7aWYoWil7dmFyIFk9MDsoZnVuY3Rpb24oKXtpZih0eXBlb2YgWi5HZXRWYXJpYWJsZSE9RCl7dmFyIGFiPVouR2V0VmFyaWFibGUoIiR2ZXJzaW9uIik7aWYoYWIpe2FiPWFiLnNwbGl0KCIgIilbMV0uc3BsaXQoIiwiKTtNLnB2PVtwYXJzZUludChhYlswXSwxMCkscGFyc2VJbnQoYWJbMV0sMTApLHBhcnNlSW50KGFiWzJdLDEwKV19fWVsc2V7aWYoWTwxMCl7WSsrO3NldFRpbWVvdXQoYXJndW1lbnRzLmNhbGxlZSwxMCk7cmV0dXJufX1YLnJlbW92ZUNoaWxkKGFhKTtaPW51bGw7SCgpfSkoKX1lbHNle0goKX19ZnVuY3Rpb24gSCgpe3ZhciBhZz1vLmxlbmd0aDtpZihhZz4wKXtmb3IodmFyIGFmPTA7YWY8YWc7YWYrKyl7dmFyIFk9b1thZl0uaWQ7dmFyIGFiPW9bYWZdLmNhbGxiYWNrRm47dmFyIGFhPXtzdWNjZXNzOmZhbHNlLGlkOll9O2lmKE0ucHZbMF0+MCl7dmFyIGFlPWMoWSk7aWYoYWUpe2lmKEYob1thZl0uc3dmVmVyc2lvbikmJiEoTS53ayYmTS53azwzMTIpKXt3KFksdHJ1ZSk7aWYoYWIpe2FhLnN1Y2Nlc3M9dHJ1ZTthYS5yZWY9eihZKTthYihhYSl9fWVsc2V7aWYob1thZl0uZXhwcmVzc0luc3RhbGwmJkEoKSl7dmFyIGFpPXt9O2FpLmRhdGE9b1thZl0uZXhwcmVzc0luc3RhbGw7YWkud2lkdGg9YWUuZ2V0QXR0cmlidXRlKCJ3aWR0aCIpfHwiMCI7YWkuaGVpZ2h0PWFlLmdldEF0dHJpYnV0ZSgiaGVpZ2h0Iil8fCIwIjtpZihhZS5nZXRBdHRyaWJ1dGUoImNsYXNzIikpe2FpLnN0eWxlY2xhc3M9YWUuZ2V0QXR0cmlidXRlKCJjbGFzcyIpfWlmKGFlLmdldEF0dHJpYnV0ZSgiYWxpZ24iKSl7YWkuYWxpZ249YWUuZ2V0QXR0cmlidXRlKCJhbGlnbiIpfXZhciBhaD17fTt2YXIgWD1hZS5nZXRFbGVtZW50c0J5VGFnTmFtZSgicGFyYW0iKTt2YXIgYWM9WC5sZW5ndGg7Zm9yKHZhciBhZD0wO2FkPGFjO2FkKyspe2lmKFhbYWRdLmdldEF0dHJpYnV0ZSgibmFtZSIpLnRvTG93ZXJDYXNlKCkhPSJtb3ZpZSIpe2FoW1hbYWRdLmdldEF0dHJpYnV0ZSgibmFtZSIpXT1YW2FkXS5nZXRBdHRyaWJ1dGUoInZhbHVlIil9fVAoYWksYWgsWSxhYil9ZWxzZXtwKGFlKTtpZihhYil7YWIoYWEpfX19fX1lbHNle3coWSx0cnVlKTtpZihhYil7dmFyIFo9eihZKTtpZihaJiZ0eXBlb2YgWi5TZXRWYXJpYWJsZSE9RCl7YWEuc3VjY2Vzcz10cnVlO2FhLnJlZj1afWFiKGFhKX19fX19ZnVuY3Rpb24geihhYSl7dmFyIFg9bnVsbDt2YXIgWT1jKGFhKTtpZihZJiZZLm5vZGVOYW1lPT0iT0JKRUNUIil7aWYodHlwZW9mIFkuU2V0VmFyaWFibGUhPUQpe1g9WX1lbHNle3ZhciBaPVkuZ2V0RWxlbWVudHNCeVRhZ05hbWUocilbMF07aWYoWil7WD1afX19cmV0dXJuIFh9ZnVuY3Rpb24gQSgpe3JldHVybiAhYSYmRigiNi4wLjY1IikmJihNLndpbnx8TS5tYWMpJiYhKE0ud2smJk0ud2s8MzEyKX1mdW5jdGlvbiBQKGFhLGFiLFgsWil7YT10cnVlO0U9Wnx8bnVsbDtCPXtzdWNjZXNzOmZhbHNlLGlkOlh9O3ZhciBhZT1jKFgpO2lmKGFlKXtpZihhZS5ub2RlTmFtZT09Ik9CSkVDVCIpe2w9ZyhhZSk7UT1udWxsfWVsc2V7bD1hZTtRPVh9YWEuaWQ9UjtpZih0eXBlb2YgYWEud2lkdGg9PUR8fCghLyUkLy50ZXN0KGFhLndpZHRoKSYmcGFyc2VJbnQoYWEud2lkdGgsMTApPDMxMCkpe2FhLndpZHRoPSIzMTAifWlmKHR5cGVvZiBhYS5oZWlnaHQ9PUR8fCghLyUkLy50ZXN0KGFhLmhlaWdodCkmJnBhcnNlSW50KGFhLmhlaWdodCwxMCk8MTM3KSl7YWEuaGVpZ2h0PSIxMzcifWoudGl0bGU9ai50aXRsZS5zbGljZSgwLDQ3KSsiIC0gRmxhc2ggUGxheWVyIEluc3RhbGxhdGlvbiI7dmFyIGFkPU0uaWUmJk0ud2luPyJBY3RpdmVYIjoiUGx1Z0luIixhYz0iTU1yZWRpcmVjdFVSTD0iK08ubG9jYXRpb24udG9TdHJpbmcoKS5yZXBsYWNlKC8mL2csIiUyNiIpKyImTU1wbGF5ZXJUeXBlPSIrYWQrIiZNTWRvY3RpdGxlPSIrai50aXRsZTtpZih0eXBlb2YgYWIuZmxhc2h2YXJzIT1EKXthYi5mbGFzaHZhcnMrPSImIithY31lbHNle2FiLmZsYXNodmFycz1hY31pZihNLmllJiZNLndpbiYmYWUucmVhZHlTdGF0ZSE9NCl7dmFyIFk9QygiZGl2Iik7WCs9IlNXRk9iamVjdE5ldyI7WS5zZXRBdHRyaWJ1dGUoImlkIixYKTthZS5wYXJlbnROb2RlLmluc2VydEJlZm9yZShZLGFlKTthZS5zdHlsZS5kaXNwbGF5PSJub25lIjsoZnVuY3Rpb24oKXtpZihhZS5yZWFkeVN0YXRlPT00KXthZS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGFlKX1lbHNle3NldFRpbWVvdXQoYXJndW1lbnRzLmNhbGxlZSwxMCl9fSkoKX11KGFhLGFiLFgpfX1mdW5jdGlvbiBwKFkpe2lmKE0uaWUmJk0ud2luJiZZLnJlYWR5U3RhdGUhPTQpe3ZhciBYPUMoImRpdiIpO1kucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoWCxZKTtYLnBhcmVudE5vZGUucmVwbGFjZUNoaWxkKGcoWSksWCk7WS5zdHlsZS5kaXNwbGF5PSJub25lIjsoZnVuY3Rpb24oKXtpZihZLnJlYWR5U3RhdGU9PTQpe1kucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChZKX1lbHNle3NldFRpbWVvdXQoYXJndW1lbnRzLmNhbGxlZSwxMCl9fSkoKX1lbHNle1kucGFyZW50Tm9kZS5yZXBsYWNlQ2hpbGQoZyhZKSxZKX19ZnVuY3Rpb24gZyhhYil7dmFyIGFhPUMoImRpdiIpO2lmKE0ud2luJiZNLmllKXthYS5pbm5lckhUTUw9YWIuaW5uZXJIVE1MfWVsc2V7dmFyIFk9YWIuZ2V0RWxlbWVudHNCeVRhZ05hbWUocilbMF07aWYoWSl7dmFyIGFkPVkuY2hpbGROb2RlcztpZihhZCl7dmFyIFg9YWQubGVuZ3RoO2Zvcih2YXIgWj0wO1o8WDtaKyspe2lmKCEoYWRbWl0ubm9kZVR5cGU9PTEmJmFkW1pdLm5vZGVOYW1lPT0iUEFSQU0iKSYmIShhZFtaXS5ub2RlVHlwZT09OCkpe2FhLmFwcGVuZENoaWxkKGFkW1pdLmNsb25lTm9kZSh0cnVlKSl9fX19fXJldHVybiBhYX1mdW5jdGlvbiB1KGFpLGFnLFkpe3ZhciBYLGFhPWMoWSk7aWYoTS53ayYmTS53azwzMTIpe3JldHVybiBYfWlmKGFhKXtpZih0eXBlb2YgYWkuaWQ9PUQpe2FpLmlkPVl9aWYoTS5pZSYmTS53aW4pe3ZhciBhaD0iIjtmb3IodmFyIGFlIGluIGFpKXtpZihhaVthZV0hPU9iamVjdC5wcm90b3R5cGVbYWVdKXtpZihhZS50b0xvd2VyQ2FzZSgpPT0iZGF0YSIpe2FnLm1vdmllPWFpW2FlXX1lbHNle2lmKGFlLnRvTG93ZXJDYXNlKCk9PSJzdHlsZWNsYXNzIil7YWgrPScgY2xhc3M9IicrYWlbYWVdKyciJ31lbHNle2lmKGFlLnRvTG93ZXJDYXNlKCkhPSJjbGFzc2lkIil7YWgrPSIgIithZSsnPSInK2FpW2FlXSsnIid9fX19fXZhciBhZj0iIjtmb3IodmFyIGFkIGluIGFnKXtpZihhZ1thZF0hPU9iamVjdC5wcm90b3R5cGVbYWRdKXthZis9JzxwYXJhbSBuYW1lPSInK2FkKyciIHZhbHVlPSInK2FnW2FkXSsnIiAvPid9fWFhLm91dGVySFRNTD0nPG9iamVjdCBjbGFzc2lkPSJjbHNpZDpEMjdDREI2RS1BRTZELTExY2YtOTZCOC00NDQ1NTM1NDAwMDAiJythaCsiPiIrYWYrIjwvb2JqZWN0PiI7TltOLmxlbmd0aF09YWkuaWQ7WD1jKGFpLmlkKX1lbHNle3ZhciBaPUMocik7Wi5zZXRBdHRyaWJ1dGUoInR5cGUiLHEpO2Zvcih2YXIgYWMgaW4gYWkpe2lmKGFpW2FjXSE9T2JqZWN0LnByb3RvdHlwZVthY10pe2lmKGFjLnRvTG93ZXJDYXNlKCk9PSJzdHlsZWNsYXNzIil7Wi5zZXRBdHRyaWJ1dGUoImNsYXNzIixhaVthY10pfWVsc2V7aWYoYWMudG9Mb3dlckNhc2UoKSE9ImNsYXNzaWQiKXtaLnNldEF0dHJpYnV0ZShhYyxhaVthY10pfX19fWZvcih2YXIgYWIgaW4gYWcpe2lmKGFnW2FiXSE9T2JqZWN0LnByb3RvdHlwZVthYl0mJmFiLnRvTG93ZXJDYXNlKCkhPSJtb3ZpZSIpe2UoWixhYixhZ1thYl0pfX1hYS5wYXJlbnROb2RlLnJlcGxhY2VDaGlsZChaLGFhKTtYPVp9fXJldHVybiBYfWZ1bmN0aW9uIGUoWixYLFkpe3ZhciBhYT1DKCJwYXJhbSIpO2FhLnNldEF0dHJpYnV0ZSgibmFtZSIsWCk7YWEuc2V0QXR0cmlidXRlKCJ2YWx1ZSIsWSk7Wi5hcHBlbmRDaGlsZChhYSl9ZnVuY3Rpb24geShZKXt2YXIgWD1jKFkpO2lmKFgmJlgubm9kZU5hbWU9PSJPQkpFQ1QiKXtpZihNLmllJiZNLndpbil7WC5zdHlsZS5kaXNwbGF5PSJub25lIjsoZnVuY3Rpb24oKXtpZihYLnJlYWR5U3RhdGU9PTQpe2IoWSl9ZWxzZXtzZXRUaW1lb3V0KGFyZ3VtZW50cy5jYWxsZWUsMTApfX0pKCl9ZWxzZXtYLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoWCl9fX1mdW5jdGlvbiBiKFope3ZhciBZPWMoWik7aWYoWSl7Zm9yKHZhciBYIGluIFkpe2lmKHR5cGVvZiBZW1hdPT0iZnVuY3Rpb24iKXtZW1hdPW51bGx9fVkucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChZKX19ZnVuY3Rpb24gYyhaKXt2YXIgWD1udWxsO3RyeXtYPWouZ2V0RWxlbWVudEJ5SWQoWil9Y2F0Y2goWSl7fXJldHVybiBYfWZ1bmN0aW9uIEMoWCl7cmV0dXJuIGouY3JlYXRlRWxlbWVudChYKX1mdW5jdGlvbiBpKFosWCxZKXtaLmF0dGFjaEV2ZW50KFgsWSk7SVtJLmxlbmd0aF09W1osWCxZXX1mdW5jdGlvbiBGKFope3ZhciBZPU0ucHYsWD1aLnNwbGl0KCIuIik7WFswXT1wYXJzZUludChYWzBdLDEwKTtYWzFdPXBhcnNlSW50KFhbMV0sMTApfHwwO1hbMl09cGFyc2VJbnQoWFsyXSwxMCl8fDA7cmV0dXJuKFlbMF0+WFswXXx8KFlbMF09PVhbMF0mJllbMV0+WFsxXSl8fChZWzBdPT1YWzBdJiZZWzFdPT1YWzFdJiZZWzJdPj1YWzJdKSk/dHJ1ZTpmYWxzZX1mdW5jdGlvbiB2KGFjLFksYWQsYWIpe2lmKE0uaWUmJk0ubWFjKXtyZXR1cm59dmFyIGFhPWouZ2V0RWxlbWVudHNCeVRhZ05hbWUoImhlYWQiKVswXTtpZighYWEpe3JldHVybn12YXIgWD0oYWQmJnR5cGVvZiBhZD09InN0cmluZyIpP2FkOiJzY3JlZW4iO2lmKGFiKXtuPW51bGw7Rz1udWxsfWlmKCFufHxHIT1YKXt2YXIgWj1DKCJzdHlsZSIpO1ouc2V0QXR0cmlidXRlKCJ0eXBlIiwidGV4dC9jc3MiKTtaLnNldEF0dHJpYnV0ZSgibWVkaWEiLFgpO249YWEuYXBwZW5kQ2hpbGQoWik7aWYoTS5pZSYmTS53aW4mJnR5cGVvZiBqLnN0eWxlU2hlZXRzIT1EJiZqLnN0eWxlU2hlZXRzLmxlbmd0aD4wKXtuPWouc3R5bGVTaGVldHNbai5zdHlsZVNoZWV0cy5sZW5ndGgtMV19Rz1YfWlmKE0uaWUmJk0ud2luKXtpZihuJiZ0eXBlb2Ygbi5hZGRSdWxlPT1yKXtuLmFkZFJ1bGUoYWMsWSl9fWVsc2V7aWYobiYmdHlwZW9mIGouY3JlYXRlVGV4dE5vZGUhPUQpe24uYXBwZW5kQ2hpbGQoai5jcmVhdGVUZXh0Tm9kZShhYysiIHsiK1krIn0iKSl9fX1mdW5jdGlvbiB3KFosWCl7aWYoIW0pe3JldHVybn12YXIgWT1YPyJ2aXNpYmxlIjoiaGlkZGVuIjtpZihKJiZjKFopKXtjKFopLnN0eWxlLnZpc2liaWxpdHk9WX1lbHNle3YoIiMiK1osInZpc2liaWxpdHk6IitZKX19ZnVuY3Rpb24gTChZKXt2YXIgWj0vW1xcXCI8PlwuO10vO3ZhciBYPVouZXhlYyhZKSE9bnVsbDtyZXR1cm4gWCYmdHlwZW9mIGVuY29kZVVSSUNvbXBvbmVudCE9RD9lbmNvZGVVUklDb21wb25lbnQoWSk6WX12YXIgZD1mdW5jdGlvbigpe2lmKE0uaWUmJk0ud2luKXt3aW5kb3cuYXR0YWNoRXZlbnQoIm9udW5sb2FkIixmdW5jdGlvbigpe3ZhciBhYz1JLmxlbmd0aDtmb3IodmFyIGFiPTA7YWI8YWM7YWIrKyl7SVthYl1bMF0uZGV0YWNoRXZlbnQoSVthYl1bMV0sSVthYl1bMl0pfXZhciBaPU4ubGVuZ3RoO2Zvcih2YXIgYWE9MDthYTxaO2FhKyspe3koTlthYV0pfWZvcih2YXIgWSBpbiBNKXtNW1ldPW51bGx9TT1udWxsO2Zvcih2YXIgWCBpbiBzd2ZvYmplY3Qpe3N3Zm9iamVjdFtYXT1udWxsfXN3Zm9iamVjdD1udWxsfSl9fSgpO3JldHVybntyZWdpc3Rlck9iamVjdDpmdW5jdGlvbihhYixYLGFhLFope2lmKE0udzMmJmFiJiZYKXt2YXIgWT17fTtZLmlkPWFiO1kuc3dmVmVyc2lvbj1YO1kuZXhwcmVzc0luc3RhbGw9YWE7WS5jYWxsYmFja0ZuPVo7b1tvLmxlbmd0aF09WTt3KGFiLGZhbHNlKX1lbHNle2lmKFope1ooe3N1Y2Nlc3M6ZmFsc2UsaWQ6YWJ9KX19fSxnZXRPYmplY3RCeUlkOmZ1bmN0aW9uKFgpe2lmKE0udzMpe3JldHVybiB6KFgpfX0sZW1iZWRTV0Y6ZnVuY3Rpb24oYWIsYWgsYWUsYWcsWSxhYSxaLGFkLGFmLGFjKXt2YXIgWD17c3VjY2VzczpmYWxzZSxpZDphaH07aWYoTS53MyYmIShNLndrJiZNLndrPDMxMikmJmFiJiZhaCYmYWUmJmFnJiZZKXt3KGFoLGZhbHNlKTtLKGZ1bmN0aW9uKCl7YWUrPSIiO2FnKz0iIjt2YXIgYWo9e307aWYoYWYmJnR5cGVvZiBhZj09PXIpe2Zvcih2YXIgYWwgaW4gYWYpe2FqW2FsXT1hZlthbF19fWFqLmRhdGE9YWI7YWoud2lkdGg9YWU7YWouaGVpZ2h0PWFnO3ZhciBhbT17fTtpZihhZCYmdHlwZW9mIGFkPT09cil7Zm9yKHZhciBhayBpbiBhZCl7YW1bYWtdPWFkW2FrXX19aWYoWiYmdHlwZW9mIFo9PT1yKXtmb3IodmFyIGFpIGluIFope2lmKHR5cGVvZiBhbS5mbGFzaHZhcnMhPUQpe2FtLmZsYXNodmFycys9IiYiK2FpKyI9IitaW2FpXX1lbHNle2FtLmZsYXNodmFycz1haSsiPSIrWlthaV19fX1pZihGKFkpKXt2YXIgYW49dShhaixhbSxhaCk7aWYoYWouaWQ9PWFoKXt3KGFoLHRydWUpfVguc3VjY2Vzcz10cnVlO1gucmVmPWFufWVsc2V7aWYoYWEmJkEoKSl7YWouZGF0YT1hYTtQKGFqLGFtLGFoLGFjKTtyZXR1cm59ZWxzZXt3KGFoLHRydWUpfX1pZihhYyl7YWMoWCl9fSl9ZWxzZXtpZihhYyl7YWMoWCl9fX0sc3dpdGNoT2ZmQXV0b0hpZGVTaG93OmZ1bmN0aW9uKCl7bT1mYWxzZX0sdWE6TSxnZXRGbGFzaFBsYXllclZlcnNpb246ZnVuY3Rpb24oKXtyZXR1cm57bWFqb3I6TS5wdlswXSxtaW5vcjpNLnB2WzFdLHJlbGVhc2U6TS5wdlsyXX19LGhhc0ZsYXNoUGxheWVyVmVyc2lvbjpGLGNyZWF0ZVNXRjpmdW5jdGlvbihaLFksWCl7aWYoTS53Myl7cmV0dXJuIHUoWixZLFgpfWVsc2V7cmV0dXJuIHVuZGVmaW5lZH19LHNob3dFeHByZXNzSW5zdGFsbDpmdW5jdGlvbihaLGFhLFgsWSl7aWYoTS53MyYmQSgpKXtQKFosYWEsWCxZKX19LHJlbW92ZVNXRjpmdW5jdGlvbihYKXtpZihNLnczKXt5KFgpfX0sY3JlYXRlQ1NTOmZ1bmN0aW9uKGFhLFosWSxYKXtpZihNLnczKXt2KGFhLFosWSxYKX19LGFkZERvbUxvYWRFdmVudDpLLGFkZExvYWRFdmVudDpzLGdldFF1ZXJ5UGFyYW1WYWx1ZTpmdW5jdGlvbihhYSl7dmFyIFo9ai5sb2NhdGlvbi5zZWFyY2h8fGoubG9jYXRpb24uaGFzaDtpZihaKXtpZigvXD8vLnRlc3QoWikpe1o9Wi5zcGxpdCgiPyIpWzFdfWlmKGFhPT1udWxsKXtyZXR1cm4gTChaKX12YXIgWT1aLnNwbGl0KCImIik7Zm9yKHZhciBYPTA7WDxZLmxlbmd0aDtYKyspe2lmKFlbWF0uc3Vic3RyaW5nKDAsWVtYXS5pbmRleE9mKCI9IikpPT1hYSl7cmV0dXJuIEwoWVtYXS5zdWJzdHJpbmcoKFlbWF0uaW5kZXhPZigiPSIpKzEpKSl9fX1yZXR1cm4iIn0sZXhwcmVzc0luc3RhbGxDYWxsYmFjazpmdW5jdGlvbigpe2lmKGEpe3ZhciBYPWMoUik7aWYoWCYmbCl7WC5wYXJlbnROb2RlLnJlcGxhY2VDaGlsZChsLFgpO2lmKFEpe3coUSx0cnVlKTtpZihNLmllJiZNLndpbil7bC5zdHlsZS5kaXNwbGF5PSJibG9jayJ9fWlmKEUpe0UoQil9fWE9ZmFsc2V9fX19KCk7ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvcGFnZXMvdHJhbnNjcmlwdHMvMjAxM19FY2xpcHNlQ29uRnJhbmNlL2RlbW9zL2Nkby9jZG8vc2tpbnMvb3ZlcmxheS9wbGF5ZXItbWluLmNzcyBiL3BhZ2VzL3RyYW5zY3JpcHRzLzIwMTNfRWNsaXBzZUNvbkZyYW5jZS9kZW1vcy9jZG8vY2RvL3NraW5zL292ZXJsYXkvcGxheWVyLW1pbi5jc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWQ1NzkxYgotLS0gL2Rldi9udWxsCisrKyBiL3BhZ2VzL3RyYW5zY3JpcHRzLzIwMTNfRWNsaXBzZUNvbkZyYW5jZS9kZW1vcy9jZG8vY2RvL3NraW5zL292ZXJsYXkvcGxheWVyLW1pbi5jc3MKQEAgLTAsMCArMSBAQAorQGNoYXJzZXQgInV0Zi04IjtodG1se2NvbG9yOiMwMDB9Ym9keSxkaXYsZGwsZHQsZGQsdWwsb2wsbGksaDEsaDIsaDMsaDQsaDUsaDYscHJlLGNvZGUsZm9ybSxmaWVsZHNldCxsZWdlbmQsaW5wdXQsdGV4dGFyZWEscCxibG9ja3F1b3RlLHRoLHRke21hcmdpbjowO3BhZGRpbmc6MH10YWJsZXtib3JkZXItY29sbGFwc2U6Y29sbGFwc2U7Ym9yZGVyLXNwYWNpbmc6MH1maWVsZHNldCxpbWd7Ym9yZGVyOjB9YWRkcmVzcyxjYXB0aW9uLGNpdGUsY29kZSxkZm4sZW0sc3Ryb25nLHRoLHZhcntmb250LXN0eWxlOm5vcm1hbDtmb250LXdlaWdodDpub3JtYWx9bGl7bGlzdC1zdHlsZTpub25lfWNhcHRpb24sdGh7dGV4dC1hbGlnbjpsZWZ0fWgxLGgyLGgzLGg0LGg1LGg2e2ZvbnQtc2l6ZToxMDAlO2ZvbnQtd2VpZ2h0Om5vcm1hbH1xOmJlZm9yZSxxOmFmdGVye2NvbnRlbnQ6Jyd9YWJicixhY3Jvbnlte2JvcmRlcjowO2ZvbnQtdmFyaWFudDpub3JtYWx9c3Vwe3ZlcnRpY2FsLWFsaWduOnRleHQtdG9wfXN1Ynt2ZXJ0aWNhbC1hbGlnbjp0ZXh0LWJvdHRvbX1pbnB1dCx0ZXh0YXJlYSxzZWxlY3R7Zm9udC1mYW1pbHk6aW5oZXJpdDtmb250LXNpemU6aW5oZXJpdDtmb250LXdlaWdodDppbmhlcml0fWlucHV0LHRleHRhcmVhLHNlbGVjdHsqZm9udC1zaXplOjEwMCV9bGVnZW5ke2NvbG9yOiMwMDB9Ym9keXtmb250OjEzcHgvMS4yMzEgYXJpYWwsaGVsdmV0aWNhLGNsZWFuLHNhbnMtc2VyaWY7KmZvbnQtc2l6ZTpzbWFsbDsqZm9udDp4LXNtYWxsfXRhYmxle2ZvbnQtc2l6ZTppbmhlcml0O2ZvbnQ6MTAwJX1wcmUsY29kZSxrYmQsc2FtcCx0dHtmb250LWZhbWlseTptb25vc3BhY2U7KmZvbnQtc2l6ZToxMDglO2xpbmUtaGVpZ2h0OjEwMCV9aDF7Zm9udC1zaXplOjEzOC41JX1oMntmb250LXNpemU6MTIzLjElfWgze2ZvbnQtc2l6ZToxMDglfWgxLGgyLGgze21hcmdpbjoxZW0gMH1oMSxoMixoMyxoNCxoNSxoNixzdHJvbmd7Zm9udC13ZWlnaHQ6Ym9sZH1hYmJyLGFjcm9ueW17Ym9yZGVyLWJvdHRvbToxcHggZG90dGVkICMwMDA7Y3Vyc29yOmhlbHB9ZW17Zm9udC1zdHlsZTppdGFsaWN9YmxvY2txdW90ZSx1bCxvbCxkbHttYXJnaW46MWVtfW9sLHVsLGRse21hcmdpbi1sZWZ0OjJlbX1vbCBsaXtsaXN0LXN0eWxlOmRlY2ltYWwgb3V0c2lkZX11bCBsaXtsaXN0LXN0eWxlOmRpc2Mgb3V0c2lkZX1kbCBkZHttYXJnaW4tbGVmdDoxZW19dGgsdGR7Ym9yZGVyOjA7cGFkZGluZzouNWVtfXRoe2ZvbnQtd2VpZ2h0OmJvbGQ7dGV4dC1hbGlnbjpjZW50ZXJ9Y2FwdGlvbnttYXJnaW4tYm90dG9tOi41ZW07dGV4dC1hbGlnbjpjZW50ZXJ9cCxmaWVsZHNldCx0YWJsZSxwcmV7bWFyZ2luOjB9aW5wdXRbdHlwZT10ZXh0XSxpbnB1dFt0eXBlPXBhc3N3b3JkXSx0ZXh0YXJlYXt3aWR0aDoxMi4yNWVtOyp3aWR0aDoxMS45ZW19aHRtbCxib2R5e2hlaWdodDoxMDAlfWh0bWwsYm9keSxmb3JtLGZpZWxkc2V0LHAsZGl2LGgxLGgyLGgzLGg0LGg1LGg2ey13ZWJraXQtdGV4dC1zaXplLWFkanVzdDpub25lfWJvZHl7bWFyZ2luOjA7cGFkZGluZzowO292ZXJmbG93OmhpZGRlbjtiYWNrZ3JvdW5kLWNvbG9yOiNmZmZ9b2JqZWN0OmZvY3Vze291dGxpbmU6MH0jdHNjVmlkZW9Db250ZW50e2Rpc3BsYXk6bm9uZTtiYWNrZ3JvdW5kLWNvbG9yOiMwMDA7b3ZlcmZsb3c6aGlkZGVufSN2aWRlb1dyYXBwZXJ7ZmxvYXQ6bGVmdDtvdmVyZmxvdzpoaWRkZW47ZGlzcGxheTpub25lfSN2aWRlb1dyYXBwZXI6LXdlYmtpdC1mdWxsLXNjcmVlbnt3aWR0aDoxMDAlO2hlaWdodDoxMDAlfSN2aWRlb1dyYXBwZXI6LXdlYmtpdC1mdWxsLXNjcmVlbiB2aWRlb3t3aWR0aDoxMDAlfSNwcm9ncmVzc3tjdXJzb3I6cG9pbnRlcn0jZnNTZWFyY2hBbGVydHttYXJnaW46NXB4IDAgNXB4IDA7cGFkZGluZzoxMHB4IDEwcHggMTBweCAxMHB4O2NvbG9yOiNmZmY7Zm9udC1zaXplOjEycHg7YmFja2dyb3VuZC1jb2xvcjojYmE4YTI5O2JhY2tncm91bmQtaW1hZ2U6LW1zLWxpbmVhci1ncmFkaWVudCh0b3AsI2JhOGEyOSAwLCNhODUwMmYgMTAwJSk7YmFja2dyb3VuZC1pbWFnZTotbW96LWxpbmVhci1ncmFkaWVudCh0b3AsI2JhOGEyOSAwLCNhODUwMmYgMTAwJSk7YmFja2dyb3VuZC1pbWFnZTotby1saW5lYXItZ3JhZGllbnQodG9wLCNiYThhMjkgMCwjYTg1MDJmIDEwMCUpO2JhY2tncm91bmQtaW1hZ2U6LXdlYmtpdC1ncmFkaWVudChsaW5lYXIsbGVmdCB0b3AsbGVmdCBib3R0b20sY29sb3Itc3RvcCgwLCNiYThhMjkpLGNvbG9yLXN0b3AoMSwjYTg1MDJmKSk7YmFja2dyb3VuZC1pbWFnZTotd2Via2l0LWxpbmVhci1ncmFkaWVudCh0b3AsI2JhOGEyOSAwLCNhODUwMmYgMTAwJSk7YmFja2dyb3VuZC1pbWFnZTpsaW5lYXItZ3JhZGllbnQodG9wLCNiYThhMjkgMCwjYTg1MDJmIDEwMCUpO2JvcmRlcjoxcHggc29saWQgIzgwMDAwMDstbW96LWJveC1zaGFkb3c6MCAwIDVweCByZ2JhKDAsMCwwLC41KTstd2Via2l0LWJveC1zaGFkb3c6MCAwIDVweCByZ2JhKDAsMCwwLC41KTt0ZXh0LXNoYWRvdzoxcHggMXB4IDAgcmdiYSgwLDAsMCwuNSl9I2FsZXJ0RGlhbG9ne2Rpc3BsYXk6bm9uZTtwb3NpdGlvbjphYnNvbHV0ZTt6LWluZGV4Ojk5OTk7cGFkZGluZzoxNXB4O2NvbG9yOiNmZmY7Zm9udC1zaXplOjIwcHg7dG9wOjMwcHg7bGVmdDoyNSU7cmlnaHQ6MjUlO2JhY2tncm91bmQtY29sb3I6I2JhOGEyOTtiYWNrZ3JvdW5kLWltYWdlOi1tcy1saW5lYXItZ3JhZGllbnQodG9wLCNiYThhMjkgMCwjYTg1MDJmIDEwMCUpO2JhY2tncm91bmQtaW1hZ2U6LW1vei1saW5lYXItZ3JhZGllbnQodG9wLCNiYThhMjkgMCwjYTg1MDJmIDEwMCUpO2JhY2tncm91bmQtaW1hZ2U6LW8tbGluZWFyLWdyYWRpZW50KHRvcCwjYmE4YTI5IDAsI2E4NTAyZiAxMDAlKTtiYWNrZ3JvdW5kLWltYWdlOi13ZWJraXQtZ3JhZGllbnQobGluZWFyLGxlZnQgdG9wLGxlZnQgYm90dG9tLGNvbG9yLXN0b3AoMCwjYmE4YTI5KSxjb2xvci1zdG9wKDEsI2E4NTAyZikpO2JhY2tncm91bmQtaW1hZ2U6LXdlYmtpdC1saW5lYXItZ3JhZGllbnQodG9wLCNiYThhMjkgMCwjYTg1MDJmIDEwMCUpO2JhY2tncm91bmQtaW1hZ2U6bGluZWFyLWdyYWRpZW50KHRvcCwjYmE4YTI5IDAsI2E4NTAyZiAxMDAlKTtib3JkZXItcmFkaXVzOjE0cHg7LW1vei1ib3JkZXItcmFkaXVzOjE0cHg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjE0cHg7Ym9yZGVyOjFweCBzb2xpZCAjODAwMDAwOy1tb3otYm94LXNoYWRvdzowIDAgNXB4IHJnYmEoMCwwLDAsLjUpOy13ZWJraXQtYm94LXNoYWRvdzowIDAgNXB4IHJnYmEoMCwwLDAsLjUpO3RleHQtc2hhZG93OjFweCAxcHggMCByZ2JhKDAsMCwwLC41KTtjdXJzb3I6cG9pbnRlcn0jYWxlcnREaWFsb2cgc3BhbntkaXNwbGF5OmJsb2NrO21heC1oZWlnaHQ6MjAwcHg7b3ZlcmZsb3cteTphdXRvfSNhbGVydERpYWxvZyBoNHttYXJnaW4tdG9wOjE0cHg7dGV4dC1hbGlnbjpjZW50ZXI7bWFyZ2luLWxlZnQ6YXV0bzttYXJnaW4tcmlnaHQ6YXV0bzttYXgtd2lkdGg6MjAwcHg7YmFja2dyb3VuZC1jb2xvcjojNzMzODE3O2JvcmRlci1yYWRpdXM6OHB4Oy1tb3otYm9yZGVyLXJhZGl1czo4cHg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjhweDstbW96LWJveC1zaGFkb3c6MCAwIDVweCByZ2JhKDAsMCwwLC41KTstd2Via2l0LWJveC1zaGFkb3c6MCAwIDVweCByZ2JhKDAsMCwwLC41KX0jdHNjX2lvX292ZXJsYXl7cG9zaXRpb246YWJzb2x1dGU7ei1pbmRleDo5OTUwO3RvcDowO2xlZnQ6MDtiYWNrZ3JvdW5kLWNvbG9yOiMwMDA7d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJTtwYWRkaW5nOjA7bWFyZ2luOjA7b3BhY2l0eTouN30jdHNjX2lvX2NvbnRhaW5lcntwb3NpdGlvbjphYnNvbHV0ZTt6LWluZGV4Ojk5NTE7dGV4dC1hbGlnbjpjZW50ZXI7d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJTtwYWRkaW5nOjA7bWFyZ2luOjA7bWFyZ2luLXRvcDo0MCU7Y29sb3I6I2ZmZn0jdHNjX2lvX21lc3NhZ2V7bWFyZ2luLWxlZnQ6YXV0bzttYXJnaW4tcmlnaHQ6YXV0bztwYWRkaW5nOjhweDtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwwLDAsMC44MCk7Ym9yZGVyLXRvcC1yaWdodC1yYWRpdXM6MTJweDtib3JkZXItdG9wLWxlZnQtcmFkaXVzOjEycHg7Ym9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6MTJweDtib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOjEycHg7LW1vei1ib3JkZXItcmFkaXVzOjEycHg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjEycHg7bWF4LXdpZHRoOjMwMHB4fSN0c2NfaW9fbWVzc2FnZSBzcGFue2Rpc3BsYXk6YmxvY2t9I3RzY19pb19jb250YWluZXIgaW1ne2JvcmRlcjowO21hcmdpbjoxMHB4IDEwcHggMCAxMHB4fS5jZW50ZXJlZEltYWdle3ZlcnRpY2FsLWFsaWduOm1pZGRsZTt0ZXh0LWFsaWduOmNlbnRlcn0jdmlkZW9TaWRlYmFyQ29udGVudHtjb2xvcjpXaGl0ZX0jbWFya2Vyc3tkaXNwbGF5Om5vbmU7cG9zaXRpb246YWJzb2x1dGU7dG9wOjB9I3ZpZGVvU2lkZWJhcntsZWZ0Oi0yNTJweDt0b3A6MDt6LWluZGV4Ojk4MDI7Ym9yZGVyLXJpZ2h0OnNvbGlkIDFweCAjNGM0YzRjO2JvcmRlci1sZWZ0OnNvbGlkIDFweCAjNGM0YzRjO3Bvc2l0aW9uOmFic29sdXRlO3dpZHRoOjI1MnB4O29wYWNpdHk6MTtiYWNrZ3JvdW5kLWNvbG9yOkJsYWNrO2Rpc3BsYXk6bm9uZX0jdmlkZW9TaWRlYmFySGVhZHtwYWRkaW5nOjZweCA1cHggNHB4IDJweDt3aWR0aDoyNDVweDtjb2xvcjp3aGl0ZTtiYWNrZ3JvdW5kOiM0ZTRlNGU7YmFja2dyb3VuZDp1cmwoZGF0YTppbWFnZS9zdmcreG1sO2Jhc2U2NCxQRDk0Yld3Z2RtVnljMmx2YmowaU1TNHdJaUEvUGdvOGMzWm5JSGh0Ykc1elBTSm9kSFJ3T2k4dmQzZDNMbmN6TG05eVp5OHlNREF3TDNOMlp5SWdkMmxrZEdnOUlqRXdNQ1VpSUdobGFXZG9kRDBpTVRBd0pTSWdkbWxsZDBKdmVEMGlNQ0F3SURFZ01TSWdjSEpsYzJWeWRtVkJjM0JsWTNSU1lYUnBiejBpYm05dVpTSStDaUFnUEd4cGJtVmhja2R5WVdScFpXNTBJR2xrUFNKbmNtRmtMWFZqWjJjdFoyVnVaWEpoZEdWa0lpQm5jbUZrYVdWdWRGVnVhWFJ6UFNKMWMyVnlVM0JoWTJWUGJsVnpaU0lnZURFOUlqQWxJaUI1TVQwaU1DVWlJSGd5UFNJd0pTSWdlVEk5SWpFd01DVWlQZ29nSUNBZ1BITjBiM0FnYjJabWMyVjBQU0l3SlNJZ2MzUnZjQzFqYjJ4dmNqMGlJelJsTkdVMFpTSWdjM1J2Y0MxdmNHRmphWFI1UFNJeElpOCtDaUFnSUNBOGMzUnZjQ0J2Wm1aelpYUTlJalV3SlNJZ2MzUnZjQzFqYjJ4dmNqMGlJelJqTkdNMFl5SWdjM1J2Y0MxdmNHRmphWFI1UFNJeElpOCtDaUFnSUNBOGMzUnZjQ0J2Wm1aelpYUTlJakV3TUNVaUlITjBiM0F0WTI5c2IzSTlJaU0yT0RZNE5qZ2lJSE4wYjNBdGIzQmhZMmwwZVQwaU1TSXZQZ29nSUR3dmJHbHVaV0Z5UjNKaFpHbGxiblErQ2lBZ1BISmxZM1FnZUQwaU1DSWdlVDBpTUNJZ2QybGtkR2c5SWpFaUlHaGxhV2RvZEQwaU1TSWdabWxzYkQwaWRYSnNLQ05uY21Ga0xYVmpaMmN0WjJWdVpYSmhkR1ZrS1NJZ0x6NEtQQzl6ZG1jKyk7YmFja2dyb3VuZDotbW96LWxpbmVhci1ncmFkaWVudCh0b3AsIzRlNGU0ZSAwLCM0YzRjNGMgNTAlLCM2ODY4NjggMTAwJSk7YmFja2dyb3VuZDotd2Via2l0LWdyYWRpZW50KGxpbmVhcixsZWZ0IHRvcCxsZWZ0IGJvdHRvbSxjb2xvci1zdG9wKDAlLCM0ZTRlNGUpLGNvbG9yLXN0b3AoNTAlLCM0YzRjNGMpLGNvbG9yLXN0b3AoMTAwJSwjNjg2ODY4KSk7YmFja2dyb3VuZDotd2Via2l0LWxpbmVhci1ncmFkaWVudCh0b3AsIzRlNGU0ZSAwLCM0YzRjNGMgNTAlLCM2ODY4NjggMTAwJSk7YmFja2dyb3VuZDotby1saW5lYXItZ3JhZGllbnQodG9wLCM0ZTRlNGUgMCwjNGM0YzRjIDUwJSwjNjg2ODY4IDEwMCUpO2JhY2tncm91bmQ6LW1zLWxpbmVhci1ncmFkaWVudCh0b3AsIzRlNGU0ZSAwLCM0YzRjNGMgNTAlLCM2ODY4NjggMTAwJSk7YmFja2dyb3VuZDpsaW5lYXItZ3JhZGllbnQodG9wLCM0ZTRlNGUgMCwjNGM0YzRjIDUwJSwjNjg2ODY4IDEwMCUpO2ZpbHRlcjpwcm9naWQ6RFhJbWFnZVRyYW5zZm9ybS5NaWNyb3NvZnQuZ3JhZGllbnQoc3RhcnRDb2xvcnN0cj0nIzRlNGU0ZScsZW5kQ29sb3JzdHI9JyM2ODY4NjgnLEdyYWRpZW50VHlwZT0wKX0jdGFibGVPZkNvbnRlbnRzSW1hZ2V7bWF4LXdpZHRoOjE5MHB4O21hcmdpbjowIGF1dG87ZGlzcGxheTpibG9ja30jdmlkZW9TaWRlYmFyQ29udGVudCBvbHtwYWRkaW5nOjA7bGlzdC1zdHlsZTpub25lO21hcmdpbjowfSN2aWRlb1NpZGViYXJDb250ZW50IGxpe2xpc3Qtc3R5bGU6bm9uZX0jdmlkZW9TaWRlYmFyQ29udGVudCBsaTpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiMzMzM7Y29sb3I6I2ZmZjtjdXJzb3I6cG9pbnRlcn0jdmlkZW9TaWRlYmFyQ29udGVudCBsaS5ub1RodW1iSW1hZ2V7cGFkZGluZzoxMHB4IDZweCAxMHB4IDhweH0jdmlkZW9TaWRlYmFyQ29udGVudCBsaS5oYXNUaHVtYkltYWdle3BhZGRpbmc6NHB4IDEwcHggNHB4IDEwcHh9LnRvY0l0ZW1MYWJlbHtkaXNwbGF5OmJsb2NrO3Bvc2l0aW9uOnJlbGF0aXZlO21hcmdpbi1sZWZ0OjVweH0uc2VsZWN0ZWRUb2NJdGVte2JhY2tncm91bmQtY29sb3I6IzUxODZhNH0jdmlkZW9TaWRlYmFyUHVzaHBpbntwb3NpdGlvbjphYnNvbHV0ZTtyaWdodDowO3RvcDozcHh9I3ZpZGVvU2lkZWJhclB1c2hwaW4uZGlzYWJsZWR7b3BhY2l0eTouM30jcGxheXtjdXJzb3I6cG9pbnRlcn0jcGxheSBzcGFue2Rpc3BsYXk6YmxvY2s7Zm9udC1zaXplOjA7bGluZS1oZWlnaHQ6MDtjdXJzb3I6cG9pbnRlcn0jcmV3aW5ke2N1cnNvcjpwb2ludGVyfSNwcmV2aW91c3tjdXJzb3I6cG9pbnRlcn0jbmV4dHtjdXJzb3I6cG9pbnRlcn0jdG9jQnV0dG9ue2Rpc3BsYXk6bm9uZTtjdXJzb3I6cG9pbnRlcn0jZnVsbHNjcmVlbl9lbnRlcl9idXR0b257Y3Vyc29yOnBvaW50ZXJ9I3ZvbHVtZXtjdXJzb3I6cG9pbnRlcn0jY2xvc2VkQ2FwdGlvbkJ1dHRvbntkaXNwbGF5Om5vbmU7Y3Vyc29yOnBvaW50ZXJ9I3ZvbHVtZXtjdXJzb3I6cG9pbnRlcn0jY2FwdGlvbnN7ZGlzcGxheTpub25lfSNzY3JlZW5UZXh0e2Rpc3BsYXk6bm9uZX0jc3BlZWNoVGV4dHtkaXNwbGF5Om5vbmV9I2hvdHNwb3RDb250YWluZXJ7cG9zaXRpb246YWJzb2x1dGU7ZGlzcGxheTpibG9jaztvdXRsaW5lOjA7ei1pbmRleDo5ODAxfSNob3RzcG90Q29udGFpbmVyRGVidWd7cG9zaXRpb246YWJzb2x1dGU7ZGlzcGxheTpub25lO3otaW5kZXg6OTgwMDt0b3A6MDtsZWZ0OjB9LmhvdHNwb3R7aGVpZ2h0OjQwcHg7d2lkdGg6NTBweDttYXJnaW4tcmlnaHQ6NXB4O3RleHQtYWxpZ246Y2VudGVyOy13ZWJraXQtYm9yZGVyLXJhZGl1czo1cHg7LW1vei1ib3JkZXItcmFkaXVzOjVweDtib3JkZXItcmFkaXVzOjVweDtiYWNrZ3JvdW5kLWNvbG9yOiNmMDA7cG9zaXRpb246YWJzb2x1dGU7b3BhY2l0eTouNDtjdXJzb3I6cG9pbnRlcn0uaG90c3BvdC5oaWRle2Rpc3BsYXk6bm9uZX0jY3VycmVudENhcHRpb257cG9zaXRpb246YWJzb2x1dGU7Zm9udC1mYW1pbHk6QXJpYWwsSGVsdmV0aWNhLHNhbnMtc2VyaWY7bGVmdDowO3BhZGRpbmc6NXB4IDA7Y29sb3I6I2ZmZjtoZWlnaHQ6OTFweDtsaW5lLWhlaWdodDoxLjRlbX0uY2FwdGlvbkhBbGlnbkxlZnR7dGV4dC1hbGlnbjpsZWZ0fS5jYXB0aW9uSEFsaWduQ2VudGVye3RleHQtYWxpZ246Y2VudGVyfS5jYXB0aW9uSEFsaWduUmlnaHR7dGV4dC1hbGlnbjpyaWdodH0jY3VycmVudENhcHRpb24gc3BhbntiYWNrZ3JvdW5kLWNvbG9yOiMwMDA7b3BhY2l0eTouODtwYWRkaW5nOjJweH0jY3VycmVudENhcHRpb24uaGlkZXtkaXNwbGF5Om5vbmU7dmlzaWJpbGl0eTpoaWRkZW59I3ZpZGVvU2lkZWJhckNvbnRlbnRXcmFwcGVye292ZXJmbG93OmF1dG99I3NpZGViYXJUb2dnbGV7cG9zaXRpb246YWJzb2x1dGU7bGVmdDoyMDJweDt0b3A6MDt3aWR0aDozMHB4O2hlaWdodDo0MHB4O2JhY2tncm91bmQtY29sb3I6Izc3Nzstd2Via2l0LWJvcmRlci1yYWRpdXM6MTVweDstd2Via2l0LWJvcmRlci10b3AtbGVmdC1yYWRpdXM6MDstd2Via2l0LWJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6MDstbW96LWJvcmRlci1yYWRpdXM6MCAxNXB4IDE1cHggMDtib3JkZXItcmFkaXVzOjAgMTVweCAxNXB4IDA7cGFkZGluZzo0MHB4IDAgMCA1cHg7b3BhY2l0eTouODtjdXJzb3I6cG9pbnRlcn0jc2lkZWJhclRvZ2dsZSBzcGFue2ZvbnQtc2l6ZTowO2xpbmUtaGVpZ2h0OjA7d2lkdGg6MDtib3JkZXItdG9wOjEwcHggc29saWQgIzc3Nztib3JkZXItYm90dG9tOjEwcHggc29saWQgIzc3N30jc2lkZWJhclRvZ2dsZS5oaWRlIHNwYW57Ym9yZGVyLXJpZ2h0OjIwcHggc29saWQgI0ZGRn0jc2lkZWJhclRvZ2dsZS5zaG93IHNwYW57Ym9yZGVyLWxlZnQ6MjBweCBzb2xpZCAjRkZGfSN2aWRlb0NsaWNrVG9QbGF5LCN2aWRlb0NsaWNrVG9SZXBsYXl7Y3Vyc29yOnBvaW50ZXI7YmFja2dyb3VuZC1wb3NpdGlvbjpjZW50ZXIgY2VudGVyO2JhY2tncm91bmQtcmVwZWF0Om5vLXJlcGVhdDtiYWNrZ3JvdW5kLXNpemU6MTAwJTtkaXNwbGF5Om5vbmV9I3NlYXJjaEFyZWF7d2lkdGg6MjIycHg7YmFja2dyb3VuZDojZmZmO2JvcmRlcjoxcHggc29saWQgI2NjYzstd2Via2l0LWJvcmRlci1yYWRpdXM6MTJweDstbW96LWJvcmRlci1yYWRpdXM6MTJweDtwYWRkaW5nOjJweCAycHggMnB4IDIycHg7bWFyZ2luLXRvcDo0cHg7YmFja2dyb3VuZC1pbWFnZTp1cmwoZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFCQUFBQUFRQ0FZQUFBQWY4LzloQUFBQUNYQklXWE1BQUFzVEFBQUxFd0VBbXB3WUFBQUtUMmxEUTFCUWFHOTBiM05vYjNBZ1NVTkRJSEJ5YjJacGJHVUFBSGphblZOblZGUHBGajMzM3ZSQ1M0aUFsRXR2VWhVSUlGSkNpNEFVa1NZcUlRa1FTb2dob2RrVlVjRVJSVVVFRzhpZ2lBT09qb0NNRlZFc0RJb0syQWZrSWFLT2c2T0lpc3I3NFh1amE5YTg5K2JOL3JYWFB1ZXM4NTJ6endmQUNBeVdTRE5STllBTXFVSWVFZUNEeDhURzRlUXVRSUVLSkhBQUVBaXpaQ0Z6L1NNQkFQaCtQRHdySXNBSHZnQUJlTk1MQ0FEQVRadkFNQnlIL3cvcVFwbGNBWUNFQWNCMGtUaExDSUFVQUVCNmprS21BRUJHQVlDZG1DWlRBS0FFQUdETFkyTGpBRkF0QUdBbmYrYlRBSUNkK0psN0FRQmJsQ0VWQWFDUkFDQVRaWWhFQUdnN0FLelBWb3BGQUZnd0FCUm1TOFE1QU5ndEFEQkpWMlpJQUxDM0FNRE9FQXV5QUFnTUFEQlJpSVVwQUFSN0FHRElJeU40QUlTWkFCUkc4bGM4OFN1dUVPY3FBQUI0bWJJOHVTUTVSWUZiQ0MxeEIxZFhMaDRvemtrWEt4UTJZUUpobWtBdXdubVpHVEtCTkEvZzg4d0FBS0NSRlJIZ2cvUDllTTRPcnM3T05vNjJEbDh0NnI4Ry95SmlZdVArNWMrcmNFQUFBT0YwZnRIK0xDK3pHb0E3Qm9CdC9xSWw3Z1JvWGd1Z2RmZUxacklQUUxVQW9PbmFWL053K0g0OFBFV2hrTG5aMmVYazVOaEt4RUpiWWNwWGZmNW53bC9BVi8xcytYNDgvUGYxNEw3aUpJRXlYWUZIQlBqZ3dzejBUS1VjejVJSmhHTGM1bzlIL0xjTC8vd2QweUxFU1dLNVdDb1U0MUVTY1k1RW1venpNcVVpaVVLU0tjVWwwdjlrNHQ4cyt3TSszelVBc0dvK0FYdVJMYWhkWXdQMlN5Y1FXSFRBNHZjQUFQSzdiOEhVS0FnRGdHaUQ0YzkzLys4Ly9VZWdKUUNBWmttU2NRQUFYa1FrTGxUS3N6L0hDQUFBUktDQktyQkJHL1RCR0N6QUJoekJCZHpCQy94Z05vUkNKTVRDUWhCQ0NtU0FISEpnS2F5Q1FpaUd6YkFkS21BdjFFQWROTUJSYUlhVGNBNHV3bFc0RGoxd0QvcGhDSjdCS0x5QkNRUkJ5QWdUWVNIYWlBRmlpbGdqamdnWG1ZWDRJY0ZJQkJLTEpDREppQlJSSWt1Uk5VZ3hVb3BVSUZWSUhmSTljZ0k1aDF4R3VwRTd5QUF5Z3Z5R3ZFY3hsSUd5VVQzVURMVkR1YWczR29SR29ndlFaSFF4bW84V29KdlFjclFhUFl3Mm9lZlFxMmdQMm84K1E4Y3d3T2dZQnpQRWJEQXV4c05Dc1Rnc0NaTmp5N0VpckF5cnhocXdWcXdEdTRuMVk4K3hkd1FTZ1VYQUNUWUVkMElnWVI1QlNGaE1XRTdZU0tnZ0hDUTBFZG9KTndrRGhGSENKeUtUcUV1MEpyb1IrY1FZWWpJeGgxaElMQ1BXRW84VEx4QjdpRVBFTnlRU2lVTXlKN21RQWtteHBGVFNFdEpHMG01U0kra3NxWnMwU0Jvams4bmFaR3V5QnptVUxDQXJ5SVhrbmVURDVEUGtHK1FoOGxzS25XSkFjYVQ0VStJb1VzcHFTaG5sRU9VMDVRWmxtREpCVmFPYVV0Mm9vVlFSTlk5YVFxMmh0bEt2VVllb0V6UjFtam5OZ3haSlM2V3RvcFhUR21nWGFQZHByK2gwdWhIZGxSNU9sOUJYMHN2cFIraVg2QVAwZHd3TmhoV0R4NGhuS0JtYkdBY1laeGwzR0srWVRLWVowNHNaeDFRd056SHJtT2VaRDVsdlZWZ3F0aXA4RlpIS0NwVktsU2FWR3lvdlZLbXFwcXJlcWd0VjgxWExWSStwWGxOOXJrWlZNMVBqcVFuVWxxdFZxcDFRNjFNYlUyZXBPNmlIcW1lb2IxUS9wSDVaL1lrR1djTk13MDlEcEZHZ3NWL2p2TVlnQzJNWnMzZ3NJV3NOcTRaMWdUWEVKckhOMlh4MktydVkvUjI3aXoycXFhRTVRek5LTTFlelV2T1VaajhINDVoeCtKeDBUZ25uS0tlWDgzNkszaFR2S2VJcEc2WTBUTGt4WlZ4cnFwYVhsbGlyU0t0UnEwZnJ2VGF1N2FlZHByMUZ1MW43Z1E1Qngwb25YQ2RIWjQvT0JaM25VOWxUM2FjS3B4Wk5QVHIxcmk2cWE2VWJvYnRFZDc5dXArNllucjVlZ0o1TWI2ZmVlYjNuK2h4OUwvMVUvVzM2cC9WSERGZ0dzd3drQnRzTXpoZzh4VFZ4Ynp3ZEw4ZmI4VkZEWGNOQVE2VmhsV0dYNFlTUnVkRThvOVZHalVZUGpHbkdYT01rNDIzR2JjYWpKZ1ltSVNaTFRlcE43cHBTVGJtbUthWTdURHRNeDgzTXphTE4xcGsxbXoweDF6TG5tK2ViMTV2ZnQyQmFlRm9zdHFpMnVHVkpzdVJhcGxudXRyeHVoVm81V2FWWVZWcGRzMGF0bmEwbDFydXR1NmNScDdsT2swNnJudFpudzdEeHRzbTJxYmNac09YWUJ0dXV0bTIyZldGblloZG50OFd1dys2VHZaTjl1bjJOL1QwSERZZlpEcXNkV2gxK2M3UnlGRHBXT3Q2YXpwenVQMzNGOUpicEwyZFl6eERQMkRQanRoUExLY1JwblZPYjAwZG5GMmU1YzRQemlJdUpTNExMTHBjK0xwc2J4dDNJdmVSS2RQVnhYZUY2MHZXZG03T2J3dTJvMjYvdU51NXA3b2Zjbjh3MG55bWVXVE56ME1QSVErQlI1ZEUvQzUrVk1HdmZySDVQUTArQlo3WG5JeTlqTDVGWHJkZXd0NlYzcXZkaDd4Yys5ajV5bitNKzR6dzMzakxlV1YvTU44QzN5TGZMVDhOdm5sK0YzME4vSS85ay8zci8wUUNuZ0NVQlp3T0pnVUdCV3dMNytIcDhJYitPUHpyYlpmYXkyZTFCaktDNVFSVkJqNEt0Z3VYQnJTRm95T3lRclNIMzU1ak9rYzVwRG9WUWZ1alcwQWRoNW1HTHczNE1KNFdIaFZlR1A0NXdpRmdhMFRHWE5YZlIzRU56MzBUNlJKWkUzcHRuTVU4NXJ5MUtOU28rcWk1cVBObzN1alM2UDhZdVpsbk0xVmlkV0Vsc1N4dzVMaXF1Tm01c3Z0Lzg3Zk9INHAzaUMrTjdGNWd2eUYxd2VhSE93dlNGcHhhcExoSXNPcFpBVEloT09KVHdRUkFxcUJhTUpmSVRkeVdPQ25uQ0hjSm5JaS9STnRHSTJFTmNLaDVPOGtncVRYcVM3Skc4Tlhra3hUT2xMT1c1aENlcGtMeE1EVXpkbXpxZUZwcDJJRzB5UFRxOU1ZT1NrWkJ4UXFvaFRaTzJaK3BuNW1aMnk2eGxoYkwreFc2THR5OGVsUWZKYTdPUXJBVlpMUXEyUXFib1ZGb28xeW9Ic21kbFYyYS96WW5LT1phcm5pdk43Y3l6eXR1UU41enZuLy90RXNJUzRaSzJwWVpMVnkwZFdPYTlyR281c2p4eGVkc0s0eFVGSzRaV0Jxdzh1SXEyS20zVlQ2dnRWNWV1ZnIwbWVrMXJnVjdCeW9MQnRRRnI2d3RWQ3VXRmZldmMxKzFkVDFndldkKzFZZnFHblJzK0ZZbUtyaFRiRjVjVmY5Z28zSGpsRzRkdnlyK1ozSlMwcWF2RXVXVFBadEptNmViZUxaNWJEcGFxbCthWERtNE4yZHEwRGQ5V3RPMzE5a1hiTDVmTktOdTdnN1pEdWFPL1BMaThaYWZKenMwN1AxU2tWUFJVK2xRMjd0TGR0V0hYK0c3UjdodDd2UFkwN05YYlc3ejMvVDdKdnR0VkFWVk4xV2JWWmZ0Sis3UDNQNjZKcXVuNGx2dHRYYTFPYlhIdHh3UFNBLzBISXc2MjE3blUxUjNTUFZSU2o5WXI2MGNPeHgrKy9wM3ZkeTBOTmcxVmpaekc0aU53UkhuazZmY0ozL2NlRFRyYWRveDdyT0VIMHg5MkhXY2RMMnBDbXZLYVJwdFRtdnRiWWx1NlQ4dyswZGJxM25yOFI5c2ZENXcwUEZsNVN2TlV5V25hNllMVGsyZnl6NHlkbFoxOWZpNzUzR0Rib3JaNzUyUE8zMm9QYisrNkVIVGgwa1gvaStjN3ZEdk9YUEs0ZFBLeTIrVVRWN2hYbXE4NlgyM3FkT284L3BQVFQ4ZTduTHVhcnJsY2E3bnVlcjIxZTJiMzZSdWVOODdkOUwxNThSYi8xdFdlT1QzZHZmTjZiL2ZGOS9YZkZ0MStjaWY5enN1NzJYY243cTI4VDd4ZjlFRHRRZGxEM1lmVlAxdiszTmp2M0g5cXdIZWc4OUhjUi9jR2hZUFAvcEgxanc5REJZK1pqOHVHRFlicm5qZytPVG5pUDNMOTZmeW5RODlrenlhZUYvNmkvc3V1RnhZdmZ2alY2OWZPMFpqUm9aZnlsNU8vYlh5bC9lckE2eG12MjhiQ3hoNit5WGd6TVY3MFZ2dnR3WGZjZHgzdm85OFBUK1I4SUg4by8yajVzZlZUMEtmN2t4bVRrLzhFQTVqei9HTXpMZHNBQUFBZ1kwaFNUUUFBZWlVQUFJQ0RBQUQ1L3dBQWdPa0FBSFV3QUFEcVlBQUFPcGdBQUJkdmtsL0ZSZ0FBQVJKSlJFRlVlTnFra3IxS0ExRVFoYjhZU1pzWHNFOGxDSUtWNERaV2U1N0FTaEI4QU1GQ1hKREFpallKcExLeXpSTU1XRmxZV1FtQ3JZMUNNRlhRTmhDdXpRakw1ZTZTeFlGaHVJZTVaMzdPZEVJSS9NYzJZMERTQVhBRzdEcjBBb3pON0NsRjBLbDJJT2tTS0d1S1haalpiUXh1UkpXSHdCSW9nQzMzd3JGUzBuN1RDQ1hRQllxbzByV2tGWERqT1ZteUEyRGI0MzJpL1Q5c3AzYUVOYTNiUlBEbThTVHg4ZGpqYTlNT0N1QVJHRXBhQWxQSGozejJsZWVrTzNDZHI0QWVNQUsrM0VlT2ZRT2ZqWGRRa2ZNOE9xUVpjQXE4QTVtWnpXb0pVaWFwRDN3QWZkOVZabWFMdFZVd3N4L2dyaUwzZzZSZVd4a25mcEVBZThCaEt3SXptenNKdm90bkFFSUlyVHpQODBIMS9Uc0E0emFBRzFNSUtRTUFBQUFBU1VWT1JLNUNZSUk9KTtiYWNrZ3JvdW5kLXJlcGVhdDpuby1yZXBlYXQ7YmFja2dyb3VuZC1wb3NpdGlvbjozcHggY2VudGVyfSNzZWFyY2hCb3h7Zm9udC1zaXplOjE4cHg7d2lkdGg6MTg4cHg7Ym9yZGVyOjA7YmFja2dyb3VuZDowfSNjbGVhclNlYXJjaEJ1dHRvbntkaXNwbGF5OmJsb2NrO2Zsb2F0OnJpZ2h0O2hlaWdodDoyMHB4O3dpZHRoOjI4cHg7bWFyZ2luLXJpZ2h0OjJweDttYXJnaW4tdG9wOjA7YmFja2dyb3VuZC1pbWFnZTp1cmwoZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFBOEFBQUFQQ0FZQUFBQTcxcFZLQUFBQUNYQklXWE1BQUFzVEFBQUxFd0VBbXB3WUFBQUtUMmxEUTFCUWFHOTBiM05vYjNBZ1NVTkRJSEJ5YjJacGJHVUFBSGphblZOblZGUHBGajMzM3ZSQ1M0aUFsRXR2VWhVSUlGSkNpNEFVa1NZcUlRa1FTb2dob2RrVlVjRVJSVVVFRzhpZ2lBT09qb0NNRlZFc0RJb0syQWZrSWFLT2c2T0lpc3I3NFh1amE5YTg5K2JOL3JYWFB1ZXM4NTJ6endmQUNBeVdTRE5STllBTXFVSWVFZUNEeDhURzRlUXVRSUVLSkhBQUVBaXpaQ0Z6L1NNQkFQaCtQRHdySXNBSHZnQUJlTk1MQ0FEQVRadkFNQnlIL3cvcVFwbGNBWUNFQWNCMGtUaExDSUFVQUVCNmprS21BRUJHQVlDZG1DWlRBS0FFQUdETFkyTGpBRkF0QUdBbmYrYlRBSUNkK0psN0FRQmJsQ0VWQWFDUkFDQVRaWWhFQUdnN0FLelBWb3BGQUZnd0FCUm1TOFE1QU5ndEFEQkpWMlpJQUxDM0FNRE9FQXV5QUFnTUFEQlJpSVVwQUFSN0FHRElJeU40QUlTWkFCUkc4bGM4OFN1dUVPY3FBQUI0bWJJOHVTUTVSWUZiQ0MxeEIxZFhMaDRvemtrWEt4UTJZUUpobWtBdXdubVpHVEtCTkEvZzg4d0FBS0NSRlJIZ2cvUDllTTRPcnM3T05vNjJEbDh0NnI4Ry95SmlZdVArNWMrcmNFQUFBT0YwZnRIK0xDK3pHb0E3Qm9CdC9xSWw3Z1JvWGd1Z2RmZUxacklQUUxVQW9PbmFWL053K0g0OFBFV2hrTG5aMmVYazVOaEt4RUpiWWNwWGZmNW53bC9BVi8xcytYNDgvUGYxNEw3aUpJRXlYWUZIQlBqZ3dzejBUS1VjejVJSmhHTGM1bzlIL0xjTC8vd2QweUxFU1dLNVdDb1U0MUVTY1k1RW1venpNcVVpaVVLU0tjVWwwdjlrNHQ4cyt3TSszelVBc0dvK0FYdVJMYWhkWXdQMlN5Y1FXSFRBNHZjQUFQSzdiOEhVS0FnRGdHaUQ0YzkzLys4Ly9VZWdKUUNBWmttU2NRQUFYa1FrTGxUS3N6L0hDQUFBUktDQktyQkJHL1RCR0N6QUJoekJCZHpCQy94Z05vUkNKTVRDUWhCQ0NtU0FISEpnS2F5Q1FpaUd6YkFkS21BdjFFQWROTUJSYUlhVGNBNHV3bFc0RGoxd0QvcGhDSjdCS0x5QkNRUkJ5QWdUWVNIYWlBRmlpbGdqamdnWG1ZWDRJY0ZJQkJLTEpDREppQlJSSWt1Uk5VZ3hVb3BVSUZWSUhmSTljZ0k1aDF4R3VwRTd5QUF5Z3Z5R3ZFY3hsSUd5VVQzVURMVkR1YWczR29SR29ndlFaSFF4bW84V29KdlFjclFhUFl3Mm9lZlFxMmdQMm84K1E4Y3d3T2dZQnpQRWJEQXV4c05Dc1Rnc0NaTmp5N0VpckF5cnhocXdWcXdEdTRuMVk4K3hkd1FTZ1VYQUNUWUVkMElnWVI1QlNGaE1XRTdZU0tnZ0hDUTBFZG9KTndrRGhGSENKeUtUcUV1MEpyb1IrY1FZWWpJeGgxaElMQ1BXRW84VEx4QjdpRVBFTnlRU2lVTXlKN21RQWtteHBGVFNFdEpHMG01U0kra3NxWnMwU0Jvams4bmFaR3V5QnptVUxDQXJ5SVhrbmVURDVEUGtHK1FoOGxzS25XSkFjYVQ0VStJb1VzcHFTaG5sRU9VMDVRWmxtREpCVmFPYVV0Mm9vVlFSTlk5YVFxMmh0bEt2VVllb0V6UjFtam5OZ3haSlM2V3RvcFhUR21nWGFQZHByK2gwdWhIZGxSNU9sOUJYMHN2cFIraVg2QVAwZHd3TmhoV0R4NGhuS0JtYkdBY1laeGwzR0srWVRLWVowNHNaeDFRd056SHJtT2VaRDVsdlZWZ3F0aXA4RlpIS0NwVktsU2FWR3lvdlZLbXFwcXJlcWd0VjgxWExWSStwWGxOOXJrWlZNMVBqcVFuVWxxdFZxcDFRNjFNYlUyZXBPNmlIcW1lb2IxUS9wSDVaL1lrR1djTk13MDlEcEZHZ3NWL2p2TVlnQzJNWnMzZ3NJV3NOcTRaMWdUWEVKckhOMlh4MktydVkvUjI3aXoycXFhRTVRek5LTTFlelV2T1VaajhINDVoeCtKeDBUZ25uS0tlWDgzNkszaFR2S2VJcEc2WTBUTGt4WlZ4cnFwYVhsbGlyU0t0UnEwZnJ2VGF1N2FlZHByMUZ1MW43Z1E1Qngwb25YQ2RIWjQvT0JaM25VOWxUM2FjS3B4Wk5QVHIxcmk2cWE2VWJvYnRFZDc5dXArNllucjVlZ0o1TWI2ZmVlYjNuK2h4OUwvMVUvVzM2cC9WSERGZ0dzd3drQnRzTXpoZzh4VFZ4Ynp3ZEw4ZmI4VkZEWGNOQVE2VmhsV0dYNFlTUnVkRThvOVZHalVZUGpHbkdYT01rNDIzR2JjYWpKZ1ltSVNaTFRlcE43cHBTVGJtbUthWTdURHRNeDgzTXphTE4xcGsxbXoweDF6TG5tK2ViMTV2ZnQyQmFlRm9zdHFpMnVHVkpzdVJhcGxudXRyeHVoVm81V2FWWVZWcGRzMGF0bmEwbDFydXR1NmNScDdsT2swNnJudFpudzdEeHRzbTJxYmNac09YWUJ0dXV0bTIyZldGblloZG50OFd1dys2VHZaTjl1bjJOL1QwSERZZlpEcXNkV2gxK2M3UnlGRHBXT3Q2YXpwenVQMzNGOUpicEwyZFl6eERQMkRQanRoUExLY1JwblZPYjAwZG5GMmU1YzRQemlJdUpTNExMTHBjK0xwc2J4dDNJdmVSS2RQVnhYZUY2MHZXZG03T2J3dTJvMjYvdU51NXA3b2Zjbjh3MG55bWVXVE56ME1QSVErQlI1ZEUvQzUrVk1HdmZySDVQUTArQlo3WG5JeTlqTDVGWHJkZXd0NlYzcXZkaDd4Yys5ajV5bitNKzR6dzMzakxlV1YvTU44QzN5TGZMVDhOdm5sK0YzME4vSS85ay8zci8wUUNuZ0NVQlp3T0pnVUdCV3dMNytIcDhJYitPUHpyYlpmYXkyZTFCaktDNVFSVkJqNEt0Z3VYQnJTRm95T3lRclNIMzU1ak9rYzVwRG9WUWZ1alcwQWRoNW1HTHczNE1KNFdIaFZlR1A0NXdpRmdhMFRHWE5YZlIzRU56MzBUNlJKWkUzcHRuTVU4NXJ5MUtOU28rcWk1cVBObzN1alM2UDhZdVpsbk0xVmlkV0Vsc1N4dzVMaXF1Tm01c3Z0Lzg3Zk9INHAzaUMrTjdGNWd2eUYxd2VhSE93dlNGcHhhcExoSXNPcFpBVEloT09KVHdRUkFxcUJhTUpmSVRkeVdPQ25uQ0hjSm5JaS9STnRHSTJFTmNLaDVPOGtncVRYcVM3Skc4Tlhra3hUT2xMT1c1aENlcGtMeE1EVXpkbXpxZUZwcDJJRzB5UFRxOU1ZT1NrWkJ4UXFvaFRaTzJaK3BuNW1aMnk2eGxoYkwreFc2THR5OGVsUWZKYTdPUXJBVlpMUXEyUXFib1ZGb28xeW9Ic21kbFYyYS96WW5LT1phcm5pdk43Y3l6eXR1UU41enZuLy90RXNJUzRaSzJwWVpMVnkwZFdPYTlyR281c2p4eGVkc0s0eFVGSzRaV0Jxdzh1SXEyS20zVlQ2dnRWNWV1ZnIwbWVrMXJnVjdCeW9MQnRRRnI2d3RWQ3VXRmZldmMxKzFkVDFndldkKzFZZnFHblJzK0ZZbUtyaFRiRjVjVmY5Z28zSGpsRzRkdnlyK1ozSlMwcWF2RXVXVFBadEptNmViZUxaNWJEcGFxbCthWERtNE4yZHEwRGQ5V3RPMzE5a1hiTDVmTktOdTdnN1pEdWFPL1BMaThaYWZKenMwN1AxU2tWUFJVK2xRMjd0TGR0V0hYK0c3UjdodDd2UFkwN05YYlc3ejMvVDdKdnR0VkFWVk4xV2JWWmZ0Sis3UDNQNjZKcXVuNGx2dHRYYTFPYlhIdHh3UFNBLzBISXc2MjE3blUxUjNTUFZSU2o5WXI2MGNPeHgrKy9wM3ZkeTBOTmcxVmpaekc0aU53UkhuazZmY0ozL2NlRFRyYWRveDdyT0VIMHg5MkhXY2RMMnBDbXZLYVJwdFRtdnRiWWx1NlQ4dyswZGJxM25yOFI5c2ZENXcwUEZsNVN2TlV5V25hNllMVGsyZnl6NHlkbFoxOWZpNzUzR0Rib3JaNzUyUE8zMm9QYisrNkVIVGgwa1gvaStjN3ZEdk9YUEs0ZFBLeTIrVVRWN2hYbXE4NlgyM3FkT284L3BQVFQ4ZTduTHVhcnJsY2E3bnVlcjIxZTJiMzZSdWVOODdkOUwxNThSYi8xdFdlT1QzZHZmTjZiL2ZGOS9YZkZ0MStjaWY5enN1NzJYY243cTI4VDd4ZjlFRHRRZGxEM1lmVlAxdiszTmp2M0g5cXdIZWc4OUhjUi9jR2hZUFAvcEgxanc5REJZK1pqOHVHRFlicm5qZytPVG5pUDNMOTZmeW5RODlrenlhZUYvNmkvc3V1RnhZdmZ2alY2OWZPMFpqUm9aZnlsNU8vYlh5bC9lckE2eG12MjhiQ3hoNit5WGd6TVY3MFZ2dnR3WGZjZHgzdm85OFBUK1I4SUg4by8yajVzZlZUMEtmN2t4bVRrLzhFQTVqei9HTXpMZHNBQUFBZ1kwaFNUUUFBZWlVQUFJQ0RBQUQ1L3dBQWdPa0FBSFV3QUFEcVlBQUFPcGdBQUJkdmtsL0ZSZ0FBQVVsSlJFRlVlTnFjMHJGTDFuRVF4L0hYODZnMHBGSG03cEkwQkFuTkxZM0ZMVUVZRFVJNXFGaVJpeVFOT1NrdU5rVlJEbzcrQTdjS2lxSU5VazVoaHYrQ2dXdkUwL0o5NHVzUENlbzczbjNlOTcyN3o3VTZuWTcvZmIyUW1RTjRoZXVZaTRqanBqQXpMK0ExQnJBUUVUL2FKYmVBZWR6SGFtWU9OOENMV01GTFBNZGI2TUkzSyswZHZNdk1Ld1c4aEVYTW9LZG9idFR3TTN5cUN0ekRTbWFPWWdrdjBDcTVJMHhEcTd1d3pMeUdOZHd1b2w4NHdWQUZmc05FUk95ZWdVdUJFYnd2cmJjYk8vdUNweEd4MXcyMG1sWmw1aTFzb2I4Sy84VGRpTmlvdGUwR09GVG03enZIMW9lWk9WZ0g2cGt2NHdQRy9uSVg2NWlPaU5NL1A1Y2ZWeHZnWjB6aG9JbzlLbmN3V0xmOUJnOHEwUTdHSStKajhmZXd5bzFodVlhdlZza3RQSTZJcjFDMk80bnZsV2FraG1leGlZM2k0NW5iam9odFBNRiswVXlkYTlXL3ZOOERBSUdnYkhCVHZZS2pBQUFBQUVsRlRrU3VRbUNDKTtiYWNrZ3JvdW5kLXJlcGVhdDpuby1yZXBlYXQ7YmFja2dyb3VuZC1wb3NpdGlvbjpjZW50ZXI7Y3Vyc29yOnBvaW50ZXJ9LmZvdW5kU2VhcmNoVGV4dHtjb2xvcjojNDBjNmUyfSN2b2x1bWVfc2xpZGVyX2NvbnRhaW5lcntkaXNwbGF5Om5vbmU7cG9zaXRpb246YWJzb2x1dGU7ei1pbmRleDo5ODA0fS5hcHBwbGF5ZXJ7cG9zaXRpb246cmVsYXRpdmU7Ym9yZGVyLXJhZGl1czo1cHg7YmFja2dyb3VuZC1zaXplOmNvdmVyO3otaW5kZXg6MX0ucG9zdGVyRmFkZXtiYWNrZ3JvdW5kOnJnYmEoMCwwLDAsMC42KTtib3JkZXItcmFkaXVzOjVweDtoZWlnaHQ6MTAwJX0uYXBwcGxheWVyIC5jb250ZW50e3RleHQtYWxpZ246Y2VudGVyO3otaW5kZXg6Mn0uYXBwcGxheWVyIGgye2NvbG9yOiNmZmY7Zm9udC13ZWlnaHQ6Ym9sZDttYXJnaW46NTBweCAwIDEwcHggMDt0ZXh0LXNoYWRvdzowIDAgMnB4ICMwMDA7ZmlsdGVyOmRyb3BzaGFkb3coY29sb3I9IzAwMDAwMCxvZmZ4PTAsb2ZmeT0wKTt6LWluZGV4OjJ9LmFwcE51ZXZvUGxheUJ0bntkaXNwbGF5OmJsb2NrO3dpZHRoOjczcHg7aGVpZ2h0OjczcHg7YmFja2dyb3VuZDp1cmwoZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFKSUFBQUNTQ0FZQUFBQ3VlNU9PQUFBQUdYUkZXSFJUYjJaMGQyRnlaUUJCWkc5aVpTQkpiV0ZuWlZKbFlXUjVjY2xsUEFBQUEyWnBWRmgwV0UxTU9tTnZiUzVoWkc5aVpTNTRiWEFBQUFBQUFEdy9lSEJoWTJ0bGRDQmlaV2RwYmowaTc3dS9JaUJwWkQwaVZ6Vk5NRTF3UTJWb2FVaDZjbVZUZWs1VVkzcHJZemxrSWo4K0lEeDRPbmh0Y0cxbGRHRWdlRzFzYm5NNmVEMGlZV1J2WW1VNmJuTTZiV1YwWVM4aUlIZzZlRzF3ZEdzOUlrRmtiMkpsSUZoTlVDQkRiM0psSURVdU1DMWpNRFl3SURZeExqRXpORGMzTnl3Z01qQXhNQzh3TWk4eE1pMHhOem96TWpvd01DQWdJQ0FnSUNBZ0lqNGdQSEprWmpwU1JFWWdlRzFzYm5NNmNtUm1QU0pvZEhSd09pOHZkM2QzTG5jekxtOXlaeTh4T1RrNUx6QXlMekl5TFhKa1ppMXplVzUwWVhndGJuTWpJajRnUEhKa1pqcEVaWE5qY21sd2RHbHZiaUJ5WkdZNllXSnZkWFE5SWlJZ2VHMXNibk02ZUcxd1RVMDlJbWgwZEhBNkx5OXVjeTVoWkc5aVpTNWpiMjB2ZUdGd0x6RXVNQzl0YlM4aUlIaHRiRzV6T25OMFVtVm1QU0pvZEhSd09pOHZibk11WVdSdlltVXVZMjl0TDNoaGNDOHhMakF2YzFSNWNHVXZVbVZ6YjNWeVkyVlNaV1lqSWlCNGJXeHVjenA0YlhBOUltaDBkSEE2THk5dWN5NWhaRzlpWlM1amIyMHZlR0Z3THpFdU1DOGlJSGh0Y0UxTk9rOXlhV2RwYm1Gc1JHOWpkVzFsYm5SSlJEMGllRzF3TG1ScFpEb3dNVGd3TVRFM05EQTNNakEyT0RFeE9URXdPVVUwT0VaRU5rVXhOakEyTUNJZ2VHMXdUVTA2Ukc5amRXMWxiblJKUkQwaWVHMXdMbVJwWkRwR01qWTFSRGhEUVRoR1Fqa3hNVVV4T1VRek5VUkNSREZDTVRJMk9VRTRSQ0lnZUcxd1RVMDZTVzV6ZEdGdVkyVkpSRDBpZUcxd0xtbHBaRHBHTWpZMVJEaERPVGhHUWpreE1VVXhPVVF6TlVSQ1JERkNNVEkyT1VFNFJDSWdlRzF3T2tOeVpXRjBiM0pVYjI5c1BTSkJaRzlpWlNCUWFHOTBiM05vYjNBZ1ExTTFJRTFoWTJsdWRHOXphQ0krSUR4NGJYQk5UVHBFWlhKcGRtVmtSbkp2YlNCemRGSmxaanBwYm5OMFlXNWpaVWxFUFNKNGJYQXVhV2xrT2pBeE9EQXhNVGMwTURjeU1EWTRNVEU1TVRBNVJUUTRSa1EyUlRFMk1EWXdJaUJ6ZEZKbFpqcGtiMk4xYldWdWRFbEVQU0o0YlhBdVpHbGtPakF4T0RBeE1UYzBNRGN5TURZNE1URTVNVEE1UlRRNFJrUTJSVEUyTURZd0lpOCtJRHd2Y21SbU9rUmxjMk55YVhCMGFXOXVQaUE4TDNKa1pqcFNSRVkrSUR3dmVEcDRiWEJ0WlhSaFBpQThQM2h3WVdOclpYUWdaVzVrUFNKeUlqOCtzZWFWV0FBQUtsdEpSRUZVZU5yc1hRZDRVK1g2VDNLeVo1TjBwb3VXdlVkQk5nSnlrWXNncUtod0ZlUXFqci9DeFMxZXZXNGNvQWlDdUJCUjVJS0NncUlvUzBXUVZhRUlsRTEzMDdUWmV5Zi83MDFQdVNlSDlDUnRVNXEwZVovbmUwNXlzcy8zeS91OTQvZStIMzNLN0NkcENRa3BERFM2azg1ZFFzUGRIbi9zOWkrV3R1ajF6QTRLa2x3MHN2R1JoMFlYTkZqNGVYNkU3K0ZFb3dRTkh4cm4wU2hIb3hLTkt2eDhoNUwyRGlUUUt2M3cwUmVOVERTNlJlbTlPV2oweEcvM0R2RjRDUTZxay9nNDFWNjFXVWdndFZURnRiVk1uZk5VUGpxTVFXTUlQaGh0OUZYeThUR0djSzRRSHdmUWRiNlEwRWl4Qng3UUNEZWdNUkdOOUJqK3FnM2dmaGg5WnkwNjdrSmpMd0xWaVFTUTJnNDhjblM0RlkxcHpRRlBibFk2SnlzamxaT1prY0xOelV6alNaUEVMSWxZeUdwNFhKWWtaZ3NGdktEclk3TTdQQnFkMGRWdzMyeXhlYlE2ZzZ0U1dXZXZWcW1kVlRWcVoybUYwaEhoVjREdlB3c0craTExNlBnREd0OGlVS25pY1Q3b1pLOHQxcGMyZE5FSG9jUGRwQ1dEVWdiMTdTN3MxYTJUSUQ4M1U1Q1dJdVBrWktieFcvTTdWdFhVMldyVmVtZEplYlh0eklWU2E5SHBDeGF2MStlUDhPVkgwTmlBNXVGZ0FraXRBNkJSNkhBdmJqaUgxVGFqaC9aUDZ0T2pzN2g3bHh3UkU4UG9iZm5kL1VqT1hTbzNuejVYWWo1WWVNcHdxYXdxRXExMUZnZlV6d2tnUlFkQWs5QmhMdTZpTnlvWmFjbnN2NDhmSmg5MVhYOTVpanlKRThzWDNXaXl1SDg3VktUWnZlK290cnhLNVF6emRBZ3JyRVBqUnpRM3ZnU1FtZ2VnKy9IWVRrZ1JDZmpZK05HRHBkY1BHeURybXA4dGlrZmJvcVJDYWYzajZFbmR6dCtPNkJEQVBCUlBWYUx4S1pxZjd4SkFpdHg5ZndyM2JrSkt0L3hzM3AzVEpxUVA3TnN0aWNWa01tanRRRHhlci8rdjRrdUd6ZHYzcW9yUGw5b29ubHFNeHVKWUN4L0VESkFRZ01BQW5vZDdNcXhReituZFBZOC9jOXFFakFGOXVpWFIyckVnSUprMmJkdXRQRkY4MGRySVUyQ0oyNExHYWpSZmxnU1EvZ2NpaUFFOTFwZ2JQN2gvRDlFZE45K1Ezck5ySnpHdEE4bmxzbXJMNXUyLzFQeFJlTkxVeUZNZ0ZyVUN6ZG1PRGcwa0JDQWhPcnlJeHJoUWozZnBsTVY5YU03MG5PNWRjcU51LzdqZEhqUlJsVDdrb3ZzcXExWCs4cW9hZjFtRjhvb3hXNnZXK2pWYWZaRExMcE5LNkJscEtWYzh3SnpNZEhwMlZqb2pOeXVEM2lVdm01R1RsY0hnODdoUnYwNWxsVFhXOXovN3BnSjVmamFLa01FTGFPNjBIUTVJQ0VUZ3hyOGVTZ3NKK0Z6RzNEdHZVa3dZTXlRMVdxNzc1ZEpLMzZFL1QvcU8vWFhHVzN6dXNnK0FFdTQxR0lhNUdSakRHMWhMZkQ3TTYvR3l3cjBtV1M2bDkrN2VtVEdvWDAvR3NNRjlzUjVkODZKaXcwRUk0ZGMvanF2WGJQaGVhYmJhdkkxb3ArZlIvQlYyR0NBaEVOMkZEdk5EMlVJSVBOTFpNeVpsUVdTNUpaOWhNSnI5ZS9ZZDloNDVmdHI3NTRsaW4wNXZKQUxIejJLem5Fd21ES1liRFJlYnpVRzNNUStHTVQyUnZML1g2OFU4SGcvTDdYWngzRzQzMnd1M1BXNk94KzNtK1AyMEsrQlBFb3ZvZy9yM1pGdzNxQTgyWWN3d0xDVloycUkvaHRsaWMzLzV6YzdxSFhzUGFodXhuVDdCdlR0ZnV3VVNBaERZT0srZ01TcFVIR2podkR0eWtVSGRiRHZJNlhUUjloMDY1djFoNSsrZWZRZi92UEt2cGROcFBqYUhhK053T0RZZWoyOUZSMGRyWGxTWHk4bXgyK3hDcDlQQmQ3cWNQTC9QanpVOE51SzZBZGhOZnh1TmpSOTlIYk1seStERmtrcnppalZmbHpjU2h5ckV0Wk8yM1FFSmdRZ0Npc3RETFdXamgvYVh6TDkzUmlkMFladVYrenQxNXFKdnkvWTlucjIvSC9HYUxkYUE1a0hheGNYakMwdzhMcy9LNWZGc2JXbUlPaHdPbnNOdUU5anNOckhIN1FrRVN6a2NObTNDOWNPWU02Wk9ZTUl5Mkt3L2pzdnQrL0NMcldWN2ZpL1VON0xVUFk3bXM3amRBQW1CYUFBNkxFTWpTTnV3bUV6NkE3T25aVTRhTnl5dE9lOTcvT1JaMytxMVg3c0tpMDRIMURpRHdmRHdCUUtUVUNBMHNsdFo2elJmVzdrNFZvdFpZclZaSlQ2dkwvREg2ZGVyRytQZXU2YXp4bzBhZ2pYblBYODllRnk5K3JOdnFoeE9GM2s1Z3ovUVUyaE9qOFE5a1BBYzJWdTBlaUpZMEZLMmFNSHMvUHdjaGFESkYrNUFvZmVUOWQrNmk4OWRDbHc0Wk84NFJDS3hWaUFRbXVsMHVwOFdKMksxV2tSbWswbU93TVdEKzkwNjV6TG0zWDByODhieEk1cXNtU0ZSL09iSzlTVWhsam9nMDczYzJqbTdWZ1VTQXRGVWRQZ1BqVVF1RzE3UVIvem9BM2ZtTlhVcEF3MjBaT1U2MTlrTEpRRUFzZGxzdTFpU3BPSHorUlphSEl2RGJ1Y2JqUG9VbDlNVllDWGs1V1F5bnB4L0QydlUwSUZOMGxCaGxyb2xhRzYvYnEzZmdIWHJQeUxveEQ5dW1SZ3RFTTFCaDJjQXJNVHphQm1UTGJ6L2pud09teDN4UlZMVmFmMHZ2dldCNjkwUDFyc2h0c1Btc0cxeWViSXlTU3BUczFnc1Y3d0hIcGtzbGxzb0ZCazVYSzdWNC9VdzBXOWs3ZGk5UHhDbTZOT3pDME9DUEwrSTNnZkQ2RU1IOWtweUkzZnl6SVV5c2wwNGN1UFczVXcwdjRWeEF5UUVvcm5vc0lCOGZ1YTBDYW4zL1dOcUxySmxJbmFCTjM3N2srZng1NWM2ejE4cTgwTmNSeWFYMThoazhqcTQrTFIySmt3bTB5TVVDazBzTnR2aGNqbDRaUlZLeHJjLzd2VmdESXlHQUlWK2ZuaWJIQzN0OUFHOXUwcDRYQTROZUZDa2h3Y2lNTEhSSEIrTmVTRGhXZnRGNVBPUC9QTzJyRnNuajFVMFJRczk4c3diemkzZjcvYWdmNmxmS0JMcFVsSlNxNUhyN3FTMWN3RXRLeFNKRFJDRnROdHR2TVBIVHZuM0h5N3lEaDNjRDVPSWhCSDlDWHQyN1NSQ2RpanJhTkVaRTNvYjRrTURFSmgwYUo3UHhDeVFFSWlBdGZnYXZPK1ZEOEFZOUVYelozY2FON0lnSmRMM09YQ2t5UHQvVDc3bUxLdFUrcEVkWkV0SlRhdENxdDhVVDRaMGk0MVhPcDBHWVFzK1gyQ0dnS2VxVnMzYXR1TVhUN1lpUFpDT2llUTk4ckl6QkYzemM3aC9IRDFwOFBtQ0hMb1JDRXlWYUs0dnhSeVFjQUwrQ3JDQmllZWZmdml1M0pIWDlVdU81RDBnLzdWcXpVYjM0bVdmdUpBcjZ4ZUp4VnFraFpSSXAzdHBIVlRndDhOeWgyNzZrWmZIMy8zYllaOVdiL1FQSGRRWFl6TERtNW1LdEdRZUFoNTMvNUVUQm9KbUFxMDJHb0hwSkpwdlpUUytaMVR5UUlSZ1k1Q0wvMy8zM0pJNWFtai9pRUNrMXVqOTh4NTcyYkgydjlzZ3YrVkpTVTJ0bENKam1wYVFnRWlTa3JRcHFlbmxZQ2R1L202WFo5YURpeHlWeXRxSU5IUkJ2KzdTaGZmZm1VMWVRZEZZaWl1QXRnY1NudmFBWUtPVWVIN0dsSEVwazI4WUVWRjFSMFZWalcvMnc4ODVUcHc2NTBNMmtEVWpRMUVLcVl3RWZJS0Z5K1hhTXhTS1VuUTBReEo2RHJwbXhlY3ZSNVJUR3pkaVVNcTlzNlpra0U0RCsySVpYcEhUZGtCQ1g0Q0IyMFFLc290L3p4MlRjeUo1RDdnUXMvL3ZPV2ROcmRvdkVBcjFhZWtaRlpFbVRqdWlNQmlZTnpVdHZRb3QreHBJUk05YitKTGp6eFBGRVMzOXQvejllZ1g4d1VtbjViaG1ZcldsUmdKT2RaQ1JOWFJRYjlHRGM2WjNpdVRGaHdyLzh2NXp3UXNPZzhuc0Y0dkZhcms4V1pXQVNtUUN5MzZTVktxeTJSMjBoNUJqc3V1M1F4R0JhYzd0ZjgrK2Z2aEFNc01VS0QxUHRBbVFFSUtCVTMwZjhSd1VIRDcrNE16OFNEaEU4TU1YUFB1bTA0bU1hcWxVV3BNa2xXa1M4R2lhaU1VU3ZVd3VyL1o0UFA2blhsem0zUGJUcjJFMU9jU1pGdHgzZXg2UUJra1B6VUJ6T3U2YUFnbTNpMTRtdnA3TFlUT2VlL1NlL0VqU0hrZU9uZkwrKzdYM25IQUI1TW5KMVNLeHhKQ0FSZk1Fd2lMSkthbVZDQisrbDVkODZOcjV5OEd3WU9Ld1dZeG4velduTTFUaGtCNzZUM1B0cGVacUpNaWZwUkpQTExoM1JqYlNTR0VyV01FbUFrMkVYSDIvWEo1U0JZbldCQnhhSnVDWUpLZWtWUG45UHQ5enI2OTBSV0l6cFNaTHVZODlPSk5jNmlYR2JkN1dCeEpPMUE5U2dlTkhGU1NOR1Q0d3JKc1A3dXI4Wjk2QTVZeUcxdmRhdmtCZ1NjQWdlbUNTSjZjRWxybEhuMXZxaXNTYkd6S2dwM1RhcERIa2VSdUM1bmhhcXdJSlg5S0NqTEswRkJucndkblRjeU9KRTkzM3J4Y2Q0R21BWVEzcmV6UXZwTnZ0WXB2TnBpUTRkbFF3OGZrQ2kxUW1Wd0s1RC82d2tjU1pacytZbEEwbDdxVFRDNXU2eERWVkl6MU1YdEtBSGh2T0xvTHcvRE92TEhjQzRSNWMvR2diMWhxMVdsR2pWSGJXNjNRWnFwcWFmSjFPbTlxUmJTYVJTS1NGUHl3a3UwSDdoN09YSG50Z1pxY1FTOXhqclFJa2hGRG9kSFlyOFJ4UVpQdjI3Q3dKOTlxVm4yeDBIL3ZyakErbmYwVFZ4VWQyQWNObXMwcUF1bnJibEFsTXY5OVB0NWpOY2dTc1BKUEpLTzJRb1FHWnZJN0w1Vm91WEM3M0xYMy84N0EwbTg2ZE1vVVEreU9kbm9Relc2T3VrWjRtUGg5b3N2K2NPU1U3a2xoUklPM0JZSGdnZXgvdGk5YVFQbUt6V1BRWG5ucVEvZCtQMytRQ2RSVXRjVnlEWHA5ZVc2dktjZGp0Z280R0ptUjhLeHZTS1pGNGNuZmZkbU5XQ0MvdWFUem9IQjBnNFFaMkVEcm4zVFZWRWE3ckIxQkIvcjE0SmZ3ai9ESjVjczIxaUZoRFRkbjZEeFp6bDd6NEdEc3RSVTUzT2h5Q3VycmFITFc2THRQcjlYU1k1cXNRQVFmam0wNm4rVjlhOG9FTDBsQlV6NGNtWS9mUG5wWkpPZzJyMFBSb2FxVDdpWGZBT0pzNGRtaFl3djd6cjY5eXdsb05XZnhyVFljRjN2TzI5Y3Q1RDl3emd3WExudDFtRTZQbExoL1pVU2tkQlV5UW14T0xrOVFRL1Y3MDZuc3VFcFhrS2htTFBPOGVYWExKSVp5NWtXZ2xSZ1RhQ0Z6OW9ONUV5RXZMRGhlOTNySG5nQWVxTzRCWDNWWlpmS2diZStUZU8xbmZmL2tlYitLNEVSaFV5eUxQTGxsVm8reGtOcHNsSFFGTXdCcUFSRGdVU216WXNvT1NWUXBSNzRmbTNFSTJWeUNQZWxNME5OSmM0aDFrWEF2Q0dkZ21zOVgvMW9xMTdzQ1NKcE8zZWY0c1BWVk9YL3JTWTV6UFZyN0M3ZGt0bndGVkczcWRWbEZYcThwR1N4K3Z2WU1KbVJVcVdPSldyLzNLRFdHWWNJWTNGR2MwVlNzeHdtaWpvVFJTRCttWjB5YUVwWWFzWHJ2SkRZbFk1T29iWXFtK0RBb1JOMzN5RnZmbFJRK3pvWlRhNFhBSWtUSGVDY0lIU0ZzeDJpdVFjT3F1RnBhNGR6LzZNaXpYL2M1cEU4aDBFNGdUam11SlJncEt5a0tEcTM2OXVsRDJKZ0tYODZ0dHV6d1l4bkNqSmEwdUZpL3M5TCtQWSs3WTlENTM3cXlibVN3V2t3YmhBd2dYR0F6NjVQWUtwcVFrcVFhcWozL2M5YnNIY3AzaHRCSTBjS1d5a3lNR0VoNURHQlNramFiL0xTUGNGMzcxN1k4RFJwMGtTVnFIWFA2WTdYa29FUERvanowMG03MzFpK1c4MGNNR1ljaWpZNXVNeGhTVnFpWUhDaGZiRzVDQTc1NGtsZFhDN1RlV2Yrb09aM2pQbkg2VlZ1cUNGN3MyV1NQTklON0p5MUZ3Qi9mdlFhbU5BT2tuejF3SUdOZ1FZWTJIQzV5dFNLT3ZldXRaem9kdlA4L3BuSmZOY0RtZEFxMUdrMVZYVzVzRnpTRGFFNWdnaGNMaGNpMmxGZFUrcUZhbWVpNDBOWU1PZWFUVGR6UUpTSGdidnFBMThZNnA0OVBBcXFmNmNDaWp4ajJGdU9OYUR4L1NIOXV5OW0zdVUvUG5za1ZDQWJLZjdDSkl0MmcxYXZUUDlOUGJDNWpRRWhlWW13L1hiUTVySzkwKzlRYXlQVHlzc1J4Y1l4b0pBcEJYL28wUThSeGEwRnRHOWFFblRwLzNnYnNQcm1hODhxM1JVa3k3Ky9hYkF2YlRyRnNuTWVHKzFXcE5VbFlyODQxR2c3dzlBQWxhK25CNVBEUFlzcjhmUEVhcGxRYjE3WmFVTEV0aWtmQXlxU2xBbWt5OGMrTzRvYkp3M1dNLytueExBT0Vpc1VRWDd4ZGJMQkxRRnkyOGovM1ZtaVhjSVFQN01Ed2VOOXRvTUtUV3FsUTVOcHN0N3RNdEVvbEVTMXhCcU9KS2syOFlUdjREUlFZa3BMcEFuUlVRejQwYldaQWN6bE03ZVBTRUY3bVpqbmh2NkJEa3BYYk9aYXhaL2lKMytlS25PVm5JbG5JNkhRS051aTVIWFZlYkNVV0w4YXVWdUhaSW9JTTlHNDRFTjNiRUlQTGM5OFJiV0lmVlNKT0o1OEhJRHJkM0IxU0F3aEhLcXR1ajZ3eDlpNzVkdDR5MzhJRzdXQkF0dDl2dFlsV05NaStlNlNvaWtUZ3dWOS85OUJzbGtDQ2ZDa0ZvMHVrcGtRQXBxTlQyK3VFREtha1lVQjM3NDY3OVhqcUQ3bzBYVDYxNS8ySTJEWnBoL2JCeEZlL21TV09CcnNLSVo3b0tVSnloRUhYbnJ3YzlFS2lrMUVwWFkyQmlPQ0RCc2hhVVZ4dGUwSWZ5SWtHZFBrU3hrV3ZaSVdyejVWSUovZFZuSDJrWGRCVUJYMkFFNHRzdis0OVNzaklHRCtoSnhrQTZYbDNkS0pDQ0FrN1FWVTJSbmt5Wmk0TGtiRDNDQlNaYUJ4SWlYUVZhSWdmVFZieFlYQUJKS0RUQ2NmdlAreWlYTitnd0RGa05LcXhRQW1ua2tMNWhrN1BRUFJZSVZGeHUyemI4YkNzQnVzcjJEZS9GSlYwRldrS3pXRXpuMGFMVFh1Q09VVDEzV0VFZlNhUkFndHNEZ3VNSTNTbUJCT3hIVUkwOFByOURseFFSNlNvVHJoK0crWHhlWmdOZHhXSXh4L1MyRjlENUY5SWx2eDQ0R2lhbWRCVVdlcVBsalJNS1NMRG1YVW5VUVYranpwMHlLZGY4ZlllT0JSSTIvQTRPcEN1R1E2cWMvczRyVHdUUlZYUmFiV1lzMDFVYTV1NVE0VWxLSU9WbXB3dWdDSlp3Q2dLVnZVTUJLV2hueHM2NW1WeXE2aEJBOFIrSGk3elFEQjNpRWdrWUVmNjlPRjNsUDA4OEVFeFgwYWd6WW8ydUFzc2JNRFVPSHp2cHBhbzRBU0pqbng3NVpNVXlJQlNRZ25oSC9YcDFFVko5QVFoQ2dyZUdRR1RyU0ozVW1pSXpidjViTUYzRmFrMktSYm9LN0lvQUlEcDE5aUtsVnVyVkxZOE1wRDZoZ05TZCtJeXVlZG1VeTlwZnhSY0N5eHAwWWsxQWhpcGVVMDlYMmJ6MmJTNlJybEtycXNtTkZib0tsOE1KT0VwRnA4NVRja3U2NW1XUk1kR05EQ1JZNy9LSXo4aFNwRkt1NlVVbnp3WFFtMWpXSWhQb25kMUFWNEhiVHFlVEh5dDBGUTZYRjVoRDZHTk85YnpzekRSZWlIaVNrQWlrWEJwaHB5SXd0TVBGai9EYWNqOG5ScmRxaUZVQnVzcm1VSFFWclNhdHJlZ3FiRGJiQ2QxTXpsMHNwUVNTWENyaHdCWm9wTk5keUVENjM3OG5XOEdocWhLQmtIcVZzdGJQWkRGZENmdW82UUwyRXBHdUF1ZXNGb3VzTGVrcUxCWXJVRG9XcmpnQW1UeGtCWk5QQkZKUVlWeEdtcHhTMVFMRERydzIrUEFFTEpvdkRYUVYwRkJ0VFZlQkp2Rnd2RlJhUWFtVkZPa3A1QVpkNlVRZ3BRY0RLWmtTU09XVjlWV2JMR1lDU05FUUlsMEZ0am9sMGxWZ2M4RnJBaVFtTStEN1YxU3JLRFZTYXJLVVRKOVJFSUVVMUV3MFJaNUV5YlZSMVdycTkwUnJoOXM0dEtVQVhlVzc5Y3ZKZEpWcjBsMkZ5YXpmMDBXcHFxUFVTR2xYQXlsSUkwbEpSaFVsa0tyd3ZqdE1qSmtBVXJROUtBSmQ1YWFKWTVnUXdHeWdxMEQvcDFZREVxdCtMcXVVZFpRYVNYcjFGckZTSXBDQzhrRkNBWTh5ZTEybjBRVStER01tMmhpM2xnQmQ1ZlhuRmdUUlZhRC9VMnZSVlJvYWZHaDBCa29nSWE4Tm93S1NOUGpKUE1xdUhVYVR4WStIQ2J5SktXOWRhYUNyTEVhZ0l0SlZvRG80bW5TVmhtMDZqRWJxdEtsSXlDZGpRd3psM0ExQUVwSTBFaVdRSURVQ3RlVFFPaVV4MWRkR3BxQmxqa2hYd2F1RG8wcFhnUjVXUnJPRldpT0Z6ci95R1dRUTRSWThaV0Fza055ajAzMko2YjIyMGtCWCtXYmRNaEpkcFNZM0duUVZpQWxhYlhaS0lHSE1rUEZGUGlPMEswaTl3eHdFSk9tMFJDQ3lyUVNxZ3h2b0toQTZjTG1jZktDcnFPdnFNbHNLcEhBOUp4c3BTd3NzYlp6bWZtaGlTdHRXZ0s0Q3RYY05kQlc3M1NadWlkMEU1Z29jdy9VRmdCUWFHVjhBcE1RU0ZjZmk5Zm9DbEdlWDIrMlAxaCtjd1dDRSs4eXJQZ01NcDJiRmdxQjdiR0lhMjFhZ0VjU3lEOVpEZjhqQXhQTDVmR05MT3NENC9iVG16cW1iR1VvandiYmZYQzRIb3pMNkxEWmJBa2h0SkpEclhMeHNqUXQ2TGNCOURvZGpFNGtsc0cxOWk3aGhvQnpBSTZSRWpNZmphd3hJVjFWL2VFQmZVZ2g4bU4vblp5U205Tm9LTEdIUURROGFtWUVkQTJrTmdWQmdrRWlTdE5GNGYraFpMdUJUYjc3c2RvY0Vrck1oSmdBMWFWZmNSNnZONFpWTEd5OGdBY091Z2xaRFIrNG5sb2dsdGI0QWFEWi92OXNEamU5aGU0aEFQRWNnTU1pVG9mbDk5Sndlbjg4ZmRoZHZ3RVlvUjc0QlNNWmdJTmtwVXgvSjhpUTZiblFsZ05US0FpVmZTOS8vM0ExYmo4SjlMcGRuVHBJbXFZRzBIMTJqdmQ3YmswaW8yYjhoc0tIZi9zVlNIMUVqWFJHTDFVNEpEcmtNQjVMSHc0UkdsNG5wanI3QWhqVExWbi9oK21WL2ZiMFptOE94Q29VaUE3N2pkdlM5UDV5dWtwb3NhNnBHTWpWNGJTQkJhNnhXYjZRRWh5SXRoVjV2ZUxsWlhCb3ZNZXRSRkt2Vjd2OTQvUmIzaGkwN1BOQ2dBOE13VDJBam9DUnBxKzZ3NmZIVTc0cVFsWkZLYWZ0cWRRWXlOdlJFSUFYMXdsWnJEWlJBeXN4SXBlTWZ6azVNZmZRRXRoSUZPMGlqMWVQdXZNQW9rOGxxR1Zqcm13L0F6b1JqZWxveXBVWlM2NjVTTWtvaWtJSTJtNm11VVZNUytuT3pNd0tvOWNSeHM2bFlFbWliK09hS3RhNnpGMHB3TzRoclFaNlloc085ZGhVNkRZM0RPbVVyS0lHa3F0T1NiVE1WRVVqS0lJalZhaWcxRXBUVFFQUVRmVGczQVlQbUN6UnVlTytULzdxaDkzWEFEbUt6N1FLaFNDOFNpWXpYK3J1NDNLN0FYSGJKejZGYzJxcFZhaktRcW9sQUtpYytVbEd0Y2tMZ3FiRytrUkJIeXMzS1lKUldWTE1naUpYSXV6Vk5JREc2YnRQMzdrODNiSFhEYlloR0N3UkN2VlRXZGczdVBXNFBSeWFWMElGUTEzaWN5ZTh2S2E4bWE4bHlJcERLYVBXcEVoYnUxdnRyYXJVT3FwWi92WHAwQmlENW9Ea0NsOWN4VzlvMFIyRHZ0SGMvL05KZFU2c08vUGw0Zkw0SmRraGdNdHVPdGd3Rm10Q0JEa2gwVk0vVElQc0llVzNrZ09RRklwRGd3Vklhb1FTM1NsbG5wd0xTb0w0OUdFZ2wweHpPQkpBaUVlaVZzUGpkTmE0VHA4N2hhUTJ1VlN5UmFIZ3hjTzBjRGtkZ25vRk5RTG1zMWRTUnRaRnkreGRMYlVRZ2dad25BdW5jNVhMTGlDRjlHeTNXNjllN1crQkRYVTRubnh3K1NFaFFLTVgvL3BwTjdtOSsyQk93ZzZEekwyejJFKzNOb1Z1MjFEb0RNWndCZmJ0VFVsRE9YNjRnZHl3KzMzQ0RDS1JUYUV5OWN1Zk1aY28yeDEzeXNobVFLakdhemZ5RW5SVEtDL0xRdnRxMjAvUCtwNXRjQVNJZ3VqNThnVUF2bHlmWHhwek41ckFMd2U0TnQ3U2RQbGRDeHNTcFVFQTZRWHpHcGJJcUI3b0Fuc1o2SklIWE5uTFlRQXd0YjM2NzNTYUFmUzRTOEtrWE1yMERMVittSktsVXpXS3hZeTRMZ0pZMUh1VFloaFgwdzZneS8rQjhuYnRVVGw3YVRsN0JBK0VrR054QjRmZXpGOHNwU3dxdUgxNFFlTDNkYmhjbTRGTlA3NWovekJ2T1I1OWI0Z1FRQWIxRG5weGNsWkthVmgyTElLcWZPMXRnN3NZTUgwUzVyRlZVMWRvY1RoZlIwSVl3d05sUUdzbUhJMnpVLzFUWlpYTkJ2KzZOdGtjZU5YUmdBTVVPL010MFZJRzB4c28xLzcxQzc4QXdwa3NvRWthTjN0SEtRQkxCNmpKdTlIV1VRRHArNmp3NXRuVVdHZHJPVUJvSjVBRHh6aCtGcHlnRFk5QkVhdnlvNnpDdjE4ZHkyTzM4amdZZ0FNMlc3M2Q3SnM5OHhMSHgyNThESUFKNlI0WkNVUm9QSUFLM0grSkhJNjhiZ0ZIRmowQU9IenR0cE1JS2srckJtbHFOcTZxbXpwYVZrZG9vU0tiOWZTenpwNzBIdkJhclJkS1J3Z0N3aDhmcnl6OGwwRHU0Rm1RSDFVV2IzdEdhWXJGWUFpWGdONk01cEhxZXptQnlYU2lwdERjRlNKQTN1VVFqZFA4LzlPZHAvZTFUeHpjS3BLRUZmVEdvQU5YcURHTDBqNnlONVYwam95RkE3MWorNFpldVBmc09FK2dkUWtPOGJaOEJucmJOYWhWRHN5OWs2MkpodEJGNWp4a1ZXdFl1QlRsZklWNjNnM2pubHdQSEtPTWRzTDVPbVRnYUMrek5ZV20vVzZDREN3K1orVnZtUEdvSEVERVltRWNrRm12UzB6TXE0bkVQRnVoZmlmNzR6SWxqaDJQaGVOcS9IejZocDhKSVkwRDZtVVlvQ0VCTG03T3Nzb2FTVkQ1OThuaG12YW8wUzlzamlJRGVNZld1ZjluWGZQbXRHK0pEUU85QWRsQ0pWQ3BUeCt0dnNwak5nWTBjYjdscFBPV3lwdFlhbk1YblM4a215NDloZ1lSVUZpUU9DNG5uOXV6L2s1SlVCV3dBNk5nS2hodFNsKzNHZzRNK21mOTQ4Rm5IaTIrdWRnRkhDRHI0cHFhbGxTZW5wQ2d4TEg0cHhnNkhuUS9ONUFmMDdjSG8yNnNyWlJCeXorK0Y1RDlMTWNKSWVTUWE2U3JFN2ZuOXFBNUtsS2crY1BZZFV3TElOcG1NY2IvbE9kQTcvcjE0cGVzZkR5eHlGSis3NUdPeDJYYXBUSzVNUzB1dmFBOTdycGlNeGtEcTY2NFpreW03d1htOFh2L1B2eDNXaHROR1ZFRGFTeU9VS1VIRzk4alZCdGRWUmpmMDhRR2syMnp4R1ZjQ1NzZmFEZHNDZGhCd2hNQnhFSXBFMm93TVJWbGJjSVJhNXpjNmVMQVRBYXdpRThZTXBUU3lpMDVkTU9qMEppTFpINVRKN29pQmhBZWE5aExQYmYzcDkxcmdvMUI5OFB4NU13TUlOeHIxS2ZGMmdYZjlkc2c3YmZhajloVWZiM0NEWVEzMGp2UU1SWWxNSnEranRTTXg2T3ZuNXVINzdtU0ZLODMrZnVkK2NsN3dBTUpHU09lTHl0RGFTaU1rY1NIM2R1cnNaV08vWGwyU3FMUVNkR2N0TERyTmhUWjFJcEhZRU9zWEZ1Z2RTMWF1STFTdGNxM0lHOU8ydEdvMUpqMVBaTDg2blU0QmJMZ1RUaHRkTEtrMG55aStTTDRHV3hyMTNodDdBQ0VQMGlVbmllZSsrZkczc0pucnB4Zk1aUVBTalFaOUtoUlF4cXlkWUxiNlgxbjZrZXYyZTU5MEFJaWdhalZKS3ExTlMwK3ZhSThnZ2w2VWVyMDIwRGgwMGNKNzJlRzAwZGFmOXBIbnVnUmg0bUNUZ1lUTGV1S2Q0NmZPVzg1ZUxLT01tVUMvbnJremIyWkJSbG12ajcwbER0ejNMemYvR0VockFFY0k2QjBDb1ZDbnlGU1VpTnZCVnZPTkNmcGpKME1xQy9iakhkQ25PK1c4UTdobi81Ry95RGJoSnFyWGhBUFNQaHFKejcxK3k4L0tjRi82L2ptM3NkSlM1SFNyeFpJRXhsMnNYRXlvV3IxMTd1UDJwYXZXdWFEMEdhcFcwek15U3VvNVF1MlhUd1VWSWhhTFdRYjhzYWZtenczYnQzdlR0ajNrT1FZN2NYdXpnUVNsdU9qd0VmRWNzcE9zSjg5Y29yUjlvRnZKRXcvUGdTOU0xMm0xNlczZEFxZUIzdkhRazY4RjBUdFMwOUtxWXBYZUVVM1JhdFFaMExKbXdmMnpXTERiQU5Wekw1ZFZXLzRvUEVsZWRkWWdMTGhib3BFQ1lTUmFmZjd0aW56ODVYZFZFR09nZWhIczlYcjlpTUVZbEN6cDliclV0cmlBUU85NDk4UDFybHZ2ZWR5eC8vQnhMOUE3eEJLSk9pMDlveHkySzZkMUFJRzk0Vnd1Rng5Q003ZE91WUV5aWcxZStZZGZiSzBrblZhRzAwWVJBUW5YU3F1STU4cXJWTTVkdngwSmEzaS9zdWpoUUV0ZkNNZGZ5NGcza2Q2eGJ1UDNRZlNPMWk1OWppVUI1cXJKYUV5R0plMnRGeC9saERPdzl4OCtvVDEzcVp3Y2NGMGRUaHRGcXBFQVRFQVpPRUk4OStXV25TcWp5VUw1QVVrU0VYM3BTNDhGZm9CT3AxRmNpMzAxWU04eFNHdTgrczdITG1qakRQU090TFQwTW5seVNrMTdaeVlRQmJxTGFMVWEyQnFFL3Vxemo3QVY2U21VU3hyUXFqLzdhZ2ZaTnJxQTV2N25TRDZ2S2MyeVZ0QUl5Vnl6MWVaZHUrbUhpbkF2Z2hLWEJmTm1CYnc0dGJvMk05cjJFaDEvTitpaCtNUUw3emovdWVBRkI1UStROVdxVEM2dlRrMUxyN3lXcGMreElocDFYYWJQNjJOQzZtck1pSUt3WVpndnY5bFpwZEVaeUlwaFNhU2ZGekdRRURJdmtBTlN2eHc0WmpoMjhuellzcHE1czI1bWpiaHVBT1oydVhrNm5UWXR1a0JpK0NBYkQrbU5LL1FPa1ZpVG5xRW9pMGQ2UnpSRXI5T21RdUFSN0tLRkQ5d1Z0ai9EK1V2bDV1MjdEcEJ6YWorak9UOFJkU0Roc2dwM0JhL0llNTkrWFdHeFVqZm1ncVh0amVmL3hjN0p5b0NRZ0JRWmdGSGQzQTZ5OFpsWjJSZkFFd3ZRTzJUeFMrOW9xWmhNUnFuWmJKYURiYnJzMVNjNXNNa2dsVGdjVHU4N0gyMHFJNzlOVTdSUms0R0VWMVcrVGp3SFNiM1Y2NzRwQy9kYXNKZFdMMzJPQzRZZk1nQlR6V1pUVkVsd1FPc0FUeXllNlIwdDkxSXRJb05lbndaRXRmZmVlSWFUa2l3TmEwWjh1dkdIaXBxcm00WXNRWE50YWpVZ0VRenZJSGNRb3FCb21RdWIzSVNPOVN2UUQ0UWZDanY5UkdQYmc0VGd4ckxOS3RScE5abElBOUhmZnVseFRyaGlSNUNqUldkMFAvOTZtQnpOUHhDcGdkMGlJT0h5RG8zVUNtZlYyaTFWSlJYS3NEa3FDTSt2ZkdNUnFGdzZXc3NWN1ptZWV5MDFrVmFqemtUMkl2MnRGeDdsUkdKY0sxVWErN0tQTnBJSmFtQW52ZHljNzlBc0lDSEVRbFh0QzBRdnp1M3grRjlmOGZubGNQWVNDTEFFWU50TjVGbEI1RnRoTkJwa0NUZzBUOHdtWTVKV284bGtNcG1NTi8remtIMURtS3grZzEzMCtudWZYdzdSV2VUbHhtZ2lyYVdSYUxoRnY1cDRybGF0YzZNdmVLbVJwdDVCQXNXVkh5OTdJV0F6R1EyR3RHaDdjeDFCREhwZHNsNnZ6MENtQWgyMFBHUVR3cjBHTWhMTFB0cFVBa0ZsMGtNYnFMTDdyUVlrSEV6cjBPRlg0am5JeGEzNDVPdlNjQ1M0aG1WdTdYc3ZjeURCQzlGdmpicE9rZGlhSWpMUmFqWHBKcE1wQmY2SW55NS9pVHQ4U1ArSUtEc2ZmYkd0N05DeDAyUkRHamo2SzFyeWZhTFJ2Ui9XMUtDMWR0K2hJc01uRzc0dmorVEZuZk95R1Yrc1hzeUYwSUROWnBQVXFtcHlyOVhPMHZFb1hxK0hpYTVSRG9SUllFZnVkZSsveWdsSDRHK1FqVnQzVjRVd3JxR1c4ZDk0S3F6dGdJVGJTNC9TOERhNVY4N3ZPcURkdlAyWDZramVJejFWVHQvdzRSdGNDRm9DNTd1bXBqcXZQVldqUkVzZ2QxWlRvOHlEWUNOVWdLeGI5U29YdU5lUnZIYkgzb09xLzI3ZFJjNlBCdWF1dVhaUlVQaWxXLzhSUVNmK2NjdkVKcjhKZW8wSm9mMFF1amtKalN1UjFML09YTEtreXFYTS9Oek1zSnY1d2pvUDIyMGlvZjFaVk95M1dxMFNyOCtMUWRVR25aNVk3ZlI2WFFxRVRLQVFkZTZzbTVtdlBUdWZJeEVMSTdvd2g0K2QxaUs3aUp6VkJ4dHBQZ0xSMldoOHY2Z0FDWCtkRG9HcEdOMjhFZDYzNGZ5UjQ4V21TTUVFVXRDL0p6WjRRQy9Hd2NLL2ZBYURrV2UzMllRY0RzZU9ZY3dPR1doMHUxeHNkVjF0TnJvT0VyQ0gzbm4xU2M2ZDAyOWtZVmhraThtQkkzOXBscXplVUVFeVdXRVpld2FCNkdpMHZtZlVnSVMvVm9uQVZJSnVUa0NEVGdRVGk4bjA5KzZlRjFFQVVwR2V5cGcyYVN6emNtbWx2N1NpR29ObUJ6Ni9qODdsY3UwZFJUdUIwMkUwR3BKMVdnM3NwczB1Nk4rTDhlRTcvK0gyNnA0ZnNUbUM3S0hhZHovK3FqS0UzL01LQXRIdWFIN2ZxQUlKZjMwWkFoT3N1YU9JNTJHWnM5bWQ3b0Y5dWtub0VhQ0J5K1hRSi85dE5ETTdNNTFlaUpZNnM5bkNSd2FtQkhhQ2pxZU9IODBSQ0RBaUR6YkxicmVMK1R3dS9ZbEg1ckNmZi94K3RsREFqL2hmdE9HYm5aV2ZiZnF4SnNSRHF4Q0l2bzcyZDQ0NmtQRDNPSVBBQkhUY2tjVHo1eStWMjVTMUd2dVFnVDJUTUFZam9vc0N4UVRBN0RPYnJWQkNUWWVMYTdOYmhkQk9tTVZpdWRzVGdLQ1VXcU5XS3l4bXN4eG9OeFBIamNCV3ZQNE1kL2pnZmhGWDQwQ2M2S1AxMzVWdi9XbGZLQUlma05RK2E0M3YzaXBBd3QrbkdJRUp2SVRSeEdXdXZFcmx1RmhTWlJuY3Y0ZUV3MlpGZElGQU8xMC9jakFHVWR1eUNxV3ZzbHJGUkY2ZEJOcldNVENHSjk1NTErQ05hYlZxaGNsb1NrSExHS3Qzank2TUpTOCt5cm5uenFtc3BtZ2hJS2U5KzlGWEpiOGMrRE1VcC80ZEJLTDFyZlViNkZObVAwbDI1NlA2QVZQblBIVURyTWswMG03ZXliSWsxcUw1ZCtkMTc1SXJhdXA3d3Q0ZGE5Wi82d1llTnR4bnNwaE9vVkNraHkybzRtWC9PS2d6UTB1WUdHa2ZhY05XSE9EU1AzVFBERmFrd1VXaVFKN3p6WlhyUzBKazhzR3dYb3ptOWJ2Vy9EMnREaVFjVElQUTRXMGFZWFBCQnJsMzFwU002WlBHWk5DYllVV2Z1MWpxK3dRQnFxSHBGV3czRGlWR0FvSFF5QmZFWnBkZHlOSmJyVmF4dzI0VElSczRZRGhESjVkNXMyOWxoYXMzbzRvUnJkbXdYUW41VHZMSG9iR29KYW1QbUFJU0RxWnNkRmlPUmk3NXNhR0Rlb3NXenJzalR5VGtOeXVpRGVWRzIzYjg0dmxoMTM1dnd4WlZZSlR6K1h3VGw4ZXpRaXlxcmZqYTRIMkI3WU5zT3dFQ2tRVG9yM0FlWFBtYkpvN0dvR0N4UjllOFpnRUlsckpWYTdlVWhTaG1CQUYyeHVQa3ptcHhEeVFjVE5CQzhOKzArc0Jsa01pa1l1YS83cnNqaDZxTGJtUnhreUx2amowSHZFaExlWUIrMnlCc0R0dkc0WEJ0WEM2TVFKQ3oxUW9pd2VhQmJSbGNUaWZQV2I4elFrRGJBbHNSU3JRZ3RERnEyRUFzWEZVSGxVQWZocFZydDRRaXBZSDhqc1lMZU5hQjF1NkFSQURVTkhSNG1tdzNnUXd2NkNPKy8rNXBPU255SkU3TFhHaTcvNC9DRTc2angwOTdvY0syU2xrYkJCeU1pYm1aR05QRlpMRmNiQmJMQVFZN0hXa3RKaFB6WUJpVGtnb0RGUnFRRDRSZHFTRmc2RUkyRHR6M2VqeHM4bWFJa0pBZVBMQTNCajNKd2ZZSlY2QVlUcUF4Nk5xTlAxUkNQak5VL0JKMzd6ZGNhODNiSmtEQ3daU1BEa3RETFhVc0pwTSsrL1pKNlZQK05qSzlzYTIrbWlyUVBBczYwUjQ0WE9TOVhGYnBoeTRrRWJtMUdPWUdmZUwxZUNOYWRpRUozYmxUTmgxYzltRm9oQ3NEYW9wYkQ3V0VFQnNpTlU0bkxtWFBSQ3ZsRVRkQUlpeDFUOUVJN1hPSWtwV1J5bmx3OXJTc0FYMjZKYlhHNTROdFZWbWw4bGVyNnZ5WHk2cDhXcDNCWDZ2V1hkRmNScFBaMzZESklOTXVJL1NpUmw0blBUVkZScy9OeXFCbktkSVlPWm5wZEFCUmEzeFBhTnp4d2VkYkswc3JsSTN0N0FsVW5wZXY1VklXVTBBaUFHb1VianVGTE8wZTBMdXI0TzdiYnN4c1RxZ2duZ1ZjK3ZXYmY2cis4Njl6alpXWFF3YmhUVFJuZTl2NnU4WUVrQWphYVQ0YU0yaU4wRnNHOWUwdXZPMm1zV2xVemI3YWcwQ2QyZVlmZnEwNWNyeVlxajhCRkdDODA1WmFLQ2FCUkFCVUY5d1FIOVRZYy9KeUZOeGJKbCtmT254UWJ4bVh5OEhhQTNpZzJXdGgwUm5kZHp2M3EwUFUzeE1GR0JaUUxsUWNTOTgvNW9CRUFOUVlkTGdmalo2TlBZZkxZVE5HRGUwdkdUK3lRTjYzWitlNHJFWUIrK2UzZzBXNmZZZU82ME9ROFlrQzhhQzFhSDUyeGVMdmlGa2dFUUFGeWNCNWFQU2plaDdFb1NhTkhTWWZlVjAvR2RVV3FyRWdVQXIwUitGSjNZNjloN1FoNnUydndob09vRjlqK1RmRlBKQUlnSUtsN2lHcUpZL2dVYkVHOWVzdUxPamJYZEs5UzQ1UUxwVncydks3USt6blVtbVZwZkRFV1dQUjZRdG1xTGFKNEdYUXYzUE50VWh2ZENnZ0VRQUZTOTBzTk1haUVaSG15VWhMWmcvdTMwUFVvM09Pc0ZPT2dwOHNrN0FiMnhtenBRSTFZM1ZhZzdPaVNtVzdVRnBwTFN3NmE0WnRPQ0kxbFdqMTdSYTNvSGs0SGs5TGROd0JpZVRsZ1IwRk1haWhUWDI5UkN4a1ptV2tzTHQxenVFcjBwSzVmR1MwODNoY0xDMUZka1Y3Q2ZoY3JFR2JnVlloRm4vQ0hoMVdxODNyY0xxOFZTcTFBMmtjZTdWSzdTUTFPSTlVQURUUVVYOXZySGhoSFFaSUpGREpjVUFCbWFwYnZJU0phUFZkOUwvRDkzK0phN2tLU08xQUFGUUZhQXhHWXhnYWloajVYaXBjOHh6RWp6RUZucFlxRUNhdC9RazBRdGlGRDVCMDNFQXZ3TFZWYnFTMlZVdkNRcmpHQVpjZFN0dWhrbFZKYThmQ3BMVi9BVTJ3Z3hhOFdSMVFWWUFmMVFVSEZ0d21OcGVuQWxzRFNJakFoWnF4VXZ4OEpYNnVRd2s5Z2hMOWhDUWtyUHkvQUFNQXNpa0dkbDBYWUM4QUFBQUFTVVZPUks1Q1lJST0pIG5vLXJlcGVhdDtiYWNrZ3JvdW5kLXNpemU6Y29udGFpbjtjdXJzb3I6cG9pbnRlcjttYXJnaW46MTBweCBhdXRvO3otaW5kZXg6Mn0uYXBwc3RvcmVCdG57ZGlzcGxheTpibG9jazt3aWR0aDo5MXB4O2hlaWdodDozMHB4O2JhY2tncm91bmQ6dXJsKGRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBTFlBQUFBOENBWUFBQURMMjBDNkFBQUFHWFJGV0hSVGIyWjBkMkZ5WlFCQlpHOWlaU0JKYldGblpWSmxZV1I1Y2NsbFBBQUFBMlpwVkZoMFdFMU1PbU52YlM1aFpHOWlaUzU0YlhBQUFBQUFBRHcvZUhCaFkydGxkQ0JpWldkcGJqMGk3N3UvSWlCcFpEMGlWelZOTUUxd1EyVm9hVWg2Y21WVGVrNVVZM3ByWXpsa0lqOCtJRHg0T25odGNHMWxkR0VnZUcxc2JuTTZlRDBpWVdSdlltVTZibk02YldWMFlTOGlJSGc2ZUcxd2RHczlJa0ZrYjJKbElGaE5VQ0JEYjNKbElEVXVNQzFqTURZd0lEWXhMakV6TkRjM055d2dNakF4TUM4d01pOHhNaTB4Tnpvek1qb3dNQ0FnSUNBZ0lDQWdJajRnUEhKa1pqcFNSRVlnZUcxc2JuTTZjbVJtUFNKb2RIUndPaTh2ZDNkM0xuY3pMbTl5Wnk4eE9UazVMekF5THpJeUxYSmtaaTF6ZVc1MFlYZ3Ribk1qSWo0Z1BISmtaanBFWlhOamNtbHdkR2x2YmlCeVpHWTZZV0p2ZFhROUlpSWdlRzFzYm5NNmVHMXdUVTA5SW1oMGRIQTZMeTl1Y3k1aFpHOWlaUzVqYjIwdmVHRndMekV1TUM5dGJTOGlJSGh0Ykc1ek9uTjBVbVZtUFNKb2RIUndPaTh2Ym5NdVlXUnZZbVV1WTI5dEwzaGhjQzh4TGpBdmMxUjVjR1V2VW1WemIzVnlZMlZTWldZaklpQjRiV3h1Y3pwNGJYQTlJbWgwZEhBNkx5OXVjeTVoWkc5aVpTNWpiMjB2ZUdGd0x6RXVNQzhpSUhodGNFMU5Pazl5YVdkcGJtRnNSRzlqZFcxbGJuUkpSRDBpZUcxd0xtUnBaRG93TVRnd01URTNOREEzTWpBMk9ERXhPVEV3T1VVME9FWkVOa1V4TmpBMk1DSWdlRzF3VFUwNlJHOWpkVzFsYm5SSlJEMGllRzF3TG1ScFpEcEdNalkxUkRoRFJUaEdRamt4TVVVeE9VUXpOVVJDUkRGQ01USTJPVUU0UkNJZ2VHMXdUVTA2U1c1emRHRnVZMlZKUkQwaWVHMXdMbWxwWkRwR01qWTFSRGhEUkRoR1Fqa3hNVVV4T1VRek5VUkNSREZDTVRJMk9VRTRSQ0lnZUcxd09rTnlaV0YwYjNKVWIyOXNQU0pCWkc5aVpTQlFhRzkwYjNOb2IzQWdRMU0xSUUxaFkybHVkRzl6YUNJK0lEeDRiWEJOVFRwRVpYSnBkbVZrUm5KdmJTQnpkRkpsWmpwcGJuTjBZVzVqWlVsRVBTSjRiWEF1YVdsa09qQXhPREF4TVRjME1EY3lNRFk0TVRFNU1UQTVSVFE0UmtRMlJURTJNRFl3SWlCemRGSmxaanBrYjJOMWJXVnVkRWxFUFNKNGJYQXVaR2xrT2pBeE9EQXhNVGMwTURjeU1EWTRNVEU1TVRBNVJUUTRSa1EyUlRFMk1EWXdJaTgrSUR3dmNtUm1Pa1JsYzJOeWFYQjBhVzl1UGlBOEwzSmtaanBTUkVZK0lEd3ZlRHA0YlhCdFpYUmhQaUE4UDNod1lXTnJaWFFnWlc1a1BTSnlJajgrZDVvM0lRQUFGWFJKUkVGVWVOcnNuUW0wVnRQN3gzZTNick1NRldWb1V0d29jNFNTUXFaSVJNbVFvcVZRSzhxUXhXb2hKQmt5bGdZUnlsQWtSQ2lKbTNrb21hbFVJbGNsSlkzbnZ6L1ByK2Y4OXozdk9lOTA2K3Jlem5ldHM5NzNQV2Z2ZmM3Wis5bDdQL05iNXV5enp6YmZmLys5V2JwMHFkbThlZlA1SzFldVBOdnp2SU9NTVRWTWpCamJQemFVS1ZQbXl5cFZxcnhXcVZLbGg1Y3RXN2FSaytWeWNuSU14NnBWcTRadDJMQ2hUOXhQTVVvYTdFTGNkdlhxMVczWHJsMTdjcjE2OVM1ZXNHQkJRZGxhdFdxWkgzNzQ0WFo3b1gvY1JURktPSUUzMnJScFUrUDgvUHdKWlhOemMvTVdMMTQ4MXA3UGpic21Sa25IK3ZYcjk3ZkhEMlh0OG4yalpVRmF4bDBTbzdSZ3pabzFGWEwrK2VlZnhuRlh4Q2hOMkxoeDQ5NDVmTVpkRWFPVW9WeE8zQWN4U3FNY0dSTjJqTks1WkJlMWdTcFZxcGlkZDk1WmRPSFpZTjI2ZGVhUFAvNG9rWjIzeXk2N21EMzIyRU9lZi9ueTVXblhxMWF0bXFsZHU3WXBLQ2d3Zi83NVo4cHl2Ly8rdTFtNWNtV0o3S01hTldxWTZ0V3JtMFdMRmhrcnp4WHJ2YWV3ZEdkNjdMcnJydDdRb1VPOUJRc1dlS3RXcmNycStQdnZ2ejA3c043TEw3L3NIWGZjY1Y0Mno4SFJxVk1uNzdycnJ2Tk9PZVdVck50SWRUUnYzdHliUG4yNjE3RmpSLzljcjE2OVBEc3h2UUVEQm1UVTFrVVhYU1QxQmc0Y21MVGNKWmRjSXVWNjl1eTV6ZDVyV3grREJnMlNkempwcEpPSzg3NXpzMXF4eTVjdmJ5Wk1tR0RhdG0yN1ZXYldHV2VjWVN4aG0rT1BQOTU4OGNVWEdkWGRaNTk5ekxoeDQweHViaTZHSnRPNGNXT3phZE9tclQ3N0R6endRTk82ZFd2eitlZWZteGRlZU9GLzIxMjVjdElYM0R1amJYSkxQWTUweXZHNXZXUDMzWGMzelpvMU0rKysrNjZ4QzFZaFd1RW9XN1pzc1Q1UFRyYUR2TFdJV2dFN2MrMjExMlpjcjMzNzlrSllyNzMybXFsYnQ2NFErcmJBbURGalRKTW1UWXpkR2Y1ZlF2RTgrZHk4ZVhObWtrMmE5YlNjZm03UGVPaWhoOHdycjd5U1FNRDZqcG4yMFgvQ1krZmw1YVVzTTNmdVhQUGlpeS9LZDFiUWd3NDZ5Snh6emprcFozMm1hTldxbFRoeFBmYllZK2EwMDA0ek9IWGRlKys5Y28xT3Z1Q0NDK1QrVHovOXRGOEhOd0xLZmZiWlorYUREejZRRmVXb280NlNuV08zM1hhVDg4ODg4MHdodmhaZStvZ2pqcEFCK3VhYmI1THVaaTFhdERDbm5ucXE4T0NmZnZxcHRHVlpyNFN5Njlldk4wMmJOaldYWG5xcCtmZmZmODFUVHoxbHZ2cnFxNVR2Yk5sQVk5a1pjL0RCQjV0NTgrYVowYU5IbTcvKytpdGx2VHAxNnBqenp6L2ZOR3pZME15Wk04YzgrK3l6WnRteVpmNTEyanZtbUdQTStQSGpaUkozNk5CQjVJZmh3NGRIOHZqc0pyUkpYU2JnVlZkZFpSWXVYQ2p2N082Y0d6WnNNQ2VmZkxLTTBYZmZmU2NMQmUvc2dqWXV2dmhpa1MybVRKbGlMSXRhdkR4Mmx5NWR2RlN3YklIMzVKTlB5dkhFRTA5NE0yYk1TRm5ualRmZXlPZzVMT0Y0dHNNOXl4cDRkc1gzckhEaVdhTDByNWNwVThhYk9uV3F0SDM0NFlmNzV3Y1BIaXpudW5mdkxyOWJ0bXpwclY2OTJ2dnl5eTg5UzRoeXpRNjhad1Uzdjg0Sko1d2c1L3YxNitlZnM0TW81MjY2NlNiLzNDR0hIQ0xQWkZrcWVSWkFtMVdyVmkzRU8yc2ZXY0lST1FQdy9IYmcvWEtXNE9YOGxWZGU2Wit6dTZYSU5kUjUrKzIzUFVzY25wM1kzbDU3N1pXMHI4NDc3enpQRXIrM1pzMGF6MDRlYVhmSmtpV2VKV1Mvek5WWFh5M25HU3ZLcmwyNzF1OExaS3F3ZGl0VnFpVDN0eE5leWxvQ2x2ZXFVS0dDWEwvenpqdmxQSDNMTTNNZHZQVFNTekkrMmc0eUV2ZXpySjQzZS9ac0tXTVhxNng1N0t3STI4NVFiMXNnVThMdTJyV3IxRU1ZNC9mamp6L3ViZHk0MGJPcnExL0dyZ0JTNXU2NzcvYlAyZDFFQ0lySndPOHFWYXA0bG9YeHIxOSsrZVZTaDA4OVovbC9PZGU3ZCsra2hHMVhiTS91UFA3dks2NjRRc3J3SEVIQy91bW5uenk3U2dseE1Ma1kyTjkrKzgyclhyMTZKR0ZEekhiRmsyZm05d0VISENCbGhnMGJGdGxQTldyVWtJbkwvZmJlZTI4NTE2Wk5HNm0zYU5FaXZ4K1k2RXFFalJvMUVtSzJ1NStjc3p0ZmFOc1FKd3ZNVzIrOUpYM1B4T08zRXEwU3R0MGR2RDMzM0ZQNkJxSUdkcGVVTXZ2dnY3OW5WM2Z2dnZ2dTg5dnQzNysvbE9IOWlrMTRWTURYc3Uxa3ErcFQvckZpeFlybXdnc3Z6TGdkdXdvWlN3ekM5dGhPTTdaempTVWEyZTRza1V1WnlaTW55M2FLY0Fyc3dBb3JaVHZjMzc3dEtpYmJZcmR1M1V6ejVzMU52WHIxZkZWVnBvQzlnTzI0N0xMTGhIV3hneWJuN1FBbGxKMDRjYUt4UkNUZlo4MmFaU3pSbXROUFA5MGNkdGhoNXMwMzMwd29iMWRsWWIwUVhoRzA3YW9vckFCOTBLNWRPM1BOTmRlRUNzN0lRNmhsWWRFV0wxNHM1NlpQbnk3dGRPelkwVFJvMEVDRVl1V0RlUzRFY1pVdDdFcHU3RTVVaUoxenh3ODJoZmNHcURCZHRzVVN1SHlPR2pYSy9QcnJyL0tkZHBDTmtOVSsvUEJEWWFzWWUxU21uS2VPc2ltODc5ZGZmMTI4ZXV5NzdycExwT0FpTS9wMmNPamdUS1IvdThvSlQ4Ym54eDkvWEdoU3dMTmE5a2NHQ3VLbFU2Ky8vbnFmdCtZK3p6MzNuRjhlUXFMOGZ2dnRaK3hxSW5wamQxQXl3ZEZISDIzR2poMHJRaXpDRkFPdC9INFFRYjN1anovK0tKODc3YlJUYU5zSXg3Uno1cGxuQ2dHNDdhQVBwdy9DQ0Z0bElpVXNCWHcyL1k0c0VKeWN3ZStwTkRqYVYxRmo2UGFsWGRrTHRibnZ2dnZLSjJPay9jVFlRZWpaQ3AxRkl1ektsU3R2RlFrMmFpQ1R3Zks4c29JaDZMQnpNS2gwM3NDQkEyWFZyVisvdnJGYnI1UjkvZlhYellBQkEweVBIajFrUldRRlFJRFJEci85OXR0RlRXajVjRmxCRWJKWVJUSWxiTXJmZi8vOXNnSWlqQ0tFOGdueGhDRkk3T3dtSUVvUTFKWFFidG55ek94MEtweERBQWhvWWRDSkdpUmdKbkxZL2R6MzFnVWpsV2FHT2h4S3RNa0lXNzlybXlwWWQrclV5YnozM250K3Y5QldVTURjcHVxKzdRRVFIbmo0NFlkRm0yQ0ZWRmwxa2VEcG1DT1BQTkl2eTNhSDlxQnYzNzV5ZnVqUW9UNFJNSEJvQUZnZGxDM28zTGx6VmlvcTdzdGtXN0ZpaGQ4V3V1OGdZZWpBd2pLeGk2aEc0TVFUVHpSV01CUk5TaGpRL2pBcFlkdVlQRHd6QjRUcDZvN0RXRWFJMy9McVBuRXo0V0RsWUUxMEFTZ0tJRUw2a3VmS0ZHaG5RSmN1WFlTdDB2ZGl0M0IzajFKUDJMQWZxSTZzb0dVKytlU1RRdGRlZmZWVitXUVFkZVpqdG9mblJwVUhVY0hMS2hqd1NaTW1tWm8xYTVxWk0yY0szOW1uVDUrRW5VUzNXSGRMMXUvd3VqcTQ4SzYwTldQR0RHbTNYNzkrQ2FzbDZpekFpb3Q2anpvWXB1Q0Q0YzExWmRiMjlaUDIyWGxvSDdsaTJyUnB4Z3JjUXB5b0dLTXdmLzU4a1NuWWtlZ3YyRERlbGNrTjI2WXJkdkI5M0JWYmQ0Y296SjQ5V3o2blRwMXFSbzRjNlU5ZXJlZXlLR3JRMHZ2eC90U0JzSmxrcVBsb2p3bE9uMlFEUnI0THUxSW1sZEM5b3BOR0NGQytzS2lFaW9BQ0Q4aXFtd3JvbE5GNWp4Z3hJc0ZTYWFWL1laRVFHQkhJSUdvVmF1aGtMS1owdmd1VkV4Qm1xSWNBQ3QrS1FNVktyd05EZllRNlZsVWxBSWlOY3lwczBUYm5HelZxSkN4QXIxNjlwQXlEQkd1aWhNM0sxTE5uVHlFcWhFeDJGWVJYdG1JRjdiQnJRTUI2VDFnb2hEdmFSQjhONFhGUDJLMWtxellUalh2QXp5SWNVNTVKaEI3Zm5hanNMTHlQaml1TEE4OEw4V2xmUkJFMmRhdFdyU3JQU3ZzNnRyQWEvRmFmSUxWRU1pbC8rZVdYLyttY3AweVJTY2VraFNWRHZ3NHQwRzlaOE5uTGlxVHUyMXErR2FpVjhCdEJmMnBLcUU5RWZHeFh4OXpZYlRWR3FVUk0yREZpd280Um82U2dYR2w3b1pZdFc0cVZFWUVEeVJ6QjVkRkhIOTBtcnF6RkRWU0phSU1RTnRHN296RkFPTWI2aTNvUjRUUS9QMThFMHhpbFNIaTBrclpuSmVzRUg1UldyVnFWZUlHb1I0OGUzdEtsUzFQNjIxakNqNFhIMGlZOEVrWVY1cE1SWmZrcktlamR1N2U0NWFveFI5V1g2Sy9kc0RwVWxGRnVyMWdaMVc4bDVyRkxHREJTb0RjRkdEQlUvK2xhSVVzYVlEa3cweXZRWStNbmpmOEgxeUJXV0pOaHc0YUoxWFhKa2lXRjZxT1RSMytOWHdpMmdwZ1ZLWUdzQ0c2dkNuekc4VGRXSDJIY1Ewdml0b3BMcklJNFVWdzhNNm52c21ZUFB2aGd6SXFVTkxEVjRzb0pjSnpCaFZVdGZWZ05jYkFwaVRqMjJHUDk3MWhJMVhrclhiaVJPOW42WGNSYWtmOFF1SjZxN3dIYkxpWlpRcmp3VXdZNC9VU0I3WnlRSm9BWmZOQ2dRZklkdHdGQ3ZIQkJaWExndy9IUlJ4K0o0eFdtZXhlWWdZbUhSQk9EYXdDK0dlQ3NzODZTa0RPdWF4dTQyYUtwU1NlY3kvWGJ3TmNsSGVEamN2UE5ONHNMZ010WDQyUUZ5NktlZUlUdVlTb1BMaENFMDhIbWtEWkJKOGZQUC84czRWNWhEbHFISG5xbzZkNjl1M3pIUkkrckJYWHBEMElDNGYyNTdyNHZmZEcxYTFkWmpORDI4S3pjQjljRW5OcGduMkpXeEI2Mk0vMHRsekFqemxtaTlNOFJRVksvZnYzUXVuYkEvWExMbHkrWENKWXhZOFpFYWg2SU1OSG9EK09FaENuczVQQXNFWHFqUm8yS2JJTndxM1JTVGhENW95REtSS09Ga2gyRXRLVURTL3lGNnQxNDQ0M2VpaFVySXNzVDRmUEFBdy80WVY5NjJBWEFMek51M0RpdlRwMDYwa2NLd3RIY3FDSTdlVHk3K3lTOVQvRFpUSEdHaG0wdmhNMUFFbWNJaUFHazQ0d1RqNmRnNE1McUUvZW5JQzV2MnJScC9tL0NxU0JDY21PNHNDdVlWN2R1WGI4TnU4SjVkcXYzQ1p0Y0tXNGJESFN3allVTEYzb05HelpNK203RWFycmcvZUM3TmNRcjdLaFpzNllmRjZreGhrb3duTk9EMERZVGlBTlZVUC81NTUrWGcvQXhGNFRndWZkcjI3YXRmNDM0MXRHalJ5YzhzeEkyZmFZeGw0QXdQYnNEZWxaQWx2QXlGOGhKT3pSaDIrM2U3d3pMZm5oMm0vT3ZEUjgrM0w5R2NHMU9UazVDL1diTm1pV3NHZ3dzNzFtNWNtWFJqOXN0VmVMMlhJd2RPN2JRS3NRQXVyQXNpYXl3VEREdVN6emdoQWtUQ3BWaE1GTzkzMjIzM1pid2ZNUkdjcDVuRDViblh2UXB1OGI3NzcvdjF4azVjcVNjMDhOdS93bjlCeXdySU5lMVBZaHl5cFFwaGNvUStLdlhXN2R1WFdpM0l2YVJTVXova0V5b2I5KytFc3hNSE9URWlSUDlzcE1uVC9ZczIxVG8yZDBKWnRsSnIxcTFhanN1WWJNOUtwajU3aldDVUYydEFnR2xxVlpGVnQ0b284NnNXYlA4Y3F5R1RabzBrZk1FdjdxRXpjQ3lrcVhTM25DdnZMeThsTzk0eHgxM0pFd2NBQkU5OHNnamtWSHE3N3p6amw4MkxPQ1hTVHR2M2p5L2pPWC92ZHpjM0lSeVRBS0NpTjFkU012QlVybmczVHQzN3B6UWhqc0I1cytmTHhNK1dJWTIzZWRwMzc3OWpxa1ZJY2NHa1NBQUgyVU40bFVRektzQnJBaFZDSE5CQk1PWkNEZkRFVDhNbHAzeHpmTUlRSm9yQloyNUd5V0RvSVVmZFJnUUxGWEhqdE45T2dZazdvdWVuamhLTjFZU3YyWjh2aEZJWFEyS0lpek1LeWc0YTRnWUdESmtTR2lJR1pvbW9wUVVSTXJndmhBRy9Lanhldy9DTG9UK2Q0SXd3a3ovM0p2TVhnbzN0bk9ITXRBUXcwamdBY0E0d1FFQjZ3RUJhVlNOR2l5Q0F3eEJ1a1FKOFVRQmFaMEVpd3BpSzhQZ092QUhRUUNFQmlZQVlqVFRBWTc0YUZqUUFLSGRjQU1Mc0xveWtkQlFaQUw4YWpTNkJhSkNveFFGRmduWDU0WUk4akJFQlhnVC9xWkEwMFJVUFJGRzdzRTVJbjNjaWJkRHF2dmNWWXJCSmVvbENMVkdxbHFReUJQaUI5UFIvWWF0S0c1NmdhalFKWTNjQ1FQRVFlU0lEcHFHaXFVTGRObkViMW9XVElKNk5VYVR5S0ViYnJnaEk1MDlrVDZ1bVQ0WXllNkNSWU5vZU0zWUZaVk9UcU5pQ2hHYW5UenVJbkR1dWVmS2tRcVo5azJwSUd4MHZCb3NDOUJqYTZSM0ZOaTZTWjZZakxDVDVUZGhaVThuVkNsVmhQdlc4RFpFdDR3dW1IZldtRWQyTUg0cis1VUtiaXdqTEZsVXBMcytzOHUyUmZWVFdLUTZMSmNiTHdvYndyM0MydERka3o1MGQ4Y2RockJKQktPckhwMUpEanRXVzdlejZDUTZpS2gyWFdrZ2hyRGtMNHBraE12RWNGZHBrdTFrQXpjWlR6cUdtaWhnVFJ3OGVMRFBQdkZzeERTbVM5aHVmbTRDampHc0JQMU5GRnh6alVRRVU2YzdxWGxPbDZlKzlkWmJoUmRQbFlVMTI1emFSU0xzYkhNK2hEMThOaGxGZFFzR09EMFJISnVNSU5tK2xhOGtkMGpZbGdtd2hFV0JhKzcxS0NJZ3FEVUtFQjZXUFlXbWFzZ1d3YVR6N3NSMGlTeXNqOVh0UUlWcmduMmozb25kMFYzaGs4a1JZYXM5TEpTK043c0svd2E5WFpyVUVWU1NFYmZtZCthbG1MRlJ4RXVIVWpZVDRxWThMSVVpS2hlSGdpaHRKV3hZR0FTVUtNSW1laHV6YnBodkJSNXlTclFRRU5IVllVRFRnYmRkMk5iT0JOUlZuNzRoKzFSUjRFNXcrSDgzVDRoN2Y5TEFCVUZVUEVLb3Bwb2daMG1VOElmZ3JjRDFJR2lPVHdVME42cVZnbVVpdVZHeWYzUW9LclpaVWtvc1hXUWREVnF1dGtaU1NpczAraGsrUVljT0hkSzJUb0x4NDhmNzF6Qyt1RzJCVzI2NUpjR1lnOTZlaktnS3UvMzcxK3hLNTJjblZXQU9SMC9zdGtFZ0FKbE1GWGpmdVZsSGc0Y2xOUGxYQUN5YkpMeDByNUZNVWhOSktuQUZjTXVRN2RhMXFqWm8wQ0RoSGhoa1hJU1o3WEZUY0lHMVVLOEY5ZGlNVGRpN1lNUnkzeDBkZTVTYkEyWjdOME90MlY2eXJXSU00UVUxR3lkRXNEVUplOFNJRVlWTTA1cDlOTm1CdVZlQlFVaE40bUdFRGZCbklHMXduejU5L0F5aGJuM1g2aGRHMkNBL1AxL2FJRXZycEVtVEN0MEhId3F5ckVZOUwzMDNjK1pNMzVEejdiZmZpZ1VRaXg1dFlSMTFnYVV1bUoyMFc3ZHVDV1o4VE43MEJjOXN0cGpnM2NVSG54UW1DQk81WGJ0MmhheUZhc1J4TFlMcEVqWUhtV09EZElKL0NYOUhBbDNSMXhpY3NDQVBHVEtrZUFrN25mellFSjViaDd6UHFZQ1BSanIzWnlYbHhSVVFYVHIxK0I4VUY2VHBEUkkyZzRwREZaOVJ3QUpJdm1tM2JaZXdhUXRUdWV1bkVkYUdtMW80N0xDOGVJSi9TUlNzc0NpT1dHRTdWVUZCUVdnZE56ZDIwNlpORXlaS0dNaGZqWk9UZXcrc3RDNWF0R2lSOUwyWTZPbUFQTnRoTGhEYnpQS1lqaVlBaTJDbStzaDBlV3cwSVVqd211T05qRUxwQUNHTkxFVmFqNXg5WWFvK2VHTU1JV0U1N2NpNlJOWi9OMXRybUZhQWxGMjR2THFHR0gxSERDbFk3VnhMWGhqUU9oQzhpeFV2NmwvSjdDb3V1bXRraHJELzcwRkFhOU9tVFlJYktMeTlLMWdpZlBOZUdIN0MrRjc2clgvLy9pSkFCbVVUK0hqdFU0NWtLa053enozM2lQMkJQZ3o3cHdSNGZveFlaUFBOSnVPdGpNR1dGYnRkSnBYUUNqRG9ycTl3bUhxSEhIaVlweUZFWXZiSXNad01tSTNWanptVjdoWGhTeWNDblpOdUdpeis2OFpOVlV0ZGZJWWhDamRaSkFUTTVFRkFaWkl5V0VTRHUxb0VGMmdUaURkVXJRSHB5a2dueklRbU5BMDFHU3BKOHVpRkdaRlNnWGhIK2hFaEQ1MHcvUXZSa25Zc21USElGYmF4Y0pKQ2pQTG9oL0ZYRDlNNUkyVFNKenc3ZlVSY0plOGRsVUtOdHQyRkM1VnJWTmJWTUZyQ3BJOUF6bVNqTHYyY3JmNTZDNzdLaWhVeFc2S213L2pTSU9CRjB3SHNSSmhUVEhFY1FSNGJQKzVNMndqeTJQQzJKbzRXLzg5Q3c3Slc5N0hWWXZraUNYbFVmbXRXUUZZWFptS1VwVTBUTnBJNVA5VVdGaU5Hc2VpeFNjZnJwdVNORVdON1FaemlMTVJDbDYzQTRwcnlzMjBqUmt6WVd4WDZkeGRCRjlaTUFGdWxiUlQzSDNiR1NHUkZkdmlsQlpVYzdxd2F2WjNOWDFjZ3hhTjEwUC9DaVRMWHh5aW1EZGdPeEt0MmRUa3Q3b3NZcFlpdC9DQ25VcVZLVStPdWlGR3EySkJ5NWI3SmFkcTA2ZGp5NWN2UGo3c2pSaW5CUDNsNWVmZmsxS3BWYTNYdDJyV3ZzU2RXeFgwU282U2pldlhxZDg2Wk0yZGVPU1Q1eXBVcnYxU3hZc1Z6MTYxYlJ3S0xobkgzeENpQldGYWhRb1g3Q2dvS0h1UEgvd2t3QUMrZlFuem56ZTRaQUFBQUFFbEZUa1N1UW1DQykgbm8tcmVwZWF0O2JhY2tncm91bmQtc2l6ZTpjb250YWluO21hcmdpbjphdXRvO3otaW5kZXg6Mn0uYXBwTmF0aXZlUGxheUJ0bntwb3NpdGlvbjphYnNvbHV0ZTtsZWZ0OjI1JTtib3R0b206OHB4O2Rpc3BsYXk6YmxvY2s7d2lkdGg6NTAlO2hlaWdodDozMHB4O2JhY2tncm91bmQ6dXJsKGRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBUUlBQUFCTUNBWUFBQUNHYXJuNEFBQUFHWFJGV0hSVGIyWjBkMkZ5WlFCQlpHOWlaU0JKYldGblpWSmxZV1I1Y2NsbFBBQUFBMlpwVkZoMFdFMU1PbU52YlM1aFpHOWlaUzU0YlhBQUFBQUFBRHcvZUhCaFkydGxkQ0JpWldkcGJqMGk3N3UvSWlCcFpEMGlWelZOTUUxd1EyVm9hVWg2Y21WVGVrNVVZM3ByWXpsa0lqOCtJRHg0T25odGNHMWxkR0VnZUcxc2JuTTZlRDBpWVdSdlltVTZibk02YldWMFlTOGlJSGc2ZUcxd2RHczlJa0ZrYjJKbElGaE5VQ0JEYjNKbElEVXVNQzFqTURZd0lEWXhMakV6TkRjM055d2dNakF4TUM4d01pOHhNaTB4Tnpvek1qb3dNQ0FnSUNBZ0lDQWdJajRnUEhKa1pqcFNSRVlnZUcxc2JuTTZjbVJtUFNKb2RIUndPaTh2ZDNkM0xuY3pMbTl5Wnk4eE9UazVMekF5THpJeUxYSmtaaTF6ZVc1MFlYZ3Ribk1qSWo0Z1BISmtaanBFWlhOamNtbHdkR2x2YmlCeVpHWTZZV0p2ZFhROUlpSWdlRzFzYm5NNmVHMXdUVTA5SW1oMGRIQTZMeTl1Y3k1aFpHOWlaUzVqYjIwdmVHRndMekV1TUM5dGJTOGlJSGh0Ykc1ek9uTjBVbVZtUFNKb2RIUndPaTh2Ym5NdVlXUnZZbVV1WTI5dEwzaGhjQzh4TGpBdmMxUjVjR1V2VW1WemIzVnlZMlZTWldZaklpQjRiV3h1Y3pwNGJYQTlJbWgwZEhBNkx5OXVjeTVoWkc5aVpTNWpiMjB2ZUdGd0x6RXVNQzhpSUhodGNFMU5Pazl5YVdkcGJtRnNSRzlqZFcxbGJuUkpSRDBpZUcxd0xtUnBaRG93TVRnd01URTNOREEzTWpBMk9ERXhPVEV3T1VVME9FWkVOa1V4TmpBMk1DSWdlRzF3VFUwNlJHOWpkVzFsYm5SSlJEMGllRzF3TG1ScFpEcERRMFJETlVZMk9UaEdRa014TVVVeE9UY3hSa1pHT0VOQ00wSXlSa0pETnlJZ2VHMXdUVTA2U1c1emRHRnVZMlZKUkQwaWVHMXdMbWxwWkRwRFEwUkROVVkyT0RoR1FrTXhNVVV4T1RjeFJrWkdPRU5DTTBJeVJrSkROeUlnZUcxd09rTnlaV0YwYjNKVWIyOXNQU0pCWkc5aVpTQlFhRzkwYjNOb2IzQWdRMU0xSUUxaFkybHVkRzl6YUNJK0lEeDRiWEJOVFRwRVpYSnBkbVZrUm5KdmJTQnpkRkpsWmpwcGJuTjBZVzVqWlVsRVBTSjRiWEF1YVdsa09qQXhPREF4TVRjME1EY3lNRFk0TVRFNU1UQTVSVFE0UmtRMlJURTJNRFl3SWlCemRGSmxaanBrYjJOMWJXVnVkRWxFUFNKNGJYQXVaR2xrT2pBeE9EQXhNVGMwTURjeU1EWTRNVEU1TVRBNVJUUTRSa1EyUlRFMk1EWXdJaTgrSUR3dmNtUm1Pa1JsYzJOeWFYQjBhVzl1UGlBOEwzSmtaanBTUkVZK0lEd3ZlRHA0YlhCdFpYUmhQaUE4UDNod1lXTnJaWFFnWlc1a1BTSnlJajgrcm14KzZBQUFDSUpKUkVGVWVOcnNuVjFNVy9jWnhsOS9nRC9CMk1aODJDU2gxRjZKUW1rYVJab0NGUldKb09rdTFxaERXUnBwYkZkanFpcTEwUzUyazRod3Vhb01hVldtNVc0WGEzb1RUZEV1cGtySk5LMFhrU0pGVlNMbEN3RlJ2aGdMQnZObEtBa0UrajVuSWR0UzIzRjhUR3pJODVQK2duQ083Uk1kUGMvL2VkLy84VG1XbzBlUGlsbnNkcnNjUDM0OHFyKzI2L2loRG9lTzEzUlloUkNTVDFaMERPcDRvT09Dam4rc3JxNE9tOWF3bVJjN0hBNDVkdXpZQi9wclZ6UWFiV3hwYWFsb2Ftb3FMeWtwc2RiVjFia3NDczhiSWZsRFJiOTY3OTY5SFV0TFN5dFhybHg1OS96NTg1K296RzdvcHRPNjZjc1hhZ1EybTAzNit2cCtCQU5vVXc0ZVBCaXBxS2h3enMvUEM4YkN3b0pjdlhwVkhqMTZoQVBuMlNNa0QyQmVWZTFaZEtKMXUxd3VhVzF0OVhaMmRvYW5wNmNiVHA4K3ZWTzNkencyaEw4OTkzcy9iMm1nQnlHOXZiMGZWbFZWL2VySWtTTU5vVkRJb3djaWMzTnpodkFKSVM4T1RNcGxaV1dpRTdIRTQvSDVnWUdCbStQajQzOVVNL2pEdWlXQ3h5Ync2K2JtNWwvMjlQUTBMQzh2MjBkSFIwVmpDczhJSVFVQWt5OG1ZaVJ4TlFPUDZuUDd5Wk1uUDlaMDRGSXo2TS8yZmJKdTVzRjU5RU42bXBxYVlBSXhqZi8yeWNsSm1nQWhSUUIwQ0QxQ2w5QW5kS3BtMEpOM0kranI2OXRmWFYzOVVYZDNkNE4rbUdWMmRsWldWbFo0QmdncEVxQkg2Qkw2aEU2aFZ6V0QvWGtyRGJBNm9IUWRQbnk0WHBPQmZXWm1KbU1UVUdzVUdSc2JlOUk0WkdvZ3hCd295OTF1dDVTWGw0c0tYQ29yS3lYVm9oeDBpWDZkeitlelE2OERBd05kK3VldjhtSUVXQ0xjdlh0M2UxMWRuVGVaVEtaTkFoTVRFM0w5K25XQlVUenVjSXJWYWpYK0U0UVFjN005ZERVMU5TVzNidDJDMEtXeHNWRkNvVkRLZmFGVDZCVzZWUzErOEt5bFJYczJUb1EwME43ZUhsNWVYazQ3dTkrOGVWT3VYYnRtWEZ3VURBYkY2L1dLMCtrMFhnOUQ0Q1VGaE9RR1puazBCUjgrZkNpTGk0dUd5RkVDWExod3dUQ0RhRFNhc21jQXZVSzNGeTllUkNvd1p3Uzl2YjI3WXJGWWt6cVFFekUvRlNNakkzTGp4ZzNEcGFxcXFvejRnbklDcG9CRWdFRUlNWmNJTUNCdW1BSGlmendlbDhIQlFjTW9WS1BmZXczMEN0MUN2em9SNzlMOXZqRlRHclRvRzVYamwxVFhDYUFjd01HZ1pxbXBxVEhXTkdFQWF3bGd6YzBJSWVhQXBwQ3dvUytrN2JYRVBUUTBaRnhIOEhTWkFOMWhPL1NyKzdUb24wd1pRYk1LM0pPcU9ZaS80U0FnL3RyYVd2RjRQTWJzejlVRVF0WVg2QXpsTjNTSGtnRmxlVnRiMi9kS2NHZ1Urb1dPVFpVR3lpdUJRTUNWU3R4SUE0Z29EUTBOZ2tzZTA2VUdRc2o2QU4yRncyR2pQTWRxSFZZVW5pNHBvRi9vMkt3UmVFdExTMjJwQkk0cm11QktPQmlXQUlRVXpnelFsOE1GUlU4YkFUUUovVUxIWm8yZ1JHT0lKVlZwZ0E5R1dZQTRRaE1ncEhDOUErZ3drVWlrTE4raFgrallyQkU4ZWNPblFWZFNZd2ROZ0pBQ2cxVzZWS3Q2Mlg3NzEyNzJBSmdHQ0NtT1ZHQkdoNmFOWUcxdGt4QlNPTXplOThPMEVjQUVlUE1SUWpZMk5BSkNpSGtqNE8zSUNLRVJHSW1BM3lVZ2hFWkFJeUNFUmtBaklJUTlBdllJQ0tFUndBajRiVU5DV0JydzdrT0UwQWhvQklRVUEyWjZkWGtwRFdnRWhMemtSc0QrQUNIRmdabTdoWFBWZ0JCQ0l5Q0U1S2swb0JFUXN0R05JQnNSWjlpSGlZQ1FJaUpITFRJUkVFTE1HOEg5Ky9kNXF6SkNpZ0E4WmF4Z1JvQUxpbWdFaEd4cytMVkJRZ2lOZ0JCQ0l5Q0UwQWdJSWNDZXpjSWZGd2NKMlJqa3FsVW1Ba0tJK1NzTENTSEZGQWx5MHlvVEFTR0VSa0FJb1JFUVFvU3JCb1JzS25MVktwdUZoR3dxSjJDemtCQ1NJelFDUWdoN0JJUnNxc29nVnlOZ2o0Q1F6ZVFFN0JFUVFuTEVsQkhZckZZKzVZaVFZaEN5YXRGdXovMkdZL1pzYmp5YWJoKzN4Mk04WFFXM0t5T0VGQTdvME92MTVud2pZVk9KSUJBSWlNdmw0bGtncE1CNGRGS3VycTdPUFZIQVB6SU55YkJ0NjlhdDR2ZjdlUllJS1RBK24wL0M0WEJHSFdkT0JJZ1NtY1ovYW9PVW82eXNURjZwcnpkK0VrSUtBL1JYcnpvTVlGTE9wT1AxS2cyU2MzT3laODhlQ1lWQ2JCb1NVaUNndjliV1ZwbWRuVFZSR3FoYnBCdHJwTnVPcHh5aFI3QnYzejZwcTZ1akdSRHlndG15Wll1MHQ3ZUx4KzErOHRTeFRGcE9SOGIxaHQ5KytxbmI0WEJrVEEzVDA5UFN0R09IOFdIbnpwMlRlRHd1OC9QelBFT0VyQ05vRGlJSndBU2FYMzlkUmtkSE0rN3ZkRHB0T2xGN1ZhZkpsRWJ3RExjSStjckxTOWRTUVRwd0VEaVkycG9hK2VmWFg4dnQyN2NOZzRBaGNHbVJrUHlBNndSZ0FCVVZGYkp0MnpaNXU2M05lTXpaM2J0M00rb1RTYjI4ckt4a2NYRXhpSXIrdVJPQnNqMGNpYmhMUzB2bHdZTUhhWGZDUWVCZ0FzR2cvTHk3VzRhSGgyVjRaRVQrUFRZbUM5OSt5ek5JU0I1d2F4bGVVMXNyMFZkZmxXZzBLdU9hdnUvY3VmUE0xMEcvMExIdXYxMy9lZnU1RW9ITlpzT1B0MzRRaS9uZ1JPb216L3pBeVlrSm1Vb2tqT3NMOXU3ZGE5UXQ5cElTbmtGQzhzRHkwcExNTHl6SWpLYnR3Y0ZCb3llUWJaS0FqaTlkdXZTVy92T3JsUHVrZTREcFovMzl1eW9ySzk5cmJHejBJdzFrKzZCVDdJY25KR01RUWdvUDlBc2RheG54bnBZSmY5SEovNXVzak9EM24zL3UwQjlkKzk5NUoySzFXaTBMNmtLci9BWWlJUnNTNk5mdjkxczZPem9pZi83aWl5NDFnNnVxNS8rcjllM0wvMk1FYUNxY09IRUNEMW4vUlVkSHg4OWVVeGVabXBxU0pUYjhDTm5Rek03TkNmUU1YWjg5ZTNaYXRmNG5OWVB4L3hxQjFoMEFYMXBRRXppbzljUnZEaHc0VUx2empUZHFZQUs0YUlnUXNyRkpxczV4bGMvYmJXMFJuOC8zeVprelozNnFadkNabXNHWFJnalFnVTVpV0VkbkxCYjc4YUZEaCtyVkRKeG8vR0g1anlVQklac0RKSDRzUHdZcks5Rm9YRHgxNnRTdG9hR2h2K3FtdjF0aTBlaTFVQ2prMlBubW0vNUlKRktSbUp5MEpCSUpydjhUc2tuQktnSlc5Z0xCNE9xL1JrZW5MMSsrUEdYNVhYLy9haktaRkloL1ptYkdXQ1prQ2lCazg2Y0RwOU5wZkd2UnI2WmcrY243NzFQMWhMenNLV0hwY2JPUUVQSXlHd0Y3QVlTODlId253QUJudFFsc05qSzJUZ0FBQUFCSlJVNUVya0pnZ2c9PSkgY2VudGVyIG5vLXJlcGVhdDtiYWNrZ3JvdW5kLXNpemU6MTI5cHggMzhweDtjb2xvcjojZmZmO2N1cnNvcjpwb2ludGVyO3RleHQtc2hhZG93OjAgLTFweCAwICMwMDA7ZmlsdGVyOmRyb3BzaGFkb3coY29sb3I9IzAwMDAwMCxvZmZ4PTAsb2ZmeT0tMSk7Zm9udC1zaXplOi44ZW07Zm9udC13ZWlnaHQ6Ym9sZDt0ZXh0LWFsaWduOmNlbnRlcjttYXJnaW46MCBhdXRvO3BhZGRpbmctdG9wOjhweDt6LWluZGV4OjR9LmFwcE5hdGl2ZVBsYXlCdG5UZXh0e2ZvbnQtc2l6ZTouOWVtO2ZvbnQtd2VpZ2h0OmJvbGQ7dGV4dC1hbGlnbjpjZW50ZXI7cGFkZGluZy10b3A6MnB4fS50b3BCcmRyLC5idG1CcmRye2hlaWdodDo4cHg7d2lkdGg6MTAwJX0udG9wQnJkcntib3JkZXItcmFkaXVzOjVweCA1cHggMCAwO2JvcmRlci10b3A6MXB4IHNvbGlkICNjY2N9LmJ0bUJyZHJ7cG9zaXRpb246YWJzb2x1dGU7Ym90dG9tOjA7bGVmdDowO3otaW5kZXg6Mztib3JkZXItcmFkaXVzOjAgMCA1cHggNXB4O2JvcmRlci10b3A6MXB4IHNvbGlkICM4ODg7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgIzAwMH0udG9wQnJkcklubmVyLC5idG1CcmRySW5uZXJ7d2lkdGg6MTAwJTtoZWlnaHQ6N3B4fS50b3BCcmRySW5uZXJ7cGFkZGluZy1ib3R0b206MXB4O2JvcmRlci1yYWRpdXM6NHB4IDRweCAwIDA7YmFja2dyb3VuZDotd2Via2l0LWxpbmVhci1ncmFkaWVudCh0b3AscmdiYSgxMTYsMTE1LDExNSwxKSAwLHJnYmEoNTQsNTQsNTQsMSkgMTAwJSk7YmFja2dyb3VuZDpsaW5lYXItZ3JhZGllbnQodG9wLHJnYmEoMTE2LDExNSwxMTUsMSkgMCxyZ2JhKDU0LDU0LDU0LDEpIDEwMCUpfS5idG1CcmRySW5uZXJ7cG9zaXRpb246YWJzb2x1dGU7Ym90dG9tOjA7bGVmdDowO3otaW5kZXg6MztwYWRkaW5nLXRvcDoxcHg7Ym9yZGVyLXJhZGl1czowIDAgNHB4IDRweDtiYWNrZ3JvdW5kOi13ZWJraXQtbGluZWFyLWdyYWRpZW50KHRvcCwjNDc0NzQ3IDAsIzMzMyAxMDAlKTtiYWNrZ3JvdW5kOmxpbmVhci1ncmFkaWVudCh0b3AsIzQ3NDc0NyAwLCMzMzMgMTAwJSl9LnNwcml0ZXNoZWV0e2Rpc3BsYXk6aW5saW5lLWJsb2NrO292ZXJmbG93OmhpZGRlbjtiYWNrZ3JvdW5kLXJlcGVhdDpuby1yZXBlYXQ7YmFja2dyb3VuZC1pbWFnZTp1cmwoc3ByaXRlc2hlZXQucG5nKX0uc3ByaXRlX3JlcGVhdHtiYWNrZ3JvdW5kLXJlcGVhdDpyZXBlYXQteCFpbXBvcnRhbnR9LnJld2luZF9idXR0b25fbm9ybWFse3dpZHRoOjQzcHg7aGVpZ2h0OjQzcHg7YmFja2dyb3VuZC1wb3NpdGlvbjotMTkycHggLTIyNnB4fS5yZXdpbmRfYnV0dG9uX292ZXJ7d2lkdGg6NDNweDtoZWlnaHQ6NDNweDtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0yNDBweCAtMjI2cHh9LnJld2luZF9idXR0b25fZG93bnt3aWR0aDo0M3B4O2hlaWdodDo0M3B4O2JhY2tncm91bmQtcG9zaXRpb246LTE0NHB4IC0yODhweH0ucmV3aW5kX2J1dHRvbl9kaXNhYmxlZHt3aWR0aDo0M3B4O2hlaWdodDo0M3B4O2JhY2tncm91bmQtcG9zaXRpb246LTE5MnB4IC0yMjZweH0ucGxheV9idXR0b25fbm9ybWFse3dpZHRoOjQzcHg7aGVpZ2h0OjQzcHg7YmFja2dyb3VuZC1wb3NpdGlvbjotMTQ0cHggLTBweH0ucGxheV9idXR0b25fb3Zlcnt3aWR0aDo0M3B4O2hlaWdodDo0M3B4O2JhY2tncm91bmQtcG9zaXRpb246LTE0NHB4IC00OHB4fS5wbGF5X2J1dHRvbl9kb3due3dpZHRoOjQzcHg7aGVpZ2h0OjQzcHg7YmFja2dyb3VuZC1wb3NpdGlvbjotOTZweCAtMjg4cHh9LnBsYXlfYnV0dG9uX2Rpc2FibGVke3dpZHRoOjQzcHg7aGVpZ2h0OjQzcHg7YmFja2dyb3VuZC1wb3NpdGlvbjotMTQ0cHggLTBweH0ucGF1c2VfYnV0dG9uX25vcm1hbHt3aWR0aDo0M3B4O2hlaWdodDo0M3B4O2JhY2tncm91bmQtcG9zaXRpb246LTk2cHggLTE5MnB4fS5wYXVzZV9idXR0b25fb3Zlcnt3aWR0aDo0M3B4O2hlaWdodDo0M3B4O2JhY2tncm91bmQtcG9zaXRpb246LTk2cHggLTI0MHB4fS5wYXVzZV9idXR0b25fZG93bnt3aWR0aDo0M3B4O2hlaWdodDo0M3B4O2JhY2tncm91bmQtcG9zaXRpb246LTk2cHggLTE0NHB4fS5wYXVzZV9idXR0b25fZGlzYWJsZWR7d2lkdGg6NDNweDtoZWlnaHQ6NDNweDtiYWNrZ3JvdW5kLXBvc2l0aW9uOi05NnB4IC0xOTJweH0ucHJldmlvdXNfYnV0dG9uX25vcm1hbHt3aWR0aDo0M3B4O2hlaWdodDo0M3B4O2JhY2tncm91bmQtcG9zaXRpb246LTE0NHB4IC0xOTJweH0ucHJldmlvdXNfYnV0dG9uX292ZXJ7d2lkdGg6NDNweDtoZWlnaHQ6NDNweDtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xNDRweCAtMjQwcHh9LnByZXZpb3VzX2J1dHRvbl9kb3due3dpZHRoOjQzcHg7aGVpZ2h0OjQzcHg7YmFja2dyb3VuZC1wb3NpdGlvbjotMTQ0cHggLTE0NHB4fS5wcmV2aW91c19idXR0b25fZGlzYWJsZWR7d2lkdGg6NDNweDtoZWlnaHQ6NDNweDtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xNDRweCAtOTZweH0ubmV4dF9idXR0b25fbm9ybWFse3dpZHRoOjQzcHg7aGVpZ2h0OjQzcHg7YmFja2dyb3VuZC1wb3NpdGlvbjotOTZweCAtNDhweH0ubmV4dF9idXR0b25fb3Zlcnt3aWR0aDo0M3B4O2hlaWdodDo0M3B4O2JhY2tncm91bmQtcG9zaXRpb246LTk2cHggLTk2cHh9Lm5leHRfYnV0dG9uX2Rvd257d2lkdGg6NDNweDtoZWlnaHQ6NDNweDtiYWNrZ3JvdW5kLXBvc2l0aW9uOi05NnB4IC0wcHh9Lm5leHRfYnV0dG9uX2Rpc2FibGVke3dpZHRoOjQzcHg7aGVpZ2h0OjQzcHg7YmFja2dyb3VuZC1wb3NpdGlvbjotNDhweCAtMjg4cHh9LmNsb3NlZF9jYXB0aW9uX2J1dHRvbl9ub3JtYWx7d2lkdGg6NDNweDtoZWlnaHQ6NDNweDtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0wcHggLTQ4cHh9LmNsb3NlZF9jYXB0aW9uX2J1dHRvbl9vdmVye3dpZHRoOjQzcHg7aGVpZ2h0OjQzcHg7YmFja2dyb3VuZC1wb3NpdGlvbjotMHB4IC05NnB4fS5jbG9zZWRfY2FwdGlvbl9idXR0b25fZG93bnt3aWR0aDo0M3B4O2hlaWdodDo0M3B4O2JhY2tncm91bmQtcG9zaXRpb246LTBweCAtMHB4fS5jbG9zZWRfY2FwdGlvbl9idXR0b25fZGlzYWJsZWR7d2lkdGg6NDNweDtoZWlnaHQ6NDNweDtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0wcHggLTQ4cHh9LmNsb3NlZF9jYXB0aW9uX29mZl9idXR0b25fbm9ybWFse3dpZHRoOjQzcHg7aGVpZ2h0OjQzcHg7YmFja2dyb3VuZC1wb3NpdGlvbjotMHB4IC0xNDRweH0uY2xvc2VkX2NhcHRpb25fb2ZmX2J1dHRvbl9vdmVye3dpZHRoOjQzcHg7aGVpZ2h0OjQzcHg7YmFja2dyb3VuZC1wb3NpdGlvbjotMHB4IC0xNDRweH0uY2xvc2VkX2NhcHRpb25fb2ZmX2J1dHRvbl9kb3due3dpZHRoOjQzcHg7aGVpZ2h0OjQzcHg7YmFja2dyb3VuZC1wb3NpdGlvbjotMHB4IC0xNDRweH0uY2xvc2VkX2NhcHRpb25fb2ZmX2J1dHRvbl9kaXNhYmxlZHt3aWR0aDo0M3B4O2hlaWdodDo0M3B4O2JhY2tncm91bmQtcG9zaXRpb246LTBweCAtMTQ0cHh9LnRvY19idXR0b25fbm9ybWFse3dpZHRoOjQzcHg7aGVpZ2h0OjQzcHg7YmFja2dyb3VuZC1wb3NpdGlvbjotMzUzcHggLTBweH0udG9jX2J1dHRvbl9vdmVye3dpZHRoOjQzcHg7aGVpZ2h0OjQzcHg7YmFja2dyb3VuZC1wb3NpdGlvbjotNDAxcHggLTBweH0udG9jX2J1dHRvbl9kb3due3dpZHRoOjQzcHg7aGVpZ2h0OjQzcHg7YmFja2dyb3VuZC1wb3NpdGlvbjotMzA1cHggLTBweH0udG9jX2J1dHRvbl9kaXNhYmxlZHt3aWR0aDo0M3B4O2hlaWdodDo0M3B4O2JhY2tncm91bmQtcG9zaXRpb246LTM1M3B4IC0wcHh9LnRvY19vZmZfYnV0dG9uX25vcm1hbHt3aWR0aDo0M3B4O2hlaWdodDo0M3B4O2JhY2tncm91bmQtcG9zaXRpb246LTQ0OXB4IC0wcHh9LnRvY19vZmZfYnV0dG9uX292ZXJ7d2lkdGg6NDNweDtoZWlnaHQ6NDNweDtiYWNrZ3JvdW5kLXBvc2l0aW9uOi00NDlweCAtMHB4fS50b2Nfb2ZmX2J1dHRvbl9kb3due3dpZHRoOjQzcHg7aGVpZ2h0OjQzcHg7YmFja2dyb3VuZC1wb3NpdGlvbjotNDQ5cHggLTBweH0udG9jX29mZl9idXR0b25fZGlzYWJsZWR7d2lkdGg6NDNweDtoZWlnaHQ6NDNweDtiYWNrZ3JvdW5kLXBvc2l0aW9uOi00NDlweCAtMHB4fS5mdWxsc2NyZWVuX2VudGVyX2J1dHRvbl9ub3JtYWx7d2lkdGg6NDNweDtoZWlnaHQ6NDNweDtiYWNrZ3JvdW5kLXBvc2l0aW9uOi00OHB4IC00OHB4fS5mdWxsc2NyZWVuX2VudGVyX2J1dHRvbl9vdmVye3dpZHRoOjQzcHg7aGVpZ2h0OjQzcHg7YmFja2dyb3VuZC1wb3NpdGlvbjotNDhweCAtOTZweH0uZnVsbHNjcmVlbl9lbnRlcl9idXR0b25fZG93bnt3aWR0aDo0M3B4O2hlaWdodDo0M3B4O2JhY2tncm91bmQtcG9zaXRpb246LTQ4cHggLTBweH0uZnVsbHNjcmVlbl9lbnRlcl9idXR0b25fZGlzYWJsZWR7d2lkdGg6NDNweDtoZWlnaHQ6NDNweDtiYWNrZ3JvdW5kLXBvc2l0aW9uOi00OHB4IC00OHB4fS5mdWxsc2NyZWVuX2xlYXZlX2J1dHRvbl9ub3JtYWx7d2lkdGg6NDNweDtoZWlnaHQ6NDNweDtiYWNrZ3JvdW5kLXBvc2l0aW9uOi00OHB4IC0xOTJweH0uZnVsbHNjcmVlbl9sZWF2ZV9idXR0b25fb3Zlcnt3aWR0aDo0M3B4O2hlaWdodDo0M3B4O2JhY2tncm91bmQtcG9zaXRpb246LTQ4cHggLTI0MHB4fS5mdWxsc2NyZWVuX2xlYXZlX2J1dHRvbl9kb3due3dpZHRoOjQzcHg7aGVpZ2h0OjQzcHg7YmFja2dyb3VuZC1wb3NpdGlvbjotNDhweCAtMTQ0cHh9LmZ1bGxzY3JlZW5fbGVhdmVfYnV0dG9uX2Rpc2FibGVke3dpZHRoOjQzcHg7aGVpZ2h0OjQzcHg7YmFja2dyb3VuZC1wb3NpdGlvbjotNDhweCAtMTkycHh9LmZ1bGxmcmFtZV9lbnRlcl9idXR0b25fbm9ybWFse3dpZHRoOjQzcHg7aGVpZ2h0OjQzcHg7YmFja2dyb3VuZC1wb3NpdGlvbjotMHB4IC0yNDBweH0uZnVsbGZyYW1lX2VudGVyX2J1dHRvbl9vdmVye3dpZHRoOjQzcHg7aGVpZ2h0OjQzcHg7YmFja2dyb3VuZC1wb3NpdGlvbjotMHB4IC0yNDBweH0uZnVsbGZyYW1lX2VudGVyX2J1dHRvbl9kb3due3dpZHRoOjQzcHg7aGVpZ2h0OjQzcHg7YmFja2dyb3VuZC1wb3NpdGlvbjotMHB4IC0yNDBweH0uZnVsbGZyYW1lX2VudGVyX2J1dHRvbl9kaXNhYmxlZHt3aWR0aDo0M3B4O2hlaWdodDo0M3B4O2JhY2tncm91bmQtcG9zaXRpb246LTBweCAtMjQwcHh9LmZ1bGxmcmFtZV9sZWF2ZV9idXR0b25fbm9ybWFse3dpZHRoOjQzcHg7aGVpZ2h0OjQzcHg7YmFja2dyb3VuZC1wb3NpdGlvbjotMHB4IC0yODhweH0uZnVsbGZyYW1lX2xlYXZlX2J1dHRvbl9vdmVye3dpZHRoOjQzcHg7aGVpZ2h0OjQzcHg7YmFja2dyb3VuZC1wb3NpdGlvbjotMHB4IC0yODhweH0uZnVsbGZyYW1lX2xlYXZlX2J1dHRvbl9kb3due3dpZHRoOjQzcHg7aGVpZ2h0OjQzcHg7YmFja2dyb3VuZC1wb3NpdGlvbjotMHB4IC0yODhweH0uZnVsbGZyYW1lX2xlYXZlX2J1dHRvbl9kaXNhYmxlZHt3aWR0aDo0M3B4O2hlaWdodDo0M3B4O2JhY2tncm91bmQtcG9zaXRpb246LTBweCAtMjg4cHh9LnBsYXlfYnV0dG9uX292ZXJsYXlfbm9ybWFse3dpZHRoOjEwOHB4O2hlaWdodDoxMDhweDtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xOTJweCAtMHB4fS5wbGF5X2J1dHRvbl9vdmVybGF5X292ZXJ7d2lkdGg6MTA4cHg7aGVpZ2h0OjEwOHB4O2JhY2tncm91bmQtcG9zaXRpb246LTE5MnB4IC0wcHh9LnBsYXlfYnV0dG9uX292ZXJsYXlfZG93bnt3aWR0aDoxMDhweDtoZWlnaHQ6MTA4cHg7YmFja2dyb3VuZC1wb3NpdGlvbjotMTkycHggLTBweH0ucGxheV9idXR0b25fb3ZlcmxheV9kaXNhYmxlZHt3aWR0aDoxMDhweDtoZWlnaHQ6MTA4cHg7YmFja2dyb3VuZC1wb3NpdGlvbjotMTkycHggLTBweH0ucmVwbGF5X2J1dHRvbl9vdmVybGF5X25vcm1hbHt3aWR0aDoxMDhweDtoZWlnaHQ6MTA4cHg7YmFja2dyb3VuZC1wb3NpdGlvbjotMTkycHggLTExM3B4fS5yZXBsYXlfYnV0dG9uX292ZXJsYXlfb3Zlcnt3aWR0aDoxMDhweDtoZWlnaHQ6MTA4cHg7YmFja2dyb3VuZC1wb3NpdGlvbjotMTkycHggLTExM3B4fS5yZXBsYXlfYnV0dG9uX292ZXJsYXlfZG93bnt3aWR0aDoxMDhweDtoZWlnaHQ6MTA4cHg7YmFja2dyb3VuZC1wb3NpdGlvbjotMTkycHggLTExM3B4fS5yZXBsYXlfYnV0dG9uX292ZXJsYXlfZGlzYWJsZWR7d2lkdGg6MTA4cHg7aGVpZ2h0OjEwOHB4O2JhY2tncm91bmQtcG9zaXRpb246LTE5MnB4IC0xMTNweH0uc2NydWJiYXJfc2NydWJiZXJfbm9ybWFse3dpZHRoOjEwcHg7aGVpZ2h0OjQzcHg7YmFja2dyb3VuZC1wb3NpdGlvbjotMjFweCAtMTkycHh9LnNjcnViYmFyX3NjcnViYmVyX292ZXJ7d2lkdGg6MTBweDtoZWlnaHQ6NDNweDtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0yMXB4IC0xOTJweH0uc2NydWJiYXJfc2NydWJiZXJfZG93bnt3aWR0aDoxMHB4O2hlaWdodDo0M3B4O2JhY2tncm91bmQtcG9zaXRpb246LTIxcHggLTE5MnB4fS5zY3J1YmJhcl9zY3J1YmJlcl9kaXNhYmxlZHt3aWR0aDoxMHB4O2hlaWdodDo0M3B4O2JhY2tncm91bmQtcG9zaXRpb246LTIxcHggLTE5MnB4fS51bm11dGVfYnV0dG9uX25vcm1hbHt3aWR0aDo0M3B4O2hlaWdodDo0M3B4O2JhY2tncm91bmQtcG9zaXRpb246LTU0NXB4IC0wcHh9LnVubXV0ZV9idXR0b25fb3Zlcnt3aWR0aDo0M3B4O2hlaWdodDo0M3B4O2JhY2tncm91bmQtcG9zaXRpb246LTMwNXB4IC00OHB4fS51bm11dGVfYnV0dG9uX2Rvd257d2lkdGg6NDNweDtoZWlnaHQ6NDNweDtiYWNrZ3JvdW5kLXBvc2l0aW9uOi00OTdweCAtMHB4fS51bm11dGVfYnV0dG9uX2Rpc2FibGVke3dpZHRoOjQzcHg7aGVpZ2h0OjQzcHg7YmFja2dyb3VuZC1wb3NpdGlvbjotNTQ1cHggLTBweH0udm9sdW1lX2J1dHRvbl9ub3JtYWx7d2lkdGg6NDNweDtoZWlnaHQ6NDNweDtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0zODlweCAtOTZweH0udm9sdW1lX2J1dHRvbl9vdmVye3dpZHRoOjQzcHg7aGVpZ2h0OjQzcHg7YmFja2dyb3VuZC1wb3NpdGlvbjotNDM3cHggLTk2cHh9LnZvbHVtZV9idXR0b25fZG93bnt3aWR0aDo0M3B4O2hlaWdodDo0M3B4O2JhY2tncm91bmQtcG9zaXRpb246LTM1M3B4IC00OHB4fS52b2x1bWVfYnV0dG9uX2Rpc2FibGVke3dpZHRoOjQzcHg7aGVpZ2h0OjQzcHg7YmFja2dyb3VuZC1wb3NpdGlvbjotMzg5cHggLTk2cHh9LnZvbHVtZV9idXR0b25fbG93X25vcm1hbHt3aWR0aDo0M3B4O2hlaWdodDo0M3B4O2JhY2tncm91bmQtcG9zaXRpb246LTM0MXB4IC05NnB4fS52b2x1bWVfYnV0dG9uX2xvd19vdmVye3dpZHRoOjQzcHg7aGVpZ2h0OjQzcHg7YmFja2dyb3VuZC1wb3NpdGlvbjotMzQxcHggLTE0NHB4fS52b2x1bWVfYnV0dG9uX2xvd19kb3due3dpZHRoOjQzcHg7aGVpZ2h0OjQzcHg7YmFja2dyb3VuZC1wb3NpdGlvbjotNTQ1cHggLTQ4cHh9LnZvbHVtZV9idXR0b25fbG93X2Rpc2FibGVke3dpZHRoOjQzcHg7aGVpZ2h0OjQzcHg7YmFja2dyb3VuZC1wb3NpdGlvbjotMzQxcHggLTk2cHh9LnZvbHVtZV9idXR0b25fbWVkX25vcm1hbHt3aWR0aDo0M3B4O2hlaWdodDo0M3B4O2JhY2tncm91bmQtcG9zaXRpb246LTM0MXB4IC0yNDBweH0udm9sdW1lX2J1dHRvbl9tZWRfb3Zlcnt3aWR0aDo0M3B4O2hlaWdodDo0M3B4O2JhY2tncm91bmQtcG9zaXRpb246LTM0MXB4IC0yODhweH0udm9sdW1lX2J1dHRvbl9tZWRfZG93bnt3aWR0aDo0M3B4O2hlaWdodDo0M3B4O2JhY2tncm91bmQtcG9zaXRpb246LTM0MXB4IC0xOTJweH0udm9sdW1lX2J1dHRvbl9tZWRfZGlzYWJsZWR7d2lkdGg6NDNweDtoZWlnaHQ6NDNweDtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0zNDFweCAtMjQwcHh9LnZvbHVtZV9idXR0b25faGlnaF9ub3JtYWx7d2lkdGg6NDNweDtoZWlnaHQ6NDNweDtiYWNrZ3JvdW5kLXBvc2l0aW9uOi00NDlweCAtNDhweH0udm9sdW1lX2J1dHRvbl9oaWdoX292ZXJ7d2lkdGg6NDNweDtoZWlnaHQ6NDNweDtiYWNrZ3JvdW5kLXBvc2l0aW9uOi00OTdweCAtNDhweH0udm9sdW1lX2J1dHRvbl9oaWdoX2Rvd257d2lkdGg6NDNweDtoZWlnaHQ6NDNweDtiYWNrZ3JvdW5kLXBvc2l0aW9uOi00MDFweCAtNDhweH0udm9sdW1lX2J1dHRvbl9oaWdoX2Rpc2FibGVke3dpZHRoOjQzcHg7aGVpZ2h0OjQzcHg7YmFja2dyb3VuZC1wb3NpdGlvbjotNDQ5cHggLTQ4cHh9LnZvbHVtZWJhcl9zbGlkZXJfbm9ybWFse3dpZHRoOjEzcHg7aGVpZ2h0OjlweDtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0wcHggLTMzNnB4fS52b2x1bWViYXJfc2xpZGVyX292ZXJ7d2lkdGg6MTNweDtoZWlnaHQ6OXB4O2JhY2tncm91bmQtcG9zaXRpb246LTBweCAtMzM2cHh9LnZvbHVtZWJhcl9zbGlkZXJfZG93bnt3aWR0aDoxM3B4O2hlaWdodDo5cHg7YmFja2dyb3VuZC1wb3NpdGlvbjotMHB4IC0zMzZweH0udm9sdW1lYmFyX3NsaWRlcl9kaXNhYmxlZHt3aWR0aDoxM3B4O2hlaWdodDo5cHg7YmFja2dyb3VuZC1wb3NpdGlvbjotMHB4IC0zMzZweH0uc2NydWJiYXJfbG9hZGVkX3RyYWNrX2VuZHt3aWR0aDoycHg7aGVpZ2h0OjQzcHg7YmFja2dyb3VuZC1wb3NpdGlvbjotMTRweCAtMTkycHh9LnNjcnViYmFyX3RyYWNrX2xlZnR7d2lkdGg6MXB4O2hlaWdodDo0M3B4O2JhY2tncm91bmQtcG9zaXRpb246LTM2cHggLTE5MnB4fS5zY3J1YmJhcl90cmFja19yaWdodHt3aWR0aDoxcHg7aGVpZ2h0OjQzcHg7YmFja2dyb3VuZC1wb3NpdGlvbjotNDJweCAtMTkycHh9LnNjcnViYmFyX3RyYWNre3dpZHRoOjJweDtoZWlnaHQ6NDNweDtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0wcHggLTQ3OXB4fS5zY3J1YmJhcl9sb2FkZWRfdHJhY2t7d2lkdGg6MnB4O2hlaWdodDo0M3B4O2JhY2tncm91bmQtcG9zaXRpb246LTBweCAtMzkzcHh9LnNjcnViYmFyX3BsYXllZF90cmFja3t3aWR0aDoycHg7aGVpZ2h0OjQzcHg7YmFja2dyb3VuZC1wb3NpdGlvbjotMHB4IC00MzZweH0uc2VwZXJhdG9ye3dpZHRoOjFweDtoZWlnaHQ6NDNweDtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0yODhweCAtMjI2cHh9LnZvbHVtZWJhcl90cmFja3t3aWR0aDo1cHg7aGVpZ2h0OjJweDtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xOHB4IC0zMzZweH0udm9sdW1lYmFyX3RyYWNrX2VuZHt3aWR0aDo1cHg7aGVpZ2h0OjJweDtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xOHB4IC0zNDNweH0udm9sdW1lYmFyX2JhY2tkcm9we3dpZHRoOjMxcHg7aGVpZ2h0Ojk3cHg7YmFja2dyb3VuZC1wb3NpdGlvbjotMzA1cHggLTk2cHh9LmNvbnRyb2xfYmFja2Ryb3BfbGVmdHt3aWR0aDoycHg7aGVpZ2h0OjQzcHg7YmFja2dyb3VuZC1wb3NpdGlvbjotMHB4IC0xOTJweH0uY29udHJvbF9iYWNrZHJvcF9yaWdodHt3aWR0aDoycHg7aGVpZ2h0OjQzcHg7YmFja2dyb3VuZC1wb3NpdGlvbjotN3B4IC0xOTJweH0udG9jX3RpdGxlX2JhY2tkcm9we3dpZHRoOjhweDtoZWlnaHQ6MThweDtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0wcHggLTUyMnB4fS5jb250cm9sX2JhY2tkcm9we3dpZHRoOjJweDtoZWlnaHQ6NDNweDtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0wcHggLTM1MHB4fSNjb250cm9sc3twb3NpdGlvbjphYnNvbHV0ZTttYXJnaW46MDtwYWRkaW5nOjA7ei1pbmRleDo5ODAzO2NvbG9yOiNmZmY7aGVpZ2h0OjQzcHg7Ym90dG9tOjA7b3BhY2l0eToxLjB9LmJpdG1hcF9jb250cm9se2Zsb2F0OmxlZnQ7bWFyZ2luLXJpZ2h0OjB9LmJpdG1hcF9jb250cm9sOmxhc3QtY2hpbGR7bWFyZ2luLXJpZ2h0OjB9LmJpdG1hcF9jb250cm9sOmZpcnN0LWNoaWxke21hcmdpbi1sZWZ0OjB9LnF1aXpNYXJrZXJ7d2lkdGg6M3B4O2NvbG9yOnJnYmEoMjU1LDI1NSwyNTUsMC41KTtkaXNwbGF5Om5vbmV9I3BsYXkucGxheSBzcGFue3dpZHRoOjA7aGVpZ2h0OjA7bWFyZ2luOjhweCAwIDAgMThweDtib3JkZXItdG9wOjE1cHggc29saWQgIzc3Nztib3JkZXItbGVmdDoyNHB4IHNvbGlkICNmZmY7Ym9yZGVyLWJvdHRvbToxNXB4IHNvbGlkICM3Nzd9I3BsYXkucGF1c2Ugc3Bhbnt3aWR0aDozcHg7aGVpZ2h0OjMwcHg7bWFyZ2luOjhweCBhdXRvIDA7Ym9yZGVyLXRvcDowO2JvcmRlci1sZWZ0OjhweCBzb2xpZCAjZmZmO2JvcmRlci1ib3R0b206MDtib3JkZXItcmlnaHQ6OHB4IHNvbGlkICNmZmZ9I3Byb2dyZXNze3dpZHRoOjE5MHB4fSNwcm9ncmVzcyAjcHJvZ3Jlc3NfYm94e2Zsb2F0OmxlZnQ7d2lkdGg6MTAwcHg7aGVpZ2h0OjQzcHh9I3Byb2dyZXNzICNwcm9ncmVzc19zY3J1YmJhcl90cmFja3tkaXNwbGF5OmJsb2NrO3dpZHRoOmF1dG87aGVpZ2h0OjQzcHh9I3Byb2dyZXNzICNwcm9ncmVzc19zY3J1YmJhcl90cmFja19sZWZ0e2Rpc3BsYXk6YmxvY2s7ZmxvYXQ6bGVmdDtoZWlnaHQ6NDNweH0jcHJvZ3Jlc3MgI3Byb2dyZXNzX3NjcnViYmFyX3RyYWNrX3JpZ2h0e2Rpc3BsYXk6YmxvY2s7ZmxvYXQ6cmlnaHQ7bWFyZ2luLXRvcDotNDNweDtoZWlnaHQ6NDNweH0jcHJvZ3Jlc3MgI3BsYXlfcHJvZ3Jlc3N7ZGlzcGxheTpibG9jazt3aWR0aDowO2hlaWdodDo0M3B4fSNwcm9ncmVzcyAjbG9hZF9wcm9ncmVzc3tkaXNwbGF5OmJsb2NrO3dpZHRoOjA7aGVpZ2h0OjQzcHh9I3Byb2dyZXNzICNwbGF5X3RpbWV7Y3Vyc29yOmRlZmF1bHQ7Y29sb3I6I2ZmZjtmbG9hdDpsZWZ0O21hcmdpbjoxNHB4IDAgMCAxNXB4O2ZvbnQtc2l6ZToxNXB4O2xpbmUtaGVpZ2h0OjE7Zm9udC13ZWlnaHQ6bm9ybWFsO2ZvbnQtZmFtaWx5OkhlbHZldGljYSxBcmlhbCxzYW5zLXNlcmlmOy13ZWJraXQtdXNlci1zZWxlY3Q6bm9uZTsta2h0bWwtdXNlci1zZWxlY3Q6bm9uZTstbW96LXVzZXItc2VsZWN0Om5vbmU7LW8tdXNlci1zZWxlY3Q6bm9uZTt1c2VyLXNlbGVjdDpub25lfSN2b2x1bWVfc2xpZGVyX2NvbnRhaW5lcntib3R0b206MzlweH0jdm9sdW1lX3NsaWRlcl92ZXJ0aWNhbHtkaXNwbGF5OmJsb2NrO21hcmdpbi1sZWZ0OjEwcHg7bWFyZ2luLXRvcDoxNHB4O2hlaWdodDo2NXB4O3dpZHRoOjEwcHh9I3ZvbHVtZSBpbnB1dHttYXJnaW4tdG9wOjIwcHg7bWFyZ2luLWxlZnQ6NXB4O3dpZHRoOjQwcHh9I3ZvbHVtZSBzcGFue2Rpc3BsYXk6YmxvY2s7bWFyZ2luOjEycHggMCAwIDVweH0jdm9sdW1lIHVse2Rpc3BsYXk6YmxvY2s7bWFyZ2luOjA7cGFkZGluZzowO2xpc3Qtc3R5bGU6bm9uZX0jdm9sdW1lIHVsIGxpe2Zsb2F0OmxlZnQ7bWFyZ2luOjA7cGFkZGluZzowO2xpc3Qtc3R5bGU6bm9uZTt3aWR0aDo1cHg7bWFyZ2luLXJpZ2h0OjJweDtoZWlnaHQ6MDtib3JkZXItYm90dG9tOjE4cHggc29saWQgIzU1NTtjdXJzb3I6cG9pbnRlcn0jdm9sdW1lIHVsIGxpOm50aC1jaGlsZCgxKXtib3JkZXItYm90dG9tLXdpZHRoOjJweDtoZWlnaHQ6MTZweH0jdm9sdW1lIHVsIGxpOm50aC1jaGlsZCgyKXtib3JkZXItYm90dG9tLXdpZHRoOjRweDtoZWlnaHQ6MTRweH0jdm9sdW1lIHVsIGxpOm50aC1jaGlsZCgzKXtib3JkZXItYm90dG9tLXdpZHRoOjdweDtoZWlnaHQ6MTFweH0jdm9sdW1lIHVsIGxpOm50aC1jaGlsZCg0KXtib3JkZXItYm90dG9tLXdpZHRoOjEwcHg7aGVpZ2h0OjhweH0jdm9sdW1lIHVsIGxpOm50aC1jaGlsZCg1KXtib3JkZXItYm90dG9tLXdpZHRoOjE0cHg7aGVpZ2h0OjRweH0udWktc3RhdGUtZGVmYXVsdHtiYWNrZ3JvdW5kLWltYWdlOnVybChzcHJpdGVzaGVldC5wbmcpO3dpZHRoOjEzcHg7aGVpZ2h0OjlweDtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0wcHggLTMzNnB4O291dGxpbmU6MH0udWktc2xpZGVye3Bvc2l0aW9uOnJlbGF0aXZlO3RleHQtYWxpZ246bGVmdH0udWktc2xpZGVyIC51aS1zbGlkZXItaGFuZGxle3Bvc2l0aW9uOmFic29sdXRlO3otaW5kZXg6Mjt3aWR0aDoxLjJlbTtoZWlnaHQ6LjhlbX0udWktc2xpZGVyIC51aS1zbGlkZXItcmFuZ2V7cG9zaXRpb246YWJzb2x1dGU7ei1pbmRleDoxO2Rpc3BsYXk6YmxvY2s7YmFja2dyb3VuZC1wb3NpdGlvbjowIDB9LnVpLXNsaWRlci12ZXJ0aWNhbHt3aWR0aDouNmVtO2hlaWdodDoxMDBweH0udWktc2xpZGVyLXZlcnRpY2FsIC51aS1zbGlkZXItaGFuZGxle2xlZnQ6LS4yZW07bWFyZ2luLWJvdHRvbTotLjZlbX0udWktc2xpZGVyLXZlcnRpY2FsIC51aS1zbGlkZXItcmFuZ2V7bGVmdDowO3dpZHRoOjEwMCV9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvcGFnZXMvdHJhbnNjcmlwdHMvMjAxM19FY2xpcHNlQ29uRnJhbmNlL2RlbW9zL2Nkby9jZG8vc2tpbnMvb3ZlcmxheS9zcHJpdGVzaGVldC5wbmcgYi9wYWdlcy90cmFuc2NyaXB0cy8yMDEzX0VjbGlwc2VDb25GcmFuY2UvZGVtb3MvY2RvL2Nkby9za2lucy9vdmVybGF5L3Nwcml0ZXNoZWV0LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYmVkM2YzCi0tLSAvZGV2L251bGwKKysrIGIvcGFnZXMvdHJhbnNjcmlwdHMvMjAxM19FY2xpcHNlQ29uRnJhbmNlL2RlbW9zL2Nkby9jZG8vc2tpbnMvb3ZlcmxheS9zcHJpdGVzaGVldC5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcGFnZXMvdHJhbnNjcmlwdHMvMjAxM19FY2xpcHNlQ29uRnJhbmNlL2ltYWdlcy9JbnRlbnQvQXJjaGl0ZWN0dXJlX3JlcG9zaXRvcnkucG5nIGIvcGFnZXMvdHJhbnNjcmlwdHMvMjAxM19FY2xpcHNlQ29uRnJhbmNlL2ltYWdlcy9JbnRlbnQvQXJjaGl0ZWN0dXJlX3JlcG9zaXRvcnkucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjczOTcyMjgKLS0tIC9kZXYvbnVsbAorKysgYi9wYWdlcy90cmFuc2NyaXB0cy8yMDEzX0VjbGlwc2VDb25GcmFuY2UvaW1hZ2VzL0ludGVudC9BcmNoaXRlY3R1cmVfcmVwb3NpdG9yeS5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcGFnZXMvdHJhbnNjcmlwdHMvMjAxM19FY2xpcHNlQ29uRnJhbmNlL2ltYWdlcy9JbnRlbnQvSW1hZ2UtSW50ZW50X2xvZ28ucG5nIGIvcGFnZXMvdHJhbnNjcmlwdHMvMjAxM19FY2xpcHNlQ29uRnJhbmNlL2ltYWdlcy9JbnRlbnQvSW1hZ2UtSW50ZW50X2xvZ28ucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgzMTkzOWUKLS0tIC9kZXYvbnVsbAorKysgYi9wYWdlcy90cmFuc2NyaXB0cy8yMDEzX0VjbGlwc2VDb25GcmFuY2UvaW1hZ2VzL0ludGVudC9JbWFnZS1JbnRlbnRfbG9nby5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcGFnZXMvdHJhbnNjcmlwdHMvMjAxM19FY2xpcHNlQ29uRnJhbmNlL2ltYWdlcy9JbnRlbnQvSW1hZ2UtSW50ZW50X2xvZ29fY3JvcHBlZC5wbmcgYi9wYWdlcy90cmFuc2NyaXB0cy8yMDEzX0VjbGlwc2VDb25GcmFuY2UvaW1hZ2VzL0ludGVudC9JbWFnZS1JbnRlbnRfbG9nb19jcm9wcGVkLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NzEwZTg0Ci0tLSAvZGV2L251bGwKKysrIGIvcGFnZXMvdHJhbnNjcmlwdHMvMjAxM19FY2xpcHNlQ29uRnJhbmNlL2ltYWdlcy9JbnRlbnQvSW1hZ2UtSW50ZW50X2xvZ29fY3JvcHBlZC5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcGFnZXMvdHJhbnNjcmlwdHMvMjAxM19FY2xpcHNlQ29uRnJhbmNlL2ltYWdlcy9JbnRlbnQvU21hcnRFQS9pbnN0ZWFkX29mLWIwMS5wbmcgYi9wYWdlcy90cmFuc2NyaXB0cy8yMDEzX0VjbGlwc2VDb25GcmFuY2UvaW1hZ2VzL0ludGVudC9TbWFydEVBL2luc3RlYWRfb2YtYjAxLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NzllYzdiCi0tLSAvZGV2L251bGwKKysrIGIvcGFnZXMvdHJhbnNjcmlwdHMvMjAxM19FY2xpcHNlQ29uRnJhbmNlL2ltYWdlcy9JbnRlbnQvU21hcnRFQS9pbnN0ZWFkX29mLWIwMS5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcGFnZXMvdHJhbnNjcmlwdHMvMjAxM19FY2xpcHNlQ29uRnJhbmNlL2ltYWdlcy9JbnRlbnQvU21hcnRFQS9pbnN0ZWFkX29mLWIwMi5wbmcgYi9wYWdlcy90cmFuc2NyaXB0cy8yMDEzX0VjbGlwc2VDb25GcmFuY2UvaW1hZ2VzL0ludGVudC9TbWFydEVBL2luc3RlYWRfb2YtYjAyLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YWQ3NmExCi0tLSAvZGV2L251bGwKKysrIGIvcGFnZXMvdHJhbnNjcmlwdHMvMjAxM19FY2xpcHNlQ29uRnJhbmNlL2ltYWdlcy9JbnRlbnQvU21hcnRFQS9pbnN0ZWFkX29mLWIwMi5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcGFnZXMvdHJhbnNjcmlwdHMvMjAxM19FY2xpcHNlQ29uRnJhbmNlL2ltYWdlcy9JbnRlbnQvU21hcnRFQS9pbnN0ZWFkX29mLWIwMy5wbmcgYi9wYWdlcy90cmFuc2NyaXB0cy8yMDEzX0VjbGlwc2VDb25GcmFuY2UvaW1hZ2VzL0ludGVudC9TbWFydEVBL2luc3RlYWRfb2YtYjAzLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MGFmNWUxCi0tLSAvZGV2L251bGwKKysrIGIvcGFnZXMvdHJhbnNjcmlwdHMvMjAxM19FY2xpcHNlQ29uRnJhbmNlL2ltYWdlcy9JbnRlbnQvU21hcnRFQS9pbnN0ZWFkX29mLWIwMy5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcGFnZXMvdHJhbnNjcmlwdHMvMjAxM19FY2xpcHNlQ29uRnJhbmNlL2ltYWdlcy9JbnRlbnQvU21hcnRFQS9pbnN0ZWFkX29mLnBuZyBiL3BhZ2VzL3RyYW5zY3JpcHRzLzIwMTNfRWNsaXBzZUNvbkZyYW5jZS9pbWFnZXMvSW50ZW50L1NtYXJ0RUEvaW5zdGVhZF9vZi5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2YxMGRhNAotLS0gL2Rldi9udWxsCisrKyBiL3BhZ2VzL3RyYW5zY3JpcHRzLzIwMTNfRWNsaXBzZUNvbkZyYW5jZS9pbWFnZXMvSW50ZW50L1NtYXJ0RUEvaW5zdGVhZF9vZi5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcGFnZXMvdHJhbnNjcmlwdHMvMjAxM19FY2xpcHNlQ29uRnJhbmNlL2ltYWdlcy9JbnRlbnQvU21hcnRFQS9pbnN0ZWFkX29mMDEucG5nIGIvcGFnZXMvdHJhbnNjcmlwdHMvMjAxM19FY2xpcHNlQ29uRnJhbmNlL2ltYWdlcy9JbnRlbnQvU21hcnRFQS9pbnN0ZWFkX29mMDEucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUxYjgxZmIKLS0tIC9kZXYvbnVsbAorKysgYi9wYWdlcy90cmFuc2NyaXB0cy8yMDEzX0VjbGlwc2VDb25GcmFuY2UvaW1hZ2VzL0ludGVudC9TbWFydEVBL2luc3RlYWRfb2YwMS5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcGFnZXMvdHJhbnNjcmlwdHMvMjAxM19FY2xpcHNlQ29uRnJhbmNlL2ltYWdlcy9JbnRlbnQvU21hcnRFQS9pbnN0ZWFkX29mMDIucG5nIGIvcGFnZXMvdHJhbnNjcmlwdHMvMjAxM19FY2xpcHNlQ29uRnJhbmNlL2ltYWdlcy9JbnRlbnQvU21hcnRFQS9pbnN0ZWFkX29mMDIucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY4YWNkNjYKLS0tIC9kZXYvbnVsbAorKysgYi9wYWdlcy90cmFuc2NyaXB0cy8yMDEzX0VjbGlwc2VDb25GcmFuY2UvaW1hZ2VzL0ludGVudC9TbWFydEVBL2luc3RlYWRfb2YwMi5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcGFnZXMvdHJhbnNjcmlwdHMvMjAxM19FY2xpcHNlQ29uRnJhbmNlL2ltYWdlcy9JbnRlbnQvU21hcnRFQS9pbnN0ZWFkX29mMDMucG5nIGIvcGFnZXMvdHJhbnNjcmlwdHMvMjAxM19FY2xpcHNlQ29uRnJhbmNlL2ltYWdlcy9JbnRlbnQvU21hcnRFQS9pbnN0ZWFkX29mMDMucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVkNDBlMDAKLS0tIC9kZXYvbnVsbAorKysgYi9wYWdlcy90cmFuc2NyaXB0cy8yMDEzX0VjbGlwc2VDb25GcmFuY2UvaW1hZ2VzL0ludGVudC9TbWFydEVBL2luc3RlYWRfb2YwMy5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcGFnZXMvdHJhbnNjcmlwdHMvMjAxM19FY2xpcHNlQ29uRnJhbmNlL2ltYWdlcy9JbnRlbnQvU21hcnRFQS9pbnN0ZWFkX29mX3YyLnBuZyBiL3BhZ2VzL3RyYW5zY3JpcHRzLzIwMTNfRWNsaXBzZUNvbkZyYW5jZS9pbWFnZXMvSW50ZW50L1NtYXJ0RUEvaW5zdGVhZF9vZl92Mi5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGI2NmJlNAotLS0gL2Rldi9udWxsCisrKyBiL3BhZ2VzL3RyYW5zY3JpcHRzLzIwMTNfRWNsaXBzZUNvbkZyYW5jZS9pbWFnZXMvSW50ZW50L1NtYXJ0RUEvaW5zdGVhZF9vZl92Mi5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcGFnZXMvdHJhbnNjcmlwdHMvMjAxM19FY2xpcHNlQ29uRnJhbmNlL2ltYWdlcy9JbnRlbnQvYXV0b21hdGUuanBnIGIvcGFnZXMvdHJhbnNjcmlwdHMvMjAxM19FY2xpcHNlQ29uRnJhbmNlL2ltYWdlcy9JbnRlbnQvYXV0b21hdGUuanBnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg0ZGM2NjUKLS0tIC9kZXYvbnVsbAorKysgYi9wYWdlcy90cmFuc2NyaXB0cy8yMDEzX0VjbGlwc2VDb25GcmFuY2UvaW1hZ2VzL0ludGVudC9hdXRvbWF0ZS5qcGcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcGFnZXMvdHJhbnNjcmlwdHMvMjAxM19FY2xpcHNlQ29uRnJhbmNlL2ltYWdlcy9JbnRlbnQvYm9vay5qcGcgYi9wYWdlcy90cmFuc2NyaXB0cy8yMDEzX0VjbGlwc2VDb25GcmFuY2UvaW1hZ2VzL0ludGVudC9ib29rLmpwZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mOWU3YzlhCi0tLSAvZGV2L251bGwKKysrIGIvcGFnZXMvdHJhbnNjcmlwdHMvMjAxM19FY2xpcHNlQ29uRnJhbmNlL2ltYWdlcy9JbnRlbnQvYm9vay5qcGcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcGFnZXMvdHJhbnNjcmlwdHMvMjAxM19FY2xpcHNlQ29uRnJhbmNlL2ltYWdlcy9JbnRlbnQvY2RvLmpwZyBiL3BhZ2VzL3RyYW5zY3JpcHRzLzIwMTNfRWNsaXBzZUNvbkZyYW5jZS9pbWFnZXMvSW50ZW50L2Nkby5qcGcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDNlOTNiMQotLS0gL2Rldi9udWxsCisrKyBiL3BhZ2VzL3RyYW5zY3JpcHRzLzIwMTNfRWNsaXBzZUNvbkZyYW5jZS9pbWFnZXMvSW50ZW50L2Nkby5qcGcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcGFnZXMvdHJhbnNjcmlwdHMvMjAxM19FY2xpcHNlQ29uRnJhbmNlL2ltYWdlcy9JbnRlbnQvY29tbXVuaXF1ZXItZm9ybWVzLmpwZyBiL3BhZ2VzL3RyYW5zY3JpcHRzLzIwMTNfRWNsaXBzZUNvbkZyYW5jZS9pbWFnZXMvSW50ZW50L2NvbW11bmlxdWVyLWZvcm1lcy5qcGcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmIxMDIwZAotLS0gL2Rldi9udWxsCisrKyBiL3BhZ2VzL3RyYW5zY3JpcHRzLzIwMTNfRWNsaXBzZUNvbkZyYW5jZS9pbWFnZXMvSW50ZW50L2NvbW11bmlxdWVyLWZvcm1lcy5qcGcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcGFnZXMvdHJhbnNjcmlwdHMvMjAxM19FY2xpcHNlQ29uRnJhbmNlL2ltYWdlcy9JbnRlbnQvY29tcGFyZV9wbGFuLnBuZyBiL3BhZ2VzL3RyYW5zY3JpcHRzLzIwMTNfRWNsaXBzZUNvbkZyYW5jZS9pbWFnZXMvSW50ZW50L2NvbXBhcmVfcGxhbi5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmE5ZGQ2YgotLS0gL2Rldi9udWxsCisrKyBiL3BhZ2VzL3RyYW5zY3JpcHRzLzIwMTNfRWNsaXBzZUNvbkZyYW5jZS9pbWFnZXMvSW50ZW50L2NvbXBhcmVfcGxhbi5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcGFnZXMvdHJhbnNjcmlwdHMvMjAxM19FY2xpcHNlQ29uRnJhbmNlL2ltYWdlcy9JbnRlbnQvY29uc3RyYWludC5wbmcgYi9wYWdlcy90cmFuc2NyaXB0cy8yMDEzX0VjbGlwc2VDb25GcmFuY2UvaW1hZ2VzL0ludGVudC9jb25zdHJhaW50LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZWU1Y2ZlCi0tLSAvZGV2L251bGwKKysrIGIvcGFnZXMvdHJhbnNjcmlwdHMvMjAxM19FY2xpcHNlQ29uRnJhbmNlL2ltYWdlcy9JbnRlbnQvY29uc3RyYWludC5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcGFnZXMvdHJhbnNjcmlwdHMvMjAxM19FY2xpcHNlQ29uRnJhbmNlL2ltYWdlcy9JbnRlbnQvY29va2luZy5qcGcgYi9wYWdlcy90cmFuc2NyaXB0cy8yMDEzX0VjbGlwc2VDb25GcmFuY2UvaW1hZ2VzL0ludGVudC9jb29raW5nLmpwZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MWQwYWRkCi0tLSAvZGV2L251bGwKKysrIGIvcGFnZXMvdHJhbnNjcmlwdHMvMjAxM19FY2xpcHNlQ29uRnJhbmNlL2ltYWdlcy9JbnRlbnQvY29va2luZy5qcGcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcGFnZXMvdHJhbnNjcmlwdHMvMjAxM19FY2xpcHNlQ29uRnJhbmNlL2ltYWdlcy9JbnRlbnQvY29va2luZ19iYWNrdXAuanBnIGIvcGFnZXMvdHJhbnNjcmlwdHMvMjAxM19FY2xpcHNlQ29uRnJhbmNlL2ltYWdlcy9JbnRlbnQvY29va2luZ19iYWNrdXAuanBnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM2MTZlYTEKLS0tIC9kZXYvbnVsbAorKysgYi9wYWdlcy90cmFuc2NyaXB0cy8yMDEzX0VjbGlwc2VDb25GcmFuY2UvaW1hZ2VzL0ludGVudC9jb29raW5nX2JhY2t1cC5qcGcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcGFnZXMvdHJhbnNjcmlwdHMvMjAxM19FY2xpcHNlQ29uRnJhbmNlL2ltYWdlcy9JbnRlbnQvZG9jL2JsYW5rX2RvYy5qcGcgYi9wYWdlcy90cmFuc2NyaXB0cy8yMDEzX0VjbGlwc2VDb25GcmFuY2UvaW1hZ2VzL0ludGVudC9kb2MvYmxhbmtfZG9jLmpwZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNGI2M2VlCi0tLSAvZGV2L251bGwKKysrIGIvcGFnZXMvdHJhbnNjcmlwdHMvMjAxM19FY2xpcHNlQ29uRnJhbmNlL2ltYWdlcy9JbnRlbnQvZG9jL2JsYW5rX2RvYy5qcGcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcGFnZXMvdHJhbnNjcmlwdHMvMjAxM19FY2xpcHNlQ29uRnJhbmNlL2ltYWdlcy9JbnRlbnQvZG9jL2RvY19tb25zdGVyLmpwZyBiL3BhZ2VzL3RyYW5zY3JpcHRzLzIwMTNfRWNsaXBzZUNvbkZyYW5jZS9pbWFnZXMvSW50ZW50L2RvYy9kb2NfbW9uc3Rlci5qcGcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2Q1ZWZmMQotLS0gL2Rldi9udWxsCisrKyBiL3BhZ2VzL3RyYW5zY3JpcHRzLzIwMTNfRWNsaXBzZUNvbkZyYW5jZS9pbWFnZXMvSW50ZW50L2RvYy9kb2NfbW9uc3Rlci5qcGcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcGFnZXMvdHJhbnNjcmlwdHMvMjAxM19FY2xpcHNlQ29uRnJhbmNlL2ltYWdlcy9JbnRlbnQvZG9jL2RvY19tb25zdGVyLnBuZyBiL3BhZ2VzL3RyYW5zY3JpcHRzLzIwMTNfRWNsaXBzZUNvbkZyYW5jZS9pbWFnZXMvSW50ZW50L2RvYy9kb2NfbW9uc3Rlci5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTY4YWYzYgotLS0gL2Rldi9udWxsCisrKyBiL3BhZ2VzL3RyYW5zY3JpcHRzLzIwMTNfRWNsaXBzZUNvbkZyYW5jZS9pbWFnZXMvSW50ZW50L2RvYy9kb2NfbW9uc3Rlci5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcGFnZXMvdHJhbnNjcmlwdHMvMjAxM19FY2xpcHNlQ29uRnJhbmNlL2ltYWdlcy9JbnRlbnQvZG9jL2RvY19zaHJlZGRlZC5qcGcgYi9wYWdlcy90cmFuc2NyaXB0cy8yMDEzX0VjbGlwc2VDb25GcmFuY2UvaW1hZ2VzL0ludGVudC9kb2MvZG9jX3NocmVkZGVkLmpwZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZWNmMmQ1Ci0tLSAvZGV2L251bGwKKysrIGIvcGFnZXMvdHJhbnNjcmlwdHMvMjAxM19FY2xpcHNlQ29uRnJhbmNlL2ltYWdlcy9JbnRlbnQvZG9jL2RvY19zaHJlZGRlZC5qcGcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcGFnZXMvdHJhbnNjcmlwdHMvMjAxM19FY2xpcHNlQ29uRnJhbmNlL2ltYWdlcy9JbnRlbnQvZG9jL2RvY190cm90b2lyLmpwZyBiL3BhZ2VzL3RyYW5zY3JpcHRzLzIwMTNfRWNsaXBzZUNvbkZyYW5jZS9pbWFnZXMvSW50ZW50L2RvYy9kb2NfdHJvdG9pci5qcGcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGVkMzgwYgotLS0gL2Rldi9udWxsCisrKyBiL3BhZ2VzL3RyYW5zY3JpcHRzLzIwMTNfRWNsaXBzZUNvbkZyYW5jZS9pbWFnZXMvSW50ZW50L2RvYy9kb2NfdHJvdG9pci5qcGcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcGFnZXMvdHJhbnNjcmlwdHMvMjAxM19FY2xpcHNlQ29uRnJhbmNlL2ltYWdlcy9JbnRlbnQvZG9jL2RvY193YXN0ZWQuanBnIGIvcGFnZXMvdHJhbnNjcmlwdHMvMjAxM19FY2xpcHNlQ29uRnJhbmNlL2ltYWdlcy9JbnRlbnQvZG9jL2RvY193YXN0ZWQuanBnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM0ZWRkYjcKLS0tIC9kZXYvbnVsbAorKysgYi9wYWdlcy90cmFuc2NyaXB0cy8yMDEzX0VjbGlwc2VDb25GcmFuY2UvaW1hZ2VzL0ludGVudC9kb2MvZG9jX3dhc3RlZC5qcGcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcGFnZXMvdHJhbnNjcmlwdHMvMjAxM19FY2xpcHNlQ29uRnJhbmNlL2ltYWdlcy9JbnRlbnQvZG9jL2RvY193YXN0ZWQyLmpwZyBiL3BhZ2VzL3RyYW5zY3JpcHRzLzIwMTNfRWNsaXBzZUNvbkZyYW5jZS9pbWFnZXMvSW50ZW50L2RvYy9kb2Nfd2FzdGVkMi5qcGcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzVlZGU0MgotLS0gL2Rldi9udWxsCisrKyBiL3BhZ2VzL3RyYW5zY3JpcHRzLzIwMTNfRWNsaXBzZUNvbkZyYW5jZS9pbWFnZXMvSW50ZW50L2RvYy9kb2Nfd2FzdGVkMi5qcGcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcGFnZXMvdHJhbnNjcmlwdHMvMjAxM19FY2xpcHNlQ29uRnJhbmNlL2ltYWdlcy9JbnRlbnQvZG9jL3dhc3RlZF9wYXBlci5qcGcgYi9wYWdlcy90cmFuc2NyaXB0cy8yMDEzX0VjbGlwc2VDb25GcmFuY2UvaW1hZ2VzL0ludGVudC9kb2Mvd2FzdGVkX3BhcGVyLmpwZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MjlkYTNhCi0tLSAvZGV2L251bGwKKysrIGIvcGFnZXMvdHJhbnNjcmlwdHMvMjAxM19FY2xpcHNlQ29uRnJhbmNlL2ltYWdlcy9JbnRlbnQvZG9jL3dhc3RlZF9wYXBlci5qcGcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcGFnZXMvdHJhbnNjcmlwdHMvMjAxM19FY2xpcHNlQ29uRnJhbmNlL2ltYWdlcy9JbnRlbnQvZG9jL3d0Zm0uanBnIGIvcGFnZXMvdHJhbnNjcmlwdHMvMjAxM19FY2xpcHNlQ29uRnJhbmNlL2ltYWdlcy9JbnRlbnQvZG9jL3d0Zm0uanBnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFmMDA3NGUKLS0tIC9kZXYvbnVsbAorKysgYi9wYWdlcy90cmFuc2NyaXB0cy8yMDEzX0VjbGlwc2VDb25GcmFuY2UvaW1hZ2VzL0ludGVudC9kb2Mvd3RmbS5qcGcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcGFnZXMvdHJhbnNjcmlwdHMvMjAxM19FY2xpcHNlQ29uRnJhbmNlL2ltYWdlcy9JbnRlbnQvZG9jL3d0Zm0yLmpwZyBiL3BhZ2VzL3RyYW5zY3JpcHRzLzIwMTNfRWNsaXBzZUNvbkZyYW5jZS9pbWFnZXMvSW50ZW50L2RvYy93dGZtMi5qcGcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmY4NTlmMgotLS0gL2Rldi9udWxsCisrKyBiL3BhZ2VzL3RyYW5zY3JpcHRzLzIwMTNfRWNsaXBzZUNvbkZyYW5jZS9pbWFnZXMvSW50ZW50L2RvYy93dGZtMi5qcGcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcGFnZXMvdHJhbnNjcmlwdHMvMjAxM19FY2xpcHNlQ29uRnJhbmNlL2ltYWdlcy9JbnRlbnQvZWNvbmZyYW5jZS5wbmcgYi9wYWdlcy90cmFuc2NyaXB0cy8yMDEzX0VjbGlwc2VDb25GcmFuY2UvaW1hZ2VzL0ludGVudC9lY29uZnJhbmNlLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kN2FhMDZhCi0tLSAvZGV2L251bGwKKysrIGIvcGFnZXMvdHJhbnNjcmlwdHMvMjAxM19FY2xpcHNlQ29uRnJhbmNlL2ltYWdlcy9JbnRlbnQvZWNvbmZyYW5jZS5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcGFnZXMvdHJhbnNjcmlwdHMvMjAxM19FY2xpcHNlQ29uRnJhbmNlL2ltYWdlcy9JbnRlbnQvZWdnLWluY3ViYXRpb24ucG5nIGIvcGFnZXMvdHJhbnNjcmlwdHMvMjAxM19FY2xpcHNlQ29uRnJhbmNlL2ltYWdlcy9JbnRlbnQvZWdnLWluY3ViYXRpb24ucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg2MWM5ODEKLS0tIC9kZXYvbnVsbAorKysgYi9wYWdlcy90cmFuc2NyaXB0cy8yMDEzX0VjbGlwc2VDb25GcmFuY2UvaW1hZ2VzL0ludGVudC9lZ2ctaW5jdWJhdGlvbi5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcGFnZXMvdHJhbnNjcmlwdHMvMjAxM19FY2xpcHNlQ29uRnJhbmNlL2ltYWdlcy9JbnRlbnQvZXVyb3BlMjAxMl9sb2dvLmpwZyBiL3BhZ2VzL3RyYW5zY3JpcHRzLzIwMTNfRWNsaXBzZUNvbkZyYW5jZS9pbWFnZXMvSW50ZW50L2V1cm9wZTIwMTJfbG9nby5qcGcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWI5Njc2MQotLS0gL2Rldi9udWxsCisrKyBiL3BhZ2VzL3RyYW5zY3JpcHRzLzIwMTNfRWNsaXBzZUNvbkZyYW5jZS9pbWFnZXMvSW50ZW50L2V1cm9wZTIwMTJfbG9nby5qcGcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcGFnZXMvdHJhbnNjcmlwdHMvMjAxM19FY2xpcHNlQ29uRnJhbmNlL2ltYWdlcy9JbnRlbnQvZmVlZGJhY2sucG5nIGIvcGFnZXMvdHJhbnNjcmlwdHMvMjAxM19FY2xpcHNlQ29uRnJhbmNlL2ltYWdlcy9JbnRlbnQvZmVlZGJhY2sucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdhYjQ4MzEKLS0tIC9kZXYvbnVsbAorKysgYi9wYWdlcy90cmFuc2NyaXB0cy8yMDEzX0VjbGlwc2VDb25GcmFuY2UvaW1hZ2VzL0ludGVudC9mZWVkYmFjay5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcGFnZXMvdHJhbnNjcmlwdHMvMjAxM19FY2xpcHNlQ29uRnJhbmNlL2ltYWdlcy9JbnRlbnQvZnV0dXJlLmpwZyBiL3BhZ2VzL3RyYW5zY3JpcHRzLzIwMTNfRWNsaXBzZUNvbkZyYW5jZS9pbWFnZXMvSW50ZW50L2Z1dHVyZS5qcGcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTVmOTQ2ZAotLS0gL2Rldi9udWxsCisrKyBiL3BhZ2VzL3RyYW5zY3JpcHRzLzIwMTNfRWNsaXBzZUNvbkZyYW5jZS9pbWFnZXMvSW50ZW50L2Z1dHVyZS5qcGcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcGFnZXMvdHJhbnNjcmlwdHMvMjAxM19FY2xpcHNlQ29uRnJhbmNlL2ltYWdlcy9JbnRlbnQvaW5BY3Rpb24uanBnIGIvcGFnZXMvdHJhbnNjcmlwdHMvMjAxM19FY2xpcHNlQ29uRnJhbmNlL2ltYWdlcy9JbnRlbnQvaW5BY3Rpb24uanBnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRiMzUzNDUKLS0tIC9kZXYvbnVsbAorKysgYi9wYWdlcy90cmFuc2NyaXB0cy8yMDEzX0VjbGlwc2VDb25GcmFuY2UvaW1hZ2VzL0ludGVudC9pbkFjdGlvbi5qcGcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcGFnZXMvdHJhbnNjcmlwdHMvMjAxM19FY2xpcHNlQ29uRnJhbmNlL2ltYWdlcy9JbnRlbnQvbGlua2VkX2RvYy5wbmcgYi9wYWdlcy90cmFuc2NyaXB0cy8yMDEzX0VjbGlwc2VDb25GcmFuY2UvaW1hZ2VzL0ludGVudC9saW5rZWRfZG9jLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMDVjMmI4Ci0tLSAvZGV2L251bGwKKysrIGIvcGFnZXMvdHJhbnNjcmlwdHMvMjAxM19FY2xpcHNlQ29uRnJhbmNlL2ltYWdlcy9JbnRlbnQvbGlua2VkX2RvYy5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcGFnZXMvdHJhbnNjcmlwdHMvMjAxM19FY2xpcHNlQ29uRnJhbmNlL2ltYWdlcy9JbnRlbnQvbGlua2VkX2RvYzIucG5nIGIvcGFnZXMvdHJhbnNjcmlwdHMvMjAxM19FY2xpcHNlQ29uRnJhbmNlL2ltYWdlcy9JbnRlbnQvbGlua2VkX2RvYzIucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNkZTU3YjcKLS0tIC9kZXYvbnVsbAorKysgYi9wYWdlcy90cmFuc2NyaXB0cy8yMDEzX0VjbGlwc2VDb25GcmFuY2UvaW1hZ2VzL0ludGVudC9saW5rZWRfZG9jMi5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcGFnZXMvdHJhbnNjcmlwdHMvMjAxM19FY2xpcHNlQ29uRnJhbmNlL2ltYWdlcy9JbnRlbnQvbGlua2VkX2RvY19zdGVwMmEucG5nIGIvcGFnZXMvdHJhbnNjcmlwdHMvMjAxM19FY2xpcHNlQ29uRnJhbmNlL2ltYWdlcy9JbnRlbnQvbGlua2VkX2RvY19zdGVwMmEucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBjMzc4Y2YKLS0tIC9kZXYvbnVsbAorKysgYi9wYWdlcy90cmFuc2NyaXB0cy8yMDEzX0VjbGlwc2VDb25GcmFuY2UvaW1hZ2VzL0ludGVudC9saW5rZWRfZG9jX3N0ZXAyYS5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcGFnZXMvdHJhbnNjcmlwdHMvMjAxM19FY2xpcHNlQ29uRnJhbmNlL2ltYWdlcy9JbnRlbnQvbGlua2VkX2RvY19zdGVwNWIucG5nIGIvcGFnZXMvdHJhbnNjcmlwdHMvMjAxM19FY2xpcHNlQ29uRnJhbmNlL2ltYWdlcy9JbnRlbnQvbGlua2VkX2RvY19zdGVwNWIucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAxMjRiMGIKLS0tIC9kZXYvbnVsbAorKysgYi9wYWdlcy90cmFuc2NyaXB0cy8yMDEzX0VjbGlwc2VDb25GcmFuY2UvaW1hZ2VzL0ludGVudC9saW5rZWRfZG9jX3N0ZXA1Yi5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcGFnZXMvdHJhbnNjcmlwdHMvMjAxM19FY2xpcHNlQ29uRnJhbmNlL2ltYWdlcy9JbnRlbnQvbmVlZF95b3UuanBnIGIvcGFnZXMvdHJhbnNjcmlwdHMvMjAxM19FY2xpcHNlQ29uRnJhbmNlL2ltYWdlcy9JbnRlbnQvbmVlZF95b3UuanBnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA2Nzc3MGUKLS0tIC9kZXYvbnVsbAorKysgYi9wYWdlcy90cmFuc2NyaXB0cy8yMDEzX0VjbGlwc2VDb25GcmFuY2UvaW1hZ2VzL0ludGVudC9uZWVkX3lvdS5qcGcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcGFnZXMvdHJhbnNjcmlwdHMvMjAxM19FY2xpcHNlQ29uRnJhbmNlL2ltYWdlcy9JbnRlbnQvcGFydDIuanBnIGIvcGFnZXMvdHJhbnNjcmlwdHMvMjAxM19FY2xpcHNlQ29uRnJhbmNlL2ltYWdlcy9JbnRlbnQvcGFydDIuanBnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI3NmFkNjAKLS0tIC9kZXYvbnVsbAorKysgYi9wYWdlcy90cmFuc2NyaXB0cy8yMDEzX0VjbGlwc2VDb25GcmFuY2UvaW1hZ2VzL0ludGVudC9wYXJ0Mi5qcGcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcGFnZXMvdHJhbnNjcmlwdHMvMjAxM19FY2xpcHNlQ29uRnJhbmNlL2ltYWdlcy9JbnRlbnQvc2hhcmUxLmpwZyBiL3BhZ2VzL3RyYW5zY3JpcHRzLzIwMTNfRWNsaXBzZUNvbkZyYW5jZS9pbWFnZXMvSW50ZW50L3NoYXJlMS5qcGcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDJkMzc1MgotLS0gL2Rldi9udWxsCisrKyBiL3BhZ2VzL3RyYW5zY3JpcHRzLzIwMTNfRWNsaXBzZUNvbkZyYW5jZS9pbWFnZXMvSW50ZW50L3NoYXJlMS5qcGcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcGFnZXMvdHJhbnNjcmlwdHMvMjAxM19FY2xpcHNlQ29uRnJhbmNlL2ltYWdlcy9JbnRlbnQvc2hvcnRfc2lnaHQuanBnIGIvcGFnZXMvdHJhbnNjcmlwdHMvMjAxM19FY2xpcHNlQ29uRnJhbmNlL2ltYWdlcy9JbnRlbnQvc2hvcnRfc2lnaHQuanBnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlmYjBlZDgKLS0tIC9kZXYvbnVsbAorKysgYi9wYWdlcy90cmFuc2NyaXB0cy8yMDEzX0VjbGlwc2VDb25GcmFuY2UvaW1hZ2VzL0ludGVudC9zaG9ydF9zaWdodC5qcGcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcGFnZXMvdHJhbnNjcmlwdHMvMjAxM19FY2xpcHNlQ29uRnJhbmNlL2ltYWdlcy9JbnRlbnQvc21hcnRlYV9zY3JlZW5zaG90LnBuZyBiL3BhZ2VzL3RyYW5zY3JpcHRzLzIwMTNfRWNsaXBzZUNvbkZyYW5jZS9pbWFnZXMvSW50ZW50L3NtYXJ0ZWFfc2NyZWVuc2hvdC5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjc4NDBhNAotLS0gL2Rldi9udWxsCisrKyBiL3BhZ2VzL3RyYW5zY3JpcHRzLzIwMTNfRWNsaXBzZUNvbkZyYW5jZS9pbWFnZXMvSW50ZW50L3NtYXJ0ZWFfc2NyZWVuc2hvdC5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcGFnZXMvdHJhbnNjcmlwdHMvMjAxM19FY2xpcHNlQ29uRnJhbmNlL2ltYWdlcy9JbnRlbnQvc3luYzAxLnBuZyBiL3BhZ2VzL3RyYW5zY3JpcHRzLzIwMTNfRWNsaXBzZUNvbkZyYW5jZS9pbWFnZXMvSW50ZW50L3N5bmMwMS5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGNlZGMzYwotLS0gL2Rldi9udWxsCisrKyBiL3BhZ2VzL3RyYW5zY3JpcHRzLzIwMTNfRWNsaXBzZUNvbkZyYW5jZS9pbWFnZXMvSW50ZW50L3N5bmMwMS5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcGFnZXMvdHJhbnNjcmlwdHMvMjAxM19FY2xpcHNlQ29uRnJhbmNlL2ltYWdlcy9JbnRlbnQvc3luYzAyLnBuZyBiL3BhZ2VzL3RyYW5zY3JpcHRzLzIwMTNfRWNsaXBzZUNvbkZyYW5jZS9pbWFnZXMvSW50ZW50L3N5bmMwMi5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWQ5MmVmZQotLS0gL2Rldi9udWxsCisrKyBiL3BhZ2VzL3RyYW5zY3JpcHRzLzIwMTNfRWNsaXBzZUNvbkZyYW5jZS9pbWFnZXMvSW50ZW50L3N5bmMwMi5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcGFnZXMvdHJhbnNjcmlwdHMvMjAxM19FY2xpcHNlQ29uRnJhbmNlL2ltYWdlcy9JbnRlbnQvc3luYzAzLnBuZyBiL3BhZ2VzL3RyYW5zY3JpcHRzLzIwMTNfRWNsaXBzZUNvbkZyYW5jZS9pbWFnZXMvSW50ZW50L3N5bmMwMy5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjk5NDYxZAotLS0gL2Rldi9udWxsCisrKyBiL3BhZ2VzL3RyYW5zY3JpcHRzLzIwMTNfRWNsaXBzZUNvbkZyYW5jZS9pbWFnZXMvSW50ZW50L3N5bmMwMy5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcGFnZXMvdHJhbnNjcmlwdHMvMjAxM19FY2xpcHNlQ29uRnJhbmNlL2ltYWdlcy9JbnRlbnQvdW5jbGUtc2FtLmpwZyBiL3BhZ2VzL3RyYW5zY3JpcHRzLzIwMTNfRWNsaXBzZUNvbkZyYW5jZS9pbWFnZXMvSW50ZW50L3VuY2xlLXNhbS5qcGcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDY3NzcwZQotLS0gL2Rldi9udWxsCisrKyBiL3BhZ2VzL3RyYW5zY3JpcHRzLzIwMTNfRWNsaXBzZUNvbkZyYW5jZS9pbWFnZXMvSW50ZW50L3VuY2xlLXNhbS5qcGcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcGFnZXMvdHJhbnNjcmlwdHMvMjAxM19FY2xpcHNlQ29uRnJhbmNlL2ltYWdlcy9JbnRlbnQvd2ViX2V4cG9ydC5wbmcgYi9wYWdlcy90cmFuc2NyaXB0cy8yMDEzX0VjbGlwc2VDb25GcmFuY2UvaW1hZ2VzL0ludGVudC93ZWJfZXhwb3J0LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZDc4YjQ0Ci0tLSAvZGV2L251bGwKKysrIGIvcGFnZXMvdHJhbnNjcmlwdHMvMjAxM19FY2xpcHNlQ29uRnJhbmNlL2ltYWdlcy9JbnRlbnQvd2ViX2V4cG9ydC5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcGFnZXMvdHJhbnNjcmlwdHMvMjAxM19FY2xpcHNlQ29uRnJhbmNlL2ltYWdlcy9jb250YWN0L3R3aXR0ZXIuanBnIGIvcGFnZXMvdHJhbnNjcmlwdHMvMjAxM19FY2xpcHNlQ29uRnJhbmNlL2ltYWdlcy9jb250YWN0L3R3aXR0ZXIuanBnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJhMGUxODgKLS0tIC9kZXYvbnVsbAorKysgYi9wYWdlcy90cmFuc2NyaXB0cy8yMDEzX0VjbGlwc2VDb25GcmFuY2UvaW1hZ2VzL2NvbnRhY3QvdHdpdHRlci5qcGcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcGFnZXMvdHJhbnNjcmlwdHMvMjAxM19FY2xpcHNlQ29uRnJhbmNlL2ltYWdlcy9jb250YWN0L3dlYnNpdGUucG5nIGIvcGFnZXMvdHJhbnNjcmlwdHMvMjAxM19FY2xpcHNlQ29uRnJhbmNlL2ltYWdlcy9jb250YWN0L3dlYnNpdGUucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEwZDJlZDQKLS0tIC9kZXYvbnVsbAorKysgYi9wYWdlcy90cmFuc2NyaXB0cy8yMDEzX0VjbGlwc2VDb25GcmFuY2UvaW1hZ2VzL2NvbnRhY3Qvd2Vic2l0ZS5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvcGFnZXMvdHJhbnNjcmlwdHMvMjAxM19FY2xpcHNlQ29uRnJhbmNlL2pzL2hhbW1lci5qcyBiL3BhZ2VzL3RyYW5zY3JpcHRzLzIwMTNfRWNsaXBzZUNvbkZyYW5jZS9qcy9oYW1tZXIuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDRhNTgwMgotLS0gL2Rldi9udWxsCisrKyBiL3BhZ2VzL3RyYW5zY3JpcHRzLzIwMTNfRWNsaXBzZUNvbkZyYW5jZS9qcy9oYW1tZXIuanMKQEAgLTAsMCArMSw1ODYgQEAKKy8qCisgKiBIYW1tZXIuSlMKKyAqIHZlcnNpb24gMC40CisgKiBhdXRob3I6IEVpZ2h0IE1lZGlhCisgKiBodHRwczovL2dpdGh1Yi5jb20vRWlnaHRNZWRpYS9oYW1tZXIuanMKKyAqLworZnVuY3Rpb24gSGFtbWVyKGVsZW1lbnQsIG9wdGlvbnMsIHVuZGVmaW5lZCkKK3sKKyAgICB2YXIgc2VsZiA9IHRoaXM7CisKKyAgICB2YXIgZGVmYXVsdHMgPSB7CisgICAgICAgIC8vIHByZXZlbnQgdGhlIGRlZmF1bHQgZXZlbnQgb3Igbm90Li4uIG1pZ2h0IGJlIGJ1Z2d5IHdoZW4gZmFsc2UKKyAgICAgICAgcHJldmVudF9kZWZhdWx0ICAgIDogZmFsc2UsCisgICAgICAgIGNzc19oYWNrcyAgICAgICAgICA6IHRydWUsCisKKyAgICAgICAgZHJhZyAgICAgICAgICAgICAgIDogdHJ1ZSwKKyAgICAgICAgZHJhZ192ZXJ0aWNhbCAgICAgIDogdHJ1ZSwKKyAgICAgICAgZHJhZ19ob3Jpem9udGFsICAgIDogdHJ1ZSwKKyAgICAgICAgLy8gbWluaW11bSBkaXN0YW5jZSBiZWZvcmUgdGhlIGRyYWcgZXZlbnQgc3RhcnRzCisgICAgICAgIGRyYWdfbWluX2Rpc3RhbmNlICA6IDIwLCAvLyBwaXhlbHMKKworICAgICAgICAvLyBwaW5jaCB6b29tIGFuZCByb3RhdGlvbgorICAgICAgICB0cmFuc2Zvcm0gICAgICAgICAgOiB0cnVlLAorICAgICAgICBzY2FsZV90cmVzaG9sZCAgICAgOiAwLjEsCisgICAgICAgIHJvdGF0aW9uX3RyZXNob2xkICA6IDE1LCAvLyBkZWdyZWVzCisKKyAgICAgICAgdGFwICAgICAgICAgICAgICAgIDogdHJ1ZSwKKyAgICAgICAgdGFwX2RvdWJsZSAgICAgICAgIDogdHJ1ZSwKKyAgICAgICAgdGFwX21heF9pbnRlcnZhbCAgIDogMzAwLAorICAgICAgICB0YXBfZG91YmxlX2Rpc3RhbmNlOiAyMCwKKworICAgICAgICBob2xkICAgICAgICAgICAgICAgOiB0cnVlLAorICAgICAgICBob2xkX3RpbWVvdXQgICAgICAgOiA1MDAKKyAgICB9OworICAgIG9wdGlvbnMgPSBtZXJnZU9iamVjdChkZWZhdWx0cywgb3B0aW9ucyk7CisKKyAgICAvLyBzb21lIGNzcyBoYWNrcworICAgIChmdW5jdGlvbigpIHsKKyAgICAgICAgaWYoIW9wdGlvbnMuY3NzX2hhY2tzKSB7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKworICAgICAgICB2YXIgdmVuZG9ycyA9IFsnd2Via2l0JywnbW96JywnbXMnLCdvJywnJ107CisgICAgICAgIHZhciBjc3NfcHJvcHMgPSB7CisgICAgICAgICAgICAidXNlclNlbGVjdCI6ICJub25lIiwKKyAgICAgICAgICAgICJ0b3VjaENhbGxvdXQiOiAibm9uZSIsCisgICAgICAgICAgICAidXNlckRyYWciOiAibm9uZSIsCisgICAgICAgICAgICAidGFwSGlnaGxpZ2h0Q29sb3IiOiAicmdiYSgwLDAsMCwwKSIKKyAgICAgICAgfTsKKworICAgICAgICB2YXIgcHJvcCA9ICcnOworICAgICAgICBmb3IodmFyIGkgPSAwOyBpIDwgdmVuZG9ycy5sZW5ndGg7IGkrKykgeworICAgICAgICAgICAgZm9yKHZhciBwIGluIGNzc19wcm9wcykgeworICAgICAgICAgICAgICAgIHByb3AgPSBwOworICAgICAgICAgICAgICAgIGlmKHZlbmRvcnNbaV0pIHsKKyAgICAgICAgICAgICAgICAgICAgcHJvcCA9IHZlbmRvcnNbaV0gKyBwcm9wLnN1YnN0cmluZygwLCAxKS50b1VwcGVyQ2FzZSgpICsgcHJvcC5zdWJzdHJpbmcoMSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsZW1lbnQuc3R5bGVbIHByb3AgXSA9IGNzc19wcm9wc1twXTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0pKCk7CisKKyAgICAvLyBob2xkcyB0aGUgZGlzdGFuY2UgdGhhdCBoYXMgYmVlbiBtb3ZlZAorICAgIHZhciBfZGlzdGFuY2UgPSAwOworCisgICAgLy8gaG9sZHMgdGhlIGV4YWN0IGFuZ2xlIHRoYXQgaGFzIGJlZW4gbW92ZWQKKyAgICB2YXIgX2FuZ2xlID0gMDsKKworICAgIC8vIGhvbGRzIHRoZSBkaXJhY3Rpb24gdGhhdCBoYXMgYmVlbiBtb3ZlZAorICAgIHZhciBfZGlyZWN0aW9uID0gMDsKKworICAgIC8vIGhvbGRzIHBvc2l0aW9uIG1vdmVtZW50IGZvciBzbGlkaW5nCisgICAgdmFyIF9wb3MgPSB7IH07CisKKyAgICAvLyBob3cgbWFueSBmaW5nZXJzIGFyZSBvbiB0aGUgc2NyZWVuCisgICAgdmFyIF9maW5nZXJzID0gMDsKKworICAgIHZhciBfZmlyc3QgPSBmYWxzZTsKKworICAgIHZhciBfZ2VzdHVyZSA9IG51bGw7CisgICAgdmFyIF9wcmV2X2dlc3R1cmUgPSBudWxsOworCisgICAgdmFyIF90b3VjaF9zdGFydF90aW1lID0gbnVsbDsKKyAgICB2YXIgX3ByZXZfdGFwX3BvcyA9IHt4OiAwLCB5OiAwfTsKKyAgICB2YXIgX3ByZXZfdGFwX2VuZF90aW1lID0gbnVsbDsKKworICAgIHZhciBfaG9sZF90aW1lciA9IG51bGw7CisKKyAgICB2YXIgX29mZnNldCA9IHt9OworCisgICAgLy8ga2VlcCB0cmFjayBvZiB0aGUgbW91c2Ugc3RhdHVzCisgICAgdmFyIF9tb3VzZWRvd24gPSBmYWxzZTsKKworICAgIHZhciBfZXZlbnRfc3RhcnQ7CisgICAgdmFyIF9ldmVudF9tb3ZlOworICAgIHZhciBfZXZlbnRfZW5kOworCisKKyAgICAvKioKKyAgICAgKiBhbmdsZSB0byBkaXJlY3Rpb24gZGVmaW5lCisgICAgICogQHBhcmFtICBmbG9hdCAgICBhbmdsZQorICAgICAqIEByZXR1cm4gc3RyaW5nICAgZGlyZWN0aW9uCisgICAgICovCisgICAgdGhpcy5nZXREaXJlY3Rpb25Gcm9tQW5nbGUgPSBmdW5jdGlvbiggYW5nbGUgKQorICAgIHsKKyAgICAgICAgdmFyIGRpcmVjdGlvbnMgPSB7CisgICAgICAgICAgICBkb3duOiBhbmdsZSA+PSA0NSAmJiBhbmdsZSA8IDEzNSwgLy85MAorICAgICAgICAgICAgbGVmdDogYW5nbGUgPj0gMTM1IHx8IGFuZ2xlIDw9IC0xMzUsIC8vMTgwCisgICAgICAgICAgICB1cDogYW5nbGUgPCAtNDUgJiYgYW5nbGUgPiAtMTM1LCAvLzI3MAorICAgICAgICAgICAgcmlnaHQ6IGFuZ2xlID49IC00NSAmJiBhbmdsZSA8PSA0NSAvLzAKKyAgICAgICAgfTsKKworICAgICAgICB2YXIgZGlyZWN0aW9uLCBrZXk7CisgICAgICAgIGZvcihrZXkgaW4gZGlyZWN0aW9ucyl7CisgICAgICAgICAgICBpZihkaXJlY3Rpb25zW2tleV0peworICAgICAgICAgICAgICAgIGRpcmVjdGlvbiA9IGtleTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gZGlyZWN0aW9uOworICAgIH07CisKKworICAgIC8qKgorICAgICAqIGNvdW50IHRoZSBudW1iZXIgb2YgZmluZ2VycyBpbiB0aGUgZXZlbnQKKyAgICAgKiB3aGVuIG5vIGZpbmdlcnMgYXJlIGRldGVjdGVkLCBvbmUgZmluZ2VyIGlzIHJldHVybmVkIChtb3VzZSBwb2ludGVyKQorICAgICAqIEBwYXJhbSAgZXZlbnQKKyAgICAgKiBAcmV0dXJuIGludCAgZmluZ2VycworICAgICAqLworICAgIGZ1bmN0aW9uIGNvdW50RmluZ2VycyggZXZlbnQgKQorICAgIHsKKyAgICAgICAgLy8gdGhlcmUgaXMgYSBidWcgb24gYW5kcm9pZCAodW50aWwgdjQ/KSB0aGF0IHRvdWNoZXMgaXMgYWx3YXlzIDEsCisgICAgICAgIC8vIHNvIG5vIG11bHRpdG91Y2ggaXMgc3VwcG9ydGVkLCBlLmcuIG5vLCB6b29tIGFuZCByb3RhdGlvbi4uLgorICAgICAgICByZXR1cm4gZXZlbnQudG91Y2hlcyA/IGV2ZW50LnRvdWNoZXMubGVuZ3RoIDogMTsKKyAgICB9CisKKworICAgIC8qKgorICAgICAqIGdldCB0aGUgeCBhbmQgeSBwb3NpdGlvbnMgZnJvbSB0aGUgZXZlbnQgb2JqZWN0CisgICAgICogQHBhcmFtICBldmVudAorICAgICAqIEByZXR1cm4gYXJyYXkgIFt7IHg6IGludCwgeTogaW50IH1dCisgICAgICovCisgICAgZnVuY3Rpb24gZ2V0WFlmcm9tRXZlbnQoIGV2ZW50ICkKKyAgICB7CisgICAgICAgIGV2ZW50ID0gZXZlbnQgfHwgd2luZG93LmV2ZW50OworCisgICAgICAgIC8vIG5vIHRvdWNoZXMsIHVzZSB0aGUgZXZlbnQgcGFnZVggYW5kIHBhZ2VZCisgICAgICAgIGlmKCFldmVudC50b3VjaGVzKSB7CisgICAgICAgICAgICB2YXIgZG9jID0gZG9jdW1lbnQsCisgICAgICAgICAgICAgICAgYm9keSA9IGRvYy5ib2R5OworCisgICAgICAgICAgICByZXR1cm4gW3sKKyAgICAgICAgICAgICAgICB4OiBldmVudC5wYWdlWCB8fCBldmVudC5jbGllbnRYICsgKCBkb2MgJiYgZG9jLnNjcm9sbExlZnQgfHwgYm9keSAmJiBib2R5LnNjcm9sbExlZnQgfHwgMCApIC0gKCBkb2MgJiYgZG9jLmNsaWVudExlZnQgfHwgYm9keSAmJiBkb2MuY2xpZW50TGVmdCB8fCAwICksCisgICAgICAgICAgICAgICAgeTogZXZlbnQucGFnZVkgfHwgZXZlbnQuY2xpZW50WSArICggZG9jICYmIGRvYy5zY3JvbGxUb3AgfHwgYm9keSAmJiBib2R5LnNjcm9sbFRvcCB8fCAwICkgLSAoIGRvYyAmJiBkb2MuY2xpZW50VG9wIHx8IGJvZHkgJiYgZG9jLmNsaWVudFRvcCB8fCAwICkKKyAgICAgICAgICAgIH1dOworICAgICAgICB9CisgICAgICAgIC8vIG11bHRpdG91Y2gsIHJldHVybiBhcnJheSB3aXRoIHBvc2l0aW9ucworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHZhciBwb3MgPSBbXSwgc3JjOworICAgICAgICAgICAgZm9yKHZhciB0PTAsIGxlbj1ldmVudC50b3VjaGVzLmxlbmd0aDsgdDxsZW47IHQrKykgeworICAgICAgICAgICAgICAgIHNyYyA9IGV2ZW50LnRvdWNoZXNbdF07CisgICAgICAgICAgICAgICAgcG9zLnB1c2goeyB4OiBzcmMucGFnZVgsIHk6IHNyYy5wYWdlWSB9KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBwb3M7CisgICAgICAgIH0KKyAgICB9CisKKworICAgIC8qKgorICAgICAqIGNhbGN1bGF0ZSB0aGUgYW5nbGUgYmV0d2VlbiB0d28gcG9pbnRzCisgICAgICogQHBhcmFtIG9iamVjdCBwb3MxIHsgeDogaW50LCB5OiBpbnQgfQorICAgICAqIEBwYXJhbSBvYmplY3QgcG9zMiB7IHg6IGludCwgeTogaW50IH0KKyAgICAgKi8KKyAgICBmdW5jdGlvbiBnZXRBbmdsZSggcG9zMSwgcG9zMiApCisgICAgeworICAgICAgICByZXR1cm4gTWF0aC5hdGFuMihwb3MyLnkgLSBwb3MxLnksIHBvczIueCAtIHBvczEueCkgKiAxODAgLyBNYXRoLlBJOworICAgIH0KKworICAgIC8qKgorICAgICAqIHRyaWdnZXIgYW4gZXZlbnQvY2FsbGJhY2sgYnkgbmFtZSB3aXRoIHBhcmFtcworICAgICAqIEBwYXJhbSBzdHJpbmcgbmFtZQorICAgICAqIEBwYXJhbSBhcnJheSAgcGFyYW1zCisgICAgICovCisgICAgZnVuY3Rpb24gdHJpZ2dlckV2ZW50KCBldmVudE5hbWUsIHBhcmFtcyApCisgICAgeworICAgICAgICAvLyByZXR1cm4gdG91Y2hlcyBvYmplY3QKKyAgICAgICAgcGFyYW1zLnRvdWNoZXMgPSBnZXRYWWZyb21FdmVudChwYXJhbXMub3JpZ2luYWxFdmVudCk7CisgICAgICAgIHBhcmFtcy50eXBlID0gZXZlbnROYW1lOworCisgICAgICAgIC8vIHRyaWdnZXIgY2FsbGJhY2sKKyAgICAgICAgaWYoaXNGdW5jdGlvbihzZWxmWyJvbiIrIGV2ZW50TmFtZV0pKSB7CisgICAgICAgICAgICBzZWxmWyJvbiIrIGV2ZW50TmFtZV0uY2FsbChzZWxmLCBwYXJhbXMpOworICAgICAgICB9CisgICAgfQorCisKKyAgICAvKioKKyAgICAgKiBjYW5jZWwgZXZlbnQKKyAgICAgKiBAcGFyYW0gICBvYmplY3QgIGV2ZW50CisgICAgICogQHJldHVybiAgdm9pZAorICAgICAqLworCisgICAgZnVuY3Rpb24gY2FuY2VsRXZlbnQoZXZlbnQpeworICAgICAgICBldmVudCA9IGV2ZW50IHx8IHdpbmRvdy5ldmVudDsKKyAgICAgICAgaWYoZXZlbnQucHJldmVudERlZmF1bHQpeworICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTsKKyAgICAgICAgfWVsc2V7CisgICAgICAgICAgICBldmVudC5yZXR1cm5WYWx1ZSA9IGZhbHNlOworICAgICAgICAgICAgZXZlbnQuY2FuY2VsQnViYmxlID0gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0KKworCisgICAgLyoqCisgICAgICogcmVzZXQgdGhlIGludGVybmFsIHZhcnMgdG8gdGhlIHN0YXJ0IHZhbHVlcworICAgICAqLworICAgIGZ1bmN0aW9uIHJlc2V0KCkKKyAgICB7CisgICAgICAgIF9wb3MgPSB7fTsKKyAgICAgICAgX2ZpcnN0ID0gZmFsc2U7CisgICAgICAgIF9maW5nZXJzID0gMDsKKyAgICAgICAgX2Rpc3RhbmNlID0gMDsKKyAgICAgICAgX2FuZ2xlID0gMDsKKyAgICAgICAgX2dlc3R1cmUgPSBudWxsOworICAgIH0KKworCisgICAgdmFyIGdlc3R1cmVzID0geworICAgICAgICAvLyBob2xkIGdlc3R1cmUKKyAgICAgICAgLy8gZmlyZWQgb24gdG91Y2hzdGFydAorICAgICAgICBob2xkIDogZnVuY3Rpb24oZXZlbnQpCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIG9ubHkgd2hlbiBvbmUgZmluZ2VyIGlzIG9uIHRoZSBzY3JlZW4KKyAgICAgICAgICAgIGlmKG9wdGlvbnMuaG9sZCkgeworICAgICAgICAgICAgICAgIF9nZXN0dXJlID0gJ2hvbGQnOworICAgICAgICAgICAgICAgIGNsZWFyVGltZW91dChfaG9sZF90aW1lcik7CisKKyAgICAgICAgICAgICAgICBfaG9sZF90aW1lciA9IHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAgICAgIGlmKF9nZXN0dXJlID09ICdob2xkJykgeworICAgICAgICAgICAgICAgICAgICAgICAgdHJpZ2dlckV2ZW50KCJob2xkIiwgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yaWdpbmFsRXZlbnQgICA6IGV2ZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uICAgICAgICA6IF9wb3Muc3RhcnQKKyAgICAgICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfSwgb3B0aW9ucy5ob2xkX3RpbWVvdXQpOworICAgICAgICAgICAgfQorICAgICAgICB9LAorCisKKyAgICAgICAgLy8gZHJhZyBnZXN0dXJlCisgICAgICAgIC8vIGZpcmVkIG9uIG1vdXNlbW92ZQorICAgICAgICBkcmFnIDogZnVuY3Rpb24oZXZlbnQpCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIGdldCB0aGUgZGlzdGFuY2Ugd2UgbW92ZWQKKyAgICAgICAgICAgIHZhciBfZGlzdGFuY2VfeCA9IF9wb3MubW92ZVswXS54IC0gX3Bvcy5zdGFydFswXS54OworICAgICAgICAgICAgdmFyIF9kaXN0YW5jZV95ID0gX3Bvcy5tb3ZlWzBdLnkgLSBfcG9zLnN0YXJ0WzBdLnk7CisgICAgICAgICAgICBfZGlzdGFuY2UgPSBNYXRoLnNxcnQoX2Rpc3RhbmNlX3ggKiBfZGlzdGFuY2VfeCArIF9kaXN0YW5jZV95ICogX2Rpc3RhbmNlX3kpOworCisgICAgICAgICAgICAvLyBkcmFnCisgICAgICAgICAgICAvLyBtaW5pbWFsIG1vdmVtZW50IHJlcXVpcmVkCisgICAgICAgICAgICBpZihvcHRpb25zLmRyYWcgJiYgKF9kaXN0YW5jZSA+IG9wdGlvbnMuZHJhZ19taW5fZGlzdGFuY2UpIHx8IF9nZXN0dXJlID09ICdkcmFnJykgeworICAgICAgICAgICAgICAgIC8vIGNhbGN1bGF0ZSB0aGUgYW5nbGUKKyAgICAgICAgICAgICAgICBfYW5nbGUgPSBnZXRBbmdsZShfcG9zLnN0YXJ0WzBdLCBfcG9zLm1vdmVbMF0pOworICAgICAgICAgICAgICAgIF9kaXJlY3Rpb24gPSBzZWxmLmdldERpcmVjdGlvbkZyb21BbmdsZShfYW5nbGUpOworCisgICAgICAgICAgICAgICAgLy8gY2hlY2sgdGhlIG1vdmVtZW50IGFuZCBzdG9wIGlmIHdlIGdvIGluIHRoZSB3cm9uZyBkaXJlY3Rpb24KKyAgICAgICAgICAgICAgICB2YXIgaXNfdmVydGljYWwgPSAoX2RpcmVjdGlvbiA9PSAndXAnIHx8IF9kaXJlY3Rpb24gPT0gJ2Rvd24nKTsKKyAgICAgICAgICAgICAgICBpZigoKGlzX3ZlcnRpY2FsICYmICFvcHRpb25zLmRyYWdfdmVydGljYWwpIHx8ICghaXNfdmVydGljYWwgJiYgIW9wdGlvbnMuZHJhZ19ob3Jpem9udGFsKSkKKyAgICAgICAgICAgICAgICAgICAgJiYgKF9kaXN0YW5jZSA+IG9wdGlvbnMuZHJhZ19taW5fZGlzdGFuY2UpKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBfZ2VzdHVyZSA9ICdkcmFnJzsKKworICAgICAgICAgICAgICAgIHZhciBwb3NpdGlvbiA9IHsgeDogX3Bvcy5tb3ZlWzBdLnggLSBfb2Zmc2V0LmxlZnQsCisgICAgICAgICAgICAgICAgICAgIHk6IF9wb3MubW92ZVswXS55IC0gX29mZnNldC50b3AgfTsKKworICAgICAgICAgICAgICAgIHZhciBldmVudF9vYmogPSB7CisgICAgICAgICAgICAgICAgICAgIG9yaWdpbmFsRXZlbnQgICA6IGV2ZW50LAorICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbiAgICAgICAgOiBwb3NpdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgZGlyZWN0aW9uICAgICAgIDogX2RpcmVjdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgZGlzdGFuY2UgICAgICAgIDogX2Rpc3RhbmNlLAorICAgICAgICAgICAgICAgICAgICBkaXN0YW5jZVggICAgICAgOiBfZGlzdGFuY2VfeCwKKyAgICAgICAgICAgICAgICAgICAgZGlzdGFuY2VZICAgICAgIDogX2Rpc3RhbmNlX3ksCisgICAgICAgICAgICAgICAgICAgIGFuZ2xlICAgICAgICAgICA6IF9hbmdsZQorICAgICAgICAgICAgICAgIH07CisKKyAgICAgICAgICAgICAgICAvLyBvbiB0aGUgZmlyc3QgdGltZSB0cmlnZ2VyIHRoZSBzdGFydCBldmVudAorICAgICAgICAgICAgICAgIGlmKF9maXJzdCkgeworICAgICAgICAgICAgICAgICAgICB0cmlnZ2VyRXZlbnQoImRyYWdzdGFydCIsIGV2ZW50X29iaik7CisKKyAgICAgICAgICAgICAgICAgICAgX2ZpcnN0ID0gZmFsc2U7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgLy8gbm9ybWFsIHNsaWRlIGV2ZW50CisgICAgICAgICAgICAgICAgdHJpZ2dlckV2ZW50KCJkcmFnIiwgZXZlbnRfb2JqKTsKKworICAgICAgICAgICAgICAgIGNhbmNlbEV2ZW50KGV2ZW50KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSwKKworCisgICAgICAgIC8vIHRyYW5zZm9ybSBnZXN0dXJlCisgICAgICAgIC8vIGZpcmVkIG9uIHRvdWNobW92ZQorICAgICAgICB0cmFuc2Zvcm0gOiBmdW5jdGlvbihldmVudCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYob3B0aW9ucy50cmFuc2Zvcm0pIHsKKyAgICAgICAgICAgICAgICB2YXIgc2NhbGUgPSBldmVudC5zY2FsZSB8fCAxOworICAgICAgICAgICAgICAgIHZhciByb3RhdGlvbiA9IGV2ZW50LnJvdGF0aW9uIHx8IDA7CisKKyAgICAgICAgICAgICAgICBpZihjb3VudEZpbmdlcnMoZXZlbnQpICE9IDIpIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGlmKF9nZXN0dXJlICE9ICdkcmFnJyAmJgorICAgICAgICAgICAgICAgICAgICAoX2dlc3R1cmUgPT0gJ3RyYW5zZm9ybScgfHwgTWF0aC5hYnMoMS1zY2FsZSkgPiBvcHRpb25zLnNjYWxlX3RyZXNob2xkCisgICAgICAgICAgICAgICAgICAgICAgICB8fCBNYXRoLmFicyhyb3RhdGlvbikgPiBvcHRpb25zLnJvdGF0aW9uX3RyZXNob2xkKSkgeworICAgICAgICAgICAgICAgICAgICBfZ2VzdHVyZSA9ICd0cmFuc2Zvcm0nOworCisgICAgICAgICAgICAgICAgICAgIF9wb3MuY2VudGVyID0geyAgeDogKChfcG9zLm1vdmVbMF0ueCArIF9wb3MubW92ZVsxXS54KSAvIDIpIC0gX29mZnNldC5sZWZ0LAorICAgICAgICAgICAgICAgICAgICAgICAgeTogKChfcG9zLm1vdmVbMF0ueSArIF9wb3MubW92ZVsxXS55KSAvIDIpIC0gX29mZnNldC50b3AgfTsKKworICAgICAgICAgICAgICAgICAgICB2YXIgZXZlbnRfb2JqID0geworICAgICAgICAgICAgICAgICAgICAgICAgb3JpZ2luYWxFdmVudCAgIDogZXZlbnQsCisgICAgICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbiAgICAgICAgOiBfcG9zLmNlbnRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgIHNjYWxlICAgICAgICAgICA6IHNjYWxlLAorICAgICAgICAgICAgICAgICAgICAgICAgcm90YXRpb24gICAgICAgIDogcm90YXRpb24KKyAgICAgICAgICAgICAgICAgICAgfTsKKworICAgICAgICAgICAgICAgICAgICAvLyBvbiB0aGUgZmlyc3QgdGltZSB0cmlnZ2VyIHRoZSBzdGFydCBldmVudAorICAgICAgICAgICAgICAgICAgICBpZihfZmlyc3QpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRyaWdnZXJFdmVudCgidHJhbnNmb3Jtc3RhcnQiLCBldmVudF9vYmopOworICAgICAgICAgICAgICAgICAgICAgICAgX2ZpcnN0ID0gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICB0cmlnZ2VyRXZlbnQoInRyYW5zZm9ybSIsIGV2ZW50X29iaik7CisKKyAgICAgICAgICAgICAgICAgICAgY2FuY2VsRXZlbnQoZXZlbnQpOworCisgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9LAorCisKKyAgICAgICAgLy8gdGFwIGFuZCBkb3VibGUgdGFwIGdlc3R1cmUKKyAgICAgICAgLy8gZmlyZWQgb24gdG91Y2hlbmQKKyAgICAgICAgdGFwIDogZnVuY3Rpb24oZXZlbnQpCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIGNvbXBhcmUgdGhlIGtpbmQgb2YgZ2VzdHVyZSBieSB0aW1lCisgICAgICAgICAgICB2YXIgbm93ID0gbmV3IERhdGUoKS5nZXRUaW1lKCk7CisgICAgICAgICAgICB2YXIgdG91Y2hfdGltZSA9IG5vdyAtIF90b3VjaF9zdGFydF90aW1lOworCisgICAgICAgICAgICAvLyBkb250IGZpcmUgd2hlbiBob2xkIGlzIGZpcmVkCisgICAgICAgICAgICBpZihvcHRpb25zLmhvbGQgJiYgIShvcHRpb25zLmhvbGQgJiYgb3B0aW9ucy5ob2xkX3RpbWVvdXQgPiB0b3VjaF90aW1lKSkgeworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gd2hlbiBwcmV2aW91cyBldmVudCB3YXMgdGFwIGFuZCB0aGUgdGFwIHdhcyBtYXhfaW50ZXJ2YWwgbXMgYWdvCisgICAgICAgICAgICB2YXIgaXNfZG91YmxlX3RhcCA9IChmdW5jdGlvbigpeworICAgICAgICAgICAgICAgIGlmIChfcHJldl90YXBfcG9zICYmIG9wdGlvbnMudGFwX2RvdWJsZSAmJiBfcHJldl9nZXN0dXJlID09ICd0YXAnICYmIChfdG91Y2hfc3RhcnRfdGltZSAtIF9wcmV2X3RhcF9lbmRfdGltZSkgPCBvcHRpb25zLnRhcF9tYXhfaW50ZXJ2YWwpIHsKKyAgICAgICAgICAgICAgICAgICAgdmFyIHhfZGlzdGFuY2UgPSBNYXRoLmFicyhfcHJldl90YXBfcG9zWzBdLnggLSBfcG9zLnN0YXJ0WzBdLngpOworICAgICAgICAgICAgICAgICAgICB2YXIgeV9kaXN0YW5jZSA9IE1hdGguYWJzKF9wcmV2X3RhcF9wb3NbMF0ueSAtIF9wb3Muc3RhcnRbMF0ueSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAoX3ByZXZfdGFwX3BvcyAmJiBfcG9zLnN0YXJ0ICYmIE1hdGgubWF4KHhfZGlzdGFuY2UsIHlfZGlzdGFuY2UpIDwgb3B0aW9ucy50YXBfZG91YmxlX2Rpc3RhbmNlKTsKKworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9KSgpOworCisgICAgICAgICAgICBpZihpc19kb3VibGVfdGFwKSB7CisgICAgICAgICAgICAgICAgX2dlc3R1cmUgPSAnZG91YmxlX3RhcCc7CisgICAgICAgICAgICAgICAgX3ByZXZfdGFwX2VuZF90aW1lID0gbnVsbDsKKworICAgICAgICAgICAgICAgIHRyaWdnZXJFdmVudCgiZG91YmxldGFwIiwgeworICAgICAgICAgICAgICAgICAgICBvcmlnaW5hbEV2ZW50ICAgOiBldmVudCwKKyAgICAgICAgICAgICAgICAgICAgcG9zaXRpb24gICAgICAgIDogX3Bvcy5zdGFydAorICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgIGNhbmNlbEV2ZW50KGV2ZW50KTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gc2luZ2xlIHRhcCBpcyBzaW5nbGUgdG91Y2gKKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIF9nZXN0dXJlID0gJ3RhcCc7CisgICAgICAgICAgICAgICAgX3ByZXZfdGFwX2VuZF90aW1lID0gbm93OworICAgICAgICAgICAgICAgIF9wcmV2X3RhcF9wb3MgPSBfcG9zLnN0YXJ0OworCisgICAgICAgICAgICAgICAgaWYob3B0aW9ucy50YXApIHsKKyAgICAgICAgICAgICAgICAgICAgdHJpZ2dlckV2ZW50KCJ0YXAiLCB7CisgICAgICAgICAgICAgICAgICAgICAgICBvcmlnaW5hbEV2ZW50ICAgOiBldmVudCwKKyAgICAgICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uICAgICAgICA6IF9wb3Muc3RhcnQKKyAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAgICAgIGNhbmNlbEV2ZW50KGV2ZW50KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgfQorCisgICAgfTsKKworCisgICAgZnVuY3Rpb24gaGFuZGxlRXZlbnRzKGV2ZW50KQorICAgIHsKKyAgICAgICAgc3dpdGNoKGV2ZW50LnR5cGUpCisgICAgICAgIHsKKyAgICAgICAgICAgIGNhc2UgJ21vdXNlZG93bic6CisgICAgICAgICAgICBjYXNlICd0b3VjaHN0YXJ0JzoKKyAgICAgICAgICAgICAgICBfcG9zLnN0YXJ0ID0gZ2V0WFlmcm9tRXZlbnQoZXZlbnQpOworICAgICAgICAgICAgICAgIF90b3VjaF9zdGFydF90aW1lID0gbmV3IERhdGUoKS5nZXRUaW1lKCk7CisgICAgICAgICAgICAgICAgX2ZpbmdlcnMgPSBjb3VudEZpbmdlcnMoZXZlbnQpOworICAgICAgICAgICAgICAgIF9maXJzdCA9IHRydWU7CisgICAgICAgICAgICAgICAgX2V2ZW50X3N0YXJ0ID0gZXZlbnQ7CisKKyAgICAgICAgICAgICAgICAvLyBib3Jyb3dlZCBmcm9tIGpxdWVyeSBvZmZzZXQgaHR0cHM6Ly9naXRodWIuY29tL2pxdWVyeS9qcXVlcnkvYmxvYi9tYXN0ZXIvc3JjL29mZnNldC5qcworICAgICAgICAgICAgICAgIHZhciBib3ggPSBlbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpOworICAgICAgICAgICAgICAgIHZhciBjbGllbnRUb3AgID0gZWxlbWVudC5jbGllbnRUb3AgIHx8IGRvY3VtZW50LmJvZHkuY2xpZW50VG9wICB8fCAwOworICAgICAgICAgICAgICAgIHZhciBjbGllbnRMZWZ0ID0gZWxlbWVudC5jbGllbnRMZWZ0IHx8IGRvY3VtZW50LmJvZHkuY2xpZW50TGVmdCB8fCAwOworICAgICAgICAgICAgICAgIHZhciBzY3JvbGxUb3AgID0gd2luZG93LnBhZ2VZT2Zmc2V0IHx8IGVsZW1lbnQuc2Nyb2xsVG9wICB8fCBkb2N1bWVudC5ib2R5LnNjcm9sbFRvcDsKKyAgICAgICAgICAgICAgICB2YXIgc2Nyb2xsTGVmdCA9IHdpbmRvdy5wYWdlWE9mZnNldCB8fCBlbGVtZW50LnNjcm9sbExlZnQgfHwgZG9jdW1lbnQuYm9keS5zY3JvbGxMZWZ0OworCisgICAgICAgICAgICAgICAgX29mZnNldCA9IHsKKyAgICAgICAgICAgICAgICAgICAgdG9wOiBib3gudG9wICsgc2Nyb2xsVG9wIC0gY2xpZW50VG9wLAorICAgICAgICAgICAgICAgICAgICBsZWZ0OiBib3gubGVmdCArIHNjcm9sbExlZnQgLSBjbGllbnRMZWZ0CisgICAgICAgICAgICAgICAgfTsKKworICAgICAgICAgICAgICAgIF9tb3VzZWRvd24gPSB0cnVlOworCisgICAgICAgICAgICAgICAgLy8gaG9sZCBnZXN0dXJlCisgICAgICAgICAgICAgICAgZ2VzdHVyZXMuaG9sZChldmVudCk7CisKKyAgICAgICAgICAgICAgICBpZihvcHRpb25zLnByZXZlbnRfZGVmYXVsdCkgeworICAgICAgICAgICAgICAgICAgICBjYW5jZWxFdmVudChldmVudCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBjYXNlICdtb3VzZW1vdmUnOgorICAgICAgICAgICAgY2FzZSAndG91Y2htb3ZlJzoKKyAgICAgICAgICAgICAgICBpZighX21vdXNlZG93bikgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIF9ldmVudF9tb3ZlID0gZXZlbnQ7CisgICAgICAgICAgICAgICAgX3Bvcy5tb3ZlID0gZ2V0WFlmcm9tRXZlbnQoZXZlbnQpOworCisgICAgICAgICAgICAgICAgaWYoIWdlc3R1cmVzLnRyYW5zZm9ybShldmVudCkpIHsKKyAgICAgICAgICAgICAgICAgICAgZ2VzdHVyZXMuZHJhZyhldmVudCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBjYXNlICdtb3VzZXVwJzoKKyAgICAgICAgICAgIGNhc2UgJ21vdXNlb3V0JzoKKyAgICAgICAgICAgIGNhc2UgJ3RvdWNoY2FuY2VsJzoKKyAgICAgICAgICAgIGNhc2UgJ3RvdWNoZW5kJzoKKyAgICAgICAgICAgICAgICBpZighX21vdXNlZG93biB8fCAoX2dlc3R1cmUgIT0gJ3RyYW5zZm9ybScgJiYgZXZlbnQudG91Y2hlcyAmJiBldmVudC50b3VjaGVzLmxlbmd0aCA+IDApKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBfbW91c2Vkb3duID0gZmFsc2U7CisgICAgICAgICAgICAgICAgX2V2ZW50X2VuZCA9IGV2ZW50OworCisgICAgICAgICAgICAgICAgLy8gZHJhZyBnZXN0dXJlCisgICAgICAgICAgICAgICAgLy8gZHJhZ3N0YXJ0IGlzIHRyaWdnZXJlZCwgc28gZHJhZ2VuZCBpcyBwb3NzaWJsZQorICAgICAgICAgICAgICAgIGlmKF9nZXN0dXJlID09ICdkcmFnJykgeworICAgICAgICAgICAgICAgICAgICB0cmlnZ2VyRXZlbnQoImRyYWdlbmQiLCB7CisgICAgICAgICAgICAgICAgICAgICAgICBvcmlnaW5hbEV2ZW50ICAgOiBldmVudCwKKyAgICAgICAgICAgICAgICAgICAgICAgIGRpcmVjdGlvbiAgICAgICA6IF9kaXJlY3Rpb24sCisgICAgICAgICAgICAgICAgICAgICAgICBkaXN0YW5jZSAgICAgICAgOiBfZGlzdGFuY2UsCisgICAgICAgICAgICAgICAgICAgICAgICBhbmdsZSAgICAgICAgICAgOiBfYW5nbGUKKyAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgLy8gdHJhbnNmb3JtCisgICAgICAgICAgICAgICAgLy8gdHJhbnNmb3Jtc3RhcnQgaXMgdHJpZ2dlcmVkLCBzbyB0cmFuc2Zvcm1lZCBpcyBwb3NzaWJsZQorICAgICAgICAgICAgICAgIGVsc2UgaWYoX2dlc3R1cmUgPT0gJ3RyYW5zZm9ybScpIHsKKyAgICAgICAgICAgICAgICAgICAgdHJpZ2dlckV2ZW50KCJ0cmFuc2Zvcm1lbmQiLCB7CisgICAgICAgICAgICAgICAgICAgICAgICBvcmlnaW5hbEV2ZW50ICAgOiBldmVudCwKKyAgICAgICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uICAgICAgICA6IF9wb3MuY2VudGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgc2NhbGUgICAgICAgICAgIDogZXZlbnQuc2NhbGUsCisgICAgICAgICAgICAgICAgICAgICAgICByb3RhdGlvbiAgICAgICAgOiBldmVudC5yb3RhdGlvbgorICAgICAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGdlc3R1cmVzLnRhcChfZXZlbnRfc3RhcnQpOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIF9wcmV2X2dlc3R1cmUgPSBfZ2VzdHVyZTsKKworICAgICAgICAgICAgICAgIC8vIHJlc2V0IHZhcnMKKyAgICAgICAgICAgICAgICByZXNldCgpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorCisKKyAgICAvLyBiaW5kIGV2ZW50cyBmb3IgdG91Y2ggZGV2aWNlcworICAgIC8vIGV4Y2VwdCBmb3Igd2luZG93cyBwaG9uZSA3LjUsIGl0IGRvZXNudCBzdXBwb3J0IHRvdWNoIGV2ZW50cy4uIQorICAgIGlmKCdvbnRvdWNoc3RhcnQnIGluIHdpbmRvdykgeworICAgICAgICBlbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoInRvdWNoc3RhcnQiLCBoYW5kbGVFdmVudHMsIGZhbHNlKTsKKyAgICAgICAgZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCJ0b3VjaG1vdmUiLCBoYW5kbGVFdmVudHMsIGZhbHNlKTsKKyAgICAgICAgZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCJ0b3VjaGVuZCIsIGhhbmRsZUV2ZW50cywgZmFsc2UpOworICAgICAgICBlbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoInRvdWNoY2FuY2VsIiwgaGFuZGxlRXZlbnRzLCBmYWxzZSk7CisgICAgfQorICAgIC8vIGZvciBub24tdG91Y2gKKyAgICBlbHNlIHsKKworICAgICAgICBpZihlbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIpeyAvLyBwcmV2ZW50IG9sZCBJRSBlcnJvcnMKKyAgICAgICAgICAgIGVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigibW91c2VvdXQiLCBmdW5jdGlvbihldmVudCkgeworICAgICAgICAgICAgICAgIGlmKCFpc0luc2lkZUhhbW1lcihlbGVtZW50LCBldmVudC5yZWxhdGVkVGFyZ2V0KSkgeworICAgICAgICAgICAgICAgICAgICBoYW5kbGVFdmVudHMoZXZlbnQpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0sIGZhbHNlKTsKKyAgICAgICAgICAgIGVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigibW91c2V1cCIsIGhhbmRsZUV2ZW50cywgZmFsc2UpOworICAgICAgICAgICAgZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCJtb3VzZWRvd24iLCBoYW5kbGVFdmVudHMsIGZhbHNlKTsKKyAgICAgICAgICAgIGVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigibW91c2Vtb3ZlIiwgaGFuZGxlRXZlbnRzLCBmYWxzZSk7CisKKyAgICAgICAgICAgIC8vIGV2ZW50cyBmb3Igb2xkZXIgSUUKKyAgICAgICAgfWVsc2UgaWYoZG9jdW1lbnQuYXR0YWNoRXZlbnQpeworICAgICAgICAgICAgZWxlbWVudC5hdHRhY2hFdmVudCgib25tb3VzZW91dCIsIGZ1bmN0aW9uKGV2ZW50KSB7CisgICAgICAgICAgICAgICAgaWYoIWlzSW5zaWRlSGFtbWVyKGVsZW1lbnQsIGV2ZW50LnJlbGF0ZWRUYXJnZXQpKSB7CisgICAgICAgICAgICAgICAgICAgIGhhbmRsZUV2ZW50cyhldmVudCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSwgZmFsc2UpOworICAgICAgICAgICAgZWxlbWVudC5hdHRhY2hFdmVudCgib25tb3VzZXVwIiwgaGFuZGxlRXZlbnRzKTsKKyAgICAgICAgICAgIGVsZW1lbnQuYXR0YWNoRXZlbnQoIm9ubW91c2Vkb3duIiwgaGFuZGxlRXZlbnRzKTsKKyAgICAgICAgICAgIGVsZW1lbnQuYXR0YWNoRXZlbnQoIm9ubW91c2Vtb3ZlIiwgaGFuZGxlRXZlbnRzKTsKKyAgICAgICAgfQorICAgIH0KKworCisgICAgLyoqCisgICAgICogZmluZCBpZiBlbGVtZW50IGlzIChpbnNpZGUpIGdpdmVuIHBhcmVudCBlbGVtZW50CisgICAgICogQHBhcmFtICAgb2JqZWN0ICBlbGVtZW50CisgICAgICogQHBhcmFtICAgb2JqZWN0ICBwYXJlbnQKKyAgICAgKiBAcmV0dXJuICBib29sICAgIGluc2lkZQorICAgICAqLworICAgIGZ1bmN0aW9uIGlzSW5zaWRlSGFtbWVyKHBhcmVudCwgY2hpbGQpIHsKKyAgICAgICAgLy8gZ2V0IHJlbGF0ZWQgdGFyZ2V0IGZvciBJRQorICAgICAgICBpZighY2hpbGQgJiYgd2luZG93LmV2ZW50ICYmIHdpbmRvdy5ldmVudC50b0VsZW1lbnQpeworICAgICAgICAgICAgY2hpbGQgPSB3aW5kb3cuZXZlbnQudG9FbGVtZW50OworICAgICAgICB9CisKKyAgICAgICAgaWYocGFyZW50ID09PSBjaGlsZCl7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIGxvb3Agb3ZlciBwYXJlbnROb2RlcyBvZiBjaGlsZCB1bnRpbCB3ZSBmaW5kIGhhbW1lciBlbGVtZW50CisgICAgICAgIGlmKGNoaWxkKXsKKyAgICAgICAgICAgIHZhciBub2RlID0gY2hpbGQucGFyZW50Tm9kZTsKKyAgICAgICAgICAgIHdoaWxlKG5vZGUgIT09IG51bGwpeworICAgICAgICAgICAgICAgIGlmKG5vZGUgPT09IHBhcmVudCl7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgICAgIH07CisgICAgICAgICAgICAgICAgbm9kZSA9IG5vZGUucGFyZW50Tm9kZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisKKyAgICAvKioKKyAgICAgKiBtZXJnZSAyIG9iamVjdHMgaW50byBhIG5ldyBvYmplY3QKKyAgICAgKiBAcGFyYW0gICBvYmplY3QgIG9iajEKKyAgICAgKiBAcGFyYW0gICBvYmplY3QgIG9iajIKKyAgICAgKiBAcmV0dXJuICBvYmplY3QgIG1lcmdlZCBvYmplY3QKKyAgICAgKi8KKyAgICBmdW5jdGlvbiBtZXJnZU9iamVjdChvYmoxLCBvYmoyKSB7CisgICAgICAgIHZhciBvdXRwdXQgPSB7fTsKKworICAgICAgICBpZighb2JqMikgeworICAgICAgICAgICAgcmV0dXJuIG9iajE7CisgICAgICAgIH0KKworICAgICAgICBmb3IgKHZhciBwcm9wIGluIG9iajEpIHsKKyAgICAgICAgICAgIGlmIChwcm9wIGluIG9iajIpIHsKKyAgICAgICAgICAgICAgICBvdXRwdXRbcHJvcF0gPSBvYmoyW3Byb3BdOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBvdXRwdXRbcHJvcF0gPSBvYmoxW3Byb3BdOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiBvdXRwdXQ7CisgICAgfQorCisgICAgZnVuY3Rpb24gaXNGdW5jdGlvbiggb2JqICl7CisgICAgICAgIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoIG9iaiApID09ICJbb2JqZWN0IEZ1bmN0aW9uXSI7CisgICAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3BhZ2VzL3RyYW5zY3JpcHRzLzIwMTNfRWNsaXBzZUNvbkZyYW5jZS9qcy9tb2Rlcm5penIuY3VzdG9tLjQ1Mzk0LmpzIGIvcGFnZXMvdHJhbnNjcmlwdHMvMjAxM19FY2xpcHNlQ29uRnJhbmNlL2pzL21vZGVybml6ci5jdXN0b20uNDUzOTQuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjZmMzhjZAotLS0gL2Rldi9udWxsCisrKyBiL3BhZ2VzL3RyYW5zY3JpcHRzLzIwMTNfRWNsaXBzZUNvbkZyYW5jZS9qcy9tb2Rlcm5penIuY3VzdG9tLjQ1Mzk0LmpzCkBAIC0wLDAgKzEsNCBAQAorLyogTW9kZXJuaXpyIDIuNS4zIChDdXN0b20gQnVpbGQpIHwgTUlUICYgQlNECisgKiBCdWlsZDogaHR0cDovL3d3dy5tb2Rlcm5penIuY29tL2Rvd25sb2FkLyMtZm9udGZhY2UtYmFja2dyb3VuZHNpemUtYm9yZGVyaW1hZ2UtYm9yZGVycmFkaXVzLWJveHNoYWRvdy1mbGV4Ym94LWZsZXhib3hfbGVnYWN5LWhzbGEtbXVsdGlwbGViZ3Mtb3BhY2l0eS1yZ2JhLXRleHRzaGFkb3ctY3NzYW5pbWF0aW9ucy1jc3Njb2x1bW5zLWdlbmVyYXRlZGNvbnRlbnQtY3NzZ3JhZGllbnRzLWNzc3JlZmxlY3Rpb25zLWNzc3RyYW5zZm9ybXMtY3NzdHJhbnNmb3JtczNkLWNzc3RyYW5zaXRpb25zLWFwcGxpY2F0aW9uY2FjaGUtY2FudmFzLWNhbnZhc3RleHQtZHJhZ2FuZGRyb3AtaGFzaGNoYW5nZS1oaXN0b3J5LWF1ZGlvLXZpZGVvLWluZGV4ZWRkYi1pbnB1dC1pbnB1dHR5cGVzLWxvY2Fsc3RvcmFnZS1wb3N0bWVzc2FnZS1zZXNzaW9uc3RvcmFnZS13ZWJzb2NrZXRzLXdlYnNxbGRhdGFiYXNlLXdlYndvcmtlcnMtZ2VvbG9jYXRpb24taW5saW5lc3ZnLXNtaWwtc3ZnLXN2Z2NsaXBwYXRocy10b3VjaC13ZWJnbC1tcS1wcmVmaXhlZC10ZXN0c3R5bGVzLXRlc3Rwcm9wLXRlc3RhbGxwcm9wcy1oYXNldmVudC1wcmVmaXhlcy1kb21wcmVmaXhlcy1sb2FkCisgKi8KKzt3aW5kb3cuTW9kZXJuaXpyPWZ1bmN0aW9uKGEsYixjKXtmdW5jdGlvbiBDKGEpe2kuY3NzVGV4dD1hfWZ1bmN0aW9uIEQoYSxiKXtyZXR1cm4gQyhtLmpvaW4oYSsiOyIpKyhifHwiIikpfWZ1bmN0aW9uIEUoYSxiKXtyZXR1cm4gdHlwZW9mIGE9PT1ifWZ1bmN0aW9uIEYoYSxiKXtyZXR1cm4hIX4oIiIrYSkuaW5kZXhPZihiKX1mdW5jdGlvbiBHKGEsYil7Zm9yKHZhciBkIGluIGEpaWYoaVthW2RdXSE9PWMpcmV0dXJuIGI9PSJwZngiP2FbZF06ITA7cmV0dXJuITF9ZnVuY3Rpb24gSChhLGIsZCl7Zm9yKHZhciBlIGluIGEpe3ZhciBmPWJbYVtlXV07aWYoZiE9PWMpcmV0dXJuIGQ9PT0hMT9hW2VdOkUoZiwiZnVuY3Rpb24iKT9mLmJpbmQoZHx8Yik6Zn1yZXR1cm4hMX1mdW5jdGlvbiBJKGEsYixjKXt2YXIgZD1hLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpK2Euc3Vic3RyKDEpLGU9KGErIiAiK28uam9pbihkKyIgIikrZCkuc3BsaXQoIiAiKTtyZXR1cm4gRShiLCJzdHJpbmciKXx8RShiLCJ1bmRlZmluZWQiKT9HKGUsYik6KGU9KGErIiAiK3Auam9pbihkKyIgIikrZCkuc3BsaXQoIiAiKSxIKGUsYixjKSl9ZnVuY3Rpb24gSygpe2UuaW5wdXQ9ZnVuY3Rpb24oYyl7Zm9yKHZhciBkPTAsZT1jLmxlbmd0aDtkPGU7ZCsrKXRbY1tkXV09Y1tkXWluIGo7cmV0dXJuIHQubGlzdCYmKHQubGlzdD0hIWIuY3JlYXRlRWxlbWVudCgiZGF0YWxpc3QiKSYmISFhLkhUTUxEYXRhTGlzdEVsZW1lbnQpLHR9KCJhdXRvY29tcGxldGUgYXV0b2ZvY3VzIGxpc3QgcGxhY2Vob2xkZXIgbWF4IG1pbiBtdWx0aXBsZSBwYXR0ZXJuIHJlcXVpcmVkIHN0ZXAiLnNwbGl0KCIgIikpLGUuaW5wdXR0eXBlcz1mdW5jdGlvbihhKXtmb3IodmFyIGQ9MCxlLGcsaCxpPWEubGVuZ3RoO2Q8aTtkKyspai5zZXRBdHRyaWJ1dGUoInR5cGUiLGc9YVtkXSksZT1qLnR5cGUhPT0idGV4dCIsZSYmKGoudmFsdWU9ayxqLnN0eWxlLmNzc1RleHQ9InBvc2l0aW9uOmFic29sdXRlO3Zpc2liaWxpdHk6aGlkZGVuOyIsL15yYW5nZSQvLnRlc3QoZykmJmouc3R5bGUuV2Via2l0QXBwZWFyYW5jZSE9PWM/KGYuYXBwZW5kQ2hpbGQoaiksaD1iLmRlZmF1bHRWaWV3LGU9aC5nZXRDb21wdXRlZFN0eWxlJiZoLmdldENvbXB1dGVkU3R5bGUoaixudWxsKS5XZWJraXRBcHBlYXJhbmNlIT09InRleHRmaWVsZCImJmoub2Zmc2V0SGVpZ2h0IT09MCxmLnJlbW92ZUNoaWxkKGopKTovXihzZWFyY2h8dGVsKSQvLnRlc3QoZyl8fCgvXih1cmx8ZW1haWwpJC8udGVzdChnKT9lPWouY2hlY2tWYWxpZGl0eSYmai5jaGVja1ZhbGlkaXR5KCk9PT0hMTovXmNvbG9yJC8udGVzdChnKT8oZi5hcHBlbmRDaGlsZChqKSxmLm9mZnNldFdpZHRoLGU9ai52YWx1ZSE9ayxmLnJlbW92ZUNoaWxkKGopKTplPWoudmFsdWUhPWspKSxzW2FbZF1dPSEhZTtyZXR1cm4gc30oInNlYXJjaCB0ZWwgdXJsIGVtYWlsIGRhdGV0aW1lIGRhdGUgbW9udGggd2VlayB0aW1lIGRhdGV0aW1lLWxvY2FsIG51bWJlciByYW5nZSBjb2xvciIuc3BsaXQoIiAiKSl9dmFyIGQ9IjIuNS4zIixlPXt9LGY9Yi5kb2N1bWVudEVsZW1lbnQsZz0ibW9kZXJuaXpyIixoPWIuY3JlYXRlRWxlbWVudChnKSxpPWguc3R5bGUsaj1iLmNyZWF0ZUVsZW1lbnQoImlucHV0Iiksaz0iOikiLGw9e30udG9TdHJpbmcsbT0iIC13ZWJraXQtIC1tb3otIC1vLSAtbXMtICIuc3BsaXQoIiAiKSxuPSJXZWJraXQgTW96IE8gbXMiLG89bi5zcGxpdCgiICIpLHA9bi50b0xvd2VyQ2FzZSgpLnNwbGl0KCIgIikscT17c3ZnOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyJ9LHI9e30scz17fSx0PXt9LHU9W10sdj11LnNsaWNlLHcseD1mdW5jdGlvbihhLGMsZCxlKXt2YXIgaCxpLGosaz1iLmNyZWF0ZUVsZW1lbnQoImRpdiIpLGw9Yi5ib2R5LG09bD9sOmIuY3JlYXRlRWxlbWVudCgiYm9keSIpO2lmKHBhcnNlSW50KGQsMTApKXdoaWxlKGQtLSlqPWIuY3JlYXRlRWxlbWVudCgiZGl2Iiksai5pZD1lP2VbZF06ZysoZCsxKSxrLmFwcGVuZENoaWxkKGopO3JldHVybiBoPVsiJiMxNzM7IiwiPHN0eWxlPiIsYSwiPC9zdHlsZT4iXS5qb2luKCIiKSxrLmlkPWcsKGw/azptKS5pbm5lckhUTUwrPWgsbS5hcHBlbmRDaGlsZChrKSxsfHwobS5zdHlsZS5iYWNrZ3JvdW5kPSIiLGYuYXBwZW5kQ2hpbGQobSkpLGk9YyhrLGEpLGw/ay5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGspOm0ucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChtKSwhIWl9LHk9ZnVuY3Rpb24oYil7dmFyIGM9YS5tYXRjaE1lZGlhfHxhLm1zTWF0Y2hNZWRpYTtpZihjKXJldHVybiBjKGIpLm1hdGNoZXM7dmFyIGQ7cmV0dXJuIHgoIkBtZWRpYSAiK2IrIiB7ICMiK2crIiB7IHBvc2l0aW9uOiBhYnNvbHV0ZTsgfSB9IixmdW5jdGlvbihiKXtkPShhLmdldENvbXB1dGVkU3R5bGU/Z2V0Q29tcHV0ZWRTdHlsZShiLG51bGwpOmIuY3VycmVudFN0eWxlKVsicG9zaXRpb24iXT09ImFic29sdXRlIn0pLGR9LHo9ZnVuY3Rpb24oKXtmdW5jdGlvbiBkKGQsZSl7ZT1lfHxiLmNyZWF0ZUVsZW1lbnQoYVtkXXx8ImRpdiIpLGQ9Im9uIitkO3ZhciBmPWQgaW4gZTtyZXR1cm4gZnx8KGUuc2V0QXR0cmlidXRlfHwoZT1iLmNyZWF0ZUVsZW1lbnQoImRpdiIpKSxlLnNldEF0dHJpYnV0ZSYmZS5yZW1vdmVBdHRyaWJ1dGUmJihlLnNldEF0dHJpYnV0ZShkLCIiKSxmPUUoZVtkXSwiZnVuY3Rpb24iKSxFKGVbZF0sInVuZGVmaW5lZCIpfHwoZVtkXT1jKSxlLnJlbW92ZUF0dHJpYnV0ZShkKSkpLGU9bnVsbCxmfXZhciBhPXtzZWxlY3Q6ImlucHV0IixjaGFuZ2U6ImlucHV0IixzdWJtaXQ6ImZvcm0iLHJlc2V0OiJmb3JtIixlcnJvcjoiaW1nIixsb2FkOiJpbWciLGFib3J0OiJpbWcifTtyZXR1cm4gZH0oKSxBPXt9Lmhhc093blByb3BlcnR5LEI7IUUoQSwidW5kZWZpbmVkIikmJiFFKEEuY2FsbCwidW5kZWZpbmVkIik/Qj1mdW5jdGlvbihhLGIpe3JldHVybiBBLmNhbGwoYSxiKX06Qj1mdW5jdGlvbihhLGIpe3JldHVybiBiIGluIGEmJkUoYS5jb25zdHJ1Y3Rvci5wcm90b3R5cGVbYl0sInVuZGVmaW5lZCIpfSxGdW5jdGlvbi5wcm90b3R5cGUuYmluZHx8KEZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kPWZ1bmN0aW9uKGIpe3ZhciBjPXRoaXM7aWYodHlwZW9mIGMhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IFR5cGVFcnJvcjt2YXIgZD12LmNhbGwoYXJndW1lbnRzLDEpLGU9ZnVuY3Rpb24oKXtpZih0aGlzIGluc3RhbmNlb2YgZSl7dmFyIGE9ZnVuY3Rpb24oKXt9O2EucHJvdG90eXBlPWMucHJvdG90eXBlO3ZhciBmPW5ldyBhLGc9Yy5hcHBseShmLGQuY29uY2F0KHYuY2FsbChhcmd1bWVudHMpKSk7cmV0dXJuIE9iamVjdChnKT09PWc/ZzpmfXJldHVybiBjLmFwcGx5KGIsZC5jb25jYXQodi5jYWxsKGFyZ3VtZW50cykpKX07cmV0dXJuIGV9KTt2YXIgSj1mdW5jdGlvbihjLGQpe3ZhciBmPWMuam9pbigiIiksZz1kLmxlbmd0aDt4KGYsZnVuY3Rpb24oYyxkKXt2YXIgZj1iLnN0eWxlU2hlZXRzW2Iuc3R5bGVTaGVldHMubGVuZ3RoLTFdLGg9Zj9mLmNzc1J1bGVzJiZmLmNzc1J1bGVzWzBdP2YuY3NzUnVsZXNbMF0uY3NzVGV4dDpmLmNzc1RleHR8fCIiOiIiLGk9Yy5jaGlsZE5vZGVzLGo9e307d2hpbGUoZy0tKWpbaVtnXS5pZF09aVtnXTtlLnRvdWNoPSJvbnRvdWNoc3RhcnQiaW4gYXx8YS5Eb2N1bWVudFRvdWNoJiZiIGluc3RhbmNlb2YgRG9jdW1lbnRUb3VjaHx8KGoudG91Y2gmJmoudG91Y2gub2Zmc2V0VG9wKT09PTksZS5jc3N0cmFuc2Zvcm1zM2Q9KGouY3NzdHJhbnNmb3JtczNkJiZqLmNzc3RyYW5zZm9ybXMzZC5vZmZzZXRMZWZ0KT09PTkmJmouY3NzdHJhbnNmb3JtczNkLm9mZnNldEhlaWdodD09PTMsZS5nZW5lcmF0ZWRjb250ZW50PShqLmdlbmVyYXRlZGNvbnRlbnQmJmouZ2VuZXJhdGVkY29udGVudC5vZmZzZXRIZWlnaHQpPj0xLGUuZm9udGZhY2U9L3NyYy9pLnRlc3QoaCkmJmguaW5kZXhPZihkLnNwbGl0KCIgIilbMF0pPT09MH0sZyxkKX0oWydAZm9udC1mYWNlIHtmb250LWZhbWlseToiZm9udCI7c3JjOnVybCgiaHR0cHM6Ly8iKX0nLFsiQG1lZGlhICgiLG0uam9pbigidG91Y2gtZW5hYmxlZCksKCIpLGcsIikiLCJ7I3RvdWNoe3RvcDo5cHg7cG9zaXRpb246YWJzb2x1dGV9fSJdLmpvaW4oIiIpLFsiQG1lZGlhICgiLG0uam9pbigidHJhbnNmb3JtLTNkKSwoIiksZywiKSIsInsjY3NzdHJhbnNmb3JtczNke2xlZnQ6OXB4O3Bvc2l0aW9uOmFic29sdXRlO2hlaWdodDozcHg7fX0iXS5qb2luKCIiKSxbJyNnZW5lcmF0ZWRjb250ZW50OmFmdGVye2NvbnRlbnQ6IicsaywnIjt2aXNpYmlsaXR5OmhpZGRlbn0nXS5qb2luKCIiKV0sWyJmb250ZmFjZSIsInRvdWNoIiwiY3NzdHJhbnNmb3JtczNkIiwiZ2VuZXJhdGVkY29udGVudCJdKTtyLmZsZXhib3g9ZnVuY3Rpb24oKXtyZXR1cm4gSSgiZmxleE9yZGVyIil9LHJbImZsZXhib3gtbGVnYWN5Il09ZnVuY3Rpb24oKXtyZXR1cm4gSSgiYm94RGlyZWN0aW9uIil9LHIuY2FudmFzPWZ1bmN0aW9uKCl7dmFyIGE9Yi5jcmVhdGVFbGVtZW50KCJjYW52YXMiKTtyZXR1cm4hIWEuZ2V0Q29udGV4dCYmISFhLmdldENvbnRleHQoIjJkIil9LHIuY2FudmFzdGV4dD1mdW5jdGlvbigpe3JldHVybiEhZS5jYW52YXMmJiEhRShiLmNyZWF0ZUVsZW1lbnQoImNhbnZhcyIpLmdldENvbnRleHQoIjJkIikuZmlsbFRleHQsImZ1bmN0aW9uIil9LHIud2ViZ2w9ZnVuY3Rpb24oKXt0cnl7dmFyIGQ9Yi5jcmVhdGVFbGVtZW50KCJjYW52YXMiKSxlO2U9ISghYS5XZWJHTFJlbmRlcmluZ0NvbnRleHR8fCFkLmdldENvbnRleHQoImV4cGVyaW1lbnRhbC13ZWJnbCIpJiYhZC5nZXRDb250ZXh0KCJ3ZWJnbCIpKSxkPWN9Y2F0Y2goZil7ZT0hMX1yZXR1cm4gZX0sci50b3VjaD1mdW5jdGlvbigpe3JldHVybiBlLnRvdWNofSxyLmdlb2xvY2F0aW9uPWZ1bmN0aW9uKCl7cmV0dXJuISFuYXZpZ2F0b3IuZ2VvbG9jYXRpb259LHIucG9zdG1lc3NhZ2U9ZnVuY3Rpb24oKXtyZXR1cm4hIWEucG9zdE1lc3NhZ2V9LHIud2Vic3FsZGF0YWJhc2U9ZnVuY3Rpb24oKXtyZXR1cm4hIWEub3BlbkRhdGFiYXNlfSxyLmluZGV4ZWREQj1mdW5jdGlvbigpe3JldHVybiEhSSgiaW5kZXhlZERCIixhKX0sci5oYXNoY2hhbmdlPWZ1bmN0aW9uKCl7cmV0dXJuIHooImhhc2hjaGFuZ2UiLGEpJiYoYi5kb2N1bWVudE1vZGU9PT1jfHxiLmRvY3VtZW50TW9kZT43KX0sci5oaXN0b3J5PWZ1bmN0aW9uKCl7cmV0dXJuISFhLmhpc3RvcnkmJiEhaGlzdG9yeS5wdXNoU3RhdGV9LHIuZHJhZ2FuZGRyb3A9ZnVuY3Rpb24oKXt2YXIgYT1iLmNyZWF0ZUVsZW1lbnQoImRpdiIpO3JldHVybiJkcmFnZ2FibGUiaW4gYXx8Im9uZHJhZ3N0YXJ0ImluIGEmJiJvbmRyb3AiaW4gYX0sci53ZWJzb2NrZXRzPWZ1bmN0aW9uKCl7Zm9yKHZhciBiPS0xLGM9by5sZW5ndGg7KytiPGM7KWlmKGFbb1tiXSsiV2ViU29ja2V0Il0pcmV0dXJuITA7cmV0dXJuIldlYlNvY2tldCJpbiBhfSxyLnJnYmE9ZnVuY3Rpb24oKXtyZXR1cm4gQygiYmFja2dyb3VuZC1jb2xvcjpyZ2JhKDE1MCwyNTUsMTUwLC41KSIpLEYoaS5iYWNrZ3JvdW5kQ29sb3IsInJnYmEiKX0sci5oc2xhPWZ1bmN0aW9uKCl7cmV0dXJuIEMoImJhY2tncm91bmQtY29sb3I6aHNsYSgxMjAsNDAlLDEwMCUsLjUpIiksRihpLmJhY2tncm91bmRDb2xvciwicmdiYSIpfHxGKGkuYmFja2dyb3VuZENvbG9yLCJoc2xhIil9LHIubXVsdGlwbGViZ3M9ZnVuY3Rpb24oKXtyZXR1cm4gQygiYmFja2dyb3VuZDp1cmwoaHR0cHM6Ly8pLHVybChodHRwczovLykscmVkIHVybChodHRwczovLykiKSwvKHVybFxzKlwoLio/KXszfS8udGVzdChpLmJhY2tncm91bmQpfSxyLmJhY2tncm91bmRzaXplPWZ1bmN0aW9uKCl7cmV0dXJuIEkoImJhY2tncm91bmRTaXplIil9LHIuYm9yZGVyaW1hZ2U9ZnVuY3Rpb24oKXtyZXR1cm4gSSgiYm9yZGVySW1hZ2UiKX0sci5ib3JkZXJyYWRpdXM9ZnVuY3Rpb24oKXtyZXR1cm4gSSgiYm9yZGVyUmFkaXVzIil9LHIuYm94c2hhZG93PWZ1bmN0aW9uKCl7cmV0dXJuIEkoImJveFNoYWRvdyIpfSxyLnRleHRzaGFkb3c9ZnVuY3Rpb24oKXtyZXR1cm4gYi5jcmVhdGVFbGVtZW50KCJkaXYiKS5zdHlsZS50ZXh0U2hhZG93PT09IiJ9LHIub3BhY2l0eT1mdW5jdGlvbigpe3JldHVybiBEKCJvcGFjaXR5Oi41NSIpLC9eMC41NSQvLnRlc3QoaS5vcGFjaXR5KX0sci5jc3NhbmltYXRpb25zPWZ1bmN0aW9uKCl7cmV0dXJuIEkoImFuaW1hdGlvbk5hbWUiKX0sci5jc3Njb2x1bW5zPWZ1bmN0aW9uKCl7cmV0dXJuIEkoImNvbHVtbkNvdW50Iil9LHIuY3NzZ3JhZGllbnRzPWZ1bmN0aW9uKCl7dmFyIGE9ImJhY2tncm91bmQtaW1hZ2U6IixiPSJncmFkaWVudChsaW5lYXIsbGVmdCB0b3AscmlnaHQgYm90dG9tLGZyb20oIzlmOSksdG8od2hpdGUpKTsiLGM9ImxpbmVhci1ncmFkaWVudChsZWZ0IHRvcCwjOWY5LCB3aGl0ZSk7IjtyZXR1cm4gQygoYSsiLXdlYmtpdC0gIi5zcGxpdCgiICIpLmpvaW4oYithKSttLmpvaW4oYythKSkuc2xpY2UoMCwtYS5sZW5ndGgpKSxGKGkuYmFja2dyb3VuZEltYWdlLCJncmFkaWVudCIpfSxyLmNzc3JlZmxlY3Rpb25zPWZ1bmN0aW9uKCl7cmV0dXJuIEkoImJveFJlZmxlY3QiKX0sci5jc3N0cmFuc2Zvcm1zPWZ1bmN0aW9uKCl7cmV0dXJuISFJKCJ0cmFuc2Zvcm0iKX0sci5jc3N0cmFuc2Zvcm1zM2Q9ZnVuY3Rpb24oKXt2YXIgYT0hIUkoInBlcnNwZWN0aXZlIik7cmV0dXJuIGEmJiJ3ZWJraXRQZXJzcGVjdGl2ZSJpbiBmLnN0eWxlJiYoYT1lLmNzc3RyYW5zZm9ybXMzZCksYX0sci5jc3N0cmFuc2l0aW9ucz1mdW5jdGlvbigpe3JldHVybiBJKCJ0cmFuc2l0aW9uIil9LHIuZm9udGZhY2U9ZnVuY3Rpb24oKXtyZXR1cm4gZS5mb250ZmFjZX0sci5nZW5lcmF0ZWRjb250ZW50PWZ1bmN0aW9uKCl7cmV0dXJuIGUuZ2VuZXJhdGVkY29udGVudH0sci52aWRlbz1mdW5jdGlvbigpe3ZhciBhPWIuY3JlYXRlRWxlbWVudCgidmlkZW8iKSxjPSExO3RyeXtpZihjPSEhYS5jYW5QbGF5VHlwZSljPW5ldyBCb29sZWFuKGMpLGMub2dnPWEuY2FuUGxheVR5cGUoJ3ZpZGVvL29nZzsgY29kZWNzPSJ0aGVvcmEiJykucmVwbGFjZSgvXm5vJC8sIiIpLGMuaDI2ND1hLmNhblBsYXlUeXBlKCd2aWRlby9tcDQ7IGNvZGVjcz0iYXZjMS40MkUwMUUiJykucmVwbGFjZSgvXm5vJC8sIiIpLGMud2VibT1hLmNhblBsYXlUeXBlKCd2aWRlby93ZWJtOyBjb2RlY3M9InZwOCwgdm9yYmlzIicpLnJlcGxhY2UoL15ubyQvLCIiKX1jYXRjaChkKXt9cmV0dXJuIGN9LHIuYXVkaW89ZnVuY3Rpb24oKXt2YXIgYT1iLmNyZWF0ZUVsZW1lbnQoImF1ZGlvIiksYz0hMTt0cnl7aWYoYz0hIWEuY2FuUGxheVR5cGUpYz1uZXcgQm9vbGVhbihjKSxjLm9nZz1hLmNhblBsYXlUeXBlKCdhdWRpby9vZ2c7IGNvZGVjcz0idm9yYmlzIicpLnJlcGxhY2UoL15ubyQvLCIiKSxjLm1wMz1hLmNhblBsYXlUeXBlKCJhdWRpby9tcGVnOyIpLnJlcGxhY2UoL15ubyQvLCIiKSxjLndhdj1hLmNhblBsYXlUeXBlKCdhdWRpby93YXY7IGNvZGVjcz0iMSInKS5yZXBsYWNlKC9ebm8kLywiIiksYy5tNGE9KGEuY2FuUGxheVR5cGUoImF1ZGlvL3gtbTRhOyIpfHxhLmNhblBsYXlUeXBlKCJhdWRpby9hYWM7IikpLnJlcGxhY2UoL15ubyQvLCIiKX1jYXRjaChkKXt9cmV0dXJuIGN9LHIubG9jYWxzdG9yYWdlPWZ1bmN0aW9uKCl7dHJ5e3JldHVybiBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShnLGcpLGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKGcpLCEwfWNhdGNoKGEpe3JldHVybiExfX0sci5zZXNzaW9uc3RvcmFnZT1mdW5jdGlvbigpe3RyeXtyZXR1cm4gc2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbShnLGcpLHNlc3Npb25TdG9yYWdlLnJlbW92ZUl0ZW0oZyksITB9Y2F0Y2goYSl7cmV0dXJuITF9fSxyLndlYndvcmtlcnM9ZnVuY3Rpb24oKXtyZXR1cm4hIWEuV29ya2VyfSxyLmFwcGxpY2F0aW9uY2FjaGU9ZnVuY3Rpb24oKXtyZXR1cm4hIWEuYXBwbGljYXRpb25DYWNoZX0sci5zdmc9ZnVuY3Rpb24oKXtyZXR1cm4hIWIuY3JlYXRlRWxlbWVudE5TJiYhIWIuY3JlYXRlRWxlbWVudE5TKHEuc3ZnLCJzdmciKS5jcmVhdGVTVkdSZWN0fSxyLmlubGluZXN2Zz1mdW5jdGlvbigpe3ZhciBhPWIuY3JlYXRlRWxlbWVudCgiZGl2Iik7cmV0dXJuIGEuaW5uZXJIVE1MPSI8c3ZnLz4iLChhLmZpcnN0Q2hpbGQmJmEuZmlyc3RDaGlsZC5uYW1lc3BhY2VVUkkpPT1xLnN2Z30sci5zbWlsPWZ1bmN0aW9uKCl7cmV0dXJuISFiLmNyZWF0ZUVsZW1lbnROUyYmL1NWR0FuaW1hdGUvLnRlc3QobC5jYWxsKGIuY3JlYXRlRWxlbWVudE5TKHEuc3ZnLCJhbmltYXRlIikpKX0sci5zdmdjbGlwcGF0aHM9ZnVuY3Rpb24oKXtyZXR1cm4hIWIuY3JlYXRlRWxlbWVudE5TJiYvU1ZHQ2xpcFBhdGgvLnRlc3QobC5jYWxsKGIuY3JlYXRlRWxlbWVudE5TKHEuc3ZnLCJjbGlwUGF0aCIpKSl9O2Zvcih2YXIgTCBpbiByKUIocixMKSYmKHc9TC50b0xvd2VyQ2FzZSgpLGVbd109cltMXSgpLHUucHVzaCgoZVt3XT8iIjoibm8tIikrdykpO3JldHVybiBlLmlucHV0fHxLKCksQygiIiksaD1qPW51bGwsZS5fdmVyc2lvbj1kLGUuX3ByZWZpeGVzPW0sZS5fZG9tUHJlZml4ZXM9cCxlLl9jc3NvbVByZWZpeGVzPW8sZS5tcT15LGUuaGFzRXZlbnQ9eixlLnRlc3RQcm9wPWZ1bmN0aW9uKGEpe3JldHVybiBHKFthXSl9LGUudGVzdEFsbFByb3BzPUksZS50ZXN0U3R5bGVzPXgsZS5wcmVmaXhlZD1mdW5jdGlvbihhLGIsYyl7cmV0dXJuIGI/SShhLGIsYyk6SShhLCJwZngiKX0sZX0odGhpcyx0aGlzLmRvY3VtZW50KSxmdW5jdGlvbihhLGIsYyl7ZnVuY3Rpb24gZChhKXtyZXR1cm4gby5jYWxsKGEpPT0iW29iamVjdCBGdW5jdGlvbl0ifWZ1bmN0aW9uIGUoYSl7cmV0dXJuIHR5cGVvZiBhPT0ic3RyaW5nIn1mdW5jdGlvbiBmKCl7fWZ1bmN0aW9uIGcoYSl7cmV0dXJuIWF8fGE9PSJsb2FkZWQifHxhPT0iY29tcGxldGUifHxhPT0idW5pbml0aWFsaXplZCJ9ZnVuY3Rpb24gaCgpe3ZhciBhPXAuc2hpZnQoKTtxPTEsYT9hLnQ/bShmdW5jdGlvbigpeyhhLnQ9PSJjIj9CLmluamVjdENzczpCLmluamVjdEpzKShhLnMsMCxhLmEsYS54LGEuZSwxKX0sMCk6KGEoKSxoKCkpOnE9MH1mdW5jdGlvbiBpKGEsYyxkLGUsZixpLGope2Z1bmN0aW9uIGsoYil7aWYoIW8mJmcobC5yZWFkeVN0YXRlKSYmKHUucj1vPTEsIXEmJmgoKSxsLm9ubG9hZD1sLm9ucmVhZHlzdGF0ZWNoYW5nZT1udWxsLGIpKXthIT0iaW1nIiYmbShmdW5jdGlvbigpe3QucmVtb3ZlQ2hpbGQobCl9LDUwKTtmb3IodmFyIGQgaW4geVtjXSl5W2NdLmhhc093blByb3BlcnR5KGQpJiZ5W2NdW2RdLm9ubG9hZCgpfX12YXIgaj1qfHxCLmVycm9yVGltZW91dCxsPXt9LG89MCxyPTAsdT17dDpkLHM6YyxlOmYsYTppLHg6an07eVtjXT09PTEmJihyPTEseVtjXT1bXSxsPWIuY3JlYXRlRWxlbWVudChhKSksYT09Im9iamVjdCI/bC5kYXRhPWM6KGwuc3JjPWMsbC50eXBlPWEpLGwud2lkdGg9bC5oZWlnaHQ9IjAiLGwub25lcnJvcj1sLm9ubG9hZD1sLm9ucmVhZHlzdGF0ZWNoYW5nZT1mdW5jdGlvbigpe2suY2FsbCh0aGlzLHIpfSxwLnNwbGljZShlLDAsdSksYSE9ImltZyImJihyfHx5W2NdPT09Mj8odC5pbnNlcnRCZWZvcmUobCxzP251bGw6biksbShrLGopKTp5W2NdLnB1c2gobCkpfWZ1bmN0aW9uIGooYSxiLGMsZCxmKXtyZXR1cm4gcT0wLGI9Ynx8ImoiLGUoYSk/aShiPT0iYyI/djp1LGEsYix0aGlzLmkrKyxjLGQsZik6KHAuc3BsaWNlKHRoaXMuaSsrLDAsYSkscC5sZW5ndGg9PTEmJmgoKSksdGhpc31mdW5jdGlvbiBrKCl7dmFyIGE9QjtyZXR1cm4gYS5sb2FkZXI9e2xvYWQ6aixpOjB9LGF9dmFyIGw9Yi5kb2N1bWVudEVsZW1lbnQsbT1hLnNldFRpbWVvdXQsbj1iLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJzY3JpcHQiKVswXSxvPXt9LnRvU3RyaW5nLHA9W10scT0wLHI9Ik1vekFwcGVhcmFuY2UiaW4gbC5zdHlsZSxzPXImJiEhYi5jcmVhdGVSYW5nZSgpLmNvbXBhcmVOb2RlLHQ9cz9sOm4ucGFyZW50Tm9kZSxsPWEub3BlcmEmJm8uY2FsbChhLm9wZXJhKT09IltvYmplY3QgT3BlcmFdIixsPSEhYi5hdHRhY2hFdmVudCYmIWwsdT1yPyJvYmplY3QiOmw/InNjcmlwdCI6ImltZyIsdj1sPyJzY3JpcHQiOnUsdz1BcnJheS5pc0FycmF5fHxmdW5jdGlvbihhKXtyZXR1cm4gby5jYWxsKGEpPT0iW29iamVjdCBBcnJheV0ifSx4PVtdLHk9e30sej17dGltZW91dDpmdW5jdGlvbihhLGIpe3JldHVybiBiLmxlbmd0aCYmKGEudGltZW91dD1iWzBdKSxhfX0sQSxCO0I9ZnVuY3Rpb24oYSl7ZnVuY3Rpb24gYihhKXt2YXIgYT1hLnNwbGl0KCIhIiksYj14Lmxlbmd0aCxjPWEucG9wKCksZD1hLmxlbmd0aCxjPXt1cmw6YyxvcmlnVXJsOmMscHJlZml4ZXM6YX0sZSxmLGc7Zm9yKGY9MDtmPGQ7ZisrKWc9YVtmXS5zcGxpdCgiPSIpLChlPXpbZy5zaGlmdCgpXSkmJihjPWUoYyxnKSk7Zm9yKGY9MDtmPGI7ZisrKWM9eFtmXShjKTtyZXR1cm4gY31mdW5jdGlvbiBnKGEsZSxmLGcsaSl7dmFyIGo9YihhKSxsPWouYXV0b0NhbGxiYWNrO2oudXJsLnNwbGl0KCIuIikucG9wKCkuc3BsaXQoIj8iKS5zaGlmdCgpLGouYnlwYXNzfHwoZSYmKGU9ZChlKT9lOmVbYV18fGVbZ118fGVbYS5zcGxpdCgiLyIpLnBvcCgpLnNwbGl0KCI/IilbMF1dfHxoKSxqLmluc3RlYWQ/ai5pbnN0ZWFkKGEsZSxmLGcsaSk6KHlbai51cmxdP2oubm9leGVjPSEwOnlbai51cmxdPTEsZi5sb2FkKGoudXJsLGouZm9yY2VDU1N8fCFqLmZvcmNlSlMmJiJjc3MiPT1qLnVybC5zcGxpdCgiLiIpLnBvcCgpLnNwbGl0KCI/Iikuc2hpZnQoKT8iYyI6YyxqLm5vZXhlYyxqLmF0dHJzLGoudGltZW91dCksKGQoZSl8fGQobCkpJiZmLmxvYWQoZnVuY3Rpb24oKXtrKCksZSYmZShqLm9yaWdVcmwsaSxnKSxsJiZsKGoub3JpZ1VybCxpLGcpLHlbai51cmxdPTJ9KSkpfWZ1bmN0aW9uIGkoYSxiKXtmdW5jdGlvbiBjKGEsYyl7aWYoYSl7aWYoZShhKSljfHwoaj1mdW5jdGlvbigpe3ZhciBhPVtdLnNsaWNlLmNhbGwoYXJndW1lbnRzKTtrLmFwcGx5KHRoaXMsYSksbCgpfSksZyhhLGosYiwwLGgpO2Vsc2UgaWYoT2JqZWN0KGEpPT09YSlmb3IobiBpbiBtPWZ1bmN0aW9uKCl7dmFyIGI9MCxjO2ZvcihjIGluIGEpYS5oYXNPd25Qcm9wZXJ0eShjKSYmYisrO3JldHVybiBifSgpLGEpYS5oYXNPd25Qcm9wZXJ0eShuKSYmKCFjJiYhLS1tJiYoZChqKT9qPWZ1bmN0aW9uKCl7dmFyIGE9W10uc2xpY2UuY2FsbChhcmd1bWVudHMpO2suYXBwbHkodGhpcyxhKSxsKCl9Ompbbl09ZnVuY3Rpb24oYSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGI9W10uc2xpY2UuY2FsbChhcmd1bWVudHMpO2EmJmEuYXBwbHkodGhpcyxiKSxsKCl9fShrW25dKSksZyhhW25dLGosYixuLGgpKX1lbHNlIWMmJmwoKX12YXIgaD0hIWEudGVzdCxpPWEubG9hZHx8YS5ib3RoLGo9YS5jYWxsYmFja3x8ZixrPWosbD1hLmNvbXBsZXRlfHxmLG0sbjtjKGg/YS55ZXA6YS5ub3BlLCEhaSksaSYmYyhpKX12YXIgaixsLG09dGhpcy55ZXBub3BlLmxvYWRlcjtpZihlKGEpKWcoYSwwLG0sMCk7ZWxzZSBpZih3KGEpKWZvcihqPTA7ajxhLmxlbmd0aDtqKyspbD1hW2pdLGUobCk/ZyhsLDAsbSwwKTp3KGwpP0IobCk6T2JqZWN0KGwpPT09bCYmaShsLG0pO2Vsc2UgT2JqZWN0KGEpPT09YSYmaShhLG0pfSxCLmFkZFByZWZpeD1mdW5jdGlvbihhLGIpe3pbYV09Yn0sQi5hZGRGaWx0ZXI9ZnVuY3Rpb24oYSl7eC5wdXNoKGEpfSxCLmVycm9yVGltZW91dD0xZTQsYi5yZWFkeVN0YXRlPT1udWxsJiZiLmFkZEV2ZW50TGlzdGVuZXImJihiLnJlYWR5U3RhdGU9ImxvYWRpbmciLGIuYWRkRXZlbnRMaXN0ZW5lcigiRE9NQ29udGVudExvYWRlZCIsQT1mdW5jdGlvbigpe2IucmVtb3ZlRXZlbnRMaXN0ZW5lcigiRE9NQ29udGVudExvYWRlZCIsQSwwKSxiLnJlYWR5U3RhdGU9ImNvbXBsZXRlIn0sMCkpLGEueWVwbm9wZT1rKCksYS55ZXBub3BlLmV4ZWN1dGVTdGFjaz1oLGEueWVwbm9wZS5pbmplY3RKcz1mdW5jdGlvbihhLGMsZCxlLGksail7dmFyIGs9Yi5jcmVhdGVFbGVtZW50KCJzY3JpcHQiKSxsLG8sZT1lfHxCLmVycm9yVGltZW91dDtrLnNyYz1hO2ZvcihvIGluIGQpay5zZXRBdHRyaWJ1dGUobyxkW29dKTtjPWo/aDpjfHxmLGsub25yZWFkeXN0YXRlY2hhbmdlPWsub25sb2FkPWZ1bmN0aW9uKCl7IWwmJmcoay5yZWFkeVN0YXRlKSYmKGw9MSxjKCksay5vbmxvYWQ9ay5vbnJlYWR5c3RhdGVjaGFuZ2U9bnVsbCl9LG0oZnVuY3Rpb24oKXtsfHwobD0xLGMoMSkpfSxlKSxpP2sub25sb2FkKCk6bi5wYXJlbnROb2RlLmluc2VydEJlZm9yZShrLG4pfSxhLnllcG5vcGUuaW5qZWN0Q3NzPWZ1bmN0aW9uKGEsYyxkLGUsZyxpKXt2YXIgZT1iLmNyZWF0ZUVsZW1lbnQoImxpbmsiKSxqLGM9aT9oOmN8fGY7ZS5ocmVmPWEsZS5yZWw9InN0eWxlc2hlZXQiLGUudHlwZT0idGV4dC9jc3MiO2ZvcihqIGluIGQpZS5zZXRBdHRyaWJ1dGUoaixkW2pdKTtnfHwobi5wYXJlbnROb2RlLmluc2VydEJlZm9yZShlLG4pLG0oYywwKSl9fSh0aGlzLGRvY3VtZW50KSxNb2Rlcm5penIubG9hZD1mdW5jdGlvbigpe3llcG5vcGUuYXBwbHkod2luZG93LFtdLnNsaWNlLmNhbGwoYXJndW1lbnRzLDApKX07ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvcGFnZXMvdHJhbnNjcmlwdHMvMjAxM19FY2xpcHNlQ29uRnJhbmNlL2pzL29yZGVyLmpzIGIvcGFnZXMvdHJhbnNjcmlwdHMvMjAxM19FY2xpcHNlQ29uRnJhbmNlL2pzL29yZGVyLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU3OGMxODMKLS0tIC9kZXYvbnVsbAorKysgYi9wYWdlcy90cmFuc2NyaXB0cy8yMDEzX0VjbGlwc2VDb25GcmFuY2UvanMvb3JkZXIuanMKQEAgLTAsMCArMSw4IEBACisvKgorIFJlcXVpcmVKUyBvcmRlciAxLjAuNSBDb3B5cmlnaHQgKGMpIDIwMTAtMjAxMSwgVGhlIERvam8gRm91bmRhdGlvbiBBbGwgUmlnaHRzIFJlc2VydmVkLgorIEF2YWlsYWJsZSB2aWEgdGhlIE1JVCBvciBuZXcgQlNEIGxpY2Vuc2UuCisgc2VlOiBodHRwOi8vZ2l0aHViLmNvbS9qcmJ1cmtlL3JlcXVpcmVqcyBmb3IgZGV0YWlscworKi8KKyhmdW5jdGlvbigpe2Z1bmN0aW9uIGsoYSl7dmFyIGI9YS5jdXJyZW50VGFyZ2V0fHxhLnNyY0VsZW1lbnQsYztpZihhLnR5cGU9PT0ibG9hZCJ8fGwudGVzdChiLnJlYWR5U3RhdGUpKXthPWIuZ2V0QXR0cmlidXRlKCJkYXRhLXJlcXVpcmVtb2R1bGUiKTtqW2FdPSEwO2ZvcihhPTA7Yz1nW2FdO2ErKylpZihqW2MubmFtZV0pYy5yZXEoW2MubmFtZV0sYy5vbkxvYWQpO2Vsc2UgYnJlYWs7YT4wJiZnLnNwbGljZSgwLGEpO3NldFRpbWVvdXQoZnVuY3Rpb24oKXtiLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoYil9LDE1KX19ZnVuY3Rpb24gbShhKXt2YXIgYixjO2Euc2V0QXR0cmlidXRlKCJkYXRhLW9yZGVybG9hZGVkIiwibG9hZGVkIik7Zm9yKGE9MDtjPWhbYV07YSsrKWlmKChiPWlbY10pJiZiLmdldEF0dHJpYnV0ZSgiZGF0YS1vcmRlcmxvYWRlZCIpPT09ImxvYWRlZCIpZGVsZXRlIGlbY10scmVxdWlyZS5hZGRTY3JpcHRUb0RvbShiKTtlbHNlIGJyZWFrO2E+MCYmaC5zcGxpY2UoMCwKK2EpfXZhciBmPXR5cGVvZiBkb2N1bWVudCE9PSJ1bmRlZmluZWQiJiZ0eXBlb2Ygd2luZG93IT09InVuZGVmaW5lZCImJmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNjcmlwdCIpLG49ZiYmKGYuYXN5bmN8fHdpbmRvdy5vcGVyYSYmT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHdpbmRvdy5vcGVyYSk9PT0iW29iamVjdCBPcGVyYV0ifHwiTW96QXBwZWFyYW5jZSJpbiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc3R5bGUpLG89ZiYmZi5yZWFkeVN0YXRlPT09InVuaW5pdGlhbGl6ZWQiLGw9L14oY29tcGxldGV8bG9hZGVkKSQvLGc9W10saj17fSxpPXt9LGg9W10sZj1udWxsO2RlZmluZSh7dmVyc2lvbjoiMS4wLjUiLGxvYWQ6ZnVuY3Rpb24oYSxiLGMsZSl7dmFyIGQ7Yi5uYW1lVG9Vcmw/KGQ9Yi5uYW1lVG9VcmwoYSxudWxsKSxyZXF1aXJlLnMuc2tpcEFzeW5jW2RdPSEwLG58fGUuaXNCdWlsZD9iKFthXSxjKTpvPyhlPXJlcXVpcmUucy5jb250ZXh0cy5fLCFlLnVybEZldGNoZWRbZF0mJgorIWUubG9hZGVkW2FdJiYoZS51cmxGZXRjaGVkW2RdPSEwLHJlcXVpcmUucmVzb3VyY2VzUmVhZHkoITEpLGUuc2NyaXB0Q291bnQrPTEsZD1yZXF1aXJlLmF0dGFjaChkLGUsYSxudWxsLG51bGwsbSksaVthXT1kLGgucHVzaChhKSksYihbYV0sYykpOmIuc3BlY2lmaWVkKGEpP2IoW2FdLGMpOihnLnB1c2goe25hbWU6YSxyZXE6YixvbkxvYWQ6Y30pLHJlcXVpcmUuYXR0YWNoKGQsbnVsbCxhLGssInNjcmlwdC9jYWNoZSIpKSk6YihbYV0sYyl9fSl9KSgpOwpkaWZmIC0tZ2l0IGEvcGFnZXMvdHJhbnNjcmlwdHMvMjAxM19FY2xpcHNlQ29uRnJhbmNlL2pzL3BvbHlmaWxscy9jbGFzc0xpc3QubWluLmpzIGIvcGFnZXMvdHJhbnNjcmlwdHMvMjAxM19FY2xpcHNlQ29uRnJhbmNlL2pzL3BvbHlmaWxscy9jbGFzc0xpc3QubWluLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkzMmM3NzcKLS0tIC9kZXYvbnVsbAorKysgYi9wYWdlcy90cmFuc2NyaXB0cy8yMDEzX0VjbGlwc2VDb25GcmFuY2UvanMvcG9seWZpbGxzL2NsYXNzTGlzdC5taW4uanMKQEAgLTAsMCArMSwyIEBACisvKiBAc291cmNlIGh0dHA6Ly9wdXJsLmVsaWdyZXkuY29tL2dpdGh1Yi9jbGFzc0xpc3QuanMvYmxvYi9tYXN0ZXIvY2xhc3NMaXN0LmpzKi8KKyJ1c2Ugc3RyaWN0IjtpZih0eXBlb2YgZG9jdW1lbnQhPT0idW5kZWZpbmVkIiYmISgiY2xhc3NMaXN0IiBpbiBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJhIikpKXsoZnVuY3Rpb24oYSl7dmFyIGY9ImNsYXNzTGlzdCIsZD0icHJvdG90eXBlIixlPShhLkhUTUxFbGVtZW50fHxhLkVsZW1lbnQpW2RdLGc9T2JqZWN0O3N0clRyaW09U3RyaW5nW2RdLnRyaW18fGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmVwbGFjZSgvXlxzK3xccyskL2csIiIpfSxhcnJJbmRleE9mPUFycmF5W2RdLmluZGV4T2Z8fGZ1bmN0aW9uKGspe2Zvcih2YXIgaj0wLGg9dGhpcy5sZW5ndGg7ajxoO2orKyl7aWYoaiBpbiB0aGlzJiZ0aGlzW2pdPT09ayl7cmV0dXJuIGp9fXJldHVybiAtMX0sRE9NRXg9ZnVuY3Rpb24oaCxpKXt0aGlzLm5hbWU9aDt0aGlzLmNvZGU9RE9NRXhjZXB0aW9uW2hdO3RoaXMubWVzc2FnZT1pfSxjaGVja1Rva2VuQW5kR2V0SW5kZXg9ZnVuY3Rpb24oaSxoKXtpZihoPT09IiIpe3Rocm93IG5ldyBET01FeCgiU1lOVEFYX0VSUiIsIkFuIGludmFsaWQgb3IgaWxsZWdhbCBzdHJpbmcgd2FzIHNwZWNpZmllZCIpfWlmKC9ccy8udGVzdChoKSl7dGhyb3cgbmV3IERPTUV4KCJJTlZBTElEX0NIQVJBQ1RFUl9FUlIiLCJTdHJpbmcgY29udGFpbnMgYW4gaW52YWxpZCBjaGFyYWN0ZXIiKX1yZXR1cm4gYXJySW5kZXhPZi5jYWxsKGksaCl9LENsYXNzTGlzdD1mdW5jdGlvbihtKXt2YXIgbD1zdHJUcmltLmNhbGwobS5jbGFzc05hbWUpLGs9bD9sLnNwbGl0KC9ccysvKTpbXTtmb3IodmFyIGo9MCxoPWsubGVuZ3RoO2o8aDtqKyspe3RoaXMucHVzaChrW2pdKX10aGlzLl91cGRhdGVDbGFzc05hbWU9ZnVuY3Rpb24oKXttLmNsYXNzTmFtZT10aGlzLnRvU3RyaW5nKCl9fSxjbGFzc0xpc3RQcm90bz1DbGFzc0xpc3RbZF09W10sY2xhc3NMaXN0R2V0dGVyPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBDbGFzc0xpc3QodGhpcyl9O0RPTUV4W2RdPUVycm9yW2RdO2NsYXNzTGlzdFByb3RvLml0ZW09ZnVuY3Rpb24oaCl7cmV0dXJuIHRoaXNbaF18fG51bGx9O2NsYXNzTGlzdFByb3RvLmNvbnRhaW5zPWZ1bmN0aW9uKGgpe2grPSIiO3JldHVybiBjaGVja1Rva2VuQW5kR2V0SW5kZXgodGhpcyxoKSE9PS0xfTtjbGFzc0xpc3RQcm90by5hZGQ9ZnVuY3Rpb24oaCl7aCs9IiI7aWYoY2hlY2tUb2tlbkFuZEdldEluZGV4KHRoaXMsaCk9PT0tMSl7dGhpcy5wdXNoKGgpO3RoaXMuX3VwZGF0ZUNsYXNzTmFtZSgpfX07Y2xhc3NMaXN0UHJvdG8ucmVtb3ZlPWZ1bmN0aW9uKGkpe2krPSIiO3ZhciBoPWNoZWNrVG9rZW5BbmRHZXRJbmRleCh0aGlzLGkpO2lmKGghPT0tMSl7dGhpcy5zcGxpY2UoaCwxKTt0aGlzLl91cGRhdGVDbGFzc05hbWUoKX19O2NsYXNzTGlzdFByb3RvLnRvZ2dsZT1mdW5jdGlvbihoKXtoKz0iIjtpZihjaGVja1Rva2VuQW5kR2V0SW5kZXgodGhpcyxoKT09PS0xKXt0aGlzLmFkZChoKX1lbHNle3RoaXMucmVtb3ZlKGgpfX07Y2xhc3NMaXN0UHJvdG8udG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5qb2luKCIgIil9O2lmKGcuZGVmaW5lUHJvcGVydHkpe3ZhciBjPXtnZXQ6Y2xhc3NMaXN0R2V0dGVyLGVudW1lcmFibGU6dHJ1ZSxjb25maWd1cmFibGU6dHJ1ZX07dHJ5e2cuZGVmaW5lUHJvcGVydHkoZSxmLGMpfWNhdGNoKGIpe2lmKGIubnVtYmVyPT09LTIxNDY4MjMyNTIpe2MuZW51bWVyYWJsZT1mYWxzZTtnLmRlZmluZVByb3BlcnR5KGUsZixjKX19fWVsc2V7aWYoZ1tkXS5fX2RlZmluZUdldHRlcl9fKXtlLl9fZGVmaW5lR2V0dGVyX18oZixjbGFzc0xpc3RHZXR0ZXIpfX19KHNlbGYpKX07ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvcGFnZXMvdHJhbnNjcmlwdHMvMjAxM19FY2xpcHNlQ29uRnJhbmNlL2pzL3BvbHlmaWxscy9kYXRhc2V0Lm1pbi5qcyBiL3BhZ2VzL3RyYW5zY3JpcHRzLzIwMTNfRWNsaXBzZUNvbkZyYW5jZS9qcy9wb2x5ZmlsbHMvZGF0YXNldC5taW4uanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2YyYTU2NAotLS0gL2Rldi9udWxsCisrKyBiL3BhZ2VzL3RyYW5zY3JpcHRzLzIwMTNfRWNsaXBzZUNvbkZyYW5jZS9qcy9wb2x5ZmlsbHMvZGF0YXNldC5taW4uanMKQEAgLTAsMCArMSwyIEBACisoZnVuY3Rpb24oKXtmdW5jdGlvbiBjKCl7ZD0hMDt0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIoIkRPTUF0dHJNb2RpZmllZCIsYywhMSl9ZnVuY3Rpb24gZyhiKXtyZXR1cm4gYi5yZXBsYWNlKGgsZnVuY3Rpb24oYixhKXtyZXR1cm4gYS50b1VwcGVyQ2FzZSgpfSl9ZnVuY3Rpb24gZSgpe3ZhciBiPXt9O2kuY2FsbCh0aGlzLmF0dHJpYnV0ZXMsZnVuY3Rpb24oYSl7aWYoZj1hLm5hbWUubWF0Y2goaikpYltnKGZbMV0pXT1hLnZhbHVlfSk7cmV0dXJuIGJ9dmFyIGk9W10uZm9yRWFjaCxqPS9eZGF0YS0oLispLyxoPS9cLShbYS16XSkvaWcsYT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSxkPSExLGY7YS5kYXRhc2V0PT12b2lkIDAmJihhLmFkZEV2ZW50TGlzdGVuZXIoIkRPTUF0dHJNb2RpZmllZCIsYywhMSksYS5zZXRBdHRyaWJ1dGUoImZvbyIsImJhciIpLEVsZW1lbnQucHJvdG90eXBlLl9fZGVmaW5lR2V0dGVyX18oImRhdGFzZXQiLGQ/ZnVuY3Rpb24oKXtpZighdGhpcy5fZGF0YXNldENhY2hlKXRoaXMuX2RhdGFzZXRDYWNoZT0KK2UuY2FsbCh0aGlzKTtyZXR1cm4gdGhpcy5fZGF0YXNldENhY2hlfTplKSxkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJET01BdHRyTW9kaWZpZWQiLGZ1bmN0aW9uKGEpe2RlbGV0ZSBhLnRhcmdldC5fZGF0YXNldENhY2hlfSwhMSkpfSkoKTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9wYWdlcy90cmFuc2NyaXB0cy8yMDEzX0VjbGlwc2VDb25GcmFuY2UvanMvcG9seWZpbGxzL2hpc3RvcnkubWluLmpzIGIvcGFnZXMvdHJhbnNjcmlwdHMvMjAxM19FY2xpcHNlQ29uRnJhbmNlL2pzL3BvbHlmaWxscy9oaXN0b3J5Lm1pbi5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYWVlMDdlCi0tLSAvZGV2L251bGwKKysrIGIvcGFnZXMvdHJhbnNjcmlwdHMvMjAxM19FY2xpcHNlQ29uRnJhbmNlL2pzL3BvbHlmaWxscy9oaXN0b3J5Lm1pbi5qcwpAQCAtMCwwICsxIEBACisoZnVuY3Rpb24oYSxiKXsidXNlIHN0cmljdCI7dmFyIGM9YS5jb25zb2xlfHxiLGQ9YS5kb2N1bWVudCxlPWEubmF2aWdhdG9yLGY9YS5zZXNzaW9uU3RvcmFnZXx8ITEsZz1hLnNldFRpbWVvdXQsaD1hLmNsZWFyVGltZW91dCxpPWEuc2V0SW50ZXJ2YWwsaj1hLmNsZWFySW50ZXJ2YWwsaz1hLkpTT04sbD1hLmFsZXJ0LG09YS5IaXN0b3J5PWEuSGlzdG9yeXx8e30sbj1hLmhpc3Rvcnk7ay5zdHJpbmdpZnk9ay5zdHJpbmdpZnl8fGsuZW5jb2RlLGsucGFyc2U9ay5wYXJzZXx8ay5kZWNvZGU7aWYodHlwZW9mIG0uaW5pdCE9InVuZGVmaW5lZCIpdGhyb3cgbmV3IEVycm9yKCJIaXN0b3J5LmpzIENvcmUgaGFzIGFscmVhZHkgYmVlbiBsb2FkZWQuLi4iKTttLmluaXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdHlwZW9mIG0uQWRhcHRlcj09InVuZGVmaW5lZCI/ITE6KHR5cGVvZiBtLmluaXRDb3JlIT0idW5kZWZpbmVkIiYmbS5pbml0Q29yZSgpLHR5cGVvZiBtLmluaXRIdG1sNCE9InVuZGVmaW5lZCImJm0uaW5pdEh0bWw0KCksITApfSxtLmluaXRDb3JlPWZ1bmN0aW9uKCl7aWYodHlwZW9mIG0uaW5pdENvcmUuaW5pdGlhbGl6ZWQhPSJ1bmRlZmluZWQiKXJldHVybiExO20uaW5pdENvcmUuaW5pdGlhbGl6ZWQ9ITAsbS5vcHRpb25zPW0ub3B0aW9uc3x8e30sbS5vcHRpb25zLmhhc2hDaGFuZ2VJbnRlcnZhbD1tLm9wdGlvbnMuaGFzaENoYW5nZUludGVydmFsfHwxMDAsbS5vcHRpb25zLnNhZmFyaVBvbGxJbnRlcnZhbD1tLm9wdGlvbnMuc2FmYXJpUG9sbEludGVydmFsfHw1MDAsbS5vcHRpb25zLmRvdWJsZUNoZWNrSW50ZXJ2YWw9bS5vcHRpb25zLmRvdWJsZUNoZWNrSW50ZXJ2YWx8fDUwMCxtLm9wdGlvbnMuc3RvcmVJbnRlcnZhbD1tLm9wdGlvbnMuc3RvcmVJbnRlcnZhbHx8MWUzLG0ub3B0aW9ucy5idXN5RGVsYXk9bS5vcHRpb25zLmJ1c3lEZWxheXx8MjUwLG0ub3B0aW9ucy5kZWJ1Zz1tLm9wdGlvbnMuZGVidWd8fCExLG0ub3B0aW9ucy5pbml0aWFsVGl0bGU9bS5vcHRpb25zLmluaXRpYWxUaXRsZXx8ZC50aXRsZSxtLmludGVydmFsTGlzdD1bXSxtLmNsZWFyQWxsSW50ZXJ2YWxzPWZ1bmN0aW9uKCl7dmFyIGEsYj1tLmludGVydmFsTGlzdDtpZih0eXBlb2YgYiE9InVuZGVmaW5lZCImJmIhPT1udWxsKXtmb3IoYT0wO2E8Yi5sZW5ndGg7YSsrKWooYlthXSk7bS5pbnRlcnZhbExpc3Q9bnVsbH19LG0uZGVidWc9ZnVuY3Rpb24oKXsobS5vcHRpb25zLmRlYnVnfHwhMSkmJm0ubG9nLmFwcGx5KG0sYXJndW1lbnRzKX0sbS5sb2c9ZnVuY3Rpb24oKXt2YXIgYT10eXBlb2YgYyE9InVuZGVmaW5lZCImJnR5cGVvZiBjLmxvZyE9InVuZGVmaW5lZCImJnR5cGVvZiBjLmxvZy5hcHBseSE9InVuZGVmaW5lZCIsYj1kLmdldEVsZW1lbnRCeUlkKCJsb2ciKSxlLGYsZyxoLGk7YT8oaD1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpLGU9aC5zaGlmdCgpLHR5cGVvZiBjLmRlYnVnIT0idW5kZWZpbmVkIj9jLmRlYnVnLmFwcGx5KGMsW2UsaF0pOmMubG9nLmFwcGx5KGMsW2UsaF0pKTplPSJcbiIrYXJndW1lbnRzWzBdKyJcbiI7Zm9yKGY9MSxnPWFyZ3VtZW50cy5sZW5ndGg7ZjxnOysrZil7aT1hcmd1bWVudHNbZl07aWYodHlwZW9mIGk9PSJvYmplY3QiJiZ0eXBlb2YgayE9InVuZGVmaW5lZCIpdHJ5e2k9ay5zdHJpbmdpZnkoaSl9Y2F0Y2goail7fWUrPSJcbiIraSsiXG4ifXJldHVybiBiPyhiLnZhbHVlKz1lKyJcbi0tLS0tXG4iLGIuc2Nyb2xsVG9wPWIuc2Nyb2xsSGVpZ2h0LWIuY2xpZW50SGVpZ2h0KTphfHxsKGUpLCEwfSxtLmdldEludGVybmV0RXhwbG9yZXJNYWpvclZlcnNpb249ZnVuY3Rpb24oKXt2YXIgYT1tLmdldEludGVybmV0RXhwbG9yZXJNYWpvclZlcnNpb24uY2FjaGVkPXR5cGVvZiBtLmdldEludGVybmV0RXhwbG9yZXJNYWpvclZlcnNpb24uY2FjaGVkIT0idW5kZWZpbmVkIj9tLmdldEludGVybmV0RXhwbG9yZXJNYWpvclZlcnNpb24uY2FjaGVkOmZ1bmN0aW9uKCl7dmFyIGE9MyxiPWQuY3JlYXRlRWxlbWVudCgiZGl2IiksYz1iLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJpIik7d2hpbGUoKGIuaW5uZXJIVE1MPSI8IS0tW2lmIGd0IElFICIrICsrYSsiXT48aT48L2k+PCFbZW5kaWZdLS0+IikmJmNbMF0pO3JldHVybiBhPjQ/YTohMX0oKTtyZXR1cm4gYX0sbS5pc0ludGVybmV0RXhwbG9yZXI9ZnVuY3Rpb24oKXt2YXIgYT1tLmlzSW50ZXJuZXRFeHBsb3Jlci5jYWNoZWQ9dHlwZW9mIG0uaXNJbnRlcm5ldEV4cGxvcmVyLmNhY2hlZCE9InVuZGVmaW5lZCI/bS5pc0ludGVybmV0RXhwbG9yZXIuY2FjaGVkOkJvb2xlYW4obS5nZXRJbnRlcm5ldEV4cGxvcmVyTWFqb3JWZXJzaW9uKCkpO3JldHVybiBhfSxtLmVtdWxhdGVkPXtwdXNoU3RhdGU6IUJvb2xlYW4oYS5oaXN0b3J5JiZhLmhpc3RvcnkucHVzaFN0YXRlJiZhLmhpc3RvcnkucmVwbGFjZVN0YXRlJiYhLyBNb2JpbGVcLyhbMS03XVthLXpdfCg4KFthYmNkZV18ZigxWzAtOF0pKSkpL2kudGVzdChlLnVzZXJBZ2VudCkmJiEvQXBwbGVXZWJLaXRcLzUoWzAtMl18M1swLTJdKS9pLnRlc3QoZS51c2VyQWdlbnQpKSxoYXNoQ2hhbmdlOkJvb2xlYW4oISgib25oYXNoY2hhbmdlImluIGF8fCJvbmhhc2hjaGFuZ2UiaW4gZCl8fG0uaXNJbnRlcm5ldEV4cGxvcmVyKCkmJm0uZ2V0SW50ZXJuZXRFeHBsb3Jlck1ham9yVmVyc2lvbigpPDgpfSxtLmVuYWJsZWQ9IW0uZW11bGF0ZWQucHVzaFN0YXRlLG0uYnVncz17c2V0SGFzaDpCb29sZWFuKCFtLmVtdWxhdGVkLnB1c2hTdGF0ZSYmZS52ZW5kb3I9PT0iQXBwbGUgQ29tcHV0ZXIsIEluYy4iJiYvQXBwbGVXZWJLaXRcLzUoWzAtMl18M1swLTNdKS8udGVzdChlLnVzZXJBZ2VudCkpLHNhZmFyaVBvbGw6Qm9vbGVhbighbS5lbXVsYXRlZC5wdXNoU3RhdGUmJmUudmVuZG9yPT09IkFwcGxlIENvbXB1dGVyLCBJbmMuIiYmL0FwcGxlV2ViS2l0XC81KFswLTJdfDNbMC0zXSkvLnRlc3QoZS51c2VyQWdlbnQpKSxpZURvdWJsZUNoZWNrOkJvb2xlYW4obS5pc0ludGVybmV0RXhwbG9yZXIoKSYmbS5nZXRJbnRlcm5ldEV4cGxvcmVyTWFqb3JWZXJzaW9uKCk8OCksaGFzaEVzY2FwZTpCb29sZWFuKG0uaXNJbnRlcm5ldEV4cGxvcmVyKCkmJm0uZ2V0SW50ZXJuZXRFeHBsb3Jlck1ham9yVmVyc2lvbigpPDcpfSxtLmlzRW1wdHlPYmplY3Q9ZnVuY3Rpb24oYSl7Zm9yKHZhciBiIGluIGEpcmV0dXJuITE7cmV0dXJuITB9LG0uY2xvbmVPYmplY3Q9ZnVuY3Rpb24oYSl7dmFyIGIsYztyZXR1cm4gYT8oYj1rLnN0cmluZ2lmeShhKSxjPWsucGFyc2UoYikpOmM9e30sY30sbS5nZXRSb290VXJsPWZ1bmN0aW9uKCl7dmFyIGE9ZC5sb2NhdGlvbi5wcm90b2NvbCsiLy8iKyhkLmxvY2F0aW9uLmhvc3RuYW1lfHxkLmxvY2F0aW9uLmhvc3QpO2lmKGQubG9jYXRpb24ucG9ydHx8ITEpYSs9IjoiK2QubG9jYXRpb24ucG9ydDtyZXR1cm4gYSs9Ii8iLGF9LG0uZ2V0QmFzZUhyZWY9ZnVuY3Rpb24oKXt2YXIgYT1kLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJiYXNlIiksYj1udWxsLGM9IiI7cmV0dXJuIGEubGVuZ3RoPT09MSYmKGI9YVswXSxjPWIuaHJlZi5yZXBsYWNlKC9bXlwvXSskLywiIikpLGM9Yy5yZXBsYWNlKC9cLyskLywiIiksYyYmKGMrPSIvIiksY30sbS5nZXRCYXNlVXJsPWZ1bmN0aW9uKCl7dmFyIGE9bS5nZXRCYXNlSHJlZigpfHxtLmdldEJhc2VQYWdlVXJsKCl8fG0uZ2V0Um9vdFVybCgpO3JldHVybiBhfSxtLmdldFBhZ2VVcmw9ZnVuY3Rpb24oKXt2YXIgYT1tLmdldFN0YXRlKCExLCExKSxiPShhfHx7fSkudXJsfHxkLmxvY2F0aW9uLmhyZWYsYztyZXR1cm4gYz1iLnJlcGxhY2UoL1wvKyQvLCIiKS5yZXBsYWNlKC9bXlwvXSskLyxmdW5jdGlvbihhLGIsYyl7cmV0dXJuL1wuLy50ZXN0KGEpP2E6YSsiLyJ9KSxjfSxtLmdldEJhc2VQYWdlVXJsPWZ1bmN0aW9uKCl7dmFyIGE9ZC5sb2NhdGlvbi5ocmVmLnJlcGxhY2UoL1sjXD9dLiovLCIiKS5yZXBsYWNlKC9bXlwvXSskLyxmdW5jdGlvbihhLGIsYyl7cmV0dXJuL1teXC9dJC8udGVzdChhKT8iIjphfSkucmVwbGFjZSgvXC8rJC8sIiIpKyIvIjtyZXR1cm4gYX0sbS5nZXRGdWxsVXJsPWZ1bmN0aW9uKGEsYil7dmFyIGM9YSxkPWEuc3Vic3RyaW5nKDAsMSk7cmV0dXJuIGI9dHlwZW9mIGI9PSJ1bmRlZmluZWQiPyEwOmIsL1thLXpdK1w6XC9cLy8udGVzdChhKXx8KGQ9PT0iLyI/Yz1tLmdldFJvb3RVcmwoKSthLnJlcGxhY2UoL15cLysvLCIiKTpkPT09IiMiP2M9bS5nZXRQYWdlVXJsKCkucmVwbGFjZSgvIy4qLywiIikrYTpkPT09Ij8iP2M9bS5nZXRQYWdlVXJsKCkucmVwbGFjZSgvW1w/I10uKi8sIiIpK2E6Yj9jPW0uZ2V0QmFzZVVybCgpK2EucmVwbGFjZSgvXihcLlwvKSsvLCIiKTpjPW0uZ2V0QmFzZVBhZ2VVcmwoKSthLnJlcGxhY2UoL14oXC5cLykrLywiIikpLGMucmVwbGFjZSgvXCMkLywiIil9LG0uZ2V0U2hvcnRVcmw9ZnVuY3Rpb24oYSl7dmFyIGI9YSxjPW0uZ2V0QmFzZVVybCgpLGQ9bS5nZXRSb290VXJsKCk7cmV0dXJuIG0uZW11bGF0ZWQucHVzaFN0YXRlJiYoYj1iLnJlcGxhY2UoYywiIikpLGI9Yi5yZXBsYWNlKGQsIi8iKSxtLmlzVHJhZGl0aW9uYWxBbmNob3IoYikmJihiPSIuLyIrYiksYj1iLnJlcGxhY2UoL14oXC5cLykrL2csIi4vIikucmVwbGFjZSgvXCMkLywiIiksYn0sbS5zdG9yZT17fSxtLmlkVG9TdGF0ZT1tLmlkVG9TdGF0ZXx8e30sbS5zdGF0ZVRvSWQ9bS5zdGF0ZVRvSWR8fHt9LG0udXJsVG9JZD1tLnVybFRvSWR8fHt9LG0uc3RvcmVkU3RhdGVzPW0uc3RvcmVkU3RhdGVzfHxbXSxtLnNhdmVkU3RhdGVzPW0uc2F2ZWRTdGF0ZXN8fFtdLG0ubm9ybWFsaXplU3RvcmU9ZnVuY3Rpb24oKXttLnN0b3JlLmlkVG9TdGF0ZT1tLnN0b3JlLmlkVG9TdGF0ZXx8e30sbS5zdG9yZS51cmxUb0lkPW0uc3RvcmUudXJsVG9JZHx8e30sbS5zdG9yZS5zdGF0ZVRvSWQ9bS5zdG9yZS5zdGF0ZVRvSWR8fHt9fSxtLmdldFN0YXRlPWZ1bmN0aW9uKGEsYil7dHlwZW9mIGE9PSJ1bmRlZmluZWQiJiYoYT0hMCksdHlwZW9mIGI9PSJ1bmRlZmluZWQiJiYoYj0hMCk7dmFyIGM9bS5nZXRMYXN0U2F2ZWRTdGF0ZSgpO3JldHVybiFjJiZiJiYoYz1tLmNyZWF0ZVN0YXRlT2JqZWN0KCkpLGEmJihjPW0uY2xvbmVPYmplY3QoYyksYy51cmw9Yy5jbGVhblVybHx8Yy51cmwpLGN9LG0uZ2V0SWRCeVN0YXRlPWZ1bmN0aW9uKGEpe3ZhciBiPW0uZXh0cmFjdElkKGEudXJsKSxjO2lmKCFiKXtjPW0uZ2V0U3RhdGVTdHJpbmcoYSk7aWYodHlwZW9mIG0uc3RhdGVUb0lkW2NdIT0idW5kZWZpbmVkIiliPW0uc3RhdGVUb0lkW2NdO2Vsc2UgaWYodHlwZW9mIG0uc3RvcmUuc3RhdGVUb0lkW2NdIT0idW5kZWZpbmVkIiliPW0uc3RvcmUuc3RhdGVUb0lkW2NdO2Vsc2V7Zm9yKDs7KXtiPShuZXcgRGF0ZSkuZ2V0VGltZSgpK1N0cmluZyhNYXRoLnJhbmRvbSgpKS5yZXBsYWNlKC9cRC9nLCIiKTtpZih0eXBlb2YgbS5pZFRvU3RhdGVbYl09PSJ1bmRlZmluZWQiJiZ0eXBlb2YgbS5zdG9yZS5pZFRvU3RhdGVbYl09PSJ1bmRlZmluZWQiKWJyZWFrfW0uc3RhdGVUb0lkW2NdPWIsbS5pZFRvU3RhdGVbYl09YX19cmV0dXJuIGJ9LG0ubm9ybWFsaXplU3RhdGU9ZnVuY3Rpb24oYSl7dmFyIGIsYztpZighYXx8dHlwZW9mIGEhPSJvYmplY3QiKWE9e307aWYodHlwZW9mIGEubm9ybWFsaXplZCE9InVuZGVmaW5lZCIpcmV0dXJuIGE7aWYoIWEuZGF0YXx8dHlwZW9mIGEuZGF0YSE9Im9iamVjdCIpYS5kYXRhPXt9O2I9e30sYi5ub3JtYWxpemVkPSEwLGIudGl0bGU9YS50aXRsZXx8IiIsYi51cmw9bS5nZXRGdWxsVXJsKG0udW5lc2NhcGVTdHJpbmcoYS51cmx8fGQubG9jYXRpb24uaHJlZikpLGIuaGFzaD1tLmdldFNob3J0VXJsKGIudXJsKSxiLmRhdGE9bS5jbG9uZU9iamVjdChhLmRhdGEpLGIuaWQ9bS5nZXRJZEJ5U3RhdGUoYiksYi5jbGVhblVybD1iLnVybC5yZXBsYWNlKC9cPz9cJl9zdWlkLiovLCIiKSxiLnVybD1iLmNsZWFuVXJsLGM9IW0uaXNFbXB0eU9iamVjdChiLmRhdGEpO2lmKGIudGl0bGV8fGMpYi5oYXNoPW0uZ2V0U2hvcnRVcmwoYi51cmwpLnJlcGxhY2UoL1w/P1wmX3N1aWQuKi8sIiIpLC9cPy8udGVzdChiLmhhc2gpfHwoYi5oYXNoKz0iPyIpLGIuaGFzaCs9IiZfc3VpZD0iK2IuaWQ7cmV0dXJuIGIuaGFzaGVkVXJsPW0uZ2V0RnVsbFVybChiLmhhc2gpLChtLmVtdWxhdGVkLnB1c2hTdGF0ZXx8bS5idWdzLnNhZmFyaVBvbGwpJiZtLmhhc1VybER1cGxpY2F0ZShiKSYmKGIudXJsPWIuaGFzaGVkVXJsKSxifSxtLmNyZWF0ZVN0YXRlT2JqZWN0PWZ1bmN0aW9uKGEsYixjKXt2YXIgZD17ZGF0YTphLHRpdGxlOmIsdXJsOmN9O3JldHVybiBkPW0ubm9ybWFsaXplU3RhdGUoZCksZH0sbS5nZXRTdGF0ZUJ5SWQ9ZnVuY3Rpb24oYSl7YT1TdHJpbmcoYSk7dmFyIGM9bS5pZFRvU3RhdGVbYV18fG0uc3RvcmUuaWRUb1N0YXRlW2FdfHxiO3JldHVybiBjfSxtLmdldFN0YXRlU3RyaW5nPWZ1bmN0aW9uKGEpe3ZhciBiLGMsZDtyZXR1cm4gYj1tLm5vcm1hbGl6ZVN0YXRlKGEpLGM9e2RhdGE6Yi5kYXRhLHRpdGxlOmEudGl0bGUsdXJsOmEudXJsfSxkPWsuc3RyaW5naWZ5KGMpLGR9LG0uZ2V0U3RhdGVJZD1mdW5jdGlvbihhKXt2YXIgYixjO3JldHVybiBiPW0ubm9ybWFsaXplU3RhdGUoYSksYz1iLmlkLGN9LG0uZ2V0SGFzaEJ5U3RhdGU9ZnVuY3Rpb24oYSl7dmFyIGIsYztyZXR1cm4gYj1tLm5vcm1hbGl6ZVN0YXRlKGEpLGM9Yi5oYXNoLGN9LG0uZXh0cmFjdElkPWZ1bmN0aW9uKGEpe3ZhciBiLGMsZDtyZXR1cm4gYz0vKC4qKVwmX3N1aWQ9KFswLTldKykkLy5leGVjKGEpLGQ9Yz9jWzFdfHxhOmEsYj1jP1N0cmluZyhjWzJdfHwiIik6IiIsYnx8ITF9LG0uaXNUcmFkaXRpb25hbEFuY2hvcj1mdW5jdGlvbihhKXt2YXIgYj0hL1tcL1w/XC5dLy50ZXN0KGEpO3JldHVybiBifSxtLmV4dHJhY3RTdGF0ZT1mdW5jdGlvbihhLGIpe3ZhciBjPW51bGwsZCxlO3JldHVybiBiPWJ8fCExLGQ9bS5leHRyYWN0SWQoYSksZCYmKGM9bS5nZXRTdGF0ZUJ5SWQoZCkpLGN8fChlPW0uZ2V0RnVsbFVybChhKSxkPW0uZ2V0SWRCeVVybChlKXx8ITEsZCYmKGM9bS5nZXRTdGF0ZUJ5SWQoZCkpLCFjJiZiJiYhbS5pc1RyYWRpdGlvbmFsQW5jaG9yKGEpJiYoYz1tLmNyZWF0ZVN0YXRlT2JqZWN0KG51bGwsbnVsbCxlKSkpLGN9LG0uZ2V0SWRCeVVybD1mdW5jdGlvbihhKXt2YXIgYz1tLnVybFRvSWRbYV18fG0uc3RvcmUudXJsVG9JZFthXXx8YjtyZXR1cm4gY30sbS5nZXRMYXN0U2F2ZWRTdGF0ZT1mdW5jdGlvbigpe3JldHVybiBtLnNhdmVkU3RhdGVzW20uc2F2ZWRTdGF0ZXMubGVuZ3RoLTFdfHxifSxtLmdldExhc3RTdG9yZWRTdGF0ZT1mdW5jdGlvbigpe3JldHVybiBtLnN0b3JlZFN0YXRlc1ttLnN0b3JlZFN0YXRlcy5sZW5ndGgtMV18fGJ9LG0uaGFzVXJsRHVwbGljYXRlPWZ1bmN0aW9uKGEpe3ZhciBiPSExLGM7cmV0dXJuIGM9bS5leHRyYWN0U3RhdGUoYS51cmwpLGI9YyYmYy5pZCE9PWEuaWQsYn0sbS5zdG9yZVN0YXRlPWZ1bmN0aW9uKGEpe3JldHVybiBtLnVybFRvSWRbYS51cmxdPWEuaWQsbS5zdG9yZWRTdGF0ZXMucHVzaChtLmNsb25lT2JqZWN0KGEpKSxhfSxtLmlzTGFzdFNhdmVkU3RhdGU9ZnVuY3Rpb24oYSl7dmFyIGI9ITEsYyxkLGU7cmV0dXJuIG0uc2F2ZWRTdGF0ZXMubGVuZ3RoJiYoYz1hLmlkLGQ9bS5nZXRMYXN0U2F2ZWRTdGF0ZSgpLGU9ZC5pZCxiPWM9PT1lKSxifSxtLnNhdmVTdGF0ZT1mdW5jdGlvbihhKXtyZXR1cm4gbS5pc0xhc3RTYXZlZFN0YXRlKGEpPyExOihtLnNhdmVkU3RhdGVzLnB1c2gobS5jbG9uZU9iamVjdChhKSksITApfSxtLmdldFN0YXRlQnlJbmRleD1mdW5jdGlvbihhKXt2YXIgYj1udWxsO3JldHVybiB0eXBlb2YgYT09InVuZGVmaW5lZCI/Yj1tLnNhdmVkU3RhdGVzW20uc2F2ZWRTdGF0ZXMubGVuZ3RoLTFdOmE8MD9iPW0uc2F2ZWRTdGF0ZXNbbS5zYXZlZFN0YXRlcy5sZW5ndGgrYV06Yj1tLnNhdmVkU3RhdGVzW2FdLGJ9LG0uZ2V0SGFzaD1mdW5jdGlvbigpe3ZhciBhPW0udW5lc2NhcGVIYXNoKGQubG9jYXRpb24uaGFzaCk7cmV0dXJuIGF9LG0udW5lc2NhcGVTdHJpbmc9ZnVuY3Rpb24oYil7dmFyIGM9YixkO2Zvcig7Oyl7ZD1hLnVuZXNjYXBlKGMpO2lmKGQ9PT1jKWJyZWFrO2M9ZH1yZXR1cm4gY30sbS51bmVzY2FwZUhhc2g9ZnVuY3Rpb24oYSl7dmFyIGI9bS5ub3JtYWxpemVIYXNoKGEpO3JldHVybiBiPW0udW5lc2NhcGVTdHJpbmcoYiksYn0sbS5ub3JtYWxpemVIYXNoPWZ1bmN0aW9uKGEpe3ZhciBiPWEucmVwbGFjZSgvW14jXSojLywiIikucmVwbGFjZSgvIy4qLywiIik7cmV0dXJuIGJ9LG0uc2V0SGFzaD1mdW5jdGlvbihhLGIpe3ZhciBjLGUsZjtyZXR1cm4gYiE9PSExJiZtLmJ1c3koKT8obS5wdXNoUXVldWUoe3Njb3BlOm0sY2FsbGJhY2s6bS5zZXRIYXNoLGFyZ3M6YXJndW1lbnRzLHF1ZXVlOmJ9KSwhMSk6KGM9bS5lc2NhcGVIYXNoKGEpLG0uYnVzeSghMCksZT1tLmV4dHJhY3RTdGF0ZShhLCEwKSxlJiYhbS5lbXVsYXRlZC5wdXNoU3RhdGU/bS5wdXNoU3RhdGUoZS5kYXRhLGUudGl0bGUsZS51cmwsITEpOmQubG9jYXRpb24uaGFzaCE9PWMmJihtLmJ1Z3Muc2V0SGFzaD8oZj1tLmdldFBhZ2VVcmwoKSxtLnB1c2hTdGF0ZShudWxsLG51bGwsZisiIyIrYywhMSkpOmQubG9jYXRpb24uaGFzaD1jKSxtKX0sbS5lc2NhcGVIYXNoPWZ1bmN0aW9uKGIpe3ZhciBjPW0ubm9ybWFsaXplSGFzaChiKTtyZXR1cm4gYz1hLmVzY2FwZShjKSxtLmJ1Z3MuaGFzaEVzY2FwZXx8KGM9Yy5yZXBsYWNlKC9cJTIxL2csIiEiKS5yZXBsYWNlKC9cJTI2L2csIiYiKS5yZXBsYWNlKC9cJTNEL2csIj0iKS5yZXBsYWNlKC9cJTNGL2csIj8iKSksY30sbS5nZXRIYXNoQnlVcmw9ZnVuY3Rpb24oYSl7dmFyIGI9U3RyaW5nKGEpLnJlcGxhY2UoLyhbXiNdKikjPyhbXiNdKikjPyguKikvLCIkMiIpO3JldHVybiBiPW0udW5lc2NhcGVIYXNoKGIpLGJ9LG0uc2V0VGl0bGU9ZnVuY3Rpb24oYSl7dmFyIGI9YS50aXRsZSxjO2J8fChjPW0uZ2V0U3RhdGVCeUluZGV4KDApLGMmJmMudXJsPT09YS51cmwmJihiPWMudGl0bGV8fG0ub3B0aW9ucy5pbml0aWFsVGl0bGUpKTt0cnl7ZC5nZXRFbGVtZW50c0J5VGFnTmFtZSgidGl0bGUiKVswXS5pbm5lckhUTUw9Yi5yZXBsYWNlKCI8IiwiJmx0OyIpLnJlcGxhY2UoIj4iLCImZ3Q7IikucmVwbGFjZSgiICYgIiwiICZhbXA7ICIpfWNhdGNoKGUpe31yZXR1cm4gZC50aXRsZT1iLG19LG0ucXVldWVzPVtdLG0uYnVzeT1mdW5jdGlvbihhKXt0eXBlb2YgYSE9InVuZGVmaW5lZCI/bS5idXN5LmZsYWc9YTp0eXBlb2YgbS5idXN5LmZsYWc9PSJ1bmRlZmluZWQiJiYobS5idXN5LmZsYWc9ITEpO2lmKCFtLmJ1c3kuZmxhZyl7aChtLmJ1c3kudGltZW91dCk7dmFyIGI9ZnVuY3Rpb24oKXt2YXIgYSxjLGQ7aWYobS5idXN5LmZsYWcpcmV0dXJuO2ZvcihhPW0ucXVldWVzLmxlbmd0aC0xO2E+PTA7LS1hKXtjPW0ucXVldWVzW2FdO2lmKGMubGVuZ3RoPT09MCljb250aW51ZTtkPWMuc2hpZnQoKSxtLmZpcmVRdWV1ZUl0ZW0oZCksbS5idXN5LnRpbWVvdXQ9ZyhiLG0ub3B0aW9ucy5idXN5RGVsYXkpfX07bS5idXN5LnRpbWVvdXQ9ZyhiLG0ub3B0aW9ucy5idXN5RGVsYXkpfXJldHVybiBtLmJ1c3kuZmxhZ30sbS5idXN5LmZsYWc9ITEsbS5maXJlUXVldWVJdGVtPWZ1bmN0aW9uKGEpe3JldHVybiBhLmNhbGxiYWNrLmFwcGx5KGEuc2NvcGV8fG0sYS5hcmdzfHxbXSl9LG0ucHVzaFF1ZXVlPWZ1bmN0aW9uKGEpe3JldHVybiBtLnF1ZXVlc1thLnF1ZXVlfHwwXT1tLnF1ZXVlc1thLnF1ZXVlfHwwXXx8W10sbS5xdWV1ZXNbYS5xdWV1ZXx8MF0ucHVzaChhKSxtfSxtLnF1ZXVlPWZ1bmN0aW9uKGEsYil7cmV0dXJuIHR5cGVvZiBhPT0iZnVuY3Rpb24iJiYoYT17Y2FsbGJhY2s6YX0pLHR5cGVvZiBiIT0idW5kZWZpbmVkIiYmKGEucXVldWU9YiksbS5idXN5KCk/bS5wdXNoUXVldWUoYSk6bS5maXJlUXVldWVJdGVtKGEpLG19LG0uY2xlYXJRdWV1ZT1mdW5jdGlvbigpe3JldHVybiBtLmJ1c3kuZmxhZz0hMSxtLnF1ZXVlcz1bXSxtfSxtLnN0YXRlQ2hhbmdlZD0hMSxtLmRvdWJsZUNoZWNrZXI9ITEsbS5kb3VibGVDaGVja0NvbXBsZXRlPWZ1bmN0aW9uKCl7cmV0dXJuIG0uc3RhdGVDaGFuZ2VkPSEwLG0uZG91YmxlQ2hlY2tDbGVhcigpLG19LG0uZG91YmxlQ2hlY2tDbGVhcj1mdW5jdGlvbigpe3JldHVybiBtLmRvdWJsZUNoZWNrZXImJihoKG0uZG91YmxlQ2hlY2tlciksbS5kb3VibGVDaGVja2VyPSExKSxtfSxtLmRvdWJsZUNoZWNrPWZ1bmN0aW9uKGEpe3JldHVybiBtLnN0YXRlQ2hhbmdlZD0hMSxtLmRvdWJsZUNoZWNrQ2xlYXIoKSxtLmJ1Z3MuaWVEb3VibGVDaGVjayYmKG0uZG91YmxlQ2hlY2tlcj1nKGZ1bmN0aW9uKCl7cmV0dXJuIG0uZG91YmxlQ2hlY2tDbGVhcigpLG0uc3RhdGVDaGFuZ2VkfHxhKCksITB9LG0ub3B0aW9ucy5kb3VibGVDaGVja0ludGVydmFsKSksbX0sbS5zYWZhcmlTdGF0ZVBvbGw9ZnVuY3Rpb24oKXt2YXIgYj1tLmV4dHJhY3RTdGF0ZShkLmxvY2F0aW9uLmhyZWYpLGM7aWYoIW0uaXNMYXN0U2F2ZWRTdGF0ZShiKSljPWI7ZWxzZSByZXR1cm47cmV0dXJuIGN8fChjPW0uY3JlYXRlU3RhdGVPYmplY3QoKSksbS5BZGFwdGVyLnRyaWdnZXIoYSwicG9wc3RhdGUiKSxtfSxtLmJhY2s9ZnVuY3Rpb24oYSl7cmV0dXJuIGEhPT0hMSYmbS5idXN5KCk/KG0ucHVzaFF1ZXVlKHtzY29wZTptLGNhbGxiYWNrOm0uYmFjayxhcmdzOmFyZ3VtZW50cyxxdWV1ZTphfSksITEpOihtLmJ1c3koITApLG0uZG91YmxlQ2hlY2soZnVuY3Rpb24oKXttLmJhY2soITEpfSksbi5nbygtMSksITApfSxtLmZvcndhcmQ9ZnVuY3Rpb24oYSl7cmV0dXJuIGEhPT0hMSYmbS5idXN5KCk/KG0ucHVzaFF1ZXVlKHtzY29wZTptLGNhbGxiYWNrOm0uZm9yd2FyZCxhcmdzOmFyZ3VtZW50cyxxdWV1ZTphfSksITEpOihtLmJ1c3koITApLG0uZG91YmxlQ2hlY2soZnVuY3Rpb24oKXttLmZvcndhcmQoITEpfSksbi5nbygxKSwhMCl9LG0uZ289ZnVuY3Rpb24oYSxiKXt2YXIgYztpZihhPjApZm9yKGM9MTtjPD1hOysrYyltLmZvcndhcmQoYik7ZWxzZXtpZighKGE8MCkpdGhyb3cgbmV3IEVycm9yKCJIaXN0b3J5LmdvOiBIaXN0b3J5LmdvIHJlcXVpcmVzIGEgcG9zaXRpdmUgb3IgbmVnYXRpdmUgaW50ZWdlciBwYXNzZWQuIik7Zm9yKGM9LTE7Yz49YTstLWMpbS5iYWNrKGIpfXJldHVybiBtfTtpZihtLmVtdWxhdGVkLnB1c2hTdGF0ZSl7dmFyIG89ZnVuY3Rpb24oKXt9O20ucHVzaFN0YXRlPW0ucHVzaFN0YXRlfHxvLG0ucmVwbGFjZVN0YXRlPW0ucmVwbGFjZVN0YXRlfHxvfWVsc2UgbS5vblBvcFN0YXRlPWZ1bmN0aW9uKGIsYyl7dmFyIGU9ITEsZj0hMSxnLGg7cmV0dXJuIG0uZG91YmxlQ2hlY2tDb21wbGV0ZSgpLGc9bS5nZXRIYXNoKCksZz8oaD1tLmV4dHJhY3RTdGF0ZShnfHxkLmxvY2F0aW9uLmhyZWYsITApLGg/bS5yZXBsYWNlU3RhdGUoaC5kYXRhLGgudGl0bGUsaC51cmwsITEpOihtLkFkYXB0ZXIudHJpZ2dlcihhLCJhbmNob3JjaGFuZ2UiKSxtLmJ1c3koITEpKSxtLmV4cGVjdGVkU3RhdGVJZD0hMSwhMSk6KGU9bS5BZGFwdGVyLmV4dHJhY3RFdmVudERhdGEoInN0YXRlIixiLGMpfHwhMSxlP2Y9bS5nZXRTdGF0ZUJ5SWQoZSk6bS5leHBlY3RlZFN0YXRlSWQ/Zj1tLmdldFN0YXRlQnlJZChtLmV4cGVjdGVkU3RhdGVJZCk6Zj1tLmV4dHJhY3RTdGF0ZShkLmxvY2F0aW9uLmhyZWYpLGZ8fChmPW0uY3JlYXRlU3RhdGVPYmplY3QobnVsbCxudWxsLGQubG9jYXRpb24uaHJlZikpLG0uZXhwZWN0ZWRTdGF0ZUlkPSExLG0uaXNMYXN0U2F2ZWRTdGF0ZShmKT8obS5idXN5KCExKSwhMSk6KG0uc3RvcmVTdGF0ZShmKSxtLnNhdmVTdGF0ZShmKSxtLnNldFRpdGxlKGYpLG0uQWRhcHRlci50cmlnZ2VyKGEsInN0YXRlY2hhbmdlIiksbS5idXN5KCExKSwhMCkpfSxtLkFkYXB0ZXIuYmluZChhLCJwb3BzdGF0ZSIsbS5vblBvcFN0YXRlKSxtLnB1c2hTdGF0ZT1mdW5jdGlvbihiLGMsZCxlKXtpZihtLmdldEhhc2hCeVVybChkKSYmbS5lbXVsYXRlZC5wdXNoU3RhdGUpdGhyb3cgbmV3IEVycm9yKCJIaXN0b3J5LmpzIGRvZXMgbm90IHN1cHBvcnQgc3RhdGVzIHdpdGggZnJhZ2VtZW50LWlkZW50aWZpZXJzIChoYXNoZXMvYW5jaG9ycykuIik7aWYoZSE9PSExJiZtLmJ1c3koKSlyZXR1cm4gbS5wdXNoUXVldWUoe3Njb3BlOm0sY2FsbGJhY2s6bS5wdXNoU3RhdGUsYXJnczphcmd1bWVudHMscXVldWU6ZX0pLCExO20uYnVzeSghMCk7dmFyIGY9bS5jcmVhdGVTdGF0ZU9iamVjdChiLGMsZCk7cmV0dXJuIG0uaXNMYXN0U2F2ZWRTdGF0ZShmKT9tLmJ1c3koITEpOihtLnN0b3JlU3RhdGUoZiksbS5leHBlY3RlZFN0YXRlSWQ9Zi5pZCxuLnB1c2hTdGF0ZShmLmlkLGYudGl0bGUsZi51cmwpLG0uQWRhcHRlci50cmlnZ2VyKGEsInBvcHN0YXRlIikpLCEwfSxtLnJlcGxhY2VTdGF0ZT1mdW5jdGlvbihiLGMsZCxlKXtpZihtLmdldEhhc2hCeVVybChkKSYmbS5lbXVsYXRlZC5wdXNoU3RhdGUpdGhyb3cgbmV3IEVycm9yKCJIaXN0b3J5LmpzIGRvZXMgbm90IHN1cHBvcnQgc3RhdGVzIHdpdGggZnJhZ2VtZW50LWlkZW50aWZpZXJzIChoYXNoZXMvYW5jaG9ycykuIik7aWYoZSE9PSExJiZtLmJ1c3koKSlyZXR1cm4gbS5wdXNoUXVldWUoe3Njb3BlOm0sY2FsbGJhY2s6bS5yZXBsYWNlU3RhdGUsYXJnczphcmd1bWVudHMscXVldWU6ZX0pLCExO20uYnVzeSghMCk7dmFyIGY9bS5jcmVhdGVTdGF0ZU9iamVjdChiLGMsZCk7cmV0dXJuIG0uaXNMYXN0U2F2ZWRTdGF0ZShmKT9tLmJ1c3koITEpOihtLnN0b3JlU3RhdGUoZiksbS5leHBlY3RlZFN0YXRlSWQ9Zi5pZCxuLnJlcGxhY2VTdGF0ZShmLmlkLGYudGl0bGUsZi51cmwpLG0uQWRhcHRlci50cmlnZ2VyKGEsInBvcHN0YXRlIikpLCEwfTtpZihmKXt0cnl7bS5zdG9yZT1rLnBhcnNlKGYuZ2V0SXRlbSgiSGlzdG9yeS5zdG9yZSIpKXx8e319Y2F0Y2gocCl7bS5zdG9yZT17fX1tLm5vcm1hbGl6ZVN0b3JlKCl9ZWxzZSBtLnN0b3JlPXt9LG0ubm9ybWFsaXplU3RvcmUoKTttLkFkYXB0ZXIuYmluZChhLCJiZWZvcmV1bmxvYWQiLG0uY2xlYXJBbGxJbnRlcnZhbHMpLG0uQWRhcHRlci5iaW5kKGEsInVubG9hZCIsbS5jbGVhckFsbEludGVydmFscyksbS5zYXZlU3RhdGUobS5zdG9yZVN0YXRlKG0uZXh0cmFjdFN0YXRlKGQubG9jYXRpb24uaHJlZiwhMCkpKSxmJiYobS5vblVubG9hZD1mdW5jdGlvbigpe3ZhciBhLGI7dHJ5e2E9ay5wYXJzZShmLmdldEl0ZW0oIkhpc3Rvcnkuc3RvcmUiKSl8fHt9fWNhdGNoKGMpe2E9e319YS5pZFRvU3RhdGU9YS5pZFRvU3RhdGV8fHt9LGEudXJsVG9JZD1hLnVybFRvSWR8fHt9LGEuc3RhdGVUb0lkPWEuc3RhdGVUb0lkfHx7fTtmb3IoYiBpbiBtLmlkVG9TdGF0ZSl7aWYoIW0uaWRUb1N0YXRlLmhhc093blByb3BlcnR5KGIpKWNvbnRpbnVlO2EuaWRUb1N0YXRlW2JdPW0uaWRUb1N0YXRlW2JdfWZvcihiIGluIG0udXJsVG9JZCl7aWYoIW0udXJsVG9JZC5oYXNPd25Qcm9wZXJ0eShiKSljb250aW51ZTthLnVybFRvSWRbYl09bS51cmxUb0lkW2JdfWZvcihiIGluIG0uc3RhdGVUb0lkKXtpZighbS5zdGF0ZVRvSWQuaGFzT3duUHJvcGVydHkoYikpY29udGludWU7YS5zdGF0ZVRvSWRbYl09bS5zdGF0ZVRvSWRbYl19bS5zdG9yZT1hLG0ubm9ybWFsaXplU3RvcmUoKSxmLnNldEl0ZW0oIkhpc3Rvcnkuc3RvcmUiLGsuc3RyaW5naWZ5KGEpKX0sbS5pbnRlcnZhbExpc3QucHVzaChpKG0ub25VbmxvYWQsbS5vcHRpb25zLnN0b3JlSW50ZXJ2YWwpKSxtLkFkYXB0ZXIuYmluZChhLCJiZWZvcmV1bmxvYWQiLG0ub25VbmxvYWQpLG0uQWRhcHRlci5iaW5kKGEsInVubG9hZCIsbS5vblVubG9hZCkpO2lmKCFtLmVtdWxhdGVkLnB1c2hTdGF0ZSl7bS5idWdzLnNhZmFyaVBvbGwmJm0uaW50ZXJ2YWxMaXN0LnB1c2goaShtLnNhZmFyaVN0YXRlUG9sbCxtLm9wdGlvbnMuc2FmYXJpUG9sbEludGVydmFsKSk7aWYoZS52ZW5kb3I9PT0iQXBwbGUgQ29tcHV0ZXIsIEluYy4ifHwoZS5hcHBDb2RlTmFtZXx8IiIpPT09Ik1vemlsbGEiKW0uQWRhcHRlci5iaW5kKGEsImhhc2hjaGFuZ2UiLGZ1bmN0aW9uKCl7bS5BZGFwdGVyLnRyaWdnZXIoYSwicG9wc3RhdGUiKX0pLG0uZ2V0SGFzaCgpJiZtLkFkYXB0ZXIub25Eb21Mb2FkKGZ1bmN0aW9uKCl7bS5BZGFwdGVyLnRyaWdnZXIoYSwiaGFzaGNoYW5nZSIpfSl9fSxtLmluaXQoKX0pKHdpbmRvdykKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9wYWdlcy90cmFuc2NyaXB0cy8yMDEzX0VjbGlwc2VDb25GcmFuY2UvanMvcHJldHRpZnkvbGFuZy1hcG9sbG8uanMgYi9wYWdlcy90cmFuc2NyaXB0cy8yMDEzX0VjbGlwc2VDb25GcmFuY2UvanMvcHJldHRpZnkvbGFuZy1hcG9sbG8uanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzA5OGJhZgotLS0gL2Rldi9udWxsCisrKyBiL3BhZ2VzL3RyYW5zY3JpcHRzLzIwMTNfRWNsaXBzZUNvbkZyYW5jZS9qcy9wcmV0dGlmeS9sYW5nLWFwb2xsby5qcwpAQCAtMCwwICsxLDIgQEAKK1BSLnJlZ2lzdGVyTGFuZ0hhbmRsZXIoUFIuY3JlYXRlU2ltcGxlTGV4ZXIoW1siY29tIiwvXiNbXlxuXHJdKi8sbnVsbCwiIyJdLFsicGxuIiwvXltcdFxuXHIgXHhhMF0rLyxudWxsLCJcdFxuXHIgwlx4YTAiXSxbInN0ciIsL14iKD86W14iXFxdfFxcW1xTXHNdKSooPzoifCQpLyxudWxsLCciJ11dLFtbImt3ZCIsL14oPzpBRFN8QUR8QVVHfEJaRnxCWk1GfENBRXxDQUZ8Q0F8Q0NTfENPTXxDU3xEQVN8RENBfERDT018RENTfERET1VCTHxESU18RE9VQkxFfERUQ0J8RFRDRnxEVnxEWENIfEVEUlVQVHxFWFRFTkR8SU5DUnxJTkRFWHxORFh8SU5ISU5UfExYQ0h8TUFTS3xNU0t8TVB8TVNVfE5PT1B8T1ZTS3xRWENIfFJBTkR8UkVBRHxSRUxJTlR8UkVTVU1FfFJFVFVSTnxST1J8UlhPUnxTUVVBUkV8U1V8VENSfFRDQUF8T1ZTS3xUQ0Z8VEN8VFN8V0FORHxXT1J8V1JJVEV8WENIfFhMUXxYWEFMUXxaTHxaUXxBRER8QURafFNVQnxTVVp8TVBZfE1QUnxNUFp8RFZQfENPTXxBQlN8Q0xBfENMWnxMRFF8U1RPfFNUUXxBTFN8TExTfExSU3xUUkF8VFNRfFRNSXxUT1Z8QVhUfFRJWHxETFl8SU5QfE9VVClccy8sCitudWxsXSxbInR5cCIsL14oPzotP0dFTkFEUnw9TUlOVVN8MkJDQURSfFZOfEJPRnxNTXwtPzJDQURSfC0/WzEtNl1ETkFEUnxBRFJFU3xCQkNPTnxbRVNdP0JBTks9P3xCTE9DS3xCTktTVU18RT9DQURSfENPVU5UXCo/fDI/REVDXCo/fC0/RE5DSEFOfC0/RE5QVFJ8RVFVQUxTfEVSQVNFfE1FTU9SWXwyP09DVHxSRU1BRFJ8U0VUTE9DfFNVQlJPfE9SR3xCU1N8QkVTfFNZTnxFUVV8REVGSU5FfEVORClccy8sbnVsbF0sWyJsaXQiLC9eJyg/Oi0qKD86XHd8XFxbIS1+XSkoPzpbXHctXSp8XFxbIS1+XSlbIT0/XT8pPy9dLFsicGxuIiwvXi0qKD86WyEtel18XFxbIS1+XSkoPzpbXHctXSp8XFxbIS1+XSlbIT0/XT8vXSxbInB1biIsL15bXlx3XHRcblxyICInLSk7XFxceGEwXSsvXV0pLFsiYXBvbGxvIiwiYWdjIiwiYWVhIl0pOwpkaWZmIC0tZ2l0IGEvcGFnZXMvdHJhbnNjcmlwdHMvMjAxM19FY2xpcHNlQ29uRnJhbmNlL2pzL3ByZXR0aWZ5L2xhbmctY2xqLmpzIGIvcGFnZXMvdHJhbnNjcmlwdHMvMjAxM19FY2xpcHNlQ29uRnJhbmNlL2pzL3ByZXR0aWZ5L2xhbmctY2xqLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU0MmEyMjAKLS0tIC9kZXYvbnVsbAorKysgYi9wYWdlcy90cmFuc2NyaXB0cy8yMDEzX0VjbGlwc2VDb25GcmFuY2UvanMvcHJldHRpZnkvbGFuZy1jbGouanMKQEAgLTAsMCArMSwxOCBAQAorLyoKKyBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4KKworIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorCisgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorKi8KK3ZhciBhPW51bGw7CitQUi5yZWdpc3RlckxhbmdIYW5kbGVyKFBSLmNyZWF0ZVNpbXBsZUxleGVyKFtbIm9wbiIsL15bKFt7XSsvLGEsIihbeyJdLFsiY2xvIiwvXlspXF19XSsvLGEsIildfSJdLFsiY29tIiwvXjtbXlxuXHJdKi8sYSwiOyJdLFsicGxuIiwvXltcdFxuXHIgXHhhMF0rLyxhLCJcdFxuXHIgXHhhMCJdLFsic3RyIiwvXiIoPzpbXiJcXF18XFxbXFNcc10pKig/OiJ8JCkvLGEsJyInXV0sW1sia3dkIiwvXig/OmRlZnxpZnxkb3xsZXR8cXVvdGV8dmFyfGZufGxvb3B8cmVjdXJ8dGhyb3d8dHJ5fG1vbml0b3ItZW50ZXJ8bW9uaXRvci1leGl0fGRlZm1hY3JvfGRlZm58ZGVmbi18bWFjcm9leHBhbmR8bWFjcm9leHBhbmQtMXxmb3J8ZG9zZXF8ZG9zeW5jfGRvdGltZXN8YW5kfG9yfHdoZW58bm90fGFzc2VydHxkb3RvfHByb3h5fGRlZnN0cnVjdHxmaXJzdHxyZXN0fGNvbnN8ZGVmcHJvdG9jb2x8ZGVmdHlwZXxkZWZyZWNvcmR8cmVpZnl8ZGVmbXVsdGl8ZGVmbWV0aG9kfG1ldGF8d2l0aC1tZXRhfG5zfGluLW5zfGNyZWF0ZS1uc3xpbXBvcnR8aW50ZXJufHJlZmVyfGFsaWFzfG5hbWVzcGFjZXxyZXNvbHZlfHJlZnxkZXJlZnxyZWZzZXR8bmV3fHNldCF8bWVtZm58dG8tYXJyYXl8aW50by1hcnJheXxhc2V0fGdlbi1jbGFzc3xyZWR1Y2V8bWFwfGZpbHRlcnxmaW5kfG5pbD98ZW1wdHk/fGhhc2gtbWFwfGhhc2gtc2V0fHZlY3x2ZWN0b3J8c2VxfGZsYXR0ZW58cmV2ZXJzZXxhc3NvY3xkaXNzb2N8bGlzdHxsaXN0P3xkaXNqfGdldHx1bmlvbnxkaWZmZXJlbmNlfGludGVyc2VjdGlvbnxleHRlbmR8ZXh0ZW5kLXR5cGV8ZXh0ZW5kLXByb3RvY29sfHBybilcYi8sYV0sCitbInR5cCIsL146W1xkQS1aYS16LV0rL11dKSxbImNsaiJdKTsKZGlmZiAtLWdpdCBhL3BhZ2VzL3RyYW5zY3JpcHRzLzIwMTNfRWNsaXBzZUNvbkZyYW5jZS9qcy9wcmV0dGlmeS9sYW5nLWNzcy5qcyBiL3BhZ2VzL3RyYW5zY3JpcHRzLzIwMTNfRWNsaXBzZUNvbkZyYW5jZS9qcy9wcmV0dGlmeS9sYW5nLWNzcy5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNDFlMWY1Ci0tLSAvZGV2L251bGwKKysrIGIvcGFnZXMvdHJhbnNjcmlwdHMvMjAxM19FY2xpcHNlQ29uRnJhbmNlL2pzL3ByZXR0aWZ5L2xhbmctY3NzLmpzCkBAIC0wLDAgKzEsMiBAQAorUFIucmVnaXN0ZXJMYW5nSGFuZGxlcihQUi5jcmVhdGVTaW1wbGVMZXhlcihbWyJwbG4iLC9eW1x0XG5cZlxyIF0rLyxudWxsLCIgXHRcclxuDCJdXSxbWyJzdHIiLC9eIig/OlteXG5cZlxyIlxcXXxcXCg/OlxyXG4/fFxufFxmKXxcXFtcU1xzXSkqIi8sbnVsbF0sWyJzdHIiLC9eJyg/OlteXG5cZlxyJ1xcXXxcXCg/OlxyXG4/fFxufFxmKXxcXFtcU1xzXSkqJy8sbnVsbF0sWyJsYW5nLWNzcy1zdHIiLC9edXJsXCgoW14iJyldKilcKS9pXSxbImt3ZCIsL14oPzp1cmx8cmdifCFpbXBvcnRhbnR8QGltcG9ydHxAcGFnZXxAbWVkaWF8QGNoYXJzZXR8aW5oZXJpdCkoPz1bXlx3LV18JCkvaSxudWxsXSxbImxhbmctY3NzLWt3IiwvXigtPyg/OltfYS16XXxcXFtcZGEtZl0rID8pKD86W1x3LV18XFxcXFtcZGEtZl0rID8pKilccyo6L2ldLFsiY29tIiwvXlwvXCpbXipdKlwqKyg/OlteKi9dW14qXSpcKispKlwvL10sWyJjb20iLAorL14oPzo8XCEtLXwtLVw+KS9dLFsibGl0IiwvXig/OlxkK3xcZCpcLlxkKykoPzolfFthLXpdKyk/L2ldLFsibGl0IiwvXiNbXGRhLWZdezMsNn0vaV0sWyJwbG4iLC9eLT8oPzpbX2Etel18XFxbXGRhLWZdKyA/KSg/Oltcdy1dfFxcXFxbXGRhLWZdKyA/KSovaV0sWyJwdW4iLC9eW15cc1x3IiddKy9dXSksWyJjc3MiXSk7UFIucmVnaXN0ZXJMYW5nSGFuZGxlcihQUi5jcmVhdGVTaW1wbGVMZXhlcihbXSxbWyJrd2QiLC9eLT8oPzpbX2Etel18XFxbXGRhLWZdKyA/KSg/Oltcdy1dfFxcXFxbXGRhLWZdKyA/KSovaV1dKSxbImNzcy1rdyJdKTtQUi5yZWdpc3RlckxhbmdIYW5kbGVyKFBSLmNyZWF0ZVNpbXBsZUxleGVyKFtdLFtbInN0ciIsL15bXiInKV0rL11dKSxbImNzcy1zdHIiXSk7CmRpZmYgLS1naXQgYS9wYWdlcy90cmFuc2NyaXB0cy8yMDEzX0VjbGlwc2VDb25GcmFuY2UvanMvcHJldHRpZnkvbGFuZy1nby5qcyBiL3BhZ2VzL3RyYW5zY3JpcHRzLzIwMTNfRWNsaXBzZUNvbkZyYW5jZS9qcy9wcmV0dGlmeS9sYW5nLWdvLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZjMThkYzAKLS0tIC9kZXYvbnVsbAorKysgYi9wYWdlcy90cmFuc2NyaXB0cy8yMDEzX0VjbGlwc2VDb25GcmFuY2UvanMvcHJldHRpZnkvbGFuZy1nby5qcwpAQCAtMCwwICsxIEBACitQUi5yZWdpc3RlckxhbmdIYW5kbGVyKFBSLmNyZWF0ZVNpbXBsZUxleGVyKFtbInBsbiIsL15bXHRcblxyIFx4YTBdKy8sbnVsbCwiXHRcblxyIMJceGEwIl0sWyJwbG4iLC9eKD86Iig/OlteIlxcXXxcXFtcU1xzXSkqKD86InwkKXwnKD86W14nXFxdfFxcW1xTXHNdKSsoPzonfCQpfGBbXmBdKig/OmB8JCkpLyxudWxsLCJcIiciXV0sW1siY29tIiwvXig/OlwvXC9bXlxuXHJdKnxcL1wqW1xTXHNdKj9cKlwvKS9dLFsicGxuIiwvXig/OlteIicvYF18XC8oPyFbKi9dKSkrL11dKSxbImdvIl0pOwpkaWZmIC0tZ2l0IGEvcGFnZXMvdHJhbnNjcmlwdHMvMjAxM19FY2xpcHNlQ29uRnJhbmNlL2pzL3ByZXR0aWZ5L2xhbmctaHMuanMgYi9wYWdlcy90cmFuc2NyaXB0cy8yMDEzX0VjbGlwc2VDb25GcmFuY2UvanMvcHJldHRpZnkvbGFuZy1ocy5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZDc3YjA4Ci0tLSAvZGV2L251bGwKKysrIGIvcGFnZXMvdHJhbnNjcmlwdHMvMjAxM19FY2xpcHNlQ29uRnJhbmNlL2pzL3ByZXR0aWZ5L2xhbmctaHMuanMKQEAgLTAsMCArMSwyIEBACitQUi5yZWdpc3RlckxhbmdIYW5kbGVyKFBSLmNyZWF0ZVNpbXBsZUxleGVyKFtbInBsbiIsL15bXHQtXHIgXSsvLG51bGwsIlx0XG4LDFxyICJdLFsic3RyIiwvXiIoPzpbXlxuXGZcciJcXF18XFxbXFNcc10pKig/OiJ8JCkvLG51bGwsJyInXSxbInN0ciIsL14nKD86W15cblxmXHInXFxdfFxcW14mXSknPy8sbnVsbCwiJyJdLFsibGl0IiwvXig/OjBvWzAtN10rfDB4W1xkYS1mXSt8XGQrKD86XC5cZCspPyg/OmVbKy1dP1xkKyk/KS9pLG51bGwsIjAxMjM0NTY3ODkiXV0sW1siY29tIiwvXig/Oi0tK1teXG5cZlxyXSp8ey0oPzpbXi1dfC0rW159LV0pKi19KS9dLFsia3dkIiwvXig/OmNhc2V8Y2xhc3N8ZGF0YXxkZWZhdWx0fGRlcml2aW5nfGRvfGVsc2V8aWZ8aW1wb3J0fGlufGluZml4fGluZml4bHxpbmZpeHJ8aW5zdGFuY2V8bGV0fG1vZHVsZXxuZXd0eXBlfG9mfHRoZW58dHlwZXx3aGVyZXxfKSg/PVteXGQnQS1aYS16XXwkKS8sCitudWxsXSxbInBsbiIsL14oPzpbQS1aXVtcdyddKlwuKSpbQS1aYS16XVtcdyddKi9dLFsicHVuIiwvXlteXGRcdC1cciAiJ0EtWmEtel0rL11dKSxbImhzIl0pOwpkaWZmIC0tZ2l0IGEvcGFnZXMvdHJhbnNjcmlwdHMvMjAxM19FY2xpcHNlQ29uRnJhbmNlL2pzL3ByZXR0aWZ5L2xhbmctbGlzcC5qcyBiL3BhZ2VzL3RyYW5zY3JpcHRzLzIwMTNfRWNsaXBzZUNvbkZyYW5jZS9qcy9wcmV0dGlmeS9sYW5nLWxpc3AuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDJhMzBlOAotLS0gL2Rldi9udWxsCisrKyBiL3BhZ2VzL3RyYW5zY3JpcHRzLzIwMTNfRWNsaXBzZUNvbkZyYW5jZS9qcy9wcmV0dGlmeS9sYW5nLWxpc3AuanMKQEAgLTAsMCArMSwzIEBACit2YXIgYT1udWxsOworUFIucmVnaXN0ZXJMYW5nSGFuZGxlcihQUi5jcmVhdGVTaW1wbGVMZXhlcihbWyJvcG4iLC9eXCgrLyxhLCIoIl0sWyJjbG8iLC9eXCkrLyxhLCIpIl0sWyJjb20iLC9eO1teXG5ccl0qLyxhLCI7Il0sWyJwbG4iLC9eW1x0XG5cciBceGEwXSsvLGEsIlx0XG5cciBceGEwIl0sWyJzdHIiLC9eIig/OlteIlxcXXxcXFtcU1xzXSkqKD86InwkKS8sYSwnIiddXSxbWyJrd2QiLC9eKD86YmxvY2t8Y1thZF0rcnxjYXRjaHxjb25bZHNdfGRlZig/OmluZXx1bil8ZG98ZXF8ZXFsfGVxdWFsfGVxdWFscHxldmFsLXdoZW58ZmxldHxmb3JtYXR8Z298aWZ8bGFiZWxzfGxhbWJkYXxsZXR8bG9hZC10aW1lLXZhbHVlfGxvY2FsbHl8bWFjcm9sZXR8bXVsdGlwbGUtdmFsdWUtY2FsbHxuaWx8cHJvZ258cHJvZ3Z8cXVvdGV8cmVxdWlyZXxyZXR1cm4tZnJvbXxzZXRxfHN5bWJvbC1tYWNyb2xldHx0fHRhZ2JvZHl8dGhlfHRocm93fHVud2luZClcYi8sYV0sCitbImxpdCIsL15bKy1dPyg/OlsjMF14W1xkYS1mXSt8XGQrXC9cZCt8KD86XC5cZCt8XGQrKD86XC5cZCopPykoPzpbZGVdWystXT9cZCspPykvaV0sWyJsaXQiLC9eJyg/Oi0qKD86XHd8XFxbIS1+XSkoPzpbXHctXSp8XFxbIS1+XSlbIT0/XT8pPy9dLFsicGxuIiwvXi0qKD86W19hLXpdfFxcWyEtfl0pKD86W1x3LV0qfFxcWyEtfl0pWyE9P10/L2ldLFsicHVuIiwvXlteXHdcdFxuXHIgIictKTtcXFx4YTBdKy9dXSksWyJjbCIsImVsIiwibGlzcCIsInNjbSJdKTsKZGlmZiAtLWdpdCBhL3BhZ2VzL3RyYW5zY3JpcHRzLzIwMTNfRWNsaXBzZUNvbkZyYW5jZS9qcy9wcmV0dGlmeS9sYW5nLWx1YS5qcyBiL3BhZ2VzL3RyYW5zY3JpcHRzLzIwMTNfRWNsaXBzZUNvbkZyYW5jZS9qcy9wcmV0dGlmeS9sYW5nLWx1YS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lODNhM2M0Ci0tLSAvZGV2L251bGwKKysrIGIvcGFnZXMvdHJhbnNjcmlwdHMvMjAxM19FY2xpcHNlQ29uRnJhbmNlL2pzL3ByZXR0aWZ5L2xhbmctbHVhLmpzCkBAIC0wLDAgKzEsMiBAQAorUFIucmVnaXN0ZXJMYW5nSGFuZGxlcihQUi5jcmVhdGVTaW1wbGVMZXhlcihbWyJwbG4iLC9eW1x0XG5cciBceGEwXSsvLG51bGwsIlx0XG5cciDCXHhhMCJdLFsic3RyIiwvXig/OiIoPzpbXiJcXF18XFxbXFNcc10pKig/OiJ8JCl8Jyg/OlteJ1xcXXxcXFtcU1xzXSkqKD86J3wkKSkvLG51bGwsIlwiJyJdXSxbWyJjb20iLC9eLS0oPzpcWyg9KilcW1tcU1xzXSo/KD86XVwxXXwkKXxbXlxuXHJdKikvXSxbInN0ciIsL15cWyg9KilcW1tcU1xzXSo/KD86XVwxXXwkKS9dLFsia3dkIiwvXig/OmFuZHxicmVha3xkb3xlbHNlfGVsc2VpZnxlbmR8ZmFsc2V8Zm9yfGZ1bmN0aW9ufGlmfGlufGxvY2FsfG5pbHxub3R8b3J8cmVwZWF0fHJldHVybnx0aGVufHRydWV8dW50aWx8d2hpbGUpXGIvLG51bGxdLFsibGl0IiwvXlsrLV0/KD86MHhbXGRhLWZdK3woPzpcLlxkK3xcZCsoPzpcLlxkKik/KSg/OmVbKy1dP1xkKyk/KS9pXSwKK1sicGxuIiwvXltfYS16XVx3Ki9pXSxbInB1biIsL15bXlx3XHRcblxyIFx4YTBdW15cd1x0XG5cciAiJys9XHhhMC1dKi9dXSksWyJsdWEiXSk7CmRpZmYgLS1naXQgYS9wYWdlcy90cmFuc2NyaXB0cy8yMDEzX0VjbGlwc2VDb25GcmFuY2UvanMvcHJldHRpZnkvbGFuZy1tbC5qcyBiL3BhZ2VzL3RyYW5zY3JpcHRzLzIwMTNfRWNsaXBzZUNvbkZyYW5jZS9qcy9wcmV0dGlmeS9sYW5nLW1sLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZkZjAyZDcKLS0tIC9kZXYvbnVsbAorKysgYi9wYWdlcy90cmFuc2NyaXB0cy8yMDEzX0VjbGlwc2VDb25GcmFuY2UvanMvcHJldHRpZnkvbGFuZy1tbC5qcwpAQCAtMCwwICsxLDIgQEAKK1BSLnJlZ2lzdGVyTGFuZ0hhbmRsZXIoUFIuY3JlYXRlU2ltcGxlTGV4ZXIoW1sicGxuIiwvXltcdFxuXHIgXHhhMF0rLyxudWxsLCJcdFxuXHIgwlx4YTAiXSxbImNvbSIsL14jKD86aWZbXHRcblxyIFx4YTBdKyg/OlskX2Etel1bXHcnXSp8YGBbXlx0XG5ccmBdKig/OmBgfCQpKXxlbHNlfGVuZGlmfGxpZ2h0KS9pLG51bGwsIiMiXSxbInN0ciIsL14oPzoiKD86W14iXFxdfFxcW1xTXHNdKSooPzoifCQpfCcoPzpbXidcXF18XFxbXFNcc10pKD86J3wkKSkvLG51bGwsIlwiJyJdXSxbWyJjb20iLC9eKD86XC9cL1teXG5ccl0qfFwoXCpbXFNcc10qP1wqXCkpL10sWyJrd2QiLC9eKD86YWJzdHJhY3R8YW5kfGFzfGFzc2VydHxiZWdpbnxjbGFzc3xkZWZhdWx0fGRlbGVnYXRlfGRvfGRvbmV8ZG93bmNhc3R8ZG93bnRvfGVsaWZ8ZWxzZXxlbmR8ZXhjZXB0aW9ufGV4dGVybnxmYWxzZXxmaW5hbGx5fGZvcnxmdW58ZnVuY3Rpb258aWZ8aW58aW5oZXJpdHxpbmxpbmV8aW50ZXJmYWNlfGludGVybmFsfGxhenl8bGV0fG1hdGNofG1lbWJlcnxtb2R1bGV8bXV0YWJsZXxuYW1lc3BhY2V8bmV3fG51bGx8b2Z8b3BlbnxvcnxvdmVycmlkZXxwcml2YXRlfHB1YmxpY3xyZWN8cmV0dXJufHN0YXRpY3xzdHJ1Y3R8dGhlbnx0b3x0cnVlfHRyeXx0eXBlfHVwY2FzdHx1c2V8dmFsfHZvaWR8d2hlbnx3aGlsZXx3aXRofHlpZWxkfGFzcnxsYW5kfGxvcnxsc2x8bHNyfGx4b3J8bW9kfHNpZ3xhdG9taWN8YnJlYWt8Y2hlY2tlZHxjb21wb25lbnR8Y29uc3R8Y29uc3RyYWludHxjb25zdHJ1Y3Rvcnxjb250aW51ZXxlYWdlcnxldmVudHxleHRlcm5hbHxmaXhlZHxmdW5jdG9yfGdsb2JhbHxpbmNsdWRlfG1ldGhvZHxtaXhpbnxvYmplY3R8cGFyYWxsZWx8cHJvY2Vzc3xwcm90ZWN0ZWR8cHVyZXxzZWFsZWR8dHJhaXR8dmlydHVhbHx2b2xhdGlsZSlcYi9dLAorWyJsaXQiLC9eWystXT8oPzoweFtcZGEtZl0rfCg/OlwuXGQrfFxkKyg/OlwuXGQqKT8pKD86ZVsrLV0/XGQrKT8pL2ldLFsicGxuIiwvXig/OltfYS16XVtcdyddKlshIz9dP3xgYFteXHRcblxyYF0qKD86YGB8JCkpL2ldLFsicHVuIiwvXlteXHdcdFxuXHIgIidceGEwXSsvXV0pLFsiZnMiLCJtbCJdKTsKZGlmZiAtLWdpdCBhL3BhZ2VzL3RyYW5zY3JpcHRzLzIwMTNfRWNsaXBzZUNvbkZyYW5jZS9qcy9wcmV0dGlmeS9sYW5nLW4uanMgYi9wYWdlcy90cmFuc2NyaXB0cy8yMDEzX0VjbGlwc2VDb25GcmFuY2UvanMvcHJldHRpZnkvbGFuZy1uLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZjMmU4NWIKLS0tIC9kZXYvbnVsbAorKysgYi9wYWdlcy90cmFuc2NyaXB0cy8yMDEzX0VjbGlwc2VDb25GcmFuY2UvanMvcHJldHRpZnkvbGFuZy1uLmpzCkBAIC0wLDAgKzEsNCBAQAordmFyIGE9bnVsbDsKK1BSLnJlZ2lzdGVyTGFuZ0hhbmRsZXIoUFIuY3JlYXRlU2ltcGxlTGV4ZXIoW1sic3RyIiwvXig/OicoPzpbXlxuXHInXFxdfFxcLikqJ3wiKD86W15cblxyIlxcXXxcXC4pKig/OiJ8JCkpLyxhLCciJ10sWyJjb20iLC9eIyg/Oig/OmRlZmluZXxlbGlmfGVsc2V8ZW5kaWZ8ZXJyb3J8aWZkZWZ8aW5jbHVkZXxpZm5kZWZ8bGluZXxwcmFnbWF8dW5kZWZ8d2FybmluZylcYnxbXlxuXHJdKikvLGEsIiMiXSxbInBsbiIsL15ccysvLGEsIiBcclxuXHRceGEwIl1dLFtbInN0ciIsL15AIig/OlteIl18IiIpKig/OiJ8JCkvLGFdLFsic3RyIiwvXjwjW14jPl0qKD86Iz58JCkvLGFdLFsic3RyIiwvXjwoPzooPzooPzpcLlwuXC8pKnxcLz8pKD86W1x3LV0rKD86XC9bXHctXSspKyk/W1x3LV0rXC5ofFthLXpdXHcqKT4vLGFdLFsiY29tIiwvXlwvXC9bXlxuXHJdKi8sYV0sWyJjb20iLC9eXC9cKltcU1xzXSo/KD86XCpcL3wkKS8sCithXSxbImt3ZCIsL14oPzphYnN0cmFjdHxhbmR8YXN8YmFzZXxjYXRjaHxjbGFzc3xkZWZ8ZGVsZWdhdGV8ZW51bXxldmVudHxleHRlcm58ZmFsc2V8ZmluYWxseXxmdW58aW1wbGVtZW50c3xpbnRlcmZhY2V8aW50ZXJuYWx8aXN8bWFjcm98bWF0Y2h8bWF0Y2hlc3xtb2R1bGV8bXV0YWJsZXxuYW1lc3BhY2V8bmV3fG51bGx8b3V0fG92ZXJyaWRlfHBhcmFtc3xwYXJ0aWFsfHByaXZhdGV8cHJvdGVjdGVkfHB1YmxpY3xyZWZ8c2VhbGVkfHN0YXRpY3xzdHJ1Y3R8c3ludGF4fHRoaXN8dGhyb3d8dHJ1ZXx0cnl8dHlwZXx0eXBlb2Z8dXNpbmd8dmFyaWFudHx2aXJ0dWFsfHZvbGF0aWxlfHdoZW58d2hlcmV8d2l0aHxhc3NlcnR8YXNzZXJ0Mnxhc3luY3xicmVha3xjaGVja2VkfGNvbnRpbnVlfGRvfGVsc2V8ZW5zdXJlc3xmb3J8Zm9yZWFjaHxpZnxsYXRlfGxvY2t8bmV3fG5vbGF0ZXxvdGhlcndpc2V8cmVnZXhwfHJlcGVhdHxyZXF1aXJlc3xyZXR1cm58c3Vycm91bmR3aXRofHVuY2hlY2tlZHx1bmxlc3N8dXNpbmd8d2hpbGV8eWllbGQpXGIvLAorYV0sWyJ0eXAiLC9eKD86YXJyYXl8Ym9vbHxieXRlfGNoYXJ8ZGVjaW1hbHxkb3VibGV8ZmxvYXR8aW50fGxpc3R8bG9uZ3xvYmplY3R8c2J5dGV8c2hvcnR8c3RyaW5nfHVsb25nfHVpbnR8dWZsb2F0fHVsb25nfHVzaG9ydHx2b2lkKVxiLyxhXSxbImxpdCIsL15AWyRfYS16XVtcdyRAXSovaSxhXSxbInR5cCIsL15AW0EtWl0rW2Etel1bXHckQF0qLyxhXSxbInBsbiIsL14nP1skX2Etel1bXHckQF0qL2ksYV0sWyJsaXQiLC9eKD86MHhbXGRhLWZdK3woPzpcZCg/Ol9cZCspKlxkKig/OlwuXGQqKT98XC5cZFwrKSg/OmVbKy1dP1xkKyk/KVthLXpdKi9pLGEsIjAxMjM0NTY3ODkiXSxbInB1biIsL14uW15cc1x3Ii0kJy4vQGBdKi8sYV1dKSxbIm4iLCJuZW1lcmxlIl0pOwpkaWZmIC0tZ2l0IGEvcGFnZXMvdHJhbnNjcmlwdHMvMjAxM19FY2xpcHNlQ29uRnJhbmNlL2pzL3ByZXR0aWZ5L2xhbmctcHJvdG8uanMgYi9wYWdlcy90cmFuc2NyaXB0cy8yMDEzX0VjbGlwc2VDb25GcmFuY2UvanMvcHJldHRpZnkvbGFuZy1wcm90by5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMDA2YWQ4Ci0tLSAvZGV2L251bGwKKysrIGIvcGFnZXMvdHJhbnNjcmlwdHMvMjAxM19FY2xpcHNlQ29uRnJhbmNlL2pzL3ByZXR0aWZ5L2xhbmctcHJvdG8uanMKQEAgLTAsMCArMSBAQAorUFIucmVnaXN0ZXJMYW5nSGFuZGxlcihQUi5zb3VyY2VEZWNvcmF0b3Ioe2tleXdvcmRzOiJieXRlcyxkZWZhdWx0LGRvdWJsZSxlbnVtLGV4dGVuZCxleHRlbnNpb25zLGZhbHNlLGdyb3VwLGltcG9ydCxtYXgsbWVzc2FnZSxvcHRpb24sb3B0aW9uYWwscGFja2FnZSxyZXBlYXRlZCxyZXF1aXJlZCxyZXR1cm5zLHJwYyxzZXJ2aWNlLHN5bnRheCx0byx0cnVlIix0eXBlczovXihib29sfChkb3VibGV8cz9maXhlZHxbc3VdP2ludCkoMzJ8NjQpfGZsb2F0fHN0cmluZylcYi8sY1N0eWxlQ29tbWVudHM6ITB9KSxbInByb3RvIl0pOwpkaWZmIC0tZ2l0IGEvcGFnZXMvdHJhbnNjcmlwdHMvMjAxM19FY2xpcHNlQ29uRnJhbmNlL2pzL3ByZXR0aWZ5L2xhbmctc2NhbGEuanMgYi9wYWdlcy90cmFuc2NyaXB0cy8yMDEzX0VjbGlwc2VDb25GcmFuY2UvanMvcHJldHRpZnkvbGFuZy1zY2FsYS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MGQwMzRkCi0tLSAvZGV2L251bGwKKysrIGIvcGFnZXMvdHJhbnNjcmlwdHMvMjAxM19FY2xpcHNlQ29uRnJhbmNlL2pzL3ByZXR0aWZ5L2xhbmctc2NhbGEuanMKQEAgLTAsMCArMSwyIEBACitQUi5yZWdpc3RlckxhbmdIYW5kbGVyKFBSLmNyZWF0ZVNpbXBsZUxleGVyKFtbInBsbiIsL15bXHRcblxyIFx4YTBdKy8sbnVsbCwiXHRcblxyIMJceGEwIl0sWyJzdHIiLC9eIig/OiIiKD86IiI/KD8hIil8W14iXFxdfFxcLikqInswLDN9fCg/OlteXG5cciJcXF18XFwuKSoiPykvLG51bGwsJyInXSxbImxpdCIsL15gKD86W15cblxyXFxgXXxcXC4pKmA/LyxudWxsLCJgIl0sWyJwdW4iLC9eWyEjJSYoLS06LUBbLV57LX5dKy8sbnVsbCwiISMlJigpKissLTo7PD0+P0BbXFxdXnt8fX4iXV0sW1sic3RyIiwvXicoPzpbXlxuXHInXFxdfFxcKD86J3xbXlxuXHInXSspKScvXSxbImxpdCIsL14nWyRBLVpfYS16XVtcdyRdKig/IVtcdyQnXSkvXSxbImt3ZCIsL14oPzphYnN0cmFjdHxjYXNlfGNhdGNofGNsYXNzfGRlZnxkb3xlbHNlfGV4dGVuZHN8ZmluYWx8ZmluYWxseXxmb3J8Zm9yU29tZXxpZnxpbXBsaWNpdHxpbXBvcnR8bGF6eXxtYXRjaHxuZXd8b2JqZWN0fG92ZXJyaWRlfHBhY2thZ2V8cHJpdmF0ZXxwcm90ZWN0ZWR8cmVxdWlyZXN8cmV0dXJufHNlYWxlZHxzdXBlcnx0aHJvd3x0cmFpdHx0cnl8dHlwZXx2YWx8dmFyfHdoaWxlfHdpdGh8eWllbGQpXGIvXSwKK1sibGl0IiwvXig/OnRydWV8ZmFsc2V8bnVsbHx0aGlzKVxiL10sWyJsaXQiLC9eKD86MCg/OlswLTddK3x4W1xkYS1mXSspbD98KD86MHxbMS05XVxkKikoPzooPzpcLlxkKyk/KD86ZVsrLV0/XGQrKT9mP3xsPyl8XFwuXGQrKD86ZVsrLV0/XGQrKT9mPykvaV0sWyJ0eXAiLC9eWyRfXSpbQS1aXVtcZCRBLVpfXSpbYS16XVtcdyRdKi9dLFsicGxuIiwvXlskQS1aX2Etel1bXHckXSovXSxbImNvbSIsL15cLyg/OlwvLip8XCooPzpcL3xcKipbXiovXSkqKD86XCorXC8/KT8pL10sWyJwdW4iLC9eKD86XC4rfFwvKS9dXSksWyJzY2FsYSJdKTsKZGlmZiAtLWdpdCBhL3BhZ2VzL3RyYW5zY3JpcHRzLzIwMTNfRWNsaXBzZUNvbkZyYW5jZS9qcy9wcmV0dGlmeS9sYW5nLXNxbC5qcyBiL3BhZ2VzL3RyYW5zY3JpcHRzLzIwMTNfRWNsaXBzZUNvbkZyYW5jZS9qcy9wcmV0dGlmeS9sYW5nLXNxbC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYTcwNWIwCi0tLSAvZGV2L251bGwKKysrIGIvcGFnZXMvdHJhbnNjcmlwdHMvMjAxM19FY2xpcHNlQ29uRnJhbmNlL2pzL3ByZXR0aWZ5L2xhbmctc3FsLmpzCkBAIC0wLDAgKzEsMiBAQAorUFIucmVnaXN0ZXJMYW5nSGFuZGxlcihQUi5jcmVhdGVTaW1wbGVMZXhlcihbWyJwbG4iLC9eW1x0XG5cciBceGEwXSsvLG51bGwsIlx0XG5cciDCXHhhMCJdLFsic3RyIiwvXig/OiIoPzpbXiJcXF18XFwuKSoifCcoPzpbXidcXF18XFwuKSonKS8sbnVsbCwiXCInIl1dLFtbImNvbSIsL14oPzotLVteXG5ccl0qfFwvXCpbXFNcc10qPyg/OlwqXC98JCkpL10sWyJrd2QiLC9eKD86YWRkfGFsbHxhbHRlcnxhbmR8YW55fGFzfGFzY3xhdXRob3JpemF0aW9ufGJhY2t1cHxiZWdpbnxiZXR3ZWVufGJyZWFrfGJyb3dzZXxidWxrfGJ5fGNhc2NhZGV8Y2FzZXxjaGVja3xjaGVja3BvaW50fGNsb3NlfGNsdXN0ZXJlZHxjb2FsZXNjZXxjb2xsYXRlfGNvbHVtbnxjb21taXR8Y29tcHV0ZXxjb25zdHJhaW50fGNvbnRhaW5zfGNvbnRhaW5zdGFibGV8Y29udGludWV8Y29udmVydHxjcmVhdGV8Y3Jvc3N8Y3VycmVudHxjdXJyZW50X2RhdGV8Y3VycmVudF90aW1lfGN1cnJlbnRfdGltZXN0YW1wfGN1cnJlbnRfdXNlcnxjdXJzb3J8ZGF0YWJhc2V8ZGJjY3xkZWFsbG9jYXRlfGRlY2xhcmV8ZGVmYXVsdHxkZWxldGV8ZGVueXxkZXNjfGRpc2t8ZGlzdGluY3R8ZGlzdHJpYnV0ZWR8ZG91YmxlfGRyb3B8ZHVtbXl8ZHVtcHxlbHNlfGVuZHxlcnJsdmx8ZXNjYXBlfGV4Y2VwdHxleGVjfGV4ZWN1dGV8ZXhpc3RzfGV4aXR8ZmV0Y2h8ZmlsZXxmaWxsZmFjdG9yfGZvcnxmb3JlaWdufGZyZWV0ZXh0fGZyZWV0ZXh0dGFibGV8ZnJvbXxmdWxsfGZ1bmN0aW9ufGdvdG98Z3JhbnR8Z3JvdXB8aGF2aW5nfGhvbGRsb2NrfGlkZW50aXR5fGlkZW50aXR5Y29sfGlkZW50aXR5X2luc2VydHxpZnxpbnxpbmRleHxpbm5lcnxpbnNlcnR8aW50ZXJzZWN0fGludG98aXN8am9pbnxrZXl8a2lsbHxsZWZ0fGxpa2V8bGluZW5vfGxvYWR8bWF0Y2h8bWVyZ2V8bmF0aW9uYWx8bm9jaGVja3xub25jbHVzdGVyZWR8bm90fG51bGx8bnVsbGlmfG9mfG9mZnxvZmZzZXRzfG9ufG9wZW58b3BlbmRhdGFzb3VyY2V8b3BlbnF1ZXJ5fG9wZW5yb3dzZXR8b3BlbnhtbHxvcHRpb258b3J8b3JkZXJ8b3V0ZXJ8b3ZlcnxwZXJjZW50fHBsYW58cHJlY2lzaW9ufHByaW1hcnl8cHJpbnR8cHJvY3xwcm9jZWR1cmV8cHVibGljfHJhaXNlcnJvcnxyZWFkfHJlYWR0ZXh0fHJlY29uZmlndXJlfHJlZmVyZW5jZXN8cmVwbGljYXRpb258cmVzdG9yZXxyZXN0cmljdHxyZXR1cm58cmV2b2tlfHJpZ2h0fHJvbGxiYWNrfHJvd2NvdW50fHJvd2d1aWRjb2x8cnVsZXxzYXZlfHNjaGVtYXxzZWxlY3R8c2Vzc2lvbl91c2VyfHNldHxzZXR1c2VyfHNodXRkb3dufHNvbWV8c3RhdGlzdGljc3xzeXN0ZW1fdXNlcnx0YWJsZXx0ZXh0c2l6ZXx0aGVufHRvfHRvcHx0cmFufHRyYW5zYWN0aW9ufHRyaWdnZXJ8dHJ1bmNhdGV8dHNlcXVhbHx1bmlvbnx1bmlxdWV8dXBkYXRlfHVwZGF0ZXRleHR8dXNlfHVzZXJ8dXNpbmd8dmFsdWVzfHZhcnlpbmd8dmlld3x3YWl0Zm9yfHdoZW58d2hlcmV8d2hpbGV8d2l0aHx3cml0ZXRleHQpKD89W15cdy1dfCQpL2ksCitudWxsXSxbImxpdCIsL15bKy1dPyg/OjB4W1xkYS1mXSt8KD86XC5cZCt8XGQrKD86XC5cZCopPykoPzplWystXT9cZCspPykvaV0sWyJwbG4iLC9eW19hLXpdW1x3LV0qL2ldLFsicHVuIiwvXlteXHdcdFxuXHIgIidceGEwXVteXHdcdFxuXHIgIicrXHhhMC1dKi9dXSksWyJzcWwiXSk7CmRpZmYgLS1naXQgYS9wYWdlcy90cmFuc2NyaXB0cy8yMDEzX0VjbGlwc2VDb25GcmFuY2UvanMvcHJldHRpZnkvbGFuZy10ZXguanMgYi9wYWdlcy90cmFuc2NyaXB0cy8yMDEzX0VjbGlwc2VDb25GcmFuY2UvanMvcHJldHRpZnkvbGFuZy10ZXguanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2U5NmZiYgotLS0gL2Rldi9udWxsCisrKyBiL3BhZ2VzL3RyYW5zY3JpcHRzLzIwMTNfRWNsaXBzZUNvbkZyYW5jZS9qcy9wcmV0dGlmeS9sYW5nLXRleC5qcwpAQCAtMCwwICsxIEBACitQUi5yZWdpc3RlckxhbmdIYW5kbGVyKFBSLmNyZWF0ZVNpbXBsZUxleGVyKFtbInBsbiIsL15bXHRcblxyIFx4YTBdKy8sbnVsbCwiXHRcblxyIMJceGEwIl0sWyJjb20iLC9eJVteXG5ccl0qLyxudWxsLCIlIl1dLFtbImt3ZCIsL15cXFtALVphLXpdKy9dLFsia3dkIiwvXlxcLi9dLFsidHlwIiwvXlskJl0vXSxbImxpdCIsL1srLV0/KD86XC5cZCt8XGQrKD86XC5cZCopPykoY218ZW18ZXh8aW58cGN8cHR8YnB8bW0pL2ldLFsicHVuIiwvXlsoKT1bXF17fV0rL11dKSxbImxhdGV4IiwidGV4Il0pOwpkaWZmIC0tZ2l0IGEvcGFnZXMvdHJhbnNjcmlwdHMvMjAxM19FY2xpcHNlQ29uRnJhbmNlL2pzL3ByZXR0aWZ5L2xhbmctdmIuanMgYi9wYWdlcy90cmFuc2NyaXB0cy8yMDEzX0VjbGlwc2VDb25GcmFuY2UvanMvcHJldHRpZnkvbGFuZy12Yi5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNzUwNmIwCi0tLSAvZGV2L251bGwKKysrIGIvcGFnZXMvdHJhbnNjcmlwdHMvMjAxM19FY2xpcHNlQ29uRnJhbmNlL2pzL3ByZXR0aWZ5L2xhbmctdmIuanMKQEAgLTAsMCArMSwyIEBACitQUi5yZWdpc3RlckxhbmdIYW5kbGVyKFBSLmNyZWF0ZVNpbXBsZUxleGVyKFtbInBsbiIsL15bXHRcblxyIFx4YTBcdTIwMjhcdTIwMjldKy8sbnVsbCwiXHRcblxyIMJceGEw4oCo4oCpIl0sWyJzdHIiLC9eKD86WyJcdTIwMWNcdTIwMWRdKD86W14iXHUyMDFjXHUyMDFkXXxbIlx1MjAxY1x1MjAxZF17Mn0pKD86WyJcdTIwMWNcdTIwMWRdY3wkKXxbIlx1MjAxY1x1MjAxZF0oPzpbXiJcdTIwMWNcdTIwMWRdfFsiXHUyMDFjXHUyMDFkXXsyfSkqKD86WyJcdTIwMWNcdTIwMWRdfCQpKS9pLG51bGwsJyLigJzigJ0nXSxbImNvbSIsL15bJ1x1MjAxOFx1MjAxOV0uKi8sbnVsbCwiJ+KAmOKAmSJdXSxbWyJrd2QiLC9eKD86YWRkaGFuZGxlcnxhZGRyZXNzb2Z8YWxpYXN8YW5kfGFuZGFsc298YW5zaXxhc3xhc3NlbWJseXxhdXRvfGJvb2xlYW58YnlyZWZ8Ynl0ZXxieXZhbHxjYWxsfGNhc2V8Y2F0Y2h8Y2Jvb2x8Y2J5dGV8Y2NoYXJ8Y2RhdGV8Y2RibHxjZGVjfGNoYXJ8Y2ludHxjbGFzc3xjbG5nfGNvYmp8Y29uc3R8Y3Nob3J0fGNzbmd8Y3N0cnxjdHlwZXxkYXRlfGRlY2ltYWx8ZGVjbGFyZXxkZWZhdWx0fGRlbGVnYXRlfGRpbXxkaXJlY3RjYXN0fGRvfGRvdWJsZXxlYWNofGVsc2V8ZWxzZWlmfGVuZHxlbmRpZnxlbnVtfGVyYXNlfGVycm9yfGV2ZW50fGV4aXR8ZmluYWxseXxmb3J8ZnJpZW5kfGZ1bmN0aW9ufGdldHxnZXR0eXBlfGdvc3VifGdvdG98aGFuZGxlc3xpZnxpbXBsZW1lbnRzfGltcG9ydHN8aW58aW5oZXJpdHN8aW50ZWdlcnxpbnRlcmZhY2V8aXN8bGV0fGxpYnxsaWtlfGxvbmd8bG9vcHxtZXxtb2R8bW9kdWxlfG11c3Rpbmhlcml0fG11c3RvdmVycmlkZXxteWJhc2V8bXljbGFzc3xuYW1lc3BhY2V8bmV3fG5leHR8bm90fG5vdGluaGVyaXRhYmxlfG5vdG92ZXJyaWRhYmxlfG9iamVjdHxvbnxvcHRpb258b3B0aW9uYWx8b3J8b3JlbHNlfG92ZXJsb2Fkc3xvdmVycmlkYWJsZXxvdmVycmlkZXN8cGFyYW1hcnJheXxwcmVzZXJ2ZXxwcml2YXRlfHByb3BlcnR5fHByb3RlY3RlZHxwdWJsaWN8cmFpc2VldmVudHxyZWFkb25seXxyZWRpbXxyZW1vdmVoYW5kbGVyfHJlc3VtZXxyZXR1cm58c2VsZWN0fHNldHxzaGFkb3dzfHNoYXJlZHxzaG9ydHxzaW5nbGV8c3RhdGljfHN0ZXB8c3RvcHxzdHJpbmd8c3RydWN0dXJlfHN1YnxzeW5jbG9ja3x0aGVufHRocm93fHRvfHRyeXx0eXBlb2Z8dW5pY29kZXx1bnRpbHx2YXJpYW50fHdlbmR8d2hlbnx3aGlsZXx3aXRofHdpdGhldmVudHN8d3JpdGVvbmx5fHhvcnxlbmRpZnxnb3N1YnxsZXR8dmFyaWFudHx3ZW5kKVxiL2ksCitudWxsXSxbImNvbSIsL15yZW0uKi9pXSxbImxpdCIsL14oPzp0cnVlXGJ8ZmFsc2VcYnxub3RoaW5nXGJ8XGQrKD86ZVsrLV0/XGQrW2Rmcl0/fFtkZmlscnNdKT98KD86JmhbXGRhLWZdK3wmb1swLTddKylbaWxzXT98XGQqXC5cZCsoPzplWystXT9cZCspP1tkZnJdP3wjXHMrKD86XGQrWy8tXVxkK1svLV1cZCsoPzpccytcZCs6XGQrKD86OlxkKyk/KFxzKig/OmFtfHBtKSk/KT98XGQrOlxkKyg/OjpcZCspPyhccyooPzphbXxwbSkpPylccysjKS9pXSxbInBsbiIsL14oPzooPzpbYS16XXxfXHcpXHcqfFxbKD86W2Etel18X1x3KVx3Kl0pL2ldLFsicHVuIiwvXlteXHdcdFxuXHIgIidbXF1ceGEwXHUyMDE4XHUyMDE5XHUyMDFjXHUyMDFkXHUyMDI4XHUyMDI5XSsvXSxbInB1biIsL14oPzpcW3xdKS9dXSksWyJ2YiIsInZicyJdKTsKZGlmZiAtLWdpdCBhL3BhZ2VzL3RyYW5zY3JpcHRzLzIwMTNfRWNsaXBzZUNvbkZyYW5jZS9qcy9wcmV0dGlmeS9sYW5nLXZoZGwuanMgYi9wYWdlcy90cmFuc2NyaXB0cy8yMDEzX0VjbGlwc2VDb25GcmFuY2UvanMvcHJldHRpZnkvbGFuZy12aGRsLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEyOGI1YjYKLS0tIC9kZXYvbnVsbAorKysgYi9wYWdlcy90cmFuc2NyaXB0cy8yMDEzX0VjbGlwc2VDb25GcmFuY2UvanMvcHJldHRpZnkvbGFuZy12aGRsLmpzCkBAIC0wLDAgKzEsMyBAQAorUFIucmVnaXN0ZXJMYW5nSGFuZGxlcihQUi5jcmVhdGVTaW1wbGVMZXhlcihbWyJwbG4iLC9eW1x0XG5cciBceGEwXSsvLG51bGwsIlx0XG5cciDCXHhhMCJdXSxbWyJzdHIiLC9eKD86W2JveF0/Iig/OlteIl18IiIpKiJ8Jy4nKS9pXSxbImNvbSIsL14tLVteXG5ccl0qL10sWyJrd2QiLC9eKD86YWJzfGFjY2Vzc3xhZnRlcnxhbGlhc3xhbGx8YW5kfGFyY2hpdGVjdHVyZXxhcnJheXxhc3NlcnR8YXR0cmlidXRlfGJlZ2lufGJsb2NrfGJvZHl8YnVmZmVyfGJ1c3xjYXNlfGNvbXBvbmVudHxjb25maWd1cmF0aW9ufGNvbnN0YW50fGRpc2Nvbm5lY3R8ZG93bnRvfGVsc2V8ZWxzaWZ8ZW5kfGVudGl0eXxleGl0fGZpbGV8Zm9yfGZ1bmN0aW9ufGdlbmVyYXRlfGdlbmVyaWN8Z3JvdXB8Z3VhcmRlZHxpZnxpbXB1cmV8aW58aW5lcnRpYWx8aW5vdXR8aXN8bGFiZWx8bGlicmFyeXxsaW5rYWdlfGxpdGVyYWx8bG9vcHxtYXB8bW9kfG5hbmR8bmV3fG5leHR8bm9yfG5vdHxudWxsfG9mfG9ufG9wZW58b3J8b3RoZXJzfG91dHxwYWNrYWdlfHBvcnR8cG9zdHBvbmVkfHByb2NlZHVyZXxwcm9jZXNzfHB1cmV8cmFuZ2V8cmVjb3JkfHJlZ2lzdGVyfHJlamVjdHxyZW18cmVwb3J0fHJldHVybnxyb2x8cm9yfHNlbGVjdHxzZXZlcml0eXxzaGFyZWR8c2lnbmFsfHNsYXxzbGx8c3JhfHNybHxzdWJ0eXBlfHRoZW58dG98dHJhbnNwb3J0fHR5cGV8dW5hZmZlY3RlZHx1bml0c3x1bnRpbHx1c2V8dmFyaWFibGV8d2FpdHx3aGVufHdoaWxlfHdpdGh8eG5vcnx4b3IpKD89W15cdy1dfCQpL2ksCitudWxsXSxbInR5cCIsL14oPzpiaXR8Yml0X3ZlY3RvcnxjaGFyYWN0ZXJ8Ym9vbGVhbnxpbnRlZ2VyfHJlYWx8dGltZXxzdHJpbmd8c2V2ZXJpdHlfbGV2ZWx8cG9zaXRpdmV8bmF0dXJhbHxzaWduZWR8dW5zaWduZWR8bGluZXx0ZXh0fHN0ZF91P2xvZ2ljKD86X3ZlY3Rvcik/KSg/PVteXHctXXwkKS9pLG51bGxdLFsidHlwIiwvXicoPzphY3RpdmV8YXNjZW5kaW5nfGJhc2V8ZGVsYXllZHxkcml2aW5nfGRyaXZpbmdfdmFsdWV8ZXZlbnR8aGlnaHxpbWFnZXxpbnN0YW5jZV9uYW1lfGxhc3RfYWN0aXZlfGxhc3RfZXZlbnR8bGFzdF92YWx1ZXxsZWZ0fGxlZnRvZnxsZW5ndGh8bG93fHBhdGhfbmFtZXxwb3N8cHJlZHxxdWlldHxyYW5nZXxyZXZlcnNlX3JhbmdlfHJpZ2h0fHJpZ2h0b2Z8c2ltcGxlX25hbWV8c3RhYmxlfHN1Y2N8dHJhbnNhY3Rpb258dmFsfHZhbHVlKSg/PVteXHctXXwkKS9pLG51bGxdLFsibGl0IiwvXlxkKyg/Ol9cZCspKig/OiNbXHcuXFxdKyMoPzpbKy1dP1xkKyg/Ol9cZCspKik/fCg/OlwuXGQrKD86X1xkKykqKT8oPzplWystXT9cZCsoPzpfXGQrKSopPykvaV0sCitbInBsbiIsL14oPzpbYS16XVx3KnxcXFteXFxdKlxcKS9pXSxbInB1biIsL15bXlx3XHRcblxyICInXHhhMF1bXlx3XHRcblxyICInXHhhMC1dKi9dXSksWyJ2aGRsIiwidmhkIl0pOwpkaWZmIC0tZ2l0IGEvcGFnZXMvdHJhbnNjcmlwdHMvMjAxM19FY2xpcHNlQ29uRnJhbmNlL2pzL3ByZXR0aWZ5L2xhbmctd2lraS5qcyBiL3BhZ2VzL3RyYW5zY3JpcHRzLzIwMTNfRWNsaXBzZUNvbkZyYW5jZS9qcy9wcmV0dGlmeS9sYW5nLXdpa2kuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWIwYjQ0OAotLS0gL2Rldi9udWxsCisrKyBiL3BhZ2VzL3RyYW5zY3JpcHRzLzIwMTNfRWNsaXBzZUNvbkZyYW5jZS9qcy9wcmV0dGlmeS9sYW5nLXdpa2kuanMKQEAgLTAsMCArMSwyIEBACitQUi5yZWdpc3RlckxhbmdIYW5kbGVyKFBSLmNyZWF0ZVNpbXBsZUxleGVyKFtbInBsbiIsL15bXGRcdCBhLWdpLXpceGEwXSsvLG51bGwsIlx0IMJceGEwYWJjZGVmZ2lqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkiXSxbInB1biIsL15bKj1bXF1efl0rLyxudWxsLCI9Kn5eW10iXV0sW1sibGFuZy13aWtpLm1ldGEiLC8oPzpeXnxcclxuP3xcbikoI1thLXpdKylcYi9dLFsibGl0IiwvXltBLVpdW2Etel1bXGRhLXpdK1tBLVpdW2Etel1bXlxXX10rXGIvXSxbImxhbmctIiwvXnt7eyhbXFNcc10rPyl9fX0vXSxbImxhbmctIiwvXmAoW15cblxyYF0rKWAvXSxbInN0ciIsL15odHRwcz86XC9cL1teXHMjLz9dKig/OlwvW15ccyM/XSopPyg/Olw/W15ccyNdKik/KD86I1xTKik/L2ldLFsicGxuIiwvXig/OlxyXG58W1xTXHNdKVteXG5cciMqPUEtW15gaHt+XSovXV0pLFsid2lraSJdKTsKK1BSLnJlZ2lzdGVyTGFuZ0hhbmRsZXIoUFIuY3JlYXRlU2ltcGxlTGV4ZXIoW1sia3dkIiwvXiNbYS16XSsvaSxudWxsLCIjIl1dLFtdKSxbIndpa2kubWV0YSJdKTsKZGlmZiAtLWdpdCBhL3BhZ2VzL3RyYW5zY3JpcHRzLzIwMTNfRWNsaXBzZUNvbkZyYW5jZS9qcy9wcmV0dGlmeS9sYW5nLXhxLmpzIGIvcGFnZXMvdHJhbnNjcmlwdHMvMjAxM19FY2xpcHNlQ29uRnJhbmNlL2pzL3ByZXR0aWZ5L2xhbmcteHEuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTMyM2FlMwotLS0gL2Rldi9udWxsCisrKyBiL3BhZ2VzL3RyYW5zY3JpcHRzLzIwMTNfRWNsaXBzZUNvbkZyYW5jZS9qcy9wcmV0dGlmeS9sYW5nLXhxLmpzCkBAIC0wLDAgKzEsMyBAQAorUFIucmVnaXN0ZXJMYW5nSGFuZGxlcihQUi5jcmVhdGVTaW1wbGVMZXhlcihbWyJ2YXIgcGxuIiwvXlwkW1x3LV0rLyxudWxsLCIkIl1dLFtbInBsbiIsL15bXHM9XVs8Pl1bXHM9XS9dLFsibGl0IiwvXkBbXHctXSsvXSxbInRhZyIsL148XC8/W2Etel0oPzpbXHctLjpdKlx3KT98XC8/PiQvaV0sWyJjb20iLC9eXCg6W1xTXHNdKj86XCkvXSxbInBsbiIsL15bKCksLztbXF17fV0kL10sWyJzdHIiLC9eKD86Iig/OlteIlxce118XFxbXFNcc10pKig/OiJ8JCl8Jyg/OlteJ1xce118XFxbXFNcc10pKig/Oid8JCkpLyxudWxsLCJcIiciXSxbImt3ZCIsL14oPzp4cXVlcnl8d2hlcmV8dmVyc2lvbnx2YXJpYWJsZXx1bmlvbnx0eXBlc3dpdGNofHRyZWF0fHRvfHRoZW58dGV4dHxzdGFibGV8c29ydGJ5fHNvbWV8c2VsZnxzY2hlbWF8c2F0aXNmaWVzfHJldHVybnN8cmV0dXJufHJlZnxwcm9jZXNzaW5nLWluc3RydWN0aW9ufHByZWNlZGluZy1zaWJsaW5nfHByZWNlZGluZ3xwcmVjZWRlc3xwYXJlbnR8b25seXxvZnxub2RlfG5hbWVzcGFjZXxtb2R1bGV8bGV0fGl0ZW18aW50ZXJzZWN0fGluc3RhbmNlfGlufGltcG9ydHxpZnxmdW5jdGlvbnxmb3J8Zm9sbG93c3xmb2xsb3dpbmctc2libGluZ3xmb2xsb3dpbmd8ZXh0ZXJuYWx8ZXhjZXB0fGV2ZXJ5fGVsc2V8ZWxlbWVudHxkZXNjZW5kaW5nfGRlc2NlbmRhbnQtb3Itc2VsZnxkZXNjZW5kYW50fGRlZmluZXxkZWZhdWx0fGRlY2xhcmV8Y29tbWVudHxjaGlsZHxjYXN0fGNhc2V8YmVmb3JlfGF0dHJpYnV0ZXxhc3NlcnR8YXNjZW5kaW5nfGFzfGFuY2VzdG9yLW9yLXNlbGZ8YW5jZXN0b3J8YWZ0ZXJ8ZXF8b3JkZXJ8Ynl8b3J8YW5kfHNjaGVtYS1lbGVtZW50fGRvY3VtZW50LW5vZGV8bm9kZXxhdClcYi9dLAorWyJ0eXAiLC9eKD86eHM6eWVhck1vbnRoRHVyYXRpb258eHM6dW5zaWduZWRMb25nfHhzOnRpbWV8eHM6c3RyaW5nfHhzOnNob3J0fHhzOlFOYW1lfHhzOk5hbWV8eHM6bG9uZ3x4czppbnRlZ2VyfHhzOmludHx4czpnWWVhck1vbnRofHhzOmdZZWFyfHhzOmdNb250aERheXx4czpnRGF5fHhzOmZsb2F0fHhzOmR1cmF0aW9ufHhzOmRvdWJsZXx4czpkZWNpbWFsfHhzOmRheVRpbWVEdXJhdGlvbnx4czpkYXRlVGltZXx4czpkYXRlfHhzOmJ5dGV8eHM6Ym9vbGVhbnx4czphbnlVUkl8eGY6eWVhck1vbnRoRHVyYXRpb24pXGIvLG51bGxdLFsiZnVuIHBsbiIsL14oPzp4cDpkZXJlZmVyZW5jZXx4aW5jOm5vZGUtZXhwYW5kfHhpbmM6bGluay1yZWZlcmVuY2VzfHhpbmM6bGluay1leHBhbmR8eGh0bWw6cmVzdHJ1Y3R1cmV8eGh0bWw6Y2xlYW58eGh0bWw6YWRkLWxpc3RzfHhkbXA6emlwLW1hbmlmZXN0fHhkbXA6emlwLWdldHx4ZG1wOnppcC1jcmVhdGV8eGRtcDp4cXVlcnktdmVyc2lvbnx4ZG1wOndvcmQtY29udmVydHx4ZG1wOndpdGgtbmFtZXNwYWNlc3x4ZG1wOnZlcnNpb258eGRtcDp2YWx1ZXx4ZG1wOnVzZXItcm9sZXN8eGRtcDp1c2VyLWxhc3QtbG9naW58eGRtcDp1c2VyfHhkbXA6dXJsLWVuY29kZXx4ZG1wOnVybC1kZWNvZGV8eGRtcDp1cmktaXMtZmlsZXx4ZG1wOnVyaS1mb3JtYXR8eGRtcDp1cmktY29udGVudC10eXBlfHhkbXA6dW5xdW90ZXx4ZG1wOnVucGF0aHx4ZG1wOnRyaWdnZXJzLWRhdGFiYXNlfHhkbXA6dHJhY2V8eGRtcDp0by1qc29ufHhkbXA6dGlkeXx4ZG1wOnN1YmJpbmFyeXx4ZG1wOnN0cmZ0aW1lfHhkbXA6c3Bhd24taW58eGRtcDpzcGF3bnx4ZG1wOnNsZWVwfHhkbXA6c2h1dGRvd258eGRtcDpzZXQtc2Vzc2lvbi1maWVsZHx4ZG1wOnNldC1yZXNwb25zZS1lbmNvZGluZ3x4ZG1wOnNldC1yZXNwb25zZS1jb250ZW50LXR5cGV8eGRtcDpzZXQtcmVzcG9uc2UtY29kZXx4ZG1wOnNldC1yZXF1ZXN0LXRpbWUtbGltaXR8eGRtcDpzZXR8eGRtcDpzZXJ2ZXJzfHhkbXA6c2VydmVyLXN0YXR1c3x4ZG1wOnNlcnZlci1uYW1lfHhkbXA6c2VydmVyfHhkbXA6c2VjdXJpdHktZGF0YWJhc2V8eGRtcDpzZWN1cml0eS1hc3NlcnR8eGRtcDpzY2hlbWEtZGF0YWJhc2V8eGRtcDpzYXZlfHhkbXA6cm9sZS1yb2xlc3x4ZG1wOnJvbGV8eGRtcDpyZXRocm93fHhkbXA6cmVzdGFydHx4ZG1wOnJlcXVlc3QtdGltZXN0YW1wfHhkbXA6cmVxdWVzdC1zdGF0dXN8eGRtcDpyZXF1ZXN0LWNhbmNlbHx4ZG1wOnJlcXVlc3R8eGRtcDpyZWRpcmVjdC1yZXNwb25zZXx4ZG1wOnJhbmRvbXx4ZG1wOnF1b3RlfHhkbXA6cXVlcnktdHJhY2V8eGRtcDpxdWVyeS1tZXRlcnN8eGRtcDpwcm9kdWN0LWVkaXRpb258eGRtcDpwcml2aWxlZ2Utcm9sZXN8eGRtcDpwcml2aWxlZ2V8eGRtcDpwcmV0dHktcHJpbnR8eGRtcDpwb3dlcnBvaW50LWNvbnZlcnR8eGRtcDpwbGF0Zm9ybXx4ZG1wOnBlcm1pc3Npb258eGRtcDpwZGYtY29udmVydHx4ZG1wOnBhdGh8eGRtcDpvY3RhbC10by1pbnRlZ2VyfHhkbXA6bm9kZS11cml8eGRtcDpub2RlLXJlcGxhY2V8eGRtcDpub2RlLWtpbmR8eGRtcDpub2RlLWluc2VydC1jaGlsZHx4ZG1wOm5vZGUtaW5zZXJ0LWJlZm9yZXx4ZG1wOm5vZGUtaW5zZXJ0LWFmdGVyfHhkbXA6bm9kZS1kZWxldGV8eGRtcDpub2RlLWRhdGFiYXNlfHhkbXA6bXVsNjR8eGRtcDptb2R1bGVzLXJvb3R8eGRtcDptb2R1bGVzLWRhdGFiYXNlfHhkbXA6bWVyZ2luZ3x4ZG1wOm1lcmdlLWNhbmNlbHx4ZG1wOm1lcmdlfHhkbXA6bWQ1fHhkbXA6bG9nb3V0fHhkbXA6bG9naW58eGRtcDpsb2ctbGV2ZWx8eGRtcDpsb2d8eGRtcDpsb2NrLXJlbGVhc2V8eGRtcDpsb2NrLWFjcXVpcmV8eGRtcDpsb2FkfHhkbXA6aW52b2tlLWlufHhkbXA6aW52b2tlfHhkbXA6aW50ZWdlci10by1vY3RhbHx4ZG1wOmludGVnZXItdG8taGV4fHhkbXA6aHR0cC1wdXR8eGRtcDpodHRwLXBvc3R8eGRtcDpodHRwLW9wdGlvbnN8eGRtcDpodHRwLWhlYWR8eGRtcDpodHRwLWdldHx4ZG1wOmh0dHAtZGVsZXRlfHhkbXA6aG9zdHN8eGRtcDpob3N0LXN0YXR1c3x4ZG1wOmhvc3QtbmFtZXx4ZG1wOmhvc3R8eGRtcDpoZXgtdG8taW50ZWdlcnx4ZG1wOmhhc2g2NHx4ZG1wOmhhc2gzMnx4ZG1wOmhhcy1wcml2aWxlZ2V8eGRtcDpncm91cHN8eGRtcDpncm91cC1zZXJ2ZXN8eGRtcDpncm91cC1zZXJ2ZXJzfHhkbXA6Z3JvdXAtbmFtZXx4ZG1wOmdyb3VwLWhvc3RzfHhkbXA6Z3JvdXB8eGRtcDpnZXQtc2Vzc2lvbi1maWVsZC1uYW1lc3x4ZG1wOmdldC1zZXNzaW9uLWZpZWxkfHhkbXA6Z2V0LXJlc3BvbnNlLWVuY29kaW5nfHhkbXA6Z2V0LXJlc3BvbnNlLWNvZGV8eGRtcDpnZXQtcmVxdWVzdC11c2VybmFtZXx4ZG1wOmdldC1yZXF1ZXN0LXVzZXJ8eGRtcDpnZXQtcmVxdWVzdC11cmx8eGRtcDpnZXQtcmVxdWVzdC1wcm90b2NvbHx4ZG1wOmdldC1yZXF1ZXN0LXBhdGh8eGRtcDpnZXQtcmVxdWVzdC1tZXRob2R8eGRtcDpnZXQtcmVxdWVzdC1oZWFkZXItbmFtZXN8eGRtcDpnZXQtcmVxdWVzdC1oZWFkZXJ8eGRtcDpnZXQtcmVxdWVzdC1maWVsZC1uYW1lc3x4ZG1wOmdldC1yZXF1ZXN0LWZpZWxkLWZpbGVuYW1lfHhkbXA6Z2V0LXJlcXVlc3QtZmllbGQtY29udGVudC10eXBlfHhkbXA6Z2V0LXJlcXVlc3QtZmllbGR8eGRtcDpnZXQtcmVxdWVzdC1jbGllbnQtY2VydGlmaWNhdGV8eGRtcDpnZXQtcmVxdWVzdC1jbGllbnQtYWRkcmVzc3x4ZG1wOmdldC1yZXF1ZXN0LWJvZHl8eGRtcDpnZXQtY3VycmVudC11c2VyfHhkbXA6Z2V0LWN1cnJlbnQtcm9sZXN8eGRtcDpnZXR8eGRtcDpmdW5jdGlvbi1uYW1lfHhkbXA6ZnVuY3Rpb24tbW9kdWxlfHhkbXA6ZnVuY3Rpb258eGRtcDpmcm9tLWpzb258eGRtcDpmb3Jlc3RzfHhkbXA6Zm9yZXN0LXN0YXR1c3x4ZG1wOmZvcmVzdC1yZXN0b3JlfHhkbXA6Zm9yZXN0LXJlc3RhcnR8eGRtcDpmb3Jlc3QtbmFtZXx4ZG1wOmZvcmVzdC1kZWxldGV8eGRtcDpmb3Jlc3QtZGF0YWJhc2VzfHhkbXA6Zm9yZXN0LWNvdW50c3x4ZG1wOmZvcmVzdC1jbGVhcnx4ZG1wOmZvcmVzdC1iYWNrdXB8eGRtcDpmb3Jlc3R8eGRtcDpmaWxlc3lzdGVtLWZpbGV8eGRtcDpmaWxlc3lzdGVtLWRpcmVjdG9yeXx4ZG1wOmV4aXN0c3x4ZG1wOmV4Y2VsLWNvbnZlcnR8eGRtcDpldmFsLWlufHhkbXA6ZXZhbHx4ZG1wOmVzdGltYXRlfHhkbXA6ZW1haWx8eGRtcDplbGVtZW50LWNvbnRlbnQtdHlwZXx4ZG1wOmVsYXBzZWQtdGltZXx4ZG1wOmRvY3VtZW50LXNldC1xdWFsaXR5fHhkbXA6ZG9jdW1lbnQtc2V0LXByb3BlcnR5fHhkbXA6ZG9jdW1lbnQtc2V0LXByb3BlcnRpZXN8eGRtcDpkb2N1bWVudC1zZXQtcGVybWlzc2lvbnN8eGRtcDpkb2N1bWVudC1zZXQtY29sbGVjdGlvbnN8eGRtcDpkb2N1bWVudC1yZW1vdmUtcHJvcGVydGllc3x4ZG1wOmRvY3VtZW50LXJlbW92ZS1wZXJtaXNzaW9uc3x4ZG1wOmRvY3VtZW50LXJlbW92ZS1jb2xsZWN0aW9uc3x4ZG1wOmRvY3VtZW50LXByb3BlcnRpZXN8eGRtcDpkb2N1bWVudC1sb2Nrc3x4ZG1wOmRvY3VtZW50LWxvYWR8eGRtcDpkb2N1bWVudC1pbnNlcnR8eGRtcDpkb2N1bWVudC1nZXQtcXVhbGl0eXx4ZG1wOmRvY3VtZW50LWdldC1wcm9wZXJ0aWVzfHhkbXA6ZG9jdW1lbnQtZ2V0LXBlcm1pc3Npb25zfHhkbXA6ZG9jdW1lbnQtZ2V0LWNvbGxlY3Rpb25zfHhkbXA6ZG9jdW1lbnQtZ2V0fHhkbXA6ZG9jdW1lbnQtZm9yZXN0fHhkbXA6ZG9jdW1lbnQtZGVsZXRlfHhkbXA6ZG9jdW1lbnQtYWRkLXByb3BlcnRpZXN8eGRtcDpkb2N1bWVudC1hZGQtcGVybWlzc2lvbnN8eGRtcDpkb2N1bWVudC1hZGQtY29sbGVjdGlvbnN8eGRtcDpkaXJlY3RvcnktcHJvcGVydGllc3x4ZG1wOmRpcmVjdG9yeS1sb2Nrc3x4ZG1wOmRpcmVjdG9yeS1kZWxldGV8eGRtcDpkaXJlY3RvcnktY3JlYXRlfHhkbXA6ZGlyZWN0b3J5fHhkbXA6ZGlhY3JpdGljLWxlc3N8eGRtcDpkZXNjcmliZXx4ZG1wOmRlZmF1bHQtcGVybWlzc2lvbnN8eGRtcDpkZWZhdWx0LWNvbGxlY3Rpb25zfHhkbXA6ZGF0YWJhc2VzfHhkbXA6ZGF0YWJhc2UtcmVzdG9yZS12YWxpZGF0ZXx4ZG1wOmRhdGFiYXNlLXJlc3RvcmUtc3RhdHVzfHhkbXA6ZGF0YWJhc2UtcmVzdG9yZS1jYW5jZWx8eGRtcDpkYXRhYmFzZS1yZXN0b3JlfHhkbXA6ZGF0YWJhc2UtbmFtZXx4ZG1wOmRhdGFiYXNlLWZvcmVzdHN8eGRtcDpkYXRhYmFzZS1iYWNrdXAtdmFsaWRhdGV8eGRtcDpkYXRhYmFzZS1iYWNrdXAtc3RhdHVzfHhkbXA6ZGF0YWJhc2UtYmFja3VwLXB1cmdlfHhkbXA6ZGF0YWJhc2UtYmFja3VwLWNhbmNlbHx4ZG1wOmRhdGFiYXNlLWJhY2t1cHx4ZG1wOmRhdGFiYXNlfHhkbXA6Y29sbGVjdGlvbi1wcm9wZXJ0aWVzfHhkbXA6Y29sbGVjdGlvbi1sb2Nrc3x4ZG1wOmNvbGxlY3Rpb24tZGVsZXRlfHhkbXA6Y29sbGF0aW9uLWNhbm9uaWNhbC11cml8eGRtcDpjYXN0YWJsZS1hc3x4ZG1wOmNhbi1ncmFudC1yb2xlc3x4ZG1wOmJhc2U2NC1lbmNvZGV8eGRtcDpiYXNlNjQtZGVjb2RlfHhkbXA6YXJjaGl0ZWN0dXJlfHhkbXA6YXBwbHl8eGRtcDphbXAtcm9sZXN8eGRtcDphbXB8eGRtcDphZGQ2NHx4ZG1wOmFkZC1yZXNwb25zZS1oZWFkZXJ8eGRtcDphY2Nlc3N8dHJncjp0cmlnZ2VyLXNldC1yZWN1cnNpdmV8dHJncjp0cmlnZ2VyLXNldC1wZXJtaXNzaW9uc3x0cmdyOnRyaWdnZXItc2V0LW5hbWV8dHJncjp0cmlnZ2VyLXNldC1tb2R1bGV8dHJncjp0cmlnZ2VyLXNldC1ldmVudHx0cmdyOnRyaWdnZXItc2V0LWRlc2NyaXB0aW9ufHRyZ3I6dHJpZ2dlci1yZW1vdmUtcGVybWlzc2lvbnN8dHJncjp0cmlnZ2VyLW1vZHVsZXx0cmdyOnRyaWdnZXItZ2V0LXBlcm1pc3Npb25zfHRyZ3I6dHJpZ2dlci1lbmFibGV8dHJncjp0cmlnZ2VyLWRpc2FibGV8dHJncjp0cmlnZ2VyLWRhdGFiYXNlLW9ubGluZS1ldmVudHx0cmdyOnRyaWdnZXItZGF0YS1ldmVudHx0cmdyOnRyaWdnZXItYWRkLXBlcm1pc3Npb25zfHRyZ3I6cmVtb3ZlLXRyaWdnZXJ8dHJncjpwcm9wZXJ0eS1jb250ZW50fHRyZ3I6cHJlLWNvbW1pdHx0cmdyOnBvc3QtY29tbWl0fHRyZ3I6Z2V0LXRyaWdnZXItYnktaWR8dHJncjpnZXQtdHJpZ2dlcnx0cmdyOmRvY3VtZW50LXNjb3BlfHRyZ3I6ZG9jdW1lbnQtY29udGVudHx0cmdyOmRpcmVjdG9yeS1zY29wZXx0cmdyOmNyZWF0ZS10cmlnZ2VyfHRyZ3I6Y29sbGVjdGlvbi1zY29wZXx0cmdyOmFueS1wcm9wZXJ0eS1jb250ZW50fHRoc3I6c2V0LWVudHJ5fHRoc3I6cmVtb3ZlLXRlcm18dGhzcjpyZW1vdmUtc3lub255bXx0aHNyOnJlbW92ZS1lbnRyeXx0aHNyOnF1ZXJ5LWxvb2t1cHx0aHNyOmxvb2t1cHx0aHNyOmxvYWR8dGhzcjppbnNlcnR8dGhzcjpleHBhbmR8dGhzcjphZGQtc3lub255bXxzcGVsbDpzdWdnZXN0LWRldGFpbGVkfHNwZWxsOnN1Z2dlc3R8c3BlbGw6cmVtb3ZlLXdvcmR8c3BlbGw6bWFrZS1kaWN0aW9uYXJ5fHNwZWxsOmxvYWR8c3BlbGw6bGV2ZW5zaHRlaW4tZGlzdGFuY2V8c3BlbGw6aXMtY29ycmVjdHxzcGVsbDppbnNlcnR8c3BlbGw6ZG91YmxlLW1ldGFwaG9uZXxzcGVsbDphZGQtd29yZHxzZWM6dXNlcnMtY29sbGVjdGlvbnxzZWM6dXNlci1zZXQtcm9sZXN8c2VjOnVzZXItc2V0LXBhc3N3b3JkfHNlYzp1c2VyLXNldC1uYW1lfHNlYzp1c2VyLXNldC1kZXNjcmlwdGlvbnxzZWM6dXNlci1zZXQtZGVmYXVsdC1wZXJtaXNzaW9uc3xzZWM6dXNlci1zZXQtZGVmYXVsdC1jb2xsZWN0aW9uc3xzZWM6dXNlci1yZW1vdmUtcm9sZXN8c2VjOnVzZXItcHJpdmlsZWdlc3xzZWM6dXNlci1nZXQtcm9sZXN8c2VjOnVzZXItZ2V0LWRlc2NyaXB0aW9ufHNlYzp1c2VyLWdldC1kZWZhdWx0LXBlcm1pc3Npb25zfHNlYzp1c2VyLWdldC1kZWZhdWx0LWNvbGxlY3Rpb25zfHNlYzp1c2VyLWRvYy1wZXJtaXNzaW9uc3xzZWM6dXNlci1kb2MtY29sbGVjdGlvbnN8c2VjOnVzZXItYWRkLXJvbGVzfHNlYzp1bnByb3RlY3QtY29sbGVjdGlvbnxzZWM6dWlkLWZvci1uYW1lfHNlYzpzZXQtcmVhbG18c2VjOnNlY3VyaXR5LXZlcnNpb258c2VjOnNlY3VyaXR5LW5hbWVzcGFjZXxzZWM6c2VjdXJpdHktaW5zdGFsbGVkfHNlYzpzZWN1cml0eS1jb2xsZWN0aW9ufHNlYzpyb2xlcy1jb2xsZWN0aW9ufHNlYzpyb2xlLXNldC1yb2xlc3xzZWM6cm9sZS1zZXQtbmFtZXxzZWM6cm9sZS1zZXQtZGVzY3JpcHRpb258c2VjOnJvbGUtc2V0LWRlZmF1bHQtcGVybWlzc2lvbnN8c2VjOnJvbGUtc2V0LWRlZmF1bHQtY29sbGVjdGlvbnN8c2VjOnJvbGUtcmVtb3ZlLXJvbGVzfHNlYzpyb2xlLXByaXZpbGVnZXN8c2VjOnJvbGUtZ2V0LXJvbGVzfHNlYzpyb2xlLWdldC1kZXNjcmlwdGlvbnxzZWM6cm9sZS1nZXQtZGVmYXVsdC1wZXJtaXNzaW9uc3xzZWM6cm9sZS1nZXQtZGVmYXVsdC1jb2xsZWN0aW9uc3xzZWM6cm9sZS1kb2MtcGVybWlzc2lvbnN8c2VjOnJvbGUtZG9jLWNvbGxlY3Rpb25zfHNlYzpyb2xlLWFkZC1yb2xlc3xzZWM6cmVtb3ZlLXVzZXJ8c2VjOnJlbW92ZS1yb2xlLWZyb20tdXNlcnN8c2VjOnJlbW92ZS1yb2xlLWZyb20tcm9sZXxzZWM6cmVtb3ZlLXJvbGUtZnJvbS1wcml2aWxlZ2VzfHNlYzpyZW1vdmUtcm9sZS1mcm9tLWFtcHN8c2VjOnJlbW92ZS1yb2xlfHNlYzpyZW1vdmUtcHJpdmlsZWdlfHNlYzpyZW1vdmUtYW1wfHNlYzpwcm90ZWN0LWNvbGxlY3Rpb258c2VjOnByaXZpbGVnZXMtY29sbGVjdGlvbnxzZWM6cHJpdmlsZWdlLXNldC1yb2xlc3xzZWM6cHJpdmlsZWdlLXNldC1uYW1lfHNlYzpwcml2aWxlZ2UtcmVtb3ZlLXJvbGVzfHNlYzpwcml2aWxlZ2UtZ2V0LXJvbGVzfHNlYzpwcml2aWxlZ2UtYWRkLXJvbGVzfHNlYzpwcml2LWRvYy1wZXJtaXNzaW9uc3xzZWM6cHJpdi1kb2MtY29sbGVjdGlvbnN8c2VjOmdldC11c2VyLW5hbWVzfHNlYzpnZXQtdW5pcXVlLWVsZW0taWR8c2VjOmdldC1yb2xlLW5hbWVzfHNlYzpnZXQtcm9sZS1pZHN8c2VjOmdldC1wcml2aWxlZ2V8c2VjOmdldC1kaXN0aW5jdC1wZXJtaXNzaW9uc3xzZWM6Z2V0LWNvbGxlY3Rpb258c2VjOmdldC1hbXB8c2VjOmNyZWF0ZS11c2VyLXdpdGgtcm9sZXxzZWM6Y3JlYXRlLXVzZXJ8c2VjOmNyZWF0ZS1yb2xlfHNlYzpjcmVhdGUtcHJpdmlsZWdlfHNlYzpjcmVhdGUtYW1wfHNlYzpjb2xsZWN0aW9ucy1jb2xsZWN0aW9ufHNlYzpjb2xsZWN0aW9uLXNldC1wZXJtaXNzaW9uc3xzZWM6Y29sbGVjdGlvbi1yZW1vdmUtcGVybWlzc2lvbnN8c2VjOmNvbGxlY3Rpb24tZ2V0LXBlcm1pc3Npb25zfHNlYzpjb2xsZWN0aW9uLWFkZC1wZXJtaXNzaW9uc3xzZWM6Y2hlY2stYWRtaW58c2VjOmFtcHMtY29sbGVjdGlvbnxzZWM6YW1wLXNldC1yb2xlc3xzZWM6YW1wLXJlbW92ZS1yb2xlc3xzZWM6YW1wLWdldC1yb2xlc3xzZWM6YW1wLWRvYy1wZXJtaXNzaW9uc3xzZWM6YW1wLWRvYy1jb2xsZWN0aW9uc3xzZWM6YW1wLWFkZC1yb2xlc3xzZWFyY2g6dW5wYXJzZXxzZWFyY2g6c3VnZ2VzdHxzZWFyY2g6c25pcHBldHxzZWFyY2g6c2VhcmNofHNlYXJjaDpyZXNvbHZlLW5vZGVzfHNlYXJjaDpyZXNvbHZlfHNlYXJjaDpyZW1vdmUtY29uc3RyYWludHxzZWFyY2g6cGFyc2V8c2VhcmNoOmdldC1kZWZhdWx0LW9wdGlvbnN8c2VhcmNoOmVzdGltYXRlfHNlYXJjaDpjaGVjay1vcHRpb25zfHByb2Y6dmFsdWV8cHJvZjpyZXNldHxwcm9mOnJlcG9ydHxwcm9mOmludm9rZXxwcm9mOmV2YWx8cHJvZjplbmFibGV8cHJvZjpkaXNhYmxlfHByb2Y6YWxsb3dlZHxwcHQ6Y2xlYW58cGtpOnRlbXBsYXRlLXNldC1yZXF1ZXN0fHBraTp0ZW1wbGF0ZS1zZXQtbmFtZXxwa2k6dGVtcGxhdGUtc2V0LWtleS10eXBlfHBraTp0ZW1wbGF0ZS1zZXQta2V5LW9wdGlvbnN8cGtpOnRlbXBsYXRlLXNldC1kZXNjcmlwdGlvbnxwa2k6dGVtcGxhdGUtaW4tdXNlfHBraTp0ZW1wbGF0ZS1nZXQtdmVyc2lvbnxwa2k6dGVtcGxhdGUtZ2V0LXJlcXVlc3R8cGtpOnRlbXBsYXRlLWdldC1uYW1lfHBraTp0ZW1wbGF0ZS1nZXQta2V5LXR5cGV8cGtpOnRlbXBsYXRlLWdldC1rZXktb3B0aW9uc3xwa2k6dGVtcGxhdGUtZ2V0LWlkfHBraTp0ZW1wbGF0ZS1nZXQtZGVzY3JpcHRpb258cGtpOm5lZWQtY2VydGlmaWNhdGV8cGtpOmlzLXRlbXBvcmFyeXxwa2k6aW5zZXJ0LXRydXN0ZWQtY2VydGlmaWNhdGVzfHBraTppbnNlcnQtdGVtcGxhdGV8cGtpOmluc2VydC1zaWduZWQtY2VydGlmaWNhdGVzfHBraTppbnNlcnQtY2VydGlmaWNhdGUtcmV2b2NhdGlvbi1saXN0fHBraTpnZXQtdHJ1c3RlZC1jZXJ0aWZpY2F0ZS1pZHN8cGtpOmdldC10ZW1wbGF0ZS1pZHN8cGtpOmdldC10ZW1wbGF0ZS1jZXJ0aWZpY2F0ZS1hdXRob3JpdHl8cGtpOmdldC10ZW1wbGF0ZS1ieS1uYW1lfHBraTpnZXQtdGVtcGxhdGV8cGtpOmdldC1wZW5kaW5nLWNlcnRpZmljYXRlLXJlcXVlc3RzLXhtbHxwa2k6Z2V0LXBlbmRpbmctY2VydGlmaWNhdGUtcmVxdWVzdHMtcGVtfHBraTpnZXQtcGVuZGluZy1jZXJ0aWZpY2F0ZS1yZXF1ZXN0fHBraTpnZXQtY2VydGlmaWNhdGVzLWZvci10ZW1wbGF0ZS14bWx8cGtpOmdldC1jZXJ0aWZpY2F0ZXMtZm9yLXRlbXBsYXRlfHBraTpnZXQtY2VydGlmaWNhdGVzfHBraTpnZXQtY2VydGlmaWNhdGUteG1sfHBraTpnZXQtY2VydGlmaWNhdGUtcGVtfHBraTpnZXQtY2VydGlmaWNhdGV8cGtpOmdlbmVyYXRlLXRlbXBvcmFyeS1jZXJ0aWZpY2F0ZS1pZi1uZWNlc3Nhcnl8cGtpOmdlbmVyYXRlLXRlbXBvcmFyeS1jZXJ0aWZpY2F0ZXxwa2k6Z2VuZXJhdGUtdGVtcGxhdGUtY2VydGlmaWNhdGUtYXV0aG9yaXR5fHBraTpnZW5lcmF0ZS1jZXJ0aWZpY2F0ZS1yZXF1ZXN0fHBraTpkZWxldGUtdGVtcGxhdGV8cGtpOmRlbGV0ZS1jZXJ0aWZpY2F0ZXxwa2k6Y3JlYXRlLXRlbXBsYXRlfHBkZjptYWtlLXRvY3xwZGY6aW5zZXJ0LXRvYy1oZWFkZXJzfHBkZjpnZXQtdG9jfHBkZjpjbGVhbnxwOnN0YXR1cy10cmFuc2l0aW9ufHA6c3RhdGUtdHJhbnNpdGlvbnxwOnJlbW92ZXxwOnBpcGVsaW5lc3xwOmluc2VydHxwOmdldC1ieS1pZHxwOmdldHxwOmV4ZWN1dGV8cDpjcmVhdGV8cDpjb25kaXRpb258cDpjb2xsZWN0aW9ufHA6YWN0aW9ufG9veG1sOnJ1bnMtbWVyZ2V8b294bWw6cGFja2FnZS11cmlzfG9veG1sOnBhY2thZ2UtcGFydHMtaW5zZXJ0fG9veG1sOnBhY2thZ2UtcGFydHN8bXN3b3JkOmNsZWFufG1jZ206cG9seWdvbnxtY2dtOnBvaW50fG1jZ206Z2Vvc3BhdGlhbC1xdWVyeS1mcm9tLWVsZW1lbnRzfG1jZ206Z2Vvc3BhdGlhbC1xdWVyeXxtY2dtOmNpcmNsZXxtYXRoOnRhbmh8bWF0aDp0YW58bWF0aDpzcXJ0fG1hdGg6c2luaHxtYXRoOnNpbnxtYXRoOnBvd3xtYXRoOm1vZGZ8bWF0aDpsb2cxMHxtYXRoOmxvZ3xtYXRoOmxkZXhwfG1hdGg6ZnJleHB8bWF0aDpmbW9kfG1hdGg6Zmxvb3J8bWF0aDpmYWJzfG1hdGg6ZXhwfG1hdGg6Y29zaHxtYXRoOmNvc3xtYXRoOmNlaWx8bWF0aDphdGFuMnxtYXRoOmF0YW58bWF0aDphc2lufG1hdGg6YWNvc3xtYXA6cHV0fG1hcDptYXB8bWFwOmtleXN8bWFwOmdldHxtYXA6ZGVsZXRlfG1hcDpjb3VudHxtYXA6Y2xlYXJ8bG5rOnRvfGxuazpyZW1vdmV8bG5rOmluc2VydHxsbms6Z2V0fGxuazpmcm9tfGxuazpjcmVhdGV8a21sOnBvbHlnb258a21sOnBvaW50fGttbDppbnRlcmlvci1wb2x5Z29ufGttbDpnZW9zcGF0aWFsLXF1ZXJ5LWZyb20tZWxlbWVudHN8a21sOmdlb3NwYXRpYWwtcXVlcnl8a21sOmNpcmNsZXxrbWw6Ym94fGdtbDpwb2x5Z29ufGdtbDpwb2ludHxnbWw6aW50ZXJpb3ItcG9seWdvbnxnbWw6Z2Vvc3BhdGlhbC1xdWVyeS1mcm9tLWVsZW1lbnRzfGdtbDpnZW9zcGF0aWFsLXF1ZXJ5fGdtbDpjaXJjbGV8Z21sOmJveHxnZW9yc3M6cG9pbnR8Z2VvcnNzOmdlb3NwYXRpYWwtcXVlcnl8Z2VvcnNzOmNpcmNsZXxnZW86cG9seWdvbnxnZW86cG9pbnR8Z2VvOmludGVyaW9yLXBvbHlnb258Z2VvOmdlb3NwYXRpYWwtcXVlcnktZnJvbS1lbGVtZW50c3xnZW86Z2Vvc3BhdGlhbC1xdWVyeXxnZW86Y2lyY2xlfGdlbzpib3h8Zm46emVyby1vci1vbmV8Zm46eWVhcnMtZnJvbS1kdXJhdGlvbnxmbjp5ZWFyLWZyb20tZGF0ZVRpbWV8Zm46eWVhci1mcm9tLWRhdGV8Zm46dXBwZXItY2FzZXxmbjp1bm9yZGVyZWR8Zm46dHJ1ZXxmbjp0cmFuc2xhdGV8Zm46dHJhY2V8Zm46dG9rZW5pemV8Zm46dGltZXpvbmUtZnJvbS10aW1lfGZuOnRpbWV6b25lLWZyb20tZGF0ZVRpbWV8Zm46dGltZXpvbmUtZnJvbS1kYXRlfGZuOnN1bXxmbjpzdWJ0cmFjdC1kYXRlVGltZXMteWllbGRpbmcteWVhck1vbnRoRHVyYXRpb258Zm46c3VidHJhY3QtZGF0ZVRpbWVzLXlpZWxkaW5nLWRheVRpbWVEdXJhdGlvbnxmbjpzdWJzdHJpbmctYmVmb3JlfGZuOnN1YnN0cmluZy1hZnRlcnxmbjpzdWJzdHJpbmd8Zm46c3Vic2VxdWVuY2V8Zm46c3RyaW5nLXRvLWNvZGVwb2ludHN8Zm46c3RyaW5nLXBhZHxmbjpzdHJpbmctbGVuZ3RofGZuOnN0cmluZy1qb2lufGZuOnN0cmluZ3xmbjpzdGF0aWMtYmFzZS11cml8Zm46c3RhcnRzLXdpdGh8Zm46c2Vjb25kcy1mcm9tLXRpbWV8Zm46c2Vjb25kcy1mcm9tLWR1cmF0aW9ufGZuOnNlY29uZHMtZnJvbS1kYXRlVGltZXxmbjpyb3VuZC1oYWxmLXRvLWV2ZW58Zm46cm91bmR8Zm46cm9vdHxmbjpyZXZlcnNlfGZuOnJlc29sdmUtdXJpfGZuOnJlc29sdmUtUU5hbWV8Zm46cmVwbGFjZXxmbjpyZW1vdmV8Zm46UU5hbWV8Zm46cHJlZml4LWZyb20tUU5hbWV8Zm46cG9zaXRpb258Zm46b25lLW9yLW1vcmV8Zm46bnVtYmVyfGZuOm5vdHxmbjpub3JtYWxpemUtdW5pY29kZXxmbjpub3JtYWxpemUtc3BhY2V8Zm46bm9kZS1uYW1lfGZuOm5vZGUta2luZHxmbjpuaWxsZWR8Zm46bmFtZXNwYWNlLXVyaS1mcm9tLVFOYW1lfGZuOm5hbWVzcGFjZS11cmktZm9yLXByZWZpeHxmbjpuYW1lc3BhY2UtdXJpfGZuOm5hbWV8Zm46bW9udGhzLWZyb20tZHVyYXRpb258Zm46bW9udGgtZnJvbS1kYXRlVGltZXxmbjptb250aC1mcm9tLWRhdGV8Zm46bWludXRlcy1mcm9tLXRpbWV8Zm46bWludXRlcy1mcm9tLWR1cmF0aW9ufGZuOm1pbnV0ZXMtZnJvbS1kYXRlVGltZXxmbjptaW58Zm46bWF4fGZuOm1hdGNoZXN8Zm46bG93ZXItY2FzZXxmbjpsb2NhbC1uYW1lLWZyb20tUU5hbWV8Zm46bG9jYWwtbmFtZXxmbjpsYXN0fGZuOmxhbmd8Zm46aXJpLXRvLXVyaXxmbjppbnNlcnQtYmVmb3JlfGZuOmluZGV4LW9mfGZuOmluLXNjb3BlLXByZWZpeGVzfGZuOmltcGxpY2l0LXRpbWV6b25lfGZuOmlkcmVmfGZuOmlkfGZuOmhvdXJzLWZyb20tdGltZXxmbjpob3Vycy1mcm9tLWR1cmF0aW9ufGZuOmhvdXJzLWZyb20tZGF0ZVRpbWV8Zm46Zmxvb3J8Zm46ZmFsc2V8Zm46ZXhwYW5kZWQtUU5hbWV8Zm46ZXhpc3RzfGZuOmV4YWN0bHktb25lfGZuOmVzY2FwZS11cml8Zm46ZXNjYXBlLWh0bWwtdXJpfGZuOmVycm9yfGZuOmVuZHMtd2l0aHxmbjplbmNvZGUtZm9yLXVyaXxmbjplbXB0eXxmbjpkb2N1bWVudC11cml8Zm46ZG9jLWF2YWlsYWJsZXxmbjpkb2N8Zm46ZGlzdGluY3QtdmFsdWVzfGZuOmRpc3RpbmN0LW5vZGVzfGZuOmRlZmF1bHQtY29sbGF0aW9ufGZuOmRlZXAtZXF1YWx8Zm46ZGF5cy1mcm9tLWR1cmF0aW9ufGZuOmRheS1mcm9tLWRhdGVUaW1lfGZuOmRheS1mcm9tLWRhdGV8Zm46ZGF0YXxmbjpjdXJyZW50LXRpbWV8Zm46Y3VycmVudC1kYXRlVGltZXxmbjpjdXJyZW50LWRhdGV8Zm46Y291bnR8Zm46Y29udGFpbnN8Zm46Y29uY2F0fGZuOmNvbXBhcmV8Zm46Y29sbGVjdGlvbnxmbjpjb2RlcG9pbnRzLXRvLXN0cmluZ3xmbjpjb2RlcG9pbnQtZXF1YWx8Zm46Y2VpbGluZ3xmbjpib29sZWFufGZuOmJhc2UtdXJpfGZuOmF2Z3xmbjphZGp1c3QtdGltZS10by10aW1lem9uZXxmbjphZGp1c3QtZGF0ZVRpbWUtdG8tdGltZXpvbmV8Zm46YWRqdXN0LWRhdGUtdG8tdGltZXpvbmV8Zm46YWJzfGZlZWQ6dW5zdWJzY3JpYmV8ZmVlZDpzdWJzY3JpcHRpb258ZmVlZDpzdWJzY3JpYmV8ZmVlZDpyZXF1ZXN0fGZlZWQ6aXRlbXxmZWVkOmRlc2NyaXB0aW9ufGV4Y2VsOmNsZWFufGVudGl0eTplbnJpY2h8ZG9tOnNldC1waXBlbGluZXN8ZG9tOnNldC1wZXJtaXNzaW9uc3xkb206c2V0LW5hbWV8ZG9tOnNldC1ldmFsdWF0aW9uLWNvbnRleHR8ZG9tOnNldC1kb21haW4tc2NvcGV8ZG9tOnNldC1kZXNjcmlwdGlvbnxkb206cmVtb3ZlLXBpcGVsaW5lfGRvbTpyZW1vdmUtcGVybWlzc2lvbnN8ZG9tOnJlbW92ZXxkb206Z2V0fGRvbTpldmFsdWF0aW9uLWNvbnRleHR8ZG9tOmRvbWFpbnN8ZG9tOmRvbWFpbi1zY29wZXxkb206Y3JlYXRlfGRvbTpjb25maWd1cmF0aW9uLXNldC1yZXN0YXJ0LXVzZXJ8ZG9tOmNvbmZpZ3VyYXRpb24tc2V0LXBlcm1pc3Npb25zfGRvbTpjb25maWd1cmF0aW9uLXNldC1ldmFsdWF0aW9uLWNvbnRleHR8ZG9tOmNvbmZpZ3VyYXRpb24tc2V0LWRlZmF1bHQtZG9tYWlufGRvbTpjb25maWd1cmF0aW9uLWdldHxkb206Y29uZmlndXJhdGlvbi1jcmVhdGV8ZG9tOmNvbGxlY3Rpb258ZG9tOmFkZC1waXBlbGluZXxkb206YWRkLXBlcm1pc3Npb25zfGRsczpyZXRlbnRpb24tcnVsZXN8ZGxzOnJldGVudGlvbi1ydWxlLXJlbW92ZXxkbHM6cmV0ZW50aW9uLXJ1bGUtaW5zZXJ0fGRsczpyZXRlbnRpb24tcnVsZXxkbHM6cHVyZ2V8ZGxzOm5vZGUtZXhwYW5kfGRsczpsaW5rLXJlZmVyZW5jZXN8ZGxzOmxpbmstZXhwYW5kfGRsczpkb2N1bWVudHMtcXVlcnl8ZGxzOmRvY3VtZW50LXZlcnNpb25zLXF1ZXJ5fGRsczpkb2N1bWVudC12ZXJzaW9uLXVyaXxkbHM6ZG9jdW1lbnQtdmVyc2lvbi1xdWVyeXxkbHM6ZG9jdW1lbnQtdmVyc2lvbi1kZWxldGV8ZGxzOmRvY3VtZW50LXZlcnNpb24tYXMtb2Z8ZGxzOmRvY3VtZW50LXZlcnNpb258ZGxzOmRvY3VtZW50LXVwZGF0ZXxkbHM6ZG9jdW1lbnQtdW5tYW5hZ2V8ZGxzOmRvY3VtZW50LXNldC1xdWFsaXR5fGRsczpkb2N1bWVudC1zZXQtcHJvcGVydHl8ZGxzOmRvY3VtZW50LXNldC1wcm9wZXJ0aWVzfGRsczpkb2N1bWVudC1zZXQtcGVybWlzc2lvbnN8ZGxzOmRvY3VtZW50LXNldC1jb2xsZWN0aW9uc3xkbHM6ZG9jdW1lbnQtcmV0ZW50aW9uLXJ1bGVzfGRsczpkb2N1bWVudC1yZW1vdmUtcHJvcGVydGllc3xkbHM6ZG9jdW1lbnQtcmVtb3ZlLXBlcm1pc3Npb25zfGRsczpkb2N1bWVudC1yZW1vdmUtY29sbGVjdGlvbnN8ZGxzOmRvY3VtZW50LXB1cmdlfGRsczpkb2N1bWVudC1tYW5hZ2V8ZGxzOmRvY3VtZW50LWlzLW1hbmFnZWR8ZGxzOmRvY3VtZW50LWluc2VydC1hbmQtbWFuYWdlfGRsczpkb2N1bWVudC1pbmNsdWRlLXF1ZXJ5fGRsczpkb2N1bWVudC1oaXN0b3J5fGRsczpkb2N1bWVudC1nZXQtcGVybWlzc2lvbnN8ZGxzOmRvY3VtZW50LWV4dHJhY3QtcGFydHxkbHM6ZG9jdW1lbnQtZGVsZXRlfGRsczpkb2N1bWVudC1jaGVja291dC1zdGF0dXN8ZGxzOmRvY3VtZW50LWNoZWNrb3V0fGRsczpkb2N1bWVudC1jaGVja2lufGRsczpkb2N1bWVudC1hZGQtcHJvcGVydGllc3xkbHM6ZG9jdW1lbnQtYWRkLXBlcm1pc3Npb25zfGRsczpkb2N1bWVudC1hZGQtY29sbGVjdGlvbnN8ZGxzOmJyZWFrLWNoZWNrb3V0fGRsczphdXRob3ItcXVlcnl8ZGxzOmFzLW9mLXF1ZXJ5fGRiazpjb252ZXJ0fGRiZzp3YWl0fGRiZzp2YWx1ZXxkYmc6c3RvcHBlZHxkYmc6c3RvcHxkYmc6c3RlcHxkYmc6c3RhdHVzfGRiZzpzdGFja3xkYmc6b3V0fGRiZzpuZXh0fGRiZzpsaW5lfGRiZzppbnZva2V8ZGJnOmZ1bmN0aW9ufGRiZzpmaW5pc2h8ZGJnOmV4cHJ8ZGJnOmV2YWx8ZGJnOmRpc2Nvbm5lY3R8ZGJnOmRldGFjaHxkYmc6Y29udGludWV8ZGJnOmNvbm5lY3R8ZGJnOmNsZWFyfGRiZzpicmVha3BvaW50c3xkYmc6YnJlYWt8ZGJnOmF0dGFjaGVkfGRiZzphdHRhY2h8Y3Z0OnNhdmUtY29udmVydGVkLWRvY3VtZW50c3xjdnQ6cGFydC11cml8Y3Z0OmRlc3RpbmF0aW9uLXVyaXxjdnQ6YmFzZXBhdGh8Y3Z0OmJhc2VuYW1lfGN0czp3b3Jkc3xjdHM6d29yZC1xdWVyeS13ZWlnaHR8Y3RzOndvcmQtcXVlcnktdGV4dHxjdHM6d29yZC1xdWVyeS1vcHRpb25zfGN0czp3b3JkLXF1ZXJ5fGN0czp3b3JkLW1hdGNofGN0czp3YWxrfGN0czp1cmlzfGN0czp1cmktbWF0Y2h8Y3RzOnRyYWlufGN0czp0b2tlbml6ZXxjdHM6dGhyZXNob2xkc3xjdHM6c3RlbXxjdHM6c2ltaWxhci1xdWVyeS13ZWlnaHR8Y3RzOnNpbWlsYXItcXVlcnktbm9kZXN8Y3RzOnNpbWlsYXItcXVlcnl8Y3RzOnNob3J0ZXN0LWRpc3RhbmNlfGN0czpzZWFyY2h8Y3RzOnNjb3JlfGN0czpyZXZlcnNlLXF1ZXJ5LXdlaWdodHxjdHM6cmV2ZXJzZS1xdWVyeS1ub2Rlc3xjdHM6cmV2ZXJzZS1xdWVyeXxjdHM6cmVtYWluZGVyfGN0czpyZWdpc3RlcmVkLXF1ZXJ5LXdlaWdodHxjdHM6cmVnaXN0ZXJlZC1xdWVyeS1vcHRpb25zfGN0czpyZWdpc3RlcmVkLXF1ZXJ5LWlkc3xjdHM6cmVnaXN0ZXJlZC1xdWVyeXxjdHM6cmVnaXN0ZXJ8Y3RzOnF1ZXJ5fGN0czpxdWFsaXR5fGN0czpwcm9wZXJ0aWVzLXF1ZXJ5LXF1ZXJ5fGN0czpwcm9wZXJ0aWVzLXF1ZXJ5fGN0czpwb2x5Z29uLXZlcnRpY2VzfGN0czpwb2x5Z29ufGN0czpwb2ludC1sb25naXR1ZGV8Y3RzOnBvaW50LWxhdGl0dWRlfGN0czpwb2ludHxjdHM6b3ItcXVlcnktcXVlcmllc3xjdHM6b3ItcXVlcnl8Y3RzOm5vdC1xdWVyeS13ZWlnaHR8Y3RzOm5vdC1xdWVyeS1xdWVyeXxjdHM6bm90LXF1ZXJ5fGN0czpuZWFyLXF1ZXJ5LXdlaWdodHxjdHM6bmVhci1xdWVyeS1xdWVyaWVzfGN0czpuZWFyLXF1ZXJ5LW9wdGlvbnN8Y3RzOm5lYXItcXVlcnktZGlzdGFuY2V8Y3RzOm5lYXItcXVlcnl8Y3RzOmhpZ2hsaWdodHxjdHM6Z2Vvc3BhdGlhbC1jby1vY2N1cnJlbmNlc3xjdHM6ZnJlcXVlbmN5fGN0czpmaXRuZXNzfGN0czpmaWVsZC13b3Jkc3xjdHM6ZmllbGQtd29yZC1xdWVyeS13ZWlnaHR8Y3RzOmZpZWxkLXdvcmQtcXVlcnktdGV4dHxjdHM6ZmllbGQtd29yZC1xdWVyeS1vcHRpb25zfGN0czpmaWVsZC13b3JkLXF1ZXJ5LWZpZWxkLW5hbWV8Y3RzOmZpZWxkLXdvcmQtcXVlcnl8Y3RzOmZpZWxkLXdvcmQtbWF0Y2h8Y3RzOmVudGl0eS1oaWdobGlnaHR8Y3RzOmVsZW1lbnQtd29yZHN8Y3RzOmVsZW1lbnQtd29yZC1xdWVyeS13ZWlnaHR8Y3RzOmVsZW1lbnQtd29yZC1xdWVyeS10ZXh0fGN0czplbGVtZW50LXdvcmQtcXVlcnktb3B0aW9uc3xjdHM6ZWxlbWVudC13b3JkLXF1ZXJ5LWVsZW1lbnQtbmFtZXxjdHM6ZWxlbWVudC13b3JkLXF1ZXJ5fGN0czplbGVtZW50LXdvcmQtbWF0Y2h8Y3RzOmVsZW1lbnQtdmFsdWVzfGN0czplbGVtZW50LXZhbHVlLXJhbmdlc3xjdHM6ZWxlbWVudC12YWx1ZS1xdWVyeS13ZWlnaHR8Y3RzOmVsZW1lbnQtdmFsdWUtcXVlcnktdGV4dHxjdHM6ZWxlbWVudC12YWx1ZS1xdWVyeS1vcHRpb25zfGN0czplbGVtZW50LXZhbHVlLXF1ZXJ5LWVsZW1lbnQtbmFtZXxjdHM6ZWxlbWVudC12YWx1ZS1xdWVyeXxjdHM6ZWxlbWVudC12YWx1ZS1tYXRjaHxjdHM6ZWxlbWVudC12YWx1ZS1nZW9zcGF0aWFsLWNvLW9jY3VycmVuY2VzfGN0czplbGVtZW50LXZhbHVlLWNvLW9jY3VycmVuY2VzfGN0czplbGVtZW50LXJhbmdlLXF1ZXJ5LXdlaWdodHxjdHM6ZWxlbWVudC1yYW5nZS1xdWVyeS12YWx1ZXxjdHM6ZWxlbWVudC1yYW5nZS1xdWVyeS1vcHRpb25zfGN0czplbGVtZW50LXJhbmdlLXF1ZXJ5LW9wZXJhdG9yfGN0czplbGVtZW50LXJhbmdlLXF1ZXJ5LWVsZW1lbnQtbmFtZXxjdHM6ZWxlbWVudC1yYW5nZS1xdWVyeXxjdHM6ZWxlbWVudC1xdWVyeS1xdWVyeXxjdHM6ZWxlbWVudC1xdWVyeS1lbGVtZW50LW5hbWV8Y3RzOmVsZW1lbnQtcXVlcnl8Y3RzOmVsZW1lbnQtcGFpci1nZW9zcGF0aWFsLXZhbHVlc3xjdHM6ZWxlbWVudC1wYWlyLWdlb3NwYXRpYWwtdmFsdWUtbWF0Y2h8Y3RzOmVsZW1lbnQtcGFpci1nZW9zcGF0aWFsLXF1ZXJ5LXdlaWdodHxjdHM6ZWxlbWVudC1wYWlyLWdlb3NwYXRpYWwtcXVlcnktcmVnaW9ufGN0czplbGVtZW50LXBhaXItZ2Vvc3BhdGlhbC1xdWVyeS1vcHRpb25zfGN0czplbGVtZW50LXBhaXItZ2Vvc3BhdGlhbC1xdWVyeS1sb25naXR1ZGUtbmFtZXxjdHM6ZWxlbWVudC1wYWlyLWdlb3NwYXRpYWwtcXVlcnktbGF0aXR1ZGUtbmFtZXxjdHM6ZWxlbWVudC1wYWlyLWdlb3NwYXRpYWwtcXVlcnktZWxlbWVudC1uYW1lfGN0czplbGVtZW50LXBhaXItZ2Vvc3BhdGlhbC1xdWVyeXxjdHM6ZWxlbWVudC1wYWlyLWdlb3NwYXRpYWwtYm94ZXN8Y3RzOmVsZW1lbnQtZ2Vvc3BhdGlhbC12YWx1ZXN8Y3RzOmVsZW1lbnQtZ2Vvc3BhdGlhbC12YWx1ZS1tYXRjaHxjdHM6ZWxlbWVudC1nZW9zcGF0aWFsLXF1ZXJ5LXdlaWdodHxjdHM6ZWxlbWVudC1nZW9zcGF0aWFsLXF1ZXJ5LXJlZ2lvbnxjdHM6ZWxlbWVudC1nZW9zcGF0aWFsLXF1ZXJ5LW9wdGlvbnN8Y3RzOmVsZW1lbnQtZ2Vvc3BhdGlhbC1xdWVyeS1lbGVtZW50LW5hbWV8Y3RzOmVsZW1lbnQtZ2Vvc3BhdGlhbC1xdWVyeXxjdHM6ZWxlbWVudC1nZW9zcGF0aWFsLWJveGVzfGN0czplbGVtZW50LWNoaWxkLWdlb3NwYXRpYWwtdmFsdWVzfGN0czplbGVtZW50LWNoaWxkLWdlb3NwYXRpYWwtdmFsdWUtbWF0Y2h8Y3RzOmVsZW1lbnQtY2hpbGQtZ2Vvc3BhdGlhbC1xdWVyeS13ZWlnaHR8Y3RzOmVsZW1lbnQtY2hpbGQtZ2Vvc3BhdGlhbC1xdWVyeS1yZWdpb258Y3RzOmVsZW1lbnQtY2hpbGQtZ2Vvc3BhdGlhbC1xdWVyeS1vcHRpb25zfGN0czplbGVtZW50LWNoaWxkLWdlb3NwYXRpYWwtcXVlcnktZWxlbWVudC1uYW1lfGN0czplbGVtZW50LWNoaWxkLWdlb3NwYXRpYWwtcXVlcnktY2hpbGQtbmFtZXxjdHM6ZWxlbWVudC1jaGlsZC1nZW9zcGF0aWFsLXF1ZXJ5fGN0czplbGVtZW50LWNoaWxkLWdlb3NwYXRpYWwtYm94ZXN8Y3RzOmVsZW1lbnQtYXR0cmlidXRlLXdvcmRzfGN0czplbGVtZW50LWF0dHJpYnV0ZS13b3JkLXF1ZXJ5LXdlaWdodHxjdHM6ZWxlbWVudC1hdHRyaWJ1dGUtd29yZC1xdWVyeS10ZXh0fGN0czplbGVtZW50LWF0dHJpYnV0ZS13b3JkLXF1ZXJ5LW9wdGlvbnN8Y3RzOmVsZW1lbnQtYXR0cmlidXRlLXdvcmQtcXVlcnktZWxlbWVudC1uYW1lfGN0czplbGVtZW50LWF0dHJpYnV0ZS13b3JkLXF1ZXJ5LWF0dHJpYnV0ZS1uYW1lfGN0czplbGVtZW50LWF0dHJpYnV0ZS13b3JkLXF1ZXJ5fGN0czplbGVtZW50LWF0dHJpYnV0ZS13b3JkLW1hdGNofGN0czplbGVtZW50LWF0dHJpYnV0ZS12YWx1ZXN8Y3RzOmVsZW1lbnQtYXR0cmlidXRlLXZhbHVlLXJhbmdlc3xjdHM6ZWxlbWVudC1hdHRyaWJ1dGUtdmFsdWUtcXVlcnktd2VpZ2h0fGN0czplbGVtZW50LWF0dHJpYnV0ZS12YWx1ZS1xdWVyeS10ZXh0fGN0czplbGVtZW50LWF0dHJpYnV0ZS12YWx1ZS1xdWVyeS1vcHRpb25zfGN0czplbGVtZW50LWF0dHJpYnV0ZS12YWx1ZS1xdWVyeS1lbGVtZW50LW5hbWV8Y3RzOmVsZW1lbnQtYXR0cmlidXRlLXZhbHVlLXF1ZXJ5LWF0dHJpYnV0ZS1uYW1lfGN0czplbGVtZW50LWF0dHJpYnV0ZS12YWx1ZS1xdWVyeXxjdHM6ZWxlbWVudC1hdHRyaWJ1dGUtdmFsdWUtbWF0Y2h8Y3RzOmVsZW1lbnQtYXR0cmlidXRlLXZhbHVlLWdlb3NwYXRpYWwtY28tb2NjdXJyZW5jZXN8Y3RzOmVsZW1lbnQtYXR0cmlidXRlLXZhbHVlLWNvLW9jY3VycmVuY2VzfGN0czplbGVtZW50LWF0dHJpYnV0ZS1yYW5nZS1xdWVyeS13ZWlnaHR8Y3RzOmVsZW1lbnQtYXR0cmlidXRlLXJhbmdlLXF1ZXJ5LXZhbHVlfGN0czplbGVtZW50LWF0dHJpYnV0ZS1yYW5nZS1xdWVyeS1vcHRpb25zfGN0czplbGVtZW50LWF0dHJpYnV0ZS1yYW5nZS1xdWVyeS1vcGVyYXRvcnxjdHM6ZWxlbWVudC1hdHRyaWJ1dGUtcmFuZ2UtcXVlcnktZWxlbWVudC1uYW1lfGN0czplbGVtZW50LWF0dHJpYnV0ZS1yYW5nZS1xdWVyeS1hdHRyaWJ1dGUtbmFtZXxjdHM6ZWxlbWVudC1hdHRyaWJ1dGUtcmFuZ2UtcXVlcnl8Y3RzOmVsZW1lbnQtYXR0cmlidXRlLXBhaXItZ2Vvc3BhdGlhbC12YWx1ZXN8Y3RzOmVsZW1lbnQtYXR0cmlidXRlLXBhaXItZ2Vvc3BhdGlhbC12YWx1ZS1tYXRjaHxjdHM6ZWxlbWVudC1hdHRyaWJ1dGUtcGFpci1nZW9zcGF0aWFsLXF1ZXJ5LXdlaWdodHxjdHM6ZWxlbWVudC1hdHRyaWJ1dGUtcGFpci1nZW9zcGF0aWFsLXF1ZXJ5LXJlZ2lvbnxjdHM6ZWxlbWVudC1hdHRyaWJ1dGUtcGFpci1nZW9zcGF0aWFsLXF1ZXJ5LW9wdGlvbnN8Y3RzOmVsZW1lbnQtYXR0cmlidXRlLXBhaXItZ2Vvc3BhdGlhbC1xdWVyeS1sb25naXR1ZGUtbmFtZXxjdHM6ZWxlbWVudC1hdHRyaWJ1dGUtcGFpci1nZW9zcGF0aWFsLXF1ZXJ5LWxhdGl0dWRlLW5hbWV8Y3RzOmVsZW1lbnQtYXR0cmlidXRlLXBhaXItZ2Vvc3BhdGlhbC1xdWVyeS1lbGVtZW50LW5hbWV8Y3RzOmVsZW1lbnQtYXR0cmlidXRlLXBhaXItZ2Vvc3BhdGlhbC1xdWVyeXxjdHM6ZWxlbWVudC1hdHRyaWJ1dGUtcGFpci1nZW9zcGF0aWFsLWJveGVzfGN0czpkb2N1bWVudC1xdWVyeS11cmlzfGN0czpkb2N1bWVudC1xdWVyeXxjdHM6ZGlzdGFuY2V8Y3RzOmRpcmVjdG9yeS1xdWVyeS11cmlzfGN0czpkaXJlY3RvcnktcXVlcnktZGVwdGh8Y3RzOmRpcmVjdG9yeS1xdWVyeXxjdHM6ZGVzdGluYXRpb258Y3RzOmRlcmVnaXN0ZXJ8Y3RzOmNvbnRhaW5zfGN0czpjb25maWRlbmNlfGN0czpjb2xsZWN0aW9uc3xjdHM6Y29sbGVjdGlvbi1xdWVyeS11cmlzfGN0czpjb2xsZWN0aW9uLXF1ZXJ5fGN0czpjb2xsZWN0aW9uLW1hdGNofGN0czpjbGFzc2lmeXxjdHM6Y2lyY2xlLXJhZGl1c3xjdHM6Y2lyY2xlLWNlbnRlcnxjdHM6Y2lyY2xlfGN0czpib3gtd2VzdHxjdHM6Ym94LXNvdXRofGN0czpib3gtbm9ydGh8Y3RzOmJveC1lYXN0fGN0czpib3h8Y3RzOmJlYXJpbmd8Y3RzOmFyYy1pbnRlcnNlY3Rpb258Y3RzOmFuZC1xdWVyeS1xdWVyaWVzfGN0czphbmQtcXVlcnktb3B0aW9uc3xjdHM6YW5kLXF1ZXJ5fGN0czphbmQtbm90LXF1ZXJ5LXBvc2l0aXZlLXF1ZXJ5fGN0czphbmQtbm90LXF1ZXJ5LW5lZ2F0aXZlLXF1ZXJ5fGN0czphbmQtbm90LXF1ZXJ5fGNzczpnZXR8Y3NzOmNvbnZlcnR8Y3BmOnN1Y2Nlc3N8Y3BmOmZhaWx1cmV8Y3BmOmRvY3VtZW50LXNldC1zdGF0ZXxjcGY6ZG9jdW1lbnQtc2V0LXByb2Nlc3Npbmctc3RhdHVzfGNwZjpkb2N1bWVudC1zZXQtbGFzdC11cGRhdGVkfGNwZjpkb2N1bWVudC1zZXQtZXJyb3J8Y3BmOmRvY3VtZW50LWdldC1zdGF0ZXxjcGY6ZG9jdW1lbnQtZ2V0LXByb2Nlc3Npbmctc3RhdHVzfGNwZjpkb2N1bWVudC1nZXQtbGFzdC11cGRhdGVkfGNwZjpkb2N1bWVudC1nZXQtZXJyb3J8Y3BmOmNoZWNrLXRyYW5zaXRpb258YWxlcnQ6c3Bhd24tbWF0Y2hpbmctYWN0aW9uc3xhbGVydDpydWxlLXVzZXItaWQtcXVlcnl8YWxlcnQ6cnVsZS1zZXQtdXNlci1pZHxhbGVydDpydWxlLXNldC1xdWVyeXxhbGVydDpydWxlLXNldC1vcHRpb25zfGFsZXJ0OnJ1bGUtc2V0LW5hbWV8YWxlcnQ6cnVsZS1zZXQtZGVzY3JpcHRpb258YWxlcnQ6cnVsZS1zZXQtYWN0aW9ufGFsZXJ0OnJ1bGUtcmVtb3ZlfGFsZXJ0OnJ1bGUtbmFtZS1xdWVyeXxhbGVydDpydWxlLWluc2VydHxhbGVydDpydWxlLWlkLXF1ZXJ5fGFsZXJ0OnJ1bGUtZ2V0LXVzZXItaWR8YWxlcnQ6cnVsZS1nZXQtcXVlcnl8YWxlcnQ6cnVsZS1nZXQtb3B0aW9uc3xhbGVydDpydWxlLWdldC1uYW1lfGFsZXJ0OnJ1bGUtZ2V0LWlkfGFsZXJ0OnJ1bGUtZ2V0LWRlc2NyaXB0aW9ufGFsZXJ0OnJ1bGUtZ2V0LWFjdGlvbnxhbGVydDpydWxlLWFjdGlvbi1xdWVyeXxhbGVydDpyZW1vdmUtdHJpZ2dlcnN8YWxlcnQ6bWFrZS1ydWxlfGFsZXJ0Om1ha2UtbG9nLWFjdGlvbnxhbGVydDptYWtlLWNvbmZpZ3xhbGVydDptYWtlLWFjdGlvbnxhbGVydDppbnZva2UtbWF0Y2hpbmctYWN0aW9uc3xhbGVydDpnZXQtbXktcnVsZXN8YWxlcnQ6Z2V0LWFsbC1ydWxlc3xhbGVydDpnZXQtYWN0aW9uc3xhbGVydDpmaW5kLW1hdGNoaW5nLXJ1bGVzfGFsZXJ0OmNyZWF0ZS10cmlnZ2Vyc3xhbGVydDpjb25maWctc2V0LXVyaXxhbGVydDpjb25maWctc2V0LXRyaWdnZXItaWRzfGFsZXJ0OmNvbmZpZy1zZXQtb3B0aW9uc3xhbGVydDpjb25maWctc2V0LW5hbWV8YWxlcnQ6Y29uZmlnLXNldC1kZXNjcmlwdGlvbnxhbGVydDpjb25maWctc2V0LWNwZi1kb21haW4tbmFtZXN8YWxlcnQ6Y29uZmlnLXNldC1jcGYtZG9tYWluLWlkc3xhbGVydDpjb25maWctaW5zZXJ0fGFsZXJ0OmNvbmZpZy1nZXQtdXJpfGFsZXJ0OmNvbmZpZy1nZXQtdHJpZ2dlci1pZHN8YWxlcnQ6Y29uZmlnLWdldC1vcHRpb25zfGFsZXJ0OmNvbmZpZy1nZXQtbmFtZXxhbGVydDpjb25maWctZ2V0LWlkfGFsZXJ0OmNvbmZpZy1nZXQtZGVzY3JpcHRpb258YWxlcnQ6Y29uZmlnLWdldC1jcGYtZG9tYWluLW5hbWVzfGFsZXJ0OmNvbmZpZy1nZXQtY3BmLWRvbWFpbi1pZHN8YWxlcnQ6Y29uZmlnLWdldHxhbGVydDpjb25maWctZGVsZXRlfGFsZXJ0OmFjdGlvbi1zZXQtb3B0aW9uc3xhbGVydDphY3Rpb24tc2V0LW5hbWV8YWxlcnQ6YWN0aW9uLXNldC1tb2R1bGUtcm9vdHxhbGVydDphY3Rpb24tc2V0LW1vZHVsZS1kYnxhbGVydDphY3Rpb24tc2V0LW1vZHVsZXxhbGVydDphY3Rpb24tc2V0LWRlc2NyaXB0aW9ufGFsZXJ0OmFjdGlvbi1yZW1vdmV8YWxlcnQ6YWN0aW9uLWluc2VydHxhbGVydDphY3Rpb24tZ2V0LW9wdGlvbnN8YWxlcnQ6YWN0aW9uLWdldC1uYW1lfGFsZXJ0OmFjdGlvbi1nZXQtbW9kdWxlLXJvb3R8YWxlcnQ6YWN0aW9uLWdldC1tb2R1bGUtZGJ8YWxlcnQ6YWN0aW9uLWdldC1tb2R1bGV8YWxlcnQ6YWN0aW9uLWdldC1kZXNjcmlwdGlvbnx6ZXJvLW9yLW9uZXx5ZWFycy1mcm9tLWR1cmF0aW9ufHllYXItZnJvbS1kYXRlVGltZXx5ZWFyLWZyb20tZGF0ZXx1cHBlci1jYXNlfHVub3JkZXJlZHx0cnVlfHRyYW5zbGF0ZXx0cmFjZXx0b2tlbml6ZXx0aW1lem9uZS1mcm9tLXRpbWV8dGltZXpvbmUtZnJvbS1kYXRlVGltZXx0aW1lem9uZS1mcm9tLWRhdGV8c3VtfHN1YnRyYWN0LWRhdGVUaW1lcy15aWVsZGluZy15ZWFyTW9udGhEdXJhdGlvbnxzdWJ0cmFjdC1kYXRlVGltZXMteWllbGRpbmctZGF5VGltZUR1cmF0aW9ufHN1YnN0cmluZy1iZWZvcmV8c3Vic3RyaW5nLWFmdGVyfHN1YnN0cmluZ3xzdWJzZXF1ZW5jZXxzdHJpbmctdG8tY29kZXBvaW50c3xzdHJpbmctcGFkfHN0cmluZy1sZW5ndGh8c3RyaW5nLWpvaW58c3RyaW5nfHN0YXRpYy1iYXNlLXVyaXxzdGFydHMtd2l0aHxzZWNvbmRzLWZyb20tdGltZXxzZWNvbmRzLWZyb20tZHVyYXRpb258c2Vjb25kcy1mcm9tLWRhdGVUaW1lfHJvdW5kLWhhbGYtdG8tZXZlbnxyb3VuZHxyb290fHJldmVyc2V8cmVzb2x2ZS11cml8cmVzb2x2ZS1RTmFtZXxyZXBsYWNlfHJlbW92ZXxRTmFtZXxwcmVmaXgtZnJvbS1RTmFtZXxwb3NpdGlvbnxvbmUtb3ItbW9yZXxudW1iZXJ8bm90fG5vcm1hbGl6ZS11bmljb2RlfG5vcm1hbGl6ZS1zcGFjZXxub2RlLW5hbWV8bm9kZS1raW5kfG5pbGxlZHxuYW1lc3BhY2UtdXJpLWZyb20tUU5hbWV8bmFtZXNwYWNlLXVyaS1mb3ItcHJlZml4fG5hbWVzcGFjZS11cml8bmFtZXxtb250aHMtZnJvbS1kdXJhdGlvbnxtb250aC1mcm9tLWRhdGVUaW1lfG1vbnRoLWZyb20tZGF0ZXxtaW51dGVzLWZyb20tdGltZXxtaW51dGVzLWZyb20tZHVyYXRpb258bWludXRlcy1mcm9tLWRhdGVUaW1lfG1pbnxtYXh8bWF0Y2hlc3xsb3dlci1jYXNlfGxvY2FsLW5hbWUtZnJvbS1RTmFtZXxsb2NhbC1uYW1lfGxhc3R8bGFuZ3xpcmktdG8tdXJpfGluc2VydC1iZWZvcmV8aW5kZXgtb2Z8aW4tc2NvcGUtcHJlZml4ZXN8aW1wbGljaXQtdGltZXpvbmV8aWRyZWZ8aWR8aG91cnMtZnJvbS10aW1lfGhvdXJzLWZyb20tZHVyYXRpb258aG91cnMtZnJvbS1kYXRlVGltZXxmbG9vcnxmYWxzZXxleHBhbmRlZC1RTmFtZXxleGlzdHN8ZXhhY3RseS1vbmV8ZXNjYXBlLXVyaXxlc2NhcGUtaHRtbC11cml8ZXJyb3J8ZW5kcy13aXRofGVuY29kZS1mb3ItdXJpfGVtcHR5fGRvY3VtZW50LXVyaXxkb2MtYXZhaWxhYmxlfGRvY3xkaXN0aW5jdC12YWx1ZXN8ZGlzdGluY3Qtbm9kZXN8ZGVmYXVsdC1jb2xsYXRpb258ZGVlcC1lcXVhbHxkYXlzLWZyb20tZHVyYXRpb258ZGF5LWZyb20tZGF0ZVRpbWV8ZGF5LWZyb20tZGF0ZXxkYXRhfGN1cnJlbnQtdGltZXxjdXJyZW50LWRhdGVUaW1lfGN1cnJlbnQtZGF0ZXxjb3VudHxjb250YWluc3xjb25jYXR8Y29tcGFyZXxjb2xsZWN0aW9ufGNvZGVwb2ludHMtdG8tc3RyaW5nfGNvZGVwb2ludC1lcXVhbHxjZWlsaW5nfGJvb2xlYW58YmFzZS11cml8YXZnfGFkanVzdC10aW1lLXRvLXRpbWV6b25lfGFkanVzdC1kYXRlVGltZS10by10aW1lem9uZXxhZGp1c3QtZGF0ZS10by10aW1lem9uZXxhYnMpXGIvXSwKK1sicGxuIiwvXltcdzotXSsvXSxbInBsbiIsL15bXHRcblxyIFx4YTBdKy9dXSksWyJ4cSIsInhxdWVyeSJdKTsKZGlmZiAtLWdpdCBhL3BhZ2VzL3RyYW5zY3JpcHRzLzIwMTNfRWNsaXBzZUNvbkZyYW5jZS9qcy9wcmV0dGlmeS9sYW5nLXlhbWwuanMgYi9wYWdlcy90cmFuc2NyaXB0cy8yMDEzX0VjbGlwc2VDb25GcmFuY2UvanMvcHJldHRpZnkvbGFuZy15YW1sLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMzODcyOWIKLS0tIC9kZXYvbnVsbAorKysgYi9wYWdlcy90cmFuc2NyaXB0cy8yMDEzX0VjbGlwc2VDb25GcmFuY2UvanMvcHJldHRpZnkvbGFuZy15YW1sLmpzCkBAIC0wLDAgKzEsMiBAQAordmFyIGE9bnVsbDsKK1BSLnJlZ2lzdGVyTGFuZ0hhbmRsZXIoUFIuY3JlYXRlU2ltcGxlTGV4ZXIoW1sicHVuIiwvXls6Pj98XSsvLGEsIjp8Pj8iXSxbImRlYyIsL14lKD86WUFNTHxUQUcpW15cblxyI10rLyxhLCIlIl0sWyJ0eXAiLC9eJlxTKy8sYSwiJiJdLFsidHlwIiwvXiFcUyovLGEsIiEiXSxbInN0ciIsL14iKD86W14iXFxdfFxcLikqKD86InwkKS8sYSwnIiddLFsic3RyIiwvXicoPzpbXiddfCcnKSooPzonfCQpLyxhLCInIl0sWyJjb20iLC9eI1teXG5ccl0qLyxhLCIjIl0sWyJwbG4iLC9eXHMrLyxhLCIgXHRcclxuIl1dLFtbImRlYyIsL14oPzotLS18XC5cLlwuKSg/OltcblxyXXwkKS9dLFsicHVuIiwvXi0vXSxbImt3ZCIsL15cdys6W1xuXHIgXS9dLFsicGxuIiwvXlx3Ky9dXSksWyJ5YW1sIiwieW1sIl0pOwpkaWZmIC0tZ2l0IGEvcGFnZXMvdHJhbnNjcmlwdHMvMjAxM19FY2xpcHNlQ29uRnJhbmNlL2pzL3ByZXR0aWZ5L3ByZXR0aWZ5LmNzcyBiL3BhZ2VzL3RyYW5zY3JpcHRzLzIwMTNfRWNsaXBzZUNvbkZyYW5jZS9qcy9wcmV0dGlmeS9wcmV0dGlmeS5jc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDQ0YjNhMgotLS0gL2Rldi9udWxsCisrKyBiL3BhZ2VzL3RyYW5zY3JpcHRzLzIwMTNfRWNsaXBzZUNvbkZyYW5jZS9qcy9wcmV0dGlmeS9wcmV0dGlmeS5jc3MKQEAgLTAsMCArMSBAQAorLnBsbntjb2xvcjojMDAwfUBtZWRpYSBzY3JlZW57LnN0cntjb2xvcjojMDgwfS5rd2R7Y29sb3I6IzAwOH0uY29te2NvbG9yOiM4MDB9LnR5cHtjb2xvcjojNjA2fS5saXR7Y29sb3I6IzA2Nn0ucHVuLC5vcG4sLmNsb3tjb2xvcjojNjYwfS50YWd7Y29sb3I6IzAwOH0uYXRue2NvbG9yOiM2MDZ9LmF0dntjb2xvcjojMDgwfS5kZWMsLnZhcntjb2xvcjojNjA2fS5mdW57Y29sb3I6cmVkfX1AbWVkaWEgcHJpbnQscHJvamVjdGlvbnsuc3Rye2NvbG9yOiMwNjB9Lmt3ZHtjb2xvcjojMDA2O2ZvbnQtd2VpZ2h0OmJvbGR9LmNvbXtjb2xvcjojNjAwO2ZvbnQtc3R5bGU6aXRhbGljfS50eXB7Y29sb3I6IzQwNDtmb250LXdlaWdodDpib2xkfS5saXR7Y29sb3I6IzA0NH0ucHVuLC5vcG4sLmNsb3tjb2xvcjojNDQwfS50YWd7Y29sb3I6IzAwNjtmb250LXdlaWdodDpib2xkfS5hdG57Y29sb3I6IzQwNH0uYXR2e2NvbG9yOiMwNjB9fXByZS5wcmV0dHlwcmludHtwYWRkaW5nOjJweDtib3JkZXI6MXB4IHNvbGlkICM4ODh9b2wubGluZW51bXN7bWFyZ2luLXRvcDowO21hcmdpbi1ib3R0b206MH1saS5MMCxsaS5MMSxsaS5MMixsaS5MMyxsaS5MNSxsaS5MNixsaS5MNyxsaS5MOHtsaXN0LXN0eWxlLXR5cGU6bm9uZX1saS5MMSxsaS5MMyxsaS5MNSxsaS5MNyxsaS5MOXtiYWNrZ3JvdW5kOiNlZWV9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvcGFnZXMvdHJhbnNjcmlwdHMvMjAxM19FY2xpcHNlQ29uRnJhbmNlL2pzL3ByZXR0aWZ5L3ByZXR0aWZ5LmpzIGIvcGFnZXMvdHJhbnNjcmlwdHMvMjAxM19FY2xpcHNlQ29uRnJhbmNlL2pzL3ByZXR0aWZ5L3ByZXR0aWZ5LmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVlZjVhZDcKLS0tIC9kZXYvbnVsbAorKysgYi9wYWdlcy90cmFuc2NyaXB0cy8yMDEzX0VjbGlwc2VDb25GcmFuY2UvanMvcHJldHRpZnkvcHJldHRpZnkuanMKQEAgLTAsMCArMSwyOCBAQAordmFyIHE9bnVsbDt3aW5kb3cuUFJfU0hPVUxEX1VTRV9DT05USU5VQVRJT049ITA7CisoZnVuY3Rpb24oKXtmdW5jdGlvbiBMKGEpe2Z1bmN0aW9uIG0oYSl7dmFyIGY9YS5jaGFyQ29kZUF0KDApO2lmKGYhPT05MilyZXR1cm4gZjt2YXIgYj1hLmNoYXJBdCgxKTtyZXR1cm4oZj1yW2JdKT9mOiIwIjw9YiYmYjw9IjciP3BhcnNlSW50KGEuc3Vic3RyaW5nKDEpLDgpOmI9PT0idSJ8fGI9PT0ieCI/cGFyc2VJbnQoYS5zdWJzdHJpbmcoMiksMTYpOmEuY2hhckNvZGVBdCgxKX1mdW5jdGlvbiBlKGEpe2lmKGE8MzIpcmV0dXJuKGE8MTY/IlxceDAiOiJcXHgiKSthLnRvU3RyaW5nKDE2KTthPVN0cmluZy5mcm9tQ2hhckNvZGUoYSk7aWYoYT09PSJcXCJ8fGE9PT0iLSJ8fGE9PT0iWyJ8fGE9PT0iXSIpYT0iXFwiK2E7cmV0dXJuIGF9ZnVuY3Rpb24gaChhKXtmb3IodmFyIGY9YS5zdWJzdHJpbmcoMSxhLmxlbmd0aC0xKS5tYXRjaCgvXFx1W1xkQS1GYS1mXXs0fXxcXHhbXGRBLUZhLWZdezJ9fFxcWzAtM11bMC03XXswLDJ9fFxcWzAtN117MSwyfXxcXFtcU1xzXXxbXlxcXS9nKSxhPQorW10sYj1bXSxvPWZbMF09PT0iXiIsYz1vPzE6MCxpPWYubGVuZ3RoO2M8aTsrK2Mpe3ZhciBqPWZbY107aWYoL1xcW2Jkc3ddL2kudGVzdChqKSlhLnB1c2goaik7ZWxzZXt2YXIgaj1tKGopLGQ7YysyPGkmJiItIj09PWZbYysxXT8oZD1tKGZbYysyXSksYys9Mik6ZD1qO2IucHVzaChbaixkXSk7ZDw2NXx8aj4xMjJ8fChkPDY1fHxqPjkwfHxiLnB1c2goW01hdGgubWF4KDY1LGopfDMyLE1hdGgubWluKGQsOTApfDMyXSksZDw5N3x8aj4xMjJ8fGIucHVzaChbTWF0aC5tYXgoOTcsaikmLTMzLE1hdGgubWluKGQsMTIyKSYtMzNdKSl9fWIuc29ydChmdW5jdGlvbihhLGYpe3JldHVybiBhWzBdLWZbMF18fGZbMV0tYVsxXX0pO2Y9W107aj1bTmFOLE5hTl07Zm9yKGM9MDtjPGIubGVuZ3RoOysrYylpPWJbY10saVswXTw9alsxXSsxP2pbMV09TWF0aC5tYXgoalsxXSxpWzFdKTpmLnB1c2goaj1pKTtiPVsiWyJdO28mJmIucHVzaCgiXiIpO2IucHVzaC5hcHBseShiLGEpO2ZvcihjPTA7YzwKK2YubGVuZ3RoOysrYylpPWZbY10sYi5wdXNoKGUoaVswXSkpLGlbMV0+aVswXSYmKGlbMV0rMT5pWzBdJiZiLnB1c2goIi0iKSxiLnB1c2goZShpWzFdKSkpO2IucHVzaCgiXSIpO3JldHVybiBiLmpvaW4oIiIpfWZ1bmN0aW9uIHkoYSl7Zm9yKHZhciBmPWEuc291cmNlLm1hdGNoKC9cWyg/OlteXFxcXV18XFxbXFNcc10pKl18XFx1W1xkQS1GYS1mXXs0fXxcXHhbXGRBLUZhLWZdezJ9fFxcXGQrfFxcW15cZHV4XXxcKFw/WyE6PV18WygpXl18W14oKVtcXF5dKy9nKSxiPWYubGVuZ3RoLGQ9W10sYz0wLGk9MDtjPGI7KytjKXt2YXIgaj1mW2NdO2o9PT0iKCI/KytpOiJcXCI9PT1qLmNoYXJBdCgwKSYmKGo9K2ouc3Vic3RyaW5nKDEpKSYmajw9aSYmKGRbal09LTEpfWZvcihjPTE7YzxkLmxlbmd0aDsrK2MpLTE9PT1kW2NdJiYoZFtjXT0rK3QpO2ZvcihpPWM9MDtjPGI7KytjKWo9ZltjXSxqPT09IigiPygrK2ksZFtpXT09PXZvaWQgMCYmKGZbY109Iig/OiIpKToiXFwiPT09ai5jaGFyQXQoMCkmJgorKGo9K2ouc3Vic3RyaW5nKDEpKSYmajw9aSYmKGZbY109IlxcIitkW2ldKTtmb3IoaT1jPTA7YzxiOysrYykiXiI9PT1mW2NdJiYiXiIhPT1mW2MrMV0mJihmW2NdPSIiKTtpZihhLmlnbm9yZUNhc2UmJnMpZm9yKGM9MDtjPGI7KytjKWo9ZltjXSxhPWouY2hhckF0KDApLGoubGVuZ3RoPj0yJiZhPT09IlsiP2ZbY109aChqKTphIT09IlxcIiYmKGZbY109ai5yZXBsYWNlKC9bQS1aYS16XS9nLGZ1bmN0aW9uKGEpe2E9YS5jaGFyQ29kZUF0KDApO3JldHVybiJbIitTdHJpbmcuZnJvbUNoYXJDb2RlKGEmLTMzLGF8MzIpKyJdIn0pKTtyZXR1cm4gZi5qb2luKCIiKX1mb3IodmFyIHQ9MCxzPSExLGw9ITEscD0wLGQ9YS5sZW5ndGg7cDxkOysrcCl7dmFyIGc9YVtwXTtpZihnLmlnbm9yZUNhc2UpbD0hMDtlbHNlIGlmKC9bYS16XS9pLnRlc3QoZy5zb3VyY2UucmVwbGFjZSgvXFx1W1xkYS1mXXs0fXxcXHhbXGRhLWZdezJ9fFxcW15VWHV4XS9naSwiIikpKXtzPSEwO2w9ITE7YnJlYWt9fWZvcih2YXIgcj0KK3tiOjgsdDo5LG46MTAsdjoxMSxmOjEyLHI6MTN9LG49W10scD0wLGQ9YS5sZW5ndGg7cDxkOysrcCl7Zz1hW3BdO2lmKGcuZ2xvYmFsfHxnLm11bHRpbGluZSl0aHJvdyBFcnJvcigiIitnKTtuLnB1c2goIig/OiIreShnKSsiKSIpfXJldHVybiBSZWdFeHAobi5qb2luKCJ8IiksbD8iZ2kiOiJnIil9ZnVuY3Rpb24gTShhKXtmdW5jdGlvbiBtKGEpe3N3aXRjaChhLm5vZGVUeXBlKXtjYXNlIDE6aWYoZS50ZXN0KGEuY2xhc3NOYW1lKSlicmVhaztmb3IodmFyIGc9YS5maXJzdENoaWxkO2c7Zz1nLm5leHRTaWJsaW5nKW0oZyk7Zz1hLm5vZGVOYW1lO2lmKCJCUiI9PT1nfHwiTEkiPT09ZyloW3NdPSJcbiIsdFtzPDwxXT15KyssdFtzKys8PDF8MV09YTticmVhaztjYXNlIDM6Y2FzZSA0Omc9YS5ub2RlVmFsdWUsZy5sZW5ndGgmJihnPXA/Zy5yZXBsYWNlKC9cclxuPy9nLCJcbiIpOmcucmVwbGFjZSgvW1x0XG5cciBdKy9nLCIgIiksaFtzXT1nLHRbczw8MV09eSx5Kz1nLmxlbmd0aCwKK3RbcysrPDwxfDFdPWEpfX12YXIgZT0vKD86Xnxccylub2NvZGUoPzpcc3wkKS8saD1bXSx5PTAsdD1bXSxzPTAsbDthLmN1cnJlbnRTdHlsZT9sPWEuY3VycmVudFN0eWxlLndoaXRlU3BhY2U6d2luZG93LmdldENvbXB1dGVkU3R5bGUmJihsPWRvY3VtZW50LmRlZmF1bHRWaWV3LmdldENvbXB1dGVkU3R5bGUoYSxxKS5nZXRQcm9wZXJ0eVZhbHVlKCJ3aGl0ZS1zcGFjZSIpKTt2YXIgcD1sJiYicHJlIj09PWwuc3Vic3RyaW5nKDAsMyk7bShhKTtyZXR1cm57YTpoLmpvaW4oIiIpLnJlcGxhY2UoL1xuJC8sIiIpLGM6dH19ZnVuY3Rpb24gQihhLG0sZSxoKXttJiYoYT17YTptLGQ6YX0sZShhKSxoLnB1c2guYXBwbHkoaCxhLmUpKX1mdW5jdGlvbiB4KGEsbSl7ZnVuY3Rpb24gZShhKXtmb3IodmFyIGw9YS5kLHA9W2wsInBsbiJdLGQ9MCxnPWEuYS5tYXRjaCh5KXx8W10scj17fSxuPTAsej1nLmxlbmd0aDtuPHo7KytuKXt2YXIgZj1nW25dLGI9cltmXSxvPXZvaWQgMCxjO2lmKHR5cGVvZiBiPT09Cisic3RyaW5nIiljPSExO2Vsc2V7dmFyIGk9aFtmLmNoYXJBdCgwKV07aWYoaSlvPWYubWF0Y2goaVsxXSksYj1pWzBdO2Vsc2V7Zm9yKGM9MDtjPHQ7KytjKWlmKGk9bVtjXSxvPWYubWF0Y2goaVsxXSkpe2I9aVswXTticmVha31vfHwoYj0icGxuIil9aWYoKGM9Yi5sZW5ndGg+PTUmJiJsYW5nLSI9PT1iLnN1YnN0cmluZygwLDUpKSYmIShvJiZ0eXBlb2Ygb1sxXT09PSJzdHJpbmciKSljPSExLGI9InNyYyI7Y3x8KHJbZl09Yil9aT1kO2QrPWYubGVuZ3RoO2lmKGMpe2M9b1sxXTt2YXIgaj1mLmluZGV4T2YoYyksaz1qK2MubGVuZ3RoO29bMl0mJihrPWYubGVuZ3RoLW9bMl0ubGVuZ3RoLGo9ay1jLmxlbmd0aCk7Yj1iLnN1YnN0cmluZyg1KTtCKGwraSxmLnN1YnN0cmluZygwLGopLGUscCk7QihsK2kraixjLEMoYixjKSxwKTtCKGwraStrLGYuc3Vic3RyaW5nKGspLGUscCl9ZWxzZSBwLnB1c2gobCtpLGIpfWEuZT1wfXZhciBoPXt9LHk7KGZ1bmN0aW9uKCl7Zm9yKHZhciBlPWEuY29uY2F0KG0pLAorbD1bXSxwPXt9LGQ9MCxnPWUubGVuZ3RoO2Q8ZzsrK2Qpe3ZhciByPWVbZF0sbj1yWzNdO2lmKG4pZm9yKHZhciBrPW4ubGVuZ3RoOy0taz49MDspaFtuLmNoYXJBdChrKV09cjtyPXJbMV07bj0iIityO3AuaGFzT3duUHJvcGVydHkobil8fChsLnB1c2gocikscFtuXT1xKX1sLnB1c2goL1tcU1xzXS8pO3k9TChsKX0pKCk7dmFyIHQ9bS5sZW5ndGg7cmV0dXJuIGV9ZnVuY3Rpb24gdShhKXt2YXIgbT1bXSxlPVtdO2EudHJpcGxlUXVvdGVkU3RyaW5ncz9tLnB1c2goWyJzdHIiLC9eKD86JycnKD86W14nXFxdfFxcW1xTXHNdfCcnPyg/PVteJ10pKSooPzonJyd8JCl8IiIiKD86W14iXFxdfFxcW1xTXHNdfCIiPyg/PVteIl0pKSooPzoiIiJ8JCl8Jyg/OlteJ1xcXXxcXFtcU1xzXSkqKD86J3wkKXwiKD86W14iXFxdfFxcW1xTXHNdKSooPzoifCQpKS8scSwiJ1wiIl0pOmEubXVsdGlMaW5lU3RyaW5ncz9tLnB1c2goWyJzdHIiLC9eKD86Jyg/OlteJ1xcXXxcXFtcU1xzXSkqKD86J3wkKXwiKD86W14iXFxdfFxcW1xTXHNdKSooPzoifCQpfGAoPzpbXlxcYF18XFxbXFNcc10pKig/OmB8JCkpLywKK3EsIidcImAiXSk6bS5wdXNoKFsic3RyIiwvXig/OicoPzpbXlxuXHInXFxdfFxcLikqKD86J3wkKXwiKD86W15cblxyIlxcXXxcXC4pKig/OiJ8JCkpLyxxLCJcIiciXSk7YS52ZXJiYXRpbVN0cmluZ3MmJmUucHVzaChbInN0ciIsL15AIig/OlteIl18IiIpKig/OiJ8JCkvLHFdKTt2YXIgaD1hLmhhc2hDb21tZW50cztoJiYoYS5jU3R5bGVDb21tZW50cz8oaD4xP20ucHVzaChbImNvbSIsL14jKD86IyMoPzpbXiNdfCMoPyEjIykpKig/OiMjI3wkKXwuKikvLHEsIiMiXSk6bS5wdXNoKFsiY29tIiwvXiMoPzooPzpkZWZpbmV8ZWxpZnxlbHNlfGVuZGlmfGVycm9yfGlmZGVmfGluY2x1ZGV8aWZuZGVmfGxpbmV8cHJhZ21hfHVuZGVmfHdhcm5pbmcpXGJ8W15cblxyXSopLyxxLCIjIl0pLGUucHVzaChbInN0ciIsL148KD86KD86KD86XC5cLlwvKSp8XC8/KSg/Oltcdy1dKyg/OlwvW1x3LV0rKSspP1tcdy1dK1wuaHxbYS16XVx3Kik+LyxxXSkpOm0ucHVzaChbImNvbSIsL14jW15cblxyXSovLAorcSwiIyJdKSk7YS5jU3R5bGVDb21tZW50cyYmKGUucHVzaChbImNvbSIsL15cL1wvW15cblxyXSovLHFdKSxlLnB1c2goWyJjb20iLC9eXC9cKltcU1xzXSo/KD86XCpcL3wkKS8scV0pKTthLnJlZ2V4TGl0ZXJhbHMmJmUucHVzaChbImxhbmctcmVnZXgiLC9eKD86Xl5cLj98WyErLV18IT18IT09fCN8JXwlPXwmfCYmfCYmPXwmPXxcKHxcKnxcKj18XCs9fCx8LT18LT58XC98XC89fDp8Ojp8O3w8fDw8fDw8PXw8PXw9fD09fD09PXw+fD49fD4+fD4+PXw+Pj58Pj4+PXxbP0BbXl18XF49fFxeXF58XF5cXj18e3xcfHxcfD18XHxcfHxcfFx8PXx+fGJyZWFrfGNhc2V8Y29udGludWV8ZGVsZXRlfGRvfGVsc2V8ZmluYWxseXxpbnN0YW5jZW9mfHJldHVybnx0aHJvd3x0cnl8dHlwZW9mKVxzKihcLyg/PVteKi9dKSg/OlteL1tcXF18XFxbXFNcc118XFsoPzpbXlxcXF1dfFxcW1xTXHNdKSooPzpdfCQpKStcLykvXSk7KGg9YS50eXBlcykmJmUucHVzaChbInR5cCIsaF0pO2E9KCIiK2Eua2V5d29yZHMpLnJlcGxhY2UoL14gfCAkL2csCisiIik7YS5sZW5ndGgmJmUucHVzaChbImt3ZCIsUmVnRXhwKCJeKD86IithLnJlcGxhY2UoL1tccyxdKy9nLCJ8IikrIilcXGIiKSxxXSk7bS5wdXNoKFsicGxuIiwvXlxzKy8scSwiIFxyXG5cdFx4YTAiXSk7ZS5wdXNoKFsibGl0IiwvXkBbJF9hLXpdW1x3JEBdKi9pLHFdLFsidHlwIiwvXig/OltAX10/W0EtWl0rW2Etel1bXHckQF0qfFx3K190XGIpLyxxXSxbInBsbiIsL15bJF9hLXpdW1x3JEBdKi9pLHFdLFsibGl0IiwvXig/OjB4W1xkYS1mXSt8KD86XGQoPzpfXGQrKSpcZCooPzpcLlxkKik/fFwuXGRcKykoPzplWystXT9cZCspPylbYS16XSovaSxxLCIwMTIzNDU2Nzg5Il0sWyJwbG4iLC9eXFxbXFNcc10/LyxxXSxbInB1biIsL14uW15cc1x3Ii0kJy4vQFxcYF0qLyxxXSk7cmV0dXJuIHgobSxlKX1mdW5jdGlvbiBEKGEsbSl7ZnVuY3Rpb24gZShhKXtzd2l0Y2goYS5ub2RlVHlwZSl7Y2FzZSAxOmlmKGsudGVzdChhLmNsYXNzTmFtZSkpYnJlYWs7aWYoIkJSIj09PWEubm9kZU5hbWUpaChhKSwKK2EucGFyZW50Tm9kZSYmYS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGEpO2Vsc2UgZm9yKGE9YS5maXJzdENoaWxkO2E7YT1hLm5leHRTaWJsaW5nKWUoYSk7YnJlYWs7Y2FzZSAzOmNhc2UgNDppZihwKXt2YXIgYj1hLm5vZGVWYWx1ZSxkPWIubWF0Y2godCk7aWYoZCl7dmFyIGM9Yi5zdWJzdHJpbmcoMCxkLmluZGV4KTthLm5vZGVWYWx1ZT1jOyhiPWIuc3Vic3RyaW5nKGQuaW5kZXgrZFswXS5sZW5ndGgpKSYmYS5wYXJlbnROb2RlLmluc2VydEJlZm9yZShzLmNyZWF0ZVRleHROb2RlKGIpLGEubmV4dFNpYmxpbmcpO2goYSk7Y3x8YS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGEpfX19fWZ1bmN0aW9uIGgoYSl7ZnVuY3Rpb24gYihhLGQpe3ZhciBlPWQ/YS5jbG9uZU5vZGUoITEpOmEsZj1hLnBhcmVudE5vZGU7aWYoZil7dmFyIGY9YihmLDEpLGc9YS5uZXh0U2libGluZztmLmFwcGVuZENoaWxkKGUpO2Zvcih2YXIgaD1nO2g7aD1nKWc9aC5uZXh0U2libGluZyxmLmFwcGVuZENoaWxkKGgpfXJldHVybiBlfQorZm9yKDshYS5uZXh0U2libGluZzspaWYoYT1hLnBhcmVudE5vZGUsIWEpcmV0dXJuO2Zvcih2YXIgYT1iKGEubmV4dFNpYmxpbmcsMCksZTsoZT1hLnBhcmVudE5vZGUpJiZlLm5vZGVUeXBlPT09MTspYT1lO2QucHVzaChhKX12YXIgaz0vKD86Xnxccylub2NvZGUoPzpcc3wkKS8sdD0vXHJcbj98XG4vLHM9YS5vd25lckRvY3VtZW50LGw7YS5jdXJyZW50U3R5bGU/bD1hLmN1cnJlbnRTdHlsZS53aGl0ZVNwYWNlOndpbmRvdy5nZXRDb21wdXRlZFN0eWxlJiYobD1zLmRlZmF1bHRWaWV3LmdldENvbXB1dGVkU3R5bGUoYSxxKS5nZXRQcm9wZXJ0eVZhbHVlKCJ3aGl0ZS1zcGFjZSIpKTt2YXIgcD1sJiYicHJlIj09PWwuc3Vic3RyaW5nKDAsMyk7Zm9yKGw9cy5jcmVhdGVFbGVtZW50KCJMSSIpO2EuZmlyc3RDaGlsZDspbC5hcHBlbmRDaGlsZChhLmZpcnN0Q2hpbGQpO2Zvcih2YXIgZD1bbF0sZz0wO2c8ZC5sZW5ndGg7KytnKWUoZFtnXSk7bT09PShtfDApJiZkWzBdLnNldEF0dHJpYnV0ZSgidmFsdWUiLAorbSk7dmFyIHI9cy5jcmVhdGVFbGVtZW50KCJPTCIpO3IuY2xhc3NOYW1lPSJsaW5lbnVtcyI7Zm9yKHZhciBuPU1hdGgubWF4KDAsbS0xfDApfHwwLGc9MCx6PWQubGVuZ3RoO2c8ejsrK2cpbD1kW2ddLGwuY2xhc3NOYW1lPSJMIisoZytuKSUxMCxsLmZpcnN0Q2hpbGR8fGwuYXBwZW5kQ2hpbGQocy5jcmVhdGVUZXh0Tm9kZSgiXHhhMCIpKSxyLmFwcGVuZENoaWxkKGwpO2EuYXBwZW5kQ2hpbGQocil9ZnVuY3Rpb24gayhhLG0pe2Zvcih2YXIgZT1tLmxlbmd0aDstLWU+PTA7KXt2YXIgaD1tW2VdO0EuaGFzT3duUHJvcGVydHkoaCk/d2luZG93LmNvbnNvbGUmJmNvbnNvbGUud2FybigiY2Fubm90IG92ZXJyaWRlIGxhbmd1YWdlIGhhbmRsZXIgJXMiLGgpOkFbaF09YX19ZnVuY3Rpb24gQyhhLG0pe2lmKCFhfHwhQS5oYXNPd25Qcm9wZXJ0eShhKSlhPS9eXHMqPC8udGVzdChtKT8iZGVmYXVsdC1tYXJrdXAiOiJkZWZhdWx0LWNvZGUiO3JldHVybiBBW2FdfWZ1bmN0aW9uIEUoYSl7dmFyIG09CithLmc7dHJ5e3ZhciBlPU0oYS5oKSxoPWUuYTthLmE9aDthLmM9ZS5jO2EuZD0wO0MobSxoKShhKTt2YXIgaz0vXGJNU0lFXGIvLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCksbT0vXG4vZyx0PWEuYSxzPXQubGVuZ3RoLGU9MCxsPWEuYyxwPWwubGVuZ3RoLGg9MCxkPWEuZSxnPWQubGVuZ3RoLGE9MDtkW2ddPXM7dmFyIHIsbjtmb3Iobj1yPTA7bjxnOylkW25dIT09ZFtuKzJdPyhkW3IrK109ZFtuKytdLGRbcisrXT1kW24rK10pOm4rPTI7Zz1yO2ZvcihuPXI9MDtuPGc7KXtmb3IodmFyIHo9ZFtuXSxmPWRbbisxXSxiPW4rMjtiKzI8PWcmJmRbYisxXT09PWY7KWIrPTI7ZFtyKytdPXo7ZFtyKytdPWY7bj1ifWZvcihkLmxlbmd0aD1yO2g8cDspe3ZhciBvPWxbaCsyXXx8cyxjPWRbYSsyXXx8cyxiPU1hdGgubWluKG8sYyksaT1sW2grMV0sajtpZihpLm5vZGVUeXBlIT09MSYmKGo9dC5zdWJzdHJpbmcoZSxiKSkpe2smJihqPWoucmVwbGFjZShtLCJcciIpKTtpLm5vZGVWYWx1ZT0KK2o7dmFyIHU9aS5vd25lckRvY3VtZW50LHY9dS5jcmVhdGVFbGVtZW50KCJTUEFOIik7di5jbGFzc05hbWU9ZFthKzFdO3ZhciB4PWkucGFyZW50Tm9kZTt4LnJlcGxhY2VDaGlsZCh2LGkpO3YuYXBwZW5kQ2hpbGQoaSk7ZTxvJiYobFtoKzFdPWk9dS5jcmVhdGVUZXh0Tm9kZSh0LnN1YnN0cmluZyhiLG8pKSx4Lmluc2VydEJlZm9yZShpLHYubmV4dFNpYmxpbmcpKX1lPWI7ZT49byYmKGgrPTIpO2U+PWMmJihhKz0yKX19Y2F0Y2godyl7ImNvbnNvbGUiaW4gd2luZG93JiZjb25zb2xlLmxvZyh3JiZ3LnN0YWNrP3cuc3RhY2s6dyl9fXZhciB2PVsiYnJlYWssY29udGludWUsZG8sZWxzZSxmb3IsaWYscmV0dXJuLHdoaWxlIl0sdz1bW3YsImF1dG8sY2FzZSxjaGFyLGNvbnN0LGRlZmF1bHQsZG91YmxlLGVudW0sZXh0ZXJuLGZsb2F0LGdvdG8saW50LGxvbmcscmVnaXN0ZXIsc2hvcnQsc2lnbmVkLHNpemVvZixzdGF0aWMsc3RydWN0LHN3aXRjaCx0eXBlZGVmLHVuaW9uLHVuc2lnbmVkLHZvaWQsdm9sYXRpbGUiXSwKKyJjYXRjaCxjbGFzcyxkZWxldGUsZmFsc2UsaW1wb3J0LG5ldyxvcGVyYXRvcixwcml2YXRlLHByb3RlY3RlZCxwdWJsaWMsdGhpcyx0aHJvdyx0cnVlLHRyeSx0eXBlb2YiXSxGPVt3LCJhbGlnbm9mLGFsaWduX3VuaW9uLGFzbSxheGlvbSxib29sLGNvbmNlcHQsY29uY2VwdF9tYXAsY29uc3RfY2FzdCxjb25zdGV4cHIsZGVjbHR5cGUsZHluYW1pY19jYXN0LGV4cGxpY2l0LGV4cG9ydCxmcmllbmQsaW5saW5lLGxhdGVfY2hlY2ssbXV0YWJsZSxuYW1lc3BhY2UsbnVsbHB0cixyZWludGVycHJldF9jYXN0LHN0YXRpY19hc3NlcnQsc3RhdGljX2Nhc3QsdGVtcGxhdGUsdHlwZWlkLHR5cGVuYW1lLHVzaW5nLHZpcnR1YWwsd2hlcmUiXSxHPVt3LCJhYnN0cmFjdCxib29sZWFuLGJ5dGUsZXh0ZW5kcyxmaW5hbCxmaW5hbGx5LGltcGxlbWVudHMsaW1wb3J0LGluc3RhbmNlb2YsbnVsbCxuYXRpdmUscGFja2FnZSxzdHJpY3RmcCxzdXBlcixzeW5jaHJvbml6ZWQsdGhyb3dzLHRyYW5zaWVudCJdLAorSD1bRywiYXMsYmFzZSxieSxjaGVja2VkLGRlY2ltYWwsZGVsZWdhdGUsZGVzY2VuZGluZyxkeW5hbWljLGV2ZW50LGZpeGVkLGZvcmVhY2gsZnJvbSxncm91cCxpbXBsaWNpdCxpbixpbnRlcmZhY2UsaW50ZXJuYWwsaW50byxpcyxsb2NrLG9iamVjdCxvdXQsb3ZlcnJpZGUsb3JkZXJieSxwYXJhbXMscGFydGlhbCxyZWFkb25seSxyZWYsc2J5dGUsc2VhbGVkLHN0YWNrYWxsb2Msc3RyaW5nLHNlbGVjdCx1aW50LHVsb25nLHVuY2hlY2tlZCx1bnNhZmUsdXNob3J0LHZhciJdLHc9W3csImRlYnVnZ2VyLGV2YWwsZXhwb3J0LGZ1bmN0aW9uLGdldCxudWxsLHNldCx1bmRlZmluZWQsdmFyLHdpdGgsSW5maW5pdHksTmFOIl0sST1bdiwiYW5kLGFzLGFzc2VydCxjbGFzcyxkZWYsZGVsLGVsaWYsZXhjZXB0LGV4ZWMsZmluYWxseSxmcm9tLGdsb2JhbCxpbXBvcnQsaW4saXMsbGFtYmRhLG5vbmxvY2FsLG5vdCxvcixwYXNzLHByaW50LHJhaXNlLHRyeSx3aXRoLHlpZWxkLEZhbHNlLFRydWUsTm9uZSJdLAorSj1bdiwiYWxpYXMsYW5kLGJlZ2luLGNhc2UsY2xhc3MsZGVmLGRlZmluZWQsZWxzaWYsZW5kLGVuc3VyZSxmYWxzZSxpbixtb2R1bGUsbmV4dCxuaWwsbm90LG9yLHJlZG8scmVzY3VlLHJldHJ5LHNlbGYsc3VwZXIsdGhlbix0cnVlLHVuZGVmLHVubGVzcyx1bnRpbCx3aGVuLHlpZWxkLEJFR0lOLEVORCJdLHY9W3YsImNhc2UsZG9uZSxlbGlmLGVzYWMsZXZhbCxmaSxmdW5jdGlvbixpbixsb2NhbCxzZXQsdGhlbix1bnRpbCJdLEs9L14oRElSfEZJTEV8dmVjdG9yfChkZXxwcmlvcml0eV8pP3F1ZXVlfGxpc3R8c3RhY2t8KGNvbnN0Xyk/aXRlcmF0b3J8KG11bHRpKT8oc2V0fG1hcCl8Yml0c2V0fHU/KGludHxmbG9hdClcZCopLyxOPS9cUy8sTz11KHtrZXl3b3JkczpbRixILHcsImNhbGxlcixkZWxldGUsZGllLGRvLGR1bXAsZWxzaWYsZXZhbCxleGl0LGZvcmVhY2gsZm9yLGdvdG8saWYsaW1wb3J0LGxhc3QsbG9jYWwsbXksbmV4dCxubyxvdXIscHJpbnQscGFja2FnZSxyZWRvLHJlcXVpcmUsc3ViLHVuZGVmLHVubGVzcyx1bnRpbCx1c2Usd2FudGFycmF5LHdoaWxlLEJFR0lOLEVORCIrCitJLEosdl0saGFzaENvbW1lbnRzOiEwLGNTdHlsZUNvbW1lbnRzOiEwLG11bHRpTGluZVN0cmluZ3M6ITAscmVnZXhMaXRlcmFsczohMH0pLEE9e307ayhPLFsiZGVmYXVsdC1jb2RlIl0pO2soeChbXSxbWyJwbG4iLC9eW148P10rL10sWyJkZWMiLC9ePCFcd1tePl0qKD86PnwkKS9dLFsiY29tIiwvXjxcIS0tW1xTXHNdKj8oPzotLVw+fCQpL10sWyJsYW5nLSIsL148XD8oW1xTXHNdKz8pKD86XD8+fCQpL10sWyJsYW5nLSIsL148JShbXFNcc10rPykoPzolPnwkKS9dLFsicHVuIiwvXig/OjxbJT9dfFslP10+KS9dLFsibGFuZy0iLC9ePHhtcFxiW14+XSo+KFtcU1xzXSs/KTxcL3htcFxiW14+XSo+L2ldLFsibGFuZy1qcyIsL148c2NyaXB0XGJbXj5dKj4oW1xTXHNdKj8pKDxcL3NjcmlwdFxiW14+XSo+KS9pXSxbImxhbmctY3NzIiwvXjxzdHlsZVxiW14+XSo+KFtcU1xzXSo/KSg8XC9zdHlsZVxiW14+XSo+KS9pXSxbImxhbmctaW4udGFnIiwvXig8XC8/W2Etel1bXjw+XSo+KS9pXV0pLAorWyJkZWZhdWx0LW1hcmt1cCIsImh0bSIsImh0bWwiLCJteG1sIiwieGh0bWwiLCJ4bWwiLCJ4c2wiXSk7ayh4KFtbInBsbiIsL15ccysvLHEsIiBcdFxyXG4iXSxbImF0diIsL14oPzoiW14iXSoiP3wnW14nXSonPykvLHEsIlwiJyJdXSxbWyJ0YWciLC9eXjxcLz9bYS16XSg/Oltcdy0uOl0qXHcpP3xcLz8+JC9pXSxbImF0biIsL14oPyFzdHlsZVtccz1dfG9uKVthLXpdKD86W1x3Oi1dKlx3KT8vaV0sWyJsYW5nLXVxLnZhbCIsL149XHMqKFteXHMiJz5dKig/OlteXHMiJy8+XXxcLyg/PVxzKSkpL10sWyJwdW4iLC9eWy88LT5dKy9dLFsibGFuZy1qcyIsL15vblx3K1xzKj1ccyoiKFteIl0rKSIvaV0sWyJsYW5nLWpzIiwvXm9uXHcrXHMqPVxzKicoW14nXSspJy9pXSxbImxhbmctanMiLC9eb25cdytccyo9XHMqKFteXHMiJz5dKykvaV0sWyJsYW5nLWNzcyIsL15zdHlsZVxzKj1ccyoiKFteIl0rKSIvaV0sWyJsYW5nLWNzcyIsL15zdHlsZVxzKj1ccyonKFteJ10rKScvaV0sWyJsYW5nLWNzcyIsCisvXnN0eWxlXHMqPVxzKihbXlxzIic+XSspL2ldXSksWyJpbi50YWciXSk7ayh4KFtdLFtbImF0diIsL15bXFNcc10rL11dKSxbInVxLnZhbCJdKTtrKHUoe2tleXdvcmRzOkYsaGFzaENvbW1lbnRzOiEwLGNTdHlsZUNvbW1lbnRzOiEwLHR5cGVzOkt9KSxbImMiLCJjYyIsImNwcCIsImN4eCIsImN5YyIsIm0iXSk7ayh1KHtrZXl3b3JkczoibnVsbCx0cnVlLGZhbHNlIn0pLFsianNvbiJdKTtrKHUoe2tleXdvcmRzOkgsaGFzaENvbW1lbnRzOiEwLGNTdHlsZUNvbW1lbnRzOiEwLHZlcmJhdGltU3RyaW5nczohMCx0eXBlczpLfSksWyJjcyJdKTtrKHUoe2tleXdvcmRzOkcsY1N0eWxlQ29tbWVudHM6ITB9KSxbImphdmEiXSk7ayh1KHtrZXl3b3Jkczp2LGhhc2hDb21tZW50czohMCxtdWx0aUxpbmVTdHJpbmdzOiEwfSksWyJic2giLCJjc2giLCJzaCJdKTtrKHUoe2tleXdvcmRzOkksaGFzaENvbW1lbnRzOiEwLG11bHRpTGluZVN0cmluZ3M6ITAsdHJpcGxlUXVvdGVkU3RyaW5nczohMH0pLAorWyJjdiIsInB5Il0pO2sodSh7a2V5d29yZHM6ImNhbGxlcixkZWxldGUsZGllLGRvLGR1bXAsZWxzaWYsZXZhbCxleGl0LGZvcmVhY2gsZm9yLGdvdG8saWYsaW1wb3J0LGxhc3QsbG9jYWwsbXksbmV4dCxubyxvdXIscHJpbnQscGFja2FnZSxyZWRvLHJlcXVpcmUsc3ViLHVuZGVmLHVubGVzcyx1bnRpbCx1c2Usd2FudGFycmF5LHdoaWxlLEJFR0lOLEVORCIsaGFzaENvbW1lbnRzOiEwLG11bHRpTGluZVN0cmluZ3M6ITAscmVnZXhMaXRlcmFsczohMH0pLFsicGVybCIsInBsIiwicG0iXSk7ayh1KHtrZXl3b3JkczpKLGhhc2hDb21tZW50czohMCxtdWx0aUxpbmVTdHJpbmdzOiEwLHJlZ2V4TGl0ZXJhbHM6ITB9KSxbInJiIl0pO2sodSh7a2V5d29yZHM6dyxjU3R5bGVDb21tZW50czohMCxyZWdleExpdGVyYWxzOiEwfSksWyJqcyJdKTtrKHUoe2tleXdvcmRzOiJhbGwsYW5kLGJ5LGNhdGNoLGNsYXNzLGVsc2UsZXh0ZW5kcyxmYWxzZSxmaW5hbGx5LGZvcixpZixpbixpcyxpc250LGxvb3AsbmV3LG5vLG5vdCxudWxsLG9mLG9mZixvbixvcixyZXR1cm4sc3VwZXIsdGhlbix0cnVlLHRyeSx1bmxlc3MsdW50aWwsd2hlbix3aGlsZSx5ZXMiLAoraGFzaENvbW1lbnRzOjMsY1N0eWxlQ29tbWVudHM6ITAsbXVsdGlsaW5lU3RyaW5nczohMCx0cmlwbGVRdW90ZWRTdHJpbmdzOiEwLHJlZ2V4TGl0ZXJhbHM6ITB9KSxbImNvZmZlZSJdKTtrKHgoW10sW1sic3RyIiwvXltcU1xzXSsvXV0pLFsicmVnZXgiXSk7d2luZG93LnByZXR0eVByaW50T25lPWZ1bmN0aW9uKGEsbSxlKXt2YXIgaD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJQUkUiKTtoLmlubmVySFRNTD1hO2UmJkQoaCxlKTtFKHtnOm0saTplLGg6aH0pO3JldHVybiBoLmlubmVySFRNTH07d2luZG93LnByZXR0eVByaW50PWZ1bmN0aW9uKGEpe2Z1bmN0aW9uIG0oKXtmb3IodmFyIGU9d2luZG93LlBSX1NIT1VMRF9VU0VfQ09OVElOVUFUSU9OP2wubm93KCkrMjUwOkluZmluaXR5O3A8aC5sZW5ndGgmJmwubm93KCk8ZTtwKyspe3ZhciBuPWhbcF0saz1uLmNsYXNzTmFtZTtpZihrLmluZGV4T2YoInByZXR0eXByaW50Iik+PTApe3ZhciBrPWsubWF0Y2goZyksZixiO2lmKGI9Cishayl7Yj1uO2Zvcih2YXIgbz12b2lkIDAsYz1iLmZpcnN0Q2hpbGQ7YztjPWMubmV4dFNpYmxpbmcpdmFyIGk9Yy5ub2RlVHlwZSxvPWk9PT0xP28/YjpjOmk9PT0zP04udGVzdChjLm5vZGVWYWx1ZSk/YjpvOm87Yj0oZj1vPT09Yj92b2lkIDA6bykmJiJDT0RFIj09PWYudGFnTmFtZX1iJiYoaz1mLmNsYXNzTmFtZS5tYXRjaChnKSk7ayYmKGs9a1sxXSk7Yj0hMTtmb3Iobz1uLnBhcmVudE5vZGU7bztvPW8ucGFyZW50Tm9kZSlpZigoby50YWdOYW1lPT09InByZSJ8fG8udGFnTmFtZT09PSJjb2RlInx8by50YWdOYW1lPT09InhtcCIpJiZvLmNsYXNzTmFtZSYmby5jbGFzc05hbWUuaW5kZXhPZigicHJldHR5cHJpbnQiKT49MCl7Yj0hMDticmVha31ifHwoKGI9KGI9bi5jbGFzc05hbWUubWF0Y2goL1xibGluZW51bXNcYig/OjooXGQrKSk/LykpP2JbMV0mJmJbMV0ubGVuZ3RoPytiWzFdOiEwOiExKSYmRChuLGIpLGQ9e2c6ayxoOm4saTpifSxFKGQpKX19cDxoLmxlbmd0aD9zZXRUaW1lb3V0KG0sCisyNTApOmEmJmEoKX1mb3IodmFyIGU9W2RvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJwcmUiKSxkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgiY29kZSIpLGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJ4bXAiKV0saD1bXSxrPTA7azxlLmxlbmd0aDsrK2spZm9yKHZhciB0PTAscz1lW2tdLmxlbmd0aDt0PHM7Kyt0KWgucHVzaChlW2tdW3RdKTt2YXIgZT1xLGw9RGF0ZTtsLm5vd3x8KGw9e25vdzpmdW5jdGlvbigpe3JldHVybituZXcgRGF0ZX19KTt2YXIgcD0wLGQsZz0vXGJsYW5nKD86dWFnZSk/LShbXHcuXSspKD8hXFMpLzttKCl9O3dpbmRvdy5QUj17Y3JlYXRlU2ltcGxlTGV4ZXI6eCxyZWdpc3RlckxhbmdIYW5kbGVyOmssc291cmNlRGVjb3JhdG9yOnUsUFJfQVRUUklCX05BTUU6ImF0biIsUFJfQVRUUklCX1ZBTFVFOiJhdHYiLFBSX0NPTU1FTlQ6ImNvbSIsUFJfREVDTEFSQVRJT046ImRlYyIsUFJfS0VZV09SRDoia3dkIixQUl9MSVRFUkFMOiJsaXQiLAorUFJfTk9DT0RFOiJub2NvZGUiLFBSX1BMQUlOOiJwbG4iLFBSX1BVTkNUVUFUSU9OOiJwdW4iLFBSX1NPVVJDRToic3JjIixQUl9TVFJJTkc6InN0ciIsUFJfVEFHOiJ0YWciLFBSX1RZUEU6InR5cCJ9fSkoKTsKZGlmZiAtLWdpdCBhL3BhZ2VzL3RyYW5zY3JpcHRzLzIwMTNfRWNsaXBzZUNvbkZyYW5jZS9qcy9yZXF1aXJlLTEuMC44Lm1pbi5qcyBiL3BhZ2VzL3RyYW5zY3JpcHRzLzIwMTNfRWNsaXBzZUNvbkZyYW5jZS9qcy9yZXF1aXJlLTEuMC44Lm1pbi5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNjJjZDlhCi0tLSAvZGV2L251bGwKKysrIGIvcGFnZXMvdHJhbnNjcmlwdHMvMjAxM19FY2xpcHNlQ29uRnJhbmNlL2pzL3JlcXVpcmUtMS4wLjgubWluLmpzCkBAIC0wLDAgKzEsMzMgQEAKKy8qCisgUmVxdWlyZUpTIDEuMC44IENvcHlyaWdodCAoYykgMjAxMC0yMDEyLCBUaGUgRG9qbyBGb3VuZGF0aW9uIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgQXZhaWxhYmxlIHZpYSB0aGUgTUlUIG9yIG5ldyBCU0QgbGljZW5zZS4KKyBzZWU6IGh0dHA6Ly9naXRodWIuY29tL2pyYnVya2UvcmVxdWlyZWpzIGZvciBkZXRhaWxzCisqLwordmFyIHJlcXVpcmVqcyxyZXF1aXJlLGRlZmluZTsKKyhmdW5jdGlvbihyKXtmdW5jdGlvbiBLKGEpe3JldHVybiBPLmNhbGwoYSk9PT0iW29iamVjdCBGdW5jdGlvbl0ifWZ1bmN0aW9uIEcoYSl7cmV0dXJuIE8uY2FsbChhKT09PSJbb2JqZWN0IEFycmF5XSJ9ZnVuY3Rpb24gJChhLGMsbCl7Zm9yKHZhciBqIGluIGMpaWYoIShqIGluIEwpJiYoIShqIGluIGEpfHxsKSlhW2pdPWNbal07cmV0dXJuIGR9ZnVuY3Rpb24gUChhLGMsZCl7YT1FcnJvcihjKyJcbmh0dHA6Ly9yZXF1aXJlanMub3JnL2RvY3MvZXJyb3JzLmh0bWwjIithKTtpZihkKWEub3JpZ2luYWxFcnJvcj1kO3JldHVybiBhfWZ1bmN0aW9uIGFhKGEsYyxkKXt2YXIgaixrLHQ7Zm9yKGo9MDt0PWNbal07aisrKXt0PXR5cGVvZiB0PT09InN0cmluZyI/e25hbWU6dH06dDtrPXQubG9jYXRpb247aWYoZCYmKCFrfHxrLmluZGV4T2YoIi8iKSE9PTAmJmsuaW5kZXhPZigiOiIpPT09LTEpKWs9ZCsiLyIrKGt8fHQubmFtZSk7YVt0Lm5hbWVdPXtuYW1lOnQubmFtZSxsb2NhdGlvbjprfHwKK3QubmFtZSxtYWluOih0Lm1haW58fCJtYWluIikucmVwbGFjZShmYSwiIikucmVwbGFjZShiYSwiIil9fX1mdW5jdGlvbiBWKGEsYyl7YS5ob2xkUmVhZHk/YS5ob2xkUmVhZHkoYyk6Yz9hLnJlYWR5V2FpdCs9MTphLnJlYWR5KCEwKX1mdW5jdGlvbiBnYShhKXtmdW5jdGlvbiBjKGIsZil7dmFyIGcsbTtpZihiJiZiLmNoYXJBdCgwKT09PSIuIilpZihmKXtxLnBrZ3NbZl0/Zj1bZl06KGY9Zi5zcGxpdCgiLyIpLGY9Zi5zbGljZSgwLGYubGVuZ3RoLTEpKTtnPWI9Zi5jb25jYXQoYi5zcGxpdCgiLyIpKTt2YXIgYTtmb3IobT0wO2E9Z1ttXTttKyspaWYoYT09PSIuIilnLnNwbGljZShtLDEpLG0tPTE7ZWxzZSBpZihhPT09Ii4uIilpZihtPT09MSYmKGdbMl09PT0iLi4ifHxnWzBdPT09Ii4uIikpYnJlYWs7ZWxzZSBtPjAmJihnLnNwbGljZShtLTEsMiksbS09Mik7bT1xLnBrZ3NbZz1iWzBdXTtiPWIuam9pbigiLyIpO20mJmI9PT1nKyIvIittLm1haW4mJihiPWcpfWVsc2UgYi5pbmRleE9mKCIuLyIpPT09CiswJiYoYj1iLnN1YnN0cmluZygyKSk7cmV0dXJuIGJ9ZnVuY3Rpb24gbChiLGYpe3ZhciBnPWI/Yi5pbmRleE9mKCIhIik6LTEsbT1udWxsLGE9Zj9mLm5hbWU6bnVsbCxoPWIsZSxkO2chPT0tMSYmKG09Yi5zdWJzdHJpbmcoMCxnKSxiPWIuc3Vic3RyaW5nKGcrMSxiLmxlbmd0aCkpO20mJihtPWMobSxhKSk7YiYmKG0/ZT0oZz1uW21dKSYmZy5ub3JtYWxpemU/Zy5ub3JtYWxpemUoYixmdW5jdGlvbihiKXtyZXR1cm4gYyhiLGEpfSk6YyhiLGEpOihlPWMoYixhKSxkPUdbZV0sZHx8KGQ9aS5uYW1lVG9VcmwoYixudWxsLGYpLEdbZV09ZCkpKTtyZXR1cm57cHJlZml4Om0sbmFtZTplLHBhcmVudE1hcDpmLHVybDpkLG9yaWdpbmFsTmFtZTpoLGZ1bGxOYW1lOm0/bSsiISIrKGV8fCIiKTplfX1mdW5jdGlvbiBqKCl7dmFyIGI9ITAsZj1xLnByaW9yaXR5V2FpdCxnLGE7aWYoZil7Zm9yKGE9MDtnPWZbYV07YSsrKWlmKCFzW2ddKXtiPSExO2JyZWFrfWImJmRlbGV0ZSBxLnByaW9yaXR5V2FpdH1yZXR1cm4gYn0KK2Z1bmN0aW9uIGsoYixmLGcpe3JldHVybiBmdW5jdGlvbigpe3ZhciBhPWhhLmNhbGwoYXJndW1lbnRzLDApLGM7aWYoZyYmSyhjPWFbYS5sZW5ndGgtMV0pKWMuX19yZXF1aXJlSnNCdWlsZD0hMDthLnB1c2goZik7cmV0dXJuIGIuYXBwbHkobnVsbCxhKX19ZnVuY3Rpb24gdChiLGYsZyl7Zj1rKGd8fGkucmVxdWlyZSxiLGYpOyQoZix7bmFtZVRvVXJsOmsoaS5uYW1lVG9VcmwsYiksdG9Vcmw6ayhpLnRvVXJsLGIpLGRlZmluZWQ6ayhpLnJlcXVpcmVEZWZpbmVkLGIpLHNwZWNpZmllZDprKGkucmVxdWlyZVNwZWNpZmllZCxiKSxpc0Jyb3dzZXI6ZC5pc0Jyb3dzZXJ9KTtyZXR1cm4gZn1mdW5jdGlvbiBwKGIpe3ZhciBmLGcsYSxjPWIuY2FsbGJhY2ssaD1iLm1hcCxlPWguZnVsbE5hbWUsY2E9Yi5kZXBzO2E9Yi5saXN0ZW5lcnM7dmFyIGo9cS5yZXF1aXJlRXhlY0NifHxkLmV4ZWNDYjtpZihjJiZLKGMpKXtpZihxLmNhdGNoRXJyb3IuZGVmaW5lKXRyeXtnPWooZSxiLmNhbGxiYWNrLAorY2EsbltlXSl9Y2F0Y2goayl7Zj1rfWVsc2UgZz1qKGUsYi5jYWxsYmFjayxjYSxuW2VdKTtpZihlKShjPWIuY2pzTW9kdWxlKSYmYy5leHBvcnRzIT09ciYmYy5leHBvcnRzIT09bltlXT9nPW5bZV09Yi5janNNb2R1bGUuZXhwb3J0czpnPT09ciYmYi51c2luZ0V4cG9ydHM/Zz1uW2VdOihuW2VdPWcsSFtlXSYmKFRbZV09ITApKX1lbHNlIGUmJihnPW5bZV09YyxIW2VdJiYoVFtlXT0hMCkpO2lmKHhbYi5pZF0pZGVsZXRlIHhbYi5pZF0sYi5pc0RvbmU9ITAsaS53YWl0Q291bnQtPTEsaS53YWl0Q291bnQ9PT0wJiYoSj1bXSk7ZGVsZXRlIE1bZV07aWYoZC5vblJlc291cmNlTG9hZCYmIWIucGxhY2Vob2xkZXIpZC5vblJlc291cmNlTG9hZChpLGgsYi5kZXBBcnJheSk7aWYoZilyZXR1cm4gZz0oZT9sKGUpLnVybDoiIil8fGYuZmlsZU5hbWV8fGYuc291cmNlVVJMLGE9Zi5tb2R1bGVUcmVlLGY9UCgiZGVmaW5lZXJyb3IiLCdFcnJvciBldmFsdWF0aW5nIG1vZHVsZSAiJytlKyciIGF0IGxvY2F0aW9uICInKworZysnIjpcbicrZisiXG5maWxlTmFtZToiK2crIlxubGluZU51bWJlcjogIisoZi5saW5lTnVtYmVyfHxmLmxpbmUpLGYpLGYubW9kdWxlTmFtZT1lLGYubW9kdWxlVHJlZT1hLGQub25FcnJvcihmKTtmb3IoZj0wO2M9YVtmXTtmKyspYyhnKTtyZXR1cm4gcn1mdW5jdGlvbiB1KGIsZil7cmV0dXJuIGZ1bmN0aW9uKGcpe2IuZGVwRG9uZVtmXXx8KGIuZGVwRG9uZVtmXT0hMCxiLmRlcHNbZl09ZyxiLmRlcENvdW50LT0xLGIuZGVwQ291bnR8fHAoYikpfX1mdW5jdGlvbiBvKGIsZil7dmFyIGc9Zi5tYXAsYT1nLmZ1bGxOYW1lLGM9Zy5uYW1lLGg9TltiXXx8KE5bYl09bltiXSksZTtpZighZi5sb2FkaW5nKWYubG9hZGluZz0hMCxlPWZ1bmN0aW9uKGIpe2YuY2FsbGJhY2s9ZnVuY3Rpb24oKXtyZXR1cm4gYn07cChmKTtzW2YuaWRdPSEwO0EoKX0sZS5mcm9tVGV4dD1mdW5jdGlvbihiLGYpe3ZhciBnPVE7c1tiXT0hMTtpLnNjcmlwdENvdW50Kz0xO2kuZmFrZVtiXT0hMDtnJiYoUT0hMSk7CitkLmV4ZWMoZik7ZyYmKFE9ITApO2kuY29tcGxldGVMb2FkKGIpfSxhIGluIG4/ZShuW2FdKTpoLmxvYWQoYyx0KGcucGFyZW50TWFwLCEwLGZ1bmN0aW9uKGIsYSl7dmFyIGM9W10sZSxtO2ZvcihlPTA7bT1iW2VdO2UrKyltPWwobSxnLnBhcmVudE1hcCksYltlXT1tLmZ1bGxOYW1lLG0ucHJlZml4fHxjLnB1c2goYltlXSk7Zi5tb2R1bGVEZXBzPShmLm1vZHVsZURlcHN8fFtdKS5jb25jYXQoYyk7cmV0dXJuIGkucmVxdWlyZShiLGEpfSksZSxxKX1mdW5jdGlvbiB5KGIpe3hbYi5pZF18fCh4W2IuaWRdPWIsSi5wdXNoKGIpLGkud2FpdENvdW50Kz0xKX1mdW5jdGlvbiBEKGIpe3RoaXMubGlzdGVuZXJzLnB1c2goYil9ZnVuY3Rpb24gdihiLGYpe3ZhciBnPWIuZnVsbE5hbWUsYT1iLnByZWZpeCxjPWE/TlthXXx8KE5bYV09blthXSk6bnVsbCxoLGU7ZyYmKGg9TVtnXSk7aWYoIWgmJihlPSEwLGg9e2lkOihhJiYhYz9PKysgKyJfX3BAOiI6IiIpKyhnfHwiX19yQCIrTysrKSxtYXA6YiwKK2RlcENvdW50OjAsZGVwRG9uZTpbXSxkZXBDYWxsYmFja3M6W10sZGVwczpbXSxsaXN0ZW5lcnM6W10sYWRkOkR9LEJbaC5pZF09ITAsZyYmKCFhfHxOW2FdKSkpTVtnXT1oO2EmJiFjPyhnPWwoYSksYSBpbiBuJiYhblthXSYmKGRlbGV0ZSBuW2FdLGRlbGV0ZSBSW2cudXJsXSksYT12KGcsITApLGEuYWRkKGZ1bmN0aW9uKCl7dmFyIGY9bChiLm9yaWdpbmFsTmFtZSxiLnBhcmVudE1hcCksZj12KGYsITApO2gucGxhY2Vob2xkZXI9ITA7Zi5hZGQoZnVuY3Rpb24oYil7aC5jYWxsYmFjaz1mdW5jdGlvbigpe3JldHVybiBifTtwKGgpfSl9KSk6ZSYmZiYmKHNbaC5pZF09ITEsaS5wYXVzZWQucHVzaChoKSx5KGgpKTtyZXR1cm4gaH1mdW5jdGlvbiBDKGIsZixhLGMpe3ZhciBiPWwoYixjKSxkPWIubmFtZSxoPWIuZnVsbE5hbWUsZT12KGIpLGo9ZS5pZCxrPWUuZGVwcyxvO2lmKGgpe2lmKGggaW4gbnx8c1tqXT09PSEwfHxoPT09ImpxdWVyeSImJnEualF1ZXJ5JiZxLmpRdWVyeSE9PQorYSgpLmZuLmpxdWVyeSlyZXR1cm47QltqXT0hMDtzW2pdPSEwO2g9PT0ianF1ZXJ5IiYmYSYmVyhhKCkpfWUuZGVwQXJyYXk9ZjtlLmNhbGxiYWNrPWE7Zm9yKGE9MDthPGYubGVuZ3RoO2ErKylpZihqPWZbYV0paj1sKGosZD9iOmMpLG89ai5mdWxsTmFtZSxmW2FdPW8sbz09PSJyZXF1aXJlIj9rW2FdPXQoYik6bz09PSJleHBvcnRzIj8oa1thXT1uW2hdPXt9LGUudXNpbmdFeHBvcnRzPSEwKTpvPT09Im1vZHVsZSI/ZS5janNNb2R1bGU9a1thXT17aWQ6ZCx1cmk6ZD9pLm5hbWVUb1VybChkLG51bGwsYyk6cixleHBvcnRzOm5baF19Om8gaW4gbiYmIShvIGluIHgpJiYoIShoIGluIEgpfHxoIGluIEgmJlRbb10pP2tbYV09bltvXTooaCBpbiBIJiYoSFtvXT0hMCxkZWxldGUgbltvXSxSW2oudXJsXT0hMSksZS5kZXBDb3VudCs9MSxlLmRlcENhbGxiYWNrc1thXT11KGUsYSksdihqLCEwKS5hZGQoZS5kZXBDYWxsYmFja3NbYV0pKTtlLmRlcENvdW50P3koZSk6cChlKX1mdW5jdGlvbiB3KGIpe0MuYXBwbHkobnVsbCwKK2IpfWZ1bmN0aW9uIEYoYixmKXt2YXIgYT1iLm1hcC5mdWxsTmFtZSxjPWIuZGVwQXJyYXksZD0hMCxoLGUsaSxsO2lmKGIuaXNEb25lfHwhYXx8IXNbYV0pcmV0dXJuIGw7aWYoZlthXSlyZXR1cm4gYjtmW2FdPSEwO2lmKGMpe2ZvcihoPTA7aDxjLmxlbmd0aDtoKyspe2U9Y1toXTtpZighc1tlXSYmIWlhW2VdKXtkPSExO2JyZWFrfWlmKChpPXhbZV0pJiYhaS5pc0RvbmUmJnNbZV0paWYobD1GKGksZikpYnJlYWt9ZHx8KGw9cixkZWxldGUgZlthXSl9cmV0dXJuIGx9ZnVuY3Rpb24geihiLGEpe3ZhciBnPWIubWFwLmZ1bGxOYW1lLGM9Yi5kZXBBcnJheSxkLGgsZSxpO2lmKGIuaXNEb25lfHwhZ3x8IXNbZ10pcmV0dXJuIHI7aWYoZyl7aWYoYVtnXSlyZXR1cm4gbltnXTthW2ddPSEwfWlmKGMpZm9yKGQ9MDtkPGMubGVuZ3RoO2QrKylpZihoPWNbZF0paWYoKGU9bChoKS5wcmVmaXgpJiYoaT14W2VdKSYmeihpLGEpLChlPXhbaF0pJiYhZS5pc0RvbmUmJnNbaF0paD16KGUsYSksYi5kZXBDYWxsYmFja3NbZF0oaCk7CityZXR1cm4gbltnXX1mdW5jdGlvbiBFKCl7dmFyIGI9cS53YWl0U2Vjb25kcyoxRTMsYj1iJiZpLnN0YXJ0VGltZStiPChuZXcgRGF0ZSkuZ2V0VGltZSgpLGE9IiIsYz0hMSxsPSExLGs9W10saCxlO2lmKGkucGF1c2VkQ291bnQ+MClyZXR1cm4gcjtpZihxLnByaW9yaXR5V2FpdClpZihqKCkpQSgpO2Vsc2UgcmV0dXJuIHI7Zm9yKGggaW4gcylpZighKGggaW4gTCkmJihjPSEwLCFzW2hdKSlpZihiKWErPWgrIiAiO2Vsc2UgaWYobD0hMCxoLmluZGV4T2YoIiEiKT09PS0xKXtrPVtdO2JyZWFrfWVsc2UoZT1NW2hdJiZNW2hdLm1vZHVsZURlcHMpJiZrLnB1c2guYXBwbHkoayxlKTtpZighYyYmIWkud2FpdENvdW50KXJldHVybiByO2lmKGImJmEpcmV0dXJuIGI9UCgidGltZW91dCIsIkxvYWQgdGltZW91dCBmb3IgbW9kdWxlczogIithKSxiLnJlcXVpcmVUeXBlPSJ0aW1lb3V0IixiLnJlcXVpcmVNb2R1bGVzPWEsYi5jb250ZXh0TmFtZT1pLmNvbnRleHROYW1lLGQub25FcnJvcihiKTsKK2lmKGwmJmsubGVuZ3RoKWZvcihhPTA7aD14W2tbYV1dO2ErKylpZihoPUYoaCx7fSkpe3ooaCx7fSk7YnJlYWt9aWYoIWImJihsfHxpLnNjcmlwdENvdW50KSl7aWYoKEl8fGRhKSYmIVgpWD1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7WD0wO0UoKX0sNTApO3JldHVybiByfWlmKGkud2FpdENvdW50KXtmb3IoYT0wO2g9SlthXTthKyspeihoLHt9KTtpLnBhdXNlZC5sZW5ndGgmJkEoKTtZPDUmJihZKz0xLEUoKSl9WT0wO2QuY2hlY2tSZWFkeVN0YXRlKCk7cmV0dXJuIHJ9dmFyIGksQSxxPXt3YWl0U2Vjb25kczo3LGJhc2VVcmw6Ii4vIixwYXRoczp7fSxwa2dzOnt9LGNhdGNoRXJyb3I6e319LFM9W10sQj17cmVxdWlyZTohMCxleHBvcnRzOiEwLG1vZHVsZTohMH0sRz17fSxuPXt9LHM9e30seD17fSxKPVtdLFI9e30sTz0wLE09e30sTj17fSxIPXt9LFQ9e30sWj0wO1c9ZnVuY3Rpb24oYil7aWYoIWkualF1ZXJ5JiYoYj1ifHwodHlwZW9mIGpRdWVyeSE9PSJ1bmRlZmluZWQiP2pRdWVyeToKK251bGwpKSYmIShxLmpRdWVyeSYmYi5mbi5qcXVlcnkhPT1xLmpRdWVyeSkmJigiaG9sZFJlYWR5ImluIGJ8fCJyZWFkeVdhaXQiaW4gYikpaWYoaS5qUXVlcnk9Yix3KFsianF1ZXJ5IixbXSxmdW5jdGlvbigpe3JldHVybiBqUXVlcnl9XSksaS5zY3JpcHRDb3VudClWKGIsITApLGkualF1ZXJ5SW5jcmVtZW50ZWQ9ITB9O0E9ZnVuY3Rpb24oKXt2YXIgYixhLGMsbCxrLGg7aS50YWtlR2xvYmFsUXVldWUoKTtaKz0xO2lmKGkuc2NyaXB0Q291bnQ8PTApaS5zY3JpcHRDb3VudD0wO2Zvcig7Uy5sZW5ndGg7KWlmKGI9Uy5zaGlmdCgpLGJbMF09PT1udWxsKXJldHVybiBkLm9uRXJyb3IoUCgibWlzbWF0Y2giLCJNaXNtYXRjaGVkIGFub255bW91cyBkZWZpbmUoKSBtb2R1bGU6ICIrYltiLmxlbmd0aC0xXSkpO2Vsc2UgdyhiKTtpZighcS5wcmlvcml0eVdhaXR8fGooKSlmb3IoO2kucGF1c2VkLmxlbmd0aDspe2s9aS5wYXVzZWQ7aS5wYXVzZWRDb3VudCs9ay5sZW5ndGg7aS5wYXVzZWQ9CitbXTtmb3IobD0wO2I9a1tsXTtsKyspYT1iLm1hcCxjPWEudXJsLGg9YS5mdWxsTmFtZSxhLnByZWZpeD9vKGEucHJlZml4LGIpOiFSW2NdJiYhc1toXSYmKChxLnJlcXVpcmVMb2FkfHxkLmxvYWQpKGksaCxjKSxjLmluZGV4T2YoImVtcHR5OiIpIT09MCYmKFJbY109ITApKTtpLnN0YXJ0VGltZT0obmV3IERhdGUpLmdldFRpbWUoKTtpLnBhdXNlZENvdW50LT1rLmxlbmd0aH1aPT09MSYmRSgpO1otPTE7cmV0dXJuIHJ9O2k9e2NvbnRleHROYW1lOmEsY29uZmlnOnEsZGVmUXVldWU6Uyx3YWl0aW5nOngsd2FpdENvdW50OjAsc3BlY2lmaWVkOkIsbG9hZGVkOnMsdXJsTWFwOkcsdXJsRmV0Y2hlZDpSLHNjcmlwdENvdW50OjAsZGVmaW5lZDpuLHBhdXNlZDpbXSxwYXVzZWRDb3VudDowLHBsdWdpbnM6TixuZWVkRnVsbEV4ZWM6SCxmYWtlOnt9LGZ1bGxFeGVjOlQsbWFuYWdlckNhbGxiYWNrczpNLG1ha2VNb2R1bGVNYXA6bCxub3JtYWxpemU6Yyxjb25maWd1cmU6ZnVuY3Rpb24oYil7dmFyIGEsCitjLGQ7Yi5iYXNlVXJsJiZiLmJhc2VVcmwuY2hhckF0KGIuYmFzZVVybC5sZW5ndGgtMSkhPT0iLyImJihiLmJhc2VVcmwrPSIvIik7YT1xLnBhdGhzO2Q9cS5wa2dzOyQocSxiLCEwKTtpZihiLnBhdGhzKXtmb3IoYyBpbiBiLnBhdGhzKWMgaW4gTHx8KGFbY109Yi5wYXRoc1tjXSk7cS5wYXRocz1hfWlmKChhPWIucGFja2FnZVBhdGhzKXx8Yi5wYWNrYWdlcyl7aWYoYSlmb3IoYyBpbiBhKWMgaW4gTHx8YWEoZCxhW2NdLGMpO2IucGFja2FnZXMmJmFhKGQsYi5wYWNrYWdlcyk7cS5wa2dzPWR9aWYoYi5wcmlvcml0eSljPWkucmVxdWlyZVdhaXQsaS5yZXF1aXJlV2FpdD0hMSxBKCksaS5yZXF1aXJlKGIucHJpb3JpdHkpLEEoKSxpLnJlcXVpcmVXYWl0PWMscS5wcmlvcml0eVdhaXQ9Yi5wcmlvcml0eTtpZihiLmRlcHN8fGIuY2FsbGJhY2spaS5yZXF1aXJlKGIuZGVwc3x8W10sYi5jYWxsYmFjayl9LHJlcXVpcmVEZWZpbmVkOmZ1bmN0aW9uKGIsYSl7cmV0dXJuIGwoYixhKS5mdWxsTmFtZSBpbgorbn0scmVxdWlyZVNwZWNpZmllZDpmdW5jdGlvbihiLGEpe3JldHVybiBsKGIsYSkuZnVsbE5hbWUgaW4gQn0scmVxdWlyZTpmdW5jdGlvbihiLGMsZyl7aWYodHlwZW9mIGI9PT0ic3RyaW5nIil7aWYoSyhjKSlyZXR1cm4gZC5vbkVycm9yKFAoInJlcXVpcmVhcmdzIiwiSW52YWxpZCByZXF1aXJlIGNhbGwiKSk7aWYoZC5nZXQpcmV0dXJuIGQuZ2V0KGksYixjKTtjPWwoYixjKTtiPWMuZnVsbE5hbWU7cmV0dXJuIShiIGluIG4pP2Qub25FcnJvcihQKCJub3Rsb2FkZWQiLCJNb2R1bGUgbmFtZSAnIitjLmZ1bGxOYW1lKyInIGhhcyBub3QgYmVlbiBsb2FkZWQgeWV0IGZvciBjb250ZXh0OiAiK2EpKTpuW2JdfShiJiZiLmxlbmd0aHx8YykmJkMobnVsbCxiLGMsZyk7aWYoIWkucmVxdWlyZVdhaXQpZm9yKDshaS5zY3JpcHRDb3VudCYmaS5wYXVzZWQubGVuZ3RoOylBKCk7cmV0dXJuIGkucmVxdWlyZX0sdGFrZUdsb2JhbFF1ZXVlOmZ1bmN0aW9uKCl7VS5sZW5ndGgmJihqYS5hcHBseShpLmRlZlF1ZXVlLAorW2kuZGVmUXVldWUubGVuZ3RoLTEsMF0uY29uY2F0KFUpKSxVPVtdKX0sY29tcGxldGVMb2FkOmZ1bmN0aW9uKGIpe3ZhciBhO2ZvcihpLnRha2VHbG9iYWxRdWV1ZSgpO1MubGVuZ3RoOylpZihhPVMuc2hpZnQoKSxhWzBdPT09bnVsbCl7YVswXT1iO2JyZWFrfWVsc2UgaWYoYVswXT09PWIpYnJlYWs7ZWxzZSB3KGEpLGE9bnVsbDthP3coYSk6dyhbYixbXSxiPT09ImpxdWVyeSImJnR5cGVvZiBqUXVlcnkhPT0idW5kZWZpbmVkIj9mdW5jdGlvbigpe3JldHVybiBqUXVlcnl9Om51bGxdKTtkLmlzQXN5bmMmJihpLnNjcmlwdENvdW50LT0xKTtBKCk7ZC5pc0FzeW5jfHwoaS5zY3JpcHRDb3VudC09MSl9LHRvVXJsOmZ1bmN0aW9uKGIsYSl7dmFyIGM9Yi5sYXN0SW5kZXhPZigiLiIpLGQ9bnVsbDtjIT09LTEmJihkPWIuc3Vic3RyaW5nKGMsYi5sZW5ndGgpLGI9Yi5zdWJzdHJpbmcoMCxjKSk7cmV0dXJuIGkubmFtZVRvVXJsKGIsZCxhKX0sbmFtZVRvVXJsOmZ1bmN0aW9uKGIsYSxnKXt2YXIgbCwKK2ssaCxlLGo9aS5jb25maWcsYj1jKGIsZyYmZy5mdWxsTmFtZSk7aWYoZC5qc0V4dFJlZ0V4cC50ZXN0KGIpKWE9YisoYT9hOiIiKTtlbHNle2w9ai5wYXRocztrPWoucGtncztnPWIuc3BsaXQoIi8iKTtmb3IoZT1nLmxlbmd0aDtlPjA7ZS0tKWlmKGg9Zy5zbGljZSgwLGUpLmpvaW4oIi8iKSxsW2hdKXtnLnNwbGljZSgwLGUsbFtoXSk7YnJlYWt9ZWxzZSBpZihoPWtbaF0pe2I9Yj09PWgubmFtZT9oLmxvY2F0aW9uKyIvIitoLm1haW46aC5sb2NhdGlvbjtnLnNwbGljZSgwLGUsYik7YnJlYWt9YT1nLmpvaW4oIi8iKSsoYXx8Ii5qcyIpO2E9KGEuY2hhckF0KDApPT09Ii8ifHxhLm1hdGNoKC9eW1x3XCtcLlwtXSs6Lyk/IiI6ai5iYXNlVXJsKSthfXJldHVybiBqLnVybEFyZ3M/YSsoKGEuaW5kZXhPZigiPyIpPT09LTE/Ij8iOiImIikrai51cmxBcmdzKTphfX07aS5qUXVlcnlDaGVjaz1XO2kucmVzdW1lPUE7cmV0dXJuIGl9ZnVuY3Rpb24ga2EoKXt2YXIgYSxjLGQ7aWYoQyYmQy5yZWFkeVN0YXRlPT09CisiaW50ZXJhY3RpdmUiKXJldHVybiBDO2E9ZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInNjcmlwdCIpO2ZvcihjPWEubGVuZ3RoLTE7Yz4tMSYmKGQ9YVtjXSk7Yy0tKWlmKGQucmVhZHlTdGF0ZT09PSJpbnRlcmFjdGl2ZSIpcmV0dXJuIEM9ZDtyZXR1cm4gbnVsbH12YXIgbGE9LyhcL1wqKFtcc1xTXSo/KVwqXC98KFteOl18XilcL1wvKC4qKSQpL21nLG1hPS9yZXF1aXJlXChccypbIiddKFteJyJcc10rKVsiJ11ccypcKS9nLGZhPS9eXC5cLy8sYmE9L1wuanMkLyxPPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcsdT1BcnJheS5wcm90b3R5cGUsaGE9dS5zbGljZSxqYT11LnNwbGljZSxJPSEhKHR5cGVvZiB3aW5kb3chPT0idW5kZWZpbmVkIiYmbmF2aWdhdG9yJiZkb2N1bWVudCksZGE9IUkmJnR5cGVvZiBpbXBvcnRTY3JpcHRzIT09InVuZGVmaW5lZCIsbmE9SSYmbmF2aWdhdG9yLnBsYXRmb3JtPT09IlBMQVlTVEFUSU9OIDMiPy9eY29tcGxldGUkLzovXihjb21wbGV0ZXxsb2FkZWQpJC8sCitlYT10eXBlb2Ygb3BlcmEhPT0idW5kZWZpbmVkIiYmb3BlcmEudG9TdHJpbmcoKT09PSJbb2JqZWN0IE9wZXJhXSIsTD17fSxEPXt9LFU9W10sQz1udWxsLFk9MCxRPSExLGlhPXtyZXF1aXJlOiEwLG1vZHVsZTohMCxleHBvcnRzOiEwfSxkLHU9e30sSix5LHYsRSxvLHcsRixCLHosVyxYO2lmKHR5cGVvZiBkZWZpbmU9PT0idW5kZWZpbmVkIil7aWYodHlwZW9mIHJlcXVpcmVqcyE9PSJ1bmRlZmluZWQiKWlmKEsocmVxdWlyZWpzKSlyZXR1cm47ZWxzZSB1PXJlcXVpcmVqcyxyZXF1aXJlanM9cjt0eXBlb2YgcmVxdWlyZSE9PSJ1bmRlZmluZWQiJiYhSyhyZXF1aXJlKSYmKHU9cmVxdWlyZSxyZXF1aXJlPXIpO2Q9cmVxdWlyZWpzPWZ1bmN0aW9uKGEsYyxkKXt2YXIgaj0iXyIsazshRyhhKSYmdHlwZW9mIGEhPT0ic3RyaW5nIiYmKGs9YSxHKGMpPyhhPWMsYz1kKTphPVtdKTtpZihrJiZrLmNvbnRleHQpaj1rLmNvbnRleHQ7ZD1EW2pdfHwoRFtqXT1nYShqKSk7ayYmZC5jb25maWd1cmUoayk7CityZXR1cm4gZC5yZXF1aXJlKGEsYyl9O2QuY29uZmlnPWZ1bmN0aW9uKGEpe3JldHVybiBkKGEpfTtyZXF1aXJlfHwocmVxdWlyZT1kKTtkLnRvVXJsPWZ1bmN0aW9uKGEpe3JldHVybiBELl8udG9VcmwoYSl9O2QudmVyc2lvbj0iMS4wLjgiO2QuanNFeHRSZWdFeHA9L15cL3w6fFw/fFwuanMkLzt5PWQucz17Y29udGV4dHM6RCxza2lwQXN5bmM6e319O2lmKGQuaXNBc3luYz1kLmlzQnJvd3Nlcj1JKWlmKHY9eS5oZWFkPWRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJoZWFkIilbMF0sRT1kb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgiYmFzZSIpWzBdKXY9eS5oZWFkPUUucGFyZW50Tm9kZTtkLm9uRXJyb3I9ZnVuY3Rpb24oYSl7dGhyb3cgYTt9O2QubG9hZD1mdW5jdGlvbihhLGMsbCl7ZC5yZXNvdXJjZXNSZWFkeSghMSk7YS5zY3JpcHRDb3VudCs9MTtkLmF0dGFjaChsLGEsYyk7aWYoYS5qUXVlcnkmJiFhLmpRdWVyeUluY3JlbWVudGVkKVYoYS5qUXVlcnksITApLAorYS5qUXVlcnlJbmNyZW1lbnRlZD0hMH07ZGVmaW5lPWZ1bmN0aW9uKGEsYyxkKXt2YXIgaixrO3R5cGVvZiBhIT09InN0cmluZyImJihkPWMsYz1hLGE9bnVsbCk7RyhjKXx8KGQ9YyxjPVtdKTshYy5sZW5ndGgmJksoZCkmJmQubGVuZ3RoJiYoZC50b1N0cmluZygpLnJlcGxhY2UobGEsIiIpLnJlcGxhY2UobWEsZnVuY3Rpb24oYSxkKXtjLnB1c2goZCl9KSxjPShkLmxlbmd0aD09PTE/WyJyZXF1aXJlIl06WyJyZXF1aXJlIiwiZXhwb3J0cyIsIm1vZHVsZSJdKS5jb25jYXQoYykpO2lmKFEmJihqPUp8fGthKCkpKWF8fChhPWouZ2V0QXR0cmlidXRlKCJkYXRhLXJlcXVpcmVtb2R1bGUiKSksaz1EW2ouZ2V0QXR0cmlidXRlKCJkYXRhLXJlcXVpcmVjb250ZXh0IildOyhrP2suZGVmUXVldWU6VSkucHVzaChbYSxjLGRdKTtyZXR1cm4gcn07ZGVmaW5lLmFtZD17bXVsdGl2ZXJzaW9uOiEwLHBsdWdpbnM6ITAsalF1ZXJ5OiEwfTtkLmV4ZWM9ZnVuY3Rpb24oYSl7cmV0dXJuIGV2YWwoYSl9OworZC5leGVjQ2I9ZnVuY3Rpb24oYSxjLGQsail7cmV0dXJuIGMuYXBwbHkoaixkKX07ZC5hZGRTY3JpcHRUb0RvbT1mdW5jdGlvbihhKXtKPWE7RT92Lmluc2VydEJlZm9yZShhLEUpOnYuYXBwZW5kQ2hpbGQoYSk7Sj1udWxsfTtkLm9uU2NyaXB0TG9hZD1mdW5jdGlvbihhKXt2YXIgYz1hLmN1cnJlbnRUYXJnZXR8fGEuc3JjRWxlbWVudCxsO2lmKGEudHlwZT09PSJsb2FkInx8YyYmbmEudGVzdChjLnJlYWR5U3RhdGUpKUM9bnVsbCxhPWMuZ2V0QXR0cmlidXRlKCJkYXRhLXJlcXVpcmVjb250ZXh0IiksbD1jLmdldEF0dHJpYnV0ZSgiZGF0YS1yZXF1aXJlbW9kdWxlIiksRFthXS5jb21wbGV0ZUxvYWQobCksYy5kZXRhY2hFdmVudCYmIWVhP2MuZGV0YWNoRXZlbnQoIm9ucmVhZHlzdGF0ZWNoYW5nZSIsZC5vblNjcmlwdExvYWQpOmMucmVtb3ZlRXZlbnRMaXN0ZW5lcigibG9hZCIsZC5vblNjcmlwdExvYWQsITEpfTtkLmF0dGFjaD1mdW5jdGlvbihhLGMsbCxqLGssbyl7dmFyIHA7CitpZihJKXJldHVybiBqPWp8fGQub25TY3JpcHRMb2FkLHA9YyYmYy5jb25maWcmJmMuY29uZmlnLnhodG1sP2RvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIsImh0bWw6c2NyaXB0Iik6ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic2NyaXB0IikscC50eXBlPWt8fGMmJmMuY29uZmlnLnNjcmlwdFR5cGV8fCJ0ZXh0L2phdmFzY3JpcHQiLHAuY2hhcnNldD0idXRmLTgiLHAuYXN5bmM9IXkuc2tpcEFzeW5jW2FdLGMmJnAuc2V0QXR0cmlidXRlKCJkYXRhLXJlcXVpcmVjb250ZXh0IixjLmNvbnRleHROYW1lKSxwLnNldEF0dHJpYnV0ZSgiZGF0YS1yZXF1aXJlbW9kdWxlIixsKSxwLmF0dGFjaEV2ZW50JiYhKHAuYXR0YWNoRXZlbnQudG9TdHJpbmcmJnAuYXR0YWNoRXZlbnQudG9TdHJpbmcoKS5pbmRleE9mKCJbbmF0aXZlIGNvZGVdIik8MCkmJiFlYT8oUT0hMCxvP3Aub25yZWFkeXN0YXRlY2hhbmdlPWZ1bmN0aW9uKCl7aWYocC5yZWFkeVN0YXRlPT09CisibG9hZGVkIilwLm9ucmVhZHlzdGF0ZWNoYW5nZT1udWxsLHAuYXR0YWNoRXZlbnQoIm9ucmVhZHlzdGF0ZWNoYW5nZSIsaiksbyhwKX06cC5hdHRhY2hFdmVudCgib25yZWFkeXN0YXRlY2hhbmdlIixqKSk6cC5hZGRFdmVudExpc3RlbmVyKCJsb2FkIixqLCExKSxwLnNyYz1hLG98fGQuYWRkU2NyaXB0VG9Eb20ocCkscDtlbHNlIGRhJiYoaW1wb3J0U2NyaXB0cyhhKSxjLmNvbXBsZXRlTG9hZChsKSk7cmV0dXJuIG51bGx9O2lmKEkpe289ZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInNjcmlwdCIpO2ZvcihCPW8ubGVuZ3RoLTE7Qj4tMSYmKHc9b1tCXSk7Qi0tKXtpZighdil2PXcucGFyZW50Tm9kZTtpZihGPXcuZ2V0QXR0cmlidXRlKCJkYXRhLW1haW4iKSl7aWYoIXUuYmFzZVVybClvPUYuc3BsaXQoIi8iKSx3PW8ucG9wKCksbz1vLmxlbmd0aD9vLmpvaW4oIi8iKSsiLyI6Ii4vIix1LmJhc2VVcmw9byxGPXcucmVwbGFjZShiYSwiIik7dS5kZXBzPXUuZGVwcz91LmRlcHMuY29uY2F0KEYpOgorW0ZdO2JyZWFrfX19ZC5jaGVja1JlYWR5U3RhdGU9ZnVuY3Rpb24oKXt2YXIgYT15LmNvbnRleHRzLGM7Zm9yKGMgaW4gYSlpZighKGMgaW4gTCkmJmFbY10ud2FpdENvdW50KXJldHVybjtkLnJlc291cmNlc1JlYWR5KCEwKX07ZC5yZXNvdXJjZXNSZWFkeT1mdW5jdGlvbihhKXt2YXIgYyxsO2QucmVzb3VyY2VzRG9uZT1hO2lmKGQucmVzb3VyY2VzRG9uZSlmb3IobCBpbiBhPXkuY29udGV4dHMsYSlpZighKGwgaW4gTCkmJihjPWFbbF0sYy5qUXVlcnlJbmNyZW1lbnRlZCkpVihjLmpRdWVyeSwhMSksYy5qUXVlcnlJbmNyZW1lbnRlZD0hMX07ZC5wYWdlTG9hZGVkPWZ1bmN0aW9uKCl7aWYoZG9jdW1lbnQucmVhZHlTdGF0ZSE9PSJjb21wbGV0ZSIpZG9jdW1lbnQucmVhZHlTdGF0ZT0iY29tcGxldGUifTtpZihJJiZkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyJiYhZG9jdW1lbnQucmVhZHlTdGF0ZSlkb2N1bWVudC5yZWFkeVN0YXRlPSJsb2FkaW5nIix3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigibG9hZCIsCitkLnBhZ2VMb2FkZWQsITEpO2QodSk7aWYoZC5pc0FzeW5jJiZ0eXBlb2Ygc2V0VGltZW91dCE9PSJ1bmRlZmluZWQiKXo9eS5jb250ZXh0c1t1LmNvbnRleHR8fCJfIl0sei5yZXF1aXJlV2FpdD0hMCxzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7ei5yZXF1aXJlV2FpdD0hMTt6LnNjcmlwdENvdW50fHx6LnJlc3VtZSgpO2QuY2hlY2tSZWFkeVN0YXRlKCl9LDApfX0pKCk7CmRpZmYgLS1naXQgYS9wYWdlcy90cmFuc2NyaXB0cy8yMDEzX0VjbGlwc2VDb25GcmFuY2UvanMvc2xpZGUtY29udHJvbGxlci5qcyBiL3BhZ2VzL3RyYW5zY3JpcHRzLzIwMTNfRWNsaXBzZUNvbkZyYW5jZS9qcy9zbGlkZS1jb250cm9sbGVyLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU3MTMxN2IKLS0tIC9kZXYvbnVsbAorKysgYi9wYWdlcy90cmFuc2NyaXB0cy8yMDEzX0VjbGlwc2VDb25GcmFuY2UvanMvc2xpZGUtY29udHJvbGxlci5qcwpAQCAtMCwwICsxLDEwOSBAQAorKGZ1bmN0aW9uKHdpbmRvdykgeworCit2YXIgT1JJR0lOXyA9IGxvY2F0aW9uLnByb3RvY29sICsgJy8vJyArIGxvY2F0aW9uLmhvc3Q7CisKK2Z1bmN0aW9uIFNsaWRlQ29udHJvbGxlcigpIHsKKyAgdGhpcy5wb3B1cCA9IG51bGw7CisgIHRoaXMuaXNQb3B1cCA9IHdpbmRvdy5vcGVuZXI7CisKKyAgaWYgKHRoaXMuc2V0dXBEb25lKCkpIHsKKyAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignbWVzc2FnZScsIHRoaXMub25NZXNzYWdlXy5iaW5kKHRoaXMpLCBmYWxzZSk7CisKKyAgICAvLyBDbG9zZSBwb3B1cHMgaWYgd2UgcmVsb2FkIHRoZSBtYWluIHdpbmRvdy4KKyAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignYmVmb3JldW5sb2FkJywgZnVuY3Rpb24oZSkgeworICAgICAgaWYgKHRoaXMucG9wdXApIHsKKyAgICAgICAgdGhpcy5wb3B1cC5jbG9zZSgpOworICAgICAgfQorICAgIH0uYmluZCh0aGlzKSwgZmFsc2UpOworICB9Cit9CisKK1NsaWRlQ29udHJvbGxlci5QUkVTRU5URVJfTU9ERV9QQVJBTSA9ICdwcmVzZW50bWUnOworCitTbGlkZUNvbnRyb2xsZXIucHJvdG90eXBlLnNldHVwRG9uZSA9IGZ1bmN0aW9uKCkgeworICB2YXIgcGFyYW1zID0gbG9jYXRpb24uc2VhcmNoLnN1YnN0cmluZygxKS5zcGxpdCgnJicpLm1hcChmdW5jdGlvbihlbCkgeworICAgIHJldHVybiBlbC5zcGxpdCgnPScpOworICB9KTsKKworICB2YXIgcHJlc2VudE1lID0gbnVsbDsKKyAgZm9yICh2YXIgaSA9IDAsIHBhcmFtOyBwYXJhbSA9IHBhcmFtc1tpXTsgKytpKSB7CisgICAgaWYgKHBhcmFtWzBdLnRvTG93ZXJDYXNlKCkgPT0gU2xpZGVDb250cm9sbGVyLlBSRVNFTlRFUl9NT0RFX1BBUkFNKSB7CisgICAgICBwcmVzZW50TWUgPSBwYXJhbVsxXSA9PSAndHJ1ZSc7CisgICAgICBicmVhazsKKyAgICB9CisgIH0KKworICBpZiAocHJlc2VudE1lICE9PSBudWxsKSB7CisgICAgbG9jYWxTdG9yYWdlLkVOQUJMRV9QUkVTRU5UT1JfTU9ERSA9IHByZXNlbnRNZTsKKyAgICAvLyBUT0RPOiB1c2Ugd2luZG93Lmhpc3RvcnkucHVzaFN0YXRlIHRvIHVwZGF0ZSBVUkwgaW5zdGVhZCBvZiB0aGUgcmVkaXJlY3QuCisgICAgaWYgKHdpbmRvdy5oaXN0b3J5LnJlcGxhY2VTdGF0ZSkgeworICAgICAgd2luZG93Lmhpc3RvcnkucmVwbGFjZVN0YXRlKHt9LCAnJywgbG9jYXRpb24ucGF0aG5hbWUpOworICAgIH0gZWxzZSB7CisgICAgICBsb2NhdGlvbi5yZXBsYWNlKGxvY2F0aW9uLnBhdGhuYW1lKTsKKyAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgIH0KKworICB2YXIgZW5hYmxlUHJlc2VudGVyTW9kZSA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdFTkFCTEVfUFJFU0VOVE9SX01PREUnKTsKKyAgaWYgKGVuYWJsZVByZXNlbnRlck1vZGUgJiYgSlNPTi5wYXJzZShlbmFibGVQcmVzZW50ZXJNb2RlKSkgeworICAgIC8vIE9ubHkgb3BlbiBwb3B1cCBmcm9tIG1haW4gZGVjay4gRG9uJ3Qgd2FudCByZWN1cnNpdmUgcG9wdXAgb3BlbmluZyEKKyAgICBpZiAoIXRoaXMuaXNQb3B1cCkgeworICAgICAgdmFyIG9wdHMgPSAnbWVudWJhcj1ubyxsb2NhdGlvbj15ZXMscmVzaXphYmxlPXllcyxzY3JvbGxiYXJzPW5vLHN0YXR1cz1ubyc7CisgICAgICB0aGlzLnBvcHVwID0gd2luZG93Lm9wZW4obG9jYXRpb24uaHJlZiwgJ215d2luZG93Jywgb3B0cyk7CisKKyAgICAgIC8vIExvYWRpbmcgaW4gdGhlIHBvcHVwPyBUcmlnZ2VyIHRoZSBob3RrZXkgZm9yIHR1cm5pbmcgcHJlc2VudGVyIG1vZGUgb24uCisgICAgICB0aGlzLnBvcHVwLmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWQnLCBmdW5jdGlvbihlKSB7CisgICAgICAgIHZhciBldnQgPSB0aGlzLnBvcHVwLmRvY3VtZW50LmNyZWF0ZUV2ZW50KCdFdmVudCcpOworICAgICAgICBldnQuaW5pdEV2ZW50KCdrZXlkb3duJywgdHJ1ZSwgdHJ1ZSk7CisgICAgICAgIGV2dC5rZXlDb2RlID0gJ1AnLmNoYXJDb2RlQXQoMCk7CisgICAgICAgIHRoaXMucG9wdXAuZG9jdW1lbnQuZGlzcGF0Y2hFdmVudChldnQpOworICAgICAgICAvLyB0aGlzLnBvcHVwLmRvY3VtZW50LmJvZHkuY2xhc3NMaXN0LmFkZCgnd2l0aC1ub3RlcycpOworICAgICAgICAvLyBkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC5hZGQoJ3BvcHVwJyk7CisgICAgICB9LmJpbmQodGhpcyksIGZhbHNlKTsKKyAgICB9CisgIH0KKworICByZXR1cm4gdHJ1ZTsKK30KKworU2xpZGVDb250cm9sbGVyLnByb3RvdHlwZS5vbk1lc3NhZ2VfID0gZnVuY3Rpb24oZSkgeworICB2YXIgZGF0YSA9IGUuZGF0YTsKKworICAvLyBSZXN0cmljdCBtZXNzYWdlcyB0byBiZWluZyBmcm9tIHRoaXMgb3JpZ2luLiBBbGxvdyBsb2NhbCBkZXZlbG9wbWV0CisgIC8vIGZyb20gZmlsZTovLyB0aG91Z2guCisgIC8vIFRPRE86IEl0IHdvdWxkIGJlIGRvcGUgaWYgRkYgaW1wbGVtZW50ZWQgbG9jYXRpb24ub3JpZ2luIQorICBpZiAoZS5vcmlnaW4gIT0gT1JJR0lOXyAmJiBPUklHSU5fLmluZGV4T2YoJ2ZpbGU6Ly8nKSAhPSAwKSB7CisgICAgYWxlcnQoJ1NvbWVvbmUgdHJpZWQgdG8gcG9zdE1lc3NhZ2UgZnJvbSBhbiB1bmtub3duIG9yaWdpbicpOworICAgIHJldHVybjsKKyAgfQorCisgIC8vIGlmIChlLnNvdXJjZS5sb2NhdGlvbi5ob3N0bmFtZSAhPSAnbG9jYWxob3N0JykgeworICAvLyAgIGFsZXJ0KCdTb21lb25lIHRyaWVkIHRvIHBvc3RNZXNzYWdlIGZyb20gYW4gdW5rbm93biBvcmlnaW4nKTsKKyAgLy8gICByZXR1cm47CisgIC8vIH0KKworICBpZiAoJ2tleUNvZGUnIGluIGRhdGEpIHsKKyAgICB2YXIgZXZ0ID0gZG9jdW1lbnQuY3JlYXRlRXZlbnQoJ0V2ZW50Jyk7CisgICAgZXZ0LmluaXRFdmVudCgna2V5ZG93bicsIHRydWUsIHRydWUpOworICAgIGV2dC5rZXlDb2RlID0gZGF0YS5rZXlDb2RlOworICAgIGRvY3VtZW50LmRpc3BhdGNoRXZlbnQoZXZ0KTsKKyAgfQorfTsKKworU2xpZGVDb250cm9sbGVyLnByb3RvdHlwZS5zZW5kTXNnID0gZnVuY3Rpb24obXNnKSB7CisgIC8vIC8vIFNlbmQgbWVzc2FnZSB0byBwb3B1cCB3aW5kb3cuCisgIC8vIGlmICh0aGlzLnBvcHVwKSB7CisgIC8vICAgdGhpcy5wb3B1cC5wb3N0TWVzc2FnZShtc2csIE9SSUdJTl8pOworICAvLyB9CisKKyAgLy8gU2VuZCBtZXNzYWdlIHRvIG1haW4gd2luZG93LgorICBpZiAodGhpcy5pc1BvcHVwKSB7CisgICAgLy8gVE9ETzogSXQgd291bGQgYmUgZG9wZSBpZiBGRiBpbXBsZW1lbnRlZCBsb2NhdGlvbi5vcmlnaW4uCisgICAgd2luZG93Lm9wZW5lci5wb3N0TWVzc2FnZShtc2csICcqJyk7CisgIH0KK307CisKK3dpbmRvdy5TbGlkZUNvbnRyb2xsZXIgPSBTbGlkZUNvbnRyb2xsZXI7CisKK30pKHdpbmRvdyk7CisKZGlmZiAtLWdpdCBhL3BhZ2VzL3RyYW5zY3JpcHRzLzIwMTNfRWNsaXBzZUNvbkZyYW5jZS9qcy9zbGlkZS1kZWNrLmpzIGIvcGFnZXMvdHJhbnNjcmlwdHMvMjAxM19FY2xpcHNlQ29uRnJhbmNlL2pzL3NsaWRlLWRlY2suanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGY2NDkyOQotLS0gL2Rldi9udWxsCisrKyBiL3BhZ2VzL3RyYW5zY3JpcHRzLzIwMTNfRWNsaXBzZUNvbkZyYW5jZS9qcy9zbGlkZS1kZWNrLmpzCkBAIC0wLDAgKzEsNzY3IEBACisvKioKKyAqIEBhdXRob3JzIEx1a2UgTWFoZQorICogQGF1dGhvcnMgRXJpYyBCaWRlbG1hbgorICogQGZpbGVvdmVydmlldyBUT0RPCisgKi8KK2RvY3VtZW50LmNhbmNlbEZ1bGxTY3JlZW4gPSBkb2N1bWVudC53ZWJraXRDYW5jZWxGdWxsU2NyZWVuIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQubW96Q2FuY2VsRnVsbFNjcmVlbjsKKworLyoqCisgKiBAY29uc3RydWN0b3IKKyAqLworZnVuY3Rpb24gU2xpZGVEZWNrKGVsKSB7CisgIHRoaXMuY3VyU2xpZGVfID0gMDsKKyAgdGhpcy5wcmV2U2xpZGVfID0gMDsKKyAgdGhpcy5jb25maWdfID0gbnVsbDsKKyAgdGhpcy5jb250YWluZXIgPSBlbCB8fCBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdzbGlkZXMnKTsKKyAgdGhpcy5zbGlkZXMgPSBbXTsKKyAgdGhpcy5jb250cm9sbGVyID0gbnVsbDsKKworICB0aGlzLmdldEN1cnJlbnRTbGlkZUZyb21IYXNoXygpOworCisgIC8vIENhbGwgdGhpcyBleHBsaWNpdGx5LiBNb2Rlcm5penIubG9hZCB3b24ndCBiZSBkb25lIHVudGlsIGFmdGVyIERPTSBsb2FkLgorICB0aGlzLm9uRG9tTG9hZGVkXy5iaW5kKHRoaXMpKCk7Cit9CisKKy8qKgorICogQGNvbnN0CisgKiBAcHJpdmF0ZQorICovCitTbGlkZURlY2sucHJvdG90eXBlLlNMSURFX0NMQVNTRVNfID0gWworICAnZmFyLXBhc3QnLCAncGFzdCcsICdjdXJyZW50JywgJ25leHQnLCAnZmFyLW5leHQnXTsKKworLyoqCisgKiBAY29uc3QKKyAqIEBwcml2YXRlCisgKi8KK1NsaWRlRGVjay5wcm90b3R5cGUuQ1NTX0RJUl8gPSAndGhlbWUvY3NzLyc7CisKKy8qKgorICogQHByaXZhdGUKKyAqLworU2xpZGVEZWNrLnByb3RvdHlwZS5nZXRDdXJyZW50U2xpZGVGcm9tSGFzaF8gPSBmdW5jdGlvbigpIHsKKyAgdmFyIHNsaWRlTm8gPSBwYXJzZUludChkb2N1bWVudC5sb2NhdGlvbi5oYXNoLnN1YnN0cigxKSk7CisKKyAgaWYgKHNsaWRlTm8pIHsKKyAgICB0aGlzLmN1clNsaWRlXyA9IHNsaWRlTm8gLSAxOworICB9IGVsc2UgeworICAgIHRoaXMuY3VyU2xpZGVfID0gMDsKKyAgfQorfTsKKworLyoqCisgKiBAcGFyYW0ge251bWJlcn0gc2xpZGVObworICovCitTbGlkZURlY2sucHJvdG90eXBlLmxvYWRTbGlkZSA9IGZ1bmN0aW9uKHNsaWRlTm8pIHsKKyAgaWYgKHNsaWRlTm8pIHsKKyAgICB0aGlzLmN1clNsaWRlXyA9IHNsaWRlTm8gLSAxOworICAgIHRoaXMudXBkYXRlU2xpZGVzXygpOworICB9Cit9OworCisvKioKKyAqIEBwcml2YXRlCisgKi8KK1NsaWRlRGVjay5wcm90b3R5cGUub25Eb21Mb2FkZWRfID0gZnVuY3Rpb24oZSkgeworICBkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC5hZGQoJ2xvYWRlZCcpOyAvLyBBZGQgbG9hZGVkIGNsYXNzIGZvciB0ZW1wbGF0ZXMgdG8gdXNlLgorCisgIHRoaXMuc2xpZGVzID0gdGhpcy5jb250YWluZXIucXVlcnlTZWxlY3RvckFsbCgnc2xpZGU6bm90KFtoaWRkZW5dKTpub3QoLmJhY2tkcm9wKScpOworCisgIC8vIElmIHdlJ3JlIG9uIGEgc21hcnRwaG9uZSwgYXBwbHkgc3BlY2lhbCBzYXVjZS4KKyAgaWYgKE1vZGVybml6ci5tcSgnb25seSBzY3JlZW4gYW5kIChtYXgtZGV2aWNlLXdpZHRoOiA0ODBweCknKSkgeworICAgIC8vIHZhciBzdHlsZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2xpbmsnKTsKKyAgICAvLyBzdHlsZS5yZWwgPSAnc3R5bGVzaGVldCc7CisgICAgLy8gc3R5bGUudHlwZSA9ICd0ZXh0L2Nzcyc7CisgICAgLy8gc3R5bGUuaHJlZiA9IHRoaXMuQ1NTX0RJUl8gKyAncGhvbmUuY3NzJzsKKyAgICAvLyBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdoZWFkJykuYXBwZW5kQ2hpbGQoc3R5bGUpOworCisgICAgLy8gTm8gbmVlZCBmb3Igd2lkZXNjcmVlbiBsYXlvdXQgb24gYSBwaG9uZS4KKyAgICB0aGlzLmNvbnRhaW5lci5jbGFzc0xpc3QucmVtb3ZlKCdsYXlvdXQtd2lkZXNjcmVlbicpOworICB9CisKKyAgdGhpcy5sb2FkQ29uZmlnXyhTTElERV9DT05GSUcpOworICB0aGlzLmFkZEV2ZW50TGlzdGVuZXJzXygpOworICB0aGlzLnVwZGF0ZVNsaWRlc18oKTsKKworICAvLyBBZGQgc2xpZGUgbnVtYmVycyBhbmQgdG90YWwgc2xpZGUgY291bnQgbWV0YWRhdGEgdG8gZWFjaCBzbGlkZS4KKyAgdmFyIHRoYXQgPSB0aGlzOworICBmb3IgKHZhciBpID0gMCwgc2xpZGU7IHNsaWRlID0gdGhpcy5zbGlkZXNbaV07ICsraSkgeworICAgIHNsaWRlLmRhdGFzZXQuc2xpZGVOdW0gPSBpICsgMTsKKyAgICBzbGlkZS5kYXRhc2V0LnRvdGFsU2xpZGVzID0gdGhpcy5zbGlkZXMubGVuZ3RoOworCisgICAgc2xpZGUuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBmdW5jdGlvbihlKSB7CisgICAgICBpZiAoZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QuY29udGFpbnMoJ292ZXJ2aWV3JykpIHsKKyAgICAgICAgdGhhdC5sb2FkU2xpZGUodGhpcy5kYXRhc2V0LnNsaWRlTnVtKTsKKyAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpOworICAgICAgICB3aW5kb3cuc2V0VGltZW91dChmdW5jdGlvbigpIHsKKyAgICAgICAgICB0aGF0LnRvZ2dsZU92ZXJ2aWV3KCk7CisgICAgICAgIH0sIDUwMCk7CisgICAgICB9CisgICAgfSwgZmFsc2UpOworICB9CisKKyAgLy8gTm90ZTogdGhpcyBuZWVkcyB0byBjb21lIGFmdGVyIGFkZEV2ZW50TGlzdGVuZXJzXygpLCB3aGljaCBhZGRzIGEKKyAgLy8gJ2tleWRvd24nIGxpc3RlbmVyIHRoYXQgdGhpcyBjb250cm9sbGVyIHJlbGllcyBvbi4KKyAgLy8gQWxzbywgbm8gbmVlZCB0byBzZXQgdGhpcyB1cCBpZiB3ZSdyZSBvbiBtb2JpbGUuCisgIGlmICghTW9kZXJuaXpyLnRvdWNoKSB7CisgICAgdGhpcy5jb250cm9sbGVyID0gbmV3IFNsaWRlQ29udHJvbGxlcih0aGlzKTsKKyAgICBpZiAodGhpcy5jb250cm9sbGVyLmlzUG9wdXApIHsKKyAgICAgIGRvY3VtZW50LmJvZHkuY2xhc3NMaXN0LmFkZCgncG9wdXAnKTsKKyAgICB9CisgIH0KK307CisKKy8qKgorICogQHByaXZhdGUKKyAqLworU2xpZGVEZWNrLnByb3RvdHlwZS5hZGRFdmVudExpc3RlbmVyc18gPSBmdW5jdGlvbigpIHsKKyAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIHRoaXMub25Cb2R5S2V5RG93bl8uYmluZCh0aGlzKSwgZmFsc2UpOworICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigncG9wc3RhdGUnLCB0aGlzLm9uUG9wU3RhdGVfLmJpbmQodGhpcyksIGZhbHNlKTsKKworICAvLyB2YXIgdHJhbnNFbmRFdmVudE5hbWVzID0geworICAvLyAgICdXZWJraXRUcmFuc2l0aW9uJzogJ3dlYmtpdFRyYW5zaXRpb25FbmQnLAorICAvLyAgICdNb3pUcmFuc2l0aW9uJzogJ3RyYW5zaXRpb25lbmQnLAorICAvLyAgICdPVHJhbnNpdGlvbic6ICdvVHJhbnNpdGlvbkVuZCcsCisgIC8vICAgJ21zVHJhbnNpdGlvbic6ICdNU1RyYW5zaXRpb25FbmQnLAorICAvLyAgICd0cmFuc2l0aW9uJzogJ3RyYW5zaXRpb25lbmQnCisgIC8vIH07CisgIC8vIAorICAvLyAvLyBGaW5kIHRoZSBjb3JyZWN0IHRyYW5zaXRpb25FbmQgdmVuZG9yIHByZWZpeC4KKyAgLy8gd2luZG93LnRyYW5zRW5kRXZlbnROYW1lID0gdHJhbnNFbmRFdmVudE5hbWVzWworICAvLyAgICAgTW9kZXJuaXpyLnByZWZpeGVkKCd0cmFuc2l0aW9uJyldOworICAvLyAKKyAgLy8gLy8gV2hlbiBzbGlkZXMgYXJlIGRvbmUgdHJhbnNpdGlvbmluZywga2lja29mZiBsb2FkaW5nIGlmcmFtZXMuCisgIC8vIC8vIE5vdGU6IHdlJ3JlIG9ubHkgbG9va2luZyBhdCBhIHNpbmdsZSB0cmFuc2l0aW9uIChvbiB0aGUgc2xpZGUpLiBUaGlzCisgIC8vIC8vIGRvZXNuJ3QgaW5jbHVkZSBhdXRvYnVpbGRzIHRoZSBzbGlkZXMgbWF5IGhhdmUuIEFsc28sIGlmIHRoZSBzbGlkZQorICAvLyAvLyB0cmFuc2l0aW9ucyBvbiBtdWx0aXBsZSBwcm9wZXJ0aWVzIChlLmcuIG5vdCBqdXN0ICdhbGwnKSwgdGhpcyBkb2Vzbid0CisgIC8vIC8vIGhhbmRsZSB0aGF0IGNhc2UuCisgIC8vIHRoaXMuY29udGFpbmVyLmFkZEV2ZW50TGlzdGVuZXIodHJhbnNFbmRFdmVudE5hbWUsIGZ1bmN0aW9uKGUpIHsKKyAgLy8gICAgIHRoaXMuZW5hYmxlU2xpZGVGcmFtZXNfKHRoaXMuY3VyU2xpZGVfKTsKKyAgLy8gfS5iaW5kKHRoaXMpLCBmYWxzZSk7CisKKyAgLy8gZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignc2xpZGVlbnRlcicsIGZ1bmN0aW9uKGUpIHsKKyAgLy8gICB2YXIgc2xpZGUgPSBlLnRhcmdldDsKKyAgLy8gICB3aW5kb3cuc2V0VGltZW91dChmdW5jdGlvbigpIHsKKyAgLy8gICAgIHRoaXMuZW5hYmxlU2xpZGVGcmFtZXNfKGUuc2xpZGVOdW1iZXIpOworICAvLyAgICAgdGhpcy5lbmFibGVTbGlkZUZyYW1lc18oZS5zbGlkZU51bWJlciArIDEpOworICAvLyAgIH0uYmluZCh0aGlzKSwgMzAwKTsKKyAgLy8gfS5iaW5kKHRoaXMpLCBmYWxzZSk7Cit9OworCisvKioKKyAqIEBwcml2YXRlCisgKiBAcGFyYW0ge0V2ZW50fSBlIFRoZSBwb3AgZXZlbnQuCisgKi8KK1NsaWRlRGVjay5wcm90b3R5cGUub25Qb3BTdGF0ZV8gPSBmdW5jdGlvbihlKSB7CisgIGlmIChlLnN0YXRlICE9IG51bGwpIHsKKyAgICB0aGlzLmN1clNsaWRlXyA9IGUuc3RhdGU7CisgICAgdGhpcy51cGRhdGVTbGlkZXNfKHRydWUpOworICB9Cit9OworCisvKioKKyAqIEBwYXJhbSB7RXZlbnR9IGUKKyAqLworU2xpZGVEZWNrLnByb3RvdHlwZS5vbkJvZHlLZXlEb3duXyA9IGZ1bmN0aW9uKGUpIHsKKyAgaWYgKC9eKGlucHV0fHRleHRhcmVhKSQvaS50ZXN0KGUudGFyZ2V0Lm5vZGVOYW1lKSB8fAorICAgICAgZS50YXJnZXQuaXNDb250ZW50RWRpdGFibGUpIHsKKyAgICByZXR1cm47CisgIH0KKworICAvLyBGb3J3YXJkIGtleWRvd25zIHRvIHRoZSBtYWluIHNsaWRlcyBpZiB3ZSdyZSB0aGUgcG9wdXAuCisgIGlmICh0aGlzLmNvbnRyb2xsZXIgJiYgdGhpcy5jb250cm9sbGVyLmlzUG9wdXApIHsKKyAgICB0aGlzLmNvbnRyb2xsZXIuc2VuZE1zZyh7a2V5Q29kZTogZS5rZXlDb2RlfSk7CisgIH0KKworICBzd2l0Y2ggKGUua2V5Q29kZSkgeworICAgIGNhc2UgMTM6IC8vIEVudGVyCisgICAgICBpZiAoZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QuY29udGFpbnMoJ292ZXJ2aWV3JykpIHsKKyAgICAgICAgdGhpcy50b2dnbGVPdmVydmlldygpOworICAgICAgfQorICAgICAgYnJlYWs7CisKKyAgICBjYXNlIDM5OiAvLyByaWdodCBhcnJvdworICAgIGNhc2UgMzI6IC8vIHNwYWNlCisgICAgY2FzZSAzNDogLy8gUGdEbgorICAgICAgdGhpcy5uZXh0U2xpZGUoKTsKKyAgICAgIGUucHJldmVudERlZmF1bHQoKTsKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSAzNzogLy8gbGVmdCBhcnJvdworICAgIGNhc2UgODogLy8gQmFja3NwYWNlCisgICAgY2FzZSAzMzogLy8gUGdVcAorICAgICAgdGhpcy5wcmV2U2xpZGUoKTsKKyAgICAgIGUucHJldmVudERlZmF1bHQoKTsKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSA0MDogLy8gZG93biBhcnJvdworICAgICAgdGhpcy5uZXh0U2xpZGUoKTsKKyAgICAgIGUucHJldmVudERlZmF1bHQoKTsKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSAzODogLy8gdXAgYXJyb3cKKyAgICAgIHRoaXMucHJldlNsaWRlKCk7CisgICAgICBlLnByZXZlbnREZWZhdWx0KCk7CisgICAgICBicmVhazsKKworICAgIGNhc2UgNzI6IC8vIEg6IFRvZ2dsZSBjb2RlIGhpZ2hsaWdodGluZworICAgICAgZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QudG9nZ2xlKCdoaWdobGlnaHQtY29kZScpOworICAgICAgYnJlYWs7CisKKyAgICBjYXNlIDc5OiAvLyBPOiBUb2dnbGUgb3ZlcnZpZXcKKyAgICAgIHRoaXMudG9nZ2xlT3ZlcnZpZXcoKTsKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSA4MDogLy8gUAorICAgICAgaWYgKHRoaXMuY29udHJvbGxlciAmJiB0aGlzLmNvbnRyb2xsZXIuaXNQb3B1cCkgeworICAgICAgICBkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC50b2dnbGUoJ3dpdGgtbm90ZXMnKTsKKyAgICAgIH0gZWxzZSBpZiAodGhpcy5jb250cm9sbGVyICYmICF0aGlzLmNvbnRyb2xsZXIucG9wdXApIHsKKyAgICAgICAgZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QudG9nZ2xlKCd3aXRoLW5vdGVzJyk7CisgICAgICB9CisgICAgICBicmVhazsKKworICAgIGNhc2UgODI6IC8vIFIKKyAgICAgIC8vIFRPRE86IGltcGxlbWVudCByZWZyZXNoIG9uIG1haW4gc2xpZGVzIHdoZW4gcG9wdXAgaXMgcmVmcmVzaGVkLgorICAgICAgYnJlYWs7CisKKyAgICBjYXNlIDI3OiAvLyBFU0M6IEhpZGUgbm90ZXMgYW5kIGhpZ2hsaWdodGluZworICAgICAgZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QucmVtb3ZlKCd3aXRoLW5vdGVzJyk7CisgICAgICBkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC5yZW1vdmUoJ2hpZ2hsaWdodC1jb2RlJyk7CisKKyAgICAgIGlmIChkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC5jb250YWlucygnb3ZlcnZpZXcnKSkgeworICAgICAgICB0aGlzLnRvZ2dsZU92ZXJ2aWV3KCk7CisgICAgICB9CisgICAgICBicmVhazsKKworICAgIGNhc2UgNzA6IC8vIEY6IFRvZ2dsZSBmdWxsc2NyZWVuCisgICAgICAgLy8gT25seSByZXNwZWN0ICdmJyBvbiBib2R5LiBEb24ndCB3YW50IHRvIGNhcHR1cmUga2V5cyBmcm9tIGFuIDxpbnB1dD4uCisgICAgICAgLy8gQWxzbywgaWdub3JlIGJyb3dzZXIncyBmdWxsc2NyZWVuIHNob3J0Y3V0IChjbWQrc2hpZnQrZikgc28gd2UgZG9uJ3QKKyAgICAgICAvLyBnZXQgdHJhcHBlZCBpbiBmdWxsc2NyZWVuIQorICAgICAgaWYgKGUudGFyZ2V0ID09IGRvY3VtZW50LmJvZHkgJiYgIShlLnNoaWZ0S2V5ICYmIGUubWV0YUtleSkpIHsKKyAgICAgICAgaWYgKGRvY3VtZW50Lm1vekZ1bGxTY3JlZW4gIT09IHVuZGVmaW5lZCAmJiAhZG9jdW1lbnQubW96RnVsbFNjcmVlbikgeworICAgICAgICAgIGRvY3VtZW50LmJvZHkubW96UmVxdWVzdEZ1bGxTY3JlZW4oRWxlbWVudC5BTExPV19LRVlCT0FSRF9JTlBVVCk7CisgICAgICAgIH0gZWxzZSBpZiAoZG9jdW1lbnQud2Via2l0SXNGdWxsU2NyZWVuICE9PSB1bmRlZmluZWQgJiYgIWRvY3VtZW50LndlYmtpdElzRnVsbFNjcmVlbikgeworICAgICAgICAgIGRvY3VtZW50LmJvZHkud2Via2l0UmVxdWVzdEZ1bGxTY3JlZW4oRWxlbWVudC5BTExPV19LRVlCT0FSRF9JTlBVVCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgZG9jdW1lbnQuY2FuY2VsRnVsbFNjcmVlbigpOworICAgICAgICB9CisgICAgICB9CisgICAgICBicmVhazsKKworICAgIGNhc2UgODc6IC8vIFc6IFRvZ2dsZSB3aWRlc2NyZWVuCisgICAgICAvLyBPbmx5IHJlc3BlY3QgJ3cnIG9uIGJvZHkuIERvbid0IHdhbnQgdG8gY2FwdHVyZSBrZXlzIGZyb20gYW4gPGlucHV0Pi4KKyAgICAgIGlmIChlLnRhcmdldCA9PSBkb2N1bWVudC5ib2R5ICYmICEoZS5zaGlmdEtleSAmJiBlLm1ldGFLZXkpKSB7CisgICAgICAgIHRoaXMuY29udGFpbmVyLmNsYXNzTGlzdC50b2dnbGUoJ2xheW91dC13aWRlc2NyZWVuJyk7CisgICAgICB9CisgICAgICBicmVhazsKKyAgfQorfTsKKworLyoqCisgKgorICovCitTbGlkZURlY2sucHJvdG90eXBlLmZvY3VzT3ZlcnZpZXdfID0gZnVuY3Rpb24oKSB7CisgIHZhciBvdmVydmlldyA9IGRvY3VtZW50LmJvZHkuY2xhc3NMaXN0LmNvbnRhaW5zKCdvdmVydmlldycpOworCisgIGZvciAodmFyIGkgPSAwLCBzbGlkZTsgc2xpZGUgPSB0aGlzLnNsaWRlc1tpXTsgaSsrKSB7CisgICAgc2xpZGUuc3R5bGVbTW9kZXJuaXpyLnByZWZpeGVkKCd0cmFuc2Zvcm0nKV0gPSBvdmVydmlldyA/CisgICAgICAgICd0cmFuc2xhdGVaKC0yNTAwcHgpIHRyYW5zbGF0ZSgnICsgKCggaSAtIHRoaXMuY3VyU2xpZGVfICkgKiAxMDUpICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICclLCAwJSknIDogJyc7CisgIH0KK307CisKKy8qKgorICovCitTbGlkZURlY2sucHJvdG90eXBlLnRvZ2dsZU92ZXJ2aWV3ID0gZnVuY3Rpb24oKSB7CisgIGRvY3VtZW50LmJvZHkuY2xhc3NMaXN0LnRvZ2dsZSgnb3ZlcnZpZXcnKTsKKworICB0aGlzLmZvY3VzT3ZlcnZpZXdfKCk7Cit9OworCisvKioKKyAqIEBwcml2YXRlCisgKi8KK1NsaWRlRGVjay5wcm90b3R5cGUubG9hZENvbmZpZ18gPSBmdW5jdGlvbihjb25maWcpIHsKKyAgaWYgKCFjb25maWcpIHsKKyAgICByZXR1cm47CisgIH0KKworICB0aGlzLmNvbmZpZ18gPSBjb25maWc7CisKKyAgdmFyIHNldHRpbmdzID0gdGhpcy5jb25maWdfLnNldHRpbmdzOworCisgIHRoaXMubG9hZFRoZW1lXyhzZXR0aW5ncy50aGVtZSB8fCBbXSk7CisKKyAgaWYgKHNldHRpbmdzLmZhdkljb24pIHsKKyAgICB0aGlzLmFkZEZhdkljb25fKHNldHRpbmdzLmZhdkljb24pOworICB9CisKKyAgLy8gUHJldHR5cHJpbnQuIERlZmF1bHQgdG8gb24uCisgIGlmICghISEoJ3VzZVByZXR0aWZ5JyBpbiBzZXR0aW5ncykgfHwgc2V0dGluZ3MudXNlUHJldHRpZnkpIHsKKyAgICBwcmV0dHlQcmludCgpOworICB9CisKKyAgaWYgKHNldHRpbmdzLmFuYWx5dGljcykgeworICAgIHRoaXMubG9hZEFuYWx5dGljc18oKTsKKyAgfQorCisgIGlmIChzZXR0aW5ncy5mb250cykgeworICAgIHRoaXMuYWRkRm9udHNfKHNldHRpbmdzLmZvbnRzKTsKKyAgfQorCisgIC8vIEJ1aWxkcy4gRGVmYXVsdCB0byBvbi4KKyAgaWYgKCEhISgndXNlQnVpbGRzJyBpbiBzZXR0aW5ncykgfHwgc2V0dGluZ3MudXNlQnVpbGRzKSB7CisgICAgdGhpcy5tYWtlQnVpbGRMaXN0c18oKTsKKyAgfQorCisgIGlmIChzZXR0aW5ncy50aXRsZSkgeyAgIAorICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ1tkYXRhLWNvbmZpZy10aXRsZV0nKS5pbm5lckhUTUwgPSBzZXR0aW5ncy50aXRsZTsKKyAgfQorCisgIGlmIChzZXR0aW5ncy5zdWJ0aXRsZSkgeworICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ1tkYXRhLWNvbmZpZy1zdWJ0aXRsZV0nKS5pbm5lckhUTUwgPSBzZXR0aW5ncy5zdWJ0aXRsZTsKKyAgfQorCisgIGlmICh0aGlzLmNvbmZpZ18ucHJlc2VudGVycykgeworICAgIHZhciBwcmVzZW50ZXJzID0gdGhpcy5jb25maWdfLnByZXNlbnRlcnM7CisgICAgdmFyIGRhdGFDb25maWdDb250YWN0ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignW2RhdGEtY29uZmlnLWNvbnRhY3RdJyk7CisKKyAgICB2YXIgaHRtbCA9IFtdOworICAgIGlmIChwcmVzZW50ZXJzLmxlbmd0aCA9PSAxKSB7CisgICAgICB2YXIgcCA9IHByZXNlbnRlcnNbMF07CisKKyAgICAgIGh0bWwgPSBbcC5uYW1lLCBwLmNvbXBhbnldLmpvaW4oJzxicj4nKTsKKworICAgICAgdmFyIGdwbHVzID0gcC5ncGx1cyA/ICc8c3Bhbj5nKzwvc3Bhbj48YSBocmVmPSInICsgcC5ncGx1cyArCisgICAgICAgICAgJyI+JyArIHAuZ3BsdXMucmVwbGFjZSgvaHR0cHM/OlwvXC8vLCAnJykgKyAnPC9hPicgOiAnJzsKKworICAgICAgdmFyIHR3aXR0ZXIgPSBwLnR3aXR0ZXIgPyAnPHNwYW4+dHdpdHRlcjwvc3Bhbj4nICsKKyAgICAgICAgICAnPGEgaHJlZj0iaHR0cDovL3R3aXR0ZXIuY29tLycgKyBwLnR3aXR0ZXIgKyAnIj4nICsKKyAgICAgICAgICBwLnR3aXR0ZXIgKyAnPC9hPicgOiAnJzsKKworICAgICAgdmFyIHd3dyA9IHAud3d3ID8gJzxzcGFuPnd3dzwvc3Bhbj48YSBocmVmPSInICsgcC53d3cgKworICAgICAgICAgICAgICAgICAgICAgICAgJyI+JyArIHAud3d3LnJlcGxhY2UoL2h0dHBzPzpcL1wvLywgJycpICsgJzwvYT4nIDogJyc7CisKKyAgICAgIHZhciBnaXRodWIgPSBwLmdpdGh1YiA/ICc8c3Bhbj5naXRodWI8L3NwYW4+PGEgaHJlZj0iJyArIHAuZ2l0aHViICsKKyAgICAgICAgICAnIj4nICsgcC5naXRodWIucmVwbGFjZSgvaHR0cHM/OlwvXC8vLCAnJykgKyAnPC9hPicgOiAnJzsKKworICAgICAgdmFyIGh0bWwyID0gW2dwbHVzLCB0d2l0dGVyLCB3d3csIGdpdGh1Yl0uam9pbignPGJyPicpOworCisgICAgICBpZiAoZGF0YUNvbmZpZ0NvbnRhY3QpIHsKKyAgICAgICAgZGF0YUNvbmZpZ0NvbnRhY3QuaW5uZXJIVE1MID0gaHRtbDI7CisgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgIGZvciAodmFyIGkgPSAwLCBwOyBwID0gcHJlc2VudGVyc1tpXTsgKytpKSB7CisgICAgICAgIGh0bWwucHVzaChwLm5hbWUgKyAnIC0gJyArIHAuY29tcGFueSk7CisgICAgICB9CisgICAgICBodG1sID0gaHRtbC5qb2luKCc8YnI+Jyk7CisgICAgICBpZiAoZGF0YUNvbmZpZ0NvbnRhY3QpIHsKKyAgICAgICAgZGF0YUNvbmZpZ0NvbnRhY3QuaW5uZXJIVE1MID0gaHRtbDsKKyAgICAgIH0KKyAgICB9CisKKyAgICB2YXIgZGF0YUNvbmZpZ1ByZXNlbnRlciA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ1tkYXRhLWNvbmZpZy1wcmVzZW50ZXJdJyk7CisgICAgaWYgKGRhdGFDb25maWdQcmVzZW50ZXIpIHsKKyAgICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ1tkYXRhLWNvbmZpZy1wcmVzZW50ZXJdJykuaW5uZXJIVE1MID0gaHRtbDsKKyAgICB9CisgIH0KKworICAvKiBMZWZ0L1JpZ2h0IHRhcCBhcmVhcy4gRGVmYXVsdCB0byBpbmNsdWRpbmcuICovCisgIGlmICghISEoJ2VuYWJsZVNsaWRlQXJlYXMnIGluIHNldHRpbmdzKSB8fCBzZXR0aW5ncy5lbmFibGVTbGlkZUFyZWFzKSB7CisgICAgdmFyIGVsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7CisgICAgZWwuY2xhc3NMaXN0LmFkZCgnc2xpZGUtYXJlYScpOworICAgIGVsLmlkID0gJ3ByZXYtc2xpZGUtYXJlYSc7CisgICAgZWwuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCB0aGlzLnByZXZTbGlkZS5iaW5kKHRoaXMpLCBmYWxzZSk7CisgICAgdGhpcy5jb250YWluZXIuYXBwZW5kQ2hpbGQoZWwpOworCisgICAgdmFyIGVsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7CisgICAgZWwuY2xhc3NMaXN0LmFkZCgnc2xpZGUtYXJlYScpOworICAgIGVsLmlkID0gJ25leHQtc2xpZGUtYXJlYSc7CisgICAgZWwuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCB0aGlzLm5leHRTbGlkZS5iaW5kKHRoaXMpLCBmYWxzZSk7CisgICAgdGhpcy5jb250YWluZXIuYXBwZW5kQ2hpbGQoZWwpOworICB9CisKKyAgaWYgKE1vZGVybml6ci50b3VjaCAmJiAoISEhKCdlbmFibGVUb3VjaCcgaW4gc2V0dGluZ3MpIHx8CisgICAgICBzZXR0aW5ncy5lbmFibGVUb3VjaCkpIHsKKyAgICB2YXIgc2VsZiA9IHRoaXM7CisKKyAgICAvLyBOb3RlOiB0aGlzIHByZXZlbnRzIG1vYmlsZSB6b29tIGluL291dCBidXQgcHJldmVudHMgaU9TIGZyb20gZG9pbmcKKyAgICAvLyBpdCdzIGNyYXp5IHNjcm9sbCBvdmVyIGVmZmVjdCBhbmQgZGlzYWxpZ25pbmcgdGhlIHNsaWRlcy4KKyAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigndG91Y2hzdGFydCcsIGZ1bmN0aW9uKGUpIHsKKyAgICAgIGUucHJldmVudERlZmF1bHQoKTsKKyAgICB9LCBmYWxzZSk7CisKKyAgICB2YXIgaGFtbWVyID0gbmV3IEhhbW1lcih0aGlzLmNvbnRhaW5lcik7CisgICAgaGFtbWVyLm9uZHJhZ2VuZCA9IGZ1bmN0aW9uKGUpIHsKKyAgICAgIGlmIChlLmRpcmVjdGlvbiA9PSAncmlnaHQnIHx8IGUuZGlyZWN0aW9uID09ICdkb3duJykgeworICAgICAgICBzZWxmLnByZXZTbGlkZSgpOworICAgICAgfSBlbHNlIGlmIChlLmRpcmVjdGlvbiA9PSAnbGVmdCcgfHwgZS5kaXJlY3Rpb24gPT0gJ3VwJykgeworICAgICAgICBzZWxmLm5leHRTbGlkZSgpOworICAgICAgfQorICAgIH07CisgIH0KK307CisKKy8qKgorICogQHByaXZhdGUKKyAqIEBwYXJhbSB7QXJyYXkuPHN0cmluZz59IGZvbnRzCisgKi8KK1NsaWRlRGVjay5wcm90b3R5cGUuYWRkRm9udHNfID0gZnVuY3Rpb24oZm9udHMpIHsKKyAgdmFyIGVsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbGluaycpOworICBlbC5yZWwgPSAnc3R5bGVzaGVldCc7CisgIGVsLmhyZWYgPSAoJ2h0dHBzOicgPT0gZG9jdW1lbnQubG9jYXRpb24ucHJvdG9jb2wgPyAnaHR0cHMnIDogJ2h0dHAnKSArCisgICAgICAnOi8vZm9udHMuZ29vZ2xlYXBpcy5jb20vY3NzP2ZhbWlseT0nICsgZm9udHMuam9pbignfCcpICsgJyZ2Mic7CisgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ2hlYWQnKS5hcHBlbmRDaGlsZChlbCk7Cit9OworCisvKioKKyAqIEBwcml2YXRlCisgKi8KK1NsaWRlRGVjay5wcm90b3R5cGUuYnVpbGROZXh0SXRlbV8gPSBmdW5jdGlvbigpIHsKKyAgdmFyIHNsaWRlID0gdGhpcy5zbGlkZXNbdGhpcy5jdXJTbGlkZV9dOworICB2YXIgdG9CdWlsZCA9IHNsaWRlLnF1ZXJ5U2VsZWN0b3IoJy50by1idWlsZCcpOworICB2YXIgYnVpbHQgPSBzbGlkZS5xdWVyeVNlbGVjdG9yKCcuYnVpbGQtY3VycmVudCcpOworCisgIGlmIChidWlsdCkgeworICAgIGJ1aWx0LmNsYXNzTGlzdC5yZW1vdmUoJ2J1aWxkLWN1cnJlbnQnKTsKKyAgICBpZiAoYnVpbHQuY2xhc3NMaXN0LmNvbnRhaW5zKCdmYWRlJykpIHsKKyAgICAgIGJ1aWx0LmNsYXNzTGlzdC5hZGQoJ2J1aWxkLWZhZGUnKTsKKyAgICB9CisgIH0KKworICBpZiAoIXRvQnVpbGQpIHsKKyAgICB2YXIgaXRlbXMgPSBzbGlkZS5xdWVyeVNlbGVjdG9yQWxsKCcuYnVpbGQtZmFkZScpOworICAgIGZvciAodmFyIGogPSAwLCBpdGVtOyBpdGVtID0gaXRlbXNbal07IGorKykgeworICAgICAgaXRlbS5jbGFzc0xpc3QucmVtb3ZlKCdidWlsZC1mYWRlJyk7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKKyAgfQorCisgIHRvQnVpbGQuY2xhc3NMaXN0LnJlbW92ZSgndG8tYnVpbGQnKTsKKyAgdG9CdWlsZC5jbGFzc0xpc3QuYWRkKCdidWlsZC1jdXJyZW50Jyk7CisKKyAgcmV0dXJuIHRydWU7Cit9OworCisvKioKKyAqIEBwYXJhbSB7Ym9vbGVhbj19IG9wdF9kb250UHVzaAorICovCitTbGlkZURlY2sucHJvdG90eXBlLnByZXZTbGlkZSA9IGZ1bmN0aW9uKG9wdF9kb250UHVzaCkgeworICBpZiAodGhpcy5jdXJTbGlkZV8gPiAwKSB7CisgICAgdmFyIGJvZHlDbGFzc0xpc3QgPSBkb2N1bWVudC5ib2R5LmNsYXNzTGlzdDsKKyAgICBib2R5Q2xhc3NMaXN0LnJlbW92ZSgnaGlnaGxpZ2h0LWNvZGUnKTsKKworICAgIC8vIFRvZ2dsZSBvZmYgc3BlYWtlciBub3RlcyBpZiB0aGV5J3JlIHNob3dpbmcgd2hlbiB3ZSBtb3ZlIGJhY2t3YXJkcyBvbiB0aGUKKyAgICAvLyBtYWluIHNsaWRlcy4gSWYgd2UncmUgdGhlIHNwZWFrZXIgbm90ZXMgcG9wdXAsIGxlYXZlIHRoZW0gdXAuCisgICAgaWYgKHRoaXMuY29udHJvbGxlciAmJiAhdGhpcy5jb250cm9sbGVyLmlzUG9wdXApIHsKKyAgICAgIGJvZHlDbGFzc0xpc3QucmVtb3ZlKCd3aXRoLW5vdGVzJyk7CisgICAgfSBlbHNlIGlmICghdGhpcy5jb250cm9sbGVyKSB7CisgICAgICBib2R5Q2xhc3NMaXN0LnJlbW92ZSgnd2l0aC1ub3RlcycpOworICAgIH0KKworICAgIHRoaXMucHJldlNsaWRlXyA9IHRoaXMuY3VyU2xpZGVfLS07CisKKyAgICB0aGlzLnVwZGF0ZVNsaWRlc18ob3B0X2RvbnRQdXNoKTsKKyAgfQorfTsKKworLyoqCisgKiBAcGFyYW0ge2Jvb2xlYW49fSBvcHRfZG9udFB1c2gKKyAqLworU2xpZGVEZWNrLnByb3RvdHlwZS5uZXh0U2xpZGUgPSBmdW5jdGlvbihvcHRfZG9udFB1c2gpIHsKKyAgaWYgKCFkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC5jb250YWlucygnb3ZlcnZpZXcnKSAmJiB0aGlzLmJ1aWxkTmV4dEl0ZW1fKCkpIHsKKyAgICByZXR1cm47CisgIH0KKworICBpZiAodGhpcy5jdXJTbGlkZV8gPCB0aGlzLnNsaWRlcy5sZW5ndGggLSAxKSB7CisgICAgdmFyIGJvZHlDbGFzc0xpc3QgPSBkb2N1bWVudC5ib2R5LmNsYXNzTGlzdDsKKyAgICBib2R5Q2xhc3NMaXN0LnJlbW92ZSgnaGlnaGxpZ2h0LWNvZGUnKTsKKworICAgIC8vIFRvZ2dsZSBvZmYgc3BlYWtlciBub3RlcyBpZiB0aGV5J3JlIHNob3dpbmcgd2hlbiB3ZSBhZHZhbmNlZCBvbiB0aGUgbWFpbgorICAgIC8vIHNsaWRlcy4gSWYgd2UncmUgdGhlIHNwZWFrZXIgbm90ZXMgcG9wdXAsIGxlYXZlIHRoZW0gdXAuCisgICAgaWYgKHRoaXMuY29udHJvbGxlciAmJiAhdGhpcy5jb250cm9sbGVyLmlzUG9wdXApIHsKKyAgICAgIGJvZHlDbGFzc0xpc3QucmVtb3ZlKCd3aXRoLW5vdGVzJyk7CisgICAgfSBlbHNlIGlmICghdGhpcy5jb250cm9sbGVyKSB7CisgICAgICBib2R5Q2xhc3NMaXN0LnJlbW92ZSgnd2l0aC1ub3RlcycpOworICAgIH0KKworICAgIHRoaXMucHJldlNsaWRlXyA9IHRoaXMuY3VyU2xpZGVfKys7CisKKyAgICB0aGlzLnVwZGF0ZVNsaWRlc18ob3B0X2RvbnRQdXNoKTsKKyAgfQorfTsKKworLyogU2xpZGUgZXZlbnRzICovCisKKy8qKgorICogVHJpZ2dlcmVkIHdoZW4gYSBzbGlkZSBlbnRlci9sZWF2ZSBldmVudCBzaG91bGQgYmUgZGlzcGF0Y2hlZC4KKyAqCisgKiBAcGFyYW0ge3N0cmluZ30gdHlwZSBUaGUgdHlwZSBvZiBldmVudCB0byB0cmlnZ2VyCisgKiAgICAgKGUuZy4gJ3NsaWRlZW50ZXInLCAnc2xpZGVsZWF2ZScpLgorICogQHBhcmFtIHtudW1iZXJ9IHNsaWRlTm8gVGhlIGluZGV4IG9mIHRoZSBzbGlkZSB0aGF0IGlzIGJlaW5nIGxlZnQuCisgKi8KK1NsaWRlRGVjay5wcm90b3R5cGUudHJpZ2dlclNsaWRlRXZlbnQgPSBmdW5jdGlvbih0eXBlLCBzbGlkZU5vKSB7CisgIHZhciBlbCA9IHRoaXMuZ2V0U2xpZGVFbF8oc2xpZGVObyk7CisgIGlmICghZWwpIHsKKyAgICByZXR1cm47CisgIH0KKworICAvLyBDYWxsIG9uc2xpZGVlbnRlci9vbnNsaWRlbGVhdmUgaWYgdGhlIGF0dHJpYnV0ZSBpcyBkZWZpbmVkIG9uIHRoaXMgc2xpZGUuCisgIHZhciBmdW5jID0gZWwuZ2V0QXR0cmlidXRlKHR5cGUpOworICBpZiAoZnVuYykgeworICAgIG5ldyBGdW5jdGlvbihmdW5jKS5jYWxsKGVsKTsgLy8gVE9ETzogRG9uJ3QgdXNlIG5ldyBGdW5jdGlvbigpIDooCisgIH0KKworICAvLyBEaXNwYXRjaCBldmVudCB0byBsaXN0ZW5lcnMgc2V0dXAgdXNpbmcgYWRkRXZlbnRMaXN0ZW5lci4KKyAgdmFyIGV2dCA9IGRvY3VtZW50LmNyZWF0ZUV2ZW50KCdFdmVudCcpOworICBldnQuaW5pdEV2ZW50KHR5cGUsIHRydWUsIHRydWUpOworICBldnQuc2xpZGVOdW1iZXIgPSBzbGlkZU5vICsgMTsgLy8gTWFrZSBpdCByZWFkYWJsZQorICBldnQuc2xpZGUgPSBlbDsKKworICBlbC5kaXNwYXRjaEV2ZW50KGV2dCk7Cit9OworCisvKioKKyAqIEBwcml2YXRlCisgKi8KK1NsaWRlRGVjay5wcm90b3R5cGUudXBkYXRlU2xpZGVzXyA9IGZ1bmN0aW9uKG9wdF9kb250UHVzaCkgeworICB2YXIgZG9udFB1c2ggPSBvcHRfZG9udFB1c2ggfHwgZmFsc2U7CisKKyAgdmFyIGN1clNsaWRlID0gdGhpcy5jdXJTbGlkZV87CisgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5zbGlkZXMubGVuZ3RoOyArK2kpIHsKKyAgICBzd2l0Y2ggKGkpIHsKKyAgICAgIGNhc2UgY3VyU2xpZGUgLSAyOgorICAgICAgICB0aGlzLnVwZGF0ZVNsaWRlQ2xhc3NfKGksICdmYXItcGFzdCcpOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgY3VyU2xpZGUgLSAxOgorICAgICAgICB0aGlzLnVwZGF0ZVNsaWRlQ2xhc3NfKGksICdwYXN0Jyk7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBjdXJTbGlkZToKKyAgICAgICAgdGhpcy51cGRhdGVTbGlkZUNsYXNzXyhpLCAnY3VycmVudCcpOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgY3VyU2xpZGUgKyAxOgorICAgICAgICB0aGlzLnVwZGF0ZVNsaWRlQ2xhc3NfKGksICduZXh0Jyk7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBjdXJTbGlkZSArIDI6CisgICAgICAgIHRoaXMudXBkYXRlU2xpZGVDbGFzc18oaSwgJ2Zhci1uZXh0Jyk7CisgICAgICAgIGJyZWFrOworICAgICAgZGVmYXVsdDoKKyAgICAgICAgdGhpcy51cGRhdGVTbGlkZUNsYXNzXyhpKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICB9OworCisgIHRoaXMudHJpZ2dlclNsaWRlRXZlbnQoJ3NsaWRlbGVhdmUnLCB0aGlzLnByZXZTbGlkZV8pOworICB0aGlzLnRyaWdnZXJTbGlkZUV2ZW50KCdzbGlkZWVudGVyJywgY3VyU2xpZGUpOworCisvLyB3aW5kb3cuc2V0VGltZW91dCh0aGlzLmRpc2FibGVTbGlkZUZyYW1lc18uYmluZCh0aGlzLCBjdXJTbGlkZSAtIDIpLCAzMDEpOworLy8gCisvLyB0aGlzLmVuYWJsZVNsaWRlRnJhbWVzXyhjdXJTbGlkZSAtIDEpOyAvLyBQcmV2aW91cyBzbGlkZS4KKy8vIHRoaXMuZW5hYmxlU2xpZGVGcmFtZXNfKGN1clNsaWRlICsgMSk7IC8vIEN1cnJlbnQgc2xpZGUuCisvLyB0aGlzLmVuYWJsZVNsaWRlRnJhbWVzXyhjdXJTbGlkZSArIDIpOyAvLyBOZXh0IHNsaWRlLgorCisgICAvLyBFbmFibGUgY3VycmVudCBzbGlkZSdzIGlmcmFtZXMgKG5lZWRlZCBmb3IgcGFnZSBsb2F0IGF0IGN1cnJlbnQgc2xpZGUpLgorICAgdGhpcy5lbmFibGVTbGlkZUZyYW1lc18oY3VyU2xpZGUgKyAxKTsKKworICAgLy8gTm8gd2F5IHRvIHRlbGwgd2hlbiBhbGwgc2xpZGUgdHJhbnNpdGlvbnMgKyBhdXRvIGJ1aWxkcyBhcmUgZG9uZS4KKyAgIC8vIEdpdmUgb3Vyc2VsdmVzIGEgZ29vZCBidWZmZXIgdG8gcHJlbG9hZCB0aGUgbmV4dCBzbGlkZSdzIGlmcmFtZXMuCisgICB3aW5kb3cuc2V0VGltZW91dCh0aGlzLmVuYWJsZVNsaWRlRnJhbWVzXy5iaW5kKHRoaXMsIGN1clNsaWRlICsgMiksIDEwMDApOworCisgIHRoaXMudXBkYXRlSGFzaF8oZG9udFB1c2gpOworCisgIGlmIChkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC5jb250YWlucygnb3ZlcnZpZXcnKSkgeworICAgIHRoaXMuZm9jdXNPdmVydmlld18oKTsKKyAgICByZXR1cm47CisgIH0KKworfTsKKworLyoqCisgKiBAcHJpdmF0ZQorICogQHBhcmFtIHtudW1iZXJ9IHNsaWRlTm8KKyAqLworU2xpZGVEZWNrLnByb3RvdHlwZS5lbmFibGVTbGlkZUZyYW1lc18gPSBmdW5jdGlvbihzbGlkZU5vKSB7CisgIHZhciBlbCA9IHRoaXMuc2xpZGVzW3NsaWRlTm8gLSAxXTsKKyAgaWYgKCFlbCkgeworICAgIHJldHVybjsKKyAgfQorCisgIHZhciBmcmFtZXMgPSBlbC5xdWVyeVNlbGVjdG9yQWxsKCdpZnJhbWUnKTsKKyAgZm9yICh2YXIgaSA9IDAsIGZyYW1lOyBmcmFtZSA9IGZyYW1lc1tpXTsgaSsrKSB7CisgICAgdGhpcy5lbmFibGVGcmFtZV8oZnJhbWUpOworICB9Cit9OworCisvKioKKyAqIEBwcml2YXRlCisgKiBAcGFyYW0ge251bWJlcn0gc2xpZGVObworICovCitTbGlkZURlY2sucHJvdG90eXBlLmVuYWJsZUZyYW1lXyA9IGZ1bmN0aW9uKGZyYW1lKSB7CisgIHZhciBzcmMgPSBmcmFtZS5kYXRhc2V0LnNyYzsKKyAgaWYgKHNyYyAmJiBmcmFtZS5zcmMgIT0gc3JjKSB7CisgICAgZnJhbWUuc3JjID0gc3JjOworICB9Cit9OworCisvKioKKyAqIEBwcml2YXRlCisgKiBAcGFyYW0ge251bWJlcn0gc2xpZGVObworICovCitTbGlkZURlY2sucHJvdG90eXBlLmRpc2FibGVTbGlkZUZyYW1lc18gPSBmdW5jdGlvbihzbGlkZU5vKSB7CisgIHZhciBlbCA9IHRoaXMuc2xpZGVzW3NsaWRlTm8gLSAxXTsKKyAgaWYgKCFlbCkgeworICAgIHJldHVybjsKKyAgfQorCisgIHZhciBmcmFtZXMgPSBlbC5xdWVyeVNlbGVjdG9yQWxsKCdpZnJhbWUnKTsKKyAgZm9yICh2YXIgaSA9IDAsIGZyYW1lOyBmcmFtZSA9IGZyYW1lc1tpXTsgaSsrKSB7CisgICAgdGhpcy5kaXNhYmxlRnJhbWVfKGZyYW1lKTsKKyAgfQorfTsKKworLyoqCisgKiBAcHJpdmF0ZQorICogQHBhcmFtIHtOb2RlfSBmcmFtZQorICovCitTbGlkZURlY2sucHJvdG90eXBlLmRpc2FibGVGcmFtZV8gPSBmdW5jdGlvbihmcmFtZSkgeworICBmcmFtZS5zcmMgPSAnYWJvdXQ6YmxhbmsnOworfTsKKworLyoqCisgKiBAcHJpdmF0ZQorICogQHBhcmFtIHtudW1iZXJ9IHNsaWRlTm8KKyAqLworU2xpZGVEZWNrLnByb3RvdHlwZS5nZXRTbGlkZUVsXyA9IGZ1bmN0aW9uKG5vKSB7CisgIGlmICgobm8gPCAwKSB8fCAobm8gPj0gdGhpcy5zbGlkZXMubGVuZ3RoKSkgeworICAgIHJldHVybiBudWxsOworICB9IGVsc2UgeworICAgIHJldHVybiB0aGlzLnNsaWRlc1tub107CisgIH0KK307CisKKy8qKgorICogQHByaXZhdGUKKyAqIEBwYXJhbSB7bnVtYmVyfSBzbGlkZU5vCisgKiBAcGFyYW0ge3N0cmluZ30gY2xhc3NOYW1lCisgKi8KK1NsaWRlRGVjay5wcm90b3R5cGUudXBkYXRlU2xpZGVDbGFzc18gPSBmdW5jdGlvbihzbGlkZU5vLCBjbGFzc05hbWUpIHsKKyAgdmFyIGVsID0gdGhpcy5nZXRTbGlkZUVsXyhzbGlkZU5vKTsKKworICBpZiAoIWVsKSB7CisgICAgcmV0dXJuOworICB9CisKKyAgaWYgKGNsYXNzTmFtZSkgeworICAgIGVsLmNsYXNzTGlzdC5hZGQoY2xhc3NOYW1lKTsKKyAgfQorCisgIGZvciAodmFyIGkgPSAwLCBzbGlkZUNsYXNzOyBzbGlkZUNsYXNzID0gdGhpcy5TTElERV9DTEFTU0VTX1tpXTsgKytpKSB7CisgICAgaWYgKGNsYXNzTmFtZSAhPSBzbGlkZUNsYXNzKSB7CisgICAgICBlbC5jbGFzc0xpc3QucmVtb3ZlKHNsaWRlQ2xhc3MpOworICAgIH0KKyAgfQorfTsKKworLyoqCisgKiBAcHJpdmF0ZQorICovCitTbGlkZURlY2sucHJvdG90eXBlLm1ha2VCdWlsZExpc3RzXyA9IGZ1bmN0aW9uICgpIHsKKyAgZm9yICh2YXIgaSA9IHRoaXMuY3VyU2xpZGVfLCBzbGlkZTsgc2xpZGUgPSB0aGlzLnNsaWRlc1tpXTsgKytpKSB7CisgICAgdmFyIGl0ZW1zID0gc2xpZGUucXVlcnlTZWxlY3RvckFsbCgnLmJ1aWxkID4gKicpOworICAgIGZvciAodmFyIGogPSAwLCBpdGVtOyBpdGVtID0gaXRlbXNbal07ICsraikgeworICAgICAgaWYgKGl0ZW0uY2xhc3NMaXN0KSB7CisgICAgICAgIGl0ZW0uY2xhc3NMaXN0LmFkZCgndG8tYnVpbGQnKTsKKyAgICAgICAgaWYgKGl0ZW0ucGFyZW50Tm9kZS5jbGFzc0xpc3QuY29udGFpbnMoJ2ZhZGUnKSkgeworICAgICAgICAgIGl0ZW0uY2xhc3NMaXN0LmFkZCgnZmFkZScpOworICAgICAgICB9CisgICAgICB9CisgICAgfQorICB9Cit9OworCisvKioKKyAqIEBwcml2YXRlCisgKiBAcGFyYW0ge2Jvb2xlYW59IGRvbnRQdXNoCisgKi8KK1NsaWRlRGVjay5wcm90b3R5cGUudXBkYXRlSGFzaF8gPSBmdW5jdGlvbihkb250UHVzaCkgeworICBpZiAoIWRvbnRQdXNoKSB7CisgICAgdmFyIHNsaWRlTm8gPSB0aGlzLmN1clNsaWRlXyArIDE7CisgICAgdmFyIGhhc2ggPSAnIycgKyBzbGlkZU5vOworICAgIGlmICh3aW5kb3cuaGlzdG9yeS5wdXNoU3RhdGUpIHsKKyAgICAgIHdpbmRvdy5oaXN0b3J5LnB1c2hTdGF0ZSh0aGlzLmN1clNsaWRlXywgJ1NsaWRlICcgKyBzbGlkZU5vLCBoYXNoKTsKKyAgICB9IGVsc2UgeworICAgICAgd2luZG93LmxvY2F0aW9uLnJlcGxhY2UoaGFzaCk7CisgICAgfQorCisgICAgLy8gUmVjb3JkIEdBIGhpdCBvbiB0aGlzIHNsaWRlLgorICAgIHdpbmRvd1snX2dhcSddICYmIHdpbmRvd1snX2dhcSddLnB1c2goWydfdHJhY2tQYWdldmlldycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb2N1bWVudC5sb2NhdGlvbi5ocmVmXSk7CisgIH0KK307CisKKworLyoqCisgKiBAcHJpdmF0ZQorICogQHBhcmFtIHtzdHJpbmd9IGZhdkljb24KKyAqLworU2xpZGVEZWNrLnByb3RvdHlwZS5hZGRGYXZJY29uXyA9IGZ1bmN0aW9uKGZhdkljb24pIHsKKyAgdmFyIGVsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbGluaycpOworICBlbC5yZWwgPSAnaWNvbic7CisgIGVsLnR5cGUgPSAnaW1hZ2UvcG5nJzsKKyAgZWwuaHJlZiA9IGZhdkljb247CisgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ2hlYWQnKS5hcHBlbmRDaGlsZChlbCk7Cit9OworCisvKioKKyAqIEBwcml2YXRlCisgKiBAcGFyYW0ge3N0cmluZ30gdGhlbWUKKyAqLworU2xpZGVEZWNrLnByb3RvdHlwZS5sb2FkVGhlbWVfID0gZnVuY3Rpb24odGhlbWUpIHsKKyAgdmFyIHN0eWxlcyA9IFtdOworICBpZiAodGhlbWUuY29uc3RydWN0b3IubmFtZSA9PT0gJ1N0cmluZycpIHsKKyAgICBzdHlsZXMucHVzaCh0aGVtZSk7CisgIH0gZWxzZSB7CisgICAgc3R5bGVzID0gdGhlbWU7CisgIH0KKworICBmb3IgKHZhciBpID0gMCwgc3R5bGU7IHRoZW1lVXJsID0gc3R5bGVzW2ldOyBpKyspIHsKKyAgICB2YXIgc3R5bGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdsaW5rJyk7CisgICAgc3R5bGUucmVsID0gJ3N0eWxlc2hlZXQnOworICAgIHN0eWxlLnR5cGUgPSAndGV4dC9jc3MnOworICAgIGlmICh0aGVtZVVybC5pbmRleE9mKCdodHRwJykgPT0gLTEpIHsKKyAgICAgIHN0eWxlLmhyZWYgPSB0aGlzLkNTU19ESVJfICsgdGhlbWVVcmwgKyAnLmNzcyc7CisgICAgfSBlbHNlIHsKKyAgICAgIHN0eWxlLmhyZWYgPSB0aGVtZVVybDsKKyAgICB9CisgICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvcignaGVhZCcpLmFwcGVuZENoaWxkKHN0eWxlKTsKKyAgfQorfTsKKworLyoqCisgKiBAcHJpdmF0ZQorICovCitTbGlkZURlY2sucHJvdG90eXBlLmxvYWRBbmFseXRpY3NfID0gZnVuY3Rpb24oKSB7CisgIHZhciBfZ2FxID0gd2luZG93WydfZ2FxJ10gfHwgW107CisgIF9nYXEucHVzaChbJ19zZXRBY2NvdW50JywgdGhpcy5jb25maWdfLnNldHRpbmdzLmFuYWx5dGljc10pOworICBfZ2FxLnB1c2goWydfdHJhY2tQYWdldmlldyddKTsKKworICAoZnVuY3Rpb24oKSB7CisgICAgdmFyIGdhID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc2NyaXB0Jyk7IGdhLnR5cGUgPSAndGV4dC9qYXZhc2NyaXB0JzsgZ2EuYXN5bmMgPSB0cnVlOworICAgIGdhLnNyYyA9ICgnaHR0cHM6JyA9PSBkb2N1bWVudC5sb2NhdGlvbi5wcm90b2NvbCA/ICdodHRwczovL3NzbCcgOiAnaHR0cDovL3d3dycpICsgJy5nb29nbGUtYW5hbHl0aWNzLmNvbS9nYS5qcyc7CisgICAgdmFyIHMgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnc2NyaXB0JylbMF07IHMucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoZ2EsIHMpOworICB9KSgpOworfTsKKworCisvLyBQb2x5ZmlsbCBtaXNzaW5nIEFQSXMgKGlmIHdlIG5lZWQgdG8pLCB0aGVuIGNyZWF0ZSB0aGUgc2xpZGUgZGVjay4KKy8vIGlPUyA8IDUgbmVlZHMgY2xhc3NMaXN0LCBkYXRhc2V0LCBhbmQgd2luZG93Lm1hdGNoTWVkaWEuIE1vZGVybml6ciBjb250YWlucworLy8gdGhlIGxhc3Qgb25lLgorKGZ1bmN0aW9uKCkgeworICBNb2Rlcm5penIubG9hZCh7CisgICAgdGVzdDogISFkb2N1bWVudC5ib2R5LmNsYXNzTGlzdCAmJiAhIWRvY3VtZW50LmJvZHkuZGF0YXNldCwKKyAgICBub3BlOiBbJ2pzL3BvbHlmaWxscy9jbGFzc0xpc3QubWluLmpzJywgJ2pzL3BvbHlmaWxscy9kYXRhc2V0Lm1pbi5qcyddLAorICAgIGNvbXBsZXRlOiBmdW5jdGlvbigpIHsKKyAgICAgIHdpbmRvdy5zbGlkZWRlY2sgPSBuZXcgU2xpZGVEZWNrKCk7CisgICAgfQorICB9KTsKK30pKCk7CmRpZmYgLS1naXQgYS9wYWdlcy90cmFuc2NyaXB0cy8yMDEzX0VjbGlwc2VDb25GcmFuY2UvanMvc2xpZGVzLmpzIGIvcGFnZXMvdHJhbnNjcmlwdHMvMjAxM19FY2xpcHNlQ29uRnJhbmNlL2pzL3NsaWRlcy5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZjYzMDZlCi0tLSAvZGV2L251bGwKKysrIGIvcGFnZXMvdHJhbnNjcmlwdHMvMjAxM19FY2xpcHNlQ29uRnJhbmNlL2pzL3NsaWRlcy5qcwpAQCAtMCwwICsxLDUgQEAKK3JlcXVpcmUoWydvcmRlciEuLi9zbGlkZV9jb25maWcnLCAnb3JkZXIhbW9kZXJuaXpyLmN1c3RvbS40NTM5NCcsCisgICAgICAgICAnb3JkZXIhcHJldHRpZnkvcHJldHRpZnknLCAnb3JkZXIhaGFtbWVyJywgJ29yZGVyIXNsaWRlLWNvbnRyb2xsZXInLAorICAgICAgICAgJ29yZGVyIXNsaWRlLWRlY2snXSwgZnVuY3Rpb24oc29tZU1vZHVsZSkgeworCit9KTsKZGlmZiAtLWdpdCBhL3BhZ2VzL3RyYW5zY3JpcHRzLzIwMTNfRWNsaXBzZUNvbkZyYW5jZS9zY3JpcHRzL21kL1JFQURNRS5tZCBiL3BhZ2VzL3RyYW5zY3JpcHRzLzIwMTNfRWNsaXBzZUNvbkZyYW5jZS9zY3JpcHRzL21kL1JFQURNRS5tZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMzZlNDY1Ci0tLSAvZGV2L251bGwKKysrIGIvcGFnZXMvdHJhbnNjcmlwdHMvMjAxM19FY2xpcHNlQ29uRnJhbmNlL3NjcmlwdHMvbWQvUkVBRE1FLm1kCkBAIC0wLDAgKzEsNSBAQAorV2FudCB0byB1c2UgbWFya2Rvd24gaW5zdGVhZD8KKworYHB5dGhvbiByZW5kZXIucHlgIGNhbiBkbyB0aGF0IGZvciB5b3UuCisKK0RlcGVuZGVuY2llczogamluamEyLCBtYXJrZG93bi4KZGlmZiAtLWdpdCBhL3BhZ2VzL3RyYW5zY3JpcHRzLzIwMTNfRWNsaXBzZUNvbkZyYW5jZS9zY3JpcHRzL21kL2Jhc2UuaHRtbCBiL3BhZ2VzL3RyYW5zY3JpcHRzLzIwMTNfRWNsaXBzZUNvbkZyYW5jZS9zY3JpcHRzL21kL2Jhc2UuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNDY5ODA2Ci0tLSAvZGV2L251bGwKKysrIGIvcGFnZXMvdHJhbnNjcmlwdHMvMjAxM19FY2xpcHNlQ29uRnJhbmNlL3NjcmlwdHMvbWQvYmFzZS5odG1sCkBAIC0wLDAgKzEsNjYgQEAKKzwhLS0KK0dvb2dsZSBJTyAyMDEyIEhUTUw1IFNsaWRlIFRlbXBsYXRlCisKK0F1dGhvcnM6IEVyaWMgQmlkZWxtYW4gPGViaWRlbEBnbWFpbC5jb20+CisgICAgICAgICBMdWtlIE1haGUgPGx1a2VtQGdvb2dsZS5jb20+CisKK1VSTDogaHR0cHM6Ly9jb2RlLmdvb2dsZS5jb20vcC9pby0yMDEyLXNsaWRlcworLS0+Cis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+CisgIDx0aXRsZT5Hb29nbGUgSU8gMjAxMjwvdGl0bGU+CisgIDxtZXRhIGNoYXJzZXQ9InV0Zi04Ij4KKyAgPG1ldGEgaHR0cC1lcXVpdj0iWC1VQS1Db21wYXRpYmxlIiBjb250ZW50PSJjaHJvbWU9MSI+CisgIDwhLS08bWV0YSBuYW1lPSJ2aWV3cG9ydCIgY29udGVudD0id2lkdGg9ZGV2aWNlLXdpZHRoLCBpbml0aWFsLXNjYWxlPTEuMCwgbWluaW11bS1zY2FsZT0xLjAiPi0tPgorICA8IS0tPG1ldGEgbmFtZT0idmlld3BvcnQiIGNvbnRlbnQ9IndpZHRoPWRldmljZS13aWR0aCwgaW5pdGlhbC1zY2FsZT0xLjAiPi0tPgorICA8IS0tVGhpcyBvbmUgc2VlbXMgdG8gd29yayBhbGwgdGhlIHRpbWUsIGJ1dCByZWFsbHkgc21hbGwgb24gaXBhZC0tPgorICA8IS0tPG1ldGEgbmFtZT0idmlld3BvcnQiIGNvbnRlbnQ9ImluaXRpYWwtc2NhbGU9MC40Ij4tLT4KKyAgPG1ldGEgbmFtZT0iYXBwbGUtbW9iaWxlLXdlYi1hcHAtY2FwYWJsZSIgY29udGVudD0ieWVzIj4KKyAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBtZWRpYT0iYWxsIiBocmVmPSJ0aGVtZS9jc3MvZGVmYXVsdC5jc3MiPgorICA8bGluayByZWw9InN0eWxlc2hlZXQiIG1lZGlhPSJvbmx5IHNjcmVlbiBhbmQgKG1heC1kZXZpY2Utd2lkdGg6IDQ4MHB4KSIgaHJlZj0idGhlbWUvY3NzL3Bob25lLmNzcyI+CisgIDxiYXNlIHRhcmdldD0iX2JsYW5rIj4gPCEtLSBUaGlzIGFtYXppbmduZXNzIG9wZW5zIGFsbCBsaW5rcyBpbiBhIG5ldyB0YWIuIC0tPgorICA8c2NyaXB0IGRhdGEtbWFpbj0ianMvc2xpZGVzIiBzcmM9ImpzL3JlcXVpcmUtMS4wLjgubWluLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5IHN0eWxlPSJvcGFjaXR5OiAwIj4KKworPHNsaWRlcyBjbGFzcz0ibGF5b3V0LXdpZGVzY3JlZW4iPgorCis8c2xpZGUgY2xhc3M9ImxvZ29zbGlkZSBub2JhY2tncm91bmQiPgorICA8YXJ0aWNsZSBjbGFzcz0iZmxleGJveCB2Y2VudGVyIj4KKyAgICA8c3Bhbj48aW1nIHNyYz0iaW1hZ2VzL2dvb2dsZV9kZXZlbG9wZXJzX2xvZ28ucG5nIj48L3NwYW4+CisgIDwvYXJ0aWNsZT4KKzwvc2xpZGU+CisKKzxzbGlkZSBjbGFzcz0idGl0bGUtc2xpZGUgc2VndWUgbm9iYWNrZ3JvdW5kIj4KKyAgPGFzaWRlIGNsYXNzPSJnZGJhciI+PGltZyBzcmM9ImltYWdlcy9nb29nbGVfZGV2ZWxvcGVyc19pY29uXzEyOC5wbmciPjwvYXNpZGU+CisgIDwhLS0gVGhlIGNvbnRlbnQgb2YgdGhpcyBoZ3JvdXAgaXMgcmVwbGFjZWQgcHJvZ3JhbW1hdGljYWxseSB0aHJvdWdoIHRoZSBzbGlkZV9jb25maWcuanNvbi4gLS0+CisgIDxoZ3JvdXAgY2xhc3M9ImF1dG8tZmFkZWluIj4KKyAgICA8aDEgZGF0YS1jb25maWctdGl0bGU+PCEtLSBwb3B1bGF0ZWQgZnJvbSBzbGlkZV9jb25maWcuanNvbiAtLT48L2gxPgorICAgIDxoMiBkYXRhLWNvbmZpZy1zdWJ0aXRsZT48IS0tIHBvcHVsYXRlZCBmcm9tIHNsaWRlX2NvbmZpZy5qc29uIC0tPjwvaDI+CisgICAgPHAgZGF0YS1jb25maWctcHJlc2VudGVyPjwhLS0gcG9wdWxhdGVkIGZyb20gc2xpZGVfY29uZmlnLmpzb24gLS0+PC9wPgorICA8L2hncm91cD4KKzwvc2xpZGU+CisKK3slIGZvciBzbGlkZSBpbiBzbGlkZXMgJX0KKzxzbGlkZSBjbGFzcz0ie3sgc2xpZGUuY2xhc3MgfX0iPgorICA8aGdyb3VwPgorICAgIDxoMT57eyBzbGlkZS5oMSB9fTwvaDE+CisgICAgPGgyPnt7IHNsaWRlLnRpdGxlIH19PC9oMj4KKyAgPC9oZ3JvdXA+CisgIDxhcnRpY2xlPgorICB7eyBzbGlkZS5jb250ZW50IH19CisgIDwvYXJ0aWNsZT4KKzwvc2xpZGU+Cit7JSBlbmRmb3IgJX0KKworPHNsaWRlIGNsYXNzPSJiYWNrZHJvcCI+PC9zbGlkZT4KKworPC9zbGlkZXM+CisKKzwhLS1baWYgSUVdPgorICA8c2NyaXB0IHNyYz0iaHR0cDovL2FqYXguZ29vZ2xlYXBpcy5jb20vYWpheC9saWJzL2Nocm9tZS1mcmFtZS8xL0NGSW5zdGFsbC5taW4uanMiPjwvc2NyaXB0PgorICA8c2NyaXB0PkNGSW5zdGFsbC5jaGVjayh7bW9kZTogJ292ZXJsYXknfSk7PC9zY3JpcHQ+Cis8IVtlbmRpZl0tLT4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL3BhZ2VzL3RyYW5zY3JpcHRzLzIwMTNfRWNsaXBzZUNvbkZyYW5jZS9zY3JpcHRzL21kL3JlbmRlci5weSBiL3BhZ2VzL3RyYW5zY3JpcHRzLzIwMTNfRWNsaXBzZUNvbkZyYW5jZS9zY3JpcHRzL21kL3JlbmRlci5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNjM0ZWEwCi0tLSAvZGV2L251bGwKKysrIGIvcGFnZXMvdHJhbnNjcmlwdHMvMjAxM19FY2xpcHNlQ29uRnJhbmNlL3NjcmlwdHMvbWQvcmVuZGVyLnB5CkBAIC0wLDAgKzEsNTMgQEAKKyMhL29wdC9sb2NhbC9MaWJyYXJ5L0ZyYW1ld29ya3MvUHl0aG9uLmZyYW1ld29yay9WZXJzaW9ucy8yLjcvYmluL3B5dGhvbgoraW1wb3J0IGNvZGVjcworaW1wb3J0IHJlCitpbXBvcnQgamluamEyCitpbXBvcnQgbWFya2Rvd24KKworZGVmIHByb2Nlc3Nfc2xpZGVzKCk6CisgIHdpdGggY29kZWNzLm9wZW4oJy4uL3ByZXNlbnRhdGlvbi5odG1sJywgJ3cnLCBlbmNvZGluZz0ndXRmOCcpIGFzIG91dGZpbGU6CisgICAgbWQgPSBjb2RlY3Mub3Blbignc2xpZGVzLm1kJywgZW5jb2Rpbmc9J3V0ZjgnKS5yZWFkKCkKKyAgICBtZF9zbGlkZXMgPSBtZC5zcGxpdCgnXG4tLS1cbicpCisgICAgcHJpbnQgbGVuKG1kX3NsaWRlcykKKworICAgIHNsaWRlcyA9IFtdCisgICAgIyBQcm9jZXNzIGVhY2ggc2xpZGUgc2VwYXJhdGVseS4KKyAgICBmb3IgbWRfc2xpZGUgaW4gbWRfc2xpZGVzOgorICAgICAgc2xpZGUgPSB7fQorICAgICAgc2VjdGlvbnMgPSBtZF9zbGlkZS5zcGxpdCgnXG5cbicpCisgICAgICAjIEV4dHJhY3QgbWV0YWRhdGEgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgc2xpZGUgKGxvb2sgZm9yIGtleTogdmFsdWUpCisgICAgICAjIHBhaXJzLgorICAgICAgbWV0YWRhdGFfc2VjdGlvbiA9IHNlY3Rpb25zWzBdCisgICAgICBtZXRhZGF0YSA9IHBhcnNlX21ldGFkYXRhKG1ldGFkYXRhX3NlY3Rpb24pCisgICAgICBzbGlkZS51cGRhdGUobWV0YWRhdGEpCisgICAgICByZW1haW5kZXJfaW5kZXggPSBtZXRhZGF0YSBhbmQgMSBvciAwCisgICAgICAjIEdldCB0aGUgY29udGVudCBmcm9tIHRoZSByZXN0IG9mIHRoZSBzbGlkZS4KKyAgICAgIGNvbnRlbnRfc2VjdGlvbiA9ICdcblxuJy5qb2luKHNlY3Rpb25zW3JlbWFpbmRlcl9pbmRleDpdKQorICAgICAgaHRtbCA9IG1hcmtkb3duLm1hcmtkb3duKGNvbnRlbnRfc2VjdGlvbikKKyAgICAgIHNsaWRlWydjb250ZW50J10gPSBwb3N0cHJvY2Vzc19odG1sKGh0bWwsIG1hcmtkb3duKQorCisgICAgICBzbGlkZXMuYXBwZW5kKHNsaWRlKQorCisgICAgdGVtcGxhdGUgPSBqaW5qYTIuVGVtcGxhdGUob3BlbignYmFzZS5odG1sJykucmVhZCgpKQorCisgICAgb3V0ZmlsZS53cml0ZSh0ZW1wbGF0ZS5yZW5kZXIobG9jYWxzKCkpKQorCitkZWYgcGFyc2VfbWV0YWRhdGEoc2VjdGlvbik6CisgICIiIkdpdmVuIHRoZSBmaXJzdCBwYXJ0IG9mIGEgc2xpZGUsIHJldHVybnMgbWV0YWRhdGEgYXNzb2NpYXRlZCB3aXRoIGl0LiIiIgorICBtZXRhZGF0YSA9IHt9CisgIG1ldGFkYXRhX2xpbmVzID0gc2VjdGlvbi5zcGxpdCgnXG4nKQorICBmb3IgbGluZSBpbiBtZXRhZGF0YV9saW5lczoKKyAgICBjb2xvbl9pbmRleCA9IGxpbmUuZmluZCgnOicpCisgICAgaWYgY29sb25faW5kZXggIT0gLTE6CisgICAgICBrZXkgPSBsaW5lWzpjb2xvbl9pbmRleF0uc3RyaXAoKQorICAgICAgdmFsID0gbGluZVtjb2xvbl9pbmRleCArIDE6XS5zdHJpcCgpCisgICAgICBtZXRhZGF0YVtrZXldID0gdmFsCisKKyAgcmV0dXJuIG1ldGFkYXRhCisKK2RlZiBwb3N0cHJvY2Vzc19odG1sKGh0bWwsIG1ldGFkYXRhKToKKyAgIiIiUmV0dXJucyBwcm9jZXNzZWQgSFRNTCB0byBmaXQgaW50byB0aGUgc2xpZGUgdGVtcGxhdGUgZm9ybWF0LiIiIgorICByZXR1cm4gaHRtbAorCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICBwcm9jZXNzX3NsaWRlcygpCmRpZmYgLS1naXQgYS9wYWdlcy90cmFuc2NyaXB0cy8yMDEzX0VjbGlwc2VDb25GcmFuY2Uvc2NyaXB0cy9tZC9zbGlkZXMubWQgYi9wYWdlcy90cmFuc2NyaXB0cy8yMDEzX0VjbGlwc2VDb25GcmFuY2Uvc2NyaXB0cy9tZC9zbGlkZXMubWQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDY0YjhkYgotLS0gL2Rldi9udWxsCisrKyBiL3BhZ2VzL3RyYW5zY3JpcHRzLzIwMTNfRWNsaXBzZUNvbkZyYW5jZS9zY3JpcHRzL21kL3NsaWRlcy5tZApAQCAtMCwwICsxLDY0IEBACit0aXRsZTogU2xpZGUgVGl0bGUKK2NsYXNzOiBpbWFnZQorCishW01vYmlsZSB2cyBkZXNrdG9wIHVzZXJzXShpbWFnZS5wbmcpCisKKy0tLQorCit0aXRsZTogQWdlbmRhCitjbGFzczogYmlnCisKK1RoaW5ncyB3ZSdsbCBjb3ZlcjoKKworLSBCdWxsZXQxCistIEJ1bGxldDIKKy0gQnVsbGV0MworCistLS0KKwordGl0bGU6IFRvZGF5CitjbGFzczogbm9iYWNrZ3JvdW5kIGZpbGwKKworIVtNYW55IGtpbmRzIG9mIGRldmljZXMuXShpbWFnZS5wbmcpCisKKzxmb290ZXIgY2xhc3M9InNvdXJjZSI+c291cmNlOiBwbGFjZSBzb3VyY2UgaW5mbyBoZXJlPC9mb290ZXI+CisKKy0tLQorCitoMTogQmlnIFRpdGxlIFNsaWRlCitjbGFzczogdGl0bGUtc2xpZGUKKworLS0tCisKK3RpdGxlOiBDb2RlIEV4YW1wbGUKKworTWVkaWEgUXVlcmllcyBhcmUgc3dlZXQ6CisKKzxwcmUgY2xhc3M9InByZXR0eXByaW50IiBkYXRhLWxhbmc9ImNzcyI+CitAbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiA2NDBweCkgeworICAjc2lkZWJhciB7IGRpc3BsYXk6IG5vbmU7IH0KK30KKzwvcHJlPgorCistLS0KKwordGl0bGU6IE9uY2UgbW9yZSwgd2l0aCBKYXZhU2NyaXB0CisKKzxwcmUgY2xhc3M9InByZXR0eXByaW50IiBkYXRhLWxhbmc9ImphdmFzY3JpcHQiPgorZnVuY3Rpb24gaXNTbWFsbCgpIHsKKyAgcmV0dXJuIHdpbmRvdy5tYXRjaE1lZGlhKCIobWluLWRldmljZS13aWR0aDogPz8/KSIpLm1hdGNoZXM7Cit9CisKK2Z1bmN0aW9uIGhhc1RvdWNoKCkgeworICByZXR1cm4gTW9kZXJuaXpyLnRvdWNoOworfQorCitmdW5jdGlvbiBkZXRlY3RGb3JtRmFjdG9yKCkgeworICB2YXIgZGV2aWNlID0gREVTS1RPUDsKKyAgaWYgKGhhc1RvdWNoKCkpIHsKKyAgICBkZXZpY2UgPSBpc1NtYWxsKCkgPyBQSE9ORSA6IFRBQkxFVDsKKyAgfQorICByZXR1cm4gZGV2aWNlOworfQorPC9wcmU+CisKZGlmZiAtLWdpdCBhL3BhZ2VzL3RyYW5zY3JpcHRzLzIwMTNfRWNsaXBzZUNvbkZyYW5jZS9zZXJ2ZS5zaCBiL3BhZ2VzL3RyYW5zY3JpcHRzLzIwMTNfRWNsaXBzZUNvbkZyYW5jZS9zZXJ2ZS5zaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMjY5MmZlCi0tLSAvZGV2L251bGwKKysrIGIvcGFnZXMvdHJhbnNjcmlwdHMvMjAxM19FY2xpcHNlQ29uRnJhbmNlL3NlcnZlLnNoCkBAIC0wLDAgKzEsMjIgQEAKKyMhL2Jpbi9iYXNoCisjCisjIFN0YXJ0cyBhIGJhc2ljIHdlYiBzZXJ2ZXIgb24gdGhlIHBvcnQgc3BlY2lmaWVkLgorIyAKKyMgLi9zZXJ2ZS5zaCAzMDAwIC0+IGh0dHA6Ly9sb2NhbGhvc3Q6MzAwMAorIworIyBDb3B5cmlnaHQgMjAxMiBFcmljIEJpZGVsbWFuIDxlYmlkZWxAZ21haWwuY29tPgorCitwb3J0PSQxCitpZiBbICQjICAtbmUgIDEgXQordGhlbgorICBwb3J0PTgwMDAKK2ZpCisKK2lmIFsgJCh1bmFtZSAtcykgPT0gIkRhcndpbiIgXQordGhlbgorICBvcGVuPW9wZW4KK2Vsc2UKKyAgb3Blbj14ZGctb3BlbgorZmkKKworJG9wZW4gaHR0cDovL2xvY2FsaG9zdDokcG9ydC90ZW1wbGF0ZS5odG1sICYmIHB5dGhvbiAtbSBTaW1wbGVIVFRQU2VydmVyICRwb3J0OwpkaWZmIC0tZ2l0IGEvcGFnZXMvdHJhbnNjcmlwdHMvMjAxM19FY2xpcHNlQ29uRnJhbmNlL3NsaWRlX2NvbmZpZy5qcyBiL3BhZ2VzL3RyYW5zY3JpcHRzLzIwMTNfRWNsaXBzZUNvbkZyYW5jZS9zbGlkZV9jb25maWcuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGYxODhmNwotLS0gL2Rldi9udWxsCisrKyBiL3BhZ2VzL3RyYW5zY3JpcHRzLzIwMTNfRWNsaXBzZUNvbkZyYW5jZS9zbGlkZV9jb25maWcuanMKQEAgLTAsMCArMSwzNSBAQAordmFyIFNMSURFX0NPTkZJRyA9IHsKKyAgLy8gU2xpZGUgc2V0dGluZ3MKKyAgc2V0dGluZ3M6IHsKKyAgICB0aXRsZTogJzxzcGFuIHN0eWxlPSJmb250LXNpemU6ODBweCI+V1RGTSEmbmJzcDs8L3NwYW4+PGJyLz48c3BhbiBzdHlsZT0iZm9udC1zaXplOjUwcHgiPldyaXRlIFRoZSBGcmllbmRseSBNYW51YWwgd2l0aCBNeWx5biBJbnRlbnQmbmJzcDs8L3NwYW4+JywKKyAgICB1c2VCdWlsZHM6IHRydWUsIC8vIERlZmF1bHQ6IHRydWUuIEZhbHNlIHdpbGwgdHVybiBvZmYgc2xpZGUgYW5pbWF0aW9uIGJ1aWxkcy4KKyAgICB1c2VQcmV0dGlmeTogdHJ1ZSwgLy8gRGVmYXVsdDogdHJ1ZQorICAgIGVuYWJsZVNsaWRlQXJlYXM6IHRydWUsIC8vIERlZmF1bHQ6IHRydWUuIEZhbHNlIHR1cm5zIG9mZiB0aGUgY2xpY2sgYXJlYXMgb24gZWl0aGVyIHNsaWRlIG9mIHRoZSBzbGlkZXMuCisgICAgZW5hYmxlVG91Y2g6IHRydWUsIC8vIERlZmF1bHQ6IHRydWUuIElmIHRvdWNoIHN1cHBvcnQgc2hvdWxkIGVuYWJsZWQuIE5vdGU6IHRoZSBkZXZpY2UgbXVzdCBzdXBwb3J0IHRvdWNoLgorICAgIC8vYW5hbHl0aWNzOiAnVUEtWFhYWFhYWFgtMScsIC8vIFRPRE86IFVzaW5nIHRoaXMgYnJlYWtzIEdBIGZvciBzb21lIHJlYXNvbiAocHJvYmFibHkgcmVxdWlyZWpzKS4gVXBkYXRlIHlvdXIgdHJhY2tpbmcgY29kZSBpbiB0ZW1wbGF0ZS5odG1sIGluc3RlYWQuCisgICAgZmF2SWNvbjogJ2ltYWdlcy9nb29nbGVfZGV2ZWxvcGVyc19sb2dvX3RpbnkucG5nJywKKyAgICBmb250czogWworICAgICAgJ09wZW4gU2FuczpyZWd1bGFyLHNlbWlib2xkLGl0YWxpYyxpdGFsaWNzZW1pYm9sZCcsCisgICAgICAnSW5jb25zb2xhdGEnCisgICAgXSwKKyAgICAvL3RoZW1lOiBbJ215dGhlbWUnXSwgLy8gQWRkIHlvdXIgb3duIGN1c3RvbSB0aGVtZXMgb3Igc3R5bGVzIGluIC90aGVtZS9jc3MuIExlYXZlIG9mZiB0aGUgLmNzcyBleHRlbnNpb24uCisgIH0sCisKKyAgLy8gQXV0aG9yIGluZm9ybWF0aW9uCisgIHByZXNlbnRlcnM6IFt7CisgICAgbmFtZTogJ0FsZXggTGFnYXJkZSAoTW9yZWwpJywKKyAgICBjb21wYW55OiAnU29mdHdhcmUgRW5naW5lZXIsIE9iZW8nLAorICAgIGdwbHVzOiAnaHR0cHM6Ly9wbHVzLmdvb2dsZS5jb20vMTE3MDMwMTczNDU4ODc1NTY5MDY2JywKKyAgICB0d2l0dGVyOiAnQHlvdXJoYW5kbGUnLAorICAgIHd3dzogJ2h0dHA6Ly93d3cueW91LmNvbScsCisgICAgZ2l0aHViOiAnaHR0cDovL2dpdGh1Yi5jb20veW91JworICB9LyosIHsKKyAgICBuYW1lOiAnU2Vjb25kIE5hbWUnLAorICAgIGNvbXBhbnk6ICdKb2IgVGl0bGUsIEdvb2dsZScsCisgICAgZ3BsdXM6ICdodHRwOi8vcGx1cy5nb29nbGUuY29tLzEyMzQ1Njc4OTAnLAorICAgIHR3aXR0ZXI6ICdAeW91cmhhbmRsZScsCisgICAgd3d3OiAnaHR0cDovL3d3dy55b3UuY29tJywKKyAgICBnaXRodWI6ICdodHRwOi8vZ2l0aHViLmNvbS95b3UnCisgIH0qL10KK307CisKZGlmZiAtLWdpdCBhL3BhZ2VzL3RyYW5zY3JpcHRzLzIwMTNfRWNsaXBzZUNvbkZyYW5jZS90aGVtZS9jc3MvY3VzdG8uY3NzIGIvcGFnZXMvdHJhbnNjcmlwdHMvMjAxM19FY2xpcHNlQ29uRnJhbmNlL3RoZW1lL2Nzcy9jdXN0by5jc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDA2ZWU0MgotLS0gL2Rldi9udWxsCisrKyBiL3BhZ2VzL3RyYW5zY3JpcHRzLzIwMTNfRWNsaXBzZUNvbkZyYW5jZS90aGVtZS9jc3MvY3VzdG8uY3NzCkBAIC0wLDAgKzEsMjEyIEBACitiIHsKKwljb2xvcjojODAwMDAwOworfQorYXJ0aWNsZSB7CisJY29sb3I6IzUxNTE1MTsKKwlmb250LXNpemU6MTE1JTsKK30KKworLnN0cm9rZSB7Cit0ZXh0LXNoYWRvdzogLTFweCAtMXB4IDAgIzAwMCwgMXB4IC0xcHggMCAjMDAwLCAtMXB4IDFweCAwICMwMDAsIDFweCAxcHggMCAjMDAwOworfQorLnJpZ2h0YWxpZ25lZCB7CisJdGV4dC1hbGlnbjpyaWdodDsKK30KKworLm5vQnVsbGV0cyB7CitsaXN0LXN0eWxlOiBub25lOworfQorCisucGFydFRpdGxlIGFzaWRleworCWZpbHRlcjphbHBoYShvcGFjaXR5PTUwKTsKKwktbW96LW9wYWNpdHk6MC41OworCS1raHRtbC1vcGFjaXR5OiAwLjU7CisJb3BhY2l0eTogMC41OworCXotaW5kZXg6MTsKK30KKy5wYXJ0VGl0bGUgaDIgewordGV4dC1zaGFkb3c6IC0xcHggLTFweCAwICMwMDAsIDFweCAtMXB4IDAgIzAwMCwgLTFweCAxcHggMCAjMDAwLCAxcHggMXB4IDAgIzAwMDsKK3Bvc2l0aW9uOiByZWxhdGl2ZTsKK2NvbG9yOndoaXRlOwordG9wOiA4NXB4OworbGVmdDotMjBweDsKK3otaW5kZXg6NTQ7Cit9CisKKy5wYWRkaW5nZXIgeworIG1hcmdpbi1sZWZ0OjEwMHB4OworIHBhZGRpbmctbGVmdDoyMHB4OworIHBhZGRpbmctYm90dG9tOjIwcHg7CisgYmFja2dyb3VuZC1jb2xvcjojRjhGOEY4IDsKKyAtbW96LWJvcmRlci1yYWRpdXM6IDE1cHg7CisgYm9yZGVyLXJhZGl1czogMTVweDsgCisgYm9yZGVyOiAxcHggc29saWQgZ3JleTsKKyBwYWRkaW5nLXJpZ2h0OjIwcHg7Cit9CisucGFkZGluZ2VyIHAgeworZm9udC1zaXplOjgwJTsKK30KKyAgCisuaW50ZW50X2NvbnRlbnQgeworCW1hcmdpbi10b3A6MTVweDsKKwltYXJnaW4tbGVmdCA6IDUwcHg7CisJbWFyZ2luLXJpZ2h0IDogNTBweDsKKwlwYWRkaW5nLWxlZnQgOiA1MHB4OworCXBhZGRpbmctdG9wOjE1cHg7CisJcGFkZGluZy1ib3R0b206MTBweDsKKwliYWNrZ3JvdW5kLWNvbG9yOiNGOEY4RjggOworCWZvbnQtc2l6ZTogMThweDsKKwlib3JkZXI6IDFweCBzb2xpZCBncmV5OworCWNvbG9yOmJsYWNrOworfQorCisuZm9jdXNlZCB7CisJZm9udC1zdHlsZTpib2xkOworCWZvbnQtc2l6ZToyNHB4OworCWNvbG9yOndoaXRlOworCXBhZGRpbmctcmlnaHQ6MTVweDsKKwlwYWRkaW5nLWxlZnQ6MTVweDsKKwliYWNrZ3JvdW5kLWNvbG9yOmdyZXk7CisJIC1tb3otYm9yZGVyLXJhZGl1czogNXB4OworCWJvcmRlci1yYWRpdXM6IDVweDsgCisJYm9yZGVyOjFweCBzb2xpZCBibGFjazsKK30KKworLmdyZXllZCB7CisJY29sb3I6Z3JleTsKKwlmb250LXNpemU6MTRweDsKK30KKworLmdyZXllZCBiIHsKKwljb2xvcjpncmV5OworfQorCisuZ3JleWVkIC5rdyB7CisJY29sb3I6Z3JleTsKK30KKworLmludGVudF9jb250ZW50IGIgeworCWNvbG9yOmJsYWNrOworfQorCisKKy5pbnRlbnRfY29udGVudCBpIHsKKwlmb250LXN0eWxlOml0YWxpYzsKKwlmb250LXNpemU6MTZweDsKK30KKworLmludGVudF9jb250ZW50IC5rdyB7CisJY29sb3I6IzgwMDAwMDsKK30KKworLmludGVudF9zdWJzZWN0aW9uY29udGFpbmVyIHsKKwlwYWRkaW5nLWxlZnQgOiA1MHB4OworfQorCisuaW50ZW50X21vZGVsaW5ndW5pdCB7CisJcGFkZGluZy1sZWZ0IDogMjBweDsKKwltYXJnaW4tcmlnaHQ6NTBweDsKKwlwYWRkaW5nLWJvdHRvbToxMHB4OworCW1hcmdpbi10b3A6MjVweDsKKwlwYWRkaW5nLXRvcDo1cHg7CisJYmFja2dyb3VuZC1jb2xvcjojRDhEOEQ4OworCWJvcmRlcjogMXB4IHNvbGlkIGdyZXk7CisJLW1vei1ib3JkZXItcmFkaXVzOiAxNXB4OworCWJvcmRlci1yYWRpdXM6IDE1cHg7CisJZm9udC1zaXplOiAxOHB4OworCWNvbG9yOmJsYWNrOworfQorLmR1IHsKK2ZvbnQtc2l6ZTogMTZweDsKK30KKworc2xpZGVzID4gc2xpZGUubnV0c2hlbGw6YmVmb3JlIHsKKyAgYmFja2dyb3VuZDogdXJsKC4uLy4uL2ltYWdlcy9JbnRlbnQvSW1hZ2UtSW50ZW50X2xvZ29fY3JvcHBlZC5wbmcpIG5vLXJlcGVhdCAwIDUwJTsKKyAgICAtd2Via2l0LWJhY2tncm91bmQtc2l6ZTogMzBweCAzMHB4OworICAtbW96LWJhY2tncm91bmQtc2l6ZTogMzBweCAzMHB4OworICAtby1iYWNrZ3JvdW5kLXNpemU6IDMwcHggMzBweDsKKyAgYmFja2dyb3VuZC1zaXplOiAzMHB4IDMwcHg7CisgIGNvbnRlbnQ6ICJJbnRlbnQgaW4gYSBudXRzaGVsbCI7Cit9CisKK3NsaWRlcyA+IHNsaWRlLnBhcnQxOmJlZm9yZSB7CisgIGJhY2tncm91bmQ6IHVybCguLi8uLi9pbWFnZXMvSW50ZW50L0ltYWdlLUludGVudF9sb2dvX2Nyb3BwZWQucG5nKSBuby1yZXBlYXQgMCA1MCU7CisgICAgLXdlYmtpdC1iYWNrZ3JvdW5kLXNpemU6IDMwcHggMzBweDsKKyAgLW1vei1iYWNrZ3JvdW5kLXNpemU6IDMwcHggMzBweDsKKyAgLW8tYmFja2dyb3VuZC1zaXplOiAzMHB4IDMwcHg7CisgIGJhY2tncm91bmQtc2l6ZTogMzBweCAzMHB4OworICBjb250ZW50OiAiMS4gRG9jdW1lbnRhdGlvbiBTdWNrcyI7Cit9CisKK3NsaWRlcyA+IHNsaWRlLnBhcnQyOmJlZm9yZSB7CisgIGJhY2tncm91bmQ6IHVybCguLi8uLi9pbWFnZXMvSW50ZW50L0ltYWdlLUludGVudF9sb2dvX2Nyb3BwZWQucG5nKSBuby1yZXBlYXQgMCA1MCU7CisgICAgLXdlYmtpdC1iYWNrZ3JvdW5kLXNpemU6IDMwcHggMzBweDsKKyAgLW1vei1iYWNrZ3JvdW5kLXNpemU6IDMwcHggMzBweDsKKyAgLW8tYmFja2dyb3VuZC1zaXplOiAzMHB4IDMwcHg7CisgIGJhY2tncm91bmQtc2l6ZTogMzBweCAzMHB4OworICBjb250ZW50OiAiMi4gU3luY2hyb25pemUgeW91ciBkb2Mgd2l0aCBJbnRlbnQiOworfQorCitzbGlkZXMgPiBzbGlkZS5wYXJ0MzpiZWZvcmUgeworICBiYWNrZ3JvdW5kOiB1cmwoLi4vLi4vaW1hZ2VzL0ludGVudC9JbWFnZS1JbnRlbnRfbG9nb19jcm9wcGVkLnBuZykgbm8tcmVwZWF0IDAgNTAlOworICAgIC13ZWJraXQtYmFja2dyb3VuZC1zaXplOiAzMHB4IDMwcHg7CisgIC1tb3otYmFja2dyb3VuZC1zaXplOiAzMHB4IDMwcHg7CisgIC1vLWJhY2tncm91bmQtc2l6ZTogMzBweCAzMHB4OworICBiYWNrZ3JvdW5kLXNpemU6IDMwcHggMzBweDsKKyAgY29udGVudDogIjMuIEludGVudCBpbiBBY3Rpb24iOworfQorc2xpZGVzID4gc2xpZGUucGFydDQ6YmVmb3JlIHsKKyAgYmFja2dyb3VuZDogdXJsKC4uLy4uL2ltYWdlcy9JbnRlbnQvSW1hZ2UtSW50ZW50X2xvZ29fY3JvcHBlZC5wbmcpIG5vLXJlcGVhdCAwIDUwJTsKKyAgICAtd2Via2l0LWJhY2tncm91bmQtc2l6ZTogMzBweCAzMHB4OworICAtbW96LWJhY2tncm91bmQtc2l6ZTogMzBweCAzMHB4OworICAtby1iYWNrZ3JvdW5kLXNpemU6IDMwcHggMzBweDsKKyAgYmFja2dyb3VuZC1zaXplOiAzMHB4IDMwcHg7CisgIGNvbnRlbnQ6ICI0LiBDaGVja2luZyBDb25zdHJhaW50cyBTdWNrcyI7Cit9CitzbGlkZXMgPiBzbGlkZS5wYXJ0NTpiZWZvcmUgeworICBiYWNrZ3JvdW5kOiB1cmwoLi4vLi4vaW1hZ2VzL0ludGVudC9jZG8uanBnKSBuby1yZXBlYXQgMCA1MCU7CisgICAgLXdlYmtpdC1iYWNrZ3JvdW5kLXNpemU6IDMwcHggMzBweDsKKyAgLW1vei1iYWNrZ3JvdW5kLXNpemU6IDMwcHggMzBweDsKKyAgLW8tYmFja2dyb3VuZC1zaXplOiAzMHB4IDMwcHg7CisgIGJhY2tncm91bmQtc2l6ZTogMzBweCAzMHB4OworICBjb250ZW50OiAiNS4gRG9jdW1lbnRhdGlvbiBzaGFyaW5nIHN1Y2tzIjsKK30KK3NsaWRlcyA+IHNsaWRlLnBhcnROT05FOmJlZm9yZSB7CisgYmFja2dyb3VuZC1zaXplOiAwcHggMHB4OworIGNvbnRlbnQ6ICIiOworfQorCitzbGlkZXMgPiBzbGlkZS5uZWVkeW91OmJlZm9yZSB7CisgIGJhY2tncm91bmQ6IHVybCguLi8uLi9pbWFnZXMvSW50ZW50L0ltYWdlLUludGVudF9sb2dvX2Nyb3BwZWQucG5nKSBuby1yZXBlYXQgMCA1MCU7CisgICAgLXdlYmtpdC1iYWNrZ3JvdW5kLXNpemU6IDMwcHggMzBweDsKKyAgLW1vei1iYWNrZ3JvdW5kLXNpemU6IDMwcHggMzBweDsKKyAgLW8tYmFja2dyb3VuZC1zaXplOiAzMHB4IDMwcHg7CisgIGJhY2tncm91bmQtc2l6ZTogMzBweCAzMHB4OworICBjb250ZW50OiAiSW50ZW50IG5lZWRzIHlvdSI7Cit9CisKK3NsaWRlcyA+IHNsaWRlLmNvb2tpbmc6YmVmb3JlIHsKKyAgYmFja2dyb3VuZDogdXJsKC4uLy4uL2ltYWdlcy9JbnRlbnQvSW1hZ2UtSW50ZW50X2xvZ29fY3JvcHBlZC5wbmcpIG5vLXJlcGVhdCAwIDUwJTsKKyAgICAtd2Via2l0LWJhY2tncm91bmQtc2l6ZTogMzBweCAzMHB4OworICAtbW96LWJhY2tncm91bmQtc2l6ZTogMzBweCAzMHB4OworICAtby1iYWNrZ3JvdW5kLXNpemU6IDMwcHggMzBweDsKKyAgYmFja2dyb3VuZC1zaXplOiAzMHB4IDMwcHg7CisgIGNvbnRlbnQ6ICJXaGF0J3MgY29va2luZz8iOworfQorc2xpZGVzID4gc2xpZGUudGhyZWVfdGhpbmdzOmJlZm9yZSB7CisgIGJhY2tncm91bmQ6IHVybCguLi8uLi9pbWFnZXMvSW50ZW50L0ltYWdlLUludGVudF9sb2dvX2Nyb3BwZWQucG5nKSBuby1yZXBlYXQgMCA1MCU7CisgICAgLXdlYmtpdC1iYWNrZ3JvdW5kLXNpemU6IDMwcHggMzBweDsKKyAgLW1vei1iYWNrZ3JvdW5kLXNpemU6IDMwcHggMzBweDsKKyAgLW8tYmFja2dyb3VuZC1zaXplOiAzMHB4IDMwcHg7CisgIGJhY2tncm91bmQtc2l6ZTogMzBweCAzMHB4OworICBjb250ZW50OiAiVGhlIDMgdGhpbmdzIHRvIHJlbWVtYmVyIjsKK30KKworc2xpZGVzID4gc2xpZGUudGhhbmtzOmJlZm9yZSB7CisgIGJhY2tncm91bmQ6IHVybCguLi8uLi9pbWFnZXMvSW50ZW50L0ltYWdlLUludGVudF9sb2dvX2Nyb3BwZWQucG5nKSBuby1yZXBlYXQgMCA1MCU7CisgICAgLXdlYmtpdC1iYWNrZ3JvdW5kLXNpemU6IDMwcHggMzBweDsKKyAgLW1vei1iYWNrZ3JvdW5kLXNpemU6IDMwcHggMzBweDsKKyAgLW8tYmFja2dyb3VuZC1zaXplOiAzMHB4IDMwcHg7CisgIGJhY2tncm91bmQtc2l6ZTogMzBweCAzMHB4OworICBjb250ZW50OiAiVGhhbmsgWW91ISI7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvcGFnZXMvdHJhbnNjcmlwdHMvMjAxM19FY2xpcHNlQ29uRnJhbmNlL3RoZW1lL2Nzcy9kZWZhdWx0LmNzcyBiL3BhZ2VzL3RyYW5zY3JpcHRzLzIwMTNfRWNsaXBzZUNvbkZyYW5jZS90aGVtZS9jc3MvZGVmYXVsdC5jc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGQ1NTI4ZAotLS0gL2Rldi9udWxsCisrKyBiL3BhZ2VzL3RyYW5zY3JpcHRzLzIwMTNfRWNsaXBzZUNvbkZyYW5jZS90aGVtZS9jc3MvZGVmYXVsdC5jc3MKQEAgLTAsMCArMSwxNDkwIEBACisvKiBsaW5lIDE3LCAuLi8uLi8uLi8uLi8uLi8uLi9MaWJyYXJ5L1J1YnkvR2Vtcy8xLjgvZ2Vtcy9jb21wYXNzLTAuMTIuMS9mcmFtZXdvcmtzL2NvbXBhc3Mvc3R5bGVzaGVldHMvY29tcGFzcy9yZXNldC9fdXRpbGl0aWVzLnNjc3MgKi8KK2h0bWwsIGJvZHksIGRpdiwgc3BhbiwgYXBwbGV0LCBvYmplY3QsIGlmcmFtZSwKK2gxLCBoMiwgaDMsIGg0LCBoNSwgaDYsIHAsIGJsb2NrcXVvdGUsIHByZSwKK2EsIGFiYnIsIGFjcm9ueW0sIGFkZHJlc3MsIGJpZywgY2l0ZSwgY29kZSwKK2RlbCwgZGZuLCBlbSwgaW1nLCBpbnMsIGtiZCwgcSwgcywgc2FtcCwKK3NtYWxsLCBzdHJpa2UsIHN0cm9uZywgc3ViLCBzdXAsIHR0LCB2YXIsCitiLCB1LCBpLCBjZW50ZXIsCitkbCwgZHQsIGRkLCBvbCwgdWwsIGxpLAorZmllbGRzZXQsIGZvcm0sIGxhYmVsLCBsZWdlbmQsCit0YWJsZSwgY2FwdGlvbiwgdGJvZHksIHRmb290LCB0aGVhZCwgdHIsIHRoLCB0ZCwKK2FydGljbGUsIGFzaWRlLCBjYW52YXMsIGRldGFpbHMsIGVtYmVkLAorZmlndXJlLCBmaWdjYXB0aW9uLCBmb290ZXIsIGhlYWRlciwgaGdyb3VwLAorbWVudSwgbmF2LCBvdXRwdXQsIHJ1YnksIHNlY3Rpb24sIHN1bW1hcnksCit0aW1lLCBtYXJrLCBhdWRpbywgdmlkZW8geworICBtYXJnaW46IDA7CisgIHBhZGRpbmc6IDA7CisgIGJvcmRlcjogMDsKKyAgZm9udC1zaXplOiAxMDAlOworICBmb250OiBpbmhlcml0OworICB2ZXJ0aWNhbC1hbGlnbjogYmFzZWxpbmU7Cit9CisKKy8qIGxpbmUgMjAsIC4uLy4uLy4uLy4uLy4uLy4uL0xpYnJhcnkvUnVieS9HZW1zLzEuOC9nZW1zL2NvbXBhc3MtMC4xMi4xL2ZyYW1ld29ya3MvY29tcGFzcy9zdHlsZXNoZWV0cy9jb21wYXNzL3Jlc2V0L191dGlsaXRpZXMuc2NzcyAqLworYm9keSB7CisgIGxpbmUtaGVpZ2h0OiAxOworfQorCisvKiBsaW5lIDIyLCAuLi8uLi8uLi8uLi8uLi8uLi9MaWJyYXJ5L1J1YnkvR2Vtcy8xLjgvZ2Vtcy9jb21wYXNzLTAuMTIuMS9mcmFtZXdvcmtzL2NvbXBhc3Mvc3R5bGVzaGVldHMvY29tcGFzcy9yZXNldC9fdXRpbGl0aWVzLnNjc3MgKi8KK29sLCB1bCB7CisgIGxpc3Qtc3R5bGU6IG5vbmU7Cit9CisKKy8qIGxpbmUgMjQsIC4uLy4uLy4uLy4uLy4uLy4uL0xpYnJhcnkvUnVieS9HZW1zLzEuOC9nZW1zL2NvbXBhc3MtMC4xMi4xL2ZyYW1ld29ya3MvY29tcGFzcy9zdHlsZXNoZWV0cy9jb21wYXNzL3Jlc2V0L191dGlsaXRpZXMuc2NzcyAqLwordGFibGUgeworICBib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOworICBib3JkZXItc3BhY2luZzogMDsKK30KKworLyogbGluZSAyNiwgLi4vLi4vLi4vLi4vLi4vLi4vTGlicmFyeS9SdWJ5L0dlbXMvMS44L2dlbXMvY29tcGFzcy0wLjEyLjEvZnJhbWV3b3Jrcy9jb21wYXNzL3N0eWxlc2hlZXRzL2NvbXBhc3MvcmVzZXQvX3V0aWxpdGllcy5zY3NzICovCitjYXB0aW9uLCB0aCwgdGQgeworICB0ZXh0LWFsaWduOiBsZWZ0OworICBmb250LXdlaWdodDogbm9ybWFsOworICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOworfQorCisvKiBsaW5lIDI4LCAuLi8uLi8uLi8uLi8uLi8uLi9MaWJyYXJ5L1J1YnkvR2Vtcy8xLjgvZ2Vtcy9jb21wYXNzLTAuMTIuMS9mcmFtZXdvcmtzL2NvbXBhc3Mvc3R5bGVzaGVldHMvY29tcGFzcy9yZXNldC9fdXRpbGl0aWVzLnNjc3MgKi8KK3EsIGJsb2NrcXVvdGUgeworICBxdW90ZXM6IG5vbmU7Cit9CisvKiBsaW5lIDEwMSwgLi4vLi4vLi4vLi4vLi4vLi4vTGlicmFyeS9SdWJ5L0dlbXMvMS44L2dlbXMvY29tcGFzcy0wLjEyLjEvZnJhbWV3b3Jrcy9jb21wYXNzL3N0eWxlc2hlZXRzL2NvbXBhc3MvcmVzZXQvX3V0aWxpdGllcy5zY3NzICovCitxOmJlZm9yZSwgcTphZnRlciwgYmxvY2txdW90ZTpiZWZvcmUsIGJsb2NrcXVvdGU6YWZ0ZXIgeworICBjb250ZW50OiAiIjsKKyAgY29udGVudDogbm9uZTsKK30KKworLyogbGluZSAzMCwgLi4vLi4vLi4vLi4vLi4vLi4vTGlicmFyeS9SdWJ5L0dlbXMvMS44L2dlbXMvY29tcGFzcy0wLjEyLjEvZnJhbWV3b3Jrcy9jb21wYXNzL3N0eWxlc2hlZXRzL2NvbXBhc3MvcmVzZXQvX3V0aWxpdGllcy5zY3NzICovCithIGltZyB7CisgIGJvcmRlcjogbm9uZTsKK30KKworLyogbGluZSAxMTQsIC4uLy4uLy4uLy4uLy4uLy4uL0xpYnJhcnkvUnVieS9HZW1zLzEuOC9nZW1zL2NvbXBhc3MtMC4xMi4xL2ZyYW1ld29ya3MvY29tcGFzcy9zdHlsZXNoZWV0cy9jb21wYXNzL3Jlc2V0L191dGlsaXRpZXMuc2NzcyAqLworYXJ0aWNsZSwgYXNpZGUsIGRldGFpbHMsIGZpZ2NhcHRpb24sIGZpZ3VyZSwgZm9vdGVyLCBoZWFkZXIsIGhncm91cCwgbWVudSwgbmF2LCBzZWN0aW9uLCBzdW1tYXJ5IHsKKyAgZGlzcGxheTogYmxvY2s7Cit9CisKKy8qKgorICogQmFzZSBTbGlkZURlY2sgU3R5bGVzCisgKi8KKy8qIGxpbmUgNDgsIC4uL3Njc3MvX2Jhc2Uuc2NzcyAqLworaHRtbCB7CisgIGhlaWdodDogMTAwJTsKKyAgb3ZlcmZsb3c6IGhpZGRlbjsKK30KKworLyogbGluZSA1MywgLi4vc2Nzcy9fYmFzZS5zY3NzICovCitib2R5IHsKKyAgbWFyZ2luOiAwOworICBwYWRkaW5nOiAwOworICBvcGFjaXR5OiAwOworICBoZWlnaHQ6IDEwMCU7CisgIG1pbi1oZWlnaHQ6IDc0MHB4OworICB3aWR0aDogMTAwJTsKKyAgb3ZlcmZsb3c6IGhpZGRlbjsKKyAgY29sb3I6ICNmZmY7CisgIC13ZWJraXQtZm9udC1zbW9vdGhpbmc6IGFudGlhbGlhc2VkOworICAtbW96LWZvbnQtc21vb3RoaW5nOiBhbnRpYWxpYXNlZDsKKyAgLW1zLWZvbnQtc21vb3RoaW5nOiBhbnRpYWxpYXNlZDsKKyAgLW8tZm9udC1zbW9vdGhpbmc6IGFudGlhbGlhc2VkOworICAtd2Via2l0LXRyYW5zaXRpb246IG9wYWNpdHkgODAwbXMgZWFzZS1pbiAxMDBtczsKKyAgLW1vei10cmFuc2l0aW9uOiBvcGFjaXR5IDgwMG1zIGVhc2UtaW4gMTAwbXM7CisgIC1tcy10cmFuc2l0aW9uOiBvcGFjaXR5IDgwMG1zIGVhc2UtaW4gMTAwbXM7CisgIC1vLXRyYW5zaXRpb246IG9wYWNpdHkgODAwbXMgZWFzZS1pbiAxMDBtczsKKyAgdHJhbnNpdGlvbjogb3BhY2l0eSA4MDBtcyBlYXNlLWluIDEwMG1zOworfQorLyogbGluZSA2OSwgLi4vc2Nzcy9fYmFzZS5zY3NzICovCitib2R5LmxvYWRlZCB7CisgIG9wYWNpdHk6IDEgIWltcG9ydGFudDsKK30KKworLyogbGluZSA3NCwgLi4vc2Nzcy9fYmFzZS5zY3NzICovCitpbnB1dCwgYnV0dG9uIHsKKyAgdmVydGljYWwtYWxpZ246IG1pZGRsZTsKK30KKworLyogbGluZSA3OCwgLi4vc2Nzcy9fYmFzZS5zY3NzICovCitzbGlkZXMgPiBzbGlkZVtoaWRkZW5dIHsKKyAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50OworfQorCisvKiBsaW5lIDgyLCAuLi9zY3NzL19iYXNlLnNjc3MgKi8KK3NsaWRlcyB7CisgIHdpZHRoOiAxMDAlOworICBoZWlnaHQ6IDEwMCU7CisgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKKyAgbGVmdDogMDsKKyAgdG9wOiAwOworICAtd2Via2l0LXRyYW5zZm9ybTogdHJhbnNsYXRlM2QoMCwgMCwgMCk7CisgIC1tb3otdHJhbnNmb3JtOiB0cmFuc2xhdGUzZCgwLCAwLCAwKTsKKyAgLW1zLXRyYW5zZm9ybTogdHJhbnNsYXRlM2QoMCwgMCwgMCk7CisgIC1vLXRyYW5zZm9ybTogdHJhbnNsYXRlM2QoMCwgMCwgMCk7CisgIHRyYW5zZm9ybTogdHJhbnNsYXRlM2QoMCwgMCwgMCk7CisgIC13ZWJraXQtcGVyc3BlY3RpdmU6IDEwMDA7CisgIHBlcnNwZWN0aXZlOiAxMDAwOworICAtd2Via2l0LXRyYW5zZm9ybS1zdHlsZTogcHJlc2VydmUtM2Q7CisgIHRyYW5zZm9ybS1zdHlsZTogcHJlc2VydmUtM2Q7CisgIC13ZWJraXQtdHJhbnNpdGlvbjogb3BhY2l0eSA4MDBtcyBlYXNlLWluIDEwMG1zOworICAtbW96LXRyYW5zaXRpb246IG9wYWNpdHkgODAwbXMgZWFzZS1pbiAxMDBtczsKKyAgLW1zLXRyYW5zaXRpb246IG9wYWNpdHkgODAwbXMgZWFzZS1pbiAxMDBtczsKKyAgLW8tdHJhbnNpdGlvbjogb3BhY2l0eSA4MDBtcyBlYXNlLWluIDEwMG1zOworICB0cmFuc2l0aW9uOiBvcGFjaXR5IDgwMG1zIGVhc2UtaW4gMTAwbXM7Cit9CisKKy8qIGxpbmUgOTQsIC4uL3Njc3MvX2Jhc2Uuc2NzcyAqLworc2xpZGVzID4gc2xpZGUgeworICBkaXNwbGF5OiBibG9jazsKKyAgcG9zaXRpb246IGFic29sdXRlOworICBvdmVyZmxvdzogaGlkZGVuOworICBsZWZ0OiA1MCU7CisgIHRvcDogNTAlOworICAtd2Via2l0LWJveC1zaXppbmc6IGJvcmRlci1ib3g7CisgIC1tb3otYm94LXNpemluZzogYm9yZGVyLWJveDsKKyAgYm94LXNpemluZzogYm9yZGVyLWJveDsKK30KKworLyogU2xpZGUgc3R5bGVzICovCisvKmFydGljbGUuZmlsbCBpZnJhbWUgeworICBwb3NpdGlvbjogYWJzb2x1dGU7CisgIGxlZnQ6IDA7CisgIHRvcDogMDsKKyAgd2lkdGg6IDEwMCU7CisgIGhlaWdodDogMTAwJTsKKworICBib3JkZXI6IDA7CisgIG1hcmdpbjogMDsKKworICBAaW5jbHVkZSBib3JkZXItcmFkaXVzKDEwcHgpOworCisgIHotaW5kZXg6IC0xOworfQorCitzbGlkZS5maWxsIHsKKyAgYmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVhdDsKKyAgQGluY2x1ZGUgYmFja2dyb3VuZC1zaXplKGNvdmVyKTsKK30KKworc2xpZGUuZmlsbCBpbWcgeworICBwb3NpdGlvbjogYWJzb2x1dGU7CisgIGxlZnQ6IDA7CisgIHRvcDogMDsKKyAgbWluLXdpZHRoOiAxMDAlOworICBtaW4taGVpZ2h0OiAxMDAlOworCisgIHotaW5kZXg6IC0xOworfQorKi8KKy8qKgorICogVGhlbWUgU3R5bGVzCisgKi8KKy8qIGxpbmUgNTgsIC4uL3Njc3MvZGVmYXVsdC5zY3NzICovCis6OnNlbGVjdGlvbiB7CisgIGNvbG9yOiB3aGl0ZTsKKyAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZDE0ZDsKKyAgdGV4dC1zaGFkb3c6IG5vbmU7Cit9CisKKy8qIGxpbmUgNjQsIC4uL3Njc3MvZGVmYXVsdC5zY3NzICovCis6Oi13ZWJraXQtc2Nyb2xsYmFyIHsKKyAgaGVpZ2h0OiAxNnB4OworICBvdmVyZmxvdzogdmlzaWJsZTsKKyAgd2lkdGg6IDE2cHg7Cit9CisKKy8qIGxpbmUgNjksIC4uL3Njc3MvZGVmYXVsdC5zY3NzICovCis6Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1iIHsKKyAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgwLCAwLCAwLCAwLjEpOworICBiYWNrZ3JvdW5kLWNsaXA6IHBhZGRpbmctYm94OworICBib3JkZXI6IHNvbGlkIHRyYW5zcGFyZW50OworICBtaW4taGVpZ2h0OiAyOHB4OworICBwYWRkaW5nOiAxMDBweCAwIDA7CisgIC13ZWJraXQtYm94LXNoYWRvdzogaW5zZXQgMXB4IDFweCAwIHJnYmEoMCwgMCwgMCwgMC4xKSwgaW5zZXQgMCAtMXB4IDAgcmdiYSgwLCAwLCAwLCAwLjA3KTsKKyAgLW1vei1ib3gtc2hhZG93OiBpbnNldCAxcHggMXB4IDAgcmdiYSgwLCAwLCAwLCAwLjEpLCBpbnNldCAwIC0xcHggMCByZ2JhKDAsIDAsIDAsIDAuMDcpOworICBib3gtc2hhZG93OiBpbnNldCAxcHggMXB4IDAgcmdiYSgwLCAwLCAwLCAwLjEpLCBpbnNldCAwIC0xcHggMCByZ2JhKDAsIDAsIDAsIDAuMDcpOworICBib3JkZXItd2lkdGg6IDFweCAxcHggMXB4IDZweDsKK30KKworLyogbGluZSA3OCwgLi4vc2Nzcy9kZWZhdWx0LnNjc3MgKi8KKzo6LXdlYmtpdC1zY3JvbGxiYXItdGh1bWI6aG92ZXIgeworICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuNSk7Cit9CisKKy8qIGxpbmUgODEsIC4uL3Njc3MvZGVmYXVsdC5zY3NzICovCis6Oi13ZWJraXQtc2Nyb2xsYmFyLWJ1dHRvbiB7CisgIGhlaWdodDogMDsKKyAgd2lkdGg6IDA7Cit9CisKKy8qIGxpbmUgODUsIC4uL3Njc3MvZGVmYXVsdC5zY3NzICovCis6Oi13ZWJraXQtc2Nyb2xsYmFyLXRyYWNrIHsKKyAgYmFja2dyb3VuZC1jbGlwOiBwYWRkaW5nLWJveDsKKyAgYm9yZGVyOiBzb2xpZCB0cmFuc3BhcmVudDsKKyAgYm9yZGVyLXdpZHRoOiAwIDAgMCA0cHg7Cit9CisKKy8qIGxpbmUgOTAsIC4uL3Njc3MvZGVmYXVsdC5zY3NzICovCis6Oi13ZWJraXQtc2Nyb2xsYmFyLWNvcm5lciB7CisgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50OworfQorCisvKiBsaW5lIDk0LCAuLi9zY3NzL2RlZmF1bHQuc2NzcyAqLworYm9keSB7CisgIGJhY2tncm91bmQ6IGJsYWNrOworfQorCisvKiBsaW5lIDk4LCAuLi9zY3NzL2RlZmF1bHQuc2NzcyAqLworc2xpZGVzID4gc2xpZGUgeworICBkaXNwbGF5OiBub25lOworICBmb250LWZhbWlseTogJ1VidW50dScsIFVidW50dSBDb25kZW5zZWQ7CisgIGZvbnQtc2l6ZTogMjZweDsKKyAgY29sb3I6ICM3OTc5Nzk7CisgIHdpZHRoOiA5MDBweDsKKyAgaGVpZ2h0OiA3MDBweDsKKyAgbWFyZ2luLWxlZnQ6IC00NTBweDsKKyAgbWFyZ2luLXRvcDogLTM1MHB4OworICBwYWRkaW5nOiA0MHB4IDYwcHg7CisgIC13ZWJraXQtYm9yZGVyLXJhZGl1czogNXB4OworICAtbW96LWJvcmRlci1yYWRpdXM6IDVweDsKKyAgLW1zLWJvcmRlci1yYWRpdXM6IDVweDsKKyAgLW8tYm9yZGVyLXJhZGl1czogNXB4OworICBib3JkZXItcmFkaXVzOiA1cHg7CisgIC13ZWJraXQtdHJhbnNpdGlvbjogYWxsIDAuNnMgZWFzZS1pbi1vdXQ7CisgIC1tb3otdHJhbnNpdGlvbjogYWxsIDAuNnMgZWFzZS1pbi1vdXQ7CisgIC1tcy10cmFuc2l0aW9uOiBhbGwgMC42cyBlYXNlLWluLW91dDsKKyAgLW8tdHJhbnNpdGlvbjogYWxsIDAuNnMgZWFzZS1pbi1vdXQ7CisgIHRyYW5zaXRpb246IGFsbCAwLjZzIGVhc2UtaW4tb3V0OworfQorLyogbGluZSAxMTksIC4uL3Njc3MvZGVmYXVsdC5zY3NzICovCitzbGlkZXMgPiBzbGlkZS5mYXItcGFzdCB7CisgIGRpc3BsYXk6IG5vbmU7Cit9CisvKiBsaW5lIDEyNiwgLi4vc2Nzcy9kZWZhdWx0LnNjc3MgKi8KK3NsaWRlcyA+IHNsaWRlLnBhc3QgeworICBkaXNwbGF5OiBibG9jazsKKyAgb3BhY2l0eTogMDsKK30KKy8qIGxpbmUgMTMzLCAuLi9zY3NzL2RlZmF1bHQuc2NzcyAqLworc2xpZGVzID4gc2xpZGUuY3VycmVudCB7CisgIGRpc3BsYXk6IGJsb2NrOworICBvcGFjaXR5OiAxOworfQorLyogbGluZSAxMzksIC4uL3Njc3MvZGVmYXVsdC5zY3NzICovCitzbGlkZXMgPiBzbGlkZS5jdXJyZW50IC5hdXRvLWZhZGVpbiB7CisgIG9wYWNpdHk6IDE7Cit9CisvKiBsaW5lIDE0MywgLi4vc2Nzcy9kZWZhdWx0LnNjc3MgKi8KK3NsaWRlcyA+IHNsaWRlLmN1cnJlbnQgLmdkYmFyIHsKKyAgLXdlYmtpdC1iYWNrZ3JvdW5kLXNpemU6IDEwMCUgMTAwJTsKKyAgLW1vei1iYWNrZ3JvdW5kLXNpemU6IDEwMCUgMTAwJTsKKyAgLW8tYmFja2dyb3VuZC1zaXplOiAxMDAlIDEwMCU7CisgIGJhY2tncm91bmQtc2l6ZTogMTAwJSAxMDAlOworfQorLyogbGluZSAxNDgsIC4uL3Njc3MvZGVmYXVsdC5zY3NzICovCitzbGlkZXMgPiBzbGlkZS5uZXh0IHsKKyAgZGlzcGxheTogYmxvY2s7CisgIG9wYWNpdHk6IDA7CisgIHBvaW50ZXItZXZlbnRzOiBub25lOworfQorLyogbGluZSAxNTYsIC4uL3Njc3MvZGVmYXVsdC5zY3NzICovCitzbGlkZXMgPiBzbGlkZS5mYXItbmV4dCB7CisgIGRpc3BsYXk6IG5vbmU7Cit9CisvKiBsaW5lIDE2MywgLi4vc2Nzcy9kZWZhdWx0LnNjc3MgKi8KK3NsaWRlcyA+IHNsaWRlLmRhcmsgeworICBiYWNrZ3JvdW5kOiAjNTE1MTUxICFpbXBvcnRhbnQ7Cit9CisvKiBsaW5lIDE3MSwgLi4vc2Nzcy9kZWZhdWx0LnNjc3MgKi8KK3NsaWRlcyA+IHNsaWRlOm5vdCgubm9iYWNrZ3JvdW5kKTpiZWZvcmUgeworICBmb250LXNpemU6IDEycHQ7CisgIGNvbnRlbnQ6ICJJbnRlbnQiOworICBwb3NpdGlvbjogYWJzb2x1dGU7CisgIGJvdHRvbTogMjBweDsKKyAgbGVmdDogNjBweDsKKyAgYmFja2dyb3VuZDogdXJsKC4uLy4uL2ltYWdlcy9JbnRlbnQvSW1hZ2UtSW50ZW50X2xvZ29fY3JvcHBlZC5wbmcpIG5vLXJlcGVhdCAwIDUwJTsKKyAgLXdlYmtpdC1iYWNrZ3JvdW5kLXNpemU6IDMwcHggMzBweDsKKyAgLW1vei1iYWNrZ3JvdW5kLXNpemU6IDMwcHggMzBweDsKKyAgLW8tYmFja2dyb3VuZC1zaXplOiAzMHB4IDMwcHg7CisgIGJhY2tncm91bmQtc2l6ZTogMzBweCAzMHB4OworICBwYWRkaW5nLWxlZnQ6IDQwcHg7CisgIGhlaWdodDogMzBweDsKKyAgbGluZS1oZWlnaHQ6IDEuOTsKK30KKy8qIGxpbmUgMTgzLCAuLi9zY3NzL2RlZmF1bHQuc2NzcyAqLworc2xpZGVzID4gc2xpZGU6bm90KC5ub2JhY2tncm91bmQpOmFmdGVyIHsKKyAgZm9udC1zaXplOiAxMnB0OworICBjb250ZW50OiBhdHRyKGRhdGEtc2xpZGUtbnVtKSAiLyIgYXR0cihkYXRhLXRvdGFsLXNsaWRlcyk7CisgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKKyAgYm90dG9tOiAyMHB4OworICByaWdodDogNjBweDsKKyAgbGluZS1oZWlnaHQ6IDEuOTsKK30KKy8qIGxpbmUgMTk0LCAuLi9zY3NzL2RlZmF1bHQuc2NzcyAqLworc2xpZGVzID4gc2xpZGUudGl0bGUtc2xpZGU6YWZ0ZXIgeworIAorfQorLyogbGluZSAyMDYsIC4uL3Njc3MvZGVmYXVsdC5zY3NzICovCitzbGlkZXMgPiBzbGlkZS5iYWNrZHJvcCB7CisgIHotaW5kZXg6IC0xMDsKKyAgZGlzcGxheTogYmxvY2sgIWltcG9ydGFudDsKKyAgYmFja2dyb3VuZDogLXdlYmtpdC1ncmFkaWVudChsaW5lYXIsIDUwJSAwJSwgNTAlIDEwMCUsIGNvbG9yLXN0b3AoMCUsICNmZmZmZmYpLCBjb2xvci1zdG9wKDg1JSwgI2ZmZmZmZiksIGNvbG9yLXN0b3AoMTAwJSwgI2U2ZTZlNikpOworICBiYWNrZ3JvdW5kOiAtd2Via2l0LWxpbmVhci1ncmFkaWVudCgjZmZmZmZmLCAjZmZmZmZmIDg1JSwgI2U2ZTZlNik7CisgIGJhY2tncm91bmQ6IC1tb3otbGluZWFyLWdyYWRpZW50KCNmZmZmZmYsICNmZmZmZmYgODUlLCAjZTZlNmU2KTsKKyAgYmFja2dyb3VuZDogLW8tbGluZWFyLWdyYWRpZW50KCNmZmZmZmYsICNmZmZmZmYgODUlLCAjZTZlNmU2KTsKKyAgYmFja2dyb3VuZDogLW1zLWxpbmVhci1ncmFkaWVudCgjZmZmZmZmLCAjZmZmZmZmIDg1JSwgI2U2ZTZlNik7CisgIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCgjZmZmZmZmLCAjZmZmZmZmIDg1JSwgI2U2ZTZlNik7CisgIGJhY2tncm91bmQtY29sb3I6IHdoaXRlOworfQorLyogbGluZSAyMTEsIC4uL3Njc3MvZGVmYXVsdC5zY3NzICovCitzbGlkZXMgPiBzbGlkZS5iYWNrZHJvcDphZnRlciwgc2xpZGVzID4gc2xpZGUuYmFja2Ryb3A6YmVmb3JlIHsKKyAgZGlzcGxheTogbm9uZTsKK30KKy8qIGxpbmUgMjE2LCAuLi9zY3NzL2RlZmF1bHQuc2NzcyAqLworc2xpZGVzID4gc2xpZGUgPiBoZ3JvdXAgKyBhcnRpY2xlIHsKKyAgbWFyZ2luLXRvcDogNDVweDsKK30KKy8qIGxpbmUgMjIwLCAuLi9zY3NzL2RlZmF1bHQuc2NzcyAqLworc2xpZGVzID4gc2xpZGUgPiBoZ3JvdXAgKyBhcnRpY2xlLmZsZXhib3gudmNlbnRlciwgc2xpZGVzID4gc2xpZGUgPiBoZ3JvdXAgKyBhcnRpY2xlLmZsZXhib3gudmxlZnQsIHNsaWRlcyA+IHNsaWRlID4gaGdyb3VwICsgYXJ0aWNsZS5mbGV4Ym94LnZyaWdodCB7CisgIGhlaWdodDogODAlOworfQorLyogbGluZSAyMjUsIC4uL3Njc3MvZGVmYXVsdC5zY3NzICovCitzbGlkZXMgPiBzbGlkZSA+IGhncm91cCArIGFydGljbGUgcCB7CisgIG1hcmdpbi1ib3R0b206IDFlbTsKK30KKy8qIGxpbmUgMjMwLCAuLi9zY3NzL2RlZmF1bHQuc2NzcyAqLworc2xpZGVzID4gc2xpZGUgPiBhcnRpY2xlOm9ubHktY2hpbGQgeworICBoZWlnaHQ6IDEwMCU7Cit9CisvKiBsaW5lIDIzMywgLi4vc2Nzcy9kZWZhdWx0LnNjc3MgKi8KK3NsaWRlcyA+IHNsaWRlID4gYXJ0aWNsZTpvbmx5LWNoaWxkID4gaWZyYW1lIHsKKyAgaGVpZ2h0OiA5OCU7Cit9CisKKy8qIGxpbmUgMjM5LCAuLi9zY3NzL2RlZmF1bHQuc2NzcyAqLworc2xpZGVzLmxheW91dC1mYXV4LXdpZGVzY3JlZW4gPiBzbGlkZSB7CisgIHBhZGRpbmc6IDQwcHggMTYwcHg7Cit9CisKKy8qIGxpbmUgMjQ4LCAuLi9zY3NzL2RlZmF1bHQuc2NzcyAqLworc2xpZGVzLmxheW91dC13aWRlc2NyZWVuID4gc2xpZGUsCitzbGlkZXMubGF5b3V0LWZhdXgtd2lkZXNjcmVlbiA+IHNsaWRlIHsKKyAgbWFyZ2luLWxlZnQ6IC01NTBweDsKKyAgd2lkdGg6IDExMDBweDsKK30KKy8qIGxpbmUgMjUzLCAuLi9zY3NzL2RlZmF1bHQuc2NzcyAqLworc2xpZGVzLmxheW91dC13aWRlc2NyZWVuID4gc2xpZGUuZmFyLXBhc3QsCitzbGlkZXMubGF5b3V0LWZhdXgtd2lkZXNjcmVlbiA+IHNsaWRlLmZhci1wYXN0IHsKKyAgZGlzcGxheTogYmxvY2s7CisgIGRpc3BsYXk6IG5vbmU7CisgIC13ZWJraXQtdHJhbnNmb3JtOiB0cmFuc2xhdGUoLTIyNjBweCk7CisgIC1tb3otdHJhbnNmb3JtOiB0cmFuc2xhdGUoLTIyNjBweCk7CisgIC1tcy10cmFuc2Zvcm06IHRyYW5zbGF0ZSgtMjI2MHB4KTsKKyAgLW8tdHJhbnNmb3JtOiB0cmFuc2xhdGUoLTIyNjBweCk7CisgIHRyYW5zZm9ybTogdHJhbnNsYXRlKC0yMjYwcHgpOworICAtd2Via2l0LXRyYW5zZm9ybTogdHJhbnNsYXRlM2QoLTIyNjBweCwgMCwgMCk7CisgIC1tb3otdHJhbnNmb3JtOiB0cmFuc2xhdGUzZCgtMjI2MHB4LCAwLCAwKTsKKyAgLW1zLXRyYW5zZm9ybTogdHJhbnNsYXRlM2QoLTIyNjBweCwgMCwgMCk7CisgIC1vLXRyYW5zZm9ybTogdHJhbnNsYXRlM2QoLTIyNjBweCwgMCwgMCk7CisgIHRyYW5zZm9ybTogdHJhbnNsYXRlM2QoLTIyNjBweCwgMCwgMCk7Cit9CisvKiBsaW5lIDI2MCwgLi4vc2Nzcy9kZWZhdWx0LnNjc3MgKi8KK3NsaWRlcy5sYXlvdXQtd2lkZXNjcmVlbiA+IHNsaWRlLnBhc3QsCitzbGlkZXMubGF5b3V0LWZhdXgtd2lkZXNjcmVlbiA+IHNsaWRlLnBhc3QgeworICBkaXNwbGF5OiBibG9jazsKKyAgb3BhY2l0eTogMDsKK30KKy8qIGxpbmUgMjY3LCAuLi9zY3NzL2RlZmF1bHQuc2NzcyAqLworc2xpZGVzLmxheW91dC13aWRlc2NyZWVuID4gc2xpZGUuY3VycmVudCwKK3NsaWRlcy5sYXlvdXQtZmF1eC13aWRlc2NyZWVuID4gc2xpZGUuY3VycmVudCB7CisgIGRpc3BsYXk6IGJsb2NrOworICBvcGFjaXR5OiAxOworfQorLyogbGluZSAyNzQsIC4uL3Njc3MvZGVmYXVsdC5zY3NzICovCitzbGlkZXMubGF5b3V0LXdpZGVzY3JlZW4gPiBzbGlkZS5uZXh0LAorc2xpZGVzLmxheW91dC1mYXV4LXdpZGVzY3JlZW4gPiBzbGlkZS5uZXh0IHsKKyAgZGlzcGxheTogYmxvY2s7CisgIG9wYWNpdHk6IDA7CisgIHBvaW50ZXItZXZlbnRzOiBub25lOworfQorLyogbGluZSAyODIsIC4uL3Njc3MvZGVmYXVsdC5zY3NzICovCitzbGlkZXMubGF5b3V0LXdpZGVzY3JlZW4gPiBzbGlkZS5mYXItbmV4dCwKK3NsaWRlcy5sYXlvdXQtZmF1eC13aWRlc2NyZWVuID4gc2xpZGUuZmFyLW5leHQgeworICBkaXNwbGF5OiBibG9jazsKKyAgZGlzcGxheTogbm9uZTsKKyAgLXdlYmtpdC10cmFuc2Zvcm06IHRyYW5zbGF0ZSgyMjYwcHgpOworICAtbW96LXRyYW5zZm9ybTogdHJhbnNsYXRlKDIyNjBweCk7CisgIC1tcy10cmFuc2Zvcm06IHRyYW5zbGF0ZSgyMjYwcHgpOworICAtby10cmFuc2Zvcm06IHRyYW5zbGF0ZSgyMjYwcHgpOworICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgyMjYwcHgpOworICAtd2Via2l0LXRyYW5zZm9ybTogdHJhbnNsYXRlM2QoMjI2MHB4LCAwLCAwKTsKKyAgLW1vei10cmFuc2Zvcm06IHRyYW5zbGF0ZTNkKDIyNjBweCwgMCwgMCk7CisgIC1tcy10cmFuc2Zvcm06IHRyYW5zbGF0ZTNkKDIyNjBweCwgMCwgMCk7CisgIC1vLXRyYW5zZm9ybTogdHJhbnNsYXRlM2QoMjI2MHB4LCAwLCAwKTsKKyAgdHJhbnNmb3JtOiB0cmFuc2xhdGUzZCgyMjYwcHgsIDAsIDApOworfQorLyogbGluZSAyODksIC4uL3Njc3MvZGVmYXVsdC5zY3NzICovCitzbGlkZXMubGF5b3V0LXdpZGVzY3JlZW4gI3ByZXYtc2xpZGUtYXJlYSwKK3NsaWRlcy5sYXlvdXQtZmF1eC13aWRlc2NyZWVuICNwcmV2LXNsaWRlLWFyZWEgeworICBtYXJnaW4tbGVmdDogLTY1MHB4OworfQorLyogbGluZSAyOTMsIC4uL3Njc3MvZGVmYXVsdC5zY3NzICovCitzbGlkZXMubGF5b3V0LXdpZGVzY3JlZW4gI25leHQtc2xpZGUtYXJlYSwKK3NsaWRlcy5sYXlvdXQtZmF1eC13aWRlc2NyZWVuICNuZXh0LXNsaWRlLWFyZWEgeworICBtYXJnaW4tbGVmdDogNTUwcHg7Cit9CisKKy8qIGxpbmUgMjk4LCAuLi9zY3NzL2RlZmF1bHQuc2NzcyAqLworYiB7CisgIGZvbnQtd2VpZ2h0OiA2MDA7Cit9CisKKy8qIGxpbmUgMzAyLCAuLi9zY3NzL2RlZmF1bHQuc2NzcyAqLworYSB7CisgIGNvbG9yOiAjMmE3Y2RmOworICB0ZXh0LWRlY29yYXRpb246IG5vbmU7CisgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCByZ2JhKDQyLCAxMjQsIDIyMywgMC41KTsKK30KKy8qIGxpbmUgMzA3LCAuLi9zY3NzL2RlZmF1bHQuc2NzcyAqLworYTpob3ZlciB7CisgIGNvbG9yOiBibGFjayAhaW1wb3J0YW50OworfQorCisvKiBsaW5lIDMxMiwgLi4vc2Nzcy9kZWZhdWx0LnNjc3MgKi8KK2gxLCBoMiwgaDMgeworICBmb250LXdlaWdodDogNjAwOworfQorCitoMSB7Cit9CisvKiBsaW5lIDMxNiwgLi4vc2Nzcy9kZWZhdWx0LnNjc3MgKi8KK2gyIHsKKyAgZm9udC1zaXplOiA0NXB4OworICBsaW5lLWhlaWdodDogNDVweDsKKyAgbGV0dGVyLXNwYWNpbmc6IC0ycHg7CisgIGNvbG9yOiAjNTE1MTUxOworfQorCisvKiBsaW5lIDMyMywgLi4vc2Nzcy9kZWZhdWx0LnNjc3MgKi8KK2gzIHsKKyAgZm9udC1zaXplOiAzMHB4OworICBsZXR0ZXItc3BhY2luZzogLTFweDsKKyAgbGluZS1oZWlnaHQ6IDI7CisgIGZvbnQtd2VpZ2h0OiBpbmhlcml0OworICBjb2xvcjogIzc5Nzk3OTsKK30KKworLyogbGluZSAzMzEsIC4uL3Njc3MvZGVmYXVsdC5zY3NzICovCit1bCB7CisgIG1hcmdpbi1sZWZ0OiAxLjJlbTsKKyAgbWFyZ2luLWJvdHRvbTogMWVtOworICBwb3NpdGlvbjogcmVsYXRpdmU7Cit9CisvKiBsaW5lIDMzNiwgLi4vc2Nzcy9kZWZhdWx0LnNjc3MgKi8KK3VsIGxpIHsKKyAgbWFyZ2luLWJvdHRvbTogMC41ZW07Cit9CisvKiBsaW5lIDMzOSwgLi4vc2Nzcy9kZWZhdWx0LnNjc3MgKi8KK3VsIGxpIHVsIHsKKyAgbWFyZ2luLWxlZnQ6IDJlbTsKKyAgbWFyZ2luLWJvdHRvbTogMDsKK30KKy8qIGxpbmUgMzQzLCAuLi9zY3NzL2RlZmF1bHQuc2NzcyAqLwordWwgbGkgdWwgbGk6YmVmb3JlIHsKKyAgY29udGVudDogJy0nOworICBmb250LXdlaWdodDogNjAwOworfQorLyogbGluZSAzNTAsIC4uL3Njc3MvZGVmYXVsdC5zY3NzICovCit1bCA+IGxpOmJlZm9yZSB7CisgIGNvbnRlbnQ6ICfCtyc7CisgIG1hcmdpbi1sZWZ0OiAtMWVtOworICBwb3NpdGlvbjogYWJzb2x1dGU7CisgIGZvbnQtd2VpZ2h0OiA2MDA7Cit9CisvKiBsaW5lIDM1NywgLi4vc2Nzcy9kZWZhdWx0LnNjc3MgKi8KK3VsIHVsIHsKKyAgbWFyZ2luLXRvcDogLjVlbTsKK30KKworLyogbGluZSAzNjQsIC4uL3Njc3MvZGVmYXVsdC5zY3NzICovCisuaGlnaGxpZ2h0LWNvZGUgc2xpZGUuY3VycmVudCBwcmUgPiAqIHsKKyAgb3BhY2l0eTogMC4yNTsKKyAgLXdlYmtpdC10cmFuc2l0aW9uOiBvcGFjaXR5IDAuNXMgZWFzZS1pbjsKKyAgLW1vei10cmFuc2l0aW9uOiBvcGFjaXR5IDAuNXMgZWFzZS1pbjsKKyAgLW1zLXRyYW5zaXRpb246IG9wYWNpdHkgMC41cyBlYXNlLWluOworICAtby10cmFuc2l0aW9uOiBvcGFjaXR5IDAuNXMgZWFzZS1pbjsKKyAgdHJhbnNpdGlvbjogb3BhY2l0eSAwLjVzIGVhc2UtaW47Cit9CisvKiBsaW5lIDM2OCwgLi4vc2Nzcy9kZWZhdWx0LnNjc3MgKi8KKy5oaWdobGlnaHQtY29kZSBzbGlkZS5jdXJyZW50IGIgeworICBvcGFjaXR5OiAxOworfQorCisvKiBsaW5lIDM3MywgLi4vc2Nzcy9kZWZhdWx0LnNjc3MgKi8KK3ByZSB7CisgIGZvbnQtZmFtaWx5OiAnSW5jb25zb2xhdGEnLCAnQ291cmllciBOZXcnLCBtb25vc3BhY2U7CisgIGZvbnQtc2l6ZTogMjBweDsKKyAgbGluZS1oZWlnaHQ6IDI4cHg7CisgIHBhZGRpbmc6IDEwcHggMCAxMHB4IDYwcHg7CisgIGxldHRlci1zcGFjaW5nOiAtMXB4OworICBtYXJnaW4tYm90dG9tOiAyMHB4OworICB3aWR0aDogMTA2JTsKKyAgYmFja2dyb3VuZC1jb2xvcjogI2U2ZTZlNjsKKyAgbGVmdDogLTYwcHg7CisgIHBvc2l0aW9uOiByZWxhdGl2ZTsKKyAgLXdlYmtpdC1ib3gtc2l6aW5nOiBib3JkZXItYm94OworICAtbW96LWJveC1zaXppbmc6IGJvcmRlci1ib3g7CisgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7CisgIC8qb3ZlcmZsb3c6IGhpZGRlbjsqLworfQorLyogbGluZSAzODcsIC4uL3Njc3MvZGVmYXVsdC5zY3NzICovCitwcmVbZGF0YS1sYW5nXTphZnRlciB7CisgIGNvbnRlbnQ6IGF0dHIoZGF0YS1sYW5nKTsKKyAgYmFja2dyb3VuZC1jb2xvcjogI2E5YTlhOTsKKyAgcmlnaHQ6IDA7CisgIHRvcDogMDsKKyAgcG9zaXRpb246IGFic29sdXRlOworICBmb250LXNpemU6IDE2cHQ7CisgIGNvbG9yOiB3aGl0ZTsKKyAgcGFkZGluZzogMnB4IDI1cHg7CisgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7Cit9CisKKy8qIGxpbmUgNDAwLCAuLi9zY3NzL2RlZmF1bHQuc2NzcyAqLworcHJlW2RhdGEtbGFuZz0iZ28iXSB7CisgIGNvbG9yOiAjMzMzOworfQorCisvKiBsaW5lIDQwNCwgLi4vc2Nzcy9kZWZhdWx0LnNjc3MgKi8KK2NvZGUgeworICBmb250LXNpemU6IDk1JTsKKyAgZm9udC1mYW1pbHk6ICdJbmNvbnNvbGF0YScsICdDb3VyaWVyIE5ldycsIG1vbm9zcGFjZTsKKyAgY29sb3I6IGJsYWNrOworfQorCisvKiBsaW5lIDQxMCwgLi4vc2Nzcy9kZWZhdWx0LnNjc3MgKi8KK2lmcmFtZSB7CisgIHdpZHRoOiAxMDAlOworICBoZWlnaHQ6IDUzMHB4OworICBiYWNrZ3JvdW5kOiB3aGl0ZTsKKyAgYm9yZGVyOiAxcHggc29saWQgI2U2ZTZlNjsKKyAgLXdlYmtpdC1ib3gtc2l6aW5nOiBib3JkZXItYm94OworICAtbW96LWJveC1zaXppbmc6IGJvcmRlci1ib3g7CisgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7Cit9CisKKy8qIGxpbmUgNDE4LCAuLi9zY3NzL2RlZmF1bHQuc2NzcyAqLworZHQgeworICBmb250LXdlaWdodDogYm9sZDsKK30KKworLyogbGluZSA0MjIsIC4uL3Njc3MvZGVmYXVsdC5zY3NzICovCitidXR0b24geworICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CisgIGJhY2tncm91bmQ6IC13ZWJraXQtZ3JhZGllbnQobGluZWFyLCA1MCUgMCUsIDUwJSAxMDAlLCBjb2xvci1zdG9wKDQwJSwgI2Y5ZjlmOSksIGNvbG9yLXN0b3AoNzAlLCAjZTNlM2UzKSk7CisgIGJhY2tncm91bmQ6IC13ZWJraXQtbGluZWFyLWdyYWRpZW50KCNmOWY5ZjkgNDAlLCAjZTNlM2UzIDcwJSk7CisgIGJhY2tncm91bmQ6IC1tb3otbGluZWFyLWdyYWRpZW50KCNmOWY5ZjkgNDAlLCAjZTNlM2UzIDcwJSk7CisgIGJhY2tncm91bmQ6IC1vLWxpbmVhci1ncmFkaWVudCgjZjlmOWY5IDQwJSwgI2UzZTNlMyA3MCUpOworICBiYWNrZ3JvdW5kOiAtbXMtbGluZWFyLWdyYWRpZW50KCNmOWY5ZjkgNDAlLCAjZTNlM2UzIDcwJSk7CisgIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCgjZjlmOWY5IDQwJSwgI2UzZTNlMyA3MCUpOworICBib3JkZXI6IDFweCBzb2xpZCAjYTlhOWE5OworICAtd2Via2l0LWJvcmRlci1yYWRpdXM6IDNweDsKKyAgLW1vei1ib3JkZXItcmFkaXVzOiAzcHg7CisgIC1tcy1ib3JkZXItcmFkaXVzOiAzcHg7CisgIC1vLWJvcmRlci1yYWRpdXM6IDNweDsKKyAgYm9yZGVyLXJhZGl1czogM3B4OworICBwYWRkaW5nOiA1cHggOHB4OworICBvdXRsaW5lOiBub25lOworICB3aGl0ZS1zcGFjZTogbm93cmFwOworICAtd2Via2l0LXVzZXItc2VsZWN0OiBub25lOworICAtbW96LXVzZXItc2VsZWN0OiBub25lOworICB1c2VyLXNlbGVjdDogbm9uZTsKKyAgY3Vyc29yOiBwb2ludGVyOworICB0ZXh0LXNoYWRvdzogMXB4IDFweCB3aGl0ZTsKKyAgZm9udC1zaXplOiAxMHB0OworfQorCisvKiBsaW5lIDQzNiwgLi4vc2Nzcy9kZWZhdWx0LnNjc3MgKi8KK2J1dHRvbjpub3QoOmRpc2FibGVkKTpob3ZlciB7CisgIGJvcmRlci1jb2xvcjogIzUxNTE1MTsKK30KKworLyogbGluZSA0NDAsIC4uL3Njc3MvZGVmYXVsdC5zY3NzICovCitidXR0b246bm90KDpkaXNhYmxlZCk6YWN0aXZlIHsKKyAgYmFja2dyb3VuZDogLXdlYmtpdC1ncmFkaWVudChsaW5lYXIsIDUwJSAwJSwgNTAlIDEwMCUsIGNvbG9yLXN0b3AoNDAlLCAjZTNlM2UzKSwgY29sb3Itc3RvcCg3MCUsICNmOWY5ZjkpKTsKKyAgYmFja2dyb3VuZDogLXdlYmtpdC1saW5lYXItZ3JhZGllbnQoI2UzZTNlMyA0MCUsICNmOWY5ZjkgNzAlKTsKKyAgYmFja2dyb3VuZDogLW1vei1saW5lYXItZ3JhZGllbnQoI2UzZTNlMyA0MCUsICNmOWY5ZjkgNzAlKTsKKyAgYmFja2dyb3VuZDogLW8tbGluZWFyLWdyYWRpZW50KCNlM2UzZTMgNDAlLCAjZjlmOWY5IDcwJSk7CisgIGJhY2tncm91bmQ6IC1tcy1saW5lYXItZ3JhZGllbnQoI2UzZTNlMyA0MCUsICNmOWY5ZjkgNzAlKTsKKyAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KCNlM2UzZTMgNDAlLCAjZjlmOWY5IDcwJSk7Cit9CisKKy8qIGxpbmUgNDQ0LCAuLi9zY3NzL2RlZmF1bHQuc2NzcyAqLworOmRpc2FibGVkIHsKKyAgY29sb3I6ICNhOWE5YTk7Cit9CisKKy8qIGxpbmUgNDQ4LCAuLi9zY3NzL2RlZmF1bHQuc2NzcyAqLworLmJsdWUgeworICBjb2xvcjogIzQzODdmZDsKK30KKworLyogbGluZSA0NTEsIC4uL3Njc3MvZGVmYXVsdC5zY3NzICovCisuYmx1ZTIgeworICBjb2xvcjogIzNjOGVmMzsKK30KKworLyogbGluZSA0NTQsIC4uL3Njc3MvZGVmYXVsdC5zY3NzICovCisuYmx1ZTMgeworICBjb2xvcjogIzJhN2NkZjsKK30KKworLyogbGluZSA0NTcsIC4uL3Njc3MvZGVmYXVsdC5zY3NzICovCisueWVsbG93IHsKKyAgY29sb3I6ICNmZmQxNGQ7Cit9CisKKy8qIGxpbmUgNDYwLCAuLi9zY3NzL2RlZmF1bHQuc2NzcyAqLworLnllbGxvdzIgeworICBjb2xvcjogI2Y5Y2M0NjsKK30KKworLyogbGluZSA0NjMsIC4uL3Njc3MvZGVmYXVsdC5zY3NzICovCisueWVsbG93MyB7CisgIGNvbG9yOiAjZjZjMDAwOworfQorCisvKiBsaW5lIDQ2NiwgLi4vc2Nzcy9kZWZhdWx0LnNjc3MgKi8KKy5ncmVlbiB7CisgIGNvbG9yOiAjMGRhODYxOworfQorCisvKiBsaW5lIDQ2OSwgLi4vc2Nzcy9kZWZhdWx0LnNjc3MgKi8KKy5ncmVlbjIgeworICBjb2xvcjogIzAwYTg2ZDsKK30KKworLyogbGluZSA0NzIsIC4uL3Njc3MvZGVmYXVsdC5zY3NzICovCisuZ3JlZW4zIHsKKyAgY29sb3I6ICMwMDlmNWQ7Cit9CisKKy8qIGxpbmUgNDc1LCAuLi9zY3NzL2RlZmF1bHQuc2NzcyAqLworLnJlZCB7CisgIGNvbG9yOiAjZjQ0YTNmOworfQorCisvKiBsaW5lIDQ3OCwgLi4vc2Nzcy9kZWZhdWx0LnNjc3MgKi8KKy5yZWQyIHsKKyAgY29sb3I6ICNlMDU0M2U7Cit9CisKKy8qIGxpbmUgNDgxLCAuLi9zY3NzL2RlZmF1bHQuc2NzcyAqLworLnJlZDMgeworICBjb2xvcjogI2Q5NGQzYTsKK30KKworLyogbGluZSA0ODQsIC4uL3Njc3MvZGVmYXVsdC5zY3NzICovCisuZ3JheSB7CisgIGNvbG9yOiAjZTZlNmU2OworfQorCisvKiBsaW5lIDQ4NywgLi4vc2Nzcy9kZWZhdWx0LnNjc3MgKi8KKy5ncmF5MiB7CisgIGNvbG9yOiAjYTlhOWE5OworfQorCisvKiBsaW5lIDQ5MCwgLi4vc2Nzcy9kZWZhdWx0LnNjc3MgKi8KKy5ncmF5MyB7CisgIGNvbG9yOiAjNzk3OTc5OworfQorCisvKiBsaW5lIDQ5MywgLi4vc2Nzcy9kZWZhdWx0LnNjc3MgKi8KKy5ncmF5NCB7CisgIGNvbG9yOiAjNTE1MTUxOworfQorCisvKiBsaW5lIDQ5NywgLi4vc2Nzcy9kZWZhdWx0LnNjc3MgKi8KKy53aGl0ZSB7CisgIGNvbG9yOiB3aGl0ZSAhaW1wb3J0YW50OworfQorCisvKiBsaW5lIDUwMCwgLi4vc2Nzcy9kZWZhdWx0LnNjc3MgKi8KKy5ibGFjayB7CisgIGNvbG9yOiBibGFjayAhaW1wb3J0YW50OworfQorCisvKiBsaW5lIDUwNCwgLi4vc2Nzcy9kZWZhdWx0LnNjc3MgKi8KKy5jb2x1bW5zLTIgeworICAtd2Via2l0LWNvbHVtbi1jb3VudDogMjsKKyAgLW1vei1jb2x1bW4tY291bnQ6IDI7CisgIC1vLWNvbHVtbi1jb3VudDogMjsKKyAgY29sdW1uLWNvdW50OiAyOworfQorCisvKiBsaW5lIDUwOCwgLi4vc2Nzcy9kZWZhdWx0LnNjc3MgKi8KK3RhYmxlIHsKKyAgd2lkdGg6IDEwMCU7CisgIGJvcmRlci1jb2xsYXBzZTogLW1vei1pbml0aWFsOworICBib3JkZXItY29sbGFwc2U6IGluaXRpYWw7CisgIGJvcmRlci1zcGFjaW5nOiAycHg7CisgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjNzk3OTc5OworfQorLyogbGluZSA1MTUsIC4uL3Njc3MvZGVmYXVsdC5zY3NzICovCit0YWJsZSB0ciA+IHRkOmZpcnN0LWNoaWxkLCB0YWJsZSB0aCB7CisgIGZvbnQtd2VpZ2h0OiA2MDA7CisgIGNvbG9yOiAjNTE1MTUxOworfQorLyogbGluZSA1MjAsIC4uL3Njc3MvZGVmYXVsdC5zY3NzICovCit0YWJsZSB0cjpudGgtY2hpbGQob2RkKSB7CisgIGJhY2tncm91bmQtY29sb3I6ICNlNmU2ZTY7Cit9CisvKiBsaW5lIDUyNCwgLi4vc2Nzcy9kZWZhdWx0LnNjc3MgKi8KK3RhYmxlIHRoIHsKKyAgY29sb3I6IHdoaXRlOworICBmb250LXNpemU6IDE4cHg7CisgIGJhY2tncm91bmQ6IC13ZWJraXQtZ3JhZGllbnQobGluZWFyLCA1MCUgMCUsIDUwJSAxMDAlLCBjb2xvci1zdG9wKDQwJSwgIzQzODdmZCksIGNvbG9yLXN0b3AoODAlLCAjMmE3Y2RmKSkgbm8tcmVwZWF0OworICBiYWNrZ3JvdW5kOiAtd2Via2l0LWxpbmVhci1ncmFkaWVudCh0b3AsICM0Mzg3ZmQgNDAlLCAjMmE3Y2RmIDgwJSkgbm8tcmVwZWF0OworICBiYWNrZ3JvdW5kOiAtbW96LWxpbmVhci1ncmFkaWVudCh0b3AsICM0Mzg3ZmQgNDAlLCAjMmE3Y2RmIDgwJSkgbm8tcmVwZWF0OworICBiYWNrZ3JvdW5kOiAtby1saW5lYXItZ3JhZGllbnQodG9wLCAjNDM4N2ZkIDQwJSwgIzJhN2NkZiA4MCUpIG5vLXJlcGVhdDsKKyAgYmFja2dyb3VuZDogLW1zLWxpbmVhci1ncmFkaWVudCh0b3AsICM0Mzg3ZmQgNDAlLCAjMmE3Y2RmIDgwJSkgbm8tcmVwZWF0OworICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQodG9wLCAjNDM4N2ZkIDQwJSwgIzJhN2NkZiA4MCUpIG5vLXJlcGVhdDsKK30KKy8qIGxpbmUgNTMwLCAuLi9zY3NzL2RlZmF1bHQuc2NzcyAqLwordGFibGUgdGQsIHRhYmxlIHRoIHsKKyAgZm9udC1zaXplOiAxOHB4OworICBwYWRkaW5nOiAxZW0gMC41ZW07Cit9CisvKiBsaW5lIDUzNSwgLi4vc2Nzcy9kZWZhdWx0LnNjc3MgKi8KK3RhYmxlIHRkLmhpZ2hsaWdodCB7CisgIGNvbG9yOiAjNTE1MTUxOworICBiYWNrZ3JvdW5kOiAtd2Via2l0LWdyYWRpZW50KGxpbmVhciwgNTAlIDAlLCA1MCUgMTAwJSwgY29sb3Itc3RvcCg0MCUsICNmZmQxNGQpLCBjb2xvci1zdG9wKDgwJSwgI2Y2YzAwMCkpIG5vLXJlcGVhdDsKKyAgYmFja2dyb3VuZDogLXdlYmtpdC1saW5lYXItZ3JhZGllbnQodG9wLCAjZmZkMTRkIDQwJSwgI2Y2YzAwMCA4MCUpIG5vLXJlcGVhdDsKKyAgYmFja2dyb3VuZDogLW1vei1saW5lYXItZ3JhZGllbnQodG9wLCAjZmZkMTRkIDQwJSwgI2Y2YzAwMCA4MCUpIG5vLXJlcGVhdDsKKyAgYmFja2dyb3VuZDogLW8tbGluZWFyLWdyYWRpZW50KHRvcCwgI2ZmZDE0ZCA0MCUsICNmNmMwMDAgODAlKSBuby1yZXBlYXQ7CisgIGJhY2tncm91bmQ6IC1tcy1saW5lYXItZ3JhZGllbnQodG9wLCAjZmZkMTRkIDQwJSwgI2Y2YzAwMCA4MCUpIG5vLXJlcGVhdDsKKyAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KHRvcCwgI2ZmZDE0ZCA0MCUsICNmNmMwMDAgODAlKSBuby1yZXBlYXQ7Cit9CisvKiBsaW5lIDU0MCwgLi4vc2Nzcy9kZWZhdWx0LnNjc3MgKi8KK3RhYmxlLnJvd3MgeworICBib3JkZXItYm90dG9tOiBub25lOworICBib3JkZXItcmlnaHQ6IDFweCBzb2xpZCAjNzk3OTc5OworfQorCisvKiBsaW5lIDU0NiwgLi4vc2Nzcy9kZWZhdWx0LnNjc3MgKi8KK3EgeworICBmb250LXNpemU6IDQ1cHg7CisgIGxpbmUtaGVpZ2h0OiA3MnB4OworfQorLyogbGluZSA1NTAsIC4uL3Njc3MvZGVmYXVsdC5zY3NzICovCitxOmJlZm9yZSB7CisgIGNvbnRlbnQ6ICfigJwnOworICBwb3NpdGlvbjogYWJzb2x1dGU7CisgIG1hcmdpbi1sZWZ0OiAtMC41ZW07Cit9CisvKiBsaW5lIDU1NSwgLi4vc2Nzcy9kZWZhdWx0LnNjc3MgKi8KK3E6YWZ0ZXIgeworICBjb250ZW50OiAn4oCdJzsKKyAgcG9zaXRpb246IGFic29sdXRlOworICBtYXJnaW4tbGVmdDogMC4xZW07Cit9CisKKy8qIGxpbmUgNTYyLCAuLi9zY3NzL2RlZmF1bHQuc2NzcyAqLworc2xpZGUuZmlsbCB7CisgIGJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7CisgIC13ZWJraXQtYm9yZGVyLXJhZGl1czogNXB4OworICAtbW96LWJvcmRlci1yYWRpdXM6IDVweDsKKyAgLW1zLWJvcmRlci1yYWRpdXM6IDVweDsKKyAgLW8tYm9yZGVyLXJhZGl1czogNXB4OworICBib3JkZXItcmFkaXVzOiA1cHg7CisgIC13ZWJraXQtYmFja2dyb3VuZC1zaXplOiBjb3ZlcjsKKyAgLW1vei1iYWNrZ3JvdW5kLXNpemU6IGNvdmVyOworICAtby1iYWNrZ3JvdW5kLXNpemU6IGNvdmVyOworICBiYWNrZ3JvdW5kLXNpemU6IGNvdmVyOworfQorCisvKiBTaXplIHZhcmlhbnRzICovCisvKiBsaW5lIDU3MSwgLi4vc2Nzcy9kZWZhdWx0LnNjc3MgKi8KK2FydGljbGUuc21hbGxlciBwLCBhcnRpY2xlLnNtYWxsZXIgdWwgeworICBmb250LXNpemU6IDIwcHg7CisgIGxpbmUtaGVpZ2h0OiAyNHB4OworICBsZXR0ZXItc3BhY2luZzogMDsKK30KKy8qIGxpbmUgNTc3LCAuLi9zY3NzL2RlZmF1bHQuc2NzcyAqLworYXJ0aWNsZS5zbWFsbGVyIHRhYmxlIHRkLCBhcnRpY2xlLnNtYWxsZXIgdGFibGUgdGggeworICBmb250LXNpemU6IDE0cHg7Cit9CisvKiBsaW5lIDU4MSwgLi4vc2Nzcy9kZWZhdWx0LnNjc3MgKi8KK2FydGljbGUuc21hbGxlciBwcmUgeworICBmb250LXNpemU6IDE1cHg7CisgIGxpbmUtaGVpZ2h0OiAyMHB4OworICBsZXR0ZXItc3BhY2luZzogMDsKK30KKy8qIGxpbmUgNTg2LCAuLi9zY3NzL2RlZmF1bHQuc2NzcyAqLworYXJ0aWNsZS5zbWFsbGVyIHEgeworICBmb250LXNpemU6IDQwcHg7CisgIGxpbmUtaGVpZ2h0OiA0OHB4OworfQorLyogbGluZSA1OTAsIC4uL3Njc3MvZGVmYXVsdC5zY3NzICovCithcnRpY2xlLnNtYWxsZXIgcTpiZWZvcmUsIGFydGljbGUuc21hbGxlciBxOmFmdGVyIHsKKyAgZm9udC1zaXplOiA2MHB4OworfQorCisvKiBCdWlsZHMgKi8KKy8qIGxpbmUgNTk5LCAuLi9zY3NzL2RlZmF1bHQuc2NzcyAqLworLmJ1aWxkID4gKiB7CisgIC13ZWJraXQtdHJhbnNpdGlvbjogb3BhY2l0eSAwLjVzIGVhc2UtaW4tb3V0IDAuMnM7CisgIC1tb3otdHJhbnNpdGlvbjogb3BhY2l0eSAwLjVzIGVhc2UtaW4tb3V0IDAuMnM7CisgIC1tcy10cmFuc2l0aW9uOiBvcGFjaXR5IDAuNXMgZWFzZS1pbi1vdXQgMC4yczsKKyAgLW8tdHJhbnNpdGlvbjogb3BhY2l0eSAwLjVzIGVhc2UtaW4tb3V0IDAuMnM7CisgIHRyYW5zaXRpb246IG9wYWNpdHkgMC41cyBlYXNlLWluLW91dCAwLjJzOworfQorLyogbGluZSA2MDMsIC4uL3Njc3MvZGVmYXVsdC5zY3NzICovCisuYnVpbGQgLnRvLWJ1aWxkIHsKKyAgb3BhY2l0eTogMDsKK30KKy8qIGxpbmUgNjA3LCAuLi9zY3NzL2RlZmF1bHQuc2NzcyAqLworLmJ1aWxkIC5idWlsZC1mYWRlIHsKKyAgb3BhY2l0eTogMC4zOworfQorLyogbGluZSA2MTAsIC4uL3Njc3MvZGVmYXVsdC5zY3NzICovCisuYnVpbGQgLmJ1aWxkLWZhZGU6aG92ZXIgeworICBvcGFjaXR5OiAxLjA7Cit9CisKKy8qIGxpbmUgNjE3LCAuLi9zY3NzL2RlZmF1bHQuc2NzcyAqLworLnBvcHVwIC5uZXh0IC5idWlsZCAudG8tYnVpbGQgeworICBvcGFjaXR5OiAxOworfQorLyogbGluZSA2MjEsIC4uL3Njc3MvZGVmYXVsdC5zY3NzICovCisucG9wdXAgLm5leHQgLmJ1aWxkIC5idWlsZC1mYWRlIHsKKyAgb3BhY2l0eTogMTsKK30KKworLyogUHJldHR5IHByaW50ICovCisvKiBsaW5lIDYyOSwgLi4vc2Nzcy9kZWZhdWx0LnNjc3MgKi8KKy5wcmV0dHlwcmludCAuc3RyLAorLnByZXR0eXByaW50IC5hdHYgeworICAvKiBhIG1hcmt1cCBhdHRyaWJ1dGUgdmFsdWUgKi8KKyAgY29sb3I6ICMwMDlmNWQ7Cit9CisKKy8qIGxpbmUgNjMzLCAuLi9zY3NzL2RlZmF1bHQuc2NzcyAqLworLnByZXR0eXByaW50IC5rd2QsCisucHJldHR5cHJpbnQgLnRhZyB7CisgIC8qIGEgbWFya3VwIHRhZyBuYW1lICovCisgIGNvbG9yOiAjMDA2NmNjOworfQorCisvKiBsaW5lIDYzNiwgLi4vc2Nzcy9kZWZhdWx0LnNjc3MgKi8KKy5wcmV0dHlwcmludCAuY29tIHsKKyAgLyogYSBjb21tZW50ICovCisgIGNvbG9yOiAjNzk3OTc5OworICBmb250LXN0eWxlOiBpdGFsaWM7Cit9CisKKy8qIGxpbmUgNjQwLCAuLi9zY3NzL2RlZmF1bHQuc2NzcyAqLworLnByZXR0eXByaW50IC5saXQgeworICAvKiBhIGxpdGVyYWwgdmFsdWUgKi8KKyAgY29sb3I6ICM3ZjAwMDA7Cit9CisKKy8qIGxpbmUgNjQ1LCAuLi9zY3NzL2RlZmF1bHQuc2NzcyAqLworLnByZXR0eXByaW50IC5wdW4sCisucHJldHR5cHJpbnQgLm9wbiwKKy5wcmV0dHlwcmludCAuY2xvIHsKKyAgY29sb3I6ICM1MTUxNTE7Cit9CisKKy8qIGxpbmUgNjUxLCAuLi9zY3NzL2RlZmF1bHQuc2NzcyAqLworLnByZXR0eXByaW50IC50eXAsCisucHJldHR5cHJpbnQgLmF0biwKKy5wcmV0dHlwcmludCAuZGVjLAorLnByZXR0eXByaW50IC52YXIgeworICAvKiBhIGRlY2xhcmF0aW9uOyBhIHZhcmlhYmxlIG5hbWUgKi8KKyAgY29sb3I6ICNkOTRkM2E7Cit9CisKKy8qIGxpbmUgNjU0LCAuLi9zY3NzL2RlZmF1bHQuc2NzcyAqLworLnByZXR0eXByaW50IC5wbG4geworICBjb2xvcjogIzUxNTE1MTsKK30KKworLyogbGluZSA2NTgsIC4uL3Njc3MvZGVmYXVsdC5zY3NzICovCisubm90ZSB7CisgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKKyAgei1pbmRleDogMTAwOworICB3aWR0aDogMTAwJTsKKyAgaGVpZ2h0OiAxMDAlOworICB0b3A6IDA7CisgIGxlZnQ6IDA7CisgIHBhZGRpbmc6IDFlbTsKKyAgYmFja2dyb3VuZDogcmdiYSgwLCAwLCAwLCAwLjMpOworICBvcGFjaXR5OiAwOworICBwb2ludGVyLWV2ZW50czogbm9uZTsKKyAgZGlzcGxheTogLXdlYmtpdC1ib3ggIWltcG9ydGFudDsKKyAgZGlzcGxheTogLW1vei1ib3ggIWltcG9ydGFudDsKKyAgZGlzcGxheTogLW1zLWJveCAhaW1wb3J0YW50OworICBkaXNwbGF5OiAtby1ib3ggIWltcG9ydGFudDsKKyAgZGlzcGxheTogYm94ICFpbXBvcnRhbnQ7CisgIC13ZWJraXQtYm94LW9yaWVudDogdmVydGljYWw7CisgIC1tb3otYm94LW9yaWVudDogdmVydGljYWw7CisgIC1tcy1ib3gtb3JpZW50OiB2ZXJ0aWNhbDsKKyAgYm94LW9yaWVudDogdmVydGljYWw7CisgIC13ZWJraXQtYm94LWFsaWduOiBjZW50ZXI7CisgIC1tb3otYm94LWFsaWduOiBjZW50ZXI7CisgIC1tcy1ib3gtYWxpZ246IGNlbnRlcjsKKyAgYm94LWFsaWduOiBjZW50ZXI7CisgIC13ZWJraXQtYm94LXBhY2s6IGNlbnRlcjsKKyAgLW1vei1ib3gtcGFjazogY2VudGVyOworICAtbXMtYm94LXBhY2s6IGNlbnRlcjsKKyAgYm94LXBhY2s6IGNlbnRlcjsKKyAgLXdlYmtpdC1ib3JkZXItcmFkaXVzOiA1cHg7CisgIC1tb3otYm9yZGVyLXJhZGl1czogNXB4OworICAtbXMtYm9yZGVyLXJhZGl1czogNXB4OworICAtby1ib3JkZXItcmFkaXVzOiA1cHg7CisgIGJvcmRlci1yYWRpdXM6IDVweDsKKyAgLXdlYmtpdC1ib3gtc2l6aW5nOiBib3JkZXItYm94OworICAtbW96LWJveC1zaXppbmc6IGJvcmRlci1ib3g7CisgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7CisgIC13ZWJraXQtdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDM1MHB4KTsKKyAgLW1vei10cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMzUwcHgpOworICAtbXMtdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDM1MHB4KTsKKyAgLW8tdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDM1MHB4KTsKKyAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDM1MHB4KTsKKyAgLXdlYmtpdC10cmFuc2l0aW9uOiBhbGwgMC40cyBlYXNlLWluLW91dDsKKyAgLW1vei10cmFuc2l0aW9uOiBhbGwgMC40cyBlYXNlLWluLW91dDsKKyAgLW1zLXRyYW5zaXRpb246IGFsbCAwLjRzIGVhc2UtaW4tb3V0OworICAtby10cmFuc2l0aW9uOiBhbGwgMC40cyBlYXNlLWluLW91dDsKKyAgdHJhbnNpdGlvbjogYWxsIDAuNHMgZWFzZS1pbi1vdXQ7Cit9CisvKiBsaW5lIDY3NiwgLi4vc2Nzcy9kZWZhdWx0LnNjc3MgKi8KKy5ub3RlID4gc2VjdGlvbiB7CisgIGJhY2tncm91bmQ6ICNmZmY7CisgIC13ZWJraXQtYm9yZGVyLXJhZGl1czogNXB4OworICAtbW96LWJvcmRlci1yYWRpdXM6IDVweDsKKyAgLW1zLWJvcmRlci1yYWRpdXM6IDVweDsKKyAgLW8tYm9yZGVyLXJhZGl1czogNXB4OworICBib3JkZXItcmFkaXVzOiA1cHg7CisgIC13ZWJraXQtYm94LXNoYWRvdzogMCAwIDEwcHggIzc5Nzk3OTsKKyAgLW1vei1ib3gtc2hhZG93OiAwIDAgMTBweCAjNzk3OTc5OworICBib3gtc2hhZG93OiAwIDAgMTBweCAjNzk3OTc5OworICB3aWR0aDogNjAlOworICBwYWRkaW5nOiAyZW07Cit9CisKKy8qIGxpbmUgNjkzLCAuLi9zY3NzL2RlZmF1bHQuc2NzcyAqLworLndpdGgtbm90ZXMucG9wdXAgc2xpZGVzLmxheW91dC13aWRlc2NyZWVuIHNsaWRlLm5leHQsCisud2l0aC1ub3Rlcy5wb3B1cCBzbGlkZXMubGF5b3V0LWZhdXgtd2lkZXNjcmVlbiBzbGlkZS5uZXh0IHsKKyAgLXdlYmtpdC10cmFuc2Zvcm06IHRyYW5zbGF0ZTNkKDY5MHB4LCA4MHB4LCAwKSBzY2FsZSgwLjM1KTsKKyAgLW1vei10cmFuc2Zvcm06IHRyYW5zbGF0ZTNkKDY5MHB4LCA4MHB4LCAwKSBzY2FsZSgwLjM1KTsKKyAgLW1zLXRyYW5zZm9ybTogdHJhbnNsYXRlM2QoNjkwcHgsIDgwcHgsIDApIHNjYWxlKDAuMzUpOworICAtby10cmFuc2Zvcm06IHRyYW5zbGF0ZTNkKDY5MHB4LCA4MHB4LCAwKSBzY2FsZSgwLjM1KTsKKyAgdHJhbnNmb3JtOiB0cmFuc2xhdGUzZCg2OTBweCwgODBweCwgMCkgc2NhbGUoMC4zNSk7Cit9CisvKiBsaW5lIDY5NiwgLi4vc2Nzcy9kZWZhdWx0LnNjc3MgKi8KKy53aXRoLW5vdGVzLnBvcHVwIHNsaWRlcy5sYXlvdXQtd2lkZXNjcmVlbiBzbGlkZSAubm90ZSwKKy53aXRoLW5vdGVzLnBvcHVwIHNsaWRlcy5sYXlvdXQtZmF1eC13aWRlc2NyZWVuIHNsaWRlIC5ub3RlIHsKKyAgLXdlYmtpdC10cmFuc2Zvcm06IHRyYW5zbGF0ZTNkKDMwMHB4LCA4MDBweCwgMCkgc2NhbGUoMS41KTsKKyAgLW1vei10cmFuc2Zvcm06IHRyYW5zbGF0ZTNkKDMwMHB4LCA4MDBweCwgMCkgc2NhbGUoMS41KTsKKyAgLW1zLXRyYW5zZm9ybTogdHJhbnNsYXRlM2QoMzAwcHgsIDgwMHB4LCAwKSBzY2FsZSgxLjUpOworICAtby10cmFuc2Zvcm06IHRyYW5zbGF0ZTNkKDMwMHB4LCA4MDBweCwgMCkgc2NhbGUoMS41KTsKKyAgdHJhbnNmb3JtOiB0cmFuc2xhdGUzZCgzMDBweCwgODAwcHgsIDApIHNjYWxlKDEuNSk7Cit9CisvKiBsaW5lIDcwMiwgLi4vc2Nzcy9kZWZhdWx0LnNjc3MgKi8KKy53aXRoLW5vdGVzLnBvcHVwIHNsaWRlIHsKKyAgb3ZlcmZsb3c6IHZpc2libGU7CisgIGJhY2tncm91bmQ6IHdoaXRlOworICAtd2Via2l0LXRyYW5zaXRpb246IG5vbmU7CisgIC1tb3otdHJhbnNpdGlvbjogbm9uZTsKKyAgLW1zLXRyYW5zaXRpb246IG5vbmU7CisgIC1vLXRyYW5zaXRpb246IG5vbmU7CisgIHRyYW5zaXRpb246IG5vbmU7CisgIHBvaW50ZXItZXZlbnRzOiBub25lOworICAtd2Via2l0LXRyYW5zZm9ybS1vcmlnaW46IDAgMDsKKyAgLW1vei10cmFuc2Zvcm0tb3JpZ2luOiAwIDA7CisgIC1tcy10cmFuc2Zvcm0tb3JpZ2luOiAwIDA7CisgIC1vLXRyYW5zZm9ybS1vcmlnaW46IDAgMDsKKyAgdHJhbnNmb3JtLW9yaWdpbjogMCAwOworfQorLyogbGluZSA3MDksIC4uL3Njc3MvZGVmYXVsdC5zY3NzICovCisud2l0aC1ub3Rlcy5wb3B1cCBzbGlkZTpub3QoLmJhY2tkcm9wKSB7CisgIC13ZWJraXQtdHJhbnNmb3JtOiBzY2FsZSgwLjYpIHRyYW5zbGF0ZTNkKDAuNWVtLCAwLjVlbSwgMCk7CisgIC1tb3otdHJhbnNmb3JtOiBzY2FsZSgwLjYpIHRyYW5zbGF0ZTNkKDAuNWVtLCAwLjVlbSwgMCk7CisgIC1tcy10cmFuc2Zvcm06IHNjYWxlKDAuNikgdHJhbnNsYXRlM2QoMC41ZW0sIDAuNWVtLCAwKTsKKyAgLW8tdHJhbnNmb3JtOiBzY2FsZSgwLjYpIHRyYW5zbGF0ZTNkKDAuNWVtLCAwLjVlbSwgMCk7CisgIHRyYW5zZm9ybTogc2NhbGUoMC42KSB0cmFuc2xhdGUzZCgwLjVlbSwgMC41ZW0sIDApOworICAtd2Via2l0LWJveC1zaGFkb3c6IDAgMCAxMHB4ICM3OTc5Nzk7CisgIC1tb3otYm94LXNoYWRvdzogMCAwIDEwcHggIzc5Nzk3OTsKKyAgYm94LXNoYWRvdzogMCAwIDEwcHggIzc5Nzk3OTsKK30KKy8qIGxpbmUgNzE0LCAuLi9zY3NzL2RlZmF1bHQuc2NzcyAqLworLndpdGgtbm90ZXMucG9wdXAgc2xpZGUuYmFja2Ryb3AgeworICBiYWNrZ3JvdW5kLWltYWdlOiAtd2Via2l0LWdyYWRpZW50KHJhZGlhbCwgNTAlIDUwJSwgMCwgNTAlIDUwJSwgNjAwLCBjb2xvci1zdG9wKDAlLCAjYjFkZmZmKSwgY29sb3Itc3RvcCgxMDAlLCAjNDM4N2ZkKSk7CisgIGJhY2tncm91bmQtaW1hZ2U6IC13ZWJraXQtcmFkaWFsLWdyYWRpZW50KDUwJSA1MCUsICNiMWRmZmYgMCUsICM0Mzg3ZmQgNjAwcHgpOworICBiYWNrZ3JvdW5kLWltYWdlOiAtbW96LXJhZGlhbC1ncmFkaWVudCg1MCUgNTAlLCAjYjFkZmZmIDAlLCAjNDM4N2ZkIDYwMHB4KTsKKyAgYmFja2dyb3VuZC1pbWFnZTogLW8tcmFkaWFsLWdyYWRpZW50KDUwJSA1MCUsICNiMWRmZmYgMCUsICM0Mzg3ZmQgNjAwcHgpOworICBiYWNrZ3JvdW5kLWltYWdlOiAtbXMtcmFkaWFsLWdyYWRpZW50KDUwJSA1MCUsICNiMWRmZmYgMCUsICM0Mzg3ZmQgNjAwcHgpOworICBiYWNrZ3JvdW5kLWltYWdlOiByYWRpYWwtZ3JhZGllbnQoNTAlIDUwJSwgI2IxZGZmZiAwJSwgIzQzODdmZCA2MDBweCk7Cit9CisvKiBsaW5lIDcyMCwgLi4vc2Nzcy9kZWZhdWx0LnNjc3MgKi8KKy53aXRoLW5vdGVzLnBvcHVwIHNsaWRlLm5leHQgeworICAtd2Via2l0LXRyYW5zZm9ybTogdHJhbnNsYXRlM2QoNTcwcHgsIDgwcHgsIDApIHNjYWxlKDAuMzUpOworICAtbW96LXRyYW5zZm9ybTogdHJhbnNsYXRlM2QoNTcwcHgsIDgwcHgsIDApIHNjYWxlKDAuMzUpOworICAtbXMtdHJhbnNmb3JtOiB0cmFuc2xhdGUzZCg1NzBweCwgODBweCwgMCkgc2NhbGUoMC4zNSk7CisgIC1vLXRyYW5zZm9ybTogdHJhbnNsYXRlM2QoNTcwcHgsIDgwcHgsIDApIHNjYWxlKDAuMzUpOworICB0cmFuc2Zvcm06IHRyYW5zbGF0ZTNkKDU3MHB4LCA4MHB4LCAwKSBzY2FsZSgwLjM1KTsKKyAgb3BhY2l0eTogMSAhaW1wb3J0YW50OworfQorLyogbGluZSA3MjQsIC4uL3Njc3MvZGVmYXVsdC5zY3NzICovCisud2l0aC1ub3Rlcy5wb3B1cCBzbGlkZS5uZXh0IC5ub3RlIHsKKyAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50OworfQorLyogbGluZSA3MzAsIC4uL3Njc3MvZGVmYXVsdC5zY3NzICovCisud2l0aC1ub3Rlcy5wb3B1cCAubm90ZSB7CisgIHdpZHRoOiAxMDklOworICBoZWlnaHQ6IDI2MHB4OworICBiYWNrZ3JvdW5kOiAjZTZlNmU2OworICBwYWRkaW5nOiAwOworICAtd2Via2l0LWJveC1zaGFkb3c6IDAgMCAxMHB4ICM3OTc5Nzk7CisgIC1tb3otYm94LXNoYWRvdzogMCAwIDEwcHggIzc5Nzk3OTsKKyAgYm94LXNoYWRvdzogMCAwIDEwcHggIzc5Nzk3OTsKKyAgLXdlYmtpdC10cmFuc2Zvcm06IHRyYW5zbGF0ZTNkKDI1MHB4LCA4MDBweCwgMCkgc2NhbGUoMS41KTsKKyAgLW1vei10cmFuc2Zvcm06IHRyYW5zbGF0ZTNkKDI1MHB4LCA4MDBweCwgMCkgc2NhbGUoMS41KTsKKyAgLW1zLXRyYW5zZm9ybTogdHJhbnNsYXRlM2QoMjUwcHgsIDgwMHB4LCAwKSBzY2FsZSgxLjUpOworICAtby10cmFuc2Zvcm06IHRyYW5zbGF0ZTNkKDI1MHB4LCA4MDBweCwgMCkgc2NhbGUoMS41KTsKKyAgdHJhbnNmb3JtOiB0cmFuc2xhdGUzZCgyNTBweCwgODAwcHgsIDApIHNjYWxlKDEuNSk7CisgIC13ZWJraXQtdHJhbnNpdGlvbjogb3BhY2l0eSA0MDBtcyBlYXNlLWluLW91dDsKKyAgLW1vei10cmFuc2l0aW9uOiBvcGFjaXR5IDQwMG1zIGVhc2UtaW4tb3V0OworICAtbXMtdHJhbnNpdGlvbjogb3BhY2l0eSA0MDBtcyBlYXNlLWluLW91dDsKKyAgLW8tdHJhbnNpdGlvbjogb3BhY2l0eSA0MDBtcyBlYXNlLWluLW91dDsKKyAgdHJhbnNpdGlvbjogb3BhY2l0eSA0MDBtcyBlYXNlLWluLW91dDsKK30KKy8qIGxpbmUgNzQxLCAuLi9zY3NzL2RlZmF1bHQuc2NzcyAqLworLndpdGgtbm90ZXMucG9wdXAgLm5vdGUgPiBzZWN0aW9uIHsKKyAgYmFja2dyb3VuZDogI2ZmZjsKKyAgLXdlYmtpdC1ib3JkZXItcmFkaXVzOiA1cHg7CisgIC1tb3otYm9yZGVyLXJhZGl1czogNXB4OworICAtbXMtYm9yZGVyLXJhZGl1czogNXB4OworICAtby1ib3JkZXItcmFkaXVzOiA1cHg7CisgIGJvcmRlci1yYWRpdXM6IDVweDsKKyAgaGVpZ2h0OiAxMDAlOworICB3aWR0aDogMTAwJTsKKyAgLXdlYmtpdC1ib3gtc2l6aW5nOiBib3JkZXItYm94OworICAtbW96LWJveC1zaXppbmc6IGJvcmRlci1ib3g7CisgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7CisgIC13ZWJraXQtYm94LXNoYWRvdzogbm9uZTsKKyAgLW1vei1ib3gtc2hhZG93OiBub25lOworICBib3gtc2hhZG93OiBub25lOworICBvdmVyZmxvdzogYXV0bzsKKyAgcGFkZGluZzogMWVtOworfQorLyogbGluZSA3NTQsIC4uL3Njc3MvZGVmYXVsdC5zY3NzICovCisud2l0aC1ub3RlcyAubm90ZSB7CisgIG9wYWNpdHk6IDE7CisgIC13ZWJraXQtdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDApOworICAtbW96LXRyYW5zZm9ybTogdHJhbnNsYXRlWSgwKTsKKyAgLW1zLXRyYW5zZm9ybTogdHJhbnNsYXRlWSgwKTsKKyAgLW8tdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDApOworICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMCk7CisgIHBvaW50ZXItZXZlbnRzOiBhdXRvOworfQorCisvKiBsaW5lIDc2MSwgLi4vc2Nzcy9kZWZhdWx0LnNjc3MgKi8KKy5zb3VyY2UgeworICBmb250LXNpemU6IDE0cHg7CisgIGNvbG9yOiAjYTlhOWE5OworICBwb3NpdGlvbjogYWJzb2x1dGU7CisgIGJvdHRvbTogNzBweDsKKyAgbGVmdDogNjBweDsKK30KKworLyogbGluZSA3NjksIC4uL3Njc3MvZGVmYXVsdC5zY3NzICovCisuY2VudGVyZWQgeworICB0ZXh0LWFsaWduOiBjZW50ZXI7Cit9CisKKy8qIGxpbmUgNzczLCAuLi9zY3NzL2RlZmF1bHQuc2NzcyAqLworLnJlZmxlY3QgeworICAtd2Via2l0LWJveC1yZWZsZWN0OiBiZWxvdyAzcHggLXdlYmtpdC1saW5lYXItZ3JhZGllbnQocmdiYSgyNTUsIDI1NSwgMjU1LCAwKSA4NSUsIHdoaXRlIDE1MCUpOworICAtbW96LWJveC1yZWZsZWN0OiBiZWxvdyAzcHggLW1vei1saW5lYXItZ3JhZGllbnQocmdiYSgyNTUsIDI1NSwgMjU1LCAwKSA4NSUsIHdoaXRlIDE1MCUpOworICAtby1ib3gtcmVmbGVjdDogYmVsb3cgM3B4IC1vLWxpbmVhci1ncmFkaWVudChyZ2JhKDI1NSwgMjU1LCAyNTUsIDApIDg1JSwgd2hpdGUgMTUwJSk7CisgIC1tcy1ib3gtcmVmbGVjdDogYmVsb3cgM3B4IC1tcy1saW5lYXItZ3JhZGllbnQocmdiYSgyNTUsIDI1NSwgMjU1LCAwKSA4NSUsIHdoaXRlIDE1MCUpOworICBib3gtcmVmbGVjdDogYmVsb3cgM3B4IGxpbmVhci1ncmFkaWVudChyZ2JhKDI1NSwgMjU1LCAyNTUsIDApIDg1JSwgI2ZmZmZmZiAxNTAlKTsKK30KKworLyogbGluZSA3ODEsIC4uL3Njc3MvZGVmYXVsdC5zY3NzICovCisuZmxleGJveCB7CisgIGRpc3BsYXk6IC13ZWJraXQtYm94ICFpbXBvcnRhbnQ7CisgIGRpc3BsYXk6IC1tb3otYm94ICFpbXBvcnRhbnQ7CisgIGRpc3BsYXk6IC1tcy1ib3ggIWltcG9ydGFudDsKKyAgZGlzcGxheTogLW8tYm94ICFpbXBvcnRhbnQ7CisgIGRpc3BsYXk6IGJveCAhaW1wb3J0YW50OworfQorCisvKiBsaW5lIDc4NSwgLi4vc2Nzcy9kZWZhdWx0LnNjc3MgKi8KKy5mbGV4Ym94LnZjZW50ZXIgeworICAtd2Via2l0LWJveC1vcmllbnQ6IHZlcnRpY2FsOworICAtbW96LWJveC1vcmllbnQ6IHZlcnRpY2FsOworICAtbXMtYm94LW9yaWVudDogdmVydGljYWw7CisgIGJveC1vcmllbnQ6IHZlcnRpY2FsOworICAtd2Via2l0LWJveC1hbGlnbjogY2VudGVyOworICAtbW96LWJveC1hbGlnbjogY2VudGVyOworICAtbXMtYm94LWFsaWduOiBjZW50ZXI7CisgIGJveC1hbGlnbjogY2VudGVyOworICAtd2Via2l0LWJveC1wYWNrOiBjZW50ZXI7CisgIC1tb3otYm94LXBhY2s6IGNlbnRlcjsKKyAgLW1zLWJveC1wYWNrOiBjZW50ZXI7CisgIGJveC1wYWNrOiBjZW50ZXI7CisgIGhlaWdodDogMTAwJTsKKyAgd2lkdGg6IDEwMCU7Cit9CisKKy8qIGxpbmUgNzkxLCAuLi9zY3NzL2RlZmF1bHQuc2NzcyAqLworLmZsZXhib3gudmxlZnQgeworICAtd2Via2l0LWJveC1vcmllbnQ6IHZlcnRpY2FsOworICAtbW96LWJveC1vcmllbnQ6IHZlcnRpY2FsOworICAtbXMtYm94LW9yaWVudDogdmVydGljYWw7CisgIGJveC1vcmllbnQ6IHZlcnRpY2FsOworICAtd2Via2l0LWJveC1hbGlnbjogbGVmdDsKKyAgLW1vei1ib3gtYWxpZ246IGxlZnQ7CisgIC1tcy1ib3gtYWxpZ246IGxlZnQ7CisgIGJveC1hbGlnbjogbGVmdDsKKyAgLXdlYmtpdC1ib3gtcGFjazogY2VudGVyOworICAtbW96LWJveC1wYWNrOiBjZW50ZXI7CisgIC1tcy1ib3gtcGFjazogY2VudGVyOworICBib3gtcGFjazogY2VudGVyOworICBoZWlnaHQ6IDEwMCU7CisgIHdpZHRoOiAxMDAlOworfQorCisvKiBsaW5lIDc5NywgLi4vc2Nzcy9kZWZhdWx0LnNjc3MgKi8KKy5mbGV4Ym94LnZyaWdodCB7CisgIC13ZWJraXQtYm94LW9yaWVudDogdmVydGljYWw7CisgIC1tb3otYm94LW9yaWVudDogdmVydGljYWw7CisgIC1tcy1ib3gtb3JpZW50OiB2ZXJ0aWNhbDsKKyAgYm94LW9yaWVudDogdmVydGljYWw7CisgIC13ZWJraXQtYm94LWFsaWduOiBlbmQ7CisgIC1tb3otYm94LWFsaWduOiBlbmQ7CisgIC1tcy1ib3gtYWxpZ246IGVuZDsKKyAgYm94LWFsaWduOiBlbmQ7CisgIC13ZWJraXQtYm94LXBhY2s6IGNlbnRlcjsKKyAgLW1vei1ib3gtcGFjazogY2VudGVyOworICAtbXMtYm94LXBhY2s6IGNlbnRlcjsKKyAgYm94LXBhY2s6IGNlbnRlcjsKKyAgaGVpZ2h0OiAxMDAlOworICB3aWR0aDogMTAwJTsKK30KKworLyogbGluZSA4MDMsIC4uL3Njc3MvZGVmYXVsdC5zY3NzICovCisuYXV0by1mYWRlaW4geworICAtd2Via2l0LXRyYW5zaXRpb246IG9wYWNpdHkgMC42cyBlYXNlLWluIDFzOworICAtbW96LXRyYW5zaXRpb246IG9wYWNpdHkgMC42cyBlYXNlLWluIDFzOworICAtbXMtdHJhbnNpdGlvbjogb3BhY2l0eSAwLjZzIGVhc2UtaW4gMXM7CisgIC1vLXRyYW5zaXRpb246IG9wYWNpdHkgMC42cyBlYXNlLWluIDFzOworICB0cmFuc2l0aW9uOiBvcGFjaXR5IDAuNnMgZWFzZS1pbiAxczsKKyAgb3BhY2l0eTogMDsKK30KKworLyogQ2xpY2thYmxlL3RhcHBhYmxlIGFyZWFzICovCisvKiBsaW5lIDgwOSwgLi4vc2Nzcy9kZWZhdWx0LnNjc3MgKi8KKy5zbGlkZS1hcmVhIHsKKyAgei1pbmRleDogMTAwMDsKKyAgcG9zaXRpb246IGFic29sdXRlOworICBsZWZ0OiAwOworICB0b3A6IDA7CisgIHdpZHRoOiAxMDBweDsKKyAgaGVpZ2h0OiA3MDBweDsKKyAgbGVmdDogNTAlOworICB0b3A6IDUwJTsKKyAgY3Vyc29yOiBwb2ludGVyOworICBtYXJnaW4tdG9wOiAtMzUwcHg7Cit9CisKKy8qIGxpbmUgODI2LCAuLi9zY3NzL2RlZmF1bHQuc2NzcyAqLworI3ByZXYtc2xpZGUtYXJlYSB7CisgIG1hcmdpbi1sZWZ0OiAtNTUwcHg7Cit9CisKKy8qIGxpbmUgODMxLCAuLi9zY3NzL2RlZmF1bHQuc2NzcyAqLworI25leHQtc2xpZGUtYXJlYSB7CisgIG1hcmdpbi1sZWZ0OiA0NTBweDsKK30KKworLyogPT09PT0gU0xJREUgQ09OVEVOVCA9PT09PSAqLworLyogbGluZSA4MzksIC4uL3Njc3MvZGVmYXVsdC5zY3NzICovCisubG9nb3NsaWRlIGltZyB7CisgIHdpZHRoOiAzODNweDsKKyAgaGVpZ2h0OiA5MnB4OworfQorCisvKiBsaW5lIDg0NSwgLi4vc2Nzcy9kZWZhdWx0LnNjc3MgKi8KKy5zZWd1ZSB7CisgIHBhZGRpbmc6IDYwcHggMTIwcHg7Cit9CisvKiBsaW5lIDg0OCwgLi4vc2Nzcy9kZWZhdWx0LnNjc3MgKi8KKy5zZWd1ZSBoMiB7CisgIGNvbG9yOiAjZTZlNmU2OworICBmb250LXNpemU6IDYwcHg7Cit9CisvKiBsaW5lIDg1MiwgLi4vc2Nzcy9kZWZhdWx0LnNjc3MgKi8KKy5zZWd1ZSBoMyB7CisgIGNvbG9yOiAjZTZlNmU2OworICBsaW5lLWhlaWdodDogMi44OworfQorLyogbGluZSA4NTYsIC4uL3Njc3MvZGVmYXVsdC5zY3NzICovCisuc2VndWUgaGdyb3VwIHsKKyAgcG9zaXRpb246IGFic29sdXRlOworICBib3R0b206IDIyNXB4OworfQorCisvKiBsaW5lIDg2MiwgLi4vc2Nzcy9kZWZhdWx0LnNjc3MgKi8KKy50aGFuay15b3Utc2xpZGUgeworICBiYWNrZ3JvdW5kOiAjNDM4N2ZkICFpbXBvcnRhbnQ7CisgIGNvbG9yOiB3aGl0ZTsKK30KKy8qIGxpbmUgODY2LCAuLi9zY3NzL2RlZmF1bHQuc2NzcyAqLworLnRoYW5rLXlvdS1zbGlkZSBoMiB7CisgIGZvbnQtc2l6ZTogNjBweDsKKyAgY29sb3I6IGluaGVyaXQ7Cit9CisvKiBsaW5lIDg3MSwgLi4vc2Nzcy9kZWZhdWx0LnNjc3MgKi8KKy50aGFuay15b3Utc2xpZGUgYXJ0aWNsZSA+IHAgeworICBtYXJnaW4tdG9wOiAyZW07CisgIGZvbnQtc2l6ZTogMjBwdDsKK30KKy8qIGxpbmUgODc2LCAuLi9zY3NzL2RlZmF1bHQuc2NzcyAqLworLnRoYW5rLXlvdS1zbGlkZSA+IHAgeworICBwb3NpdGlvbjogYWJzb2x1dGU7CisgIGJvdHRvbTogODBweDsKKyAgZm9udC1zaXplOiAyNHB0OworICBsaW5lLWhlaWdodDogMS4zOworfQorCisvKiBsaW5lIDg4NCwgLi4vc2Nzcy9kZWZhdWx0LnNjc3MgKi8KK2FzaWRlLmdkYmFyIHsKKyAgaGVpZ2h0OiA5N3B4OworICB3aWR0aDogMjE1cHg7CisgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKKyAgbGVmdDogLTFweDsKKyAgdG9wOiAxMjVweDsKKyAgLXdlYmtpdC1ib3JkZXItcmFkaXVzOiAwIDEwcHggMTBweCAwOworICAtbW96LWJvcmRlci1yYWRpdXM6IDAgMTBweCAxMHB4IDA7CisgIC1tcy1ib3JkZXItcmFkaXVzOiAwIDEwcHggMTBweCAwOworICAtby1ib3JkZXItcmFkaXVzOiAwIDEwcHggMTBweCAwOworICBib3JkZXItcmFkaXVzOiAwIDEwcHggMTBweCAwOworICBiYWNrZ3JvdW5kOiAtd2Via2l0LWdyYWRpZW50KGxpbmVhciwgMCUgNTAlLCAxMDAlIDUwJSwgY29sb3Itc3RvcCgwJSwgI2U2ZTZlNiksIGNvbG9yLXN0b3AoMTAwJSwgI2U2ZTZlNikpIG5vLXJlcGVhdDsKKyAgYmFja2dyb3VuZDogLXdlYmtpdC1saW5lYXItZ3JhZGllbnQobGVmdCwgI2U2ZTZlNiwgI2U2ZTZlNikgbm8tcmVwZWF0OworICBiYWNrZ3JvdW5kOiAtbW96LWxpbmVhci1ncmFkaWVudChsZWZ0LCAjZTZlNmU2LCAjZTZlNmU2KSBuby1yZXBlYXQ7CisgIGJhY2tncm91bmQ6IC1vLWxpbmVhci1ncmFkaWVudChsZWZ0LCAjZTZlNmU2LCAjZTZlNmU2KSBuby1yZXBlYXQ7CisgIGJhY2tncm91bmQ6IC1tcy1saW5lYXItZ3JhZGllbnQobGVmdCwgI2U2ZTZlNiwgI2U2ZTZlNikgbm8tcmVwZWF0OworICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQobGVmdCwgI2U2ZTZlNiwgI2U2ZTZlNikgbm8tcmVwZWF0OworICAtd2Via2l0LWJhY2tncm91bmQtc2l6ZTogMCUgMTAwJTsKKyAgLW1vei1iYWNrZ3JvdW5kLXNpemU6IDAlIDEwMCU7CisgIC1vLWJhY2tncm91bmQtc2l6ZTogMCUgMTAwJTsKKyAgYmFja2dyb3VuZC1zaXplOiAwJSAxMDAlOworICAtd2Via2l0LXRyYW5zaXRpb246IGFsbCAwLjVzIGVhc2Utb3V0IDAuNXM7CisgIC1tb3otdHJhbnNpdGlvbjogYWxsIDAuNXMgZWFzZS1vdXQgMC41czsKKyAgLW1zLXRyYW5zaXRpb246IGFsbCAwLjVzIGVhc2Utb3V0IDAuNXM7CisgIC1vLXRyYW5zaXRpb246IGFsbCAwLjVzIGVhc2Utb3V0IDAuNXM7CisgIHRyYW5zaXRpb246IGFsbCAwLjVzIGVhc2Utb3V0IDAuNXM7CisgIC8qIEJldHRlciB0byB0cmFuc2l0aW9uIG9ubHkgb24gYmFja2dyb3VuZC1zaXplLCBidXQgbm90IHN1cmUgaG93IHRvIGRvIHRoYXQgd2l0aCB0aGUgbWl4aW4uICovCit9CisvKiBsaW5lIDg5NSwgLi4vc2Nzcy9kZWZhdWx0LnNjc3MgKi8KK2FzaWRlLmdkYmFyLnJpZ2h0IHsKKyAgcmlnaHQ6IDA7CisgIGxlZnQ6IC1tb3otaW5pdGlhbDsKKyAgbGVmdDogaW5pdGlhbDsKKyAgdG9wOiAyNTRweDsKKyAgLyogOTYgaXMgaGVpZ2h0IG9mIGdyYXkgaWNvbiBiYXIgKi8KKyAgLXdlYmtpdC10cmFuc2Zvcm06IHJvdGF0ZVooMTgwZGVnKTsKKyAgLW1vei10cmFuc2Zvcm06IHJvdGF0ZVooMTgwZGVnKTsKKyAgLW1zLXRyYW5zZm9ybTogcm90YXRlWigxODBkZWcpOworICAtby10cmFuc2Zvcm06IHJvdGF0ZVooMTgwZGVnKTsKKyAgdHJhbnNmb3JtOiByb3RhdGVaKDE4MGRlZyk7Cit9CisvKiBsaW5lIDkwMiwgLi4vc2Nzcy9kZWZhdWx0LnNjc3MgKi8KK2FzaWRlLmdkYmFyLnJpZ2h0IGltZyB7CisgIC13ZWJraXQtdHJhbnNmb3JtOiByb3RhdGVaKDE4MGRlZyk7CisgIC1tb3otdHJhbnNmb3JtOiByb3RhdGVaKDE4MGRlZyk7CisgIC1tcy10cmFuc2Zvcm06IHJvdGF0ZVooMTgwZGVnKTsKKyAgLW8tdHJhbnNmb3JtOiByb3RhdGVaKDE4MGRlZyk7CisgIHRyYW5zZm9ybTogcm90YXRlWigxODBkZWcpOworfQorLyogbGluZSA5MDcsIC4uL3Njc3MvZGVmYXVsdC5zY3NzICovCithc2lkZS5nZGJhci5ib3R0b20geworICB0b3A6IC1tb3otaW5pdGlhbDsKKyAgdG9wOiBpbml0aWFsOworICBib3R0b206IDYwcHg7Cit9CisvKiBsaW5lIDkxMywgLi4vc2Nzcy9kZWZhdWx0LnNjc3MgKi8KK2FzaWRlLmdkYmFyIGltZyB7CisgIHdpZHRoOiA4NXB4OworICBoZWlnaHQ6IDg1cHg7CisgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKKyAgcmlnaHQ6IDA7CisgIG1hcmdpbjogOHB4IDE1cHg7Cit9CisKKy8qIGxpbmUgOTI0LCAuLi9zY3NzL2RlZmF1bHQuc2NzcyAqLworLnRpdGxlLXNsaWRlIGhncm91cCB7CisgIGJvdHRvbTogMTAwcHg7Cit9CisvKiBsaW5lIDkyNywgLi4vc2Nzcy9kZWZhdWx0LnNjc3MgKi8KKy50aXRsZS1zbGlkZSBoZ3JvdXAgaDEgeworICBmb250LXNpemU6IDU1cHg7CisgIGxpbmUtaGVpZ2h0OiAxLjQ7CisgIGxldHRlci1zcGFjaW5nOiAtM3B4OworICBjb2xvcjogIzUxNTE1MTsKK30KKy8qIGxpbmUgOTM0LCAuLi9zY3NzL2RlZmF1bHQuc2NzcyAqLworLnRpdGxlLXNsaWRlIGhncm91cCBoMiB7CisgIGZvbnQtc2l6ZTogMzRweDsKKyAgY29sb3I6ICNhOWE5YTk7CisgIGZvbnQtd2VpZ2h0OiBpbmhlcml0OworfQorLyogbGluZSA5NDAsIC4uL3Njc3MvZGVmYXVsdC5zY3NzICovCisudGl0bGUtc2xpZGUgaGdyb3VwIHAgeworICBmb250LXNpemU6IDIwcHg7CisgIGNvbG9yOiAjNzk3OTc5OworICBsaW5lLWhlaWdodDogMS4zOworICBtYXJnaW4tdG9wOiAyZW07Cit9CisKKy8qIGxpbmUgOTQ5LCAuLi9zY3NzL2RlZmF1bHQuc2NzcyAqLworLnF1b3RlIHsKKyAgY29sb3I6ICNlNmU2ZTY7Cit9CisvKiBsaW5lIDk1MiwgLi4vc2Nzcy9kZWZhdWx0LnNjc3MgKi8KKy5xdW90ZSAuYXV0aG9yIHsKKyAgZm9udC1zaXplOiAyNHB4OworICBwb3NpdGlvbjogYWJzb2x1dGU7CisgIGJvdHRvbTogODBweDsKKyAgbGluZS1oZWlnaHQ6IDEuNDsKK30KKworLyogbGluZSA5NjEsIC4uL3Njc3MvZGVmYXVsdC5zY3NzICovCitbZGF0YS1jb25maWctY29udGFjdF0gYSB7CisgIGNvbG9yOiB3aGl0ZTsKKyAgYm9yZGVyLWJvdHRvbTogbm9uZTsKK30KKy8qIGxpbmUgOTY1LCAuLi9zY3NzL2RlZmF1bHQuc2NzcyAqLworW2RhdGEtY29uZmlnLWNvbnRhY3RdIHNwYW4geworICB3aWR0aDogMTE1cHg7CisgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKK30KKworLyogbGluZSA5NzQsIC4uL3Njc3MvZGVmYXVsdC5zY3NzICovCisub3ZlcnZpZXcucG9wdXAgLm5vdGUgeworICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7Cit9CisvKiBsaW5lIDk4MCwgLi4vc2Nzcy9kZWZhdWx0LnNjc3MgKi8KKy5vdmVydmlldyBzbGlkZXMgc2xpZGUgeworICBkaXNwbGF5OiBibG9jazsKKyAgY3Vyc29yOiBwb2ludGVyOworICBvcGFjaXR5OiAwLjU7CisgIHBvaW50ZXItZXZlbnRzOiBhdXRvICFpbXBvcnRhbnQ7CisgIGJhY2tncm91bmQ6IC13ZWJraXQtZ3JhZGllbnQobGluZWFyLCA1MCUgMCUsIDUwJSAxMDAlLCBjb2xvci1zdG9wKDAlLCAjZmZmZmZmKSwgY29sb3Itc3RvcCg4NSUsICNmZmZmZmYpLCBjb2xvci1zdG9wKDEwMCUsICNlNmU2ZTYpKTsKKyAgYmFja2dyb3VuZDogLXdlYmtpdC1saW5lYXItZ3JhZGllbnQoI2ZmZmZmZiwgI2ZmZmZmZiA4NSUsICNlNmU2ZTYpOworICBiYWNrZ3JvdW5kOiAtbW96LWxpbmVhci1ncmFkaWVudCgjZmZmZmZmLCAjZmZmZmZmIDg1JSwgI2U2ZTZlNik7CisgIGJhY2tncm91bmQ6IC1vLWxpbmVhci1ncmFkaWVudCgjZmZmZmZmLCAjZmZmZmZmIDg1JSwgI2U2ZTZlNik7CisgIGJhY2tncm91bmQ6IC1tcy1saW5lYXItZ3JhZGllbnQoI2ZmZmZmZiwgI2ZmZmZmZiA4NSUsICNlNmU2ZTYpOworICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoI2ZmZmZmZiwgI2ZmZmZmZiA4NSUsICNlNmU2ZTYpOworICBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTsKK30KKy8qIGxpbmUgOTgxLCAuLi9zY3NzL2RlZmF1bHQuc2NzcyAqLworLm92ZXJ2aWV3IHNsaWRlcyBzbGlkZS5iYWNrZHJvcCB7CisgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDsKK30KKy8qIGxpbmUgOTk2LCAuLi9zY3NzL2RlZmF1bHQuc2NzcyAqLworLm92ZXJ2aWV3IHNsaWRlcyBzbGlkZS5mYXItcGFzdCwgLm92ZXJ2aWV3IHNsaWRlcyBzbGlkZS5wYXN0LCAub3ZlcnZpZXcgc2xpZGVzIHNsaWRlLm5leHQsIC5vdmVydmlldyBzbGlkZXMgc2xpZGUuZmFyLW5leHQsIC5vdmVydmlldyBzbGlkZXMgc2xpZGUuZmFyLXBhc3QgeworICBvcGFjaXR5OiAwLjU7CisgIGRpc3BsYXk6IGJsb2NrOworfQorLyogbGluZSAxMDAxLCAuLi9zY3NzL2RlZmF1bHQuc2NzcyAqLworLm92ZXJ2aWV3IHNsaWRlcyBzbGlkZS5jdXJyZW50IHsKKyAgb3BhY2l0eTogMTsKK30KKy8qIGxpbmUgMTAwNywgLi4vc2Nzcy9kZWZhdWx0LnNjc3MgKi8KKy5vdmVydmlldyAuc2xpZGUtYXJlYSB7CisgIGRpc3BsYXk6IG5vbmU7Cit9CisKK0BtZWRpYSBwcmludCB7CisgIC8qIGxpbmUgMTAxNCwgLi4vc2Nzcy9kZWZhdWx0LnNjc3MgKi8KKyAgc2xpZGVzIHNsaWRlIHsKKyAgICBkaXNwbGF5OiBibG9jayAhaW1wb3J0YW50OworICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKKyAgICBiYWNrZ3JvdW5kOiAtd2Via2l0LWdyYWRpZW50KGxpbmVhciwgNTAlIDAlLCA1MCUgMTAwJSwgY29sb3Itc3RvcCgwJSwgI2ZmZmZmZiksIGNvbG9yLXN0b3AoODUlLCAjZmZmZmZmKSwgY29sb3Itc3RvcCgxMDAlLCAjZTZlNmU2KSk7CisgICAgYmFja2dyb3VuZDogLXdlYmtpdC1saW5lYXItZ3JhZGllbnQoI2ZmZmZmZiwgI2ZmZmZmZiA4NSUsICNlNmU2ZTYpOworICAgIGJhY2tncm91bmQ6IC1tb3otbGluZWFyLWdyYWRpZW50KCNmZmZmZmYsICNmZmZmZmYgODUlLCAjZTZlNmU2KTsKKyAgICBiYWNrZ3JvdW5kOiAtby1saW5lYXItZ3JhZGllbnQoI2ZmZmZmZiwgI2ZmZmZmZiA4NSUsICNlNmU2ZTYpOworICAgIGJhY2tncm91bmQ6IC1tcy1saW5lYXItZ3JhZGllbnQoI2ZmZmZmZiwgI2ZmZmZmZiA4NSUsICNlNmU2ZTYpOworICAgIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCgjZmZmZmZmLCAjZmZmZmZmIDg1JSwgI2U2ZTZlNik7CisgICAgYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7CisgICAgLXdlYmtpdC10cmFuc2Zvcm06IG5vbmUgIWltcG9ydGFudDsKKyAgICAtbW96LXRyYW5zZm9ybTogbm9uZSAhaW1wb3J0YW50OworICAgIC1tcy10cmFuc2Zvcm06IG5vbmUgIWltcG9ydGFudDsKKyAgICAtby10cmFuc2Zvcm06IG5vbmUgIWltcG9ydGFudDsKKyAgICB0cmFuc2Zvcm06IG5vbmUgIWltcG9ydGFudDsKKyAgICB3aWR0aDogMTAwJTsKKyAgICBoZWlnaHQ6IDEwMCU7CisgICAgcGFnZS1icmVhay1hZnRlcjogYWx3YXlzOworICAgIHRvcDogYXV0byAhaW1wb3J0YW50OworICAgIGxlZnQ6IGF1dG8gIWltcG9ydGFudDsKKyAgICBtYXJnaW4tdG9wOiAwICFpbXBvcnRhbnQ7CisgICAgbWFyZ2luLWxlZnQ6IDAgIWltcG9ydGFudDsKKyAgICBvcGFjaXR5OiAxICFpbXBvcnRhbnQ7CisgICAgY29sb3I6ICM1NTU7CisgIH0KKyAgLyogbGluZSAxMDM0LCAuLi9zY3NzL2RlZmF1bHQuc2NzcyAqLworICBzbGlkZXMgc2xpZGUuZmFyLXBhc3QsIHNsaWRlcyBzbGlkZS5wYXN0LCBzbGlkZXMgc2xpZGUubmV4dCwgc2xpZGVzIHNsaWRlLmZhci1uZXh0LCBzbGlkZXMgc2xpZGUuZmFyLXBhc3QsIHNsaWRlcyBzbGlkZS5jdXJyZW50IHsKKyAgICBvcGFjaXR5OiAxICFpbXBvcnRhbnQ7CisgICAgZGlzcGxheTogYmxvY2sgIWltcG9ydGFudDsKKyAgfQorICAvKiBsaW5lIDEwNDAsIC4uL3Njc3MvZGVmYXVsdC5zY3NzICovCisgIHNsaWRlcyBzbGlkZSAuYnVpbGQgPiAqIHsKKyAgICAtd2Via2l0LXRyYW5zaXRpb246IG5vbmU7CisgICAgLW1vei10cmFuc2l0aW9uOiBub25lOworICAgIC1tcy10cmFuc2l0aW9uOiBub25lOworICAgIC1vLXRyYW5zaXRpb246IG5vbmU7CisgICAgdHJhbnNpdGlvbjogbm9uZTsKKyAgfQorICAvKiBsaW5lIDEwNDUsIC4uL3Njc3MvZGVmYXVsdC5zY3NzICovCisgIHNsaWRlcyBzbGlkZSAuYnVpbGQgLnRvLWJ1aWxkLAorICBzbGlkZXMgc2xpZGUgLmJ1aWxkIC5idWlsZC1mYWRlIHsKKyAgICBvcGFjaXR5OiAxOworICB9CisgIC8qIGxpbmUgMTA1MCwgLi4vc2Nzcy9kZWZhdWx0LnNjc3MgKi8KKyAgc2xpZGVzIHNsaWRlIC5hdXRvLWZhZGVpbiB7CisgICAgb3BhY2l0eTogMSAhaW1wb3J0YW50OworICB9CisgIC8qIGxpbmUgMTA1NCwgLi4vc2Nzcy9kZWZhdWx0LnNjc3MgKi8KKyAgc2xpZGVzIHNsaWRlLmJhY2tkcm9wIHsKKyAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7CisgIH0KKyAgLyogbGluZSAxMDU4LCAuLi9zY3NzL2RlZmF1bHQuc2NzcyAqLworICBzbGlkZXMgc2xpZGUgdGFibGUucm93cyB7CisgICAgYm9yZGVyLXJpZ2h0OiAwOworICB9CisgIC8qIGxpbmUgMTA2MywgLi4vc2Nzcy9kZWZhdWx0LnNjc3MgKi8KKyAgc2xpZGVzIHNsaWRlW2hpZGRlbl0geworICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDsKKyAgfQorCisgIC8qIGxpbmUgMTA2OCwgLi4vc2Nzcy9kZWZhdWx0LnNjc3MgKi8KKyAgLnNsaWRlLWFyZWEgeworICAgIGRpc3BsYXk6IG5vbmU7CisgIH0KKworICAvKiBsaW5lIDEwNzIsIC4uL3Njc3MvZGVmYXVsdC5zY3NzICovCisgIC5yZWZsZWN0IHsKKyAgICAtd2Via2l0LWJveC1yZWZsZWN0OiBub25lOworICAgIC1tb3otYm94LXJlZmxlY3Q6IG5vbmU7CisgICAgLW8tYm94LXJlZmxlY3Q6IG5vbmU7CisgICAgLW1zLWJveC1yZWZsZWN0OiBub25lOworICAgIGJveC1yZWZsZWN0OiBub25lOworICB9CisKKyAgLyogbGluZSAxMDgwLCAuLi9zY3NzL2RlZmF1bHQuc2NzcyAqLworICBwcmUsIGNvZGUgeworICAgIGZvbnQtZmFtaWx5OiBtb25vc3BhY2UgIWltcG9ydGFudDsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvcGFnZXMvdHJhbnNjcmlwdHMvMjAxM19FY2xpcHNlQ29uRnJhbmNlL3RoZW1lL2Nzcy9waG9uZS5jc3MgYi9wYWdlcy90cmFuc2NyaXB0cy8yMDEzX0VjbGlwc2VDb25GcmFuY2UvdGhlbWUvY3NzL3Bob25lLmNzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MDI1NDM2Ci0tLSAvZGV2L251bGwKKysrIGIvcGFnZXMvdHJhbnNjcmlwdHMvMjAxM19FY2xpcHNlQ29uRnJhbmNlL3RoZW1lL2Nzcy9waG9uZS5jc3MKQEAgLTAsMCArMSwyNyBAQAorLypTbWFydHBob25lcyAocG9ydHJhaXQgYW5kIGxhbmRzY2FwZSkgLS0tLS0tLS0tLS0gKi8KKy8qQG1lZGlhIG9ubHkgc2NyZWVuCithbmQgKG1pbi13aWR0aCA6IDMyMHB4KQorYW5kIChtYXgtd2lkdGggOiA0ODBweCkgeworCit9Ki8KKy8qIFNtYXJ0cGhvbmVzIChwb3J0cmFpdCkgLS0tLS0tLS0tLS0gKi8KKy8qIFN0eWxlcyAqLworLyogbGluZSAxNywgLi4vc2Nzcy9waG9uZS5zY3NzICovCitzbGlkZXMgPiBzbGlkZSB7CisgIC8qICB3aWR0aDogJHNsaWRlLXdpZHRoICFpbXBvcnRhbnQ7CisgICAgaGVpZ2h0OiAkc2xpZGUtaGVpZ2h0ICFpbXBvcnRhbnQ7CisgICAgbWFyZ2luLWxlZnQ6IC0kc2xpZGUtd2lkdGggLyAyICFpbXBvcnRhbnQ7CisgICAgbWFyZ2luLXRvcDogLSRzbGlkZS1oZWlnaHQgLyAyICFpbXBvcnRhbnQ7CisgICovCisgIC13ZWJraXQtdHJhbnNpdGlvbjogbm9uZSAhaW1wb3J0YW50OworICAtd2Via2l0LXRyYW5zaXRpb246IG5vbmUgIWltcG9ydGFudDsKKyAgLW1vei10cmFuc2l0aW9uOiBub25lICFpbXBvcnRhbnQ7CisgIC1tcy10cmFuc2l0aW9uOiBub25lICFpbXBvcnRhbnQ7CisgIC1vLXRyYW5zaXRpb246IG5vbmUgIWltcG9ydGFudDsKKyAgdHJhbnNpdGlvbjogbm9uZSAhaW1wb3J0YW50OworfQorCisvKiBpUGhvbmUgNCAtLS0tLS0tLS0tLSAqLworQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAoLXdlYmtpdC1taW4tZGV2aWNlLXBpeGVsLXJhdGlvIDogMS41KSwgb25seSBzY3JlZW4gYW5kIChtaW4tZGV2aWNlLXBpeGVsLXJhdGlvIDogMS41KSB7CisgIC8qIFN0eWxlcyAqLworfQpkaWZmIC0tZ2l0IGEvcGFnZXMvdHJhbnNjcmlwdHMvMjAxM19FY2xpcHNlQ29uRnJhbmNlL3RoZW1lL3Njc3MvX2Jhc2Uuc2NzcyBiL3BhZ2VzL3RyYW5zY3JpcHRzLzIwMTNfRWNsaXBzZUNvbkZyYW5jZS90aGVtZS9zY3NzL19iYXNlLnNjc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWM5OWRkNAotLS0gL2Rldi9udWxsCisrKyBiL3BhZ2VzL3RyYW5zY3JpcHRzLzIwMTNfRWNsaXBzZUNvbkZyYW5jZS90aGVtZS9zY3NzL19iYXNlLnNjc3MKQEAgLTAsMCArMSwxMzUgQEAKK0BpbXBvcnQgImNvbXBhc3MvcmVzZXQiOworQGltcG9ydCAiY29tcGFzcy9jc3MzL2JvcmRlci1yYWRpdXMiOworQGltcG9ydCAiY29tcGFzcy9jc3MzL2JveCI7CitAaW1wb3J0ICJjb21wYXNzL2NzczMvYm94LXNoYWRvdyI7CitAaW1wb3J0ICJjb21wYXNzL2NzczMvYm94LXNpemluZyI7CitAaW1wb3J0ICJjb21wYXNzL2NzczMvaW1hZ2VzIjsKK0BpbXBvcnQgImNvbXBhc3MvY3NzMy90ZXh0LXNoYWRvdyI7CitAaW1wb3J0ICJjb21wYXNzL2NzczMvYmFja2dyb3VuZC1zaXplIjsKK0BpbXBvcnQgImNvbXBhc3MvY3NzMy90cmFuc2Zvcm0iOworQGltcG9ydCAiY29tcGFzcy9jc3MzL3RyYW5zaXRpb24iOworCitAbWl4aW4gZm9udC1zbW9vdGhpbmcoJHZhbDogYW50aWFsaWFzZWQpIHsKKyAgLXdlYmtpdC1mb250LXNtb290aGluZzogJHZhbDsKKyAgLW1vei1mb250LXNtb290aGluZzogJHZhbDsKKyAgLW1zLWZvbnQtc21vb3RoaW5nOiAkdmFsOworICAtby1mb250LXNtb290aGluZzogJHZhbDsKK30KKworQG1peGluIGZsZXhib3ggeworICBkaXNwbGF5OiAtd2Via2l0LWJveCAhaW1wb3J0YW50OworICBkaXNwbGF5OiAtbW96LWJveCAhaW1wb3J0YW50OworICBkaXNwbGF5OiAtbXMtYm94ICFpbXBvcnRhbnQ7CisgIGRpc3BsYXk6IC1vLWJveCAhaW1wb3J0YW50OworICBkaXNwbGF5OiBib3ggIWltcG9ydGFudDsKK30KKworQG1peGluIGZsZXgtY2VudGVyLWNlbnRlciB7CisgIEBpbmNsdWRlIGJveC1vcmllbnQodmVydGljYWwpOworICBAaW5jbHVkZSBib3gtYWxpZ24oY2VudGVyKTsKKyAgQGluY2x1ZGUgYm94LXBhY2soY2VudGVyKTsKK30KKworQG1peGluIGZsZXgtbGVmdC1jZW50ZXIgeworICBAaW5jbHVkZSBib3gtb3JpZW50KHZlcnRpY2FsKTsKKyAgQGluY2x1ZGUgYm94LWFsaWduKGxlZnQpOworICBAaW5jbHVkZSBib3gtcGFjayhjZW50ZXIpOworfQorCitAbWl4aW4gZmxleC1yaWdodC1jZW50ZXIgeworICBAaW5jbHVkZSBib3gtb3JpZW50KHZlcnRpY2FsKTsKKyAgQGluY2x1ZGUgYm94LWFsaWduKGVuZCk7CisgIEBpbmNsdWRlIGJveC1wYWNrKGNlbnRlcik7Cit9CisKKy8qKgorICogQmFzZSBTbGlkZURlY2sgU3R5bGVzCisgKi8KK2h0bWwgeworICBoZWlnaHQ6IDEwMCU7CisgIG92ZXJmbG93OiBoaWRkZW47Cit9CisKK2JvZHkgeworICBtYXJnaW46IDA7CisgIHBhZGRpbmc6IDA7CisKKyAgb3BhY2l0eTogMDsKKworICBoZWlnaHQ6IDEwMCU7CisgIG1pbi1oZWlnaHQ6IDc0MHB4OworICB3aWR0aDogMTAwJTsKKworICBvdmVyZmxvdzogaGlkZGVuOworCisgIGNvbG9yOiAjZmZmOworICBAaW5jbHVkZSBmb250LXNtb290aGluZyhhbnRpYWxpYXNlZCk7CisgIEBpbmNsdWRlIHRyYW5zaXRpb24ob3BhY2l0eSA4MDBtcyBlYXNlLWluIDEwMG1zKTsgLy8gQWRkIHNtYWxsIGRlbGF5IHRvIHByZXZlbnQgamFuay4KKworICAmLmxvYWRlZCB7CisgICAgb3BhY2l0eTogMSAhaW1wb3J0YW50OworICB9Cit9CisKK2lucHV0LCBidXR0b24geworICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOworfQorCitzbGlkZXMgPiBzbGlkZVtoaWRkZW5dIHsKKyAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50OworfQorCitzbGlkZXMgeworICB3aWR0aDogMTAwJTsKKyAgaGVpZ2h0OiAxMDAlOworICBwb3NpdGlvbjogYWJzb2x1dGU7CisgIGxlZnQ6IDA7CisgIHRvcDogMDsKKyAgQGluY2x1ZGUgdHJhbnNmb3JtKHRyYW5zbGF0ZTNkKDAsIDAsIDApKTsKKyAgQGluY2x1ZGUgcGVyc3BlY3RpdmUoMTAwMCk7CisgIEBpbmNsdWRlIHRyYW5zZm9ybS1zdHlsZShwcmVzZXJ2ZS0zZCk7CisgIEBpbmNsdWRlIHRyYW5zaXRpb24ob3BhY2l0eSA4MDBtcyBlYXNlLWluIDEwMG1zKTsgLy8gQWRkIHNtYWxsIGRlbGF5IHRvIHByZXZlbnQgamFuay4KK30KKworc2xpZGVzID4gc2xpZGUgeworICBkaXNwbGF5OiBibG9jazsKKyAgcG9zaXRpb246IGFic29sdXRlOworICBvdmVyZmxvdzogaGlkZGVuOworICBsZWZ0OiA1MCU7CisgIHRvcDogNTAlOworICBAaW5jbHVkZSBib3gtc2l6aW5nKGJvcmRlci1ib3gpOworfQorCisvKiBTbGlkZSBzdHlsZXMgKi8KKworCisvKmFydGljbGUuZmlsbCBpZnJhbWUgeworICBwb3NpdGlvbjogYWJzb2x1dGU7CisgIGxlZnQ6IDA7CisgIHRvcDogMDsKKyAgd2lkdGg6IDEwMCU7CisgIGhlaWdodDogMTAwJTsKKworICBib3JkZXI6IDA7CisgIG1hcmdpbjogMDsKKworICBAaW5jbHVkZSBib3JkZXItcmFkaXVzKDEwcHgpOworCisgIHotaW5kZXg6IC0xOworfQorCitzbGlkZS5maWxsIHsKKyAgYmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVhdDsKKyAgQGluY2x1ZGUgYmFja2dyb3VuZC1zaXplKGNvdmVyKTsKK30KKworc2xpZGUuZmlsbCBpbWcgeworICBwb3NpdGlvbjogYWJzb2x1dGU7CisgIGxlZnQ6IDA7CisgIHRvcDogMDsKKyAgbWluLXdpZHRoOiAxMDAlOworICBtaW4taGVpZ2h0OiAxMDAlOworCisgIHotaW5kZXg6IC0xOworfQorKi8KZGlmZiAtLWdpdCBhL3BhZ2VzL3RyYW5zY3JpcHRzLzIwMTNfRWNsaXBzZUNvbkZyYW5jZS90aGVtZS9zY3NzL2RlZmF1bHQuc2NzcyBiL3BhZ2VzL3RyYW5zY3JpcHRzLzIwMTNfRWNsaXBzZUNvbkZyYW5jZS90aGVtZS9zY3NzL2RlZmF1bHQuc2NzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZTQyYTExCi0tLSAvZGV2L251bGwKKysrIGIvcGFnZXMvdHJhbnNjcmlwdHMvMjAxM19FY2xpcHNlQ29uRnJhbmNlL3RoZW1lL3Njc3MvZGVmYXVsdC5zY3NzCkBAIC0wLDAgKzEsMTA4MyBAQAorQGltcG9ydCAiYmFzZSI7CitAaW1wb3J0ICJjb21wYXNzL2NzczMvY29sdW1ucyI7CitAaW1wb3J0ICJjb21wYXNzL2NzczMvdXNlci1pbnRlcmZhY2UiOworCiskc29jaWFsLXRhZ3M6ICcjaW8xMic7CiskYnJhbmQtc21hbGwtaWNvbi1zaXplOiAzMHB4OworCiskZ3JheS0xOiAjZTZlNmU2OworJGdyYXktMjogI2E5YTlhOTsKKyRncmF5LTM6ICM3OTc5Nzk7CiskZ3JheS00OiAjNTE1MTUxOworCiskYnJhbmQtYmx1ZTogcmdiKDY3LCAxMzUsIDI1Myk7CiskYnJhbmQtYmx1ZS1zZWNvbmRhcnk6ICMzYzhlZjM7CiskYnJhbmQtYmx1ZS1zZWNvbmRhcnkyOiAjMmE3Y2RmOworCiskYnJhbmQtcmVkOiByZ2IoMjQ0LCA3NCwgNjMpOworJGJyYW5kLXJlZC1zZWNvbmRhcnk6ICNlMDU0M2U7CiskYnJhbmQtcmVkLXNlY29uZGFyeTI6ICNkOTRkM2E7CisKKyRicmFuZC15ZWxsb3c6IHJnYigyNTUsIDIwOSwgNzcpOworJGJyYW5kLXllbGxvdy1zZWNvbmRhcnk6ICNmOWNjNDY7CiskYnJhbmQteWVsbG93LXNlY29uZGFyeTI6ICNmNmMwMDA7CisKKyRicmFuZC1ncmVlbjogcmdiKDEzLCAxNjgsIDk3KTsKKyRicmFuZC1ncmVlbi1zZWNvbmRhcnk6ICMwMGE4NmQ7CiskYnJhbmQtZ3JlZW4tc2Vjb25kYXJ5MjogIzAwOWY1ZDsKKworJHNsaWRlLXdpZHRoOiA5MDBweDsKKyRzbGlkZS1oZWlnaHQ6IDcwMHB4OworJHNsaWRlLXdpZHRoLXdpZGVzY3JlZW46IDExMDBweDsKKyRzbGlkZS10b3AtYm90dG9tLXBhZGRpbmc6IDQwcHg7Ciskc2xpZGUtbGVmdC1yaWdodC1wYWRkaW5nOiA2MHB4OworJHNsaWRlLWJvcmRlci1yYWRpdXM6IDVweDsKKworJHNsaWRlLXRhcC1hcmVhLXdpZHRoOiAxMDBweDsKKworJGFydGljbGUtY29udGVudC10b3AtcGFkZGluZzogNDVweDsKKworQG1peGluIGhpZ2hsaWdodC1jb2xvcigkY29sb3I6ICRicmFuZC15ZWxsb3cpIHsKKyAgLXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOiAkY29sb3I7CisgIC1tb3otdGFwLWhpZ2hsaWdodC1jb2xvcjogJGNvbG9yOworICAtbXMtdGFwLWhpZ2hsaWdodC1jb2xvcjogJGNvbG9yOworICAtby10YXAtaGlnaGxpZ2h0LWNvbG9yOiAkY29sb3I7CisgIHRhcC1oaWdobGlnaHQtY29sb3I6ICRjb2xvcjsKK30KKworQG1peGluIGJhY2tkcm9wIHsKKyAgQGluY2x1ZGUgYmFja2dyb3VuZChsaW5lYXItZ3JhZGllbnQod2hpdGUsIHdoaXRlIDg1JSwgJGdyYXktMSkpOworICBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTsKK30KKworCisKKy8qKgorICogVGhlbWUgU3R5bGVzCisgKi8KKzo6c2VsZWN0aW9uIHsKKyAgY29sb3I6IHdoaXRlOworICBiYWNrZ3JvdW5kLWNvbG9yOiAkYnJhbmQteWVsbG93OworICBAaW5jbHVkZSB0ZXh0LXNoYWRvdyhub25lKTsKK30KKworOjotd2Via2l0LXNjcm9sbGJhciB7CisgIGhlaWdodDogMTZweDsKKyAgb3ZlcmZsb3c6IHZpc2libGU7CisgIHdpZHRoOiAxNnB4OworfQorOjotd2Via2l0LXNjcm9sbGJhci10aHVtYiB7CisgIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMCwgMCwgMCwgLjEpOworICBiYWNrZ3JvdW5kLWNsaXA6IHBhZGRpbmctYm94OworICBib3JkZXI6IHNvbGlkIHRyYW5zcGFyZW50OworICBtaW4taGVpZ2h0OiAyOHB4OworICBwYWRkaW5nOiAxMDBweCAwIDA7CisgIEBpbmNsdWRlIGJveC1zaGFkb3coaW5zZXQgMXB4IDFweCAwIHJnYmEoMCwwLDAsLjEpLGluc2V0IDAgLTFweCAwIHJnYmEoMCwwLDAsLjA3KSk7CisgIGJvcmRlci13aWR0aDogMXB4IDFweCAxcHggNnB4OworfQorOjotd2Via2l0LXNjcm9sbGJhci10aHVtYjpob3ZlciB7CisgIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMCwgMCwgMCwgMC41KTsKK30KKzo6LXdlYmtpdC1zY3JvbGxiYXItYnV0dG9uIHsKKyAgaGVpZ2h0OiAwOworICB3aWR0aDogMDsKK30KKzo6LXdlYmtpdC1zY3JvbGxiYXItdHJhY2sgeworICBiYWNrZ3JvdW5kLWNsaXA6IHBhZGRpbmctYm94OworICBib3JkZXI6IHNvbGlkIHRyYW5zcGFyZW50OworICBib3JkZXItd2lkdGg6IDAgMCAwIDRweDsKK30KKzo6LXdlYmtpdC1zY3JvbGxiYXItY29ybmVyIHsKKyAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7Cit9CisKK2JvZHkgeworICBiYWNrZ3JvdW5kOiBibGFjazsKK30KKworc2xpZGVzID4gc2xpZGUgeworICBkaXNwbGF5OiBub25lOworICBmb250LWZhbWlseTogJ09wZW4gU2FucycsIEFyaWFsLCBzYW5zLXNlcmlmOworICBmb250LXNpemU6IDI2cHg7CisgIGNvbG9yOiAkZ3JheS0zOworICAvL0BpbmNsdWRlIGJhY2tncm91bmQobGluZWFyLWdyYWRpZW50KHdoaXRlLCB3aGl0ZSA4NSUsICRncmF5LTEpKTsKKyAgLy9iYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTsKKyAgd2lkdGg6ICRzbGlkZS13aWR0aDsKKyAgaGVpZ2h0OiAkc2xpZGUtaGVpZ2h0OworICBtYXJnaW4tbGVmdDogLSRzbGlkZS13aWR0aCAvIDI7CisgIG1hcmdpbi10b3A6IC0kc2xpZGUtaGVpZ2h0IC8gMjsKKyAgcGFkZGluZzogJHNsaWRlLXRvcC1ib3R0b20tcGFkZGluZyAkc2xpZGUtbGVmdC1yaWdodC1wYWRkaW5nOworCisgIEBpbmNsdWRlIGJvcmRlci1yYWRpdXMoJHNsaWRlLWJvcmRlci1yYWRpdXMpOworICAvL0BpbmNsdWRlIGJveC1zaGFkb3coNXB4IDVweCAyMHB4ICRncmF5LTQpOworICBAaW5jbHVkZSB0cmFuc2l0aW9uKGFsbCAwLjZzIGVhc2UtaW4tb3V0KTsKKworICAvLyR0cmFuc2xhdGVYOiAxMDIwcHg7CisgIC8vJHJvdGF0ZVk6IDMwZGVnOworICAvLyRyb3RhdGVYOiA0NWRlZzsKKworICAmLmZhci1wYXN0IHsKKyAgICAvL2Rpc3BsYXk6IGJsb2NrOworICAgIGRpc3BsYXk6IG5vbmU7CisgICAgLy9AaW5jbHVkZSB0cmFuc2Zvcm0odHJhbnNsYXRlKC0kdHJhbnNsYXRlWCAqIDIpKTsKKyAgICAvL0BpbmNsdWRlIHRyYW5zZm9ybSh0cmFuc2xhdGUzZCgtJHRyYW5zbGF0ZVggKiAyLCAwLCAwKSk7CisgIH0KKworICAmLnBhc3QgeworICAgIGRpc3BsYXk6IGJsb2NrOworICAgIC8vQGluY2x1ZGUgdHJhbnNmb3JtKHRyYW5zbGF0ZSgtJHRyYW5zbGF0ZVgpIHJvdGF0ZVkoJHJvdGF0ZVkpIHJvdGF0ZVgoJHJvdGF0ZVgpKTsKKyAgICAvL0BpbmNsdWRlIHRyYW5zZm9ybSh0cmFuc2xhdGUzZCgtJHRyYW5zbGF0ZVgsIDAsIDApIHJvdGF0ZVkoJHJvdGF0ZVkpIHJvdGF0ZVgoJHJvdGF0ZVgpKTsKKyAgICBvcGFjaXR5OiAwOworICB9CisKKyAgJi5jdXJyZW50IHsKKyAgICBkaXNwbGF5OiBibG9jazsKKyAgICAvL0BpbmNsdWRlIHRyYW5zZm9ybSh0cmFuc2xhdGUoMCkpOworICAgIC8vQGluY2x1ZGUgdHJhbnNmb3JtKHRyYW5zbGF0ZTNkKDAsIDAsIDApKTsKKyAgICBvcGFjaXR5OiAxOworCisgICAgLmF1dG8tZmFkZWluIHsKKyAgICAgIG9wYWNpdHk6IDE7CisgICAgfQorCisgICAgLmdkYmFyIHsKKyAgICAgIEBpbmNsdWRlIGJhY2tncm91bmQtc2l6ZSgxMDAlIDEwMCUpOworICAgIH0KKyAgfQorCisgICYubmV4dCB7CisgICAgZGlzcGxheTogYmxvY2s7CisgICAgLy9AaW5jbHVkZSB0cmFuc2Zvcm0odHJhbnNsYXRlKCR0cmFuc2xhdGVYKSByb3RhdGVZKC0kcm90YXRlWSkgcm90YXRlWCgkcm90YXRlWCkpOworICAgIC8vQGluY2x1ZGUgdHJhbnNmb3JtKHRyYW5zbGF0ZTNkKCR0cmFuc2xhdGVYLCAwLCAwKSByb3RhdGVZKC0kcm90YXRlWSkgcm90YXRlWCgkcm90YXRlWCkpOworICAgIG9wYWNpdHk6IDA7CisgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CisgIH0KKworICAmLmZhci1uZXh0IHsKKyAgICAvL2Rpc3BsYXk6IGJsb2NrOworICAgIGRpc3BsYXk6IG5vbmU7CisgICAgLy9AaW5jbHVkZSB0cmFuc2Zvcm0odHJhbnNsYXRlKCR0cmFuc2xhdGVYICogMikpOworICAgIC8vQGluY2x1ZGUgdHJhbnNmb3JtKHRyYW5zbGF0ZTNkKCR0cmFuc2xhdGVYICogMiwgMCwgMCkpOworICB9CisKKyAgJi5kYXJrIHsKKyAgICBiYWNrZ3JvdW5kOiAkZ3JheS00ICFpbXBvcnRhbnQ7CisgIH0KKworICAmOm5vdCgubm9iYWNrZ3JvdW5kKSB7CisgICAgLy9iYWNrZ3JvdW5kOiB3aGl0ZSB1cmwoLi4vLi4vaW1hZ2VzL2dvb2dsZV9kZXZlbG9wZXJzX2ljb25fMTI4LnBuZykgKCRicmFuZC1zbWFsbC1pY29uLXNpemUgKiAyKSA5OCUgbm8tcmVwZWF0OworICAgIC8vQGluY2x1ZGUgYmFja2dyb3VuZC1zaXplKCRicmFuZC1zbWFsbC1pY29uLXNpemUgJGJyYW5kLXNtYWxsLWljb24tc2l6ZSk7CisKKyAgICAmOmJlZm9yZSB7CisgICAgICBmb250LXNpemU6IDEycHQ7CisgICAgICBjb250ZW50OiAkc29jaWFsLXRhZ3M7CisgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CisgICAgICBib3R0b206ICRzbGlkZS10b3AtYm90dG9tLXBhZGRpbmcgLyAyOworICAgICAgbGVmdDogJHNsaWRlLWxlZnQtcmlnaHQtcGFkZGluZzsKKyAgICAgIGJhY2tncm91bmQ6IHVybCguLi8uLi9pbWFnZXMvZ29vZ2xlX2RldmVsb3BlcnNfaWNvbl8xMjgucG5nKSBuby1yZXBlYXQgMCA1MCU7CisgICAgICBAaW5jbHVkZSBiYWNrZ3JvdW5kLXNpemUoJGJyYW5kLXNtYWxsLWljb24tc2l6ZSAkYnJhbmQtc21hbGwtaWNvbi1zaXplKTsKKyAgICAgIHBhZGRpbmctbGVmdDogJGJyYW5kLXNtYWxsLWljb24tc2l6ZSArIDEwOworICAgICAgaGVpZ2h0OiAkYnJhbmQtc21hbGwtaWNvbi1zaXplOworICAgICAgbGluZS1oZWlnaHQ6IDEuOTsKKyAgICB9CisgICAgJjphZnRlciB7CisgICAgICBmb250LXNpemU6IDEycHQ7CisgICAgICBjb250ZW50OiBhdHRyKGRhdGEtc2xpZGUtbnVtKSAnLycgYXR0cihkYXRhLXRvdGFsLXNsaWRlcyk7CisgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CisgICAgICBib3R0b206ICRzbGlkZS10b3AtYm90dG9tLXBhZGRpbmcgLyAyOworICAgICAgcmlnaHQ6ICRzbGlkZS1sZWZ0LXJpZ2h0LXBhZGRpbmc7CisgICAgICBsaW5lLWhlaWdodDogMS45OworICAgIH0KKyAgfQorCisgICYudGl0bGUtc2xpZGUgeworICAgICY6YWZ0ZXIgeworICAgICAgY29udGVudDogJyc7CisgICAgICBiYWNrZ3JvdW5kOiB1cmwoLi4vLi4vaW1hZ2VzL2lvMjAxMl9sb2dvLnBuZykgbm8tcmVwZWF0IDEwMCUgNTAlOworICAgICAgQGluY2x1ZGUgYmFja2dyb3VuZC1zaXplKGNvbnRhaW4pOworICAgICAgcG9zaXRpb246IGFic29sdXRlOworICAgICAgYm90dG9tOiAkc2xpZGUtdG9wLWJvdHRvbS1wYWRkaW5nOworICAgICAgcmlnaHQ6ICRzbGlkZS10b3AtYm90dG9tLXBhZGRpbmc7CisgICAgICB3aWR0aDogMTAwJTsKKyAgICAgIGhlaWdodDogNjBweDsKKyAgICB9CisgIH0KKworICAmLmJhY2tkcm9wIHsKKyAgICB6LWluZGV4OiAtMTA7CisgICAgZGlzcGxheTogYmxvY2sgIWltcG9ydGFudDsKKyAgICBAaW5jbHVkZSBiYWNrZHJvcDsKKworICAgICY6YWZ0ZXIsICY6YmVmb3JlIHsKKyAgICAgIGRpc3BsYXk6IG5vbmU7IC8vIFByZXZlbnQgZG91YmxlIHNldCBvZiBzbGlkZSBudW1zIGFuZCBmb290ZXIgaWNvbnMuCisgICAgfQorICB9CisKKyAgPiBoZ3JvdXAgKyBhcnRpY2xlIHsKKyAgICBtYXJnaW4tdG9wOiAkYXJ0aWNsZS1jb250ZW50LXRvcC1wYWRkaW5nOworCisgICAgJi5mbGV4Ym94IHsKKyAgICAgICYudmNlbnRlciwgJi52bGVmdCwgJi52cmlnaHQgeworICAgICAgICBoZWlnaHQ6IDgwJTsKKyAgICAgIH0KKyAgICB9CisKKyAgICBwIHsKKyAgICAgIG1hcmdpbi1ib3R0b206IDFlbTsKKyAgICB9CisgIH0KKworICA+IGFydGljbGU6b25seS1jaGlsZCB7CisgICAgaGVpZ2h0OiAxMDAlOworCisgICAgPiBpZnJhbWUgeworICAgICAgaGVpZ2h0OiA5OCU7CisgICAgfQorICB9Cit9CisKK3NsaWRlcy5sYXlvdXQtZmF1eC13aWRlc2NyZWVuID4gc2xpZGUgeworICBwYWRkaW5nOiAkc2xpZGUtdG9wLWJvdHRvbS1wYWRkaW5nIDE2MHB4OworfQorCitzbGlkZXMubGF5b3V0LXdpZGVzY3JlZW4sCitzbGlkZXMubGF5b3V0LWZhdXgtd2lkZXNjcmVlbiB7CisKKyAgJHRyYW5zbGF0ZVg6IDExMzBweDsKKworICA+IHNsaWRlIHsKKyAgICBtYXJnaW4tbGVmdDogLSRzbGlkZS13aWR0aC13aWRlc2NyZWVuIC8gMjsKKyAgICB3aWR0aDogJHNsaWRlLXdpZHRoLXdpZGVzY3JlZW47CisgIH0KKworICA+IHNsaWRlLmZhci1wYXN0IHsKKyAgICBkaXNwbGF5OiBibG9jazsKKyAgICBkaXNwbGF5OiBub25lOworICAgIEBpbmNsdWRlIHRyYW5zZm9ybSh0cmFuc2xhdGUoLSR0cmFuc2xhdGVYICogMikpOworICAgIEBpbmNsdWRlIHRyYW5zZm9ybSh0cmFuc2xhdGUzZCgtJHRyYW5zbGF0ZVggKiAyLCAwLCAwKSk7CisgIH0KKworICA+IHNsaWRlLnBhc3QgeworICAgIGRpc3BsYXk6IGJsb2NrOworICAgIC8vQGluY2x1ZGUgdHJhbnNmb3JtKHRyYW5zbGF0ZSgtJHRyYW5zbGF0ZVgpKTsKKyAgICAvL0BpbmNsdWRlIHRyYW5zZm9ybSh0cmFuc2xhdGUzZCgtJHRyYW5zbGF0ZVgsIDAsIDApKTsKKyAgICBvcGFjaXR5OiAwOworICB9CisKKyAgPiBzbGlkZS5jdXJyZW50IHsKKyAgICBkaXNwbGF5OiBibG9jazsKKyAgICAvL0BpbmNsdWRlIHRyYW5zZm9ybSh0cmFuc2xhdGUoMCkpOworICAgIC8vQGluY2x1ZGUgdHJhbnNmb3JtKHRyYW5zbGF0ZTNkKDAsIDAsIDApKTsKKyAgICBvcGFjaXR5OiAxOworICB9CisKKyAgPiBzbGlkZS5uZXh0IHsKKyAgICBkaXNwbGF5OiBibG9jazsKKyAgICAvL0BpbmNsdWRlIHRyYW5zZm9ybSh0cmFuc2xhdGUoJHRyYW5zbGF0ZVgpKTsKKyAgICAvL0BpbmNsdWRlIHRyYW5zZm9ybSh0cmFuc2xhdGUzZCgkdHJhbnNsYXRlWCwgMCwgMCkpOworICAgIG9wYWNpdHk6IDA7CisgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CisgIH0KKworICA+IHNsaWRlLmZhci1uZXh0IHsKKyAgICBkaXNwbGF5OiBibG9jazsKKyAgICBkaXNwbGF5OiBub25lOworICAgIEBpbmNsdWRlIHRyYW5zZm9ybSh0cmFuc2xhdGUoJHRyYW5zbGF0ZVggKiAyKSk7CisgICAgQGluY2x1ZGUgdHJhbnNmb3JtKHRyYW5zbGF0ZTNkKCR0cmFuc2xhdGVYICogMiwgMCwgMCkpOworICB9CisKKyAgI3ByZXYtc2xpZGUtYXJlYSB7CisgICAgbWFyZ2luLWxlZnQ6IC0kc2xpZGUtd2lkdGgtd2lkZXNjcmVlbiAvIDIgLSAkc2xpZGUtdGFwLWFyZWEtd2lkdGg7CisgIH0KKworICAjbmV4dC1zbGlkZS1hcmVhIHsKKyAgICBtYXJnaW4tbGVmdDogJHNsaWRlLXdpZHRoLXdpZGVzY3JlZW4gLyAyOworICB9Cit9CisKK2IgeworICBmb250LXdlaWdodDogNjAwOworfQorCithIHsKKyAgY29sb3I6ICRicmFuZC1ibHVlLXNlY29uZGFyeTI7CisgIHRleHQtZGVjb3JhdGlvbjogbm9uZTsKKyAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIHJnYmEoNDIsIDEyNCwgMjIzLCAwLjUpOworCisgICY6aG92ZXIgeworICAgIGNvbG9yOiBibGFjayAhaW1wb3J0YW50OworICB9Cit9CisKK2gxLCBoMiwgaDMgeworICBmb250LXdlaWdodDogNjAwOworfQorCitoMiB7CisgIGZvbnQtc2l6ZTogNDVweDsKKyAgbGluZS1oZWlnaHQ6IDQ1cHg7CisgIGxldHRlci1zcGFjaW5nOiAtMnB4OworICBjb2xvcjogJGdyYXktNDsKK30KKworaDMgeworICBmb250LXNpemU6IDMwcHg7CisgIGxldHRlci1zcGFjaW5nOiAtMXB4OworICBsaW5lLWhlaWdodDogMjsKKyAgZm9udC13ZWlnaHQ6IGluaGVyaXQ7CisgIGNvbG9yOiAkZ3JheS0zOworfQorCit1bCB7CisgIG1hcmdpbi1sZWZ0OiAxLjJlbTsKKyAgbWFyZ2luLWJvdHRvbTogMWVtOworICBwb3NpdGlvbjogcmVsYXRpdmU7CisKKyAgbGkgeworICAgIG1hcmdpbi1ib3R0b206IDAuNWVtOworCisgICAgdWwgeworICAgICAgbWFyZ2luLWxlZnQ6IDJlbTsKKyAgICAgIG1hcmdpbi1ib3R0b206IDA7CisKKyAgICAgIGxpOmJlZm9yZSB7CisgICAgICAgIGNvbnRlbnQ6ICctJzsKKyAgICAgICAgZm9udC13ZWlnaHQ6IDYwMDsKKyAgICAgIH0KKyAgICB9CisgIH0KKworICA+IGxpOmJlZm9yZSB7CisgICAgY29udGVudDogJ8K3JzsKKyAgICBtYXJnaW4tbGVmdDogLTFlbTsKKyAgICBwb3NpdGlvbjogYWJzb2x1dGU7CisgICAgZm9udC13ZWlnaHQ6IDYwMDsKKyAgfQorCisgIHVsIHsKKyAgICBtYXJnaW4tdG9wOiAuNWVtOworICB9Cit9CisKKy8vIENvZGUgaGlnaGxpZ2h0aW5nIG9ubHkgZWZmZWN0cyB0aGUgY3VycmVudCBzbGlkZS4KKy5oaWdobGlnaHQtY29kZSBzbGlkZS5jdXJyZW50IHsKKyAgcHJlID4gKiB7CisgICAgb3BhY2l0eTogMC4yNTsKKyAgICBAaW5jbHVkZSB0cmFuc2l0aW9uKG9wYWNpdHkgMC41cyBlYXNlLWluKTsKKyAgfQorICBiIHsKKyAgICBvcGFjaXR5OiAxOworICB9Cit9CisKK3ByZSB7CisgIGZvbnQtZmFtaWx5OiAnSW5jb25zb2xhdGEnLCAnQ291cmllciBOZXcnLCBtb25vc3BhY2U7CisgIGZvbnQtc2l6ZTogMjBweDsKKyAgbGluZS1oZWlnaHQ6IDI4cHg7CisgIHBhZGRpbmc6IDEwcHggMCAxMHB4ICRzbGlkZS1sZWZ0LXJpZ2h0LXBhZGRpbmc7CisgIGxldHRlci1zcGFjaW5nOiAtMXB4OworICBtYXJnaW4tYm90dG9tOiAyMHB4OworICB3aWR0aDogMTA2JTsKKyAgYmFja2dyb3VuZC1jb2xvcjogJGdyYXktMTsKKyAgbGVmdDogLSRzbGlkZS1sZWZ0LXJpZ2h0LXBhZGRpbmc7CisgIHBvc2l0aW9uOiByZWxhdGl2ZTsKKyAgQGluY2x1ZGUgYm94LXNpemluZyhib3JkZXItYm94KTsKKyAgLypvdmVyZmxvdzogaGlkZGVuOyovCisKKyAgJltkYXRhLWxhbmddOmFmdGVyIHsKKyAgICBjb250ZW50OiBhdHRyKGRhdGEtbGFuZyk7CisgICAgYmFja2dyb3VuZC1jb2xvcjogJGdyYXktMjsKKyAgICByaWdodDogMDsKKyAgICB0b3A6IDA7CisgICAgcG9zaXRpb246IGFic29sdXRlOworICAgIGZvbnQtc2l6ZTogMTZwdDsKKyAgICBjb2xvcjogd2hpdGU7CisgICAgcGFkZGluZzogMnB4IDI1cHg7CisgICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTsKKyAgfQorfQorCitwcmVbZGF0YS1sYW5nPSJnbyJdIHsKKyAgY29sb3I6ICMzMzM7Cit9CisKK2NvZGUgeworICBmb250LXNpemU6IDk1JTsKKyAgZm9udC1mYW1pbHk6ICdJbmNvbnNvbGF0YScsICdDb3VyaWVyIE5ldycsIG1vbm9zcGFjZTsKKyAgY29sb3I6IGJsYWNrOworfQorCitpZnJhbWUgeworICB3aWR0aDogMTAwJTsKKyAgaGVpZ2h0OiAkc2xpZGUtaGVpZ2h0IC0gKCRzbGlkZS10b3AtYm90dG9tLXBhZGRpbmcgKiAyKSAtICgkYXJ0aWNsZS1jb250ZW50LXRvcC1wYWRkaW5nICogMik7CisgIGJhY2tncm91bmQ6IHdoaXRlOworICBib3JkZXI6IDFweCBzb2xpZCAkZ3JheS0xOworICBAaW5jbHVkZSBib3gtc2l6aW5nKGJvcmRlci1ib3gpOworfQorCitkdCB7CisgIGZvbnQtd2VpZ2h0OiBib2xkOworfQorCitidXR0b24geworICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CisgIEBpbmNsdWRlIGJhY2tncm91bmQobGluZWFyLWdyYWRpZW50KCNGOUY5RjkgNDAlLCAjRTNFM0UzIDcwJSkpOworICBib3JkZXI6IDFweCBzb2xpZCAkZ3JheS0yOworICBAaW5jbHVkZSBib3JkZXItcmFkaXVzKDNweCk7CisgIHBhZGRpbmc6IDVweCA4cHg7CisgIG91dGxpbmU6IG5vbmU7CisgIHdoaXRlLXNwYWNlOiBub3dyYXA7CisgIEBpbmNsdWRlIHVzZXItc2VsZWN0KG5vbmUpOworICBjdXJzb3I6IHBvaW50ZXI7CisgIEBpbmNsdWRlIHRleHQtc2hhZG93KDFweCAxcHggI2ZmZik7CisgIGZvbnQtc2l6ZTogMTBwdDsKK30KKworYnV0dG9uOm5vdCg6ZGlzYWJsZWQpOmhvdmVyIHsKKyAgYm9yZGVyLWNvbG9yOiAkZ3JheS00OworfQorCitidXR0b246bm90KDpkaXNhYmxlZCk6YWN0aXZlIHsKKyAgQGluY2x1ZGUgYmFja2dyb3VuZChsaW5lYXItZ3JhZGllbnQoI0UzRTNFMyA0MCUsICNGOUY5RjkgNzAlKSk7Cit9CisKKzpkaXNhYmxlZCB7CisgIGNvbG9yOiAkZ3JheS0yOworfQorCisuYmx1ZSB7CisgIGNvbG9yOiAkYnJhbmQtYmx1ZTsKK30KKy5ibHVlMiB7CisgIGNvbG9yOiAkYnJhbmQtYmx1ZS1zZWNvbmRhcnk7Cit9CisuYmx1ZTMgeworICBjb2xvcjogJGJyYW5kLWJsdWUtc2Vjb25kYXJ5MjsKK30KKy55ZWxsb3cgeworICBjb2xvcjogJGJyYW5kLXllbGxvdzsKK30KKy55ZWxsb3cyIHsKKyAgY29sb3I6ICRicmFuZC15ZWxsb3ctc2Vjb25kYXJ5OworfQorLnllbGxvdzMgeworICBjb2xvcjogJGJyYW5kLXllbGxvdy1zZWNvbmRhcnkyOworfQorLmdyZWVuIHsKKyAgY29sb3I6ICRicmFuZC1ncmVlbjsKK30KKy5ncmVlbjIgeworICBjb2xvcjogJGJyYW5kLWdyZWVuLXNlY29uZGFyeTsKK30KKy5ncmVlbjMgeworICBjb2xvcjogJGJyYW5kLWdyZWVuLXNlY29uZGFyeTI7Cit9CisucmVkIHsKKyAgY29sb3I6ICRicmFuZC1yZWQ7Cit9CisucmVkMiB7CisgIGNvbG9yOiAkYnJhbmQtcmVkLXNlY29uZGFyeTsKK30KKy5yZWQzIHsKKyAgY29sb3I6ICRicmFuZC1yZWQtc2Vjb25kYXJ5MjsKK30KKy5ncmF5IHsKKyAgY29sb3I6ICRncmF5LTE7Cit9CisuZ3JheTIgeworICBjb2xvcjogJGdyYXktMjsKK30KKy5ncmF5MyB7CisgIGNvbG9yOiAkZ3JheS0zOworfQorLmdyYXk0IHsKKyAgY29sb3I6ICRncmF5LTQ7Cit9CisKKy53aGl0ZSB7CisgIGNvbG9yOiB3aGl0ZSAhaW1wb3J0YW50OworfQorLmJsYWNrIHsKKyAgY29sb3I6IGJsYWNrICFpbXBvcnRhbnQ7Cit9CisKKy5jb2x1bW5zLTIgeworICBAaW5jbHVkZSBjb2x1bW4tY291bnQoMik7Cit9CisKK3RhYmxlIHsKKyAgd2lkdGg6IDEwMCU7CisgIGJvcmRlci1jb2xsYXBzZTogLW1vei1pbml0aWFsOworICBib3JkZXItY29sbGFwc2U6IGluaXRpYWw7CisgIGJvcmRlci1zcGFjaW5nOiAycHg7CisgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAkZ3JheS0zOworCisgIHRyID4gdGQ6Zmlyc3QtY2hpbGQsIHRoIHsKKyAgICBmb250LXdlaWdodDogNjAwOworICAgIGNvbG9yOiAkZ3JheS00OworICB9CisKKyAgdHI6bnRoLWNoaWxkKG9kZCkgeworICAgIGJhY2tncm91bmQtY29sb3I6ICRncmF5LTE7CisgIH0KKworICB0aCB7CisgICAgY29sb3I6IHdoaXRlOworICAgIGZvbnQtc2l6ZTogMThweDsKKyAgICBAaW5jbHVkZSBiYWNrZ3JvdW5kKGxpbmVhci1ncmFkaWVudCh0b3AsICRicmFuZC1ibHVlIDQwJSwgJGJyYW5kLWJsdWUtc2Vjb25kYXJ5MiA4MCUpIG5vLXJlcGVhdCk7CisgIH0KKworICB0ZCwgdGggeworICAgIGZvbnQtc2l6ZTogMThweDsKKyAgICBwYWRkaW5nOiAxZW0gMC41ZW07CisgIH0KKworICB0ZC5oaWdobGlnaHQgeworICAgIGNvbG9yOiAkZ3JheS00OworICAgIEBpbmNsdWRlIGJhY2tncm91bmQobGluZWFyLWdyYWRpZW50KHRvcCwgJGJyYW5kLXllbGxvdyA0MCUsICRicmFuZC15ZWxsb3ctc2Vjb25kYXJ5MiA4MCUpIG5vLXJlcGVhdCk7CisgIH0KKworICAmLnJvd3MgeworICAgIGJvcmRlci1ib3R0b206IG5vbmU7CisgICAgYm9yZGVyLXJpZ2h0OiAxcHggc29saWQgJGdyYXktMzsKKyAgfQorfQorCitxIHsKKyAgZm9udC1zaXplOiA0NXB4OworICBsaW5lLWhlaWdodDogNzJweDsKKworICAmOmJlZm9yZSB7CisgICAgY29udGVudDogJ+KAnCc7CisgICAgcG9zaXRpb246IGFic29sdXRlOworICAgIG1hcmdpbi1sZWZ0OiAtMC41ZW07CisgIH0KKyAgJjphZnRlciB7CisgICAgY29udGVudDogJ+KAnSc7CisgICAgcG9zaXRpb246IGFic29sdXRlOworICAgIG1hcmdpbi1sZWZ0OiAwLjFlbTsKKyAgfQorfQorCitzbGlkZS5maWxsIHsKKyAgYmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVhdDsKKyAgQGluY2x1ZGUgYm9yZGVyLXJhZGl1cygkc2xpZGUtYm9yZGVyLXJhZGl1cyk7CisgIEBpbmNsdWRlIGJhY2tncm91bmQtc2l6ZShjb3Zlcik7Cit9CisKKy8qIFNpemUgdmFyaWFudHMgKi8KKworYXJ0aWNsZS5zbWFsbGVyIHsKKyAgcCwgdWwgeworICAgIGZvbnQtc2l6ZTogMjBweDsKKyAgICBsaW5lLWhlaWdodDogMjRweDsKKyAgICBsZXR0ZXItc3BhY2luZzogMDsKKyAgfQorICB0YWJsZSB7CisgICAgdGQsIHRoIHsKKyAgICAgIGZvbnQtc2l6ZTogMTRweDsKKyAgICB9CisgIH0KKyAgcHJlIHsKKyAgICBmb250LXNpemU6IDE1cHg7CisgICAgbGluZS1oZWlnaHQ6IDIwcHg7CisgICAgbGV0dGVyLXNwYWNpbmc6IDA7CisgIH0KKyAgcSB7CisgICAgZm9udC1zaXplOiA0MHB4OworICAgIGxpbmUtaGVpZ2h0OiA0OHB4OworCisgICAgJjpiZWZvcmUsICY6YWZ0ZXIgeworICAgICAgZm9udC1zaXplOiA2MHB4OworICAgIH0KKyAgfQorfQorCisvKiBCdWlsZHMgKi8KKworLmJ1aWxkIHsKKyAgPiAqIHsKKyAgICBAaW5jbHVkZSB0cmFuc2l0aW9uKG9wYWNpdHkgMC41cyBlYXNlLWluLW91dCAwLjJzKTsKKyAgfQorCisgIC50by1idWlsZCB7CisgICAgb3BhY2l0eTogMDsKKyAgfQorCisgIC5idWlsZC1mYWRlIHsKKyAgICBvcGFjaXR5OiAwLjM7CisKKyAgICAmOmhvdmVyIHsKKyAgICAgIG9wYWNpdHk6IDEuMDsKKyAgICB9CisgIH0KK30KKworLnBvcHVwIC5uZXh0IC5idWlsZCB7CisgIC50by1idWlsZCB7CisgICAgb3BhY2l0eTogMTsKKyAgfQorCisgIC5idWlsZC1mYWRlIHsKKyAgICBvcGFjaXR5OiAxOworICB9Cit9CisKKy8qIFByZXR0eSBwcmludCAqLworCisucHJldHR5cHJpbnQgLnN0ciwgLyogc3RyaW5nIGNvbnRlbnQgKi8KKy5wcmV0dHlwcmludCAuYXR2IHsgLyogYSBtYXJrdXAgYXR0cmlidXRlIHZhbHVlICovCisgIGNvbG9yOiAkYnJhbmQtZ3JlZW4tc2Vjb25kYXJ5MjsgLy9yZ2IoMCwgMTM4LCA1Myk7Cit9CisucHJldHR5cHJpbnQgLmt3ZCwgLyogYSBrZXl3b3JkICovCisucHJldHR5cHJpbnQgLnRhZyB7IC8qIGEgbWFya3VwIHRhZyBuYW1lICovCisgIGNvbG9yOiByZ2IoMCwgMTAyLCAyMDQpOworfQorLnByZXR0eXByaW50IC5jb20geyAvKiBhIGNvbW1lbnQgKi8KKyAgY29sb3I6ICRncmF5LTM7IC8vcmdiKDEyNywgMTI3LCAxMjcpOworICBmb250LXN0eWxlOiBpdGFsaWM7Cit9CisucHJldHR5cHJpbnQgLmxpdCB7IC8qIGEgbGl0ZXJhbCB2YWx1ZSAqLworICBjb2xvcjogcmdiKDEyNywgMCwgMCk7Cit9CisucHJldHR5cHJpbnQgLnB1biwgLyogcHVuY3R1YXRpb24sIGxpc3Agb3BlbiBicmFja2V0LCBsaXNwIGNsb3NlIGJyYWNrZXQgKi8KKy5wcmV0dHlwcmludCAub3BuLAorLnByZXR0eXByaW50IC5jbG8geworICBjb2xvcjogJGdyYXktNDsgLy9yZ2IoMTI3LCAxMjcsIDEyNyk7Cit9CisucHJldHR5cHJpbnQgLnR5cCwgLyogYSB0eXBlIG5hbWUgKi8KKy5wcmV0dHlwcmludCAuYXRuLCAvKiBhIG1hcmt1cCBhdHRyaWJ1dGUgbmFtZSAqLworLnByZXR0eXByaW50IC5kZWMsCisucHJldHR5cHJpbnQgLnZhciB7IC8qIGEgZGVjbGFyYXRpb247IGEgdmFyaWFibGUgbmFtZSAqLworICBjb2xvcjogJGJyYW5kLXJlZC1zZWNvbmRhcnkyOyAvL3JnYigxMjcsIDAsIDEyNyk7Cit9CisucHJldHR5cHJpbnQgLnBsbiB7CisgIGNvbG9yOiAkZ3JheS00OworfQorCisubm90ZSB7CisgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKKyAgei1pbmRleDogMTAwOworICB3aWR0aDogMTAwJTsKKyAgaGVpZ2h0OiAxMDAlOworICB0b3A6IDA7CisgIGxlZnQ6IDA7CisgIHBhZGRpbmc6IDFlbTsKKyAgYmFja2dyb3VuZDogcmdiYSgwLCAwLCAwLCAwLjMpOworICBvcGFjaXR5OiAwOworICBwb2ludGVyLWV2ZW50czogbm9uZTsKKyAgQGluY2x1ZGUgZmxleGJveDsKKyAgQGluY2x1ZGUgZmxleC1jZW50ZXItY2VudGVyOworICBAaW5jbHVkZSBib3JkZXItcmFkaXVzKCRzbGlkZS1ib3JkZXItcmFkaXVzKTsKKworICBAaW5jbHVkZSBib3gtc2l6aW5nKGJvcmRlci1ib3gpOworICBAaW5jbHVkZSB0cmFuc2Zvcm0odHJhbnNsYXRlWSgkc2xpZGUtaGVpZ2h0IC8gMikpO0BpbmNsdWRlIHRyYW5zaXRpb24oYWxsIDAuNHMgZWFzZS1pbi1vdXQpOworCisgID4gc2VjdGlvbiB7CisgICAgYmFja2dyb3VuZDogI2ZmZjsKKyAgICBAaW5jbHVkZSBib3JkZXItcmFkaXVzKCRzbGlkZS1ib3JkZXItcmFkaXVzKTsKKyAgICBAaW5jbHVkZSBib3gtc2hhZG93KDAgMCAxMHB4ICRncmF5LTMpOworICAgIHdpZHRoOiA2MCU7CisgICAgcGFkZGluZzogMmVtOworICB9Cit9CisKKy8vIFNwZWFrZXIgbm90ZXMgb25seSBzaG93IHRoZSBjdXJyZW50IHNsaWRlLgorLndpdGgtbm90ZXMgeworCisgICYucG9wdXAgeworCisgICAgc2xpZGVzLmxheW91dC13aWRlc2NyZWVuLAorICAgIHNsaWRlcy5sYXlvdXQtZmF1eC13aWRlc2NyZWVuIHsKKyAgICAgIHNsaWRlIHsKKyAgICAgICAgJi5uZXh0IHsKKyAgICAgICAgICBAaW5jbHVkZSB0cmFuc2Zvcm0odHJhbnNsYXRlM2QoJHNsaWRlLXdpZHRoLXdpZGVzY3JlZW4gLyAyICsgMTQwLCA4MHB4LCAwKSBzY2FsZSgwLjM1KSk7CisgICAgICAgIH0KKyAgICAgICAgLm5vdGUgeworICAgICAgICAgIEBpbmNsdWRlIHRyYW5zZm9ybSh0cmFuc2xhdGUzZCgzMDBweCwgJHNsaWRlLWhlaWdodCArIDEwMCwgMCkgc2NhbGUoMS41KSk7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9CisKKyAgICBzbGlkZSB7CisgICAgICBvdmVyZmxvdzogdmlzaWJsZTsKKyAgICAgIGJhY2tncm91bmQ6IHdoaXRlOworICAgICAgQGluY2x1ZGUgdHJhbnNpdGlvbihub25lKTsgLy8gTm8gc2xpZGUgdHJhbnNpdGlvbiBnb29kaWVzIHdoZW4gaW4gcHJlc2VudGVyIG1vZGUuCisgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKKyAgICAgIEBpbmNsdWRlIHRyYW5zZm9ybS1vcmlnaW4oMCwgMCk7IC8vIEZvciBzcGVha2VyIG5vdGUgdHJhbnNpdGlvbi4KKworICAgICAgJjpub3QoLmJhY2tkcm9wKSB7CisgICAgICAgIEBpbmNsdWRlIHRyYW5zZm9ybShzY2FsZSgwLjYpIHRyYW5zbGF0ZTNkKDAuNWVtLCAwLjVlbSwgMCkpOworICAgICAgICBAaW5jbHVkZSBib3gtc2hhZG93KDAgMCAxMHB4ICRncmF5LTMpOworICAgICAgfQorCisgICAgICAmLmJhY2tkcm9wIHsKKyAgICAgICAgLy9AaW5jbHVkZSBiYWNrZ3JvdW5kKGxpbmVhci1ncmFkaWVudCgkZ3JheS0xLCB3aGl0ZSAzMCUsIHdoaXRlIDYwJSwgJGdyYXktMSkpOworICAgICAgICBAaW5jbHVkZSBiYWNrZ3JvdW5kLWltYWdlKHJhZGlhbC1ncmFkaWVudCg1MCUgNTAlLCAjYjFkZmZmIDAlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkYnJhbmQtYmx1ZSA2MDBweCkpOworICAgICAgfQorCisgICAgICAmLm5leHQgeworICAgICAgICBAaW5jbHVkZSB0cmFuc2Zvcm0odHJhbnNsYXRlM2QoJHNsaWRlLXdpZHRoIC8gMiArIDEyMCwgODBweCwgMCkgc2NhbGUoMC4zNSkpOworICAgICAgICBvcGFjaXR5OiAxICFpbXBvcnRhbnQ7CisKKyAgICAgICAgLm5vdGUgeworICAgICAgICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDsgLy8gUHJldmVudHMgc2VlaW5nIG5vdGVzIGlmIHdlIGdvIHRvIHByZXZpb3VzIHNsaWRlLgorICAgICAgICB9CisgICAgICB9CisgICAgfQorCisgICAgLm5vdGUgeworICAgICAgd2lkdGg6IDEwOSU7CisgICAgICBoZWlnaHQ6ICRzbGlkZS1oZWlnaHQgLyAyIC0gOTA7CisgICAgICBiYWNrZ3JvdW5kOiAkZ3JheS0xOworICAgICAgcGFkZGluZzogMDsKKworICAgICAgQGluY2x1ZGUgYm94LXNoYWRvdygwIDAgMTBweCAkZ3JheS0zKTsKKworICAgICAgQGluY2x1ZGUgdHJhbnNmb3JtKHRyYW5zbGF0ZTNkKDI1MHB4LCAkc2xpZGUtaGVpZ2h0ICsgMTAwLCAwKSBzY2FsZSgxLjUpKTsKKyAgICAgIEBpbmNsdWRlIHRyYW5zaXRpb24ob3BhY2l0eSA0MDBtcyBlYXNlLWluLW91dCk7CisKKyAgICAgID4gc2VjdGlvbiB7CisgICAgICAgIGJhY2tncm91bmQ6ICNmZmY7CisgICAgICAgIEBpbmNsdWRlIGJvcmRlci1yYWRpdXMoJHNsaWRlLWJvcmRlci1yYWRpdXMpOworICAgICAgICBoZWlnaHQ6IDEwMCU7CisgICAgICAgIHdpZHRoOiAxMDAlOworICAgICAgICBAaW5jbHVkZSBib3gtc2l6aW5nKGJvcmRlci1ib3gpOworICAgICAgICBAaW5jbHVkZSBib3gtc2hhZG93KG5vbmUpOworICAgICAgICBvdmVyZmxvdzogYXV0bzsKKyAgICAgICAgcGFkZGluZzogMWVtOworICAgICAgfQorICAgIH0KKyAgfQorCisgIC5ub3RlIHsKKyAgICBvcGFjaXR5OiAxOworICAgIEBpbmNsdWRlIHRyYW5zZm9ybSh0cmFuc2xhdGVZKDApKTsKKyAgICBwb2ludGVyLWV2ZW50czogYXV0bzsgLy8gQWxsb3cgcGVvcGxlIHRvIGRvIHRoaW5ncyBsaWtlIG9wZW4gbGlua3MgZW1iZWRkZWQgaW4gdGhlIHNwZWFrZXIgbm90ZXMuCisgIH0KK30KKworLnNvdXJjZSB7CisgIGZvbnQtc2l6ZTogMTRweDsKKyAgY29sb3I6ICRncmF5LTI7CisgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKKyAgYm90dG9tOiAkc2xpZGUtdG9wLWJvdHRvbS1wYWRkaW5nICsgMzBweDsKKyAgbGVmdDogJHNsaWRlLWxlZnQtcmlnaHQtcGFkZGluZzsKK30KKworLmNlbnRlcmVkIHsKKyAgdGV4dC1hbGlnbjogY2VudGVyOworfQorCisucmVmbGVjdCB7CisgIC13ZWJraXQtYm94LXJlZmxlY3Q6IGJlbG93IDNweCAtd2Via2l0LWxpbmVhci1ncmFkaWVudChyZ2JhKDI1NSwyNTUsMjU1LDApIDg1JSwgd2hpdGUgMTUwJSk7CisgIC1tb3otYm94LXJlZmxlY3Q6IGJlbG93IDNweCAtbW96LWxpbmVhci1ncmFkaWVudChyZ2JhKDI1NSwyNTUsMjU1LDApIDg1JSwgd2hpdGUgMTUwJSk7CisgIC1vLWJveC1yZWZsZWN0OiBiZWxvdyAzcHggLW8tbGluZWFyLWdyYWRpZW50KHJnYmEoMjU1LDI1NSwyNTUsMCkgODUlLCB3aGl0ZSAxNTAlKTsKKyAgLW1zLWJveC1yZWZsZWN0OiBiZWxvdyAzcHggLW1zLWxpbmVhci1ncmFkaWVudChyZ2JhKDI1NSwyNTUsMjU1LDApIDg1JSwgd2hpdGUgMTUwJSk7CisgIGJveC1yZWZsZWN0OiBiZWxvdyAzcHggbGluZWFyLWdyYWRpZW50KHJnYmEoMjU1LDI1NSwyNTUsMCkgODUlLCB3aGl0ZSAxNTAlKTsKK30KKworLmZsZXhib3ggeworICBAaW5jbHVkZSBmbGV4Ym94OworfQorCisuZmxleGJveC52Y2VudGVyIHsKKyAgQGluY2x1ZGUgZmxleC1jZW50ZXItY2VudGVyOworICBoZWlnaHQ6IDEwMCU7CisgIHdpZHRoOiAxMDAlOworfQorCisuZmxleGJveC52bGVmdCB7CisgIEBpbmNsdWRlIGZsZXgtbGVmdC1jZW50ZXI7CisgIGhlaWdodDogMTAwJTsKKyAgd2lkdGg6IDEwMCU7Cit9CisKKy5mbGV4Ym94LnZyaWdodCB7CisgIEBpbmNsdWRlIGZsZXgtcmlnaHQtY2VudGVyOworICBoZWlnaHQ6IDEwMCU7CisgIHdpZHRoOiAxMDAlOworfQorCisuYXV0by1mYWRlaW4geworICBAaW5jbHVkZSB0cmFuc2l0aW9uKG9wYWNpdHkgMC42cyBlYXNlLWluIDFzKTsKKyAgb3BhY2l0eTogMDsKK30KKworLyogQ2xpY2thYmxlL3RhcHBhYmxlIGFyZWFzICovCisuc2xpZGUtYXJlYSB7CisgIHotaW5kZXg6IDEwMDA7CisKKyAgcG9zaXRpb246IGFic29sdXRlOworICBsZWZ0OiAwOworICB0b3A6IDA7CisgIHdpZHRoOiAkc2xpZGUtdGFwLWFyZWEtd2lkdGg7CisgIGhlaWdodDogJHNsaWRlLWhlaWdodDsKKworICBsZWZ0OiA1MCU7CisgIHRvcDogNTAlOworCisgIGN1cnNvcjogcG9pbnRlcjsKKyAgbWFyZ2luLXRvcDogLSRzbGlkZS1oZWlnaHQgLyAyOworCisgIC8vQGluY2x1ZGUgaGlnaGxpZ2h0LWNvbG9yKHJnYmEoNTEsIDUxLCA1MSwgMC41KSk7Cit9CisjcHJldi1zbGlkZS1hcmVhIHsKKyAgbWFyZ2luLWxlZnQ6IC0kc2xpZGUtd2lkdGgtd2lkZXNjcmVlbiAvIDI7CisgIC8vQGluY2x1ZGUgYm9yZGVyLXJhZGl1cygxMHB4IDAgMCAxMHB4KTsKKyAgLy9AaW5jbHVkZSBib3gtc2hhZG93KC01cHggMCAxMHB4ICMyMjIgaW5zZXQpOworfQorI25leHQtc2xpZGUtYXJlYSB7CisgIG1hcmdpbi1sZWZ0OiAkc2xpZGUtd2lkdGggLyAyOworICAvL0BpbmNsdWRlIGJvcmRlci1yYWRpdXMoMCAxMHB4IDEwcHggMCk7CisgIC8vQGluY2x1ZGUgYm94LXNoYWRvdyg1cHggMCAxMHB4ICMyMjIgaW5zZXQpOworfQorCisvKiA9PT09PSBTTElERSBDT05URU5UID09PT09ICovCisubG9nb3NsaWRlIHsKKyAgaW1nIHsKKyAgICB3aWR0aDogMzgzcHg7CisgICAgaGVpZ2h0OiA5MnB4OworICB9Cit9CisKKy5zZWd1ZSB7CisgIHBhZGRpbmc6ICRzbGlkZS1sZWZ0LXJpZ2h0LXBhZGRpbmcgJHNsaWRlLWxlZnQtcmlnaHQtcGFkZGluZyAqIDI7CisKKyAgaDIgeworICAgIGNvbG9yOiAkZ3JheS0xOworICAgIGZvbnQtc2l6ZTogNjBweDsKKyAgfQorICBoMyB7CisgICAgY29sb3I6ICRncmF5LTE7CisgICAgbGluZS1oZWlnaHQ6IDIuODsKKyAgfQorICBoZ3JvdXAgeworICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKKyAgICBib3R0b206IDIyNXB4OworICB9Cit9CisKKy50aGFuay15b3Utc2xpZGUgeworICBiYWNrZ3JvdW5kOiAkYnJhbmQtYmx1ZSAhaW1wb3J0YW50OworICBjb2xvcjogd2hpdGU7CisKKyAgaDIgeworICAgIGZvbnQtc2l6ZTogNjBweDsKKyAgICBjb2xvcjogaW5oZXJpdDsKKyAgfQorCisgIGFydGljbGUgPiBwIHsKKyAgICBtYXJnaW4tdG9wOiAyZW07CisgICAgZm9udC1zaXplOiAyMHB0OworICB9CisKKyAgPiBwIHsKKyAgICBwb3NpdGlvbjogYWJzb2x1dGU7CisgICAgYm90dG9tOiAkc2xpZGUtdG9wLWJvdHRvbS1wYWRkaW5nICogMjsKKyAgICBmb250LXNpemU6IDI0cHQ7CisgICAgbGluZS1oZWlnaHQ6IDEuMzsKKyAgfQorfQorCithc2lkZS5nZGJhciB7CisgIGhlaWdodDogOTdweDsKKyAgd2lkdGg6IDIxNXB4OworICBwb3NpdGlvbjogYWJzb2x1dGU7CisgIGxlZnQ6IC0xcHg7CisgIHRvcDogMTI1cHg7CisgIEBpbmNsdWRlIGJvcmRlci1yYWRpdXMoMCAxMHB4IDEwcHggMCk7CisgIEBpbmNsdWRlIGJhY2tncm91bmQobGluZWFyLWdyYWRpZW50KGxlZnQsICRncmF5LTEsICRncmF5LTEpIG5vLXJlcGVhdCk7CisgIEBpbmNsdWRlIGJhY2tncm91bmQtc2l6ZSgwJSAxMDAlKTsKKyAgQGluY2x1ZGUgdHJhbnNpdGlvbihhbGwgMC41cyBlYXNlLW91dCAwLjVzKTsgLyogQmV0dGVyIHRvIHRyYW5zaXRpb24gb25seSBvbiBiYWNrZ3JvdW5kLXNpemUsIGJ1dCBub3Qgc3VyZSBob3cgdG8gZG8gdGhhdCB3aXRoIHRoZSBtaXhpbi4gKi8KKworICAmLnJpZ2h0IHsKKyAgICByaWdodDogMDsKKyAgICBsZWZ0OiAtbW96LWluaXRpYWw7CisgICAgbGVmdDogaW5pdGlhbDsKKyAgICB0b3A6ICgkc2xpZGUtaGVpZ2h0IC8gMikgLSA5NjsgLyogOTYgaXMgaGVpZ2h0IG9mIGdyYXkgaWNvbiBiYXIgKi8KKyAgICBAaW5jbHVkZSB0cmFuc2Zvcm0ocm90YXRlWigxODBkZWcpKTsKKworICAgIGltZyB7CisgICAgICBAaW5jbHVkZSB0cmFuc2Zvcm0ocm90YXRlWigxODBkZWcpKTsKKyAgICB9CisgIH0KKworICAmLmJvdHRvbSB7CisgICAgdG9wOiAtbW96LWluaXRpYWw7CisgICAgdG9wOiBpbml0aWFsOworICAgIGJvdHRvbTogJHNsaWRlLWxlZnQtcmlnaHQtcGFkZGluZzsKKyAgfQorCisgIGltZyB7CisgICAgd2lkdGg6IDg1cHg7CisgICAgaGVpZ2h0OiA4NXB4OworICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKKyAgICByaWdodDogMDsKKyAgICBtYXJnaW46IDhweCAxNXB4OworICB9Cit9CisKKy50aXRsZS1zbGlkZSB7CisKKyAgaGdyb3VwIHsKKyAgICBib3R0b206IDEwMHB4OworCisgICAgaDEgeworICAgICAgZm9udC1zaXplOiA2NXB4OworICAgICAgbGluZS1oZWlnaHQ6IDEuNDsKKyAgICAgIGxldHRlci1zcGFjaW5nOiAtM3B4OworICAgICAgY29sb3I6ICRncmF5LTQ7CisgICAgfQorCisgICAgaDIgeworICAgICAgZm9udC1zaXplOiAzNHB4OworICAgICAgY29sb3I6ICRncmF5LTI7CisgICAgICBmb250LXdlaWdodDogaW5oZXJpdDsKKyAgICB9CisKKyAgICBwIHsKKyAgICAgIGZvbnQtc2l6ZTogMjBweDsKKyAgICAgIGNvbG9yOiAkZ3JheS0zOworICAgICAgbGluZS1oZWlnaHQ6IDEuMzsKKyAgICAgIG1hcmdpbi10b3A6IDJlbTsKKyAgICB9CisgIH0KK30KKworLnF1b3RlIHsKKyAgY29sb3I6ICRncmF5LTE7CisKKyAgLmF1dGhvciB7CisgICAgZm9udC1zaXplOiAyNHB4OworICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKKyAgICBib3R0b206IDgwcHg7CisgICAgbGluZS1oZWlnaHQ6IDEuNDsKKyAgfQorfQorCitbZGF0YS1jb25maWctY29udGFjdF0geworICBhIHsKKyAgICBjb2xvcjogcmdiKDI1NSwgMjU1LCAyNTUpOworICAgIGJvcmRlci1ib3R0b206IG5vbmU7CisgIH0KKyAgc3BhbiB7CisgICAgd2lkdGg6IDExNXB4OworICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKKyAgfQorfQorCisub3ZlcnZpZXcgeworCisgICYucG9wdXAgeworICAgIC5ub3RlIHsKKyAgICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDsKKyAgICB9CisgIH0KKyAgCisgIHNsaWRlcyB7CisgICAgc2xpZGUgeworICAgICAgJi5iYWNrZHJvcCB7CisgICAgICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDsKKyAgICAgIH0KKworICAgICAgZGlzcGxheTogYmxvY2s7CisgICAgICBjdXJzb3I6IHBvaW50ZXI7CisgICAgICBvcGFjaXR5OiAwLjU7CisgICAgICBwb2ludGVyLWV2ZW50czogYXV0byAhaW1wb3J0YW50OworCisgICAgICBAaW5jbHVkZSBiYWNrZHJvcCgpOworCisgICAgICAmLmZhci1wYXN0LAorICAgICAgJi5wYXN0LAorICAgICAgJi5uZXh0LAorICAgICAgJi5mYXItbmV4dCwKKyAgICAgICYuZmFyLXBhc3QgeworICAgICAgICBvcGFjaXR5OiAwLjU7CisgICAgICAgIGRpc3BsYXk6IGJsb2NrOworICAgICAgfQorCisgICAgICAmLmN1cnJlbnQgeworICAgICAgICBvcGFjaXR5OiAxOworICAgICAgfQorICAgIH0KKyAgfQorCisgIC5zbGlkZS1hcmVhIHsKKyAgICBkaXNwbGF5OiBub25lOworICB9Cit9CisKK0BtZWRpYSBwcmludCB7CisgIHNsaWRlcyB7CisgICAgc2xpZGUgeworICAgICAgZGlzcGxheTogYmxvY2sgIWltcG9ydGFudDsKKyAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKKyAgICAgIEBpbmNsdWRlIGJhY2tkcm9wKCk7CisgICAgICBAaW5jbHVkZSB0cmFuc2Zvcm0obm9uZSAhaW1wb3J0YW50KTsKKyAgICAgIHdpZHRoOiAxMDAlOworICAgICAgaGVpZ2h0OiAxMDAlOworICAgICAgcGFnZS1icmVhay1hZnRlcjphbHdheXM7CisgICAgICB0b3A6IGF1dG8gIWltcG9ydGFudDsKKyAgICAgIGxlZnQ6IGF1dG8gIWltcG9ydGFudDsKKyAgICAgIG1hcmdpbi10b3A6IDAgIWltcG9ydGFudDsKKyAgICAgIG1hcmdpbi1sZWZ0OiAwICFpbXBvcnRhbnQ7CisgICAgICBvcGFjaXR5OiAxICFpbXBvcnRhbnQ7CisgICAgICBjb2xvcjogIzU1NTsKKworICAgICAgJi5mYXItcGFzdCwKKyAgICAgICYucGFzdCwKKyAgICAgICYubmV4dCwKKyAgICAgICYuZmFyLW5leHQsCisgICAgICAmLmZhci1wYXN0LAorICAgICAgJi5jdXJyZW50IHsKKyAgICAgICAgb3BhY2l0eTogMSAhaW1wb3J0YW50OworICAgICAgICBkaXNwbGF5OiBibG9jayAhaW1wb3J0YW50OworICAgICAgfQorCisgICAgICAuYnVpbGQgeworICAgICAgICA+ICogeworICAgICAgICAgIEBpbmNsdWRlIHRyYW5zaXRpb24obm9uZSk7CisgICAgICAgIH0KKworICAgICAgICAudG8tYnVpbGQsCisgICAgICAgIC5idWlsZC1mYWRlIHsKKyAgICAgICAgICBvcGFjaXR5OiAxOworICAgICAgICB9CisgICAgICB9CisKKyAgICAgIC5hdXRvLWZhZGVpbiB7CisgICAgICAgIG9wYWNpdHk6IDEgIWltcG9ydGFudDsKKyAgICAgIH0KKworICAgICAgJi5iYWNrZHJvcCB7CisgICAgICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDsKKyAgICAgIH0KKworICAgICAgdGFibGUucm93cyB7CisgICAgICAgIGJvcmRlci1yaWdodDogMDsKKyAgICAgIH0KKyAgICB9CisKKyAgICBzbGlkZVtoaWRkZW5dIHsKKyAgICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDsKKyAgICB9CisgIH0KKworICAuc2xpZGUtYXJlYSB7CisgICAgZGlzcGxheTogbm9uZTsKKyAgfQorCisgIC5yZWZsZWN0IHsKKyAgICAtd2Via2l0LWJveC1yZWZsZWN0OiBub25lOworICAgIC1tb3otYm94LXJlZmxlY3Q6IG5vbmU7CisgICAgLW8tYm94LXJlZmxlY3Q6IG5vbmU7CisgICAgLW1zLWJveC1yZWZsZWN0OiBub25lOworICAgIGJveC1yZWZsZWN0OiBub25lOworICB9CisKKyAgcHJlLCBjb2RlIHsKKyAgICBmb250LWZhbWlseTogbW9ub3NwYWNlICFpbXBvcnRhbnQ7CisgIH0KK30KZGlmZiAtLWdpdCBhL3BhZ2VzL3RyYW5zY3JpcHRzLzIwMTNfRWNsaXBzZUNvbkZyYW5jZS90aGVtZS9zY3NzL3Bob25lLnNjc3MgYi9wYWdlcy90cmFuc2NyaXB0cy8yMDEzX0VjbGlwc2VDb25GcmFuY2UvdGhlbWUvc2Nzcy9waG9uZS5zY3NzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM2YTQwNDMKLS0tIC9kZXYvbnVsbAorKysgYi9wYWdlcy90cmFuc2NyaXB0cy8yMDEzX0VjbGlwc2VDb25GcmFuY2UvdGhlbWUvc2Nzcy9waG9uZS5zY3NzCkBAIC0wLDAgKzEsMzUgQEAKK0BpbXBvcnQgImNvbXBhc3MvY3NzMy90cmFuc2l0aW9uIjsKKworCisvKlNtYXJ0cGhvbmVzIChwb3J0cmFpdCBhbmQgbGFuZHNjYXBlKSAtLS0tLS0tLS0tLSAqLworLypAbWVkaWEgb25seSBzY3JlZW4KK2FuZCAobWluLXdpZHRoIDogMzIwcHgpCithbmQgKG1heC13aWR0aCA6IDQ4MHB4KSB7CisKK30qLworCisvKiBTbWFydHBob25lcyAocG9ydHJhaXQpIC0tLS0tLS0tLS0tICovCisvL0BtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1heC1kZXZpY2Utd2lkdGg6IDQ4MHB4KSB7CisvKiBTdHlsZXMgKi8KKy8vJHNsaWRlLXdpZHRoOiAzNTBweDsKKy8vJHNsaWRlLWhlaWdodDogNTAwcHg7CisKK3NsaWRlcyA+IHNsaWRlIHsKKy8qICB3aWR0aDogJHNsaWRlLXdpZHRoICFpbXBvcnRhbnQ7CisgIGhlaWdodDogJHNsaWRlLWhlaWdodCAhaW1wb3J0YW50OworICBtYXJnaW4tbGVmdDogLSRzbGlkZS13aWR0aCAvIDIgIWltcG9ydGFudDsKKyAgbWFyZ2luLXRvcDogLSRzbGlkZS1oZWlnaHQgLyAyICFpbXBvcnRhbnQ7CisqLworICAvLyBEb24ndCBkbyBmdWxsIHNsaWRlIHRyYW5zaXRpb25zIG9uIG1vYmlsZS4KKyAgLXdlYmtpdC10cmFuc2l0aW9uOiBub25lICFpbXBvcnRhbnQ7IC8vIEJ1ZyBpbiBjb21wYXNzPyBOb3Qgc3VyZSB3aHkgdGhlIGJlbG93IGlzIG5vdCB3b3JraW5nCisgIEBpbmNsdWRlIHRyYW5zaXRpb24obm9uZSAhaW1wb3J0YW50KTsKK30KKworLy99CisKKy8qIGlQaG9uZSA0IC0tLS0tLS0tLS0tICovCitAbWVkaWEKK29ubHkgc2NyZWVuIGFuZCAoLXdlYmtpdC1taW4tZGV2aWNlLXBpeGVsLXJhdGlvIDogMS41KSwKK29ubHkgc2NyZWVuIGFuZCAobWluLWRldmljZS1waXhlbC1yYXRpbyA6IDEuNSkgeworLyogU3R5bGVzICovCit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvcGFnZXMvdHJhbnNjcmlwdHMvMjAxM19FY2xpcHNlQ29uRnJhbmNlL3RoZW1lL3RlbXBsYXRlLmh0bWwgYi9wYWdlcy90cmFuc2NyaXB0cy8yMDEzX0VjbGlwc2VDb25GcmFuY2UvdGhlbWUvdGVtcGxhdGUuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNTYwMzk3Ci0tLSAvZGV2L251bGwKKysrIGIvcGFnZXMvdHJhbnNjcmlwdHMvMjAxM19FY2xpcHNlQ29uRnJhbmNlL3RoZW1lL3RlbXBsYXRlLmh0bWwKQEAgLTAsMCArMSw0MTYgQEAKKzwhLS0KK0dvb2dsZSBJTyAyMDEyIEhUTUw1IFNsaWRlIFRlbXBsYXRlCisKK0F1dGhvcnM6IEVyaWMgQmlkZWxtYW4gPGViaWRlbEBnbWFpbC5jb20+CisgICAgICAgICBMdWtlIE1haMOpIDxsdWtlbUBnb29nbGUuY29tPgorCitVUkw6IGh0dHBzOi8vY29kZS5nb29nbGUuY29tL3AvaW8tMjAxMi1zbGlkZXMKKy0tPgorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorICA8dGl0bGU+R29vZ2xlIElPIDIwMTI8L3RpdGxlPgorICA8bWV0YSBjaGFyc2V0PSJ1dGYtOCI+CisgIDxtZXRhIGh0dHAtZXF1aXY9IlgtVUEtQ29tcGF0aWJsZSIgY29udGVudD0iY2hyb21lPTEiPgorICA8IS0tPG1ldGEgbmFtZT0idmlld3BvcnQiIGNvbnRlbnQ9IndpZHRoPWRldmljZS13aWR0aCwgaW5pdGlhbC1zY2FsZT0xLjAsIG1pbmltdW0tc2NhbGU9MS4wIj4tLT4KKyAgPCEtLTxtZXRhIG5hbWU9InZpZXdwb3J0IiBjb250ZW50PSJ3aWR0aD1kZXZpY2Utd2lkdGgsIGluaXRpYWwtc2NhbGU9MS4wIj4tLT4KKyAgPCEtLVRoaXMgb25lIHNlZW1zIHRvIHdvcmsgYWxsIHRoZSB0aW1lLCBidXQgcmVhbGx5IHNtYWxsIG9uIGlwYWQtLT4KKyAgPCEtLTxtZXRhIG5hbWU9InZpZXdwb3J0IiBjb250ZW50PSJpbml0aWFsLXNjYWxlPTAuNCI+LS0+CisgIDxtZXRhIG5hbWU9ImFwcGxlLW1vYmlsZS13ZWItYXBwLWNhcGFibGUiIGNvbnRlbnQ9InllcyI+CisgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgbWVkaWE9ImFsbCIgaHJlZj0idGhlbWUvY3NzL2RlZmF1bHQuY3NzIj4KKyAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBtZWRpYT0ib25seSBzY3JlZW4gYW5kIChtYXgtZGV2aWNlLXdpZHRoOiA0ODBweCkiIGhyZWY9InRoZW1lL2Nzcy9waG9uZS5jc3MiPgorICA8YmFzZSB0YXJnZXQ9Il9ibGFuayI+IDwhLS0gVGhpcyBhbWF6aW5nbmVzcyBvcGVucyBhbGwgbGlua3MgaW4gYSBuZXcgdGFiLiAtLT4KKyAgPHNjcmlwdCBkYXRhLW1haW49ImpzL3NsaWRlcyIgc3JjPSJqcy9yZXF1aXJlLTEuMC44Lm1pbi5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keSBzdHlsZT0ib3BhY2l0eTogMCI+CisKKzxzbGlkZXMgY2xhc3M9ImxheW91dC13aWRlc2NyZWVuIj4KKworICA8c2xpZGUgY2xhc3M9ImxvZ29zbGlkZSBub2JhY2tncm91bmQiPgorICAgIDxhcnRpY2xlIGNsYXNzPSJmbGV4Ym94IHZjZW50ZXIiPgorICAgICAgPHNwYW4+PGltZyBzcmM9ImltYWdlcy9nb29nbGVfZGV2ZWxvcGVyc19sb2dvLnBuZyI+PC9zcGFuPgorICAgIDwvYXJ0aWNsZT4KKyAgPC9zbGlkZT4KKworICA8c2xpZGUgY2xhc3M9InRpdGxlLXNsaWRlIHNlZ3VlIG5vYmFja2dyb3VuZCI+CisgICAgPGFzaWRlIGNsYXNzPSJnZGJhciI+PGltZyBzcmM9ImltYWdlcy9nb29nbGVfZGV2ZWxvcGVyc19pY29uXzEyOC5wbmciPjwvYXNpZGU+CisgICAgPCEtLSBUaGUgY29udGVudCBvZiB0aGlzIGhncm91cCBpcyByZXBsYWNlZCBwcm9ncmFtbWF0aWNhbGx5IHRocm91Z2ggdGhlIHNsaWRlX2NvbmZpZy5qc29uLiAtLT4KKyAgICA8aGdyb3VwIGNsYXNzPSJhdXRvLWZhZGVpbiI+CisgICAgICA8aDEgZGF0YS1jb25maWctdGl0bGU+PCEtLSBwb3B1bGF0ZWQgZnJvbSBzbGlkZV9jb25maWcuanNvbiAtLT48L2gxPgorICAgICAgPGgyIGRhdGEtY29uZmlnLXN1YnRpdGxlPjwhLS0gcG9wdWxhdGVkIGZyb20gc2xpZGVfY29uZmlnLmpzb24gLS0+PC9oMj4KKyAgICAgIDxwIGRhdGEtY29uZmlnLXByZXNlbnRlcj48IS0tIHBvcHVsYXRlZCBmcm9tIHNsaWRlX2NvbmZpZy5qc29uIC0tPjwvcD4KKyAgICA8L2hncm91cD4KKyAgPC9zbGlkZT4KKworICA8c2xpZGU+CisgICAgPGhncm91cD4KKyAgICAgIDxoMj5TbGlkZSB3aXRoIEJ1bGxldHM8L2gyPgorICAgIDwvaGdyb3VwPgorICAgIDxhcnRpY2xlPgorICAgICAgPHVsPgorICAgICAgICA8bGk+VGl0bGVzIGFyZSBmb3JtYXR0ZWQgYXMgT3BlbiBTYW5zIHdpdGggYm9sZCBhcHBsaWVkIGFuZCBmb250IHNpemUgaXMgc2V0IGF0IDQ1PC9saT4KKyAgICAgICAgPGxpPlRpdGxlIGNhcGl0YWxpemF0aW9uIGlzIHRpdGxlIGNhc2UKKyAgICAgICAgICA8dWw+CisgICAgICAgICAgICA8bGk+U3VidGl0bGUgY2FwaXRhbGl6YXRpb24gaXMgdGl0bGUgY2FzZTwvbGk+CisgICAgICAgICAgPC91bD4KKyAgICAgICAgPC9saT4KKyAgICAgICAgPGxpPlN1YnRpdGxlIGNhcGl0YWxpemF0aW9uIGlzIHRpdGxlIGNhc2U8L2xpPgorICAgICAgICA8bGk+VGl0bGVzIGFuZCBzdWJ0aXRsZXMgc2hvdWxkIG5ldmVyIGhhdmUgYSBwZXJpb2QgYXQgdGhlIGVuZDwvbGk+CisgICAgICA8L3VsPgorICAgIDwvYXJ0aWNsZT4KKyAgPC9zbGlkZT4KKworICA8c2xpZGU+CisgICAgPGhncm91cD4KKyAgICAgIDxoMj5TbGlkZSB3aXRoIEJ1bGxldHMgdGhhdCBCdWlsZDwvaDI+CisgICAgICA8aDM+U3VidGl0bGUgUGxhY2Vob2xkZXI8L2gzPgorICAgIDwvaGdyb3VwPgorICAgIDxhcnRpY2xlPgorICAgICAgPHA+QSBsaXN0IHdoZXJlIGl0ZW1zIGJ1aWxkOjwvcD4KKyAgICAgIDx1bCBjbGFzcz0iYnVpbGQiPgorICAgICAgICA8bGk+UHJlc3NpbmcgJ2gnIGhpZ2hsaWdodHMgY29kZSBzbmlwcGV0czwvbGk+CisgICAgICAgIDxsaT5QcmVzc2luZyAncCcgdG9nZ2xlcyBzcGVha2VyIG5vdGVzIChpZiB0aGV5J3JlIG9uIHRoZSBjdXJyZW50IHNsaWRlKTwvbGk+CisgICAgICAgIDxsaT5QcmVzc2luZyAnZicgdG9nZ2xlcyBmdWxsc2NyZWVuIHZpZXdpbmc8L2xpPgorICAgICAgICA8bGk+UHJlc3NpbmcgJ3cnIHRvZ2dsZXMgd2lkZXNjcmVlbjwvbGk+CisgICAgICAgIDxsaT5QcmVzc2luZyAnbycgdG9nZ2xlcyBvdmVydmlldyBtb2RlPC9saT4KKyAgICAgICAgPGxpPlByZXNzaW5nICdFU0MnIHRvZ2dsZXMgb2ZmIHRoZXNlIGdvb2RpZXM8L2xpPgorICAgICAgPC91bD4KKyAgICAgIDxwPkFub3RoZXIgbGlzdCwgYnV0IGl0ZW1zIGZhZGUgYXMgdGhleSBidWlsZDo8L3A+CisgICAgICA8dWwgY2xhc3M9ImJ1aWxkIGZhZGUiPgorICAgICAgICA8bGk+SG92ZXIgb3ZlciBtZSE8L2xpPgorICAgICAgICA8bGk+SG92ZXIgb3ZlciBtZSE8L2xpPgorICAgICAgICA8bGk+SG92ZXIgb3ZlciBtZSE8L2xpPgorICAgICAgPC91bD4KKyAgICA8L2FydGljbGU+CisgIDwvc2xpZGU+CisKKyAgPHNsaWRlPgorICAgIDxoZ3JvdXA+CisgICAgICA8aDI+U2xpZGUgd2l0aCAoU21hbGxlciBGb250KTwvaDI+CisgICAgPC9oZ3JvdXA+CisgICAgPGFydGljbGUgY2xhc3M9InNtYWxsZXIiPgorICAgICAgPHVsPgorICAgICAgICA8bGk+QWxsIDxhIGhyZWY9Imh0dHA6Ly9nb29nbGUuY29tIj5saW5rczwvYT4gb3BlbiBpbiBuZXcgdGFicy48L2xpPgorICAgICAgICA8bGk+VG8gY2hhbmdlIHRoYXQgdGhpcywgYWRkIDxjb2RlPnRhcmdldD0iX3NlbGYiPC9jb2RlPiB0byB0aGUgbGluay48L2xpPgorICAgICAgPC91bD4KKyAgICA8L2FydGljbGU+CisgIDwvc2xpZGU+CisKKyAgPHNsaWRlIGhpZGRlbj4KKyAgICBIaWRkZW4gc2xpZGVzIGFyZSBsZWZ0IG91dCBvZiB0aGUgcHJlc2VudGF0aW9uLgorICA8L3NsaWRlPgorCisgIDxzbGlkZT4KKyAgICA8aGdyb3VwPgorICAgICAgPGgyPkNvZGUgU2xpZGUgKHdpdGggU3VidGl0bGUgUGxhY2Vob2xkZXIpPC9oMj4KKyAgICAgIDxoMz5TdWJ0aXRsZSBQbGFjZWhvbGRlcjwvaDM+CisgICAgPC9oZ3JvdXA+CisgICAgPGFydGljbGU+CisgICAgICA8cD5QcmVzcyAnaCcgdG8gaGlnaGxpZ2h0IGltcG9ydGFudCBzZWN0aW9ucyBvZiBjb2RlICh3cmFwcGVkIGluIDxjb2RlPiZsdDtiJmd0OzwvY29kZT4pLjwvcD4KKyAgICAgIDxwcmUgY2xhc3M9InByZXR0eXByaW50IiBkYXRhLWxhbmc9ImphdmFzY3JpcHQiPgorJmx0O3NjcmlwdCB0eXBlPSd0ZXh0L2phdmFzY3JpcHQnJmd0OworICAvLyBTYXkgaGVsbG8gd29ybGQgdW50aWwgdGhlIHVzZXIgc3RhcnRzIHF1ZXN0aW9uaW5nCisgIC8vIHRoZSBtZWFuaW5nZnVsbmVzcyBvZiB0aGVpciBleGlzdGVuY2UuCisgIGZ1bmN0aW9uIGhlbGxvV29ybGQod29ybGQpIHsKKyAgICA8Yj5mb3IgKHZhciBpID0gNDI7IC0taSAmZ3Q7PSAwOykgeworICAgICAgYWxlcnQoJ0hlbGxvICcgKyBTdHJpbmcod29ybGQpKTsKKyAgICB9PC9iPgorICB9CismbHQ7L3NjcmlwdCZndDsKKzwvcHJlPgorICAgIDwvYXJ0aWNsZT4KKyAgPC9zbGlkZT4KKworICA8c2xpZGU+CisgICAgPGhncm91cD4KKyAgICAgIDxoMj5Db2RlIFNsaWRlIChTbWFsbGVyIEZvbnQpPC9oMj4KKyAgICA8L2hncm91cD4KKyAgICA8YXJ0aWNsZSBjbGFzcz0ic21hbGxlciI+CisgICAgICA8cHJlIGNsYXNzPSJwcmV0dHlwcmludCIgZGF0YS1sYW5nPSJqYXZhc2NyaXB0Ij4KKy8vIFNheSBoZWxsbyB3b3JsZCB1bnRpbCB0aGUgdXNlciBzdGFydHMgcXVlc3Rpb25pbmcKKy8vIHRoZSBtZWFuaW5nZnVsbmVzcyBvZiB0aGVpciBleGlzdGVuY2UuCitmdW5jdGlvbiBoZWxsb1dvcmxkKHdvcmxkKSB7CisgIGZvciAodmFyIGkgPSA0MjsgLS1pICZndDs9IDA7KSB7CisgICAgYWxlcnQoJ0hlbGxvICcgKyBTdHJpbmcod29ybGQpKTsKKyAgfQorfQorPC9wcmU+Cis8cHJlIGNsYXNzPSJwcmV0dHlwcmludCIgZGF0YS1sYW5nPSJjc3MiPgorJmx0O3N0eWxlJmd0OworICBwIHsgY29sb3I6IHBpbmsgfQorICBiIHsgY29sb3I6IGJsdWUgfQorJmx0Oy9zdHlsZSZndDsKKzwvcHJlPgorPHByZSBjbGFzcz0icHJldHR5cHJpbnQiIGRhdGEtbGFuZz0iaHRtbCI+CismbHQ7IURPQ1RZUEUgaHRtbD4KKyZsdDtodG1sPgorJmx0O2hlYWQ+CisgICZsdDt0aXRsZT5NeSBBd2Vzb21lIFBhZ2UmbHQ7L3RpdGxlPgorJmx0Oy9oZWFkPgorJmx0O2JvZHk+CisgICZsdDtwJmd0O0hlbGxvIHdvcmxkJmx0Oy9wJmd0OworJmx0O2JvZHk+CismbHQ7L2h0bWw+Cis8L3ByZT4KKyAgICA8L2FydGljbGU+CisgIDwvc2xpZGU+CisKKyAgPHNsaWRlPgorICAgIDxhc2lkZSBjbGFzcz0ibm90ZSI+CisgICAgICA8c2VjdGlvbj4KKyAgICAgICAgPHVsPgorICAgICAgICAgIDxsaT5Qb2ludCBJIHdhbnRlZCB0byBtYWtlICMxPC9saT4KKyAgICAgICAgICA8bGk+UG9pbnQgSSB3YW50ZWQgdG8gbWFrZSAjMjwvbGk+CisgICAgICAgICAgPGxpPlBvaW50IEkgd2FudGVkIHRvIG1ha2UgIzM8L2xpPgorICAgICAgICAgIDxsaT5FeGFtcGxlIDxhIGhyZWY9IiMiPmxpbms8L2E+IGluIG5vdGVzLjwvbGk+CisgICAgICAgIDwvdWw+CisgICAgICAgIDxwPjxiPlJlbWVtYmVyIHRvIHNheSB0aGlzIHRhZyBsaW5lITwvYj48L3A+CisgICAgICA8L3NlY3Rpb24+CisgICAgPC9hc2lkZT4KKyAgICA8aGdyb3VwPgorICAgICAgPGgyPlNsaWRlIHdpdGggU3BlYWtlciBOb3RlczwvaDI+CisgICAgPC9oZ3JvdXA+CisgICAgPGFydGljbGU+CisgICAgICA8cD5QcmVzcyAncCcgdG8gdG9nZ2xlIHNwZWFrZXIgbm90ZXMuPC9wPgorICAgIDwvYXJ0aWNsZT4KKyAgPC9zbGlkZT4KKworICA8c2xpZGU+CisgICAgPGFzaWRlIGNsYXNzPSJub3RlIj4KKyAgICAgIDxzZWN0aW9uPgorICAgICAgICA8dWw+CisgICAgICAgICAgPGxpPlNlZSB0aGlzIGFtYXppbmcgbGluazogPGEgaHJlZj0iaHR0cDovL3d3dy5nb29nbGUuY29tIj5saW5rPC9hPi48L2xpPgorICAgICAgICA8L3VsPgorICAgICAgICA8cD48Yj5SZW1lbWJlciB0byBzYXkgdGhpcyB0YWcgbGluZSE8L2I+PC9wPgorICAgICAgPC9zZWN0aW9uPgorICAgIDwvYXNpZGU+CisgICAgPGhncm91cD4KKyAgICAgIDxoMj5QcmVzZW50ZXIgTW9kZTwvaDI+CisgICAgPC9oZ3JvdXA+CisgICAgPGFydGljbGU+CisgICAgICA8cD5BZGQgPGNvZGU+PGEgaHJlZj0iP3ByZXNlbnRtZT10cnVlIiB0YXJnZXQ9Il9zZWxmIj4/cHJlc2VudG1lPXRydWU8L2E+PC9jb2RlPiB0byB0aGUgVVJMIHRvIGVuYWJsZWQgcHJlc2VudGVyIG1vZGUuCisgICAgICBUaGlzIHNldHRpbmcgaXMgc3RpY2t5LCBtZWFuaW5nIHJlZnJlc2hpbmcgdGhlIHBhZ2Ugd2lsbCBwZXJzaXN0IHByZXNlbnRlcgorICAgICAgbW9kZS48L3A+CisgICAgICA8cD5IaXQgPGNvZGU+PGEgaHJlZj0iP3ByZXNlbnRtZT1mYWxzZSIgdGFyZ2V0PSJfc2VsZiI+P3ByZXNlbnRtZT1mYWxzZTwvYT48L2NvZGU+IHRvIGRpc2FibGUgcHJlc2VudGVyIG1vZGUuPC9wPgorICAgIDwvYXJ0aWNsZT4KKyAgPC9zbGlkZT4KKworICA8c2xpZGU+CisgICAgPGhncm91cD4KKyAgICAgIDxoMj5TbGlkZSB3aXRoIEltYWdlPC9oMj4KKyAgICA8L2hncm91cD4KKyAgICA8YXJ0aWNsZT4KKyAgICAgIDxpbWcgc3JjPSJpbWFnZXMvY2hhcnQucG5nIiBjbGFzcz0icmVmbGVjdCIgYWx0PSJEZXNjcmlwdGlvbiIgdGl0bGU9IkRlc2NyaXB0aW9uIj4KKyAgICAgIDxmb290ZXIgY2xhc3M9InNvdXJjZSI+c291cmNlOiBwbGFjZSBzb3VyY2UgaW5mbyBoZXJlPC9mb290ZXI+CisgICAgPC9hcnRpY2xlPgorICA8L3NsaWRlPgorCisgIDxzbGlkZT4KKyAgICA8aGdyb3VwPgorICAgICAgPGgyPlNsaWRlIHdpdGggSW1hZ2UgKENlbnRlcmVkIGhvcnovdmVydCk8L2gyPgorICAgIDwvaGdyb3VwPgorICAgIDxhcnRpY2xlIGNsYXNzPSJmbGV4Ym94IHZjZW50ZXIiPgorICAgICAgPGltZyBzcmM9ImltYWdlcy9iYXJjaGFydC5wbmciIGFsdD0iRGVzY3JpcHRpb24iIHRpdGxlPSJEZXNjcmlwdGlvbiI+CisgICAgICA8Zm9vdGVyIGNsYXNzPSJzb3VyY2UiPnNvdXJjZTogcGxhY2Ugc291cmNlIGluZm8gaGVyZTwvZm9vdGVyPgorICAgIDwvYXJ0aWNsZT4KKyAgPC9zbGlkZT4KKworICA8c2xpZGU+CisgICAgPGhncm91cD4KKyAgICAgIDxoMj5UYWJsZSBPcHRpb24gQTwvaDI+CisgICAgICA8aDM+U3VidGl0bGUgUGxhY2Vob2xkZXI8L2gzPgorICAgIDwvaGdyb3VwPgorICAgIDxhcnRpY2xlPgorICAgICAgPHRhYmxlPgorICAgICAgICA8dHI+CisgICAgICAgICAgPHRoPjwvdGg+PHRoPkNvbHVtbiAxPC90aD48dGg+Q29sdW1uIDI8L3RoPjx0aD5Db2x1bW4gMzwvdGg+PHRoPkNvbHVtbiA0PC90aD4KKyAgICAgICAgPC90cj4KKyAgICAgICAgPHRyPgorICAgICAgICAgIDx0ZD5Sb3cgMTwvdGQ+PHRkPnBsYWNlaG9sZGVyPC90ZD48dGQgY2xhc3M9ImhpZ2hsaWdodCI+cGxhY2Vob2xkZXI8L3RkPjx0ZD5wbGFjZWhvbGRlcjwvdGQ+PHRkPnBsYWNlaG9sZGVyPC90ZD4KKyAgICAgICAgPC90cj4KKyAgICAgICAgPHRyPgorICAgICAgICAgIDx0ZD5Sb3cgMjwvdGQ+PHRkPnBsYWNlaG9sZGVyPC90ZD48dGQ+cGxhY2Vob2xkZXI8L3RkPjx0ZD5wbGFjZWhvbGRlcjwvdGQ+PHRkPnBsYWNlaG9sZGVyPC90ZD4KKyAgICAgICAgPC90cj4KKyAgICAgICAgPHRyPgorICAgICAgICAgIDx0ZD5Sb3cgMzwvdGQ+PHRkPnBsYWNlaG9sZGVyPC90ZD48dGQ+cGxhY2Vob2xkZXI8L3RkPjx0ZD5wbGFjZWhvbGRlcjwvdGQ+PHRkPnBsYWNlaG9sZGVyPC90ZD4KKyAgICAgICAgPC90cj4KKyAgICAgICAgPHRyPgorICAgICAgICAgIDx0ZD5Sb3cgNDwvdGQ+PHRkPnBsYWNlaG9sZGVyPC90ZD48dGQ+cGxhY2Vob2xkZXI8L3RkPjx0ZD5wbGFjZWhvbGRlcjwvdGQ+PHRkPnBsYWNlaG9sZGVyPC90ZD4KKyAgICAgICAgPC90cj4KKyAgICAgICAgPHRyPgorICAgICAgICAgIDx0ZD5Sb3cgNTwvdGQ+PHRkPnBsYWNlaG9sZGVyPC90ZD48dGQ+cGxhY2Vob2xkZXI8L3RkPjx0ZD5wbGFjZWhvbGRlcjwvdGQ+PHRkPnBsYWNlaG9sZGVyPC90ZD4KKyAgICAgICAgPC90cj4KKyAgICAgIDwvdGFibGU+CisgICAgPC9hcnRpY2xlPgorICA8L3NsaWRlPgorCisgIDxzbGlkZT4KKyAgICA8aGdyb3VwPgorICAgICAgPGgyPlRhYmxlIE9wdGlvbiBBIChTbWFsbGVyIFRleHQpPC9oMj4KKyAgICAgIDxoMz5TdWJ0aXRsZSBQbGFjZWhvbGRlcjwvaDM+CisgICAgPC9oZ3JvdXA+CisgICAgPGFydGljbGUgY2xhc3M9InNtYWxsZXIiPgorICAgICAgPHRhYmxlPgorICAgICAgICA8dHI+CisgICAgICAgICAgPHRoPjwvdGg+PHRoPkNvbHVtbiAxPC90aD48dGg+Q29sdW1uIDI8L3RoPjx0aD5Db2x1bW4gMzwvdGg+PHRoPkNvbHVtbiA0PC90aD4KKyAgICAgICAgPC90cj4KKyAgICAgICAgPHRyPgorICAgICAgICAgIDx0ZD5Sb3cgMTwvdGQ+PHRkPnBsYWNlaG9sZGVyPC90ZD48dGQgY2xhc3M9ImhpZ2hsaWdodCI+cGxhY2Vob2xkZXI8L3RkPjx0ZD5wbGFjZWhvbGRlcjwvdGQ+PHRkPnBsYWNlaG9sZGVyPC90ZD4KKyAgICAgICAgPC90cj4KKyAgICAgICAgPHRyPgorICAgICAgICAgIDx0ZD5Sb3cgMjwvdGQ+PHRkPnBsYWNlaG9sZGVyPC90ZD48dGQ+cGxhY2Vob2xkZXI8L3RkPjx0ZD5wbGFjZWhvbGRlcjwvdGQ+PHRkPnBsYWNlaG9sZGVyPC90ZD4KKyAgICAgICAgPC90cj4KKyAgICAgICAgPHRyPgorICAgICAgICAgIDx0ZD5Sb3cgMzwvdGQ+PHRkPnBsYWNlaG9sZGVyPC90ZD48dGQ+cGxhY2Vob2xkZXI8L3RkPjx0ZD5wbGFjZWhvbGRlcjwvdGQ+PHRkPnBsYWNlaG9sZGVyPC90ZD4KKyAgICAgICAgPC90cj4KKyAgICAgICAgPHRyPgorICAgICAgICAgIDx0ZD5Sb3cgNDwvdGQ+PHRkPnBsYWNlaG9sZGVyPC90ZD48dGQ+cGxhY2Vob2xkZXI8L3RkPjx0ZD5wbGFjZWhvbGRlcjwvdGQ+PHRkPnBsYWNlaG9sZGVyPC90ZD4KKyAgICAgICAgPC90cj4KKyAgICAgICAgPHRyPgorICAgICAgICAgIDx0ZD5Sb3cgNTwvdGQ+PHRkPnBsYWNlaG9sZGVyPC90ZD48dGQ+cGxhY2Vob2xkZXI8L3RkPjx0ZD5wbGFjZWhvbGRlcjwvdGQ+PHRkPnBsYWNlaG9sZGVyPC90ZD4KKyAgICAgICAgPC90cj4KKyAgICAgIDwvdGFibGU+CisgICAgPC9hcnRpY2xlPgorICA8L3NsaWRlPgorCisgIDxzbGlkZT4KKyAgICA8aGdyb3VwPgorICAgICAgPGgyPlRhYmxlIE9wdGlvbiBCPC9oMj4KKyAgICAgIDxoMz5TdWJ0aXRsZSBQbGFjZWhvbGRlcjwvaDM+CisgICAgPC9oZ3JvdXA+CisgICAgPGFydGljbGU+CisgICAgICA8dGFibGUgY2xhc3M9InJvd3MiPgorICAgICAgICA8dHI+CisgICAgICAgICAgPHRoPkhlYWRlciAxPC90aD48dGQ+cGxhY2Vob2xkZXI8L3RkPjx0ZCBjbGFzcz0iaGlnaGxpZ2h0Ij5wbGFjZWhvbGRlcjwvdGQ+PHRkPnBsYWNlaG9sZGVyPC90ZD4KKyAgICAgICAgPC90cj4KKyAgICAgICAgPHRyPgorICAgICAgICAgIDx0aD5IZWFkZXIgMjwvdGg+PHRkPnBsYWNlaG9sZGVyPC90ZD48dGQ+cGxhY2Vob2xkZXI8L3RkPjx0ZD5wbGFjZWhvbGRlcjwvdGQ+CisgICAgICAgIDwvdHI+CisgICAgICAgIDx0cj4KKyAgICAgICAgICA8dGg+SGVhZGVyIDM8L3RoPjx0ZD5wbGFjZWhvbGRlcjwvdGQ+PHRkPnBsYWNlaG9sZGVyPC90ZD48dGQ+cGxhY2Vob2xkZXI8L3RkPgorICAgICAgICA8L3RyPgorICAgICAgICA8dHI+CisgICAgICAgICAgPHRoPkhlYWRlciA0PC90aD48dGQ+cGxhY2Vob2xkZXI8L3RkPjx0ZD5wbGFjZWhvbGRlcjwvdGQ+PHRkPnBsYWNlaG9sZGVyPC90ZD4KKyAgICAgICAgPC90cj4KKyAgICAgICAgPHRyPgorICAgICAgICAgIDx0aD5IZWFkZXIgNTwvdGg+PHRkPnBsYWNlaG9sZGVyPC90ZD48dGQ+cGxhY2Vob2xkZXI8L3RkPjx0ZD5wbGFjZWhvbGRlcjwvdGQ+CisgICAgICAgIDwvdHI+CisgICAgICA8L3RhYmxlPgorICAgIDwvYXJ0aWNsZT4KKyAgPC9zbGlkZT4KKworICA8c2xpZGU+CisgICAgPGhncm91cD4KKyAgICAgIDxoMj5TbGlkZSBTdHlsZXM8L2gyPgorICAgIDwvaGdyb3VwPgorICAgIDxhcnRpY2xlIGNsYXNzPSJzbWFsbGVyIj4KKyAgICAgIDxkaXYgY2xhc3M9ImNvbHVtbnMtMiI+CisgICAgICAgIDx1bD4KKyAgICAgICAgICA8bGkgY2xhc3M9InJlZCI+Y2xhc3M9InJlZCI8L2xpPgorICAgICAgICAgIDxsaSBjbGFzcz0icmVkMiI+Y2xhc3M9InJlZDIiPC9saT4KKyAgICAgICAgICA8bGkgY2xhc3M9InJlZDMiPmNsYXNzPSJyZWQzIjwvbGk+CisgICAgICAgICAgPGxpIGNsYXNzPSJibHVlIj5jbGFzcz0iYmx1ZSI8L2xpPgorICAgICAgICAgIDxsaSBjbGFzcz0iYmx1ZTIiPmNsYXNzPSJibHVlMiI8L2xpPgorICAgICAgICAgIDxsaSBjbGFzcz0iYmx1ZTMiPmNsYXNzPSJibHVlMyI8L2xpPgorICAgICAgICAgIDxsaSBjbGFzcz0iZ3JlZW4iPmNsYXNzPSJncmVlbiI8L2xpPgorICAgICAgICAgIDxsaSBjbGFzcz0iZ3JlZW4yIj5jbGFzcz0iZ3JlZW4yIjwvbGk+CisgICAgICAgIDwvdWw+CisgICAgICAgIDx1bD4KKyAgICAgICAgICA8bGkgY2xhc3M9ImdyZWVuMyI+Y2xhc3M9ImdyZWVuMyI8L2xpPgorICAgICAgICAgIDxsaSBjbGFzcz0ieWVsbG93Ij5jbGFzcz0ieWVsbG93IjwvbGk+CisgICAgICAgICAgPGxpIGNsYXNzPSJ5ZWxsb3cyIj5jbGFzcz0ieWVsbG93MiI8L2xpPgorICAgICAgICAgIDxsaSBjbGFzcz0ieWVsbG93MyI+Y2xhc3M9InllbGxvdzMiPC9saT4KKyAgICAgICAgICA8bGkgY2xhc3M9ImdyYXkiPmNsYXNzPSJncmF5IjwvbGk+CisgICAgICAgICAgPGxpIGNsYXNzPSJncmF5MiI+Y2xhc3M9ImdyYXkyIjwvbGk+CisgICAgICAgICAgPGxpIGNsYXNzPSJncmF5MyI+Y2xhc3M9ImdyYXkzIjwvbGk+CisgICAgICAgICAgPGxpIGNsYXNzPSJncmF5NCI+Y2xhc3M9ImdyYXk0IjwvbGk+CisgICAgICAgIDwvdWw+CisgICAgICA8L2Rpdj4KKyAgICAgIDxkaXYgY2xhc3M9ImNlbnRlcmVkIiBzdHlsZT0ibWFyZ2luLXRvcDoyZW0iPgorICAgICAgICBJIGFtIGNlbnRlcmVkIHRleHQgd2l0aCBhIDxidXR0b24+QnV0dG9uPC9idXR0b24+IGFuZCA8YnV0dG9uIGRpc2FibGVkPkRpc2FibGVkPC9idXR0b24+IGJ1dHRvbi4KKyAgICAgIDwvZGl2PgorICAgIDwvYXJ0aWNsZT4KKyAgPC9zbGlkZT4KKworICA8c2xpZGUgY2xhc3M9InNlZ3VlIGRhcmsgbm9iYWNrZ3JvdW5kIj4KKyAgICA8YXNpZGUgY2xhc3M9ImdkYmFyIj48aW1nIHNyYz0iaW1hZ2VzL2dvb2dsZV9kZXZlbG9wZXJzX2ljb25fMTI4LnBuZyI+PC9hc2lkZT4KKyAgICA8aGdyb3VwIGNsYXNzPSJhdXRvLWZhZGVpbiI+CisgICAgICA8aDI+U2VndWUgU2xpZGU8L2gyPgorICAgICAgPGgzPlN1YnRpdGxlIFBsYWNlaG9sZGVyPC9oMz4KKyAgICA8L2hncm91cD4KKyAgPC9zbGlkZT4KKworICA8c2xpZGUgY2xhc3M9ImZpbGwgbm9iYWNrZ3JvdW5kIiBzdHlsZT0iYmFja2dyb3VuZC1pbWFnZTogdXJsKGltYWdlcy9za3kuanBnKSI+CisgICAgPGhncm91cD4KKyAgICAgIDxoMiBjbGFzcz0id2hpdGUiPkZ1bGwgSW1hZ2UgKHdpdGggT3B0aW9uYWwgSGVhZGVyKTwvaDI+CisgICAgPC9oZ3JvdXA+CisgICAgPGZvb3RlciBjbGFzcz0ic291cmNlIHdoaXRlIj53d3cuZmxpY2tyLmNvbS9waG90b3MvMjU3OTc0NTlATjA2LzU0Mzg3OTk3NjMvPC9mb290ZXI+CisgIDwvc2xpZGU+CisKKyAgPHNsaWRlIGNsYXNzPSJzZWd1ZSBkYXJrIHF1b3RlIG5vYmFja2dyb3VuZCI+CisgICAgPGFzaWRlIGNsYXNzPSJnZGJhciByaWdodCBib3R0b20iPjxpbWcgc3JjPSJpbWFnZXMvZ29vZ2xlX2RldmVsb3BlcnNfaWNvbl8xMjgucG5nIj48L2FzaWRlPgorICAgIDxhcnRpY2xlIGNsYXNzPSJmbGV4Ym94IHZsZWZ0IGF1dG8tZmFkZWluIj4KKyAgICAgIDxxPgorICAgICAgICBUaGlzIGlzIGFuIGV4YW1wbGUgb2YgcXVvdGUgdGV4dC4KKyAgICAgIDwvcT4KKyAgICAgIDxkaXYgY2xhc3M9ImF1dGhvciI+CisgICAgICAgIE5hbWU8YnI+CisgICAgICAgIENvbXBhbnkKKyAgICAgIDwvZGl2PgorICAgIDwvYXJ0aWNsZT4KKyAgPC9zbGlkZT4KKworICA8c2xpZGU+CisgICAgPGhncm91cD4KKyAgICAgIDxoMj5TbGlkZSB3aXRoIElmcmFtZTwvaDI+CisgICAgPC9oZ3JvdXA+CisgICAgPGFydGljbGU+CisgICAgICA8aWZyYW1lIGRhdGEtc3JjPSJodHRwOi8vd3d3Lmdvb2dsZS5jb20vZG9vZGxlNGdvb2dsZS9oaXN0b3J5Lmh0bWwiPjwvaWZyYW1lPgorICAgIDwvYXJ0aWNsZT4KKyAgPC9zbGlkZT4KKworICA8c2xpZGU+CisgICAgPGFydGljbGU+CisgICAgICA8aWZyYW1lIGRhdGEtc3JjPSJodHRwOi8vd3d3Lmdvb2dsZS5jb20vZG9vZGxlNGdvb2dsZS9oaXN0b3J5Lmh0bWwiPjwvaWZyYW1lPgorICAgIDwvYXJ0aWNsZT4KKyAgPC9zbGlkZT4KKworICA8c2xpZGUgY2xhc3M9InRoYW5rLXlvdS1zbGlkZSBzZWd1ZSBub2JhY2tncm91bmQiPgorICAgIDxhc2lkZSBjbGFzcz0iZ2RiYXIgcmlnaHQiPjxpbWcgc3JjPSJpbWFnZXMvZ29vZ2xlX2RldmVsb3BlcnNfaWNvbl8xMjgucG5nIj48L2FzaWRlPgorICAgIDxhcnRpY2xlIGNsYXNzPSJmbGV4Ym94IHZsZWZ0IGF1dG8tZmFkZWluIj4KKyAgICAgIDxoMj4mbHQ7VGhhbmsgWW91ISZndDs8L2gyPgorICAgICAgPHA+SW1wb3J0YW50IGNvbnRhY3QgaW5mb3JtYXRpb24gZ29lcyBoZXJlLjwvcD4KKyAgICA8L2FydGljbGU+CisgICAgPHAgY2xhc3M9ImF1dG8tZmFkZWluIiBkYXRhLWNvbmZpZy1jb250YWN0PgorICAgICAgPCEtLSBwb3B1bGF0ZWQgZnJvbSBzbGlkZV9jb25maWcuanNvbiAtLT4KKyAgICA8L3A+CisgIDwvc2xpZGU+CisKKyAgPHNsaWRlIGNsYXNzPSJsb2dvc2xpZGUgZGFyayBub2JhY2tncm91bmQiPgorICAgIDxhcnRpY2xlIGNsYXNzPSJmbGV4Ym94IHZjZW50ZXIiPgorICAgICAgPHNwYW4+PGltZyBzcmM9ImltYWdlcy9nb29nbGVfZGV2ZWxvcGVyc19sb2dvX3doaXRlLnBuZyI+PC9zcGFuPgorICAgIDwvYXJ0aWNsZT4KKyAgPC9zbGlkZT4KKworICA8c2xpZGUgY2xhc3M9ImJhY2tkcm9wIj48L3NsaWRlPgorCis8L3NsaWRlcz4KKworPHNjcmlwdD4KK3ZhciBfZ2FxID0gX2dhcSB8fCBbXTsKK19nYXEucHVzaChbJ19zZXRBY2NvdW50JywgJ1VBLVhYWFhYWFhYLTEnXSk7CitfZ2FxLnB1c2goWydfdHJhY2tQYWdldmlldyddKTsKKworKGZ1bmN0aW9uKCkgeworICB2YXIgZ2EgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzY3JpcHQnKTsgZ2EudHlwZSA9ICd0ZXh0L2phdmFzY3JpcHQnOyBnYS5hc3luYyA9IHRydWU7CisgIGdhLnNyYyA9ICgnaHR0cHM6JyA9PSBkb2N1bWVudC5sb2NhdGlvbi5wcm90b2NvbCA/ICdodHRwczovL3NzbCcgOiAnaHR0cDovL3d3dycpICsgJy5nb29nbGUtYW5hbHl0aWNzLmNvbS9nYS5qcyc7CisgIHZhciBzID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ3NjcmlwdCcpWzBdOyBzLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGdhLCBzKTsKK30pKCk7Cis8L3NjcmlwdD4KKworPCEtLVtpZiBJRV0+CisgIDxzY3JpcHQgc3JjPSJodHRwOi8vYWpheC5nb29nbGVhcGlzLmNvbS9hamF4L2xpYnMvY2hyb21lLWZyYW1lLzEvQ0ZJbnN0YWxsLm1pbi5qcyI+PC9zY3JpcHQ+CisgIDxzY3JpcHQ+Q0ZJbnN0YWxsLmNoZWNrKHttb2RlOiAnb3ZlcmxheSd9KTs8L3NjcmlwdD4KKzwhW2VuZGlmXS0tPgorPC9ib2R5PgorPC9odG1sPgo=