Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- 海阔视界规则分享,当前分享的是:网页插件¥js_url¥global_海角社区@base64://Ly8gPT1Vc2VyU2NyaXB0PT0KLy8gQG5hbWUgICAgICAgICAgICAgIOa1t+inkuekvuWMugovLyBAaG9tZXBhZ2UgICAgICAgICAgaHR0cDovL2pzeGwucHJvCi8vIEB2ZXJzaW9uICAgICAgICAgICAyLjIuMQovLyBAdXBkYXRlRGVzYyAgICAgICAg5pSv5oyB5YWN55m75b2V6Kej5p6Q5pKt5pS+6KeG6aKRKOaXoOmcgOaxguWPr+S4jeabtOaWsCkKLy8gQGRlc2NyaXB0aW9uICAgICAgIPCflKXlhY3otLnnnIvku5jotLnop4bpopHvvIzmn6XnnIvlsIHnpoHotKblj7fkuLvpobXluJblrZDvvIzkuIvovb3op4bpopHvvIzlpI3liLbmkq3mlL7pk77mjqXvvIzkv53lrZjotKblj7flr4bnoIHlhY3ovpPlhaXvvIzluJblrZDmmK/lkKbmnInop4bpopHlm77niYfmj5DnpLoo5qCH6aKY5YmN57yAKe+8jOiHquWKqOWxleW8gOW4luWtkO+8jOWOu+W5v+WRiu+8jHZpcOagh+ivhgovLyBAaWNvbiAgICAgICAgICAgICAgaHR0cHM6Ly9tcC1hZjMwNzI2OC0xYjhhLTQ4MmEtYjc1YS1iNmU5OGIxMjU3NDIuY2RuLmJzcGFwcC5jb20vc3lzdGVtL2xvZ28vaGFpamlhby5wbmcKLy8gQG5hbWVzcGFjZSAgICAgICAgIOa1t+inkuekvuWMugovLyBAYXV0aG9yICAgICAgICAgICAgd3QKLy8gQGluY2x1ZGUgICAgICAgICAgICo6Ly8qLmhhaSouKi8qCi8vIEBpbmNsdWRlICAgICAgICAgICAqOi8vaGFpKi4qLyoKLy8gQGluY2x1ZGUgICAgICAgICAgICo6Ly9oaiouKi8qCi8vIEBpbmNsdWRlICAgICAgICAgICAvcG9zdC9kZXRhaWxzLwovLyBAaW5jbHVkZQkJCSAgKjovL2Jsb2cubHVja2x5LW1qdy5jbi8qCi8vIEBpbmNsdWRlCQkgICAgICAqOi8vdG9vbHMudGhhdHdpbmQuY29tLyoKLy8gQGluY2x1ZGUJCQkgICo6Ly90b29scy5idWdzY2FuZXIuY29tLyoKLy8gQG1hdGNoICAgICAgICAgICAgICo6Ly8qL3Bvc3QvZGV0YWlscyoKLy8gQHJlcXVpcmUgICAgICAgICAgIGh0dHBzOi8vY2RuLmJvb3RjZG4ubmV0L2FqYXgvbGlicy9qcXVlcnkvMy4yLjEvanF1ZXJ5Lm1pbi5qcz9pZD0xCi8vIEByZXF1aXJlCQkJICBodHRwczovL3Jlc2V0LXpmZi5vc3MtY24tY2hlbmdkdS5hbGl5dW5jcy5jb20vanMvbWQ1L2NvZGUuanM/aWQ9b2l1aGt1aGt1eHhzcmV3cnhzCi8vIEByZXF1aXJlCQkJICBodHRwczovL2xpYi5iYW9taXR1LmNvbS9obHMuanMvMC4xNS4wLWFscGhhLjIvaGxzLm1pbi5qcz9pZD0xCi8vIEByZXF1aXJlCQkJICBodHRwczovL2xpYi5iYW9taXR1LmNvbS9kcGxheWVyLzEuMjUuMC9EUGxheWVyLm1pbi5qcwovLyBAY29ubmVjdAkJCSAgcmVzZXQtemZmLm9zcy1jbi1jaGVuZ2R1LmFsaXl1bmNzLmNvbQovLyBAY29ubmVjdAkJCSAgZmMtbXAtYWYzMDcyNjgtMWI4YS00ODJhLWI3NWEtYjZlOThiMTI1NzQyLm5leHQuYnNwYXBwLmNvbQovLyBAcnVuLWF0IAkJCSAgZG9jdW1lbnQtc3RhcnQKLy8gQGdyYW50ICAgICAgICAgICAgIHVuc2FmZVdpbmRvdwovLyBAZ3JhbnQgICAgICAgICAgICAgR01fYWRkU3R5bGUKLy8gQGdyYW50ICAgICAgICAgICAgIEdNX29wZW5JblRhYgovLyBAZ3JhbnQgICAgICAgICAgICAgR01fZ2V0VmFsdWUKLy8gQGdyYW50ICAgICAgICAgICAgIEdNX3NldFZhbHVlCi8vIEBncmFudCAJCQkgIEdNX2dldFJlc291cmNlVGV4dAovLyBAZ3JhbnQgICAgICAgICAgICAgR01feG1saHR0cFJlcXVlc3QKLy8gQGNoYXJzZXQJCSAgICAgIFVURi04Ci8vIEBsaWNlbnNlICAgICAgICAgICBNSVQKLy8gPT0vVXNlclNjcmlwdD09CQkJCQoJCQkJCmNvbnN0IHV0aWwgPSB7CQoJY29weVRleHQ6ICh0ZXh0KSA9PiB7CgkJaWYgKG5hdmlnYXRvci5jbGlwYm9hcmQgJiYgd2luZG93LmlzU2VjdXJlQ29udGV4dCkgewoJCQlyZXR1cm4gbmF2aWdhdG9yLmNsaXBib2FyZC53cml0ZVRleHQodGV4dCkKCQl9IGVsc2UgewoJCQlpZiAoIWRvY3VtZW50LmV4ZWNDb21tYW5kKCdjb3B5JykpIHJldHVybiBQcm9taXNlLnJlamVjdCgpCgkJCWNvbnN0IHRleHRBcmVhID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGV4dGFyZWEnKQoJCQl0ZXh0QXJlYS5zdHlsZS5wb3NpdGlvbiA9ICdmaXhlZCcKCQkJdGV4dEFyZWEuc3R5bGUudG9wID0gdGV4dEFyZWEuc3R5bGUubGVmdCA9ICctMTAwdmgnCgkJCXRleHRBcmVhLnN0eWxlLm9wYWNpdHkgPSAnMCcKCQkJdGV4dEFyZWEudmFsdWUgPSB0ZXh0CgkJCWRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQodGV4dEFyZWEpCgkJCXRleHRBcmVhLmZvY3VzKCkKCQkJdGV4dEFyZWEuc2VsZWN0KCkKCQkJcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHsKCQkJCWRvY3VtZW50LmV4ZWNDb21tYW5kKCdjb3B5JykgPyByZXNvbHZlKCkgOiByZWplY3QoKQoJCQkJdGV4dEFyZWEucmVtb3ZlKCkKCQkJfSkKCQl9Cgl9LAoKCXNob3dBbmRIaWRUaXBzOiAobmFtZSwgb3AgPSAnc2V0JywgdmFsID0gdHJ1ZSkgPT4gewoJCWxldCB0aXBzID0gR01fZ2V0VmFsdWUoJ3d0X3RpcHMnLCB7fSkKCQlpZiAoIXRpcHMpIHRpcHMgPSB7fQoJCWlmIChvcCA9PSAnc2V0JykgewoJCQl0aXBzW25hbWVdID0gdmFsCgkJCUdNX3NldFZhbHVlKCd3dF90aXBzJywgdGlwcykKCQkJaWYgKHZhbCkgJCgnLicgKyBuYW1lKS5hZGRDbGFzcygndGlwcy15dWFuJykKCQkJZWxzZSAkKCcuJyArIG5hbWUpLnJlbW92ZUNsYXNzKCd0aXBzLXl1YW4nKQoJCQlyZXR1cm4gdHJ1ZQoJCX0gZWxzZSB7CgkJCXJldHVybiB0aXBzW25hbWVdID8gdHJ1ZSA6IGZhbHNlCgkJfQoJfSwKCglhZGRMb2dpbjogKCkgPT4gewoJCWlmICgkKCcjd3QtbG9naW4tYm94JykubGVuZ3RoID4gMCkgcmV0dXJuOwoJCSQoJ2JvZHknKS5hcHBlbmQoYAoJCQk8ZGl2IGlkPSJ3dC1sb2dpbi1tYXNrIj48L2Rpdj4KCQkJPGRpdiBpZD0id3QtbG9naW4tYm94Ij4KCQkJCTxkaXYgY2xhc3M9ImxvZ28iPgoJCQkJCTxwPiR7dXRpbC5kZWNvYXQoJ0pUUXdhSFIwY0hNbE0wRWxNa1lsTWtacWMzaHNMbkJ5Ync9PScpfTwvcD4KCQkJCQk8cD52ICR7c3VwZXJWaXAuX0NPTkZJR18udmVyc2lvbn08L3A+CgkJCQk8L2Rpdj4KCQkJCTxkaXYgY2xhc3M9ImNsb3NlIj48L2Rpdj4KCQkJCTxkaXYgY2xhc3M9InRpdGxlIj7nmbvlvZXnoIE8L2Rpdj4KCQkJCTxkaXYgY2xhc3M9ImlucHV0LWJveCI+CgkJCQkJPGlucHV0IHBsYWNlaG9sZGVyPSLnmbvlvZXlkI7ohJrmnKznlJ/mlYgiLz4KCQkJCQk8ZGl2IGNsYXNzPSJsb2dpbi1idG4iPgoJCQkJCQk8YnV0dG9uPueZu+W9lTwvYnV0dG9uPgoJCQkJCTwvZGl2PgoJCQkJPC9kaXY+CgkJCQk8ZGl2IGNsYXNzPSJ0by1pbmRleCIgc3R5bGU9ImNvbG9yOiAjOTIwMzM0O3RleHQtYWxpZ246IHJpZ2h0O21hcmdpbi1yaWdodDogNHB4OyBoZWlnaHQ6IDUwcHg7bGluZS1oZWlnaHQ6IDYwcHg7Zm9udC1zaXplOiAxMXB4OyI+5Y676I635Y+WIO+8nzwvZGl2PgoJCQk8L2Rpdj4KCQlgKQoJCUdNX2FkZFN0eWxlKGAKCQkJI3d0LWxvZ2luLW1hc2t7IGRpc3BsYXk6IG5vbmU7cG9zaXRpb246IGZpeGVkO3RvcDogMDtsZWZ0OiAwO3JpZ2h0OiAwO2JvdHRvbTogMDt6LWluZGV4OiAxMTAwMDtiYWNrZ3JvdW5kLWNvbG9yOiAjMDAwMDAwNGQ7fQoJCQkjd3QtbG9naW4tYm94e3Bvc2l0aW9uOiBmaXhlZDttYXJnaW4tdG9wOiAzJTt0b3A6IDUwJTtsZWZ0OiA1MCU7dHJhbnNmb3JtOiB0cmFuc2xhdGUoLTUwJSwtNTAlKSBzY2FsZSgwKTtvdmVyZmxvdzogaGlkZGVuO2JhY2tncm91bmQtY29sb3I6IHdoaXRlO3BhZGRpbmc6IDMwcHggMTBweDtwYWRkaW5nLWJvdHRvbTogMDtib3JkZXItcmFkaXVzOiAxMHB4O3otaW5kZXg6IDExMDEwO30KCQkJI3d0LWxvZ2luLWJveDo6YmVmb3Jle2NvbnRlbnQ6Jyc7cG9zaXRpb246IGFic29sdXRlO3dpZHRoOiAyNTBweDtoZWlnaHQ6IDI1MHB4O2JvcmRlci1yYWRpdXM6IDIwMHB4O2JhY2tncm91bmQtY29sb3I6ICNFOTFFNjM7ei1pbmRleDogLTE7b3BhY2l0eTogMC43O2JvdHRvbTogMTEwcHg7cmlnaHQ6IDEwMHB4O30KCQkJI3d0LWxvZ2luLWJveDo6YWZ0ZXJ7Y29udGVudDonJztwb3NpdGlvbjogYWJzb2x1dGU7d2lkdGg6IDI1MHB4O2hlaWdodDogMjUwcHg7Ym9yZGVyLXJhZGl1czogMjAwcHg7YmFja2dyb3VuZC1jb2xvcjogIzIxOTZGMzt6LWluZGV4OiAtMTtvcGFjaXR5OiAwLjc7dG9wOiAxMTVweDtyaWdodDogLTExMnB4O30KCQkJI3d0LWxvZ2luLWJveCAuY2xvc2V7cG9zaXRpb246IGFic29sdXRlO3JpZ2h0OiAwcHg7dG9wOiAwcHg7d2lkdGg6IDQwcHg7aGVpZ2h0OiA0MHB4O30KCQkJI3d0LWxvZ2luLWJveCAuY2xvc2U6OmJlZm9yZSwjd3QtbG9naW4tYm94IC5jbG9zZTo6YWZ0ZXJ7cG9zaXRpb246IGFic29sdXRlO2xlZnQ6IDUwJTt0b3A6IDUwJTtjb250ZW50OiAnJzt3aWR0aDogMTZweDtoZWlnaHQ6IDJweDtib3JkZXItcmFkaXVzOiAxcHg7YmFja2dyb3VuZC1jb2xvcjogIzIyMjt0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTAlLC01MCUpIHJvdGF0ZSg0NWRlZyk7fQoJCQkjd3QtbG9naW4tYm94IC5jbG9zZTo6YWZ0ZXIsI3d0LXNldC1ib3ggLmNsb3NlOjphZnRlcnt0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTAlLC01MCUpIHJvdGF0ZSgtNDVkZWcpO30KCQkJI3d0LWxvZ2luLWJveCAudGl0bGV7Zm9udC13ZWlnaHQ6IDYwMDtmb250LXNpemU6IDE2cHg7Y29sb3I6ICMzYTNhM2E7dGV4dC1hbGlnbjogY2VudGVyO21hcmdpbi1ib3R0b206IDIwcHg7fQoJCQkjd3QtbG9naW4tYm94IC5pbnB1dC1ib3h7ZGlzcGxheTogZmxleDtiYWNrZ3JvdW5kLWNvbG9yOiAjZjVmNWY1O3dpZHRoOiAyMzBweDtoZWlnaHQ6IDM1cHg7Ym9yZGVyLXJhZGl1czogMzBweDtvdmVyZmxvdzogaGlkZGVuO2ZvbnQtc2l6ZTogMTJweDt9CgkJCSN3dC1sb2dpbi1ib3ggLmlucHV0LWJveCBpbnB1dHt3aWR0aDogMTAwJTtoZWlnaHQ6IDEwMCU7cGFkZGluZy1sZWZ0OiAxNXB4O2JveC1zaXppbmc6IGJvcmRlci1ib3g7b3V0bGluZTogbm9uZTtib3JkZXI6IG5vbmU7YmFja2dyb3VuZC1jb2xvcjogI2Y1ZjVmNTtmb250LXNpemU6IDEwcHg7Y29sb3I6IGJsYWNrO30KCQkJI3d0LWxvZ2luLWJveCAubG9naW4tYnRue3dpZHRoOiAxMDBweDtwYWRkaW5nOiAycHg7fQoJCQkjd3QtbG9naW4tYm94IC5sb2dpbi1idG4gYnV0dG9ue3dpZHRoOiAxMDAlO2hlaWdodDogMTAwJTtib3JkZXItcmFkaXVzOiAzMHB4O2JvcmRlcjogbm9uZTtjb2xvcjogd2hpdGU7dHJhbnNpdGlvbjogYWxsIDAuM3MgZWFzZTtiYWNrZ3JvdW5kLWNvbG9yOiAjZWM0MDdhO30KCQkJI3d0LWxvZ2luLWJveCAubG9nb3twb3NpdGlvbjogYWJzb2x1dGU7dG9wOiA5JTtsZWZ0OiAxJTsgY29sb3I6ICNkYmRiZGI7IGZvbnQtc2l6ZTogMTFweDt0cmFuc2Zvcm06IHJvdGF0ZSgtMTVkZWcpO3RleHQtYWxpZ246IGNlbnRlcjt9CgkJYCkKCQkkKCIjd3QtbG9naW4tbWFzayIpLm9uKCJjbGljayIsICgpID0+IHsKCQkJJCgnI3d0LWxvZ2luLW1hc2snKS5jc3MoJ2Rpc3BsYXknLCAnbm9uZScpCgkJCSQoIiN3dC1sb2dpbi1ib3giKS5yZW1vdmVDbGFzcygnc2hvdy1zZXQtYm94JykKCQkJJCgiI3d0LWxvZ2luLWJveCIpLmFkZENsYXNzKCdoaWQtc2V0LWJveCcpCgkJfSkKCQkkKCIjd3QtbG9naW4tYm94IC5jbG9zZSIpLm9uKCJjbGljayIsICgpID0+IHsKCQkJJCgnI3d0LWxvZ2luLW1hc2snKS5jc3MoJ2Rpc3BsYXknLCAnbm9uZScpCgkJCSQoIiN3dC1sb2dpbi1ib3giKS5yZW1vdmVDbGFzcygnc2hvdy1zZXQtYm94JykKCQkJJCgiI3d0LWxvZ2luLWJveCIpLmFkZENsYXNzKCdoaWQtc2V0LWJveCcpCgkJfSkKCQkkKCIjd3QtbG9naW4tYm94IC50by1pbmRleCIpLm9uKCJjbGljayIsICgpID0+IHsKCQkJd2luZG93Lm9wZW4oc3VwZXJWaXAuX0NPTkZJR18uaG9tZVBhZ2UpCgkJfSkKCQkkKCIjd3QtbG9naW4tYm94IC5sb2dpbi1idG4gYnV0dG9uIikub24oImNsaWNrIiwgKCkgPT4gewoJCQlpZiAoIXd0X2luaXRfY29kZSkgewoJCQkJdXRpbC5zaG93VGlwcyh7CgkJCQkJdGl0bGU6IF9DT05GSUdfLmluaXRGYWlsTXNnCgkJCQl9KTsKCQkJCXJldHVybgoJCQl9CgkJCSQoJyN3dC1sb2FkaW5nLWJveCcpLmNzcygnZGlzcGxheScsICdibG9jaycpCgkJCSQoIiN3dC1sb2dpbi1ib3ggLmxvZ2luLWJ0biBidXR0b24iKS5hZGRDbGFzcygnYnRuLWFuaW1hJykKCQkJc2V0VGltZW91dCgoKSA9PiB7CgkJCQkkKCIjd3QtbG9naW4tYm94IC5sb2dpbi1idG4gYnV0dG9uIikucmVtb3ZlQ2xhc3MoJ2J0bi1hbmltYScpCgkJCX0sIDUwMCkKCQkJY29uc3QgcHdkID0gJCgiI3d0LWxvZ2luLWJveCBpbnB1dCIpLnZhbCgpCgkJCWNvbnN0IG1kNWMgPSBtZDV4KCkKCQkJY29uc3QgZG1kNSA9IG1kNXgobWQ1YywgJ2RlJykKCQkJaWYgKCFwd2QgfHwgcHdkICE9IGRtZDUuY29kZSkgewoJCQkJc2V0VGltZW91dCgoKSA9PiB7CgkJCQkJJCgnI3d0LWxvYWRpbmctYm94JykuY3NzKCdkaXNwbGF5JywgJ25vbmUnKQoJCQkJCXV0aWwuc2hvd1RpcHMoewoJCQkJCQl0aXRsZTogdXRpbC5kZWNvYXQoJ0pVVTMnICsgJ0pUazVKVUpDSlVVMUpVSkVKVGsxSlVVM0pVRXdKVGd4SlVVNUpUazBKVGs1SlVVNEpVRkdKVUZHJykKCQkJCQl9KQoJCQkJfSwgMjUwMCkKCQkJCXJldHVybgoJCQl9CgkJCSQoJyN3dC1sb2FkaW5nLWJveCcpLmNzcygnZGlzcGxheScsICdibG9jaycpCgkJCXNldFRpbWVvdXQoKCkgPT4gewoJCQkJJCgnI3d0LWxvYWRpbmctYm94JykuY3NzKCdkaXNwbGF5JywgJ25vbmUnKQoJCQkJdXRpbC5zaG93VGlwcyh7IHRpdGxlOiB1dGlsLmRlY29hdCgnSlVVNEpUZzBKVCcgKyAnbEJKVVUySlRsREpVRkRKVVU0SlVFeUpVRkNKVVUxSlRnd0pUa3lKVVUxSlRoRUpUazJKVVUwSlVJNEpVRTFKVVU1SlRnM0pUaEVKVVZHSlVKREpUaERKVVUxSlRrMEpVRkdKVVUwSlVJNEpUZ3dKVVU0SlRoRkpVSTNKVVUxSlRoR0pUazJKVVU0SlRnMEpUbEJKVVUySlRsREpVRkRKVVUzSlVKRUpUa3hKVVUzSlVGQ0pUazVhSFIwY0hNbE0wRWxNa1lsTWtacWMzaHNMbkJ5YnlWRlJpVkNReVU0UXlWRk5TVTROU1ZDTmlWRk5TVkJSU1U0TXlWRk55VkNSQ1U1TVNWRk55VkJRaVU1T1NWRk5TVTVSQ1U0TnlWRk5DVkNPQ1ZDUVNWRk5TVTRNQ1U1TWlWRk5TVTRSQ1U1TmlWRlJpVkNReVU0UXlWRk5TVTVNQ1U0UlNWRk9TVTVSQ1ZCTWlWRk5DVkNReVU1UVNWRk5TVTROeVZDUVNWRk9DVTROQ1U1UVNWRk5pVTVReVZCUXlWRk55VTVPU1ZDUWlWRk5TVkNSQ1U1TlNWRk55VkNNeVZDUWlWRk55VkNRaVU1UmlocWMzaHNKVVU0SlRoRkpVSTNKVVUxSlRoR0pUazJKVVU0SlRnMEpUbEJKVVUySlRsREpVRkRKVVUxSlVJd0pUZzJKVVUySlRsREpUZzVKVVUzSlRrNUpVSkNKVVUxSlVKRUpUazFKVVUzSlVFd0pUZ3hKVVU0SlVJMUpUZzBKVVUySlVFd0pVSkRLU1ZGUmlWQ1F5VTRReVZGT1NVNVJDVTVSU1ZGTmlWQlJDVkJOQ1ZGTnlWQ1JDVTVNU1ZGTnlWQlFpVTVPU1ZGTlNVNFJpVTRRU1ZGTnlWQ1JDVTVNU1ZGTnlWQlFpVTVPU1ZGT0NVNE1TVTVOQ1ZGTnlWQ015VkNRaVZGTmlVNU5pVkNPU1ZGTlNWQ1F5VTRSaVZGT0NVNFJTVkNOeVZGTlNVNFJpVTVOaVZGT1NVNE15VkNSQ1ZGTkNWQ09DVTRSU1ZGTmlVNE9DVTVNU1ZGTmlVNU55VkJNQ1ZGTlNVNE5TVkNNeVZGUmlWQ1F5VTRReVZGTmlVNE5DVTVSaVZGT0NWQ01DVkJNaVZGTmlVNU5DVkJSaVZGTmlVNFF5VTRNU1ZGTScgKyAneVU0TUNVNE1nPT0nKSxzdWNjZXNzOiAoZSk9PnsKCQkJCWlmKGUpewoJCQkJCQljb25zdCByZXMgPSB7CgkJCQkJCQlhdmF0YXI6ICdodHRwczovL21wLWFmMzA3MjY4LTFiOGEtNDgyYS1iNzVhLWI2ZTk4YjEyNTc0Mi5jZG4uYnNwYXBwLmNvbS9zeXN0ZW0vbG9nby9sb2dvX3doaXRlMS5wbmcnLAoJCQkJCQkJbG9naW5fZGF0ZTogbmV3IERhdGUoKS5zZXRIb3VycygwLCAwLCAwLCAwKSwKCQkJCQkJCXRva2VuOiBtZDVjCgkJCQkJCX0KCQkJCQkJJCgiI3d0LW15IGltZyIpLmFkZENsYXNzKCdtYXJnaW4tbGVmdCcpCgkJCQkJCSQoJyN3dC1teSBpbWcnKS5hdHRyKCdzcmMnLCByZXMuYXZhdGFyKQoJCQkJCQkkKCcjd3QtbG9naW4tbWFzaycpLmNzcygnZGlzcGxheScsICdub25lJykKCQkJCQkJJCgiI3d0LWxvZ2luLWJveCIpLnJlbW92ZUNsYXNzKCdzaG93LXNldC1ib3gnKQoJCQkJCQkkKCIjd3QtbG9naW4tYm94IikuYWRkQ2xhc3MoJ2hpZC1zZXQtYm94JykKCQkJCQkJc3VwZXJWaXAuX0NPTkZJR18udXNlciA9IHJlcwoJCQkJCQlHTV9zZXRWYWx1ZSgnanN4bF91c2VyJywgcmVzKQoJCQkJCQl3aW5kb3cubG9jYXRpb24ucmVsb2FkKCkKCQkJCQl9CgkJCQl9fSkKCQkJfSwgMjUwMCkKCQl9KQoJfSwKCglqZW5jb2RlOiAocywgcGx1cykgPT4gewoJCXJldHVybiBlbmNvZGUoSlNPTi5zdHJpbmdpZnkocywgYHV0Zi04YCksIHBsdXMpOwoJfSwKCglhc3luY0h0dHA6IGFzeW5jKHVybCwgdGltZW91dCA9IDYwMDApID0+IHsKCSAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4gewoJICAgICAgICB2YXIgcmVxdWVzdCA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpOwoJICAgICAgICByZXF1ZXN0Lm9wZW4oJ0dFVCcsIHVybCwgdHJ1ZSk7CgkJCXJlcXVlc3Quc2V0UmVxdWVzdEhlYWRlcignc2lnbicsIG15X21kNS5lbmNvZGVlKERhdGUubm93KCkpKTsKCSAgICAgICAgcmVxdWVzdC50aW1lb3V0ID0gdGltZW91dDsKCSAgICAgICAgcmVxdWVzdC5vbmxvYWQgPSBmdW5jdGlvbiAoKSB7CgkgICAgICAgICAgICBpZiAocmVxdWVzdC5yZWFkeVN0YXRlID09IDQpIHsKCSAgICAgICAgICAgICAgICBpZiAocmVxdWVzdC5zdGF0dXMgPT09IDIwMCkgewoJICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHttc2c6ICdzdWNjZXNzJywgZGF0YTogcmVxdWVzdC5yZXNwb25zZVRleHR9KTsKCSAgICAgICAgICAgICAgICB9IGVsc2UgewoJICAgICAgICAgICAgICAgICAgICByZWplY3QoeyBtc2c6ICdlcnInLCByZXNwb25zZVRleHQ6ICcnIH0pOwoJICAgICAgICAgICAgICAgIH0KCSAgICAgICAgICAgIH0KCSAgICAgICAgfTsKCSAgICAgICAgcmVxdWVzdC5vbmVycm9yID0gZnVuY3Rpb24gKCkgewoJICAgICAgICAgICAgcmVqZWN0KHsgbXNnOiAnZXJyJywgcmVzcG9uc2VUZXh0OiAnJyB9KTsKCSAgICAgICAgfTsKCSAgICAgICAgcmVxdWVzdC5vbnRpbWVvdXQgPSBmdW5jdGlvbiAoKSB7CgkgICAgICAgICAgICByZWplY3QoeyBtc2c6ICd0aW1lb3V0JywgcmVzcG9uc2VUZXh0OiAnJyB9KTsKCSAgICAgICAgfTsKCSAgICAgICAgcmVxdWVzdC5zZW5kKCk7CgkgICAgfSk7Cgl9LAoKCWZpbmRDb21tb25TdGFydDogKHN0cjEsIHN0cjIpID0+ewoJICBsZXQgY29tbW9uID0gJyc7CgkgIGNvbnN0IG1pbkxlbmd0aCA9IE1hdGgubWluKHN0cjEubGVuZ3RoLCBzdHIyLmxlbmd0aCk7CgkgIGZvciAobGV0IGkgPSAwOyBpIDwgbWluTGVuZ3RoOyBpKyspIHsKCSAgICBpZiAoc3RyMVtpXSA9PT0gc3RyMltpXSkgewoJICAgICAgY29tbW9uICs9IHN0cjFbaV07CgkgICAgfSBlbHNlIHsKCSAgICAgIGJyZWFrOwoJICAgIH0KCSAgfQoJICByZXR1cm4gY29tbW9uOwoJfSwKCglmaW5kVGFyZ2V0RWxlbWVudDogKHRhcmdldENvbnRhaW5lcixtYXhUcnlUaW1lPTMwKT0+IHsKCQljb25zdCBib2R5ID0gd2luZG93LmRvY3VtZW50OwoJCWxldCB0YWJDb250YWluZXI7CgkJbGV0IHRyeVRpbWUgPSAwOwoJCWxldCBzdGFydFRpbWVzdGFtcDsKCQlyZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4gewoJCQlmdW5jdGlvbiB0cnlGaW5kRWxlbWVudCh0aW1lc3RhbXApIHsKCQkJCWlmICghc3RhcnRUaW1lc3RhbXApIHsKCQkJCQlzdGFydFRpbWVzdGFtcCA9IHRpbWVzdGFtcDsKCQkJCX0KCQkJCWNvbnN0IGVsYXBzZWRUaW1lID0gdGltZXN0YW1wIC0gc3RhcnRUaW1lc3RhbXA7CgkJCQlpZiAoZWxhcHNlZFRpbWUgPj0gNTAwKSB7CgkJCQkJY29uc29sZS5sb2coImZpbmQgZWxlbWVudO+8miIgKyB0YXJnZXRDb250YWluZXIgKyAi77yMdGhpcyIgKyB0cnlUaW1lICsgIm51bSIpCgkJCQkJdGFiQ29udGFpbmVyID0gYm9keS5xdWVyeVNlbGVjdG9yKHRhcmdldENvbnRhaW5lcikKCQkJCQlpZiAodGFiQ29udGFpbmVyKSB7CgkJCQkJCXJlc29sdmUodGFiQ29udGFpbmVyKQoJCQkJCX0gZWxzZSBpZiAoKyt0cnlUaW1lID09PSBtYXhUcnlUaW1lKSB7CgkJCQkJCXJlamVjdCgpCgkJCQkJfSBlbHNlIHsKCQkJCQkJc3RhcnRUaW1lc3RhbXAgPSB0aW1lc3RhbXAKCQkJCQl9CgkJCQl9CgkJCQlpZiAoIXRhYkNvbnRhaW5lciAmJiB0cnlUaW1lIDwgbWF4VHJ5VGltZSkgewoJCQkJCXJlcXVlc3RBbmltYXRpb25GcmFtZSh0cnlGaW5kRWxlbWVudCk7CgkJCQl9CgkJCX0KCQkJcmVxdWVzdEFuaW1hdGlvbkZyYW1lKHRyeUZpbmRFbGVtZW50KTsKCQl9KTsKCX0sCgoJcmVwbGFjZUV4aXN0UmVzb3VyY2VzOiAoYm9keSkgPT4gewoJCWxldCBhdHRhY2htZW50cyA9IGJvZHkuYXR0YWNobWVudHM7CgkJbGV0IGFsbF9pbWcgPSB7fTsKCQlsZXQgaGFzX3ZpZGVvID0gLTE7CgkJbGV0IGhhc19hdWRpbyA9IC0xOwoJCWZvciAodmFyIGkgPSAwOyBpIDwgYXR0YWNobWVudHMubGVuZ3RoOyBpKyspIHsKCQkJdmFyIGF0dGEgPSBhdHRhY2htZW50c1tpXTsKCQkJaWYgKGF0dGEuY2F0ZWdvcnkgPT09ICdpbWFnZXMnKSB7CgkJCQlhbGxfaW1nW2F0dGEuaWRdID0gYXR0YS5yZW1vdGVVcmw7CgkJCX0KCQkJaWYgKGF0dGEuY2F0ZWdvcnkgPT09ICdhdWRpbycpIHsKCQkJCWhhc19hdWRpbyA9IGk7CgkJCQlyZXR1cm4gW2JvZHksIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCBoYXNfYXVkaW9dOwoJCQl9CgkJCWlmIChhdHRhLmNhdGVnb3J5ID09PSAndmlkZW8nKSB7CgkJCQloYXNfdmlkZW8gPSBpOwoJCQkJcmV0dXJuIFtib2R5LCB1bmRlZmluZWQsIGhhc192aWRlbywgdW5kZWZpbmVkXTsKCQkJfQoJCX0KCQlyZXR1cm4gW2JvZHksIGFsbF9pbWcsIGhhc192aWRlb107Cgl9LAoKCXNsZWVwOiAodGltZSkgPT4gewoJCXJldHVybiBuZXcgUHJvbWlzZSgocmVzLCByZWopID0+IHsKCQkJc2V0VGltZW91dCgoKSA9PiB7CgkJCQlyZXMoKQoJCQl9LCB0aW1lKQoJCX0pCgl9LAoKCWdldFVzZXJEaWN0OiAoaWQpID0+IHsKCQl2YXIgdXJsID0gYGh0dHBzOi8vJHt3aW5kb3cubG9jYXRpb24uaG9zdG5hbWV9L2FwaS90b3BpYy9ub2RlL3RvcGljcz9wYWdlPTEmdXNlcklkPSR7aWR9JnR5cGU9MGA7CgkJdmFyIHJlcXVlc3QgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTsKCQlyZXF1ZXN0Lm9wZW4oJ0dFVCcsIHVybCwgZmFsc2UpOwoJCXJlcXVlc3Quc2VuZChudWxsKTsKCQlpZiAocmVxdWVzdC5zdGF0dXMgIT09IDIwMCkgewoJCQlyZXR1cm4ge307CgkJfQoJCWxldCBwID0gSlNPTi5wYXJzZShyZXF1ZXN0LnJlc3BvbnNlVGV4dCwgYHV0Zi04YCkuZGF0YTsKCQlwID0gSlNPTi5wYXJzZShkZWNvZGUocCwgc3VwZXJWaXApLCBgdXRmLThgKTsKCQlsZXQgdG90YWwgPSBwLnBhZ2UudG90YWw7CgkJbGV0IHVpZCA9ICcnOwoJCWlmIChgcmVzdWx0c2AgaW4gcCkgewoJCQl1aWQgPSBwLnJlc3VsdHNbMF0udXNlci5uaWNrbmFtZTsKCQl9CgkJZG9jdW1lbnQucXVlcnlTZWxlY3RvcignaGVhZCB0aXRsZScpLmlubmVySFRNTCA9ICcodSnooqvlsIHnpoHotKblj7cnCgkJcmV0dXJuIHsKCQkJJ2lzRmF2b3JpdGUnOiBmYWxzZSwKCQkJJ2xpa2VDb3VudCc6IDEyLAoJCQkndXNlcic6IHsKCQkJCSdpZCc6IHBhcnNlSW50KGlkKSwKCQkJCSduaWNrbmFtZSc6ICfooqvlsIHnpoHotKblj7cnLAoJCQkJJ2F2YXRhcic6ICcwJywKCQkJCSdkZXNjcmlwdGlvbic6IGDor6XotKblj7flt7LooqvlsIHnpoFgLAoJCQkJJ3RvcGljQ291bnQnOiB0b3RhbCwKCQkJCSd2aWRlb0NvdW50JzogMCwKCQkJCSdjb21tZW50Q291bnQnOiAzMDMsCgkJCQknZmFuc0NvdW50JzogNTcsCgkJCQknZmF2b3JpdGVDb3VudCc6IDM5LAoJCQkJJ3N0YXR1cyc6IDAsCgkJCQknc2V4JzogMSwKCQkJCSd2aXAnOiAwLAoJCQkJJ3ZpcEV4cGlyZXNUaW1lJzogJzAwMDEtMDEtMDEgMDA6MDA6MDAnLAoJCQkJJ2NlcnRpZmllZCc6IGZhbHNlLAoJCQkJJ2NlcnRWaWRlbyc6IGZhbHNlLAoJCQkJJ2NlcnRQcm9mZXNzb3InOiBmYWxzZSwKCQkJCSdmYW1vdXMnOiBmYWxzZSwKCQkJCSdmb3JiaWRkZW4nOiBmYWxzZSwKCQkJCSd0YWdzJzogbnVsbCwKCQkJCSdyb2xlJzogMCwKCQkJCSdwb3B1bGFyaXR5JzogMTAsCgkJCQknZGlhbW9uZENvbnN1bWUnOiAwLAoJCQkJJ3RpdGxlJzogewoJCQkJCSdpZCc6IDAsCgkJCQkJJ25hbWUnOiAnJywKCQkJCQknY29uc3VtZSc6IDAsCgkJCQkJJ2NvbnN1bWVFbmQnOiAwLAoJCQkJCSdpY29uJzogcC5yZXN1bHRzWzBdLnVzZXIudGl0bGUuaWNvbgoJCQkJfSwKCQkJCSdmcmllbmRTdGF0dXMnOiBmYWxzZSwKCQkJCSd2b2ljZVN0YXR1cyc6IGZhbHNlLAoJCQkJJ3ZpZGVvU3RhdHVzJzogZmFsc2UsCgkJCQkndm9pY2VNb25leVR5cGUnOiAwLAoJCQkJJ3ZvaWNlQW1vdW50JzogMCwKCQkJCSd2aWRlb01vbmV5VHlwZSc6IDAsCgkJCQkndmlkZW9BbW91bnQnOiAwLAoJCQkJJ2RlcG9zaXRNb25leSc6IDAKCQkJfQoJCX0KCX0sCgoJbW9kaWZ5VXNlcjogKGRhdGEsIGlkKSA9PiB7CgkJaWYgKGRhdGEuZXJyb3JDb2RlID09PSAwKSB7CgkJCWlmIChzdXBlclZpcC5fQ09ORklHXy5oamVkZCB8fCB0eXBlb2YoZGF0YS5kYXRhKSA9PSAnb2JqZWN0JykgewoJCQkJc3VwZXJWaXAuX0NPTkZJR18uaGplZGQgPSB0cnVlCgkJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdoZWFkIHRpdGxlJykuaW5uZXJIVE1MID0gJyh1KScgKyBkYXRhLmRhdGEudXNlci5uaWNrbmFtZQoJCQl9IGVsc2UgewoJCQkJbGV0IGJvZHkgPSAnJwoJCQkJdHJ5IHsKCQkJCQlib2R5ID0gSlNPTi5wYXJzZShkZWNvZGUoZGF0YS5kYXRhLCBzdXBlclZpcCkpOwoJCQkJfSBjYXRjaCAoZSkgewoJCQkJCWJvZHkgPSBKU09OLnBhcnNlKGRlY29kZShkYXRhLmRhdGEsIHN1cGVyVmlwLCB0cnVlKSk7CgkJCQl9CgkJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdoZWFkIHRpdGxlJykuaW5uZXJIVE1MID0gJyh1KScgKyBib2R5LnVzZXIubmlja25hbWUKCQkJfQoJCQlyZXR1cm4gZGF0YTsKCQl9CgkJZGF0YS5pc0VuY3J5cHRlZCA9IHRydWU7CgkJZGF0YS5lcnJvckNvZGUgPSAwOwoJCWRhdGEuc3VjY2VzcyA9IHRydWU7CgkJZGF0YS5tZXNzYWdlID0gIiI7CgkJbGV0IHVkaWN0ID0gdXRpbC5nZXRVc2VyRGljdChpZCk7CgkJZGF0YS5kYXRhID0gdXRpbC5qZW5jb2RlKHVkaWN0LCAncGx1cycpCgkJcmV0dXJuIGRhdGEKCX0sCgoJZGVjb2F0OiAocykgPT57CgkJcmV0dXJuIGRlY29kZVVSSUNvbXBvbmVudChhdG9iKHMpKQoJfSwKCglzaG93VGlwczogKGl0ZW0gPSB7fSkgPT4gewoJCSQoJyN3dC1tYXhpbmRleC1tYXNrJykuY3NzKCdkaXNwbGF5JywgJ2Jsb2NrJyk7CgkJJCgiI3d0LXRpcHMtYm94IikucmVtb3ZlQ2xhc3MoJ2hpZC1zZXQtYm94Jyk7CgkJJCgiI3d0LXRpcHMtYm94IikuYWRkQ2xhc3MoJ3Nob3ctc2V0LWJveCcpOwoJCSQoJyN3dC10aXBzLWJveCAuYnRuLWJveCcpLmVtcHR5KCkKCQkkKCcjd3QtdGlwcy1ib3ggLmJ0bi1ib3gnKS5hcHBlbmQoYAoJCQk8YnV0dG9uIGNsYXNzPSdjYW5jZWwnPuWPlua2iDwvYnV0dG9uPgoJCQk8YnV0dG9uIGNsYXNzPSdzdWJtaXQnPuehruWumjwvYnV0dG9uPgoJCWApCgkJaWYgKGl0ZW0udGl0bGUpICQoJyN3dC10aXBzLWJveCAuY29udGVudCcpLmh0bWwoaXRlbS50aXRsZSk7CgkJaWYgKGl0ZW0uZG91YnQpICQoJyN3dC10aXBzLWJveCAuYnRuLWJveCAuY2FuY2VsJykuY3NzKCdkaXNwbGF5JywgJ2Jsb2NrJyk7CgkJaWYgKGl0ZW0uY29uZmlybSkgJCgnI3d0LXRpcHMtYm94IC5idG4tYm94IC5zdWJtaXQnKS5odG1sKGl0ZW0uY29uZmlybSk7CgkJaWYoaXRlbS5oaWRDb25maXJtKXsKCQkJJCgnI3d0LXRpcHMtYm94IC5zdWJtaXQnKS5jc3MoJ2Rpc3BsYXknLCAnbm9uZScpOwoJCX1lbHNlewoJCQkkKCcjd3QtdGlwcy1ib3ggLnN1Ym1pdCcpLmNzcygnZGlzcGxheScsICdibG9jaycpOwoJCX0KCQkkKCcjd3QtdGlwcy1ib3ggLmJ0bi1ib3ggLnN1Ym1pdCcpLm9uKCdjbGljaycsICgpID0+IHsKCQkJJCgnI3d0LW1heGluZGV4LW1hc2snKS5jc3MoJ2Rpc3BsYXknLCAnbm9uZScpOwoJCQkkKCIjd3QtdGlwcy1ib3giKS5yZW1vdmVDbGFzcygnc2hvdy1zZXQtYm94Jyk7CgkJCSQoIiN3dC10aXBzLWJveCIpLmFkZENsYXNzKCdoaWQtc2V0LWJveCcpOwoJCQlpZiAoaXRlbS5zdWNjZXNzKSBpdGVtLnN1Y2Nlc3ModHJ1ZSk7CgkJfSkKCQkkKCcjd3QtdGlwcy1ib3ggLmJ0bi1ib3ggLmNhbmNlbCcpLm9uKCdjbGljaycsICgpID0+IHsKCQkJJCgnI3d0LW1heGluZGV4LW1hc2snKS5jc3MoJ2Rpc3BsYXknLCAnbm9uZScpOwoJCQkkKCIjd3QtdGlwcy1ib3giKS5yZW1vdmVDbGFzcygnc2hvdy1zZXQtYm94Jyk7CgkJCSQoIiN3dC10aXBzLWJveCIpLmFkZENsYXNzKCdoaWQtc2V0LWJveCcpOwoJCQlpZiAoaXRlbS5zdWNjZXNzKSBpdGVtLnN1Y2Nlc3MoZmFsc2UpOwoJCX0pCgl9LAoKCXNob3dEb3duTG9hZFdpbmRvdzogKHNob3c9dHJ1ZSkgPT57CgkJaWYoIXNob3cpewoJCQkkKCcjd3QtbWFzay1ib3gnKS5jc3MoJ2Rpc3BsYXknLCAnbm9uZScpOwoJCQkkKCIjd3QtZG93bmxvYWQtYm94IikucmVtb3ZlQ2xhc3MoJ3Nob3ctc2V0LWJveCcpOwoJCQkkKCIjd3QtZG93bmxvYWQtYm94IikuYWRkQ2xhc3MoJ2hpZC1zZXQtYm94Jyk7CgkJCXJldHVybgoJCX0KCQkkKCcjd3QtbWFzay1ib3gnKS5jc3MoJ2Rpc3BsYXknLCAnYmxvY2snKTsKCQlpZighZG9jdW1lbnQucXVlcnlTZWxlY3RvcignI3d0LWRvd25sb2FkLWJveCcpKXsKCQkJbGV0IGl0ZW1zID0gJycKCQkJc3VwZXJWaXAuX0NPTkZJR18uZG93blV0aWxzLmZvckVhY2goKGl0ZW0saW5kZXgpID0+ewoJCQkJaXRlbXMgKz0gYAoJCQkJCTxsaSBjbGFzcz0iaXRlbSIgZGF0YS11cmw9IiR7aXRlbS51cmwgKyAoaXRlbS5pc0FwcGVuZD8nJzonP20zdTg9JykgKyAoc3VwZXJWaXAuX0NPTkZJR18udmlkZW9VcmwudXJsP3N1cGVyVmlwLl9DT05GSUdfLnZpZGVvVXJsLnVybCA6JycpfSI+JHtpdGVtLnRpdGxlfTwvbGk+CgkJCQlgCgkJCX0pCgkJCSQoJ2JvZHknKS5hcHBlbmQoYAoJCQkJPGRpdiBpZD0id3QtZG93bmxvYWQtYm94Ij4KCQkJCQk8dmlldyBjbGFzcz0iY2xvc2UiPjwvdmlldz4KCQkJCQk8dWw+JHtpdGVtc308L3VsPgoJCQkJPC9kaXY+CgkJCWApCgkJfWVsc2V7CgkJCSQoJyN3dC1kb3dubG9hZC1ib3gnKS5lbXB0eSgpCgkJCWxldCBpdGVtcyA9ICcnCgkJCXN1cGVyVmlwLl9DT05GSUdfLmRvd25VdGlscy5mb3JFYWNoKChpdGVtLGluZGV4KSA9PnsKCQkJCWl0ZW1zICs9IGAKCQkJCQk8bGkgY2xhc3M9Iml0ZW0iIGRhdGEtdXJsPSIke2l0ZW0udXJsICsgKGl0ZW0uaXNBcHBlbmQ/Jyc6Jz9tM3U4PScpICsgKHN1cGVyVmlwLl9DT05GSUdfLnZpZGVvVXJsLnVybD9zdXBlclZpcC5fQ09ORklHXy52aWRlb1VybC51cmwgOicnKX0iPiR7aXRlbS50aXRsZX08L2xpPgoJCQkJYAoJCQl9KQoJCQkkKCcjd3QtZG93bmxvYWQtYm94JykuYXBwZW5kKGA8dmlldyBjbGFzcz0iY2xvc2UiPjwvdmlldz48dWw+JHtpdGVtc308L3VsPmApCgkJfQoJCSQoIiN3dC1kb3dubG9hZC1ib3giKS5yZW1vdmVDbGFzcygnaGlkLXNldC1ib3gnKTsKCQkkKCIjd3QtZG93bmxvYWQtYm94IikuYWRkQ2xhc3MoJ3Nob3ctc2V0LWJveCcpOwoJCSQoIiN3dC1kb3dubG9hZC1ib3ggLml0ZW0iKS5vbignY2xpY2snLGZ1bmN0aW9uKGUpewoJCQljb25zdCB1cmwgPSBlLnRhcmdldC5kYXRhc2V0LnVybAoJCQlpZighdXJsIHx8ICF1cmwuaW5jbHVkZXMoJz1odHRwJykpewoJCQkJdXRpbC5zaG93VGlwcyh7CgkJCQkJdGl0bGU6ICfmirHmrYnvvIzmnKrmo4DmtYvliLDop4bpopHvvIzov5jnu6fnu63liY3lvoDlkJc/JywKCQkJCQlkb3VidDogdHJ1ZSwKCQkJCQlzdWNjZXNzOiAocmVzKT0+ewoJCQkJCQlpZihyZXMpewoJCQkJCQkJd2luZG93Lm9wZW4odXJsKQoJCQkJCQl9CgkJCQkJfQoJCQkJfSkKCQkJfWVsc2V7CgkJCQl3aW5kb3cub3Blbih1cmwpCgkJCX0KCQl9KQoJCSQoIiN3dC1kb3dubG9hZC1ib3ggLmNsb3NlIikub24oJ2NsaWNrJyxmdW5jdGlvbigpewoJCQkkKCIjd3QtbWFzay1ib3giKS5jbGljaygpCgkJfSkKCX0sCgoJZm9ybWF0VGl0bGU6IChkYXRhKSA9PiB7CgkJaWYgKCFkYXRhKSByZXR1cm4gZGF0YQoJCWlmIChzdXBlclZpcC5fQ09ORklHXy5oamVkZCB8fCB0eXBlb2YoZGF0YSkgPT0gJ29iamVjdCcpIHsKCQkJc3VwZXJWaXAuX0NPTkZJR18uaGplZGQgPSB0cnVlCgkJfSBlbHNlIHsKCQkJZGF0YSA9IEpTT04ucGFyc2UoZGVjb2RlKGRhdGEsIHN1cGVyVmlwKSkKCQl9CgkJaWYgKCFkYXRhIHx8IGRhdGEgPT0gJ251bGwnKSByZXR1cm4gc3VwZXJWaXAuX0NPTkZJR18uaGplZGQgPyAnbnVsbCcgOiAnV1cwMVYyTXlTa0pRVkRBOScKCQlpZiAoIWRhdGEucmVzdWx0cykgewoJCQlkYXRhLnJlc3VsdHMgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGRhdGEpKQoJCQlkYXRhLmlzTGlzdCA9IHRydWUKCQl9CgkJZGF0YS5yZXN1bHRzLmZvckVhY2goaXRlbSA9PiB7CgkJCWxldCB0eXBlcyA9IFtdCgkJCWlmIChpdGVtLmhhc1ZpZGVvICYmICFzdXBlclZpcC5fQ09ORklHXy5oamVkZCkgdHlwZXMucHVzaCgndmlkZW8nKQoJCQlpZiAoaXRlbS5oYXNBdWRpbyAmJiAhc3VwZXJWaXAuX0NPTkZJR18uaGplZGQpIHR5cGVzLnB1c2goJ2F1ZGlvJykKCQkJaWYgKGl0ZW0uaGFzUGljICYmICFzdXBlclZpcC5fQ09ORklHXy5oamVkZCkgdHlwZXMucHVzaCgnaW1nJykKCQkJaWYgKGl0ZW0uYXR0YWNobWVudHMgJiYgaXRlbS5hdHRhY2htZW50cy5sZW5ndGggPiAwKSB7CgkJCQlsZXQgaW1nQ291bnQgPSAwCgkJCQlpdGVtLmF0dGFjaG1lbnRzLmZvckVhY2goaXRlbSA9PiB7CgkJCQkJaWYgKGl0ZW0uY2F0ZWdvcnkgPT0gJ3ZpZGVvJyAmJiAoIXR5cGVzLmluY2x1ZGVzKCd2aWRlbycpKSkgdHlwZXMucHVzaCgKCQkJCQkJJ3ZpZGVvJykKCQkJCQlpZiAoaXRlbS5jYXRlZ29yeSA9PSAnYXVkaW8nICYmICghdHlwZXMuaW5jbHVkZXMoJ2F1ZGlvJykpKSB0eXBlcy5wdXNoKAoJCQkJCQknYXVkaW8nKQoJCQkJCWlmIChpdGVtLmNhdGVnb3J5ID09ICdpbWFnZXMnKSB7CgkJCQkJCWlmICghdHlwZXMuaW5jbHVkZXMoJ2ltZycpKSB0eXBlcy5wdXNoKCdpbWcnKQoJCQkJCQlpbWdDb3VudCsrCgkJCQkJfQoJCQkJfSkKCQkJCWlmIChzdXBlclZpcC5fQ09ORklHXy5oamVkZCAmJiAoaW1nQ291bnQgPiAyKSAmJiAhdHlwZXMuaW5jbHVkZXMoJ3ZpZGVvJykpIHR5cGVzCgkJCQkJLnB1c2goJz8nKQoJCQl9CgkJCQoJCQl0eXBlcyA9IHR5cGVzLmxlbmd0aCA+IDA/ICdbJyArIHR5cGVzLmpvaW4oJy0nKSA6ICdbJzsKCQkJaWYoJ21vbmV5X3R5cGUnIGluIGl0ZW0pewoJCQkJdHlwZXMgKz0gKCctJyArIGl0ZW0ubW9uZXlfdHlwZSk7CgkJCX1lbHNlewoJCQkJdHlwZXMgKz0gKCctMCcpOwoJCQl9CgkJCXR5cGVzICs9ICddJzsKCQkJaXRlbS50aXRsZSA9ICh0eXBlcyArIGl0ZW0udGl0bGUpOwoJCQkKCQl9KQoJCWlmIChzdXBlclZpcC5fQ09ORklHXy5oamVkZCkgewoJCQlyZXR1cm4gZGF0YS5pc0xpc3QgPyBkYXRhLmlzTGlzdCA6IGRhdGEKCQl9IGVsc2UgewoJCQlyZXR1cm4gZGF0YS5pc0xpc3QgPyB1dGlsLmplbmNvZGUoZGF0YS5yZXN1bHRzKSA6IHV0aWwuamVuY29kZShkYXRhKQoJCX0KCX0sCgoJbGFzdGluZ1Rva2VuOiAoZGF0YSkgPT4gewoJCWlmICghZGF0YSkgcmV0dXJuIGRhdGE7CgkJbGV0IGluZm8gPSAnJwoJCWlmIChzdXBlclZpcC5fQ09ORklHXy5oamVkZCB8fCB0eXBlb2YoZGF0YSkgPT0gJ29iamVjdCcpIHsKCQkJc3VwZXJWaXAuX0NPTkZJR18uaGplZGQgPSB0cnVlCgkJCWluZm8gPSBkYXRhCgkJfSBlbHNlIHsKCQkJaW5mbyA9IEpTT04ucGFyc2UoZGVjb2RlKGRhdGEsIHN1cGVyVmlwKSkKCQl9CgkJY29uc3QgdXNlciA9IGluZm8udXNlciA/IGluZm8udXNlciA6IGluZm8KCQl1c2VyLnRpdGxlID0gewoJCQlpZDogNiwKCQkJbmFtZTogdW5lc2NhcGUoZW5jb2RlVVJJQ29tcG9uZW50KCfnpZ7osaonKSksCgkJCWNvbnN1bWU6IDEwMDAwMDAwLAoJCQljb25zdW1lRW5kOiAwLAoJCQlpY29uOiAiaHR0cHM6Ly9oanBpYy5oanBmZTEuY29tL2hqc3RvcmUvc3lzdGVtL25vZGUvdXNlcnRpdGxlNi5wbmc/dmVyPTE2NTQ1OTAyMzUiCgkJfQoJCXVzZXIudmlwID0gNAoJCXVzZXIuZmFtb3VzID0gdHJ1ZQoJCXJldHVybiBzdXBlclZpcC5fQ09ORklHXy5oamVkZCA/IGluZm8gOiB1dGlsLmplbmNvZGUoaW5mbykKCX0sCgoJZm9ybWF0VmlkZW86IChkYXRhKSA9PiB7CgkJaWYgKCFkYXRhKSByZXR1cm4gZGF0YQoJCWxldCB2aWRlbyA9ICcnCgkJaWYgKHN1cGVyVmlwLl9DT05GSUdfLmhqZWRkIHx8IHR5cGVvZihkYXRhKSA9PSAnb2JqZWN0JykgewoJCQlzdXBlclZpcC5fQ09ORklHXy5oamVkZCA9IHRydWUKCQkJdmlkZW8gPSBkYXRhCgkJfSBlbHNlIHsKCQkJdmlkZW8gPSBKU09OLnBhcnNlKGRlY29kZShkYXRhLCBzdXBlclZpcCkpCgkJfQoJCXZpZGVvLnR5cGUgPSAxCgkJdmlkZW8uYW1vdW50ID0gMAoJCXZpZGVvLm1vbmV5X3R5cGUgPSAwCgkJdmlkZW8udmlwID0gMAoJCWlmICh2aWRlby5yZW1vdGVVcmwgJiYgIXZpZGVvLnJlbW90ZVVybC5zdGFydHNXaXRoKCdodHRwJykpIHsKCQkJaWYgKHdpbmRvdy5sb2NhdGlvbi5ocmVmLmluY2x1ZGVzKCd2aWRlb3BsYXknKSkgewoJCQkJLy/nn63op4bpopHlvoXkv64KCQkJCS8vIHZpZGVvLnJlbW90ZVVybCA9IHV0aWwuZ2V0TTN1OFBhdGgodmlkZW8ucmVtb3RlVXJsKQoJCQkJLy8gc3VwZXJWaXAuX0NPTkZJR18udmlkZW9VcmwgPSB2aWRlby5yZW1vdGVVcmwKCQkJfSBlbHNlIHsKCQkJCXN1cGVyVmlwLl9DT05GSUdfLnZpZGVvVXJsLnVybCA9IHZpZGVvLnJlbW90ZVVybAoJCQl9CgkJfQoJCXJldHVybiBzdXBlclZpcC5fQ09ORklHXy5oamVkZCA/IHZpZGVvIDogdXRpbC5qZW5jb2RlKHZpZGVvKQoJfSwKCgljaGVja1VwZGF0ZTogKGNoZWNrKSA9PiB7CgkJY29uc3QgYXV0b1VwZGF0ZWRWZXJzaW9uRGF0ZSA9IEdNX2dldFZhbHVlKCdoYWlqaWFvX2F1dG9fdXBkYXRlZF9kYXRlJywgMCkKCQlpZiAoYXV0b1VwZGF0ZWRWZXJzaW9uRGF0ZSA+IERhdGUubm93KCkgJiYgIWNoZWNrKSByZXR1cm4gewoJCQljb2RlOiAtMTAwLAoJCQltc2c6ICfmo4DmtYvmm7TmlrDpopHnjofpmZDliLYnCgkJfQoJCWlmIChjaGVjayAmJiBHTV9nZXRWYWx1ZSgnaGFpamlhb191cGRhdGVkX25leHRfZGF0ZScsIDApID4gRGF0ZS5ub3coKSkgcmV0dXJuIHsKCQkJY29kZTogLTIwMCwKCQkJbXNnOiAn6K+35ZyoICcgKyBuZXcgRGF0ZShHTV9nZXRWYWx1ZSgnaGFpamlhb191cGRhdGVkX25leHRfZGF0ZScsIDApKS50b0xvY2FsZVN0cmluZygpICsgJyDlkI7lho3mo4Dmn6Xmm7TmlrAnCgkJfQoJCUdNX3NldFZhbHVlKCdoYWlqaWFvX3VwZGF0ZWRfbmV4dF9kYXRlJywgRGF0ZS5ub3coKSArIDYwMDAwMCkKCQlsZXQgcmVzdWx0ID0gewoJCQljb2RlOiAxLAoJCQltc2c6ICdvaycKCQl9CgkJdHJ5IHsKCQkJY29uc3Qgd3RfaGFpamlhb19maXJzdF91c2UgPSBHTV9nZXRWYWx1ZSgnd3RfaGFpamlhb19maXJzdF91c2UnLCAnJykKCQkJJC5hamF4U2V0dXAoewoJCQkJYXN5bmM6IGZhbHNlCgkJCX0pOwoJCQkkLmdldCgnaHR0cHM6Ly9mYy1tcC1hZjMwNzI2OC0xYjhhLTQ4MmEtYjc1YS1iNmU5OGIxMjU3NDIubmV4dC5ic3BhcHAuY29tL2NvbW1vbi91cGRhdGVDaGVjaycsIHsKCQkJCW5hbWU6ICdoYWlqaWFvJywKCQkJCXZlcnNpb246IHN1cGVyVmlwLl9DT05GSUdfLnZlcnNpb24sCgkJCQl1c2VfZGF0ZTogKHd0X2hhaWppYW9fZmlyc3RfdXNlID8gd3RfaGFpamlhb19maXJzdF91c2UgOiBEYXRlLm5vdygpICsgKE1hdGgucm91bmQoTWF0aAoJCQkJCS5yYW5kb20oKSAqIDg5OTk5OSArIDEwMDAwMCkgKyAnJykpCgkJCX0sIGZ1bmN0aW9uKHJlcykgewoJCQkJR01fc2V0VmFsdWUoJ2hhaWppYW9fYXV0b191cGRhdGVkX2RhdGUnLCBEYXRlLm5vdygpICsgMTgwMDAwMDApCgkJCQlpZiAocmVzLmNvZGUgIT0gMCkgcmVzdWx0ID0gewoJCQkJCWNvZGU6IC00MDAsCgkJCQkJbXNnOiAn6I635Y+W54mI5pys5L+h5oGv5aSx6LSlJwoJCQkJfQoJCQkJaWYgKChyZXMudXBkYXRlX21zZyAmJiByZXMuaXNfdXBkYXRlKSB8fCByZXMubXNnIHx8IHJlcy5ub3RpZnlfYWxsKSB7CgkJCQkJbGV0IG1zZyA9ICcnCgkJCQkJaWYgKHJlcy5ub3RpZnlfYWxsKSBtc2cgKz0gJzxwPi0gICcgKyByZXMubm90aWZ5X2FsbCArICc8cC8+JwoJCQkJCWlmIChyZXMubXNnKSBtc2cgKz0gJzxwPi0gICcgKyByZXMubXNnICsgJzxwLz4nCgkJCQkJaWYgKHJlcy5pc191cGRhdGUgJiYgcmVzLnVwZGF0ZV9tc2cpIG1zZyArPSByZXMudXBkYXRlX21zZwoJCQkJCWNvbnN0IGhpc3RvcnlOb3RpZnkgPSBHTV9nZXRWYWx1ZSgnaGFpamlhb19ub3RpZnknKQoJCQkJCWlmKGNoZWNrIHx8ICFoaXN0b3J5Tm90aWZ5IHx8IGhpc3RvcnlOb3RpZnkubXNnLnJlcGxhY2UoL2lkXD1cZCsvLCcnKSAhPSBtc2cucmVwbGFjZSgvaWRcPVxkKy8sJycpKXsKCQkJCQkJdXRpbC5zaG93Tm90aWZ5KHsKCQkJCQkJCXRpdGxlOiBtc2csCgkJCQkJCQlzdWNjZXNzOiAoKSA9PiB7CgkJCQkJCQkJaWYgKHJlcykgewoJCQkJCQkJCQlzdXBlclZpcC5fQ09ORklHXy5zaG93Tm90aWZ5ID0gZmFsc2UKCQkJCQkJCQl9CgkJCQkJCQl9CgkJCQkJCX0pCgkJCQkJCXV0aWwuc2hvd0FuZEhpZFRpcHMoJ3d0X215X25vdGlmeV9oYWlqaWFvJykKCQkJCQl9CgkJCQkJaWYgKG1zZyAmJiBtc2cucmVwbGFjZSgvXHMqL2csICIiKS5sZW5ndGggPiAwKSBHTV9zZXRWYWx1ZSgnaGFpamlhb19ub3RpZnknLCB7CgkJCQkJCWRhdGU6IG5ldyBEYXRlKCkuc2V0SG91cnMoMCwgMCwgMCwgMCksCgkJCQkJCW1zZwoJCQkJCX0pCgkJCQl9CgkJCQlpZiAoIXJlcy5pc191cGRhdGUpIHJlc3VsdCA9IHsKCQkJCQljb2RlOiAtNTAwLAoJCQkJCW1zZzogJ+W9k+WJjeeJiOacrCAnICsgc3VwZXJWaXAuX0NPTkZJR18udmVyc2lvbiArICcg5bey57uP5piv5pyA5paw54mI5pysJwoJCQkJfQoJCQl9KQoJCQkkLmFqYXhTZXR1cCh7CgkJCQlhc3luYzogdHJ1ZQoJCQl9KTsKCQl9IGNhdGNoIChlKSB7fQoJCXJldHVybiByZXN1bHQKCX0sCgoJc2hvd05vdGlmeTogKGl0ZW0gPSB7fSkgPT4gewoJCSQoIiN3dC1ub3RpZnktYm94IikucmVtb3ZlQ2xhc3MoJ2hpZC1ub3RpZnktYm94JykKCQkkKCIjd3Qtbm90aWZ5LWJveCIpLmFkZENsYXNzKCdzaG93LW5vdGlmeS1ib3gnKQoJCWxldCB2ZXJzaW9uID0gc3VwZXJWaXAuX0NPTkZJR18udmVyc2lvbgoJCWNvbnN0IHYgPSAv5b2T5YmN6ISa5pys54mI5pysIChcZFwuXGRcLlxkXC57MCwxfVxkezAsMn0pLy5leGVjKGl0ZW0udGl0bGUpCgkJaWYgKHYpIGl0ZW0udGl0bGUgPSBpdGVtLnRpdGxlLnJlcGxhY2UodlsxXSwgdmVyc2lvbikKCQlpZiAoaXRlbS50aXRsZSkgJCgnI3d0LW5vdGlmeS1ib3ggLmNvbnRlbnQnKS5odG1sKGl0ZW0udGl0bGUgKyAodmVyc2lvbiA/CgkJCSc8ZGl2IHN0eWxlPSJ0ZXh0LWFsaWduOiByaWdodDtjb2xvcjogI2NjYztmb250LXNpemU6IDEwcHg7bWFyZ2luLXRvcDogMTBweDsiPnYgJyArCgkJCXZlcnNpb24gKyAnPC9kaXY+JyA6ICcnKSkKCQlzdXBlclZpcC5fQ09ORklHXy5zaG93Tm90aWZ5ID0gdHJ1ZQoJCSQoJyN3dC1ub3RpZnktYm94IGEnKS5vbignY2xpY2snLCAoZSkgPT4gewoJCQllLnN0b3BQcm9wYWdhdGlvbigpCgkJfSkKCQkkKCcjd3Qtbm90aWZ5LWJveCcpLm9uKCdjbGljaycsICgpID0+IHsKCQkJJCgiI3d0LW5vdGlmeS1ib3giKS5yZW1vdmVDbGFzcygnc2hvdy1ub3RpZnktYm94JykKCQkJJCgiI3d0LW5vdGlmeS1ib3giKS5hZGRDbGFzcygnaGlkLW5vdGlmeS1ib3gnKQoJCQlzdXBlclZpcC5fQ09ORklHXy5zaG93Tm90aWZ5ID0gZmFsc2UKCQkJaWYgKGl0ZW0uc3VjY2VzcykgaXRlbS5zdWNjZXNzKHRydWUpCgkJfSkKCX0KfQoKY29uc3Qgc3VwZXJWaXAgPSAoZnVuY3Rpb24oKSB7Cgljb25zdCBfQ09ORklHXyA9IHsKCQlpc01vYmlsZTogbmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaCgKCQkJLyhBbmRyb2lkfHdlYk9TfGlQaG9uZXxpUGFkfGlQb2R8QmxhY2tCZXJyeXxJRU1vYmlsZXxPcGVyYSBNaW5pKS9pKSwKCQl2aXBCb3hJZDogJ3d0LXZpcC1qeC1ib3gnICsgTWF0aC5jZWlsKE1hdGgucmFuZG9tKCkgKiAxMDAwMDAwMDApLAoJCXZlcnNpb246ICcyLjIuMScsCgkJdmlkZW9Vcmw6IHt9LAoJCWVuZE5hbWU6ICdhbk09JywKCQlpbml0RmFpbE1zZzogJ+aKseatie+8jOWIneWni+WMluWksei0pe+8jOivt+WwneivleWIt+aWsOmhtemdouaIluajgOafpeeJiOacrOaYr+WQpuaYr+acgOaWsOeJiOacrO+8jOeCueWHu+aOp+WItuadoeWWh+WPreafpeeci+W9k+WJjeeJiOacrOWPtycsCgkJaG9tZVBhZ2U6IGRlY29kZVVSSUNvbXBvbmVudChhdG9iKCdhSFIwY0NVelFTVXlSaVV5Um1wemVHd3VjSEp2JykpLAoJCXNjcmlwdHM6IFsKCQkJLy8gCXsKCQkJLy8gCWljb246ICdodHRwczovL21wLWFmMzA3MjY4LTFiOGEtNDgyYS1iNzVhLWI2ZTk4YjEyNTc0Mi5jZG4uYnNwYXBwLmNvbS9zeXN0ZW0vbG9nby93YXRlcm1hcmtfbG9nby5wbmcnLAoJCQkvLyAJZGVzYzogJ+WQhOWkp+efreinhumikeW5s+WPsOinhumikS/lm77pm4blhY3otLnljrvmsLTljbDkuIvovb3vvIznpoHmraLkuIvovb3nmoTkuZ/og73kuIvovb0nCgkJCS8vIH0sCgkJCXsKCQkJCWljb246ICdodHRwczovL21wLWFmMzA3MjY4LTFiOGEtNDgyYS1iNzVhLWI2ZTk4YjEyNTc0Mi5jZG4uYnNwYXBwLmNvbS9zeXN0ZW0vbG9nby92aWRlb19sb2dvLnBuZycsCgkJCQlkZXNjOiAn5ZCE5aSn6KeG6aKR5bmz5Y+wVklQ6KeG6aKR5YWN6LS555yLJywKCQkJCXVybDogJycKCQkJfSwKCQkJewoJCQkJaWNvbjogJ2h0dHBzOi8vYmUudXhka2VsLmNvbS9zdGF0aWMvaW1hZ2VzL2luZGV4L2RtZGxvZzIucG5nJywKCQkJCWRlc2M6ICflhY3otLnnnIvku5jotLnnn63op4bpopHvvIznvZHnq5nlhoXlrrnlj6/og73lvJXotbfkuI3pgILvvIzor7fosKjmhY7kvb/nlKjjgIInLAoJCQkJdXJsOiAnJwoJCQl9LAoJCQl7CgkJCQlpY29uOiAnaHR0cHM6Ly9tcC1hZjMwNzI2OC0xYjhhLTQ4MmEtYjc1YS1iNmU5OGIxMjU3NDIuY2RuLmJzcGFwcC5jb20vc3lzdGVtL2xvZ28vaGFpamlhby5wbmcnLAoJCQkJZGVzYzogJ+WFjei0ueeci+S7mOi0ueinhumikeWPiuWbvumbhu+8jOe9keermeWGheWuueWPr+iDveW8lei1t+S4jemAgu+8jOivt+iwqOaFjuS9v+eUqOOAgicsCgkJCQl1cmw6ICcnCgkJCX0sCgkJCXsKCQkJCWljb246ICdodHRwczovL21wLWFmMzA3MjY4LTFiOGEtNDgyYS1iNzVhLWI2ZTk4YjEyNTc0Mi5jZG4uYnNwYXBwLmNvbS9zeXN0ZW0vbG9nb190cmFuc3BhcmVudC5wbmcnLAoJCQkJZGVzYzogJ+WJjeW+gOWPiuaXtuihjOS5kOiOt+WPluacgOaWsOiEmuacrOmTvuaOpScsCgkJCQl1cmw6ICcnCgkJCX0KCQldLAoJCWRvd25VdGlsczpbCgkJCXt0aXRsZTogJ+S4i+i9veaOpeWPo+W3peWFtyAxJyx1cmw6J2h0dHA6Ly90b29scy5idWdzY2FuZXIuY29tL20zdTguaHRtbCcsaXNBcHBlbmQ6IGZhbHNlfSwKCQkJe3RpdGxlOiAn5LiL6L295o6l5Y+j5bel5YW3IDInLHVybDonaHR0cHM6Ly90b29scy50aGF0d2luZC5jb20vdG9vbC9tM3U4ZG93bmxvYWRlciNtM3U4PScsaXNBcHBlbmQ6IHRydWV9LAoJCQl7dGl0bGU6ICfkuIvovb3mjqXlj6Plt6XlhbcgMycsdXJsOidodHRwczovL2Jsb2cubHVja2x5LW1qdy5jbi90b29sLXNob3cvbTN1OC1kb3dubG9hZGVyL2luZGV4Lmh0bWw/c291cmNlPScsaXNBcHBlbmQ6IHRydWV9CgkJXQoJfQoJY2xhc3MgQmFzZUNvbnN1bWVyIHsKCQljb25zdHJ1Y3Rvcihib2R5KSB7CgkJCXRoaXMucGFyc2UgPSAoKSA9PiB7CgkJCQlzZXRUaW1lb3V0KCgpID0+IHsgdXRpbC5jaGVja1VwZGF0ZSgpfSwgMTUwMCkKCQkJCXRoaXMuaW50ZXJjZXB0SHR0cCgpCgkJCQl1dGlsLmZpbmRUYXJnZXRFbGVtZW50KCdib2R5JykudGhlbihjb250YWluZXIgPT57CgkJCQkJY29udGFpbmVyLnN0eWxlLm92ZXJmbG93WT0nYXV0byAhaW1wb3J0YW50JzsKCQkJCQl0aGlzLmdlbmVyYXRlRWxlbWVudChjb250YWluZXIpLnRoZW4oCgkJCQkJCWNvbnRhaW5lciA9PiB0aGlzLmJpbmRFdmVudChjb250YWluZXIpKQoJCQkJfSkKCQkJfQoJCX0KCgkJaW50ZXJjZXB0SHR0cCgpIHsKCQkJY29uc3Qgb3JpZ2luT3BlbiA9IFhNTEh0dHBSZXF1ZXN0LnByb3RvdHlwZS5vcGVuOwoJCQlYTUxIdHRwUmVxdWVzdC5wcm90b3R5cGUub3BlbiA9IGZ1bmN0aW9uKF8sIHVybCkgewoJCQkJdGhpcy5vbnRpbWVvdXQgPSBmdW5jdGlvbigpIHsKCQkJCQl3aW5kb3cubG9jYXRpb24ucmVsb2FkKCkKCQkJCX0KCQkJCWlmKC9cL2FwaVwvY29tbWVudFwvcmVwbHkkLy50ZXN0KHVybCkpewoJCQkJCXRoaXMuX3Njb3BlX3VybCA9IHVybAoJCQkJfQoJCQkJaWYoX0NPTkZJR18udXNlcil7CgkJCQkJaWYgKC9cL2FwaVwvYmFubmVyXC9iYW5uZXJfbGlzdC8udGVzdCh1cmwpKSB7CgkJCQkJCXRoaXMuYWJvcnQoKQoJCQkJCX0KCQkJCQlpZiAoL1wvYXBpXC90b3BpY1wvaG90XC90b3BpY3NcPy8udGVzdCh1cmwpKSB7CgkJCQkJCWNvbnN0IHhociA9IHRoaXM7OwoJCQkJCQljb25zdCBnZXR0ZXIgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKAoJCQkJCQkJWE1MSHR0cFJlcXVlc3QucHJvdG90eXBlLAoJCQkJCQkJInJlc3BvbnNlIgoJCQkJCQkpLmdldDsKCQkJCQkJT2JqZWN0LmRlZmluZVByb3BlcnR5KHhociwgInJlc3BvbnNlVGV4dCIsIHsKCQkJCQkJCWdldDogKCkgPT4gewoJCQkJCQkJCWxldCByZXN1bHQgPSBnZXR0ZXIuY2FsbCh4aHIpOwoJCQkJCQkJCXRyeSB7CgkJCQkJCQkJCWxldCByZXMgPSBKU09OLnBhcnNlKHJlc3VsdCwgYHV0Zi04YCk7CgkJCQkJCQkJCXJlcy5kYXRhID0gdXRpbC5mb3JtYXRUaXRsZShyZXMuZGF0YSk7CgkJCQkJCQkJCXJldHVybiBKU09OLnN0cmluZ2lmeShyZXMsIGB1dGYtOGApOwoJCQkJCQkJCX0gY2F0Y2ggKGUpIHsKCQkJCQkJCQkJY29uc29sZS5sb2coJ+WPkeeUn+W8guW4uCEg6Kej5p6Q5aSx6LSlIScpOwoJCQkJCQkJCQljb25zb2xlLmxvZyhlKTsKCQkJCQkJCQkJcmV0dXJuIHJlc3VsdDsKCQkJCQkJCQl9CgkJCQkJCQl9LAoJCQkJCQl9KTsKCQkJCQl9CgkJCgkJCQkJaWYgKC9cL2FwaVwvdG9waWNcL3NlYXJjaC8udGVzdCh1cmwpKSB7CgkJCQkJCTsKCQkJCQkJY29uc3QgeGhyID0gdGhpczsKCQkJCQkJY29uc3QgZ2V0dGVyID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcigKCQkJCQkJCVhNTEh0dHBSZXF1ZXN0LnByb3RvdHlwZSwKCQkJCQkJCSJyZXNwb25zZSIKCQkJCQkJKS5nZXQ7CgkJCQkJCU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh4aHIsICJyZXNwb25zZVRleHQiLCB7CgkJCQkJCQlnZXQ6ICgpID0+IHsKCQkJCQkJCQlsZXQgcmVzdWx0ID0gZ2V0dGVyLmNhbGwoeGhyKTsKCQkJCQkJCQl0cnkgewoJCQkJCQkJCQlsZXQgcmVzID0gSlNPTi5wYXJzZShyZXN1bHQsIGB1dGYtOGApOwoJCQkJCQkJCQlyZXMuZGF0YSA9IHV0aWwuZm9ybWF0VGl0bGUocmVzLmRhdGEpOwoJCQkJCQkJCQlyZXR1cm4gSlNPTi5zdHJpbmdpZnkocmVzLCBgdXRmLThgKTsKCQkJCQkJCQl9IGNhdGNoIChlKSB7CgkJCQkJCQkJCWNvbnNvbGUubG9nKCflj5HnlJ/lvILluLghIOino+aekOWksei0pSEnKTs7CgkJCQkJCQkJCWNvbnNvbGUubG9nKGUpOwoJCQkJCQkJCQlyZXR1cm4gcmVzdWx0OwoJCQkJCQkJCX0KCQkJCQkJCX0sCgkJCQkJCX0pOwoJCQkJCX0KCQkKCQkJCQlpZiAoL1wvYXBpXC90b3BpY1wvXGQrLy50ZXN0KHVybCkpIHsKCQkJCQkJY29uc3QgeGhyID0gdGhpczsKCQkJCQkJY29uc3QgZ2V0dGVyID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcigKCQkJCQkJCVhNTEh0dHBSZXF1ZXN0LnByb3RvdHlwZSwKCQkJCQkJCSJyZXNwb25zZSIKCQkJCQkJKS5nZXQ7CgkJCQkJCU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh4aHIsICJyZXNwb25zZVRleHQiLCB7CgkJCQkJCQlnZXQ6ICgpID0+IHsKCQkJCQkJCQlsZXQgcmVzdWx0ID0gZ2V0dGVyLmNhbGwoeGhyKTsKCQkJCQkJCQl0cnkgewoJCQkJCQkJCQlsZXQgcmVzID0gSlNPTi5wYXJzZShyZXN1bHQsIGB1dGYtOGApOwoJCQkJCQkJCQlyZXMuZGF0YSA9IG1vZGlmeURhdGEocmVzLmRhdGEpCgkJCQkJCQkJCXJldHVybiBKU09OLnN0cmluZ2lmeShyZXMsIGB1dGYtOGApOwoJCQkJCQkJCX0gY2F0Y2ggKGUpIHsKCQkJCQkJCQkJY29uc29sZS5sb2coJ+WPkeeUn+W8guW4uCEg6Kej5p6Q5aSx6LSlIScpOzsKCQkJCQkJCQkJY29uc29sZS5sb2coZSk7CgkJCQkJCQkJCXJldHVybiByZXN1bHQ7CgkJCQkJCQkJfQoJCQkJCQkJfSwKCQkJCQkJfSk7CgkJCQkJfQoJCQoJCQkJCWlmICgvXC9hcGlcL2F0dGFjaG1lbnQvLnRlc3QodXJsKSkgewoJCQkJCQljb25zdCB4aHIgPSB0aGlzOwoJCQkJCQljb25zdCBnZXR0ZXIgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKAoJCQkJCQkJWE1MSHR0cFJlcXVlc3QucHJvdG90eXBlLAoJCQkJCQkJInJlc3BvbnNlIgoJCQkJCQkpLmdldDsKCQkJCQkJT2JqZWN0LmRlZmluZVByb3BlcnR5KHhociwgInJlc3BvbnNlVGV4dCIsIHsKCQkJCQkJCWdldDogKCkgPT4gewoJCQkJCQkJCWxldCByZXN1bHQgPSBnZXR0ZXIuY2FsbCh4aHIpOwoJCQkJCQkJCXRyeSB7CgkJCQkJCQkJCWxldCByZXMgPSBKU09OLnBhcnNlKHJlc3VsdCwgYHV0Zi04YCk7CgkJCQkJCQkJCWlmKHJlcy5kYXRhKXsKCQkJCQkJCQkJCWNvbnN0IGJvZHkgPSBKU09OLnBhcnNlKGRlY29kZShyZXMuZGF0YSwgc3VwZXJWaXApKQoJCQkJCQkJCQkJcmVzLmRhdGEgPSB1dGlsLmZvcm1hdFZpZGVvKHJlcy5kYXRhKTsKCQkJCQkJCQkJfQoJCQkJCQkJCQlyZXR1cm4gSlNPTi5zdHJpbmdpZnkocmVzLCBgdXRmLThgKTsKCQkJCQkJCQl9IGNhdGNoIChlKSB7CgkJCQkJCQkJCWNvbnNvbGUubG9nKCflj5HnlJ/lvILluLghIOino+aekOWksei0pSEnKTs7CgkJCQkJCQkJCWNvbnNvbGUubG9nKGUpOwoJCQkJCQkJCQlyZXR1cm4gcmVzdWx0OwoJCQkJCQkJCX0KCQkJCQkJCX0sCgkJCQkJCX0pOwoJCQkJCX0KCQkKCQkJCQlpZiAoL1wvYXBpXC90b3BpY1wvKG5vZGVcLyh0b3BpY3N8bmV3cyl8aWRvbF9saXN0KS8udGVzdCh1cmwpKSB7CgkJCQkJCWNvbnN0IHhociA9IHRoaXM7CgkJCQkJCWNvbnN0IGdldHRlciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoCgkJCQkJCQlYTUxIdHRwUmVxdWVzdC5wcm90b3R5cGUsCgkJCQkJCQkicmVzcG9uc2UiCgkJCQkJCSkuZ2V0OwoJCQkJCQlPYmplY3QuZGVmaW5lUHJvcGVydHkoeGhyLCAicmVzcG9uc2VUZXh0IiwgewoJCQkJCQkJZ2V0OiAoKSA9PiB7CgkJCQkJCQkJbGV0IHJlc3VsdCA9IGdldHRlci5jYWxsKHhocik7CgkJCQkJCQkJdHJ5IHsKCQkJCQkJCQkJbGV0IHJlcyA9IEpTT04ucGFyc2UocmVzdWx0LCBgdXRmLThgKTsKCQkJCQkJCQkJcmVzLmRhdGEgPSB1dGlsLmZvcm1hdFRpdGxlKHJlcy5kYXRhKQoJCQkJCQkJCQlyZXR1cm4gSlNPTi5zdHJpbmdpZnkocmVzLCBgdXRmLThgKTsKCQkJCQkJCQl9IGNhdGNoIChlKSB7CgkJCQkJCQkJCWNvbnNvbGUubG9nKCflj5HnlJ/lvILluLghIOino+aekOWksei0pSEnKTsKCQkJCQkJCQkJY29uc29sZS5sb2coZSk7CgkJCQkJCQkJCXJldHVybiByZXN1bHQ7CgkJCQkJCQkJfQoJCQkJCQkJfSwKCQkJCQkJfSk7CgkJCQkJfQoJCQoJCQkJCWlmICgvXC9hcGlcL3VzZXJcLyhpbmZvXC8oXGQrKSl8Y3VycmVudC8uZXhlYyh1cmwpKSB7CgkJCQkJCWNvbnN0IHhociA9IHRoaXM7CgkJCQkJCWNvbnN0IGdldHRlciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoCgkJCQkJCQlYTUxIdHRwUmVxdWVzdC5wcm90b3R5cGUsCgkJCQkJCQkicmVzcG9uc2UiCgkJCQkJCSkuZ2V0OwoJCQkJCQlPYmplY3QuZGVmaW5lUHJvcGVydHkoeGhyLCAicmVzcG9uc2VUZXh0IiwgewoJCQkJCQkJZ2V0OiAoKSA9PiB7CgkJCQkJCQkJbGV0IHJlc3VsdCA9IGdldHRlci5jYWxsKHhocik7CgkJCQkJCQkJdHJ5IHsKCQkJCQkJCQkJbGV0IHJlcyA9IEpTT04ucGFyc2UocmVzdWx0LCBgdXRmLThgKTsKCQkJCQkJCQkJY29uc3QgcmVnUmVzID0gL1wvYXBpXC91c2VyXC8oaW5mb1wvKFxkKykpfGN1cnJlbnQvLmV4ZWMoCgkJCQkJCQkJCQl1cmwpOwoJCQkJCQkJCQljb25zdCB1aWQgPSBzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKCd1aWQnKTsKCQkJCQkJCQkJbGV0IGRhdGEKCQkJCQkJCQkJaWYgKHJlZ1Jlcy5sZW5ndGggPiAyICYmIChyZWdSZXNbMl0gJiYgcmVnUmVzWzJdICE9IHVpZCkpIHsKCQkJCQkJCQkJCWxldCBmdXJsID0geGhyLnJlc3BvbnNlVVJMOwoJCQkJCQkJCQkJbGV0IHIgPSBmdXJsLm1hdGNoKAoJCQkJCQkJCQkJCS9cVyooXHcrKVwuKHRvcHxjb218cHJvKVwvYXBpXC91c2VyXC9pbmZvXC8oXGQrKS8pOwoJCQkJCQkJCQkJZGF0YSA9IHV0aWwubW9kaWZ5VXNlcihyZXMsIHJbMl0pOwoJCQkJCQkJCQl9IGVsc2UgewoJCQkJCQkJCQkJZGF0YSA9IHJlczsKCQkJCQkJCQkJCWRhdGEuZGF0YSA9IHV0aWwubGFzdGluZ1Rva2VuKHJlcy5kYXRhKTsKCQkJCQkJCQkJfQoJCQkJCQkJCQlyZXR1cm4gSlNPTi5zdHJpbmdpZnkoZGF0YSk7CgkJCQkJCQkJfSBjYXRjaCAoZSkgewoJCQkJCQkJCQljb25zb2xlLmxvZygn5Y+R55Sf5byC5bi4ISDop6PmnpDlpLHotKUhJyk7CgkJCQkJCQkJCWNvbnNvbGUubG9nKGUpOwoJCQkJCQkJCQlyZXR1cm4gcmVzdWx0OwoJCQkJCQkJCX0KCQkJCQkJCX0sCgkJCQkJCX0pOwoJCQkJCX0KCQkKCQkJCQlpZiAoL1wvYXBpXC91c2VyXC9uZXdzLy50ZXN0KHVybCkpIHsKCQkJCQkJY29uc3QgeGhyID0gdGhpczsKCQkJCQkJY29uc3QgZ2V0dGVyID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcigKCQkJCQkJCVhNTEh0dHBSZXF1ZXN0LnByb3RvdHlwZSwKCQkJCQkJCSJyZXNwb25zZSIKCQkJCQkJKS5nZXQ7CgkJCQkJCU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh4aHIsICJyZXNwb25zZVRleHQiLCB7CgkJCQkJCQlnZXQ6ICgpID0+IHsKCQkJCQkJCQlsZXQgcmVzdWx0ID0gZ2V0dGVyLmNhbGwoeGhyKTsKCQkJCQkJCQl0cnkgewoJCQkJCQkJCQlyZXR1cm4gSlNPTi5zdHJpbmdpZnkoewoJCQkJCQkJCQkJImlzRW5jcnlwdGVkIjogdHJ1ZSwKCQkJCQkJCQkJCSJlcnJvckNvZGUiOiAwLAoJCQkJCQkJCQkJIm1lc3NhZ2UiOiAiIiwKCQkJCQkJCQkJCSJzdWNjZXNzIjogdHJ1ZSwKCQkJCQkJCQkJCSJkYXRhIjogIldsaHNTMlF4YkZoYVIzaEtZVzVCTTFOWE5VTmhSbTk1Vmxkc1VHRnJWbnBUVnpFMFkwZEtXR0pFUWtwaGJUazFWRlZPTTJGWFVraFBWRUphVmpOa2NGUXljRU5QVlhoRVUyNXNZVmRGTkhoWmEyaFRaV3RzY1dORVpFcGhNMmgzV1hwT1VtRlZPWFJPVkVacFVqTm5OVnBzUlRsUVVUMDkiCgkJCQkJCQkJCX0pOwoJCQkJCQkJCX0gY2F0Y2ggKGUpIHsKCQkJCQkJCQkJY29uc29sZS5sb2coJ+WPkeeUn+W8guW4uCEg6Kej5p6Q5aSx6LSlIScpOwoJCQkJCQkJCQljb25zb2xlLmxvZyhlKTsKCQkJCQkJCQkJcmV0dXJuIHJlc3VsdDsKCQkJCQkJCQl9CgkJCQkJCQl9LAoJCQkJCQl9KTsKCQkJCQl9CgkJCgkJCQkJaWYoL2FwaVwvdmlkZW9cL3VzZXJfbGlzdFw/Ly50ZXN0KHVybCkpewoJCQkJCQk7Y29uc3QgeGhyID0gdGhpczsKCQkJCQkJY29uc3QgZ2V0dGVyID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcigKCQkJCQkJCVhNTEh0dHBSZXF1ZXN0LnByb3RvdHlwZSwKCQkJCQkJCSJyZXNwb25zZSIKCQkJCQkJKS5nZXQ7CgkJCQkJCU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh4aHIsICJyZXNwb25zZVRleHQiLCB7CgkJCQkJCQlnZXQ6ICgpID0+IHsKCQkJCQkJCQlsZXQgcmVzdWx0ID0gZ2V0dGVyLmNhbGwoeGhyKTsKCQkJCQkJCQl0cnkgewoJCQkJCQkJCQlyZXR1cm4gSlNPTi5zdHJpbmdpZnkoewoJCQkJCQkJCQkJImlzRW5jcnlwdGVkIjogdHJ1ZSwKCQkJCQkJCQkJCSJlcnJvckNvZGUiOiAwLAoJCQkJCQkJCQkJIm1lc3NhZ2UiOiAiIiwKCQkJCQkJCQkJCSJzdWNjZXNzIjogdHJ1ZSwKCQkJCQkJCQkJCSJkYXRhIjogIldXMDFWMk15U2tKUVZEQTkiCgkJCQkJCQkJCX0pOwoJCQkJCQkJCX0gY2F0Y2ggKGUpIHsKCQkJCQkJCQkJY29uc29sZS5sb2coJ+WPkeeUn+W8guW4uCEg6Kej5p6Q5aSx6LSlIScpOwoJCQkJCQkJCQk7Y29uc29sZS5sb2coZSk7CgkJCQkJCQkJCTtyZXR1cm4gcmVzdWx0OwoJCQkJCQkJCX0KCQkJCQkJCX0sCgkJCQkJCX0pOwoJCQkJCX0KCQkKCQkJCQlpZiAoL2FwaVwvbG9naW5cL3NpZ25pbi8udGVzdCh1cmwpKSB7CgkJCQkJCWNvbnN0IHhociA9IHRoaXM7CgkJCQkJCWNvbnN0IGdldHRlciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoCgkJCQkJCQlYTUxIdHRwUmVxdWVzdC5wcm90b3R5cGUsCgkJCQkJCQkicmVzcG9uc2UiCgkJCQkJCSkuZ2V0OwoJCQkJCQlPYmplY3QuZGVmaW5lUHJvcGVydHkoeGhyLCAicmVzcG9uc2VUZXh0IiwgewoJCQkJCQkJZ2V0OiAoKSA9PiB7CgkJCQkJCQkJbGV0IHJlc3VsdCA9IGdldHRlci5jYWxsKHhocik7CgkJCQkJCQkJdHJ5IHsKCQkJCQkJCQkJbGV0IHJlcyA9IEpTT04ucGFyc2UocmVzdWx0LCBgdXRmLThgKTsKCQkJCQkJCQkJaWYocmVzLnN1Y2Nlc3MpewoJCQkJCQkJCQkJY29uc3QgdXNlcm5hbWUgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdpbnB1dFtwbGFjZWhvbGRlcj0i6K+36L6T5YWl55So5oi35ZCNL+mCrueusSJdLGlucHV0W3BsYWNlaG9sZGVyPSLor7fovpPlhaXnlKjmiLflkI0iXScpLnZhbHVlCgkJCQkJCQkJCQljb25zdCBwd2QgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdpbnB1dFt0eXBlPSJwYXNzd29yZCJdJykudmFsdWUKCQkJCQkJCQkJCWlmKHVzZXJuYW1lICYmIHB3ZCl7CgkJCQkJCQkJCQkJR01fc2V0VmFsdWUoJ2hhaWppYW9fdXNlcnB3ZCcse3VzZXJuYW1lLHB3ZH0pCgkJCQkJCQkJCQl9CgkJCQkJCQkJCQl1dGlsLmZpbmRUYXJnZXRFbGVtZW50KCcudmFuLWRpYWxvZ19fY2FuY2VsLC5lbC1idXR0b24tLXNtYWxsJyw3KS50aGVuKHJlcyA9PnsKCQkJCQkJCQkJCQlyZXMuY2xpY2soKQoJCQkJCQkJCQkJfSkKCQkJCQkJCQkJfWVsc2V7CgkJCQkJCQkJCQl1dGlsLnNob3dUaXBzKHt0aXRsZTogcmVzLm1lc3NhZ2V9KQoJCQkJCQkJCQl9CgkJCQkJCQkJCXJlcy5kYXRhID0gdXRpbC5sYXN0aW5nVG9rZW4ocmVzLmRhdGEpOwoJCQkJCQkJCQlyZXR1cm4gSlNPTi5zdHJpbmdpZnkocmVzLCBgdXRmLThgKTsKCQkJCQkJCQl9IGNhdGNoIChlKSB7CgkJCQkJCQkJCWNvbnNvbGUubG9nKCflj5HnlJ/lvILluLghIOino+aekOWksei0pSEnKTsKCQkJCQkJCQkJY29uc29sZS5sb2coZSk7CgkJCQkJCQkJCXJldHVybiByZXN1bHQ7CgkJCQkJCQkJfQoJCQkJCQkJfSwKCQkJCQkJfSk7CgkJCQkJfQoJCQoJCQkJCWlmICgvYXBpXC92aWRlb1wvY2hlY2tWaWRlb0NhblBsYXkvLnRlc3QodXJsKSkgewoJCQkJCQljb25zdCB4aHIgPSB0aGlzOwoJCQkJCQljb25zdCBnZXR0ZXIgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKAoJCQkJCQkJWE1MSHR0cFJlcXVlc3QucHJvdG90eXBlLAoJCQkJCQkJInJlc3BvbnNlIgoJCQkJCQkpLmdldDsKCQkJCQkJT2JqZWN0LmRlZmluZVByb3BlcnR5KHhociwgInJlc3BvbnNlVGV4dCIsIHsKCQkJCQkJCWdldDogKCkgPT4gewoJCQkJCQkJCWxldCByZXN1bHQgPSBnZXR0ZXIuY2FsbCh4aHIpOwoJCQkJCQkJCXRyeSB7CgkJCQkJCQkJCWxldCByZXMgPSBKU09OLnBhcnNlKHJlc3VsdCwgYHV0Zi04YCk7CgkJCQkJCQkJCXJlcy5kYXRhID0gdXRpbC5mb3JtYXRWaWRlbyhyZXMuZGF0YSk7CgkJCQkJCQkJCXJldHVybiBKU09OLnN0cmluZ2lmeShyZXMsIGB1dGYtOGApOwoJCQkJCQkJCX0gY2F0Y2ggKGUpIHsKCQkJCQkJCQkJY29uc29sZS5sb2coJ+WPkeeUn+W8guW4uCEg6Kej5p6Q5aSx6LSlIScpOwoJCQkJCQkJCQljb25zb2xlLmxvZyhlKTsKCQkJCQkJCQkJcmV0dXJuIHJlc3VsdDsKCQkJCQkJCQl9CgkJCQkJCQl9LAoJCQkJCQl9KQoJCQkJCX0KCQkKCQkJCQlpZigvYXBpXC9sb2dpblwvc2lnbnVwLy50ZXN0KHVybCkpewoJCQkJCQljb25zdCB4aHIgPSB0aGlzOwoJCQkJCQljb25zdCBnZXR0ZXIgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKAoJCQkJCQkJWE1MSHR0cFJlcXVlc3QucHJvdG90eXBlLAoJCQkJCQkJInJlc3BvbnNlIgoJCQkJCQkpLmdldDsKCQkJCQkJT2JqZWN0LmRlZmluZVByb3BlcnR5KHhociwgInJlc3BvbnNlVGV4dCIsIHsKCQkJCQkJCWdldDogKCkgPT4gewoJCQkJCQkJCWxldCByZXN1bHQgPSBnZXR0ZXIuY2FsbCh4aHIpOwoJCQkJCQkJCXRyeSB7CgkJCQkJCQkJCWxldCByZXMgPSBKU09OLnBhcnNlKHJlc3VsdCwgYHV0Zi04YCk7CgkJCQkJCQkJCWlmKCFyZXMuc3VjY2Vzcyl7CgkJCQkJCQkJCQl1dGlsLnNob3dUaXBzKHsgdGl0bGU6IHJlcy5tZXNzYWdlfSkKCQkJCQkJCQkJfQoJCQkJCQkJCQlyZXR1cm4gcmVzdWx0CgkJCQkJCQkJfSBjYXRjaCAoZSkgewoJCQkJCQkJCQljb25zb2xlLmxvZygn5Y+R55Sf5byC5bi4ISDop6PmnpDlpLHotKUhJyk7CgkJCQkJCQkJCWNvbnNvbGUubG9nKGUpOwoJCQkJCQkJCQlyZXR1cm4gcmVzdWx0OwoJCQkJCQkJCX0KCQkJCQkJCX0sCgkJCQkJCX0pCgkJCQkJfQoJCQkJfQ0KCQkJCW9yaWdpbk9wZW4uYXBwbHkodGhpcywgYXJndW1lbnRzKTsKCQkJfTsKCQkKCQkJY29uc3Qgb2xkU2VuZCA9IFhNTEh0dHBSZXF1ZXN0LnByb3RvdHlwZS5zZW5kOwoJCQlYTUxIdHRwUmVxdWVzdC5wcm90b3R5cGUuc2VuZCA9IGZ1bmN0aW9uICguLi5hcmdzKSB7DQoJCQkJaWYodGhpcy5fc2NvcGVfdXJsICYmIGFyZ3MubGVuZ3RoID4gMCl7CgkJCQkJdHJ5ewoJCQkJCQlhcmdzWzBdID0gYXJnc1swXS5yZXBsYWNlKGFyZ3NbMF0ubWF0Y2goLyJjb250ZW50IjoiPHA+KC4rKTxcL3A+IiwvKVsxXSx1dGlsLmRlY29hdCgnSlVVMkpUZzBKVGxHSlVVNEpVSXdKVUV5SlVVMUpUaEVKVGxCSlVVMEpVSTRKVUpDSlVVMUpUZzRKVGcySlVVMEpVSkJKVUZDSlVWR0pVSkRKVGhESlVVMUpVRTFKVUl6SlVVMEpVSTRKVUpDSlVVM0pUbERKVGxHSlVVMkpUazRKVUZHSlVVMkpUbEZKVGd4SlVVMUpUa3pKVGd4SlVVMUpVSXdKVUUwSlVVM0pUZzVKVUU1SlVWR0pVSkRKVGhESlVVMkpUbERKVGxDSlVVMUpUaEVKVGxCSlVVMEpVSTRKVUpDSlVVMkpUaERKVGd4SlVVM0pVSkNKVUZFSlVVMkpUbENKVUkwSlVVMkpUazJKVUl3JykpCgkJCQkJfWNhdGNoKGUpe2NvbnNvbGUubG9nKGUpfQoJCQkJfQoJCQkJcmV0dXJuIG9sZFNlbmQuY2FsbCh0aGlzLCAuLi5hcmdzKQoJCQl9OwoJCX0KCgkJZ2VuZXJhdGVFbGVtZW50KGNvbnRhaW5lcikgewoJCQlHTV9hZGRTdHlsZShgCgkJCQlAZm9udC1mYWNlIHsKCQkJCSAgZm9udC1mYW1pbHk6ICdpY29uZm9udCc7ICAvKiBQcm9qZWN0IGlkIDM5MTM1NjEgKi8KCQkJCSAgc3JjOiB1cmwoJy8vYXQuYWxpY2RuLmNvbS90L2MvZm9udF8zOTEzNTYxX2NwZTEzZndjYTgud29mZjI/dD0xNjk2MjEwNDkzNjcyJykgZm9ybWF0KCd3b2ZmMicpLAoJCQkJICAgICAgIHVybCgnLy9hdC5hbGljZG4uY29tL3QvYy9mb250XzM5MTM1NjFfY3BlMTNmd2NhOC53b2ZmP3Q9MTY5NjIxMDQ5MzY3MicpIGZvcm1hdCgnd29mZicpLAoJCQkJICAgICAgIHVybCgnLy9hdC5hbGljZG4uY29tL3QvYy9mb250XzM5MTM1NjFfY3BlMTNmd2NhOC50dGY/dD0xNjk2MjEwNDkzNjcyJykgZm9ybWF0KCd0cnVldHlwZScpOwoJCQkJfQoJCQkJLmljb25mb250IHsKCQkJCSAgICBmb250LWZhbWlseTogImljb25mb250IiAhaW1wb3J0YW50OwoJCQkJICAgIGZvbnQtc2l6ZTogMTZweDsKCQkJCSAgICBmb250LXN0eWxlOiBub3JtYWw7CgkJICAgICAgICAgICAgZm9udC13ZWlnaHQ6IDQwMCAhaW1wb3J0YW50OwoJCQkJICAgIC13ZWJraXQtZm9udC1zbW9vdGhpbmc6IGFudGlhbGlhc2VkOwoJCQkJICAgIC1tb3otb3N4LWZvbnQtc21vb3RoaW5nOiBncmF5c2NhbGU7CgkJCQl9CgkJCQlAa2V5ZnJhbWVzIHNob3dTZXRCb3ggewoJCQkJCTAlIHsKCQkJCQkJdHJhbnNmb3JtOiB0cmFuc2xhdGUoLTUwJSwtNTAlKSBzY2FsZSgwKTsKCQkJCQl9CgkJCQkJODAlIHsKCQkJCQkJdHJhbnNmb3JtOiB0cmFuc2xhdGUoLTUwJSwtNTAlKSBzY2FsZSgxLjEpOwoJCQkJCX0KCQkJCQkxMDAlIHsKCQkJCQkJdHJhbnNmb3JtOiB0cmFuc2xhdGUoLTUwJSwtNTAlKSBzY2FsZSgxKTsKCQkJCQl9CgkJCQl9CgkJCQlAa2V5ZnJhbWVzIGhpZFNldEJveCB7CgkJCQkJMCUgewoJCQkJCQl0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTAlLC01MCUpIHNjYWxlKDEpOwoJCQkJCX0KCQkJCQk4MCUgewoJCQkJCQl0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTAlLC01MCUpIHNjYWxlKDEuMSk7CgkJCQkJfQoJCQkJCTEwMCUgewoJCQkJCQl0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTAlLC01MCUpIHNjYWxlKDApOwoJCQkJCX0KCQkJCX0KCQkJCUBrZXlmcmFtZXMgY29sb3JBbmltYSB7CgkJCQkJMCV7CgkJCQkJCWJhY2tncm91bmQtY29sb3I6ICNmMGYwZjA7CgkJCQkJCWNvbG9yOiAjNWQ1ZDVkOwoJCQkJCQl0cmFuc2Zvcm06IHNjYWxlKDEpOwoJCQkJCX0KCQkJCQk1MCV7CgkJCQkJCXRyYW5zZm9ybTogc2NhbGUoMS4xKTsKCQkJCQl9CgkJCQkJMTAwJXsKCQkJCQkJYmFja2dyb3VuZC1jb2xvcjogI2ZmNjAyMjs7CgkJCQkJCWNvbG9yOiB3aGl0ZTsKCQkJCQkJdHJhbnNmb3JtOiBzY2FsZSgxKTsKCQkJCQl9CgkJCQl9CgkJCQlAa2V5ZnJhbWVzIHNob3dOb3RpZnlCb3ggewoJCQkJCTAlIHsKCQkJCQkJdHJhbnNmb3JtOiB0cmFuc2xhdGUoLTUwJSwtMTAwJSkgc2NhbGUoMCk7CgkJCQkJfQoJCQkJCTgwJSB7CgkJCQkJCXRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsMzVweCkgc2NhbGUoMS4xKTsKCQkJCQl9CgkJCQkJMTAwJSB7CgkJCQkJCXRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsMzVweCkgc2NhbGUoMSk7CgkJCQkJfQoJCQkJfQoJCQkJQGtleWZyYW1lcyBoaWROb3RpZnlCb3ggewoJCQkJCTAlIHsKCQkJCQkJdHJhbnNmb3JtOiB0cmFuc2xhdGUoLTUwJSwzNXB4KSBzY2FsZSgxLjEpOwoJCQkJCX0KCQkJCQk4MCUgewoJCQkJCQl0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTAlLDM1cHgpIHNjYWxlKDEpOwoJCQkJCX0KCQkJCQkxMDAlIHsKCQkJCQkJdHJhbnNmb3JtOiB0cmFuc2xhdGUoLTUwJSwtMTAwJSkgc2NhbGUoMCk7CgkJCQkJfQoJCQkJfQoJCQkJQGtleWZyYW1lcyBzY2FsZSB7CgkJCQkJMCV7CgkJCQkJCXRyYW5zZm9ybTogc2NhbGUoMSk7CgkJCQkJfQoJCQkJCTUwJXsKCQkJCQkJdHJhbnNmb3JtOiBzY2FsZSgxLjEpOwoJCQkJCX0KCQkJCQkxMDAlewoJCQkJCQl0cmFuc2Zvcm06IHNjYWxlKDEpOwoJCQkJCX0KCQkJCX0KCQkJCUBrZXlmcmFtZXMgY2lyY2xldG9rTGVmdCB7CgkJCQkgICAgMCUsMTAwJSB7CgkJCQkgICAgICAgIGxlZnQ6IDBweDsKCQkJCSAgICAgICAgd2lkdGg6IDEycHg7CgkJCQkgICAgICAgIGhlaWdodDogMTJweDsKCQkJCSAgICAgICAgei1pbmRleDogMDsKCQkJCSAgICB9CgkJCQkgICAgMjUlIHsKCQkJCSAgICAgICAgaGVpZ2h0OiAxNXB4OwoJCQkJICAgICAgICB3aWR0aDogMTVweDsKCQkJCSAgICAgICAgei1pbmRleDogMTsKCQkJCSAgICAgICAgbGVmdDogOHB4OwoJCQkJICAgICAgICB0cmFuc2Zvcm06IHNjYWxlKDEpCgkJCQkgICAgfQoJCQkJICAgIDUwJSB7CgkJCQkgICAgICAgIHdpZHRoOiAxMnB4OwoJCQkJICAgICAgICBoZWlnaHQ6IDEycHg7CgkJCQkgICAgICAgIGxlZnQ6IDIycHg7CgkJCQkgICAgfQoJCQkJICAgIDc1JSB7CgkJCQkgICAgICAgIHdpZHRoOiAxMHB4OwoJCQkJICAgICAgICBoZWlnaHQ6IDEwcHg7CgkJCQkgICAgICAgIGxlZnQ6IDhweDsKCQkJCSAgICAgICAgdHJhbnNmb3JtOiBzY2FsZSgxKQoJCQkJICAgIH0KCQkJCX0KCQkJCUBrZXlmcmFtZXMgY2lyY2xldG9rUmlnaHQgewoJCQkJICAgIDAlLDEwMCUgewoJCQkJICAgICAgICB0b3A6IDNweDsKCQkJCSAgICAgICAgbGVmdDogMjJweDsKCQkJCSAgICAgICAgd2lkdGg6IDEycHg7CgkJCQkgICAgICAgIGhlaWdodDogMTJweDsKCQkJCSAgICAgICAgei1pbmRleDogMAoJCQkJICAgIH0KCQkJCSAgICAyNSUgewoJCQkJICAgICAgICBoZWlnaHQ6IDE1cHg7CgkJCQkgICAgICAgIHdpZHRoOiAxNXB4OwoJCQkJICAgICAgICB6LWluZGV4OiAxOwoJCQkJICAgICAgICBsZWZ0OiAyNHB4OwoJCQkJICAgICAgICB0cmFuc2Zvcm06IHNjYWxlKDEpCgkJCQkgICAgfQoJCQkJICAgIDUwJSB7CgkJCQkgICAgICAgIHdpZHRoOiAxMnB4OwoJCQkJICAgICAgICBoZWlnaHQ6IDEycHg7CgkJCQkgICAgICAgIGxlZnQ6IDBweAoJCQkJICAgIH0KCQkJCSAgICA3NSUgewoJCQkJICAgICAgICB3aWR0aDogMTBweDsKCQkJCSAgICAgICAgaGVpZ2h0OiAxMHB4OwoJCQkJICAgICAgICBsZWZ0OiAyNHB4OwoJCQkJICAgICAgICB0cmFuc2Zvcm06IHNjYWxlKDEpCgkJCQkgICAgfQoJCQkJfQoJCQkJLmNvbG9yLWFuaW1hewoJCQkJCWFuaW1hdGlvbjogY29sb3JBbmltYSAuM3MgZWFzZSAxIGZvcndhcmRzOwoJCQkJfQoJCQkJLmJ0bi1hbmltYXsKCQkJCQlhbmltYXRpb246IHNjYWxlIC4zcyBlYXNlIDEgZm9yd2FyZHM7CgkJCQl9CgkJCQkubG9naW4tYnRuOjphZnRlciwubG9naW4tZm9ybS1idXR0b246OmFmdGVye2NvbnRlbnQ6JyjlpoLmsqHlj43lupTvvIzlj6/og73otKblj7flr4bnoIHplJnor6/vvIzmiJbliLfmlrDpobXpnaLlho3or5UpJztjb2xvcjojZTkxZTYzO21hcmdpbi1sZWZ0OjVweDtmb250LXNpemU6IDEwcHg7fQoJCQkJLmVsLW1lc3NhZ2UtYm94LC52YW4tdG9hc3QsLmVsLW1lc3NhZ2UsLnYtbW9kYWwsLnB1YmxpY0NvbnRhaW5lciwuY29udGFpbmVyYWR2ZXJ0aXNpbmcsI2hvbWUgLmJ0bmJveCwjaG9tZSAuYWRkYm94LC50b3BiYW5tZXIsLmJhbm5lcmxpc3RzdHlsZSwuaXNoaWRlLCNqc3hsLWJveCwjanN4bC1tYXNre2Rpc3BsYXk6bm9uZSAhaW1wb3J0YW50O3otaW5kZXg6LTk5OTk5ICFpbXBvcnRhbnQ7b3BhY2l0eTogMCFpbXBvcnRhbnQ7d2lkdGggOjAgIWltcG9ydGFudDt9CgkJCQkjd3QtcmVzb3VyY2VzLWJveHtwb3NpdGlvbjogcmVsYXRpdmU7IGJvcmRlcjogMXB4IGRhc2hlZCAjZWM4MTgxO2JhY2tncm91bmQ6ICNmZmY0ZjQ7fQoJCQkJLnNlbGwtYnRue2JvcmRlcjpub25lICFpbXBvcnRhbnQ7bWFyZ2luLXRvcDoyMHB4O30KCQkJCS5tYXJnaW4tbGVmdHsgbWFyZ2luLWxlZnQ6IDAgIWltcG9ydGFudDt9CgkJCQkuc2hvdy1zZXQtYm94eyBhbmltYXRpb246IHNob3dTZXRCb3ggMC4zcyBlYXNlIDEgZm9yd2FyZHM7fQoJCQkJLmhpZC1zZXQtYm94eyBhbmltYXRpb246IGhpZFNldEJveCAwLjNzIGVhc2UgMSBmb3J3YXJkczt9CgkJCQkuc2hvdy1ub3RpZnktYm94eyBhbmltYXRpb246IHNob3dOb3RpZnlCb3ggMC4zcyBlYXNlIDEgZm9yd2FyZHM7fQoJCQkJLmhpZC1ub3RpZnktYm94eyBhbmltYXRpb246IGhpZE5vdGlmeUJveCAwLjNzIGVhc2UgMSBmb3J3YXJkczt9CgkJCQkjd3QtbG9hZGluZy1ib3h7ZGlzcGxheTogbm9uZTtwb3NpdGlvbjogZml4ZWQ7dG9wOiAwO2xlZnQ6IDA7cmlnaHQ6IDA7Ym90dG9tOiAwO3otaW5kZXg6IDEwMDAwMDtiYWNrZ3JvdW5kLWNvbG9yOiAjMDAwMDAwNGQ7fQoJCQkJI3d0LWxvYWRpbmctYm94IC5sb2FkaW5ne3Bvc2l0aW9uOiBhYnNvbHV0ZTt3aWR0aDogMzVweDtoZWlnaHQ6IDE3cHg7dG9wOiA1MCU7bGVmdDogNTAlO3RyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsLTUwJSk7fQoJCQkJI3d0LWxvYWRpbmctYm94IC5sb2FkaW5nOjpiZWZvcmUsCgkJCQkjd3QtbG9hZGluZy1ib3ggLmxvYWRpbmc6OmFmdGVye3Bvc2l0aW9uOiBhYnNvbHV0ZTtjb250ZW50OiAiIjt0b3A6IDNweDtiYWNrZ3JvdW5kLWNvbG9yOiAjZmZlNjBmO3dpZHRoOiAxNHB4O2hlaWdodDogMTRweDtib3JkZXItcmFkaXVzOiAyMHB4O21peC1ibGVuZC1tb2RlOiBtdWx0aXBseTthbmltYXRpb246IGNpcmNsZXRva0xlZnQgMS4ycyBsaW5lYXIgaW5maW5pdGU7fQoJCQkJI3d0LWxvYWRpbmctYm94IC5sb2FkaW5nOjphZnRlcnthbmltYXRpb246IGNpcmNsZXRva1JpZ2h0IDEuMnMgbGluZWFyIGluZmluaXRlO2JhY2tncm91bmQtY29sb3I6ICM0ZGU4ZjQ7fQoJCQkJI3d0LWxlZnQtc2hvd3sgcG9zaXRpb246IGZpeGVkO2xlZnQ6IDIwcHg7dG9wOiA1MCU7dHJhbnNmb3JtOiB0cmFuc2xhdGVZKC01MCUpO3otaW5kZXg6IDk5OTk7dHJhbnNpdGlvbjogYWxsIDAuM3MgZWFzZTt9CgkJCQkjd3QtbGVmdC1zaG93IGkge2NvbG9yOiAjNWY1YjViO2ZvbnQtc2l6ZTogMjRweDtjb2xvcjogI0U5MUU2Mzt0ZXh0LXNoYWRvdzogI0U5MUU2MyAycHggMnB4IDEycHg7Zm9udC1zaXplOiAyNXB4O21hcmdpbi1sZWZ0OiAtMXB4O30KCQkJCSN3dC0ke19DT05GSUdfLnZpcEJveElkfXsKCQkJCQlwb3NpdGlvbjogZml4ZWQ7CgkJCQkJdG9wOiA1MCU7CgkJCQkJdHJhbnNmb3JtOiB0cmFuc2xhdGUoMCwgLTUwJSk7CgkJCQkJcmlnaHQ6IDEwcHg7CgkJCQkJd2lkdGg6IDQ2cHg7CgkJCQkJYm9yZGVyLXJhZGl1czogMzBweDsKCQkJCQliYWNrZ3JvdW5kOiByZ2IoNjQgNjQgNjQgLyA4MSUpOwoJCQkJCWJveC1zaGFkb3c6IDFweCAxcHggOHB4IDFweCByZ2IoOTggOTkgOTkgLyAzNCUpOwoJCQkJCXotaW5kZXg6IDk5OTk7CgkJCQkJdHJhbnNpdGlvbjogYWxsIDAuM3MgZWFzZTsKCQkJCX0KCQkJCSN3dC0ke19DT05GSUdfLnZpcEJveElkfSAuaXRlbXtwb3NpdGlvbjogcmVsYXRpdmU7aGVpZ2h0OiA2MHB4O30KCQkJCS50aXBzLXl1YW46OmJlZm9yZXsgcG9zaXRpb246IGFic29sdXRlOyBjb250ZW50OiAnJzt0b3A6IDEycHg7IHJpZ2h0OiA2cHg7d2lkdGg6IDhweDtoZWlnaHQ6IDhweDsgYm9yZGVyLXJhZGl1czogMTBweDsgYmFja2dyb3VuZC1jb2xvcjogIzVlZjQ2NDt9CgkJCQkudGlwcy15dWFuLWVycjo6YmVmb3JleyBwb3NpdGlvbjogYWJzb2x1dGU7IGNvbnRlbnQ6ICcnO3RvcDogMTJweDsgcmlnaHQ6IDZweDt3aWR0aDogOHB4O2hlaWdodDogOHB4OyBib3JkZXItcmFkaXVzOiAxMHB4OyBiYWNrZ3JvdW5kLWNvbG9yOiAjZjgzZjMyO30KCQkJCSN3dC0ke19DT05GSUdfLnZpcEJveElkfSAuaXRlbTpub3QoOmxhc3QtY2hpbGQpOjphZnRlcntwb3NpdGlvbjogYWJzb2x1dGU7Ym90dG9tOiAwO2xlZnQ6IDIyLjUlO2NvbnRlbnQ6ICcnO3dpZHRoOiA1NSU7aGVpZ2h0OiAycHg7YmFja2dyb3VuZC1jb2xvcjogI2ZmZjt9CgkJCQkjd3QtJHtfQ09ORklHXy52aXBCb3hJZH0gLml0ZW0gLmljb25mb250LCN3dC0ke19DT05GSUdfLnZpcEJveElkfSAuaXRlbSBpbWd7cG9zaXRpb246IGFic29sdXRlO3RvcDo1MCU7bGVmdDo1MCU7dHJhbnNmb3JtOiB0cmFuc2xhdGUoLTUwJSwtNTAlKX0KCQkJCSN3dC1sb2dpbi1ib3ggLmNsb3NlLCN3dC1zZXQtYm94IC5jbG9zZSwjd3Qtbm90aWZ5LWJveCAuY2xvc2V7cG9zaXRpb246IGFic29sdXRlO3JpZ2h0OiAwcHg7dG9wOiAwcHg7d2lkdGg6IDQwcHg7aGVpZ2h0OiA0MHB4O30KCQkJCSN3dC1sb2dpbi1ib3ggLmNsb3NlOjpiZWZvcmUsI3d0LWxvZ2luLWJveCAuY2xvc2U6OmFmdGVyLCN3dC1zZXQtYm94IC5jbG9zZTo6YmVmb3JlLCN3dC1zZXQtYm94IC5jbG9zZTo6YWZ0ZXIsI3d0LW5vdGlmeS1ib3ggLmNsb3NlOjpiZWZvcmUsI3d0LW5vdGlmeS1ib3ggLmNsb3NlOjphZnRlcntwb3NpdGlvbjogYWJzb2x1dGU7bGVmdDogNTAlO3RvcDogNTAlO2NvbnRlbnQ6ICcnO3dpZHRoOiAxMnB4O2hlaWdodDogMnB4O2JvcmRlci1yYWRpdXM6IDFweDtiYWNrZ3JvdW5kLWNvbG9yOiAjNmE2YTZhO3RyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsLTUwJSkgcm90YXRlKDQ1ZGVnKTt2aXNpYmlsaXR5OiB2aXNpYmxlO30KCQkJCSN3dC1sb2dpbi1ib3ggLmNsb3NlOjphZnRlciwjd3Qtc2V0LWJveCAuY2xvc2U6OmFmdGVyLCN3dC1ub3RpZnktYm94IC5jbG9zZTo6YWZ0ZXJ7dHJhbnNmb3JtOiB0cmFuc2xhdGUoLTUwJSwtNTAlKSByb3RhdGUoLTQ1ZGVnKTt9CgkJCQkjd3QtJHtfQ09ORklHXy52aXBCb3hJZH0gLmFic29sdXRlLWNlbnRlcnsgcG9zaXRpb246IGFic29sdXRlO3RvcDogNTAlO2xlZnQ6IDUwJTt0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTAlLCAtNTAlKTt9CgkJCQkjd3QtJHtfQ09ORklHXy52aXBCb3hJZH0gI3d0LW15IGltZ3sgd2lkdGg6IDI4cHg7aGVpZ2h0OiAyOHB4O2JvcmRlci1yYWRpdXM6IDMwcHg7bWFyZ2luLWxlZnQ6IDJweDt0cmFuc3Rpb246IGFsbCAwLjNzIGVhc2U7fQoJCQkJI3d0LSR7X0NPTkZJR18udmlwQm94SWR9ICN3dC1teS1zZXQgaSB7Y29sb3I6IHdoaXRlO2ZvbnQtc2l6ZTogMjRweDt0ZXh0LXNoYWRvdzogMnB4IDJweCAxNHB4ICNmZmZmZmY7Zm9udC1mYW1pbHk6ICdpY29uZm9udCc7fQoJCQkJI3d0LSR7X0NPTkZJR18udmlwQm94SWR9ICN3dC1teS1jb3B5IGksI3d0LW15LWRvd24gaSB7Y29sb3I6IHdoaXRlO2ZvbnQtc2l6ZTogMjRweDt0ZXh0LXNoYWRvdzogMnB4IDJweCAxNXB4ICNmZmZmZmY7Zm9udC1mYW1pbHk6ICdpY29uZm9udCc7fQoJCQkJI3d0LSR7X0NPTkZJR18udmlwQm94SWR9ICN3dC1teS1ub3RpZnkgaSB7Y29sb3I6IHdoaXRlO2ZvbnQtc2l6ZTogMjNweDtwYWRkaW5nOiAxMHB4IDFweDt0ZXh0LXNoYWRvdzogMnB4IDJweCAxMnB4ICNmZmZmZmY7fQoJCQkJI3d0LSR7X0NPTkZJR18udmlwQm94SWR9ICN3dC1oaWQtYm94IGkge2NvbG9yOiB3aGl0ZTtmb250LXNpemU6IDI0cHg7dGV4dC1zaGFkb3c6IDJweCAycHggMTJweCAjZmZmZmZmO2ZvbnQtc2l6ZTogMjVweDttYXJnaW4tbGVmdDogLTFweDt9CgkJCQkud3QtcGxheWVyLWJ0bi1ib3ggLnBsYXllci1idG57IHBvc2l0aW9uOmFic29sdXRlO3RvcDo0MiU7bGVmdDo1MCU7dHJhbnNmb3JtOnRyYW5zbGF0ZSgtNTAlLC01MCUpO3dpZHRoOiAyMCV9CgkJCQkud3QtcGxheWVyLWJ0bi1ib3ggLnRpcHN7IHBvc2l0aW9uOiBhYnNvbHV0ZTtib3R0b206IDIwcHg7bGVmdDo1MCU7dHJhbnNmb3JtOiB0cmFuc2xhdGVYKC01MCUpO2NvbG9yOiAjRkZDMTA3O3dpZHRoOiA4MCU7dGV4dC1hbGlnbjogY2VudGVyO2ZvbnQtc2l6ZTogMTVweDtmb250LXdlaWdodDogNTAwO30KCQkJCSN3dC1tYXNrLWJveCwjd3QtbWF4aW5kZXgtbWFza3tkaXNwbGF5Om5vbmU7IHBvc2l0aW9uOiBmaXhlZDsgdG9wOiAwOyBsZWZ0OiAwOyByaWdodDogMDsgYm90dG9tOiAwOyB6LWluZGV4OiAxMDAwMDsgYmFja2dyb3VuZC1jb2xvcjogIzAwMDAwMDU3O30KCQkJCSN3dC1tYXhpbmRleC1tYXNre3otaW5kZXg6IDkwMDAwO2Rpc3BsYXk6bm9uZTt9CgkJCQkjd3Qtc2V0LWJveHsgcG9zaXRpb246Zml4ZWQ7IHRvcDo1MCU7bGVmdDo1MCU7IHRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsLTUwJSkgc2NhbGUoMCk7b3ZlcmZsb3c6IGhpZGRlbjtiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTtib3gtc2hhZG93OiAwIDE1cHggMzBweCByZ2JhKDAsIDAsIDAsIC4xNSk7Ym9yZGVyLXJhZGl1czogMTJweDt6LWluZGV4OiAxMDAxMDtwYWRkaW5nOiAxMHB4IDE1cHg7cGFkZGluZy1yaWdodDogNXB4O2JveC1zaXppbmc6IGJvcmRlci1ib3g7fQoJCQkJI3d0LXNldC1ib3g6OmJlZm9yZXtjb250ZW50OicnO3Bvc2l0aW9uOiBhYnNvbHV0ZTt3aWR0aDogMTUwcHg7aGVpZ2h0OiAxNTBweDtib3JkZXItcmFkaXVzOiAxMDBweDtiYWNrZ3JvdW5kLWNvbG9yOiAjMjE5NkYzO3otaW5kZXg6IC0xO29wYWNpdHk6IDAuNztyaWdodDogMjAwcHg7Ym90dG9tOiAwO3RyYW5zZm9ybTogdHJhbnNsYXRlWSg1OCUpO30KCQkJCSN3dC1zZXQtYm94OjphZnRlcntjb250ZW50OicnO3Bvc2l0aW9uOiBhYnNvbHV0ZTt3aWR0aDogMTUwcHg7aGVpZ2h0OiAxNTBweDtib3JkZXItcmFkaXVzOiAxMDBweDtiYWNrZ3JvdW5kLWNvbG9yOiAjRkZDMTA3O3otaW5kZXg6IC0xO29wYWNpdHk6IDAuNzt0b3A6IDA7bGVmdDogMTc0cHg7dHJhbnNmb3JtOiB0cmFuc2xhdGVZKC01MyUpO30KCQkJCSN3dC1zZXQtYm94IC5zZWxlY3RlZC1ib3ggLnNlbGVjdGVkeyBiYWNrZ3JvdW5kLWNvbG9yOiAjZmY2MDIyO2NvbG9yOiB3aGl0ZTt9CgkJCQkjd3Qtc2V0LWJveCAudXNlci1ib3gtY29udGFpbmVye2Rpc3BsYXk6IG5vbmU7bGV0dGVyLXNwYWNpbmc6IDFweDt9CgkJCQkjd3Qtc2V0LWJveCAuaW5mby1ib3h7ZGlzcGxheTpmbGV4O2hlaWdodDogNTBweDthbGlnbi1pdGVtczogY2VudGVyO30KCQkJCSN3dC1zZXQtYm94IC5pbmZvLWJveCAuYXZhdGFyLWJveHtwb3NpdGlvbjogcmVsYXRpdmU7aGVpZ2h0OiAzNnB4O3dpZHRoOiAzNnB4O2JhY2tncm91bmQtY29sb3I6IHdoaXRlO2JvcmRlci1yYWRpdXM6IDdweDtib3gtc2hhZG93OiByZ2IoMTY2IDE2NiAxNjYgLyAyMCUpIDBweCAxcHggMjBweCAwcHg7fQoJCQkJI3d0LXNldC1ib3ggLnVzZXItYm94IC50aXRsZXt0ZXh0LWFsaWduOiBjZW50ZXI7Zm9udC13ZWlnaHQ6IDYwMDtmb250LXNpemU6IDE2cHg7Y29sb3I6ICMzYTNhM2E7fQoJCQkJI3d0LXNldC1ib3ggLnVzZXItYm94IC5kZXNje2ZsZXg6IDg7Zm9udC1zaXplOiAxMHB4O2NvbG9yOiAjNWQ1ZDVkO21hcmdpbjogMCAxMHB4O30KCQkJCSN3dC1zZXQtYm94IC51c2VyLWJveCAuYXZhdGFye3Bvc2l0aW9uOiBhYnNvbHV0ZTsgd2lkdGg6IDM2cHg7aGVpZ2h0OjM2cHg7Ym9yZGVyLXJhZGl1czogMzBweDtib3JkZXItcmFkaXVzOiA3cHg7fQoJCQkJI3d0LXRpcHMtYm94LCN3dC1kb3dubG9hZC1ib3h7IHBvc2l0aW9uOmZpeGVkO3RvcDo1MCU7bGVmdDo1MCU7dHJhbnNmb3JtOnRyYW5zbGF0ZSgtNTAlLC01MCUpIHNjYWxlKDApO292ZXJmbG93OiBoaWRkZW47d2lkdGg6IDI0MHB4O21pbi1oZWlnaHQ6MTMwcHg7YmFja2dyb3VuZC1jb2xvcjogd2hpdGU7Ym9yZGVyLXJhZGl1czoxMnB4O3otaW5kZXg6IDk1MDAwO3BhZGRpbmc6MTBweCAxNXB4O30KCQkJCSN3dC10aXBzLWJveCAudGl0bGV7Zm9udC1zaXplOiAxNnB4O3RleHQtYWxpZ246IGNlbnRlcjtmb250LXdlaWdodDogNjAwO30KCQkJCSN3dC10aXBzLWJveCAuY29udGVudHt0ZXh0LWFsaWduOiBjZW50ZXI7bWFyZ2luOiAxNHB4IDA7Zm9udC1zaXplOiAxMnB4O2NvbG9yOiAjMmEyYTJhO2ZvbnQtd2VpZ2h0OiA1MDA7fQoJCQkJI3d0LXRpcHMtYm94IC5jb250ZW50IHB7Y29sb3I6ICNmZjQ3NTc7dGV4dC1hbGlnbjogbGVmdDt9CgkJCQkjd3QtdGlwcy1ib3ggLmJ0bi1ib3h7ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDogc3BhY2UtYXJvdW5kO30KCQkJCSN3dC10aXBzLWJveCAuYnRuLWJveCBidXR0b257bWluLXdpZHRoOiA2MHB4O2hlaWdodDogMjhweDtiYWNrZ3JvdW5kLWNvbG9yOiAjZWM0MDdhO2JvcmRlci1yYWRpdXM6IDMwcHg7Y29sb3I6IHdoaXRlO2JvcmRlcjogbm9uZTtmb250LXNpemU6IDEycHg7fQoJCQkJI3d0LXRpcHMtYm94IC5idG4tYm94IC5jYW5jZWx7ZGlzcGxheTogbm9uZTtiYWNrZ3JvdW5kLWNvbG9yOiAjZWVlO2NvbG9yOiMyYTJhMmF9CgkJCQkjd3QtdGlwcy1ib3ggLmxvZ297cG9zaXRpb246IGFic29sdXRlO3RvcDogOSU7bGVmdDogMSU7IGNvbG9yOiAjZGJkYmRiOyBmb250LXNpemU6IDExcHg7dHJhbnNmb3JtOiByb3RhdGUoLTE1ZGVnKTt0ZXh0LWFsaWduOiBjZW50ZXI7fQoJCQkJI3d0LW5vdGlmeS1ib3gge3Bvc2l0aW9uOiBmaXhlZDt0b3A6IDIlO2xlZnQ6IDUwJTt0cmFuc2Zvcm06dHJhbnNsYXRlKC01MCUsLTEwMCUpIHNjYWxlKDApO292ZXJmbG93OiBoaWRkZW47d2lkdGg6IDgwJTttaW4taGVpZ2h0OiA3NXB4O2xldHRlci1zcGFjaW5nOiAxcHg7YmFja2dyb3VuZC1jb2xvcjogd2hpdGU7Y29sb3I6IzJhMmEyYTtib3JkZXItcmFkaXVzOiAxNXB4O2JveC1zaGFkb3c6IDAgMTVweCAzMHB4IHJnYmEoMCwgMCwgMCwgLjE1KTt6LWluZGV4OiA5NTAwMDt9CgkJCQkjd3Qtbm90aWZ5LWJveDo6YWZ0ZXJ7IGNvbnRlbnQ6Jyc7cG9zaXRpb246IGFic29sdXRlO3dpZHRoOiAyNTBweDtoZWlnaHQ6IDI1MHB4O2JvcmRlci1yYWRpdXM6IDIwMHB4O2JhY2tncm91bmQtY29sb3I6ICMwM0E5RjQ7ei1pbmRleDogLTE7b3BhY2l0eTogMC43O2JvdHRvbTogMDtyaWdodDogMTY2cHg7dHJhbnNmb3JtOiB0cmFuc2xhdGVZKDg1JSk7fQoJCQkJI3d0LW5vdGlmeS1ib3ggLnRpdGxleyB0ZXh0LWFsaWduOiBjZW50ZXI7aGVpZ2h0OiAzNXB4OyBsaW5lLWhlaWdodDogMzVweDtmb250LXNpemU6IDE1cHg7Zm9udC13ZWlnaHQ6IDYwMDsgY29sb3I6ICNFOTFFNjM7fQoJCQkJI3d0LW5vdGlmeS1ib3ggLmNvbnRlbnR7IGNvbG9yOiAjM2EzYTNhO3BhZGRpbmc6IDEwcHggMTVweDtmb250LXNpemU6IDEycHg7fQoJCQkJI3d0LW5vdGlmeS1ib3ggLmNvbnRlbnQgYXtjb2xvcjogIzFFODhFNTt0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTt9CgkJCQkjd3Qtbm90aWZ5LWJveCAuY29udGVudCBwe21hcmdpbi1ib3R0b206IDVweDt9CgkJCQkud3QtcGxheWVyLWJ0bi1ib3h7IHBvc2l0aW9uOmFic29sdXRlO3RvcDowO2xlZnQ6MDtyaWdodDowO2JvdHRvbTowO3otaW5kZXg6IDk5OTg7YmFja2dyb3VuZC1jb2xvcjogIzAwMDAwMDRkO30KCQkJCSN3dC12aWRlby1jb250YWluZXJ7ZGlzcGxheTogbm9uZTsgcG9zaXRpb246Zml4ZWQ7dG9wOiAwO2xlZnQ6IDA7cmlnaHQ6IDA7Ym90dG9tOiAwOyB6LWluZGV4OiA5OTk4O2JhY2tncm91bmQtY29sb3I6IGJsYWNrO30KCQkJCSN3dC12aWRlby1jb250YWluZXIgLnd0LXZpZGVveyBwb3NpdGlvbjphYnNvbHV0ZTt0b3A6NTAlO3dpZHRoOjEwMCU7dHJhbnNmb3JtOiB0cmFuc2xhdGVZKC01MCUpO2hlaWdodDogMjQwcHg7IHotaW5kZXg6IDk5OTk7fQoJCQkJI3d0LXZpZGVvLWNvbnRhaW5lciAud3QtdmlkZW8gdmlkZW97d2lkdGg6MTAwJTtoZWlnaHQ6IDEwMCU7fQoJCQkJLmRwbGF5ZXItY29udHJvbGxlcntib3R0b206IDMwcHggIWltcG9ydGFudDt9CgkJCQkubWFpbi1wbGF5ZXJ7aGVpZ2h0OiAzMDBweDt9CgkJCQkuZHBsYXllci5kcGxheWVyLWhpZGUtY29udHJvbGxlciAuZHBsYXllci1jb250cm9sbGVyeyBvcGFjaXR5OiAwICFpbXBvcnRhbnQ7dHJhbnNmb3JtOiB0cmFuc2xhdGVZKDIwMCUpICFpbXBvcnRhbnQ7fQoJCQkJLnd0LWNsb3NlLWJ0bnsgZm9udC1zaXplOiAxNXB4O3Bvc2l0aW9uOiBhYnNvbHV0ZTt0b3A6IDQwcHg7bGVmdDogMjVweDtjb2xvcjogd2hpdGU7fQoJCQkJI3d0LWRvd25sb2FkLWJveHsgei1pbmRleDogMTAwMTA7fQoJCQkJI3d0LWRvd25sb2FkLWJveCAuY2xvc2V7cG9zaXRpb246IGFic29sdXRlO3JpZ2h0OiAwcHg7dG9wOiAwcHg7d2lkdGg6IDQwcHg7aGVpZ2h0OiA0MHB4O30KCQkJCSN3dC1kb3dubG9hZC1ib3ggLmNsb3NlOjpiZWZvcmUsI3d0LWRvd25sb2FkLWJveCAuY2xvc2U6OmFmdGVye3Bvc2l0aW9uOiBhYnNvbHV0ZTtsZWZ0OiA1MCU7dG9wOiA1MCU7Y29udGVudDogJyc7d2lkdGg6IDE0cHg7aGVpZ2h0OiAycHg7Ym9yZGVyLXJhZGl1czogMXB4O2JhY2tncm91bmQtY29sb3I6ICNhZGFkYWQ7dHJhbnNmb3JtOiB0cmFuc2xhdGUoLTUwJSwtNTAlKSByb3RhdGUoNDVkZWcpO30KCQkJCSN3dC1kb3dubG9hZC1ib3ggLmNsb3NlOjphZnRlciwjd3QtZG93bmxvYWQtYm94IC5jbG9zZTo6YWZ0ZXJ7dHJhbnNmb3JtOiB0cmFuc2xhdGUoLTUwJSwtNTAlKSByb3RhdGUoLTQ1ZGVnKTt9CgkJCQkjd3QtZG93bmxvYWQtYm94OjpiZWZvcmV7Y29udGVudDonJztwb3NpdGlvbjogYWJzb2x1dGU7d2lkdGg6IDE1MHB4O2hlaWdodDogMTUwcHg7Ym9yZGVyLXJhZGl1czogMTAwcHg7YmFja2dyb3VuZC1jb2xvcjogI2U5MWU2Mzt6LWluZGV4OiAtMTtvcGFjaXR5OiAwLjc7dG9wOiAwO3JpZ2h0OiAxNTNweDt0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTQwJSk7fQoJCQkJI3d0LWRvd25sb2FkLWJveDo6YWZ0ZXJ7Y29udGVudDonJztwb3NpdGlvbjogYWJzb2x1dGU7d2lkdGg6IDE1MHB4O2hlaWdodDogMTUwcHg7Ym9yZGVyLXJhZGl1czogMTAwcHg7YmFja2dyb3VuZC1jb2xvcjogI0ZGQzEwNzt6LWluZGV4OiAtMTtvcGFjaXR5OiAwLjc7Ym90dG9tOiAwO3JpZ2h0OiAtMTAwcHg7dHJhbnNmb3JtOiB0cmFuc2xhdGVZKDMwJSk7fQoJCQkJI3d0LWRvd25sb2FkLWJveCB1bCBsaXsgaGVpZ2h0OiAzOHB4O2xpbmUtaGVpZ2h0OiAzOHB4O2ZvbnQtc2l6ZTogMTFweDt0ZXh0LWFsaWduOiBjZW50ZXI7Y29sb3I6IzkwOTA5MDtmb250LXdlaWdodDogNTAwO2JhY2tncm91bmQtY29sb3I6IHdoaXRlO2JveC1zaGFkb3c6IHJnYigxNjYgMTY2IDE2NiAvIDIwJSkgMHB4IDFweCA1cHggMXB4O21hcmdpbjogMThweCA0NXB4O2JvcmRlci1yYWRpdXM6IDQwcHg7fQoJCQkJYCkKCQkJaWYgKF9DT05GSUdfLmlzTW9iaWxlKSB7CgkJCQlHTV9hZGRTdHlsZShgCgkJICAgICAgICAgICAgI3d0LXNldC1ib3gge3dpZHRoOjcyJTt9CgkJICAgICAgICBgKTsKCQkJfQoJCQlsZXQgc2NyaXB0cyA9ICcnOwoJCQlfQ09ORklHXy5zY3JpcHRzLmZvckVhY2goKGl0ZW0sIGluZGV4KSA9PiB7CgkJCQlzY3JpcHRzICs9IGAKCQkJCQk8ZGl2IGNsYXNzPSJpbmZvLWJveCIgZGF0YS1pbmRleD0iJHtpbmRleH0iPgoJCQkJCQk8ZGl2IGNsYXNzPSJhdmF0YXItYm94Ij4KCQkJCQkJCTxpbWcgY2xhc3M9ImF2YXRhciIgc3JjPSIke2l0ZW0uaWNvbn0iLz4KCQkJCQkJPC9kaXY+CgkJCQkJCTxkaXYgY2xhc3M9ImRlc2MiPgoJCQkJCQkJPHRleHQ+JHtpdGVtLmRlc2N9PC90ZXh0PgoJCQkJCQk8L2Rpdj4KCQkJCQk8L2Rpdj4KCQkJCWA7CgkJCX0pCgoJCQkkKGNvbnRhaW5lcikuYXBwZW5kKGAKCQkgICAgICAgIDxkaXYgaWQ9Ind0LSR7X0NPTkZJR18udmlwQm94SWR9Ij4KCQkJCSAgICA8ZGl2IGlkPSJ3dC1teSIgY2xhc3M9Iml0ZW0gd3RfbXlfaGFpamlhbyI+CgkJCQkJCTxpbWcgc3JjPSJodHRwczovL21wLWFmMzA3MjY4LTFiOGEtNDgyYS1iNzVhLWI2ZTk4YjEyNTc0Mi5jZG4uYnNwYXBwLmNvbS9zeXN0ZW0vbnVsbF9zcXVhcmUucG5nIj48L2ltZz4KCQkJCSAgICA8L2Rpdj4KCQkJCSAgICA8ZGl2IGlkPSJ3dC1teS1zZXQiIGNsYXNzPSJpdGVtIHd0X3BsYXllcl9oYWlqaWFvIj4KCQkJCQkgICAgPGkgY2xhc3M9Imljb25mb250Ij4mI3hlYzA1OzwvaT4KCQkJCSAgICA8L2Rpdj4KCQkJCQk8ZGl2IGlkPSJ3dC1teS1jb3B5IiBjbGFzcz0iaXRlbSI+CgkJCQkJICAgIDxpIGNsYXNzPSJpY29uZm9udCI+JiN4ZWMwNzs8L2k+CgkJCQkJPC9kaXY+CgkJCQkJPGRpdiBpZD0id3QtbXktZG93biIgY2xhc3M9Iml0ZW0gd3RfbXlfZG93bl9oYWlqaWFvIj4KCQkJCQkgICAgPGkgY2xhc3M9Imljb25mb250Ij4mI3hlYzA5OzwvaT4KCQkJCQk8L2Rpdj4KCQkJCQk8ZGl2IGlkPSJ3dC1teS1ub3RpZnkiIGNsYXNzPSJpdGVtIHd0X215X25vdGlmeV9oYWlqaWFvIiBzdHlsZT0icGFkZGluZzogMCAxMXB4OyI+CgkJCQkJICAgIDxpIGNsYXNzPSJpY29uZm9udCI+JiN4ZWMwODs8L2k+CgkJCQkJPC9kaXY+CgkJCQkgICAgPGRpdiBpZD0id3QtaGlkLWJveCIgY2xhc3M9Iml0ZW0iPgoJCQkJCSAgICA8aSBjbGFzcz0iaWNvbmZvbnQiPiYjeGVjMDY7PC9pPgoJCQkJICAgIDwvZGl2PgoJCQkgICAgPC9kaXY+CgkJCSAgICA8ZGl2IGlkPSJ3dC1sZWZ0LXNob3ciIHN0eWxlPSJ0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNjBweCwtNTAlKTtwYWRkaW5nOiAxMHB4OyI+CgkJCQkJPGkgY2xhc3M9Imljb25mb250Ij4mI3hlNzA0OzwvaT4KCQkJICAgIDwvZGl2PgoJCQkJPGRpdiBpZD0id3QtbWFzay1ib3giPjwvZGl2PgoJCQkJPGRpdiBpZD0id3Qtc2V0LWJveCI+CgkJCQkJPGRpdiBjbGFzcz0iY2xvc2UiPjwvZGl2PgoJCQkJCTxkaXYgY2xhc3M9ImxpbmUtYm94IiBzdHlsZT0iZGlzcGxheTpub25lIj4KCQkJCQk8L2Rpdj4KCQkJCQk8ZGl2IGNsYXNzPSJ1c2VyLWJveC1jb250YWluZXIiPgoJCQkJCQk8ZGl2IGNsYXNzPSJ1c2VyLWJveCI+CgkJCQkJCQk8ZGl2IGNsYXNzPSJ0aXRsZSIgc3R5bGU9Im1hcmdpbi1ib3R0b206IDEwcHgiPuWPiuaXtuihjOS5kOW3peWFt+W6kzwvZGl2PgoJCQkJCQkJJHtzY3JpcHRzfQoJCQkJCQk8L2Rpdj4KCQkJCQk8L2Rpdj4KCQkJCTwvZGl2PgoJCQkJPGRpdiBpZD0id3QtbG9hZGluZy1ib3giPgoJCQkJCTxkaXYgY2xhc3M9ImxvYWRpbmciPjwvZGl2PgoJCQkJPC9kaXY+CgkJCQk8ZGl2IGlkPSJ3dC1tYXhpbmRleC1tYXNrIj48L2Rpdj4KCQkJCTxkaXYgaWQ9Ind0LXRpcHMtYm94Ij4KCQkJCQk8ZGl2IGNsYXNzPSJ0aXRsZSI+5o+Q56S6PC9kaXY+CgkJCQkJPGRpdiBjbGFzcz0iY29udGVudCI+PC9kaXY+CgkJCQkJPGRpdiBjbGFzcz0iYnRuLWJveCI+CgkJCQkJCTxidXR0b24gY2xhc3M9J2NhbmNlbCc+5Y+W5raIPC9idXR0b24+CgkJCQkJCTxidXR0b24gY2xhc3M9J3N1Ym1pdCc+56Gu5a6aPC9idXR0b24+CgkJCQkJPC9kaXY+CgkJCQkJPGRpdiBjbGFzcz0ibG9nbyI+CgkJCQkJCTxwPiR7dXRpbC5kZWNvYXQoJ0pUUXdhSFIwY0hNbE0wRWxNa1lsTWtacWMzaHNMbkJ5Ync9PScpfTwvcD4KCQkJCQkJPHA+diAke3N1cGVyVmlwLl9DT05GSUdfLnZlcnNpb259PC9wPgoJCQkJCTwvZGl2PgoJCQkJPC9kaXY+CgkJCQk8ZGl2IGlkPSJ3dC1ub3RpZnktYm94Ij4KCQkJCQk8ZGl2IGNsYXNzPSJjbG9zZSI+PC9kaXY+CgkJCQkJPGRpdiBjbGFzcz0idGl0bGUiPumAmuefpTwvZGl2PgoJCQkJCTxkaXYgY2xhc3M9ImNvbnRlbnQiPjwvZGl2PgoJCQkJPC9kaXY+CgkJCQk8ZGl2IGlkPSJ3dC12aWRlby1jb250YWluZXIiPgoJCQkJCTxkaXYgY2xhc3M9Ind0LWNsb3NlLWJ0biI+CgkJCQkJCTxpIGNsYXNzPSJ2YW4taWNvbiB2YW4taWNvbi1jbG9zZSI+PC9pPgoJCQkJCQk8c3BhbiBzdHlsZT0ibWFyZ2luLWxlZnQ6IDVweDsiPumAgOWHuuaSreaUvjwvc3Bhbj4KCQkJCQk8L2Rpdj4KCQkJCQk8ZGl2IGNsYXNzPSJ3dC12aWRlbyI+CgkJCQkJCTx2aWRlbyBpZD0id3QtdmlkZW8iIGNvbnRyb2xzPjwvdmlkZW8+CgkJCQkJPC9kaXY+CgkJCQk8L2Rpdj4KCQkgICAgYCkKCQkJaWYgKF9DT05GSUdfLnVzZXIgJiYgX0NPTkZJR18udXNlci5hdmF0YXIpIHsKCQkJCSQoIiN3dC1teSBpbWciKS5hZGRDbGFzcygnbWFyZ2luLWxlZnQnKQoJCQkJJCgnI3d0LW15IGltZycpLmF0dHIoJ3NyYycsIF9DT05GSUdfLnVzZXIuYXZhdGFyKQoJCQl9CgkJCXJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiByZXNvbHZlKGNvbnRhaW5lcikpOwoJCX0KCgkJYmluZEV2ZW50KGNvbnRhaW5lcikgewoJCQljb25zdCB2aXBCb3ggPSAkKGAjd3QtJHtfQ09ORklHXy52aXBCb3hJZH1gKQoJCQlpZiAoR01fZ2V0VmFsdWUoJ2hhaWppYW9faGlkX2NvbnRyb2xsZXInLCBudWxsKSkgewoJCQkJdmlwQm94LmNzcygidHJhbnNmb3JtIiwgInRyYW5zbGF0ZSgxMjUlLCAtNTAlKSIpCgkJCQkkKCcjd3QtbGVmdC1zaG93JykuY3NzKCJ0cmFuc2Zvcm0iLCAidHJhbnNsYXRlKDAsIC01MCUpIikKCQkJfQoKCQkJdmlwQm94LmZpbmQoIiN3dC1teSIpLm9uKCJjbGljayIsICgpID0+IHsKCQkJICAgIGlmKF9DT05GSUdfLnVzZXIpewoJCQkJCWlmKF9DT05GSUdfLm15QnRuT3BlbikgcmV0dXJuCgkJCQkJX0NPTkZJR18ubXlCdG5PcGVuID0gdHJ1ZQoJCQkJCSQoJyN3dC1tYXNrLWJveCcpLmNzcygnZGlzcGxheScsJ2Jsb2NrJykKCQkJCQkkKCIjd3Qtc2V0LWJveCAudXNlci1ib3gtY29udGFpbmVyIikuY3NzKCdkaXNwbGF5JywnYmxvY2snKQoJCQkJCSQoIiN3dC1zZXQtYm94IikucmVtb3ZlQ2xhc3MoJ2hpZC1zZXQtYm94JykKCQkJCQkkKCIjd3Qtc2V0LWJveCIpLmFkZENsYXNzKCdzaG93LXNldC1ib3gnKQoJCQkJCSQoJyN3dC1zZXQtYm94IC51c2VyLWJveC1jb250YWluZXIgLm5pY2tuYW1lJykuaHRtbChfQ09ORklHXy51c2VyLm5pY2tuYW1lKQoJCQkJfWVsc2V7CgkJCQkJaWYodW5zYWZlV2luZG93Lnd0X2luaXRfY29kZSl7CgkJCQkJCXV0aWwuYWRkTG9naW4oKQoJCQkJCQkkKCcjd3QtbG9naW4tbWFzaycpLmNzcygnZGlzcGxheScsJ2Jsb2NrJykKCQkJCQkJJCgiI3d0LWxvZ2luLWJveCIpLnJlbW92ZUNsYXNzKCdoaWQtc2V0LWJveCcpCgkJCQkJCSQoIiN3dC1sb2dpbi1ib3giKS5hZGRDbGFzcygnc2hvdy1zZXQtYm94JykKCQkJCQkJdHJ5ewoJCQkJCQkJJCgiI3d0LWxvZ2luLWJveCBpbnB1dCIpLnZhbChtZDV4KG1kNXgoKSwnZGUnKS5jb2RlKQoJCQkJCQl9Y2F0Y2goZSl7dXRpbC5zaG93VGlwcyh7IHRpdGxlOiBfQ09ORklHXy5pbml0RmFpbE1zZ30pfQoJCQkJCQkKCQkJCQl9ZWxzZXsKCQkJCQkJJCgnI3d0LWxvYWRpbmctYm94JykuY3NzKCdkaXNwbGF5JywgJ2Jsb2NrJykKCQkJCQkJJC5nZXRTY3JpcHQoJ2h0dHBzOi8vcmVzZXQtemZmLm9zcy1jbi1jaGVuZ2R1LmFsaXl1bmNzLmNvbS9qcy9tZDUvY29kZS5qcz9pZD0nICsgRGF0ZS5ub3coKSxmdW5jdGlvbihyLHMpewoJCQkJCQkJaWYocyA9PSAnc3VjY2VzcycpewoJCQkJCQkJCSQoJyN3dC1sb2FkaW5nLWJveCcpLmNzcygnZGlzcGxheScsICdub25lJykKCQkJCQkJCQl1dGlsLmFkZExvZ2luKCkKCQkJCQkJCQkkKCcjd3QtbG9naW4tbWFzaycpLmNzcygnZGlzcGxheScsJ2Jsb2NrJykKCQkJCQkJCQkkKCIjd3QtbG9naW4tYm94IikucmVtb3ZlQ2xhc3MoJ2hpZC1zZXQtYm94JykKCQkJCQkJCQkkKCIjd3QtbG9naW4tYm94IikuYWRkQ2xhc3MoJ3Nob3ctc2V0LWJveCcpCgkJCQkJCQkJdHJ5ewoJCQkJCQkJCQkkKCIjd3QtbG9naW4tYm94IGlucHV0IikudmFsKG1kNXgobWQ1eCgpLCdkZScpLmNvZGUpCgkJCQkJCQkJfWNhdGNoKGUpewoJCQkJCQkJCQkkKCcjd3QtbG9hZGluZy1ib3gnKS5jc3MoJ2Rpc3BsYXknLCAnbm9uZScpCgkJCQkJCQkJCXV0aWwuc2hvd1RpcHMoeyB0aXRsZTogX0NPTkZJR18uaW5pdEZhaWxNc2d9KQoJCQkJCQkJCX0KCQkJCQkJCX0KCQkJCQkJfSkKCQkJCQl9CgkJCQl9CgkJCX0pCgoJCQl2aXBCb3guZmluZCgiI3d0LW15LXNldCIpLm9uKCJjbGljayIsIGFzeW5jICgpID0+IHsKCQkJCWlmICghX0NPTkZJR18udXNlcikgewoJCQkJCSQoIiN3dC1teSIpLmNsaWNrKCkKCQkJCQlyZXR1cm4KCQkJCX0NCgkJCQlpZiAoIV9DT05GSUdfLnZpZGVvVXJsLnVybCkgewoJCQkJCSQoJyN3dC1sb2FkaW5nLWJveCcpLmNzcygnZGlzcGxheScsICdibG9jaycpCgkJCQkJZm9yIChsZXQgaSA9IDA7IGkgPCAzOyBpKyspIHsKCQkJCQkJYXdhaXQgdXRpbC5zbGVlcCgxMDAwKQoJCQkJCQlpZiAoX0NPTkZJR18udmlkZW9VcmwudXJsKSB7CgkJCQkJCQkkKCcjd3QtbG9hZGluZy1ib3gnKS5jc3MoJ2Rpc3BsYXknLCAnbm9uZScpCgkJCQkJCQlicmVhawoJCQkJCQl9CgkJCQkJfQoJCQkJCSQoJyN3dC1sb2FkaW5nLWJveCcpLmNzcygnZGlzcGxheScsICdub25lJykKCQkJCX0KCgkJCQlpZiAoX0NPTkZJR18udmlkZW9VcmwudXJsKSB7CgkJCQkJJCgnI3d0LXZpZGVvLWNvbnRhaW5lcicpLmNzcygnZGlzcGxheScsICdibG9jaycpCgkJCQkJJCgiI3d0LWhpZC1ib3giKS5jbGljaygpCgkJCQkJaWYoX0NPTkZJR18udmlkZW9VcmwudHlwZSAhPSAwKXsNCgkJCQkJCWlmKCFfQ09ORklHXy52aWRlb1VybC51cmwuc3RhcnRzV2l0aCgnYmxvYjpodHRwJykpew0KCQkJCQkJCXV0aWwuc2hvd1RpcHMoew0KCQkJCQkJCQl0aXRsZTogbG9jYXRpb24uaHJlZiArICc8L2JyPicgKyB1dGlsLmRlY29hdCgnSlVVNEpVRTNKVGcySlVVNUpVRXlKVGt4SlVVNEpVRTNKVUV6SlVVMkpUbEZKVGt3SlVVMEpVSTRKVUZFSlVVNEpVRkdKVUkzSlVVMUpUaENKVUpHSlVVMkpUa3pKVGhFSlVVMEpVSkVKVGxESlVVekpUZ3dKVGd5SlVVekpUZ3dKVGd5SlVVekpUZ3dKVGd5SlROREpUSkdZbklsTTBVbFJUVWxPRVlsT0VFbFJUWWxPVGNsUWpZbFJUZ2xRVEVsT0VNbFJUUWxRamtsT1RBbFJUZ2xPRFFsT1VFbFJUWWxPVU1sUVVNbFJUVWxPVFFsUVVZbFJUUWxRamdsT0RBbFJUY2xRa1FsT1RFbFJUY2xRVUlsT1Rsb2RIUndjeVV6UVNVeVJpVXlSbXB6ZUd3dWNISnYnKSwNCgkJCQkJCQkJaGlkQ29uZmlybTogdHJ1ZQ0KCQkJCQkJCX0pDQoJCQkJCQkJYXdhaXQgdXRpbC5zbGVlcCg1MDApDQoJCQkJCQl9DQoJCQkJCQlfQ09ORklHXy52aWRlb1VybC51cmwgPSBhd2FpdCBnZXRfbTN1OF91cmxfaGFpamlhbygpDQoJCQkJCQlpZighX0NPTkZJR18udmlkZW9VcmwudXJsIHx8ICFfQ09ORklHXy52aWRlb1VybC51cmwuaW5jbHVkZXMoJ2h0dHAnKSl7DQoJCQkJCQkJdXRpbC5zaG93VGlwcyh7DQoJCQkJCQkJCXRpdGxlOiBsb2NhdGlvbi5ocmVmICsgJzwvYnI+JyArIHV0aWwuZGVjb2F0KCdKVVUySlRoQkpVSXhKVVUySlVGRUpUZzVKVVZHSlVKREpUaERKVVU0SlVFM0pVRXpKVVUySlRsRkpUa3dKVVUxSlVFMEpVSXhKVVU0SlVJMEpVRTFKVVZHSlVKREpUaERKVVU0SlVGR0pVSTNKVVUxSlRnNEpVSTNKVVUySlRrMkpVSXdKVVU1SlVFeEpVSTFKVVU1SlRsRUpVRXlKVVUxSlRnMkpUaEVKVVUxSlVJd0pUbEVKVVU0SlVGR0pUazFKVVUySlRnNEpUazJKVVUySlVFekpUZ3dKVVUySlRsR0pVRTFKVVUySlVJMUpVSTNKVVU0SlVFM0pUa3lKVVUxSlRsREpVSXdKVVUxSlRsRUpUZ3dKVVUySlRrNEpVRkdKVVUxSlRrd0pVRTJKVVUwSlVJNEpVSkJKVVUySlVGRUpVRXpKVVUzSlRnNUpUZzRKVVUySlVJMUpVSTNKVVU0SlVFM0pUa3lKVVUxSlRsREpVSXdKVVUxSlRsRUpUZ3dLQ1ZGTmlWQlJDVkJOQ1ZGTnlVNE9TVTRPQ1ZGTmlVNVF5VkJReVZGTlNVNFJpVkJRU1ZGTmlVNU5DVkJSaVZGTmlVNFF5VTRNU1ZGTmlWQlJDVkJNeVZGTnlVNE9TVTRPQ1ZGTmlWQ05TVkNOeVZGT0NWQk55VTVNaVZGTlNVNVF5VkNNQ1ZGTlNVNVJDVTRNR2hoYVdwcFlXOGxSVGNsT0RJbFFqbGpiMjBwSlVWR0pVSkRKVGhESlVVMUpVRTJKVGd5SlVVMkpUbERKVGc1SlVVNUpUazNKVUZGSlVVNUpVRXlKVGs0SlVVMkpUZzRKVGsySlVVNUpUbERKVGd3SlVVMkpVRXlKVUZHSlVVMUpVRkVKVGt3SlVVMkpUaEZKVUU0SlVVNEpUaEVKVGt3SlVVNEpVRkdKVUkzSlVVNEpUZ3hKVGswSlVVM0pVSXpKVUpDSlVVMUpUaEdKVGt4SlVVM0pUazBKVUkxSlVVM0pVSkVKVGt4SlVVM0pVRkNKVGs1YUhSMGNITWxNMEVsTWtZbE1rWnFjM2hzTG5CeWJ5VkZOQ1ZDT0NWQlJDVkZOU1U1TkNWQlJTVkZOU1U1TUNVNFJTVkZPQ1U0TVNVNU5DVkZOeVZDTXlWQ1FpVkZOaVU1TmlWQ09TVkZOU1ZDUXlVNFJnPT0nKQ0KCQkJCQkJCX0pDQoJCQkJCQkJcmV0dXJuDQoJCQkJCQl9DQoJCQkJCQkkKCcjd3QtdGlwcy1ib3ggLmJ0bi1ib3ggLnN1Ym1pdCcpLmNsaWNrKCkNCgkJCQkJfQoJCQkJCWlmIChfQ09ORklHXy5pc01vYmlsZSAmJiBfQ09ORklHXy5pc01vYmlsZVswXSA9PSAnaVBob25lJykgew0KCQkJCQkJJCgnLnd0LXZpZGVvJykuZW1wdHkoKQoJCQkJCQkkKCcud3QtdmlkZW8nKS5hcHBlbmQoYAoJCQkJCQkJPHZpZGVvIGNvbnRyb2xzIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiPgoJCQkJCQkJICAgIDxzb3VyY2Ugc3JjPSIke19DT05GSUdfLnZpZGVvVXJsLnVybH0iIHR5cGU9ImFwcGxpY2F0aW9uL3gtbXBlZ1VSTCI+CgkJCQkJCQk8L3ZpZGVvPgoJCQkJCQlgKQoJCQkJCQkvLyBfQ09ORklHXy5obHNfZHAgPSBuZXcgRFBsYXllcih7CgkJCQkJCS8vIAljb250YWluZXI6IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoIi53dC12aWRlbyIpLAoJCQkJCQkvLyAJc2NyZWVuc2hvdDogdHJ1ZSwKCQkJCQkJLy8gCXZpZGVvOiB7CgkJCQkJCS8vIAkJdXJsOiBfQ09ORklHXy52aWRlb1VybC51cmwKCQkJCQkJLy8gCX0KCQkJCQkJLy8gfSkKCQkJCQkJLy8gX0NPTkZJR18uaGxzX2RwLnBsYXkoKQoJCQkJCX0gZWxzZSB7DQoJCQkJCQljb25zdCB2aWRlbyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy53dC12aWRlbyAjd3QtdmlkZW8nKQoJCQkJCQlfQ09ORklHXy5obHNfZHAgPSBuZXcgSGxzKCkKCQkJCQkJX0NPTkZJR18uaGxzX2RwLmxvYWRTb3VyY2UoX0NPTkZJR18udmlkZW9VcmwudXJsKQoJCQkJCQlfQ09ORklHXy5obHNfZHAuYXR0YWNoTWVkaWEodmlkZW8pCgkJCQkJCV9DT05GSUdfLmhsc19kcC5vbihIbHMuRXZlbnRzLk1BTklGRVNUX1BBUlNFRCwgZnVuY3Rpb24oKSB7CgkJCQkJCQl2aWRlby5wbGF5KCkKCQkJCQkJfSkKCQkJCQl9CgkJCQl9CgkJCQlpZiAoIV9DT05GSUdfLnZpZGVvVXJsLnVybCkgewoJCQkJCXV0aWwuc2hvd1RpcHMoewoJCQkJCQl0aXRsZTogbG9jYXRpb24uaHJlZiArICc8L2JyPuaKseatieacquajgOa1i+WIsOW4luWtkOinhumike+8jOWPr+iDveatpOa1j+iniOWZqOS4jeWFvOWuuShpb3Pkvb/nlKhzYWZhcmkrc3RheeaIluiAhXZpYea1j+iniOWZqO+8jOWuieWNk+eUqHZpYea1j+iniOWZqCknCgkJCQkJfSkKCQkJCX0KCQkJfSkKCgkJCSQoJyN3dC12aWRlby1jb250YWluZXIgZGl2Jykub24oJ2NsaWNrJywgZnVuY3Rpb24oZSkgewoJCQkJZS5zdG9wUHJvcGFnYXRpb24oKQoJCQl9KQoKCQkJJCgnLnd0LWNsb3NlLWJ0bicpLm9uKCdjbGljaycsIGZ1bmN0aW9uKCkgewoJCQkJJCgnI3d0LXZpZGVvLWNvbnRhaW5lcicpLmNzcygnZGlzcGxheScsICdub25lJykKCQkJCWlmIChfQ09ORklHXy5obHNfZHApIF9DT05GSUdfLmhsc19kcC5kZXN0cm95KCkKCQkJCSQoIiN3dC1sZWZ0LXNob3ciKS5jbGljaygpOwoJCQl9KQoKCQkJdmlwQm94LmZpbmQoIiN3dC1teS1jb3B5Iikub24oImNsaWNrIiwgYXN5bmMgKCkgPT4gewoJCQkJaWYgKCFfQ09ORklHXy51c2VyKSB7CgkJCQkJJCgiI3d0LW15IikuY2xpY2soKQoJCQkJCXJldHVybgoJCQkJfQoJCQkJaWYgKCFfQ09ORklHXy52aWRlb1VybC51cmwpIHsKCQkJCQkkKCcjd3QtbG9hZGluZy1ib3gnKS5jc3MoJ2Rpc3BsYXknLCAnYmxvY2snKQoJCQkJCWZvciAobGV0IGkgPSAwOyBpIDwgMzsgaSsrKSB7CgkJCQkJCWF3YWl0IHV0aWwuc2xlZXAoMTAwMCkKCQkJCQkJaWYgKF9DT05GSUdfLnZpZGVvVXJsLnVybCkgewoJCQkJCQkJJCgnI3d0LWxvYWRpbmctYm94JykuY3NzKCdkaXNwbGF5JywgJ25vbmUnKQoJCQkJCQkJYnJlYWsKCQkJCQkJfQoJCQkJCX0KCQkJCX0KCQkJCSQoJyN3dC1sb2FkaW5nLWJveCcpLmNzcygnZGlzcGxheScsICdub25lJykKCQkJCWlmICghX0NPTkZJR18udmlkZW9VcmwudXJsKSB7CgkJCQkJdXRpbC5zaG93VGlwcyh7CgkJCQkJCXRpdGxlOiBsb2NhdGlvbi5ocmVmICsgJzwvYnI+5oqx5q2J5pyq5qOA5rWL5Yiw5biW5a2Q6KeG6aKR77yM5Y+v6IO95q2k5rWP6KeI5Zmo5LiN5YW85a65KGlvc+S9v+eUqHNhZmFyaStzdGF55oiW6ICFdmlh5rWP6KeI5Zmo77yM5a6J5Y2T55Sodmlh5rWP6KeI5ZmoKScKCQkJCQl9KQoJCQkJfWVsc2V7CgkJCQkJaWYoIV9DT05GSUdfLnZpZGVvVXJsLnVybC5pbmNsdWRlcygnLm0zdTgnKSl7CgkJCQkJCXV0aWwuY29weVRleHQoX0NPTkZJR18udmlkZW9VcmwudXJsKS50aGVuKHJlcyA9PiB7CgkJCQkJCQl1dGlsLnNob3dUaXBzKHsKCQkJCQkJCQl0aXRsZTogX0NPTkZJR18udmlkZW9VcmwudXJsKyAn5pqC5LiN5pSv5oyB5L2/55So77yM6K+3562J5b6F5L+u5aSNJwoJCQkJCQkJfSkKCQkJCQkJfSkKCQkJCQl9ZWxzZXsKCQkJCQkJdXRpbC5jb3B5VGV4dChfQ09ORklHXy52aWRlb1VybC51cmwpLnRoZW4ocmVzID0+IHsKCQkJCQkJCXV0aWwuc2hvd1RpcHMoewoJCQkJCQkJCXRpdGxlOiAn6KeG6aKR5Zyw5Z2A5aSN5Yi25oiQ5YqfJwoJCQkJCQkJfSkKCQkJCQkJfSkKCQkJCQl9CgkJCQl9CgkJCX0pCgoJCQl2aXBCb3guZmluZCgiI3d0LW15LWRvd24iKS5vbigiY2xpY2siLCAoKSA9PiB7CgkJCQlpZiAoIV9DT05GSUdfLnVzZXIpIHsKCQkJCQkkKCIjd3QtbXkiKS5jbGljaygpCgkJCQkJcmV0dXJuCgkJCQl9CgkJCQlpZihfQ09ORklHXy52aWRlb1VybC51cmwgJiYgIV9DT05GSUdfLnZpZGVvVXJsLnVybC5pbmNsdWRlcygnLm0zdTgnKSl7CgkJCQkJdXRpbC5zaG93VGlwcyh7CgkJCQkJCXRpdGxlOiAn5pqC5LiN5pSv5oyB5LiL6L2977yM6K+3562J5b6F5L+u5aSNJwoJCQkJCX0pCgkJCQkJcmV0dXJuCgkJCQl9CgkJCQl1dGlsLnNob3dEb3duTG9hZFdpbmRvdygpCgkJCX0pCgoJCQl2aXBCb3guZmluZCgiI3d0LWhpZC1ib3giKS5vbigiY2xpY2siLCAoKSA9PiB7CgkJCQl2aXBCb3guY3NzKCJ0cmFuc2Zvcm0iLCAidHJhbnNsYXRlKDEyNSUsIC01MCUpIik7CgkJCQkkKCcjd3QtbGVmdC1zaG93JykuY3NzKCJ0cmFuc2Zvcm0iLCAidHJhbnNsYXRlKDAsIC01MCUpIikKCQkJCUdNX3NldFZhbHVlKCdoYWlqaWFvX2hpZF9jb250cm9sbGVyJywgMSkKCQkJfSkKCgkJCSQoJyN3dC1sZWZ0LXNob3cnKS5vbignY2xpY2snLCAoKSA9PiB7CgkJCQkkKCcjd3QtbGVmdC1zaG93JykuY3NzKCJ0cmFuc2Zvcm0iLCAidHJhbnNsYXRlKC02MHB4LCAtNTAlKSIpOwoJCQkJdmlwQm94LmNzcygidHJhbnNmb3JtIiwgInRyYW5zbGF0ZSgwLCAtNTAlKSIpCgkJCQlHTV9zZXRWYWx1ZSgnaGFpamlhb19oaWRfY29udHJvbGxlcicsICcnKQoJCQl9KQoKCQkJJCgnI3d0LW1hc2stYm94Jykub24oJ2NsaWNrJywgKCkgPT4gewoJCQkJJCgnI3d0LW1hc2stYm94JykuY3NzKCdkaXNwbGF5JywgJ25vbmUnKQoJCQkJJCgiI3d0LXNldC1ib3giKS5yZW1vdmVDbGFzcygnc2hvdy1zZXQtYm94Jyk7CgkJCQkkKCIjd3Qtc2V0LWJveCIpLmFkZENsYXNzKCdoaWQtc2V0LWJveCcpCgkJCQkkKCIjd3QtZG93bmxvYWQtYm94IikucmVtb3ZlQ2xhc3MoJ3Nob3ctc2V0LWJveCcpOwoJCQkJJCgiI3d0LWRvd25sb2FkLWJveCIpLmFkZENsYXNzKCdoaWQtc2V0LWJveCcpCgkJCQlzZXRUaW1lb3V0KCgpID0+IHsKCQkJCQkkKCIjd3Qtc2V0LWJveCAubGluZS1ib3giKS5jc3MoJ2Rpc3BsYXknLCAnbm9uZScpOwoJCQkJCSQoIiN3dC1zZXQtYm94IC51c2VyLWJveC1jb250YWluZXIiKS5jc3MoJ2Rpc3BsYXknLCAnbm9uZScpCgkJCQl9LCA1MDApCgkJCX0pCgoJCQkkKCcjd3Qtc2V0LWJveCAudXNlci1ib3gtY29udGFpbmVyIC51c2VyLWJveCAuaW5mby1ib3gnKS5vbignY2xpY2snLCBmdW5jdGlvbihlKSB7CgkJCQlsZXQgaW5kZXggPSAnJwoJCQkJdHJ5IHsKCQkJCQlpbmRleCA9IE51bWJlcihlLmN1cnJlbnRUYXJnZXQuYXR0cmlidXRlc1snZGF0YS1pbmRleCddLnZhbHVlKQoJCQkJfSBjYXRjaCAoZSkge30KCQkJCWlmIChfQ09ORklHXy5zY3JpcHRzW2luZGV4XS5tc2cpIHsKCQkJCQl1dGlsLnNob3dUaXBzKHsKCQkJCQkJdGl0bGU6IF9DT05GSUdfLnNjcmlwdHNbaW5kZXhdLm1zZwoJCQkJCX0pCgkJCQkJcmV0dXJuCgkJCQl9OwoJCQkJaWYgKGluZGV4ICE9IChfQ09ORklHXy5zY3JpcHRzLmxlbmd0aCAtIDEpKSB7CgkJCQkJdXRpbC5zaG93VGlwcyh7CgkJCQkJCXRpdGxlOiB1dGlsLmRlY29hdCgnSlVVNEpVRkdKVUkzSlVVMUpUbERKVUU0SlVVM0pVSkVKVGt4SlVVM0pVRkNKVGs1YUhSMGNITWxNMEVsTWtZbE1rWnFjM2hzTG5CeWJ5VkZOQ1ZDT0NWQlJDVkZPQ1U0UlNWQ055VkZOU1U0UmlVNU5nPT0nKQoJCQkJCX0pCgkJCQl9IGVsc2UgewoJCQkJCXdpbmRvdy5sb2NhdGlvbi5ocmVmID0gX0NPTkZJR18uc2NyaXB0c1tpbmRleF0udXJsCgkJCQl9CgkJCX0pCgoJCQkkKCIjd3Qtc2V0LWJveCAuY2xvc2UiKS5vbigiY2xpY2siLCAoKSA9PiB7CgkJCQkkKCcjd3QtbWFzay1ib3gnKS5jbGljaygpCgkJCX0pCgoJCQl2aXBCb3guZmluZCgiI3d0LW15LW5vdGlmeSIpLm9uKCJjbGljayIsICgpID0+IHsKCQkJCWlmIChfQ09ORklHXy5zaG93Tm90aWZ5KSB7CgkJCQkJJCgnI3d0LW5vdGlmeS1ib3gnKS5jbGljaygpCgkJCQl9IGVsc2UgewoJCQkJCWNvbnN0IG5vdGlmeSA9IEdNX2dldFZhbHVlKCdoYWlqaWFvX25vdGlmeScsICcnKTsKCQkJCQlpZiAobm90aWZ5ICYmIChub3RpZnkuZGF0ZSA9PSBuZXcgRGF0ZSgpLnNldEhvdXJzKDAsIDAsIDAsIDApKSkgewoJCQkJCQl1dGlsLnNob3dOb3RpZnkoewoJCQkJCQkJdGl0bGU6IG5vdGlmeS5tc2cKCQkJCQkJfSkKCQkJCQl9IGVsc2UgewoJCQkJCQl1dGlsLnNob3dOb3RpZnkoewoJCQkJCQkJdGl0bGU6ICfov5jmsqHmnInpgJrnn6Xkv6Hmga8nCgkJCQkJCX0pCgkJCQkJfTsKCQkJCQl1dGlsLnNob3dBbmRIaWRUaXBzKCd3dF9teV9ub3RpZnlfaGFpamlhbycsICdzZXQnLCBmYWxzZSkKCQkJCX0KCQkJfSkKCgkJCWlmICghX0NPTkZJR18udXNlcikgewoJCQkJdXRpbC5hZGRMb2dpbigpCgkJCQl1dGlsLmZpbmRUYXJnZXRFbGVtZW50KCcjd3QtbXknKS50aGVuKHJlcyA9PnsKCQkJCQlzZXRUaW1lb3V0KCgpPT57CgkJCQkJCXJlcy5jbGljaygpCgkJCQkJfSwyNTAwKQoJCQkJfSkKCQkJfQoJCQlpZih1bnNhZmVXaW5kb3cud3RfaGFpamlhb19zY3JpcHQgPiAxKXsKCQkJCWNvbnN0IGNvbnRyb2xsZXJCb3hJZCA9ICcjd3QtJyArIF9DT05GSUdfLnZpcEJveElkCgkJCQkkKGNvbnRyb2xsZXJCb3hJZCkuYXBwZW5kKGAKCQkJCQk8ZGl2IGNsYXNzPSJudW0tZXJyb3IiIHN0eWxlPSJwb3NpdGlvbjogYWJzb2x1dGU7dG9wOiA0cHg7IGxlZnQ6IDUwJTt0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTUwJSk7Zm9udC1zaXplOiAxMHB4O2NvbG9yOiByZWQ7ei1pbmRleDogLTE7Ij4KCQkJCQkJJHt1bnNhZmVXaW5kb3cud3RfaGFpamlhb19zY3JpcHR9CgkJCQkJPC9kaXY+CgkJCQlgKQoJCQl9CgkJfQoJfQoKCXJldHVybiB7CgkJc3RhcnQ6ICgpID0+IHsKCQkJdW5zYWZlV2luZG93Lnd0X2hhaWppYW9fc2NyaXB0ID0gdW5zYWZlV2luZG93Lnd0X2hhaWppYW9fc2NyaXB0PyB1bnNhZmVXaW5kb3cud3RfaGFpamlhb19zY3JpcHQgKys6IDEKCQkJY29uc3Qgd3RfaGFpamlhb19maXJzdF91c2UgPSBHTV9nZXRWYWx1ZSgnd3RfaGFpamlhb19maXJzdF91c2UnLCAnJykKCQkJaWYgKCF3dF9oYWlqaWFvX2ZpcnN0X3VzZSkgR01fc2V0VmFsdWUoJ3d0X2hhaWppYW9fZmlyc3RfdXNlJywgRGF0ZS5ub3coKSArIChNYXRoLnJvdW5kKE1hdGgKCQkJCS5yYW5kb20oKSAqIDg5OTk5OSArIDEwMDAwMCkgKyAnJykpCgkJCV9DT05GSUdfLnVzZXIgPSBHTV9nZXRWYWx1ZSgnanN4bF91c2VyJywgJycpCgkJCWlmIChfQ09ORklHXy51c2VyKSB7CgkJCQlpZiAoX0NPTkZJR18udXNlci5sb2dpbl9kYXRlICYmIChfQ09ORklHXy51c2VyLmxvZ2luX2RhdGUgIT0gbmV3IERhdGUoKS5zZXRIb3VycygwLCAwLCAwLAoJCQkJCQkwKSkpIHsKCQkJCQlfQ09ORklHXy51c2VyID0gJycKCQkJCQlHTV9zZXRWYWx1ZSgnanN4bF91c2VyJywgJycpCgkJCQl9CgkJCX0KCQkJbmV3IEJhc2VDb25zdW1lcigpLnBhcnNlKCkKCQl9LAoJCV9DT05GSUdfCgl9Cn0pKCk7CgooZnVuY3Rpb24oKXsJCglpZihsb2NhdGlvbi5ocmVmLmluY2x1ZGVzKCd0b29scy5idWdzY2FuZXIuY29tJykpewoJCXV0aWwuZmluZFRhcmdldEVsZW1lbnQoJy5pbnB1dC1ncm91cCBpbnB1dCcpLnRoZW4ocmVzID0+ewoJCQljb25zdCB1cmwgPSBsb2NhdGlvbi5zZWFyY2gucmVwbGFjZSgnP20zdTg9JywnJykucmVwbGFjZSgvXHMqL2csIiIpCgkJCWlmKHVybCAmJiB1cmwuc3RhcnRzV2l0aCgnaHR0cCcpKXsKCQkJCSQocmVzKS52YWwodXJsKQoJCQl9CgkJfSkKCQlyZXR1cm4KCX0KCWlmKGxvY2F0aW9uLmhyZWYuaW5jbHVkZXMoJ3Rvb2xzLnRoYXR3aW5kLmNvbScpKXsKCQlHTV9hZGRTdHlsZShgLnRvcC1hZHtkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7fWApCgkJdXRpbC5maW5kVGFyZ2V0RWxlbWVudCgnLmJ4LS10ZXh0LWlucHV0X19maWVsZC1vdXRlci13cmFwcGVyIGlucHV0JywxMCkudGhlbihyZXMgPT57CgkJCSQocmVzKS52YWwoRGF0ZS5ub3coKSkKCQkJcmVzLmRpc3BhdGNoRXZlbnQobmV3IEV2ZW50KCJpbnB1dCIpKQoJCX0pCgkJcmV0dXJuCgl9CglpZihsb2NhdGlvbi5ocmVmLmluY2x1ZGVzKCdibG9nLmx1Y2tseS1tancuY24nKSl7CgkJR01fYWRkU3R5bGUoYAoJCQkjbS1hcHAgYSwubS1wLXRlbXAtdXJsLC5tLXAtY3Jvc3MsLm0tcC1pbnB1dC1jb250YWluZXIgZGl2Om50aC1vZi10eXBlKDEpe2Rpc3BsYXk6IG5vbmUgIWltcG9ydGFudDt9CgkJCS5tLXAtaW5wdXQtY29udGFpbmVyeyBkaXNwbGF5OiBibG9jazt9CgkJCS5tLXAtaW5wdXQtY29udGFpbmVyIGlucHV0eyB3aWR0aDogMTAwJTtmb250LXNpemU6IDEycHg7bWFyZ2luLWJvdHRvbTogNXB4O30KCQkJLm0tcC1pbnB1dC1jb250YWluZXIgZGl2eyBoZWlnaHQ6IDQ1cHg7bGluZS1oZWlnaHQ6IDQ1cHg7Zm9udC1zaXplOiAxNXB4O21hcmdpbi10b3A6IDNweDt9CgkJCS5tLXAtc3RyZWFte2xpbmUtaGVpZ2h0OiBub3JtYWw7Zm9udC1zaXplOiAxMnB4O30KCQlgKQoJCXJldHVybgoJfQoKCWNvbnN0IG9sZGFkZCA9IEV2ZW50VGFyZ2V0LnByb3RvdHlwZS5hZGRFdmVudExpc3RlbmVyCglFdmVudFRhcmdldC5wcm90b3R5cGUuYWRkRXZlbnRMaXN0ZW5lciA9IGFzeW5jIGZ1bmN0aW9uICguLi5hcmdzKXsKCQlpZihhcmdzWzBdID09ICdjbGljaycpewoJCQlpZih0aGlzLmNsYXNzTmFtZSA9PSAnbG9naW4tYnRuJyB8fCB0aGlzLmNsYXNzTmFtZSA9PSAnZWwtYnV0dG9uIGxvZ2luLWZvcm0tYnV0dG9uIGVsLWJ1dHRvbi0tcHJpbWFyeScpewoJCQkJY29uc3QgdXNlciA9IEdNX2dldFZhbHVlKCdoYWlqaWFvX3VzZXJwd2QnLCcnKQoJCQkJaWYodXNlcil7CgkJCQkJY29uc3QgZSA9IG5ldyBFdmVudCgiaW5wdXQiKQoJCQkJCXV0aWwuZmluZFRhcmdldEVsZW1lbnQoJ2lucHV0W3BsYWNlaG9sZGVyPSLor7fovpPlhaXnlKjmiLflkI0v6YKu566xIl0saW5wdXRbcGxhY2Vob2xkZXI9Iuivt+i+k+WFpeeUqOaIt+WQjSJdJykudGhlbihyZXMgPT57CgkJCQkJCSQocmVzKS52YWwodXNlci51c2VybmFtZSkKCQkJCQkJcmVzLmRpc3BhdGNoRXZlbnQoZSkKCQkJCQkJdXRpbC5maW5kVGFyZ2V0RWxlbWVudCgnaW5wdXRbdHlwZT0icGFzc3dvcmQiXScpLnRoZW4ocmVzID0+ewoJCQkJCQkJJChyZXMpLnZhbCh1c2VyLnB3ZCkKCQkJCQkJCXJlcy5kaXNwYXRjaEV2ZW50KGUpCgkJCQkJCX0pCgkJCQkJfSkKCQkJCX0KCQkJfQoJCX0KCQlvbGRhZGQuY2FsbCh0aGlzLC4uLmFyZ3MpCgl9CgoJc3VwZXJWaXAuc3RhcnQoKTsKfSkoKTs=
Add Comment
Please, Sign In to add comment