DIR : /home/kozerus/public_html/index_jsdk_jtfdc.html

/home/kozerus/public_html

<html>
<!--[if lt IE 7]> <html class="no-js ie6" lang="en"> <![endif]-->
<!--[if IE 7]>    <html class="no-js ie7" lang="en"> <![endif]-->
<!--[if IE 8]>    <html class="no-js ie8" lang="en"> <![endif]-->
<!--[if gt IE 8]><!-->  <html class="no-js" lang="en"> <!--<![endif]-->

	<head>
		<meta charset="utf-8">
		<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">

		<title>index_jsdk.html 20180602_1722</title>
<!--
		<title>index_jsdk.html 20180602_1500</title>
		<title>Getting Started with deck.js</title>
	-->

		<meta name="description" content="A jQuery library for modern HTML presentations">
		<meta name="author" content="Caleb Troughton">
		<meta name="viewport" content="width=1024, user-scalable=no">

		<link id="deck-core_css" rel="stylesheet" media="screen" href="data:/text/plain;base64,aHRtbCwgYm9keSB7CiAgaGVpZ2h0OiAxMDAlOwogIHBhZGRpbmc6IDA7CiAgbWFyZ2luOiAwOwp9CgouZGVjay1jb250YWluZXIgewogIHBvc2l0aW9uOiByZWxhdGl2ZTsKICBtaW4taGVpZ2h0OiAxMDAlOwogIG1hcmdpbjogMCBhdXRvOwogIG92ZXJmbG93OiBoaWRkZW47CiAgb3ZlcmZsb3cteTogYXV0bzsKfQouanMgLmRlY2stY29udGFpbmVyIHsKICB2aXNpYmlsaXR5OiBoaWRkZW47Cn0KLnJlYWR5IC5kZWNrLWNvbnRhaW5lciB7CiAgdmlzaWJpbGl0eTogdmlzaWJsZTsKfQoudG91Y2ggLmRlY2stY29udGFpbmVyIHsKICAtd2Via2l0LXRleHQtc2l6ZS1hZGp1c3Q6IG5vbmU7CiAgLW1vei10ZXh0LXNpemUtYWRqdXN0OiBub25lOwp9CgouZGVjay1sb2FkaW5nIHsKICBkaXNwbGF5OiBub25lOwp9Cgouc2xpZGUgewogIHdpZHRoOiBhdXRvOwogIG1pbi1oZWlnaHQ6IDEwMCU7CiAgcG9zaXRpb246IHJlbGF0aXZlOwp9CgouZGVjay1iZWZvcmUsIC5kZWNrLXByZXZpb3VzLCAuZGVjay1uZXh0LCAuZGVjay1hZnRlciB7CiAgcG9zaXRpb246IGFic29sdXRlOwogIGxlZnQ6IC05OTllbTsKICB0b3A6IC05OTllbTsKfQoKLmRlY2stY3VycmVudCB7CiAgei1pbmRleDogMjsKfQoKLnNsaWRlIC5zbGlkZSB7CiAgdmlzaWJpbGl0eTogaGlkZGVuOwogIHBvc2l0aW9uOiBzdGF0aWM7CiAgbWluLWhlaWdodDogMDsKfQoKLmRlY2stY2hpbGQtY3VycmVudCB7CiAgcG9zaXRpb246IHN0YXRpYzsKICB6LWluZGV4OiAyOwp9Ci5kZWNrLWNoaWxkLWN1cnJlbnQgLnNsaWRlIHsKICB2aXNpYmlsaXR5OiBoaWRkZW47Cn0KLmRlY2stY2hpbGQtY3VycmVudCAuZGVjay1wcmV2aW91cywgLmRlY2stY2hpbGQtY3VycmVudCAuZGVjay1iZWZvcmUsIC5kZWNrLWNoaWxkLWN1cnJlbnQgLmRlY2stY3VycmVudCB7CiAgdmlzaWJpbGl0eTogdmlzaWJsZTsKfQo=">
		<link id="deck-goto_css" rel="stylesheet" media="screen" href="data:/text/plain;base64,LmdvdG8tZm9ybSB7CiAgcG9zaXRpb246IGFic29sdXRlOwogIHotaW5kZXg6IDM7CiAgYm90dG9tOiAxMHB4OwogIGxlZnQ6IDUwJTsKICBoZWlnaHQ6IDEuNzVlbTsKICBtYXJnaW46IDAgMCAwIC05LjEyNWVtOwogIGxpbmUtaGVpZ2h0OiAxLjc1ZW07CiAgcGFkZGluZzogMC42MjVlbTsKICBkaXNwbGF5OiBub25lOwogIGJhY2tncm91bmQ6ICNjY2M7CiAgb3ZlcmZsb3c6IGhpZGRlbjsKICBib3JkZXItcmFkaXVzOiAxMHB4Owp9Ci5nb3RvLWZvcm0gbGFiZWwgewogIGZvbnQtd2VpZ2h0OiBib2xkOwp9Ci5nb3RvLWZvcm0gbGFiZWwsIC5nb3RvLWZvcm0gaW5wdXQgewogIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICBmb250LWZhbWlseTogaW5oZXJpdDsKfQouZGVjay1nb3RvIC5nb3RvLWZvcm0gewogIGRpc3BsYXk6IGJsb2NrOwp9CgojZ290by1zbGlkZSB7CiAgd2lkdGg6IDguMzc1ZW07CiAgbWFyZ2luOiAwIDAuNjI1ZW07CiAgaGVpZ2h0OiAxLjQzNzVlbTsKfQoKQG1lZGlhIHByaW50IHsKICAuZ290by1mb3JtLCAjZ290by1zbGlkZSB7CiAgICBkaXNwbGF5OiBub25lOwogIH0KfQo=">
		<link id="deck-menu_css" rel="stylesheet" media="screen" href="data:/text/plain;base64,LmRlY2stbWVudSB7CiAgb3ZlcmZsb3c6IGF1dG87Cn0KLmRlY2stbWVudSAuc2xpZGUgewogIGJhY2tncm91bmQ6ICNlZWU7CiAgcG9zaXRpb246IHJlbGF0aXZlOwogIGxlZnQ6IDA7CiAgdG9wOiAwOwogIHZpc2liaWxpdHk6IHZpc2libGU7CiAgY3Vyc29yOiBwb2ludGVyOwp9Ci5uby1jc3N0cmFuc2Zvcm1zIC5kZWNrLW1lbnUgPiAuc2xpZGUgewogIGZsb2F0OiBsZWZ0OwogIHdpZHRoOiAyMiU7CiAgaGVpZ2h0OiAyMiU7CiAgbWluLWhlaWdodDogMDsKICBtYXJnaW46IDElOwogIGZvbnQtc2l6ZTogMC4yMmVtOwogIG92ZXJmbG93OiBoaWRkZW47CiAgcGFkZGluZzogMCAwLjUlOwp9Ci5jc3N0cmFuc2Zvcm1zIC5kZWNrLW1lbnUgPiAuc2xpZGUgewogIC13ZWJraXQtdHJhbnNmb3JtOiBzY2FsZSgwLjIyKSAhaW1wb3J0YW50OwogIC1tcy10cmFuc2Zvcm06IHNjYWxlKDAuMjIpICFpbXBvcnRhbnQ7CiAgdHJhbnNmb3JtOiBzY2FsZSgwLjIyKSAhaW1wb3J0YW50OwogIC13ZWJraXQtdHJhbnNmb3JtLW9yaWdpbjogMCAwOwogIC1tcy10cmFuc2Zvcm0tb3JpZ2luOiAwIDA7CiAgdHJhbnNmb3JtLW9yaWdpbjogMCAwOwogIC1tb3otYm94LXNpemluZzogYm9yZGVyLWJveDsKICBib3gtc2l6aW5nOiBib3JkZXItYm94OwogIHdpZHRoOiAxMDAlOwogIGhlaWdodDogMTAwJTsKICBvdmVyZmxvdzogaGlkZGVuOwogIHBhZGRpbmc6IDAgNDhweDsKICBtYXJnaW46IDEycHg7Cn0KLmRlY2stbWVudSBpZnJhbWUsIC5kZWNrLW1lbnUgaW1nLCAuZGVjay1tZW51IHZpZGVvIHsKICBtYXgtd2lkdGg6IDEwMCU7Cn0KLmRlY2stbWVudSAuZGVjay1jdXJyZW50LCAubm8tdG91Y2ggLmRlY2stbWVudSAuc2xpZGU6aG92ZXIgewogIGJhY2tncm91bmQ6ICNkZGY7Cn0KLmRlY2stbWVudS5kZWNrLWNvbnRhaW5lcjpob3ZlciAuZGVjay1wcmV2LWxpbmssIC5kZWNrLW1lbnUuZGVjay1jb250YWluZXI6aG92ZXIgLmRlY2stbmV4dC1saW5rIHsKICBkaXNwbGF5OiBub25lOwp9Cg==">
		<link id="deck_navigation_css" rel="stylesheet" media="screen" href="data:/text/plain;base64,LmRlY2stcHJldi1saW5rLCAuZGVjay1uZXh0LWxpbmsgewogIGRpc3BsYXk6IG5vbmU7CiAgcG9zaXRpb246IGFic29sdXRlOwogIHotaW5kZXg6IDM7CiAgdG9wOiA1MCU7CiAgd2lkdGg6IDMycHg7CiAgaGVpZ2h0OiAzMnB4OwogIG1hcmdpbi10b3A6IC0xNnB4OwogIGZvbnQtc2l6ZTogMjBweDsKICBmb250LXdlaWdodDogYm9sZDsKICBsaW5lLWhlaWdodDogMzJweDsKICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOwogIHRleHQtYWxpZ246IGNlbnRlcjsKICB0ZXh0LWRlY29yYXRpb246IG5vbmU7CiAgY29sb3I6ICNmZmY7CiAgYmFja2dyb3VuZDogIzg4ODsKICBib3JkZXItcmFkaXVzOiAxNnB4Owp9Ci5kZWNrLXByZXYtbGluazpob3ZlciwgLmRlY2stcHJldi1saW5rOmZvY3VzLCAuZGVjay1wcmV2LWxpbms6YWN0aXZlLCAuZGVjay1wcmV2LWxpbms6dmlzaXRlZCwgLmRlY2stbmV4dC1saW5rOmhvdmVyLCAuZGVjay1uZXh0LWxpbms6Zm9jdXMsIC5kZWNrLW5leHQtbGluazphY3RpdmUsIC5kZWNrLW5leHQtbGluazp2aXNpdGVkIHsKICBjb2xvcjogI2ZmZjsKfQoKLmRlY2stcHJldi1saW5rIHsKICBsZWZ0OiA4cHg7Cn0KCi5kZWNrLW5leHQtbGluayB7CiAgcmlnaHQ6IDhweDsKfQoKLmRlY2stY29udGFpbmVyOmhvdmVyIC5kZWNrLXByZXYtbGluaywgLmRlY2stY29udGFpbmVyOmhvdmVyIC5kZWNrLW5leHQtbGluayB7CiAgZGlzcGxheTogYmxvY2s7Cn0KLmRlY2stY29udGFpbmVyOmhvdmVyIC5kZWNrLXByZXYtbGluay5kZWNrLW5hdi1kaXNhYmxlZCwgLnRvdWNoIC5kZWNrLWNvbnRhaW5lcjpob3ZlciAuZGVjay1wcmV2LWxpbmssIC5kZWNrLWNvbnRhaW5lcjpob3ZlciAuZGVjay1uZXh0LWxpbmsuZGVjay1uYXYtZGlzYWJsZWQsIC50b3VjaCAuZGVjay1jb250YWluZXI6aG92ZXIgLmRlY2stbmV4dC1saW5rIHsKICBkaXNwbGF5OiBub25lOwp9CgpAbWVkaWEgcHJpbnQgewogIC5kZWNrLXByZXYtbGluaywgLmRlY2stbmV4dC1saW5rIHsKICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDsKICB9Cn0K">
		<link id="deck-status_css" rel="stylesheet" media="screen" href="data:/text/plain;base64,LmRlY2stc3RhdHVzIHsKICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgYm90dG9tOiAxMHB4OwogIHJpZ2h0OiA1cHg7CiAgY29sb3I6ICM4ODg7CiAgei1pbmRleDogMzsKICBtYXJnaW46IDA7Cn0KCmJvZHkgPiAuZGVjay1jb250YWluZXIgLmRlY2stc3RhdHVzIHsKICBwb3NpdGlvbjogZml4ZWQ7Cn0KCkBtZWRpYSBwcmludCB7CiAgLmRlY2stc3RhdHVzIHsKICAgIGRpc3BsYXk6IG5vbmU7CiAgfQp9Cg==">
		<link id="deck-scale_css" rel="stylesheet" media="screen" href="data:/text/plain;base64,LmNzc3RyYW5zZm9ybXMgLmRlY2stY29udGFpbmVyLmRlY2stc2NhbGU6bm90KC5kZWNrLW1lbnUpIHsKICBvdmVyZmxvdzogaGlkZGVuOwp9Ci5jc3N0cmFuc2Zvcm1zIC5kZWNrLWNvbnRhaW5lci5kZWNrLXNjYWxlOm5vdCguZGVjay1tZW51KSA+IC5zbGlkZSB7CiAgLW1vei1ib3gtc2l6aW5nOiBwYWRkaW5nLWJveDsKICBib3gtc2l6aW5nOiBwYWRkaW5nLWJveDsKICB3aWR0aDogMTAwJTsKICBwYWRkaW5nLWJvdHRvbTogMjBweDsKfQouY3NzdHJhbnNmb3JtcyAuZGVjay1jb250YWluZXIuZGVjay1zY2FsZTpub3QoLmRlY2stbWVudSkgPiAuc2xpZGUgPiAuZGVjay1zbGlkZS1zY2FsZXIgewogIC13ZWJraXQtdHJhbnNmb3JtLW9yaWdpbjogNTAlIDA7CiAgLW1zLXRyYW5zZm9ybS1vcmlnaW46IDUwJSAwOwogIHRyYW5zZm9ybS1vcmlnaW46IDUwJSAwOwp9CgouY3NzdHJhbnNmb3JtcyAuZGVjay1jb250YWluZXIuZGVjay1tZW51IC5kZWNrLXNsaWRlLXNjYWxlciB7CiAgLXdlYmtpdC10cmFuc2Zvcm06IG5vbmUgIWltcG9ydGFudDsKICAtbXMtdHJhbnNmb3JtOiBub25lICFpbXBvcnRhbnQ7CiAgdHJhbnNmb3JtOiBub25lICFpbXBvcnRhbnQ7Cn0K">
		<link id="web-20_css" rel="stylesheet" media="screen" href="data:/text/plain;base64,QGNoYXJzZXQgIlVURi04IjsKLyogUmVzZXRzIGFuZCBiYXNlIHN0eWxlcyBmcm9tIEhUTUw1IEJvaWxlcnBsYXRlICovCmRpdiwgc3Bhbiwgb2JqZWN0LCBpZnJhbWUsCmgxLCBoMiwgaDMsIGg0LCBoNSwgaDYsIHAsIGJsb2NrcXVvdGUsIHByZSwKYWJiciwgYWRkcmVzcywgY2l0ZSwgY29kZSwgZGVsLCBkZm4sIGVtLCBpbWcsIGlucywga2JkLCBxLCBzYW1wLApzbWFsbCwgc3Ryb25nLCBzdWIsIHN1cCwgdmFyLCBiLCBpLCBkbCwgZHQsIGRkLCBvbCwgdWwsIGxpLApmaWVsZHNldCwgZm9ybSwgbGFiZWwsIGxlZ2VuZCwKdGFibGUsIGNhcHRpb24sIHRib2R5LCB0Zm9vdCwgdGhlYWQsIHRyLCB0aCwgdGQsCmFydGljbGUsIGFzaWRlLCBjYW52YXMsIGRldGFpbHMsIGZpZ2NhcHRpb24sIGZpZ3VyZSwKZm9vdGVyLCBoZWFkZXIsIGhncm91cCwgbWVudSwgbmF2LCBzZWN0aW9uLCBzdW1tYXJ5LAp0aW1lLCBtYXJrLCBhdWRpbywgdmlkZW8gewogIG1hcmdpbjogMDsKICBwYWRkaW5nOiAwOwogIGJvcmRlcjogMDsKICBmb250LXNpemU6IDEwMCU7CiAgZm9udDogaW5oZXJpdDsKICB2ZXJ0aWNhbC1hbGlnbjogYmFzZWxpbmU7Cn0KCmFydGljbGUsIGFzaWRlLCBkZXRhaWxzLCBmaWdjYXB0aW9uLCBmaWd1cmUsCmZvb3RlciwgaGVhZGVyLCBoZ3JvdXAsIG1lbnUsIG5hdiwgc2VjdGlvbiB7CiAgZGlzcGxheTogYmxvY2s7Cn0KCmJsb2NrcXVvdGUsIHEgewogIHF1b3Rlczogbm9uZTsKfQpibG9ja3F1b3RlOmJlZm9yZSwgYmxvY2txdW90ZTphZnRlciwgcTpiZWZvcmUsIHE6YWZ0ZXIgewogIGNvbnRlbnQ6ICIiOwogIGNvbnRlbnQ6IG5vbmU7Cn0KCmlucyB7CiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmOTsKICBjb2xvcjogIzAwMDsKICB0ZXh0LWRlY29yYXRpb246IG5vbmU7Cn0KCm1hcmsgewogIGJhY2tncm91bmQtY29sb3I6ICNmZjk7CiAgY29sb3I6ICMwMDA7CiAgZm9udC1zdHlsZTogaXRhbGljOwogIGZvbnQtd2VpZ2h0OiBib2xkOwp9CgpkZWwgewogIHRleHQtZGVjb3JhdGlvbjogbGluZS10aHJvdWdoOwp9CgphYmJyW3RpdGxlXSwgZGZuW3RpdGxlXSB7CiAgYm9yZGVyLWJvdHRvbTogMXB4IGRvdHRlZDsKICBjdXJzb3I6IGhlbHA7Cn0KCnRhYmxlIHsKICBib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwogIGJvcmRlci1zcGFjaW5nOiAwOwp9CgpociB7CiAgZGlzcGxheTogYmxvY2s7CiAgaGVpZ2h0OiAxcHg7CiAgYm9yZGVyOiAwOwogIGJvcmRlci10b3A6IDFweCBzb2xpZCAjY2NjOwogIG1hcmdpbjogMWVtIDA7CiAgcGFkZGluZzogMDsKfQoKaW5wdXQsIHNlbGVjdCB7CiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTsKfQoKc2VsZWN0LCBpbnB1dCwgdGV4dGFyZWEsIGJ1dHRvbiB7CiAgZm9udDogOTklIHNhbnMtc2VyaWY7Cn0KCnByZSwgY29kZSwga2JkLCBzYW1wIHsKICBmb250LWZhbWlseTogbW9ub3NwYWNlLCBzYW5zLXNlcmlmOwp9CgphIHsKICAtd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6IHJnYmEoMCwgMCwgMCwgMCk7Cn0KYTpob3ZlciwgYTphY3RpdmUgewogIG91dGxpbmU6IG5vbmU7Cn0KCnVsLCBvbCB7CiAgbWFyZ2luLWxlZnQ6IDJlbTsKICB2ZXJ0aWNhbC1hbGlnbjogdG9wOwp9CgpvbCB7CiAgbGlzdC1zdHlsZS10eXBlOiBkZWNpbWFsOwp9CgpuYXYgdWwsIG5hdiBsaSB7CiAgbWFyZ2luOiAwOwogIGxpc3Qtc3R5bGU6IG5vbmU7CiAgbGlzdC1zdHlsZS1pbWFnZTogbm9uZTsKfQoKc21hbGwgewogIGZvbnQtc2l6ZTogODUlOwp9CgpzdHJvbmcsIHRoIHsKICBmb250LXdlaWdodDogYm9sZDsKfQoKdGQgewogIHZlcnRpY2FsLWFsaWduOiB0b3A7Cn0KCnN1Yiwgc3VwIHsKICBmb250LXNpemU6IDc1JTsKICBsaW5lLWhlaWdodDogMDsKICBwb3NpdGlvbjogcmVsYXRpdmU7Cn0KCnN1cCB7CiAgdG9wOiAtMC41ZW07Cn0KCnN1YiB7CiAgYm90dG9tOiAtMC4yNWVtOwp9Cgp0ZXh0YXJlYSB7CiAgb3ZlcmZsb3c6IGF1dG87Cn0KCmlucHV0W3R5cGU9InJhZGlvIl0gewogIHZlcnRpY2FsLWFsaWduOiB0ZXh0LWJvdHRvbTsKfQoKaW5wdXRbdHlwZT0iY2hlY2tib3giXSB7CiAgdmVydGljYWwtYWxpZ246IGJvdHRvbTsKfQoKbGFiZWwsCmlucHV0W3R5cGU9ImJ1dHRvbiJdLAppbnB1dFt0eXBlPSJzdWJtaXQiXSwKaW5wdXRbdHlwZT0iaW1hZ2UiXSwKYnV0dG9uIHsKICBjdXJzb3I6IHBvaW50ZXI7Cn0KCmJ1dHRvbiwgaW5wdXQsIHNlbGVjdCwgdGV4dGFyZWEgewogIG1hcmdpbjogMDsKfQoKaW5wdXQ6aW52YWxpZCwgdGV4dGFyZWE6aW52YWxpZCB7CiAgYm9yZGVyLXJhZGl1czogMXB4OwogIC1tb3otYm94LXNoYWRvdzogMHB4IDBweCA1cHggcmVkOwogIC13ZWJraXQtYm94LXNoYWRvdzogMHB4IDBweCA1cHggcmVkOwogIGJveC1zaGFkb3c6IDBweCAwcHggNXB4IHJlZDsKfQppbnB1dDppbnZhbGlkIC5uby1ib3hzaGFkb3csIHRleHRhcmVhOmludmFsaWQgLm5vLWJveHNoYWRvdyB7CiAgYmFja2dyb3VuZC1jb2xvcjogI2YwZGRkZDsKfQoKYnV0dG9uIHsKICB3aWR0aDogYXV0bzsKICBvdmVyZmxvdzogdmlzaWJsZTsKfQoKc2VsZWN0LCBpbnB1dCwgdGV4dGFyZWEgewogIGNvbG9yOiAjNDQ0NDQ0Owp9CgphIHsKICBjb2xvcjogIzYwNzg5MDsKfQphOmhvdmVyLCBhOmZvY3VzIHsKICBjb2xvcjogIzAzNjsKfQphOmxpbmsgewogIC13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvcjogI2ZmZjsKfQoKLyogRW5kIEhUTUw1IEJvaWxlcnBsYXRlIGFkYXB0YXRpb25zICovCmgxIHsKICBmb250LXNpemU6IDQuNWVtOwp9CgpoMSwgLnZjZW50ZXIgewogIGZvbnQtd2VpZ2h0OiBib2xkOwogIHRleHQtYWxpZ246IGNlbnRlcjsKICBwYWRkaW5nLXRvcDogMWVtOwogIG1heC1oZWlnaHQ6IDEwMCU7Cn0KLmNzc3RyYW5zZm9ybXMgaDEsIC5jc3N0cmFuc2Zvcm1zIC52Y2VudGVyIHsKICBwYWRkaW5nOiAwIDQ4cHg7CiAgcG9zaXRpb246IGFic29sdXRlOwogIGxlZnQ6IDA7CiAgcmlnaHQ6IDA7CiAgdG9wOiA1MCU7CiAgLXdlYmtpdC10cmFuc2Zvcm06IHRyYW5zbGF0ZSgwLCAtNTAlKTsKICAtbW96LXRyYW5zZm9ybTogdHJhbnNsYXRlKDAsIC01MCUpOwogIC1tcy10cmFuc2Zvcm06IHRyYW5zbGF0ZSgwLCAtNTAlKTsKICAtby10cmFuc2Zvcm06IHRyYW5zbGF0ZSgwLCAtNTAlKTsKICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgwLCAtNTAlKTsKfQoKLnZjZW50ZXIgaDEgewogIHBvc2l0aW9uOiByZWxhdGl2ZTsKICB0b3A6IGF1dG87CiAgcGFkZGluZzogMDsKICAtd2Via2l0LXRyYW5zZm9ybTogbm9uZTsKICAtbW96LXRyYW5zZm9ybTogbm9uZTsKICAtbXMtdHJhbnNmb3JtOiBub25lOwogIC1vLXRyYW5zZm9ybTogbm9uZTsKICB0cmFuc2Zvcm06IG5vbmU7Cn0KCmgyIHsKICBmb250LXNpemU6IDIuMjVlbTsKICBmb250LXdlaWdodDogYm9sZDsKICBwYWRkaW5nLXRvcDogLjVlbTsKICBtYXJnaW46IDAgMCAuNjY2NjZlbSAwOwogIGJvcmRlci1ib3R0b206IDNweCBzb2xpZCAjODg4Owp9CgpoMyB7CiAgZm9udC1zaXplOiAxLjQzNzVlbTsKICBmb250LXdlaWdodDogYm9sZDsKICBtYXJnaW4tYm90dG9tOiAuMzA0MzVlbTsKfQoKaDQgewogIGZvbnQtc2l6ZTogMS4yNWVtOwogIGZvbnQtd2VpZ2h0OiBib2xkOwogIG1hcmdpbi1ib3R0b206IC4yNWVtOwp9CgpoNSB7CiAgZm9udC1zaXplOiAxLjEyNWVtOwogIGZvbnQtd2VpZ2h0OiBib2xkOwogIG1hcmdpbi1ib3R0b206IC4yMjIyZW07Cn0KCmg2IHsKICBmb250LXNpemU6IDFlbTsKICBmb250LXdlaWdodDogYm9sZDsKfQoKaW1nLCBpZnJhbWUsIHZpZGVvIHsKICBkaXNwbGF5OiBibG9jazsKICBtYXgtd2lkdGg6IDEwMCU7Cn0KCnZpZGVvLCBpZnJhbWUsIGltZyB7CiAgZGlzcGxheTogYmxvY2s7CiAgbWFyZ2luOiAwIGF1dG87Cn0KCnAsIGJsb2NrcXVvdGUsIGlmcmFtZSwgaW1nLCB1bCwgb2wsIHByZSwgdmlkZW8gewogIG1hcmdpbi1ib3R0b206IDFlbTsKfQoKcHJlIHsKICB3aGl0ZS1zcGFjZTogcHJlOwogIHdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKICB3b3JkLXdyYXA6IGJyZWFrLXdvcmQ7CiAgcGFkZGluZzogMWVtOwogIGJvcmRlcjogMXB4IHNvbGlkICM4ODg7Cn0KCmVtIHsKICBmb250LXN0eWxlOiBpdGFsaWM7Cn0KCmxpIHsKICBwYWRkaW5nOiAuMjVlbSAwOwogIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7Cn0KbGkgPiBvbCwgbGkgPiB1bCB7CiAgbWFyZ2luLWJvdHRvbTogaW5oZXJpdDsKfQoKLmRlY2stY29udGFpbmVyIHsKICBmb250LXNpemU6IDE2cHg7CiAgbGluZS1oZWlnaHQ6IDEuMjU7CiAgY29sb3I6ICM0NDQ7Cn0KCi5zbGlkZSB7CiAgLW1vei1ib3gtc2l6aW5nOiBib3JkZXItYm94OwogIGJveC1zaXppbmc6IGJvcmRlci1ib3g7CiAgd2lkdGg6IDEwMCU7Cn0KCmgxLCBoMiwgaDMsIGg0LCBoNSwgaDYgewogIGZvbnQtZmFtaWx5OiAiSG9lZmxlciBUZXh0IiwgQ29uc3RhbnRpYSwgUGFsYXRpbm8sICJQYWxhdGlubyBMaW5vdHlwZSIsICJCb29rIEFudGlxdWEiLCBHZW9yZ2lhLCBzZXJpZjsKfQoKaDEgewogIGNvbG9yOiAjMDg0NTVmOwp9CgpoMiB7CiAgY29sb3I6ICMwYjc0OTU7CiAgYm9yZGVyLWJvdHRvbTogMDsKfQouY3NzcmVmbGVjdGlvbnMgaDIgewogIGxpbmUtaGVpZ2h0OiAxOwogIC13ZWJraXQtYm94LXJlZmxlY3Q6IGJlbG93IC0wLjU1NTVlbSAtd2Via2l0LWdyYWRpZW50KGxpbmVhciwgbGVmdCB0b3AsIGxlZnQgYm90dG9tLCBmcm9tKHRyYW5zcGFyZW50KSwgY29sb3Itc3RvcCgwLjMsIHRyYW5zcGFyZW50KSwgY29sb3Itc3RvcCgwLjcsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xKSksIHRvKHRyYW5zcGFyZW50KSk7CiAgLW1vei1ib3gtcmVmbGVjdDogYmVsb3cgLTAuNTU1NWVtIC1tb3otbGluZWFyLWdyYWRpZW50KHRvcCwgdHJhbnNwYXJlbnQgMCUsIHRyYW5zcGFyZW50IDMwJSwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjMpIDEwMCUpOwp9CgpoMyB7CiAgY29sb3I6ICMwMDA7Cn0KCnByZSB7CiAgYm9yZGVyLWNvbG9yOiAjY2RlOwogIGJhY2tncm91bmQ6ICNmZmY7CiAgcG9zaXRpb246IHJlbGF0aXZlOwogIHotaW5kZXg6IGF1dG87CiAgYm9yZGVyLXJhZGl1czogNXB4OwogIC8qIGh0dHA6Ly9uaWNvbGFzZ2FsbGFnaGVyLmNvbS9jc3MtZHJvcC1zaGFkb3dzLXdpdGhvdXQtaW1hZ2VzLyAqLwp9Ci5jc3N0cmFuc2Zvcm1zLmJveHNoYWRvdyBwcmUgPiA6Zmlyc3QtY2hpbGQ6YmVmb3JlIHsKICBjb250ZW50OiAiIjsKICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgei1pbmRleDogLTE7CiAgYmFja2dyb3VuZDogI2ZmZjsKICB0b3A6IDA7CiAgYm90dG9tOiAwOwogIGxlZnQ6IDA7CiAgcmlnaHQ6IDA7Cn0KLmNzc3RyYW5zZm9ybXMuYm94c2hhZG93IHByZTpiZWZvcmUsIC5jc3N0cmFuc2Zvcm1zLmJveHNoYWRvdyBwcmU6YWZ0ZXIgewogIGNvbnRlbnQ6ICIiOwogIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICB6LWluZGV4OiAtMjsKICBib3R0b206IDE1cHg7CiAgd2lkdGg6IDUwJTsKICBoZWlnaHQ6IDIwJTsKICBtYXgtd2lkdGg6IDMwMHB4OwogIGJveC1zaGFkb3c6IDAgMTVweCAxMHB4IHJnYmEoMCwgMCwgMCwgMC43KTsKfQouY3NzdHJhbnNmb3Jtcy5ib3hzaGFkb3cgcHJlOmJlZm9yZSB7CiAgbGVmdDogMTBweDsKICAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKC0zZGVnKTsKICAtbXMtdHJhbnNmb3JtOiByb3RhdGUoLTNkZWcpOwogIHRyYW5zZm9ybTogcm90YXRlKC0zZGVnKTsKfQouY3NzdHJhbnNmb3Jtcy5ib3hzaGFkb3cgcHJlOmFmdGVyIHsKICByaWdodDogMTBweDsKICAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKDNkZWcpOwogIC1tcy10cmFuc2Zvcm06IHJvdGF0ZSgzZGVnKTsKICB0cmFuc2Zvcm06IHJvdGF0ZSgzZGVnKTsKfQoKY29kZSB7CiAgY29sb3I6ICM3ODk7Cn0KCmJsb2NrcXVvdGUgewogIGZvbnQtZmFtaWx5OiAiSG9lZmxlciBUZXh0IiwgQ29uc3RhbnRpYSwgUGFsYXRpbm8sICJQYWxhdGlubyBMaW5vdHlwZSIsICJCb29rIEFudGlxdWEiLCBHZW9yZ2lhLCBzZXJpZjsKICBmb250LXNpemU6IDJlbTsKICBwYWRkaW5nOiAxZW0gMmVtIC41ZW0gMmVtOwogIGNvbG9yOiAjMDAwOwogIGJhY2tncm91bmQ6ICNmZmY7CiAgcG9zaXRpb246IHJlbGF0aXZlOwogIGJvcmRlcjogMXB4IHNvbGlkICNjZGU7CiAgei1pbmRleDogYXV0bzsKICBib3JkZXItcmFkaXVzOiA1cHg7Cn0KLmJveHNoYWRvdyBibG9ja3F1b3RlID4gOmZpcnN0LWNoaWxkOmJlZm9yZSB7CiAgY29udGVudDogIiI7CiAgcG9zaXRpb246IGFic29sdXRlOwogIHotaW5kZXg6IC0xOwogIGJhY2tncm91bmQ6ICNmZmY7CiAgdG9wOiAwOwogIGJvdHRvbTogMDsKICBsZWZ0OiAwOwogIHJpZ2h0OiAwOwp9Ci5ib3hzaGFkb3cgYmxvY2txdW90ZTphZnRlciB7CiAgY29udGVudDogIiI7CiAgcG9zaXRpb246IGFic29sdXRlOwogIHotaW5kZXg6IC0yOwogIHRvcDogMTBweDsKICBib3R0b206IDEwcHg7CiAgbGVmdDogMDsKICByaWdodDogNTAlOwogIC1tb3otYm9yZGVyLXJhZGl1czogMTBweCAvIDEwMHB4OwogIGJvcmRlci1yYWRpdXM6IDEwcHggLyAxMDBweDsKICBib3gtc2hhZG93OiAwIDAgMTVweCByZ2JhKDAsIDAsIDAsIDAuNik7Cn0KYmxvY2txdW90ZSBwIHsKICBtYXJnaW46IDA7Cn0KYmxvY2txdW90ZSBjaXRlIHsKICBmb250LXNpemU6IC41ZW07CiAgZm9udC1zdHlsZTogbm9ybWFsOwogIGZvbnQtd2VpZ2h0OiBib2xkOwogIGNvbG9yOiAjODg4Owp9CmJsb2NrcXVvdGU6YmVmb3JlIHsKICBjb250ZW50OiAi4oCcIjsKICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgdG9wOiAwOwogIGxlZnQ6IDA7CiAgZm9udC1zaXplOiA1ZW07CiAgbGluZS1oZWlnaHQ6IDE7CiAgY29sb3I6ICNjY2YwZjA7CiAgei1pbmRleDogMTsKfQoKOjotbW96LXNlbGVjdGlvbiB7CiAgYmFja2dyb3VuZDogIzA4NDU1ZjsKICBjb2xvcjogI2ZmZjsKfQoKOjpzZWxlY3Rpb24gewogIGJhY2tncm91bmQ6ICMwODQ1NWY7CiAgY29sb3I6ICNmZmY7Cn0KCmEsIGE6aG92ZXIsIGE6Zm9jdXMsIGE6YWN0aXZlLCBhOnZpc2l0ZWQgewogIGNvbG9yOiAjNTk5OwogIHRleHQtZGVjb3JhdGlvbjogbm9uZTsKfQphOmhvdmVyLCBhOmZvY3VzIHsKICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsKfQoKLmRlY2stY29udGFpbmVyIHsKICBmb250LWZhbWlseTogIkdpbGwgU2FucyIsICJHaWxsIFNhbnMgTVQiLCBDYWxpYnJpLCBzYW5zLXNlcmlmOwogIGZvbnQtc2l6ZTogMS43NWVtOwogIGJhY2tncm91bmQ6ICNmNGZhZmU7CiAgLyogT2xkIGJyb3dzZXJzICovCiAgYmFja2dyb3VuZDogLW1vei1saW5lYXItZ3JhZGllbnQodG9wLCAjZjRmYWZlIDAlLCAjY2NmMGYwIDEwMCUpOwogIC8qIEZGMy42KyAqLwogIGJhY2tncm91bmQ6IC13ZWJraXQtZ3JhZGllbnQobGluZWFyLCBsZWZ0IHRvcCwgbGVmdCBib3R0b20sIGNvbG9yLXN0b3AoMCUsICNmNGZhZmUpLCBjb2xvci1zdG9wKDEwMCUsICNjY2YwZjApKTsKICAvKiBDaHJvbWUsU2FmYXJpNCsgKi8KICBiYWNrZ3JvdW5kOiAtd2Via2l0LWxpbmVhci1ncmFkaWVudCh0b3AsICNmNGZhZmUgMCUsICNjY2YwZjAgMTAwJSk7CiAgLyogQ2hyb21lMTArLFNhZmFyaTUuMSsgKi8KICBiYWNrZ3JvdW5kOiAtby1saW5lYXItZ3JhZGllbnQodG9wLCAjZjRmYWZlIDAlLCAjY2NmMGYwIDEwMCUpOwogIC8qIE9wZXJhMTEuMTArICovCiAgYmFja2dyb3VuZDogLW1zLWxpbmVhci1ncmFkaWVudCh0b3AsICNmNGZhZmUgMCUsICNjY2YwZjAgMTAwJSk7CiAgLyogSUUxMCsgKi8KICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQodG9wLCAjZjRmYWZlIDAlLCAjY2NmMGYwIDEwMCUpOwogIC8qIFczQyAqLwogIGJhY2tncm91bmQtYXR0YWNobWVudDogZml4ZWQ7CiAgdGV4dC1zaGFkb3c6IDFweCAxcHggMXB4IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC41KTsKfQouZGVjay1jb250YWluZXIgPiAuc2xpZGUgewogIHBhZGRpbmc6IDAgNDhweDsKfQoKLnNsaWRlIC5kZWNrLWJlZm9yZSwgLnNsaWRlIC5kZWNrLXByZXZpb3VzIHsKICBvcGFjaXR5OiAwLjQ7Cn0KLnNsaWRlIC5kZWNrLWJlZm9yZTpub3QoLmRlY2stY2hpbGQtY3VycmVudCkgLmRlY2stYmVmb3JlLCAuc2xpZGUgLmRlY2stYmVmb3JlOm5vdCguZGVjay1jaGlsZC1jdXJyZW50KSAuZGVjay1wcmV2aW91cywgLnNsaWRlIC5kZWNrLXByZXZpb3VzOm5vdCguZGVjay1jaGlsZC1jdXJyZW50KSAuZGVjay1iZWZvcmUsIC5zbGlkZSAuZGVjay1wcmV2aW91czpub3QoLmRlY2stY2hpbGQtY3VycmVudCkgLmRlY2stcHJldmlvdXMgewogIG9wYWNpdHk6IDE7Cn0KLnNsaWRlIC5kZWNrLWNoaWxkLWN1cnJlbnQgewogIG9wYWNpdHk6IDE7Cn0KCi5kZWNrLXByZXYtbGluaywgLmRlY2stbmV4dC1saW5rIHsKICBiYWNrZ3JvdW5kOiAjZmZmOwogIG9wYWNpdHk6IDAuNTsKfQouZGVjay1wcmV2LWxpbmssIC5kZWNrLXByZXYtbGluazpob3ZlciwgLmRlY2stcHJldi1saW5rOmZvY3VzLCAuZGVjay1wcmV2LWxpbms6YWN0aXZlLCAuZGVjay1wcmV2LWxpbms6dmlzaXRlZCwgLmRlY2stbmV4dC1saW5rLCAuZGVjay1uZXh0LWxpbms6aG92ZXIsIC5kZWNrLW5leHQtbGluazpmb2N1cywgLmRlY2stbmV4dC1saW5rOmFjdGl2ZSwgLmRlY2stbmV4dC1saW5rOnZpc2l0ZWQgewogIGNvbG9yOiAjNTk5Owp9Ci5kZWNrLXByZXYtbGluazpob3ZlciwgLmRlY2stcHJldi1saW5rOmZvY3VzLCAuZGVjay1uZXh0LWxpbms6aG92ZXIsIC5kZWNrLW5leHQtbGluazpmb2N1cyB7CiAgb3BhY2l0eTogMTsKICB0ZXh0LWRlY29yYXRpb246IG5vbmU7Cn0KCi5kZWNrLXN0YXR1cyB7CiAgZm9udC1zaXplOiAwLjY2NjZlbTsKfQoKLmRlY2stbWVudSAuc2xpZGUgewogIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50OwogIGJvcmRlci1yYWRpdXM6IDVweDsKfQoucmdiYSAuZGVjay1tZW51IC5zbGlkZSB7CiAgYmFja2dyb3VuZDogcmdiYSgwLCAwLCAwLCAwLjEpOwp9Ci5kZWNrLW1lbnUgLnNsaWRlLmRlY2stY3VycmVudCwgLnJnYmEgLmRlY2stbWVudSAuc2xpZGUuZGVjay1jdXJyZW50LCAubm8tdG91Y2ggLmRlY2stbWVudSAuc2xpZGU6aG92ZXIgewogIGJhY2tncm91bmQ6ICNmZmY7Cn0KCi5nb3RvLWZvcm0gewogIGJhY2tncm91bmQ6ICNmZmY7CiAgYm9yZGVyOiAxcHggc29saWQgI2NkZTsKICBib3JkZXItcmFkaXVzOiA1cHg7Cn0KLmJveHNoYWRvdyAuZ290by1mb3JtIHsKICBib3gtc2hhZG93OiAwIDE1cHggMTBweCAtMTBweCByZ2JhKDAsIDAsIDAsIDAuNSksIDAgMXB4IDRweCByZ2JhKDAsIDAsIDAsIDAuMyksIDAgMCA0MHB4IHJnYmEoMCwgMCwgMCwgMC4xKSBpbnNldDsKfQo=">
		<link id="horizontal-slice_css" rel="stylesheet" media="screen" href="data:/text/plain;base64,LmNzc3RyYW5zaXRpb25zLmNzc3RyYW5zZm9ybXMgewogIG92ZXJmbG93LXg6IGhpZGRlbjsKfQouY3NzdHJhbnNpdGlvbnMuY3NzdHJhbnNmb3JtcyAuZGVjay1jb250YWluZXIgPiAuc2xpZGUgewogIC13ZWJraXQtdHJhbnNpdGlvbjogLXdlYmtpdC10cmFuc2Zvcm0gNTAwbXMgZWFzZS1pbi1vdXQ7CiAgdHJhbnNpdGlvbjogdHJhbnNmb3JtIDUwMG1zIGVhc2UtaW4tb3V0Owp9Ci5jc3N0cmFuc2l0aW9ucy5jc3N0cmFuc2Zvcm1zIC5kZWNrLWNvbnRhaW5lcjpub3QoLmRlY2stbWVudSkgPiAuc2xpZGUgewogIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICB0b3A6IDA7CiAgbGVmdDogMDsKfQouY3NzdHJhbnNpdGlvbnMuY3NzdHJhbnNmb3JtcyAuZGVjay1jb250YWluZXI6bm90KC5kZWNrLW1lbnUpID4gLnNsaWRlIC5zbGlkZSB7CiAgcG9zaXRpb246IHJlbGF0aXZlOwogIGxlZnQ6IDA7CiAgdG9wOiAwOwogIC13ZWJraXQtdHJhbnNpdGlvbjogLXdlYmtpdC10cmFuc2Zvcm0gNTAwbXMgZWFzZS1pbi1vdXQsIG9wYWNpdHkgNTAwbXMgZWFzZS1pbi1vdXQ7CiAgdHJhbnNpdGlvbjogdHJhbnNmb3JtIDUwMG1zIGVhc2UtaW4tb3V0LCBvcGFjaXR5IDUwMG1zIGVhc2UtaW4tb3V0Owp9Ci5jc3N0cmFuc2l0aW9ucy5jc3N0cmFuc2Zvcm1zIC5kZWNrLWNvbnRhaW5lcjpub3QoLmRlY2stbWVudSkgPiAuc2xpZGUgLmRlY2stbmV4dCwgLmNzc3RyYW5zaXRpb25zLmNzc3RyYW5zZm9ybXMgLmRlY2stY29udGFpbmVyOm5vdCguZGVjay1tZW51KSA+IC5zbGlkZSAuZGVjay1hZnRlciB7CiAgdmlzaWJpbGl0eTogdmlzaWJsZTsKICAtd2Via2l0LXRyYW5zZm9ybTogdHJhbnNsYXRlM2QoMjAwJSwgMCwgMCk7CiAgLW1zLXRyYW5zZm9ybTogdHJhbnNsYXRlKDIwMCUsIDApOwogIHRyYW5zZm9ybTogdHJhbnNsYXRlM2QoMjAwJSwgMCwgMCk7Cn0KLmNzc3RyYW5zaXRpb25zLmNzc3RyYW5zZm9ybXMgLmRlY2stY29udGFpbmVyOm5vdCguZGVjay1tZW51KSA+IC5kZWNrLXByZXZpb3VzIHsKICAtd2Via2l0LXRyYW5zZm9ybTogdHJhbnNsYXRlM2QoLTIwMCUsIDAsIDApOwogIC1tcy10cmFuc2Zvcm06IHRyYW5zbGF0ZSgtMjAwJSwgMCk7CiAgdHJhbnNmb3JtOiB0cmFuc2xhdGUzZCgtMjAwJSwgMCwgMCk7Cn0KLmNzc3RyYW5zaXRpb25zLmNzc3RyYW5zZm9ybXMgLmRlY2stY29udGFpbmVyOm5vdCguZGVjay1tZW51KSA+IC5kZWNrLWJlZm9yZSB7CiAgLXdlYmtpdC10cmFuc2Zvcm06IHRyYW5zbGF0ZTNkKC00MDAlLCAwLCAwKTsKICAtbXMtdHJhbnNmb3JtOiB0cmFuc2xhdGUoLTQwMCUsIDApOwogIHRyYW5zZm9ybTogdHJhbnNsYXRlM2QoLTQwMCUsIDAsIDApOwp9Ci5jc3N0cmFuc2l0aW9ucy5jc3N0cmFuc2Zvcm1zIC5kZWNrLWNvbnRhaW5lcjpub3QoLmRlY2stbWVudSkgPiAuZGVjay1uZXh0IHsKICAtd2Via2l0LXRyYW5zZm9ybTogdHJhbnNsYXRlM2QoMjAwJSwgMCwgMCk7CiAgLW1zLXRyYW5zZm9ybTogdHJhbnNsYXRlKDIwMCUsIDApOwogIHRyYW5zZm9ybTogdHJhbnNsYXRlM2QoMjAwJSwgMCwgMCk7Cn0KLmNzc3RyYW5zaXRpb25zLmNzc3RyYW5zZm9ybXMgLmRlY2stY29udGFpbmVyOm5vdCguZGVjay1tZW51KSA+IC5kZWNrLWFmdGVyIHsKICAtd2Via2l0LXRyYW5zZm9ybTogdHJhbnNsYXRlM2QoNDAwJSwgMCwgMCk7CiAgLW1zLXRyYW5zZm9ybTogdHJhbnNsYXRlKDQwMCUsIDApOwogIHRyYW5zZm9ybTogdHJhbnNsYXRlM2QoNDAwJSwgMCwgMCk7Cn0KLmNzc3RyYW5zaXRpb25zLmNzc3RyYW5zZm9ybXMgLmRlY2stY29udGFpbmVyOm5vdCguZGVjay1tZW51KSA+IC5kZWNrLWJlZm9yZSAuc2xpZGUsIC5jc3N0cmFuc2l0aW9ucy5jc3N0cmFuc2Zvcm1zIC5kZWNrLWNvbnRhaW5lcjpub3QoLmRlY2stbWVudSkgPiAuZGVjay1wcmV2aW91cyAuc2xpZGUgewogIHZpc2liaWxpdHk6IHZpc2libGU7Cn0KLmNzc3RyYW5zaXRpb25zLmNzc3RyYW5zZm9ybXMgLmRlY2stY29udGFpbmVyOm5vdCguZGVjay1tZW51KSA+IC5kZWNrLWNoaWxkLWN1cnJlbnQgewogIC13ZWJraXQtdHJhbnNmb3JtOiBub25lOwogIC1tcy10cmFuc2Zvcm06IG5vbmU7CiAgdHJhbnNmb3JtOiBub25lOwp9Cg==">
		<link id="core-print_css rel="stylesheet" media="print" href="data:/text/plain;base64,Ym9keSB7CiAgZm9udC1zaXplOiAxOHB0Owp9CgpoMSB7CiAgZm9udC1zaXplOiA0OHB0Owp9CgpoMiB7CiAgZm9udC1zaXplOiAzNnB0Owp9CgpoMyB7CiAgZm9udC1zaXplOiAyOHB0Owp9CgpwcmUgewogIGJvcmRlcjogMXB4IHNvbGlkICMwMDA7CiAgcGFkZGluZzogMTBweDsKICB3aGl0ZS1zcGFjZTogcHJlLXdyYXA7Cn0KCi5kZWNrLWNvbnRhaW5lciA+IC5zbGlkZSB7CiAgcGFnZS1icmVhay1hZnRlcjogYWx3YXlzOwp9Cg==">

		<script id="modernizr-custon_js"  src="data:/text/plain;base64,LyogTW9kZXJuaXpyIDIuMC42IChDdXN0b20gQnVpbGQpIHwgTUlUICYgQlNECiAqIENvbnRhaW5zOiBmb250ZmFjZSB8IGJhY2tncm91bmRzaXplIHwgYm9yZGVyaW1hZ2UgfCBib3JkZXJyYWRpdXMgfCBib3hzaGFkb3cgfCBmbGV4Ym94IHwgaHNsYSB8IG11bHRpcGxlYmdzIHwgb3BhY2l0eSB8IHJnYmEgfCB0ZXh0c2hhZG93IHwgY3NzYW5pbWF0aW9ucyB8IGNzc2NvbHVtbnMgfCBnZW5lcmF0ZWRjb250ZW50IHwgY3NzZ3JhZGllbnRzIHwgY3NzcmVmbGVjdGlvbnMgfCBjc3N0cmFuc2Zvcm1zIHwgY3NzdHJhbnNmb3JtczNkIHwgY3NzdHJhbnNpdGlvbnMgfCBhcHBsaWNhdGlvbmNhY2hlIHwgY2FudmFzIHwgY2FudmFzdGV4dCB8IGRyYWdhbmRkcm9wIHwgaGFzaGNoYW5nZSB8IGhpc3RvcnkgfCBhdWRpbyB8IHZpZGVvIHwgaW5kZXhlZGRiIHwgaW5wdXQgfCBpbnB1dHR5cGVzIHwgbG9jYWxzdG9yYWdlIHwgcG9zdG1lc3NhZ2UgfCBzZXNzaW9uc3RvcmFnZSB8IHdlYnNvY2tldHMgfCB3ZWJzcWxkYXRhYmFzZSB8IHdlYndvcmtlcnMgfCBnZW9sb2NhdGlvbiB8IGlubGluZXN2ZyB8IHNtaWwgfCBzdmcgfCBzdmdjbGlwcGF0aHMgfCB0b3VjaCB8IHdlYmdsIHwgaWVwcCB8IGNzc2NsYXNzZXMgfCBhZGR0ZXN0IHwgdGVzdHN0eWxlcyB8IHRlc3Rwcm9wIHwgdGVzdGFsbHByb3BzIHwgaGFzZXZlbnQgfCBwcmVmaXhlcyB8IGRvbXByZWZpeGVzIHwgbG9hZAogKi8KO3dpbmRvdy5Nb2Rlcm5penI9ZnVuY3Rpb24oYSxiLGMpe2Z1bmN0aW9uIEgoKXtlLmlucHV0PWZ1bmN0aW9uKGEpe2Zvcih2YXIgYj0wLGM9YS5sZW5ndGg7YjxjO2IrKyl0W2FbYl1dPWFbYl1pbiBsO3JldHVybiB0fSgiYXV0b2NvbXBsZXRlIGF1dG9mb2N1cyBsaXN0IHBsYWNlaG9sZGVyIG1heCBtaW4gbXVsdGlwbGUgcGF0dGVybiByZXF1aXJlZCBzdGVwIi5zcGxpdCgiICIpKSxlLmlucHV0dHlwZXM9ZnVuY3Rpb24oYSl7Zm9yKHZhciBkPTAsZSxmLGgsaT1hLmxlbmd0aDtkPGk7ZCsrKWwuc2V0QXR0cmlidXRlKCJ0eXBlIixmPWFbZF0pLGU9bC50eXBlIT09InRleHQiLGUmJihsLnZhbHVlPW0sbC5zdHlsZS5jc3NUZXh0PSJwb3NpdGlvbjphYnNvbHV0ZTt2aXNpYmlsaXR5OmhpZGRlbjsiLC9ecmFuZ2UkLy50ZXN0KGYpJiZsLnN0eWxlLldlYmtpdEFwcGVhcmFuY2UhPT1jPyhnLmFwcGVuZENoaWxkKGwpLGg9Yi5kZWZhdWx0VmlldyxlPWguZ2V0Q29tcHV0ZWRTdHlsZSYmaC5nZXRDb21wdXRlZFN0eWxlKGwsbnVsbCkuV2Via2l0QXBwZWFyYW5jZSE9PSJ0ZXh0ZmllbGQiJiZsLm9mZnNldEhlaWdodCE9PTAsZy5yZW1vdmVDaGlsZChsKSk6L14oc2VhcmNofHRlbCkkLy50ZXN0KGYpfHwoL14odXJsfGVtYWlsKSQvLnRlc3QoZik/ZT1sLmNoZWNrVmFsaWRpdHkmJmwuY2hlY2tWYWxpZGl0eSgpPT09ITE6L15jb2xvciQvLnRlc3QoZik/KGcuYXBwZW5kQ2hpbGQobCksZy5vZmZzZXRXaWR0aCxlPWwudmFsdWUhPW0sZy5yZW1vdmVDaGlsZChsKSk6ZT1sLnZhbHVlIT1tKSksc1thW2RdXT0hIWU7cmV0dXJuIHN9KCJzZWFyY2ggdGVsIHVybCBlbWFpbCBkYXRldGltZSBkYXRlIG1vbnRoIHdlZWsgdGltZSBkYXRldGltZS1sb2NhbCBudW1iZXIgcmFuZ2UgY29sb3IiLnNwbGl0KCIgIikpfWZ1bmN0aW9uIEYoYSxiKXt2YXIgYz1hLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpK2Euc3Vic3RyKDEpLGQ9KGErIiAiK3Auam9pbihjKyIgIikrYykuc3BsaXQoIiAiKTtyZXR1cm4gRShkLGIpfWZ1bmN0aW9uIEUoYSxiKXtmb3IodmFyIGQgaW4gYSlpZihrW2FbZF1dIT09YylyZXR1cm4gYj09InBmeCI/YVtkXTohMDtyZXR1cm4hMX1mdW5jdGlvbiBEKGEsYil7cmV0dXJuISF+KCIiK2EpLmluZGV4T2YoYil9ZnVuY3Rpb24gQyhhLGIpe3JldHVybiB0eXBlb2YgYT09PWJ9ZnVuY3Rpb24gQihhLGIpe3JldHVybiBBKG8uam9pbihhKyI7IikrKGJ8fCIiKSl9ZnVuY3Rpb24gQShhKXtrLmNzc1RleHQ9YX12YXIgZD0iMi4wLjYiLGU9e30sZj0hMCxnPWIuZG9jdW1lbnRFbGVtZW50LGg9Yi5oZWFkfHxiLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJoZWFkIilbMF0saT0ibW9kZXJuaXpyIixqPWIuY3JlYXRlRWxlbWVudChpKSxrPWouc3R5bGUsbD1iLmNyZWF0ZUVsZW1lbnQoImlucHV0IiksbT0iOikiLG49T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZyxvPSIgLXdlYmtpdC0gLW1vei0gLW8tIC1tcy0gLWtodG1sLSAiLnNwbGl0KCIgIikscD0iV2Via2l0IE1veiBPIG1zIEtodG1sIi5zcGxpdCgiICIpLHE9e3N2ZzoiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcifSxyPXt9LHM9e30sdD17fSx1PVtdLHY9ZnVuY3Rpb24oYSxjLGQsZSl7dmFyIGYsaCxqLGs9Yi5jcmVhdGVFbGVtZW50KCJkaXYiKTtpZihwYXJzZUludChkLDEwKSl3aGlsZShkLS0paj1iLmNyZWF0ZUVsZW1lbnQoImRpdiIpLGouaWQ9ZT9lW2RdOmkrKGQrMSksay5hcHBlbmRDaGlsZChqKTtmPVsiJnNoeTsiLCI8c3R5bGU+IixhLCI8L3N0eWxlPiJdLmpvaW4oIiIpLGsuaWQ9aSxrLmlubmVySFRNTCs9ZixnLmFwcGVuZENoaWxkKGspLGg9YyhrLGEpLGsucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChrKTtyZXR1cm4hIWh9LHc9ZnVuY3Rpb24oKXtmdW5jdGlvbiBkKGQsZSl7ZT1lfHxiLmNyZWF0ZUVsZW1lbnQoYVtkXXx8ImRpdiIpLGQ9Im9uIitkO3ZhciBmPWQgaW4gZTtmfHwoZS5zZXRBdHRyaWJ1dGV8fChlPWIuY3JlYXRlRWxlbWVudCgiZGl2IikpLGUuc2V0QXR0cmlidXRlJiZlLnJlbW92ZUF0dHJpYnV0ZSYmKGUuc2V0QXR0cmlidXRlKGQsIiIpLGY9QyhlW2RdLCJmdW5jdGlvbiIpLEMoZVtkXSxjKXx8KGVbZF09YyksZS5yZW1vdmVBdHRyaWJ1dGUoZCkpKSxlPW51bGw7cmV0dXJuIGZ9dmFyIGE9e3NlbGVjdDoiaW5wdXQiLGNoYW5nZToiaW5wdXQiLHN1Ym1pdDoiZm9ybSIscmVzZXQ6ImZvcm0iLGVycm9yOiJpbWciLGxvYWQ6ImltZyIsYWJvcnQ6ImltZyJ9O3JldHVybiBkfSgpLHgseT17fS5oYXNPd25Qcm9wZXJ0eSx6OyFDKHksYykmJiFDKHkuY2FsbCxjKT96PWZ1bmN0aW9uKGEsYil7cmV0dXJuIHkuY2FsbChhLGIpfTp6PWZ1bmN0aW9uKGEsYil7cmV0dXJuIGIgaW4gYSYmQyhhLmNvbnN0cnVjdG9yLnByb3RvdHlwZVtiXSxjKX07dmFyIEc9ZnVuY3Rpb24oYyxkKXt2YXIgZj1jLmpvaW4oIiIpLGc9ZC5sZW5ndGg7dihmLGZ1bmN0aW9uKGMsZCl7dmFyIGY9Yi5zdHlsZVNoZWV0c1tiLnN0eWxlU2hlZXRzLmxlbmd0aC0xXSxoPWYuY3NzUnVsZXMmJmYuY3NzUnVsZXNbMF0/Zi5jc3NSdWxlc1swXS5jc3NUZXh0OmYuY3NzVGV4dHx8IiIsaT1jLmNoaWxkTm9kZXMsaj17fTt3aGlsZShnLS0paltpW2ddLmlkXT1pW2ddO2UudG91Y2g9Im9udG91Y2hzdGFydCJpbiBhfHxqLnRvdWNoLm9mZnNldFRvcD09PTksZS5jc3N0cmFuc2Zvcm1zM2Q9ai5jc3N0cmFuc2Zvcm1zM2Qub2Zmc2V0TGVmdD09PTksZS5nZW5lcmF0ZWRjb250ZW50PWouZ2VuZXJhdGVkY29udGVudC5vZmZzZXRIZWlnaHQ+PTEsZS5mb250ZmFjZT0vc3JjL2kudGVzdChoKSYmaC5pbmRleE9mKGQuc3BsaXQoIiAiKVswXSk9PT0wfSxnLGQpfShbJ0Bmb250LWZhY2Uge2ZvbnQtZmFtaWx5OiJmb250IjtzcmM6dXJsKCJodHRwczovLyIpfScsWyJAbWVkaWEgKCIsby5qb2luKCJ0b3VjaC1lbmFibGVkKSwoIiksaSwiKSIsInsjdG91Y2h7dG9wOjlweDtwb3NpdGlvbjphYnNvbHV0ZX19Il0uam9pbigiIiksWyJAbWVkaWEgKCIsby5qb2luKCJ0cmFuc2Zvcm0tM2QpLCgiKSxpLCIpIiwieyNjc3N0cmFuc2Zvcm1zM2R7bGVmdDo5cHg7cG9zaXRpb246YWJzb2x1dGV9fSJdLmpvaW4oIiIpLFsnI2dlbmVyYXRlZGNvbnRlbnQ6YWZ0ZXJ7Y29udGVudDoiJyxtLCciO3Zpc2liaWxpdHk6aGlkZGVufSddLmpvaW4oIiIpXSxbImZvbnRmYWNlIiwidG91Y2giLCJjc3N0cmFuc2Zvcm1zM2QiLCJnZW5lcmF0ZWRjb250ZW50Il0pO3IuZmxleGJveD1mdW5jdGlvbigpe2Z1bmN0aW9uIGMoYSxiLGMsZCl7YS5zdHlsZS5jc3NUZXh0PW8uam9pbihiKyI6IitjKyI7IikrKGR8fCIiKX1mdW5jdGlvbiBhKGEsYixjLGQpe2IrPSI6IixhLnN0eWxlLmNzc1RleHQ9KGIrby5qb2luKGMrIjsiK2IpKS5zbGljZSgwLC1iLmxlbmd0aCkrKGR8fCIiKX12YXIgZD1iLmNyZWF0ZUVsZW1lbnQoImRpdiIpLGU9Yi5jcmVhdGVFbGVtZW50KCJkaXYiKTthKGQsImRpc3BsYXkiLCJib3giLCJ3aWR0aDo0MnB4O3BhZGRpbmc6MDsiKSxjKGUsImJveC1mbGV4IiwiMSIsIndpZHRoOjEwcHg7IiksZC5hcHBlbmRDaGlsZChlKSxnLmFwcGVuZENoaWxkKGQpO3ZhciBmPWUub2Zmc2V0V2lkdGg9PT00MjtkLnJlbW92ZUNoaWxkKGUpLGcucmVtb3ZlQ2hpbGQoZCk7cmV0dXJuIGZ9LHIuY2FudmFzPWZ1bmN0aW9uKCl7dmFyIGE9Yi5jcmVhdGVFbGVtZW50KCJjYW52YXMiKTtyZXR1cm4hIWEuZ2V0Q29udGV4dCYmISFhLmdldENvbnRleHQoIjJkIil9LHIuY2FudmFzdGV4dD1mdW5jdGlvbigpe3JldHVybiEhZS5jYW52YXMmJiEhQyhiLmNyZWF0ZUVsZW1lbnQoImNhbnZhcyIpLmdldENvbnRleHQoIjJkIikuZmlsbFRleHQsImZ1bmN0aW9uIil9LHIud2ViZ2w9ZnVuY3Rpb24oKXtyZXR1cm4hIWEuV2ViR0xSZW5kZXJpbmdDb250ZXh0fSxyLnRvdWNoPWZ1bmN0aW9uKCl7cmV0dXJuIGUudG91Y2h9LHIuZ2VvbG9jYXRpb249ZnVuY3Rpb24oKXtyZXR1cm4hIW5hdmlnYXRvci5nZW9sb2NhdGlvbn0sci5wb3N0bWVzc2FnZT1mdW5jdGlvbigpe3JldHVybiEhYS5wb3N0TWVzc2FnZX0sci53ZWJzcWxkYXRhYmFzZT1mdW5jdGlvbigpe3ZhciBiPSEhYS5vcGVuRGF0YWJhc2U7cmV0dXJuIGJ9LHIuaW5kZXhlZERCPWZ1bmN0aW9uKCl7Zm9yKHZhciBiPS0xLGM9cC5sZW5ndGg7KytiPGM7KWlmKGFbcFtiXS50b0xvd2VyQ2FzZSgpKyJJbmRleGVkREIiXSlyZXR1cm4hMDtyZXR1cm4hIWEuaW5kZXhlZERCfSxyLmhhc2hjaGFuZ2U9ZnVuY3Rpb24oKXtyZXR1cm4gdygiaGFzaGNoYW5nZSIsYSkmJihiLmRvY3VtZW50TW9kZT09PWN8fGIuZG9jdW1lbnRNb2RlPjcpfSxyLmhpc3Rvcnk9ZnVuY3Rpb24oKXtyZXR1cm4hIWEuaGlzdG9yeSYmISFoaXN0b3J5LnB1c2hTdGF0ZX0sci5kcmFnYW5kZHJvcD1mdW5jdGlvbigpe3JldHVybiB3KCJkcmFnc3RhcnQiKSYmdygiZHJvcCIpfSxyLndlYnNvY2tldHM9ZnVuY3Rpb24oKXtmb3IodmFyIGI9LTEsYz1wLmxlbmd0aDsrK2I8YzspaWYoYVtwW2JdKyJXZWJTb2NrZXQiXSlyZXR1cm4hMDtyZXR1cm4iV2ViU29ja2V0ImluIGF9LHIucmdiYT1mdW5jdGlvbigpe0EoImJhY2tncm91bmQtY29sb3I6cmdiYSgxNTAsMjU1LDE1MCwuNSkiKTtyZXR1cm4gRChrLmJhY2tncm91bmRDb2xvciwicmdiYSIpfSxyLmhzbGE9ZnVuY3Rpb24oKXtBKCJiYWNrZ3JvdW5kLWNvbG9yOmhzbGEoMTIwLDQwJSwxMDAlLC41KSIpO3JldHVybiBEKGsuYmFja2dyb3VuZENvbG9yLCJyZ2JhIil8fEQoay5iYWNrZ3JvdW5kQ29sb3IsImhzbGEiKX0sci5tdWx0aXBsZWJncz1mdW5jdGlvbigpe0EoImJhY2tncm91bmQ6dXJsKGh0dHBzOi8vKSx1cmwoaHR0cHM6Ly8pLHJlZCB1cmwoaHR0cHM6Ly8pIik7cmV0dXJuLyh1cmxccypcKC4qPyl7M30vLnRlc3Qoay5iYWNrZ3JvdW5kKX0sci5iYWNrZ3JvdW5kc2l6ZT1mdW5jdGlvbigpe3JldHVybiBGKCJiYWNrZ3JvdW5kU2l6ZSIpfSxyLmJvcmRlcmltYWdlPWZ1bmN0aW9uKCl7cmV0dXJuIEYoImJvcmRlckltYWdlIil9LHIuYm9yZGVycmFkaXVzPWZ1bmN0aW9uKCl7cmV0dXJuIEYoImJvcmRlclJhZGl1cyIpfSxyLmJveHNoYWRvdz1mdW5jdGlvbigpe3JldHVybiBGKCJib3hTaGFkb3ciKX0sci50ZXh0c2hhZG93PWZ1bmN0aW9uKCl7cmV0dXJuIGIuY3JlYXRlRWxlbWVudCgiZGl2Iikuc3R5bGUudGV4dFNoYWRvdz09PSIifSxyLm9wYWNpdHk9ZnVuY3Rpb24oKXtCKCJvcGFjaXR5Oi41NSIpO3JldHVybi9eMC41NSQvLnRlc3Qoay5vcGFjaXR5KX0sci5jc3NhbmltYXRpb25zPWZ1bmN0aW9uKCl7cmV0dXJuIEYoImFuaW1hdGlvbk5hbWUiKX0sci5jc3Njb2x1bW5zPWZ1bmN0aW9uKCl7cmV0dXJuIEYoImNvbHVtbkNvdW50Iil9LHIuY3NzZ3JhZGllbnRzPWZ1bmN0aW9uKCl7dmFyIGE9ImJhY2tncm91bmQtaW1hZ2U6IixiPSJncmFkaWVudChsaW5lYXIsbGVmdCB0b3AscmlnaHQgYm90dG9tLGZyb20oIzlmOSksdG8od2hpdGUpKTsiLGM9ImxpbmVhci1ncmFkaWVudChsZWZ0IHRvcCwjOWY5LCB3aGl0ZSk7IjtBKChhK28uam9pbihiK2EpK28uam9pbihjK2EpKS5zbGljZSgwLC1hLmxlbmd0aCkpO3JldHVybiBEKGsuYmFja2dyb3VuZEltYWdlLCJncmFkaWVudCIpfSxyLmNzc3JlZmxlY3Rpb25zPWZ1bmN0aW9uKCl7cmV0dXJuIEYoImJveFJlZmxlY3QiKX0sci5jc3N0cmFuc2Zvcm1zPWZ1bmN0aW9uKCl7cmV0dXJuISFFKFsidHJhbnNmb3JtUHJvcGVydHkiLCJXZWJraXRUcmFuc2Zvcm0iLCJNb3pUcmFuc2Zvcm0iLCJPVHJhbnNmb3JtIiwibXNUcmFuc2Zvcm0iXSl9LHIuY3NzdHJhbnNmb3JtczNkPWZ1bmN0aW9uKCl7dmFyIGE9ISFFKFsicGVyc3BlY3RpdmVQcm9wZXJ0eSIsIldlYmtpdFBlcnNwZWN0aXZlIiwiTW96UGVyc3BlY3RpdmUiLCJPUGVyc3BlY3RpdmUiLCJtc1BlcnNwZWN0aXZlIl0pO2EmJiJ3ZWJraXRQZXJzcGVjdGl2ZSJpbiBnLnN0eWxlJiYoYT1lLmNzc3RyYW5zZm9ybXMzZCk7cmV0dXJuIGF9LHIuY3NzdHJhbnNpdGlvbnM9ZnVuY3Rpb24oKXtyZXR1cm4gRigidHJhbnNpdGlvblByb3BlcnR5Iil9LHIuZm9udGZhY2U9ZnVuY3Rpb24oKXtyZXR1cm4gZS5mb250ZmFjZX0sci5nZW5lcmF0ZWRjb250ZW50PWZ1bmN0aW9uKCl7cmV0dXJuIGUuZ2VuZXJhdGVkY29udGVudH0sci52aWRlbz1mdW5jdGlvbigpe3ZhciBhPWIuY3JlYXRlRWxlbWVudCgidmlkZW8iKSxjPSExO3RyeXtpZihjPSEhYS5jYW5QbGF5VHlwZSl7Yz1uZXcgQm9vbGVhbihjKSxjLm9nZz1hLmNhblBsYXlUeXBlKCd2aWRlby9vZ2c7IGNvZGVjcz0idGhlb3JhIicpO3ZhciBkPSd2aWRlby9tcDQ7IGNvZGVjcz0iYXZjMS40MkUwMUUnO2MuaDI2ND1hLmNhblBsYXlUeXBlKGQrJyInKXx8YS5jYW5QbGF5VHlwZShkKycsIG1wNGEuNDAuMiInKSxjLndlYm09YS5jYW5QbGF5VHlwZSgndmlkZW8vd2VibTsgY29kZWNzPSJ2cDgsIHZvcmJpcyInKX19Y2F0Y2goZSl7fXJldHVybiBjfSxyLmF1ZGlvPWZ1bmN0aW9uKCl7dmFyIGE9Yi5jcmVhdGVFbGVtZW50KCJhdWRpbyIpLGM9ITE7dHJ5e2lmKGM9ISFhLmNhblBsYXlUeXBlKWM9bmV3IEJvb2xlYW4oYyksYy5vZ2c9YS5jYW5QbGF5VHlwZSgnYXVkaW8vb2dnOyBjb2RlY3M9InZvcmJpcyInKSxjLm1wMz1hLmNhblBsYXlUeXBlKCJhdWRpby9tcGVnOyIpLGMud2F2PWEuY2FuUGxheVR5cGUoJ2F1ZGlvL3dhdjsgY29kZWNzPSIxIicpLGMubTRhPWEuY2FuUGxheVR5cGUoImF1ZGlvL3gtbTRhOyIpfHxhLmNhblBsYXlUeXBlKCJhdWRpby9hYWM7Iil9Y2F0Y2goZCl7fXJldHVybiBjfSxyLmxvY2Fsc3RvcmFnZT1mdW5jdGlvbigpe3RyeXtyZXR1cm4hIWxvY2FsU3RvcmFnZS5nZXRJdGVtfWNhdGNoKGEpe3JldHVybiExfX0sci5zZXNzaW9uc3RvcmFnZT1mdW5jdGlvbigpe3RyeXtyZXR1cm4hIXNlc3Npb25TdG9yYWdlLmdldEl0ZW19Y2F0Y2goYSl7cmV0dXJuITF9fSxyLndlYndvcmtlcnM9ZnVuY3Rpb24oKXtyZXR1cm4hIWEuV29ya2VyfSxyLmFwcGxpY2F0aW9uY2FjaGU9ZnVuY3Rpb24oKXtyZXR1cm4hIWEuYXBwbGljYXRpb25DYWNoZX0sci5zdmc9ZnVuY3Rpb24oKXtyZXR1cm4hIWIuY3JlYXRlRWxlbWVudE5TJiYhIWIuY3JlYXRlRWxlbWVudE5TKHEuc3ZnLCJzdmciKS5jcmVhdGVTVkdSZWN0fSxyLmlubGluZXN2Zz1mdW5jdGlvbigpe3ZhciBhPWIuY3JlYXRlRWxlbWVudCgiZGl2Iik7YS5pbm5lckhUTUw9IjxzdmcvPiI7cmV0dXJuKGEuZmlyc3RDaGlsZCYmYS5maXJzdENoaWxkLm5hbWVzcGFjZVVSSSk9PXEuc3ZnfSxyLnNtaWw9ZnVuY3Rpb24oKXtyZXR1cm4hIWIuY3JlYXRlRWxlbWVudE5TJiYvU1ZHLy50ZXN0KG4uY2FsbChiLmNyZWF0ZUVsZW1lbnROUyhxLnN2ZywiYW5pbWF0ZSIpKSl9LHIuc3ZnY2xpcHBhdGhzPWZ1bmN0aW9uKCl7cmV0dXJuISFiLmNyZWF0ZUVsZW1lbnROUyYmL1NWRy8udGVzdChuLmNhbGwoYi5jcmVhdGVFbGVtZW50TlMocS5zdmcsImNsaXBQYXRoIikpKX07Zm9yKHZhciBJIGluIHIpeihyLEkpJiYoeD1JLnRvTG93ZXJDYXNlKCksZVt4XT1yW0ldKCksdS5wdXNoKChlW3hdPyIiOiJuby0iKSt4KSk7ZS5pbnB1dHx8SCgpLGUuYWRkVGVzdD1mdW5jdGlvbihhLGIpe2lmKHR5cGVvZiBhPT0ib2JqZWN0Iilmb3IodmFyIGQgaW4gYSl6KGEsZCkmJmUuYWRkVGVzdChkLGFbZF0pO2Vsc2V7YT1hLnRvTG93ZXJDYXNlKCk7aWYoZVthXSE9PWMpcmV0dXJuO2I9dHlwZW9mIGI9PSJib29sZWFuIj9iOiEhYigpLGcuY2xhc3NOYW1lKz0iICIrKGI/IiI6Im5vLSIpK2EsZVthXT1ifXJldHVybiBlfSxBKCIiKSxqPWw9bnVsbCxhLmF0dGFjaEV2ZW50JiZmdW5jdGlvbigpe3ZhciBhPWIuY3JlYXRlRWxlbWVudCgiZGl2Iik7YS5pbm5lckhUTUw9IjxlbGVtPjwvZWxlbT4iO3JldHVybiBhLmNoaWxkTm9kZXMubGVuZ3RoIT09MX0oKSYmZnVuY3Rpb24oYSxiKXtmdW5jdGlvbiBzKGEpe3ZhciBiPS0xO3doaWxlKCsrYjxnKWEuY3JlYXRlRWxlbWVudChmW2JdKX1hLmllcHA9YS5pZXBwfHx7fTt2YXIgZD1hLmllcHAsZT1kLmh0bWw1ZWxlbWVudHN8fCJhYmJyfGFydGljbGV8YXNpZGV8YXVkaW98Y2FudmFzfGRhdGFsaXN0fGRldGFpbHN8ZmlnY2FwdGlvbnxmaWd1cmV8Zm9vdGVyfGhlYWRlcnxoZ3JvdXB8bWFya3xtZXRlcnxuYXZ8b3V0cHV0fHByb2dyZXNzfHNlY3Rpb258c3VtbWFyeXx0aW1lfHZpZGVvIixmPWUuc3BsaXQoInwiKSxnPWYubGVuZ3RoLGg9bmV3IFJlZ0V4cCgiKF58XFxzKSgiK2UrIikiLCJnaSIpLGk9bmV3IFJlZ0V4cCgiPCgvKikoIitlKyIpIiwiZ2kiKSxqPS9eXHMqW1x7XH1dXHMqJC8saz1uZXcgUmVnRXhwKCIoXnxbXlxcbl0qP1xccykoIitlKyIpKFteXFxuXSopKHtbXFxuXFx3XFxXXSo/fSkiLCJnaSIpLGw9Yi5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCksbT1iLmRvY3VtZW50RWxlbWVudCxuPW0uZmlyc3RDaGlsZCxvPWIuY3JlYXRlRWxlbWVudCgiYm9keSIpLHA9Yi5jcmVhdGVFbGVtZW50KCJzdHlsZSIpLHE9L3ByaW50fGFsbC8scjtkLmdldENTUz1mdW5jdGlvbihhLGIpe2lmKGErIiI9PT1jKXJldHVybiIiO3ZhciBlPS0xLGY9YS5sZW5ndGgsZyxoPVtdO3doaWxlKCsrZTxmKXtnPWFbZV07aWYoZy5kaXNhYmxlZCljb250aW51ZTtiPWcubWVkaWF8fGIscS50ZXN0KGIpJiZoLnB1c2goZC5nZXRDU1MoZy5pbXBvcnRzLGIpLGcuY3NzVGV4dCksYj0iYWxsIn1yZXR1cm4gaC5qb2luKCIiKX0sZC5wYXJzZUNTUz1mdW5jdGlvbihhKXt2YXIgYj1bXSxjO3doaWxlKChjPWsuZXhlYyhhKSkhPW51bGwpYi5wdXNoKCgoai5leGVjKGNbMV0pPyJcbiI6Y1sxXSkrY1syXStjWzNdKS5yZXBsYWNlKGgsIiQxLmllcHBfJDIiKStjWzRdKTtyZXR1cm4gYi5qb2luKCJcbiIpfSxkLndyaXRlSFRNTD1mdW5jdGlvbigpe3ZhciBhPS0xO3I9cnx8Yi5ib2R5O3doaWxlKCsrYTxnKXt2YXIgYz1iLmdldEVsZW1lbnRzQnlUYWdOYW1lKGZbYV0pLGQ9Yy5sZW5ndGgsZT0tMTt3aGlsZSgrK2U8ZCljW2VdLmNsYXNzTmFtZS5pbmRleE9mKCJpZXBwXyIpPDAmJihjW2VdLmNsYXNzTmFtZSs9IiBpZXBwXyIrZlthXSl9bC5hcHBlbmRDaGlsZChyKSxtLmFwcGVuZENoaWxkKG8pLG8uY2xhc3NOYW1lPXIuY2xhc3NOYW1lLG8uaWQ9ci5pZCxvLmlubmVySFRNTD1yLmlubmVySFRNTC5yZXBsYWNlKGksIjwkMWZvbnQiKX0sZC5fYmVmb3JlUHJpbnQ9ZnVuY3Rpb24oKXtwLnN0eWxlU2hlZXQuY3NzVGV4dD1kLnBhcnNlQ1NTKGQuZ2V0Q1NTKGIuc3R5bGVTaGVldHMsImFsbCIpKSxkLndyaXRlSFRNTCgpfSxkLnJlc3RvcmVIVE1MPWZ1bmN0aW9uKCl7by5pbm5lckhUTUw9IiIsbS5yZW1vdmVDaGlsZChvKSxtLmFwcGVuZENoaWxkKHIpfSxkLl9hZnRlclByaW50PWZ1bmN0aW9uKCl7ZC5yZXN0b3JlSFRNTCgpLHAuc3R5bGVTaGVldC5jc3NUZXh0PSIifSxzKGIpLHMobCk7ZC5kaXNhYmxlUFB8fChuLmluc2VydEJlZm9yZShwLG4uZmlyc3RDaGlsZCkscC5tZWRpYT0icHJpbnQiLHAuY2xhc3NOYW1lPSJpZXBwLXByaW50c2hpbSIsYS5hdHRhY2hFdmVudCgib25iZWZvcmVwcmludCIsZC5fYmVmb3JlUHJpbnQpLGEuYXR0YWNoRXZlbnQoIm9uYWZ0ZXJwcmludCIsZC5fYWZ0ZXJQcmludCkpfShhLGIpLGUuX3ZlcnNpb249ZCxlLl9wcmVmaXhlcz1vLGUuX2RvbVByZWZpeGVzPXAsZS5oYXNFdmVudD13LGUudGVzdFByb3A9ZnVuY3Rpb24oYSl7cmV0dXJuIEUoW2FdKX0sZS50ZXN0QWxsUHJvcHM9RixlLnRlc3RTdHlsZXM9dixnLmNsYXNzTmFtZT1nLmNsYXNzTmFtZS5yZXBsYWNlKC9cYm5vLWpzXGIvLCIiKSsoZj8iIGpzICIrdS5qb2luKCIgIik6IiIpO3JldHVybiBlfSh0aGlzLHRoaXMuZG9jdW1lbnQpLGZ1bmN0aW9uKGEsYixjKXtmdW5jdGlvbiBrKGEpe3JldHVybiFhfHxhPT0ibG9hZGVkInx8YT09ImNvbXBsZXRlIn1mdW5jdGlvbiBqKCl7dmFyIGE9MSxiPS0xO3doaWxlKHAubGVuZ3RoLSArK2IpaWYocFtiXS5zJiYhKGE9cFtiXS5yKSlicmVhazthJiZnKCl9ZnVuY3Rpb24gaShhKXt2YXIgYz1iLmNyZWF0ZUVsZW1lbnQoInNjcmlwdCIpLGQ7Yy5zcmM9YS5zLGMub25yZWFkeXN0YXRlY2hhbmdlPWMub25sb2FkPWZ1bmN0aW9uKCl7IWQmJmsoYy5yZWFkeVN0YXRlKSYmKGQ9MSxqKCksYy5vbmxvYWQ9Yy5vbnJlYWR5c3RhdGVjaGFuZ2U9bnVsbCl9LG0oZnVuY3Rpb24oKXtkfHwoZD0xLGooKSl9LEguZXJyb3JUaW1lb3V0KSxhLmU/Yy5vbmxvYWQoKTpuLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGMsbil9ZnVuY3Rpb24gaChhKXt2YXIgYz1iLmNyZWF0ZUVsZW1lbnQoImxpbmsiKSxkO2MuaHJlZj1hLnMsYy5yZWw9InN0eWxlc2hlZXQiLGMudHlwZT0idGV4dC9jc3MiO2lmKCFhLmUmJih3fHxyKSl7dmFyIGU9ZnVuY3Rpb24oYSl7bShmdW5jdGlvbigpe2lmKCFkKXRyeXthLnNoZWV0LmNzc1J1bGVzLmxlbmd0aD8oZD0xLGooKSk6ZShhKX1jYXRjaChiKXtiLmNvZGU9PTFlM3x8Yi5tZXNzYWdlPT0ic2VjdXJpdHkifHxiLm1lc3NhZ2U9PSJkZW5pZWQiPyhkPTEsbShmdW5jdGlvbigpe2ooKX0sMCkpOmUoYSl9fSwwKX07ZShjKX1lbHNlIGMub25sb2FkPWZ1bmN0aW9uKCl7ZHx8KGQ9MSxtKGZ1bmN0aW9uKCl7aigpfSwwKSl9LGEuZSYmYy5vbmxvYWQoKTttKGZ1bmN0aW9uKCl7ZHx8KGQ9MSxqKCkpfSxILmVycm9yVGltZW91dCksIWEuZSYmbi5wYXJlbnROb2RlLmluc2VydEJlZm9yZShjLG4pfWZ1bmN0aW9uIGcoKXt2YXIgYT1wLnNoaWZ0KCk7cT0xLGE/YS50P20oZnVuY3Rpb24oKXthLnQ9PSJjIj9oKGEpOmkoYSl9LDApOihhKCksaigpKTpxPTB9ZnVuY3Rpb24gZihhLGMsZCxlLGYsaCl7ZnVuY3Rpb24gaSgpeyFvJiZrKGwucmVhZHlTdGF0ZSkmJihyLnI9bz0xLCFxJiZqKCksbC5vbmxvYWQ9bC5vbnJlYWR5c3RhdGVjaGFuZ2U9bnVsbCxtKGZ1bmN0aW9uKCl7dS5yZW1vdmVDaGlsZChsKX0sMCkpfXZhciBsPWIuY3JlYXRlRWxlbWVudChhKSxvPTAscj17dDpkLHM6YyxlOmh9O2wuc3JjPWwuZGF0YT1jLCFzJiYobC5zdHlsZS5kaXNwbGF5PSJub25lIiksbC53aWR0aD1sLmhlaWdodD0iMCIsYSE9Im9iamVjdCImJihsLnR5cGU9ZCksbC5vbmxvYWQ9bC5vbnJlYWR5c3RhdGVjaGFuZ2U9aSxhPT0iaW1nIj9sLm9uZXJyb3I9aTphPT0ic2NyaXB0IiYmKGwub25lcnJvcj1mdW5jdGlvbigpe3IuZT1yLnI9MSxnKCl9KSxwLnNwbGljZShlLDAsciksdS5pbnNlcnRCZWZvcmUobCxzP251bGw6biksbShmdW5jdGlvbigpe298fCh1LnJlbW92ZUNoaWxkKGwpLHIucj1yLmU9bz0xLGooKSl9LEguZXJyb3JUaW1lb3V0KX1mdW5jdGlvbiBlKGEsYixjKXt2YXIgZD1iPT0iYyI/ejp5O3E9MCxiPWJ8fCJqIixDKGEpP2YoZCxhLGIsdGhpcy5pKyssbCxjKToocC5zcGxpY2UodGhpcy5pKyssMCxhKSxwLmxlbmd0aD09MSYmZygpKTtyZXR1cm4gdGhpc31mdW5jdGlvbiBkKCl7dmFyIGE9SDthLmxvYWRlcj17bG9hZDplLGk6MH07cmV0dXJuIGF9dmFyIGw9Yi5kb2N1bWVudEVsZW1lbnQsbT1hLnNldFRpbWVvdXQsbj1iLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJzY3JpcHQiKVswXSxvPXt9LnRvU3RyaW5nLHA9W10scT0wLHI9Ik1vekFwcGVhcmFuY2UiaW4gbC5zdHlsZSxzPXImJiEhYi5jcmVhdGVSYW5nZSgpLmNvbXBhcmVOb2RlLHQ9ciYmIXMsdT1zP2w6bi5wYXJlbnROb2RlLHY9YS5vcGVyYSYmby5jYWxsKGEub3BlcmEpPT0iW29iamVjdCBPcGVyYV0iLHc9IndlYmtpdEFwcGVhcmFuY2UiaW4gbC5zdHlsZSx4PXcmJiJhc3luYyJpbiBiLmNyZWF0ZUVsZW1lbnQoInNjcmlwdCIpLHk9cj8ib2JqZWN0Ijp2fHx4PyJpbWciOiJzY3JpcHQiLHo9dz8iaW1nIjp5LEE9QXJyYXkuaXNBcnJheXx8ZnVuY3Rpb24oYSl7cmV0dXJuIG8uY2FsbChhKT09IltvYmplY3QgQXJyYXldIn0sQj1mdW5jdGlvbihhKXtyZXR1cm4gT2JqZWN0KGEpPT09YX0sQz1mdW5jdGlvbihhKXtyZXR1cm4gdHlwZW9mIGE9PSJzdHJpbmcifSxEPWZ1bmN0aW9uKGEpe3JldHVybiBvLmNhbGwoYSk9PSJbb2JqZWN0IEZ1bmN0aW9uXSJ9LEU9W10sRj17fSxHLEg7SD1mdW5jdGlvbihhKXtmdW5jdGlvbiBmKGEpe3ZhciBiPWEuc3BsaXQoIiEiKSxjPUUubGVuZ3RoLGQ9Yi5wb3AoKSxlPWIubGVuZ3RoLGY9e3VybDpkLG9yaWdVcmw6ZCxwcmVmaXhlczpifSxnLGg7Zm9yKGg9MDtoPGU7aCsrKWc9RltiW2hdXSxnJiYoZj1nKGYpKTtmb3IoaD0wO2g8YztoKyspZj1FW2hdKGYpO3JldHVybiBmfWZ1bmN0aW9uIGUoYSxiLGUsZyxoKXt2YXIgaT1mKGEpLGo9aS5hdXRvQ2FsbGJhY2s7aWYoIWkuYnlwYXNzKXtiJiYoYj1EKGIpP2I6YlthXXx8YltnXXx8YlthLnNwbGl0KCIvIikucG9wKCkuc3BsaXQoIj8iKVswXV0pO2lmKGkuaW5zdGVhZClyZXR1cm4gaS5pbnN0ZWFkKGEsYixlLGcsaCk7ZS5sb2FkKGkudXJsLGkuZm9yY2VDU1N8fCFpLmZvcmNlSlMmJi9jc3MkLy50ZXN0KGkudXJsKT8iYyI6YyxpLm5vZXhlYyksKEQoYil8fEQoaikpJiZlLmxvYWQoZnVuY3Rpb24oKXtkKCksYiYmYihpLm9yaWdVcmwsaCxnKSxqJiZqKGkub3JpZ1VybCxoLGcpfSl9fWZ1bmN0aW9uIGIoYSxiKXtmdW5jdGlvbiBjKGEpe2lmKEMoYSkpZShhLGgsYiwwLGQpO2Vsc2UgaWYoQihhKSlmb3IoaSBpbiBhKWEuaGFzT3duUHJvcGVydHkoaSkmJmUoYVtpXSxoLGIsaSxkKX12YXIgZD0hIWEudGVzdCxmPWQ/YS55ZXA6YS5ub3BlLGc9YS5sb2FkfHxhLmJvdGgsaD1hLmNhbGxiYWNrLGk7YyhmKSxjKGcpLGEuY29tcGxldGUmJmIubG9hZChhLmNvbXBsZXRlKX12YXIgZyxoLGk9dGhpcy55ZXBub3BlLmxvYWRlcjtpZihDKGEpKWUoYSwwLGksMCk7ZWxzZSBpZihBKGEpKWZvcihnPTA7ZzxhLmxlbmd0aDtnKyspaD1hW2ddLEMoaCk/ZShoLDAsaSwwKTpBKGgpP0goaCk6QihoKSYmYihoLGkpO2Vsc2UgQihhKSYmYihhLGkpfSxILmFkZFByZWZpeD1mdW5jdGlvbihhLGIpe0ZbYV09Yn0sSC5hZGRGaWx0ZXI9ZnVuY3Rpb24oYSl7RS5wdXNoKGEpfSxILmVycm9yVGltZW91dD0xZTQsYi5yZWFkeVN0YXRlPT1udWxsJiZiLmFkZEV2ZW50TGlzdGVuZXImJihiLnJlYWR5U3RhdGU9ImxvYWRpbmciLGIuYWRkRXZlbnRMaXN0ZW5lcigiRE9NQ29udGVudExvYWRlZCIsRz1mdW5jdGlvbigpe2IucmVtb3ZlRXZlbnRMaXN0ZW5lcigiRE9NQ29udGVudExvYWRlZCIsRywwKSxiLnJlYWR5U3RhdGU9ImNvbXBsZXRlIn0sMCkpLGEueWVwbm9wZT1kKCl9KHRoaXMsdGhpcy5kb2N1bWVudCksTW9kZXJuaXpyLmxvYWQ9ZnVuY3Rpb24oKXt5ZXBub3BlLmFwcGx5KHdpbmRvdyxbXS5zbGljZS5jYWxsKGFyZ3VtZW50cywwKSl9Ow=="></script>

<!-- Core and extension CSS files -->
<!--
		<link rel="stylesheet" media="screen" href="../core/deck.core.css">
		<link rel="stylesheet" media="screen" href="../extensions/goto/deck.goto.css">
		<link rel="stylesheet" media="screen" href="../extensions/menu/deck.menu.css">
		<link rel="stylesheet" media="screen" href="../extensions/navigation/deck.navigation.css">
		<link rel="stylesheet" media="screen" href="../extensions/status/deck.status.css">
		<link rel="stylesheet" media="screen" href="../extensions/scale/deck.scale.css">
	-->

<!-- Style theme. More available in /themes/style/ or create your own. -->
<!--
		<link rel="stylesheet" media="screen" href="../themes/style/web-2.0.css">
	-->

<!-- Transition theme. More available in /themes/transition/ or create your own. -->
<!--
		<link rel="stylesheet" media="screen" href="../themes/transition/horizontal-slide.css">
	-->

<!-- Basic black and white print styles -->
<!--
		<link rel="stylesheet" media="print" href="../core/print.css">
	-->
<!--
		<script src="../modernizr.custom.js"></script>
	-->
		</head>

<body>
	<div class="deck-container">

<!-- Begin slides -->
	<section class="slide" id="title-slide">
		<h1>Start timejak with deck.js</h1>
		</section>

	<section class="slide" id="how-to-overview">
		<h2>How to Make a Deck</h2>
		<ol>
			<li>
				<h3>Write Slides</h3>
				<p>Slide content is simple&nbsp;HTML.</p>
				</li>
			<li>
		`		<h3>Choose Themes</h3>
				<p>One for slide styles and one for deck&nbsp;transitions.</p>
				</li>
			<li>
				<h3>Include Extensions</h3>
				<p>Add extra functionality to your deck, or leave it stripped&nbsp;down.</p>
				</li>
			</ol>
		</section>


	<section class="slide" id="quick-start">
		<h2>Quick Start</h2>
		<p>When you <a href="https://github.com/imakewebthings/deck.js/archive/latest.zip">download</a> deck.js, it will include a file named <code>boilerplate.html</code>. You can immediately start editing slides in this page and viewing them in your web browser. Later on, when you are comfortable customizing the deck, you can edit the various pieces of the boilerplate or make your own to suit your needs.</p>
		</section>

	<section class="slide" id="markup">
		<h2>The Markup</h2>
		<p>Slides are just HTML elements with a class of <code>slide</code>.</p>
		<pre><code>&lt;section class=&quot;slide&quot;&gt;
			&lt;h2&gt;How to Make a Deck&lt;/h2&gt;
			  &lt;ol&gt;
			    &lt;li&gt;
			      &lt;h3&gt;Write Slides&lt;/h3&gt;
			      &lt;p&gt;Slide content is simple HTML.&lt;/p&gt;
			    &lt;/li&gt;
			    &lt;li&gt;
		      &lt;h3&gt;Choose Themes&lt;/h3&gt;
		      &lt;p&gt;One for slide styles and one for deck transitions.&lt;/p&gt;
		    &lt;/li&gt;
		    &hellip;
		  &lt;/ol&gt;
			&lt;/section&gt;</code></pre>
		</section>

	<section class="slide" id="themes">
		<h2>Style Themes</h2>
		<p>Customizes the colors, typography, and layout of slide&nbsp;content.</p>
		<pre><code>&lt;link rel=&quot;stylesheet&quot; href=&quot;/path/to/css/style-theme.css&quot;&gt;</code></pre>
		<h2>Transition Themes</h2>
		<p>Defines transitions between slides using CSS3 transitions.  Less capable browsers fall back to cutaways. But <strong>you</strong> aren&rsquo;t using <em>those</em> browsers to give your presentations, are&nbsp;you&hellip;</p>
		<pre><code>&lt;link rel=&quot;stylesheet&quot; href=&quot;/path/to/css/transition-theme.css&quot;&gt;</code></pre>
		</section>

	<section class="slide" id="extensions">
		<h2>Extensions</h2>
		<p>Core gives you basic slide functionality with left and right arrow navigation, but you may want more. Here are the ones included in this&nbsp;deck:</p>
		<ul>
			<li class="slide" id="extensions-goto">
				<strong>deck.goto</strong>: Adds a shortcut key to jump to any slide number.  Hit g, type in the slide number, and hit&nbsp;enter.
				</li>

			<li class="slide" id="extensions-menu">
				<strong>deck.menu</strong>: Adds a menu view, letting you see all slides in a grid. Hit m to toggle to menu view, continue navigating your deck, and hit m to return to normal view. Touch devices can double-tap the deck to switch between&nbsp;views.
				</li>

			<li class="slide" id="extensions-navigation">
				<strong>deck.navigation</strong>: Adds clickable left and right buttons for the less keyboard&nbsp;inclined.
				</li>

			<li class="slide" id="extensions-status">
				<strong>deck.status</strong>: Adds a page number indicator. (current/total)
				</li>

			<li class="slide" id="extensions-scale">
				<strong>deck.scale</strong>: Scales each slide to fit within the deck container using CSS Transforms for those browsers that support them.
				</li>
			</ul>

		<p class="slide" id="extension-folders">Each extension folder in the download package contains the necessary JavaScript, CSS, and HTML&nbsp;files. For a complete list of extension modules included in deck.js, check out the&nbsp;<a href="http://imakewebthings.github.com/deck.js/docs">documentation</a>.</p>
		</section>

	<section class="slide" id="nested">
		<h2>Nested Slides</h2>
		<p>That last slide had a few steps.  To create substeps in slides, just nest them:</p>
		<pre><code>&lt;section class=&quot;slide&quot;&gt;
		  &lt;h2&gt;Extensions&lt;/h2&gt;
		  &lt;p&gt;Core gives you basic slide functionality...&lt;/p&gt;
		  &lt;ul&gt;
		    &lt;li class=&quot;slide&quot;&gt;
		      &lt;h3&gt;deck.goto&lt;/h3&gt;
		      &lt;p&gt;Adds a shortcut key to jump to any slide number...&lt;/p&gt;
		    &lt;/li&gt;
		    &lt;li class=&quot;slide&quot;&gt;...&lt;/li&gt;
		    &lt;li class=&quot;slide&quot;&gt;...&lt;/li&gt;
		    &lt;li class=&quot;slide&quot;&gt;...&lt;/li&gt;
		  &lt;/ul&gt;
		&lt;/section&gt;</code></pre>
		</section>

	<section class="slide" id="elements-images">
		<h2>Other Elements: Images</h2>
		<a href="./index_links.html" target=_blank >
			<img src="./imgs/btn/ko.png" alt="ko.png">
			</a>
		<pre><code>
			&lt;<a href=&quot./index_links.html&quot target=_blank>
<img src=&quot;./imgs/btn/ko.pngx&quot; alt=&quot;index_links&quot;&gt;
			</code></pre>
		</section>

	<section class="slide" id="elements-blockquotes">
		<h2>Other Elements: Blockquotes</h2>
		<blockquote cite="http://konet.org">
		<p>Food is an important part of a balanced diet.</p>
		<p><cite>Fran Lebowitz</cite></p>
		</blockquote>
		<pre><code>&lt;blockquote cite=&quot;http://example.org&quot;&gt;
			&lt;p&gt;Food is an important part of a balanced diet.&lt;/p&gt;
			&lt;p&gt;&lt;cite&gt;Fran Lebowitz&lt;/cite&gt;&lt;/p&gt;
			&lt;/blockquote&gt;
			</code></pre>
		</section>


	<section class="slide" id="elements-videos">
		<h2>Other Elements: Video Embeds</h2>
		<p>Embed videos from your favorite online video service or with an HTML5 video&nbsp;element.</p>
<!--
		<iframe src="http://player.vimeo.com/video/1063136?title=0&amp;byline=0&amp;portrait=0" width="400" height="225" frameborder="0"></iframe>
	-->
		<iframe src="./index_yt.html" width="800" height="600" frameborder="0"></iframe>

		<pre><code>&lt;iframe src=&quot;http://player.vimeo.com/video/1063136?title=0&amp;amp;byline=0&amp;amp;portrait=0&quot; width=&quot;400&quot; height=&quot;225&quot; frameborder=&quot;0&quot;&gt;&lt;/iframe&gt;
			</code></pre>
		</section>

	<section class="slide" id="digging-deeper">
		<h2>Digging Deeper</h2>
		<p>If you want to learn about making your own themes, extending deck.js, and more, check out the&nbsp;<a href="../docs/">documentation</a>.</p>
		</section>

<!-- deck.navigation snippet -->
	<div aria-role="navigation">
		<a href="#" class="deck-prev-link" title="Previous">&#8592;</a>
		<a href="#" class="deck-next-link" title="Next">&#8594;</a>
		</div>

<!-- deck.status snippet -->
	<div name="div_deck_status" >
	<p class="deck-status" aria-role="status">
		<span class="deck-status-current"></span>
		<span class="deck-status-total"></span>
		</p>
		</div>

<!-- deck.goto snippet -->
	<div name="div_deck_form" >
		<form action="." method="get" class="goto-form">
			<label for="goto-slide">Go to slide:</label>
			<input type="text" name="slidenum" id="goto-slide" list="goto-datalist">
			<datalist id="goto-datalist"></datalist>
			<input type="submit" value="Go">
			</form>
		  </div>


		<script id="jquery-min_js" src="data:/text/plain;base64,LyohIGpRdWVyeSB2MS4xMC4yIHwgKGMpIDIwMDUsIDIwMTMgalF1ZXJ5IEZvdW5kYXRpb24sIEluYy4gfCBqcXVlcnkub3JnL2xpY2Vuc2UKLy9AIHNvdXJjZU1hcHBpbmdVUkw9anF1ZXJ5LTEuMTAuMi5taW4ubWFwCiovCihmdW5jdGlvbihlLHQpe3ZhciBuLHIsaT10eXBlb2YgdCxvPWUubG9jYXRpb24sYT1lLmRvY3VtZW50LHM9YS5kb2N1bWVudEVsZW1lbnQsbD1lLmpRdWVyeSx1PWUuJCxjPXt9LHA9W10sZj0iMS4xMC4yIixkPXAuY29uY2F0LGg9cC5wdXNoLGc9cC5zbGljZSxtPXAuaW5kZXhPZix5PWMudG9TdHJpbmcsdj1jLmhhc093blByb3BlcnR5LGI9Zi50cmltLHg9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gbmV3IHguZm4uaW5pdChlLHQscil9LHc9L1srLV0/KD86XGQqXC58KVxkKyg/OltlRV1bKy1dP1xkK3wpLy5zb3VyY2UsVD0vXFMrL2csQz0vXltcc1x1RkVGRlx4QTBdK3xbXHNcdUZFRkZceEEwXSskL2csTj0vXig/OlxzKig8W1x3XFddKz4pW14+XSp8IyhbXHctXSopKSQvLGs9L148KFx3KylccypcLz8+KD86PFwvXDE+fCkkLyxFPS9eW1xdLDp7fVxzXSokLyxTPS8oPzpefDp8LCkoPzpccypcWykrL2csQT0vXFwoPzpbIlxcXC9iZm5ydF18dVtcZGEtZkEtRl17NH0pL2csaj0vIlteIlxcXHJcbl0qInx0cnVlfGZhbHNlfG51bGx8LT8oPzpcZCtcLnwpXGQrKD86W2VFXVsrLV0/XGQrfCkvZyxEPS9eLW1zLS8sTD0vLShbXGRhLXpdKS9naSxIPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHQudG9VcHBlckNhc2UoKX0scT1mdW5jdGlvbihlKXsoYS5hZGRFdmVudExpc3RlbmVyfHwibG9hZCI9PT1lLnR5cGV8fCJjb21wbGV0ZSI9PT1hLnJlYWR5U3RhdGUpJiYoXygpLHgucmVhZHkoKSl9LF89ZnVuY3Rpb24oKXthLmFkZEV2ZW50TGlzdGVuZXI/KGEucmVtb3ZlRXZlbnRMaXN0ZW5lcigiRE9NQ29udGVudExvYWRlZCIscSwhMSksZS5yZW1vdmVFdmVudExpc3RlbmVyKCJsb2FkIixxLCExKSk6KGEuZGV0YWNoRXZlbnQoIm9ucmVhZHlzdGF0ZWNoYW5nZSIscSksZS5kZXRhY2hFdmVudCgib25sb2FkIixxKSl9O3guZm49eC5wcm90b3R5cGU9e2pxdWVyeTpmLGNvbnN0cnVjdG9yOngsaW5pdDpmdW5jdGlvbihlLG4scil7dmFyIGksbztpZighZSlyZXR1cm4gdGhpcztpZigic3RyaW5nIj09dHlwZW9mIGUpe2lmKGk9IjwiPT09ZS5jaGFyQXQoMCkmJiI+Ij09PWUuY2hhckF0KGUubGVuZ3RoLTEpJiZlLmxlbmd0aD49Mz9bbnVsbCxlLG51bGxdOk4uZXhlYyhlKSwhaXx8IWlbMV0mJm4pcmV0dXJuIW58fG4uanF1ZXJ5PyhufHxyKS5maW5kKGUpOnRoaXMuY29uc3RydWN0b3IobikuZmluZChlKTtpZihpWzFdKXtpZihuPW4gaW5zdGFuY2VvZiB4P25bMF06bix4Lm1lcmdlKHRoaXMseC5wYXJzZUhUTUwoaVsxXSxuJiZuLm5vZGVUeXBlP24ub3duZXJEb2N1bWVudHx8bjphLCEwKSksay50ZXN0KGlbMV0pJiZ4LmlzUGxhaW5PYmplY3QobikpZm9yKGkgaW4gbil4LmlzRnVuY3Rpb24odGhpc1tpXSk/dGhpc1tpXShuW2ldKTp0aGlzLmF0dHIoaSxuW2ldKTtyZXR1cm4gdGhpc31pZihvPWEuZ2V0RWxlbWVudEJ5SWQoaVsyXSksbyYmby5wYXJlbnROb2RlKXtpZihvLmlkIT09aVsyXSlyZXR1cm4gci5maW5kKGUpO3RoaXMubGVuZ3RoPTEsdGhpc1swXT1vfXJldHVybiB0aGlzLmNvbnRleHQ9YSx0aGlzLnNlbGVjdG9yPWUsdGhpc31yZXR1cm4gZS5ub2RlVHlwZT8odGhpcy5jb250ZXh0PXRoaXNbMF09ZSx0aGlzLmxlbmd0aD0xLHRoaXMpOnguaXNGdW5jdGlvbihlKT9yLnJlYWR5KGUpOihlLnNlbGVjdG9yIT09dCYmKHRoaXMuc2VsZWN0b3I9ZS5zZWxlY3Rvcix0aGlzLmNvbnRleHQ9ZS5jb250ZXh0KSx4Lm1ha2VBcnJheShlLHRoaXMpKX0sc2VsZWN0b3I6IiIsbGVuZ3RoOjAsdG9BcnJheTpmdW5jdGlvbigpe3JldHVybiBnLmNhbGwodGhpcyl9LGdldDpmdW5jdGlvbihlKXtyZXR1cm4gbnVsbD09ZT90aGlzLnRvQXJyYXkoKTowPmU/dGhpc1t0aGlzLmxlbmd0aCtlXTp0aGlzW2VdfSxwdXNoU3RhY2s6ZnVuY3Rpb24oZSl7dmFyIHQ9eC5tZXJnZSh0aGlzLmNvbnN0cnVjdG9yKCksZSk7cmV0dXJuIHQucHJldk9iamVjdD10aGlzLHQuY29udGV4dD10aGlzLmNvbnRleHQsdH0sZWFjaDpmdW5jdGlvbihlLHQpe3JldHVybiB4LmVhY2godGhpcyxlLHQpfSxyZWFkeTpmdW5jdGlvbihlKXtyZXR1cm4geC5yZWFkeS5wcm9taXNlKCkuZG9uZShlKSx0aGlzfSxzbGljZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnB1c2hTdGFjayhnLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9LGZpcnN0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZXEoMCl9LGxhc3Q6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lcSgtMSl9LGVxOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMubGVuZ3RoLG49K2UrKDA+ZT90OjApO3JldHVybiB0aGlzLnB1c2hTdGFjayhuPj0wJiZ0Pm4/W3RoaXNbbl1dOltdKX0sbWFwOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLnB1c2hTdGFjayh4Lm1hcCh0aGlzLGZ1bmN0aW9uKHQsbil7cmV0dXJuIGUuY2FsbCh0LG4sdCl9KSl9LGVuZDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnByZXZPYmplY3R8fHRoaXMuY29uc3RydWN0b3IobnVsbCl9LHB1c2g6aCxzb3J0OltdLnNvcnQsc3BsaWNlOltdLnNwbGljZX0seC5mbi5pbml0LnByb3RvdHlwZT14LmZuLHguZXh0ZW5kPXguZm4uZXh0ZW5kPWZ1bmN0aW9uKCl7dmFyIGUsbixyLGksbyxhLHM9YXJndW1lbnRzWzBdfHx7fSxsPTEsdT1hcmd1bWVudHMubGVuZ3RoLGM9ITE7Zm9yKCJib29sZWFuIj09dHlwZW9mIHMmJihjPXMscz1hcmd1bWVudHNbMV18fHt9LGw9MiksIm9iamVjdCI9PXR5cGVvZiBzfHx4LmlzRnVuY3Rpb24ocyl8fChzPXt9KSx1PT09bCYmKHM9dGhpcywtLWwpO3U+bDtsKyspaWYobnVsbCE9KG89YXJndW1lbnRzW2xdKSlmb3IoaSBpbiBvKWU9c1tpXSxyPW9baV0scyE9PXImJihjJiZyJiYoeC5pc1BsYWluT2JqZWN0KHIpfHwobj14LmlzQXJyYXkocikpKT8obj8obj0hMSxhPWUmJnguaXNBcnJheShlKT9lOltdKTphPWUmJnguaXNQbGFpbk9iamVjdChlKT9lOnt9LHNbaV09eC5leHRlbmQoYyxhLHIpKTpyIT09dCYmKHNbaV09cikpO3JldHVybiBzfSx4LmV4dGVuZCh7ZXhwYW5kbzoialF1ZXJ5IisoZitNYXRoLnJhbmRvbSgpKS5yZXBsYWNlKC9cRC9nLCIiKSxub0NvbmZsaWN0OmZ1bmN0aW9uKHQpe3JldHVybiBlLiQ9PT14JiYoZS4kPXUpLHQmJmUualF1ZXJ5PT09eCYmKGUualF1ZXJ5PWwpLHh9LGlzUmVhZHk6ITEscmVhZHlXYWl0OjEsaG9sZFJlYWR5OmZ1bmN0aW9uKGUpe2U/eC5yZWFkeVdhaXQrKzp4LnJlYWR5KCEwKX0scmVhZHk6ZnVuY3Rpb24oZSl7aWYoZT09PSEwPyEtLXgucmVhZHlXYWl0OiF4LmlzUmVhZHkpe2lmKCFhLmJvZHkpcmV0dXJuIHNldFRpbWVvdXQoeC5yZWFkeSk7eC5pc1JlYWR5PSEwLGUhPT0hMCYmLS14LnJlYWR5V2FpdD4wfHwobi5yZXNvbHZlV2l0aChhLFt4XSkseC5mbi50cmlnZ2VyJiZ4KGEpLnRyaWdnZXIoInJlYWR5Iikub2ZmKCJyZWFkeSIpKX19LGlzRnVuY3Rpb246ZnVuY3Rpb24oZSl7cmV0dXJuImZ1bmN0aW9uIj09PXgudHlwZShlKX0saXNBcnJheTpBcnJheS5pc0FycmF5fHxmdW5jdGlvbihlKXtyZXR1cm4iYXJyYXkiPT09eC50eXBlKGUpfSxpc1dpbmRvdzpmdW5jdGlvbihlKXtyZXR1cm4gbnVsbCE9ZSYmZT09ZS53aW5kb3d9LGlzTnVtZXJpYzpmdW5jdGlvbihlKXtyZXR1cm4haXNOYU4ocGFyc2VGbG9hdChlKSkmJmlzRmluaXRlKGUpfSx0eXBlOmZ1bmN0aW9uKGUpe3JldHVybiBudWxsPT1lP2UrIiI6Im9iamVjdCI9PXR5cGVvZiBlfHwiZnVuY3Rpb24iPT10eXBlb2YgZT9jW3kuY2FsbChlKV18fCJvYmplY3QiOnR5cGVvZiBlfSxpc1BsYWluT2JqZWN0OmZ1bmN0aW9uKGUpe3ZhciBuO2lmKCFlfHwib2JqZWN0IiE9PXgudHlwZShlKXx8ZS5ub2RlVHlwZXx8eC5pc1dpbmRvdyhlKSlyZXR1cm4hMTt0cnl7aWYoZS5jb25zdHJ1Y3RvciYmIXYuY2FsbChlLCJjb25zdHJ1Y3RvciIpJiYhdi5jYWxsKGUuY29uc3RydWN0b3IucHJvdG90eXBlLCJpc1Byb3RvdHlwZU9mIikpcmV0dXJuITF9Y2F0Y2gocil7cmV0dXJuITF9aWYoeC5zdXBwb3J0Lm93bkxhc3QpZm9yKG4gaW4gZSlyZXR1cm4gdi5jYWxsKGUsbik7Zm9yKG4gaW4gZSk7cmV0dXJuIG49PT10fHx2LmNhbGwoZSxuKX0saXNFbXB0eU9iamVjdDpmdW5jdGlvbihlKXt2YXIgdDtmb3IodCBpbiBlKXJldHVybiExO3JldHVybiEwfSxlcnJvcjpmdW5jdGlvbihlKXt0aHJvdyBFcnJvcihlKX0scGFyc2VIVE1MOmZ1bmN0aW9uKGUsdCxuKXtpZighZXx8InN0cmluZyIhPXR5cGVvZiBlKXJldHVybiBudWxsOyJib29sZWFuIj09dHlwZW9mIHQmJihuPXQsdD0hMSksdD10fHxhO3ZhciByPWsuZXhlYyhlKSxpPSFuJiZbXTtyZXR1cm4gcj9bdC5jcmVhdGVFbGVtZW50KHJbMV0pXToocj14LmJ1aWxkRnJhZ21lbnQoW2VdLHQsaSksaSYmeChpKS5yZW1vdmUoKSx4Lm1lcmdlKFtdLHIuY2hpbGROb2RlcykpfSxwYXJzZUpTT046ZnVuY3Rpb24obil7cmV0dXJuIGUuSlNPTiYmZS5KU09OLnBhcnNlP2UuSlNPTi5wYXJzZShuKTpudWxsPT09bj9uOiJzdHJpbmciPT10eXBlb2YgbiYmKG49eC50cmltKG4pLG4mJkUudGVzdChuLnJlcGxhY2UoQSwiQCIpLnJlcGxhY2UoaiwiXSIpLnJlcGxhY2UoUywiIikpKT9GdW5jdGlvbigicmV0dXJuICIrbikoKTooeC5lcnJvcigiSW52YWxpZCBKU09OOiAiK24pLHQpfSxwYXJzZVhNTDpmdW5jdGlvbihuKXt2YXIgcixpO2lmKCFufHwic3RyaW5nIiE9dHlwZW9mIG4pcmV0dXJuIG51bGw7dHJ5e2UuRE9NUGFyc2VyPyhpPW5ldyBET01QYXJzZXIscj1pLnBhcnNlRnJvbVN0cmluZyhuLCJ0ZXh0L3htbCIpKToocj1uZXcgQWN0aXZlWE9iamVjdCgiTWljcm9zb2Z0LlhNTERPTSIpLHIuYXN5bmM9ImZhbHNlIixyLmxvYWRYTUwobikpfWNhdGNoKG8pe3I9dH1yZXR1cm4gciYmci5kb2N1bWVudEVsZW1lbnQmJiFyLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJwYXJzZXJlcnJvciIpLmxlbmd0aHx8eC5lcnJvcigiSW52YWxpZCBYTUw6ICIrbikscn0sbm9vcDpmdW5jdGlvbigpe30sZ2xvYmFsRXZhbDpmdW5jdGlvbih0KXt0JiZ4LnRyaW0odCkmJihlLmV4ZWNTY3JpcHR8fGZ1bmN0aW9uKHQpe2UuZXZhbC5jYWxsKGUsdCl9KSh0KX0sY2FtZWxDYXNlOmZ1bmN0aW9uKGUpe3JldHVybiBlLnJlcGxhY2UoRCwibXMtIikucmVwbGFjZShMLEgpfSxub2RlTmFtZTpmdW5jdGlvbihlLHQpe3JldHVybiBlLm5vZGVOYW1lJiZlLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk9PT10LnRvTG93ZXJDYXNlKCl9LGVhY2g6ZnVuY3Rpb24oZSx0LG4pe3ZhciByLGk9MCxvPWUubGVuZ3RoLGE9TShlKTtpZihuKXtpZihhKXtmb3IoO28+aTtpKyspaWYocj10LmFwcGx5KGVbaV0sbikscj09PSExKWJyZWFrfWVsc2UgZm9yKGkgaW4gZSlpZihyPXQuYXBwbHkoZVtpXSxuKSxyPT09ITEpYnJlYWt9ZWxzZSBpZihhKXtmb3IoO28+aTtpKyspaWYocj10LmNhbGwoZVtpXSxpLGVbaV0pLHI9PT0hMSlicmVha31lbHNlIGZvcihpIGluIGUpaWYocj10LmNhbGwoZVtpXSxpLGVbaV0pLHI9PT0hMSlicmVhaztyZXR1cm4gZX0sdHJpbTpiJiYhYi5jYWxsKCJcdWZlZmZcdTAwYTAiKT9mdW5jdGlvbihlKXtyZXR1cm4gbnVsbD09ZT8iIjpiLmNhbGwoZSl9OmZ1bmN0aW9uKGUpe3JldHVybiBudWxsPT1lPyIiOihlKyIiKS5yZXBsYWNlKEMsIiIpfSxtYWtlQXJyYXk6ZnVuY3Rpb24oZSx0KXt2YXIgbj10fHxbXTtyZXR1cm4gbnVsbCE9ZSYmKE0oT2JqZWN0KGUpKT94Lm1lcmdlKG4sInN0cmluZyI9PXR5cGVvZiBlP1tlXTplKTpoLmNhbGwobixlKSksbn0saW5BcnJheTpmdW5jdGlvbihlLHQsbil7dmFyIHI7aWYodCl7aWYobSlyZXR1cm4gbS5jYWxsKHQsZSxuKTtmb3Iocj10Lmxlbmd0aCxuPW4/MD5uP01hdGgubWF4KDAscituKTpuOjA7cj5uO24rKylpZihuIGluIHQmJnRbbl09PT1lKXJldHVybiBufXJldHVybi0xfSxtZXJnZTpmdW5jdGlvbihlLG4pe3ZhciByPW4ubGVuZ3RoLGk9ZS5sZW5ndGgsbz0wO2lmKCJudW1iZXIiPT10eXBlb2Ygcilmb3IoO3I+bztvKyspZVtpKytdPW5bb107ZWxzZSB3aGlsZShuW29dIT09dCllW2krK109bltvKytdO3JldHVybiBlLmxlbmd0aD1pLGV9LGdyZXA6ZnVuY3Rpb24oZSx0LG4pe3ZhciByLGk9W10sbz0wLGE9ZS5sZW5ndGg7Zm9yKG49ISFuO2E+bztvKyspcj0hIXQoZVtvXSxvKSxuIT09ciYmaS5wdXNoKGVbb10pO3JldHVybiBpfSxtYXA6ZnVuY3Rpb24oZSx0LG4pe3ZhciByLGk9MCxvPWUubGVuZ3RoLGE9TShlKSxzPVtdO2lmKGEpZm9yKDtvPmk7aSsrKXI9dChlW2ldLGksbiksbnVsbCE9ciYmKHNbcy5sZW5ndGhdPXIpO2Vsc2UgZm9yKGkgaW4gZSlyPXQoZVtpXSxpLG4pLG51bGwhPXImJihzW3MubGVuZ3RoXT1yKTtyZXR1cm4gZC5hcHBseShbXSxzKX0sZ3VpZDoxLHByb3h5OmZ1bmN0aW9uKGUsbil7dmFyIHIsaSxvO3JldHVybiJzdHJpbmciPT10eXBlb2YgbiYmKG89ZVtuXSxuPWUsZT1vKSx4LmlzRnVuY3Rpb24oZSk/KHI9Zy5jYWxsKGFyZ3VtZW50cywyKSxpPWZ1bmN0aW9uKCl7cmV0dXJuIGUuYXBwbHkobnx8dGhpcyxyLmNvbmNhdChnLmNhbGwoYXJndW1lbnRzKSkpfSxpLmd1aWQ9ZS5ndWlkPWUuZ3VpZHx8eC5ndWlkKyssaSk6dH0sYWNjZXNzOmZ1bmN0aW9uKGUsbixyLGksbyxhLHMpe3ZhciBsPTAsdT1lLmxlbmd0aCxjPW51bGw9PXI7aWYoIm9iamVjdCI9PT14LnR5cGUocikpe289ITA7Zm9yKGwgaW4gcil4LmFjY2VzcyhlLG4sbCxyW2xdLCEwLGEscyl9ZWxzZSBpZihpIT09dCYmKG89ITAseC5pc0Z1bmN0aW9uKGkpfHwocz0hMCksYyYmKHM/KG4uY2FsbChlLGkpLG49bnVsbCk6KGM9bixuPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gYy5jYWxsKHgoZSksbil9KSksbikpZm9yKDt1Pmw7bCsrKW4oZVtsXSxyLHM/aTppLmNhbGwoZVtsXSxsLG4oZVtsXSxyKSkpO3JldHVybiBvP2U6Yz9uLmNhbGwoZSk6dT9uKGVbMF0scik6YX0sbm93OmZ1bmN0aW9uKCl7cmV0dXJuKG5ldyBEYXRlKS5nZXRUaW1lKCl9LHN3YXA6ZnVuY3Rpb24oZSx0LG4scil7dmFyIGksbyxhPXt9O2ZvcihvIGluIHQpYVtvXT1lLnN0eWxlW29dLGUuc3R5bGVbb109dFtvXTtpPW4uYXBwbHkoZSxyfHxbXSk7Zm9yKG8gaW4gdCllLnN0eWxlW29dPWFbb107cmV0dXJuIGl9fSkseC5yZWFkeS5wcm9taXNlPWZ1bmN0aW9uKHQpe2lmKCFuKWlmKG49eC5EZWZlcnJlZCgpLCJjb21wbGV0ZSI9PT1hLnJlYWR5U3RhdGUpc2V0VGltZW91dCh4LnJlYWR5KTtlbHNlIGlmKGEuYWRkRXZlbnRMaXN0ZW5lcilhLmFkZEV2ZW50TGlzdGVuZXIoIkRPTUNvbnRlbnRMb2FkZWQiLHEsITEpLGUuYWRkRXZlbnRMaXN0ZW5lcigibG9hZCIscSwhMSk7ZWxzZXthLmF0dGFjaEV2ZW50KCJvbnJlYWR5c3RhdGVjaGFuZ2UiLHEpLGUuYXR0YWNoRXZlbnQoIm9ubG9hZCIscSk7dmFyIHI9ITE7dHJ5e3I9bnVsbD09ZS5mcmFtZUVsZW1lbnQmJmEuZG9jdW1lbnRFbGVtZW50fWNhdGNoKGkpe31yJiZyLmRvU2Nyb2xsJiZmdW5jdGlvbiBvKCl7aWYoIXguaXNSZWFkeSl7dHJ5e3IuZG9TY3JvbGwoImxlZnQiKX1jYXRjaChlKXtyZXR1cm4gc2V0VGltZW91dChvLDUwKX1fKCkseC5yZWFkeSgpfX0oKX1yZXR1cm4gbi5wcm9taXNlKHQpfSx4LmVhY2goIkJvb2xlYW4gTnVtYmVyIFN0cmluZyBGdW5jdGlvbiBBcnJheSBEYXRlIFJlZ0V4cCBPYmplY3QgRXJyb3IiLnNwbGl0KCIgIiksZnVuY3Rpb24oZSx0KXtjWyJbb2JqZWN0ICIrdCsiXSJdPXQudG9Mb3dlckNhc2UoKX0pO2Z1bmN0aW9uIE0oZSl7dmFyIHQ9ZS5sZW5ndGgsbj14LnR5cGUoZSk7cmV0dXJuIHguaXNXaW5kb3coZSk/ITE6MT09PWUubm9kZVR5cGUmJnQ/ITA6ImFycmF5Ij09PW58fCJmdW5jdGlvbiIhPT1uJiYoMD09PXR8fCJudW1iZXIiPT10eXBlb2YgdCYmdD4wJiZ0LTEgaW4gZSl9cj14KGEpLGZ1bmN0aW9uKGUsdCl7dmFyIG4scixpLG8sYSxzLGwsdSxjLHAsZixkLGgsZyxtLHksdixiPSJzaXp6bGUiKy1uZXcgRGF0ZSx3PWUuZG9jdW1lbnQsVD0wLEM9MCxOPXN0KCksaz1zdCgpLEU9c3QoKSxTPSExLEE9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZT09PXQ/KFM9ITAsMCk6MH0saj10eXBlb2YgdCxEPTE8PDMxLEw9e30uaGFzT3duUHJvcGVydHksSD1bXSxxPUgucG9wLF89SC5wdXNoLE09SC5wdXNoLE89SC5zbGljZSxGPUguaW5kZXhPZnx8ZnVuY3Rpb24oZSl7dmFyIHQ9MCxuPXRoaXMubGVuZ3RoO2Zvcig7bj50O3QrKylpZih0aGlzW3RdPT09ZSlyZXR1cm4gdDtyZXR1cm4tMX0sQj0iY2hlY2tlZHxzZWxlY3RlZHxhc3luY3xhdXRvZm9jdXN8YXV0b3BsYXl8Y29udHJvbHN8ZGVmZXJ8ZGlzYWJsZWR8aGlkZGVufGlzbWFwfGxvb3B8bXVsdGlwbGV8b3BlbnxyZWFkb25seXxyZXF1aXJlZHxzY29wZWQiLFA9IltcXHgyMFxcdFxcclxcblxcZl0iLFI9Iig/OlxcXFwufFtcXHctXXxbXlxceDAwLVxceGEwXSkrIixXPVIucmVwbGFjZSgidyIsIncjIiksJD0iXFxbIitQKyIqKCIrUisiKSIrUCsiKig/OihbKl4kfCF+XT89KSIrUCsiKig/OihbJ1wiXSkoKD86XFxcXC58W15cXFxcXSkqPylcXDN8KCIrVysiKXwpfCkiK1ArIipcXF0iLEk9IjooIitSKyIpKD86XFwoKChbJ1wiXSkoKD86XFxcXC58W15cXFxcXSkqPylcXDN8KCg/OlxcXFwufFteXFxcXCgpW1xcXV18IiskLnJlcGxhY2UoMyw4KSsiKSopfC4qKVxcKXwpIix6PVJlZ0V4cCgiXiIrUCsiK3woKD86XnxbXlxcXFxdKSg/OlxcXFwuKSopIitQKyIrJCIsImciKSxYPVJlZ0V4cCgiXiIrUCsiKiwiK1ArIioiKSxVPVJlZ0V4cCgiXiIrUCsiKihbPit+XXwiK1ArIikiK1ArIioiKSxWPVJlZ0V4cChQKyIqWyt+XSIpLFk9UmVnRXhwKCI9IitQKyIqKFteXFxdJ1wiXSopIitQKyIqXFxdIiwiZyIpLEo9UmVnRXhwKEkpLEc9UmVnRXhwKCJeIitXKyIkIiksUT17SUQ6UmVnRXhwKCJeIygiK1IrIikiKSxDTEFTUzpSZWdFeHAoIl5cXC4oIitSKyIpIiksVEFHOlJlZ0V4cCgiXigiK1IucmVwbGFjZSgidyIsIncqIikrIikiKSxBVFRSOlJlZ0V4cCgiXiIrJCksUFNFVURPOlJlZ0V4cCgiXiIrSSksQ0hJTEQ6UmVnRXhwKCJeOihvbmx5fGZpcnN0fGxhc3R8bnRofG50aC1sYXN0KS0oY2hpbGR8b2YtdHlwZSkoPzpcXCgiK1ArIiooZXZlbnxvZGR8KChbKy1dfCkoXFxkKilufCkiK1ArIiooPzooWystXXwpIitQKyIqKFxcZCspfCkpIitQKyIqXFwpfCkiLCJpIiksYm9vbDpSZWdFeHAoIl4oPzoiK0IrIikkIiwiaSIpLG5lZWRzQ29udGV4dDpSZWdFeHAoIl4iK1ArIipbPit+XXw6KGV2ZW58b2RkfGVxfGd0fGx0fG50aHxmaXJzdHxsYXN0KSg/OlxcKCIrUCsiKigoPzotXFxkKT9cXGQqKSIrUCsiKlxcKXwpKD89W14tXXwkKSIsImkiKX0sSz0vXltee10rXHtccypcW25hdGl2ZSBcdy8sWj0vXig/OiMoW1x3LV0rKXwoXHcrKXxcLihbXHctXSspKSQvLGV0PS9eKD86aW5wdXR8c2VsZWN0fHRleHRhcmVhfGJ1dHRvbikkL2ksdHQ9L15oXGQkL2ksbnQ9Lyd8XFwvZyxydD1SZWdFeHAoIlxcXFwoW1xcZGEtZl17MSw2fSIrUCsiP3woIitQKyIpfC4pIiwiaWciKSxpdD1mdW5jdGlvbihlLHQsbil7dmFyIHI9IjB4Iit0LTY1NTM2O3JldHVybiByIT09cnx8bj90OjA+cj9TdHJpbmcuZnJvbUNoYXJDb2RlKHIrNjU1MzYpOlN0cmluZy5mcm9tQ2hhckNvZGUoNTUyOTZ8cj4+MTAsNTYzMjB8MTAyMyZyKX07dHJ5e00uYXBwbHkoSD1PLmNhbGwody5jaGlsZE5vZGVzKSx3LmNoaWxkTm9kZXMpLEhbdy5jaGlsZE5vZGVzLmxlbmd0aF0ubm9kZVR5cGV9Y2F0Y2gob3Qpe009e2FwcGx5OkgubGVuZ3RoP2Z1bmN0aW9uKGUsdCl7Xy5hcHBseShlLE8uY2FsbCh0KSl9OmZ1bmN0aW9uKGUsdCl7dmFyIG49ZS5sZW5ndGgscj0wO3doaWxlKGVbbisrXT10W3IrK10pO2UubGVuZ3RoPW4tMX19fWZ1bmN0aW9uIGF0KGUsdCxuLGkpe3ZhciBvLGEscyxsLHUsYyxkLG0seSx4O2lmKCh0P3Qub3duZXJEb2N1bWVudHx8dDp3KSE9PWYmJnAodCksdD10fHxmLG49bnx8W10sIWV8fCJzdHJpbmciIT10eXBlb2YgZSlyZXR1cm4gbjtpZigxIT09KGw9dC5ub2RlVHlwZSkmJjkhPT1sKXJldHVybltdO2lmKGgmJiFpKXtpZihvPVouZXhlYyhlKSlpZihzPW9bMV0pe2lmKDk9PT1sKXtpZihhPXQuZ2V0RWxlbWVudEJ5SWQocyksIWF8fCFhLnBhcmVudE5vZGUpcmV0dXJuIG47aWYoYS5pZD09PXMpcmV0dXJuIG4ucHVzaChhKSxufWVsc2UgaWYodC5vd25lckRvY3VtZW50JiYoYT10Lm93bmVyRG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQocykpJiZ2KHQsYSkmJmEuaWQ9PT1zKXJldHVybiBuLnB1c2goYSksbn1lbHNle2lmKG9bMl0pcmV0dXJuIE0uYXBwbHkobix0LmdldEVsZW1lbnRzQnlUYWdOYW1lKGUpKSxuO2lmKChzPW9bM10pJiZyLmdldEVsZW1lbnRzQnlDbGFzc05hbWUmJnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSlyZXR1cm4gTS5hcHBseShuLHQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShzKSksbn1pZihyLnFzYSYmKCFnfHwhZy50ZXN0KGUpKSl7aWYobT1kPWIseT10LHg9OT09PWwmJmUsMT09PWwmJiJvYmplY3QiIT09dC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpKXtjPW10KGUpLChkPXQuZ2V0QXR0cmlidXRlKCJpZCIpKT9tPWQucmVwbGFjZShudCwiXFwkJiIpOnQuc2V0QXR0cmlidXRlKCJpZCIsbSksbT0iW2lkPSciK20rIiddICIsdT1jLmxlbmd0aDt3aGlsZSh1LS0pY1t1XT1tK3l0KGNbdV0pO3k9Vi50ZXN0KGUpJiZ0LnBhcmVudE5vZGV8fHQseD1jLmpvaW4oIiwiKX1pZih4KXRyeXtyZXR1cm4gTS5hcHBseShuLHkucXVlcnlTZWxlY3RvckFsbCh4KSksbn1jYXRjaChUKXt9ZmluYWxseXtkfHx0LnJlbW92ZUF0dHJpYnV0ZSgiaWQiKX19fXJldHVybiBrdChlLnJlcGxhY2UoeiwiJDEiKSx0LG4saSl9ZnVuY3Rpb24gc3QoKXt2YXIgZT1bXTtmdW5jdGlvbiB0KG4scil7cmV0dXJuIGUucHVzaChuKz0iICIpPm8uY2FjaGVMZW5ndGgmJmRlbGV0ZSB0W2Uuc2hpZnQoKV0sdFtuXT1yfXJldHVybiB0fWZ1bmN0aW9uIGx0KGUpe3JldHVybiBlW2JdPSEwLGV9ZnVuY3Rpb24gdXQoZSl7dmFyIHQ9Zi5jcmVhdGVFbGVtZW50KCJkaXYiKTt0cnl7cmV0dXJuISFlKHQpfWNhdGNoKG4pe3JldHVybiExfWZpbmFsbHl7dC5wYXJlbnROb2RlJiZ0LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodCksdD1udWxsfX1mdW5jdGlvbiBjdChlLHQpe3ZhciBuPWUuc3BsaXQoInwiKSxyPWUubGVuZ3RoO3doaWxlKHItLSlvLmF0dHJIYW5kbGVbbltyXV09dH1mdW5jdGlvbiBwdChlLHQpe3ZhciBuPXQmJmUscj1uJiYxPT09ZS5ub2RlVHlwZSYmMT09PXQubm9kZVR5cGUmJih+dC5zb3VyY2VJbmRleHx8RCktKH5lLnNvdXJjZUluZGV4fHxEKTtpZihyKXJldHVybiByO2lmKG4pd2hpbGUobj1uLm5leHRTaWJsaW5nKWlmKG49PT10KXJldHVybi0xO3JldHVybiBlPzE6LTF9ZnVuY3Rpb24gZnQoZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3ZhciBuPXQubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtyZXR1cm4iaW5wdXQiPT09biYmdC50eXBlPT09ZX19ZnVuY3Rpb24gZHQoZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3ZhciBuPXQubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtyZXR1cm4oImlucHV0Ij09PW58fCJidXR0b24iPT09bikmJnQudHlwZT09PWV9fWZ1bmN0aW9uIGh0KGUpe3JldHVybiBsdChmdW5jdGlvbih0KXtyZXR1cm4gdD0rdCxsdChmdW5jdGlvbihuLHIpe3ZhciBpLG89ZShbXSxuLmxlbmd0aCx0KSxhPW8ubGVuZ3RoO3doaWxlKGEtLSluW2k9b1thXV0mJihuW2ldPSEocltpXT1uW2ldKSl9KX0pfXM9YXQuaXNYTUw9ZnVuY3Rpb24oZSl7dmFyIHQ9ZSYmKGUub3duZXJEb2N1bWVudHx8ZSkuZG9jdW1lbnRFbGVtZW50O3JldHVybiB0PyJIVE1MIiE9PXQubm9kZU5hbWU6ITF9LHI9YXQuc3VwcG9ydD17fSxwPWF0LnNldERvY3VtZW50PWZ1bmN0aW9uKGUpe3ZhciBuPWU/ZS5vd25lckRvY3VtZW50fHxlOncsaT1uLmRlZmF1bHRWaWV3O3JldHVybiBuIT09ZiYmOT09PW4ubm9kZVR5cGUmJm4uZG9jdW1lbnRFbGVtZW50PyhmPW4sZD1uLmRvY3VtZW50RWxlbWVudCxoPSFzKG4pLGkmJmkuYXR0YWNoRXZlbnQmJmkhPT1pLnRvcCYmaS5hdHRhY2hFdmVudCgib25iZWZvcmV1bmxvYWQiLGZ1bmN0aW9uKCl7cCgpfSksci5hdHRyaWJ1dGVzPXV0KGZ1bmN0aW9uKGUpe3JldHVybiBlLmNsYXNzTmFtZT0iaSIsIWUuZ2V0QXR0cmlidXRlKCJjbGFzc05hbWUiKX0pLHIuZ2V0RWxlbWVudHNCeVRhZ05hbWU9dXQoZnVuY3Rpb24oZSl7cmV0dXJuIGUuYXBwZW5kQ2hpbGQobi5jcmVhdGVDb21tZW50KCIiKSksIWUuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIioiKS5sZW5ndGh9KSxyLmdldEVsZW1lbnRzQnlDbGFzc05hbWU9dXQoZnVuY3Rpb24oZSl7cmV0dXJuIGUuaW5uZXJIVE1MPSI8ZGl2IGNsYXNzPSdhJz48L2Rpdj48ZGl2IGNsYXNzPSdhIGknPjwvZGl2PiIsZS5maXJzdENoaWxkLmNsYXNzTmFtZT0iaSIsMj09PWUuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgiaSIpLmxlbmd0aH0pLHIuZ2V0QnlJZD11dChmdW5jdGlvbihlKXtyZXR1cm4gZC5hcHBlbmRDaGlsZChlKS5pZD1iLCFuLmdldEVsZW1lbnRzQnlOYW1lfHwhbi5nZXRFbGVtZW50c0J5TmFtZShiKS5sZW5ndGh9KSxyLmdldEJ5SWQ/KG8uZmluZC5JRD1mdW5jdGlvbihlLHQpe2lmKHR5cGVvZiB0LmdldEVsZW1lbnRCeUlkIT09aiYmaCl7dmFyIG49dC5nZXRFbGVtZW50QnlJZChlKTtyZXR1cm4gbiYmbi5wYXJlbnROb2RlP1tuXTpbXX19LG8uZmlsdGVyLklEPWZ1bmN0aW9uKGUpe3ZhciB0PWUucmVwbGFjZShydCxpdCk7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiBlLmdldEF0dHJpYnV0ZSgiaWQiKT09PXR9fSk6KGRlbGV0ZSBvLmZpbmQuSUQsby5maWx0ZXIuSUQ9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5yZXBsYWNlKHJ0LGl0KTtyZXR1cm4gZnVuY3Rpb24oZSl7dmFyIG49dHlwZW9mIGUuZ2V0QXR0cmlidXRlTm9kZSE9PWomJmUuZ2V0QXR0cmlidXRlTm9kZSgiaWQiKTtyZXR1cm4gbiYmbi52YWx1ZT09PXR9fSksby5maW5kLlRBRz1yLmdldEVsZW1lbnRzQnlUYWdOYW1lP2Z1bmN0aW9uKGUsbil7cmV0dXJuIHR5cGVvZiBuLmdldEVsZW1lbnRzQnlUYWdOYW1lIT09aj9uLmdldEVsZW1lbnRzQnlUYWdOYW1lKGUpOnR9OmZ1bmN0aW9uKGUsdCl7dmFyIG4scj1bXSxpPTAsbz10LmdldEVsZW1lbnRzQnlUYWdOYW1lKGUpO2lmKCIqIj09PWUpe3doaWxlKG49b1tpKytdKTE9PT1uLm5vZGVUeXBlJiZyLnB1c2gobik7cmV0dXJuIHJ9cmV0dXJuIG99LG8uZmluZC5DTEFTUz1yLmdldEVsZW1lbnRzQnlDbGFzc05hbWUmJmZ1bmN0aW9uKGUsbil7cmV0dXJuIHR5cGVvZiBuLmdldEVsZW1lbnRzQnlDbGFzc05hbWUhPT1qJiZoP24uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShlKTp0fSxtPVtdLGc9W10sKHIucXNhPUsudGVzdChuLnF1ZXJ5U2VsZWN0b3JBbGwpKSYmKHV0KGZ1bmN0aW9uKGUpe2UuaW5uZXJIVE1MPSI8c2VsZWN0PjxvcHRpb24gc2VsZWN0ZWQ9Jyc+PC9vcHRpb24+PC9zZWxlY3Q+IixlLnF1ZXJ5U2VsZWN0b3JBbGwoIltzZWxlY3RlZF0iKS5sZW5ndGh8fGcucHVzaCgiXFxbIitQKyIqKD86dmFsdWV8IitCKyIpIiksZS5xdWVyeVNlbGVjdG9yQWxsKCI6Y2hlY2tlZCIpLmxlbmd0aHx8Zy5wdXNoKCI6Y2hlY2tlZCIpfSksdXQoZnVuY3Rpb24oZSl7dmFyIHQ9bi5jcmVhdGVFbGVtZW50KCJpbnB1dCIpO3Quc2V0QXR0cmlidXRlKCJ0eXBlIiwiaGlkZGVuIiksZS5hcHBlbmRDaGlsZCh0KS5zZXRBdHRyaWJ1dGUoInQiLCIiKSxlLnF1ZXJ5U2VsZWN0b3JBbGwoIlt0Xj0nJ10iKS5sZW5ndGgmJmcucHVzaCgiWypeJF09IitQKyIqKD86Jyd8XCJcIikiKSxlLnF1ZXJ5U2VsZWN0b3JBbGwoIjplbmFibGVkIikubGVuZ3RofHxnLnB1c2goIjplbmFibGVkIiwiOmRpc2FibGVkIiksZS5xdWVyeVNlbGVjdG9yQWxsKCIqLDp4IiksZy5wdXNoKCIsLio6Iil9KSksKHIubWF0Y2hlc1NlbGVjdG9yPUsudGVzdCh5PWQud2Via2l0TWF0Y2hlc1NlbGVjdG9yfHxkLm1vek1hdGNoZXNTZWxlY3Rvcnx8ZC5vTWF0Y2hlc1NlbGVjdG9yfHxkLm1zTWF0Y2hlc1NlbGVjdG9yKSkmJnV0KGZ1bmN0aW9uKGUpe3IuZGlzY29ubmVjdGVkTWF0Y2g9eS5jYWxsKGUsImRpdiIpLHkuY2FsbChlLCJbcyE9JyddOngiKSxtLnB1c2goIiE9IixJKX0pLGc9Zy5sZW5ndGgmJlJlZ0V4cChnLmpvaW4oInwiKSksbT1tLmxlbmd0aCYmUmVnRXhwKG0uam9pbigifCIpKSx2PUsudGVzdChkLmNvbnRhaW5zKXx8ZC5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbj9mdW5jdGlvbihlLHQpe3ZhciBuPTk9PT1lLm5vZGVUeXBlP2UuZG9jdW1lbnRFbGVtZW50OmUscj10JiZ0LnBhcmVudE5vZGU7cmV0dXJuIGU9PT1yfHwhKCFyfHwxIT09ci5ub2RlVHlwZXx8IShuLmNvbnRhaW5zP24uY29udGFpbnMocik6ZS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbiYmMTYmZS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbihyKSkpfTpmdW5jdGlvbihlLHQpe2lmKHQpd2hpbGUodD10LnBhcmVudE5vZGUpaWYodD09PWUpcmV0dXJuITA7cmV0dXJuITF9LEE9ZC5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbj9mdW5jdGlvbihlLHQpe2lmKGU9PT10KXJldHVybiBTPSEwLDA7dmFyIGk9dC5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbiYmZS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbiYmZS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbih0KTtyZXR1cm4gaT8xJml8fCFyLnNvcnREZXRhY2hlZCYmdC5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbihlKT09PWk/ZT09PW58fHYodyxlKT8tMTp0PT09bnx8dih3LHQpPzE6Yz9GLmNhbGwoYyxlKS1GLmNhbGwoYyx0KTowOjQmaT8tMToxOmUuY29tcGFyZURvY3VtZW50UG9zaXRpb24/LTE6MX06ZnVuY3Rpb24oZSx0KXt2YXIgcixpPTAsbz1lLnBhcmVudE5vZGUsYT10LnBhcmVudE5vZGUscz1bZV0sbD1bdF07aWYoZT09PXQpcmV0dXJuIFM9ITAsMDtpZighb3x8IWEpcmV0dXJuIGU9PT1uPy0xOnQ9PT1uPzE6bz8tMTphPzE6Yz9GLmNhbGwoYyxlKS1GLmNhbGwoYyx0KTowO2lmKG89PT1hKXJldHVybiBwdChlLHQpO3I9ZTt3aGlsZShyPXIucGFyZW50Tm9kZSlzLnVuc2hpZnQocik7cj10O3doaWxlKHI9ci5wYXJlbnROb2RlKWwudW5zaGlmdChyKTt3aGlsZShzW2ldPT09bFtpXSlpKys7cmV0dXJuIGk/cHQoc1tpXSxsW2ldKTpzW2ldPT09dz8tMTpsW2ldPT09dz8xOjB9LG4pOmZ9LGF0Lm1hdGNoZXM9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gYXQoZSxudWxsLG51bGwsdCl9LGF0Lm1hdGNoZXNTZWxlY3Rvcj1mdW5jdGlvbihlLHQpe2lmKChlLm93bmVyRG9jdW1lbnR8fGUpIT09ZiYmcChlKSx0PXQucmVwbGFjZShZLCI9JyQxJ10iKSwhKCFyLm1hdGNoZXNTZWxlY3Rvcnx8IWh8fG0mJm0udGVzdCh0KXx8ZyYmZy50ZXN0KHQpKSl0cnl7dmFyIG49eS5jYWxsKGUsdCk7aWYobnx8ci5kaXNjb25uZWN0ZWRNYXRjaHx8ZS5kb2N1bWVudCYmMTEhPT1lLmRvY3VtZW50Lm5vZGVUeXBlKXJldHVybiBufWNhdGNoKGkpe31yZXR1cm4gYXQodCxmLG51bGwsW2VdKS5sZW5ndGg+MH0sYXQuY29udGFpbnM9ZnVuY3Rpb24oZSx0KXtyZXR1cm4oZS5vd25lckRvY3VtZW50fHxlKSE9PWYmJnAoZSksdihlLHQpfSxhdC5hdHRyPWZ1bmN0aW9uKGUsbil7KGUub3duZXJEb2N1bWVudHx8ZSkhPT1mJiZwKGUpO3ZhciBpPW8uYXR0ckhhbmRsZVtuLnRvTG93ZXJDYXNlKCldLGE9aSYmTC5jYWxsKG8uYXR0ckhhbmRsZSxuLnRvTG93ZXJDYXNlKCkpP2koZSxuLCFoKTp0O3JldHVybiBhPT09dD9yLmF0dHJpYnV0ZXN8fCFoP2UuZ2V0QXR0cmlidXRlKG4pOihhPWUuZ2V0QXR0cmlidXRlTm9kZShuKSkmJmEuc3BlY2lmaWVkP2EudmFsdWU6bnVsbDphfSxhdC5lcnJvcj1mdW5jdGlvbihlKXt0aHJvdyBFcnJvcigiU3ludGF4IGVycm9yLCB1bnJlY29nbml6ZWQgZXhwcmVzc2lvbjogIitlKX0sYXQudW5pcXVlU29ydD1mdW5jdGlvbihlKXt2YXIgdCxuPVtdLGk9MCxvPTA7aWYoUz0hci5kZXRlY3REdXBsaWNhdGVzLGM9IXIuc29ydFN0YWJsZSYmZS5zbGljZSgwKSxlLnNvcnQoQSksUyl7d2hpbGUodD1lW28rK10pdD09PWVbb10mJihpPW4ucHVzaChvKSk7d2hpbGUoaS0tKWUuc3BsaWNlKG5baV0sMSl9cmV0dXJuIGV9LGE9YXQuZ2V0VGV4dD1mdW5jdGlvbihlKXt2YXIgdCxuPSIiLHI9MCxpPWUubm9kZVR5cGU7aWYoaSl7aWYoMT09PWl8fDk9PT1pfHwxMT09PWkpe2lmKCJzdHJpbmciPT10eXBlb2YgZS50ZXh0Q29udGVudClyZXR1cm4gZS50ZXh0Q29udGVudDtmb3IoZT1lLmZpcnN0Q2hpbGQ7ZTtlPWUubmV4dFNpYmxpbmcpbis9YShlKX1lbHNlIGlmKDM9PT1pfHw0PT09aSlyZXR1cm4gZS5ub2RlVmFsdWV9ZWxzZSBmb3IoO3Q9ZVtyXTtyKyspbis9YSh0KTtyZXR1cm4gbn0sbz1hdC5zZWxlY3RvcnM9e2NhY2hlTGVuZ3RoOjUwLGNyZWF0ZVBzZXVkbzpsdCxtYXRjaDpRLGF0dHJIYW5kbGU6e30sZmluZDp7fSxyZWxhdGl2ZTp7Ij4iOntkaXI6InBhcmVudE5vZGUiLGZpcnN0OiEwfSwiICI6e2RpcjoicGFyZW50Tm9kZSJ9LCIrIjp7ZGlyOiJwcmV2aW91c1NpYmxpbmciLGZpcnN0OiEwfSwifiI6e2RpcjoicHJldmlvdXNTaWJsaW5nIn19LHByZUZpbHRlcjp7QVRUUjpmdW5jdGlvbihlKXtyZXR1cm4gZVsxXT1lWzFdLnJlcGxhY2UocnQsaXQpLGVbM109KGVbNF18fGVbNV18fCIiKS5yZXBsYWNlKHJ0LGl0KSwifj0iPT09ZVsyXSYmKGVbM109IiAiK2VbM10rIiAiKSxlLnNsaWNlKDAsNCl9LENISUxEOmZ1bmN0aW9uKGUpe3JldHVybiBlWzFdPWVbMV0udG9Mb3dlckNhc2UoKSwibnRoIj09PWVbMV0uc2xpY2UoMCwzKT8oZVszXXx8YXQuZXJyb3IoZVswXSksZVs0XT0rKGVbNF0/ZVs1XSsoZVs2XXx8MSk6MiooImV2ZW4iPT09ZVszXXx8Im9kZCI9PT1lWzNdKSksZVs1XT0rKGVbN10rZVs4XXx8Im9kZCI9PT1lWzNdKSk6ZVszXSYmYXQuZXJyb3IoZVswXSksZX0sUFNFVURPOmZ1bmN0aW9uKGUpe3ZhciBuLHI9IWVbNV0mJmVbMl07cmV0dXJuIFEuQ0hJTEQudGVzdChlWzBdKT9udWxsOihlWzNdJiZlWzRdIT09dD9lWzJdPWVbNF06ciYmSi50ZXN0KHIpJiYobj1tdChyLCEwKSkmJihuPXIuaW5kZXhPZigiKSIsci5sZW5ndGgtbiktci5sZW5ndGgpJiYoZVswXT1lWzBdLnNsaWNlKDAsbiksZVsyXT1yLnNsaWNlKDAsbikpLGUuc2xpY2UoMCwzKSl9fSxmaWx0ZXI6e1RBRzpmdW5jdGlvbihlKXt2YXIgdD1lLnJlcGxhY2UocnQsaXQpLnRvTG93ZXJDYXNlKCk7cmV0dXJuIioiPT09ZT9mdW5jdGlvbigpe3JldHVybiEwfTpmdW5jdGlvbihlKXtyZXR1cm4gZS5ub2RlTmFtZSYmZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpPT09dH19LENMQVNTOmZ1bmN0aW9uKGUpe3ZhciB0PU5bZSsiICJdO3JldHVybiB0fHwodD1SZWdFeHAoIihefCIrUCsiKSIrZSsiKCIrUCsifCQpIikpJiZOKGUsZnVuY3Rpb24oZSl7cmV0dXJuIHQudGVzdCgic3RyaW5nIj09dHlwZW9mIGUuY2xhc3NOYW1lJiZlLmNsYXNzTmFtZXx8dHlwZW9mIGUuZ2V0QXR0cmlidXRlIT09aiYmZS5nZXRBdHRyaWJ1dGUoImNsYXNzIil8fCIiKX0pfSxBVFRSOmZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gZnVuY3Rpb24ocil7dmFyIGk9YXQuYXR0cihyLGUpO3JldHVybiBudWxsPT1pPyIhPSI9PT10OnQ/KGkrPSIiLCI9Ij09PXQ/aT09PW46IiE9Ij09PXQ/aSE9PW46Il49Ij09PXQ/biYmMD09PWkuaW5kZXhPZihuKToiKj0iPT09dD9uJiZpLmluZGV4T2Yobik+LTE6IiQ9Ij09PXQ/biYmaS5zbGljZSgtbi5sZW5ndGgpPT09bjoifj0iPT09dD8oIiAiK2krIiAiKS5pbmRleE9mKG4pPi0xOiJ8PSI9PT10P2k9PT1ufHxpLnNsaWNlKDAsbi5sZW5ndGgrMSk9PT1uKyItIjohMSk6ITB9fSxDSElMRDpmdW5jdGlvbihlLHQsbixyLGkpe3ZhciBvPSJudGgiIT09ZS5zbGljZSgwLDMpLGE9Imxhc3QiIT09ZS5zbGljZSgtNCkscz0ib2YtdHlwZSI9PT10O3JldHVybiAxPT09ciYmMD09PWk/ZnVuY3Rpb24oZSl7cmV0dXJuISFlLnBhcmVudE5vZGV9OmZ1bmN0aW9uKHQsbixsKXt2YXIgdSxjLHAsZixkLGgsZz1vIT09YT8ibmV4dFNpYmxpbmciOiJwcmV2aW91c1NpYmxpbmciLG09dC5wYXJlbnROb2RlLHk9cyYmdC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpLHY9IWwmJiFzO2lmKG0pe2lmKG8pe3doaWxlKGcpe3A9dDt3aGlsZShwPXBbZ10paWYocz9wLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk9PT15OjE9PT1wLm5vZGVUeXBlKXJldHVybiExO2g9Zz0ib25seSI9PT1lJiYhaCYmIm5leHRTaWJsaW5nIn1yZXR1cm4hMH1pZihoPVthP20uZmlyc3RDaGlsZDptLmxhc3RDaGlsZF0sYSYmdil7Yz1tW2JdfHwobVtiXT17fSksdT1jW2VdfHxbXSxkPXVbMF09PT1UJiZ1WzFdLGY9dVswXT09PVQmJnVbMl0scD1kJiZtLmNoaWxkTm9kZXNbZF07d2hpbGUocD0rK2QmJnAmJnBbZ118fChmPWQ9MCl8fGgucG9wKCkpaWYoMT09PXAubm9kZVR5cGUmJisrZiYmcD09PXQpe2NbZV09W1QsZCxmXTticmVha319ZWxzZSBpZih2JiYodT0odFtiXXx8KHRbYl09e30pKVtlXSkmJnVbMF09PT1UKWY9dVsxXTtlbHNlIHdoaWxlKHA9KytkJiZwJiZwW2ddfHwoZj1kPTApfHxoLnBvcCgpKWlmKChzP3Aubm9kZU5hbWUudG9Mb3dlckNhc2UoKT09PXk6MT09PXAubm9kZVR5cGUpJiYrK2YmJih2JiYoKHBbYl18fChwW2JdPXt9KSlbZV09W1QsZl0pLHA9PT10KSlicmVhaztyZXR1cm4gZi09aSxmPT09cnx8MD09PWYlciYmZi9yPj0wfX19LFBTRVVETzpmdW5jdGlvbihlLHQpe3ZhciBuLHI9by5wc2V1ZG9zW2VdfHxvLnNldEZpbHRlcnNbZS50b0xvd2VyQ2FzZSgpXXx8YXQuZXJyb3IoInVuc3VwcG9ydGVkIHBzZXVkbzogIitlKTtyZXR1cm4gcltiXT9yKHQpOnIubGVuZ3RoPjE/KG49W2UsZSwiIix0XSxvLnNldEZpbHRlcnMuaGFzT3duUHJvcGVydHkoZS50b0xvd2VyQ2FzZSgpKT9sdChmdW5jdGlvbihlLG4pe3ZhciBpLG89cihlLHQpLGE9by5sZW5ndGg7d2hpbGUoYS0tKWk9Ri5jYWxsKGUsb1thXSksZVtpXT0hKG5baV09b1thXSl9KTpmdW5jdGlvbihlKXtyZXR1cm4gcihlLDAsbil9KTpyfX0scHNldWRvczp7bm90Omx0KGZ1bmN0aW9uKGUpe3ZhciB0PVtdLG49W10scj1sKGUucmVwbGFjZSh6LCIkMSIpKTtyZXR1cm4gcltiXT9sdChmdW5jdGlvbihlLHQsbixpKXt2YXIgbyxhPXIoZSxudWxsLGksW10pLHM9ZS5sZW5ndGg7d2hpbGUocy0tKShvPWFbc10pJiYoZVtzXT0hKHRbc109bykpfSk6ZnVuY3Rpb24oZSxpLG8pe3JldHVybiB0WzBdPWUscih0LG51bGwsbyxuKSwhbi5wb3AoKX19KSxoYXM6bHQoZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBhdChlLHQpLmxlbmd0aD4wfX0pLGNvbnRhaW5zOmx0KGZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4odC50ZXh0Q29udGVudHx8dC5pbm5lclRleHR8fGEodCkpLmluZGV4T2YoZSk+LTF9fSksbGFuZzpsdChmdW5jdGlvbihlKXtyZXR1cm4gRy50ZXN0KGV8fCIiKXx8YXQuZXJyb3IoInVuc3VwcG9ydGVkIGxhbmc6ICIrZSksZT1lLnJlcGxhY2UocnQsaXQpLnRvTG93ZXJDYXNlKCksZnVuY3Rpb24odCl7dmFyIG47ZG8gaWYobj1oP3QubGFuZzp0LmdldEF0dHJpYnV0ZSgieG1sOmxhbmciKXx8dC5nZXRBdHRyaWJ1dGUoImxhbmciKSlyZXR1cm4gbj1uLnRvTG93ZXJDYXNlKCksbj09PWV8fDA9PT1uLmluZGV4T2YoZSsiLSIpO3doaWxlKCh0PXQucGFyZW50Tm9kZSkmJjE9PT10Lm5vZGVUeXBlKTtyZXR1cm4hMX19KSx0YXJnZXQ6ZnVuY3Rpb24odCl7dmFyIG49ZS5sb2NhdGlvbiYmZS5sb2NhdGlvbi5oYXNoO3JldHVybiBuJiZuLnNsaWNlKDEpPT09dC5pZH0scm9vdDpmdW5jdGlvbihlKXtyZXR1cm4gZT09PWR9LGZvY3VzOmZ1bmN0aW9uKGUpe3JldHVybiBlPT09Zi5hY3RpdmVFbGVtZW50JiYoIWYuaGFzRm9jdXN8fGYuaGFzRm9jdXMoKSkmJiEhKGUudHlwZXx8ZS5ocmVmfHx+ZS50YWJJbmRleCl9LGVuYWJsZWQ6ZnVuY3Rpb24oZSl7cmV0dXJuIGUuZGlzYWJsZWQ9PT0hMX0sZGlzYWJsZWQ6ZnVuY3Rpb24oZSl7cmV0dXJuIGUuZGlzYWJsZWQ9PT0hMH0sY2hlY2tlZDpmdW5jdGlvbihlKXt2YXIgdD1lLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7cmV0dXJuImlucHV0Ij09PXQmJiEhZS5jaGVja2VkfHwib3B0aW9uIj09PXQmJiEhZS5zZWxlY3RlZH0sc2VsZWN0ZWQ6ZnVuY3Rpb24oZSl7cmV0dXJuIGUucGFyZW50Tm9kZSYmZS5wYXJlbnROb2RlLnNlbGVjdGVkSW5kZXgsZS5zZWxlY3RlZD09PSEwfSxlbXB0eTpmdW5jdGlvbihlKXtmb3IoZT1lLmZpcnN0Q2hpbGQ7ZTtlPWUubmV4dFNpYmxpbmcpaWYoZS5ub2RlTmFtZT4iQCJ8fDM9PT1lLm5vZGVUeXBlfHw0PT09ZS5ub2RlVHlwZSlyZXR1cm4hMTtyZXR1cm4hMH0scGFyZW50OmZ1bmN0aW9uKGUpe3JldHVybiFvLnBzZXVkb3MuZW1wdHkoZSl9LGhlYWRlcjpmdW5jdGlvbihlKXtyZXR1cm4gdHQudGVzdChlLm5vZGVOYW1lKX0saW5wdXQ6ZnVuY3Rpb24oZSl7cmV0dXJuIGV0LnRlc3QoZS5ub2RlTmFtZSl9LGJ1dHRvbjpmdW5jdGlvbihlKXt2YXIgdD1lLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7cmV0dXJuImlucHV0Ij09PXQmJiJidXR0b24iPT09ZS50eXBlfHwiYnV0dG9uIj09PXR9LHRleHQ6ZnVuY3Rpb24oZSl7dmFyIHQ7cmV0dXJuImlucHV0Ij09PWUubm9kZU5hbWUudG9Mb3dlckNhc2UoKSYmInRleHQiPT09ZS50eXBlJiYobnVsbD09KHQ9ZS5nZXRBdHRyaWJ1dGUoInR5cGUiKSl8fHQudG9Mb3dlckNhc2UoKT09PWUudHlwZSl9LGZpcnN0Omh0KGZ1bmN0aW9uKCl7cmV0dXJuWzBdfSksbGFzdDpodChmdW5jdGlvbihlLHQpe3JldHVyblt0LTFdfSksZXE6aHQoZnVuY3Rpb24oZSx0LG4pe3JldHVyblswPm4/bit0Om5dfSksZXZlbjpodChmdW5jdGlvbihlLHQpe3ZhciBuPTA7Zm9yKDt0Pm47bis9MillLnB1c2gobik7cmV0dXJuIGV9KSxvZGQ6aHQoZnVuY3Rpb24oZSx0KXt2YXIgbj0xO2Zvcig7dD5uO24rPTIpZS5wdXNoKG4pO3JldHVybiBlfSksbHQ6aHQoZnVuY3Rpb24oZSx0LG4pe3ZhciByPTA+bj9uK3Q6bjtmb3IoOy0tcj49MDspZS5wdXNoKHIpO3JldHVybiBlfSksZ3Q6aHQoZnVuY3Rpb24oZSx0LG4pe3ZhciByPTA+bj9uK3Q6bjtmb3IoO3Q+KytyOyllLnB1c2gocik7cmV0dXJuIGV9KX19LG8ucHNldWRvcy5udGg9by5wc2V1ZG9zLmVxO2ZvcihuIGlue3JhZGlvOiEwLGNoZWNrYm94OiEwLGZpbGU6ITAscGFzc3dvcmQ6ITAsaW1hZ2U6ITB9KW8ucHNldWRvc1tuXT1mdChuKTtmb3IobiBpbntzdWJtaXQ6ITAscmVzZXQ6ITB9KW8ucHNldWRvc1tuXT1kdChuKTtmdW5jdGlvbiBndCgpe31ndC5wcm90b3R5cGU9by5maWx0ZXJzPW8ucHNldWRvcyxvLnNldEZpbHRlcnM9bmV3IGd0O2Z1bmN0aW9uIG10KGUsdCl7dmFyIG4scixpLGEscyxsLHUsYz1rW2UrIiAiXTtpZihjKXJldHVybiB0PzA6Yy5zbGljZSgwKTtzPWUsbD1bXSx1PW8ucHJlRmlsdGVyO3doaWxlKHMpeyghbnx8KHI9WC5leGVjKHMpKSkmJihyJiYocz1zLnNsaWNlKHJbMF0ubGVuZ3RoKXx8cyksbC5wdXNoKGk9W10pKSxuPSExLChyPVUuZXhlYyhzKSkmJihuPXIuc2hpZnQoKSxpLnB1c2goe3ZhbHVlOm4sdHlwZTpyWzBdLnJlcGxhY2UoeiwiICIpfSkscz1zLnNsaWNlKG4ubGVuZ3RoKSk7Zm9yKGEgaW4gby5maWx0ZXIpIShyPVFbYV0uZXhlYyhzKSl8fHVbYV0mJiEocj11W2FdKHIpKXx8KG49ci5zaGlmdCgpLGkucHVzaCh7dmFsdWU6bix0eXBlOmEsbWF0Y2hlczpyfSkscz1zLnNsaWNlKG4ubGVuZ3RoKSk7aWYoIW4pYnJlYWt9cmV0dXJuIHQ/cy5sZW5ndGg6cz9hdC5lcnJvcihlKTprKGUsbCkuc2xpY2UoMCl9ZnVuY3Rpb24geXQoZSl7dmFyIHQ9MCxuPWUubGVuZ3RoLHI9IiI7Zm9yKDtuPnQ7dCsrKXIrPWVbdF0udmFsdWU7cmV0dXJuIHJ9ZnVuY3Rpb24gdnQoZSx0LG4pe3ZhciByPXQuZGlyLG89biYmInBhcmVudE5vZGUiPT09cixhPUMrKztyZXR1cm4gdC5maXJzdD9mdW5jdGlvbih0LG4saSl7d2hpbGUodD10W3JdKWlmKDE9PT10Lm5vZGVUeXBlfHxvKXJldHVybiBlKHQsbixpKX06ZnVuY3Rpb24odCxuLHMpe3ZhciBsLHUsYyxwPVQrIiAiK2E7aWYocyl7d2hpbGUodD10W3JdKWlmKCgxPT09dC5ub2RlVHlwZXx8bykmJmUodCxuLHMpKXJldHVybiEwfWVsc2Ugd2hpbGUodD10W3JdKWlmKDE9PT10Lm5vZGVUeXBlfHxvKWlmKGM9dFtiXXx8KHRbYl09e30pLCh1PWNbcl0pJiZ1WzBdPT09cCl7aWYoKGw9dVsxXSk9PT0hMHx8bD09PWkpcmV0dXJuIGw9PT0hMH1lbHNlIGlmKHU9Y1tyXT1bcF0sdVsxXT1lKHQsbixzKXx8aSx1WzFdPT09ITApcmV0dXJuITB9fWZ1bmN0aW9uIGJ0KGUpe3JldHVybiBlLmxlbmd0aD4xP2Z1bmN0aW9uKHQsbixyKXt2YXIgaT1lLmxlbmd0aDt3aGlsZShpLS0paWYoIWVbaV0odCxuLHIpKXJldHVybiExO3JldHVybiEwfTplWzBdfWZ1bmN0aW9uIHh0KGUsdCxuLHIsaSl7dmFyIG8sYT1bXSxzPTAsbD1lLmxlbmd0aCx1PW51bGwhPXQ7Zm9yKDtsPnM7cysrKShvPWVbc10pJiYoIW58fG4obyxyLGkpKSYmKGEucHVzaChvKSx1JiZ0LnB1c2gocykpO3JldHVybiBhfWZ1bmN0aW9uIHd0KGUsdCxuLHIsaSxvKXtyZXR1cm4gciYmIXJbYl0mJihyPXd0KHIpKSxpJiYhaVtiXSYmKGk9d3QoaSxvKSksbHQoZnVuY3Rpb24obyxhLHMsbCl7dmFyIHUsYyxwLGY9W10sZD1bXSxoPWEubGVuZ3RoLGc9b3x8TnQodHx8IioiLHMubm9kZVR5cGU/W3NdOnMsW10pLG09IWV8fCFvJiZ0P2c6eHQoZyxmLGUscyxsKSx5PW4/aXx8KG8/ZTpofHxyKT9bXTphOm07aWYobiYmbihtLHkscyxsKSxyKXt1PXh0KHksZCkscih1LFtdLHMsbCksYz11Lmxlbmd0aDt3aGlsZShjLS0pKHA9dVtjXSkmJih5W2RbY11dPSEobVtkW2NdXT1wKSl9aWYobyl7aWYoaXx8ZSl7aWYoaSl7dT1bXSxjPXkubGVuZ3RoO3doaWxlKGMtLSkocD15W2NdKSYmdS5wdXNoKG1bY109cCk7aShudWxsLHk9W10sdSxsKX1jPXkubGVuZ3RoO3doaWxlKGMtLSkocD15W2NdKSYmKHU9aT9GLmNhbGwobyxwKTpmW2NdKT4tMSYmKG9bdV09IShhW3VdPXApKX19ZWxzZSB5PXh0KHk9PT1hP3kuc3BsaWNlKGgseS5sZW5ndGgpOnkpLGk/aShudWxsLGEseSxsKTpNLmFwcGx5KGEseSl9KX1mdW5jdGlvbiBUdChlKXt2YXIgdCxuLHIsaT1lLmxlbmd0aCxhPW8ucmVsYXRpdmVbZVswXS50eXBlXSxzPWF8fG8ucmVsYXRpdmVbIiAiXSxsPWE/MTowLGM9dnQoZnVuY3Rpb24oZSl7cmV0dXJuIGU9PT10fSxzLCEwKSxwPXZ0KGZ1bmN0aW9uKGUpe3JldHVybiBGLmNhbGwodCxlKT4tMX0scywhMCksZj1bZnVuY3Rpb24oZSxuLHIpe3JldHVybiFhJiYocnx8biE9PXUpfHwoKHQ9bikubm9kZVR5cGU/YyhlLG4scik6cChlLG4scikpfV07Zm9yKDtpPmw7bCsrKWlmKG49by5yZWxhdGl2ZVtlW2xdLnR5cGVdKWY9W3Z0KGJ0KGYpLG4pXTtlbHNle2lmKG49by5maWx0ZXJbZVtsXS50eXBlXS5hcHBseShudWxsLGVbbF0ubWF0Y2hlcyksbltiXSl7Zm9yKHI9KytsO2k+cjtyKyspaWYoby5yZWxhdGl2ZVtlW3JdLnR5cGVdKWJyZWFrO3JldHVybiB3dChsPjEmJmJ0KGYpLGw+MSYmeXQoZS5zbGljZSgwLGwtMSkuY29uY2F0KHt2YWx1ZToiICI9PT1lW2wtMl0udHlwZT8iKiI6IiJ9KSkucmVwbGFjZSh6LCIkMSIpLG4scj5sJiZUdChlLnNsaWNlKGwscikpLGk+ciYmVHQoZT1lLnNsaWNlKHIpKSxpPnImJnl0KGUpKX1mLnB1c2gobil9cmV0dXJuIGJ0KGYpfWZ1bmN0aW9uIEN0KGUsdCl7dmFyIG49MCxyPXQubGVuZ3RoPjAsYT1lLmxlbmd0aD4wLHM9ZnVuY3Rpb24ocyxsLGMscCxkKXt2YXIgaCxnLG0seT1bXSx2PTAsYj0iMCIseD1zJiZbXSx3PW51bGwhPWQsQz11LE49c3x8YSYmby5maW5kLlRBRygiKiIsZCYmbC5wYXJlbnROb2RlfHxsKSxrPVQrPW51bGw9PUM/MTpNYXRoLnJhbmRvbSgpfHwuMTtmb3IodyYmKHU9bCE9PWYmJmwsaT1uKTtudWxsIT0oaD1OW2JdKTtiKyspe2lmKGEmJmgpe2c9MDt3aGlsZShtPWVbZysrXSlpZihtKGgsbCxjKSl7cC5wdXNoKGgpO2JyZWFrfXcmJihUPWssaT0rK24pfXImJigoaD0hbSYmaCkmJnYtLSxzJiZ4LnB1c2goaCkpfWlmKHYrPWIsciYmYiE9PXYpe2c9MDt3aGlsZShtPXRbZysrXSltKHgseSxsLGMpO2lmKHMpe2lmKHY+MCl3aGlsZShiLS0peFtiXXx8eVtiXXx8KHlbYl09cS5jYWxsKHApKTt5PXh0KHkpfU0uYXBwbHkocCx5KSx3JiYhcyYmeS5sZW5ndGg+MCYmdit0Lmxlbmd0aD4xJiZhdC51bmlxdWVTb3J0KHApfXJldHVybiB3JiYoVD1rLHU9QykseH07cmV0dXJuIHI/bHQocyk6c31sPWF0LmNvbXBpbGU9ZnVuY3Rpb24oZSx0KXt2YXIgbixyPVtdLGk9W10sbz1FW2UrIiAiXTtpZighbyl7dHx8KHQ9bXQoZSkpLG49dC5sZW5ndGg7d2hpbGUobi0tKW89VHQodFtuXSksb1tiXT9yLnB1c2gobyk6aS5wdXNoKG8pO289RShlLEN0KGkscikpfXJldHVybiBvfTtmdW5jdGlvbiBOdChlLHQsbil7dmFyIHI9MCxpPXQubGVuZ3RoO2Zvcig7aT5yO3IrKylhdChlLHRbcl0sbik7cmV0dXJuIG59ZnVuY3Rpb24ga3QoZSx0LG4saSl7dmFyIGEscyx1LGMscCxmPW10KGUpO2lmKCFpJiYxPT09Zi5sZW5ndGgpe2lmKHM9ZlswXT1mWzBdLnNsaWNlKDApLHMubGVuZ3RoPjImJiJJRCI9PT0odT1zWzBdKS50eXBlJiZyLmdldEJ5SWQmJjk9PT10Lm5vZGVUeXBlJiZoJiZvLnJlbGF0aXZlW3NbMV0udHlwZV0pe2lmKHQ9KG8uZmluZC5JRCh1Lm1hdGNoZXNbMF0ucmVwbGFjZShydCxpdCksdCl8fFtdKVswXSwhdClyZXR1cm4gbjtlPWUuc2xpY2Uocy5zaGlmdCgpLnZhbHVlLmxlbmd0aCl9YT1RLm5lZWRzQ29udGV4dC50ZXN0KGUpPzA6cy5sZW5ndGg7d2hpbGUoYS0tKXtpZih1PXNbYV0sby5yZWxhdGl2ZVtjPXUudHlwZV0pYnJlYWs7aWYoKHA9by5maW5kW2NdKSYmKGk9cCh1Lm1hdGNoZXNbMF0ucmVwbGFjZShydCxpdCksVi50ZXN0KHNbMF0udHlwZSkmJnQucGFyZW50Tm9kZXx8dCkpKXtpZihzLnNwbGljZShhLDEpLGU9aS5sZW5ndGgmJnl0KHMpLCFlKXJldHVybiBNLmFwcGx5KG4saSksbjticmVha319fXJldHVybiBsKGUsZikoaSx0LCFoLG4sVi50ZXN0KGUpKSxufXIuc29ydFN0YWJsZT1iLnNwbGl0KCIiKS5zb3J0KEEpLmpvaW4oIiIpPT09YixyLmRldGVjdER1cGxpY2F0ZXM9UyxwKCksci5zb3J0RGV0YWNoZWQ9dXQoZnVuY3Rpb24oZSl7cmV0dXJuIDEmZS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbihmLmNyZWF0ZUVsZW1lbnQoImRpdiIpKX0pLHV0KGZ1bmN0aW9uKGUpe3JldHVybiBlLmlubmVySFRNTD0iPGEgaHJlZj0nIyc+PC9hPiIsIiMiPT09ZS5maXJzdENoaWxkLmdldEF0dHJpYnV0ZSgiaHJlZiIpfSl8fGN0KCJ0eXBlfGhyZWZ8aGVpZ2h0fHdpZHRoIixmdW5jdGlvbihlLG4scil7cmV0dXJuIHI/dDplLmdldEF0dHJpYnV0ZShuLCJ0eXBlIj09PW4udG9Mb3dlckNhc2UoKT8xOjIpfSksci5hdHRyaWJ1dGVzJiZ1dChmdW5jdGlvbihlKXtyZXR1cm4gZS5pbm5lckhUTUw9IjxpbnB1dC8+IixlLmZpcnN0Q2hpbGQuc2V0QXR0cmlidXRlKCJ2YWx1ZSIsIiIpLCIiPT09ZS5maXJzdENoaWxkLmdldEF0dHJpYnV0ZSgidmFsdWUiKX0pfHxjdCgidmFsdWUiLGZ1bmN0aW9uKGUsbixyKXtyZXR1cm4gcnx8ImlucHV0IiE9PWUubm9kZU5hbWUudG9Mb3dlckNhc2UoKT90OmUuZGVmYXVsdFZhbHVlfSksdXQoZnVuY3Rpb24oZSl7cmV0dXJuIG51bGw9PWUuZ2V0QXR0cmlidXRlKCJkaXNhYmxlZCIpfSl8fGN0KEIsZnVuY3Rpb24oZSxuLHIpe3ZhciBpO3JldHVybiByP3Q6KGk9ZS5nZXRBdHRyaWJ1dGVOb2RlKG4pKSYmaS5zcGVjaWZpZWQ/aS52YWx1ZTplW25dPT09ITA/bi50b0xvd2VyQ2FzZSgpOm51bGx9KSx4LmZpbmQ9YXQseC5leHByPWF0LnNlbGVjdG9ycyx4LmV4cHJbIjoiXT14LmV4cHIucHNldWRvcyx4LnVuaXF1ZT1hdC51bmlxdWVTb3J0LHgudGV4dD1hdC5nZXRUZXh0LHguaXNYTUxEb2M9YXQuaXNYTUwseC5jb250YWlucz1hdC5jb250YWluc30oZSk7dmFyIE89e307ZnVuY3Rpb24gRihlKXt2YXIgdD1PW2VdPXt9O3JldHVybiB4LmVhY2goZS5tYXRjaChUKXx8W10sZnVuY3Rpb24oZSxuKXt0W25dPSEwfSksdH14LkNhbGxiYWNrcz1mdW5jdGlvbihlKXtlPSJzdHJpbmciPT10eXBlb2YgZT9PW2VdfHxGKGUpOnguZXh0ZW5kKHt9LGUpO3ZhciBuLHIsaSxvLGEscyxsPVtdLHU9IWUub25jZSYmW10sYz1mdW5jdGlvbih0KXtmb3Iocj1lLm1lbW9yeSYmdCxpPSEwLGE9c3x8MCxzPTAsbz1sLmxlbmd0aCxuPSEwO2wmJm8+YTthKyspaWYobFthXS5hcHBseSh0WzBdLHRbMV0pPT09ITEmJmUuc3RvcE9uRmFsc2Upe3I9ITE7YnJlYWt9bj0hMSxsJiYodT91Lmxlbmd0aCYmYyh1LnNoaWZ0KCkpOnI/bD1bXTpwLmRpc2FibGUoKSl9LHA9e2FkZDpmdW5jdGlvbigpe2lmKGwpe3ZhciB0PWwubGVuZ3RoOyhmdW5jdGlvbiBpKHQpe3guZWFjaCh0LGZ1bmN0aW9uKHQsbil7dmFyIHI9eC50eXBlKG4pOyJmdW5jdGlvbiI9PT1yP2UudW5pcXVlJiZwLmhhcyhuKXx8bC5wdXNoKG4pOm4mJm4ubGVuZ3RoJiYic3RyaW5nIiE9PXImJmkobil9KX0pKGFyZ3VtZW50cyksbj9vPWwubGVuZ3RoOnImJihzPXQsYyhyKSl9cmV0dXJuIHRoaXN9LHJlbW92ZTpmdW5jdGlvbigpe3JldHVybiBsJiZ4LmVhY2goYXJndW1lbnRzLGZ1bmN0aW9uKGUsdCl7dmFyIHI7d2hpbGUoKHI9eC5pbkFycmF5KHQsbCxyKSk+LTEpbC5zcGxpY2UociwxKSxuJiYobz49ciYmby0tLGE+PXImJmEtLSl9KSx0aGlzfSxoYXM6ZnVuY3Rpb24oZSl7cmV0dXJuIGU/eC5pbkFycmF5KGUsbCk+LTE6ISghbHx8IWwubGVuZ3RoKX0sZW1wdHk6ZnVuY3Rpb24oKXtyZXR1cm4gbD1bXSxvPTAsdGhpc30sZGlzYWJsZTpmdW5jdGlvbigpe3JldHVybiBsPXU9cj10LHRoaXN9LGRpc2FibGVkOmZ1bmN0aW9uKCl7cmV0dXJuIWx9LGxvY2s6ZnVuY3Rpb24oKXtyZXR1cm4gdT10LHJ8fHAuZGlzYWJsZSgpLHRoaXN9LGxvY2tlZDpmdW5jdGlvbigpe3JldHVybiF1fSxmaXJlV2l0aDpmdW5jdGlvbihlLHQpe3JldHVybiFsfHxpJiYhdXx8KHQ9dHx8W10sdD1bZSx0LnNsaWNlP3Quc2xpY2UoKTp0XSxuP3UucHVzaCh0KTpjKHQpKSx0aGlzfSxmaXJlOmZ1bmN0aW9uKCl7cmV0dXJuIHAuZmlyZVdpdGgodGhpcyxhcmd1bWVudHMpLHRoaXN9LGZpcmVkOmZ1bmN0aW9uKCl7cmV0dXJuISFpfX07cmV0dXJuIHB9LHguZXh0ZW5kKHtEZWZlcnJlZDpmdW5jdGlvbihlKXt2YXIgdD1bWyJyZXNvbHZlIiwiZG9uZSIseC5DYWxsYmFja3MoIm9uY2UgbWVtb3J5IiksInJlc29sdmVkIl0sWyJyZWplY3QiLCJmYWlsIix4LkNhbGxiYWNrcygib25jZSBtZW1vcnkiKSwicmVqZWN0ZWQiXSxbIm5vdGlmeSIsInByb2dyZXNzIix4LkNhbGxiYWNrcygibWVtb3J5IildXSxuPSJwZW5kaW5nIixyPXtzdGF0ZTpmdW5jdGlvbigpe3JldHVybiBufSxhbHdheXM6ZnVuY3Rpb24oKXtyZXR1cm4gaS5kb25lKGFyZ3VtZW50cykuZmFpbChhcmd1bWVudHMpLHRoaXN9LHRoZW46ZnVuY3Rpb24oKXt2YXIgZT1hcmd1bWVudHM7cmV0dXJuIHguRGVmZXJyZWQoZnVuY3Rpb24obil7eC5lYWNoKHQsZnVuY3Rpb24odCxvKXt2YXIgYT1vWzBdLHM9eC5pc0Z1bmN0aW9uKGVbdF0pJiZlW3RdO2lbb1sxXV0oZnVuY3Rpb24oKXt2YXIgZT1zJiZzLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtlJiZ4LmlzRnVuY3Rpb24oZS5wcm9taXNlKT9lLnByb21pc2UoKS5kb25lKG4ucmVzb2x2ZSkuZmFpbChuLnJlamVjdCkucHJvZ3Jlc3Mobi5ub3RpZnkpOm5bYSsiV2l0aCJdKHRoaXM9PT1yP24ucHJvbWlzZSgpOnRoaXMscz9bZV06YXJndW1lbnRzKX0pfSksZT1udWxsfSkucHJvbWlzZSgpfSxwcm9taXNlOmZ1bmN0aW9uKGUpe3JldHVybiBudWxsIT1lP3guZXh0ZW5kKGUscik6cn19LGk9e307cmV0dXJuIHIucGlwZT1yLnRoZW4seC5lYWNoKHQsZnVuY3Rpb24oZSxvKXt2YXIgYT1vWzJdLHM9b1szXTtyW29bMV1dPWEuYWRkLHMmJmEuYWRkKGZ1bmN0aW9uKCl7bj1zfSx0WzFeZV1bMl0uZGlzYWJsZSx0WzJdWzJdLmxvY2spLGlbb1swXV09ZnVuY3Rpb24oKXtyZXR1cm4gaVtvWzBdKyJXaXRoIl0odGhpcz09PWk/cjp0aGlzLGFyZ3VtZW50cyksdGhpc30saVtvWzBdKyJXaXRoIl09YS5maXJlV2l0aH0pLHIucHJvbWlzZShpKSxlJiZlLmNhbGwoaSxpKSxpfSx3aGVuOmZ1bmN0aW9uKGUpe3ZhciB0PTAsbj1nLmNhbGwoYXJndW1lbnRzKSxyPW4ubGVuZ3RoLGk9MSE9PXJ8fGUmJnguaXNGdW5jdGlvbihlLnByb21pc2UpP3I6MCxvPTE9PT1pP2U6eC5EZWZlcnJlZCgpLGE9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBmdW5jdGlvbihyKXt0W2VdPXRoaXMsbltlXT1hcmd1bWVudHMubGVuZ3RoPjE/Zy5jYWxsKGFyZ3VtZW50cyk6cixuPT09cz9vLm5vdGlmeVdpdGgodCxuKTotLWl8fG8ucmVzb2x2ZVdpdGgodCxuKX19LHMsbCx1O2lmKHI+MSlmb3Iocz1BcnJheShyKSxsPUFycmF5KHIpLHU9QXJyYXkocik7cj50O3QrKyluW3RdJiZ4LmlzRnVuY3Rpb24oblt0XS5wcm9taXNlKT9uW3RdLnByb21pc2UoKS5kb25lKGEodCx1LG4pKS5mYWlsKG8ucmVqZWN0KS5wcm9ncmVzcyhhKHQsbCxzKSk6LS1pO3JldHVybiBpfHxvLnJlc29sdmVXaXRoKHUsbiksby5wcm9taXNlKCl9fSkseC5zdXBwb3J0PWZ1bmN0aW9uKHQpe3ZhciBuLHIsbyxzLGwsdSxjLHAsZixkPWEuY3JlYXRlRWxlbWVudCgiZGl2Iik7aWYoZC5zZXRBdHRyaWJ1dGUoImNsYXNzTmFtZSIsInQiKSxkLmlubmVySFRNTD0iICA8bGluay8+PHRhYmxlPjwvdGFibGU+PGEgaHJlZj0nL2EnPmE8L2E+PGlucHV0IHR5cGU9J2NoZWNrYm94Jy8+IixuPWQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIioiKXx8W10scj1kLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJhIilbMF0sIXJ8fCFyLnN0eWxlfHwhbi5sZW5ndGgpcmV0dXJuIHQ7cz1hLmNyZWF0ZUVsZW1lbnQoInNlbGVjdCIpLHU9cy5hcHBlbmRDaGlsZChhLmNyZWF0ZUVsZW1lbnQoIm9wdGlvbiIpKSxvPWQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImlucHV0IilbMF0sci5zdHlsZS5jc3NUZXh0PSJ0b3A6MXB4O2Zsb2F0OmxlZnQ7b3BhY2l0eTouNSIsdC5nZXRTZXRBdHRyaWJ1dGU9InQiIT09ZC5jbGFzc05hbWUsdC5sZWFkaW5nV2hpdGVzcGFjZT0zPT09ZC5maXJzdENoaWxkLm5vZGVUeXBlLHQudGJvZHk9IWQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInRib2R5IikubGVuZ3RoLHQuaHRtbFNlcmlhbGl6ZT0hIWQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImxpbmsiKS5sZW5ndGgsdC5zdHlsZT0vdG9wLy50ZXN0KHIuZ2V0QXR0cmlidXRlKCJzdHlsZSIpKSx0LmhyZWZOb3JtYWxpemVkPSIvYSI9PT1yLmdldEF0dHJpYnV0ZSgiaHJlZiIpLHQub3BhY2l0eT0vXjAuNS8udGVzdChyLnN0eWxlLm9wYWNpdHkpLHQuY3NzRmxvYXQ9ISFyLnN0eWxlLmNzc0Zsb2F0LHQuY2hlY2tPbj0hIW8udmFsdWUsdC5vcHRTZWxlY3RlZD11LnNlbGVjdGVkLHQuZW5jdHlwZT0hIWEuY3JlYXRlRWxlbWVudCgiZm9ybSIpLmVuY3R5cGUsdC5odG1sNUNsb25lPSI8Om5hdj48LzpuYXY+IiE9PWEuY3JlYXRlRWxlbWVudCgibmF2IikuY2xvbmVOb2RlKCEwKS5vdXRlckhUTUwsdC5pbmxpbmVCbG9ja05lZWRzTGF5b3V0PSExLHQuc2hyaW5rV3JhcEJsb2Nrcz0hMSx0LnBpeGVsUG9zaXRpb249ITEsdC5kZWxldGVFeHBhbmRvPSEwLHQubm9DbG9uZUV2ZW50PSEwLHQucmVsaWFibGVNYXJnaW5SaWdodD0hMCx0LmJveFNpemluZ1JlbGlhYmxlPSEwLG8uY2hlY2tlZD0hMCx0Lm5vQ2xvbmVDaGVja2VkPW8uY2xvbmVOb2RlKCEwKS5jaGVja2VkLHMuZGlzYWJsZWQ9ITAsdC5vcHREaXNhYmxlZD0hdS5kaXNhYmxlZDt0cnl7ZGVsZXRlIGQudGVzdH1jYXRjaChoKXt0LmRlbGV0ZUV4cGFuZG89ITF9bz1hLmNyZWF0ZUVsZW1lbnQoImlucHV0Iiksby5zZXRBdHRyaWJ1dGUoInZhbHVlIiwiIiksdC5pbnB1dD0iIj09PW8uZ2V0QXR0cmlidXRlKCJ2YWx1ZSIpLG8udmFsdWU9InQiLG8uc2V0QXR0cmlidXRlKCJ0eXBlIiwicmFkaW8iKSx0LnJhZGlvVmFsdWU9InQiPT09by52YWx1ZSxvLnNldEF0dHJpYnV0ZSgiY2hlY2tlZCIsInQiKSxvLnNldEF0dHJpYnV0ZSgibmFtZSIsInQiKSxsPWEuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpLGwuYXBwZW5kQ2hpbGQobyksdC5hcHBlbmRDaGVja2VkPW8uY2hlY2tlZCx0LmNoZWNrQ2xvbmU9bC5jbG9uZU5vZGUoITApLmNsb25lTm9kZSghMCkubGFzdENoaWxkLmNoZWNrZWQsZC5hdHRhY2hFdmVudCYmKGQuYXR0YWNoRXZlbnQoIm9uY2xpY2siLGZ1bmN0aW9uKCl7dC5ub0Nsb25lRXZlbnQ9ITF9KSxkLmNsb25lTm9kZSghMCkuY2xpY2soKSk7Zm9yKGYgaW57c3VibWl0OiEwLGNoYW5nZTohMCxmb2N1c2luOiEwfSlkLnNldEF0dHJpYnV0ZShjPSJvbiIrZiwidCIpLHRbZisiQnViYmxlcyJdPWMgaW4gZXx8ZC5hdHRyaWJ1dGVzW2NdLmV4cGFuZG89PT0hMTtkLnN0eWxlLmJhY2tncm91bmRDbGlwPSJjb250ZW50LWJveCIsZC5jbG9uZU5vZGUoITApLnN0eWxlLmJhY2tncm91bmRDbGlwPSIiLHQuY2xlYXJDbG9uZVN0eWxlPSJjb250ZW50LWJveCI9PT1kLnN0eWxlLmJhY2tncm91bmRDbGlwO2ZvcihmIGluIHgodCkpYnJlYWs7cmV0dXJuIHQub3duTGFzdD0iMCIhPT1mLHgoZnVuY3Rpb24oKXt2YXIgbixyLG8scz0icGFkZGluZzowO21hcmdpbjowO2JvcmRlcjowO2Rpc3BsYXk6YmxvY2s7Ym94LXNpemluZzpjb250ZW50LWJveDstbW96LWJveC1zaXppbmc6Y29udGVudC1ib3g7LXdlYmtpdC1ib3gtc2l6aW5nOmNvbnRlbnQtYm94OyIsbD1hLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJib2R5IilbMF07bCYmKG49YS5jcmVhdGVFbGVtZW50KCJkaXYiKSxuLnN0eWxlLmNzc1RleHQ9ImJvcmRlcjowO3dpZHRoOjA7aGVpZ2h0OjA7cG9zaXRpb246YWJzb2x1dGU7dG9wOjA7bGVmdDotOTk5OXB4O21hcmdpbi10b3A6MXB4IixsLmFwcGVuZENoaWxkKG4pLmFwcGVuZENoaWxkKGQpLGQuaW5uZXJIVE1MPSI8dGFibGU+PHRyPjx0ZD48L3RkPjx0ZD50PC90ZD48L3RyPjwvdGFibGU+IixvPWQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInRkIiksb1swXS5zdHlsZS5jc3NUZXh0PSJwYWRkaW5nOjA7bWFyZ2luOjA7Ym9yZGVyOjA7ZGlzcGxheTpub25lIixwPTA9PT1vWzBdLm9mZnNldEhlaWdodCxvWzBdLnN0eWxlLmRpc3BsYXk9IiIsb1sxXS5zdHlsZS5kaXNwbGF5PSJub25lIix0LnJlbGlhYmxlSGlkZGVuT2Zmc2V0cz1wJiYwPT09b1swXS5vZmZzZXRIZWlnaHQsZC5pbm5lckhUTUw9IiIsZC5zdHlsZS5jc3NUZXh0PSJib3gtc2l6aW5nOmJvcmRlci1ib3g7LW1vei1ib3gtc2l6aW5nOmJvcmRlci1ib3g7LXdlYmtpdC1ib3gtc2l6aW5nOmJvcmRlci1ib3g7cGFkZGluZzoxcHg7Ym9yZGVyOjFweDtkaXNwbGF5OmJsb2NrO3dpZHRoOjRweDttYXJnaW4tdG9wOjElO3Bvc2l0aW9uOmFic29sdXRlO3RvcDoxJTsiLHguc3dhcChsLG51bGwhPWwuc3R5bGUuem9vbT97em9vbToxfTp7fSxmdW5jdGlvbigpe3QuYm94U2l6aW5nPTQ9PT1kLm9mZnNldFdpZHRofSksZS5nZXRDb21wdXRlZFN0eWxlJiYodC5waXhlbFBvc2l0aW9uPSIxJSIhPT0oZS5nZXRDb21wdXRlZFN0eWxlKGQsbnVsbCl8fHt9KS50b3AsdC5ib3hTaXppbmdSZWxpYWJsZT0iNHB4Ij09PShlLmdldENvbXB1dGVkU3R5bGUoZCxudWxsKXx8e3dpZHRoOiI0cHgifSkud2lkdGgscj1kLmFwcGVuZENoaWxkKGEuY3JlYXRlRWxlbWVudCgiZGl2IikpLHIuc3R5bGUuY3NzVGV4dD1kLnN0eWxlLmNzc1RleHQ9cyxyLnN0eWxlLm1hcmdpblJpZ2h0PXIuc3R5bGUud2lkdGg9IjAiLGQuc3R5bGUud2lkdGg9IjFweCIsdC5yZWxpYWJsZU1hcmdpblJpZ2h0PSFwYXJzZUZsb2F0KChlLmdldENvbXB1dGVkU3R5bGUocixudWxsKXx8e30pLm1hcmdpblJpZ2h0KSksdHlwZW9mIGQuc3R5bGUuem9vbSE9PWkmJihkLmlubmVySFRNTD0iIixkLnN0eWxlLmNzc1RleHQ9cysid2lkdGg6MXB4O3BhZGRpbmc6MXB4O2Rpc3BsYXk6aW5saW5lO3pvb206MSIsdC5pbmxpbmVCbG9ja05lZWRzTGF5b3V0PTM9PT1kLm9mZnNldFdpZHRoLGQuc3R5bGUuZGlzcGxheT0iYmxvY2siLGQuaW5uZXJIVE1MPSI8ZGl2PjwvZGl2PiIsZC5maXJzdENoaWxkLnN0eWxlLndpZHRoPSI1cHgiLHQuc2hyaW5rV3JhcEJsb2Nrcz0zIT09ZC5vZmZzZXRXaWR0aCx0LmlubGluZUJsb2NrTmVlZHNMYXlvdXQmJihsLnN0eWxlLnpvb209MSkpLGwucmVtb3ZlQ2hpbGQobiksbj1kPW89cj1udWxsKX0pLG49cz1sPXU9cj1vPW51bGwsdAp9KHt9KTt2YXIgQj0vKD86XHtbXHNcU10qXH18XFtbXHNcU10qXF0pJC8sUD0vKFtBLVpdKS9nO2Z1bmN0aW9uIFIoZSxuLHIsaSl7aWYoeC5hY2NlcHREYXRhKGUpKXt2YXIgbyxhLHM9eC5leHBhbmRvLGw9ZS5ub2RlVHlwZSx1PWw/eC5jYWNoZTplLGM9bD9lW3NdOmVbc10mJnM7aWYoYyYmdVtjXSYmKGl8fHVbY10uZGF0YSl8fHIhPT10fHwic3RyaW5nIiE9dHlwZW9mIG4pcmV0dXJuIGN8fChjPWw/ZVtzXT1wLnBvcCgpfHx4Lmd1aWQrKzpzKSx1W2NdfHwodVtjXT1sP3t9Ont0b0pTT046eC5ub29wfSksKCJvYmplY3QiPT10eXBlb2Ygbnx8ImZ1bmN0aW9uIj09dHlwZW9mIG4pJiYoaT91W2NdPXguZXh0ZW5kKHVbY10sbik6dVtjXS5kYXRhPXguZXh0ZW5kKHVbY10uZGF0YSxuKSksYT11W2NdLGl8fChhLmRhdGF8fChhLmRhdGE9e30pLGE9YS5kYXRhKSxyIT09dCYmKGFbeC5jYW1lbENhc2UobildPXIpLCJzdHJpbmciPT10eXBlb2Ygbj8obz1hW25dLG51bGw9PW8mJihvPWFbeC5jYW1lbENhc2UobildKSk6bz1hLG99fWZ1bmN0aW9uIFcoZSx0LG4pe2lmKHguYWNjZXB0RGF0YShlKSl7dmFyIHIsaSxvPWUubm9kZVR5cGUsYT1vP3guY2FjaGU6ZSxzPW8/ZVt4LmV4cGFuZG9dOnguZXhwYW5kbztpZihhW3NdKXtpZih0JiYocj1uP2Fbc106YVtzXS5kYXRhKSl7eC5pc0FycmF5KHQpP3Q9dC5jb25jYXQoeC5tYXAodCx4LmNhbWVsQ2FzZSkpOnQgaW4gcj90PVt0XToodD14LmNhbWVsQ2FzZSh0KSx0PXQgaW4gcj9bdF06dC5zcGxpdCgiICIpKSxpPXQubGVuZ3RoO3doaWxlKGktLSlkZWxldGUgclt0W2ldXTtpZihuPyFJKHIpOiF4LmlzRW1wdHlPYmplY3QocikpcmV0dXJufShufHwoZGVsZXRlIGFbc10uZGF0YSxJKGFbc10pKSkmJihvP3guY2xlYW5EYXRhKFtlXSwhMCk6eC5zdXBwb3J0LmRlbGV0ZUV4cGFuZG98fGEhPWEud2luZG93P2RlbGV0ZSBhW3NdOmFbc109bnVsbCl9fX14LmV4dGVuZCh7Y2FjaGU6e30sbm9EYXRhOnthcHBsZXQ6ITAsZW1iZWQ6ITAsb2JqZWN0OiJjbHNpZDpEMjdDREI2RS1BRTZELTExY2YtOTZCOC00NDQ1NTM1NDAwMDAifSxoYXNEYXRhOmZ1bmN0aW9uKGUpe3JldHVybiBlPWUubm9kZVR5cGU/eC5jYWNoZVtlW3guZXhwYW5kb11dOmVbeC5leHBhbmRvXSwhIWUmJiFJKGUpfSxkYXRhOmZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gUihlLHQsbil9LHJlbW92ZURhdGE6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gVyhlLHQpfSxfZGF0YTpmdW5jdGlvbihlLHQsbil7cmV0dXJuIFIoZSx0LG4sITApfSxfcmVtb3ZlRGF0YTpmdW5jdGlvbihlLHQpe3JldHVybiBXKGUsdCwhMCl9LGFjY2VwdERhdGE6ZnVuY3Rpb24oZSl7aWYoZS5ub2RlVHlwZSYmMSE9PWUubm9kZVR5cGUmJjkhPT1lLm5vZGVUeXBlKXJldHVybiExO3ZhciB0PWUubm9kZU5hbWUmJngubm9EYXRhW2Uubm9kZU5hbWUudG9Mb3dlckNhc2UoKV07cmV0dXJuIXR8fHQhPT0hMCYmZS5nZXRBdHRyaWJ1dGUoImNsYXNzaWQiKT09PXR9fSkseC5mbi5leHRlbmQoe2RhdGE6ZnVuY3Rpb24oZSxuKXt2YXIgcixpLG89bnVsbCxhPTAscz10aGlzWzBdO2lmKGU9PT10KXtpZih0aGlzLmxlbmd0aCYmKG89eC5kYXRhKHMpLDE9PT1zLm5vZGVUeXBlJiYheC5fZGF0YShzLCJwYXJzZWRBdHRycyIpKSl7Zm9yKHI9cy5hdHRyaWJ1dGVzO3IubGVuZ3RoPmE7YSsrKWk9clthXS5uYW1lLDA9PT1pLmluZGV4T2YoImRhdGEtIikmJihpPXguY2FtZWxDYXNlKGkuc2xpY2UoNSkpLCQocyxpLG9baV0pKTt4Ll9kYXRhKHMsInBhcnNlZEF0dHJzIiwhMCl9cmV0dXJuIG99cmV0dXJuIm9iamVjdCI9PXR5cGVvZiBlP3RoaXMuZWFjaChmdW5jdGlvbigpe3guZGF0YSh0aGlzLGUpfSk6YXJndW1lbnRzLmxlbmd0aD4xP3RoaXMuZWFjaChmdW5jdGlvbigpe3guZGF0YSh0aGlzLGUsbil9KTpzPyQocyxlLHguZGF0YShzLGUpKTpudWxsfSxyZW1vdmVEYXRhOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXt4LnJlbW92ZURhdGEodGhpcyxlKX0pfX0pO2Z1bmN0aW9uICQoZSxuLHIpe2lmKHI9PT10JiYxPT09ZS5ub2RlVHlwZSl7dmFyIGk9ImRhdGEtIituLnJlcGxhY2UoUCwiLSQxIikudG9Mb3dlckNhc2UoKTtpZihyPWUuZ2V0QXR0cmlidXRlKGkpLCJzdHJpbmciPT10eXBlb2Ygcil7dHJ5e3I9InRydWUiPT09cj8hMDoiZmFsc2UiPT09cj8hMToibnVsbCI9PT1yP251bGw6K3IrIiI9PT1yPytyOkIudGVzdChyKT94LnBhcnNlSlNPTihyKTpyfWNhdGNoKG8pe314LmRhdGEoZSxuLHIpfWVsc2Ugcj10fXJldHVybiByfWZ1bmN0aW9uIEkoZSl7dmFyIHQ7Zm9yKHQgaW4gZSlpZigoImRhdGEiIT09dHx8IXguaXNFbXB0eU9iamVjdChlW3RdKSkmJiJ0b0pTT04iIT09dClyZXR1cm4hMTtyZXR1cm4hMH14LmV4dGVuZCh7cXVldWU6ZnVuY3Rpb24oZSxuLHIpe3ZhciBpO3JldHVybiBlPyhuPShufHwiZngiKSsicXVldWUiLGk9eC5fZGF0YShlLG4pLHImJighaXx8eC5pc0FycmF5KHIpP2k9eC5fZGF0YShlLG4seC5tYWtlQXJyYXkocikpOmkucHVzaChyKSksaXx8W10pOnR9LGRlcXVldWU6ZnVuY3Rpb24oZSx0KXt0PXR8fCJmeCI7dmFyIG49eC5xdWV1ZShlLHQpLHI9bi5sZW5ndGgsaT1uLnNoaWZ0KCksbz14Ll9xdWV1ZUhvb2tzKGUsdCksYT1mdW5jdGlvbigpe3guZGVxdWV1ZShlLHQpfTsiaW5wcm9ncmVzcyI9PT1pJiYoaT1uLnNoaWZ0KCksci0tKSxpJiYoImZ4Ij09PXQmJm4udW5zaGlmdCgiaW5wcm9ncmVzcyIpLGRlbGV0ZSBvLnN0b3AsaS5jYWxsKGUsYSxvKSksIXImJm8mJm8uZW1wdHkuZmlyZSgpfSxfcXVldWVIb29rczpmdW5jdGlvbihlLHQpe3ZhciBuPXQrInF1ZXVlSG9va3MiO3JldHVybiB4Ll9kYXRhKGUsbil8fHguX2RhdGEoZSxuLHtlbXB0eTp4LkNhbGxiYWNrcygib25jZSBtZW1vcnkiKS5hZGQoZnVuY3Rpb24oKXt4Ll9yZW1vdmVEYXRhKGUsdCsicXVldWUiKSx4Ll9yZW1vdmVEYXRhKGUsbil9KX0pfX0pLHguZm4uZXh0ZW5kKHtxdWV1ZTpmdW5jdGlvbihlLG4pe3ZhciByPTI7cmV0dXJuInN0cmluZyIhPXR5cGVvZiBlJiYobj1lLGU9ImZ4IixyLS0pLHI+YXJndW1lbnRzLmxlbmd0aD94LnF1ZXVlKHRoaXNbMF0sZSk6bj09PXQ/dGhpczp0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgdD14LnF1ZXVlKHRoaXMsZSxuKTt4Ll9xdWV1ZUhvb2tzKHRoaXMsZSksImZ4Ij09PWUmJiJpbnByb2dyZXNzIiE9PXRbMF0mJnguZGVxdWV1ZSh0aGlzLGUpfSl9LGRlcXVldWU6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe3guZGVxdWV1ZSh0aGlzLGUpfSl9LGRlbGF5OmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGU9eC5meD94LmZ4LnNwZWVkc1tlXXx8ZTplLHQ9dHx8ImZ4Iix0aGlzLnF1ZXVlKHQsZnVuY3Rpb24odCxuKXt2YXIgcj1zZXRUaW1lb3V0KHQsZSk7bi5zdG9wPWZ1bmN0aW9uKCl7Y2xlYXJUaW1lb3V0KHIpfX0pfSxjbGVhclF1ZXVlOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLnF1ZXVlKGV8fCJmeCIsW10pfSxwcm9taXNlOmZ1bmN0aW9uKGUsbil7dmFyIHIsaT0xLG89eC5EZWZlcnJlZCgpLGE9dGhpcyxzPXRoaXMubGVuZ3RoLGw9ZnVuY3Rpb24oKXstLWl8fG8ucmVzb2x2ZVdpdGgoYSxbYV0pfTsic3RyaW5nIiE9dHlwZW9mIGUmJihuPWUsZT10KSxlPWV8fCJmeCI7d2hpbGUocy0tKXI9eC5fZGF0YShhW3NdLGUrInF1ZXVlSG9va3MiKSxyJiZyLmVtcHR5JiYoaSsrLHIuZW1wdHkuYWRkKGwpKTtyZXR1cm4gbCgpLG8ucHJvbWlzZShuKX19KTt2YXIgeixYLFU9L1tcdFxyXG5cZl0vZyxWPS9cci9nLFk9L14oPzppbnB1dHxzZWxlY3R8dGV4dGFyZWF8YnV0dG9ufG9iamVjdCkkL2ksSj0vXig/OmF8YXJlYSkkL2ksRz0vXig/OmNoZWNrZWR8c2VsZWN0ZWQpJC9pLFE9eC5zdXBwb3J0LmdldFNldEF0dHJpYnV0ZSxLPXguc3VwcG9ydC5pbnB1dDt4LmZuLmV4dGVuZCh7YXR0cjpmdW5jdGlvbihlLHQpe3JldHVybiB4LmFjY2Vzcyh0aGlzLHguYXR0cixlLHQsYXJndW1lbnRzLmxlbmd0aD4xKX0scmVtb3ZlQXR0cjpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7eC5yZW1vdmVBdHRyKHRoaXMsZSl9KX0scHJvcDpmdW5jdGlvbihlLHQpe3JldHVybiB4LmFjY2Vzcyh0aGlzLHgucHJvcCxlLHQsYXJndW1lbnRzLmxlbmd0aD4xKX0scmVtb3ZlUHJvcDpmdW5jdGlvbihlKXtyZXR1cm4gZT14LnByb3BGaXhbZV18fGUsdGhpcy5lYWNoKGZ1bmN0aW9uKCl7dHJ5e3RoaXNbZV09dCxkZWxldGUgdGhpc1tlXX1jYXRjaChuKXt9fSl9LGFkZENsYXNzOmZ1bmN0aW9uKGUpe3ZhciB0LG4scixpLG8sYT0wLHM9dGhpcy5sZW5ndGgsbD0ic3RyaW5nIj09dHlwZW9mIGUmJmU7aWYoeC5pc0Z1bmN0aW9uKGUpKXJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24odCl7eCh0aGlzKS5hZGRDbGFzcyhlLmNhbGwodGhpcyx0LHRoaXMuY2xhc3NOYW1lKSl9KTtpZihsKWZvcih0PShlfHwiIikubWF0Y2goVCl8fFtdO3M+YTthKyspaWYobj10aGlzW2FdLHI9MT09PW4ubm9kZVR5cGUmJihuLmNsYXNzTmFtZT8oIiAiK24uY2xhc3NOYW1lKyIgIikucmVwbGFjZShVLCIgIik6IiAiKSl7bz0wO3doaWxlKGk9dFtvKytdKTA+ci5pbmRleE9mKCIgIitpKyIgIikmJihyKz1pKyIgIik7bi5jbGFzc05hbWU9eC50cmltKHIpfXJldHVybiB0aGlzfSxyZW1vdmVDbGFzczpmdW5jdGlvbihlKXt2YXIgdCxuLHIsaSxvLGE9MCxzPXRoaXMubGVuZ3RoLGw9MD09PWFyZ3VtZW50cy5sZW5ndGh8fCJzdHJpbmciPT10eXBlb2YgZSYmZTtpZih4LmlzRnVuY3Rpb24oZSkpcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbih0KXt4KHRoaXMpLnJlbW92ZUNsYXNzKGUuY2FsbCh0aGlzLHQsdGhpcy5jbGFzc05hbWUpKX0pO2lmKGwpZm9yKHQ9KGV8fCIiKS5tYXRjaChUKXx8W107cz5hO2ErKylpZihuPXRoaXNbYV0scj0xPT09bi5ub2RlVHlwZSYmKG4uY2xhc3NOYW1lPygiICIrbi5jbGFzc05hbWUrIiAiKS5yZXBsYWNlKFUsIiAiKToiIikpe289MDt3aGlsZShpPXRbbysrXSl3aGlsZShyLmluZGV4T2YoIiAiK2krIiAiKT49MClyPXIucmVwbGFjZSgiICIraSsiICIsIiAiKTtuLmNsYXNzTmFtZT1lP3gudHJpbShyKToiIn1yZXR1cm4gdGhpc30sdG9nZ2xlQ2xhc3M6ZnVuY3Rpb24oZSx0KXt2YXIgbj10eXBlb2YgZTtyZXR1cm4iYm9vbGVhbiI9PXR5cGVvZiB0JiYic3RyaW5nIj09PW4/dD90aGlzLmFkZENsYXNzKGUpOnRoaXMucmVtb3ZlQ2xhc3MoZSk6eC5pc0Z1bmN0aW9uKGUpP3RoaXMuZWFjaChmdW5jdGlvbihuKXt4KHRoaXMpLnRvZ2dsZUNsYXNzKGUuY2FsbCh0aGlzLG4sdGhpcy5jbGFzc05hbWUsdCksdCl9KTp0aGlzLmVhY2goZnVuY3Rpb24oKXtpZigic3RyaW5nIj09PW4pe3ZhciB0LHI9MCxvPXgodGhpcyksYT1lLm1hdGNoKFQpfHxbXTt3aGlsZSh0PWFbcisrXSlvLmhhc0NsYXNzKHQpP28ucmVtb3ZlQ2xhc3ModCk6by5hZGRDbGFzcyh0KX1lbHNlKG49PT1pfHwiYm9vbGVhbiI9PT1uKSYmKHRoaXMuY2xhc3NOYW1lJiZ4Ll9kYXRhKHRoaXMsIl9fY2xhc3NOYW1lX18iLHRoaXMuY2xhc3NOYW1lKSx0aGlzLmNsYXNzTmFtZT10aGlzLmNsYXNzTmFtZXx8ZT09PSExPyIiOnguX2RhdGEodGhpcywiX19jbGFzc05hbWVfXyIpfHwiIil9KX0saGFzQ2xhc3M6ZnVuY3Rpb24oZSl7dmFyIHQ9IiAiK2UrIiAiLG49MCxyPXRoaXMubGVuZ3RoO2Zvcig7cj5uO24rKylpZigxPT09dGhpc1tuXS5ub2RlVHlwZSYmKCIgIit0aGlzW25dLmNsYXNzTmFtZSsiICIpLnJlcGxhY2UoVSwiICIpLmluZGV4T2YodCk+PTApcmV0dXJuITA7cmV0dXJuITF9LHZhbDpmdW5jdGlvbihlKXt2YXIgbixyLGksbz10aGlzWzBdO3tpZihhcmd1bWVudHMubGVuZ3RoKXJldHVybiBpPXguaXNGdW5jdGlvbihlKSx0aGlzLmVhY2goZnVuY3Rpb24obil7dmFyIG87MT09PXRoaXMubm9kZVR5cGUmJihvPWk/ZS5jYWxsKHRoaXMsbix4KHRoaXMpLnZhbCgpKTplLG51bGw9PW8/bz0iIjoibnVtYmVyIj09dHlwZW9mIG8/bys9IiI6eC5pc0FycmF5KG8pJiYobz14Lm1hcChvLGZ1bmN0aW9uKGUpe3JldHVybiBudWxsPT1lPyIiOmUrIiJ9KSkscj14LnZhbEhvb2tzW3RoaXMudHlwZV18fHgudmFsSG9va3NbdGhpcy5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpXSxyJiYic2V0ImluIHImJnIuc2V0KHRoaXMsbywidmFsdWUiKSE9PXR8fCh0aGlzLnZhbHVlPW8pKX0pO2lmKG8pcmV0dXJuIHI9eC52YWxIb29rc1tvLnR5cGVdfHx4LnZhbEhvb2tzW28ubm9kZU5hbWUudG9Mb3dlckNhc2UoKV0sciYmImdldCJpbiByJiYobj1yLmdldChvLCJ2YWx1ZSIpKSE9PXQ/bjoobj1vLnZhbHVlLCJzdHJpbmciPT10eXBlb2Ygbj9uLnJlcGxhY2UoViwiIik6bnVsbD09bj8iIjpuKX19fSkseC5leHRlbmQoe3ZhbEhvb2tzOntvcHRpb246e2dldDpmdW5jdGlvbihlKXt2YXIgdD14LmZpbmQuYXR0cihlLCJ2YWx1ZSIpO3JldHVybiBudWxsIT10P3Q6ZS50ZXh0fX0sc2VsZWN0OntnZXQ6ZnVuY3Rpb24oZSl7dmFyIHQsbixyPWUub3B0aW9ucyxpPWUuc2VsZWN0ZWRJbmRleCxvPSJzZWxlY3Qtb25lIj09PWUudHlwZXx8MD5pLGE9bz9udWxsOltdLHM9bz9pKzE6ci5sZW5ndGgsbD0wPmk/czpvP2k6MDtmb3IoO3M+bDtsKyspaWYobj1yW2xdLCEoIW4uc2VsZWN0ZWQmJmwhPT1pfHwoeC5zdXBwb3J0Lm9wdERpc2FibGVkP24uZGlzYWJsZWQ6bnVsbCE9PW4uZ2V0QXR0cmlidXRlKCJkaXNhYmxlZCIpKXx8bi5wYXJlbnROb2RlLmRpc2FibGVkJiZ4Lm5vZGVOYW1lKG4ucGFyZW50Tm9kZSwib3B0Z3JvdXAiKSkpe2lmKHQ9eChuKS52YWwoKSxvKXJldHVybiB0O2EucHVzaCh0KX1yZXR1cm4gYX0sc2V0OmZ1bmN0aW9uKGUsdCl7dmFyIG4scixpPWUub3B0aW9ucyxvPXgubWFrZUFycmF5KHQpLGE9aS5sZW5ndGg7d2hpbGUoYS0tKXI9aVthXSwoci5zZWxlY3RlZD14LmluQXJyYXkoeChyKS52YWwoKSxvKT49MCkmJihuPSEwKTtyZXR1cm4gbnx8KGUuc2VsZWN0ZWRJbmRleD0tMSksb319fSxhdHRyOmZ1bmN0aW9uKGUsbixyKXt2YXIgbyxhLHM9ZS5ub2RlVHlwZTtpZihlJiYzIT09cyYmOCE9PXMmJjIhPT1zKXJldHVybiB0eXBlb2YgZS5nZXRBdHRyaWJ1dGU9PT1pP3gucHJvcChlLG4scik6KDE9PT1zJiZ4LmlzWE1MRG9jKGUpfHwobj1uLnRvTG93ZXJDYXNlKCksbz14LmF0dHJIb29rc1tuXXx8KHguZXhwci5tYXRjaC5ib29sLnRlc3Qobik/WDp6KSkscj09PXQ/byYmImdldCJpbiBvJiZudWxsIT09KGE9by5nZXQoZSxuKSk/YTooYT14LmZpbmQuYXR0cihlLG4pLG51bGw9PWE/dDphKTpudWxsIT09cj9vJiYic2V0ImluIG8mJihhPW8uc2V0KGUscixuKSkhPT10P2E6KGUuc2V0QXR0cmlidXRlKG4scisiIikscik6KHgucmVtb3ZlQXR0cihlLG4pLHQpKX0scmVtb3ZlQXR0cjpmdW5jdGlvbihlLHQpe3ZhciBuLHIsaT0wLG89dCYmdC5tYXRjaChUKTtpZihvJiYxPT09ZS5ub2RlVHlwZSl3aGlsZShuPW9baSsrXSlyPXgucHJvcEZpeFtuXXx8bix4LmV4cHIubWF0Y2guYm9vbC50ZXN0KG4pP0smJlF8fCFHLnRlc3Qobik/ZVtyXT0hMTplW3guY2FtZWxDYXNlKCJkZWZhdWx0LSIrbildPWVbcl09ITE6eC5hdHRyKGUsbiwiIiksZS5yZW1vdmVBdHRyaWJ1dGUoUT9uOnIpfSxhdHRySG9va3M6e3R5cGU6e3NldDpmdW5jdGlvbihlLHQpe2lmKCF4LnN1cHBvcnQucmFkaW9WYWx1ZSYmInJhZGlvIj09PXQmJngubm9kZU5hbWUoZSwiaW5wdXQiKSl7dmFyIG49ZS52YWx1ZTtyZXR1cm4gZS5zZXRBdHRyaWJ1dGUoInR5cGUiLHQpLG4mJihlLnZhbHVlPW4pLHR9fX19LHByb3BGaXg6eyJmb3IiOiJodG1sRm9yIiwiY2xhc3MiOiJjbGFzc05hbWUifSxwcm9wOmZ1bmN0aW9uKGUsbixyKXt2YXIgaSxvLGEscz1lLm5vZGVUeXBlO2lmKGUmJjMhPT1zJiY4IT09cyYmMiE9PXMpcmV0dXJuIGE9MSE9PXN8fCF4LmlzWE1MRG9jKGUpLGEmJihuPXgucHJvcEZpeFtuXXx8bixvPXgucHJvcEhvb2tzW25dKSxyIT09dD9vJiYic2V0ImluIG8mJihpPW8uc2V0KGUscixuKSkhPT10P2k6ZVtuXT1yOm8mJiJnZXQiaW4gbyYmbnVsbCE9PShpPW8uZ2V0KGUsbikpP2k6ZVtuXX0scHJvcEhvb2tzOnt0YWJJbmRleDp7Z2V0OmZ1bmN0aW9uKGUpe3ZhciB0PXguZmluZC5hdHRyKGUsInRhYmluZGV4Iik7cmV0dXJuIHQ/cGFyc2VJbnQodCwxMCk6WS50ZXN0KGUubm9kZU5hbWUpfHxKLnRlc3QoZS5ub2RlTmFtZSkmJmUuaHJlZj8wOi0xfX19fSksWD17c2V0OmZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gdD09PSExP3gucmVtb3ZlQXR0cihlLG4pOksmJlF8fCFHLnRlc3Qobik/ZS5zZXRBdHRyaWJ1dGUoIVEmJngucHJvcEZpeFtuXXx8bixuKTplW3guY2FtZWxDYXNlKCJkZWZhdWx0LSIrbildPWVbbl09ITAsbn19LHguZWFjaCh4LmV4cHIubWF0Y2guYm9vbC5zb3VyY2UubWF0Y2goL1x3Ky9nKSxmdW5jdGlvbihlLG4pe3ZhciByPXguZXhwci5hdHRySGFuZGxlW25dfHx4LmZpbmQuYXR0cjt4LmV4cHIuYXR0ckhhbmRsZVtuXT1LJiZRfHwhRy50ZXN0KG4pP2Z1bmN0aW9uKGUsbixpKXt2YXIgbz14LmV4cHIuYXR0ckhhbmRsZVtuXSxhPWk/dDooeC5leHByLmF0dHJIYW5kbGVbbl09dCkhPXIoZSxuLGkpP24udG9Mb3dlckNhc2UoKTpudWxsO3JldHVybiB4LmV4cHIuYXR0ckhhbmRsZVtuXT1vLGF9OmZ1bmN0aW9uKGUsbixyKXtyZXR1cm4gcj90OmVbeC5jYW1lbENhc2UoImRlZmF1bHQtIituKV0/bi50b0xvd2VyQ2FzZSgpOm51bGx9fSksSyYmUXx8KHguYXR0ckhvb2tzLnZhbHVlPXtzZXQ6ZnVuY3Rpb24oZSxuLHIpe3JldHVybiB4Lm5vZGVOYW1lKGUsImlucHV0Iik/KGUuZGVmYXVsdFZhbHVlPW4sdCk6eiYmei5zZXQoZSxuLHIpfX0pLFF8fCh6PXtzZXQ6ZnVuY3Rpb24oZSxuLHIpe3ZhciBpPWUuZ2V0QXR0cmlidXRlTm9kZShyKTtyZXR1cm4gaXx8ZS5zZXRBdHRyaWJ1dGVOb2RlKGk9ZS5vd25lckRvY3VtZW50LmNyZWF0ZUF0dHJpYnV0ZShyKSksaS52YWx1ZT1uKz0iIiwidmFsdWUiPT09cnx8bj09PWUuZ2V0QXR0cmlidXRlKHIpP246dH19LHguZXhwci5hdHRySGFuZGxlLmlkPXguZXhwci5hdHRySGFuZGxlLm5hbWU9eC5leHByLmF0dHJIYW5kbGUuY29vcmRzPWZ1bmN0aW9uKGUsbixyKXt2YXIgaTtyZXR1cm4gcj90OihpPWUuZ2V0QXR0cmlidXRlTm9kZShuKSkmJiIiIT09aS52YWx1ZT9pLnZhbHVlOm51bGx9LHgudmFsSG9va3MuYnV0dG9uPXtnZXQ6ZnVuY3Rpb24oZSxuKXt2YXIgcj1lLmdldEF0dHJpYnV0ZU5vZGUobik7cmV0dXJuIHImJnIuc3BlY2lmaWVkP3IudmFsdWU6dH0sc2V0Onouc2V0fSx4LmF0dHJIb29rcy5jb250ZW50ZWRpdGFibGU9e3NldDpmdW5jdGlvbihlLHQsbil7ei5zZXQoZSwiIj09PXQ/ITE6dCxuKX19LHguZWFjaChbIndpZHRoIiwiaGVpZ2h0Il0sZnVuY3Rpb24oZSxuKXt4LmF0dHJIb29rc1tuXT17c2V0OmZ1bmN0aW9uKGUscil7cmV0dXJuIiI9PT1yPyhlLnNldEF0dHJpYnV0ZShuLCJhdXRvIikscik6dH19fSkpLHguc3VwcG9ydC5ocmVmTm9ybWFsaXplZHx8eC5lYWNoKFsiaHJlZiIsInNyYyJdLGZ1bmN0aW9uKGUsdCl7eC5wcm9wSG9va3NbdF09e2dldDpmdW5jdGlvbihlKXtyZXR1cm4gZS5nZXRBdHRyaWJ1dGUodCw0KX19fSkseC5zdXBwb3J0LnN0eWxlfHwoeC5hdHRySG9va3Muc3R5bGU9e2dldDpmdW5jdGlvbihlKXtyZXR1cm4gZS5zdHlsZS5jc3NUZXh0fHx0fSxzZXQ6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5zdHlsZS5jc3NUZXh0PXQrIiJ9fSkseC5zdXBwb3J0Lm9wdFNlbGVjdGVkfHwoeC5wcm9wSG9va3Muc2VsZWN0ZWQ9e2dldDpmdW5jdGlvbihlKXt2YXIgdD1lLnBhcmVudE5vZGU7cmV0dXJuIHQmJih0LnNlbGVjdGVkSW5kZXgsdC5wYXJlbnROb2RlJiZ0LnBhcmVudE5vZGUuc2VsZWN0ZWRJbmRleCksbnVsbH19KSx4LmVhY2goWyJ0YWJJbmRleCIsInJlYWRPbmx5IiwibWF4TGVuZ3RoIiwiY2VsbFNwYWNpbmciLCJjZWxsUGFkZGluZyIsInJvd1NwYW4iLCJjb2xTcGFuIiwidXNlTWFwIiwiZnJhbWVCb3JkZXIiLCJjb250ZW50RWRpdGFibGUiXSxmdW5jdGlvbigpe3gucHJvcEZpeFt0aGlzLnRvTG93ZXJDYXNlKCldPXRoaXN9KSx4LnN1cHBvcnQuZW5jdHlwZXx8KHgucHJvcEZpeC5lbmN0eXBlPSJlbmNvZGluZyIpLHguZWFjaChbInJhZGlvIiwiY2hlY2tib3giXSxmdW5jdGlvbigpe3gudmFsSG9va3NbdGhpc109e3NldDpmdW5jdGlvbihlLG4pe3JldHVybiB4LmlzQXJyYXkobik/ZS5jaGVja2VkPXguaW5BcnJheSh4KGUpLnZhbCgpLG4pPj0wOnR9fSx4LnN1cHBvcnQuY2hlY2tPbnx8KHgudmFsSG9va3NbdGhpc10uZ2V0PWZ1bmN0aW9uKGUpe3JldHVybiBudWxsPT09ZS5nZXRBdHRyaWJ1dGUoInZhbHVlIik/Im9uIjplLnZhbHVlfSl9KTt2YXIgWj0vXig/OmlucHV0fHNlbGVjdHx0ZXh0YXJlYSkkL2ksZXQ9L15rZXkvLHR0PS9eKD86bW91c2V8Y29udGV4dG1lbnUpfGNsaWNrLyxudD0vXig/OmZvY3VzaW5mb2N1c3xmb2N1c291dGJsdXIpJC8scnQ9L14oW14uXSopKD86XC4oLispfCkkLztmdW5jdGlvbiBpdCgpe3JldHVybiEwfWZ1bmN0aW9uIG90KCl7cmV0dXJuITF9ZnVuY3Rpb24gYXQoKXt0cnl7cmV0dXJuIGEuYWN0aXZlRWxlbWVudH1jYXRjaChlKXt9fXguZXZlbnQ9e2dsb2JhbDp7fSxhZGQ6ZnVuY3Rpb24oZSxuLHIsbyxhKXt2YXIgcyxsLHUsYyxwLGYsZCxoLGcsbSx5LHY9eC5fZGF0YShlKTtpZih2KXtyLmhhbmRsZXImJihjPXIscj1jLmhhbmRsZXIsYT1jLnNlbGVjdG9yKSxyLmd1aWR8fChyLmd1aWQ9eC5ndWlkKyspLChsPXYuZXZlbnRzKXx8KGw9di5ldmVudHM9e30pLChmPXYuaGFuZGxlKXx8KGY9di5oYW5kbGU9ZnVuY3Rpb24oZSl7cmV0dXJuIHR5cGVvZiB4PT09aXx8ZSYmeC5ldmVudC50cmlnZ2VyZWQ9PT1lLnR5cGU/dDp4LmV2ZW50LmRpc3BhdGNoLmFwcGx5KGYuZWxlbSxhcmd1bWVudHMpfSxmLmVsZW09ZSksbj0obnx8IiIpLm1hdGNoKFQpfHxbIiJdLHU9bi5sZW5ndGg7d2hpbGUodS0tKXM9cnQuZXhlYyhuW3VdKXx8W10sZz15PXNbMV0sbT0oc1syXXx8IiIpLnNwbGl0KCIuIikuc29ydCgpLGcmJihwPXguZXZlbnQuc3BlY2lhbFtnXXx8e30sZz0oYT9wLmRlbGVnYXRlVHlwZTpwLmJpbmRUeXBlKXx8ZyxwPXguZXZlbnQuc3BlY2lhbFtnXXx8e30sZD14LmV4dGVuZCh7dHlwZTpnLG9yaWdUeXBlOnksZGF0YTpvLGhhbmRsZXI6cixndWlkOnIuZ3VpZCxzZWxlY3RvcjphLG5lZWRzQ29udGV4dDphJiZ4LmV4cHIubWF0Y2gubmVlZHNDb250ZXh0LnRlc3QoYSksbmFtZXNwYWNlOm0uam9pbigiLiIpfSxjKSwoaD1sW2ddKXx8KGg9bFtnXT1bXSxoLmRlbGVnYXRlQ291bnQ9MCxwLnNldHVwJiZwLnNldHVwLmNhbGwoZSxvLG0sZikhPT0hMXx8KGUuYWRkRXZlbnRMaXN0ZW5lcj9lLmFkZEV2ZW50TGlzdGVuZXIoZyxmLCExKTplLmF0dGFjaEV2ZW50JiZlLmF0dGFjaEV2ZW50KCJvbiIrZyxmKSkpLHAuYWRkJiYocC5hZGQuY2FsbChlLGQpLGQuaGFuZGxlci5ndWlkfHwoZC5oYW5kbGVyLmd1aWQ9ci5ndWlkKSksYT9oLnNwbGljZShoLmRlbGVnYXRlQ291bnQrKywwLGQpOmgucHVzaChkKSx4LmV2ZW50Lmdsb2JhbFtnXT0hMCk7ZT1udWxsfX0scmVtb3ZlOmZ1bmN0aW9uKGUsdCxuLHIsaSl7dmFyIG8sYSxzLGwsdSxjLHAsZixkLGgsZyxtPXguaGFzRGF0YShlKSYmeC5fZGF0YShlKTtpZihtJiYoYz1tLmV2ZW50cykpe3Q9KHR8fCIiKS5tYXRjaChUKXx8WyIiXSx1PXQubGVuZ3RoO3doaWxlKHUtLSlpZihzPXJ0LmV4ZWModFt1XSl8fFtdLGQ9Zz1zWzFdLGg9KHNbMl18fCIiKS5zcGxpdCgiLiIpLnNvcnQoKSxkKXtwPXguZXZlbnQuc3BlY2lhbFtkXXx8e30sZD0ocj9wLmRlbGVnYXRlVHlwZTpwLmJpbmRUeXBlKXx8ZCxmPWNbZF18fFtdLHM9c1syXSYmUmVnRXhwKCIoXnxcXC4pIitoLmpvaW4oIlxcLig/Oi4qXFwufCkiKSsiKFxcLnwkKSIpLGw9bz1mLmxlbmd0aDt3aGlsZShvLS0pYT1mW29dLCFpJiZnIT09YS5vcmlnVHlwZXx8biYmbi5ndWlkIT09YS5ndWlkfHxzJiYhcy50ZXN0KGEubmFtZXNwYWNlKXx8ciYmciE9PWEuc2VsZWN0b3ImJigiKioiIT09cnx8IWEuc2VsZWN0b3IpfHwoZi5zcGxpY2UobywxKSxhLnNlbGVjdG9yJiZmLmRlbGVnYXRlQ291bnQtLSxwLnJlbW92ZSYmcC5yZW1vdmUuY2FsbChlLGEpKTtsJiYhZi5sZW5ndGgmJihwLnRlYXJkb3duJiZwLnRlYXJkb3duLmNhbGwoZSxoLG0uaGFuZGxlKSE9PSExfHx4LnJlbW92ZUV2ZW50KGUsZCxtLmhhbmRsZSksZGVsZXRlIGNbZF0pfWVsc2UgZm9yKGQgaW4gYyl4LmV2ZW50LnJlbW92ZShlLGQrdFt1XSxuLHIsITApO3guaXNFbXB0eU9iamVjdChjKSYmKGRlbGV0ZSBtLmhhbmRsZSx4Ll9yZW1vdmVEYXRhKGUsImV2ZW50cyIpKX19LHRyaWdnZXI6ZnVuY3Rpb24obixyLGksbyl7dmFyIHMsbCx1LGMscCxmLGQsaD1baXx8YV0sZz12LmNhbGwobiwidHlwZSIpP24udHlwZTpuLG09di5jYWxsKG4sIm5hbWVzcGFjZSIpP24ubmFtZXNwYWNlLnNwbGl0KCIuIik6W107aWYodT1mPWk9aXx8YSwzIT09aS5ub2RlVHlwZSYmOCE9PWkubm9kZVR5cGUmJiFudC50ZXN0KGcreC5ldmVudC50cmlnZ2VyZWQpJiYoZy5pbmRleE9mKCIuIik+PTAmJihtPWcuc3BsaXQoIi4iKSxnPW0uc2hpZnQoKSxtLnNvcnQoKSksbD0wPmcuaW5kZXhPZigiOiIpJiYib24iK2csbj1uW3guZXhwYW5kb10/bjpuZXcgeC5FdmVudChnLCJvYmplY3QiPT10eXBlb2YgbiYmbiksbi5pc1RyaWdnZXI9bz8yOjMsbi5uYW1lc3BhY2U9bS5qb2luKCIuIiksbi5uYW1lc3BhY2VfcmU9bi5uYW1lc3BhY2U/UmVnRXhwKCIoXnxcXC4pIittLmpvaW4oIlxcLig/Oi4qXFwufCkiKSsiKFxcLnwkKSIpOm51bGwsbi5yZXN1bHQ9dCxuLnRhcmdldHx8KG4udGFyZ2V0PWkpLHI9bnVsbD09cj9bbl06eC5tYWtlQXJyYXkocixbbl0pLHA9eC5ldmVudC5zcGVjaWFsW2ddfHx7fSxvfHwhcC50cmlnZ2VyfHxwLnRyaWdnZXIuYXBwbHkoaSxyKSE9PSExKSl7aWYoIW8mJiFwLm5vQnViYmxlJiYheC5pc1dpbmRvdyhpKSl7Zm9yKGM9cC5kZWxlZ2F0ZVR5cGV8fGcsbnQudGVzdChjK2cpfHwodT11LnBhcmVudE5vZGUpO3U7dT11LnBhcmVudE5vZGUpaC5wdXNoKHUpLGY9dTtmPT09KGkub3duZXJEb2N1bWVudHx8YSkmJmgucHVzaChmLmRlZmF1bHRWaWV3fHxmLnBhcmVudFdpbmRvd3x8ZSl9ZD0wO3doaWxlKCh1PWhbZCsrXSkmJiFuLmlzUHJvcGFnYXRpb25TdG9wcGVkKCkpbi50eXBlPWQ+MT9jOnAuYmluZFR5cGV8fGcscz0oeC5fZGF0YSh1LCJldmVudHMiKXx8e30pW24udHlwZV0mJnguX2RhdGEodSwiaGFuZGxlIikscyYmcy5hcHBseSh1LHIpLHM9bCYmdVtsXSxzJiZ4LmFjY2VwdERhdGEodSkmJnMuYXBwbHkmJnMuYXBwbHkodSxyKT09PSExJiZuLnByZXZlbnREZWZhdWx0KCk7aWYobi50eXBlPWcsIW8mJiFuLmlzRGVmYXVsdFByZXZlbnRlZCgpJiYoIXAuX2RlZmF1bHR8fHAuX2RlZmF1bHQuYXBwbHkoaC5wb3AoKSxyKT09PSExKSYmeC5hY2NlcHREYXRhKGkpJiZsJiZpW2ddJiYheC5pc1dpbmRvdyhpKSl7Zj1pW2xdLGYmJihpW2xdPW51bGwpLHguZXZlbnQudHJpZ2dlcmVkPWc7dHJ5e2lbZ10oKX1jYXRjaCh5KXt9eC5ldmVudC50cmlnZ2VyZWQ9dCxmJiYoaVtsXT1mKX1yZXR1cm4gbi5yZXN1bHR9fSxkaXNwYXRjaDpmdW5jdGlvbihlKXtlPXguZXZlbnQuZml4KGUpO3ZhciBuLHIsaSxvLGEscz1bXSxsPWcuY2FsbChhcmd1bWVudHMpLHU9KHguX2RhdGEodGhpcywiZXZlbnRzIil8fHt9KVtlLnR5cGVdfHxbXSxjPXguZXZlbnQuc3BlY2lhbFtlLnR5cGVdfHx7fTtpZihsWzBdPWUsZS5kZWxlZ2F0ZVRhcmdldD10aGlzLCFjLnByZURpc3BhdGNofHxjLnByZURpc3BhdGNoLmNhbGwodGhpcyxlKSE9PSExKXtzPXguZXZlbnQuaGFuZGxlcnMuY2FsbCh0aGlzLGUsdSksbj0wO3doaWxlKChvPXNbbisrXSkmJiFlLmlzUHJvcGFnYXRpb25TdG9wcGVkKCkpe2UuY3VycmVudFRhcmdldD1vLmVsZW0sYT0wO3doaWxlKChpPW8uaGFuZGxlcnNbYSsrXSkmJiFlLmlzSW1tZWRpYXRlUHJvcGFnYXRpb25TdG9wcGVkKCkpKCFlLm5hbWVzcGFjZV9yZXx8ZS5uYW1lc3BhY2VfcmUudGVzdChpLm5hbWVzcGFjZSkpJiYoZS5oYW5kbGVPYmo9aSxlLmRhdGE9aS5kYXRhLHI9KCh4LmV2ZW50LnNwZWNpYWxbaS5vcmlnVHlwZV18fHt9KS5oYW5kbGV8fGkuaGFuZGxlcikuYXBwbHkoby5lbGVtLGwpLHIhPT10JiYoZS5yZXN1bHQ9cik9PT0hMSYmKGUucHJldmVudERlZmF1bHQoKSxlLnN0b3BQcm9wYWdhdGlvbigpKSl9cmV0dXJuIGMucG9zdERpc3BhdGNoJiZjLnBvc3REaXNwYXRjaC5jYWxsKHRoaXMsZSksZS5yZXN1bHR9fSxoYW5kbGVyczpmdW5jdGlvbihlLG4pe3ZhciByLGksbyxhLHM9W10sbD1uLmRlbGVnYXRlQ291bnQsdT1lLnRhcmdldDtpZihsJiZ1Lm5vZGVUeXBlJiYoIWUuYnV0dG9ufHwiY2xpY2siIT09ZS50eXBlKSlmb3IoO3UhPXRoaXM7dT11LnBhcmVudE5vZGV8fHRoaXMpaWYoMT09PXUubm9kZVR5cGUmJih1LmRpc2FibGVkIT09ITB8fCJjbGljayIhPT1lLnR5cGUpKXtmb3Iobz1bXSxhPTA7bD5hO2ErKylpPW5bYV0scj1pLnNlbGVjdG9yKyIgIixvW3JdPT09dCYmKG9bcl09aS5uZWVkc0NvbnRleHQ/eChyLHRoaXMpLmluZGV4KHUpPj0wOnguZmluZChyLHRoaXMsbnVsbCxbdV0pLmxlbmd0aCksb1tyXSYmby5wdXNoKGkpO28ubGVuZ3RoJiZzLnB1c2goe2VsZW06dSxoYW5kbGVyczpvfSl9cmV0dXJuIG4ubGVuZ3RoPmwmJnMucHVzaCh7ZWxlbTp0aGlzLGhhbmRsZXJzOm4uc2xpY2UobCl9KSxzfSxmaXg6ZnVuY3Rpb24oZSl7aWYoZVt4LmV4cGFuZG9dKXJldHVybiBlO3ZhciB0LG4scixpPWUudHlwZSxvPWUscz10aGlzLmZpeEhvb2tzW2ldO3N8fCh0aGlzLmZpeEhvb2tzW2ldPXM9dHQudGVzdChpKT90aGlzLm1vdXNlSG9va3M6ZXQudGVzdChpKT90aGlzLmtleUhvb2tzOnt9KSxyPXMucHJvcHM/dGhpcy5wcm9wcy5jb25jYXQocy5wcm9wcyk6dGhpcy5wcm9wcyxlPW5ldyB4LkV2ZW50KG8pLHQ9ci5sZW5ndGg7d2hpbGUodC0tKW49clt0XSxlW25dPW9bbl07cmV0dXJuIGUudGFyZ2V0fHwoZS50YXJnZXQ9by5zcmNFbGVtZW50fHxhKSwzPT09ZS50YXJnZXQubm9kZVR5cGUmJihlLnRhcmdldD1lLnRhcmdldC5wYXJlbnROb2RlKSxlLm1ldGFLZXk9ISFlLm1ldGFLZXkscy5maWx0ZXI/cy5maWx0ZXIoZSxvKTplfSxwcm9wczoiYWx0S2V5IGJ1YmJsZXMgY2FuY2VsYWJsZSBjdHJsS2V5IGN1cnJlbnRUYXJnZXQgZXZlbnRQaGFzZSBtZXRhS2V5IHJlbGF0ZWRUYXJnZXQgc2hpZnRLZXkgdGFyZ2V0IHRpbWVTdGFtcCB2aWV3IHdoaWNoIi5zcGxpdCgiICIpLGZpeEhvb2tzOnt9LGtleUhvb2tzOntwcm9wczoiY2hhciBjaGFyQ29kZSBrZXkga2V5Q29kZSIuc3BsaXQoIiAiKSxmaWx0ZXI6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gbnVsbD09ZS53aGljaCYmKGUud2hpY2g9bnVsbCE9dC5jaGFyQ29kZT90LmNoYXJDb2RlOnQua2V5Q29kZSksZX19LG1vdXNlSG9va3M6e3Byb3BzOiJidXR0b24gYnV0dG9ucyBjbGllbnRYIGNsaWVudFkgZnJvbUVsZW1lbnQgb2Zmc2V0WCBvZmZzZXRZIHBhZ2VYIHBhZ2VZIHNjcmVlblggc2NyZWVuWSB0b0VsZW1lbnQiLnNwbGl0KCIgIiksZmlsdGVyOmZ1bmN0aW9uKGUsbil7dmFyIHIsaSxvLHM9bi5idXR0b24sbD1uLmZyb21FbGVtZW50O3JldHVybiBudWxsPT1lLnBhZ2VYJiZudWxsIT1uLmNsaWVudFgmJihpPWUudGFyZ2V0Lm93bmVyRG9jdW1lbnR8fGEsbz1pLmRvY3VtZW50RWxlbWVudCxyPWkuYm9keSxlLnBhZ2VYPW4uY2xpZW50WCsobyYmby5zY3JvbGxMZWZ0fHxyJiZyLnNjcm9sbExlZnR8fDApLShvJiZvLmNsaWVudExlZnR8fHImJnIuY2xpZW50TGVmdHx8MCksZS5wYWdlWT1uLmNsaWVudFkrKG8mJm8uc2Nyb2xsVG9wfHxyJiZyLnNjcm9sbFRvcHx8MCktKG8mJm8uY2xpZW50VG9wfHxyJiZyLmNsaWVudFRvcHx8MCkpLCFlLnJlbGF0ZWRUYXJnZXQmJmwmJihlLnJlbGF0ZWRUYXJnZXQ9bD09PWUudGFyZ2V0P24udG9FbGVtZW50OmwpLGUud2hpY2h8fHM9PT10fHwoZS53aGljaD0xJnM/MToyJnM/Mzo0JnM/MjowKSxlfX0sc3BlY2lhbDp7bG9hZDp7bm9CdWJibGU6ITB9LGZvY3VzOnt0cmlnZ2VyOmZ1bmN0aW9uKCl7aWYodGhpcyE9PWF0KCkmJnRoaXMuZm9jdXMpdHJ5e3JldHVybiB0aGlzLmZvY3VzKCksITF9Y2F0Y2goZSl7fX0sZGVsZWdhdGVUeXBlOiJmb2N1c2luIn0sYmx1cjp7dHJpZ2dlcjpmdW5jdGlvbigpe3JldHVybiB0aGlzPT09YXQoKSYmdGhpcy5ibHVyPyh0aGlzLmJsdXIoKSwhMSk6dH0sZGVsZWdhdGVUeXBlOiJmb2N1c291dCJ9LGNsaWNrOnt0cmlnZ2VyOmZ1bmN0aW9uKCl7cmV0dXJuIHgubm9kZU5hbWUodGhpcywiaW5wdXQiKSYmImNoZWNrYm94Ij09PXRoaXMudHlwZSYmdGhpcy5jbGljaz8odGhpcy5jbGljaygpLCExKTp0fSxfZGVmYXVsdDpmdW5jdGlvbihlKXtyZXR1cm4geC5ub2RlTmFtZShlLnRhcmdldCwiYSIpfX0sYmVmb3JldW5sb2FkOntwb3N0RGlzcGF0Y2g6ZnVuY3Rpb24oZSl7ZS5yZXN1bHQhPT10JiYoZS5vcmlnaW5hbEV2ZW50LnJldHVyblZhbHVlPWUucmVzdWx0KX19fSxzaW11bGF0ZTpmdW5jdGlvbihlLHQsbixyKXt2YXIgaT14LmV4dGVuZChuZXcgeC5FdmVudCxuLHt0eXBlOmUsaXNTaW11bGF0ZWQ6ITAsb3JpZ2luYWxFdmVudDp7fX0pO3I/eC5ldmVudC50cmlnZ2VyKGksbnVsbCx0KTp4LmV2ZW50LmRpc3BhdGNoLmNhbGwodCxpKSxpLmlzRGVmYXVsdFByZXZlbnRlZCgpJiZuLnByZXZlbnREZWZhdWx0KCl9fSx4LnJlbW92ZUV2ZW50PWEucmVtb3ZlRXZlbnRMaXN0ZW5lcj9mdW5jdGlvbihlLHQsbil7ZS5yZW1vdmVFdmVudExpc3RlbmVyJiZlLnJlbW92ZUV2ZW50TGlzdGVuZXIodCxuLCExKX06ZnVuY3Rpb24oZSx0LG4pe3ZhciByPSJvbiIrdDtlLmRldGFjaEV2ZW50JiYodHlwZW9mIGVbcl09PT1pJiYoZVtyXT1udWxsKSxlLmRldGFjaEV2ZW50KHIsbikpfSx4LkV2ZW50PWZ1bmN0aW9uKGUsbil7cmV0dXJuIHRoaXMgaW5zdGFuY2VvZiB4LkV2ZW50PyhlJiZlLnR5cGU/KHRoaXMub3JpZ2luYWxFdmVudD1lLHRoaXMudHlwZT1lLnR5cGUsdGhpcy5pc0RlZmF1bHRQcmV2ZW50ZWQ9ZS5kZWZhdWx0UHJldmVudGVkfHxlLnJldHVyblZhbHVlPT09ITF8fGUuZ2V0UHJldmVudERlZmF1bHQmJmUuZ2V0UHJldmVudERlZmF1bHQoKT9pdDpvdCk6dGhpcy50eXBlPWUsbiYmeC5leHRlbmQodGhpcyxuKSx0aGlzLnRpbWVTdGFtcD1lJiZlLnRpbWVTdGFtcHx8eC5ub3coKSx0aGlzW3guZXhwYW5kb109ITAsdCk6bmV3IHguRXZlbnQoZSxuKX0seC5FdmVudC5wcm90b3R5cGU9e2lzRGVmYXVsdFByZXZlbnRlZDpvdCxpc1Byb3BhZ2F0aW9uU3RvcHBlZDpvdCxpc0ltbWVkaWF0ZVByb3BhZ2F0aW9uU3RvcHBlZDpvdCxwcmV2ZW50RGVmYXVsdDpmdW5jdGlvbigpe3ZhciBlPXRoaXMub3JpZ2luYWxFdmVudDt0aGlzLmlzRGVmYXVsdFByZXZlbnRlZD1pdCxlJiYoZS5wcmV2ZW50RGVmYXVsdD9lLnByZXZlbnREZWZhdWx0KCk6ZS5yZXR1cm5WYWx1ZT0hMSl9LHN0b3BQcm9wYWdhdGlvbjpmdW5jdGlvbigpe3ZhciBlPXRoaXMub3JpZ2luYWxFdmVudDt0aGlzLmlzUHJvcGFnYXRpb25TdG9wcGVkPWl0LGUmJihlLnN0b3BQcm9wYWdhdGlvbiYmZS5zdG9wUHJvcGFnYXRpb24oKSxlLmNhbmNlbEJ1YmJsZT0hMCl9LHN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbjpmdW5jdGlvbigpe3RoaXMuaXNJbW1lZGlhdGVQcm9wYWdhdGlvblN0b3BwZWQ9aXQsdGhpcy5zdG9wUHJvcGFnYXRpb24oKX19LHguZWFjaCh7bW91c2VlbnRlcjoibW91c2VvdmVyIixtb3VzZWxlYXZlOiJtb3VzZW91dCJ9LGZ1bmN0aW9uKGUsdCl7eC5ldmVudC5zcGVjaWFsW2VdPXtkZWxlZ2F0ZVR5cGU6dCxiaW5kVHlwZTp0LGhhbmRsZTpmdW5jdGlvbihlKXt2YXIgbixyPXRoaXMsaT1lLnJlbGF0ZWRUYXJnZXQsbz1lLmhhbmRsZU9iajtyZXR1cm4oIWl8fGkhPT1yJiYheC5jb250YWlucyhyLGkpKSYmKGUudHlwZT1vLm9yaWdUeXBlLG49by5oYW5kbGVyLmFwcGx5KHRoaXMsYXJndW1lbnRzKSxlLnR5cGU9dCksbn19fSkseC5zdXBwb3J0LnN1Ym1pdEJ1YmJsZXN8fCh4LmV2ZW50LnNwZWNpYWwuc3VibWl0PXtzZXR1cDpmdW5jdGlvbigpe3JldHVybiB4Lm5vZGVOYW1lKHRoaXMsImZvcm0iKT8hMTooeC5ldmVudC5hZGQodGhpcywiY2xpY2suX3N1Ym1pdCBrZXlwcmVzcy5fc3VibWl0IixmdW5jdGlvbihlKXt2YXIgbj1lLnRhcmdldCxyPXgubm9kZU5hbWUobiwiaW5wdXQiKXx8eC5ub2RlTmFtZShuLCJidXR0b24iKT9uLmZvcm06dDtyJiYheC5fZGF0YShyLCJzdWJtaXRCdWJibGVzIikmJih4LmV2ZW50LmFkZChyLCJzdWJtaXQuX3N1Ym1pdCIsZnVuY3Rpb24oZSl7ZS5fc3VibWl0X2J1YmJsZT0hMH0pLHguX2RhdGEociwic3VibWl0QnViYmxlcyIsITApKX0pLHQpfSxwb3N0RGlzcGF0Y2g6ZnVuY3Rpb24oZSl7ZS5fc3VibWl0X2J1YmJsZSYmKGRlbGV0ZSBlLl9zdWJtaXRfYnViYmxlLHRoaXMucGFyZW50Tm9kZSYmIWUuaXNUcmlnZ2VyJiZ4LmV2ZW50LnNpbXVsYXRlKCJzdWJtaXQiLHRoaXMucGFyZW50Tm9kZSxlLCEwKSl9LHRlYXJkb3duOmZ1bmN0aW9uKCl7cmV0dXJuIHgubm9kZU5hbWUodGhpcywiZm9ybSIpPyExOih4LmV2ZW50LnJlbW92ZSh0aGlzLCIuX3N1Ym1pdCIpLHQpfX0pLHguc3VwcG9ydC5jaGFuZ2VCdWJibGVzfHwoeC5ldmVudC5zcGVjaWFsLmNoYW5nZT17c2V0dXA6ZnVuY3Rpb24oKXtyZXR1cm4gWi50ZXN0KHRoaXMubm9kZU5hbWUpPygoImNoZWNrYm94Ij09PXRoaXMudHlwZXx8InJhZGlvIj09PXRoaXMudHlwZSkmJih4LmV2ZW50LmFkZCh0aGlzLCJwcm9wZXJ0eWNoYW5nZS5fY2hhbmdlIixmdW5jdGlvbihlKXsiY2hlY2tlZCI9PT1lLm9yaWdpbmFsRXZlbnQucHJvcGVydHlOYW1lJiYodGhpcy5fanVzdF9jaGFuZ2VkPSEwKX0pLHguZXZlbnQuYWRkKHRoaXMsImNsaWNrLl9jaGFuZ2UiLGZ1bmN0aW9uKGUpe3RoaXMuX2p1c3RfY2hhbmdlZCYmIWUuaXNUcmlnZ2VyJiYodGhpcy5fanVzdF9jaGFuZ2VkPSExKSx4LmV2ZW50LnNpbXVsYXRlKCJjaGFuZ2UiLHRoaXMsZSwhMCl9KSksITEpOih4LmV2ZW50LmFkZCh0aGlzLCJiZWZvcmVhY3RpdmF0ZS5fY2hhbmdlIixmdW5jdGlvbihlKXt2YXIgdD1lLnRhcmdldDtaLnRlc3QodC5ub2RlTmFtZSkmJiF4Ll9kYXRhKHQsImNoYW5nZUJ1YmJsZXMiKSYmKHguZXZlbnQuYWRkKHQsImNoYW5nZS5fY2hhbmdlIixmdW5jdGlvbihlKXshdGhpcy5wYXJlbnROb2RlfHxlLmlzU2ltdWxhdGVkfHxlLmlzVHJpZ2dlcnx8eC5ldmVudC5zaW11bGF0ZSgiY2hhbmdlIix0aGlzLnBhcmVudE5vZGUsZSwhMCl9KSx4Ll9kYXRhKHQsImNoYW5nZUJ1YmJsZXMiLCEwKSl9KSx0KX0saGFuZGxlOmZ1bmN0aW9uKGUpe3ZhciBuPWUudGFyZ2V0O3JldHVybiB0aGlzIT09bnx8ZS5pc1NpbXVsYXRlZHx8ZS5pc1RyaWdnZXJ8fCJyYWRpbyIhPT1uLnR5cGUmJiJjaGVja2JveCIhPT1uLnR5cGU/ZS5oYW5kbGVPYmouaGFuZGxlci5hcHBseSh0aGlzLGFyZ3VtZW50cyk6dH0sdGVhcmRvd246ZnVuY3Rpb24oKXtyZXR1cm4geC5ldmVudC5yZW1vdmUodGhpcywiLl9jaGFuZ2UiKSwhWi50ZXN0KHRoaXMubm9kZU5hbWUpfX0pLHguc3VwcG9ydC5mb2N1c2luQnViYmxlc3x8eC5lYWNoKHtmb2N1czoiZm9jdXNpbiIsYmx1cjoiZm9jdXNvdXQifSxmdW5jdGlvbihlLHQpe3ZhciBuPTAscj1mdW5jdGlvbihlKXt4LmV2ZW50LnNpbXVsYXRlKHQsZS50YXJnZXQseC5ldmVudC5maXgoZSksITApfTt4LmV2ZW50LnNwZWNpYWxbdF09e3NldHVwOmZ1bmN0aW9uKCl7MD09PW4rKyYmYS5hZGRFdmVudExpc3RlbmVyKGUsciwhMCl9LHRlYXJkb3duOmZ1bmN0aW9uKCl7MD09PS0tbiYmYS5yZW1vdmVFdmVudExpc3RlbmVyKGUsciwhMCl9fX0pLHguZm4uZXh0ZW5kKHtvbjpmdW5jdGlvbihlLG4scixpLG8pe3ZhciBhLHM7aWYoIm9iamVjdCI9PXR5cGVvZiBlKXsic3RyaW5nIiE9dHlwZW9mIG4mJihyPXJ8fG4sbj10KTtmb3IoYSBpbiBlKXRoaXMub24oYSxuLHIsZVthXSxvKTtyZXR1cm4gdGhpc31pZihudWxsPT1yJiZudWxsPT1pPyhpPW4scj1uPXQpOm51bGw9PWkmJigic3RyaW5nIj09dHlwZW9mIG4/KGk9cixyPXQpOihpPXIscj1uLG49dCkpLGk9PT0hMSlpPW90O2Vsc2UgaWYoIWkpcmV0dXJuIHRoaXM7cmV0dXJuIDE9PT1vJiYocz1pLGk9ZnVuY3Rpb24oZSl7cmV0dXJuIHgoKS5vZmYoZSkscy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9LGkuZ3VpZD1zLmd1aWR8fChzLmd1aWQ9eC5ndWlkKyspKSx0aGlzLmVhY2goZnVuY3Rpb24oKXt4LmV2ZW50LmFkZCh0aGlzLGUsaSxyLG4pfSl9LG9uZTpmdW5jdGlvbihlLHQsbixyKXtyZXR1cm4gdGhpcy5vbihlLHQsbixyLDEpfSxvZmY6ZnVuY3Rpb24oZSxuLHIpe3ZhciBpLG87aWYoZSYmZS5wcmV2ZW50RGVmYXVsdCYmZS5oYW5kbGVPYmopcmV0dXJuIGk9ZS5oYW5kbGVPYmoseChlLmRlbGVnYXRlVGFyZ2V0KS5vZmYoaS5uYW1lc3BhY2U/aS5vcmlnVHlwZSsiLiIraS5uYW1lc3BhY2U6aS5vcmlnVHlwZSxpLnNlbGVjdG9yLGkuaGFuZGxlciksdGhpcztpZigib2JqZWN0Ij09dHlwZW9mIGUpe2ZvcihvIGluIGUpdGhpcy5vZmYobyxuLGVbb10pO3JldHVybiB0aGlzfXJldHVybihuPT09ITF8fCJmdW5jdGlvbiI9PXR5cGVvZiBuKSYmKHI9bixuPXQpLHI9PT0hMSYmKHI9b3QpLHRoaXMuZWFjaChmdW5jdGlvbigpe3guZXZlbnQucmVtb3ZlKHRoaXMsZSxyLG4pfSl9LHRyaWdnZXI6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7eC5ldmVudC50cmlnZ2VyKGUsdCx0aGlzKX0pfSx0cmlnZ2VySGFuZGxlcjpmdW5jdGlvbihlLG4pe3ZhciByPXRoaXNbMF07cmV0dXJuIHI/eC5ldmVudC50cmlnZ2VyKGUsbixyLCEwKTp0fX0pO3ZhciBzdD0vXi5bXjojXFtcLixdKiQvLGx0PS9eKD86cGFyZW50c3xwcmV2KD86VW50aWx8QWxsKSkvLHV0PXguZXhwci5tYXRjaC5uZWVkc0NvbnRleHQsY3Q9e2NoaWxkcmVuOiEwLGNvbnRlbnRzOiEwLG5leHQ6ITAscHJldjohMH07eC5mbi5leHRlbmQoe2ZpbmQ6ZnVuY3Rpb24oZSl7dmFyIHQsbj1bXSxyPXRoaXMsaT1yLmxlbmd0aDtpZigic3RyaW5nIiE9dHlwZW9mIGUpcmV0dXJuIHRoaXMucHVzaFN0YWNrKHgoZSkuZmlsdGVyKGZ1bmN0aW9uKCl7Zm9yKHQ9MDtpPnQ7dCsrKWlmKHguY29udGFpbnMoclt0XSx0aGlzKSlyZXR1cm4hMH0pKTtmb3IodD0wO2k+dDt0KyspeC5maW5kKGUsclt0XSxuKTtyZXR1cm4gbj10aGlzLnB1c2hTdGFjayhpPjE/eC51bmlxdWUobik6biksbi5zZWxlY3Rvcj10aGlzLnNlbGVjdG9yP3RoaXMuc2VsZWN0b3IrIiAiK2U6ZSxufSxoYXM6ZnVuY3Rpb24oZSl7dmFyIHQsbj14KGUsdGhpcykscj1uLmxlbmd0aDtyZXR1cm4gdGhpcy5maWx0ZXIoZnVuY3Rpb24oKXtmb3IodD0wO3I+dDt0KyspaWYoeC5jb250YWlucyh0aGlzLG5bdF0pKXJldHVybiEwfSl9LG5vdDpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5wdXNoU3RhY2soZnQodGhpcyxlfHxbXSwhMCkpfSxmaWx0ZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMucHVzaFN0YWNrKGZ0KHRoaXMsZXx8W10sITEpKX0saXM6ZnVuY3Rpb24oZSl7cmV0dXJuISFmdCh0aGlzLCJzdHJpbmciPT10eXBlb2YgZSYmdXQudGVzdChlKT94KGUpOmV8fFtdLCExKS5sZW5ndGh9LGNsb3Nlc3Q6ZnVuY3Rpb24oZSx0KXt2YXIgbixyPTAsaT10aGlzLmxlbmd0aCxvPVtdLGE9dXQudGVzdChlKXx8InN0cmluZyIhPXR5cGVvZiBlP3goZSx0fHx0aGlzLmNvbnRleHQpOjA7Zm9yKDtpPnI7cisrKWZvcihuPXRoaXNbcl07biYmbiE9PXQ7bj1uLnBhcmVudE5vZGUpaWYoMTE+bi5ub2RlVHlwZSYmKGE/YS5pbmRleChuKT4tMToxPT09bi5ub2RlVHlwZSYmeC5maW5kLm1hdGNoZXNTZWxlY3RvcihuLGUpKSl7bj1vLnB1c2gobik7YnJlYWt9cmV0dXJuIHRoaXMucHVzaFN0YWNrKG8ubGVuZ3RoPjE/eC51bmlxdWUobyk6byl9LGluZGV4OmZ1bmN0aW9uKGUpe3JldHVybiBlPyJzdHJpbmciPT10eXBlb2YgZT94LmluQXJyYXkodGhpc1swXSx4KGUpKTp4LmluQXJyYXkoZS5qcXVlcnk/ZVswXTplLHRoaXMpOnRoaXNbMF0mJnRoaXNbMF0ucGFyZW50Tm9kZT90aGlzLmZpcnN0KCkucHJldkFsbCgpLmxlbmd0aDotMX0sYWRkOmZ1bmN0aW9uKGUsdCl7dmFyIG49InN0cmluZyI9PXR5cGVvZiBlP3goZSx0KTp4Lm1ha2VBcnJheShlJiZlLm5vZGVUeXBlP1tlXTplKSxyPXgubWVyZ2UodGhpcy5nZXQoKSxuKTtyZXR1cm4gdGhpcy5wdXNoU3RhY2soeC51bmlxdWUocikpfSxhZGRCYWNrOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmFkZChudWxsPT1lP3RoaXMucHJldk9iamVjdDp0aGlzLnByZXZPYmplY3QuZmlsdGVyKGUpKX19KTtmdW5jdGlvbiBwdChlLHQpe2RvIGU9ZVt0XTt3aGlsZShlJiYxIT09ZS5ub2RlVHlwZSk7cmV0dXJuIGV9eC5lYWNoKHtwYXJlbnQ6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5wYXJlbnROb2RlO3JldHVybiB0JiYxMSE9PXQubm9kZVR5cGU/dDpudWxsfSxwYXJlbnRzOmZ1bmN0aW9uKGUpe3JldHVybiB4LmRpcihlLCJwYXJlbnROb2RlIil9LHBhcmVudHNVbnRpbDpmdW5jdGlvbihlLHQsbil7cmV0dXJuIHguZGlyKGUsInBhcmVudE5vZGUiLG4pfSxuZXh0OmZ1bmN0aW9uKGUpe3JldHVybiBwdChlLCJuZXh0U2libGluZyIpfSxwcmV2OmZ1bmN0aW9uKGUpe3JldHVybiBwdChlLCJwcmV2aW91c1NpYmxpbmciKX0sbmV4dEFsbDpmdW5jdGlvbihlKXtyZXR1cm4geC5kaXIoZSwibmV4dFNpYmxpbmciKX0scHJldkFsbDpmdW5jdGlvbihlKXtyZXR1cm4geC5kaXIoZSwicHJldmlvdXNTaWJsaW5nIil9LG5leHRVbnRpbDpmdW5jdGlvbihlLHQsbil7cmV0dXJuIHguZGlyKGUsIm5leHRTaWJsaW5nIixuKX0scHJldlVudGlsOmZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4geC5kaXIoZSwicHJldmlvdXNTaWJsaW5nIixuKX0sc2libGluZ3M6ZnVuY3Rpb24oZSl7cmV0dXJuIHguc2libGluZygoZS5wYXJlbnROb2RlfHx7fSkuZmlyc3RDaGlsZCxlKX0sY2hpbGRyZW46ZnVuY3Rpb24oZSl7cmV0dXJuIHguc2libGluZyhlLmZpcnN0Q2hpbGQpfSxjb250ZW50czpmdW5jdGlvbihlKXtyZXR1cm4geC5ub2RlTmFtZShlLCJpZnJhbWUiKT9lLmNvbnRlbnREb2N1bWVudHx8ZS5jb250ZW50V2luZG93LmRvY3VtZW50OngubWVyZ2UoW10sZS5jaGlsZE5vZGVzKX19LGZ1bmN0aW9uKGUsdCl7eC5mbltlXT1mdW5jdGlvbihuLHIpe3ZhciBpPXgubWFwKHRoaXMsdCxuKTtyZXR1cm4iVW50aWwiIT09ZS5zbGljZSgtNSkmJihyPW4pLHImJiJzdHJpbmciPT10eXBlb2YgciYmKGk9eC5maWx0ZXIocixpKSksdGhpcy5sZW5ndGg+MSYmKGN0W2VdfHwoaT14LnVuaXF1ZShpKSksbHQudGVzdChlKSYmKGk9aS5yZXZlcnNlKCkpKSx0aGlzLnB1c2hTdGFjayhpKX19KSx4LmV4dGVuZCh7ZmlsdGVyOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10WzBdO3JldHVybiBuJiYoZT0iOm5vdCgiK2UrIikiKSwxPT09dC5sZW5ndGgmJjE9PT1yLm5vZGVUeXBlP3guZmluZC5tYXRjaGVzU2VsZWN0b3IocixlKT9bcl06W106eC5maW5kLm1hdGNoZXMoZSx4LmdyZXAodCxmdW5jdGlvbihlKXtyZXR1cm4gMT09PWUubm9kZVR5cGV9KSl9LGRpcjpmdW5jdGlvbihlLG4scil7dmFyIGk9W10sbz1lW25dO3doaWxlKG8mJjkhPT1vLm5vZGVUeXBlJiYocj09PXR8fDEhPT1vLm5vZGVUeXBlfHwheChvKS5pcyhyKSkpMT09PW8ubm9kZVR5cGUmJmkucHVzaChvKSxvPW9bbl07cmV0dXJuIGl9LHNpYmxpbmc6ZnVuY3Rpb24oZSx0KXt2YXIgbj1bXTtmb3IoO2U7ZT1lLm5leHRTaWJsaW5nKTE9PT1lLm5vZGVUeXBlJiZlIT09dCYmbi5wdXNoKGUpO3JldHVybiBufX0pO2Z1bmN0aW9uIGZ0KGUsdCxuKXtpZih4LmlzRnVuY3Rpb24odCkpcmV0dXJuIHguZ3JlcChlLGZ1bmN0aW9uKGUscil7cmV0dXJuISF0LmNhbGwoZSxyLGUpIT09bn0pO2lmKHQubm9kZVR5cGUpcmV0dXJuIHguZ3JlcChlLGZ1bmN0aW9uKGUpe3JldHVybiBlPT09dCE9PW59KTtpZigic3RyaW5nIj09dHlwZW9mIHQpe2lmKHN0LnRlc3QodCkpcmV0dXJuIHguZmlsdGVyKHQsZSxuKTt0PXguZmlsdGVyKHQsZSl9cmV0dXJuIHguZ3JlcChlLGZ1bmN0aW9uKGUpe3JldHVybiB4LmluQXJyYXkoZSx0KT49MCE9PW59KX1mdW5jdGlvbiBkdChlKXt2YXIgdD1odC5zcGxpdCgifCIpLG49ZS5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7aWYobi5jcmVhdGVFbGVtZW50KXdoaWxlKHQubGVuZ3RoKW4uY3JlYXRlRWxlbWVudCh0LnBvcCgpKTtyZXR1cm4gbn12YXIgaHQ9ImFiYnJ8YXJ0aWNsZXxhc2lkZXxhdWRpb3xiZGl8Y2FudmFzfGRhdGF8ZGF0YWxpc3R8ZGV0YWlsc3xmaWdjYXB0aW9ufGZpZ3VyZXxmb290ZXJ8aGVhZGVyfGhncm91cHxtYXJrfG1ldGVyfG5hdnxvdXRwdXR8cHJvZ3Jlc3N8c2VjdGlvbnxzdW1tYXJ5fHRpbWV8dmlkZW8iLGd0PS8galF1ZXJ5XGQrPSIoPzpudWxsfFxkKykiL2csbXQ9UmVnRXhwKCI8KD86IitodCsiKVtcXHMvPl0iLCJpIikseXQ9L15ccysvLHZ0PS88KD8hYXJlYXxicnxjb2x8ZW1iZWR8aHJ8aW1nfGlucHV0fGxpbmt8bWV0YXxwYXJhbSkoKFtcdzpdKylbXj5dKilcLz4vZ2ksYnQ9LzwoW1x3Ol0rKS8seHQ9Lzx0Ym9keS9pLHd0PS88fCYjP1x3KzsvLFR0PS88KD86c2NyaXB0fHN0eWxlfGxpbmspL2ksQ3Q9L14oPzpjaGVja2JveHxyYWRpbykkL2ksTnQ9L2NoZWNrZWRccyooPzpbXj1dfD1ccyouY2hlY2tlZC4pL2ksa3Q9L14kfFwvKD86amF2YXxlY21hKXNjcmlwdC9pLEV0PS9edHJ1ZVwvKC4qKS8sU3Q9L15ccyo8ISg/OlxbQ0RBVEFcW3wtLSl8KD86XF1cXXwtLSk+XHMqJC9nLEF0PXtvcHRpb246WzEsIjxzZWxlY3QgbXVsdGlwbGU9J211bHRpcGxlJz4iLCI8L3NlbGVjdD4iXSxsZWdlbmQ6WzEsIjxmaWVsZHNldD4iLCI8L2ZpZWxkc2V0PiJdLGFyZWE6WzEsIjxtYXA+IiwiPC9tYXA+Il0scGFyYW06WzEsIjxvYmplY3Q+IiwiPC9vYmplY3Q+Il0sdGhlYWQ6WzEsIjx0YWJsZT4iLCI8L3RhYmxlPiJdLHRyOlsyLCI8dGFibGU+PHRib2R5PiIsIjwvdGJvZHk+PC90YWJsZT4iXSxjb2w6WzIsIjx0YWJsZT48dGJvZHk+PC90Ym9keT48Y29sZ3JvdXA+IiwiPC9jb2xncm91cD48L3RhYmxlPiJdLHRkOlszLCI8dGFibGU+PHRib2R5Pjx0cj4iLCI8L3RyPjwvdGJvZHk+PC90YWJsZT4iXSxfZGVmYXVsdDp4LnN1cHBvcnQuaHRtbFNlcmlhbGl6ZT9bMCwiIiwiIl06WzEsIlg8ZGl2PiIsIjwvZGl2PiJdfSxqdD1kdChhKSxEdD1qdC5hcHBlbmRDaGlsZChhLmNyZWF0ZUVsZW1lbnQoImRpdiIpKTtBdC5vcHRncm91cD1BdC5vcHRpb24sQXQudGJvZHk9QXQudGZvb3Q9QXQuY29sZ3JvdXA9QXQuY2FwdGlvbj1BdC50aGVhZCxBdC50aD1BdC50ZCx4LmZuLmV4dGVuZCh7dGV4dDpmdW5jdGlvbihlKXtyZXR1cm4geC5hY2Nlc3ModGhpcyxmdW5jdGlvbihlKXtyZXR1cm4gZT09PXQ/eC50ZXh0KHRoaXMpOnRoaXMuZW1wdHkoKS5hcHBlbmQoKHRoaXNbMF0mJnRoaXNbMF0ub3duZXJEb2N1bWVudHx8YSkuY3JlYXRlVGV4dE5vZGUoZSkpfSxudWxsLGUsYXJndW1lbnRzLmxlbmd0aCl9LGFwcGVuZDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmRvbU1hbmlwKGFyZ3VtZW50cyxmdW5jdGlvbihlKXtpZigxPT09dGhpcy5ub2RlVHlwZXx8MTE9PT10aGlzLm5vZGVUeXBlfHw5PT09dGhpcy5ub2RlVHlwZSl7dmFyIHQ9THQodGhpcyxlKTt0LmFwcGVuZENoaWxkKGUpfX0pfSxwcmVwZW5kOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZG9tTWFuaXAoYXJndW1lbnRzLGZ1bmN0aW9uKGUpe2lmKDE9PT10aGlzLm5vZGVUeXBlfHwxMT09PXRoaXMubm9kZVR5cGV8fDk9PT10aGlzLm5vZGVUeXBlKXt2YXIgdD1MdCh0aGlzLGUpO3QuaW5zZXJ0QmVmb3JlKGUsdC5maXJzdENoaWxkKX19KX0sYmVmb3JlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZG9tTWFuaXAoYXJndW1lbnRzLGZ1bmN0aW9uKGUpe3RoaXMucGFyZW50Tm9kZSYmdGhpcy5wYXJlbnROb2RlLmluc2VydEJlZm9yZShlLHRoaXMpfSl9LGFmdGVyOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZG9tTWFuaXAoYXJndW1lbnRzLGZ1bmN0aW9uKGUpe3RoaXMucGFyZW50Tm9kZSYmdGhpcy5wYXJlbnROb2RlLmluc2VydEJlZm9yZShlLHRoaXMubmV4dFNpYmxpbmcpfSl9LHJlbW92ZTpmdW5jdGlvbihlLHQpe3ZhciBuLHI9ZT94LmZpbHRlcihlLHRoaXMpOnRoaXMsaT0wO2Zvcig7bnVsbCE9KG49cltpXSk7aSsrKXR8fDEhPT1uLm5vZGVUeXBlfHx4LmNsZWFuRGF0YShGdChuKSksbi5wYXJlbnROb2RlJiYodCYmeC5jb250YWlucyhuLm93bmVyRG9jdW1lbnQsbikmJl90KEZ0KG4sInNjcmlwdCIpKSxuLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQobikpO3JldHVybiB0aGlzfSxlbXB0eTpmdW5jdGlvbigpe3ZhciBlLHQ9MDtmb3IoO251bGwhPShlPXRoaXNbdF0pO3QrKyl7MT09PWUubm9kZVR5cGUmJnguY2xlYW5EYXRhKEZ0KGUsITEpKTt3aGlsZShlLmZpcnN0Q2hpbGQpZS5yZW1vdmVDaGlsZChlLmZpcnN0Q2hpbGQpO2Uub3B0aW9ucyYmeC5ub2RlTmFtZShlLCJzZWxlY3QiKSYmKGUub3B0aW9ucy5sZW5ndGg9MCl9cmV0dXJuIHRoaXN9LGNsb25lOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGU9bnVsbD09ZT8hMTplLHQ9bnVsbD09dD9lOnQsdGhpcy5tYXAoZnVuY3Rpb24oKXtyZXR1cm4geC5jbG9uZSh0aGlzLGUsdCl9KX0saHRtbDpmdW5jdGlvbihlKXtyZXR1cm4geC5hY2Nlc3ModGhpcyxmdW5jdGlvbihlKXt2YXIgbj10aGlzWzBdfHx7fSxyPTAsaT10aGlzLmxlbmd0aDtpZihlPT09dClyZXR1cm4gMT09PW4ubm9kZVR5cGU/bi5pbm5lckhUTUwucmVwbGFjZShndCwiIik6dDtpZighKCJzdHJpbmciIT10eXBlb2YgZXx8VHQudGVzdChlKXx8IXguc3VwcG9ydC5odG1sU2VyaWFsaXplJiZtdC50ZXN0KGUpfHwheC5zdXBwb3J0LmxlYWRpbmdXaGl0ZXNwYWNlJiZ5dC50ZXN0KGUpfHxBdFsoYnQuZXhlYyhlKXx8WyIiLCIiXSlbMV0udG9Mb3dlckNhc2UoKV0pKXtlPWUucmVwbGFjZSh2dCwiPCQxPjwvJDI+Iik7dHJ5e2Zvcig7aT5yO3IrKyluPXRoaXNbcl18fHt9LDE9PT1uLm5vZGVUeXBlJiYoeC5jbGVhbkRhdGEoRnQobiwhMSkpLG4uaW5uZXJIVE1MPWUpO249MH1jYXRjaChvKXt9fW4mJnRoaXMuZW1wdHkoKS5hcHBlbmQoZSl9LG51bGwsZSxhcmd1bWVudHMubGVuZ3RoKX0scmVwbGFjZVdpdGg6ZnVuY3Rpb24oKXt2YXIgZT14Lm1hcCh0aGlzLGZ1bmN0aW9uKGUpe3JldHVybltlLm5leHRTaWJsaW5nLGUucGFyZW50Tm9kZV19KSx0PTA7cmV0dXJuIHRoaXMuZG9tTWFuaXAoYXJndW1lbnRzLGZ1bmN0aW9uKG4pe3ZhciByPWVbdCsrXSxpPWVbdCsrXTtpJiYociYmci5wYXJlbnROb2RlIT09aSYmKHI9dGhpcy5uZXh0U2libGluZykseCh0aGlzKS5yZW1vdmUoKSxpLmluc2VydEJlZm9yZShuLHIpKX0sITApLHQ/dGhpczp0aGlzLnJlbW92ZSgpfSxkZXRhY2g6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMucmVtb3ZlKGUsITApfSxkb21NYW5pcDpmdW5jdGlvbihlLHQsbil7ZT1kLmFwcGx5KFtdLGUpO3ZhciByLGksbyxhLHMsbCx1PTAsYz10aGlzLmxlbmd0aCxwPXRoaXMsZj1jLTEsaD1lWzBdLGc9eC5pc0Z1bmN0aW9uKGgpO2lmKGd8fCEoMT49Y3x8InN0cmluZyIhPXR5cGVvZiBofHx4LnN1cHBvcnQuY2hlY2tDbG9uZSkmJk50LnRlc3QoaCkpcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbihyKXt2YXIgaT1wLmVxKHIpO2cmJihlWzBdPWguY2FsbCh0aGlzLHIsaS5odG1sKCkpKSxpLmRvbU1hbmlwKGUsdCxuKX0pO2lmKGMmJihsPXguYnVpbGRGcmFnbWVudChlLHRoaXNbMF0ub3duZXJEb2N1bWVudCwhMSwhbiYmdGhpcykscj1sLmZpcnN0Q2hpbGQsMT09PWwuY2hpbGROb2Rlcy5sZW5ndGgmJihsPXIpLHIpKXtmb3IoYT14Lm1hcChGdChsLCJzY3JpcHQiKSxIdCksbz1hLmxlbmd0aDtjPnU7dSsrKWk9bCx1IT09ZiYmKGk9eC5jbG9uZShpLCEwLCEwKSxvJiZ4Lm1lcmdlKGEsRnQoaSwic2NyaXB0IikpKSx0LmNhbGwodGhpc1t1XSxpLHUpO2lmKG8pZm9yKHM9YVthLmxlbmd0aC0xXS5vd25lckRvY3VtZW50LHgubWFwKGEscXQpLHU9MDtvPnU7dSsrKWk9YVt1XSxrdC50ZXN0KGkudHlwZXx8IiIpJiYheC5fZGF0YShpLCJnbG9iYWxFdmFsIikmJnguY29udGFpbnMocyxpKSYmKGkuc3JjP3guX2V2YWxVcmwoaS5zcmMpOnguZ2xvYmFsRXZhbCgoaS50ZXh0fHxpLnRleHRDb250ZW50fHxpLmlubmVySFRNTHx8IiIpLnJlcGxhY2UoU3QsIiIpKSk7bD1yPW51bGx9cmV0dXJuIHRoaXN9fSk7ZnVuY3Rpb24gTHQoZSx0KXtyZXR1cm4geC5ub2RlTmFtZShlLCJ0YWJsZSIpJiZ4Lm5vZGVOYW1lKDE9PT10Lm5vZGVUeXBlP3Q6dC5maXJzdENoaWxkLCJ0ciIpP2UuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInRib2R5IilbMF18fGUuYXBwZW5kQ2hpbGQoZS5vd25lckRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRib2R5IikpOmV9ZnVuY3Rpb24gSHQoZSl7cmV0dXJuIGUudHlwZT0obnVsbCE9PXguZmluZC5hdHRyKGUsInR5cGUiKSkrIi8iK2UudHlwZSxlfWZ1bmN0aW9uIHF0KGUpe3ZhciB0PUV0LmV4ZWMoZS50eXBlKTtyZXR1cm4gdD9lLnR5cGU9dFsxXTplLnJlbW92ZUF0dHJpYnV0ZSgidHlwZSIpLGV9ZnVuY3Rpb24gX3QoZSx0KXt2YXIgbixyPTA7Zm9yKDtudWxsIT0obj1lW3JdKTtyKyspeC5fZGF0YShuLCJnbG9iYWxFdmFsIiwhdHx8eC5fZGF0YSh0W3JdLCJnbG9iYWxFdmFsIikpfWZ1bmN0aW9uIE10KGUsdCl7aWYoMT09PXQubm9kZVR5cGUmJnguaGFzRGF0YShlKSl7dmFyIG4scixpLG89eC5fZGF0YShlKSxhPXguX2RhdGEodCxvKSxzPW8uZXZlbnRzO2lmKHMpe2RlbGV0ZSBhLmhhbmRsZSxhLmV2ZW50cz17fTtmb3IobiBpbiBzKWZvcihyPTAsaT1zW25dLmxlbmd0aDtpPnI7cisrKXguZXZlbnQuYWRkKHQsbixzW25dW3JdKX1hLmRhdGEmJihhLmRhdGE9eC5leHRlbmQoe30sYS5kYXRhKSl9fWZ1bmN0aW9uIE90KGUsdCl7dmFyIG4scixpO2lmKDE9PT10Lm5vZGVUeXBlKXtpZihuPXQubm9kZU5hbWUudG9Mb3dlckNhc2UoKSwheC5zdXBwb3J0Lm5vQ2xvbmVFdmVudCYmdFt4LmV4cGFuZG9dKXtpPXguX2RhdGEodCk7Zm9yKHIgaW4gaS5ldmVudHMpeC5yZW1vdmVFdmVudCh0LHIsaS5oYW5kbGUpO3QucmVtb3ZlQXR0cmlidXRlKHguZXhwYW5kbyl9InNjcmlwdCI9PT1uJiZ0LnRleHQhPT1lLnRleHQ/KEh0KHQpLnRleHQ9ZS50ZXh0LHF0KHQpKToib2JqZWN0Ij09PW4/KHQucGFyZW50Tm9kZSYmKHQub3V0ZXJIVE1MPWUub3V0ZXJIVE1MKSx4LnN1cHBvcnQuaHRtbDVDbG9uZSYmZS5pbm5lckhUTUwmJiF4LnRyaW0odC5pbm5lckhUTUwpJiYodC5pbm5lckhUTUw9ZS5pbm5lckhUTUwpKToiaW5wdXQiPT09biYmQ3QudGVzdChlLnR5cGUpPyh0LmRlZmF1bHRDaGVja2VkPXQuY2hlY2tlZD1lLmNoZWNrZWQsdC52YWx1ZSE9PWUudmFsdWUmJih0LnZhbHVlPWUudmFsdWUpKToib3B0aW9uIj09PW4/dC5kZWZhdWx0U2VsZWN0ZWQ9dC5zZWxlY3RlZD1lLmRlZmF1bHRTZWxlY3RlZDooImlucHV0Ij09PW58fCJ0ZXh0YXJlYSI9PT1uKSYmKHQuZGVmYXVsdFZhbHVlPWUuZGVmYXVsdFZhbHVlKX19eC5lYWNoKHthcHBlbmRUbzoiYXBwZW5kIixwcmVwZW5kVG86InByZXBlbmQiLGluc2VydEJlZm9yZToiYmVmb3JlIixpbnNlcnRBZnRlcjoiYWZ0ZXIiLHJlcGxhY2VBbGw6InJlcGxhY2VXaXRoIn0sZnVuY3Rpb24oZSx0KXt4LmZuW2VdPWZ1bmN0aW9uKGUpe3ZhciBuLHI9MCxpPVtdLG89eChlKSxhPW8ubGVuZ3RoLTE7Zm9yKDthPj1yO3IrKyluPXI9PT1hP3RoaXM6dGhpcy5jbG9uZSghMCkseChvW3JdKVt0XShuKSxoLmFwcGx5KGksbi5nZXQoKSk7cmV0dXJuIHRoaXMucHVzaFN0YWNrKGkpfX0pO2Z1bmN0aW9uIEZ0KGUsbil7dmFyIHIsbyxhPTAscz10eXBlb2YgZS5nZXRFbGVtZW50c0J5VGFnTmFtZSE9PWk/ZS5nZXRFbGVtZW50c0J5VGFnTmFtZShufHwiKiIpOnR5cGVvZiBlLnF1ZXJ5U2VsZWN0b3JBbGwhPT1pP2UucXVlcnlTZWxlY3RvckFsbChufHwiKiIpOnQ7aWYoIXMpZm9yKHM9W10scj1lLmNoaWxkTm9kZXN8fGU7bnVsbCE9KG89clthXSk7YSsrKSFufHx4Lm5vZGVOYW1lKG8sbik/cy5wdXNoKG8pOngubWVyZ2UocyxGdChvLG4pKTtyZXR1cm4gbj09PXR8fG4mJngubm9kZU5hbWUoZSxuKT94Lm1lcmdlKFtlXSxzKTpzfWZ1bmN0aW9uIEJ0KGUpe0N0LnRlc3QoZS50eXBlKSYmKGUuZGVmYXVsdENoZWNrZWQ9ZS5jaGVja2VkKX14LmV4dGVuZCh7Y2xvbmU6ZnVuY3Rpb24oZSx0LG4pe3ZhciByLGksbyxhLHMsbD14LmNvbnRhaW5zKGUub3duZXJEb2N1bWVudCxlKTtpZih4LnN1cHBvcnQuaHRtbDVDbG9uZXx8eC5pc1hNTERvYyhlKXx8IW10LnRlc3QoIjwiK2Uubm9kZU5hbWUrIj4iKT9vPWUuY2xvbmVOb2RlKCEwKTooRHQuaW5uZXJIVE1MPWUub3V0ZXJIVE1MLER0LnJlbW92ZUNoaWxkKG89RHQuZmlyc3RDaGlsZCkpLCEoeC5zdXBwb3J0Lm5vQ2xvbmVFdmVudCYmeC5zdXBwb3J0Lm5vQ2xvbmVDaGVja2VkfHwxIT09ZS5ub2RlVHlwZSYmMTEhPT1lLm5vZGVUeXBlfHx4LmlzWE1MRG9jKGUpKSlmb3Iocj1GdChvKSxzPUZ0KGUpLGE9MDtudWxsIT0oaT1zW2FdKTsrK2EpclthXSYmT3QoaSxyW2FdKTtpZih0KWlmKG4pZm9yKHM9c3x8RnQoZSkscj1yfHxGdChvKSxhPTA7bnVsbCE9KGk9c1thXSk7YSsrKU10KGksclthXSk7ZWxzZSBNdChlLG8pO3JldHVybiByPUZ0KG8sInNjcmlwdCIpLHIubGVuZ3RoPjAmJl90KHIsIWwmJkZ0KGUsInNjcmlwdCIpKSxyPXM9aT1udWxsLG99LGJ1aWxkRnJhZ21lbnQ6ZnVuY3Rpb24oZSx0LG4scil7dmFyIGksbyxhLHMsbCx1LGMscD1lLmxlbmd0aCxmPWR0KHQpLGQ9W10saD0wO2Zvcig7cD5oO2grKylpZihvPWVbaF0sb3x8MD09PW8paWYoIm9iamVjdCI9PT14LnR5cGUobykpeC5tZXJnZShkLG8ubm9kZVR5cGU/W29dOm8pO2Vsc2UgaWYod3QudGVzdChvKSl7cz1zfHxmLmFwcGVuZENoaWxkKHQuY3JlYXRlRWxlbWVudCgiZGl2IikpLGw9KGJ0LmV4ZWMobyl8fFsiIiwiIl0pWzFdLnRvTG93ZXJDYXNlKCksYz1BdFtsXXx8QXQuX2RlZmF1bHQscy5pbm5lckhUTUw9Y1sxXStvLnJlcGxhY2UodnQsIjwkMT48LyQyPiIpK2NbMl0saT1jWzBdO3doaWxlKGktLSlzPXMubGFzdENoaWxkO2lmKCF4LnN1cHBvcnQubGVhZGluZ1doaXRlc3BhY2UmJnl0LnRlc3QobykmJmQucHVzaCh0LmNyZWF0ZVRleHROb2RlKHl0LmV4ZWMobylbMF0pKSwheC5zdXBwb3J0LnRib2R5KXtvPSJ0YWJsZSIhPT1sfHx4dC50ZXN0KG8pPyI8dGFibGU+IiE9PWNbMV18fHh0LnRlc3Qobyk/MDpzOnMuZmlyc3RDaGlsZCxpPW8mJm8uY2hpbGROb2Rlcy5sZW5ndGg7d2hpbGUoaS0tKXgubm9kZU5hbWUodT1vLmNoaWxkTm9kZXNbaV0sInRib2R5IikmJiF1LmNoaWxkTm9kZXMubGVuZ3RoJiZvLnJlbW92ZUNoaWxkKHUpfXgubWVyZ2UoZCxzLmNoaWxkTm9kZXMpLHMudGV4dENvbnRlbnQ9IiI7d2hpbGUocy5maXJzdENoaWxkKXMucmVtb3ZlQ2hpbGQocy5maXJzdENoaWxkKTtzPWYubGFzdENoaWxkfWVsc2UgZC5wdXNoKHQuY3JlYXRlVGV4dE5vZGUobykpO3MmJmYucmVtb3ZlQ2hpbGQocykseC5zdXBwb3J0LmFwcGVuZENoZWNrZWR8fHguZ3JlcChGdChkLCJpbnB1dCIpLEJ0KSxoPTA7d2hpbGUobz1kW2grK10paWYoKCFyfHwtMT09PXguaW5BcnJheShvLHIpKSYmKGE9eC5jb250YWlucyhvLm93bmVyRG9jdW1lbnQsbykscz1GdChmLmFwcGVuZENoaWxkKG8pLCJzY3JpcHQiKSxhJiZfdChzKSxuKSl7aT0wO3doaWxlKG89c1tpKytdKWt0LnRlc3Qoby50eXBlfHwiIikmJm4ucHVzaChvKX1yZXR1cm4gcz1udWxsLGZ9LGNsZWFuRGF0YTpmdW5jdGlvbihlLHQpe3ZhciBuLHIsbyxhLHM9MCxsPXguZXhwYW5kbyx1PXguY2FjaGUsYz14LnN1cHBvcnQuZGVsZXRlRXhwYW5kbyxmPXguZXZlbnQuc3BlY2lhbDtmb3IoO251bGwhPShuPWVbc10pO3MrKylpZigodHx8eC5hY2NlcHREYXRhKG4pKSYmKG89bltsXSxhPW8mJnVbb10pKXtpZihhLmV2ZW50cylmb3IociBpbiBhLmV2ZW50cylmW3JdP3guZXZlbnQucmVtb3ZlKG4scik6eC5yZW1vdmVFdmVudChuLHIsYS5oYW5kbGUpOwp1W29dJiYoZGVsZXRlIHVbb10sYz9kZWxldGUgbltsXTp0eXBlb2Ygbi5yZW1vdmVBdHRyaWJ1dGUhPT1pP24ucmVtb3ZlQXR0cmlidXRlKGwpOm5bbF09bnVsbCxwLnB1c2gobykpfX0sX2V2YWxVcmw6ZnVuY3Rpb24oZSl7cmV0dXJuIHguYWpheCh7dXJsOmUsdHlwZToiR0VUIixkYXRhVHlwZToic2NyaXB0Iixhc3luYzohMSxnbG9iYWw6ITEsInRocm93cyI6ITB9KX19KSx4LmZuLmV4dGVuZCh7d3JhcEFsbDpmdW5jdGlvbihlKXtpZih4LmlzRnVuY3Rpb24oZSkpcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbih0KXt4KHRoaXMpLndyYXBBbGwoZS5jYWxsKHRoaXMsdCkpfSk7aWYodGhpc1swXSl7dmFyIHQ9eChlLHRoaXNbMF0ub3duZXJEb2N1bWVudCkuZXEoMCkuY2xvbmUoITApO3RoaXNbMF0ucGFyZW50Tm9kZSYmdC5pbnNlcnRCZWZvcmUodGhpc1swXSksdC5tYXAoZnVuY3Rpb24oKXt2YXIgZT10aGlzO3doaWxlKGUuZmlyc3RDaGlsZCYmMT09PWUuZmlyc3RDaGlsZC5ub2RlVHlwZSllPWUuZmlyc3RDaGlsZDtyZXR1cm4gZX0pLmFwcGVuZCh0aGlzKX1yZXR1cm4gdGhpc30sd3JhcElubmVyOmZ1bmN0aW9uKGUpe3JldHVybiB4LmlzRnVuY3Rpb24oZSk/dGhpcy5lYWNoKGZ1bmN0aW9uKHQpe3godGhpcykud3JhcElubmVyKGUuY2FsbCh0aGlzLHQpKX0pOnRoaXMuZWFjaChmdW5jdGlvbigpe3ZhciB0PXgodGhpcyksbj10LmNvbnRlbnRzKCk7bi5sZW5ndGg/bi53cmFwQWxsKGUpOnQuYXBwZW5kKGUpfSl9LHdyYXA6ZnVuY3Rpb24oZSl7dmFyIHQ9eC5pc0Z1bmN0aW9uKGUpO3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24obil7eCh0aGlzKS53cmFwQWxsKHQ/ZS5jYWxsKHRoaXMsbik6ZSl9KX0sdW53cmFwOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucGFyZW50KCkuZWFjaChmdW5jdGlvbigpe3gubm9kZU5hbWUodGhpcywiYm9keSIpfHx4KHRoaXMpLnJlcGxhY2VXaXRoKHRoaXMuY2hpbGROb2Rlcyl9KS5lbmQoKX19KTt2YXIgUHQsUnQsV3QsJHQ9L2FscGhhXChbXildKlwpL2ksSXQ9L29wYWNpdHlccyo9XHMqKFteKV0qKS8senQ9L14odG9wfHJpZ2h0fGJvdHRvbXxsZWZ0KSQvLFh0PS9eKG5vbmV8dGFibGUoPyEtY1tlYV0pLispLyxVdD0vXm1hcmdpbi8sVnQ9UmVnRXhwKCJeKCIrdysiKSguKikkIiwiaSIpLFl0PVJlZ0V4cCgiXigiK3crIikoPyFweClbYS16JV0rJCIsImkiKSxKdD1SZWdFeHAoIl4oWystXSk9KCIrdysiKSIsImkiKSxHdD17Qk9EWToiYmxvY2sifSxRdD17cG9zaXRpb246ImFic29sdXRlIix2aXNpYmlsaXR5OiJoaWRkZW4iLGRpc3BsYXk6ImJsb2NrIn0sS3Q9e2xldHRlclNwYWNpbmc6MCxmb250V2VpZ2h0OjQwMH0sWnQ9WyJUb3AiLCJSaWdodCIsIkJvdHRvbSIsIkxlZnQiXSxlbj1bIldlYmtpdCIsIk8iLCJNb3oiLCJtcyJdO2Z1bmN0aW9uIHRuKGUsdCl7aWYodCBpbiBlKXJldHVybiB0O3ZhciBuPXQuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkrdC5zbGljZSgxKSxyPXQsaT1lbi5sZW5ndGg7d2hpbGUoaS0tKWlmKHQ9ZW5baV0rbix0IGluIGUpcmV0dXJuIHQ7cmV0dXJuIHJ9ZnVuY3Rpb24gbm4oZSx0KXtyZXR1cm4gZT10fHxlLCJub25lIj09PXguY3NzKGUsImRpc3BsYXkiKXx8IXguY29udGFpbnMoZS5vd25lckRvY3VtZW50LGUpfWZ1bmN0aW9uIHJuKGUsdCl7dmFyIG4scixpLG89W10sYT0wLHM9ZS5sZW5ndGg7Zm9yKDtzPmE7YSsrKXI9ZVthXSxyLnN0eWxlJiYob1thXT14Ll9kYXRhKHIsIm9sZGRpc3BsYXkiKSxuPXIuc3R5bGUuZGlzcGxheSx0PyhvW2FdfHwibm9uZSIhPT1ufHwoci5zdHlsZS5kaXNwbGF5PSIiKSwiIj09PXIuc3R5bGUuZGlzcGxheSYmbm4ocikmJihvW2FdPXguX2RhdGEociwib2xkZGlzcGxheSIsbG4oci5ub2RlTmFtZSkpKSk6b1thXXx8KGk9bm4ociksKG4mJiJub25lIiE9PW58fCFpKSYmeC5fZGF0YShyLCJvbGRkaXNwbGF5IixpP246eC5jc3MociwiZGlzcGxheSIpKSkpO2ZvcihhPTA7cz5hO2ErKylyPWVbYV0sci5zdHlsZSYmKHQmJiJub25lIiE9PXIuc3R5bGUuZGlzcGxheSYmIiIhPT1yLnN0eWxlLmRpc3BsYXl8fChyLnN0eWxlLmRpc3BsYXk9dD9vW2FdfHwiIjoibm9uZSIpKTtyZXR1cm4gZX14LmZuLmV4dGVuZCh7Y3NzOmZ1bmN0aW9uKGUsbil7cmV0dXJuIHguYWNjZXNzKHRoaXMsZnVuY3Rpb24oZSxuLHIpe3ZhciBpLG8sYT17fSxzPTA7aWYoeC5pc0FycmF5KG4pKXtmb3Iobz1SdChlKSxpPW4ubGVuZ3RoO2k+cztzKyspYVtuW3NdXT14LmNzcyhlLG5bc10sITEsbyk7cmV0dXJuIGF9cmV0dXJuIHIhPT10P3guc3R5bGUoZSxuLHIpOnguY3NzKGUsbil9LGUsbixhcmd1bWVudHMubGVuZ3RoPjEpfSxzaG93OmZ1bmN0aW9uKCl7cmV0dXJuIHJuKHRoaXMsITApfSxoaWRlOmZ1bmN0aW9uKCl7cmV0dXJuIHJuKHRoaXMpfSx0b2dnbGU6ZnVuY3Rpb24oZSl7cmV0dXJuImJvb2xlYW4iPT10eXBlb2YgZT9lP3RoaXMuc2hvdygpOnRoaXMuaGlkZSgpOnRoaXMuZWFjaChmdW5jdGlvbigpe25uKHRoaXMpP3godGhpcykuc2hvdygpOngodGhpcykuaGlkZSgpfSl9fSkseC5leHRlbmQoe2Nzc0hvb2tzOntvcGFjaXR5OntnZXQ6ZnVuY3Rpb24oZSx0KXtpZih0KXt2YXIgbj1XdChlLCJvcGFjaXR5Iik7cmV0dXJuIiI9PT1uPyIxIjpufX19fSxjc3NOdW1iZXI6e2NvbHVtbkNvdW50OiEwLGZpbGxPcGFjaXR5OiEwLGZvbnRXZWlnaHQ6ITAsbGluZUhlaWdodDohMCxvcGFjaXR5OiEwLG9yZGVyOiEwLG9ycGhhbnM6ITAsd2lkb3dzOiEwLHpJbmRleDohMCx6b29tOiEwfSxjc3NQcm9wczp7ImZsb2F0Ijp4LnN1cHBvcnQuY3NzRmxvYXQ/ImNzc0Zsb2F0Ijoic3R5bGVGbG9hdCJ9LHN0eWxlOmZ1bmN0aW9uKGUsbixyLGkpe2lmKGUmJjMhPT1lLm5vZGVUeXBlJiY4IT09ZS5ub2RlVHlwZSYmZS5zdHlsZSl7dmFyIG8sYSxzLGw9eC5jYW1lbENhc2UobiksdT1lLnN0eWxlO2lmKG49eC5jc3NQcm9wc1tsXXx8KHguY3NzUHJvcHNbbF09dG4odSxsKSkscz14LmNzc0hvb2tzW25dfHx4LmNzc0hvb2tzW2xdLHI9PT10KXJldHVybiBzJiYiZ2V0ImluIHMmJihvPXMuZ2V0KGUsITEsaSkpIT09dD9vOnVbbl07aWYoYT10eXBlb2Ygciwic3RyaW5nIj09PWEmJihvPUp0LmV4ZWMocikpJiYocj0ob1sxXSsxKSpvWzJdK3BhcnNlRmxvYXQoeC5jc3MoZSxuKSksYT0ibnVtYmVyIiksIShudWxsPT1yfHwibnVtYmVyIj09PWEmJmlzTmFOKHIpfHwoIm51bWJlciIhPT1hfHx4LmNzc051bWJlcltsXXx8KHIrPSJweCIpLHguc3VwcG9ydC5jbGVhckNsb25lU3R5bGV8fCIiIT09cnx8MCE9PW4uaW5kZXhPZigiYmFja2dyb3VuZCIpfHwodVtuXT0iaW5oZXJpdCIpLHMmJiJzZXQiaW4gcyYmKHI9cy5zZXQoZSxyLGkpKT09PXQpKSl0cnl7dVtuXT1yfWNhdGNoKGMpe319fSxjc3M6ZnVuY3Rpb24oZSxuLHIsaSl7dmFyIG8sYSxzLGw9eC5jYW1lbENhc2Uobik7cmV0dXJuIG49eC5jc3NQcm9wc1tsXXx8KHguY3NzUHJvcHNbbF09dG4oZS5zdHlsZSxsKSkscz14LmNzc0hvb2tzW25dfHx4LmNzc0hvb2tzW2xdLHMmJiJnZXQiaW4gcyYmKGE9cy5nZXQoZSwhMCxyKSksYT09PXQmJihhPVd0KGUsbixpKSksIm5vcm1hbCI9PT1hJiZuIGluIEt0JiYoYT1LdFtuXSksIiI9PT1yfHxyPyhvPXBhcnNlRmxvYXQoYSkscj09PSEwfHx4LmlzTnVtZXJpYyhvKT9vfHwwOmEpOmF9fSksZS5nZXRDb21wdXRlZFN0eWxlPyhSdD1mdW5jdGlvbih0KXtyZXR1cm4gZS5nZXRDb21wdXRlZFN0eWxlKHQsbnVsbCl9LFd0PWZ1bmN0aW9uKGUsbixyKXt2YXIgaSxvLGEscz1yfHxSdChlKSxsPXM/cy5nZXRQcm9wZXJ0eVZhbHVlKG4pfHxzW25dOnQsdT1lLnN0eWxlO3JldHVybiBzJiYoIiIhPT1sfHx4LmNvbnRhaW5zKGUub3duZXJEb2N1bWVudCxlKXx8KGw9eC5zdHlsZShlLG4pKSxZdC50ZXN0KGwpJiZVdC50ZXN0KG4pJiYoaT11LndpZHRoLG89dS5taW5XaWR0aCxhPXUubWF4V2lkdGgsdS5taW5XaWR0aD11Lm1heFdpZHRoPXUud2lkdGg9bCxsPXMud2lkdGgsdS53aWR0aD1pLHUubWluV2lkdGg9byx1Lm1heFdpZHRoPWEpKSxsfSk6YS5kb2N1bWVudEVsZW1lbnQuY3VycmVudFN0eWxlJiYoUnQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGUuY3VycmVudFN0eWxlfSxXdD1mdW5jdGlvbihlLG4scil7dmFyIGksbyxhLHM9cnx8UnQoZSksbD1zP3Nbbl06dCx1PWUuc3R5bGU7cmV0dXJuIG51bGw9PWwmJnUmJnVbbl0mJihsPXVbbl0pLFl0LnRlc3QobCkmJiF6dC50ZXN0KG4pJiYoaT11LmxlZnQsbz1lLnJ1bnRpbWVTdHlsZSxhPW8mJm8ubGVmdCxhJiYoby5sZWZ0PWUuY3VycmVudFN0eWxlLmxlZnQpLHUubGVmdD0iZm9udFNpemUiPT09bj8iMWVtIjpsLGw9dS5waXhlbExlZnQrInB4Iix1LmxlZnQ9aSxhJiYoby5sZWZ0PWEpKSwiIj09PWw/ImF1dG8iOmx9KTtmdW5jdGlvbiBvbihlLHQsbil7dmFyIHI9VnQuZXhlYyh0KTtyZXR1cm4gcj9NYXRoLm1heCgwLHJbMV0tKG58fDApKSsoclsyXXx8InB4Iik6dH1mdW5jdGlvbiBhbihlLHQsbixyLGkpe3ZhciBvPW49PT0ocj8iYm9yZGVyIjoiY29udGVudCIpPzQ6IndpZHRoIj09PXQ/MTowLGE9MDtmb3IoOzQ+bztvKz0yKSJtYXJnaW4iPT09biYmKGErPXguY3NzKGUsbitadFtvXSwhMCxpKSkscj8oImNvbnRlbnQiPT09biYmKGEtPXguY3NzKGUsInBhZGRpbmciK1p0W29dLCEwLGkpKSwibWFyZ2luIiE9PW4mJihhLT14LmNzcyhlLCJib3JkZXIiK1p0W29dKyJXaWR0aCIsITAsaSkpKTooYSs9eC5jc3MoZSwicGFkZGluZyIrWnRbb10sITAsaSksInBhZGRpbmciIT09biYmKGErPXguY3NzKGUsImJvcmRlciIrWnRbb10rIldpZHRoIiwhMCxpKSkpO3JldHVybiBhfWZ1bmN0aW9uIHNuKGUsdCxuKXt2YXIgcj0hMCxpPSJ3aWR0aCI9PT10P2Uub2Zmc2V0V2lkdGg6ZS5vZmZzZXRIZWlnaHQsbz1SdChlKSxhPXguc3VwcG9ydC5ib3hTaXppbmcmJiJib3JkZXItYm94Ij09PXguY3NzKGUsImJveFNpemluZyIsITEsbyk7aWYoMD49aXx8bnVsbD09aSl7aWYoaT1XdChlLHQsbyksKDA+aXx8bnVsbD09aSkmJihpPWUuc3R5bGVbdF0pLFl0LnRlc3QoaSkpcmV0dXJuIGk7cj1hJiYoeC5zdXBwb3J0LmJveFNpemluZ1JlbGlhYmxlfHxpPT09ZS5zdHlsZVt0XSksaT1wYXJzZUZsb2F0KGkpfHwwfXJldHVybiBpK2FuKGUsdCxufHwoYT8iYm9yZGVyIjoiY29udGVudCIpLHIsbykrInB4In1mdW5jdGlvbiBsbihlKXt2YXIgdD1hLG49R3RbZV07cmV0dXJuIG58fChuPXVuKGUsdCksIm5vbmUiIT09biYmbnx8KFB0PShQdHx8eCgiPGlmcmFtZSBmcmFtZWJvcmRlcj0nMCcgd2lkdGg9JzAnIGhlaWdodD0nMCcvPiIpLmNzcygiY3NzVGV4dCIsImRpc3BsYXk6YmxvY2sgIWltcG9ydGFudCIpKS5hcHBlbmRUbyh0LmRvY3VtZW50RWxlbWVudCksdD0oUHRbMF0uY29udGVudFdpbmRvd3x8UHRbMF0uY29udGVudERvY3VtZW50KS5kb2N1bWVudCx0LndyaXRlKCI8IWRvY3R5cGUgaHRtbD48aHRtbD48Ym9keT4iKSx0LmNsb3NlKCksbj11bihlLHQpLFB0LmRldGFjaCgpKSxHdFtlXT1uKSxufWZ1bmN0aW9uIHVuKGUsdCl7dmFyIG49eCh0LmNyZWF0ZUVsZW1lbnQoZSkpLmFwcGVuZFRvKHQuYm9keSkscj14LmNzcyhuWzBdLCJkaXNwbGF5Iik7cmV0dXJuIG4ucmVtb3ZlKCkscn14LmVhY2goWyJoZWlnaHQiLCJ3aWR0aCJdLGZ1bmN0aW9uKGUsbil7eC5jc3NIb29rc1tuXT17Z2V0OmZ1bmN0aW9uKGUscixpKXtyZXR1cm4gcj8wPT09ZS5vZmZzZXRXaWR0aCYmWHQudGVzdCh4LmNzcyhlLCJkaXNwbGF5IikpP3guc3dhcChlLFF0LGZ1bmN0aW9uKCl7cmV0dXJuIHNuKGUsbixpKX0pOnNuKGUsbixpKTp0fSxzZXQ6ZnVuY3Rpb24oZSx0LHIpe3ZhciBpPXImJlJ0KGUpO3JldHVybiBvbihlLHQscj9hbihlLG4scix4LnN1cHBvcnQuYm94U2l6aW5nJiYiYm9yZGVyLWJveCI9PT14LmNzcyhlLCJib3hTaXppbmciLCExLGkpLGkpOjApfX19KSx4LnN1cHBvcnQub3BhY2l0eXx8KHguY3NzSG9va3Mub3BhY2l0eT17Z2V0OmZ1bmN0aW9uKGUsdCl7cmV0dXJuIEl0LnRlc3QoKHQmJmUuY3VycmVudFN0eWxlP2UuY3VycmVudFN0eWxlLmZpbHRlcjplLnN0eWxlLmZpbHRlcil8fCIiKT8uMDEqcGFyc2VGbG9hdChSZWdFeHAuJDEpKyIiOnQ/IjEiOiIifSxzZXQ6ZnVuY3Rpb24oZSx0KXt2YXIgbj1lLnN0eWxlLHI9ZS5jdXJyZW50U3R5bGUsaT14LmlzTnVtZXJpYyh0KT8iYWxwaGEob3BhY2l0eT0iKzEwMCp0KyIpIjoiIixvPXImJnIuZmlsdGVyfHxuLmZpbHRlcnx8IiI7bi56b29tPTEsKHQ+PTF8fCIiPT09dCkmJiIiPT09eC50cmltKG8ucmVwbGFjZSgkdCwiIikpJiZuLnJlbW92ZUF0dHJpYnV0ZSYmKG4ucmVtb3ZlQXR0cmlidXRlKCJmaWx0ZXIiKSwiIj09PXR8fHImJiFyLmZpbHRlcil8fChuLmZpbHRlcj0kdC50ZXN0KG8pP28ucmVwbGFjZSgkdCxpKTpvKyIgIitpKX19KSx4KGZ1bmN0aW9uKCl7eC5zdXBwb3J0LnJlbGlhYmxlTWFyZ2luUmlnaHR8fCh4LmNzc0hvb2tzLm1hcmdpblJpZ2h0PXtnZXQ6ZnVuY3Rpb24oZSxuKXtyZXR1cm4gbj94LnN3YXAoZSx7ZGlzcGxheToiaW5saW5lLWJsb2NrIn0sV3QsW2UsIm1hcmdpblJpZ2h0Il0pOnR9fSksIXguc3VwcG9ydC5waXhlbFBvc2l0aW9uJiZ4LmZuLnBvc2l0aW9uJiZ4LmVhY2goWyJ0b3AiLCJsZWZ0Il0sZnVuY3Rpb24oZSxuKXt4LmNzc0hvb2tzW25dPXtnZXQ6ZnVuY3Rpb24oZSxyKXtyZXR1cm4gcj8ocj1XdChlLG4pLFl0LnRlc3Qocik/eChlKS5wb3NpdGlvbigpW25dKyJweCI6cik6dH19fSl9KSx4LmV4cHImJnguZXhwci5maWx0ZXJzJiYoeC5leHByLmZpbHRlcnMuaGlkZGVuPWZ1bmN0aW9uKGUpe3JldHVybiAwPj1lLm9mZnNldFdpZHRoJiYwPj1lLm9mZnNldEhlaWdodHx8IXguc3VwcG9ydC5yZWxpYWJsZUhpZGRlbk9mZnNldHMmJiJub25lIj09PShlLnN0eWxlJiZlLnN0eWxlLmRpc3BsYXl8fHguY3NzKGUsImRpc3BsYXkiKSl9LHguZXhwci5maWx0ZXJzLnZpc2libGU9ZnVuY3Rpb24oZSl7cmV0dXJuIXguZXhwci5maWx0ZXJzLmhpZGRlbihlKX0pLHguZWFjaCh7bWFyZ2luOiIiLHBhZGRpbmc6IiIsYm9yZGVyOiJXaWR0aCJ9LGZ1bmN0aW9uKGUsdCl7eC5jc3NIb29rc1tlK3RdPXtleHBhbmQ6ZnVuY3Rpb24obil7dmFyIHI9MCxpPXt9LG89InN0cmluZyI9PXR5cGVvZiBuP24uc3BsaXQoIiAiKTpbbl07Zm9yKDs0PnI7cisrKWlbZStadFtyXSt0XT1vW3JdfHxvW3ItMl18fG9bMF07cmV0dXJuIGl9fSxVdC50ZXN0KGUpfHwoeC5jc3NIb29rc1tlK3RdLnNldD1vbil9KTt2YXIgY249LyUyMC9nLHBuPS9cW1xdJC8sZm49L1xyP1xuL2csZG49L14oPzpzdWJtaXR8YnV0dG9ufGltYWdlfHJlc2V0fGZpbGUpJC9pLGhuPS9eKD86aW5wdXR8c2VsZWN0fHRleHRhcmVhfGtleWdlbikvaTt4LmZuLmV4dGVuZCh7c2VyaWFsaXplOmZ1bmN0aW9uKCl7cmV0dXJuIHgucGFyYW0odGhpcy5zZXJpYWxpemVBcnJheSgpKX0sc2VyaWFsaXplQXJyYXk6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tYXAoZnVuY3Rpb24oKXt2YXIgZT14LnByb3AodGhpcywiZWxlbWVudHMiKTtyZXR1cm4gZT94Lm1ha2VBcnJheShlKTp0aGlzfSkuZmlsdGVyKGZ1bmN0aW9uKCl7dmFyIGU9dGhpcy50eXBlO3JldHVybiB0aGlzLm5hbWUmJiF4KHRoaXMpLmlzKCI6ZGlzYWJsZWQiKSYmaG4udGVzdCh0aGlzLm5vZGVOYW1lKSYmIWRuLnRlc3QoZSkmJih0aGlzLmNoZWNrZWR8fCFDdC50ZXN0KGUpKX0pLm1hcChmdW5jdGlvbihlLHQpe3ZhciBuPXgodGhpcykudmFsKCk7cmV0dXJuIG51bGw9PW4/bnVsbDp4LmlzQXJyYXkobik/eC5tYXAobixmdW5jdGlvbihlKXtyZXR1cm57bmFtZTp0Lm5hbWUsdmFsdWU6ZS5yZXBsYWNlKGZuLCJcclxuIil9fSk6e25hbWU6dC5uYW1lLHZhbHVlOm4ucmVwbGFjZShmbiwiXHJcbiIpfX0pLmdldCgpfX0pLHgucGFyYW09ZnVuY3Rpb24oZSxuKXt2YXIgcixpPVtdLG89ZnVuY3Rpb24oZSx0KXt0PXguaXNGdW5jdGlvbih0KT90KCk6bnVsbD09dD8iIjp0LGlbaS5sZW5ndGhdPWVuY29kZVVSSUNvbXBvbmVudChlKSsiPSIrZW5jb2RlVVJJQ29tcG9uZW50KHQpfTtpZihuPT09dCYmKG49eC5hamF4U2V0dGluZ3MmJnguYWpheFNldHRpbmdzLnRyYWRpdGlvbmFsKSx4LmlzQXJyYXkoZSl8fGUuanF1ZXJ5JiYheC5pc1BsYWluT2JqZWN0KGUpKXguZWFjaChlLGZ1bmN0aW9uKCl7byh0aGlzLm5hbWUsdGhpcy52YWx1ZSl9KTtlbHNlIGZvcihyIGluIGUpZ24ocixlW3JdLG4sbyk7cmV0dXJuIGkuam9pbigiJiIpLnJlcGxhY2UoY24sIisiKX07ZnVuY3Rpb24gZ24oZSx0LG4scil7dmFyIGk7aWYoeC5pc0FycmF5KHQpKXguZWFjaCh0LGZ1bmN0aW9uKHQsaSl7bnx8cG4udGVzdChlKT9yKGUsaSk6Z24oZSsiWyIrKCJvYmplY3QiPT10eXBlb2YgaT90OiIiKSsiXSIsaSxuLHIpfSk7ZWxzZSBpZihufHwib2JqZWN0IiE9PXgudHlwZSh0KSlyKGUsdCk7ZWxzZSBmb3IoaSBpbiB0KWduKGUrIlsiK2krIl0iLHRbaV0sbixyKX14LmVhY2goImJsdXIgZm9jdXMgZm9jdXNpbiBmb2N1c291dCBsb2FkIHJlc2l6ZSBzY3JvbGwgdW5sb2FkIGNsaWNrIGRibGNsaWNrIG1vdXNlZG93biBtb3VzZXVwIG1vdXNlbW92ZSBtb3VzZW92ZXIgbW91c2VvdXQgbW91c2VlbnRlciBtb3VzZWxlYXZlIGNoYW5nZSBzZWxlY3Qgc3VibWl0IGtleWRvd24ga2V5cHJlc3Mga2V5dXAgZXJyb3IgY29udGV4dG1lbnUiLnNwbGl0KCIgIiksZnVuY3Rpb24oZSx0KXt4LmZuW3RdPWZ1bmN0aW9uKGUsbil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg+MD90aGlzLm9uKHQsbnVsbCxlLG4pOnRoaXMudHJpZ2dlcih0KX19KSx4LmZuLmV4dGVuZCh7aG92ZXI6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdGhpcy5tb3VzZWVudGVyKGUpLm1vdXNlbGVhdmUodHx8ZSl9LGJpbmQ6ZnVuY3Rpb24oZSx0LG4pe3JldHVybiB0aGlzLm9uKGUsbnVsbCx0LG4pfSx1bmJpbmQ6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdGhpcy5vZmYoZSxudWxsLHQpfSxkZWxlZ2F0ZTpmdW5jdGlvbihlLHQsbixyKXtyZXR1cm4gdGhpcy5vbih0LGUsbixyKX0sdW5kZWxlZ2F0ZTpmdW5jdGlvbihlLHQsbil7cmV0dXJuIDE9PT1hcmd1bWVudHMubGVuZ3RoP3RoaXMub2ZmKGUsIioqIik6dGhpcy5vZmYodCxlfHwiKioiLG4pfX0pO3ZhciBtbix5bix2bj14Lm5vdygpLGJuPS9cPy8seG49LyMuKiQvLHduPS8oWz8mXSlfPVteJl0qLyxUbj0vXiguKj8pOlsgXHRdKihbXlxyXG5dKilccj8kL2dtLENuPS9eKD86YWJvdXR8YXBwfGFwcC1zdG9yYWdlfC4rLWV4dGVuc2lvbnxmaWxlfHJlc3x3aWRnZXQpOiQvLE5uPS9eKD86R0VUfEhFQUQpJC8sa249L15cL1wvLyxFbj0vXihbXHcuKy1dKzopKD86XC9cLyhbXlwvPyM6XSopKD86OihcZCspfCl8KS8sU249eC5mbi5sb2FkLEFuPXt9LGpuPXt9LERuPSIqLyIuY29uY2F0KCIqIik7dHJ5e3luPW8uaHJlZn1jYXRjaChMbil7eW49YS5jcmVhdGVFbGVtZW50KCJhIikseW4uaHJlZj0iIix5bj15bi5ocmVmfW1uPUVuLmV4ZWMoeW4udG9Mb3dlckNhc2UoKSl8fFtdO2Z1bmN0aW9uIEhuKGUpe3JldHVybiBmdW5jdGlvbih0LG4peyJzdHJpbmciIT10eXBlb2YgdCYmKG49dCx0PSIqIik7dmFyIHIsaT0wLG89dC50b0xvd2VyQ2FzZSgpLm1hdGNoKFQpfHxbXTtpZih4LmlzRnVuY3Rpb24obikpd2hpbGUocj1vW2krK10pIisiPT09clswXT8ocj1yLnNsaWNlKDEpfHwiKiIsKGVbcl09ZVtyXXx8W10pLnVuc2hpZnQobikpOihlW3JdPWVbcl18fFtdKS5wdXNoKG4pfX1mdW5jdGlvbiBxbihlLG4scixpKXt2YXIgbz17fSxhPWU9PT1qbjtmdW5jdGlvbiBzKGwpe3ZhciB1O3JldHVybiBvW2xdPSEwLHguZWFjaChlW2xdfHxbXSxmdW5jdGlvbihlLGwpe3ZhciBjPWwobixyLGkpO3JldHVybiJzdHJpbmciIT10eXBlb2YgY3x8YXx8b1tjXT9hPyEodT1jKTp0OihuLmRhdGFUeXBlcy51bnNoaWZ0KGMpLHMoYyksITEpfSksdX1yZXR1cm4gcyhuLmRhdGFUeXBlc1swXSl8fCFvWyIqIl0mJnMoIioiKX1mdW5jdGlvbiBfbihlLG4pe3ZhciByLGksbz14LmFqYXhTZXR0aW5ncy5mbGF0T3B0aW9uc3x8e307Zm9yKGkgaW4gbiluW2ldIT09dCYmKChvW2ldP2U6cnx8KHI9e30pKVtpXT1uW2ldKTtyZXR1cm4gciYmeC5leHRlbmQoITAsZSxyKSxlfXguZm4ubG9hZD1mdW5jdGlvbihlLG4scil7aWYoInN0cmluZyIhPXR5cGVvZiBlJiZTbilyZXR1cm4gU24uYXBwbHkodGhpcyxhcmd1bWVudHMpO3ZhciBpLG8sYSxzPXRoaXMsbD1lLmluZGV4T2YoIiAiKTtyZXR1cm4gbD49MCYmKGk9ZS5zbGljZShsLGUubGVuZ3RoKSxlPWUuc2xpY2UoMCxsKSkseC5pc0Z1bmN0aW9uKG4pPyhyPW4sbj10KTpuJiYib2JqZWN0Ij09dHlwZW9mIG4mJihhPSJQT1NUIikscy5sZW5ndGg+MCYmeC5hamF4KHt1cmw6ZSx0eXBlOmEsZGF0YVR5cGU6Imh0bWwiLGRhdGE6bn0pLmRvbmUoZnVuY3Rpb24oZSl7bz1hcmd1bWVudHMscy5odG1sKGk/eCgiPGRpdj4iKS5hcHBlbmQoeC5wYXJzZUhUTUwoZSkpLmZpbmQoaSk6ZSl9KS5jb21wbGV0ZShyJiZmdW5jdGlvbihlLHQpe3MuZWFjaChyLG98fFtlLnJlc3BvbnNlVGV4dCx0LGVdKX0pLHRoaXN9LHguZWFjaChbImFqYXhTdGFydCIsImFqYXhTdG9wIiwiYWpheENvbXBsZXRlIiwiYWpheEVycm9yIiwiYWpheFN1Y2Nlc3MiLCJhamF4U2VuZCJdLGZ1bmN0aW9uKGUsdCl7eC5mblt0XT1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5vbih0LGUpfX0pLHguZXh0ZW5kKHthY3RpdmU6MCxsYXN0TW9kaWZpZWQ6e30sZXRhZzp7fSxhamF4U2V0dGluZ3M6e3VybDp5bix0eXBlOiJHRVQiLGlzTG9jYWw6Q24udGVzdChtblsxXSksZ2xvYmFsOiEwLHByb2Nlc3NEYXRhOiEwLGFzeW5jOiEwLGNvbnRlbnRUeXBlOiJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQ7IGNoYXJzZXQ9VVRGLTgiLGFjY2VwdHM6eyIqIjpEbix0ZXh0OiJ0ZXh0L3BsYWluIixodG1sOiJ0ZXh0L2h0bWwiLHhtbDoiYXBwbGljYXRpb24veG1sLCB0ZXh0L3htbCIsanNvbjoiYXBwbGljYXRpb24vanNvbiwgdGV4dC9qYXZhc2NyaXB0In0sY29udGVudHM6e3htbDoveG1sLyxodG1sOi9odG1sLyxqc29uOi9qc29uL30scmVzcG9uc2VGaWVsZHM6e3htbDoicmVzcG9uc2VYTUwiLHRleHQ6InJlc3BvbnNlVGV4dCIsanNvbjoicmVzcG9uc2VKU09OIn0sY29udmVydGVyczp7IiogdGV4dCI6U3RyaW5nLCJ0ZXh0IGh0bWwiOiEwLCJ0ZXh0IGpzb24iOngucGFyc2VKU09OLCJ0ZXh0IHhtbCI6eC5wYXJzZVhNTH0sZmxhdE9wdGlvbnM6e3VybDohMCxjb250ZXh0OiEwfX0sYWpheFNldHVwOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHQ/X24oX24oZSx4LmFqYXhTZXR0aW5ncyksdCk6X24oeC5hamF4U2V0dGluZ3MsZSl9LGFqYXhQcmVmaWx0ZXI6SG4oQW4pLGFqYXhUcmFuc3BvcnQ6SG4oam4pLGFqYXg6ZnVuY3Rpb24oZSxuKXsib2JqZWN0Ij09dHlwZW9mIGUmJihuPWUsZT10KSxuPW58fHt9O3ZhciByLGksbyxhLHMsbCx1LGMscD14LmFqYXhTZXR1cCh7fSxuKSxmPXAuY29udGV4dHx8cCxkPXAuY29udGV4dCYmKGYubm9kZVR5cGV8fGYuanF1ZXJ5KT94KGYpOnguZXZlbnQsaD14LkRlZmVycmVkKCksZz14LkNhbGxiYWNrcygib25jZSBtZW1vcnkiKSxtPXAuc3RhdHVzQ29kZXx8e30seT17fSx2PXt9LGI9MCx3PSJjYW5jZWxlZCIsQz17cmVhZHlTdGF0ZTowLGdldFJlc3BvbnNlSGVhZGVyOmZ1bmN0aW9uKGUpe3ZhciB0O2lmKDI9PT1iKXtpZighYyl7Yz17fTt3aGlsZSh0PVRuLmV4ZWMoYSkpY1t0WzFdLnRvTG93ZXJDYXNlKCldPXRbMl19dD1jW2UudG9Mb3dlckNhc2UoKV19cmV0dXJuIG51bGw9PXQ/bnVsbDp0fSxnZXRBbGxSZXNwb25zZUhlYWRlcnM6ZnVuY3Rpb24oKXtyZXR1cm4gMj09PWI/YTpudWxsfSxzZXRSZXF1ZXN0SGVhZGVyOmZ1bmN0aW9uKGUsdCl7dmFyIG49ZS50b0xvd2VyQ2FzZSgpO3JldHVybiBifHwoZT12W25dPXZbbl18fGUseVtlXT10KSx0aGlzfSxvdmVycmlkZU1pbWVUeXBlOmZ1bmN0aW9uKGUpe3JldHVybiBifHwocC5taW1lVHlwZT1lKSx0aGlzfSxzdGF0dXNDb2RlOmZ1bmN0aW9uKGUpe3ZhciB0O2lmKGUpaWYoMj5iKWZvcih0IGluIGUpbVt0XT1bbVt0XSxlW3RdXTtlbHNlIEMuYWx3YXlzKGVbQy5zdGF0dXNdKTtyZXR1cm4gdGhpc30sYWJvcnQ6ZnVuY3Rpb24oZSl7dmFyIHQ9ZXx8dztyZXR1cm4gdSYmdS5hYm9ydCh0KSxrKDAsdCksdGhpc319O2lmKGgucHJvbWlzZShDKS5jb21wbGV0ZT1nLmFkZCxDLnN1Y2Nlc3M9Qy5kb25lLEMuZXJyb3I9Qy5mYWlsLHAudXJsPSgoZXx8cC51cmx8fHluKSsiIikucmVwbGFjZSh4biwiIikucmVwbGFjZShrbixtblsxXSsiLy8iKSxwLnR5cGU9bi5tZXRob2R8fG4udHlwZXx8cC5tZXRob2R8fHAudHlwZSxwLmRhdGFUeXBlcz14LnRyaW0ocC5kYXRhVHlwZXx8IioiKS50b0xvd2VyQ2FzZSgpLm1hdGNoKFQpfHxbIiJdLG51bGw9PXAuY3Jvc3NEb21haW4mJihyPUVuLmV4ZWMocC51cmwudG9Mb3dlckNhc2UoKSkscC5jcm9zc0RvbWFpbj0hKCFyfHxyWzFdPT09bW5bMV0mJnJbMl09PT1tblsyXSYmKHJbM118fCgiaHR0cDoiPT09clsxXT8iODAiOiI0NDMiKSk9PT0obW5bM118fCgiaHR0cDoiPT09bW5bMV0/IjgwIjoiNDQzIikpKSkscC5kYXRhJiZwLnByb2Nlc3NEYXRhJiYic3RyaW5nIiE9dHlwZW9mIHAuZGF0YSYmKHAuZGF0YT14LnBhcmFtKHAuZGF0YSxwLnRyYWRpdGlvbmFsKSkscW4oQW4scCxuLEMpLDI9PT1iKXJldHVybiBDO2w9cC5nbG9iYWwsbCYmMD09PXguYWN0aXZlKysmJnguZXZlbnQudHJpZ2dlcigiYWpheFN0YXJ0IikscC50eXBlPXAudHlwZS50b1VwcGVyQ2FzZSgpLHAuaGFzQ29udGVudD0hTm4udGVzdChwLnR5cGUpLG89cC51cmwscC5oYXNDb250ZW50fHwocC5kYXRhJiYobz1wLnVybCs9KGJuLnRlc3Qobyk/IiYiOiI/IikrcC5kYXRhLGRlbGV0ZSBwLmRhdGEpLHAuY2FjaGU9PT0hMSYmKHAudXJsPXduLnRlc3Qobyk/by5yZXBsYWNlKHduLCIkMV89Iit2bisrKTpvKyhibi50ZXN0KG8pPyImIjoiPyIpKyJfPSIrdm4rKykpLHAuaWZNb2RpZmllZCYmKHgubGFzdE1vZGlmaWVkW29dJiZDLnNldFJlcXVlc3RIZWFkZXIoIklmLU1vZGlmaWVkLVNpbmNlIix4Lmxhc3RNb2RpZmllZFtvXSkseC5ldGFnW29dJiZDLnNldFJlcXVlc3RIZWFkZXIoIklmLU5vbmUtTWF0Y2giLHguZXRhZ1tvXSkpLChwLmRhdGEmJnAuaGFzQ29udGVudCYmcC5jb250ZW50VHlwZSE9PSExfHxuLmNvbnRlbnRUeXBlKSYmQy5zZXRSZXF1ZXN0SGVhZGVyKCJDb250ZW50LVR5cGUiLHAuY29udGVudFR5cGUpLEMuc2V0UmVxdWVzdEhlYWRlcigiQWNjZXB0IixwLmRhdGFUeXBlc1swXSYmcC5hY2NlcHRzW3AuZGF0YVR5cGVzWzBdXT9wLmFjY2VwdHNbcC5kYXRhVHlwZXNbMF1dKygiKiIhPT1wLmRhdGFUeXBlc1swXT8iLCAiK0RuKyI7IHE9MC4wMSI6IiIpOnAuYWNjZXB0c1siKiJdKTtmb3IoaSBpbiBwLmhlYWRlcnMpQy5zZXRSZXF1ZXN0SGVhZGVyKGkscC5oZWFkZXJzW2ldKTtpZihwLmJlZm9yZVNlbmQmJihwLmJlZm9yZVNlbmQuY2FsbChmLEMscCk9PT0hMXx8Mj09PWIpKXJldHVybiBDLmFib3J0KCk7dz0iYWJvcnQiO2ZvcihpIGlue3N1Y2Nlc3M6MSxlcnJvcjoxLGNvbXBsZXRlOjF9KUNbaV0ocFtpXSk7aWYodT1xbihqbixwLG4sQykpe0MucmVhZHlTdGF0ZT0xLGwmJmQudHJpZ2dlcigiYWpheFNlbmQiLFtDLHBdKSxwLmFzeW5jJiZwLnRpbWVvdXQ+MCYmKHM9c2V0VGltZW91dChmdW5jdGlvbigpe0MuYWJvcnQoInRpbWVvdXQiKX0scC50aW1lb3V0KSk7dHJ5e2I9MSx1LnNlbmQoeSxrKX1jYXRjaChOKXtpZighKDI+YikpdGhyb3cgTjtrKC0xLE4pfX1lbHNlIGsoLTEsIk5vIFRyYW5zcG9ydCIpO2Z1bmN0aW9uIGsoZSxuLHIsaSl7dmFyIGMseSx2LHcsVCxOPW47MiE9PWImJihiPTIscyYmY2xlYXJUaW1lb3V0KHMpLHU9dCxhPWl8fCIiLEMucmVhZHlTdGF0ZT1lPjA/NDowLGM9ZT49MjAwJiYzMDA+ZXx8MzA0PT09ZSxyJiYodz1NbihwLEMscikpLHc9T24ocCx3LEMsYyksYz8ocC5pZk1vZGlmaWVkJiYoVD1DLmdldFJlc3BvbnNlSGVhZGVyKCJMYXN0LU1vZGlmaWVkIiksVCYmKHgubGFzdE1vZGlmaWVkW29dPVQpLFQ9Qy5nZXRSZXNwb25zZUhlYWRlcigiZXRhZyIpLFQmJih4LmV0YWdbb109VCkpLDIwND09PWV8fCJIRUFEIj09PXAudHlwZT9OPSJub2NvbnRlbnQiOjMwND09PWU/Tj0ibm90bW9kaWZpZWQiOihOPXcuc3RhdGUseT13LmRhdGEsdj13LmVycm9yLGM9IXYpKToodj1OLChlfHwhTikmJihOPSJlcnJvciIsMD5lJiYoZT0wKSkpLEMuc3RhdHVzPWUsQy5zdGF0dXNUZXh0PShufHxOKSsiIixjP2gucmVzb2x2ZVdpdGgoZixbeSxOLENdKTpoLnJlamVjdFdpdGgoZixbQyxOLHZdKSxDLnN0YXR1c0NvZGUobSksbT10LGwmJmQudHJpZ2dlcihjPyJhamF4U3VjY2VzcyI6ImFqYXhFcnJvciIsW0MscCxjP3k6dl0pLGcuZmlyZVdpdGgoZixbQyxOXSksbCYmKGQudHJpZ2dlcigiYWpheENvbXBsZXRlIixbQyxwXSksLS14LmFjdGl2ZXx8eC5ldmVudC50cmlnZ2VyKCJhamF4U3RvcCIpKSl9cmV0dXJuIEN9LGdldEpTT046ZnVuY3Rpb24oZSx0LG4pe3JldHVybiB4LmdldChlLHQsbiwianNvbiIpfSxnZXRTY3JpcHQ6ZnVuY3Rpb24oZSxuKXtyZXR1cm4geC5nZXQoZSx0LG4sInNjcmlwdCIpfX0pLHguZWFjaChbImdldCIsInBvc3QiXSxmdW5jdGlvbihlLG4pe3hbbl09ZnVuY3Rpb24oZSxyLGksbyl7cmV0dXJuIHguaXNGdW5jdGlvbihyKSYmKG89b3x8aSxpPXIscj10KSx4LmFqYXgoe3VybDplLHR5cGU6bixkYXRhVHlwZTpvLGRhdGE6cixzdWNjZXNzOml9KX19KTtmdW5jdGlvbiBNbihlLG4scil7dmFyIGksbyxhLHMsbD1lLmNvbnRlbnRzLHU9ZS5kYXRhVHlwZXM7d2hpbGUoIioiPT09dVswXSl1LnNoaWZ0KCksbz09PXQmJihvPWUubWltZVR5cGV8fG4uZ2V0UmVzcG9uc2VIZWFkZXIoIkNvbnRlbnQtVHlwZSIpKTtpZihvKWZvcihzIGluIGwpaWYobFtzXSYmbFtzXS50ZXN0KG8pKXt1LnVuc2hpZnQocyk7YnJlYWt9aWYodVswXWluIHIpYT11WzBdO2Vsc2V7Zm9yKHMgaW4gcil7aWYoIXVbMF18fGUuY29udmVydGVyc1tzKyIgIit1WzBdXSl7YT1zO2JyZWFrfWl8fChpPXMpfWE9YXx8aX1yZXR1cm4gYT8oYSE9PXVbMF0mJnUudW5zaGlmdChhKSxyW2FdKTp0fWZ1bmN0aW9uIE9uKGUsdCxuLHIpe3ZhciBpLG8sYSxzLGwsdT17fSxjPWUuZGF0YVR5cGVzLnNsaWNlKCk7aWYoY1sxXSlmb3IoYSBpbiBlLmNvbnZlcnRlcnMpdVthLnRvTG93ZXJDYXNlKCldPWUuY29udmVydGVyc1thXTtvPWMuc2hpZnQoKTt3aGlsZShvKWlmKGUucmVzcG9uc2VGaWVsZHNbb10mJihuW2UucmVzcG9uc2VGaWVsZHNbb11dPXQpLCFsJiZyJiZlLmRhdGFGaWx0ZXImJih0PWUuZGF0YUZpbHRlcih0LGUuZGF0YVR5cGUpKSxsPW8sbz1jLnNoaWZ0KCkpaWYoIioiPT09bylvPWw7ZWxzZSBpZigiKiIhPT1sJiZsIT09byl7aWYoYT11W2wrIiAiK29dfHx1WyIqICIrb10sIWEpZm9yKGkgaW4gdSlpZihzPWkuc3BsaXQoIiAiKSxzWzFdPT09byYmKGE9dVtsKyIgIitzWzBdXXx8dVsiKiAiK3NbMF1dKSl7YT09PSEwP2E9dVtpXTp1W2ldIT09ITAmJihvPXNbMF0sYy51bnNoaWZ0KHNbMV0pKTticmVha31pZihhIT09ITApaWYoYSYmZVsidGhyb3dzIl0pdD1hKHQpO2Vsc2UgdHJ5e3Q9YSh0KX1jYXRjaChwKXtyZXR1cm57c3RhdGU6InBhcnNlcmVycm9yIixlcnJvcjphP3A6Ik5vIGNvbnZlcnNpb24gZnJvbSAiK2wrIiB0byAiK299fX1yZXR1cm57c3RhdGU6InN1Y2Nlc3MiLGRhdGE6dH19eC5hamF4U2V0dXAoe2FjY2VwdHM6e3NjcmlwdDoidGV4dC9qYXZhc2NyaXB0LCBhcHBsaWNhdGlvbi9qYXZhc2NyaXB0LCBhcHBsaWNhdGlvbi9lY21hc2NyaXB0LCBhcHBsaWNhdGlvbi94LWVjbWFzY3JpcHQifSxjb250ZW50czp7c2NyaXB0Oi8oPzpqYXZhfGVjbWEpc2NyaXB0L30sY29udmVydGVyczp7InRleHQgc2NyaXB0IjpmdW5jdGlvbihlKXtyZXR1cm4geC5nbG9iYWxFdmFsKGUpLGV9fX0pLHguYWpheFByZWZpbHRlcigic2NyaXB0IixmdW5jdGlvbihlKXtlLmNhY2hlPT09dCYmKGUuY2FjaGU9ITEpLGUuY3Jvc3NEb21haW4mJihlLnR5cGU9IkdFVCIsZS5nbG9iYWw9ITEpfSkseC5hamF4VHJhbnNwb3J0KCJzY3JpcHQiLGZ1bmN0aW9uKGUpe2lmKGUuY3Jvc3NEb21haW4pe3ZhciBuLHI9YS5oZWFkfHx4KCJoZWFkIilbMF18fGEuZG9jdW1lbnRFbGVtZW50O3JldHVybntzZW5kOmZ1bmN0aW9uKHQsaSl7bj1hLmNyZWF0ZUVsZW1lbnQoInNjcmlwdCIpLG4uYXN5bmM9ITAsZS5zY3JpcHRDaGFyc2V0JiYobi5jaGFyc2V0PWUuc2NyaXB0Q2hhcnNldCksbi5zcmM9ZS51cmwsbi5vbmxvYWQ9bi5vbnJlYWR5c3RhdGVjaGFuZ2U9ZnVuY3Rpb24oZSx0KXsodHx8IW4ucmVhZHlTdGF0ZXx8L2xvYWRlZHxjb21wbGV0ZS8udGVzdChuLnJlYWR5U3RhdGUpKSYmKG4ub25sb2FkPW4ub25yZWFkeXN0YXRlY2hhbmdlPW51bGwsbi5wYXJlbnROb2RlJiZuLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQobiksbj1udWxsLHR8fGkoMjAwLCJzdWNjZXNzIikpfSxyLmluc2VydEJlZm9yZShuLHIuZmlyc3RDaGlsZCl9LGFib3J0OmZ1bmN0aW9uKCl7biYmbi5vbmxvYWQodCwhMCl9fX19KTt2YXIgRm49W10sQm49Lyg9KVw/KD89JnwkKXxcP1w/Lzt4LmFqYXhTZXR1cCh7anNvbnA6ImNhbGxiYWNrIixqc29ucENhbGxiYWNrOmZ1bmN0aW9uKCl7dmFyIGU9Rm4ucG9wKCl8fHguZXhwYW5kbysiXyIrdm4rKztyZXR1cm4gdGhpc1tlXT0hMCxlfX0pLHguYWpheFByZWZpbHRlcigianNvbiBqc29ucCIsZnVuY3Rpb24obixyLGkpe3ZhciBvLGEscyxsPW4uanNvbnAhPT0hMSYmKEJuLnRlc3Qobi51cmwpPyJ1cmwiOiJzdHJpbmciPT10eXBlb2Ygbi5kYXRhJiYhKG4uY29udGVudFR5cGV8fCIiKS5pbmRleE9mKCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQiKSYmQm4udGVzdChuLmRhdGEpJiYiZGF0YSIpO3JldHVybiBsfHwianNvbnAiPT09bi5kYXRhVHlwZXNbMF0/KG89bi5qc29ucENhbGxiYWNrPXguaXNGdW5jdGlvbihuLmpzb25wQ2FsbGJhY2spP24uanNvbnBDYWxsYmFjaygpOm4uanNvbnBDYWxsYmFjayxsP25bbF09bltsXS5yZXBsYWNlKEJuLCIkMSIrbyk6bi5qc29ucCE9PSExJiYobi51cmwrPShibi50ZXN0KG4udXJsKT8iJiI6Ij8iKStuLmpzb25wKyI9IitvKSxuLmNvbnZlcnRlcnNbInNjcmlwdCBqc29uIl09ZnVuY3Rpb24oKXtyZXR1cm4gc3x8eC5lcnJvcihvKyIgd2FzIG5vdCBjYWxsZWQiKSxzWzBdfSxuLmRhdGFUeXBlc1swXT0ianNvbiIsYT1lW29dLGVbb109ZnVuY3Rpb24oKXtzPWFyZ3VtZW50c30saS5hbHdheXMoZnVuY3Rpb24oKXtlW29dPWEsbltvXSYmKG4uanNvbnBDYWxsYmFjaz1yLmpzb25wQ2FsbGJhY2ssRm4ucHVzaChvKSkscyYmeC5pc0Z1bmN0aW9uKGEpJiZhKHNbMF0pLHM9YT10fSksInNjcmlwdCIpOnR9KTt2YXIgUG4sUm4sV249MCwkbj1lLkFjdGl2ZVhPYmplY3QmJmZ1bmN0aW9uKCl7dmFyIGU7Zm9yKGUgaW4gUG4pUG5bZV0odCwhMCl9O2Z1bmN0aW9uIEluKCl7dHJ5e3JldHVybiBuZXcgZS5YTUxIdHRwUmVxdWVzdH1jYXRjaCh0KXt9fWZ1bmN0aW9uIHpuKCl7dHJ5e3JldHVybiBuZXcgZS5BY3RpdmVYT2JqZWN0KCJNaWNyb3NvZnQuWE1MSFRUUCIpfWNhdGNoKHQpe319eC5hamF4U2V0dGluZ3MueGhyPWUuQWN0aXZlWE9iamVjdD9mdW5jdGlvbigpe3JldHVybiF0aGlzLmlzTG9jYWwmJkluKCl8fHpuKCl9OkluLFJuPXguYWpheFNldHRpbmdzLnhocigpLHguc3VwcG9ydC5jb3JzPSEhUm4mJiJ3aXRoQ3JlZGVudGlhbHMiaW4gUm4sUm49eC5zdXBwb3J0LmFqYXg9ISFSbixSbiYmeC5hamF4VHJhbnNwb3J0KGZ1bmN0aW9uKG4pe2lmKCFuLmNyb3NzRG9tYWlufHx4LnN1cHBvcnQuY29ycyl7dmFyIHI7cmV0dXJue3NlbmQ6ZnVuY3Rpb24oaSxvKXt2YXIgYSxzLGw9bi54aHIoKTtpZihuLnVzZXJuYW1lP2wub3BlbihuLnR5cGUsbi51cmwsbi5hc3luYyxuLnVzZXJuYW1lLG4ucGFzc3dvcmQpOmwub3BlbihuLnR5cGUsbi51cmwsbi5hc3luYyksbi54aHJGaWVsZHMpZm9yKHMgaW4gbi54aHJGaWVsZHMpbFtzXT1uLnhockZpZWxkc1tzXTtuLm1pbWVUeXBlJiZsLm92ZXJyaWRlTWltZVR5cGUmJmwub3ZlcnJpZGVNaW1lVHlwZShuLm1pbWVUeXBlKSxuLmNyb3NzRG9tYWlufHxpWyJYLVJlcXVlc3RlZC1XaXRoIl18fChpWyJYLVJlcXVlc3RlZC1XaXRoIl09IlhNTEh0dHBSZXF1ZXN0Iik7dHJ5e2ZvcihzIGluIGkpbC5zZXRSZXF1ZXN0SGVhZGVyKHMsaVtzXSl9Y2F0Y2godSl7fWwuc2VuZChuLmhhc0NvbnRlbnQmJm4uZGF0YXx8bnVsbCkscj1mdW5jdGlvbihlLGkpe3ZhciBzLHUsYyxwO3RyeXtpZihyJiYoaXx8ND09PWwucmVhZHlTdGF0ZSkpaWYocj10LGEmJihsLm9ucmVhZHlzdGF0ZWNoYW5nZT14Lm5vb3AsJG4mJmRlbGV0ZSBQblthXSksaSk0IT09bC5yZWFkeVN0YXRlJiZsLmFib3J0KCk7ZWxzZXtwPXt9LHM9bC5zdGF0dXMsdT1sLmdldEFsbFJlc3BvbnNlSGVhZGVycygpLCJzdHJpbmciPT10eXBlb2YgbC5yZXNwb25zZVRleHQmJihwLnRleHQ9bC5yZXNwb25zZVRleHQpO3RyeXtjPWwuc3RhdHVzVGV4dH1jYXRjaChmKXtjPSIifXN8fCFuLmlzTG9jYWx8fG4uY3Jvc3NEb21haW4/MTIyMz09PXMmJihzPTIwNCk6cz1wLnRleHQ/MjAwOjQwNH19Y2F0Y2goZCl7aXx8bygtMSxkKX1wJiZvKHMsYyxwLHUpfSxuLmFzeW5jPzQ9PT1sLnJlYWR5U3RhdGU/c2V0VGltZW91dChyKTooYT0rK1duLCRuJiYoUG58fChQbj17fSx4KGUpLnVubG9hZCgkbikpLFBuW2FdPXIpLGwub25yZWFkeXN0YXRlY2hhbmdlPXIpOnIoKX0sYWJvcnQ6ZnVuY3Rpb24oKXtyJiZyKHQsITApfX19fSk7dmFyIFhuLFVuLFZuPS9eKD86dG9nZ2xlfHNob3d8aGlkZSkkLyxZbj1SZWdFeHAoIl4oPzooWystXSk9fCkoIit3KyIpKFthLXolXSopJCIsImkiKSxKbj0vcXVldWVIb29rcyQvLEduPVtucl0sUW49eyIqIjpbZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzLmNyZWF0ZVR3ZWVuKGUsdCkscj1uLmN1cigpLGk9WW4uZXhlYyh0KSxvPWkmJmlbM118fCh4LmNzc051bWJlcltlXT8iIjoicHgiKSxhPSh4LmNzc051bWJlcltlXXx8InB4IiE9PW8mJityKSYmWW4uZXhlYyh4LmNzcyhuLmVsZW0sZSkpLHM9MSxsPTIwO2lmKGEmJmFbM10hPT1vKXtvPW98fGFbM10saT1pfHxbXSxhPStyfHwxO2RvIHM9c3x8Ii41IixhLz1zLHguc3R5bGUobi5lbGVtLGUsYStvKTt3aGlsZShzIT09KHM9bi5jdXIoKS9yKSYmMSE9PXMmJi0tbCl9cmV0dXJuIGkmJihhPW4uc3RhcnQ9K2F8fCtyfHwwLG4udW5pdD1vLG4uZW5kPWlbMV0/YSsoaVsxXSsxKSppWzJdOitpWzJdKSxufV19O2Z1bmN0aW9uIEtuKCl7cmV0dXJuIHNldFRpbWVvdXQoZnVuY3Rpb24oKXtYbj10fSksWG49eC5ub3coKX1mdW5jdGlvbiBabihlLHQsbil7dmFyIHIsaT0oUW5bdF18fFtdKS5jb25jYXQoUW5bIioiXSksbz0wLGE9aS5sZW5ndGg7Zm9yKDthPm87bysrKWlmKHI9aVtvXS5jYWxsKG4sdCxlKSlyZXR1cm4gcn1mdW5jdGlvbiBlcihlLHQsbil7dmFyIHIsaSxvPTAsYT1Hbi5sZW5ndGgscz14LkRlZmVycmVkKCkuYWx3YXlzKGZ1bmN0aW9uKCl7ZGVsZXRlIGwuZWxlbX0pLGw9ZnVuY3Rpb24oKXtpZihpKXJldHVybiExO3ZhciB0PVhufHxLbigpLG49TWF0aC5tYXgoMCx1LnN0YXJ0VGltZSt1LmR1cmF0aW9uLXQpLHI9bi91LmR1cmF0aW9ufHwwLG89MS1yLGE9MCxsPXUudHdlZW5zLmxlbmd0aDtmb3IoO2w+YTthKyspdS50d2VlbnNbYV0ucnVuKG8pO3JldHVybiBzLm5vdGlmeVdpdGgoZSxbdSxvLG5dKSwxPm8mJmw/bjoocy5yZXNvbHZlV2l0aChlLFt1XSksITEpfSx1PXMucHJvbWlzZSh7ZWxlbTplLHByb3BzOnguZXh0ZW5kKHt9LHQpLG9wdHM6eC5leHRlbmQoITAse3NwZWNpYWxFYXNpbmc6e319LG4pLG9yaWdpbmFsUHJvcGVydGllczp0LG9yaWdpbmFsT3B0aW9uczpuLHN0YXJ0VGltZTpYbnx8S24oKSxkdXJhdGlvbjpuLmR1cmF0aW9uLHR3ZWVuczpbXSxjcmVhdGVUd2VlbjpmdW5jdGlvbih0LG4pe3ZhciByPXguVHdlZW4oZSx1Lm9wdHMsdCxuLHUub3B0cy5zcGVjaWFsRWFzaW5nW3RdfHx1Lm9wdHMuZWFzaW5nKTtyZXR1cm4gdS50d2VlbnMucHVzaChyKSxyfSxzdG9wOmZ1bmN0aW9uKHQpe3ZhciBuPTAscj10P3UudHdlZW5zLmxlbmd0aDowO2lmKGkpcmV0dXJuIHRoaXM7Zm9yKGk9ITA7cj5uO24rKyl1LnR3ZWVuc1tuXS5ydW4oMSk7cmV0dXJuIHQ/cy5yZXNvbHZlV2l0aChlLFt1LHRdKTpzLnJlamVjdFdpdGgoZSxbdSx0XSksdGhpc319KSxjPXUucHJvcHM7Zm9yKHRyKGMsdS5vcHRzLnNwZWNpYWxFYXNpbmcpO2E+bztvKyspaWYocj1HbltvXS5jYWxsKHUsZSxjLHUub3B0cykpcmV0dXJuIHI7cmV0dXJuIHgubWFwKGMsWm4sdSkseC5pc0Z1bmN0aW9uKHUub3B0cy5zdGFydCkmJnUub3B0cy5zdGFydC5jYWxsKGUsdSkseC5meC50aW1lcih4LmV4dGVuZChsLHtlbGVtOmUsYW5pbTp1LHF1ZXVlOnUub3B0cy5xdWV1ZX0pKSx1LnByb2dyZXNzKHUub3B0cy5wcm9ncmVzcykuZG9uZSh1Lm9wdHMuZG9uZSx1Lm9wdHMuY29tcGxldGUpLmZhaWwodS5vcHRzLmZhaWwpLmFsd2F5cyh1Lm9wdHMuYWx3YXlzKX1mdW5jdGlvbiB0cihlLHQpe3ZhciBuLHIsaSxvLGE7Zm9yKG4gaW4gZSlpZihyPXguY2FtZWxDYXNlKG4pLGk9dFtyXSxvPWVbbl0seC5pc0FycmF5KG8pJiYoaT1vWzFdLG89ZVtuXT1vWzBdKSxuIT09ciYmKGVbcl09byxkZWxldGUgZVtuXSksYT14LmNzc0hvb2tzW3JdLGEmJiJleHBhbmQiaW4gYSl7bz1hLmV4cGFuZChvKSxkZWxldGUgZVtyXTtmb3IobiBpbiBvKW4gaW4gZXx8KGVbbl09b1tuXSx0W25dPWkpfWVsc2UgdFtyXT1pfXguQW5pbWF0aW9uPXguZXh0ZW5kKGVyLHt0d2VlbmVyOmZ1bmN0aW9uKGUsdCl7eC5pc0Z1bmN0aW9uKGUpPyh0PWUsZT1bIioiXSk6ZT1lLnNwbGl0KCIgIik7dmFyIG4scj0wLGk9ZS5sZW5ndGg7Zm9yKDtpPnI7cisrKW49ZVtyXSxRbltuXT1RbltuXXx8W10sUW5bbl0udW5zaGlmdCh0KX0scHJlZmlsdGVyOmZ1bmN0aW9uKGUsdCl7dD9Hbi51bnNoaWZ0KGUpOkduLnB1c2goZSl9fSk7ZnVuY3Rpb24gbnIoZSx0LG4pe3ZhciByLGksbyxhLHMsbCx1PXRoaXMsYz17fSxwPWUuc3R5bGUsZj1lLm5vZGVUeXBlJiZubihlKSxkPXguX2RhdGEoZSwiZnhzaG93Iik7bi5xdWV1ZXx8KHM9eC5fcXVldWVIb29rcyhlLCJmeCIpLG51bGw9PXMudW5xdWV1ZWQmJihzLnVucXVldWVkPTAsbD1zLmVtcHR5LmZpcmUscy5lbXB0eS5maXJlPWZ1bmN0aW9uKCl7cy51bnF1ZXVlZHx8bCgpfSkscy51bnF1ZXVlZCsrLHUuYWx3YXlzKGZ1bmN0aW9uKCl7dS5hbHdheXMoZnVuY3Rpb24oKXtzLnVucXVldWVkLS0seC5xdWV1ZShlLCJmeCIpLmxlbmd0aHx8cy5lbXB0eS5maXJlKCl9KX0pKSwxPT09ZS5ub2RlVHlwZSYmKCJoZWlnaHQiaW4gdHx8IndpZHRoImluIHQpJiYobi5vdmVyZmxvdz1bcC5vdmVyZmxvdyxwLm92ZXJmbG93WCxwLm92ZXJmbG93WV0sImlubGluZSI9PT14LmNzcyhlLCJkaXNwbGF5IikmJiJub25lIj09PXguY3NzKGUsImZsb2F0IikmJih4LnN1cHBvcnQuaW5saW5lQmxvY2tOZWVkc0xheW91dCYmImlubGluZSIhPT1sbihlLm5vZGVOYW1lKT9wLnpvb209MTpwLmRpc3BsYXk9ImlubGluZS1ibG9jayIpKSxuLm92ZXJmbG93JiYocC5vdmVyZmxvdz0iaGlkZGVuIix4LnN1cHBvcnQuc2hyaW5rV3JhcEJsb2Nrc3x8dS5hbHdheXMoZnVuY3Rpb24oKXtwLm92ZXJmbG93PW4ub3ZlcmZsb3dbMF0scC5vdmVyZmxvd1g9bi5vdmVyZmxvd1sxXSxwLm92ZXJmbG93WT1uLm92ZXJmbG93WzJdfSkpO2ZvcihyIGluIHQpaWYoaT10W3JdLFZuLmV4ZWMoaSkpe2lmKGRlbGV0ZSB0W3JdLG89b3x8InRvZ2dsZSI9PT1pLGk9PT0oZj8iaGlkZSI6InNob3ciKSljb250aW51ZTtjW3JdPWQmJmRbcl18fHguc3R5bGUoZSxyKX1pZigheC5pc0VtcHR5T2JqZWN0KGMpKXtkPyJoaWRkZW4iaW4gZCYmKGY9ZC5oaWRkZW4pOmQ9eC5fZGF0YShlLCJmeHNob3ciLHt9KSxvJiYoZC5oaWRkZW49IWYpLGY/eChlKS5zaG93KCk6dS5kb25lKGZ1bmN0aW9uKCl7eChlKS5oaWRlKCl9KSx1LmRvbmUoZnVuY3Rpb24oKXt2YXIgdDt4Ll9yZW1vdmVEYXRhKGUsImZ4c2hvdyIpO2Zvcih0IGluIGMpeC5zdHlsZShlLHQsY1t0XSl9KTtmb3IociBpbiBjKWE9Wm4oZj9kW3JdOjAscix1KSxyIGluIGR8fChkW3JdPWEuc3RhcnQsZiYmKGEuZW5kPWEuc3RhcnQsYS5zdGFydD0id2lkdGgiPT09cnx8ImhlaWdodCI9PT1yPzE6MCkpfX1mdW5jdGlvbiBycihlLHQsbixyLGkpe3JldHVybiBuZXcgcnIucHJvdG90eXBlLmluaXQoZSx0LG4scixpKX14LlR3ZWVuPXJyLHJyLnByb3RvdHlwZT17Y29uc3RydWN0b3I6cnIsaW5pdDpmdW5jdGlvbihlLHQsbixyLGksbyl7dGhpcy5lbGVtPWUsdGhpcy5wcm9wPW4sdGhpcy5lYXNpbmc9aXx8InN3aW5nIix0aGlzLm9wdGlvbnM9dCx0aGlzLnN0YXJ0PXRoaXMubm93PXRoaXMuY3VyKCksdGhpcy5lbmQ9cix0aGlzLnVuaXQ9b3x8KHguY3NzTnVtYmVyW25dPyIiOiJweCIpfSxjdXI6ZnVuY3Rpb24oKXt2YXIgZT1yci5wcm9wSG9va3NbdGhpcy5wcm9wXTtyZXR1cm4gZSYmZS5nZXQ/ZS5nZXQodGhpcyk6cnIucHJvcEhvb2tzLl9kZWZhdWx0LmdldCh0aGlzKX0scnVuOmZ1bmN0aW9uKGUpe3ZhciB0LG49cnIucHJvcEhvb2tzW3RoaXMucHJvcF07cmV0dXJuIHRoaXMucG9zPXQ9dGhpcy5vcHRpb25zLmR1cmF0aW9uP3guZWFzaW5nW3RoaXMuZWFzaW5nXShlLHRoaXMub3B0aW9ucy5kdXJhdGlvbiplLDAsMSx0aGlzLm9wdGlvbnMuZHVyYXRpb24pOmUsdGhpcy5ub3c9KHRoaXMuZW5kLXRoaXMuc3RhcnQpKnQrdGhpcy5zdGFydCx0aGlzLm9wdGlvbnMuc3RlcCYmdGhpcy5vcHRpb25zLnN0ZXAuY2FsbCh0aGlzLmVsZW0sdGhpcy5ub3csdGhpcyksbiYmbi5zZXQ/bi5zZXQodGhpcyk6cnIucHJvcEhvb2tzLl9kZWZhdWx0LnNldCh0aGlzKSx0aGlzfX0scnIucHJvdG90eXBlLmluaXQucHJvdG90eXBlPXJyLnByb3RvdHlwZSxyci5wcm9wSG9va3M9e19kZWZhdWx0OntnZXQ6ZnVuY3Rpb24oZSl7dmFyIHQ7cmV0dXJuIG51bGw9PWUuZWxlbVtlLnByb3BdfHxlLmVsZW0uc3R5bGUmJm51bGwhPWUuZWxlbS5zdHlsZVtlLnByb3BdPyh0PXguY3NzKGUuZWxlbSxlLnByb3AsIiIpLHQmJiJhdXRvIiE9PXQ/dDowKTplLmVsZW1bZS5wcm9wXX0sc2V0OmZ1bmN0aW9uKGUpe3guZnguc3RlcFtlLnByb3BdP3guZnguc3RlcFtlLnByb3BdKGUpOmUuZWxlbS5zdHlsZSYmKG51bGwhPWUuZWxlbS5zdHlsZVt4LmNzc1Byb3BzW2UucHJvcF1dfHx4LmNzc0hvb2tzW2UucHJvcF0pP3guc3R5bGUoZS5lbGVtLGUucHJvcCxlLm5vdytlLnVuaXQpOmUuZWxlbVtlLnByb3BdPWUubm93fX19LHJyLnByb3BIb29rcy5zY3JvbGxUb3A9cnIucHJvcEhvb2tzLnNjcm9sbExlZnQ9e3NldDpmdW5jdGlvbihlKXtlLmVsZW0ubm9kZVR5cGUmJmUuZWxlbS5wYXJlbnROb2RlJiYoZS5lbGVtW2UucHJvcF09ZS5ub3cpfX0seC5lYWNoKFsidG9nZ2xlIiwic2hvdyIsImhpZGUiXSxmdW5jdGlvbihlLHQpe3ZhciBuPXguZm5bdF07eC5mblt0XT1mdW5jdGlvbihlLHIsaSl7cmV0dXJuIG51bGw9PWV8fCJib29sZWFuIj09dHlwZW9mIGU/bi5hcHBseSh0aGlzLGFyZ3VtZW50cyk6dGhpcy5hbmltYXRlKGlyKHQsITApLGUscixpKX19KSx4LmZuLmV4dGVuZCh7ZmFkZVRvOmZ1bmN0aW9uKGUsdCxuLHIpe3JldHVybiB0aGlzLmZpbHRlcihubikuY3NzKCJvcGFjaXR5IiwwKS5zaG93KCkuZW5kKCkuYW5pbWF0ZSh7b3BhY2l0eTp0fSxlLG4scil9LGFuaW1hdGU6ZnVuY3Rpb24oZSx0LG4scil7dmFyIGk9eC5pc0VtcHR5T2JqZWN0KGUpLG89eC5zcGVlZCh0LG4sciksYT1mdW5jdGlvbigpe3ZhciB0PWVyKHRoaXMseC5leHRlbmQoe30sZSksbyk7KGl8fHguX2RhdGEodGhpcywiZmluaXNoIikpJiZ0LnN0b3AoITApfTtyZXR1cm4gYS5maW5pc2g9YSxpfHxvLnF1ZXVlPT09ITE/dGhpcy5lYWNoKGEpOnRoaXMucXVldWUoby5xdWV1ZSxhKX0sc3RvcDpmdW5jdGlvbihlLG4scil7dmFyIGk9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5zdG9wO2RlbGV0ZSBlLnN0b3AsdChyKX07cmV0dXJuInN0cmluZyIhPXR5cGVvZiBlJiYocj1uLG49ZSxlPXQpLG4mJmUhPT0hMSYmdGhpcy5xdWV1ZShlfHwiZngiLFtdKSx0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgdD0hMCxuPW51bGwhPWUmJmUrInF1ZXVlSG9va3MiLG89eC50aW1lcnMsYT14Ll9kYXRhKHRoaXMpO2lmKG4pYVtuXSYmYVtuXS5zdG9wJiZpKGFbbl0pO2Vsc2UgZm9yKG4gaW4gYSlhW25dJiZhW25dLnN0b3AmJkpuLnRlc3QobikmJmkoYVtuXSk7Zm9yKG49by5sZW5ndGg7bi0tOylvW25dLmVsZW0hPT10aGlzfHxudWxsIT1lJiZvW25dLnF1ZXVlIT09ZXx8KG9bbl0uYW5pbS5zdG9wKHIpLHQ9ITEsby5zcGxpY2UobiwxKSk7KHR8fCFyKSYmeC5kZXF1ZXVlKHRoaXMsZSl9KX0sZmluaXNoOmZ1bmN0aW9uKGUpe3JldHVybiBlIT09ITEmJihlPWV8fCJmeCIpLHRoaXMuZWFjaChmdW5jdGlvbigpe3ZhciB0LG49eC5fZGF0YSh0aGlzKSxyPW5bZSsicXVldWUiXSxpPW5bZSsicXVldWVIb29rcyJdLG89eC50aW1lcnMsYT1yP3IubGVuZ3RoOjA7Zm9yKG4uZmluaXNoPSEwLHgucXVldWUodGhpcyxlLFtdKSxpJiZpLnN0b3AmJmkuc3RvcC5jYWxsKHRoaXMsITApLHQ9by5sZW5ndGg7dC0tOylvW3RdLmVsZW09PT10aGlzJiZvW3RdLnF1ZXVlPT09ZSYmKG9bdF0uYW5pbS5zdG9wKCEwKSxvLnNwbGljZSh0LDEpKTtmb3IodD0wO2E+dDt0Kyspclt0XSYmclt0XS5maW5pc2gmJnJbdF0uZmluaXNoLmNhbGwodGhpcyk7ZGVsZXRlIG4uZmluaXNofSl9fSk7ZnVuY3Rpb24gaXIoZSx0KXt2YXIgbixyPXtoZWlnaHQ6ZX0saT0wO2Zvcih0PXQ/MTowOzQ+aTtpKz0yLXQpbj1adFtpXSxyWyJtYXJnaW4iK25dPXJbInBhZGRpbmciK25dPWU7cmV0dXJuIHQmJihyLm9wYWNpdHk9ci53aWR0aD1lKSxyfXguZWFjaCh7c2xpZGVEb3duOmlyKCJzaG93Iiksc2xpZGVVcDppcigiaGlkZSIpLHNsaWRlVG9nZ2xlOmlyKCJ0b2dnbGUiKSxmYWRlSW46e29wYWNpdHk6InNob3cifSxmYWRlT3V0OntvcGFjaXR5OiJoaWRlIn0sZmFkZVRvZ2dsZTp7b3BhY2l0eToidG9nZ2xlIn19LGZ1bmN0aW9uKGUsdCl7eC5mbltlXT1mdW5jdGlvbihlLG4scil7cmV0dXJuIHRoaXMuYW5pbWF0ZSh0LGUsbixyKX19KSx4LnNwZWVkPWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1lJiYib2JqZWN0Ij09dHlwZW9mIGU/eC5leHRlbmQoe30sZSk6e2NvbXBsZXRlOm58fCFuJiZ0fHx4LmlzRnVuY3Rpb24oZSkmJmUsZHVyYXRpb246ZSxlYXNpbmc6biYmdHx8dCYmIXguaXNGdW5jdGlvbih0KSYmdH07cmV0dXJuIHIuZHVyYXRpb249eC5meC5vZmY/MDoibnVtYmVyIj09dHlwZW9mIHIuZHVyYXRpb24/ci5kdXJhdGlvbjpyLmR1cmF0aW9uIGluIHguZnguc3BlZWRzP3guZnguc3BlZWRzW3IuZHVyYXRpb25dOnguZnguc3BlZWRzLl9kZWZhdWx0LChudWxsPT1yLnF1ZXVlfHxyLnF1ZXVlPT09ITApJiYoci5xdWV1ZT0iZngiKSxyLm9sZD1yLmNvbXBsZXRlLHIuY29tcGxldGU9ZnVuY3Rpb24oKXt4LmlzRnVuY3Rpb24oci5vbGQpJiZyLm9sZC5jYWxsKHRoaXMpLHIucXVldWUmJnguZGVxdWV1ZSh0aGlzLHIucXVldWUpfSxyfSx4LmVhc2luZz17bGluZWFyOmZ1bmN0aW9uKGUpe3JldHVybiBlfSxzd2luZzpmdW5jdGlvbihlKXtyZXR1cm4uNS1NYXRoLmNvcyhlKk1hdGguUEkpLzJ9fSx4LnRpbWVycz1bXSx4LmZ4PXJyLnByb3RvdHlwZS5pbml0LHguZngudGljaz1mdW5jdGlvbigpe3ZhciBlLG49eC50aW1lcnMscj0wO2ZvcihYbj14Lm5vdygpO24ubGVuZ3RoPnI7cisrKWU9bltyXSxlKCl8fG5bcl0hPT1lfHxuLnNwbGljZShyLS0sMSk7bi5sZW5ndGh8fHguZnguc3RvcCgpLFhuPXR9LHguZngudGltZXI9ZnVuY3Rpb24oZSl7ZSgpJiZ4LnRpbWVycy5wdXNoKGUpJiZ4LmZ4LnN0YXJ0KCl9LHguZnguaW50ZXJ2YWw9MTMseC5meC5zdGFydD1mdW5jdGlvbigpe1VufHwoVW49c2V0SW50ZXJ2YWwoeC5meC50aWNrLHguZnguaW50ZXJ2YWwpKX0seC5meC5zdG9wPWZ1bmN0aW9uKCl7Y2xlYXJJbnRlcnZhbChVbiksVW49bnVsbH0seC5meC5zcGVlZHM9e3Nsb3c6NjAwLGZhc3Q6MjAwLF9kZWZhdWx0OjQwMH0seC5meC5zdGVwPXt9LHguZXhwciYmeC5leHByLmZpbHRlcnMmJih4LmV4cHIuZmlsdGVycy5hbmltYXRlZD1mdW5jdGlvbihlKXtyZXR1cm4geC5ncmVwKHgudGltZXJzLGZ1bmN0aW9uKHQpe3JldHVybiBlPT09dC5lbGVtfSkubGVuZ3RofSkseC5mbi5vZmZzZXQ9ZnVuY3Rpb24oZSl7aWYoYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gZT09PXQ/dGhpczp0aGlzLmVhY2goZnVuY3Rpb24odCl7eC5vZmZzZXQuc2V0T2Zmc2V0KHRoaXMsZSx0KX0pO3ZhciBuLHIsbz17dG9wOjAsbGVmdDowfSxhPXRoaXNbMF0scz1hJiZhLm93bmVyRG9jdW1lbnQ7aWYocylyZXR1cm4gbj1zLmRvY3VtZW50RWxlbWVudCx4LmNvbnRhaW5zKG4sYSk/KHR5cGVvZiBhLmdldEJvdW5kaW5nQ2xpZW50UmVjdCE9PWkmJihvPWEuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkpLHI9b3Iocykse3RvcDpvLnRvcCsoci5wYWdlWU9mZnNldHx8bi5zY3JvbGxUb3ApLShuLmNsaWVudFRvcHx8MCksbGVmdDpvLmxlZnQrKHIucGFnZVhPZmZzZXR8fG4uc2Nyb2xsTGVmdCktKG4uY2xpZW50TGVmdHx8MCl9KTpvfSx4Lm9mZnNldD17c2V0T2Zmc2V0OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj14LmNzcyhlLCJwb3NpdGlvbiIpOyJzdGF0aWMiPT09ciYmKGUuc3R5bGUucG9zaXRpb249InJlbGF0aXZlIik7dmFyIGk9eChlKSxvPWkub2Zmc2V0KCksYT14LmNzcyhlLCJ0b3AiKSxzPXguY3NzKGUsImxlZnQiKSxsPSgiYWJzb2x1dGUiPT09cnx8ImZpeGVkIj09PXIpJiZ4LmluQXJyYXkoImF1dG8iLFthLHNdKT4tMSx1PXt9LGM9e30scCxmO2w/KGM9aS5wb3NpdGlvbigpLHA9Yy50b3AsZj1jLmxlZnQpOihwPXBhcnNlRmxvYXQoYSl8fDAsZj1wYXJzZUZsb2F0KHMpfHwwKSx4LmlzRnVuY3Rpb24odCkmJih0PXQuY2FsbChlLG4sbykpLG51bGwhPXQudG9wJiYodS50b3A9dC50b3Atby50b3ArcCksbnVsbCE9dC5sZWZ0JiYodS5sZWZ0PXQubGVmdC1vLmxlZnQrZiksInVzaW5nImluIHQ/dC51c2luZy5jYWxsKGUsdSk6aS5jc3ModSl9fSx4LmZuLmV4dGVuZCh7cG9zaXRpb246ZnVuY3Rpb24oKXtpZih0aGlzWzBdKXt2YXIgZSx0LG49e3RvcDowLGxlZnQ6MH0scj10aGlzWzBdO3JldHVybiJmaXhlZCI9PT14LmNzcyhyLCJwb3NpdGlvbiIpP3Q9ci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTooZT10aGlzLm9mZnNldFBhcmVudCgpLHQ9dGhpcy5vZmZzZXQoKSx4Lm5vZGVOYW1lKGVbMF0sImh0bWwiKXx8KG49ZS5vZmZzZXQoKSksbi50b3ArPXguY3NzKGVbMF0sImJvcmRlclRvcFdpZHRoIiwhMCksbi5sZWZ0Kz14LmNzcyhlWzBdLCJib3JkZXJMZWZ0V2lkdGgiLCEwKSkse3RvcDp0LnRvcC1uLnRvcC14LmNzcyhyLCJtYXJnaW5Ub3AiLCEwKSxsZWZ0OnQubGVmdC1uLmxlZnQteC5jc3MociwibWFyZ2luTGVmdCIsITApfX19LG9mZnNldFBhcmVudDpmdW5jdGlvbigpe3JldHVybiB0aGlzLm1hcChmdW5jdGlvbigpe3ZhciBlPXRoaXMub2Zmc2V0UGFyZW50fHxzO3doaWxlKGUmJiF4Lm5vZGVOYW1lKGUsImh0bWwiKSYmInN0YXRpYyI9PT14LmNzcyhlLCJwb3NpdGlvbiIpKWU9ZS5vZmZzZXRQYXJlbnQ7cmV0dXJuIGV8fHN9KX19KSx4LmVhY2goe3Njcm9sbExlZnQ6InBhZ2VYT2Zmc2V0IixzY3JvbGxUb3A6InBhZ2VZT2Zmc2V0In0sZnVuY3Rpb24oZSxuKXt2YXIgcj0vWS8udGVzdChuKTt4LmZuW2VdPWZ1bmN0aW9uKGkpe3JldHVybiB4LmFjY2Vzcyh0aGlzLGZ1bmN0aW9uKGUsaSxvKXt2YXIgYT1vcihlKTtyZXR1cm4gbz09PXQ/YT9uIGluIGE/YVtuXTphLmRvY3VtZW50LmRvY3VtZW50RWxlbWVudFtpXTplW2ldOihhP2Euc2Nyb2xsVG8ocj94KGEpLnNjcm9sbExlZnQoKTpvLHI/bzp4KGEpLnNjcm9sbFRvcCgpKTplW2ldPW8sdCl9LGUsaSxhcmd1bWVudHMubGVuZ3RoLG51bGwpfX0pO2Z1bmN0aW9uIG9yKGUpe3JldHVybiB4LmlzV2luZG93KGUpP2U6OT09PWUubm9kZVR5cGU/ZS5kZWZhdWx0Vmlld3x8ZS5wYXJlbnRXaW5kb3c6ITF9eC5lYWNoKHtIZWlnaHQ6ImhlaWdodCIsV2lkdGg6IndpZHRoIn0sZnVuY3Rpb24oZSxuKXt4LmVhY2goe3BhZGRpbmc6ImlubmVyIitlLGNvbnRlbnQ6biwiIjoib3V0ZXIiK2V9LGZ1bmN0aW9uKHIsaSl7eC5mbltpXT1mdW5jdGlvbihpLG8pe3ZhciBhPWFyZ3VtZW50cy5sZW5ndGgmJihyfHwiYm9vbGVhbiIhPXR5cGVvZiBpKSxzPXJ8fChpPT09ITB8fG89PT0hMD8ibWFyZ2luIjoiYm9yZGVyIik7cmV0dXJuIHguYWNjZXNzKHRoaXMsZnVuY3Rpb24obixyLGkpe3ZhciBvO3JldHVybiB4LmlzV2luZG93KG4pP24uZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50WyJjbGllbnQiK2VdOjk9PT1uLm5vZGVUeXBlPyhvPW4uZG9jdW1lbnRFbGVtZW50LE1hdGgubWF4KG4uYm9keVsic2Nyb2xsIitlXSxvWyJzY3JvbGwiK2VdLG4uYm9keVsib2Zmc2V0IitlXSxvWyJvZmZzZXQiK2VdLG9bImNsaWVudCIrZV0pKTppPT09dD94LmNzcyhuLHIscyk6eC5zdHlsZShuLHIsaSxzKX0sbixhP2k6dCxhLG51bGwpfX0pfSkseC5mbi5zaXplPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubGVuZ3RofSx4LmZuLmFuZFNlbGY9eC5mbi5hZGRCYWNrLCJvYmplY3QiPT10eXBlb2YgbW9kdWxlJiZtb2R1bGUmJiJvYmplY3QiPT10eXBlb2YgbW9kdWxlLmV4cG9ydHM/bW9kdWxlLmV4cG9ydHM9eDooZS5qUXVlcnk9ZS4kPXgsImZ1bmN0aW9uIj09dHlwZW9mIGRlZmluZSYmZGVmaW5lLmFtZCYmZGVmaW5lKCJqcXVlcnkiLFtdLGZ1bmN0aW9uKCl7cmV0dXJuIHh9KSl9KSh3aW5kb3cpOw=="></script>
		<script id="deck-core_js" src="data:/text/plain;base64,LyohCkRlY2sgSlMgLSBkZWNrLmNvcmUKQ29weXJpZ2h0IChjKSAyMDExLTIwMTQgQ2FsZWIgVHJvdWdodG9uCkR1YWwgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlLgpodHRwczovL2dpdGh1Yi5jb20vaW1ha2V3ZWJ0aGluZ3MvZGVjay5qcy9ibG9iL21hc3Rlci9NSVQtbGljZW5zZS50eHQKKi8KCi8qClRoZSBkZWNrLmNvcmUgbW9kdWxlIHByb3ZpZGVzIGFsbCB0aGUgYmFzaWMgZnVuY3Rpb25hbGl0eSBmb3IgY3JlYXRpbmcgYW5kCm1vdmluZyB0aHJvdWdoIGEgZGVjay4gIEl0IGRvZXMgc28gYnkgYXBwbHlpbmcgY2xhc3NlcyB0byBpbmRpY2F0ZSB0aGUgc3RhdGUgb2YKdGhlIGRlY2sgYW5kIGl0cyBzbGlkZXMsIGFsbG93aW5nIENTUyB0byB0YWtlIGNhcmUgb2YgdGhlIHZpc3VhbCByZXByZXNlbnRhdGlvbgpvZiBlYWNoIHN0YXRlLiAgSXQgYWxzbyBwcm92aWRlcyBtZXRob2RzIGZvciBuYXZpZ2F0aW5nIHRoZSBkZWNrIGFuZCBpbnNwZWN0aW5nCml0cyBzdGF0ZSwgYXMgd2VsbCBhcyBiYXNpYyBrZXkgYmluZGluZ3MgZm9yIGdvaW5nIHRvIHRoZSBuZXh0IGFuZCBwcmV2aW91cwpzbGlkZXMuICBNb3JlIGZ1bmN0aW9uYWxpdHkgaXMgcHJvdmlkZWQgYnkgd2hvbGx5IHNlcGFyYXRlIGV4dGVuc2lvbiBtb2R1bGVzCnRoYXQgdXNlIHRoZSBBUEkgcHJvdmlkZWQgYnkgY29yZS4KKi8KKGZ1bmN0aW9uKCQsIHVuZGVmaW5lZCkgewogIHZhciBzbGlkZXMsIGN1cnJlbnRJbmRleCwgJGNvbnRhaW5lciwgJGZyYWdtZW50TGlua3M7CgogIHZhciBldmVudHMgPSB7CiAgICAvKgogICAgVGhpcyBldmVudCBmaXJlcyBhdCB0aGUgYmVnaW5uaW5nIG9mIGEgc2xpZGUgY2hhbmdlLCBiZWZvcmUgdGhlIGFjdHVhbAogICAgY2hhbmdlIG9jY3Vycy4gSXRzIHB1cnBvc2UgaXMgdG8gZ2l2ZSBleHRlbnNpb24gYXV0aG9ycyBhIHdheSB0byBwcmV2ZW50CiAgICB0aGUgc2xpZGUgY2hhbmdlIGZyb20gb2NjdXJpbmcuIFRoaXMgaXMgZG9uZSBieSBjYWxsaW5nIHByZXZlbnREZWZhdWx0CiAgICBvbiB0aGUgZXZlbnQgb2JqZWN0IHdpdGhpbiB0aGlzIGV2ZW50LiBJZiB0aGF0IGlzIGRvbmUsIHRoZSBkZWNrLmNoYW5nZQogICAgZXZlbnQgd2lsbCBuZXZlciBiZSBmaXJlZCBhbmQgdGhlIHNsaWRlIHdpbGwgbm90IGNoYW5nZS4KICAgICovCiAgICBiZWZvcmVDaGFuZ2U6ICdkZWNrLmJlZm9yZUNoYW5nZScsCgogICAgLyoKICAgIFRoaXMgZXZlbnQgZmlyZXMgd2hlbmV2ZXIgdGhlIGN1cnJlbnQgc2xpZGUgY2hhbmdlcywgd2hldGhlciBieSB3YXkgb2YKICAgIG5leHQsIHByZXYsIG9yIGdvLiBUaGUgY2FsbGJhY2sgZnVuY3Rpb24gaXMgcGFzc2VkIHR3byBwYXJhbWV0ZXJzLCBmcm9tCiAgICBhbmQgdG8sIGVxdWFsIHRvIHRoZSBpbmRpY2VzIG9mIHRoZSBvbGQgc2xpZGUgYW5kIHRoZSBuZXcgc2xpZGUKICAgIHJlc3BlY3RpdmVseS4gSWYgcHJldmVudERlZmF1bHQgaXMgY2FsbGVkIG9uIHRoZSBldmVudCB3aXRoaW4gdGhpcyBoYW5kbGVyCiAgICB0aGUgc2xpZGUgY2hhbmdlIGRvZXMgbm90IG9jY3VyLgoKICAgICQoZG9jdW1lbnQpLmJpbmQoJ2RlY2suY2hhbmdlJywgZnVuY3Rpb24oZXZlbnQsIGZyb20sIHRvKSB7CiAgICAgICBhbGVydCgnTW92aW5nIGZyb20gc2xpZGUgJyArIGZyb20gKyAnIHRvICcgKyB0byk7CiAgICB9KTsKICAgICovCiAgICBjaGFuZ2U6ICdkZWNrLmNoYW5nZScsCgogICAgLyoKICAgIFRoaXMgZXZlbnQgZmlyZXMgYXQgdGhlIGJlZ2lubmluZyBvZiBkZWNrIGluaXRpYWxpemF0aW9uLiBUaGlzIGV2ZW50IG1ha2VzCiAgICBhIGdvb2QgaG9vayBmb3IgcHJlcHJvY2Vzc2luZyBleHRlbnNpb25zIGxvb2tpbmcgdG8gbW9kaWZ5IHRoZSBET00gYmVmb3JlCiAgICB0aGUgZGVjayBpcyBmdWxseSBpbml0aWFsaXplZC4gSXQgaXMgYWxzbyBwb3NzaWJsZSB0byBoYWx0IHRoZSBkZWNrLmluaXQKICAgIGV2ZW50IGZyb20gZmlyaW5nIHdoaWxlIHlvdSBkbyB0aGluZ3MgaW4gYmVmb3JlSW5pdC4gVGhpcyBjYW4gYmUgZG9uZSBieQogICAgY2FsbGluZyBsb2NrSW5pdCBvbiB0aGUgZXZlbnQgb2JqZWN0IHBhc3NlZCB0byB0aGlzIGV2ZW50LiBUaGUgaW5pdCBjYW4gYmUKICAgIHJlbGVhc2VkIGJ5IGNhbGxpbmcgcmVsZWFzZUluaXQuCgogICAgJChkb2N1bWVudCkuYmluZCgnZGVjay5iZWZvcmVJbml0JywgZnVuY3Rpb24oZXZlbnQpIHsKICAgICAgZXZlbnQubG9ja0luaXQoKTsgLy8gaGFsdHMgZGVjay5pbml0IGV2ZW50CiAgICAgIHdpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCkgewogICAgICAgIGV2ZW50LnJlbGVhc2VJbml0KCk7IC8vIGRlY2suaW5pdCB3aWxsIG5vdyBmaXJlIDIgc2Vjb25kcyBsYXRlcgogICAgICB9LCAyMDAwKTsKICAgIH0pOwoKICAgIFRoZSBpbml0IGV2ZW50IHdpbGwgYmUgZmlyZWQgcmVnYXJkbGVzcyBvZiBsb2NrcyBhZnRlcgogICAgb3B0aW9ucy5pbml0TG9ja1RpbWVvdXQgbWlsbGlzZWNvbmRzLgogICAgKi8KICAgIGJlZm9yZUluaXRpYWxpemU6ICdkZWNrLmJlZm9yZUluaXQnLAoKICAgIC8qCiAgICBUaGlzIGV2ZW50IGZpcmVzIGF0IHRoZSBlbmQgb2YgZGVjayBpbml0aWFsaXphdGlvbi4gRXh0ZW5zaW9ucyBzaG91bGQKICAgIGltcGxlbWVudCBhbnkgY29kZSB0aGF0IHJlbGllcyBvbiB1c2VyIGV4dGVuc2libGUgb3B0aW9ucyAoa2V5IGJpbmRpbmdzLAogICAgZWxlbWVudCBzZWxlY3RvcnMsIGNsYXNzZXMpIHdpdGhpbiBhIGhhbmRsZXIgZm9yIHRoaXMgZXZlbnQuIE5hdGl2ZQogICAgZXZlbnRzIGFzc29jaWF0ZWQgd2l0aCBEZWNrIEpTIHNob3VsZCBiZSBzY29wZWQgdW5kZXIgYSAuZGVjayBldmVudAogICAgbmFtZXNwYWNlLCBhcyB3aXRoIHRoZSBleGFtcGxlIGJlbG93OgoKICAgIHZhciAkZCA9ICQoZG9jdW1lbnQpOwogICAgJC5kZWNrLmRlZmF1bHRzLmtleXMubXlFeHRlbnNpb25LZXljb2RlID0gNzA7IC8vICdoJwogICAgJGQuYmluZCgnZGVjay5pbml0JywgZnVuY3Rpb24oKSB7CiAgICAgICAkZC5iaW5kKCdrZXlkb3duLmRlY2snLCBmdW5jdGlvbihldmVudCkgewogICAgICAgICAgaWYgKGV2ZW50LndoaWNoID09PSAkLmRlY2suZ2V0T3B0aW9ucygpLmtleXMubXlFeHRlbnNpb25LZXljb2RlKSB7CiAgICAgICAgICAgICAvLyBSb2NrIG91dAogICAgICAgICAgfQogICAgICAgfSk7CiAgICB9KTsKICAgICovCiAgICBpbml0aWFsaXplOiAnZGVjay5pbml0JwogIH07CgogIHZhciBvcHRpb25zID0ge307CiAgdmFyICRkb2N1bWVudCA9ICQoZG9jdW1lbnQpOwogIHZhciAkd2luZG93ID0gJCh3aW5kb3cpOwogIHZhciBzdG9wUHJvcGFnYXRpb24gPSBmdW5jdGlvbihldmVudCkgewogICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7CiAgfTsKCiAgdmFyIHVwZGF0ZUNvbnRhaW5lclN0YXRlID0gZnVuY3Rpb24oKSB7CiAgICB2YXIgb2xkSW5kZXggPSAkY29udGFpbmVyLmRhdGEoJ29uU2xpZGUnKTsKICAgICRjb250YWluZXIucmVtb3ZlQ2xhc3Mob3B0aW9ucy5jbGFzc2VzLm9uUHJlZml4ICsgb2xkSW5kZXgpOwogICAgJGNvbnRhaW5lci5hZGRDbGFzcyhvcHRpb25zLmNsYXNzZXMub25QcmVmaXggKyBjdXJyZW50SW5kZXgpOwogICAgJGNvbnRhaW5lci5kYXRhKCdvblNsaWRlJywgY3VycmVudEluZGV4KTsKICB9OwoKICB2YXIgdXBkYXRlQ2hpbGRDdXJyZW50ID0gZnVuY3Rpb24oKSB7CiAgICB2YXIgJG9sZEN1cnJlbnQgPSAkKCcuJyArIG9wdGlvbnMuY2xhc3Nlcy5jdXJyZW50KTsKICAgIHZhciAkb2xkUGFyZW50cyA9ICRvbGRDdXJyZW50LnBhcmVudHNVbnRpbChvcHRpb25zLnNlbGVjdG9ycy5jb250YWluZXIpOwogICAgdmFyICRuZXdDdXJyZW50ID0gc2xpZGVzW2N1cnJlbnRJbmRleF07CiAgICB2YXIgJG5ld1BhcmVudHMgPSAkbmV3Q3VycmVudC5wYXJlbnRzVW50aWwob3B0aW9ucy5zZWxlY3RvcnMuY29udGFpbmVyKTsKICAgICRvbGRQYXJlbnRzLnJlbW92ZUNsYXNzKG9wdGlvbnMuY2xhc3Nlcy5jaGlsZEN1cnJlbnQpOwogICAgJG5ld1BhcmVudHMuYWRkQ2xhc3Mob3B0aW9ucy5jbGFzc2VzLmNoaWxkQ3VycmVudCk7CiAgfTsKCiAgdmFyIHJlbW92ZU9sZFNsaWRlU3RhdGVzID0gZnVuY3Rpb24oKSB7CiAgICB2YXIgJGFsbCA9ICQoKTsKICAgICQuZWFjaChzbGlkZXMsIGZ1bmN0aW9uKGksIGVsKSB7CiAgICAgICRhbGwgPSAkYWxsLmFkZChlbCk7CiAgICB9KTsKICAgICRhbGwucmVtb3ZlQ2xhc3MoWwogICAgICBvcHRpb25zLmNsYXNzZXMuYmVmb3JlLAogICAgICBvcHRpb25zLmNsYXNzZXMucHJldmlvdXMsCiAgICAgIG9wdGlvbnMuY2xhc3Nlcy5jdXJyZW50LAogICAgICBvcHRpb25zLmNsYXNzZXMubmV4dCwKICAgICAgb3B0aW9ucy5jbGFzc2VzLmFmdGVyCiAgICBdLmpvaW4oJyAnKSk7CiAgfTsKCiAgdmFyIGFkZE5ld1NsaWRlU3RhdGVzID0gZnVuY3Rpb24oKSB7CiAgICBzbGlkZXNbY3VycmVudEluZGV4XS5hZGRDbGFzcyhvcHRpb25zLmNsYXNzZXMuY3VycmVudCk7CiAgICBpZiAoY3VycmVudEluZGV4ID4gMCkgewogICAgICBzbGlkZXNbY3VycmVudEluZGV4LTFdLmFkZENsYXNzKG9wdGlvbnMuY2xhc3Nlcy5wcmV2aW91cyk7CiAgICB9CiAgICBpZiAoY3VycmVudEluZGV4ICsgMSA8IHNsaWRlcy5sZW5ndGgpIHsKICAgICAgc2xpZGVzW2N1cnJlbnRJbmRleCsxXS5hZGRDbGFzcyhvcHRpb25zLmNsYXNzZXMubmV4dCk7CiAgICB9CiAgICBpZiAoY3VycmVudEluZGV4ID4gMSkgewogICAgICAkLmVhY2goc2xpZGVzLnNsaWNlKDAsIGN1cnJlbnRJbmRleCAtIDEpLCBmdW5jdGlvbihpLCAkc2xpZGUpIHsKICAgICAgICAkc2xpZGUuYWRkQ2xhc3Mob3B0aW9ucy5jbGFzc2VzLmJlZm9yZSk7CiAgICAgIH0pOwogICAgfQogICAgaWYgKGN1cnJlbnRJbmRleCArIDIgPCBzbGlkZXMubGVuZ3RoKSB7CiAgICAgICQuZWFjaChzbGlkZXMuc2xpY2UoY3VycmVudEluZGV4KzIpLCBmdW5jdGlvbihpLCAkc2xpZGUpIHsKICAgICAgICAkc2xpZGUuYWRkQ2xhc3Mob3B0aW9ucy5jbGFzc2VzLmFmdGVyKTsKICAgICAgfSk7CiAgICB9CiAgfTsKCiAgdmFyIHNldEFyaWFIaWRkZW5zID0gZnVuY3Rpb24oKSB7CiAgICAkKG9wdGlvbnMuc2VsZWN0b3JzLnNsaWRlcykuZWFjaChmdW5jdGlvbigpIHsKICAgICAgdmFyICRzbGlkZSA9ICQodGhpcyk7CiAgICAgIHZhciBpc1N1YiA9ICRzbGlkZS5jbG9zZXN0KCcuJyArIG9wdGlvbnMuY2xhc3Nlcy5jaGlsZEN1cnJlbnQpLmxlbmd0aDsKICAgICAgdmFyIGlzQmVmb3JlID0gJHNsaWRlLmhhc0NsYXNzKG9wdGlvbnMuY2xhc3Nlcy5iZWZvcmUpICYmICFpc1N1YjsKICAgICAgdmFyIGlzUHJldmlvdXMgPSAkc2xpZGUuaGFzQ2xhc3Mob3B0aW9ucy5jbGFzc2VzLnByZXZpb3VzKSAmJiAhaXNTdWI7CiAgICAgIHZhciBpc05leHQgPSAkc2xpZGUuaGFzQ2xhc3Mob3B0aW9ucy5jbGFzc2VzLm5leHQpOwogICAgICB2YXIgaXNBZnRlciA9ICRzbGlkZS5oYXNDbGFzcyhvcHRpb25zLmNsYXNzZXMuYWZ0ZXIpOwogICAgICB2YXIgYXJpYUhpZGRlblZhbHVlID0gaXNCZWZvcmUgfHwgaXNQcmV2aW91cyB8fCBpc05leHQgfHwgaXNBZnRlcjsKICAgICAgJHNsaWRlLmF0dHIoJ2FyaWEtaGlkZGVuJywgYXJpYUhpZGRlblZhbHVlKTsKICAgIH0pOwogIH07CgogIHZhciB1cGRhdGVTdGF0ZXMgPSBmdW5jdGlvbigpIHsKICAgIHVwZGF0ZUNvbnRhaW5lclN0YXRlKCk7CiAgICB1cGRhdGVDaGlsZEN1cnJlbnQoKTsKICAgIHJlbW92ZU9sZFNsaWRlU3RhdGVzKCk7CiAgICBhZGROZXdTbGlkZVN0YXRlcygpOwogICAgaWYgKG9wdGlvbnMuc2V0QXJpYUhpZGRlbnMpIHsKICAgICAgc2V0QXJpYUhpZGRlbnMoKTsKICAgIH0KICB9OwoKICB2YXIgaW5pdFNsaWRlc0FycmF5ID0gZnVuY3Rpb24oZWxlbWVudHMpIHsKICAgIGlmICgkLmlzQXJyYXkoZWxlbWVudHMpKSB7CiAgICAgICQuZWFjaChlbGVtZW50cywgZnVuY3Rpb24oaSwgZWxlbWVudCkgewogICAgICAgIHNsaWRlcy5wdXNoKCQoZWxlbWVudCkpOwogICAgICB9KTsKICAgIH0KICAgIGVsc2UgewogICAgICAkKGVsZW1lbnRzKS5lYWNoKGZ1bmN0aW9uKGksIGVsZW1lbnQpIHsKICAgICAgICBzbGlkZXMucHVzaCgkKGVsZW1lbnQpKTsKICAgICAgfSk7CiAgICB9CiAgfTsKCiAgdmFyIGJpbmRLZXlFdmVudHMgPSBmdW5jdGlvbigpIHsKICAgIHZhciBlZGl0YWJsZXMgPSBbCiAgICAgICdpbnB1dCcsCiAgICAgICd0ZXh0YXJlYScsCiAgICAgICdzZWxlY3QnLAogICAgICAnYnV0dG9uJywKICAgICAgJ21ldGVyJywKICAgICAgJ3Byb2dyZXNzJywKICAgICAgJ1tjb250ZW50RWRpdGFibGVdJwogICAgXS5qb2luKCcsICcpOwoKICAgICRkb2N1bWVudC51bmJpbmQoJ2tleWRvd24uZGVjaycpLmJpbmQoJ2tleWRvd24uZGVjaycsIGZ1bmN0aW9uKGV2ZW50KSB7CiAgICAgIHZhciBpc05leHQgPSBldmVudC53aGljaCA9PT0gb3B0aW9ucy5rZXlzLm5leHQ7CiAgICAgIHZhciBpc1ByZXYgPSBldmVudC53aGljaCA9PT0gb3B0aW9ucy5rZXlzLnByZXZpb3VzOwogICAgICBpc05leHQgPSBpc05leHQgfHwgJC5pbkFycmF5KGV2ZW50LndoaWNoLCBvcHRpb25zLmtleXMubmV4dCkgPiAtMTsKICAgICAgaXNQcmV2ID0gaXNQcmV2IHx8ICQuaW5BcnJheShldmVudC53aGljaCwgb3B0aW9ucy5rZXlzLnByZXZpb3VzKSA+IC0xOwoKICAgICAgaWYgKGlzTmV4dCkgewogICAgICAgIG1ldGhvZHMubmV4dCgpOwogICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7CiAgICAgIH0KICAgICAgZWxzZSBpZiAoaXNQcmV2KSB7CiAgICAgICAgbWV0aG9kcy5wcmV2KCk7CiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTsKICAgICAgfQogICAgfSk7CgogICAgJGRvY3VtZW50LnVuZGVsZWdhdGUoZWRpdGFibGVzLCAna2V5ZG93bi5kZWNrJywgc3RvcFByb3BhZ2F0aW9uKTsKICAgICRkb2N1bWVudC5kZWxlZ2F0ZShlZGl0YWJsZXMsICdrZXlkb3duLmRlY2snLCBzdG9wUHJvcGFnYXRpb24pOwogIH07CgogIHZhciBiaW5kVG91Y2hFdmVudHMgPSBmdW5jdGlvbigpIHsKICAgIHZhciBzdGFydFRvdWNoOwogICAgdmFyIGRpcmVjdGlvbiA9IG9wdGlvbnMudG91Y2guc3dpcGVEaXJlY3Rpb247CiAgICB2YXIgdG9sZXJhbmNlID0gb3B0aW9ucy50b3VjaC5zd2lwZVRvbGVyYW5jZTsKICAgIHZhciBsaXN0ZW5Ub0hvcml6b250YWwgPSAoeyBib3RoOiB0cnVlLCBob3Jpem9udGFsOiB0cnVlIH0pW2RpcmVjdGlvbl07CiAgICB2YXIgbGlzdGVuVG9WZXJ0aWNhbCA9ICh7IGJvdGg6IHRydWUsIHZlcnRpY2FsOiB0cnVlIH0pW2RpcmVjdGlvbl07CgogICAgJGNvbnRhaW5lci51bmJpbmQoJ3RvdWNoc3RhcnQuZGVjaycpOwogICAgJGNvbnRhaW5lci5iaW5kKCd0b3VjaHN0YXJ0LmRlY2snLCBmdW5jdGlvbihldmVudCkgewogICAgICBpZiAoIXN0YXJ0VG91Y2gpIHsKICAgICAgICBzdGFydFRvdWNoID0gJC5leHRlbmQoe30sIGV2ZW50Lm9yaWdpbmFsRXZlbnQudGFyZ2V0VG91Y2hlc1swXSk7CiAgICAgIH0KICAgIH0pOwoKICAgICRjb250YWluZXIudW5iaW5kKCd0b3VjaG1vdmUuZGVjaycpOwogICAgJGNvbnRhaW5lci5iaW5kKCd0b3VjaG1vdmUuZGVjaycsIGZ1bmN0aW9uKGV2ZW50KSB7CiAgICAgICQuZWFjaChldmVudC5vcmlnaW5hbEV2ZW50LmNoYW5nZWRUb3VjaGVzLCBmdW5jdGlvbihpLCB0b3VjaCkgewogICAgICAgIGlmICghc3RhcnRUb3VjaCB8fCB0b3VjaC5pZGVudGlmaWVyICE9PSBzdGFydFRvdWNoLmlkZW50aWZpZXIpIHsKICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIH0KICAgICAgICB2YXIgeERpc3RhbmNlID0gdG91Y2guc2NyZWVuWCAtIHN0YXJ0VG91Y2guc2NyZWVuWDsKICAgICAgICB2YXIgeURpc3RhbmNlID0gdG91Y2guc2NyZWVuWSAtIHN0YXJ0VG91Y2guc2NyZWVuWTsKICAgICAgICB2YXIgbGVmdFRvUmlnaHQgPSB4RGlzdGFuY2UgPiB0b2xlcmFuY2UgJiYgbGlzdGVuVG9Ib3Jpem9udGFsOwogICAgICAgIHZhciByaWdodFRvTGVmdCA9IHhEaXN0YW5jZSA8IC10b2xlcmFuY2UgJiYgbGlzdGVuVG9Ib3Jpem9udGFsOwogICAgICAgIHZhciB0b3BUb0JvdHRvbSA9IHlEaXN0YW5jZSA+IHRvbGVyYW5jZSAmJiBsaXN0ZW5Ub1ZlcnRpY2FsOwogICAgICAgIHZhciBib3R0b21Ub1RvcCA9IHlEaXN0YW5jZSA8IC10b2xlcmFuY2UgJiYgbGlzdGVuVG9WZXJ0aWNhbDsKCiAgICAgICAgaWYgKGxlZnRUb1JpZ2h0IHx8IHRvcFRvQm90dG9tKSB7CiAgICAgICAgICAkLmRlY2soJ3ByZXYnKTsKICAgICAgICAgIHN0YXJ0VG91Y2ggPSB1bmRlZmluZWQ7CiAgICAgICAgfQogICAgICAgIGVsc2UgaWYgKHJpZ2h0VG9MZWZ0IHx8IGJvdHRvbVRvVG9wKSB7CiAgICAgICAgICAkLmRlY2soJ25leHQnKTsKICAgICAgICAgIHN0YXJ0VG91Y2ggPSB1bmRlZmluZWQ7CiAgICAgICAgfQogICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgfSk7CgogICAgICBpZiAobGlzdGVuVG9WZXJ0aWNhbCkgewogICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7CiAgICAgIH0KICAgIH0pOwoKICAgICRjb250YWluZXIudW5iaW5kKCd0b3VjaGVuZC5kZWNrJyk7CiAgICAkY29udGFpbmVyLmJpbmQoJ3RvdWNoZW5kLmRlY2snLCBmdW5jdGlvbihldmVudCkgewogICAgICAkLmVhY2goZXZlbnQub3JpZ2luYWxFdmVudC5jaGFuZ2VkVG91Y2hlcywgZnVuY3Rpb24oaSwgdG91Y2gpIHsKICAgICAgICBpZiAoc3RhcnRUb3VjaCAmJiB0b3VjaC5pZGVudGlmaWVyID09PSBzdGFydFRvdWNoLmlkZW50aWZpZXIpIHsKICAgICAgICAgIHN0YXJ0VG91Y2ggPSB1bmRlZmluZWQ7CiAgICAgICAgfQogICAgICB9KTsKICAgIH0pOwogIH07CgogIHZhciBpbmRleEluQm91bmRzID0gZnVuY3Rpb24oaW5kZXgpIHsKICAgIHJldHVybiB0eXBlb2YgaW5kZXggPT09ICdudW1iZXInICYmIGluZGV4ID49MCAmJiBpbmRleCA8IHNsaWRlcy5sZW5ndGg7CiAgfTsKCiAgdmFyIGNyZWF0ZUJlZm9yZUluaXRFdmVudCA9IGZ1bmN0aW9uKCkgewogICAgdmFyIGV2ZW50ID0gJC5FdmVudChldmVudHMuYmVmb3JlSW5pdGlhbGl6ZSk7CiAgICBldmVudC5sb2NrcyA9IDA7CiAgICBldmVudC5kb25lID0gJC5ub29wOwogICAgZXZlbnQubG9ja0luaXQgPSBmdW5jdGlvbigpIHsKICAgICAgKytldmVudC5sb2NrczsKICAgIH07CiAgICBldmVudC5yZWxlYXNlSW5pdCA9IGZ1bmN0aW9uKCkgewogICAgICAtLWV2ZW50LmxvY2tzOwogICAgICBpZiAoIWV2ZW50LmxvY2tzKSB7CiAgICAgICAgZXZlbnQuZG9uZSgpOwogICAgICB9CiAgICB9OwogICAgcmV0dXJuIGV2ZW50OwogIH07CgogIHZhciBnb0J5SGFzaCA9IGZ1bmN0aW9uKHN0cikgewogICAgdmFyIGlkID0gc3RyLnN1YnN0cihzdHIuaW5kZXhPZigiIyIpICsgMSk7CgogICAgJC5lYWNoKHNsaWRlcywgZnVuY3Rpb24oaSwgJHNsaWRlKSB7CiAgICAgIGlmICgkc2xpZGUuYXR0cignaWQnKSA9PT0gaWQpIHsKICAgICAgICAkLmRlY2soJ2dvJywgaSk7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICB9CiAgICB9KTsKCiAgICAvLyBJZiB3ZSBkb24ndCBzZXQgdGhlc2UgdG8gMCB0aGUgY29udGFpbmVyIHNjcm9sbHMgZHVlIHRvIGhhc2hjaGFuZ2UKICAgIGlmIChvcHRpb25zLnByZXZlbnRGcmFnbWVudFNjcm9sbCkgewogICAgICAkLmRlY2soJ2dldENvbnRhaW5lcicpLnNjcm9sbExlZnQoMCkuc2Nyb2xsVG9wKDApOwogICAgfQogIH07CgogIHZhciBhc3NpZ25TbGlkZUlkID0gZnVuY3Rpb24oaSwgJHNsaWRlKSB7CiAgICB2YXIgY3VycmVudElkID0gJHNsaWRlLmF0dHIoJ2lkJyk7CiAgICB2YXIgcHJldmlvdXNseUFzc2lnbmVkID0gJHNsaWRlLmRhdGEoJ2RlY2tBc3NpZ25lZElkJykgPT09IGN1cnJlbnRJZDsKICAgIGlmICghY3VycmVudElkIHx8IHByZXZpb3VzbHlBc3NpZ25lZCkgewogICAgICAkc2xpZGUuYXR0cignaWQnLCBvcHRpb25zLmhhc2hQcmVmaXggKyBpKTsKICAgICAgJHNsaWRlLmRhdGEoJ2RlY2tBc3NpZ25lZElkJywgb3B0aW9ucy5oYXNoUHJlZml4ICsgaSk7CiAgICB9CiAgfTsKCiAgdmFyIHJlbW92ZUNvbnRhaW5lckhhc2hDbGFzcyA9IGZ1bmN0aW9uKGlkKSB7CiAgICAkY29udGFpbmVyLnJlbW92ZUNsYXNzKG9wdGlvbnMuY2xhc3Nlcy5vblByZWZpeCArIGlkKTsKICB9OwoKICB2YXIgYWRkQ29udGFpbmVySGFzaENsYXNzID0gZnVuY3Rpb24oaWQpIHsKICAgICRjb250YWluZXIuYWRkQ2xhc3Mob3B0aW9ucy5jbGFzc2VzLm9uUHJlZml4ICsgaWQpOwogIH07CgogIHZhciBzZXR1cEhhc2hCZWhhdmlvcnMgPSBmdW5jdGlvbigpIHsKICAgICRmcmFnbWVudExpbmtzID0gJCgpOwogICAgJC5lYWNoKHNsaWRlcywgZnVuY3Rpb24oaSwgJHNsaWRlKSB7CiAgICAgIHZhciBoYXNoOwoKICAgICAgYXNzaWduU2xpZGVJZChpLCAkc2xpZGUpOwogICAgICBoYXNoID0gJyMnICsgJHNsaWRlLmF0dHIoJ2lkJyk7CiAgICAgIGlmIChoYXNoID09PSB3aW5kb3cubG9jYXRpb24uaGFzaCkgewogICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7CiAgICAgICAgICAkLmRlY2soJ2dvJywgaSk7CiAgICAgICAgfSwgMSk7CiAgICAgIH0KICAgICAgJGZyYWdtZW50TGlua3MgPSAkZnJhZ21lbnRMaW5rcy5hZGQoJ2FbaHJlZj0iJyArIGhhc2ggKyAnIl0nKTsKICAgIH0pOwoKICAgIGlmIChzbGlkZXMubGVuZ3RoKSB7CiAgICAgIGFkZENvbnRhaW5lckhhc2hDbGFzcygkLmRlY2soJ2dldFNsaWRlJykuYXR0cignaWQnKSk7CiAgICB9OwogIH07CgogIHZhciBjaGFuZ2VIYXNoID0gZnVuY3Rpb24oZnJvbSwgdG8pIHsKICAgIHZhciBoYXNoID0gJyMnICsgJC5kZWNrKCdnZXRTbGlkZScsIHRvKS5hdHRyKCdpZCcpOwogICAgdmFyIGhhc2hQYXRoID0gd2luZG93LmxvY2F0aW9uLmhyZWYucmVwbGFjZSgvIy4qLywgJycpICsgaGFzaDsKCiAgICByZW1vdmVDb250YWluZXJIYXNoQ2xhc3MoJC5kZWNrKCdnZXRTbGlkZScsIGZyb20pLmF0dHIoJ2lkJykpOwogICAgYWRkQ29udGFpbmVySGFzaENsYXNzKCQuZGVjaygnZ2V0U2xpZGUnLCB0bykuYXR0cignaWQnKSk7CiAgICBpZiAoTW9kZXJuaXpyLmhpc3RvcnkpIHsKICAgICAgd2luZG93Lmhpc3RvcnkucmVwbGFjZVN0YXRlKHt9LCAiIiwgaGFzaFBhdGgpOwogICAgfQogIH07CgogIC8qIE1ldGhvZHMgZXhwb3NlZCBpbiB0aGUgalF1ZXJ5LmRlY2sgbmFtZXNwYWNlICovCiAgdmFyIG1ldGhvZHMgPSB7CgogICAgLyoKICAgIGpRdWVyeS5kZWNrKHNlbGVjdG9yLCBvcHRpb25zKQoKICAgIHNlbGVjdG9yOiBzdHJpbmcgfCBqUXVlcnkgfCBhcnJheQogICAgb3B0aW9uczogb2JqZWN0LCBvcHRpb25hbAoKICAgIEluaXRpYWxpemVzIHRoZSBkZWNrLCB1c2luZyBlYWNoIGVsZW1lbnQgbWF0Y2hlZCBieSBzZWxlY3RvciBhcyBhIHNsaWRlLgogICAgTWF5IGFsc28gYmUgcGFzc2VkIGFuIGFycmF5IG9mIHN0cmluZyBzZWxlY3RvcnMgb3IgalF1ZXJ5IG9iamVjdHMsIGluCiAgICB3aGljaCBjYXNlIGVhY2ggc2VsZWN0b3IgaW4gdGhlIGFycmF5IGlzIGNvbnNpZGVyZWQgYSBzbGlkZS4gVGhlIHNlY29uZAogICAgcGFyYW1ldGVyIGlzIGFuIG9wdGlvbmFsIG9wdGlvbnMgb2JqZWN0IHdoaWNoIHdpbGwgZXh0ZW5kIHRoZSBkZWZhdWx0CiAgICB2YWx1ZXMuCgogICAgVXNlcnMgbWF5IGFsc28gcGFzcyBvbmx5IGFuIG9wdGlvbnMgb2JqZWN0IHRvIGluaXQuIEluIHRoaXMgY2FzZSB0aGUgc2xpZGUKICAgIHNlbGVjdG9yIHdpbGwgYmUgb3B0aW9ucy5zZWxlY3RvcnMuc2xpZGVzIHdoaWNoIGRlZmF1bHRzIHRvIC5zbGlkZS4KCiAgICAkLmRlY2soJy5zbGlkZScpOwoKICAgIG9yCgogICAgJC5kZWNrKFsKICAgICAgICcjZmlyc3Qtc2xpZGUnLAogICAgICAgJyNzZWNvbmQtc2xpZGUnLAogICAgICAgJyNldGMnCiAgICBdKTsKICAgICovCiAgICBpbml0OiBmdW5jdGlvbihvcHRzKSB7CiAgICAgIHZhciBiZWZvcmVJbml0RXZlbnQgPSBjcmVhdGVCZWZvcmVJbml0RXZlbnQoKTsKICAgICAgdmFyIG92ZXJyaWRlcyA9IG9wdHM7CgogICAgICBpZiAoISQuaXNQbGFpbk9iamVjdChvcHRzKSkgewogICAgICAgIG92ZXJyaWRlcyA9IGFyZ3VtZW50c1sxXSB8fCB7fTsKICAgICAgICAkLmV4dGVuZCh0cnVlLCBvdmVycmlkZXMsIHsKICAgICAgICAgIHNlbGVjdG9yczogewogICAgICAgICAgICBzbGlkZXM6IGFyZ3VtZW50c1swXQogICAgICAgICAgfQogICAgICAgIH0pOwogICAgICB9CgogICAgICBvcHRpb25zID0gJC5leHRlbmQodHJ1ZSwge30sICQuZGVjay5kZWZhdWx0cywgb3ZlcnJpZGVzKTsKICAgICAgc2xpZGVzID0gW107CiAgICAgIGN1cnJlbnRJbmRleCA9IDA7CiAgICAgICRjb250YWluZXIgPSAkKG9wdGlvbnMuc2VsZWN0b3JzLmNvbnRhaW5lcik7CgogICAgICAvLyBIaWRlIHRoZSBkZWNrIHdoaWxlIHN0YXRlcyBhcmUgYmVpbmcgYXBwbGllZCB0byBraWxsIHRyYW5zaXRpb25zCiAgICAgICRjb250YWluZXIuYWRkQ2xhc3Mob3B0aW9ucy5jbGFzc2VzLmxvYWRpbmcpOwoKICAgICAgLy8gcG9wdWxhdGUgdGhlIGFycmF5IG9mIHNsaWRlcyBmb3IgcHJlLWluaXQKICAgICAgaW5pdFNsaWRlc0FycmF5KG9wdGlvbnMuc2VsZWN0b3JzLnNsaWRlcyk7CiAgICAgIC8vIFByZSBpbml0IGV2ZW50IGZvciBwcmVwcm9jZXNzaW5nIGhvb2tzCiAgICAgIGJlZm9yZUluaXRFdmVudC5kb25lID0gZnVuY3Rpb24oKSB7CiAgICAgICAgLy8gcmUtcG9wdWxhdGUgdGhlIGFycmF5IG9mIHNsaWRlcwogICAgICAgIHNsaWRlcyA9IFtdOwogICAgICAgIGluaXRTbGlkZXNBcnJheShvcHRpb25zLnNlbGVjdG9ycy5zbGlkZXMpOwogICAgICAgIHNldHVwSGFzaEJlaGF2aW9ycygpOwogICAgICAgIGJpbmRLZXlFdmVudHMoKTsKICAgICAgICBiaW5kVG91Y2hFdmVudHMoKTsKICAgICAgICAkY29udGFpbmVyLnNjcm9sbExlZnQoMCkuc2Nyb2xsVG9wKDApOwoKICAgICAgICBpZiAoc2xpZGVzLmxlbmd0aCkgewogICAgICAgICAgdXBkYXRlU3RhdGVzKCk7CiAgICAgICAgfQoKICAgICAgICAvLyBTaG93IGRlY2sgYWdhaW4gbm93IHRoYXQgc2xpZGVzIGFyZSBpbiBwbGFjZQogICAgICAgICRjb250YWluZXIucmVtb3ZlQ2xhc3Mob3B0aW9ucy5jbGFzc2VzLmxvYWRpbmcpOwogICAgICAgICRkb2N1bWVudC50cmlnZ2VyKGV2ZW50cy5pbml0aWFsaXplKTsKICAgICAgfTsKCiAgICAgICRkb2N1bWVudC50cmlnZ2VyKGJlZm9yZUluaXRFdmVudCk7CiAgICAgIGlmICghYmVmb3JlSW5pdEV2ZW50LmxvY2tzKSB7CiAgICAgICAgYmVmb3JlSW5pdEV2ZW50LmRvbmUoKTsKICAgICAgfQogICAgICB3aW5kb3cuc2V0VGltZW91dChmdW5jdGlvbigpIHsKICAgICAgICBpZiAoYmVmb3JlSW5pdEV2ZW50LmxvY2tzKSB7CiAgICAgICAgICBpZiAod2luZG93LmNvbnNvbGUpIHsKICAgICAgICAgICAgd2luZG93LmNvbnNvbGUud2FybignU29tZXRoaW5nIGxvY2tlZCBkZWNrIGluaXRpYWxpemF0aW9uXAogICAgICAgICAgICAgIHdpdGhvdXQgcmVsZWFzaW5nIGl0IGJlZm9yZSB0aGUgdGltZW91dC4gUHJvY2VlZGluZyB3aXRoXAogICAgICAgICAgICAgIGluaXRpYWxpemF0aW9uIGFueXdheS4nKTsKICAgICAgICAgIH0KICAgICAgICAgIGJlZm9yZUluaXRFdmVudC5kb25lKCk7CiAgICAgICAgfQogICAgICB9LCBvcHRpb25zLmluaXRMb2NrVGltZW91dCk7CiAgICB9LAoKICAgIC8qCiAgICBqUXVlcnkuZGVjaygnZ28nLCBpbmRleCkKCiAgICBpbmRleDogaW50ZWdlciB8IHN0cmluZwoKICAgIE1vdmVzIHRvIHRoZSBzbGlkZSBhdCB0aGUgc3BlY2lmaWVkIGluZGV4IGlmIGluZGV4IGlzIGEgbnVtYmVyLiBJbmRleCBpcwogICAgMC1iYXNlZCwgc28gJC5kZWNrKCdnbycsIDApOyB3aWxsIG1vdmUgdG8gdGhlIGZpcnN0IHNsaWRlLiBJZiBpbmRleCBpcyBhCiAgICBzdHJpbmcgdGhpcyB3aWxsIG1vdmUgdG8gdGhlIHNsaWRlIHdpdGggdGhlIHNwZWNpZmllZCBpZC4gSWYgaW5kZXggaXMgb3V0CiAgICBvZiBib3VuZHMgb3IgZG9lc24ndCBtYXRjaCBhIHNsaWRlIGlkIHRoZSBjYWxsIGlzIGlnbm9yZWQuCiAgICAqLwogICAgZ286IGZ1bmN0aW9uKGluZGV4T3JJZCkgewogICAgICB2YXIgYmVmb3JlQ2hhbmdlRXZlbnQgPSAkLkV2ZW50KGV2ZW50cy5iZWZvcmVDaGFuZ2UpOwogICAgICB2YXIgaW5kZXg7CgogICAgICAvKiBOdW1iZXIgaW5kZXgsIGVhc3kuICovCiAgICAgIGlmIChpbmRleEluQm91bmRzKGluZGV4T3JJZCkpIHsKICAgICAgICBpbmRleCA9IGluZGV4T3JJZDsKICAgICAgfQogICAgICAvKiBJZCBzdHJpbmcgaW5kZXgsIHNlYXJjaCBmb3IgaXQgYW5kIHNldCBpbnRlZ2VyIGluZGV4ICovCiAgICAgIGVsc2UgaWYgKHR5cGVvZiBpbmRleE9ySWQgPT09ICdzdHJpbmcnKSB7CiAgICAgICAgJC5lYWNoKHNsaWRlcywgZnVuY3Rpb24oaSwgJHNsaWRlKSB7CiAgICAgICAgICBpZiAoJHNsaWRlLmF0dHIoJ2lkJykgPT09IGluZGV4T3JJZCkgewogICAgICAgICAgICBpbmRleCA9IGk7CiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgIH0KICAgICAgICB9KTsKICAgICAgfQogICAgICBpZiAodHlwZW9mIGluZGV4ID09PSAndW5kZWZpbmVkJykgewogICAgICAgIHJldHVybjsKICAgICAgfQoKICAgICAgLyogVHJpZ2dlciBiZWZvcmVDaGFuZ2UuIElmIG5vdGhpbmcgcHJldmVudHMgdGhlIGNoYW5nZSwgdHJpZ2dlcgogICAgICB0aGUgc2xpZGUgY2hhbmdlLiAqLwogICAgICAkZG9jdW1lbnQudHJpZ2dlcihiZWZvcmVDaGFuZ2VFdmVudCwgW2N1cnJlbnRJbmRleCwgaW5kZXhdKTsKICAgICAgaWYgKCFiZWZvcmVDaGFuZ2VFdmVudC5pc0RlZmF1bHRQcmV2ZW50ZWQoKSkgewogICAgICAgICRkb2N1bWVudC50cmlnZ2VyKGV2ZW50cy5jaGFuZ2UsIFtjdXJyZW50SW5kZXgsIGluZGV4XSk7CiAgICAgICAgY2hhbmdlSGFzaChjdXJyZW50SW5kZXgsIGluZGV4KTsKICAgICAgICBjdXJyZW50SW5kZXggPSBpbmRleDsKICAgICAgICB1cGRhdGVTdGF0ZXMoKTsKICAgICAgfQogICAgfSwKCiAgICAvKgogICAgalF1ZXJ5LmRlY2soJ25leHQnKQoKICAgIE1vdmVzIHRvIHRoZSBuZXh0IHNsaWRlLiBJZiB0aGUgbGFzdCBzbGlkZSBpcyBhbHJlYWR5IGFjdGl2ZSwgdGhlIGNhbGwKICAgIGlzIGlnbm9yZWQuCiAgICAqLwogICAgbmV4dDogZnVuY3Rpb24oKSB7CiAgICAgIG1ldGhvZHMuZ28oY3VycmVudEluZGV4KzEpOwogICAgfSwKCiAgICAvKgogICAgalF1ZXJ5LmRlY2soJ3ByZXYnKQoKICAgIE1vdmVzIHRvIHRoZSBwcmV2aW91cyBzbGlkZS4gSWYgdGhlIGZpcnN0IHNsaWRlIGlzIGFscmVhZHkgYWN0aXZlLCB0aGUKICAgIGNhbGwgaXMgaWdub3JlZC4KICAgICovCiAgICBwcmV2OiBmdW5jdGlvbigpIHsKICAgICAgbWV0aG9kcy5nbyhjdXJyZW50SW5kZXgtMSk7CiAgICB9LAoKICAgIC8qCiAgICBqUXVlcnkuZGVjaygnZ2V0U2xpZGUnLCBpbmRleCkKCiAgICBpbmRleDogaW50ZWdlciwgb3B0aW9uYWwKCiAgICBSZXR1cm5zIGEgalF1ZXJ5IG9iamVjdCBjb250YWluaW5nIHRoZSBzbGlkZSBhdCBpbmRleC4gSWYgaW5kZXggaXMgbm90CiAgICBzcGVjaWZpZWQsIHRoZSBjdXJyZW50IHNsaWRlIGlzIHJldHVybmVkLgogICAgKi8KICAgIGdldFNsaWRlOiBmdW5jdGlvbihpbmRleCkgewogICAgICBpbmRleCA9IHR5cGVvZiBpbmRleCAhPT0gJ3VuZGVmaW5lZCcgPyBpbmRleCA6IGN1cnJlbnRJbmRleDsKICAgICAgaWYgKCFpbmRleEluQm91bmRzKGluZGV4KSkgewogICAgICAgIHJldHVybiBudWxsOwogICAgICB9CiAgICAgIHJldHVybiBzbGlkZXNbaW5kZXhdOwogICAgfSwKCiAgICAvKgogICAgalF1ZXJ5LmRlY2soJ2dldFNsaWRlcycpCgogICAgUmV0dXJucyBhbGwgc2xpZGVzIGFzIGFuIGFycmF5IG9mIGpRdWVyeSBvYmplY3RzLgogICAgKi8KICAgIGdldFNsaWRlczogZnVuY3Rpb24oKSB7CiAgICAgIHJldHVybiBzbGlkZXM7CiAgICB9LAoKICAgIC8qCiAgICBqUXVlcnkuZGVjaygnZ2V0VG9wTGV2ZWxTbGlkZXMnKQoKICAgIFJldHVybnMgYWxsIHNsaWRlcyB0aGF0IGFyZSBub3Qgc3Vic2xpZGVzLgogICAgKi8KICAgIGdldFRvcExldmVsU2xpZGVzOiBmdW5jdGlvbigpIHsKICAgICAgdmFyIHRvcExldmVsU2xpZGVzID0gW107CiAgICAgIHZhciBzbGlkZVNlbGVjdG9yID0gb3B0aW9ucy5zZWxlY3RvcnMuc2xpZGVzOwogICAgICB2YXIgc3ViU2VsZWN0b3IgPSBbc2xpZGVTZWxlY3Rvciwgc2xpZGVTZWxlY3Rvcl0uam9pbignICcpOwogICAgICAkLmVhY2goc2xpZGVzLCBmdW5jdGlvbihpLCAkc2xpZGUpIHsKICAgICAgICBpZiAoISRzbGlkZS5pcyhzdWJTZWxlY3RvcikpIHsKICAgICAgICAgIHRvcExldmVsU2xpZGVzLnB1c2goJHNsaWRlKTsKICAgICAgICB9CiAgICAgIH0pOwogICAgICByZXR1cm4gdG9wTGV2ZWxTbGlkZXM7CiAgICB9LAoKICAgIC8qCiAgICBqUXVlcnkuZGVjaygnZ2V0TmVzdGVkU2xpZGVzJywgaW5kZXgpCgogICAgaW5kZXg6IGludGVnZXIsIG9wdGlvbmFsCgogICAgUmV0dXJucyBhbGwgdGhlIG5lc3RlZCBzbGlkZXMgb2YgdGhlIGN1cnJlbnQgc2xpZGUuIElmIGluZGV4IGlzCiAgICBzcGVjaWZpZWQgaXQgcmV0dXJucyB0aGUgbmVzdGVkIHNsaWRlcyBvZiB0aGUgc2xpZGUgYXQgdGhhdCBpbmRleC4KICAgIElmIHRoZXJlIGFyZSBubyBuZXN0ZWQgc2xpZGVzIHRoaXMgd2lsbCByZXR1cm4gYW4gZW1wdHkgYXJyYXkuCiAgICAqLwogICAgZ2V0TmVzdGVkU2xpZGVzOiBmdW5jdGlvbihpbmRleCkgewogICAgICB2YXIgdGFyZ2V0SW5kZXggPSBpbmRleCA9PSBudWxsID8gY3VycmVudEluZGV4IDogaW5kZXg7CiAgICAgIHZhciAkdGFyZ2V0U2xpZGUgPSAkLmRlY2soJ2dldFNsaWRlJywgdGFyZ2V0SW5kZXgpOwogICAgICB2YXIgJG5lc3RlZHMgPSAkdGFyZ2V0U2xpZGUuZmluZChvcHRpb25zLnNlbGVjdG9ycy5zbGlkZXMpOwogICAgICB2YXIgbmVzdGVkcyA9ICRuZXN0ZWRzLmdldCgpOwogICAgICByZXR1cm4gJC5tYXAobmVzdGVkcywgZnVuY3Rpb24oc2xpZGUsIGkpIHsKICAgICAgICByZXR1cm4gJChzbGlkZSk7CiAgICAgIH0pOwogICAgfSwKCgogICAgLyoKICAgIGpRdWVyeS5kZWNrKCdnZXRDb250YWluZXInKQoKICAgIFJldHVybnMgYSBqUXVlcnkgb2JqZWN0IGNvbnRhaW5pbmcgdGhlIGRlY2sgY29udGFpbmVyIGFzIGRlZmluZWQgYnkgdGhlCiAgICBjb250YWluZXIgb3B0aW9uLgogICAgKi8KICAgIGdldENvbnRhaW5lcjogZnVuY3Rpb24oKSB7CiAgICAgIHJldHVybiAkY29udGFpbmVyOwogICAgfSwKCiAgICAvKgogICAgalF1ZXJ5LmRlY2soJ2dldE9wdGlvbnMnKQoKICAgIFJldHVybnMgdGhlIG9wdGlvbnMgb2JqZWN0IGZvciB0aGUgZGVjaywgaW5jbHVkaW5nIGFueSBvdmVycmlkZXMgdGhhdAogICAgd2VyZSBkZWZpbmVkIGF0IGluaXRpYWxpemF0aW9uLgogICAgKi8KICAgIGdldE9wdGlvbnM6IGZ1bmN0aW9uKCkgewogICAgICByZXR1cm4gb3B0aW9uczsKICAgIH0sCgogICAgLyoKICAgIGpRdWVyeS5kZWNrKCdleHRlbmQnLCBuYW1lLCBtZXRob2QpCgogICAgbmFtZTogc3RyaW5nCiAgICBtZXRob2Q6IGZ1bmN0aW9uCgogICAgQWRkcyBtZXRob2QgdG8gdGhlIGRlY2sgbmFtZXNwYWNlIHdpdGggdGhlIGtleSBvZiBuYW1lLiBUaGlzIGRvZXNu4oCZdAogICAgZ2l2ZSBhY2Nlc3MgdG8gYW55IHByaXZhdGUgbWVtYmVyIGRhdGEg4oCUIHB1YmxpYyBtZXRob2RzIG11c3Qgc3RpbGwgYmUKICAgIHVzZWQgd2l0aGluIG1ldGhvZCDigJQgYnV0IGxldHMgZXh0ZW5zaW9uIGF1dGhvcnMgcGlnZ3liYWNrIG9uIHRoZSBkZWNrCiAgICBuYW1lc3BhY2UgcmF0aGVyIHRoYW4gcG9sbHV0ZSBqUXVlcnkuCgogICAgJC5kZWNrKCdleHRlbmQnLCAnYWxlcnQnLCBmdW5jdGlvbihtc2cpIHsKICAgICAgIGFsZXJ0KG1zZyk7CiAgICB9KTsKCiAgICAvLyBBbGVydHMgJ2Jvb20nCiAgICAkLmRlY2soJ2FsZXJ0JywgJ2Jvb20nKTsKICAgICovCiAgICBleHRlbmQ6IGZ1bmN0aW9uKG5hbWUsIG1ldGhvZCkgewogICAgICBtZXRob2RzW25hbWVdID0gbWV0aG9kOwogICAgfQogIH07CgogIC8qIGpRdWVyeSBleHRlbnNpb24gKi8KICAkLmRlY2sgPSBmdW5jdGlvbihtZXRob2QsIGFyZykgewogICAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpOwogICAgaWYgKG1ldGhvZHNbbWV0aG9kXSkgewogICAgICByZXR1cm4gbWV0aG9kc1ttZXRob2RdLmFwcGx5KHRoaXMsIGFyZ3MpOwogICAgfQogICAgZWxzZSB7CiAgICAgIHJldHVybiBtZXRob2RzLmluaXQobWV0aG9kLCBhcmcpOwogICAgfQogIH07CgogIC8qCiAgVGhlIGRlZmF1bHQgc2V0dGluZ3Mgb2JqZWN0IGZvciBhIGRlY2suIEFsbCBkZWNrIGV4dGVuc2lvbnMgc2hvdWxkIGV4dGVuZAogIHRoaXMgb2JqZWN0IHRvIGFkZCBkZWZhdWx0cyBmb3IgYW55IG9mIHRoZWlyIG9wdGlvbnMuCgogIG9wdGlvbnMuY2xhc3Nlcy5hZnRlcgogICAgVGhpcyBjbGFzcyBpcyBhZGRlZCB0byBhbGwgc2xpZGVzIHRoYXQgYXBwZWFyIGFmdGVyIHRoZSAnbmV4dCcgc2xpZGUuCgogIG9wdGlvbnMuY2xhc3Nlcy5iZWZvcmUKICAgIFRoaXMgY2xhc3MgaXMgYWRkZWQgdG8gYWxsIHNsaWRlcyB0aGF0IGFwcGVhciBiZWZvcmUgdGhlICdwcmV2aW91cycKICAgIHNsaWRlLgoKICBvcHRpb25zLmNsYXNzZXMuY2hpbGRDdXJyZW50CiAgICBUaGlzIGNsYXNzIGlzIGFkZGVkIHRvIGFsbCBlbGVtZW50cyBpbiB0aGUgRE9NIHRyZWUgYmV0d2VlbiB0aGUKICAgICdjdXJyZW50JyBzbGlkZSBhbmQgdGhlIGRlY2sgY29udGFpbmVyLiBGb3Igc3RhbmRhcmQgc2xpZGVzLCB0aGlzIGlzCiAgICBtb3N0bHkgc2VlbiBhbmQgdXNlZCBmb3IgbmVzdGVkIHNsaWRlcy4KCiAgb3B0aW9ucy5jbGFzc2VzLmN1cnJlbnQKICAgIFRoaXMgY2xhc3MgaXMgYWRkZWQgdG8gdGhlIGN1cnJlbnQgc2xpZGUuCgogIG9wdGlvbnMuY2xhc3Nlcy5sb2FkaW5nCiAgICBUaGlzIGNsYXNzIGlzIGFwcGxpZWQgdG8gdGhlIGRlY2sgY29udGFpbmVyIGR1cmluZyBsb2FkaW5nIHBoYXNlcyBhbmQgaXMKICAgIHByaW1hcmlseSB1c2VkIGFzIGEgd2F5IHRvIHNob3J0IGNpcmN1aXQgdHJhbnNpdGlvbnMgYmV0d2VlbiBzdGF0ZXMKICAgIHdoZXJlIHN1Y2ggdHJhbnNpdGlvbnMgYXJlIGRpc3RyYWN0aW5nIG9yIHVud2FudGVkLiAgRm9yIGV4YW1wbGUsIHRoaXMKICAgIGNsYXNzIGlzIGFwcGxpZWQgZHVyaW5nIGRlY2sgaW5pdGlhbGl6YXRpb24gYW5kIHRoZW4gcmVtb3ZlZCB0byBwcmV2ZW50CiAgICBhbGwgdGhlIHNsaWRlcyBmcm9tIGFwcGVhcmluZyBzdGFja2VkIGFuZCB0cmFuc2l0aW9uaW5nIGludG8gcGxhY2UKICAgIG9uIGxvYWQuCgogIG9wdGlvbnMuY2xhc3Nlcy5uZXh0CiAgICBUaGlzIGNsYXNzIGlzIGFkZGVkIHRvIHRoZSBzbGlkZSBpbW1lZGlhdGVseSBmb2xsb3dpbmcgdGhlICdjdXJyZW50JwogICAgc2xpZGUuCgogIG9wdGlvbnMuY2xhc3Nlcy5vblByZWZpeAogICAgVGhpcyBwcmVmaXgsIGNvbmNhdGVuYXRlZCB3aXRoIHRoZSBjdXJyZW50IHNsaWRlIGluZGV4LCBpcyBhZGRlZCB0byB0aGUKICAgIGRlY2sgY29udGFpbmVyIGFzIHlvdSBjaGFuZ2Ugc2xpZGVzLgoKICBvcHRpb25zLmNsYXNzZXMucHJldmlvdXMKICAgIFRoaXMgY2xhc3MgaXMgYWRkZWQgdG8gdGhlIHNsaWRlIGltbWVkaWF0ZWx5IHByZWNlZGluZyB0aGUgJ2N1cnJlbnQnCiAgICBzbGlkZS4KCiAgb3B0aW9ucy5zZWxlY3RvcnMuY29udGFpbmVyCiAgICBFbGVtZW50cyBtYXRjaGVkIGJ5IHRoaXMgQ1NTIHNlbGVjdG9yIHdpbGwgYmUgY29uc2lkZXJlZCB0aGUgZGVjawogICAgY29udGFpbmVyLiBUaGUgZGVjayBjb250YWluZXIgaXMgdXNlZCB0byBzY29wZSBjZXJ0YWluIHN0YXRlcyBvZiB0aGUKICAgIGRlY2ssIGFzIHdpdGggdGhlIG9uUHJlZml4IG9wdGlvbiwgb3Igd2l0aCBleHRlbnNpb25zIHN1Y2ggYXMgZGVjay5nb3RvCiAgICBhbmQgZGVjay5tZW51LgoKICBvcHRpb25zLnNlbGVjdG9ycy5zbGlkZXMKICAgIEVsZW1lbnRzIG1hdGNoZWQgYnkgdGhpcyBzZWxlY3RvciBtYWtlIHVwIHRoZSBpbmRpdmlkdWFsIGRlY2sgc2xpZGVzLgogICAgSWYgYSB1c2VyIGNob29zZXMgdG8gcGFzcyB0aGUgc2xpZGUgc2VsZWN0b3IgYXMgdGhlIGZpcnN0IGFyZ3VtZW50IHRvCiAgICAkLmRlY2soKSBvbiBpbml0aWFsaXphdGlvbiBpdCBkb2VzIHRoZSBzYW1lIHRoaW5nIGFzIHBhc3NpbmcgaW4gdGhpcwogICAgb3B0aW9uIGFuZCB0aGlzIG9wdGlvbiB2YWx1ZSB3aWxsIGJlIHNldCB0byB0aGUgdmFsdWUgb2YgdGhhdCBwYXJhbWV0ZXIuCgogIG9wdGlvbnMua2V5cy5uZXh0CiAgICBUaGUgbnVtZXJpYyBrZXljb2RlIHVzZWQgdG8gZ28gdG8gdGhlIG5leHQgc2xpZGUuCgogIG9wdGlvbnMua2V5cy5wcmV2aW91cwogICAgVGhlIG51bWVyaWMga2V5Y29kZSB1c2VkIHRvIGdvIHRvIHRoZSBwcmV2aW91cyBzbGlkZS4KCiAgb3B0aW9ucy50b3VjaC5zd2lwZURpcmVjdGlvbgogICAgVGhlIGRpcmVjdGlvbiBzd2lwZXMgb2NjdXIgdG8gY2F1c2Ugc2xpZGUgY2hhbmdlcy4gQ2FuIGJlICdob3Jpem9udGFsJywKICAgICd2ZXJ0aWNhbCcsIG9yICdib3RoJy4gQW55IG90aGVyIHZhbHVlIG9yIGEgZmFsc3kgdmFsdWUgd2lsbCBkaXNhYmxlCiAgICBzd2lwZSBnZXN0dXJlcyBmb3IgbmF2aWdhdGlvbi4KCiAgb3B0aW9ucy50b3VjaC5zd2lwZVRvbGVyYW5jZQogICAgVGhlIG51bWJlciBvZiBwaXhlbHMgdGhlIHVzZXJzIGZpbmdlciBtdXN0IHRyYXZlbCB0byBwcm9kdWNlIGEgc3dpcGUKICAgIGdlc3R1cmUuCgogIG9wdGlvbnMuaW5pdExvY2tUaW1lb3V0CiAgICBUaGUgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyB0aGUgaW5pdCBldmVudCB3aWxsIHdhaXQgZm9yIEJlZm9yZUluaXQgZXZlbnQKICAgIGxvY2tzIHRvIGJlIHJlbGVhc2VkIGJlZm9yZSBmaXJpbmcgdGhlIGluaXQgZXZlbnQgcmVnYXJkbGVzcy4KCiAgb3B0aW9ucy5oYXNoUHJlZml4CiAgICBFdmVyeSBzbGlkZSB0aGF0IGRvZXMgbm90IGhhdmUgYW4gaWQgaXMgYXNzaWduZWQgb25lIGF0IGluaXRpYWxpemF0aW9uLgogICAgQXNzaWduZWQgaWRzIHRha2UgdGhlIGZvcm0gb2YgaGFzaFByZWZpeCArIHNsaWRlSW5kZXgsIGUuZy4sIHNsaWRlLTAsCiAgICBzbGlkZS0xMiwgZXRjLgoKICBvcHRpb25zLnByZXZlbnRGcmFnbWVudFNjcm9sbAogICAgV2hlbiBkZWVwIGxpbmtpbmcgdG8gYSBoYXNoIG9mIGEgbmVzdGVkIHNsaWRlLCB0aGlzIHNjcm9sbHMgdGhlIGRlY2sKICAgIGNvbnRhaW5lciB0byB0aGUgdG9wLCB1bmRvaW5nIHRoZSBuYXR1cmFsIGJyb3dzZXIgYmVoYXZpb3Igb2Ygc2Nyb2xsaW5nCiAgICB0byB0aGUgZG9jdW1lbnQgZnJhZ21lbnQgb24gbG9hZC4KCiAgb3B0aW9ucy5zZXRBcmlhSGlkZGVucwogICAgV2hlbiBzZXQgdG8gdHJ1ZSwgZGVjay5qcyB3aWxsIHNldCBhcmlhIGhpZGRlbiBhdHRyaWJ1dGVzIGZvciBzbGlkZXMKICAgIHRoYXQgZG8gbm90IGFwcGVhciBvbnNjcmVlbiBhY2NvcmRpbmcgdG8gYSB0eXBpY2FsIGhlaXJhcmNoaWNhbAogICAgZGVjayBzdHJ1Y3R1cmUuIFlvdSBtYXkgd2FudCB0byB0dXJuIHRoaXMgb2ZmIGlmIHlvdSBhcmUgdXNpbmcgYSB0aGVtZQogICAgd2hlcmUgc2xpZGVzIGJlc2lkZXMgdGhlIGN1cnJlbnQgc2xpZGUgYXJlIHZpc2libGUgb24gc2NyZWVuIGFuZCBzaG91bGQKICAgIGJlIGFjY2Vzc2libGUgdG8gc2NyZWVucmVhZGVycy4KICAqLwogICQuZGVjay5kZWZhdWx0cyA9IHsKICAgIGNsYXNzZXM6IHsKICAgICAgYWZ0ZXI6ICdkZWNrLWFmdGVyJywKICAgICAgYmVmb3JlOiAnZGVjay1iZWZvcmUnLAogICAgICBjaGlsZEN1cnJlbnQ6ICdkZWNrLWNoaWxkLWN1cnJlbnQnLAogICAgICBjdXJyZW50OiAnZGVjay1jdXJyZW50JywKICAgICAgbG9hZGluZzogJ2RlY2stbG9hZGluZycsCiAgICAgIG5leHQ6ICdkZWNrLW5leHQnLAogICAgICBvblByZWZpeDogJ29uLXNsaWRlLScsCiAgICAgIHByZXZpb3VzOiAnZGVjay1wcmV2aW91cycKICAgIH0sCgogICAgc2VsZWN0b3JzOiB7CiAgICAgIGNvbnRhaW5lcjogJy5kZWNrLWNvbnRhaW5lcicsCiAgICAgIHNsaWRlczogJy5zbGlkZScKICAgIH0sCgogICAga2V5czogewogICAgICAvLyBlbnRlciwgc3BhY2UsIHBhZ2UgZG93biwgcmlnaHQgYXJyb3csIGRvd24gYXJyb3csCiAgICAgIG5leHQ6IFsxMywgMzIsIDM0LCAzOSwgNDBdLAogICAgICAvLyBiYWNrc3BhY2UsIHBhZ2UgdXAsIGxlZnQgYXJyb3csIHVwIGFycm93CiAgICAgIHByZXZpb3VzOiBbOCwgMzMsIDM3LCAzOF0KICAgIH0sCgogICAgdG91Y2g6IHsKICAgICAgc3dpcGVEaXJlY3Rpb246ICdob3Jpem9udGFsJywKICAgICAgc3dpcGVUb2xlcmFuY2U6IDYwCiAgICB9LAoKICAgIGluaXRMb2NrVGltZW91dDogMTAwMDAsCiAgICBoYXNoUHJlZml4OiAnc2xpZGUtJywKICAgIHByZXZlbnRGcmFnbWVudFNjcm9sbDogdHJ1ZSwKICAgIHNldEFyaWFIaWRkZW5zOiB0cnVlCiAgfTsKCiAgJGRvY3VtZW50LnJlYWR5KGZ1bmN0aW9uKCkgewogICAgJCgnaHRtbCcpLmFkZENsYXNzKCdyZWFkeScpOwogIH0pOwoKICAkd2luZG93LmJpbmQoJ2hhc2hjaGFuZ2UuZGVjaycsIGZ1bmN0aW9uKGV2ZW50KSB7CiAgICBpZiAoZXZlbnQub3JpZ2luYWxFdmVudCAmJiBldmVudC5vcmlnaW5hbEV2ZW50Lm5ld1VSTCkgewogICAgICBnb0J5SGFzaChldmVudC5vcmlnaW5hbEV2ZW50Lm5ld1VSTCk7CiAgICB9CiAgICBlbHNlIHsKICAgICAgZ29CeUhhc2god2luZG93LmxvY2F0aW9uLmhhc2gpOwogICAgfQogIH0pOwoKICAkd2luZG93LmJpbmQoJ2xvYWQuZGVjaycsIGZ1bmN0aW9uKCkgewogICAgaWYgKG9wdGlvbnMucHJldmVudEZyYWdtZW50U2Nyb2xsKSB7CiAgICAgICRjb250YWluZXIuc2Nyb2xsTGVmdCgwKS5zY3JvbGxUb3AoMCk7CiAgICB9CiAgfSk7Cn0pKGpRdWVyeSk7Cg=="></script>
		<script id="deck-menu_js" src="data:/text/plain;base64,LyohCkRlY2sgSlMgLSBkZWNrLm1lbnUKQ29weXJpZ2h0IChjKSAyMDExLTIwMTQgQ2FsZWIgVHJvdWdodG9uCkR1YWwgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlLgpodHRwczovL2dpdGh1Yi5jb20vaW1ha2V3ZWJ0aGluZ3MvZGVjay5qcy9ibG9iL21hc3Rlci9NSVQtbGljZW5zZS50eHQKKi8KCi8qClRoaXMgbW9kdWxlIGFkZHMgdGhlIG1ldGhvZHMgYW5kIGtleSBiaW5kaW5nIHRvIHNob3cgYW5kIGhpZGUgYSBtZW51IG9mIGFsbApzbGlkZXMgaW4gdGhlIGRlY2suIFRoZSBkZWNrIG1lbnUgc3RhdGUgaXMgaW5kaWNhdGVkIGJ5IHRoZSBwcmVzZW5jZSBvZiBhIGNsYXNzCm9uIHRoZSBkZWNrIGNvbnRhaW5lci4KKi8KKGZ1bmN0aW9uKCQsIHVuZGVmaW5lZCkgewogIHZhciAkZG9jdW1lbnQgPSAkKGRvY3VtZW50KTsKICB2YXIgJGh0bWwgPSAkKCdodG1sJyk7CiAgdmFyIHJvb3RTbGlkZXM7CgogIHZhciBwb3B1bGF0ZVJvb3RTbGlkZXNBcnJheSA9IGZ1bmN0aW9uKCkgewogICAgdmFyIG9wdGlvbnMgPSAkLmRlY2soJ2dldE9wdGlvbnMnKTsKICAgIHZhciBzbGlkZVRlc3QgPSAkLm1hcChbCiAgICAgIG9wdGlvbnMuY2xhc3Nlcy5iZWZvcmUsCiAgICAgIG9wdGlvbnMuY2xhc3Nlcy5wcmV2aW91cywKICAgICAgb3B0aW9ucy5jbGFzc2VzLmN1cnJlbnQsCiAgICAgIG9wdGlvbnMuY2xhc3Nlcy5uZXh0LAogICAgICBvcHRpb25zLmNsYXNzZXMuYWZ0ZXIKICAgIF0sIGZ1bmN0aW9uKGVsLCBpKSB7CiAgICAgIHJldHVybiAnLicgKyBlbDsKICAgIH0pLmpvaW4oJywgJyk7CgogICAgcm9vdFNsaWRlcyA9IFtdOwogICAgJC5lYWNoKCQuZGVjaygnZ2V0U2xpZGVzJyksIGZ1bmN0aW9uKGksICRzbGlkZSkgewogICAgICB2YXIgJHBhcmVudFNsaWRlcyA9ICRzbGlkZS5wYXJlbnRzVW50aWwoCiAgICAgICAgb3B0aW9ucy5zZWxlY3RvcnMuY29udGFpbmVyLAogICAgICAgIHNsaWRlVGVzdAogICAgICApOwogICAgICBpZiAoISRwYXJlbnRTbGlkZXMubGVuZ3RoKSB7CiAgICAgICAgcm9vdFNsaWRlcy5wdXNoKCRzbGlkZSk7CiAgICAgIH0KICAgIH0pOwogIH07CgogIHZhciBiaW5kS2V5RXZlbnRzID0gZnVuY3Rpb24oKSB7CiAgICB2YXIgb3B0aW9ucyA9ICQuZGVjaygnZ2V0T3B0aW9ucycpOwogICAgJGRvY3VtZW50LnVuYmluZCgna2V5ZG93bi5kZWNrbWVudScpOwogICAgJGRvY3VtZW50LmJpbmQoJ2tleWRvd24uZGVja21lbnUnLCBmdW5jdGlvbihldmVudCkgewogICAgICB2YXIgaXNNZW51S2V5ID0gZXZlbnQud2hpY2ggPT09IG9wdGlvbnMua2V5cy5tZW51OwogICAgICBpc01lbnVLZXkgPSBpc01lbnVLZXkgfHwgJC5pbkFycmF5KGV2ZW50LndoaWNoLCBvcHRpb25zLmtleXMubWVudSkgPiAtMTsKICAgICAgaWYgKGlzTWVudUtleSAmJiAhZXZlbnQuY3RybEtleSkgewogICAgICAgICQuZGVjaygndG9nZ2xlTWVudScpOwogICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7CiAgICAgIH0KICAgIH0pOwogIH07CgogIHZhciBiaW5kVG91Y2hFdmVudHMgPSBmdW5jdGlvbigpIHsKICAgIHZhciAkY29udGFpbmVyID0gJC5kZWNrKCdnZXRDb250YWluZXInKTsKICAgIHZhciBvcHRpb25zID0gJC5kZWNrKCdnZXRPcHRpb25zJyk7CiAgICB2YXIgdG91Y2hFbmRUaW1lID0gMDsKICAgIHZhciBjdXJyZW50U2xpZGU7CgogICAgJGNvbnRhaW5lci51bmJpbmQoJ3RvdWNoc3RhcnQuZGVja21lbnUnKTsKICAgICRjb250YWluZXIuYmluZCgndG91Y2hzdGFydC5kZWNrbWVudScsIGZ1bmN0aW9uKCkgewogICAgICBjdXJyZW50U2xpZGUgPSAkLmRlY2soJ2dldFNsaWRlJyk7CiAgICB9KTsKICAgICRjb250YWluZXIudW5iaW5kKCd0b3VjaGVuZC5kZWNrbWVudScpOwogICAgJGNvbnRhaW5lci5iaW5kKCd0b3VjaGVuZC5kZWNrbWVudScsIGZ1bmN0aW9uKGV2ZW50KSB7CiAgICAgIHZhciBub3cgPSBEYXRlLm5vdygpOwogICAgICB2YXIgaXNEb3VibGV0YXAgPSBub3cgLSB0b3VjaEVuZFRpbWUgPCBvcHRpb25zLnRvdWNoLmRvdWJsZXRhcFdpbmRvdzsKCiAgICAgIC8vIElnbm9yZSB0aGlzIHRvdWNoIGV2ZW50IGlmIGl0IGNhdXNlZCBhIG5hdiBjaGFuZ2UgKHN3aXBlKQogICAgICBpZiAoY3VycmVudFNsaWRlICE9PSAkLmRlY2soJ2dldFNsaWRlJykpIHsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAgICAgaWYgKGlzRG91YmxldGFwKSB7CiAgICAgICAgJC5kZWNrKCd0b2dnbGVNZW51Jyk7CiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTsKICAgICAgfQogICAgICB0b3VjaEVuZFRpbWUgPSBub3c7CiAgICB9KTsKICB9OwoKICB2YXIgc2V0dXBNZW51U2xpZGVTZWxlY3Rpb24gPSBmdW5jdGlvbigpIHsKICAgIHZhciBvcHRpb25zID0gJC5kZWNrKCdnZXRPcHRpb25zJyk7CgogICAgJC5lYWNoKCQuZGVjaygnZ2V0U2xpZGVzJyksIGZ1bmN0aW9uKGksICRzbGlkZSkgewogICAgICAkc2xpZGUudW5iaW5kKCdjbGljay5kZWNrbWVudScpOwogICAgICAkc2xpZGUuYmluZCgnY2xpY2suZGVja21lbnUnLCBmdW5jdGlvbihldmVudCkgewogICAgICAgIGlmICghJC5kZWNrKCdnZXRDb250YWluZXInKS5oYXNDbGFzcyhvcHRpb25zLmNsYXNzZXMubWVudSkpIHsKICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgJC5kZWNrKCdnbycsIGkpOwogICAgICAgICQuZGVjaygnaGlkZU1lbnUnKTsKICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTsKICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpOwogICAgICB9KTsKICAgIH0pOwogIH07CgogIC8qCiAgRXh0ZW5kcyBkZWZhdWx0cy9vcHRpb25zLgoKICBvcHRpb25zLmNsYXNzZXMubWVudQogICAgVGhpcyBjbGFzcyBpcyBhZGRlZCB0byB0aGUgZGVjayBjb250YWluZXIgd2hlbiBzaG93aW5nIHRoZSBzbGlkZSBtZW51LgoKICBvcHRpb25zLmtleXMubWVudQogICAgVGhlIG51bWVyaWMga2V5Y29kZSB1c2VkIHRvIHRvZ2dsZSBiZXR3ZWVuIHNob3dpbmcgYW5kIGhpZGluZyB0aGUgc2xpZGUKICAgIG1lbnUuCgogIG9wdGlvbnMudG91Y2guZG91YmxldGFwV2luZG93CiAgICBUd28gY29uc2VjdXRpdmUgdG91Y2ggZXZlbnRzIHdpdGhpbiB0aGlzIG51bWJlciBvZiBtaWxsaXNlY29uZHMgd2lsbAogICAgYmUgY29uc2lkZXJlZCBhIGRvdWJsZSB0YXAsIGFuZCB3aWxsIHRvZ2dsZSB0aGUgbWVudSBvbiB0b3VjaCBkZXZpY2VzLgogICovCiAgJC5leHRlbmQodHJ1ZSwgJC5kZWNrLmRlZmF1bHRzLCB7CiAgICBjbGFzc2VzOiB7CiAgICAgIG1lbnU6ICdkZWNrLW1lbnUnCiAgICB9LAoKICAgIGtleXM6IHsKICAgICAgbWVudTogNzcgLy8gbQogICAgfSwKCiAgICB0b3VjaDogewogICAgICBkb3VibGV0YXBXaW5kb3c6IDQwMAogICAgfQogIH0pOwoKICAvKgogIGpRdWVyeS5kZWNrKCdzaG93TWVudScpCgogIFNob3dzIHRoZSBzbGlkZSBtZW51IGJ5IGFkZGluZyB0aGUgY2xhc3Mgc3BlY2lmaWVkIGJ5IHRoZSBtZW51IGNsYXNzIG9wdGlvbgogIHRvIHRoZSBkZWNrIGNvbnRhaW5lci4KICAqLwogICQuZGVjaygnZXh0ZW5kJywgJ3Nob3dNZW51JywgZnVuY3Rpb24oKSB7CiAgICB2YXIgJGNvbnRhaW5lciA9ICQuZGVjaygnZ2V0Q29udGFpbmVyJyk7CiAgICB2YXIgb3B0aW9ucyA9ICQuZGVjaygnZ2V0T3B0aW9ucycpOwoKICAgIGlmICgkY29udGFpbmVyLmhhc0NsYXNzKG9wdGlvbnMuY2xhc3Nlcy5tZW51KSkgewogICAgICByZXR1cm47CiAgICB9CgogICAgLy8gSGlkZSB0aHJvdWdoIGxvYWRpbmcgY2xhc3MgdG8gc2hvcnQtY2lyY3VpdCB0cmFuc2l0aW9ucyAocGVyZikKICAgICRjb250YWluZXIuYWRkQ2xhc3MoWwogICAgICBvcHRpb25zLmNsYXNzZXMubG9hZGluZywKICAgICAgb3B0aW9ucy5jbGFzc2VzLm1lbnUKICAgIF0uam9pbignICcpKTsKCiAgICAvKiBGb3JjZWQgdG8gZG8gdGhpcyBpbiBKUyB1bnRpbCBDU1MgbGVhcm5zIHNlY29uZC1ncmFkZSBtYXRoLiBTYXZlIG9sZAogICAgc3R5bGUgdmFsdWUgZm9yIHJlc3RvcmF0aW9uIHdoZW4gbWVudSBpcyBoaWRkZW4uICovCiAgICBpZiAoTW9kZXJuaXpyLmNzc3RyYW5zZm9ybXMpIHsKICAgICAgJC5lYWNoKHJvb3RTbGlkZXMsIGZ1bmN0aW9uKGksICRzbGlkZSkgewogICAgICAgICRzbGlkZS5kYXRhKCdvbGRTdHlsZScsICRzbGlkZS5hdHRyKCdzdHlsZScpKTsKICAgICAgICAkc2xpZGUuY3NzKHsKICAgICAgICAgICdwb3NpdGlvbic6ICdhYnNvbHV0ZScsCiAgICAgICAgICAnbGVmdCc6ICgoaSAlIDQpICogMjUpICsgJyUnLAogICAgICAgICAgJ3RvcCc6IChNYXRoLmZsb29yKGkgLyA0KSAqIDI1KSArICclJwogICAgICAgIH0pOwogICAgICB9KTsKICAgIH0KCiAgICAvLyBOZWVkIHRvIGVuc3VyZSB0aGUgbG9hZGluZyBjbGFzcyByZW5kZXJzIGZpcnN0LCB0aGVuIHJlbW92ZQogICAgd2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24oKSB7CiAgICAgICRjb250YWluZXIucmVtb3ZlQ2xhc3Mob3B0aW9ucy5jbGFzc2VzLmxvYWRpbmcpOwogICAgICAkY29udGFpbmVyLnNjcm9sbFRvcCgkLmRlY2soJ2dldFNsaWRlJykucG9zaXRpb24oKS50b3ApOwogICAgfSwgMCk7CiAgfSk7CgogIC8qCiAgalF1ZXJ5LmRlY2soJ2hpZGVNZW51JykKCiAgSGlkZXMgdGhlIHNsaWRlIG1lbnUgYnkgcmVtb3ZpbmcgdGhlIGNsYXNzIHNwZWNpZmllZCBieSB0aGUgbWVudSBjbGFzcwogIG9wdGlvbiBmcm9tIHRoZSBkZWNrIGNvbnRhaW5lci4KICAqLwogICQuZGVjaygnZXh0ZW5kJywgJ2hpZGVNZW51JywgZnVuY3Rpb24oKSB7CiAgICB2YXIgJGNvbnRhaW5lciA9ICQuZGVjaygnZ2V0Q29udGFpbmVyJyk7CiAgICB2YXIgb3B0aW9ucyA9ICQuZGVjaygnZ2V0T3B0aW9ucycpOwoKICAgIGlmICghJGNvbnRhaW5lci5oYXNDbGFzcyhvcHRpb25zLmNsYXNzZXMubWVudSkpIHsKICAgICAgcmV0dXJuOwogICAgfQoKICAgICRjb250YWluZXIucmVtb3ZlQ2xhc3Mob3B0aW9ucy5jbGFzc2VzLm1lbnUpOwogICAgJGNvbnRhaW5lci5hZGRDbGFzcyhvcHRpb25zLmNsYXNzZXMubG9hZGluZyk7CgogICAgLyogUmVzdG9yZSBvbGQgc3R5bGUgdmFsdWUgKi8KICAgIGlmIChNb2Rlcm5penIuY3NzdHJhbnNmb3JtcykgewogICAgICAkLmVhY2gocm9vdFNsaWRlcywgZnVuY3Rpb24oaSwgJHNsaWRlKSB7CiAgICAgICAgdmFyIG9sZFN0eWxlID0gJHNsaWRlLmRhdGEoJ29sZFN0eWxlJyk7CiAgICAgICAgJHNsaWRlLmF0dHIoJ3N0eWxlJywgb2xkU3R5bGUgPyBvbGRTdHlsZSA6ICcnKTsKICAgICAgfSk7CiAgICB9CgogICAgd2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24oKSB7CiAgICAgICRjb250YWluZXIucmVtb3ZlQ2xhc3Mob3B0aW9ucy5jbGFzc2VzLmxvYWRpbmcpOwogICAgICAkY29udGFpbmVyLnNjcm9sbFRvcCgwKTsKICAgIH0sIDApOwogIH0pOwoKICAvKgogIGpRdWVyeS5kZWNrKCd0b2dnbGVNZW51JykKCiAgVG9nZ2xlcyBiZXR3ZWVuIHNob3dpbmcgYW5kIGhpZGluZyB0aGUgc2xpZGUgbWVudS4KICAqLwogICQuZGVjaygnZXh0ZW5kJywgJ3RvZ2dsZU1lbnUnLCBmdW5jdGlvbigpIHsKICAgICQuZGVjaygnZ2V0Q29udGFpbmVyJykuaGFzQ2xhc3MoJC5kZWNrKCdnZXRPcHRpb25zJykuY2xhc3Nlcy5tZW51KSA/CiAgICAkLmRlY2soJ2hpZGVNZW51JykgOiAkLmRlY2soJ3Nob3dNZW51Jyk7CiAgfSk7CgogICRkb2N1bWVudC5iaW5kKCdkZWNrLmluaXQnLCBmdW5jdGlvbigpIHsKICAgIHBvcHVsYXRlUm9vdFNsaWRlc0FycmF5KCk7CiAgICBiaW5kS2V5RXZlbnRzKCk7CiAgICBiaW5kVG91Y2hFdmVudHMoKTsKICAgIHNldHVwTWVudVNsaWRlU2VsZWN0aW9uKCk7CiAgfSk7CgogICRkb2N1bWVudC5iaW5kKCdkZWNrLmNoYW5nZScsIGZ1bmN0aW9uKGV2ZW50LCBmcm9tLCB0bykgewogICAgdmFyICRjb250YWluZXIgPSAkLmRlY2soJ2dldENvbnRhaW5lcicpOwogICAgdmFyIGNvbnRhaW5lclNjcm9sbCwgc2xpZGVUb3A7CgogICAgaWYgKCRjb250YWluZXIuaGFzQ2xhc3MoJC5kZWNrKCdnZXRPcHRpb25zJykuY2xhc3Nlcy5tZW51KSkgewogICAgICBjb250YWluZXJTY3JvbGwgPSAkY29udGFpbmVyLnNjcm9sbFRvcCgpOwogICAgICBzbGlkZVRvcCA9ICQuZGVjaygnZ2V0U2xpZGUnLCB0bykucG9zaXRpb24oKS50b3A7CiAgICAgICRjb250YWluZXIuc2Nyb2xsVG9wKGNvbnRhaW5lclNjcm9sbCArIHNsaWRlVG9wKTsKICAgIH0KICB9KTsKfSkoalF1ZXJ5KTsK"></script>
		<script id="deck-goto_js" src="data:/text/plain;base64,LyohCkRlY2sgSlMgLSBkZWNrLmdvdG8KQ29weXJpZ2h0IChjKSAyMDExLTIwMTQgQ2FsZWIgVHJvdWdodG9uCkR1YWwgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlLgpodHRwczovL2dpdGh1Yi5jb20vaW1ha2V3ZWJ0aGluZ3MvZGVjay5qcy9ibG9iL21hc3Rlci9NSVQtbGljZW5zZS50eHQKKi8KCi8qClRoaXMgbW9kdWxlIGFkZHMgdGhlIG5lY2Vzc2FyeSBtZXRob2RzIGFuZCBrZXkgYmluZGluZ3MgdG8gc2hvdyBhbmQgaGlkZSBhIGZvcm0KZm9yIGp1bXBpbmcgdG8gYW55IHNsaWRlIG51bWJlci9pZCBpbiB0aGUgZGVjayAoYW5kIHByb2Nlc3NlcyB0aGF0IGZvcm0KYWNjb3JkaW5nbHkpLiBUaGUgZm9ybS1zaG93aW5nIHN0YXRlIGlzIGluZGljYXRlZCBieSB0aGUgcHJlc2VuY2Ugb2YgYSBjbGFzcyBvbgp0aGUgZGVjayBjb250YWluZXIuCiovCihmdW5jdGlvbigkLCB1bmRlZmluZWQpIHsKICB2YXIgJGRvY3VtZW50ID0gJChkb2N1bWVudCk7CiAgdmFyIHJvb3RDb3VudGVyOwoKICB2YXIgYmluZEtleUV2ZW50cyA9IGZ1bmN0aW9uKCkgewogICAgJGRvY3VtZW50LnVuYmluZCgna2V5ZG93bi5kZWNrZ290bycpOwogICAgJGRvY3VtZW50LmJpbmQoJ2tleWRvd24uZGVja2dvdG8nLCBmdW5jdGlvbihldmVudCkgewogICAgICB2YXIga2V5ID0gJC5kZWNrKCdnZXRPcHRpb25zJykua2V5cy5nb3RvOwogICAgICBpZiAoZXZlbnQud2hpY2ggPT09IGtleSB8fCAkLmluQXJyYXkoZXZlbnQud2hpY2gsIGtleSkgPiAtMSkgewogICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7CiAgICAgICAgJC5kZWNrKCd0b2dnbGVHb1RvJyk7CiAgICAgIH0KICAgIH0pOwogIH07CgogIHZhciBwb3B1bGF0ZURhdGFsaXN0ID0gZnVuY3Rpb24oKSB7CiAgICB2YXIgb3B0aW9ucyA9ICQuZGVjaygnZ2V0T3B0aW9ucycpOwogICAgdmFyICRkYXRhbGlzdCA9ICQob3B0aW9ucy5zZWxlY3RvcnMuZ290b0RhdGFsaXN0KTsKCiAgICAkLmVhY2goJC5kZWNrKCdnZXRTbGlkZXMnKSwgZnVuY3Rpb24oaSwgJHNsaWRlKSB7CiAgICAgIHZhciBpZCA9ICRzbGlkZS5hdHRyKCdpZCcpOwogICAgICBpZiAoaWQpIHsKICAgICAgICAkZGF0YWxpc3QuYXBwZW5kKCc8b3B0aW9uIHZhbHVlPSInICsgaWQgKyAnIj4nKTsKICAgICAgfQogICAgfSk7CiAgfTsKCiAgdmFyIG1hcmtSb290U2xpZGVzID0gZnVuY3Rpb24oKSB7CiAgICB2YXIgb3B0aW9ucyA9ICQuZGVjaygnZ2V0T3B0aW9ucycpOwogICAgdmFyIHNsaWRlVGVzdCA9ICQubWFwKFsKICAgICAgb3B0aW9ucy5jbGFzc2VzLmJlZm9yZSwKICAgICAgb3B0aW9ucy5jbGFzc2VzLnByZXZpb3VzLAogICAgICBvcHRpb25zLmNsYXNzZXMuY3VycmVudCwKICAgICAgb3B0aW9ucy5jbGFzc2VzLm5leHQsCiAgICAgIG9wdGlvbnMuY2xhc3Nlcy5hZnRlcgogICAgXSwgZnVuY3Rpb24oZWwsIGkpIHsKICAgICAgcmV0dXJuICcuJyArIGVsOwogICAgfSkuam9pbignLCAnKTsKCiAgICByb290Q291bnRlciA9IDA7CiAgICAkLmVhY2goJC5kZWNrKCdnZXRTbGlkZXMnKSwgZnVuY3Rpb24oaSwgJHNsaWRlKSB7CiAgICAgIHZhciAkcGFyZW50U2xpZGVzID0gJHNsaWRlLnBhcmVudHNVbnRpbCgKICAgICAgICBvcHRpb25zLnNlbGVjdG9ycy5jb250YWluZXIsCiAgICAgICAgc2xpZGVUZXN0CiAgICAgICk7CgogICAgICBpZiAoJHBhcmVudFNsaWRlcy5sZW5ndGgpIHsKICAgICAgICAkc2xpZGUucmVtb3ZlRGF0YSgncm9vdEluZGV4Jyk7CiAgICAgIH0KICAgICAgZWxzZSBpZiAoIW9wdGlvbnMuY291bnROZXN0ZWQpIHsKICAgICAgICArK3Jvb3RDb3VudGVyOwogICAgICAgICRzbGlkZS5kYXRhKCdyb290SW5kZXgnLCByb290Q291bnRlcik7CiAgICAgIH0KICAgIH0pOwogIH07CgogIHZhciBoYW5kbGVGb3JtU3VibWl0ID0gZnVuY3Rpb24oKSB7CiAgICB2YXIgb3B0aW9ucyA9ICQuZGVjaygnZ2V0T3B0aW9ucycpOwogICAgdmFyICRmb3JtID0gJChvcHRpb25zLnNlbGVjdG9ycy5nb3RvRm9ybSk7CgogICAgJGZvcm0udW5iaW5kKCdzdWJtaXQuZGVja2dvdG8nKTsKICAgICRmb3JtLmJpbmQoJ3N1Ym1pdC5kZWNrZ290bycsIGZ1bmN0aW9uKGV2ZW50KSB7CiAgICAgIHZhciAkZmllbGQgPSAkKG9wdGlvbnMuc2VsZWN0b3JzLmdvdG9JbnB1dCk7CiAgICAgIHZhciBpbmRleE9ySWQgPSAkZmllbGQudmFsKCk7CiAgICAgIHZhciBpbmRleCA9IHBhcnNlSW50KGluZGV4T3JJZCwgMTApOwoKICAgICAgaWYgKCFvcHRpb25zLmNvdW50TmVzdGVkKSB7CiAgICAgICAgaWYgKCFpc05hTihpbmRleCkgJiYgaW5kZXggPj0gcm9vdENvdW50ZXIpIHsKICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9CiAgICAgICAgJC5lYWNoKCQuZGVjaygnZ2V0U2xpZGVzJyksIGZ1bmN0aW9uKGksICRzbGlkZSkgewogICAgICAgICAgaWYgKCRzbGlkZS5kYXRhKCdyb290SW5kZXgnKSA9PT0gaW5kZXgpIHsKICAgICAgICAgICAgaW5kZXggPSBpICsgMTsKICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgfQogICAgICAgIH0pOwogICAgICB9CgogICAgICAkLmRlY2soJ2dvJywgaXNOYU4oaW5kZXgpID8gaW5kZXhPcklkIDogaW5kZXggLSAxKTsKICAgICAgJC5kZWNrKCdoaWRlR29UbycpOwogICAgICAkZmllbGQudmFsKCcnKTsKICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTsKICAgIH0pOwogIH07CgogIC8qCiAgRXh0ZW5kcyBkZWZhdWx0cy9vcHRpb25zLgoKICBvcHRpb25zLmNsYXNzZXMuZ290bwogICAgVGhpcyBjbGFzcyBpcyBhZGRlZCB0byB0aGUgZGVjayBjb250YWluZXIgd2hlbiBzaG93aW5nIHRoZSBHbyBUbyBTbGlkZQogICAgZm9ybS4KCiAgb3B0aW9ucy5zZWxlY3RvcnMuZ290b0RhdGFsaXN0CiAgICBUaGUgZWxlbWVudCB0aGF0IG1hdGNoZXMgdGhpcyBzZWxlY3RvciBpcyB0aGUgZGF0YWxpc3QgZWxlbWVudCB0aGF0IHdpbGwKICAgIGJlIHBvcHVsYXRlZCB3aXRoIG9wdGlvbnMgZm9yIGVhY2ggb2YgdGhlIHNsaWRlIGlkcy4gIEluIGJyb3dzZXJzIHRoYXQKICAgIHN1cHBvcnQgdGhlIGRhdGFsaXN0IGVsZW1lbnQsIHRoaXMgcHJvdmlkZXMgYSBkcm9wIGxpc3Qgb2Ygc2xpZGUgaWRzIHRvCiAgICBhaWQgdGhlIHVzZXIgaW4gc2VsZWN0aW5nIGEgc2xpZGUuCgogIG9wdGlvbnMuc2VsZWN0b3JzLmdvdG9Gb3JtCiAgICBUaGUgZWxlbWVudCB0aGF0IG1hdGNoZXMgdGhpcyBzZWxlY3RvciBpcyB0aGUgZm9ybSB0aGF0IGlzIHN1Ym1pdHRlZAogICAgd2hlbiBhIHVzZXIgaGl0cyBlbnRlciBhZnRlciB0eXBpbmcgYSBzbGlkZSBudW1iZXIvaWQgaW4gdGhlIGdvdG9JbnB1dAogICAgZWxlbWVudC4KCiAgb3B0aW9ucy5zZWxlY3RvcnMuZ290b0lucHV0CiAgICBUaGUgZWxlbWVudCB0aGF0IG1hdGNoZXMgdGhpcyBzZWxlY3RvciBpcyB0aGUgdGV4dCBpbnB1dCBmaWVsZCBmb3IKICAgIGVudGVyaW5nIGEgc2xpZGUgbnVtYmVyL2lkIGluIHRoZSBHbyBUbyBTbGlkZSBmb3JtLgoKICBvcHRpb25zLmtleXMuZ290bwogICAgVGhlIG51bWVyaWMga2V5Y29kZSB1c2VkIHRvIHNob3cgdGhlIEdvIFRvIFNsaWRlIGZvcm0uCgogIG9wdGlvbnMuY291bnROZXN0ZWQKICAgIElmIGZhbHNlLCBvbmx5IHRvcCBsZXZlbCBzbGlkZXMgd2lsbCBiZSBjb3VudGVkIHdoZW4gZW50ZXJpbmcgYQogICAgc2xpZGUgbnVtYmVyLgogICovCiAgJC5leHRlbmQodHJ1ZSwgJC5kZWNrLmRlZmF1bHRzLCB7CiAgICBjbGFzc2VzOiB7CiAgICAgIGdvdG86ICdkZWNrLWdvdG8nCiAgICB9LAoKICAgIHNlbGVjdG9yczogewogICAgICBnb3RvRGF0YWxpc3Q6ICcjZ290by1kYXRhbGlzdCcsCiAgICAgIGdvdG9Gb3JtOiAnLmdvdG8tZm9ybScsCiAgICAgIGdvdG9JbnB1dDogJyNnb3RvLXNsaWRlJwogICAgfSwKCiAgICBrZXlzOiB7CiAgICAgIGdvdG86IDcxIC8vIGcKICAgIH0sCgogICAgY291bnROZXN0ZWQ6IHRydWUKICB9KTsKCiAgLyoKICBqUXVlcnkuZGVjaygnc2hvd0dvVG8nKQoKICBTaG93cyB0aGUgR28gVG8gU2xpZGUgZm9ybSBieSBhZGRpbmcgdGhlIGNsYXNzIHNwZWNpZmllZCBieSB0aGUgZ290byBjbGFzcwogIG9wdGlvbiB0byB0aGUgZGVjayBjb250YWluZXIuCiAgKi8KICAkLmRlY2soJ2V4dGVuZCcsICdzaG93R29UbycsIGZ1bmN0aW9uKCkgewogICAgdmFyIG9wdGlvbnMgPSAkLmRlY2soJ2dldE9wdGlvbnMnKTsKICAgICQuZGVjaygnZ2V0Q29udGFpbmVyJykuYWRkQ2xhc3Mob3B0aW9ucy5jbGFzc2VzLmdvdG8pOwogICAgJChvcHRpb25zLnNlbGVjdG9ycy5nb3RvRm9ybSkuYXR0cignYXJpYS1oaWRkZW4nLCBmYWxzZSk7CiAgICAkKG9wdGlvbnMuc2VsZWN0b3JzLmdvdG9JbnB1dCkuZm9jdXMoKTsKICB9KTsKCiAgLyoKICBqUXVlcnkuZGVjaygnaGlkZUdvVG8nKQoKICBIaWRlcyB0aGUgR28gVG8gU2xpZGUgZm9ybSBieSByZW1vdmluZyB0aGUgY2xhc3Mgc3BlY2lmaWVkIGJ5IHRoZSBnb3RvIGNsYXNzCiAgb3B0aW9uIGZyb20gdGhlIGRlY2sgY29udGFpbmVyLgogICovCiAgJC5kZWNrKCdleHRlbmQnLCAnaGlkZUdvVG8nLCBmdW5jdGlvbigpIHsKICAgIHZhciBvcHRpb25zID0gJC5kZWNrKCdnZXRPcHRpb25zJyk7CiAgICAkKG9wdGlvbnMuc2VsZWN0b3JzLmdvdG9JbnB1dCkuYmx1cigpOwogICAgJC5kZWNrKCdnZXRDb250YWluZXInKS5yZW1vdmVDbGFzcyhvcHRpb25zLmNsYXNzZXMuZ290byk7CiAgICAkKG9wdGlvbnMuc2VsZWN0b3JzLmdvdG9Gb3JtKS5hdHRyKCdhcmlhLWhpZGRlbicsIHRydWUpOwogIH0pOwoKICAvKgogIGpRdWVyeS5kZWNrKCd0b2dnbGVHb1RvJykKCiAgVG9nZ2xlcyBiZXR3ZWVuIHNob3dpbmcgYW5kIGhpZGluZyB0aGUgR28gVG8gU2xpZGUgZm9ybS4KICAqLwogICQuZGVjaygnZXh0ZW5kJywgJ3RvZ2dsZUdvVG8nLCBmdW5jdGlvbigpIHsKICAgIHZhciBvcHRpb25zID0gJC5kZWNrKCdnZXRPcHRpb25zJyk7CiAgICB2YXIgaGFzR290b0NsYXNzID0gJC5kZWNrKCdnZXRDb250YWluZXInKS5oYXNDbGFzcyhvcHRpb25zLmNsYXNzZXMuZ290byk7CiAgICAkLmRlY2soaGFzR290b0NsYXNzID8gJ2hpZGVHb1RvJyA6ICdzaG93R29UbycpOwogIH0pOwoKICAkZG9jdW1lbnQuYmluZCgnZGVjay5pbml0JywgZnVuY3Rpb24oKSB7CiAgICBiaW5kS2V5RXZlbnRzKCk7CiAgICBwb3B1bGF0ZURhdGFsaXN0KCk7CiAgICBtYXJrUm9vdFNsaWRlcygpOwogICAgaGFuZGxlRm9ybVN1Ym1pdCgpOwogIH0pOwp9KShqUXVlcnkpOwoK"></script>
		<script id="deck-status_js" src="data:/text/plain;base64,LyohCkRlY2sgSlMgLSBkZWNrLnN0YXR1cwpDb3B5cmlnaHQgKGMpIDIwMTEtMjAxNCBDYWxlYiBUcm91Z2h0b24KRHVhbCBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UuCmh0dHBzOi8vZ2l0aHViLmNvbS9pbWFrZXdlYnRoaW5ncy9kZWNrLmpzL2Jsb2IvbWFzdGVyL01JVC1saWNlbnNlLnR4dAoqLwoKLyoKVGhpcyBtb2R1bGUgYWRkcyBhIChjdXJyZW50KS8odG90YWwpIHN0eWxlIHN0YXR1cyBpbmRpY2F0b3IgdG8gdGhlIGRlY2suCiovCihmdW5jdGlvbigkLCB1bmRlZmluZWQpIHsKICB2YXIgJGRvY3VtZW50ID0gJChkb2N1bWVudCk7CiAgdmFyIHJvb3RDb3VudGVyOwoKICB2YXIgdXBkYXRlQ3VycmVudCA9IGZ1bmN0aW9uKGV2ZW50LCBmcm9tLCB0bykgewogICAgdmFyIG9wdGlvbnMgPSAkLmRlY2soJ2dldE9wdGlvbnMnKTsKICAgIHZhciBjdXJyZW50U2xpZGVOdW1iZXIgPSB0byArIDE7CiAgICBpZiAoIW9wdGlvbnMuY291bnROZXN0ZWQpIHsKICAgICAgY3VycmVudFNsaWRlTnVtYmVyID0gJC5kZWNrKCdnZXRTbGlkZScsIHRvKS5kYXRhKCdyb290U2xpZGUnKTsKICAgIH0KICAgICQob3B0aW9ucy5zZWxlY3RvcnMuc3RhdHVzQ3VycmVudCkudGV4dChjdXJyZW50U2xpZGVOdW1iZXIpOwogIH07CgogIHZhciBtYXJrUm9vdFNsaWRlcyA9IGZ1bmN0aW9uKCkgewogICAgdmFyIG9wdGlvbnMgPSAkLmRlY2soJ2dldE9wdGlvbnMnKTsKICAgIHZhciBzbGlkZVRlc3QgPSAkLm1hcChbCiAgICAgIG9wdGlvbnMuY2xhc3Nlcy5iZWZvcmUsCiAgICAgIG9wdGlvbnMuY2xhc3Nlcy5wcmV2aW91cywKICAgICAgb3B0aW9ucy5jbGFzc2VzLmN1cnJlbnQsCiAgICAgIG9wdGlvbnMuY2xhc3Nlcy5uZXh0LAogICAgICBvcHRpb25zLmNsYXNzZXMuYWZ0ZXIKICAgIF0sIGZ1bmN0aW9uKGVsLCBpKSB7CiAgICAgIHJldHVybiAnLicgKyBlbDsKICAgIH0pLmpvaW4oJywgJyk7CgogICAgcm9vdENvdW50ZXIgPSAwOwogICAgJC5lYWNoKCQuZGVjaygnZ2V0U2xpZGVzJyksIGZ1bmN0aW9uKGksICRzbGlkZSkgewogICAgICB2YXIgJHBhcmVudFNsaWRlcyA9ICRzbGlkZS5wYXJlbnRzVW50aWwoCiAgICAgICAgb3B0aW9ucy5zZWxlY3RvcnMuY29udGFpbmVyLAogICAgICAgIHNsaWRlVGVzdAogICAgICApOwoKICAgICAgaWYgKCRwYXJlbnRTbGlkZXMubGVuZ3RoKSB7CiAgICAgICAgJHNsaWRlLmRhdGEoJ3Jvb3RTbGlkZScsICRwYXJlbnRTbGlkZXMubGFzdCgpLmRhdGEoJ3Jvb3RTbGlkZScpKTsKICAgICAgfQogICAgICBlbHNlIHsKICAgICAgICArK3Jvb3RDb3VudGVyOwogICAgICAgICRzbGlkZS5kYXRhKCdyb290U2xpZGUnLCByb290Q291bnRlcik7CiAgICAgIH0KICAgIH0pOwogIH07CgogIHZhciBzZXRJbml0aWFsU2xpZGVOdW1iZXIgPSBmdW5jdGlvbigpIHsKICAgIHZhciBzbGlkZXMgPSAkLmRlY2soJ2dldFNsaWRlcycpOwogICAgdmFyICRjdXJyZW50U2xpZGUgPSAkLmRlY2soJ2dldFNsaWRlJyk7CiAgICB2YXIgaW5kZXg7CgogICAgJC5lYWNoKHNsaWRlcywgZnVuY3Rpb24oaSwgJHNsaWRlKSB7CiAgICAgIGlmICgkc2xpZGUgPT09ICRjdXJyZW50U2xpZGUpIHsKICAgICAgICBpbmRleCA9IGk7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICB9CiAgICB9KTsKICAgIHVwZGF0ZUN1cnJlbnQobnVsbCwgaW5kZXgsIGluZGV4KTsKICB9OwoKICB2YXIgc2V0VG90YWxTbGlkZU51bWJlciA9IGZ1bmN0aW9uKCkgewogICAgdmFyIG9wdGlvbnMgPSAkLmRlY2soJ2dldE9wdGlvbnMnKTsKICAgIHZhciBzbGlkZXMgPSAkLmRlY2soJ2dldFNsaWRlcycpOwoKICAgIGlmIChvcHRpb25zLmNvdW50TmVzdGVkKSB7CiAgICAgICQob3B0aW9ucy5zZWxlY3RvcnMuc3RhdHVzVG90YWwpLnRleHQoc2xpZGVzLmxlbmd0aCk7CiAgICB9CiAgICBlbHNlIHsKICAgICAgJChvcHRpb25zLnNlbGVjdG9ycy5zdGF0dXNUb3RhbCkudGV4dChyb290Q291bnRlcik7CiAgICB9CiAgfTsKCiAgLyoKICBFeHRlbmRzIGRlZmF1bHRzL29wdGlvbnMuCgogIG9wdGlvbnMuc2VsZWN0b3JzLnN0YXR1c0N1cnJlbnQKICAgIFRoZSBlbGVtZW50IG1hdGNoaW5nIHRoaXMgc2VsZWN0b3IgZGlzcGxheXMgdGhlIGN1cnJlbnQgc2xpZGUgbnVtYmVyLgoKICBvcHRpb25zLnNlbGVjdG9ycy5zdGF0dXNUb3RhbAogICAgVGhlIGVsZW1lbnQgbWF0Y2hpbmcgdGhpcyBzZWxlY3RvciBkaXNwbGF5cyB0aGUgdG90YWwgbnVtYmVyIG9mIHNsaWRlcy4KCiAgb3B0aW9ucy5jb3VudE5lc3RlZAogICAgSWYgZmFsc2UsIG9ubHkgdG9wIGxldmVsIHNsaWRlcyB3aWxsIGJlIGNvdW50ZWQgaW4gdGhlIGN1cnJlbnQgYW5kCiAgICB0b3RhbCBudW1iZXJzLgogICovCiAgJC5leHRlbmQodHJ1ZSwgJC5kZWNrLmRlZmF1bHRzLCB7CiAgICBzZWxlY3RvcnM6IHsKICAgICAgc3RhdHVzQ3VycmVudDogJy5kZWNrLXN0YXR1cy1jdXJyZW50JywKICAgICAgc3RhdHVzVG90YWw6ICcuZGVjay1zdGF0dXMtdG90YWwnCiAgICB9LAoKICAgIGNvdW50TmVzdGVkOiB0cnVlCiAgfSk7CgogICRkb2N1bWVudC5iaW5kKCdkZWNrLmluaXQnLCBmdW5jdGlvbigpIHsKICAgIG1hcmtSb290U2xpZGVzKCk7CiAgICBzZXRJbml0aWFsU2xpZGVOdW1iZXIoKTsKICAgIHNldFRvdGFsU2xpZGVOdW1iZXIoKTsKICB9KTsKICAkZG9jdW1lbnQuYmluZCgnZGVjay5jaGFuZ2UnLCB1cGRhdGVDdXJyZW50KTsKfSkoalF1ZXJ5LCAnZGVjaycpOwoK"></script>
		<script id="deck-navigation_js" src="data:/text/plain;base64,LyohCkRlY2sgSlMgLSBkZWNrLm5hdmlnYXRpb24KQ29weXJpZ2h0IChjKSAyMDExLTIwMTQgQ2FsZWIgVHJvdWdodG9uCkR1YWwgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlLgpodHRwczovL2dpdGh1Yi5jb20vaW1ha2V3ZWJ0aGluZ3MvZGVjay5qcy9ibG9iL21hc3Rlci9NSVQtbGljZW5zZS50eHQKKi8KCi8qClRoaXMgbW9kdWxlIGFkZHMgY2xpY2thYmxlIHByZXZpb3VzIGFuZCBuZXh0IGxpbmtzIHRvIHRoZSBkZWNrLgoqLwooZnVuY3Rpb24oJCwgdW5kZWZpbmVkKSB7CiAgdmFyICRkb2N1bWVudCA9ICQoZG9jdW1lbnQpOwoKICAvKiBVcGRhdGVzIGxpbmsgaHJlZnMsIGFuZCBkaXNhYmxlZCBzdGF0ZXMgaWYgbGFzdC9maXJzdCBzbGlkZSAqLwogIHZhciB1cGRhdGVCdXR0b25zID0gZnVuY3Rpb24oZXZlbnQsIGZyb20sIHRvKSB7CiAgICB2YXIgb3B0aW9ucyA9ICQuZGVjaygnZ2V0T3B0aW9ucycpOwogICAgdmFyIGxhc3RJbmRleCA9ICQuZGVjaygnZ2V0U2xpZGVzJykubGVuZ3RoIC0gMTsKICAgIHZhciAkcHJldlNsaWRlID0gJC5kZWNrKCdnZXRTbGlkZScsIHRvIC0gMSk7CiAgICB2YXIgJG5leHRTbGlkZSA9ICQuZGVjaygnZ2V0U2xpZGUnLCB0byArIDEpOwogICAgdmFyIGhyZWZCYXNlID0gd2luZG93LmxvY2F0aW9uLmhyZWYucmVwbGFjZSgvIy4qLywgJycpOwogICAgdmFyIHByZXZJZCA9ICRwcmV2U2xpZGUgPyAkcHJldlNsaWRlLmF0dHIoJ2lkJykgOiB1bmRlZmluZWQ7CiAgICB2YXIgbmV4dElkID0gJG5leHRTbGlkZSA/ICRuZXh0U2xpZGUuYXR0cignaWQnKSA6IHVuZGVmaW5lZDsKICAgIHZhciAkcHJldkJ1dHRvbiA9ICQob3B0aW9ucy5zZWxlY3RvcnMucHJldmlvdXNMaW5rKTsKICAgIHZhciAkbmV4dEJ1dHRvbiA9ICQob3B0aW9ucy5zZWxlY3RvcnMubmV4dExpbmspOwoKICAgICRwcmV2QnV0dG9uLnRvZ2dsZUNsYXNzKG9wdGlvbnMuY2xhc3Nlcy5uYXZEaXNhYmxlZCwgdG8gPT09IDApOwogICAgJHByZXZCdXR0b24uYXR0cignYXJpYS1kaXNhYmxlZCcsIHRvID09PSAwKTsKICAgICRwcmV2QnV0dG9uLmF0dHIoJ2hyZWYnLCBocmVmQmFzZSArICcjJyArIChwcmV2SWQgPyBwcmV2SWQgOiAnJykpOwogICAgJG5leHRCdXR0b24udG9nZ2xlQ2xhc3Mob3B0aW9ucy5jbGFzc2VzLm5hdkRpc2FibGVkLCB0byA9PT0gbGFzdEluZGV4KTsKICAgICRuZXh0QnV0dG9uLmF0dHIoJ2FyaWEtZGlzYWJsZWQnLCB0byA9PT0gbGFzdEluZGV4KTsKICAgICRuZXh0QnV0dG9uLmF0dHIoJ2hyZWYnLCBocmVmQmFzZSArICcjJyArIChuZXh0SWQgPyBuZXh0SWQgOiAnJykpOwogIH07CgogIC8qCiAgRXh0ZW5kcyBkZWZhdWx0cy9vcHRpb25zLgoKICBvcHRpb25zLmNsYXNzZXMubmF2RGlzYWJsZWQKICAgIFRoaXMgY2xhc3MgaXMgYWRkZWQgdG8gYSBuYXZpZ2F0aW9uIGxpbmsgd2hlbiB0aGF0IGFjdGlvbiBpcyBkaXNhYmxlZC4KICAgIEl0IGlzIGFkZGVkIHRvIHRoZSBwcmV2aW91cyBsaW5rIHdoZW4gb24gdGhlIGZpcnN0IHNsaWRlLCBhbmQgdG8gdGhlCiAgICBuZXh0IGxpbmsgd2hlbiBvbiB0aGUgbGFzdCBzbGlkZS4KCiAgb3B0aW9ucy5zZWxlY3RvcnMubmV4dExpbmsKICAgIFRoZSBlbGVtZW50cyB0aGF0IG1hdGNoIHRoaXMgc2VsZWN0b3Igd2lsbCBtb3ZlIHRoZSBkZWNrIHRvIHRoZSBuZXh0CiAgICBzbGlkZSB3aGVuIGNsaWNrZWQuCgogIG9wdGlvbnMuc2VsZWN0b3JzLnByZXZpb3VzTGluawogICAgVGhlIGVsZW1lbnRzIHRoYXQgbWF0Y2ggdGhpcyBzZWxlY3RvciB3aWxsIG1vdmUgdG8gZGVjayB0byB0aGUgcHJldmlvdXMKICAgIHNsaWRlIHdoZW4gY2xpY2tlZC4KICAqLwogICQuZXh0ZW5kKHRydWUsICQuZGVjay5kZWZhdWx0cywgewogICAgY2xhc3NlczogewogICAgICBuYXZEaXNhYmxlZDogJ2RlY2stbmF2LWRpc2FibGVkJwogICAgfSwKCiAgICBzZWxlY3RvcnM6IHsKICAgICAgbmV4dExpbms6ICcuZGVjay1uZXh0LWxpbmsnLAogICAgICBwcmV2aW91c0xpbms6ICcuZGVjay1wcmV2LWxpbmsnCiAgICB9CiAgfSk7CgogICRkb2N1bWVudC5iaW5kKCdkZWNrLmluaXQnLCBmdW5jdGlvbigpIHsKICAgIHZhciBvcHRpb25zID0gJC5kZWNrKCdnZXRPcHRpb25zJyk7CiAgICB2YXIgc2xpZGVzID0gJC5kZWNrKCdnZXRTbGlkZXMnKTsKICAgIHZhciAkY3VycmVudCA9ICQuZGVjaygnZ2V0U2xpZGUnKTsKICAgIHZhciAkcHJldkJ1dHRvbiA9ICQob3B0aW9ucy5zZWxlY3RvcnMucHJldmlvdXNMaW5rKTsKICAgIHZhciAkbmV4dEJ1dHRvbiA9ICQob3B0aW9ucy5zZWxlY3RvcnMubmV4dExpbmspOwogICAgdmFyIGluZGV4OwoKICAgIC8vIFNldHVwIHByZXYvbmV4dCBsaW5rIGV2ZW50cwogICAgJHByZXZCdXR0b24udW5iaW5kKCdjbGljay5kZWNrbmF2aWdhdGlvbicpOwogICAgJHByZXZCdXR0b24uYmluZCgnY2xpY2suZGVja25hdmlnYXRpb24nLCBmdW5jdGlvbihldmVudCkgewogICAgICAkLmRlY2soJ3ByZXYnKTsKICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTsKICAgIH0pOwoKICAgICRuZXh0QnV0dG9uLnVuYmluZCgnY2xpY2suZGVja25hdmlnYXRpb24nKTsKICAgICRuZXh0QnV0dG9uLmJpbmQoJ2NsaWNrLmRlY2tuYXZpZ2F0aW9uJywgZnVuY3Rpb24oZXZlbnQpIHsKICAgICAgJC5kZWNrKCduZXh0Jyk7CiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7CiAgICB9KTsKCiAgICAvLyBGaW5kIHdoZXJlIHdlIHN0YXJ0ZWQgaW4gdGhlIGRlY2sgYW5kIHNldCBpbml0aWFsIHN0YXRlcwogICAgJC5lYWNoKHNsaWRlcywgZnVuY3Rpb24oaSwgJHNsaWRlKSB7CiAgICAgIGlmICgkc2xpZGUgPT09ICRjdXJyZW50KSB7CiAgICAgICAgaW5kZXggPSBpOwogICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgfQogICAgfSk7CiAgICB1cGRhdGVCdXR0b25zKG51bGwsIGluZGV4LCBpbmRleCk7CiAgfSk7CgogICRkb2N1bWVudC5iaW5kKCdkZWNrLmNoYW5nZScsIHVwZGF0ZUJ1dHRvbnMpOwp9KShqUXVlcnkpOwoK"></script>
		<script id="deck-scale_js" src="data:/text/plain;base64,LyohCkRlY2sgSlMgLSBkZWNrLnNjYWxlCkNvcHlyaWdodCAoYykgMjAxMS0yMDE0IENhbGViIFRyb3VnaHRvbgpEdWFsIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZS4KaHR0cHM6Ly9naXRodWIuY29tL2ltYWtld2VidGhpbmdzL2RlY2suanMvYmxvYi9tYXN0ZXIvTUlULWxpY2Vuc2UudHh0CiovCgovKgpUaGlzIG1vZHVsZSBhZGRzIGF1dG9tYXRpYyBzY2FsaW5nIHRvIHRoZSBkZWNrLiAgU2xpZGVzIGFyZSBzY2FsZWQgZG93bgp1c2luZyBDU1MgdHJhbnNmb3JtcyB0byBmaXQgd2l0aGluIHRoZSBkZWNrIGNvbnRhaW5lci4gSWYgdGhlIGNvbnRhaW5lciBpcwpiaWcgZW5vdWdoIHRvIGhvbGQgdGhlIHNsaWRlcyB3aXRob3V0IHNjYWxpbmcsIG5vIHNjYWxpbmcgb2NjdXJzLiBUaGUgdXNlcgpjYW4gZGlzYWJsZSBhbmQgZW5hYmxlIHNjYWxpbmcgd2l0aCBhIGtleWJvYXJkIHNob3J0Y3V0LgoKTm90ZTogQ1NTIHRyYW5zZm9ybXMgbWF5IG1ha2UgRmxhc2ggdmlkZW9zIHJlbmRlciBpbmNvcnJlY3RseS4gIFByZXNlbnRlcnMKdGhhdCBuZWVkIHRvIHVzZSB2aWRlbyBtYXkgd2FudCB0byBkaXNhYmxlIHNjYWxpbmcgdG8gcGxheSB0aGVtLiAgSFRNTDUgdmlkZW8Kd29ya3MgZmluZS4KKi8KKGZ1bmN0aW9uKCQsIHVuZGVmaW5lZCkgewogIHZhciAkZG9jdW1lbnQgPSAkKGRvY3VtZW50KTsKICB2YXIgJHdpbmRvdyA9ICQod2luZG93KTsKICB2YXIgYmFzZUhlaWdodCwgdGltZXIsIHJvb3RTbGlkZXM7CgogIC8qCiAgSW50ZXJuYWwgZnVuY3Rpb24gdG8gZG8gYWxsIHRoZSBkaXJ0eSB3b3JrIG9mIHNjYWxpbmcgdGhlIHNsaWRlcy4KICAqLwogIHZhciBzY2FsZURlY2sgPSBmdW5jdGlvbigpIHsKICAgIHZhciBvcHRpb25zID0gJC5kZWNrKCdnZXRPcHRpb25zJyk7CiAgICB2YXIgJGNvbnRhaW5lciA9ICQuZGVjaygnZ2V0Q29udGFpbmVyJyk7CiAgICB2YXIgYmFzZUhlaWdodCA9IG9wdGlvbnMuYmFzZUhlaWdodDsKCiAgICBpZiAoIWJhc2VIZWlnaHQpIHsKICAgICAgYmFzZUhlaWdodCA9ICRjb250YWluZXIuaGVpZ2h0KCk7CiAgICB9CgogICAgLy8gU2NhbGUgZWFjaCBzbGlkZSBkb3duIGlmIG5lY2Vzc2FyeSAoYnV0IGRvbid0IHNjYWxlIHVwKQogICAgJC5lYWNoKHJvb3RTbGlkZXMsIGZ1bmN0aW9uKGksICRzbGlkZSkgewogICAgICB2YXIgc2xpZGVIZWlnaHQgPSAkc2xpZGUuaW5uZXJIZWlnaHQoKTsKICAgICAgdmFyICRzY2FsZXIgPSAkc2xpZGUuZmluZCgnLicgKyBvcHRpb25zLmNsYXNzZXMuc2NhbGVTbGlkZVdyYXBwZXIpOwogICAgICB2YXIgc2hvdWxkU2NhbGUgPSAkY29udGFpbmVyLmhhc0NsYXNzKG9wdGlvbnMuY2xhc3Nlcy5zY2FsZSk7CiAgICAgIHZhciBzY2FsZSA9IHNob3VsZFNjYWxlID8gYmFzZUhlaWdodCAvIHNsaWRlSGVpZ2h0IDogMTsKCiAgICAgIGlmIChzY2FsZSA9PT0gMSkgewogICAgICAgICRzY2FsZXIuY3NzKCd0cmFuc2Zvcm0nLCAnJyk7CiAgICAgIH0KICAgICAgZWxzZSB7CiAgICAgICAgJHNjYWxlci5jc3MoJ3RyYW5zZm9ybScsICdzY2FsZSgnICsgc2NhbGUgKyAnKScpOwogICAgICAgIHdpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCkgewogICAgICAgICAgJGNvbnRhaW5lci5zY3JvbGxUb3AoMCkKICAgICAgICB9LCAxKTsKICAgICAgfQogICAgfSk7CiAgfTsKCiAgdmFyIHBvcHVsYXRlUm9vdFNsaWRlcyA9IGZ1bmN0aW9uKCkgewogICAgdmFyIG9wdGlvbnMgPSAkLmRlY2soJ2dldE9wdGlvbnMnKTsKICAgIHZhciBzbGlkZVRlc3QgPSAkLm1hcChbCiAgICAgIG9wdGlvbnMuY2xhc3Nlcy5iZWZvcmUsCiAgICAgIG9wdGlvbnMuY2xhc3Nlcy5wcmV2aW91cywKICAgICAgb3B0aW9ucy5jbGFzc2VzLmN1cnJlbnQsCiAgICAgIG9wdGlvbnMuY2xhc3Nlcy5uZXh0LAogICAgICBvcHRpb25zLmNsYXNzZXMuYWZ0ZXIKICAgIF0sIGZ1bmN0aW9uKGVsLCBpKSB7CiAgICAgIHJldHVybiAnLicgKyBlbDsKICAgIH0pLmpvaW4oJywgJyk7CgogICAgcm9vdFNsaWRlcyA9IFtdOwogICAgJC5lYWNoKCQuZGVjaygnZ2V0U2xpZGVzJyksIGZ1bmN0aW9uKGksICRzbGlkZSkgewogICAgICB2YXIgJHBhcmVudFNsaWRlcyA9ICRzbGlkZS5wYXJlbnRzVW50aWwoCiAgICAgICAgb3B0aW9ucy5zZWxlY3RvcnMuY29udGFpbmVyLAogICAgICAgIHNsaWRlVGVzdAogICAgICApOwogICAgICBpZiAoISRwYXJlbnRTbGlkZXMubGVuZ3RoKSB7CiAgICAgICAgcm9vdFNsaWRlcy5wdXNoKCRzbGlkZSk7CiAgICAgIH0KICAgIH0pOwogIH07CgogIHZhciB3cmFwUm9vdFNsaWRlQ29udGVudCA9IGZ1bmN0aW9uKCkgewogICAgdmFyIG9wdGlvbnMgPSAkLmRlY2soJ2dldE9wdGlvbnMnKTsKICAgIHZhciB3cmFwID0gJzxkaXYgY2xhc3M9IicgKyBvcHRpb25zLmNsYXNzZXMuc2NhbGVTbGlkZVdyYXBwZXIgKyAnIi8+JzsKICAgICQuZWFjaChyb290U2xpZGVzLCBmdW5jdGlvbihpLCAkc2xpZGUpIHsKICAgICAgJHNsaWRlLmNoaWxkcmVuKCkud3JhcEFsbCh3cmFwKTsKICAgIH0pOwogIH07CgogIHZhciBzY2FsZU9uUmVzaXplQW5kTG9hZCA9IGZ1bmN0aW9uKCkgewogICAgdmFyIG9wdGlvbnMgPSAkLmRlY2soJ2dldE9wdGlvbnMnKTsKCiAgICAkd2luZG93LnVuYmluZCgncmVzaXplLmRlY2tzY2FsZScpOwogICAgJHdpbmRvdy5iaW5kKCdyZXNpemUuZGVja3NjYWxlJywgZnVuY3Rpb24oKSB7CiAgICAgIHdpbmRvdy5jbGVhclRpbWVvdXQodGltZXIpOwogICAgICB0aW1lciA9IHdpbmRvdy5zZXRUaW1lb3V0KHNjYWxlRGVjaywgb3B0aW9ucy5zY2FsZURlYm91bmNlKTsKICAgIH0pOwogICAgJC5kZWNrKCdlbmFibGVTY2FsZScpOwogICAgJHdpbmRvdy51bmJpbmQoJ2xvYWQuZGVja3NjYWxlJyk7CiAgICAkd2luZG93LmJpbmQoJ2xvYWQuZGVja3NjYWxlJywgc2NhbGVEZWNrKTsKICB9OwoKICB2YXIgYmluZEtleUV2ZW50cyA9IGZ1bmN0aW9uKCkgewogICAgdmFyIG9wdGlvbnMgPSAkLmRlY2soJ2dldE9wdGlvbnMnKTsKICAgICRkb2N1bWVudC51bmJpbmQoJ2tleWRvd24uZGVja3NjYWxlJyk7CiAgICAkZG9jdW1lbnQuYmluZCgna2V5ZG93bi5kZWNrc2NhbGUnLCBmdW5jdGlvbihldmVudCkgewogICAgICB2YXIgaXNLZXkgPSBldmVudC53aGljaCA9PT0gb3B0aW9ucy5rZXlzLnNjYWxlOwogICAgICBpc0tleSA9IGlzS2V5IHx8ICQuaW5BcnJheShldmVudC53aGljaCwgb3B0aW9ucy5rZXlzLnNjYWxlKSA+IC0xOwogICAgICBpZiAoaXNLZXkpIHsKICAgICAgICAkLmRlY2soJ3RvZ2dsZVNjYWxlJyk7CiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTsKICAgICAgfQogICAgfSk7CiAgfTsKCiAgLyoKICBFeHRlbmRzIGRlZmF1bHRzL29wdGlvbnMuCgogIG9wdGlvbnMuY2xhc3Nlcy5zY2FsZQogICAgVGhpcyBjbGFzcyBpcyBhZGRlZCB0byB0aGUgZGVjayBjb250YWluZXIgd2hlbiBzY2FsaW5nIGlzIGVuYWJsZWQuCiAgICBJdCBpcyBlbmFibGVkIGJ5IGRlZmF1bHQgd2hlbiB0aGUgbW9kdWxlIGlzIGluY2x1ZGVkLgoKICBvcHRpb25zLmNsYXNzZXMuc2NhbGVTbGlkZVdyYXBwZXIKICAgIFNjYWxpbmcgaXMgZG9uZSB1c2luZyBhIHdyYXBwZXIgYXJvdW5kIHRoZSBjb250ZW50cyBvZiBlYWNoIHNsaWRlLiBUaGlzCiAgICBjbGFzcyBpcyBhcHBsaWVkIHRvIHRoYXQgd3JhcHBlci4KCiAgb3B0aW9ucy5rZXlzLnNjYWxlCiAgICBUaGUgbnVtZXJpYyBrZXljb2RlIHVzZWQgdG8gdG9nZ2xlIGVuYWJsaW5nIGFuZCBkaXNhYmxpbmcgc2NhbGluZy4KCiAgb3B0aW9ucy5iYXNlSGVpZ2h0CiAgICBXaGVuIGJhc2VIZWlnaHQgaXMgZmFsc3ksIGFzIGl0IGlzIGJ5IGRlZmF1bHQsIHRoZSBkZWNrIGlzIHNjYWxlZCBpbgogICAgcHJvcG9ydGlvbiB0byB0aGUgaGVpZ2h0IG9mIHRoZSBkZWNrIGNvbnRhaW5lci4gWW91IG1heSBpbnN0ZWFkIHNwZWNpZnkKICAgIGEgaGVpZ2h0IGFzIGEgbnVtYmVyIG9mIHB4LCBhbmQgc2xpZGVzIHdpbGwgYmUgc2NhbGVkIGFnYWluc3QgdGhpcwogICAgaGVpZ2h0IHJlZ2FyZGxlc3Mgb2YgdGhlIGNvbnRhaW5lciBzaXplLgoKICBvcHRpb25zLnNjYWxlRGVib3VuY2UKICAgIFNjYWxpbmcgb24gdGhlIGJyb3dzZXIgcmVzaXplIGV2ZW50IGlzIGRlYm91bmNlZC4gVGhpcyBudW1iZXIgaXMgdGhlCiAgICB0aHJlc2hvbGQgaW4gbWlsbGlzZWNvbmRzLiBZb3UgY2FuIGxlYXJuIG1vcmUgYWJvdXQgZGVib3VuY2luZyBoZXJlOgogICAgaHR0cDovL3Vuc2NyaXB0YWJsZS5jb20vaW5kZXgucGhwLzIwMDkvMDMvMjAvZGVib3VuY2luZy1qYXZhc2NyaXB0LW1ldGhvZHMvCgogICovCiAgJC5leHRlbmQodHJ1ZSwgJC5kZWNrLmRlZmF1bHRzLCB7CiAgICBjbGFzc2VzOiB7CiAgICAgIHNjYWxlOiAnZGVjay1zY2FsZScsCiAgICAgIHNjYWxlU2xpZGVXcmFwcGVyOiAnZGVjay1zbGlkZS1zY2FsZXInCiAgICB9LAoKICAgIGtleXM6IHsKICAgICAgc2NhbGU6IDgzIC8vIHMKICAgIH0sCgogICAgYmFzZUhlaWdodDogbnVsbCwKICAgIHNjYWxlRGVib3VuY2U6IDIwMAogIH0pOwoKICAvKgogIGpRdWVyeS5kZWNrKCdkaXNhYmxlU2NhbGUnKQoKICBEaXNhYmxlcyBzY2FsaW5nIGFuZCByZW1vdmVzIHRoZSBzY2FsZSBjbGFzcyBmcm9tIHRoZSBkZWNrIGNvbnRhaW5lci4KICAqLwogICQuZGVjaygnZXh0ZW5kJywgJ2Rpc2FibGVTY2FsZScsIGZ1bmN0aW9uKCkgewogICAgJC5kZWNrKCdnZXRDb250YWluZXInKS5yZW1vdmVDbGFzcygkLmRlY2soJ2dldE9wdGlvbnMnKS5jbGFzc2VzLnNjYWxlKTsKICAgIHNjYWxlRGVjaygpOwogIH0pOwoKICAvKgogIGpRdWVyeS5kZWNrKCdlbmFibGVTY2FsZScpCgogIEVuYWJsZXMgc2NhbGluZyBhbmQgYWRkcyB0aGUgc2NhbGUgY2xhc3MgdG8gdGhlIGRlY2sgY29udGFpbmVyLgogICovCiAgJC5kZWNrKCdleHRlbmQnLCAnZW5hYmxlU2NhbGUnLCBmdW5jdGlvbigpIHsKICAgICQuZGVjaygnZ2V0Q29udGFpbmVyJykuYWRkQ2xhc3MoJC5kZWNrKCdnZXRPcHRpb25zJykuY2xhc3Nlcy5zY2FsZSk7CiAgICBzY2FsZURlY2soKTsKICB9KTsKCiAgLyoKICBqUXVlcnkuZGVjaygndG9nZ2xlU2NhbGUnKQoKICBUb2dnbGVzIGJldHdlZW4gZW5hYmxpbmcgYW5kIGRpc2FibGluZyBzY2FsaW5nLgogICovCiAgJC5kZWNrKCdleHRlbmQnLCAndG9nZ2xlU2NhbGUnLCBmdW5jdGlvbigpIHsKICAgIHZhciAkY29udGFpbmVyID0gJC5kZWNrKCdnZXRDb250YWluZXInKTsKICAgIHZhciBpc1NjYWxlZCA9ICRjb250YWluZXIuaGFzQ2xhc3MoJC5kZWNrKCdnZXRPcHRpb25zJykuY2xhc3Nlcy5zY2FsZSk7CiAgICAkLmRlY2soaXNTY2FsZWQ/ICdkaXNhYmxlU2NhbGUnIDogJ2VuYWJsZVNjYWxlJyk7CiAgfSk7CgogICRkb2N1bWVudC5iaW5kKCdkZWNrLmluaXQnLCBmdW5jdGlvbigpIHsKICAgIHBvcHVsYXRlUm9vdFNsaWRlcygpOwogICAgd3JhcFJvb3RTbGlkZUNvbnRlbnQoKTsKICAgIHNjYWxlT25SZXNpemVBbmRMb2FkKCk7CiAgICBiaW5kS2V5RXZlbnRzKCk7CiAgfSk7Cn0pKGpRdWVyeSwgJ2RlY2snLCB0aGlzKTsKCg=="></script>

<!-- Deck Core and extensions -->
<!--
	<script src="../jquery.min.js"></script>
	<script src="../core/deck.core.js"></script>
	<script src="../extensions/menu/deck.menu.js"></script>
	<script src="../extensions/goto/deck.goto.js"></script>
	<script src="../extensions/status/deck.status.js"></script>
	<script src="../extensions/navigation/deck.navigation.js"></script>
	<script src="../extensions/scale/deck.scale.js"></script>
	-->


<!-- Initialize the deck -->
	<script> $(function() {$.deck('.slide');}); </script>
	</body>
	</html>
//


koh5_pano



Your browser does not support the HTML5 canvas element.


Drag mouse to navigate.

Navigation





17.Aug.2010, Martin Wengenmayer