# Copyright (C) 2019 The Raphielscape Company LLC.
#
# Licensed under the Raphielscape Public License, Version 1.c (the "License");
# you may not use this file except in compliance with the License.
#

# Thanks github.com/spechide for creating inline bot support.
# Asena UserBot - Yusuf Usta
""" UserBot hazÄ±rlanÄ±ÅŸÄ±. """

import os
from re import compile
from sys import version_info
from logging import basicConfig, getLogger, INFO, DEBUG
from distutils.util import strtobool as sb
from pylast import LastFMNetwork, md5
from pySmartDL import SmartDL
from dotenv import load_dotenv
from requests import get
from telethon.tl.functions.channels import JoinChannelRequest
from telethon.sync import TelegramClient, custom
from telethon.sessions import StringSession
from telethon.events import callbackquery, InlineQuery, NewMessage
from math import ceil

load_dotenv("config.env")

# Bot gÃ¼nlÃ¼kleri kurulumu:
CONSOLE_LOGGER_VERBOSE = sb(os.environ.get("CONSOLE_LOGGER_VERBOSE", "False"))

ASYNC_POOL = []

if CONSOLE_LOGGER_VERBOSE:
    basicConfig(
        format="%(asctime)s - @AsenaUserBot - %(levelname)s - %(message)s",
        level=DEBUG,
    )
else:
    basicConfig(format="%(asctime)s - @AsenaUserBot - %(levelname)s - %(message)s",
                level=INFO)
LOGS = getLogger(__name__)

if version_info[0] < 3 or version_info[1] < 6:
    LOGS.info("En az python 3.6 sÃ¼rÃ¼mÃ¼ne sahip olmanÄ±z gerekir."
              "Birden fazla Ã¶zellik buna baÄŸlÄ±dÄ±r. Bot kapatÄ±lÄ±yor.")
    quit(1)

# YapÄ±landÄ±rmanÄ±n Ã¶nceden kullanÄ±lan deÄŸiÅŸkeni kullanarak dÃ¼zenlenip dÃ¼zenlenmediÄŸini kontrol edin.
# Temel olarak, yapÄ±landÄ±rma dosyasÄ± iÃ§in kontrol.
CONFIG_CHECK = os.environ.get(
    "___________LUTFEN_______BU_____SATIRI_____SILIN__________", None)

if CONFIG_CHECK:
    LOGS.info(
        "LÃ¼tfen ilk hashtag'de belirtilen satÄ±rÄ± config.env dosyasÄ±ndan kaldÄ±rÄ±n"
    )
    quit(1)

# Bot'un dili
LANGUAGE = os.environ.get("LANGUAGE", "DEFAULT").upper()

if not LANGUAGE in ["EN", "TR", "AZ", "UZ", "DEFAULT"]:
    LOGS.info("Bilinmeyen bir dil yazdÄ±nÄ±z. Bundan dolayÄ± DEFAULT kullanÄ±lÄ±yor.")
    LANGUAGE = "DEFAULT"
    
# Asena SÃ¼rÃ¼mÃ¼
ASENA_VERSION = "v4.0"

# Telegram API KEY ve HASH
API_KEY = os.environ.get("API_KEY", None)
API_HASH = os.environ.get("API_HASH", None)

SILINEN_PLUGIN = {}
# UserBot Session String
STRING_SESSION = os.environ.get("STRING_SESSION", None)

# Kanal / Grup ID yapÄ±landÄ±rmasÄ±nÄ± gÃ¼nlÃ¼ÄŸe kaydetme.
BOTLOG_CHATID = int(os.environ.get("BOTLOG_CHATID", None))

# UserBot gÃ¼nlÃ¼kleme Ã¶zelliÄŸi.
BOTLOG = sb(os.environ.get("BOTLOG", "False"))
LOGSPAMMER = sb(os.environ.get("LOGSPAMMER", "False"))

# Hey! Bu bir bot. EndiÅŸelenme ;)
PM_AUTO_BAN = sb(os.environ.get("PM_AUTO_BAN", "False"))

# GÃ¼ncelleyici iÃ§in Heroku hesap bilgileri.
HEROKU_MEMEZ = sb(os.environ.get("HEROKU_MEMEZ", "False"))
HEROKU_APPNAME = os.environ.get("HEROKU_APPNAME", None)
HEROKU_APIKEY = os.environ.get("HEROKU_APIKEY", None)

# GÃ¼ncelleyici iÃ§in Ã¶zel (fork) repo linki.
UPSTREAM_REPO_URL = os.environ.get(
    "UPSTREAM_REPO_URL",
    "https://github.com/quiec/AsenaUserBot.git")

# AyrÄ±ntÄ±lÄ± konsol gÃ¼nlÃ¼gÃ¼
CONSOLE_LOGGER_VERBOSE = sb(os.environ.get("CONSOLE_LOGGER_VERBOSE", "False"))

# SQL VeritabanÄ±
DB_URI = os.environ.get("DATABASE_URL", "sqlite:///asena.db")

# OCR API key
OCR_SPACE_API_KEY = os.environ.get("OCR_SPACE_API_KEY", None)

# remove.bg API key
REM_BG_API_KEY = os.environ.get("REM_BG_API_KEY", None)

# AUTO PP
AUTO_PP = os.environ.get("AUTO_PP", None)

# Warn modÃ¼l
WARN_LIMIT = int(os.environ.get("WARN_LIMIT", 3))
WARN_MODE = os.environ.get("WARN_MODE", "gmute")

if not WARN_MODE in ["gmute", "gban"]:
    WARN_MODE = "gmute"

# Galeri
GALERI_SURE = int(os.environ.get("GALERI_SURE", 60))

# Chrome sÃ¼rÃ¼cÃ¼sÃ¼ ve Google Chrome dosyalarÄ±
CHROME_DRIVER = os.environ.get("CHROME_DRIVER", None)
GOOGLE_CHROME_BIN = os.environ.get("GOOGLE_CHROME_BIN", None)

PLUGINID = os.environ.get("PLUGIN_CHANNEL_ID", None)
# Plugin Ä°Ã§in
if not PLUGINID:
    PLUGIN_CHANNEL_ID = "me"
else:
    PLUGIN_CHANNEL_ID = int(PLUGINID)

# OpenWeatherMap API Key
OPEN_WEATHER_MAP_APPID = os.environ.get("OPEN_WEATHER_MAP_APPID", None)
WEATHER_DEFCITY = os.environ.get("WEATHER_DEFCITY", None)

# Lydia API
LYDIA_API_KEY = os.environ.get("LYDIA_API_KEY", None)

# Anti Spambot
ANTI_SPAMBOT = sb(os.environ.get("ANTI_SPAMBOT", "False"))
ANTI_SPAMBOT_SHOUT = sb(os.environ.get("ANTI_SPAMBOT_SHOUT", "False"))

# Youtube API key
YOUTUBE_API_KEY = os.environ.get("YOUTUBE_API_KEY", None)

# Saat & Tarih - Ãœlke ve Saat Dilimi
COUNTRY = str(os.environ.get("COUNTRY", ""))
TZ_NUMBER = int(os.environ.get("TZ_NUMBER", 1))

# Temiz KarÅŸÄ±lama
CLEAN_WELCOME = sb(os.environ.get("CLEAN_WELCOME", "True"))

# Last.fm ModÃ¼lÃ¼
BIO_PREFIX = os.environ.get("BIO_PREFIX", "@AsenaUserBot | ")
DEFAULT_BIO = os.environ.get("DEFAULT_BIO", None)

LASTFM_API = os.environ.get("LASTFM_API", None)
LASTFM_SECRET = os.environ.get("LASTFM_SECRET", None)
LASTFM_USERNAME = os.environ.get("LASTFM_USERNAME", None)
LASTFM_PASSWORD_PLAIN = os.environ.get("LASTFM_PASSWORD", None)
LASTFM_PASS = md5(LASTFM_PASSWORD_PLAIN)
if LASTFM_API and LASTFM_SECRET and LASTFM_USERNAME and LASTFM_PASS:
    lastfm = LastFMNetwork(api_key=LASTFM_API,
                           api_secret=LASTFM_SECRET,
                           username=LASTFM_USERNAME,
                           password_hash=LASTFM_PASS)
else:
    lastfm = None

# Google Drive ModÃ¼lÃ¼
G_DRIVE_CLIENT_ID = os.environ.get("G_DRIVE_CLIENT_ID", None)
G_DRIVE_CLIENT_SECRET = os.environ.get("G_DRIVE_CLIENT_SECRET", None)
G_DRIVE_AUTH_TOKEN_DATA = os.environ.get("G_DRIVE_AUTH_TOKEN_DATA", None)
GDRIVE_FOLDER_ID = os.environ.get("GDRIVE_FOLDER_ID", None)
TEMP_DOWNLOAD_DIRECTORY = os.environ.get("TMP_DOWNLOAD_DIRECTORY",
                                         "./downloads")

# Inline bot Ã§alÄ±ÅŸmasÄ± iÃ§in
BOT_TOKEN = os.environ.get("BOT_TOKEN", None)
BOT_USERNAME = os.environ.get("BOT_USERNAME", None)

# Genius modÃ¼lÃ¼nÃ¼n Ã§alÄ±ÅŸmasÄ± iÃ§in buradan deÄŸeri alÄ±n https://genius.com/developers her ikisi de aynÄ± deÄŸerlere sahiptir
GENIUS = os.environ.get("GENIUS", None)
CMD_HELP = {}
CMD_HELP_BOT = {}
PM_AUTO_BAN_LIMIT = int(os.environ.get("PM_AUTO_BAN_LIMIT", 4))

SPOTIFY_DC = os.environ.get("SPOTIFY_DC", None)
SPOTIFY_KEY = os.environ.get("SPOTIFY_KEY", None)

PAKET_ISMI = os.environ.get("PAKET_ISMI", "@AsenaUserBot Paketi")

# Otomatik KatÄ±lma
OTOMATIK_KATILMA = sb(os.environ.get("OTOMATIK_KATILMA", "True"))

# Ã–zel Pattern'ler
PATTERNS = os.environ.get("PATTERNS", ".;!,")
WHITELIST = get('https://gitlab.com/Quiec/asen/-/raw/master/whitelist.json').json()

# CloudMail.ru ve MEGA.nz ayarlama
if not os.path.exists('bin'):
    os.mkdir('bin')

binaries = {
    "https://raw.githubusercontent.com/yshalsager/megadown/master/megadown":
    "bin/megadown",
    "https://raw.githubusercontent.com/yshalsager/cmrudl.py/master/cmrudl.py":
    "bin/cmrudl"
}

for binary, path in binaries.items():
    downloader = SmartDL(binary, path, progress_bar=False)
    downloader.start()
    os.chmod(path, 0o755)

# 'bot' deÄŸiÅŸkeni
if STRING_SESSION:
    # pylint: devre dÄ±ÅŸÄ±=geÃ§ersiz ad
    bot = TelegramClient(StringSession(STRING_SESSION), API_KEY, API_HASH)
else:
    # pylint: devre dÄ±ÅŸÄ±=geÃ§ersiz ad
    bot = TelegramClient("userbot", API_KEY, API_HASH)


if os.path.exists("learning-data-root.check"):
    os.remove("learning-data-root.check")
else:
    LOGS.info("Braincheck dosyasÄ± yok, getiriliyor...")

URL = 'https://raw.githubusercontent.com/quiec/databasescape/master/learning-data-root.check'
with open('learning-data-root.check', 'wb') as load:
    load.write(get(URL).content)

async def check_botlog_chatid():
    if not BOTLOG_CHATID and LOGSPAMMER:
        LOGS.info(
            "Ã–zel hata gÃ¼nlÃ¼ÄŸÃ¼nÃ¼n Ã§alÄ±ÅŸmasÄ± iÃ§in yapÄ±landÄ±rmadan BOTLOG_CHATID deÄŸiÅŸkenini ayarlamanÄ±z gerekir.")
        quit(1)

    elif not BOTLOG_CHATID and BOTLOG:
        LOGS.info(
            "GÃ¼nlÃ¼ÄŸe kaydetme Ã¶zelliÄŸinin Ã§alÄ±ÅŸmasÄ± iÃ§in yapÄ±landÄ±rmadan BOTLOG_CHATID deÄŸiÅŸkenini ayarlamanÄ±z gerekir.")
        quit(1)

    elif not BOTLOG or not LOGSPAMMER:
        return

    entity = await bot.get_entity(BOTLOG_CHATID)
    if entity.default_banned_rights.send_messages:
        LOGS.info(
            "HesabÄ±nÄ±zÄ±n BOTLOG_CHATID grubuna mesaj gÃ¶nderme yetkisi yoktur. "
            "Grup ID'sini doÄŸru yazÄ±p yazmadÄ±ÄŸÄ±nÄ±zÄ± kontrol edin.")
        quit(1)
        
if not BOT_TOKEN == None:
    tgbot = TelegramClient(
        "TG_BOT_TOKEN",
        api_id=API_KEY,
        api_hash=API_HASH
    ).start(bot_token=BOT_TOKEN)
else:
    tgbot = None

def butonlastir(sayfa, moduller):
    Satir = 5
    Kolon = 2
    
    moduller = sorted([modul for modul in moduller if not modul.startswith("_")])
    pairs = list(map(list, zip(moduller[::2], moduller[1::2])))
    if len(moduller) % 2 == 1:
        pairs.append([moduller[-1]])
    max_pages = ceil(len(pairs) / Satir)
    pairs = [pairs[i:i + Satir] for i in range(0, len(pairs), Satir)]
    butonlar = []
    for pairs in pairs[sayfa]:
        butonlar.append([
            custom.Button.inline("ðŸ”¸ " + pair, data=f"bilgi[{sayfa}]({pair})") for pair in pairs
        ])

    butonlar.append([custom.Button.inline("â—€ï¸� Geri", data=f"sayfa({(max_pages - 1) if sayfa == 0 else (sayfa - 1)})"), custom.Button.inline("Ä°leri â–¶ï¸�", data=f"sayfa({0 if sayfa == (max_pages - 1) else sayfa + 1})")])
    return [max_pages, butonlar]

with bot:
    if OTOMATIK_KATILMA:
        try:
            bot(JoinChannelRequest("@AsenaUserBot"))
            bot(JoinChannelRequest("@AsenaSupport"))
        except:
            pass

    moduller = CMD_HELP
    me = bot.get_me()
    uid = me.id

    try:
        @tgbot.on(NewMessage(pattern='/start'))
        async def start_bot_handler(event):
            if not event.message.from_id == uid:
                await event.reply(f'`Merhaba ben` @AsenaUserBot`! Ben sahibime (`@{me.username}`) yardÄ±mcÄ± olmak iÃ§in varÄ±m, yaani sana yardÄ±mcÄ± olamam :/ Ama sen de bir Asena aÃ§abilirsin; Kanala bak` @AsenaUserBot')
            else:
                await event.reply(f'`Tengri save Turks! Asena working... ðŸ�º`')

        @tgbot.on(InlineQuery)  # pylint:disable=E0602
        async def inline_handler(event):
            builder = event.builder
            result = None
            query = event.text
            if event.query.user_id == uid and query == "@AsenaUserBot":
                rev_text = query[::-1]
                veriler = (butonlastir(0, sorted(CMD_HELP)))
                result = await builder.article(
                    f"LÃ¼tfen Sadece .yardÄ±m Komutu Ä°le KullanÄ±n",
                    text=f"**ðŸ�º TanrÄ± TÃ¼rk'Ã¼ Korusun!** [Asena](https://t.me/AsenaUserBot) __Ã‡alÄ±ÅŸÄ±yor...__\n\n**YÃ¼klenen ModÃ¼l SayÄ±sÄ±:** `{len(CMD_HELP)}`\n**Sayfa:** 1/{veriler[0]}",
                    buttons=veriler[1],
                    link_preview=False
                )
            elif query.startswith("http"):
                parca = query.split(" ")
                result = builder.article(
                    "Dosya YÃ¼klendi",
                    text=f"**Dosya baÅŸarÄ±lÄ± bir ÅŸekilde {parca[2]} sitesine yÃ¼klendi!**\n\nYÃ¼kleme zamanÄ±: {parca[1][:3]} saniye\n[â€�â€�â€Ž â€Ž]({parca[0]})",
                    buttons=[
                        [custom.Button.url('URL', parca[0])]
                    ],
                    link_preview=True
                )
            else:
                result = builder.article(
                    "@AsenaUserBot",
                    text="""@AsenaUserBot'u kullanmayÄ± deneyin!
HesabÄ±nÄ±zÄ± bot'a Ã§evirebilirsiniz ve bunlarÄ± kullanabilirsiniz. UnutmayÄ±n, siz baÅŸkasÄ±nÄ±n botunu yÃ¶netemezsiniz! Alttaki GitHub adresinden tÃ¼m kurulum detaylarÄ± anlatÄ±lmÄ±ÅŸtÄ±r.""",
                    buttons=[
                        [custom.Button.url("Kanala KatÄ±l", "https://t.me/AsenaUserBot"), custom.Button.url(
                            "Gruba KatÄ±l", "https://t.me/AsenaSupport")],
                        [custom.Button.url(
                            "GitHub", "https://github.com/yusufusta/AsenaUserBot")]
                    ],
                    link_preview=False
                )
            await event.answer([result] if result else None)

        @tgbot.on(callbackquery.CallbackQuery(data=compile(b"sayfa\((.+?)\)")))
        async def sayfa(event):
            if not event.query.user_id == uid: 
                return await event.answer("â�Œ Hey! Benim mesajlarÄ±mÄ± dÃ¼zenlemeye kalkma! Kendine bir @AsenaUserBot kur.", cache_time=0, alert=True)
            sayfa = int(event.data_match.group(1).decode("UTF-8"))
            veriler = butonlastir(sayfa, CMD_HELP)
            await event.edit(
                f"**ðŸ�º TanrÄ± TÃ¼rk'Ã¼ Korusun!** [Asena](https://t.me/AsenaUserBot) __Ã‡alÄ±ÅŸÄ±yor...__\n\n**YÃ¼klenen ModÃ¼l SayÄ±sÄ±:** `{len(CMD_HELP)}`\n**Sayfa:** {sayfa + 1}/{veriler[0]}",
                buttons=veriler[1],
                link_preview=False
            )
        
        @tgbot.on(callbackquery.CallbackQuery(data=compile(b"bilgi\[(\d*)\]\((.*)\)")))
        async def bilgi(event):
            if not event.query.user_id == uid: 
                return await event.answer("â�Œ  Hey! Benim mesajlarÄ±mÄ± dÃ¼zenlemeye kalkma! Kendine bir @AsenaUserBot kur.", cache_time=0, alert=True)

            sayfa = int(event.data_match.group(1).decode("UTF-8"))
            komut = event.data_match.group(2).decode("UTF-8")
            try:
                butonlar = [custom.Button.inline("ðŸ”¹ " + cmd[0], data=f"komut[{komut}[{sayfa}]]({cmd[0]})") for cmd in CMD_HELP_BOT[komut]['commands'].items()]
            except KeyError:
                return await event.answer("â�Œ Bu modÃ¼le aÃ§Ä±klama yazÄ±lmamÄ±ÅŸ.", cache_time=0, alert=True)

            butonlar = [butonlar[i:i + 2] for i in range(0, len(butonlar), 2)]
            butonlar.append([custom.Button.inline("â—€ï¸� Geri", data=f"sayfa({sayfa})")])
            await event.edit(
                f"**ðŸ“— Dosya:** `{komut}`\n**ðŸ”¢ Komut SayÄ±sÄ±:** `{len(CMD_HELP_BOT[komut]['commands'])}`",
                buttons=butonlar,
                link_preview=False
            )
        
        @tgbot.on(callbackquery.CallbackQuery(data=compile(b"komut\[(.*)\[(\d*)\]\]\((.*)\)")))
        async def komut(event):
            if not event.query.user_id == uid: 
                return await event.answer("â�Œ Hey! Benim mesajlarÄ±mÄ± dÃ¼zenlemeye kalkma! Kendine bir @AsenaUserBot kur.", cache_time=0, alert=True)

            cmd = event.data_match.group(1).decode("UTF-8")
            sayfa = int(event.data_match.group(2).decode("UTF-8"))
            komut = event.data_match.group(3).decode("UTF-8")

            result = f"**ðŸ“— Dosya:** `{cmd}`\n"
            if CMD_HELP_BOT[cmd]['info']['info'] == '':
                if not CMD_HELP_BOT[cmd]['info']['warning'] == '':
                    result += f"**â¬‡ï¸� Official:** {'âœ…' if CMD_HELP_BOT[cmd]['info']['official'] else 'â�Œ'}\n"
                    result += f"**âš ï¸� UyarÄ±:** {CMD_HELP_BOT[cmd]['info']['warning']}\n\n"
                else:
                    result += f"**â¬‡ï¸� Official:** {'âœ…' if CMD_HELP_BOT[cmd]['info']['official'] else 'â�Œ'}\n\n"
            else:
                result += f"**â¬‡ï¸� Official:** {'âœ…' if CMD_HELP_BOT[cmd]['info']['official'] else 'â�Œ'}\n"
                if not CMD_HELP_BOT[cmd]['info']['warning'] == '':
                    result += f"**âš ï¸� UyarÄ±:** {CMD_HELP_BOT[cmd]['info']['warning']}\n"
                result += f"**â„¹ï¸� Info:** {CMD_HELP_BOT[cmd]['info']['info']}\n\n"

            command = CMD_HELP_BOT[cmd]['commands'][komut]
            if command['params'] is None:
                result += f"**ðŸ›  Komut:** `{PATTERNS[:1]}{command['command']}`\n"
            else:
                result += f"**ðŸ›  Komut:** `{PATTERNS[:1]}{command['command']} {command['params']}`\n"
                
            if command['example'] is None:
                result += f"**ðŸ’¬ AÃ§Ä±klama:** `{command['usage']}`\n\n"
            else:
                result += f"**ðŸ’¬ AÃ§Ä±klama:** `{command['usage']}`\n"
                result += f"**âŒ¨ï¸� Ã–rnek:** `{PATTERNS[:1]}{command['example']}`\n\n"

            await event.edit(
                result,
                buttons=[custom.Button.inline("â—€ï¸� Geri", data=f"bilgi[{sayfa}]({cmd})")],
                link_preview=False
            )
    except Exception as e:
        print(e)
        LOGS.info(
            "Botunuzda inline desteÄŸi devre dÄ±ÅŸÄ± bÄ±rakÄ±ldÄ±. "
            "EtkinleÅŸtirmek iÃ§in bir bot token tanÄ±mlayÄ±n ve botunuzda inline modunu etkinleÅŸtirin. "
            "EÄŸer bunun dÄ±ÅŸÄ±nda bir sorun olduÄŸunu dÃ¼ÅŸÃ¼nÃ¼yorsanÄ±z bize ulaÅŸÄ±n."
        )

    try:
        bot.loop.run_until_complete(check_botlog_chatid())
    except:
        LOGS.info(
            "BOTLOG_CHATID ortam deÄŸiÅŸkeni geÃ§erli bir varlÄ±k deÄŸildir. "
            "Ortam deÄŸiÅŸkenlerinizi / config.env dosyanÄ±zÄ± kontrol edin."
        )
        quit(1)


# KÃ¼resel DeÄŸiÅŸkenler
SON_GORULME = 0
COUNT_MSG = 0
USERS = {}
BRAIN_CHECKER = []
COUNT_PM = {}
LASTMSG = {}
ENABLE_KILLME = True
ISAFK = False
AFKREASON = None
ZALG_LIST = [[
    "Ì–",
    " Ì—",
    " Ì˜",
    " Ì™",
    " Ìœ",
    " Ì�",
    " Ìž",
    " ÌŸ",
    " Ì ",
    " Ì¤",
    " Ì¥",
    " Ì¦",
    " Ì©",
    " Ìª",
    " Ì«",
    " Ì¬",
    " Ì­",
    " Ì®",
    " Ì¯",
    " Ì°",
    " Ì±",
    " Ì²",
    " Ì³",
    " Ì¹",
    " Ìº",
    " Ì»",
    " Ì¼",
    " Í…",
    " Í‡",
    " Íˆ",
    " Í‰",
    " Í�",
    " ÍŽ",
    " Í“",
    " Í”",
    " Í•",
    " Í–",
    " Í™",
    " Íš",
    " ",
],
    [
    " Ì�", " ÌŽ", " Ì„", " Ì…", " Ì¿", " Ì‘", " Ì†", " Ì�", " Í’", " Í—",
    " Í‘", " Ì‡", " Ìˆ", " ÌŠ", " Í‚", " Íƒ", " Í„", " ÍŠ", " Í‹", " ÍŒ",
    " Ìƒ", " Ì‚", " ÌŒ", " Í�", " Ì�", " Ì‹", " Ì�", " Ì½", " Ì‰", " Í£",
    " Í¤", " Í¥", " Í¦", " Í§", " Í¨", " Í©", " Íª", " Í«", " Í¬", " Í­",
    " Í®", " Í¯", " Ì¾", " Í›", " Í†", " Ìš"
],
    [
    " Ì•",
    " Ì›",
    " Í€",
    " Í�",
    " Í˜",
    " Ì¡",
    " Ì¢",
    " Ì§",
    " Ì¨",
    " Ì´",
    " Ìµ",
    " Ì¶",
    " Íœ",
    " Í�",
    " Íž",
    " ÍŸ",
    " Í ",
    " Í¢",
    " Ì¸",
    " Ì·",
    " Í¡",
]]
