分身AI.com × 自分を知るワーク(Session 2)
Session 2 / 5
価値観・信念 (Values & Beliefs)
次は「何を大事にして、何を守る人か」を整理します。
全10問 / 所要時間: 約10-15分
Q1 / 10
10%
なぜそう思う?(任意)
スキップしました。後からいつでも答え直せます
折り返し地点です
あと5問であなたの判断軸が完成します。
ここまでの回答はすべて自動保存されています。
Session 2 完了!
0
回答数
0
スキップ数
全体進捗(全48問)
0%
あなたの軸が見えました。次回は、強みと盲点を一緒に扱います。
このブラウザに自動保存済みです。次回は同じ端末から続きを再開できます。
CiAgICAoZnVuY3Rpb24gKCkgewogICAgICB2YXIgcWZzU2NyaXB0ID0gZG9jdW1lbnQuY3VycmVudFNjcmlwdDsKICAgICAgdmFyIHFmc0NvbnRhaW5lciA9IHFmc1NjcmlwdCA/IHFmc1NjcmlwdC5jbG9zZXN0KCcucWYtc291bC1jb250YWluZXInKSA6IG51bGw7CiAgICAgIGlmICghcWZzQ29udGFpbmVyKSB7CiAgICAgICAgcmV0dXJuOwogICAgICB9CgogICAgICB2YXIgdXJsUGFyYW1zID0gbmV3IFVSTFNlYXJjaFBhcmFtcyh3aW5kb3cubG9jYXRpb24uc2VhcmNoKTsKCiAgICAgIGZ1bmN0aW9uIHFmT25lKHNlbGVjdG9yKSB7CiAgICAgICAgcmV0dXJuIHFmc0NvbnRhaW5lci5xdWVyeVNlbGVjdG9yKHNlbGVjdG9yKTsKICAgICAgfQoKICAgICAgZnVuY3Rpb24gcWZBbGwoc2VsZWN0b3IpIHsKICAgICAgICByZXR1cm4gcWZzQ29udGFpbmVyLnF1ZXJ5U2VsZWN0b3JBbGwoc2VsZWN0b3IpOwogICAgICB9CgogICAgICAvKiDilIDilIAgUXVlc3Rpb25zIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgCAqLwoKICAgICAgdmFyIFFGX1NPVUxfUVVFU1RJT05TID0gWwogICAgICAgIHsgaWQ6ICdCMScsIHR5cGU6ICdzaG9ydF90ZXh0JywgcXVlc3Rpb246ICfku5XkuovjgafjgIzjgZPjgozjgaDjgZHjga/ntbblr77jgavjgoTjgonjgarjgYTjgI3jgajmsbrjgoHjgabjgYTjgovjgZPjgajjga/kvZXjgafjgZnjgYvvvJ8nLCBwbGFjZWhvbGRlcjogJ+S+izog5ZiY44KS44Gk44GP5Za25qWt44CB5a6J5aOy44KK44CB5L6h5YCk6Kaz44Gu5ZCI44KP44Gq44GE5qGI5Lu2Li4uJywgYmJTZWN0aW9uOiAnU09VTCcsIGJiRmllbGQ6ICfku67mg7PmlbXjg7vmraPnvqknIH0sCiAgICAgICAgeyBpZDogJ0IyJywgdHlwZTogJ2xvbmdfdGV4dCcsIHF1ZXN0aW9uOiAn5aSa44GP44Gu5Lq644Gr5Y+N5a++44GV44KM44Gm44KC44CB44GC44Gq44Gf44GM5L+h44GY44Gm44GE44KL44GT44Go44Gv5L2V44Gn44GZ44GL77yfJywgcGxhY2Vob2xkZXI6ICfjganjgpPjgarkv6Hlv7XjgpLmjIHjgaHjgIHjgarjgZzjgZ3jgozjgpLkv6HjgZjntprjgZHjgabjgYTjgb7jgZnjgYsuLi4nLCBiYlNlY3Rpb246ICdTT1VMJywgYmJGaWVsZDogJ+S7ruaDs+aVteODu+ato+e+qScgfSwKICAgICAgICB7IGlkOiAnQjMnLCB0eXBlOiAnc2hvcnRfdGV4dCcsIHF1ZXN0aW9uOiAn44OT44K444ON44K544Gu54++5aC044Gn44CB44GC44Gq44Gf44GM5pyA44KC5oCS44KK44KS5oSf44GY44KL44Gu44Gv44Gp44KT44Gq5pmC44Gn44GZ44GL77yfJywgcGxhY2Vob2xkZXI6ICfkvos6IOS4jeiqoOWun+OBquWvvuW/nOOAgemhp+Wuoui7veimluOAgee0hOadn+OCkuWuiOOCieOBquOBhC4uLicsIGJiU2VjdGlvbjogJ1NPVUwrR09WRVJOQU5DRScsIGJiRmllbGQ6ICfmpa3nlYzjgbjjga7mgJLjgoonIH0sCiAgICAgICAgeyBpZDogJ0I0JywgdHlwZTogJ3NjYWxlJywgcXVlc3Rpb246ICfjgIzlo7LkuIrjgojjgorjgoLkvqHlgKToprPjgpLlhKrlhYjjgZnjgovjgI3luqblkIjjgYTjgpLpgbjjgpPjgafjgY/jgaDjgZXjgYTjgIInLCBzY2FsZUxhYmVsczogWyfjgbvjgbzlhKrlhYjjgZfjgarjgYQnLCAn54q25rOB5qyh56ysJywgJ+WNiuOAhScsICfjgYvjgarjgorlhKrlhYgnLCAn5bi444Gr5YSq5YWIJ10sIGJiU2VjdGlvbjogJ1NPVUwrR09WRVJOQU5DRScsIGJiRmllbGQ6ICfnpoHmraLkuovpoIUnIH0sCiAgICAgICAgeyBpZDogJ0I1JywgdHlwZTogJ2Nob2ljZScsIHF1ZXN0aW9uOiAn5aOy5LiK44GM5aSn44GN44GE44GM6YGV5ZKM5oSf44Gu44GC44KL5qGI5Lu244GM5p2l44Gf44KJ44Gp44GG44GX44G+44GZ44GL77yfJywgb3B0aW9uczogWyflj5fjgZHjgosnLCAn5p2h5Lu244KS6Kq/5pW044GX44Gm5Y+X44GR44KLJywgJ+S4gOaXpuS/neeVmeOBmeOCiycsICfmlq3jgosnXSwgYmJTZWN0aW9uOiAnU09VTCtHT1ZFUk5BTkNFJywgYmJGaWVsZDogJ+emgeatouS6i+mghScgfSwKICAgICAgICB7IGlkOiAnQjYnLCB0eXBlOiAnY2hvaWNlJywgcXVlc3Rpb246ICfoi6bmiYvjgarnm7jmiYvjgajjgoLljZTmpa3jgYzlv4XopoHjgarmmYLjgIHjgYLjgarjgZ/jga7ln7rmnKzlp7/li6Ljgavov5HjgYTjga7jga/vvJ8nLCBvcHRpb25zOiBbJ+W9ueWJsuOCkuaYjueiuuWMluOBl+OBpumAsuOCgeOCiycsICfjgb7jgZrplqLkv4Lmp4vnr4njgZnjgosnLCAn5pyA5bCP5o6l54K544Gn6YCy44KB44KLJywgJ+WNlOalreiHquS9k+OCkumBv+OBkeOCiyddLCBiYlNlY3Rpb246ICdTT1VMK0dPVkVSTkFOQ0UnLCBiYkZpZWxkOiAn56aB5q2i5LqL6aCFJyB9LAogICAgICAgIHsgaWQ6ICdCNycsIHR5cGU6ICdzaG9ydF90ZXh0JywgcXVlc3Rpb246ICfkvp3poLzjgpLmlq3jgovmmYLjga7jgIHjgYLjgarjgZ/jga7liKTmlq3ln7rmupbjgpLmlZnjgYjjgabjgY/jgaDjgZXjgYTjgIInLCBwbGFjZWhvbGRlcjogJ+S+izog6Ieq5YiG44Gu5L6h5YCk6Kaz44Go5ZCI44KP44Gq44GE44CB5pmC6ZaT5a++5Yq55p6c44GM5L2O44GELi4uJywgYmJTZWN0aW9uOiAnU09VTCcsIGJiRmllbGQ6ICfku67mg7PmlbXjg7vmraPnvqknIH0sCiAgICAgICAgeyBpZDogJ0I4JywgdHlwZTogJ2xvbmdfdGV4dCcsIHF1ZXN0aW9uOiAn44GC44Gq44Gf44Gr44Go44Gj44Gm44CM6Imv44GE5LuV5LqL44GM44Gn44GN44Gf54q25oWL44CN44Go44Gv5L2V44Gn44GZ44GL77yfJywgcGxhY2Vob2xkZXI6ICfkvZXjgpLln7rmupbjgavjgIzoia/jgYTku5XkuovjgI3jgajliKTmlq3jgZfjgb7jgZnjgYsuLi4nLCBiYlNlY3Rpb246ICdTVFJBVEVHWScsIGJiRmllbGQ6ICfkvqHmoLzjga7mraPlvZPmgKcnIH0sCiAgICAgICAgeyBpZDogJ0I5JywgdHlwZTogJ2Nob2ljZScsIHF1ZXN0aW9uOiAn5aSx5pWX44GX44Gf55u05b6M44CB5pyA5YSq5YWI44Gn5Y+W44KL6KGM5YuV44Gr6L+R44GE44Gu44Gv77yfJywgb3B0aW9uczogWyfljp/lm6DliIbmnpAnLCAn6aGn5a6i44OV44Kp44Ot44O8JywgJ+S7lee1hOOBv+S/ruatoycsICfjgb7jgZrkvJHjgpPjgafmlbTjgYjjgosnXSwgYmJTZWN0aW9uOiAnU1RSQVRFR1knLCBiYkZpZWxkOiAn5L6h5qC844Gu5q2j5b2T5oCnJyB9LAogICAgICAgIHsgaWQ6ICdCMTAnLCB0eXBlOiAnbG9uZ190ZXh0JywgcXVlc3Rpb246ICcxMOW5tOW+jOOBq+OAjOOBk+OCjOOBoOOBkeOBr+aui+OBl+OBn+OBhOOAjeOBqOaAneOBhuS+oeWApOOBr+S9leOBp+OBmeOBi++8nycsIHBsYWNlaG9sZGVyOiAn44GC44Gq44Gf44GM5LqL5qWt44KS6YCa44GY44Gm5q6L44GX44Gf44GE5L6h5YCk44Go44GvLi4uJywgYmJTZWN0aW9uOiAnU1RSQVRFR1knLCBiYkZpZWxkOiAn5L6h5qC844Gu5q2j5b2T5oCnJyB9CiAgICAgIF07CgogICAgICB2YXIgU0VTU0lPTl9OVU1CRVIgPSAyOwoKICAgICAgdmFyIEdST1dUSF9TVEFHRVMgPSBbCiAgICAgICAgeyBtaW46IDAsIG1heDogMTksIG5hbWU6ICfjgZ/jgb7jgZQnLCBlbW9qaTogJ1x1RDgzRVx1REQ1QScgfSwKICAgICAgICB7IG1pbjogMjAsIG1heDogMzksIG5hbWU6ICfjgbLjgbPlibLjgownLCBlbW9qaTogJ1x1RDgzRFx1REMyMycgfSwKICAgICAgICB7IG1pbjogNDAsIG1heDogNTksIG5hbWU6ICfjgbXljJYnLCBlbW9qaTogJ1x1RDgzRFx1REMyNScgfSwKICAgICAgICB7IG1pbjogNjAsIG1heDogNzksIG5hbWU6ICfjgojjgaHjgojjgaHliIbouqtBSScsIGVtb2ppOiAnXHVEODNFXHVERDE2JyB9LAogICAgICAgIHsgbWluOiA4MCwgbWF4OiAxMDAsIG5hbWU6ICfnm7jmo5Ljg6Ljg7zjg4knLCBlbW9qaTogJ1x1RDgzRVx1RERCRScgfQogICAgICBdOwoKICAgICAgdmFyIFNIQUxMT1dfUEFUVEVSTlMgPSBbCiAgICAgICAgL+Wkp+WIh+OBq+OBl+OBpuOBhOOCiy8sCiAgICAgICAgL+W/g+OBjOOBkeOBpuOBhOOCiy8sCiAgICAgICAgL+ODkOODqeODs+OCueOCiOOBjy8sCiAgICAgICAgL+eKtuazgeOBq+W/nOOBmOOBpi8sCiAgICAgICAgL+S/oemgvOmWouS/gi8sCiAgICAgICAgL+aZrumAmuOBqy8sCiAgICAgICAgL+eJueOBq+OBquOBhC8sCiAgICAgICAgL+OBquOCk+OBqOOBquOBjy8KICAgICAgXTsKCiAgICAgIHZhciBGSVZFX1NFTlNFX0hJTlQgPSAn44Gd44Gu5L+h5b+144KS6LKr44GE44Gf5pmC44CB5ZGo5Zuy44Gu5Y+N5b+c44Gv44Gp44GG44Gn44GX44Gf44GL77yf56m65rCX44Gv44Gp44GG5aSJ44KP44KK44G+44GX44Gf44GL77yfJzsKCiAgICAgIC8qIOKUgOKUgCBET00gcmVmcyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAgKi8KCiAgICAgIHZhciBxZnNTY3JlZW5zID0gewogICAgICAgIHdlbGNvbWU6IHFmT25lKCdbZGF0YS1xZi1zb3VsLXNjcmVlbj0id2VsY29tZSJdJyksCiAgICAgICAgcXVpejogcWZPbmUoJ1tkYXRhLXFmLXNvdWwtc2NyZWVuPSJxdWl6Il0nKSwKICAgICAgICBtaWRwb2ludDogcWZPbmUoJ1tkYXRhLXFmLXNvdWwtc2NyZWVuPSJtaWRwb2ludCJdJyksCiAgICAgICAgY29tcGxldGU6IHFmT25lKCdbZGF0YS1xZi1zb3VsLXNjcmVlbj0iY29tcGxldGUiXScpCiAgICAgIH07CgogICAgICB2YXIgcWZzVUkgPSB7CiAgICAgICAgc3RhcnRCdXR0b246IHFmT25lKCdbZGF0YS1xZi1zb3VsLWFjdGlvbj0ic3RhcnQiXScpLAogICAgICAgIGNvdW50ZXI6IHFmT25lKCdbZGF0YS1xZi1zb3VsLWNvdW50ZXJdJyksCiAgICAgICAgcGVyY2VudDogcWZPbmUoJ1tkYXRhLXFmLXNvdWwtcGVyY2VudF0nKSwKICAgICAgICBwcm9ncmVzc0JhcjogcWZPbmUoJ1tkYXRhLXFmLXNvdWwtcHJvZ3Jlc3NdJyksCiAgICAgICAgcXVlc3Rpb25Cb3g6IHFmT25lKCdbZGF0YS1xZi1zb3VsLXF1ZXN0aW9uLWJveF0nKSwKICAgICAgICBxdWVzdGlvbkxhYmVsOiBxZk9uZSgnW2RhdGEtcWYtc291bC1xdWVzdGlvbi1sYWJlbF0nKSwKICAgICAgICBxdWVzdGlvblRleHQ6IHFmT25lKCdbZGF0YS1xZi1zb3VsLXF1ZXN0aW9uLXRleHRdJyksCiAgICAgICAgaW5wdXRBcmVhOiBxZk9uZSgnW2RhdGEtcWYtc291bC1pbnB1dC1hcmVhXScpLAogICAgICAgIHJlamVjdGlvbjogcWZPbmUoJ1tkYXRhLXFmLXNvdWwtcmVqZWN0aW9uXScpLAogICAgICAgIHJlamVjdGlvbk1zZzogcWZPbmUoJ1tkYXRhLXFmLXNvdWwtcmVqZWN0aW9uLW1zZ10nKSwKICAgICAgICByZWplY3Rpb25IaW50OiBxZk9uZSgnW2RhdGEtcWYtc291bC1oaW50XScpLAogICAgICAgIGZvbGxvd3VwOiBxZk9uZSgnW2RhdGEtcWYtc291bC1mb2xsb3d1cF0nKSwKICAgICAgICBmb2xsb3d1cElucHV0OiBxZk9uZSgnW2RhdGEtcWYtc291bC1mb2xsb3d1cC1pbnB1dF0nKSwKICAgICAgICBuZXh0QnRuOiBxZk9uZSgnW2RhdGEtcWYtc291bC1hY3Rpb249Im5leHQiXScpLAogICAgICAgIHNraXBCdG46IHFmT25lKCdbZGF0YS1xZi1zb3VsLWFjdGlvbj0ic2tpcCJdJyksCiAgICAgICAgc2tpcE1zZzogcWZPbmUoJ1tkYXRhLXFmLXNvdWwtc2tpcC1tc2ddJyksCiAgICAgICAgY29udGludWVCdG46IHFmT25lKCdbZGF0YS1xZi1zb3VsLWFjdGlvbj0iY29udGludWUiXScpLAogICAgICAgIGVuZEJ0bjogcWZPbmUoJ1tkYXRhLXFmLXNvdWwtYWN0aW9uPSJlbmQiXScpLAogICAgICAgIHNhdmVDb25maXJtOiBxZk9uZSgnW2RhdGEtcWYtc291bC1zYXZlLWNvbmZpcm1dJyksCiAgICAgICAgc2Vzc2lvbk5vdGU6IHFmT25lKCdbZGF0YS1xZi1zb3VsLXNlc3Npb24tbm90ZV0nKSwKICAgICAgICBncm93dGhCYWRnZTogcWZPbmUoJ1tkYXRhLXFmLXNvdWwtZ3Jvd3RoLWJhZGdlXScpLAogICAgICAgIGdyb3d0aEVtb2ppOiBxZk9uZSgnW2RhdGEtcWYtc291bC1ncm93dGgtZW1vamldJyksCiAgICAgICAgZ3Jvd3RoTmFtZTogcWZPbmUoJ1tkYXRhLXFmLXNvdWwtZ3Jvd3RoLW5hbWVdJyksCiAgICAgICAgbWlkRW1vamk6IHFmT25lKCdbZGF0YS1xZi1zb3VsLW1pZC1lbW9qaV0nKSwKICAgICAgICBtaWRHcm93dGhFbW9qaTogcWZPbmUoJ1tkYXRhLXFmLXNvdWwtbWlkLWdyb3d0aC1lbW9qaV0nKSwKICAgICAgICBtaWRHcm93dGhOYW1lOiBxZk9uZSgnW2RhdGEtcWYtc291bC1taWQtZ3Jvd3RoLW5hbWVdJyksCiAgICAgICAgY29tcGxldGVFbW9qaTogcWZPbmUoJ1tkYXRhLXFmLXNvdWwtY29tcGxldGUtZW1vamldJyksCiAgICAgICAgY29tcGxldGVHcm93dGhFbW9qaTogcWZPbmUoJ1tkYXRhLXFmLXNvdWwtY29tcGxldGUtZ3Jvd3RoLWVtb2ppXScpLAogICAgICAgIGNvbXBsZXRlR3Jvd3RoTmFtZTogcWZPbmUoJ1tkYXRhLXFmLXNvdWwtY29tcGxldGUtZ3Jvd3RoLW5hbWVdJyksCiAgICAgICAgc3RhdEFuc3dlcmVkOiBxZk9uZSgnW2RhdGEtcWYtc291bC1zdGF0LWFuc3dlcmVkXScpLAogICAgICAgIHN0YXRTa2lwcGVkOiBxZk9uZSgnW2RhdGEtcWYtc291bC1zdGF0LXNraXBwZWRdJyksCiAgICAgICAgb3ZlcmFsbFBlcmNlbnQ6IHFmT25lKCdbZGF0YS1xZi1zb3VsLW92ZXJhbGwtcGVyY2VudF0nKSwKICAgICAgICBvdmVyYWxsQmFyOiBxZk9uZSgnW2RhdGEtcWYtc291bC1vdmVyYWxsLWJhcl0nKSwKICAgICAgICBjb21wbGV0ZU1zZzogcWZPbmUoJ1tkYXRhLXFmLXNvdWwtY29tcGxldGUtbXNnXScpLAogICAgICAgIHJlbWFpbmluZ01zZzogcWZPbmUoJ1tkYXRhLXFmLXNvdWwtcmVtYWluaW5nLW1zZ10nKQogICAgICB9OwoKICAgICAgLyog4pSA4pSAIFN0YXRlICYgU3RvcmFnZSDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAgKi8KCiAgICAgIHZhciBUT1RBTF9RVUVTVElPTlMgPSA0ODsKICAgICAgdmFyIFNFU1NJT05fUVVFU1RJT05TID0gMTA7CiAgICAgIHZhciB1c2VySWQgPSB1cmxQYXJhbXMuZ2V0KCd1aWQnKSB8fCAnJzsKICAgICAgaWYgKCF1c2VySWQpIHsgdHJ5IHsgdXNlcklkID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ3FmU291bFdvcms6Y3VycmVudFVzZXInKSB8fCAnJzsgfSBjYXRjaChpZykge30gfQogICAgICBpZiAoIXVzZXJJZCkgewogICAgICAgIHVzZXJJZCA9ICd1XycgKyBNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5zbGljZSgyLCAxMCkgKyBEYXRlLm5vdygpLnRvU3RyaW5nKDM2KTsKICAgICAgfQogICAgICB0cnkgeyBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgncWZTb3VsV29yazpjdXJyZW50VXNlcicsIHVzZXJJZCk7IH0gY2F0Y2goaWcpIHt9CgogICAgICB2YXIgU1RPUkFHRV9LRVkgPSAncWZTb3VsV29yazp2MTonICsgdXNlcklkOwoKICAgICAgZnVuY3Rpb24gbG9hZFN0b3JhZ2UoKSB7CiAgICAgICAgdHJ5IHsKICAgICAgICAgIHZhciByYXcgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShTVE9SQUdFX0tFWSk7CiAgICAgICAgICBpZiAocmF3KSB7CiAgICAgICAgICAgIHJldHVybiBKU09OLnBhcnNlKHJhdyk7CiAgICAgICAgICB9CiAgICAgICAgfSBjYXRjaCAoZSkgewogICAgICAgICAgLyogaWdub3JlICovCiAgICAgICAgfQogICAgICAgIHJldHVybiBudWxsOwogICAgICB9CgogICAgICBmdW5jdGlvbiBjcmVhdGVEZWZhdWx0U3RvcmFnZSgpIHsKICAgICAgICB2YXIgYXhpc1Njb3JlcyA9IHt9OwogICAgICAgIHZhciBheGlzS2V5cyA9IFsnaG9sZCcsICdkZWxlZycsICdhaScsICdibGluZCddOwogICAgICAgIHZhciBpOwogICAgICAgIGZvciAoaSA9IDA7IGkgPCBheGlzS2V5cy5sZW5ndGg7IGkgKz0gMSkgewogICAgICAgICAgdmFyIHYgPSB1cmxQYXJhbXMuZ2V0KGF4aXNLZXlzW2ldKTsKICAgICAgICAgIGlmICh2KSB7CiAgICAgICAgICAgIGF4aXNTY29yZXNbYXhpc0tleXNbaV1dID0gcGFyc2VJbnQodiwgMTApIHx8IDA7CiAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gewogICAgICAgICAgdmVyc2lvbjogJzEuMC4wJywKICAgICAgICAgIHVzZXJJZDogdXNlcklkLAogICAgICAgICAgcXVpelR5cGU6IHVybFBhcmFtcy5nZXQoJ3R5cGUnKSB8fCAndW5rbm93bicsCiAgICAgICAgICBheGlzU2NvcmVzOiBheGlzU2NvcmVzLAogICAgICAgICAgcHJvZ3Jlc3M6IHsKICAgICAgICAgICAgY3VycmVudFNlc3Npb246IFNFU1NJT05fTlVNQkVSLAogICAgICAgICAgICBjb21wbGV0ZWRTZXNzaW9uczogW10sCiAgICAgICAgICAgIGFuc3dlcmVkQ291bnQ6IDAsCiAgICAgICAgICAgIHRvdGFsQ291bnQ6IFRPVEFMX1FVRVNUSU9OUwogICAgICAgICAgfSwKICAgICAgICAgIGFuc3dlcnM6IHt9CiAgICAgICAgfTsKICAgICAgfQoKICAgICAgZnVuY3Rpb24gc2F2ZVN0b3JhZ2UoZGF0YSkgewogICAgICAgIHRyeSB7CiAgICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShTVE9SQUdFX0tFWSwgSlNPTi5zdHJpbmdpZnkoZGF0YSkpOwogICAgICAgIH0gY2F0Y2ggKGUpIHsKICAgICAgICAgIC8qIGlnbm9yZSAqLwogICAgICAgIH0KICAgICAgfQoKICAgICAgdmFyIHN0b3JhZ2VEYXRhID0gbG9hZFN0b3JhZ2UoKSB8fCBjcmVhdGVEZWZhdWx0U3RvcmFnZSgpOwoKICAgICAgLyogVXBkYXRlIGN1cnJlbnRTZXNzaW9uIHRvIHRoaXMgc2Vzc2lvbiAqLwogICAgICBzdG9yYWdlRGF0YS5wcm9ncmVzcy5jdXJyZW50U2Vzc2lvbiA9IFNFU1NJT05fTlVNQkVSOwogICAgICBzYXZlU3RvcmFnZShzdG9yYWdlRGF0YSk7CgogICAgICAvKiDilIDilIAgR3Jvd3RoIFN0YWdlIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgCAqLwoKICAgICAgZnVuY3Rpb24gZ2V0R3Jvd3RoU3RhZ2UoYW5zd2VyZWRDb3VudCkgewogICAgICAgIHZhciBwY3QgPSBNYXRoLnJvdW5kKChhbnN3ZXJlZENvdW50IC8gVE9UQUxfUVVFU1RJT05TKSAqIDEwMCk7CiAgICAgICAgdmFyIGk7CiAgICAgICAgZm9yIChpID0gMDsgaSA8IEdST1dUSF9TVEFHRVMubGVuZ3RoOyBpICs9IDEpIHsKICAgICAgICAgIGlmIChwY3QgPj0gR1JPV1RIX1NUQUdFU1tpXS5taW4gJiYgcGN0IDw9IEdST1dUSF9TVEFHRVNbaV0ubWF4KSB7CiAgICAgICAgICAgIHJldHVybiBHUk9XVEhfU1RBR0VTW2ldOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXR1cm4gR1JPV1RIX1NUQUdFU1swXTsKICAgICAgfQoKICAgICAgZnVuY3Rpb24gdXBkYXRlR3Jvd3RoRGlzcGxheSgpIHsKICAgICAgICB2YXIgc3RhZ2UgPSBnZXRHcm93dGhTdGFnZShzdG9yYWdlRGF0YS5wcm9ncmVzcy5hbnN3ZXJlZENvdW50KTsKICAgICAgICBpZiAocWZzVUkuZ3Jvd3RoRW1vamkpIHsKICAgICAgICAgIHFmc1VJLmdyb3d0aEVtb2ppLnRleHRDb250ZW50ID0gc3RhZ2UuZW1vamk7CiAgICAgICAgfQogICAgICAgIGlmIChxZnNVSS5ncm93dGhOYW1lKSB7CiAgICAgICAgICBxZnNVSS5ncm93dGhOYW1lLnRleHRDb250ZW50ID0gc3RhZ2UubmFtZTsKICAgICAgICB9CiAgICAgIH0KCiAgICAgIC8qIOKUgOKUgCBTZXNzaW9uIDEgQ2hlY2sg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAICovCgogICAgICBmdW5jdGlvbiBjaGVja1Nlc3Npb24xKCkgewogICAgICAgIGlmIChzdG9yYWdlRGF0YS5wcm9ncmVzcy5jb21wbGV0ZWRTZXNzaW9ucy5pbmRleE9mKDEpID09PSAtMSkgewogICAgICAgICAgcWZzVUkuc2Vzc2lvbk5vdGUudGV4dENvbnRlbnQgPSAnU2Vzc2lvbiAxIOOCkuOBvuOBoOWujOS6huOBl+OBpuOBhOOBvuOBm+OCk+OAguWFiOOBq1Nlc3Npb24gMeOCkuWujOS6huOBmeOCi+OBk+OBqOOCkuOBiuOBmeOBmeOCgeOBl+OBvuOBmeOBjOOAgeOBk+OBruOBvuOBvumAsuOCgeOCi+OBk+OBqOOCguOBp+OBjeOBvuOBmeOAgic7CiAgICAgICAgICBxZnNVSS5zZXNzaW9uTm90ZS5zdHlsZS5kaXNwbGF5ID0gJyc7CiAgICAgICAgfQogICAgICB9CgogICAgICAvKiDilIDilIAgUXVpeiBTdGF0ZSDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAgKi8KCiAgICAgIHZhciBxZnNTdGF0ZSA9IHsKICAgICAgICBpbmRleDogMCwKICAgICAgICByZWplY3Rpb25Db3VudDogMCwKICAgICAgICBzZWxlY3RlZENob2ljZTogbnVsbCwKICAgICAgICBzZWxlY3RlZFNjYWxlOiBudWxsLAogICAgICAgIHNob3dpbmdNaWRwb2ludDogZmFsc2UKICAgICAgfTsKCiAgICAgIC8qIOKUgOKUgCBTY3JlZW4gTmF2aWdhdGlvbiDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAgKi8KCiAgICAgIGZ1bmN0aW9uIHFmc1Nob3dTY3JlZW4obmFtZSkgewogICAgICAgIHZhciBrZXlzID0gT2JqZWN0LmtleXMocWZzU2NyZWVucyk7CiAgICAgICAgdmFyIGk7CiAgICAgICAgZm9yIChpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpICs9IDEpIHsKICAgICAgICAgIHFmc1NjcmVlbnNba2V5c1tpXV0uY2xhc3NMaXN0LnJlbW92ZSgncWYtc291bC1hY3RpdmUnKTsKICAgICAgICB9CiAgICAgICAgcWZzU2NyZWVuc1tuYW1lXS5jbGFzc0xpc3QuYWRkKCdxZi1zb3VsLWFjdGl2ZScpOwogICAgICB9CgogICAgICAvKiDilIDilIAgU2hhbGxvdyBEZXRlY3Rpb24g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAICovCgogICAgICBmdW5jdGlvbiBpc1NoYWxsb3codGV4dCkgewogICAgICAgIGlmICghdGV4dCB8fCB0ZXh0Lmxlbmd0aCA8IDIwKSB7CiAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICB9CiAgICAgICAgdmFyIGk7CiAgICAgICAgZm9yIChpID0gMDsgaSA8IFNIQUxMT1dfUEFUVEVSTlMubGVuZ3RoOyBpICs9IDEpIHsKICAgICAgICAgIGlmIChTSEFMTE9XX1BBVFRFUk5TW2ldLnRlc3QodGV4dCkpIHsKICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgfQoKICAgICAgLyog4pSA4pSAIFByb2dyZXNzIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgCAqLwoKICAgICAgZnVuY3Rpb24gdXBkYXRlUHJvZ3Jlc3MoKSB7CiAgICAgICAgdmFyIGN1cnJlbnQgPSBxZnNTdGF0ZS5pbmRleCArIDE7CiAgICAgICAgdmFyIHBjdCA9IE1hdGgucm91bmQoKGN1cnJlbnQgLyBTRVNTSU9OX1FVRVNUSU9OUykgKiAxMDApOwogICAgICAgIHFmc1VJLmNvdW50ZXIudGV4dENvbnRlbnQgPSAnUScgKyBjdXJyZW50ICsgJyAvICcgKyBTRVNTSU9OX1FVRVNUSU9OUzsKICAgICAgICBxZnNVSS5wZXJjZW50LnRleHRDb250ZW50ID0gcGN0ICsgJyUnOwogICAgICAgIHFmc1VJLnByb2dyZXNzQmFyLnN0eWxlLndpZHRoID0gcGN0ICsgJyUnOwogICAgICB9CgogICAgICAvKiDilIDilIAgUmVuZGVyIFF1ZXN0aW9uIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgCAqLwoKICAgICAgZnVuY3Rpb24gcmVuZGVyUXVlc3Rpb24oKSB7CiAgICAgICAgdmFyIGl0ZW0gPSBRRl9TT1VMX1FVRVNUSU9OU1txZnNTdGF0ZS5pbmRleF07CiAgICAgICAgcWZzU3RhdGUucmVqZWN0aW9uQ291bnQgPSAwOwogICAgICAgIHFmc1N0YXRlLnNlbGVjdGVkQ2hvaWNlID0gbnVsbDsKICAgICAgICBxZnNTdGF0ZS5zZWxlY3RlZFNjYWxlID0gbnVsbDsKCiAgICAgICAgdXBkYXRlUHJvZ3Jlc3MoKTsKCiAgICAgICAgcWZzVUkucXVlc3Rpb25MYWJlbC50ZXh0Q29udGVudCA9IGl0ZW0uYmJTZWN0aW9uICsgJyA+ICcgKyBpdGVtLmJiRmllbGQ7CiAgICAgICAgcWZzVUkucXVlc3Rpb25UZXh0LnRleHRDb250ZW50ID0gaXRlbS5xdWVzdGlvbjsKICAgICAgICBxZnNVSS5pbnB1dEFyZWEuaW5uZXJIVE1MID0gJyc7CiAgICAgICAgcWZzVUkucmVqZWN0aW9uLmNsYXNzTGlzdC5yZW1vdmUoJ3FmLXNvdWwtcmVqZWN0aW9uLXZpc2libGUnKTsKICAgICAgICBxZnNVSS5yZWplY3Rpb25Nc2cudGV4dENvbnRlbnQgPSAnJzsKICAgICAgICBxZnNVSS5yZWplY3Rpb25IaW50LnRleHRDb250ZW50ID0gJyc7CiAgICAgICAgcWZzVUkuZm9sbG93dXBJbnB1dC52YWx1ZSA9ICcnOwogICAgICAgIHFmc1VJLnNraXBCdG4uc3R5bGUuZGlzcGxheSA9ICdub25lJzsKICAgICAgICBxZnNVSS5za2lwTXNnLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7CiAgICAgICAgcWZzVUkubmV4dEJ0bi5zdHlsZS5kaXNwbGF5ID0gJyc7CgogICAgICAgIC8qIFJlc3RvcmUgZXhpc3RpbmcgYW5zd2VyIGlmIGFueSAqLwogICAgICAgIHZhciBleGlzdGluZyA9IHN0b3JhZ2VEYXRhLmFuc3dlcnNbaXRlbS5pZF07CgogICAgICAgIC8qIOKUgOKUgCBTY2FsZSB0eXBlIOKUgOKUgCAqLwogICAgICAgIGlmIChpdGVtLnR5cGUgPT09ICdzY2FsZScpIHsKICAgICAgICAgIHFmc1VJLmZvbGxvd3VwLnN0eWxlLmRpc3BsYXkgPSAnJzsKICAgICAgICAgIHZhciBzY2FsZVJvdyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOwogICAgICAgICAgc2NhbGVSb3cuY2xhc3NOYW1lID0gJ3FmLXNvdWwtc2NhbGUtcm93JzsKICAgICAgICAgIHZhciBzOwogICAgICAgICAgZm9yIChzID0gMDsgcyA8IGl0ZW0uc2NhbGVMYWJlbHMubGVuZ3RoOyBzICs9IDEpIHsKICAgICAgICAgICAgKGZ1bmN0aW9uIChzY2FsZUluZGV4LCBsYWJlbFRleHQpIHsKICAgICAgICAgICAgICB2YXIgc2NhbGVWYWwgPSBzY2FsZUluZGV4ICsgMTsKICAgICAgICAgICAgICB2YXIgYnRuID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYnV0dG9uJyk7CiAgICAgICAgICAgICAgYnRuLnR5cGUgPSAnYnV0dG9uJzsKICAgICAgICAgICAgICBidG4uY2xhc3NOYW1lID0gJ3FmLXNvdWwtYnRuIHFmLXNvdWwtYnRuLXNjYWxlJzsKICAgICAgICAgICAgICBidG4uaW5uZXJIVE1MID0gJzxzdHJvbmc+JyArIHNjYWxlVmFsICsgJzwvc3Ryb25nPjxicj4nICsgbGFiZWxUZXh0OwogICAgICAgICAgICAgIGlmIChleGlzdGluZyAmJiBleGlzdGluZy52YWx1ZSA9PT0gc2NhbGVWYWwpIHsKICAgICAgICAgICAgICAgIGJ0bi5jbGFzc0xpc3QuYWRkKCdxZi1zb3VsLWJ0bi1zY2FsZS1zZWxlY3RlZCcpOwogICAgICAgICAgICAgICAgcWZzU3RhdGUuc2VsZWN0ZWRTY2FsZSA9IHNjYWxlVmFsOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBidG4uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgICAgICB2YXIgYWxsU2NhbGUgPSBzY2FsZVJvdy5xdWVyeVNlbGVjdG9yQWxsKCcucWYtc291bC1idG4tc2NhbGUnKTsKICAgICAgICAgICAgICAgIHZhciBqOwogICAgICAgICAgICAgICAgZm9yIChqID0gMDsgaiA8IGFsbFNjYWxlLmxlbmd0aDsgaiArPSAxKSB7CiAgICAgICAgICAgICAgICAgIGFsbFNjYWxlW2pdLmNsYXNzTGlzdC5yZW1vdmUoJ3FmLXNvdWwtYnRuLXNjYWxlLXNlbGVjdGVkJyk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBidG4uY2xhc3NMaXN0LmFkZCgncWYtc291bC1idG4tc2NhbGUtc2VsZWN0ZWQnKTsKICAgICAgICAgICAgICAgIHFmc1N0YXRlLnNlbGVjdGVkU2NhbGUgPSBzY2FsZVZhbDsKICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICBzY2FsZVJvdy5hcHBlbmRDaGlsZChidG4pOwogICAgICAgICAgICB9KShzLCBpdGVtLnNjYWxlTGFiZWxzW3NdKTsKICAgICAgICAgIH0KICAgICAgICAgIHFmc1VJLmlucHV0QXJlYS5hcHBlbmRDaGlsZChzY2FsZVJvdyk7CiAgICAgICAgICBpZiAoZXhpc3RpbmcgJiYgZXhpc3Rpbmcud2h5KSB7CiAgICAgICAgICAgIHFmc1VJLmZvbGxvd3VwSW5wdXQudmFsdWUgPSBleGlzdGluZy53aHk7CiAgICAgICAgICB9CiAgICAgICAgICBpZiAoZXhpc3RpbmcgJiYgZXhpc3RpbmcucmVqZWN0aW9uQ291bnQpIHsKICAgICAgICAgICAgcWZzU3RhdGUucmVqZWN0aW9uQ291bnQgPSBleGlzdGluZy5yZWplY3Rpb25Db3VudDsKICAgICAgICAgICAgaWYgKHFmc1N0YXRlLnJlamVjdGlvbkNvdW50ID49IDIpIHsKICAgICAgICAgICAgICBxZnNVSS5za2lwQnRuLnN0eWxlLmRpc3BsYXkgPSAnJzsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KCiAgICAgICAgLyog4pSA4pSAIENob2ljZSB0eXBlIOKUgOKUgCAqLwogICAgICAgIGlmIChpdGVtLnR5cGUgPT09ICdjaG9pY2UnKSB7CiAgICAgICAgICBxZnNVSS5mb2xsb3d1cC5zdHlsZS5kaXNwbGF5ID0gJyc7CiAgICAgICAgICB2YXIgaTsKICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBpdGVtLm9wdGlvbnMubGVuZ3RoOyBpICs9IDEpIHsKICAgICAgICAgICAgKGZ1bmN0aW9uIChvcHRpb25UZXh0LCBpZHgpIHsKICAgICAgICAgICAgICB2YXIgYnRuID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYnV0dG9uJyk7CiAgICAgICAgICAgICAgYnRuLnR5cGUgPSAnYnV0dG9uJzsKICAgICAgICAgICAgICBidG4uY2xhc3NOYW1lID0gJ3FmLXNvdWwtYnRuIHFmLXNvdWwtYnRuLW9wdGlvbic7CiAgICAgICAgICAgICAgYnRuLnRleHRDb250ZW50ID0gb3B0aW9uVGV4dDsKICAgICAgICAgICAgICBpZiAoZXhpc3RpbmcgJiYgZXhpc3RpbmcudmFsdWUgPT09IG9wdGlvblRleHQpIHsKICAgICAgICAgICAgICAgIGJ0bi5jbGFzc0xpc3QuYWRkKCdxZi1zb3VsLWJ0bi1vcHRpb24tc2VsZWN0ZWQnKTsKICAgICAgICAgICAgICAgIHFmc1N0YXRlLnNlbGVjdGVkQ2hvaWNlID0gb3B0aW9uVGV4dDsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgYnRuLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZnVuY3Rpb24gKCkgewogICAgICAgICAgICAgICAgdmFyIGFsbE9wdHMgPSBxZnNVSS5pbnB1dEFyZWEucXVlcnlTZWxlY3RvckFsbCgnLnFmLXNvdWwtYnRuLW9wdGlvbicpOwogICAgICAgICAgICAgICAgdmFyIGo7CiAgICAgICAgICAgICAgICBmb3IgKGogPSAwOyBqIDwgYWxsT3B0cy5sZW5ndGg7IGogKz0gMSkgewogICAgICAgICAgICAgICAgICBhbGxPcHRzW2pdLmNsYXNzTGlzdC5yZW1vdmUoJ3FmLXNvdWwtYnRuLW9wdGlvbi1zZWxlY3RlZCcpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgYnRuLmNsYXNzTGlzdC5hZGQoJ3FmLXNvdWwtYnRuLW9wdGlvbi1zZWxlY3RlZCcpOwogICAgICAgICAgICAgICAgcWZzU3RhdGUuc2VsZWN0ZWRDaG9pY2UgPSBvcHRpb25UZXh0OwogICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgIHFmc1VJLmlucHV0QXJlYS5hcHBlbmRDaGlsZChidG4pOwogICAgICAgICAgICB9KShpdGVtLm9wdGlvbnNbaV0sIGkpOwogICAgICAgICAgfQogICAgICAgICAgaWYgKGV4aXN0aW5nICYmIGV4aXN0aW5nLndoeSkgewogICAgICAgICAgICBxZnNVSS5mb2xsb3d1cElucHV0LnZhbHVlID0gZXhpc3Rpbmcud2h5OwogICAgICAgICAgfQogICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KCiAgICAgICAgLyog4pSA4pSAIHNob3J0X3RleHQgb3IgbG9uZ190ZXh0IOKUgOKUgCAqLwogICAgICAgIHFmc1VJLmZvbGxvd3VwLnN0eWxlLmRpc3BsYXkgPSAnJzsKICAgICAgICB2YXIgbWF4TGVuID0gaXRlbS50eXBlID09PSAnc2hvcnRfdGV4dCcgPyAxNjAgOiAxMDAwOwoKICAgICAgICBpZiAoaXRlbS50eXBlID09PSAnc2hvcnRfdGV4dCcpIHsKICAgICAgICAgIHZhciBpbnAgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpbnB1dCcpOwogICAgICAgICAgaW5wLnR5cGUgPSAndGV4dCc7CiAgICAgICAgICBpbnAuY2xhc3NOYW1lID0gJ3FmLXNvdWwtaW5wdXQnOwogICAgICAgICAgaW5wLnBsYWNlaG9sZGVyID0gaXRlbS5wbGFjZWhvbGRlciB8fCAnJzsKICAgICAgICAgIGlucC5tYXhMZW5ndGggPSBtYXhMZW47CiAgICAgICAgICBpbnAuc2V0QXR0cmlidXRlKCdkYXRhLXFmLXNvdWwtbWFpbi1pbnB1dCcsICcnKTsKICAgICAgICAgIGlmIChleGlzdGluZyAmJiBleGlzdGluZy52YWx1ZSkgewogICAgICAgICAgICBpbnAudmFsdWUgPSBleGlzdGluZy52YWx1ZTsKICAgICAgICAgIH0KICAgICAgICAgIHFmc1VJLmlucHV0QXJlYS5hcHBlbmRDaGlsZChpbnApOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICB2YXIgdGEgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZXh0YXJlYScpOwogICAgICAgICAgdGEuY2xhc3NOYW1lID0gJ3FmLXNvdWwtdGV4dGFyZWEnOwogICAgICAgICAgdGEucGxhY2Vob2xkZXIgPSBpdGVtLnBsYWNlaG9sZGVyIHx8ICcnOwogICAgICAgICAgdGEubWF4TGVuZ3RoID0gbWF4TGVuOwogICAgICAgICAgdGEuc2V0QXR0cmlidXRlKCdkYXRhLXFmLXNvdWwtbWFpbi1pbnB1dCcsICcnKTsKICAgICAgICAgIGlmIChleGlzdGluZyAmJiBleGlzdGluZy52YWx1ZSkgewogICAgICAgICAgICB0YS52YWx1ZSA9IGV4aXN0aW5nLnZhbHVlOwogICAgICAgICAgfQogICAgICAgICAgcWZzVUkuaW5wdXRBcmVhLmFwcGVuZENoaWxkKHRhKTsKCiAgICAgICAgICB2YXIgY2MgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsKICAgICAgICAgIGNjLmNsYXNzTmFtZSA9ICdxZi1zb3VsLWNoYXItY291bnQnOwogICAgICAgICAgY2Muc2V0QXR0cmlidXRlKCdkYXRhLXFmLXNvdWwtY2hhci1jb3VudCcsICcnKTsKICAgICAgICAgIGNjLnRleHRDb250ZW50ID0gKGV4aXN0aW5nICYmIGV4aXN0aW5nLnZhbHVlID8gZXhpc3RpbmcudmFsdWUubGVuZ3RoIDogMCkgKyAnIC8gJyArIG1heExlbjsKICAgICAgICAgIHFmc1VJLmlucHV0QXJlYS5hcHBlbmRDaGlsZChjYyk7CgogICAgICAgICAgdGEuYWRkRXZlbnRMaXN0ZW5lcignaW5wdXQnLCBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgIHZhciBsZW4gPSB0YS52YWx1ZS5sZW5ndGg7CiAgICAgICAgICAgIGNjLnRleHRDb250ZW50ID0gbGVuICsgJyAvICcgKyBtYXhMZW47CiAgICAgICAgICAgIGlmIChsZW4gPiBtYXhMZW4gKiAwLjkpIHsKICAgICAgICAgICAgICBjYy5jbGFzc0xpc3QuYWRkKCdxZi1zb3VsLWNoYXItd2FybicpOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgIGNjLmNsYXNzTGlzdC5yZW1vdmUoJ3FmLXNvdWwtY2hhci13YXJuJyk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0pOwogICAgICAgIH0KCiAgICAgICAgaWYgKGV4aXN0aW5nICYmIGV4aXN0aW5nLndoeSkgewogICAgICAgICAgcWZzVUkuZm9sbG93dXBJbnB1dC52YWx1ZSA9IGV4aXN0aW5nLndoeTsKICAgICAgICB9CgogICAgICAgIC8qIFJlc3RvcmUgcmVqZWN0aW9uIHN0YXRlICovCiAgICAgICAgaWYgKGV4aXN0aW5nICYmIGV4aXN0aW5nLnJlamVjdGlvbkNvdW50KSB7CiAgICAgICAgICBxZnNTdGF0ZS5yZWplY3Rpb25Db3VudCA9IGV4aXN0aW5nLnJlamVjdGlvbkNvdW50OwogICAgICAgICAgaWYgKHFmc1N0YXRlLnJlamVjdGlvbkNvdW50ID49IDIpIHsKICAgICAgICAgICAgcWZzVUkuc2tpcEJ0bi5zdHlsZS5kaXNwbGF5ID0gJyc7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CgogICAgICAvKiDilIDilIAgQW5zd2VyIExvZ2ljIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgCAqLwoKICAgICAgZnVuY3Rpb24gZ2V0Q3VycmVudFZhbHVlKCkgewogICAgICAgIHZhciBpdGVtID0gUUZfU09VTF9RVUVTVElPTlNbcWZzU3RhdGUuaW5kZXhdOwogICAgICAgIGlmIChpdGVtLnR5cGUgPT09ICdjaG9pY2UnKSB7CiAgICAgICAgICByZXR1cm4gcWZzU3RhdGUuc2VsZWN0ZWRDaG9pY2UgfHwgJyc7CiAgICAgICAgfQogICAgICAgIGlmIChpdGVtLnR5cGUgPT09ICdzY2FsZScpIHsKICAgICAgICAgIHJldHVybiBxZnNTdGF0ZS5zZWxlY3RlZFNjYWxlIHx8ICcnOwogICAgICAgIH0KICAgICAgICB2YXIgbWFpbklucHV0ID0gcWZPbmUoJ1tkYXRhLXFmLXNvdWwtbWFpbi1pbnB1dF0nKTsKICAgICAgICByZXR1cm4gbWFpbklucHV0ID8gbWFpbklucHV0LnZhbHVlLnRyaW0oKSA6ICcnOwogICAgICB9CgogICAgICBmdW5jdGlvbiBzYXZlQW5zd2VyKHZhbHVlLCBza2lwcGVkKSB7CiAgICAgICAgdmFyIGl0ZW0gPSBRRl9TT1VMX1FVRVNUSU9OU1txZnNTdGF0ZS5pbmRleF07CiAgICAgICAgdmFyIHdoeVZhbCA9IHFmc1VJLmZvbGxvd3VwSW5wdXQudmFsdWUudHJpbSgpOwoKICAgICAgICBzdG9yYWdlRGF0YS5hbnN3ZXJzW2l0ZW0uaWRdID0gewogICAgICAgICAgdHlwZTogaXRlbS50eXBlLAogICAgICAgICAgdmFsdWU6IHZhbHVlLAogICAgICAgICAgd2h5OiB3aHlWYWwsCiAgICAgICAgICBza2lwcGVkOiAhIXNraXBwZWQsCiAgICAgICAgICByZWplY3Rpb25Db3VudDogcWZzU3RhdGUucmVqZWN0aW9uQ291bnQsCiAgICAgICAgICB1cGRhdGVkQXQ6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKQogICAgICAgIH07CgogICAgICAgIC8qIFJlY291bnQgYW5zd2VyZWQgYWNyb3NzIGFsbCBzZXNzaW9ucyAqLwogICAgICAgIHZhciBjb3VudCA9IDA7CiAgICAgICAgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhzdG9yYWdlRGF0YS5hbnN3ZXJzKTsKICAgICAgICB2YXIgaTsKICAgICAgICBmb3IgKGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkgKz0gMSkgewogICAgICAgICAgaWYgKCFzdG9yYWdlRGF0YS5hbnN3ZXJzW2tleXNbaV1dLnNraXBwZWQpIHsKICAgICAgICAgICAgY291bnQgKz0gMTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgc3RvcmFnZURhdGEucHJvZ3Jlc3MuYW5zd2VyZWRDb3VudCA9IGNvdW50OwoKICAgICAgICBzYXZlU3RvcmFnZShzdG9yYWdlRGF0YSk7CiAgICAgIH0KCiAgICAgIGZ1bmN0aW9uIGhhbmRsZU5leHQoKSB7CiAgICAgICAgdmFyIGl0ZW0gPSBRRl9TT1VMX1FVRVNUSU9OU1txZnNTdGF0ZS5pbmRleF07CiAgICAgICAgdmFyIHZhbHVlID0gZ2V0Q3VycmVudFZhbHVlKCk7CgogICAgICAgIC8qIENob2ljZTogbXVzdCBzZWxlY3QgKi8KICAgICAgICBpZiAoaXRlbS50eXBlID09PSAnY2hvaWNlJyAmJiAhdmFsdWUpIHsKICAgICAgICAgIHJldHVybjsKICAgICAgICB9CgogICAgICAgIC8qIFNjYWxlOiBtdXN0IHNlbGVjdCAqLwogICAgICAgIGlmIChpdGVtLnR5cGUgPT09ICdzY2FsZScgJiYgIXZhbHVlKSB7CiAgICAgICAgICByZXR1cm47CiAgICAgICAgfQoKICAgICAgICAvKiBUZXh0OiBzaGFsbG93IGRldGVjdGlvbiAqLwogICAgICAgIGlmIChpdGVtLnR5cGUgIT09ICdjaG9pY2UnICYmIGl0ZW0udHlwZSAhPT0gJ3NjYWxlJykgewogICAgICAgICAgaWYgKGlzU2hhbGxvdyh2YWx1ZSkgJiYgcWZzU3RhdGUucmVqZWN0aW9uQ291bnQgPCAyKSB7CiAgICAgICAgICAgIHFmc1N0YXRlLnJlamVjdGlvbkNvdW50ICs9IDE7CiAgICAgICAgICAgIHFmc1VJLnJlamVjdGlvbi5jbGFzc0xpc3QuYWRkKCdxZi1zb3VsLXJlamVjdGlvbi12aXNpYmxlJyk7CgogICAgICAgICAgICBpZiAocWZzU3RhdGUucmVqZWN0aW9uQ291bnQgPT09IDEpIHsKICAgICAgICAgICAgICBxZnNVSS5yZWplY3Rpb25Nc2cudGV4dENvbnRlbnQgPSAn44KC44GG5bCR44GX5YW35L2T55qE44Gr5pWZ44GI44Gm44GP44Gg44GV44GE44CC5oOF5pmv44GM5rWu44GL44G244KI44GG44Gq5Zue562U44GM44CB44GC44Gq44Gf44Gu5YiG6LqrQUnjgpLlvLfjgY/jgZfjgb7jgZkgXHVEODNEXHVEQ0FBJzsKICAgICAgICAgICAgICBxZnNVSS5yZWplY3Rpb25IaW50LnRleHRDb250ZW50ID0gRklWRV9TRU5TRV9ISU5UOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgIHFmc1VJLnJlamVjdGlvbk1zZy50ZXh0Q29udGVudCA9ICfjgZPjgZPjga/lpKfkuovjgarjg53jgqTjg7Pjg4jjgafjgZnjgILjgafjgoLjgIHku4rjgZnjgZDnrZTjgYjjgYzlh7rjgarjgY/jgabjgoLlpKfkuIjlpKvjgILlvozjgafmiLvjgaPjgabjgY/jgovjgZPjgajjgoLjgafjgY3jgb7jgZknOwogICAgICAgICAgICAgIHFmc1VJLnJlamVjdGlvbkhpbnQudGV4dENvbnRlbnQgPSAnJzsKICAgICAgICAgICAgICBxZnNVSS5za2lwQnRuLnN0eWxlLmRpc3BsYXkgPSAnJzsKICAgICAgICAgICAgfQogICAgICAgICAgICByZXR1cm47CiAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBzYXZlQW5zd2VyKHZhbHVlLCBmYWxzZSk7CiAgICAgICAgYWR2YW5jZVF1ZXN0aW9uKCk7CiAgICAgIH0KCiAgICAgIGZ1bmN0aW9uIGhhbmRsZVNraXAoKSB7CiAgICAgICAgc2F2ZUFuc3dlcignJywgdHJ1ZSk7CiAgICAgICAgcWZzVUkuc2tpcE1zZy5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJzsKICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHsKICAgICAgICAgIHFmc1VJLnNraXBNc2cuc3R5bGUuZGlzcGxheSA9ICdub25lJzsKICAgICAgICAgIGFkdmFuY2VRdWVzdGlvbigpOwogICAgICAgIH0sIDEyMDApOwogICAgICB9CgogICAgICBmdW5jdGlvbiBhZHZhbmNlUXVlc3Rpb24oKSB7CiAgICAgICAgcWZzU3RhdGUuaW5kZXggKz0gMTsKCiAgICAgICAgLyogTWlkcG9pbnQgYWZ0ZXIgUTUgKGluZGV4IDUpICovCiAgICAgICAgaWYgKHFmc1N0YXRlLmluZGV4ID09PSA1ICYmICFxZnNTdGF0ZS5zaG93aW5nTWlkcG9pbnQpIHsKICAgICAgICAgIHFmc1N0YXRlLnNob3dpbmdNaWRwb2ludCA9IHRydWU7CiAgICAgICAgICBzaG93TWlkcG9pbnQoKTsKICAgICAgICAgIHJldHVybjsKICAgICAgICB9CgogICAgICAgIGlmIChxZnNTdGF0ZS5pbmRleCA+PSBTRVNTSU9OX1FVRVNUSU9OUykgewogICAgICAgICAgc2hvd0NvbXBsZXRlKCk7CiAgICAgICAgICByZXR1cm47CiAgICAgICAgfQoKICAgICAgICBsZWF2ZUFuZFJlbmRlcigpOwogICAgICB9CgogICAgICBmdW5jdGlvbiBsZWF2ZUFuZFJlbmRlcigpIHsKICAgICAgICBxZnNVSS5xdWVzdGlvbkJveC5jbGFzc0xpc3QuYWRkKCdxZi1zb3VsLWxlYXZpbmcnKTsKICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHsKICAgICAgICAgIHFmc1VJLnF1ZXN0aW9uQm94LmNsYXNzTGlzdC5yZW1vdmUoJ3FmLXNvdWwtbGVhdmluZycpOwogICAgICAgICAgcmVuZGVyUXVlc3Rpb24oKTsKICAgICAgICB9LCAyNDApOwogICAgICB9CgogICAgICAvKiDilIDilIAgTWlkcG9pbnQg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAICovCgogICAgICBmdW5jdGlvbiBzaG93TWlkcG9pbnQoKSB7CiAgICAgICAgdmFyIHN0YWdlID0gZ2V0R3Jvd3RoU3RhZ2Uoc3RvcmFnZURhdGEucHJvZ3Jlc3MuYW5zd2VyZWRDb3VudCk7CiAgICAgICAgcWZzVUkubWlkRW1vamkudGV4dENvbnRlbnQgPSBzdGFnZS5lbW9qaTsKICAgICAgICBxZnNVSS5taWRHcm93dGhFbW9qaS50ZXh0Q29udGVudCA9IHN0YWdlLmVtb2ppOwogICAgICAgIHFmc1VJLm1pZEdyb3d0aE5hbWUudGV4dENvbnRlbnQgPSBzdGFnZS5uYW1lOwogICAgICAgIHFmc1Nob3dTY3JlZW4oJ21pZHBvaW50Jyk7CiAgICAgIH0KCiAgICAgIC8qIOKUgOKUgCBDb21wbGV0ZSDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAgKi8KCiAgICAgIGZ1bmN0aW9uIHNob3dDb21wbGV0ZSgpIHsKICAgICAgICAvKiBNYXJrIHNlc3Npb24gY29tcGxldGVkICovCiAgICAgICAgaWYgKHN0b3JhZ2VEYXRhLnByb2dyZXNzLmNvbXBsZXRlZFNlc3Npb25zLmluZGV4T2YoU0VTU0lPTl9OVU1CRVIpID09PSAtMSkgewogICAgICAgICAgc3RvcmFnZURhdGEucHJvZ3Jlc3MuY29tcGxldGVkU2Vzc2lvbnMucHVzaChTRVNTSU9OX05VTUJFUik7CiAgICAgICAgfQogICAgICAgIHNhdmVTdG9yYWdlKHN0b3JhZ2VEYXRhKTsKCiAgICAgICAgdmFyIHN0YWdlID0gZ2V0R3Jvd3RoU3RhZ2Uoc3RvcmFnZURhdGEucHJvZ3Jlc3MuYW5zd2VyZWRDb3VudCk7CiAgICAgICAgcWZzVUkuY29tcGxldGVFbW9qaS50ZXh0Q29udGVudCA9IHN0YWdlLmVtb2ppOwogICAgICAgIHFmc1VJLmNvbXBsZXRlR3Jvd3RoRW1vamkudGV4dENvbnRlbnQgPSBzdGFnZS5lbW9qaTsKICAgICAgICBxZnNVSS5jb21wbGV0ZUdyb3d0aE5hbWUudGV4dENvbnRlbnQgPSBzdGFnZS5uYW1lOwoKICAgICAgICAvKiBTdGF0cyBmb3IgVEhJUyBzZXNzaW9uIG9ubHkgKEItcHJlZml4IGFuc3dlcnMpICovCiAgICAgICAgdmFyIGFuc3dlcmVkID0gMDsKICAgICAgICB2YXIgc2tpcHBlZCA9IDA7CiAgICAgICAgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhzdG9yYWdlRGF0YS5hbnN3ZXJzKTsKICAgICAgICB2YXIgaTsKICAgICAgICBmb3IgKGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkgKz0gMSkgewogICAgICAgICAgaWYgKGtleXNbaV0uY2hhckF0KDApID09PSAnQicpIHsKICAgICAgICAgICAgaWYgKHN0b3JhZ2VEYXRhLmFuc3dlcnNba2V5c1tpXV0uc2tpcHBlZCkgewogICAgICAgICAgICAgIHNraXBwZWQgKz0gMTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICBhbnN3ZXJlZCArPSAxOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHFmc1VJLnN0YXRBbnN3ZXJlZC50ZXh0Q29udGVudCA9IGFuc3dlcmVkOwogICAgICAgIHFmc1VJLnN0YXRTa2lwcGVkLnRleHRDb250ZW50ID0gc2tpcHBlZDsKCiAgICAgICAgLyogT3ZlcmFsbCBwcm9ncmVzcyAqLwogICAgICAgIHZhciBvdmVyYWxsUGN0ID0gTWF0aC5yb3VuZCgoc3RvcmFnZURhdGEucHJvZ3Jlc3MuYW5zd2VyZWRDb3VudCAvIFRPVEFMX1FVRVNUSU9OUykgKiAxMDApOwogICAgICAgIHFmc1VJLm92ZXJhbGxQZXJjZW50LnRleHRDb250ZW50ID0gb3ZlcmFsbFBjdCArICclJzsKICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHsKICAgICAgICAgIHFmc1VJLm92ZXJhbGxCYXIuc3R5bGUud2lkdGggPSBvdmVyYWxsUGN0ICsgJyUnOwogICAgICAgIH0sIDEwMCk7CgogICAgICAgIC8qIE1lc3NhZ2VzICovCiAgICAgICAgcWZzVUkuY29tcGxldGVNc2cudGV4dENvbnRlbnQgPSAn44GC44Gq44Gf44Gu6Lu444GM6KaL44GI44G+44GX44Gf44CC5qyh5Zue44Gv44CB5by344G/44Go55uy54K544KS5LiA57eS44Gr5omx44GE44G+44GZ44CCJzsKICAgICAgICB2YXIgcmVtYWluaW5nID0gVE9UQUxfUVVFU1RJT05TIC0gc3RvcmFnZURhdGEucHJvZ3Jlc3MuYW5zd2VyZWRDb3VudDsKICAgICAgICBxZnNVSS5yZW1haW5pbmdNc2cudGV4dENvbnRlbnQgPSAn44GC44GoJyArIHJlbWFpbmluZyArICfllY/jgafjgIHliIbouqtBSeOBjOWIpOaWreWfuua6luOCkuWFseacieOBp+OBjeOCi+OCiOOBhuOBq+OBquOCiuOBvuOBmeOAgic7CgogICAgICAgIHFmc1Nob3dTY3JlZW4oJ2NvbXBsZXRlJyk7CiAgICAgIH0KCiAgICAgIC8qIOKUgOKUgCBGaW5kIEZpcnN0IFVuYW5zd2VyZWQg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAICovCgogICAgICBmdW5jdGlvbiBmaW5kRmlyc3RVbmFuc3dlcmVkKCkgewogICAgICAgIHZhciBpOwogICAgICAgIGZvciAoaSA9IDA7IGkgPCBRRl9TT1VMX1FVRVNUSU9OUy5sZW5ndGg7IGkgKz0gMSkgewogICAgICAgICAgdmFyIHFpZCA9IFFGX1NPVUxfUVVFU1RJT05TW2ldLmlkOwogICAgICAgICAgaWYgKCFzdG9yYWdlRGF0YS5hbnN3ZXJzW3FpZF0pIHsKICAgICAgICAgICAgcmV0dXJuIGk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybiAtMTsKICAgICAgfQoKICAgICAgLyog4pSA4pSAIEluaXRpYWxpemF0aW9uIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgCAqLwoKICAgICAgdXBkYXRlR3Jvd3RoRGlzcGxheSgpOwogICAgICBjaGVja1Nlc3Npb24xKCk7CgogICAgICAvKiBDaGVjayBpZiBzZXNzaW9uIGFscmVhZHkgY29tcGxldGVkICovCiAgICAgIHZhciBhbGxBbnN3ZXJlZCA9IHRydWU7CiAgICAgIHZhciBrOwogICAgICBmb3IgKGsgPSAwOyBrIDwgUUZfU09VTF9RVUVTVElPTlMubGVuZ3RoOyBrICs9IDEpIHsKICAgICAgICBpZiAoIXN0b3JhZ2VEYXRhLmFuc3dlcnNbUUZfU09VTF9RVUVTVElPTlNba10uaWRdKSB7CiAgICAgICAgICBhbGxBbnN3ZXJlZCA9IGZhbHNlOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICB9CgogICAgICBpZiAoYWxsQW5zd2VyZWQgJiYgc3RvcmFnZURhdGEucHJvZ3Jlc3MuY29tcGxldGVkU2Vzc2lvbnMuaW5kZXhPZihTRVNTSU9OX05VTUJFUikgIT09IC0xKSB7CiAgICAgICAgLyogQWxyZWFkeSBjb21wbGV0ZWQgLSBzaG93IGNvbXBsZXRlIHNjcmVlbiAqLwogICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkgewogICAgICAgICAgc2hvd0NvbXBsZXRlKCk7CiAgICAgICAgfSwgMTAwKTsKICAgICAgfQoKICAgICAgLyog4pSA4pSAIEV2ZW50IExpc3RlbmVycyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAgKi8KCiAgICAgIHFmc1VJLnN0YXJ0QnV0dG9uLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZnVuY3Rpb24gKCkgewogICAgICAgIHZhciByZXN1bWVJbmRleCA9IGZpbmRGaXJzdFVuYW5zd2VyZWQoKTsKICAgICAgICBpZiAocmVzdW1lSW5kZXggPT09IC0xKSB7CiAgICAgICAgICAvKiBBbGwgYW5zd2VyZWQgKi8KICAgICAgICAgIHFmc1N0YXRlLmluZGV4ID0gMDsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgcWZzU3RhdGUuaW5kZXggPSByZXN1bWVJbmRleDsKICAgICAgICAgIC8qIElmIHBhc3QgbWlkcG9pbnQsIG1hcmsgYXMgc2hvd24gKi8KICAgICAgICAgIGlmIChxZnNTdGF0ZS5pbmRleCA+PSA1KSB7CiAgICAgICAgICAgIHFmc1N0YXRlLnNob3dpbmdNaWRwb2ludCA9IHRydWU7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHFmc1Nob3dTY3JlZW4oJ3F1aXonKTsKICAgICAgICByZW5kZXJRdWVzdGlvbigpOwogICAgICB9KTsKCiAgICAgIHFmc1VJLm5leHRCdG4uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBmdW5jdGlvbiAoKSB7CiAgICAgICAgaGFuZGxlTmV4dCgpOwogICAgICB9KTsKCiAgICAgIHFmc1VJLnNraXBCdG4uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBmdW5jdGlvbiAoKSB7CiAgICAgICAgaGFuZGxlU2tpcCgpOwogICAgICB9KTsKCiAgICAgIHFmc1VJLmNvbnRpbnVlQnRuLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZnVuY3Rpb24gKCkgewogICAgICAgIHFmc1Nob3dTY3JlZW4oJ3F1aXonKTsKICAgICAgICByZW5kZXJRdWVzdGlvbigpOwogICAgICB9KTsKCiAgICAgIHFmc1VJLmVuZEJ0bi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGZ1bmN0aW9uICgpIHsKICAgICAgICBxZnNVSS5zYXZlQ29uZmlybS5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJzsKICAgICAgfSk7CgogICAgICB2YXIgbmV4dFNlc3Npb25CdG4gPSBxZk9uZSgnW2RhdGEtcWYtc291bC1hY3Rpb249Im5leHQtc2Vzc2lvbiJdJyk7CiAgICAgIGlmIChuZXh0U2Vzc2lvbkJ0bikgewogICAgICAgIG5leHRTZXNzaW9uQnRuLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZnVuY3Rpb24gKGUpIHsKICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTsKICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gJy9zb3VsLXNlc3Npb24zLz91aWQ9JyArIGVuY29kZVVSSUNvbXBvbmVudChzdG9yYWdlRGF0YS51c2VySWQpOwogICAgICAgIH0pOwogICAgICB9CiAgICB9KSgpOwogIA==
