@echo off rem Kiro local helper (Windows) rem Runs a LOCAL server on http://localhost:3128. rem It never reads passwords, cookies, browser session, and never stores tokens. setlocal set "KIRO_HELPER_PORT=3128" set "KIRO_PANEL_URL=https://painel.conectai.site" set "HELPER_PY=%TEMP%\kiro-local-helper.py" echo Kiro local helper - http://localhost:%KIRO_HELPER_PORT% echo Nenhuma senha, cookie ou sessao sera lida ou salva. set "PYBIN=" where python >nul 2>nul && set "PYBIN=python" if not defined PYBIN ( where py >nul 2>nul && set "PYBIN=py" ) if not defined PYBIN ( echo ERRO: Python 3 nao encontrado. Instale o Python 3 e tente novamente. exit /b 1 ) powershell -NoProfile -Command "[IO.File]::WriteAllBytes('%HELPER_PY%', [Convert]::FromBase64String('aW1wb3J0IG9zLCBqc29uLCBoYXNobGliLCBiYXNlNjQsIHNxbGl0ZTMsIHVybGxpYi5yZXF1ZXN0LCB1cmxsaWIucGFyc2UKZnJvbSBodHRwLnNlcnZlciBpbXBvcnQgQmFzZUhUVFBSZXF1ZXN0SGFuZGxlciwgSFRUUFNlcnZlcgoKUE9SVCA9IGludChvcy5lbnZpcm9uLmdldCgiS0lST19IRUxQRVJfUE9SVCIsICIzMTI4IikpClBBTkVMID0gb3MuZW52aXJvbi5nZXQoIktJUk9fUEFORUxfVVJMIiwgImh0dHA6Ly9sb2NhbGhvc3Q6MzAwMCIpLnJzdHJpcCgiLyIpCklNUE9SVF9DT01QTEVURV9VUkwgPSBQQU5FTCArICIvYXBpL2tpcm8tbG9jYWwvaW1wb3J0LWNvbXBsZXRlIgpWRVJTSU9OID0gIjEuMC4wIgoKIyBJbi1tZW1vcnkgb25seS4gTWFwcyBzb3VyY2VJZCAtPiBwYXJzZWQgY3JlZGVudGlhbCAoaW5jbC4gdG9rZW5zKS4gTmV2ZXIKIyB3cml0dGVuIHRvIGRpc2ssIG5ldmVyIGxvZ2dlZCwgbmV2ZXIgcHJpbnRlZC4KU09VUkNFUyA9IHt9CgpkZWYgaG9tZSgpOgogICAgcmV0dXJuIG9zLnBhdGguZXhwYW5kdXNlcigifiIpCgpkZWYgc2hvcnRfaWQodGV4dCk6CiAgICByZXR1cm4gaGFzaGxpYi5zaGEyNTYodGV4dC5lbmNvZGUoInV0Zi04IikpLmhleGRpZ2VzdCgpWzoxMl0KCmRlZiBjYW5kaWRhdGVfcGF0aHMoKToKICAgIGggPSBob21lKCkKICAgIGFwcGRhdGEgPSBvcy5lbnZpcm9uLmdldCgiQVBQREFUQSIsICIiKQogICAgbG9jYWxhcHBkYXRhID0gb3MuZW52aXJvbi5nZXQoIkxPQ0FMQVBQREFUQSIsICIiKQogICAgaXRlbXMgPSBbCiAgICAgICAgKCJLSVJPX0lERV9KU09OIiwgb3MucGF0aC5qb2luKGgsICIuYXdzIiwgInNzbyIsICJjYWNoZSIsICJraXJvLWF1dGgtdG9rZW4uanNvbiIpKSwKICAgICAgICAoIktJUk9fQ0xJX1NRTElURSIsIG9zLnBhdGguam9pbihoLCAiTGlicmFyeSIsICJBcHBsaWNhdGlvbiBTdXBwb3J0IiwgImtpcm8tY2xpIiwgImRhdGEuc3FsaXRlMyIpKSwKICAgICAgICAoIktJUk9fQ0xJX1NRTElURSIsIG9zLnBhdGguam9pbihoLCAiLmxvY2FsIiwgInNoYXJlIiwgImtpcm8tY2xpIiwgImRhdGEuc3FsaXRlMyIpKSwKICAgICAgICAoIkFNQVpPTl9RX1NRTElURSIsIG9zLnBhdGguam9pbihoLCAiTGlicmFyeSIsICJBcHBsaWNhdGlvbiBTdXBwb3J0IiwgImFtYXpvbi1xIiwgImRhdGEuc3FsaXRlMyIpKSwKICAgICAgICAoIkFNQVpPTl9RX1NRTElURSIsIG9zLnBhdGguam9pbihoLCAiLmxvY2FsIiwgInNoYXJlIiwgImFtYXpvbi1xIiwgImRhdGEuc3FsaXRlMyIpKSwKICAgIF0KICAgIGlmIGFwcGRhdGE6CiAgICAgICAgaXRlbXMuYXBwZW5kKCgiS0lST19DTElfU1FMSVRFIiwgb3MucGF0aC5qb2luKGFwcGRhdGEsICJraXJvLWNsaSIsICJkYXRhLnNxbGl0ZTMiKSkpCiAgICAgICAgaXRlbXMuYXBwZW5kKCgiQU1BWk9OX1FfU1FMSVRFIiwgb3MucGF0aC5qb2luKGFwcGRhdGEsICJhbWF6b24tcSIsICJkYXRhLnNxbGl0ZTMiKSkpCiAgICBpZiBsb2NhbGFwcGRhdGE6CiAgICAgICAgaXRlbXMuYXBwZW5kKCgiS0lST19DTElfU1FMSVRFIiwgb3MucGF0aC5qb2luKGxvY2FsYXBwZGF0YSwgImtpcm8tY2xpIiwgImRhdGEuc3FsaXRlMyIpKSkKICAgIHJldHVybiBpdGVtcwoKZGVmIHBpY2soZCwgKm5hbWVzKToKICAgIGZvciBuIGluIG5hbWVzOgogICAgICAgIGlmIGlzaW5zdGFuY2UoZCwgZGljdCkgYW5kIGQuZ2V0KG4pIG5vdCBpbiAoTm9uZSwgIiIpOgogICAgICAgICAgICByZXR1cm4gZC5nZXQobikKICAgIHJldHVybiBOb25lCgpkZWYgZGVjb2RlX2p3dF9lbWFpbChhY2Nlc3NfdG9rZW4pOgogICAgIyBMb2NhbCwgc2lnbmF0dXJlLWxlc3MgZGVjb2RlIHB1cmVseSB0byBzdXJmYWNlIHRoZSBhY2NvdW50IGVtYWlsLgogICAgdHJ5OgogICAgICAgIHBhcnRzID0gYWNjZXNzX3Rva2VuLnNwbGl0KCIuIikKICAgICAgICBpZiBsZW4ocGFydHMpIDwgMjoKICAgICAgICAgICAgcmV0dXJuIE5vbmUKICAgICAgICBwYXlsb2FkID0gcGFydHNbMV0KICAgICAgICBwYXlsb2FkICs9ICI9IiAqICgtbGVuKHBheWxvYWQpICUgNCkKICAgICAgICBkYXRhID0ganNvbi5sb2FkcyhiYXNlNjQudXJsc2FmZV9iNjRkZWNvZGUocGF5bG9hZCkuZGVjb2RlKCJ1dGYtOCIsICJpZ25vcmUiKSkKICAgICAgICByZXR1cm4gcGljayhkYXRhLCAiZW1haWwiLCAic3ViIikKICAgIGV4Y2VwdCBFeGNlcHRpb246CiAgICAgICAgcmV0dXJuIE5vbmUKCmRlZiBjbGFzc2lmeV9hdXRoX3R5cGUoY3JlZCk6CiAgICBpZiBjcmVkLmdldCgiY2xpZW50SWQiKSBhbmQgY3JlZC5nZXQoImNsaWVudFNlY3JldCIpOgogICAgICAgIHJldHVybiAiQVdTX1NTT19PSURDIgogICAgcHJvdmlkZXIgPSAoY3JlZC5nZXQoInByb3ZpZGVyTmFtZSIpIG9yIGNyZWQuZ2V0KCJhdXRoTWV0aG9kIikgb3IgIiIpLmxvd2VyKCkKICAgIGlmIHByb3ZpZGVyIGluICgiZ29vZ2xlIiwgImdpdGh1YiIsICJzb2NpYWwiLCAia2lybyIpOgogICAgICAgIHJldHVybiAiS0lST19TT0NJQUwiCiAgICBpZiBjcmVkLmdldCgic3RhcnRVcmwiKToKICAgICAgICByZXR1cm4gIkJVSUxERVJfSUQiCiAgICByZXR1cm4gIktJUk9fREVTS1RPUCIgaWYgY3JlZC5nZXQoInJlZnJlc2hUb2tlbiIpIGVsc2UgIlVOS05PV04iCgpkZWYgbm9ybWFsaXplKHJhdywgc291cmNlKToKICAgIGNyZWQgPSB7CiAgICAgICAgInNvdXJjZSI6IHNvdXJjZSwKICAgICAgICAiYWNjZXNzVG9rZW4iOiBwaWNrKHJhdywgImFjY2Vzc1Rva2VuIiwgImFjY2Vzc190b2tlbiIpLAogICAgICAgICJyZWZyZXNoVG9rZW4iOiBwaWNrKHJhdywgInJlZnJlc2hUb2tlbiIsICJyZWZyZXNoX3Rva2VuIiksCiAgICAgICAgImV4cGlyZXNBdCI6IHBpY2socmF3LCAiZXhwaXJlc0F0IiwgImV4cGlyZXNfYXQiKSwKICAgICAgICAicmVnaW9uIjogcGljayhyYXcsICJyZWdpb24iKSBvciAidXMtZWFzdC0xIiwKICAgICAgICAicHJvZmlsZUFybiI6IHBpY2socmF3LCAicHJvZmlsZUFybiIsICJwcm9maWxlX2FybiIpLAogICAgICAgICJjbGllbnRJZCI6IHBpY2socmF3LCAiY2xpZW50SWQiLCAiY2xpZW50X2lkIiksCiAgICAgICAgImNsaWVudFNlY3JldCI6IHBpY2socmF3LCAiY2xpZW50U2VjcmV0IiwgImNsaWVudF9zZWNyZXQiKSwKICAgICAgICAic3RhcnRVcmwiOiBwaWNrKHJhdywgInN0YXJ0VXJsIiwgInN0YXJ0X3VybCIpLAogICAgICAgICJwcm92aWRlck5hbWUiOiBwaWNrKHJhdywgInByb3ZpZGVyIiwgInByb3ZpZGVyTmFtZSIsICJhdXRoTWV0aG9kIiksCiAgICB9CiAgICBjcmVkWyJhdXRoVHlwZSJdID0gY2xhc3NpZnlfYXV0aF90eXBlKGNyZWQpCiAgICBlbWFpbCA9IE5vbmUKICAgIGlmIGNyZWRbImFjY2Vzc1Rva2VuIl06CiAgICAgICAgZW1haWwgPSBkZWNvZGVfand0X2VtYWlsKGNyZWRbImFjY2Vzc1Rva2VuIl0pCiAgICBjcmVkWyJhY2NvdW50RW1haWwiXSA9IGVtYWlsCiAgICByZXR1cm4gY3JlZAoKZGVmIHBhcnNlX2tpcm9faWRlX2pzb24ocGF0aCk6CiAgICB0cnk6CiAgICAgICAgd2l0aCBvcGVuKHBhdGgsICJyIiwgZW5jb2Rpbmc9InV0Zi04IikgYXMgZjoKICAgICAgICAgICAgcmF3ID0ganNvbi5sb2FkKGYpCiAgICAgICAgcmV0dXJuIFtub3JtYWxpemUocmF3LCAiS0lST19JREVfSlNPTiIpXQogICAgZXhjZXB0IEV4Y2VwdGlvbjoKICAgICAgICByZXR1cm4gW10KClRPS0VOX0tFWVMgPSBbCiAgICAia2lyb2NsaTpzb2NpYWw6dG9rZW4iLCAia2lyb2NsaTpvZGljOnRva2VuIiwgImtpcm9jbGk6b2lkYzp0b2tlbiIsCiAgICAiY29kZXdoaXNwZXJlcjpvZGljOnRva2VuIiwgImNvZGV3aGlzcGVyZXI6b2lkYzp0b2tlbiIsCl0KCmRlZiBwYXJzZV9zcWxpdGUocGF0aCwgc291cmNlKToKICAgIGNyZWRzID0gW10KICAgIHRyeToKICAgICAgICBjb25uID0gc3FsaXRlMy5jb25uZWN0KCJmaWxlOiVzP21vZGU9cm8iICUgcGF0aCwgdXJpPVRydWUpCiAgICAgICAgdHJ5OgogICAgICAgICAgICBjdXIgPSBjb25uLmN1cnNvcigpCiAgICAgICAgICAgIGN1ci5leGVjdXRlKCJTRUxFQ1Qga2V5LCB2YWx1ZSBGUk9NIGF1dGhfa3YiKQogICAgICAgICAgICByb3dzID0gY3VyLmZldGNoYWxsKCkKICAgICAgICBmaW5hbGx5OgogICAgICAgICAgICBjb25uLmNsb3NlKCkKICAgIGV4Y2VwdCBFeGNlcHRpb246CiAgICAgICAgcmV0dXJuIGNyZWRzCiAgICBmb3Iga2V5LCB2YWx1ZSBpbiByb3dzOgogICAgICAgIGlmIG5vdCBhbnkodGsgaW4gc3RyKGtleSkgZm9yIHRrIGluIFRPS0VOX0tFWVMpOgogICAgICAgICAgICBjb250aW51ZQogICAgICAgIHRyeToKICAgICAgICAgICAgcmF3ID0ganNvbi5sb2Fkcyh2YWx1ZSkKICAgICAgICBleGNlcHQgRXhjZXB0aW9uOgogICAgICAgICAgICBjb250aW51ZQogICAgICAgIGlmIGlzaW5zdGFuY2UocmF3LCBkaWN0KToKICAgICAgICAgICAgY3JlZHMuYXBwZW5kKG5vcm1hbGl6ZShyYXcsIHNvdXJjZSkpCiAgICByZXR1cm4gY3JlZHMKCmRlZiBzY2FuKCk6CiAgICBTT1VSQ0VTLmNsZWFyKCkKICAgIHJlc3VsdHMgPSBbXQogICAgZm9yIHNvdXJjZSwgcGF0aCBpbiBjYW5kaWRhdGVfcGF0aHMoKToKICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMocGF0aCk6CiAgICAgICAgICAgIGNvbnRpbnVlCiAgICAgICAgaWYgc291cmNlID09ICJLSVJPX0lERV9KU09OIjoKICAgICAgICAgICAgcGFyc2VkID0gcGFyc2Vfa2lyb19pZGVfanNvbihwYXRoKQogICAgICAgIGVsc2U6CiAgICAgICAgICAgIHBhcnNlZCA9IHBhcnNlX3NxbGl0ZShwYXRoLCBzb3VyY2UpCiAgICAgICAgZm9yIGNyZWQgaW4gcGFyc2VkOgogICAgICAgICAgICBzaWQgPSBzaG9ydF9pZChwYXRoICsgInwiICsgKGNyZWQuZ2V0KCJhY2NvdW50RW1haWwiKSBvciAiIikgKyAifCIgKyBzb3VyY2UpCiAgICAgICAgICAgIGNyZWRbInNvdXJjZVBhdGhIYXNoIl0gPSBzaG9ydF9pZChwYXRoKQogICAgICAgICAgICBTT1VSQ0VTW3NpZF0gPSBjcmVkCiAgICAgICAgICAgIHJlc3VsdHMuYXBwZW5kKHsKICAgICAgICAgICAgICAgICJpZCI6IHNpZCwKICAgICAgICAgICAgICAgICJzb3VyY2UiOiBzb3VyY2UsCiAgICAgICAgICAgICAgICAicGF0aEV4aXN0cyI6IFRydWUsCiAgICAgICAgICAgICAgICAiaGFzQWNjZXNzVG9rZW4iOiBib29sKGNyZWQuZ2V0KCJhY2Nlc3NUb2tlbiIpKSwKICAgICAgICAgICAgICAgICJoYXNSZWZyZXNoVG9rZW4iOiBib29sKGNyZWQuZ2V0KCJyZWZyZXNoVG9rZW4iKSksCiAgICAgICAgICAgICAgICAiaGFzRXhwaXJlc0F0IjogYm9vbChjcmVkLmdldCgiZXhwaXJlc0F0IikpLAogICAgICAgICAgICAgICAgImhhc1Byb2ZpbGVBcm4iOiBib29sKGNyZWQuZ2V0KCJwcm9maWxlQXJuIikpLAogICAgICAgICAgICAgICAgImhhc1JlZ2lvbiI6IGJvb2woY3JlZC5nZXQoInJlZ2lvbiIpKSwKICAgICAgICAgICAgICAgICJoYXNDbGllbnRJZCI6IGJvb2woY3JlZC5nZXQoImNsaWVudElkIikpLAogICAgICAgICAgICAgICAgImhhc0NsaWVudFNlY3JldCI6IGJvb2woY3JlZC5nZXQoImNsaWVudFNlY3JldCIpKSwKICAgICAgICAgICAgICAgICJyZWdpb24iOiBjcmVkLmdldCgicmVnaW9uIiksCiAgICAgICAgICAgICAgICAiZXhwaXJlc0F0IjogY3JlZC5nZXQoImV4cGlyZXNBdCIpLAogICAgICAgICAgICAgICAgImF1dGhUeXBlIjogY3JlZC5nZXQoImF1dGhUeXBlIiksCiAgICAgICAgICAgICAgICAicHJvdmlkZXJOYW1lIjogY3JlZC5nZXQoInByb3ZpZGVyTmFtZSIpLAogICAgICAgICAgICAgICAgImFjY291bnRFbWFpbCI6IGNyZWQuZ2V0KCJhY2NvdW50RW1haWwiKSwKICAgICAgICAgICAgICAgICJjYW5JbXBvcnQiOiBib29sKGNyZWQuZ2V0KCJyZWZyZXNoVG9rZW4iKSksCiAgICAgICAgICAgIH0pCiAgICByZXR1cm4geyJmb3VuZCI6IGxlbihyZXN1bHRzKSA+IDAsICJzb3VyY2VzIjogcmVzdWx0c30KCmRlZiBkb19pbXBvcnQoc291cmNlX2lkLCBpbXBvcnRfc2Vzc2lvbl90b2tlbik6CiAgICBpZiBub3QgU09VUkNFUzoKICAgICAgICBzY2FuKCkKICAgIGNyZWQgPSBTT1VSQ0VTLmdldChzb3VyY2VfaWQpCiAgICBpZiBub3QgY3JlZDoKICAgICAgICByZXR1cm4geyJvayI6IEZhbHNlLCAiZXJyb3IiOiAic291cmNlX25vdF9mb3VuZCJ9CiAgICBpZiBub3QgY3JlZC5nZXQoInJlZnJlc2hUb2tlbiIpOgogICAgICAgIHJldHVybiB7Im9rIjogRmFsc2UsICJlcnJvciI6ICJtaXNzaW5nX3JlZnJlc2hfdG9rZW4ifQogICAgcGF5bG9hZCA9IHsKICAgICAgICAiaW1wb3J0U2Vzc2lvblRva2VuIjogaW1wb3J0X3Nlc3Npb25fdG9rZW4sCiAgICAgICAgInNvdXJjZSI6IGNyZWQuZ2V0KCJzb3VyY2UiKSwKICAgICAgICAiYWNjZXNzVG9rZW4iOiBjcmVkLmdldCgiYWNjZXNzVG9rZW4iKSwKICAgICAgICAicmVmcmVzaFRva2VuIjogY3JlZC5nZXQoInJlZnJlc2hUb2tlbiIpLAogICAgICAgICJleHBpcmVzQXQiOiBjcmVkLmdldCgiZXhwaXJlc0F0IiksCiAgICAgICAgInJlZ2lvbiI6IGNyZWQuZ2V0KCJyZWdpb24iKSBvciAidXMtZWFzdC0xIiwKICAgICAgICAicHJvZmlsZUFybiI6IGNyZWQuZ2V0KCJwcm9maWxlQXJuIiksCiAgICAgICAgImNsaWVudElkIjogY3JlZC5nZXQoImNsaWVudElkIiksCiAgICAgICAgImNsaWVudFNlY3JldCI6IGNyZWQuZ2V0KCJjbGllbnRTZWNyZXQiKSwKICAgICAgICAiYXV0aFR5cGUiOiBjcmVkLmdldCgiYXV0aFR5cGUiKSwKICAgICAgICAicHJvdmlkZXJOYW1lIjogY3JlZC5nZXQoInByb3ZpZGVyTmFtZSIpLAogICAgICAgICJhY2NvdW50RW1haWwiOiBjcmVkLmdldCgiYWNjb3VudEVtYWlsIiksCiAgICAgICAgInNvdXJjZVBhdGhIYXNoIjogY3JlZC5nZXQoInNvdXJjZVBhdGhIYXNoIiksCiAgICAgICAgIm1ldGFkYXRhIjogeyJzdGFydFVybCI6IGNyZWQuZ2V0KCJzdGFydFVybCIpfSwKICAgIH0KICAgIHRyeToKICAgICAgICBib2R5ID0ganNvbi5kdW1wcyhwYXlsb2FkKS5lbmNvZGUoInV0Zi04IikKICAgICAgICByZXEgPSB1cmxsaWIucmVxdWVzdC5SZXF1ZXN0KElNUE9SVF9DT01QTEVURV9VUkwsIGRhdGE9Ym9keSwKICAgICAgICAgICAgaGVhZGVycz17IkNvbnRlbnQtVHlwZSI6ICJhcHBsaWNhdGlvbi9qc29uIn0pCiAgICAgICAgcmVzcCA9IHVybGxpYi5yZXF1ZXN0LnVybG9wZW4ocmVxLCB0aW1lb3V0PTE1KQogICAgICAgIHJhdyA9IHJlc3AucmVhZCgpLmRlY29kZSgidXRmLTgiLCAiaWdub3JlIikKICAgICAgICB0cnk6CiAgICAgICAgICAgIHBhcnNlZCA9IGpzb24ubG9hZHMocmF3KQogICAgICAgIGV4Y2VwdCBFeGNlcHRpb246CiAgICAgICAgICAgIHBhcnNlZCA9IHt9CiAgICAgICAgcmV0dXJuIHsib2siOiBUcnVlLCAiZm9yd2FyZGVkIjogVHJ1ZSwgInBhbmVsIjogcGFyc2VkfQogICAgZXhjZXB0IEV4Y2VwdGlvbjoKICAgICAgICByZXR1cm4geyJvayI6IEZhbHNlLCAiZm9yd2FyZGVkIjogRmFsc2UsICJlcnJvciI6ICJwYW5lbF91bnJlYWNoYWJsZSJ9CgpIRUxQX0hUTUwgPSAoIjwhZG9jdHlwZSBodG1sPjxodG1sPjxoZWFkPjxtZXRhIGNoYXJzZXQ9J3V0Zi04Jz48dGl0bGU+S2lybyBMb2NhbCBIZWxwZXI8L3RpdGxlPiIKICAgICI8L2hlYWQ+PGJvZHkgc3R5bGU9J2ZvbnQtZmFtaWx5OnN5c3RlbS11aSxzYW5zLXNlcmlmO2JhY2tncm91bmQ6IzE3MTcxNztjb2xvcjojZmZmOyIKICAgICJwYWRkaW5nOjQ4cHg7bWF4LXdpZHRoOjY0MHB4O21hcmdpbjphdXRvJz4iCiAgICAiPGgyIHN0eWxlPSdjb2xvcjojM2VjZjhlJz5IZWxwZXIgS2lybyBsb2NhbCBhdGl2by48L2gyPiIKICAgICI8cD5FbGUgbmFvIGxlIHNlbmhhLCBjb29raWUgb3Ugc2Vzc2FvLjwvcD4iCiAgICAiPHA+RWxlIGFwZW5hcyBsb2NhbGl6YSBhcnF1aXZvcyBkZSBjcmVkZW5jaWFpcyBqYSBjcmlhZG9zIHBlbG8gS2lybyBJREUvQ0xJIGFwb3MgbG9naW4gbWFudWFsLjwvcD4iCiAgICAiPC9ib2R5PjwvaHRtbD4iKQoKZGVmIGNvcnNfaGVhZGVycyhoYW5kbGVyKToKICAgIGhhbmRsZXIuc2VuZF9oZWFkZXIoIkFjY2Vzcy1Db250cm9sLUFsbG93LU9yaWdpbiIsICIqIikKICAgIGhhbmRsZXIuc2VuZF9oZWFkZXIoIkFjY2Vzcy1Db250cm9sLUFsbG93LU1ldGhvZHMiLCAiR0VULCBQT1NULCBPUFRJT05TIikKICAgIGhhbmRsZXIuc2VuZF9oZWFkZXIoIkFjY2Vzcy1Db250cm9sLUFsbG93LUhlYWRlcnMiLCAiQ29udGVudC1UeXBlIikKCmNsYXNzIEhhbmRsZXIoQmFzZUhUVFBSZXF1ZXN0SGFuZGxlcik6CiAgICBkZWYgbG9nX21lc3NhZ2Uoc2VsZiwgKmFyZ3MpOgogICAgICAgIHJldHVybiAgIyBuZXZlciBsb2cgcmVxdWVzdCBsaW5lcyAobWF5IGluY2x1ZGUgdGhlIG9uZS10aW1lIGNvZGUpCgogICAgZGVmIF9qc29uKHNlbGYsIGNvZGUsIG9iaik6CiAgICAgICAgYm9keSA9IGpzb24uZHVtcHMob2JqKS5lbmNvZGUoInV0Zi04IikKICAgICAgICBzZWxmLnNlbmRfcmVzcG9uc2UoY29kZSkKICAgICAgICBzZWxmLnNlbmRfaGVhZGVyKCJDb250ZW50LVR5cGUiLCAiYXBwbGljYXRpb24vanNvbiIpCiAgICAgICAgY29yc19oZWFkZXJzKHNlbGYpCiAgICAgICAgc2VsZi5lbmRfaGVhZGVycygpCiAgICAgICAgc2VsZi53ZmlsZS53cml0ZShib2R5KQoKICAgIGRlZiBfaHRtbChzZWxmLCBjb2RlLCBodG1sKToKICAgICAgICBib2R5ID0gaHRtbC5lbmNvZGUoInV0Zi04IikKICAgICAgICBzZWxmLnNlbmRfcmVzcG9uc2UoY29kZSkKICAgICAgICBzZWxmLnNlbmRfaGVhZGVyKCJDb250ZW50LVR5cGUiLCAidGV4dC9odG1sOyBjaGFyc2V0PXV0Zi04IikKICAgICAgICBjb3JzX2hlYWRlcnMoc2VsZikKICAgICAgICBzZWxmLmVuZF9oZWFkZXJzKCkKICAgICAgICBzZWxmLndmaWxlLndyaXRlKGJvZHkpCgogICAgZGVmIGRvX09QVElPTlMoc2VsZik6CiAgICAgICAgc2VsZi5zZW5kX3Jlc3BvbnNlKDIwNCkKICAgICAgICBjb3JzX2hlYWRlcnMoc2VsZikKICAgICAgICBzZWxmLmVuZF9oZWFkZXJzKCkKCiAgICBkZWYgZG9fR0VUKHNlbGYpOgogICAgICAgIHBhcnNlZCA9IHVybGxpYi5wYXJzZS51cmxwYXJzZShzZWxmLnBhdGgpCiAgICAgICAgaWYgcGFyc2VkLnBhdGggPT0gIi9oZWFsdGgiOgogICAgICAgICAgICBzZWxmLl9qc29uKDIwMCwgeyJvayI6IFRydWUsICJzZXJ2aWNlIjogImtpcm8tbG9jYWwtaGVscGVyIiwgInBvcnQiOiBQT1JULCAidmVyc2lvbiI6IFZFUlNJT059KQogICAgICAgICAgICByZXR1cm4KICAgICAgICBpZiBwYXJzZWQucGF0aCA9PSAiL3NjYW4ta2lyby1jcmVkZW50aWFscyI6CiAgICAgICAgICAgIHNlbGYuX2pzb24oMjAwLCBzY2FuKCkpCiAgICAgICAgICAgIHJldHVybgogICAgICAgIGlmIHBhcnNlZC5wYXRoID09ICIvb2F1dGgvY2FsbGJhY2siOgogICAgICAgICAgICBxcyA9IHVybGxpYi5wYXJzZS5wYXJzZV9xcyhwYXJzZWQucXVlcnkpCiAgICAgICAgICAgIGNvZGUgPSAocXMuZ2V0KCJjb2RlIikgb3IgWyIiXSlbMF0KICAgICAgICAgICAgc3RhdGUgPSAocXMuZ2V0KCJzdGF0ZSIpIG9yIFsiIl0pWzBdCiAgICAgICAgICAgIGZ1bGxfdXJsID0gImh0dHA6Ly9sb2NhbGhvc3Q6JWQvb2F1dGgvY2FsbGJhY2s/JXMiICUgKFBPUlQsIHBhcnNlZC5xdWVyeSkKICAgICAgICAgICAgZm9yd2FyZGVkID0gRmFsc2UKICAgICAgICAgICAgaWYgY29kZSBhbmQgc3RhdGU6CiAgICAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgICAgYiA9IGpzb24uZHVtcHMoeyJjb2RlIjogY29kZSwgInN0YXRlIjogc3RhdGV9KS5lbmNvZGUoInV0Zi04IikKICAgICAgICAgICAgICAgICAgICByID0gdXJsbGliLnJlcXVlc3QuUmVxdWVzdChQQU5FTCArICIvYXBpL2tpcm8tbG9naW4vY29tcGxldGUiLCBkYXRhPWIsCiAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRlcnM9eyJDb250ZW50LVR5cGUiOiAiYXBwbGljYXRpb24vanNvbiJ9KQogICAgICAgICAgICAgICAgICAgIHVybGxpYi5yZXF1ZXN0LnVybG9wZW4ociwgdGltZW91dD0xMCkucmVhZCgpCiAgICAgICAgICAgICAgICAgICAgZm9yd2FyZGVkID0gVHJ1ZQogICAgICAgICAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbjoKICAgICAgICAgICAgICAgICAgICBmb3J3YXJkZWQgPSBGYWxzZQogICAgICAgICAgICBtc2cgPSAiPGgyIHN0eWxlPSdjb2xvcjojM2VjZjhlJz5Mb2dpbiBLaXJvIHJlY2ViaWRvIGNvbSBzdWNlc3NvLjwvaDI+PHA+Vm9jZSBqYSBwb2RlIHZvbHRhciBhbyBwYWluZWwuPC9wPjxwPk5lbmh1bWEgc2VuaGEsIGNvb2tpZSBvdSBzZXNzYW8gZm9pIHNhbHZhLjwvcD4iCiAgICAgICAgICAgIGlmIG5vdCBmb3J3YXJkZWQ6CiAgICAgICAgICAgICAgICBtc2cgKz0gIjxwPlNlIG8gcGFpbmVsIG5hbyBhdHVhbGl6YXIsIGNvcGllIGUgY29sZSBlc3RhIFVSTCBubyBjYW1wbyBtYW51YWw6PC9wPjxjb2RlIHN0eWxlPSd3b3JkLWJyZWFrOmJyZWFrLWFsbCc+IiArIGZ1bGxfdXJsICsgIjwvY29kZT4iCiAgICAgICAgICAgIHNlbGYuX2h0bWwoMjAwLCAiPCFkb2N0eXBlIGh0bWw+PGh0bWw+PGhlYWQ+PG1ldGEgY2hhcnNldD0ndXRmLTgnPjwvaGVhZD48Ym9keSBzdHlsZT0nZm9udC1mYW1pbHk6c3lzdGVtLXVpLHNhbnMtc2VyaWY7YmFja2dyb3VuZDojMTcxNzE3O2NvbG9yOiNmZmY7cGFkZGluZzo0OHB4O21heC13aWR0aDo2NDBweDttYXJnaW46YXV0byc+IiArIG1zZyArICI8L2JvZHk+PC9odG1sPiIpCiAgICAgICAgICAgIHJldHVybgogICAgICAgIGlmIHBhcnNlZC5wYXRoID09ICIvIjoKICAgICAgICAgICAgc2VsZi5faHRtbCgyMDAsIEhFTFBfSFRNTCkKICAgICAgICAgICAgcmV0dXJuCiAgICAgICAgc2VsZi5fanNvbig0MDQsIHsib2siOiBGYWxzZSwgImVycm9yIjogIm5vdF9mb3VuZCJ9KQoKICAgIGRlZiBkb19QT1NUKHNlbGYpOgogICAgICAgIHBhcnNlZCA9IHVybGxpYi5wYXJzZS51cmxwYXJzZShzZWxmLnBhdGgpCiAgICAgICAgaWYgcGFyc2VkLnBhdGggIT0gIi9pbXBvcnQta2lyby1jcmVkZW50aWFscyI6CiAgICAgICAgICAgIHNlbGYuX2pzb24oNDA0LCB7Im9rIjogRmFsc2UsICJlcnJvciI6ICJub3RfZm91bmQifSkKICAgICAgICAgICAgcmV0dXJuCiAgICAgICAgbGVuZ3RoID0gaW50KHNlbGYuaGVhZGVycy5nZXQoIkNvbnRlbnQtTGVuZ3RoIiwgIjAiKSBvciAiMCIpCiAgICAgICAgdHJ5OgogICAgICAgICAgICBkYXRhID0ganNvbi5sb2FkcyhzZWxmLnJmaWxlLnJlYWQobGVuZ3RoKS5kZWNvZGUoInV0Zi04IiwgImlnbm9yZSIpKSBpZiBsZW5ndGggZWxzZSB7fQogICAgICAgIGV4Y2VwdCBFeGNlcHRpb246CiAgICAgICAgICAgIGRhdGEgPSB7fQogICAgICAgIHNvdXJjZV9pZCA9IGRhdGEuZ2V0KCJzb3VyY2VJZCIsICIiKQogICAgICAgIGltcG9ydF9zZXNzaW9uX3Rva2VuID0gZGF0YS5nZXQoImltcG9ydFNlc3Npb25Ub2tlbiIsICIiKQogICAgICAgIGlmIG5vdCBzb3VyY2VfaWQgb3Igbm90IGltcG9ydF9zZXNzaW9uX3Rva2VuOgogICAgICAgICAgICBzZWxmLl9qc29uKDQwMCwgeyJvayI6IEZhbHNlLCAiZXJyb3IiOiAibWlzc2luZ19zb3VyY2Vfb3Jfc2Vzc2lvbiJ9KQogICAgICAgICAgICByZXR1cm4KICAgICAgICBzZWxmLl9qc29uKDIwMCwgZG9faW1wb3J0KHNvdXJjZV9pZCwgaW1wb3J0X3Nlc3Npb25fdG9rZW4pKQoKcHJpbnQoIkhlbHBlciBLaXJvIGxvY2FsIG91dmluZG8gZW0gaHR0cDovL2xvY2FsaG9zdDolZCIgJSBQT1JUKQpwcmludCgiUm90YXM6IC9oZWFsdGgsIC9zY2FuLWtpcm8tY3JlZGVudGlhbHMsIC9pbXBvcnQta2lyby1jcmVkZW50aWFscywgL29hdXRoL2NhbGxiYWNrIikKcHJpbnQoIk5hbyBsZSBuZW0gc2FsdmEgc2VuaGEsIGNvb2tpZSwgc2Vzc2FvIG91IHRva2VuLiBDdHJsK0MgcGFyYSBlbmNlcnJhci4iKQpIVFRQU2VydmVyKCgiMTI3LjAuMC4xIiwgUE9SVCksIEhhbmRsZXIpLnNlcnZlX2ZvcmV2ZXIoKQo='))" "%PYBIN%" "%HELPER_PY%"